summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2004-06-13 20:20:40 +0000
committerBram Moolenaar <Bram@vim.org>2004-06-13 20:20:40 +0000
commit071d4279d6ab81b7187b48f3a0fc61e587b6db6c (patch)
tree221cbe3c40e043163c06f61c52a7ba2eb41e12ce /runtime
parentb4210b3bc14e2918f153a7307530fbe6eba659e1 (diff)
downloadvim-git-071d4279d6ab81b7187b48f3a0fc61e587b6db6c.tar.gz
updated for version 7.0001v7.0001
Diffstat (limited to 'runtime')
-rw-r--r--runtime/bugreport.vim86
-rw-r--r--runtime/colors/README.txt61
-rw-r--r--runtime/colors/blue.vim77
-rw-r--r--runtime/colors/darkblue.vim62
-rw-r--r--runtime/colors/default.vim23
-rw-r--r--runtime/colors/delek.vim57
-rw-r--r--runtime/colors/desert.vim108
-rw-r--r--runtime/colors/elflord.vim50
-rw-r--r--runtime/colors/evening.vim54
-rw-r--r--runtime/colors/koehler.vim64
-rw-r--r--runtime/colors/morning.vim54
-rw-r--r--runtime/colors/murphy.vim41
-rw-r--r--runtime/colors/pablo.vim26
-rw-r--r--runtime/colors/peachpuff.vim60
-rw-r--r--runtime/colors/ron.vim43
-rw-r--r--runtime/colors/shine.vim60
-rw-r--r--runtime/colors/torte.vim50
-rw-r--r--runtime/colors/zellner.vim54
-rw-r--r--runtime/compiler/README.txt11
-rw-r--r--runtime/compiler/ant.vim38
-rw-r--r--runtime/compiler/bcc.vim19
-rw-r--r--runtime/compiler/bdf.vim30
-rw-r--r--runtime/compiler/checkstyle.vim20
-rw-r--r--runtime/compiler/cs.vim19
-rw-r--r--runtime/compiler/dot.vim15
-rw-r--r--runtime/compiler/fortran_F.vim27
-rw-r--r--runtime/compiler/fortran_cv.vim30
-rw-r--r--runtime/compiler/fortran_elf90.vim33
-rw-r--r--runtime/compiler/fortran_g77.vim48
-rw-r--r--runtime/compiler/fortran_lf95.vim27
-rw-r--r--runtime/compiler/hp_acc.vim28
-rw-r--r--runtime/compiler/icc.vim18
-rw-r--r--runtime/compiler/intel.vim21
-rw-r--r--runtime/compiler/irix5_c.vim21
-rw-r--r--runtime/compiler/irix5_cpp.vim21
-rw-r--r--runtime/compiler/javac.vim18
-rw-r--r--runtime/compiler/jikes.vim18
-rw-r--r--runtime/compiler/mips_c.vim21
-rw-r--r--runtime/compiler/mipspro_c89.vim22
-rw-r--r--runtime/compiler/mipspro_cpp.vim21
-rw-r--r--runtime/compiler/modelsim_vcom.vim20
-rw-r--r--runtime/compiler/msvc.vim17
-rw-r--r--runtime/compiler/neato.vim15
-rw-r--r--runtime/compiler/onsgmls.vim24
-rw-r--r--runtime/compiler/pbx.vim20
-rw-r--r--runtime/compiler/perl.vim39
-rw-r--r--runtime/compiler/pyunit.vim16
-rw-r--r--runtime/compiler/rst.vim33
-rw-r--r--runtime/compiler/ruby.vim62
-rw-r--r--runtime/compiler/se.vim28
-rw-r--r--runtime/compiler/splint.vim70
-rw-r--r--runtime/compiler/tcl.vim18
-rw-r--r--runtime/compiler/tex.vim68
-rw-r--r--runtime/compiler/tidy.vim29
-rw-r--r--runtime/compiler/xmllint.vim29
-rw-r--r--runtime/compiler/xmlwf.vim23
-rw-r--r--runtime/delmenu.vim25
-rwxr-xr-xruntime/doc.infobin0 -> 624 bytes
-rw-r--r--runtime/doc/Makefile363
-rw-r--r--runtime/doc/arabic.txt323
-rw-r--r--runtime/doc/autocmd.txt904
-rw-r--r--runtime/doc/change.txt1425
-rw-r--r--runtime/doc/cmdline.txt992
-rw-r--r--runtime/doc/debugger.txt135
-rw-r--r--runtime/doc/develop.txt384
-rw-r--r--runtime/doc/diff.txt371
-rw-r--r--runtime/doc/digraph.txt322
-rw-r--r--runtime/doc/doctags.c83
-rw-r--r--runtime/doc/editing.txt1432
-rw-r--r--runtime/doc/eval.txt4583
-rw-r--r--runtime/doc/evim.149
-rw-r--r--runtime/doc/farsi.txt269
-rw-r--r--runtime/doc/filetype.txt529
-rw-r--r--runtime/doc/fold.txt581
-rw-r--r--runtime/doc/gui.txt951
-rw-r--r--runtime/doc/gui_w16.txt186
-rw-r--r--runtime/doc/gui_w32.txt472
-rw-r--r--runtime/doc/gui_x11.txt576
-rw-r--r--runtime/doc/hangulin.txt101
-rw-r--r--runtime/doc/hebrew.txt145
-rw-r--r--runtime/doc/help.txt197
-rwxr-xr-xruntime/doc/help.txt.infobin0 -> 582 bytes
-rw-r--r--runtime/doc/howto.txt96
-rw-r--r--runtime/doc/if_cscop.txt474
-rw-r--r--runtime/doc/if_ole.txt162
-rw-r--r--runtime/doc/if_perl.txt258
-rw-r--r--runtime/doc/if_pyth.txt299
-rw-r--r--runtime/doc/if_ruby.txt175
-rw-r--r--runtime/doc/if_sniff.txt95
-rw-r--r--runtime/doc/if_tcl.txt512
-rw-r--r--runtime/doc/indent.txt522
-rw-r--r--runtime/doc/index.txt1423
-rw-r--r--runtime/doc/insert.txt1064
-rw-r--r--runtime/doc/intro.txt890
-rw-r--r--runtime/doc/makehtml.awk780
-rw-r--r--runtime/doc/maketags.awk42
-rw-r--r--runtime/doc/map.txt1094
-rw-r--r--runtime/doc/mbyte.txt1368
-rw-r--r--runtime/doc/message.txt775
-rw-r--r--runtime/doc/mlang.txt205
-rw-r--r--runtime/doc/motion.txt1191
-rw-r--r--runtime/doc/netbeans.txt735
-rw-r--r--runtime/doc/options.txt6826
-rw-r--r--runtime/doc/os_390.txt340
-rw-r--r--runtime/doc/os_amiga.txt139
-rw-r--r--runtime/doc/os_beos.txt348
-rw-r--r--runtime/doc/os_dos.txt295
-rw-r--r--runtime/doc/os_mac.txt98
-rw-r--r--runtime/doc/os_mint.txt39
-rw-r--r--runtime/doc/os_msdos.txt270
-rw-r--r--runtime/doc/os_os2.txt220
-rw-r--r--runtime/doc/os_qnx.txt138
-rw-r--r--runtime/doc/os_risc.txt323
-rw-r--r--runtime/doc/os_unix.txt60
-rw-r--r--runtime/doc/os_vms.txt779
-rw-r--r--runtime/doc/os_win32.txt319
-rw-r--r--runtime/doc/pattern.txt1146
-rw-r--r--runtime/doc/pi_expl.txt215
-rw-r--r--runtime/doc/pi_gzip.txt39
-rw-r--r--runtime/doc/pi_netrw.txt543
-rw-r--r--runtime/doc/pi_spec.txt111
-rw-r--r--runtime/doc/quickfix.txt1010
-rw-r--r--runtime/doc/quickref.txt1325
-rw-r--r--runtime/doc/quotes.txt274
-rw-r--r--runtime/doc/recover.txt165
-rw-r--r--runtime/doc/remote.txt188
-rw-r--r--runtime/doc/repeat.txt529
-rw-r--r--runtime/doc/rileft.txt125
-rw-r--r--runtime/doc/russian.txt83
-rw-r--r--runtime/doc/scroll.txt303
-rw-r--r--runtime/doc/sign.txt191
-rw-r--r--runtime/doc/sponsor.txt229
-rw-r--r--runtime/doc/starting.txt1418
-rw-r--r--runtime/doc/syntax.txt4161
-rw-r--r--runtime/doc/tags6649
-rw-r--r--runtime/doc/tagsrch.txt809
-rw-r--r--runtime/doc/term.txt808
-rw-r--r--runtime/doc/tips.txt445
-rw-r--r--runtime/doc/todo.txt3441
-rw-r--r--runtime/doc/uganda.txt277
-rw-r--r--runtime/doc/undo.txt117
-rw-r--r--runtime/doc/usr_01.txt180
-rw-r--r--runtime/doc/usr_02.txt504
-rw-r--r--runtime/doc/usr_03.txt654
-rw-r--r--runtime/doc/usr_04.txt514
-rw-r--r--runtime/doc/usr_05.txt616
-rw-r--r--runtime/doc/usr_06.txt277
-rw-r--r--runtime/doc/usr_07.txt479
-rw-r--r--runtime/doc/usr_08.txt511
-rw-r--r--runtime/doc/usr_09.txt289
-rw-r--r--runtime/doc/usr_10.txt822
-rw-r--r--runtime/doc/usr_11.txt287
-rw-r--r--runtime/doc/usr_12.txt358
-rw-r--r--runtime/doc/usr_20.txt384
-rw-r--r--runtime/doc/usr_21.txt456
-rw-r--r--runtime/doc/usr_22.txt364
-rw-r--r--runtime/doc/usr_23.txt343
-rw-r--r--runtime/doc/usr_24.txt573
-rw-r--r--runtime/doc/usr_25.txt578
-rw-r--r--runtime/doc/usr_26.txt221
-rw-r--r--runtime/doc/usr_27.txt563
-rw-r--r--runtime/doc/usr_28.txt426
-rw-r--r--runtime/doc/usr_29.txt613
-rw-r--r--runtime/doc/usr_30.txt643
-rw-r--r--runtime/doc/usr_31.txt267
-rw-r--r--runtime/doc/usr_40.txt655
-rw-r--r--runtime/doc/usr_41.txt1724
-rw-r--r--runtime/doc/usr_42.txt365
-rw-r--r--runtime/doc/usr_43.txt172
-rw-r--r--runtime/doc/usr_44.txt719
-rw-r--r--runtime/doc/usr_45.txt419
-rw-r--r--runtime/doc/usr_90.txt498
-rw-r--r--runtime/doc/usr_toc.txt340
-rw-r--r--runtime/doc/various.txt1098
-rw-r--r--runtime/doc/version4.txt355
-rw-r--r--runtime/doc/version5.txt7813
-rw-r--r--runtime/doc/version6.txt13846
-rw-r--r--runtime/doc/version7.txt84
-rw-r--r--runtime/doc/vi_diff.txt884
-rw-r--r--runtime/doc/vim.1541
-rw-r--r--runtime/doc/vim.man420
-rwxr-xr-xruntime/doc/vim.man.infobin0 -> 582 bytes
-rw-r--r--runtime/doc/vim2html.pl229
-rw-r--r--runtime/doc/vimdiff.146
-rw-r--r--runtime/doc/vimdiff.man66
-rw-r--r--runtime/doc/vimtutor.154
-rw-r--r--runtime/doc/vimtutor.man66
-rw-r--r--runtime/doc/visual.txt487
-rw-r--r--runtime/doc/windows.txt1123
-rw-r--r--runtime/doc/workshop.txt98
-rw-r--r--runtime/doc/xxd.1373
-rw-r--r--runtime/doc/xxd.man396
-rw-r--r--runtime/evim.vim66
-rw-r--r--runtime/filetype.vim1737
-rw-r--r--runtime/ftoff.vim11
-rw-r--r--runtime/ftplugin.vim27
-rw-r--r--runtime/ftplugin/README.txt24
-rw-r--r--runtime/ftplugin/aap.vim25
-rw-r--r--runtime/ftplugin/abaqus.vim75
-rw-r--r--runtime/ftplugin/ada.vim226
-rw-r--r--runtime/ftplugin/ant.vim43
-rw-r--r--runtime/ftplugin/art.vim16
-rw-r--r--runtime/ftplugin/aspvbs.vim58
-rw-r--r--runtime/ftplugin/automake.vim11
-rw-r--r--runtime/ftplugin/bib.vim15
-rw-r--r--runtime/ftplugin/c.vim52
-rw-r--r--runtime/ftplugin/ch.vim17
-rw-r--r--runtime/ftplugin/changelog.vim256
-rw-r--r--runtime/ftplugin/config.vim41
-rw-r--r--runtime/ftplugin/cpp.vim12
-rw-r--r--runtime/ftplugin/cs.vim26
-rw-r--r--runtime/ftplugin/csc.vim26
-rw-r--r--runtime/ftplugin/csh.vim47
-rw-r--r--runtime/ftplugin/css.vim20
-rw-r--r--runtime/ftplugin/debchangelog.vim206
-rw-r--r--runtime/ftplugin/dosbatch.vim21
-rw-r--r--runtime/ftplugin/dtd.vim33
-rw-r--r--runtime/ftplugin/fortran.vim114
-rw-r--r--runtime/ftplugin/html.vim40
-rw-r--r--runtime/ftplugin/ishd.vim30
-rw-r--r--runtime/ftplugin/java.vim63
-rw-r--r--runtime/ftplugin/jsp.vim66
-rw-r--r--runtime/ftplugin/kwt.vim20
-rw-r--r--runtime/ftplugin/lisp.vim20
-rw-r--r--runtime/ftplugin/lprolog.vim37
-rw-r--r--runtime/ftplugin/lua.vim36
-rw-r--r--runtime/ftplugin/mail.vim34
-rw-r--r--runtime/ftplugin/make.vim25
-rw-r--r--runtime/ftplugin/man.vim177
-rw-r--r--runtime/ftplugin/mf.vim16
-rw-r--r--runtime/ftplugin/mp.vim7
-rw-r--r--runtime/ftplugin/objc.vim12
-rw-r--r--runtime/ftplugin/ocaml.vim49
-rw-r--r--runtime/ftplugin/occam.vim39
-rw-r--r--runtime/ftplugin/pascal.vim15
-rw-r--r--runtime/ftplugin/perl.vim66
-rw-r--r--runtime/ftplugin/php.vim62
-rw-r--r--runtime/ftplugin/postscr.vim31
-rw-r--r--runtime/ftplugin/pyrex.vim22
-rw-r--r--runtime/ftplugin/python.vim41
-rw-r--r--runtime/ftplugin/rpl.vim22
-rw-r--r--runtime/ftplugin/rst.vim23
-rw-r--r--runtime/ftplugin/ruby.vim14
-rw-r--r--runtime/ftplugin/scheme.vim7
-rw-r--r--runtime/ftplugin/sgml.vim39
-rw-r--r--runtime/ftplugin/sh.vim38
-rw-r--r--runtime/ftplugin/spec.vim168
-rw-r--r--runtime/ftplugin/sql.vim35
-rw-r--r--runtime/ftplugin/svg.vim39
-rw-r--r--runtime/ftplugin/tcsh.vim39
-rw-r--r--runtime/ftplugin/tex.vim112
-rw-r--r--runtime/ftplugin/vb.vim47
-rw-r--r--runtime/ftplugin/verilog.vim45
-rw-r--r--runtime/ftplugin/vim.vim61
-rw-r--r--runtime/ftplugin/xhtml.vim66
-rw-r--r--runtime/ftplugin/xml.vim47
-rw-r--r--runtime/ftplugin/xs.vim12
-rw-r--r--runtime/ftplugin/xsd.vim38
-rw-r--r--runtime/ftplugin/xslt.vim16
-rw-r--r--runtime/ftplugof.vim11
-rw-r--r--runtime/gvimrc_example.vim59
-rw-r--r--runtime/icons.infobin0 -> 624 bytes
-rw-r--r--runtime/indent.vim13
-rw-r--r--runtime/indent/README.txt45
-rw-r--r--runtime/indent/aap.vim7
-rw-r--r--runtime/indent/ada.vim264
-rw-r--r--runtime/indent/ant.vim12
-rw-r--r--runtime/indent/automake.vim11
-rw-r--r--runtime/indent/awk.vim228
-rw-r--r--runtime/indent/c.vim13
-rw-r--r--runtime/indent/cdl.vim129
-rw-r--r--runtime/indent/ch.vim18
-rw-r--r--runtime/indent/config.vim85
-rw-r--r--runtime/indent/cpp.vim13
-rw-r--r--runtime/indent/cs.vim13
-rw-r--r--runtime/indent/css.vim79
-rw-r--r--runtime/indent/docbk.vim13
-rw-r--r--runtime/indent/dylan.vim90
-rw-r--r--runtime/indent/eiffel.vim106
-rw-r--r--runtime/indent/eterm.vim49
-rw-r--r--runtime/indent/fortran.vim161
-rw-r--r--runtime/indent/html.vim219
-rw-r--r--runtime/indent/idlang.vim63
-rw-r--r--runtime/indent/ishd.vim65
-rw-r--r--runtime/indent/java.vim128
-rw-r--r--runtime/indent/lua.vim49
-rw-r--r--runtime/indent/make.vim57
-rw-r--r--runtime/indent/matlab.vim74
-rw-r--r--runtime/indent/mp.vim206
-rw-r--r--runtime/indent/objc.vim79
-rw-r--r--runtime/indent/ocaml.vim311
-rw-r--r--runtime/indent/occam.vim182
-rw-r--r--runtime/indent/perl.vim180
-rw-r--r--runtime/indent/php.vim118
-rw-r--r--runtime/indent/postscr.vim68
-rw-r--r--runtime/indent/pov.vim84
-rw-r--r--runtime/indent/prolog.vim58
-rw-r--r--runtime/indent/pyrex.vim8
-rw-r--r--runtime/indent/python.vim175
-rw-r--r--runtime/indent/readline.vim48
-rw-r--r--runtime/indent/rpl.vim60
-rw-r--r--runtime/indent/rst.vim60
-rw-r--r--runtime/indent/ruby.vim67
-rw-r--r--runtime/indent/sdl.vim89
-rw-r--r--runtime/indent/sh.vim58
-rw-r--r--runtime/indent/tcl.vim123
-rw-r--r--runtime/indent/tcsh.vim51
-rw-r--r--runtime/indent/tilde.vim36
-rw-r--r--runtime/indent/vb.vim72
-rw-r--r--runtime/indent/verilog.vim219
-rw-r--r--runtime/indent/vim.vim65
-rw-r--r--runtime/indent/xf86conf.vim42
-rw-r--r--runtime/indent/xhtml.vim7
-rw-r--r--runtime/indent/xml.vim88
-rw-r--r--runtime/indent/xslt.vim13
-rw-r--r--runtime/indent/yacc.vim44
-rw-r--r--runtime/indent/zsh.vim11
-rw-r--r--runtime/indoff.vim11
-rw-r--r--runtime/keymap/README.txt26
-rw-r--r--runtime/keymap/accents.vim71
-rw-r--r--runtime/keymap/arabic.vim2
-rw-r--r--runtime/keymap/arabic_utf-8.vim86
-rw-r--r--runtime/keymap/czech.vim1
-rw-r--r--runtime/keymap/czech_utf-8.vim78
-rw-r--r--runtime/keymap/esperanto.vim1
-rw-r--r--runtime/keymap/esperanto_utf-8.vim58
-rw-r--r--runtime/keymap/greek.vim7
-rw-r--r--runtime/keymap/greek_cp1253.vim119
-rw-r--r--runtime/keymap/greek_iso-8859-7.vim118
-rw-r--r--runtime/keymap/greek_utf-8.vim600
-rw-r--r--runtime/keymap/hebrew.vim16
-rw-r--r--runtime/keymap/hebrew_cp1255.vim62
-rw-r--r--runtime/keymap/hebrew_iso-8859-8.vim41
-rw-r--r--runtime/keymap/hebrew_utf-8.vim128
-rw-r--r--runtime/keymap/hebrewp.vim16
-rw-r--r--runtime/keymap/hebrewp_cp1255.vim58
-rw-r--r--runtime/keymap/hebrewp_iso-8859-8.vim36
-rw-r--r--runtime/keymap/hebrewp_utf-8.vim122
-rw-r--r--runtime/keymap/lithuanian-baltic.vim31
-rw-r--r--runtime/keymap/magyar_utf-8.vim37
-rw-r--r--runtime/keymap/persian-iranian_utf-8.vim115
-rw-r--r--runtime/keymap/persian.vim8
-rw-r--r--runtime/keymap/pinyin.vim54
-rw-r--r--runtime/keymap/russian-jcuken.vim87
-rw-r--r--runtime/keymap/russian-jcukenwin.vim87
-rw-r--r--runtime/keymap/russian-yawerty.vim79
-rw-r--r--runtime/keymap/serbian-latin.vim1
-rw-r--r--runtime/keymap/serbian-latin_utf-8.vim44
-rw-r--r--runtime/keymap/serbian.vim20
-rw-r--r--runtime/keymap/serbian_cp1250.vim40
-rw-r--r--runtime/keymap/serbian_cp1251.vim90
-rw-r--r--runtime/keymap/serbian_iso-8859-2.vim40
-rw-r--r--runtime/keymap/serbian_iso-8859-5.vim89
-rw-r--r--runtime/keymap/serbian_utf-8.vim93
-rw-r--r--runtime/keymap/slovak.vim16
-rw-r--r--runtime/keymap/slovak_cp1250.vim100
-rw-r--r--runtime/keymap/slovak_iso-8859-2.vim100
-rw-r--r--runtime/keymap/slovak_utf-8.vim100
-rw-r--r--runtime/lang/README.txt64
-rw-r--r--runtime/lang/menu_af.latin1.vim3
-rw-r--r--runtime/lang/menu_af.utf-8.vim3
-rw-r--r--runtime/lang/menu_af_af.latin1.vim152
-rw-r--r--runtime/lang/menu_af_af.utf-8.vim3
-rw-r--r--runtime/lang/menu_ca.latin1.vim3
-rw-r--r--runtime/lang/menu_ca.utf-8.vim7
-rw-r--r--runtime/lang/menu_ca_es.latin1.vim293
-rw-r--r--runtime/lang/menu_ca_es.utf-8.vim7
-rw-r--r--runtime/lang/menu_chinese_gb.936.vim230
-rw-r--r--runtime/lang/menu_chinese_taiwan.950.vim284
-rw-r--r--runtime/lang/menu_cs.cp1250.vim3
-rw-r--r--runtime/lang/menu_cs.latin1.vim3
-rw-r--r--runtime/lang/menu_cs_cz.cp1250.vim3
-rw-r--r--runtime/lang/menu_cs_cz.iso_8859-2.vim245
-rw-r--r--runtime/lang/menu_cs_cz.latin1.vim3
-rw-r--r--runtime/lang/menu_czech_czech_republic.1250.vim245
-rw-r--r--runtime/lang/menu_czech_czech_republic.1252.vim3
-rw-r--r--runtime/lang/menu_czech_czech_republic.ascii.vim245
-rw-r--r--runtime/lang/menu_de.latin1.vim3
-rw-r--r--runtime/lang/menu_de.utf-8.vim3
-rw-r--r--runtime/lang/menu_de_de.latin1.vim279
-rw-r--r--runtime/lang/menu_de_de.utf-8.vim3
-rw-r--r--runtime/lang/menu_en_gb.latin1.vim16
-rw-r--r--runtime/lang/menu_en_gb.utf-8.vim3
-rw-r--r--runtime/lang/menu_english_united_kingdom.1252.vim3
-rw-r--r--runtime/lang/menu_english_united_kingdom.ascii.vim3
-rw-r--r--runtime/lang/menu_es.latin1.vim3
-rw-r--r--runtime/lang/menu_es.utf-8.vim3
-rw-r--r--runtime/lang/menu_es_es.latin1.vim296
-rw-r--r--runtime/lang/menu_es_es.utf-8.vim3
-rw-r--r--runtime/lang/menu_fr.latin1.vim3
-rw-r--r--runtime/lang/menu_fr.utf-8.vim3
-rw-r--r--runtime/lang/menu_fr_fr.latin1.vim444
-rw-r--r--runtime/lang/menu_fr_fr.utf-8.vim3
-rw-r--r--runtime/lang/menu_french_france.1252.vim3
-rw-r--r--runtime/lang/menu_german_germany.1252.vim3
-rw-r--r--runtime/lang/menu_hu.iso_8859-2.vim3
-rw-r--r--runtime/lang/menu_hu.utf-8.vim3
-rw-r--r--runtime/lang/menu_hu_hu.iso_8859-2.vim258
-rw-r--r--runtime/lang/menu_hu_hu.utf-8.vim242
-rw-r--r--runtime/lang/menu_it.latin1.vim3
-rw-r--r--runtime/lang/menu_it.utf-8.vim3
-rw-r--r--runtime/lang/menu_it_it.latin1.vim327
-rw-r--r--runtime/lang/menu_it_it.utf-8.vim3
-rw-r--r--runtime/lang/menu_italian_italy.1252.vim3
-rw-r--r--runtime/lang/menu_ja.cp932.vim5
-rw-r--r--runtime/lang/menu_ja.utf-8.vim4
-rw-r--r--runtime/lang/menu_ja_jp.cp932.vim5
-rw-r--r--runtime/lang/menu_ja_jp.euc-jp.vim315
-rw-r--r--runtime/lang/menu_ja_jp.eucjp.vim6
-rw-r--r--runtime/lang/menu_ja_jp.ujis.vim6
-rw-r--r--runtime/lang/menu_ja_jp.utf-8.vim315
-rw-r--r--runtime/lang/menu_japanese_japan.932.vim315
-rw-r--r--runtime/lang/menu_ko.utf-8.vim3
-rw-r--r--runtime/lang/menu_ko_kr.euckr.vim243
-rw-r--r--runtime/lang/menu_ko_kr.utf-8.vim243
-rw-r--r--runtime/lang/menu_ko_kr.vim5
-rw-r--r--runtime/lang/menu_nl.latin1.vim3
-rw-r--r--runtime/lang/menu_nl.utf-8.vim3
-rw-r--r--runtime/lang/menu_nl_nl.latin1.vim240
-rw-r--r--runtime/lang/menu_nl_nl.utf-8.vim3
-rw-r--r--runtime/lang/menu_no.latin1.vim4
-rw-r--r--runtime/lang/menu_no.utf-8.vim4
-rw-r--r--runtime/lang/menu_no_no.latin1.vim233
-rw-r--r--runtime/lang/menu_no_no.utf-8.vim4
-rw-r--r--runtime/lang/menu_pl.cp1250.vim3
-rw-r--r--runtime/lang/menu_pl_pl.cp1250.vim3
-rw-r--r--runtime/lang/menu_pl_pl.iso_8859-2.vim263
-rw-r--r--runtime/lang/menu_polish_poland.1250.vim259
-rw-r--r--runtime/lang/menu_pt_br.latin1.vim3
-rw-r--r--runtime/lang/menu_pt_br.utf-8.vim3
-rw-r--r--runtime/lang/menu_pt_br.vim265
-rw-r--r--runtime/lang/menu_pt_pt.latin1.vim3
-rw-r--r--runtime/lang/menu_pt_pt.utf-8.vim3
-rw-r--r--runtime/lang/menu_pt_pt.vim264
-rw-r--r--runtime/lang/menu_ru.utf-8.vim3
-rw-r--r--runtime/lang/menu_ru_ru.koi8-r.vim294
-rw-r--r--runtime/lang/menu_ru_ru.utf-8.vim3
-rw-r--r--runtime/lang/menu_ru_ru.vim296
-rw-r--r--runtime/lang/menu_sk.cp1250.vim3
-rw-r--r--runtime/lang/menu_sk_sk.1250.vim6
-rw-r--r--runtime/lang/menu_sk_sk.cp1250.vim3
-rw-r--r--runtime/lang/menu_sk_sk.iso_8859-2.vim232
-rw-r--r--runtime/lang/menu_sk_sk.vim9
-rw-r--r--runtime/lang/menu_slovak_slovak_republic.1250.vim232
-rw-r--r--runtime/lang/menu_spanish_spain.850.vim1
-rw-r--r--runtime/lang/menu_sr.utf-8.vim3
-rw-r--r--runtime/lang/menu_sr_yu.ascii.vim258
-rw-r--r--runtime/lang/menu_sr_yu.iso_8859-2.vim259
-rw-r--r--runtime/lang/menu_sr_yu.iso_8859-5.vim259
-rw-r--r--runtime/lang/menu_sr_yu.utf-8.vim261
-rw-r--r--runtime/lang/menu_sv.latin1.vim3
-rw-r--r--runtime/lang/menu_sv.utf-8.vim3
-rw-r--r--runtime/lang/menu_sv_se.latin1.vim238
-rw-r--r--runtime/lang/menu_sv_se.utf-8.vim3
-rw-r--r--runtime/lang/menu_uk_ua.koi8-u.vim246
-rw-r--r--runtime/lang/menu_zh.big5.vim1
-rw-r--r--runtime/lang/menu_zh.cp936.vim3
-rw-r--r--runtime/lang/menu_zh.cp950.vim3
-rw-r--r--runtime/lang/menu_zh.gb2312.vim3
-rw-r--r--runtime/lang/menu_zh_cn.18030.vim3
-rw-r--r--runtime/lang/menu_zh_cn.cp936.vim3
-rw-r--r--runtime/lang/menu_zh_cn.gb2312.vim230
-rw-r--r--runtime/lang/menu_zh_cn.gbk.vim3
-rw-r--r--runtime/lang/menu_zh_cn.utf-8.vim230
-rw-r--r--runtime/lang/menu_zh_tw.big5.vim1
-rw-r--r--runtime/lang/menu_zh_tw.cp950.vim3
-rw-r--r--runtime/lang/menu_zh_tw.utf-8.vim284
-rwxr-xr-xruntime/macros.infobin0 -> 624 bytes
-rw-r--r--runtime/macros/README.txt22
-rw-r--r--runtime/macros/README.txt.infobin0 -> 734 bytes
-rw-r--r--runtime/macros/dvorak164
-rw-r--r--runtime/macros/hanoi.infobin0 -> 624 bytes
-rw-r--r--runtime/macros/hanoi/click.me14
-rw-r--r--runtime/macros/hanoi/click.me.infobin0 -> 973 bytes
-rw-r--r--runtime/macros/hanoi/hanoi.vim64
-rw-r--r--runtime/macros/hanoi/poster36
-rw-r--r--runtime/macros/hanoi/poster.infobin0 -> 735 bytes
-rw-r--r--runtime/macros/justify.vim316
-rwxr-xr-xruntime/macros/less.sh9
-rw-r--r--runtime/macros/less.vim244
-rw-r--r--runtime/macros/life/click.me9
-rw-r--r--runtime/macros/life/click.me.infobin0 -> 972 bytes
-rw-r--r--runtime/macros/life/life.vim260
-rw-r--r--runtime/macros/matchit.txt402
-rw-r--r--runtime/macros/matchit.vim806
-rw-r--r--runtime/macros/maze.infobin0 -> 624 bytes
-rw-r--r--runtime/macros/maze/Makefile7
-rw-r--r--runtime/macros/maze/README.txt49
-rw-r--r--runtime/macros/maze/README.txt.infobin0 -> 734 bytes
-rw-r--r--runtime/macros/maze/main.aap4
-rw-r--r--runtime/macros/maze/maze.c7
-rw-r--r--runtime/macros/maze/maze_5.7816
-rw-r--r--runtime/macros/maze/maze_5.78.infobin0 -> 972 bytes
-rw-r--r--runtime/macros/maze/maze_mac271
-rw-r--r--runtime/macros/maze/mazeansi.c7
-rw-r--r--runtime/macros/maze/mazeclean.c22
-rw-r--r--runtime/macros/maze/poster37
-rw-r--r--runtime/macros/maze/poster.infobin0 -> 734 bytes
-rw-r--r--runtime/macros/shellmenu.vim94
-rw-r--r--runtime/macros/swapmous.vim22
-rw-r--r--runtime/macros/urm.infobin0 -> 624 bytes
-rw-r--r--runtime/macros/urm/README.txt47
-rw-r--r--runtime/macros/urm/README.txt.infobin0 -> 734 bytes
-rw-r--r--runtime/macros/urm/examples16
-rw-r--r--runtime/macros/urm/urm22
-rw-r--r--runtime/macros/urm/urm.vim5
-rw-r--r--runtime/makemenu.vim468
-rw-r--r--runtime/menu.vim974
-rw-r--r--runtime/mswin.vim115
-rw-r--r--runtime/optwin.vim1193
-rw-r--r--runtime/plugin/README.txt9
-rw-r--r--runtime/plugin/explorer.vim1326
-rw-r--r--runtime/plugin/gzip.vim157
-rw-r--r--runtime/plugin/netrw.vim1160
-rw-r--r--runtime/plugin/rrhelper.vim47
-rw-r--r--runtime/plugin/tohtml.vim27
-rw-r--r--runtime/print/cp1250.ps40
-rw-r--r--runtime/print/cp1251.ps40
-rw-r--r--runtime/print/cp1252.ps40
-rw-r--r--runtime/print/cp1253.ps40
-rw-r--r--runtime/print/cp1254.ps40
-rw-r--r--runtime/print/cp1255.ps40
-rw-r--r--runtime/print/cp1257.ps40
-rw-r--r--runtime/print/dec-mcs.ps40
-rw-r--r--runtime/print/ebcdic-uk.ps40
-rw-r--r--runtime/print/hp-roman8.ps40
-rw-r--r--runtime/print/iso-8859-10.ps40
-rw-r--r--runtime/print/iso-8859-11.ps40
-rw-r--r--runtime/print/iso-8859-13.ps40
-rw-r--r--runtime/print/iso-8859-14.ps40
-rw-r--r--runtime/print/iso-8859-15.ps40
-rw-r--r--runtime/print/iso-8859-2.ps40
-rw-r--r--runtime/print/iso-8859-3.ps40
-rw-r--r--runtime/print/iso-8859-4.ps40
-rw-r--r--runtime/print/iso-8859-5.ps40
-rw-r--r--runtime/print/iso-8859-7.ps40
-rw-r--r--runtime/print/iso-8859-8.ps40
-rw-r--r--runtime/print/iso-8859-9.ps40
-rw-r--r--runtime/print/koi8-r.ps40
-rw-r--r--runtime/print/koi8-u.ps40
-rw-r--r--runtime/print/latin1.ps40
-rw-r--r--runtime/print/mac-roman.ps40
-rw-r--r--runtime/print/prolog.ps40
-rw-r--r--runtime/rgb.txt753
-rw-r--r--runtime/scripts.vim316
-rw-r--r--runtime/synmenu.vim450
-rw-r--r--runtime/syntax/2html.vim411
-rw-r--r--runtime/syntax/README.txt38
-rw-r--r--runtime/syntax/a65.vim166
-rw-r--r--runtime/syntax/aap.vim158
-rw-r--r--runtime/syntax/abaqus.vim48
-rw-r--r--runtime/syntax/abc.vim64
-rw-r--r--runtime/syntax/abel.vim167
-rw-r--r--runtime/syntax/acedb.vim123
-rw-r--r--runtime/syntax/ada.vim287
-rw-r--r--runtime/syntax/aflex.vim100
-rw-r--r--runtime/syntax/ahdl.vim94
-rw-r--r--runtime/syntax/amiga.vim101
-rw-r--r--runtime/syntax/aml.vim157
-rw-r--r--runtime/syntax/ampl.vim150
-rw-r--r--runtime/syntax/ant.vim97
-rw-r--r--runtime/syntax/antlr.vim70
-rw-r--r--runtime/syntax/apache.vim275
-rw-r--r--runtime/syntax/apachestyle.vim65
-rw-r--r--runtime/syntax/arch.vim60
-rw-r--r--runtime/syntax/art.vim44
-rw-r--r--runtime/syntax/asm.vim103
-rw-r--r--runtime/syntax/asm68k.vim391
-rw-r--r--runtime/syntax/asmh8300.vim85
-rw-r--r--runtime/syntax/asn.vim81
-rw-r--r--runtime/syntax/aspperl.vim33
-rw-r--r--runtime/syntax/aspvbs.vim196
-rw-r--r--runtime/syntax/atlas.vim98
-rw-r--r--runtime/syntax/automake.vim79
-rw-r--r--runtime/syntax/ave.vim92
-rw-r--r--runtime/syntax/awk.vim216
-rw-r--r--runtime/syntax/ayacc.vim86
-rw-r--r--runtime/syntax/b.vim142
-rw-r--r--runtime/syntax/baan.vim247
-rw-r--r--runtime/syntax/basic.vim174
-rw-r--r--runtime/syntax/bc.vim78
-rw-r--r--runtime/syntax/bdf.vim86
-rw-r--r--runtime/syntax/bib.vim92
-rw-r--r--runtime/syntax/bindzone.vim98
-rw-r--r--runtime/syntax/blank.vim46
-rw-r--r--runtime/syntax/btm.vim229
-rw-r--r--runtime/syntax/c.vim345
-rw-r--r--runtime/syntax/calendar.vim104
-rw-r--r--runtime/syntax/catalog.vim30
-rw-r--r--runtime/syntax/cdl.vimbin0 -> 3345 bytes
-rw-r--r--runtime/syntax/cf.vim151
-rw-r--r--runtime/syntax/cfg.vim60
-rw-r--r--runtime/syntax/ch.vim53
-rw-r--r--runtime/syntax/change.vim42
-rw-r--r--runtime/syntax/changelog.vim78
-rw-r--r--runtime/syntax/chaskell.vim18
-rw-r--r--runtime/syntax/cheetah.vim60
-rw-r--r--runtime/syntax/chill.vim191
-rw-r--r--runtime/syntax/cl.vim105
-rw-r--r--runtime/syntax/clean.vim94
-rw-r--r--runtime/syntax/clipper.vim143
-rw-r--r--runtime/syntax/cobol.vim177
-rw-r--r--runtime/syntax/colortest.vim65
-rw-r--r--runtime/syntax/conf.vim41
-rw-r--r--runtime/syntax/config.vim57
-rw-r--r--runtime/syntax/cpp.vim62
-rw-r--r--runtime/syntax/crm.vim61
-rw-r--r--runtime/syntax/crontab.vim69
-rw-r--r--runtime/syntax/cs.vim145
-rw-r--r--runtime/syntax/csc.vim199
-rw-r--r--runtime/syntax/csh.vim160
-rw-r--r--runtime/syntax/csp.vim195
-rw-r--r--runtime/syntax/css.vim274
-rw-r--r--runtime/syntax/cterm.vim190
-rw-r--r--runtime/syntax/ctrlh.vim33
-rw-r--r--runtime/syntax/cupl.vim130
-rw-r--r--runtime/syntax/cuplsim.vim80
-rw-r--r--runtime/syntax/cvs.vim43
-rw-r--r--runtime/syntax/cvsrc.vim49
-rw-r--r--runtime/syntax/cweb.vim80
-rw-r--r--runtime/syntax/cynlib.vim91
-rw-r--r--runtime/syntax/cynpp.vim68
-rw-r--r--runtime/syntax/d.vim219
-rw-r--r--runtime/syntax/dcd.vim64
-rw-r--r--runtime/syntax/dcl.vim164
-rw-r--r--runtime/syntax/debchangelog.vim54
-rw-r--r--runtime/syntax/debcontrol.vim70
-rw-r--r--runtime/syntax/def.vim57
-rw-r--r--runtime/syntax/desc.vim100
-rw-r--r--runtime/syntax/desktop.vim119
-rw-r--r--runtime/syntax/diff.vim78
-rw-r--r--runtime/syntax/dircolors.vim106
-rw-r--r--runtime/syntax/diva.vim110
-rw-r--r--runtime/syntax/dns.vim47
-rw-r--r--runtime/syntax/docbk.vim150
-rw-r--r--runtime/syntax/docbksgml.vim7
-rw-r--r--runtime/syntax/docbkxml.vim7
-rw-r--r--runtime/syntax/dosbatch.vim158
-rw-r--r--runtime/syntax/dosini.vim42
-rw-r--r--runtime/syntax/dot.vim110
-rw-r--r--runtime/syntax/dracula.vim85
-rw-r--r--runtime/syntax/dsl.vim38
-rw-r--r--runtime/syntax/dtd.vim181
-rw-r--r--runtime/syntax/dtml.vim225
-rw-r--r--runtime/syntax/dylan.vim109
-rw-r--r--runtime/syntax/dylanintr.vim52
-rw-r--r--runtime/syntax/dylanlid.vim42
-rw-r--r--runtime/syntax/ecd.vim56
-rw-r--r--runtime/syntax/edif.vim64
-rw-r--r--runtime/syntax/eiffel.vim196
-rw-r--r--runtime/syntax/elf.vim95
-rw-r--r--runtime/syntax/elinks.vim207
-rw-r--r--runtime/syntax/elmfilt.vim70
-rw-r--r--runtime/syntax/erlang.vim224
-rw-r--r--runtime/syntax/esqlc.vim75
-rw-r--r--runtime/syntax/eterm.vim200
-rw-r--r--runtime/syntax/exim.vim117
-rw-r--r--runtime/syntax/expect.vim113
-rw-r--r--runtime/syntax/exports.vim70
-rw-r--r--runtime/syntax/fasm.vim145
-rw-r--r--runtime/syntax/fdcc.vim114
-rw-r--r--runtime/syntax/fetchmail.vim88
-rw-r--r--runtime/syntax/fgl.vim147
-rw-r--r--runtime/syntax/focexec.vim101
-rw-r--r--runtime/syntax/form.vim101
-rw-r--r--runtime/syntax/forth.vim235
-rw-r--r--runtime/syntax/fortran.vim526
-rw-r--r--runtime/syntax/foxpro.vim692
-rw-r--r--runtime/syntax/fstab.vim208
-rw-r--r--runtime/syntax/fvwm.vim349
-rw-r--r--runtime/syntax/fvwm2m4.vim43
-rw-r--r--runtime/syntax/gdb.vim111
-rw-r--r--runtime/syntax/gdmo.vim96
-rw-r--r--runtime/syntax/gedcom.vim66
-rw-r--r--runtime/syntax/gkrellmrc.vim91
-rw-r--r--runtime/syntax/gnuplot.vim198
-rw-r--r--runtime/syntax/gp.vim79
-rw-r--r--runtime/syntax/gpg.vim72
-rw-r--r--runtime/syntax/grads.vim86
-rw-r--r--runtime/syntax/groff.vim10
-rw-r--r--runtime/syntax/grub.vim77
-rw-r--r--runtime/syntax/gsp.vim59
-rw-r--r--runtime/syntax/gtkrc.vim142
-rw-r--r--runtime/syntax/haskell.vim193
-rw-r--r--runtime/syntax/hb.vim97
-rw-r--r--runtime/syntax/help.vim187
-rw-r--r--runtime/syntax/hercules.vim133
-rw-r--r--runtime/syntax/hex.vim57
-rw-r--r--runtime/syntax/hitest.vim149
-rw-r--r--runtime/syntax/hog.vim350
-rw-r--r--runtime/syntax/html.vim291
-rw-r--r--runtime/syntax/htmlcheetah.vim32
-rw-r--r--runtime/syntax/htmlm4.vim41
-rw-r--r--runtime/syntax/htmlos.vim166
-rw-r--r--runtime/syntax/ia64.vim312
-rw-r--r--runtime/syntax/icemenu.vim36
-rw-r--r--runtime/syntax/icon.vim212
-rw-r--r--runtime/syntax/idl.vim203
-rw-r--r--runtime/syntax/idlang.vim253
-rw-r--r--runtime/syntax/indent.vim101
-rw-r--r--runtime/syntax/inform.vim408
-rw-r--r--runtime/syntax/inittab.vim75
-rw-r--r--runtime/syntax/ipfilter.vim43
-rw-r--r--runtime/syntax/ishd.vim422
-rw-r--r--runtime/syntax/iss.vim125
-rw-r--r--runtime/syntax/ist.vim70
-rw-r--r--runtime/syntax/jal.vim249
-rw-r--r--runtime/syntax/jam.vim252
-rw-r--r--runtime/syntax/jargon.vim36
-rw-r--r--runtime/syntax/java.vim334
-rw-r--r--runtime/syntax/javacc.vim77
-rw-r--r--runtime/syntax/javascript.vim111
-rw-r--r--runtime/syntax/jess.vim161
-rw-r--r--runtime/syntax/jgraph.vim58
-rw-r--r--runtime/syntax/jproperties.vim148
-rw-r--r--runtime/syntax/jsp.vim84
-rw-r--r--runtime/syntax/kix.vim182
-rw-r--r--runtime/syntax/kscript.vim70
-rw-r--r--runtime/syntax/kwt.vim87
-rw-r--r--runtime/syntax/lace.vim135
-rw-r--r--runtime/syntax/latte.vim98
-rw-r--r--runtime/syntax/ldif.vim43
-rw-r--r--runtime/syntax/lex.vim96
-rw-r--r--runtime/syntax/lftp.vim184
-rw-r--r--runtime/syntax/lhaskell.vim136
-rw-r--r--runtime/syntax/libao.vim46
-rw-r--r--runtime/syntax/lifelines.vim118
-rw-r--r--runtime/syntax/lilo.vim194
-rw-r--r--runtime/syntax/lisp.vim499
-rw-r--r--runtime/syntax/lite.vim181
-rw-r--r--runtime/syntax/logtalk.vim428
-rw-r--r--runtime/syntax/lotos.vim82
-rw-r--r--runtime/syntax/lout.vim139
-rw-r--r--runtime/syntax/lpc.vim455
-rw-r--r--runtime/syntax/lprolog.vim137
-rw-r--r--runtime/syntax/lscript.vim213
-rw-r--r--runtime/syntax/lss.vim133
-rw-r--r--runtime/syntax/lua.vim256
-rw-r--r--runtime/syntax/lynx.vim98
-rw-r--r--runtime/syntax/m4.vim73
-rw-r--r--runtime/syntax/mail.vim92
-rw-r--r--runtime/syntax/mailcap.vim54
-rw-r--r--runtime/syntax/make.vim137
-rw-r--r--runtime/syntax/man.vim67
-rw-r--r--runtime/syntax/manual.vim25
-rw-r--r--runtime/syntax/maple.vim582
-rw-r--r--runtime/syntax/masm.vim144
-rw-r--r--runtime/syntax/mason.vim99
-rw-r--r--runtime/syntax/master.vim50
-rw-r--r--runtime/syntax/matlab.vim109
-rw-r--r--runtime/syntax/mel.vim121
-rw-r--r--runtime/syntax/mf.vim197
-rw-r--r--runtime/syntax/mgp.vim83
-rw-r--r--runtime/syntax/mib.vim77
-rw-r--r--runtime/syntax/mma.vim63
-rw-r--r--runtime/syntax/mmix.vim162
-rw-r--r--runtime/syntax/modconf.vim66
-rw-r--r--runtime/syntax/model.vim59
-rw-r--r--runtime/syntax/modsim3.vim109
-rw-r--r--runtime/syntax/modula2.vim86
-rw-r--r--runtime/syntax/modula3.vim72
-rw-r--r--runtime/syntax/monk.vim228
-rw-r--r--runtime/syntax/moo.vim173
-rw-r--r--runtime/syntax/mp.vim132
-rw-r--r--runtime/syntax/mplayerconf.vim111
-rw-r--r--runtime/syntax/msidl.vim92
-rw-r--r--runtime/syntax/msql.vim100
-rw-r--r--runtime/syntax/mush.vim132
-rw-r--r--runtime/syntax/muttrc.vim248
-rw-r--r--runtime/syntax/mysql.vim296
-rw-r--r--runtime/syntax/named.vim234
-rw-r--r--runtime/syntax/nasm.vim522
-rw-r--r--runtime/syntax/nastran.vim193
-rw-r--r--runtime/syntax/natural.vim205
-rw-r--r--runtime/syntax/ncf.vim258
-rw-r--r--runtime/syntax/nosyntax.vim29
-rw-r--r--runtime/syntax/nqc.vim378
-rw-r--r--runtime/syntax/nroff.vim259
-rw-r--r--runtime/syntax/nsis.vim271
-rw-r--r--runtime/syntax/objc.vim107
-rw-r--r--runtime/syntax/objcpp.vim31
-rw-r--r--runtime/syntax/ocaml.vim317
-rw-r--r--runtime/syntax/occam.vim126
-rw-r--r--runtime/syntax/omnimark.vim123
-rw-r--r--runtime/syntax/openroad.vim266
-rw-r--r--runtime/syntax/opl.vim96
-rw-r--r--runtime/syntax/ora.vim478
-rw-r--r--runtime/syntax/papp.vim92
-rw-r--r--runtime/syntax/pascal.vim357
-rw-r--r--runtime/syntax/pcap.vim65
-rw-r--r--runtime/syntax/pccts.vim106
-rw-r--r--runtime/syntax/perl.vim556
-rw-r--r--runtime/syntax/pf.vim75
-rw-r--r--runtime/syntax/pfmain.vim858
-rw-r--r--runtime/syntax/php.vim513
-rw-r--r--runtime/syntax/phtml.vim244
-rw-r--r--runtime/syntax/pic.vim127
-rw-r--r--runtime/syntax/pike.vim155
-rw-r--r--runtime/syntax/pilrc.vim148
-rw-r--r--runtime/syntax/pine.vim372
-rw-r--r--runtime/syntax/pinfo.vim134
-rw-r--r--runtime/syntax/plm.vim147
-rw-r--r--runtime/syntax/plp.vim45
-rw-r--r--runtime/syntax/plsql.vim277
-rw-r--r--runtime/syntax/po.vim46
-rw-r--r--runtime/syntax/pod.vim81
-rw-r--r--runtime/syntax/postscr.vim783
-rw-r--r--runtime/syntax/pov.vim144
-rw-r--r--runtime/syntax/povini.vim62
-rw-r--r--runtime/syntax/ppd.vim48
-rw-r--r--runtime/syntax/ppwiz.vim97
-rw-r--r--runtime/syntax/procmail.vim67
-rw-r--r--runtime/syntax/progress.vim215
-rw-r--r--runtime/syntax/prolog.vim120
-rw-r--r--runtime/syntax/psf.vim103
-rw-r--r--runtime/syntax/ptcap.vim107
-rw-r--r--runtime/syntax/purifylog.vim119
-rw-r--r--runtime/syntax/pyrex.vim67
-rw-r--r--runtime/syntax/python.vim171
-rw-r--r--runtime/syntax/qf.vim24
-rw-r--r--runtime/syntax/quake.vim162
-rw-r--r--runtime/syntax/r.vim104
-rw-r--r--runtime/syntax/radiance.vim159
-rw-r--r--runtime/syntax/ratpoison.vim249
-rw-r--r--runtime/syntax/rc.vim200
-rw-r--r--runtime/syntax/rcs.vim76
-rw-r--r--runtime/syntax/rcslog.vim38
-rw-r--r--runtime/syntax/readline.vim152
-rw-r--r--runtime/syntax/rebol.vim216
-rw-r--r--runtime/syntax/registry.vim114
-rw-r--r--runtime/syntax/remind.vim64
-rw-r--r--runtime/syntax/resolv.vim85
-rw-r--r--runtime/syntax/rexx.vim113
-rw-r--r--runtime/syntax/rib.vim73
-rw-r--r--runtime/syntax/rnc.vim94
-rw-r--r--runtime/syntax/robots.vim69
-rw-r--r--runtime/syntax/rpcgen.vim63
-rw-r--r--runtime/syntax/rpl.vim491
-rw-r--r--runtime/syntax/rst.vim107
-rw-r--r--runtime/syntax/rtf.vim88
-rw-r--r--runtime/syntax/ruby.vim285
-rw-r--r--runtime/syntax/samba.vim117
-rw-r--r--runtime/syntax/sas.vim236
-rw-r--r--runtime/syntax/sather.vim105
-rw-r--r--runtime/syntax/scheme.vim189
-rw-r--r--runtime/syntax/scilab.vim115
-rw-r--r--runtime/syntax/screen.vim93
-rw-r--r--runtime/syntax/sdl.vim167
-rw-r--r--runtime/syntax/sed.vim122
-rw-r--r--runtime/syntax/sendpr.vim32
-rw-r--r--runtime/syntax/sgml.vim337
-rw-r--r--runtime/syntax/sgmldecl.vim79
-rw-r--r--runtime/syntax/sgmllnx.vim68
-rw-r--r--runtime/syntax/sh.vim538
-rw-r--r--runtime/syntax/sicad.vim413
-rw-r--r--runtime/syntax/simula.vim99
-rw-r--r--runtime/syntax/sinda.vim146
-rw-r--r--runtime/syntax/sindacmp.vim74
-rw-r--r--runtime/syntax/sindaout.vim100
-rw-r--r--runtime/syntax/skill.vim562
-rw-r--r--runtime/syntax/sl.vim120
-rw-r--r--runtime/syntax/slang.vim102
-rw-r--r--runtime/syntax/slice.vim90
-rw-r--r--runtime/syntax/slrnrc.vim194
-rw-r--r--runtime/syntax/slrnsc.vim85
-rw-r--r--runtime/syntax/sm.vim96
-rw-r--r--runtime/syntax/smarty.vim86
-rw-r--r--runtime/syntax/smil.vim154
-rw-r--r--runtime/syntax/smith.vim52
-rw-r--r--runtime/syntax/sml.vim230
-rw-r--r--runtime/syntax/snnsnet.vim77
-rw-r--r--runtime/syntax/snnspat.vim68
-rw-r--r--runtime/syntax/snnsres.vim60
-rw-r--r--runtime/syntax/snobol4.vim93
-rw-r--r--runtime/syntax/spec.vim236
-rw-r--r--runtime/syntax/specman.vim182
-rw-r--r--runtime/syntax/spice.vim87
-rw-r--r--runtime/syntax/splint.vim260
-rw-r--r--runtime/syntax/spup.vim277
-rw-r--r--runtime/syntax/spyce.vim110
-rw-r--r--runtime/syntax/sql.vim89
-rw-r--r--runtime/syntax/sqlforms.vim168
-rw-r--r--runtime/syntax/sqlj.vim100
-rw-r--r--runtime/syntax/sqr.vim295
-rw-r--r--runtime/syntax/squid.vim149
-rw-r--r--runtime/syntax/sshconfig.vim99
-rw-r--r--runtime/syntax/sshdconfig.vim98
-rw-r--r--runtime/syntax/st.vim102
-rw-r--r--runtime/syntax/stp.vim167
-rw-r--r--runtime/syntax/strace.vim66
-rw-r--r--runtime/syntax/svn.vim46
-rw-r--r--runtime/syntax/syncolor.vim85
-rw-r--r--runtime/syntax/synload.vim69
-rw-r--r--runtime/syntax/syntax.vim43
-rw-r--r--runtime/syntax/tads.vim184
-rw-r--r--runtime/syntax/tags.vim47
-rw-r--r--runtime/syntax/tak.vim136
-rw-r--r--runtime/syntax/takcmp.vim82
-rw-r--r--runtime/syntax/takout.vim102
-rw-r--r--runtime/syntax/tasm.vim122
-rw-r--r--runtime/syntax/tcl.vim235
-rw-r--r--runtime/syntax/tcsh.vim188
-rw-r--r--runtime/syntax/terminfo.vim115
-rw-r--r--runtime/syntax/tex.vim480
-rw-r--r--runtime/syntax/texinfo.vim409
-rw-r--r--runtime/syntax/texmf.vim86
-rw-r--r--runtime/syntax/tf.vim209
-rw-r--r--runtime/syntax/tidy.vim153
-rw-r--r--runtime/syntax/tilde.vim41
-rw-r--r--runtime/syntax/tli.vim71
-rw-r--r--runtime/syntax/trasys.vim177
-rw-r--r--runtime/syntax/tsalt.vim214
-rw-r--r--runtime/syntax/tsscl.vim217
-rw-r--r--runtime/syntax/tssgm.vim111
-rw-r--r--runtime/syntax/tssop.vim87
-rw-r--r--runtime/syntax/uc.vim178
-rw-r--r--runtime/syntax/uil.vim85
-rw-r--r--runtime/syntax/valgrind.vim99
-rw-r--r--runtime/syntax/vb.vim273
-rw-r--r--runtime/syntax/verilog.vim134
-rw-r--r--runtime/syntax/vgrindefs.vim61
-rw-r--r--runtime/syntax/vhdl.vim184
-rw-r--r--runtime/syntax/vim.vim642
-rw-r--r--runtime/syntax/viminfo.vim53
-rw-r--r--runtime/syntax/virata.vim219
-rw-r--r--runtime/syntax/vmasm.vim251
-rw-r--r--runtime/syntax/vrml.vim239
-rw-r--r--runtime/syntax/vsejcl.vim49
-rw-r--r--runtime/syntax/wdiff.vim43
-rw-r--r--runtime/syntax/web.vim39
-rw-r--r--runtime/syntax/webmacro.vim82
-rw-r--r--runtime/syntax/wget.vim159
-rw-r--r--runtime/syntax/whitespace.vim13
-rw-r--r--runtime/syntax/winbatch.vim187
-rw-r--r--runtime/syntax/wml.vim172
-rw-r--r--runtime/syntax/wsh.vim45
-rw-r--r--runtime/syntax/wvdial.vim28
-rw-r--r--runtime/syntax/xdefaults.vim145
-rw-r--r--runtime/syntax/xf86conf.vim209
-rw-r--r--runtime/syntax/xhtml.vim11
-rw-r--r--runtime/syntax/xkb.vim91
-rw-r--r--runtime/syntax/xmath.vim235
-rw-r--r--runtime/syntax/xml.vim344
-rw-r--r--runtime/syntax/xmodmap.vim172
-rw-r--r--runtime/syntax/xpm.vim144
-rw-r--r--runtime/syntax/xpm2.vim156
-rw-r--r--runtime/syntax/xs.vim54
-rw-r--r--runtime/syntax/xsd.vim61
-rw-r--r--runtime/syntax/xslt.vim62
-rw-r--r--runtime/syntax/xxd.vim42
-rw-r--r--runtime/syntax/yacc.vim98
-rw-r--r--runtime/syntax/yaml.vim105
-rw-r--r--runtime/syntax/z8a.vim114
-rw-r--r--runtime/syntax/zsh.vim118
-rw-r--r--runtime/termcap135
-rwxr-xr-xruntime/tools.infobin0 -> 624 bytes
-rw-r--r--runtime/tools/README.txt37
-rw-r--r--runtime/tools/blink.c21
-rw-r--r--runtime/tools/ccfilter.193
-rw-r--r--runtime/tools/ccfilter.c326
-rw-r--r--runtime/tools/ccfilter_README.txt91
-rwxr-xr-xruntime/tools/efm_filter.pl39
-rw-r--r--runtime/tools/efm_filter.txt31
-rwxr-xr-xruntime/tools/efm_perl.pl153
-rwxr-xr-xruntime/tools/mve.awk23
-rw-r--r--runtime/tools/mve.txt20
-rwxr-xr-xruntime/tools/pltags.pl300
-rwxr-xr-xruntime/tools/ref11
-rw-r--r--runtime/tools/shtags.161
-rwxr-xr-xruntime/tools/shtags.pl144
-rwxr-xr-xruntime/tools/tcltags159
-rwxr-xr-xruntime/tools/vim13213
-rw-r--r--runtime/tools/vim_vs_net.cmd24
-rwxr-xr-xruntime/tools/vimm6
-rwxr-xr-xruntime/tools/vimspell.sh41
-rw-r--r--runtime/tools/vimspell.txt22
-rw-r--r--runtime/tools/xcmdsrv_client.c584
-rwxr-xr-xruntime/tutor.infobin0 -> 624 bytes
-rw-r--r--runtime/tutor/Makefile15
-rw-r--r--runtime/tutor/README.gr.cp737.txt24
-rw-r--r--runtime/tutor/README.gr.txt24
-rw-r--r--runtime/tutor/README.txt22
-rwxr-xr-xruntime/tutor/README.txt.infobin0 -> 738 bytes
-rw-r--r--runtime/tutor/tutor808
-rw-r--r--runtime/tutor/tutor.ca807
-rw-r--r--runtime/tutor/tutor.de849
-rw-r--r--runtime/tutor/tutor.es769
-rw-r--r--runtime/tutor/tutor.fr809
-rw-r--r--runtime/tutor/tutor.gr815
-rw-r--r--runtime/tutor/tutor.gr.cp737815
-rw-r--r--runtime/tutor/tutor.infobin0 -> 972 bytes
-rw-r--r--runtime/tutor/tutor.it805
-rw-r--r--runtime/tutor/tutor.ja.euc811
-rw-r--r--runtime/tutor/tutor.ja.sjis811
-rw-r--r--runtime/tutor/tutor.ja.utf-8811
-rw-r--r--runtime/tutor/tutor.ko.euc812
-rw-r--r--runtime/tutor/tutor.ko.utf-8812
-rw-r--r--runtime/tutor/tutor.no810
-rw-r--r--runtime/tutor/tutor.pl830
-rw-r--r--runtime/tutor/tutor.pl.cp1250830
-rw-r--r--runtime/tutor/tutor.ru834
-rw-r--r--runtime/tutor/tutor.ru.cp1251834
-rw-r--r--runtime/tutor/tutor.sk821
-rw-r--r--runtime/tutor/tutor.sv830
-rw-r--r--runtime/tutor/tutor.vim119
-rw-r--r--runtime/tutor/tutor.zh.big5852
-rw-r--r--runtime/tutor/tutor.zh.euc851
-rw-r--r--runtime/vim16x16.gifbin0 -> 166 bytes
-rw-r--r--runtime/vim16x16.pngbin0 -> 226 bytes
-rw-r--r--runtime/vim16x16.xpm27
-rw-r--r--runtime/vim32x32.gifbin0 -> 298 bytes
-rw-r--r--runtime/vim32x32.pngbin0 -> 347 bytes
-rw-r--r--runtime/vim32x32.xpm43
-rw-r--r--runtime/vim48x48.gifbin0 -> 504 bytes
-rw-r--r--runtime/vim48x48.pngbin0 -> 474 bytes
-rw-r--r--runtime/vim48x48.xpm59
-rw-r--r--runtime/vimlogo.eps791
-rw-r--r--runtime/vimlogo.gifbin0 -> 1091 bytes
-rw-r--r--runtime/vimlogo.pdfbin0 -> 2254 bytes
-rw-r--r--runtime/vimlogo.xpm75
-rw-r--r--runtime/vimrc_example.vim81
1021 files changed, 224007 insertions, 0 deletions
diff --git a/runtime/bugreport.vim b/runtime/bugreport.vim
new file mode 100644
index 000000000..a6c36b979
--- /dev/null
+++ b/runtime/bugreport.vim
@@ -0,0 +1,86 @@
+:" Use this script to create the file "bugreport.txt", which contains
+:" information about the environment of a possible bug in Vim.
+:"
+:" Maintainer: Bram Moolenaar <Bram@vim.org>
+:" Last change: 2001 Feb 02
+:"
+:" To use inside Vim:
+:" :so $VIMRUNTIME/bugreport.vim
+:" Or, from the command line:
+:" vim -s $VIMRUNTIME/bugreport.vim
+:"
+:" The "if 1" lines are to avoid error messages when expression evaluation is
+:" not compiled in.
+:"
+:if 1
+: let more_save = &more
+:endif
+:set nomore
+:if has("unix")
+: !echo "uname -a" >bugreport.txt
+: !uname -a >>bugreport.txt
+:endif
+:redir >>bugreport.txt
+:version
+:if 1
+: func <SID>CheckDir(n)
+: if isdirectory(a:n)
+: echo 'directory "' . a:n . '" exists'
+: else
+: echo 'directory "' . a:n . '" does NOT exist'
+: endif
+: endfun
+: func <SID>CheckFile(n)
+: if filereadable(a:n)
+: echo '"' . a:n . '" is readable'
+: else
+: echo '"' . a:n . '" is NOT readable'
+: endif
+: endfun
+: echo "--- Directories and Files ---"
+: echo '$VIM = "' . $VIM . '"'
+: call <SID>CheckDir($VIM)
+: echo '$VIMRUNTIME = "' . $VIMRUNTIME . '"'
+: call <SID>CheckDir($VIMRUNTIME)
+: call <SID>CheckFile(&helpfile)
+: call <SID>CheckFile(fnamemodify(&helpfile, ":h") . "/tags")
+: call <SID>CheckFile($VIMRUNTIME . "/menu.vim")
+: call <SID>CheckFile($VIMRUNTIME . "/filetype.vim")
+: call <SID>CheckFile($VIMRUNTIME . "/syntax/synload.vim")
+: delfun <SID>CheckDir
+: delfun <SID>CheckFile
+:endif
+:set all
+:set termcap
+:if has("autocmd")
+: au
+:endif
+:if 1
+: echo "--- Normal/Visual mode mappings ---"
+:endif
+:map
+:if 1
+: echo "--- Insert/Command-line mode mappings ---"
+:endif
+:map!
+:if 1
+: echo "--- Abbreviations ---"
+:endif
+:ab
+:if 1
+: echo "--- Highlighting ---"
+:endif
+:highlight
+:if 1
+: echo "--- Variables ---"
+:endif
+:if 1
+: let
+:endif
+:redir END
+:set more&
+:if 1
+: let &more = more_save
+: unlet more_save
+:endif
+:e bugreport.txt
diff --git a/runtime/colors/README.txt b/runtime/colors/README.txt
new file mode 100644
index 000000000..0bd84842d
--- /dev/null
+++ b/runtime/colors/README.txt
@@ -0,0 +1,61 @@
+README.txt for color scheme files
+
+These files are used for the ":colorscheme" command. They appear in the
+Edit/Color Scheme menu in the GUI.
+
+
+Hints for writing a color scheme file:
+
+There are two basic ways to define a color scheme:
+
+1. Define a new Normal color and set the 'background' option accordingly.
+ set background={light or dark}
+ highlight clear
+ highlight Normal ...
+ ...
+
+2. Use the default Normal color and automatically adjust to the value of
+ 'background'.
+ highlight clear Normal
+ set background&
+ highlight clear
+ if &background == "light"
+ highlight Error ...
+ ...
+ else
+ highlight Error ...
+ ...
+ endif
+
+You can use ":highlight clear" to reset everything to the defaults, and then
+change the groups that you want differently. This also will work for groups
+that are added in later versions of Vim.
+Note that ":highlight clear" uses the value of 'background', thus set it
+before this command.
+Some attributes (e.g., bold) might be set in the defaults that you want
+removed in your color scheme. Use something like "gui=NONE" to remove the
+attributes.
+
+To see which highlight group is used where, find the help for
+"highlight-groups" and "group-name".
+
+You can use ":highlight" to find out the current colors. Exception: the
+ctermfg and ctermbg values are numbers, which are only valid for the current
+terminal. Use the color names instead. See ":help cterm-colors".
+
+The default color settings can be found in the source file src/syntax.c.
+Search for "highlight_init".
+
+If you think you have a color scheme that is good enough to be used by others,
+please check the following items:
+
+- Does it work in a color terminal as well as in the GUI?
+- Is 'background' either used or appropriately set to "light" or "dark"?
+- Try setting 'hlsearch' and searching for a pattern, is the match easy to
+ spot?
+- Split a window with ":split" and ":vsplit". Are the status lines and
+ vertical separators clearly visible?
+- In the GUI, is it easy to find the cursor, also in a file with lots of
+ syntax highlighting?
+- Do not use hard coded escape sequences, these will not work in other
+ terminals. Always use color names or #RRGGBB for the GUI.
diff --git a/runtime/colors/blue.vim b/runtime/colors/blue.vim
new file mode 100644
index 000000000..dcfe3d783
--- /dev/null
+++ b/runtime/colors/blue.vim
@@ -0,0 +1,77 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Steven Vertigan <steven@vertigan.wattle.id.au>
+" Last Change: 2003 May 11
+" Revision #4: Support for new "Underline" group. Removed superfluous html
+" formatting.
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "blue"
+hi Normal guifg=white guibg=darkBlue
+hi Normal ctermfg=white ctermbg=darkBlue
+hi NonText guifg=magenta ctermfg=lightMagenta
+hi comment guifg=gray gui=bold
+hi comment ctermfg=gray
+hi constant guifg=cyan ctermfg=cyan
+hi identifier guifg=gray ctermfg=gray
+hi statement guifg=yellow gui=none ctermfg=yellow
+hi preproc guifg=green ctermfg=green
+hi type guifg=orange ctermfg=darkYellow
+hi special guifg=magenta ctermfg=lightMagenta
+hi Underlined guifg=cyan ctermfg=cyan
+hi Underlined gui=underline cterm=underline
+
+hi ErrorMsg guifg=orange guibg=darkBlue
+hi ErrorMsg ctermfg=lightRed
+hi WarningMsg guifg=cyan guibg=darkBlue gui=bold
+hi WarningMsg ctermfg=cyan
+hi ModeMsg guifg=yellow gui=NONE
+hi ModeMsg ctermfg=yellow
+hi MoreMsg guifg=yellow gui=NONE
+hi MoreMsg ctermfg=yellow
+hi Error guifg=red guibg=darkBlue gui=underline
+hi Error ctermfg=red
+
+hi Todo guifg=black guibg=orange
+hi Todo ctermfg=black ctermbg=darkYellow
+hi Cursor guifg=black guibg=white
+hi Cursor ctermfg=black ctermbg=white
+hi Search guifg=black guibg=orange
+hi Search ctermfg=black ctermbg=darkYellow
+hi IncSearch guifg=black guibg=yellow
+hi IncSearch ctermfg=black ctermbg=darkYellow
+hi LineNr guifg=pink ctermfg=lightMagenta
+hi title guifg=white gui=bold cterm=bold
+
+hi StatusLineNC gui=NONE guifg=black guibg=blue
+hi StatusLineNC ctermfg=black ctermbg=blue
+hi StatusLine gui=bold guifg=cyan guibg=blue
+hi StatusLine ctermfg=cyan ctermbg=blue
+
+hi label guifg=yellow ctermfg=yellow
+hi operator guifg=orange gui=bold ctermfg=darkYellow
+hi clear Visual
+hi Visual term=reverse
+hi Visual ctermfg=black ctermbg=darkCyan
+hi Visual guifg=black guibg=darkCyan
+
+hi DiffChange guibg=darkGreen guifg=black
+hi DiffChange ctermbg=darkGreen ctermfg=black
+hi DiffText guibg=olivedrab guifg=black
+hi DiffText ctermbg=lightGreen ctermfg=black
+hi DiffAdd guibg=slateblue guifg=black
+hi DiffAdd ctermbg=blue ctermfg=black
+hi DiffDelete guibg=coral guifg=black
+hi DiffDelete ctermbg=cyan ctermfg=black
+
+hi Folded guibg=orange guifg=black
+hi Folded ctermbg=yellow ctermfg=black
+hi FoldColumn guibg=gray30 guifg=black
+hi FoldColumn ctermbg=gray ctermfg=black
+hi cIf0 guifg=gray ctermfg=gray
+
diff --git a/runtime/colors/darkblue.vim b/runtime/colors/darkblue.vim
new file mode 100644
index 000000000..9e004d3f6
--- /dev/null
+++ b/runtime/colors/darkblue.vim
@@ -0,0 +1,62 @@
+" Vim color file
+" Maintainer: Bohdan Vlasyuk <bohdan@vstu.edu.ua>
+" Last Change: 2002 Mar 09
+
+" darkblue -- for those who prefer dark background
+" [note: looks bit uglier with come terminal palettes,
+" but is fine on default linux console palette.]
+
+set bg=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "darkblue"
+
+hi Normal guifg=#c0c0c0 guibg=#000040 ctermfg=gray ctermbg=black
+hi ErrorMsg guifg=#ffffff guibg=#287eff ctermfg=white ctermbg=lightblue
+hi Visual guifg=#8080ff guibg=fg gui=reverse ctermfg=lightblue ctermbg=fg cterm=reverse
+hi VisualNOS guifg=#8080ff guibg=fg gui=reverse,underline ctermfg=lightblue ctermbg=fg cterm=reverse,underline
+hi Todo guifg=#d14a14 guibg=#1248d1 ctermfg=red ctermbg=darkblue
+hi Search guifg=#90fff0 guibg=#2050d0 ctermfg=white ctermbg=darkblue cterm=underline term=underline
+hi IncSearch guifg=#b0ffff guibg=#2050d0 ctermfg=darkblue ctermbg=gray
+
+hi SpecialKey guifg=cyan ctermfg=darkcyan
+hi Directory guifg=cyan ctermfg=cyan
+hi Title guifg=magenta gui=none ctermfg=magenta cterm=bold
+hi WarningMsg guifg=red ctermfg=red
+hi WildMenu guifg=yellow guibg=black ctermfg=yellow ctermbg=black cterm=none term=none
+hi ModeMsg guifg=#22cce2 ctermfg=lightblue
+hi MoreMsg ctermfg=darkgreen ctermfg=darkgreen
+hi Question guifg=green gui=none ctermfg=green cterm=none
+hi NonText guifg=#0030ff ctermfg=darkblue
+
+hi StatusLine guifg=blue guibg=darkgray gui=none ctermfg=blue ctermbg=gray term=none cterm=none
+hi StatusLineNC guifg=black guibg=darkgray gui=none ctermfg=black ctermbg=gray term=none cterm=none
+hi VertSplit guifg=black guibg=darkgray gui=none ctermfg=black ctermbg=gray term=none cterm=none
+
+hi Folded guifg=#808080 guibg=#000040 ctermfg=darkgrey ctermbg=black cterm=bold term=bold
+hi FoldColumn guifg=#808080 guibg=#000040 ctermfg=darkgrey ctermbg=black cterm=bold term=bold
+hi LineNr guifg=#90f020 ctermfg=green cterm=none
+
+hi DiffAdd guibg=darkblue ctermbg=darkblue term=none cterm=none
+hi DiffChange guibg=darkmagenta ctermbg=magenta cterm=none
+hi DiffDelete ctermfg=blue ctermbg=cyan gui=bold guifg=Blue guibg=DarkCyan
+hi DiffText cterm=bold ctermbg=red gui=bold guibg=Red
+
+hi Cursor guifg=#000020 guibg=#ffaf38 ctermfg=bg ctermbg=brown
+hi lCursor guifg=#ffffff guibg=#000000 ctermfg=bg ctermbg=darkgreen
+
+
+hi Comment guifg=#80a0ff ctermfg=darkred
+hi Constant ctermfg=magenta guifg=#ffa0a0 cterm=none
+hi Special ctermfg=brown guifg=Orange cterm=none gui=none
+hi Identifier ctermfg=cyan guifg=#40ffff cterm=none
+hi Statement ctermfg=yellow cterm=none guifg=#ffff60 gui=none
+hi PreProc ctermfg=magenta guifg=#ff80ff gui=none cterm=none
+hi type ctermfg=green guifg=#60ff60 gui=none cterm=none
+hi Underlined cterm=underline term=underline
+hi Ignore guifg=bg ctermfg=bg
+
+
diff --git a/runtime/colors/default.vim b/runtime/colors/default.vim
new file mode 100644
index 000000000..70311571d
--- /dev/null
+++ b/runtime/colors/default.vim
@@ -0,0 +1,23 @@
+" Vim color file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jul 23
+
+" This is the default color scheme. It doesn't define the Normal
+" highlighting, it uses whatever the colors used to be.
+
+" Set 'background' back to the default. The value can't always be estimated
+" and is then guessed.
+hi clear Normal
+set bg&
+
+" Remove all existing highlighting and set the defaults.
+hi clear
+
+" Load the syntax highlighting defaults, if it's enabled.
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "default"
+
+" vim: sw=2
diff --git a/runtime/colors/delek.vim b/runtime/colors/delek.vim
new file mode 100644
index 000000000..ac7065095
--- /dev/null
+++ b/runtime/colors/delek.vim
@@ -0,0 +1,57 @@
+" Vim color file
+" Maintainer: David Schweikert <dws@ee.ethz.ch>
+" Last Change: 2004 May 16
+
+" First remove all existing highlighting.
+hi clear
+
+let colors_name = "delek"
+
+hi Normal guifg=Black guibg=white
+
+" Groups used in the 'highlight' and 'guicursor' options default value.
+hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi ModeMsg term=bold cterm=bold gui=bold
+hi VertSplit term=reverse cterm=reverse gui=reverse
+hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey guibg=fg
+hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
+hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
+hi Cursor guibg=Green guifg=NONE
+hi lCursor guibg=Cyan guifg=NONE
+hi Directory term=bold ctermfg=DarkBlue guifg=Blue
+hi LineNr term=underline ctermfg=Brown guifg=Brown
+hi MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen
+hi Question term=standout ctermfg=DarkGreen gui=bold guifg=SeaGreen
+hi Search term=reverse ctermbg=Yellow ctermfg=NONE guibg=Yellow guifg=NONE
+hi SpecialKey term=bold ctermfg=DarkBlue guifg=Blue
+hi Title term=bold ctermfg=DarkMagenta gui=bold guifg=Magenta
+hi WarningMsg term=standout ctermfg=DarkRed guifg=Red
+hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi Folded term=standout ctermbg=Grey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue
+hi FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
+hi DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue
+hi DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta
+hi DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan
+
+hi StatusLine cterm=bold ctermbg=blue ctermfg=yellow guibg=gold guifg=blue
+hi StatusLineNC cterm=bold ctermbg=blue ctermfg=black guibg=gold guifg=blue
+hi NonText term=bold ctermfg=Blue gui=bold guifg=gray guibg=white
+hi Cursor guibg=fg guifg=bg
+
+" syntax highlighting
+hi PreProc term=underline cterm=NONE ctermfg=darkmagenta gui=NONE guifg=magenta3
+hi Identifier term=underline cterm=NONE ctermfg=darkcyan gui=NONE guifg=cyan4
+hi Comment term=NONE cterm=NONE ctermfg=darkred gui=NONE guifg=red2
+hi Constant term=underline cterm=NONE ctermfg=darkgreen gui=NONE guifg=green3
+hi Special term=bold cterm=NONE ctermfg=lightred gui=NONE guifg=deeppink
+hi Statement term=bold cterm=bold ctermfg=blue gui=bold guifg=blue
+hi Type term=underline cterm=NONE ctermfg=blue gui=bold guifg=blue
+
+if exists("syntax_on")
+ let syntax_cmd = "enable"
+ runtime syntax/syncolor.vim
+ unlet syntax_cmd
+endif
+
+" vim: sw=2
diff --git a/runtime/colors/desert.vim b/runtime/colors/desert.vim
new file mode 100644
index 000000000..cdde62b1a
--- /dev/null
+++ b/runtime/colors/desert.vim
@@ -0,0 +1,108 @@
+" Vim color file
+" Maintainer: Hans Fugal <hans@fugal.net>
+" Last Change: $Date$
+" Last Change: $Date$
+" URL: http://hans.fugal.net/vim/colors/desert.vim
+" Version: $Id$
+
+" cool help screens
+" :he group-name
+" :he highlight-groups
+" :he cterm-colors
+
+set background=dark
+if version > 580
+ " no guarantees for version 5.8 and below, but this makes it stop
+ " complaining
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+let g:colors_name="desert"
+
+hi Normal guifg=White guibg=grey20
+
+" highlight groups
+hi Cursor guibg=khaki guifg=slategrey
+"hi CursorIM
+"hi Directory
+"hi DiffAdd
+"hi DiffChange
+"hi DiffDelete
+"hi DiffText
+"hi ErrorMsg
+hi VertSplit guibg=#c2bfa5 guifg=grey50 gui=none
+hi Folded guibg=grey30 guifg=gold
+hi FoldColumn guibg=grey30 guifg=tan
+hi IncSearch guifg=slategrey guibg=khaki
+"hi LineNr
+hi ModeMsg guifg=goldenrod
+hi MoreMsg guifg=SeaGreen
+hi NonText guifg=LightBlue guibg=grey30
+hi Question guifg=springgreen
+hi Search guibg=peru guifg=wheat
+hi SpecialKey guifg=yellowgreen
+hi StatusLine guibg=#c2bfa5 guifg=black gui=none
+hi StatusLineNC guibg=#c2bfa5 guifg=grey50 gui=none
+hi Title guifg=indianred
+hi Visual gui=none guifg=khaki guibg=olivedrab
+"hi VisualNOS
+hi WarningMsg guifg=salmon
+"hi WildMenu
+"hi Menu
+"hi Scrollbar
+"hi Tooltip
+
+" syntax highlighting groups
+hi Comment guifg=SkyBlue
+hi Constant guifg=#ffa0a0
+hi Identifier guifg=palegreen
+hi Statement guifg=khaki
+hi PreProc guifg=indianred
+hi Type guifg=darkkhaki
+hi Special guifg=navajowhite
+"hi Underlined
+hi Ignore guifg=grey40
+"hi Error
+hi Todo guifg=orangered guibg=yellow2
+
+" color terminal definitions
+hi SpecialKey ctermfg=darkgreen
+hi NonText cterm=bold ctermfg=darkblue
+hi Directory ctermfg=darkcyan
+hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1
+hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green
+hi Search cterm=NONE ctermfg=grey ctermbg=blue
+hi MoreMsg ctermfg=darkgreen
+hi ModeMsg cterm=NONE ctermfg=brown
+hi LineNr ctermfg=3
+hi Question ctermfg=green
+hi StatusLine cterm=bold,reverse
+hi StatusLineNC cterm=reverse
+hi VertSplit cterm=reverse
+hi Title ctermfg=5
+hi Visual cterm=reverse
+hi VisualNOS cterm=bold,underline
+hi WarningMsg ctermfg=1
+hi WildMenu ctermfg=0 ctermbg=3
+hi Folded ctermfg=darkgrey ctermbg=NONE
+hi FoldColumn ctermfg=darkgrey ctermbg=NONE
+hi DiffAdd ctermbg=4
+hi DiffChange ctermbg=5
+hi DiffDelete cterm=bold ctermfg=4 ctermbg=6
+hi DiffText cterm=bold ctermbg=1
+hi Comment ctermfg=darkcyan
+hi Constant ctermfg=brown
+hi Special ctermfg=5
+hi Identifier ctermfg=6
+hi Statement ctermfg=3
+hi PreProc ctermfg=5
+hi Type ctermfg=2
+hi Underlined cterm=underline ctermfg=5
+hi Ignore cterm=bold ctermfg=7
+hi Ignore ctermfg=darkgrey
+hi Error cterm=bold ctermfg=7 ctermbg=1
+
+
+"vim: sw=4
diff --git a/runtime/colors/elflord.vim b/runtime/colors/elflord.vim
new file mode 100644
index 000000000..f74a82894
--- /dev/null
+++ b/runtime/colors/elflord.vim
@@ -0,0 +1,50 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "elflord"
+hi Normal guifg=cyan guibg=black
+hi Comment term=bold ctermfg=DarkCyan guifg=#80a0ff
+hi Constant term=underline ctermfg=Magenta guifg=Magenta
+hi Special term=bold ctermfg=DarkMagenta guifg=Red
+hi Identifier term=underline cterm=bold ctermfg=Cyan guifg=#40ffff
+hi Statement term=bold ctermfg=Yellow gui=bold guifg=#aa4444
+hi PreProc term=underline ctermfg=LightBlue guifg=#ff80ff
+hi Type term=underline ctermfg=LightGreen guifg=#60ff60 gui=bold
+hi Function term=bold ctermfg=White guifg=White
+hi Repeat term=underline ctermfg=White guifg=white
+hi Operator ctermfg=Red guifg=Red
+hi Ignore ctermfg=black guifg=bg
+hi Error term=reverse ctermbg=Red ctermfg=White guibg=Red guifg=White
+hi Todo term=standout ctermbg=Yellow ctermfg=Black guifg=Blue guibg=Yellow
+
+" Common groups that link to default highlighting.
+" You can specify other highlighting easily.
+hi link String Constant
+hi link Character Constant
+hi link Number Constant
+hi link Boolean Constant
+hi link Float Number
+hi link Conditional Repeat
+hi link Label Statement
+hi link Keyword Statement
+hi link Exception Statement
+hi link Include PreProc
+hi link Define PreProc
+hi link Macro PreProc
+hi link PreCondit PreProc
+hi link StorageClass Type
+hi link Structure Type
+hi link Typedef Type
+hi link Tag Special
+hi link SpecialChar Special
+hi link Delimiter Special
+hi link SpecialComment Special
+hi link Debug Special
diff --git a/runtime/colors/evening.vim b/runtime/colors/evening.vim
new file mode 100644
index 000000000..e72f00d5d
--- /dev/null
+++ b/runtime/colors/evening.vim
@@ -0,0 +1,54 @@
+" Vim color file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 21
+
+" This color scheme uses a dark grey background.
+
+" First remove all existing highlighting.
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "evening"
+
+hi Normal ctermbg=DarkGrey ctermfg=White guifg=White guibg=grey20
+
+" Groups used in the 'highlight' and 'guicursor' options default value.
+hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi ModeMsg term=bold cterm=bold gui=bold
+hi StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold
+hi StatusLineNC term=reverse cterm=reverse gui=reverse
+hi VertSplit term=reverse cterm=reverse gui=reverse
+hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey guibg=fg
+hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
+hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
+hi Cursor guibg=Green guifg=Black
+hi lCursor guibg=Cyan guifg=Black
+hi Directory term=bold ctermfg=LightCyan guifg=Cyan
+hi LineNr term=underline ctermfg=Yellow guifg=Yellow
+hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
+hi NonText term=bold ctermfg=LightBlue gui=bold guifg=LightBlue guibg=grey30
+hi Question term=standout ctermfg=LightGreen gui=bold guifg=Green
+hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi SpecialKey term=bold ctermfg=LightBlue guifg=Cyan
+hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta
+hi WarningMsg term=standout ctermfg=LightRed guifg=Red
+hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi Folded term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue
+hi FoldColumn term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
+hi DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue
+hi DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta
+hi DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan
+
+" Groups for syntax highlighting
+hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0 guibg=grey5
+hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5
+if &t_Co > 8
+ hi Statement term=bold cterm=bold ctermfg=Yellow guifg=#ffff60 gui=bold
+endif
+hi Ignore ctermfg=DarkGrey guifg=grey20
+
+" vim: sw=2
diff --git a/runtime/colors/koehler.vim b/runtime/colors/koehler.vim
new file mode 100644
index 000000000..1a8800185
--- /dev/null
+++ b/runtime/colors/koehler.vim
@@ -0,0 +1,64 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+hi clear
+set background=dark
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "koehler"
+hi Normal guifg=white guibg=black
+hi Scrollbar guifg=darkcyan guibg=cyan
+hi Menu guifg=black guibg=cyan
+hi SpecialKey term=bold cterm=bold ctermfg=darkred guifg=Blue
+hi NonText term=bold cterm=bold ctermfg=darkred gui=bold guifg=Blue
+hi Directory term=bold cterm=bold ctermfg=brown guifg=Blue
+hi ErrorMsg term=standout cterm=bold ctermfg=grey ctermbg=blue guifg=White guibg=Red
+hi Search term=reverse ctermfg=white ctermbg=red guifg=white guibg=Red
+hi MoreMsg term=bold cterm=bold ctermfg=darkgreen gui=bold guifg=SeaGreen
+hi ModeMsg term=bold cterm=bold gui=bold guifg=White guibg=Blue
+hi LineNr term=underline cterm=bold ctermfg=darkcyan guifg=Yellow
+hi Question term=standout cterm=bold ctermfg=darkgreen gui=bold guifg=Green
+hi StatusLine term=bold,reverse cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
+hi StatusLineNC term=reverse ctermfg=white ctermbg=lightblue guifg=white guibg=blue
+hi Title term=bold cterm=bold ctermfg=darkmagenta gui=bold guifg=Magenta
+hi Visual term=reverse cterm=reverse gui=reverse
+hi WarningMsg term=standout cterm=bold ctermfg=darkblue guifg=Red
+hi Cursor guifg=bg guibg=Green
+hi Comment term=bold cterm=bold ctermfg=cyan guifg=#80a0ff
+hi Constant term=underline cterm=bold ctermfg=magenta guifg=#ffa0a0
+hi Special term=bold cterm=bold ctermfg=red guifg=Orange
+hi Identifier term=underline ctermfg=brown guifg=#40ffff
+hi Statement term=bold cterm=bold ctermfg=yellow gui=bold guifg=#ffff60
+hi PreProc term=underline ctermfg=darkblue guifg=#ff80ff
+hi Type term=underline cterm=bold ctermfg=lightgreen gui=bold guifg=#60ff60
+hi Error term=reverse ctermfg=darkcyan ctermbg=black guifg=Red guibg=Black
+hi Todo term=standout ctermfg=black ctermbg=darkcyan guifg=Blue guibg=Yellow
+hi link IncSearch Visual
+hi link String Constant
+hi link Character Constant
+hi link Number Constant
+hi link Boolean Constant
+hi link Float Number
+hi link Function Identifier
+hi link Conditional Statement
+hi link Repeat Statement
+hi link Label Statement
+hi link Operator Statement
+hi link Keyword Statement
+hi link Exception Statement
+hi link Include PreProc
+hi link Define PreProc
+hi link Macro PreProc
+hi link PreCondit PreProc
+hi link StorageClass Type
+hi link Structure Type
+hi link Typedef Type
+hi link Tag Special
+hi link SpecialChar Special
+hi link Delimiter Special
+hi link SpecialComment Special
+hi link Debug Special
diff --git a/runtime/colors/morning.vim b/runtime/colors/morning.vim
new file mode 100644
index 000000000..bcdaa1d17
--- /dev/null
+++ b/runtime/colors/morning.vim
@@ -0,0 +1,54 @@
+" Vim color file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 21
+
+" This color scheme uses a light grey background.
+
+" First remove all existing highlighting.
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "morning"
+
+hi Normal ctermfg=Black ctermbg=LightGrey guifg=Black guibg=grey90
+
+" Groups used in the 'highlight' and 'guicursor' options default value.
+hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi ModeMsg term=bold cterm=bold gui=bold
+hi StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold
+hi StatusLineNC term=reverse cterm=reverse gui=reverse
+hi VertSplit term=reverse cterm=reverse gui=reverse
+hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey guibg=fg
+hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
+hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
+hi Cursor guibg=Green guifg=NONE
+hi lCursor guibg=Cyan guifg=NONE
+hi Directory term=bold ctermfg=DarkBlue guifg=Blue
+hi LineNr term=underline ctermfg=Brown guifg=Brown
+hi MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen
+hi NonText term=bold ctermfg=Blue gui=bold guifg=Blue guibg=grey80
+hi Question term=standout ctermfg=DarkGreen gui=bold guifg=SeaGreen
+hi Search term=reverse ctermbg=Yellow ctermfg=NONE guibg=Yellow guifg=NONE
+hi SpecialKey term=bold ctermfg=DarkBlue guifg=Blue
+hi Title term=bold ctermfg=DarkMagenta gui=bold guifg=Magenta
+hi WarningMsg term=standout ctermfg=DarkRed guifg=Red
+hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi Folded term=standout ctermbg=Grey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue
+hi FoldColumn term=standout ctermbg=Grey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
+hi DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue
+hi DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta
+hi DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan gui=bold guifg=Blue guibg=LightCyan
+
+" Colors for syntax highlighting
+hi Constant term=underline ctermfg=DarkRed guifg=Magenta guibg=grey95
+hi Special term=bold ctermfg=DarkMagenta guifg=SlateBlue guibg=grey95
+if &t_Co > 8
+ hi Statement term=bold cterm=bold ctermfg=Brown gui=bold guifg=Brown
+endif
+hi Ignore ctermfg=LightGrey guifg=grey90
+
+" vim: sw=2
diff --git a/runtime/colors/murphy.vim b/runtime/colors/murphy.vim
new file mode 100644
index 000000000..1f439964e
--- /dev/null
+++ b/runtime/colors/murphy.vim
@@ -0,0 +1,41 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+hi clear
+set background=dark
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "murphy"
+
+hi Normal ctermbg=Black ctermfg=lightgreen guibg=Black guifg=lightgreen
+hi Comment term=bold ctermfg=LightRed guifg=Orange
+hi Constant term=underline ctermfg=LightGreen guifg=White gui=NONE
+hi Identifier term=underline ctermfg=LightCyan guifg=#00ffff
+hi Ignore ctermfg=black guifg=bg
+hi PreProc term=underline ctermfg=LightBlue guifg=Wheat
+hi Search term=reverse guifg=white guibg=Blue
+hi Special term=bold ctermfg=LightRed guifg=magenta
+hi Statement term=bold ctermfg=Yellow guifg=#ffff00 gui=NONE
+hi Type ctermfg=LightGreen guifg=grey gui=none
+hi Error term=reverse ctermbg=Red ctermfg=White guibg=Red guifg=White
+hi Todo term=standout ctermbg=Yellow ctermfg=Black guifg=Blue guibg=Yellow
+" From the source:
+hi Cursor guifg=Orchid guibg=fg
+hi Directory term=bold ctermfg=LightCyan guifg=Cyan
+hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi LineNr term=underline ctermfg=Yellow guifg=Yellow
+hi ModeMsg term=bold cterm=bold gui=bold
+hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
+hi NonText term=bold ctermfg=Blue gui=bold guifg=Blue
+hi Question term=standout ctermfg=LightGreen gui=bold guifg=Cyan
+hi SpecialKey term=bold ctermfg=LightBlue guifg=Cyan
+hi StatusLine term=reverse,bold cterm=reverse gui=NONE guifg=White guibg=darkblue
+hi StatusLineNC term=reverse cterm=reverse gui=NONE guifg=white guibg=#333333
+hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Pink
+hi WarningMsg term=standout ctermfg=LightRed guifg=Red
+hi Visual term=reverse cterm=reverse gui=NONE guifg=white guibg=darkgreen
diff --git a/runtime/colors/pablo.vim b/runtime/colors/pablo.vim
new file mode 100644
index 000000000..e6bf73704
--- /dev/null
+++ b/runtime/colors/pablo.vim
@@ -0,0 +1,26 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+hi clear
+set background=dark
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "pablo"
+
+highlight Comment ctermfg=8 guifg=#808080
+highlight Constant ctermfg=14 cterm=none guifg=#00ffff gui=none
+highlight Identifier ctermfg=6 guifg=#00c0c0
+highlight Statement ctermfg=3 cterm=bold guifg=#c0c000 gui=bold
+highlight PreProc ctermfg=10 guifg=#00ff00
+highlight Type ctermfg=2 guifg=#00c000
+highlight Special ctermfg=12 guifg=#0000ff
+highlight Error ctermbg=9 guibg=#ff0000
+highlight Todo ctermfg=4 ctermbg=3 guifg=#000080 guibg=#c0c000
+highlight Directory ctermfg=2 guifg=#00c000
+highlight StatusLine ctermfg=11 ctermbg=12 cterm=none guifg=#ffff00 guibg=#0000ff gui=none
+highlight Normal guifg=#ffffff guibg=#000000
+highlight Search ctermbg=3 guibg=#c0c000
diff --git a/runtime/colors/peachpuff.vim b/runtime/colors/peachpuff.vim
new file mode 100644
index 000000000..3c15305b0
--- /dev/null
+++ b/runtime/colors/peachpuff.vim
@@ -0,0 +1,60 @@
+" Vim color file
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003-04-23
+" URL: http://trific.ath.cx/Ftp/vim/colors/peachpuff.vim
+
+" This color scheme uses a peachpuff background (what you've expected when it's
+" called peachpuff?).
+"
+" Note: Only GUI colors differ from default, on terminal it's just `light'.
+
+" First remove all existing highlighting.
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "peachpuff"
+
+hi Normal guibg=PeachPuff guifg=Black
+
+hi SpecialKey term=bold ctermfg=4 guifg=Blue
+hi NonText term=bold cterm=bold ctermfg=4 gui=bold guifg=Blue
+hi Directory term=bold ctermfg=4 guifg=Blue
+hi ErrorMsg term=standout cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi Search term=reverse ctermbg=3 guibg=Gold2
+hi MoreMsg term=bold ctermfg=2 gui=bold guifg=SeaGreen
+hi ModeMsg term=bold cterm=bold gui=bold
+hi LineNr term=underline ctermfg=3 guifg=Red3
+hi Question term=standout ctermfg=2 gui=bold guifg=SeaGreen
+hi StatusLine term=bold,reverse cterm=bold,reverse gui=bold guifg=White guibg=Black
+hi StatusLineNC term=reverse cterm=reverse gui=bold guifg=PeachPuff guibg=Gray45
+hi VertSplit term=reverse cterm=reverse gui=bold guifg=White guibg=Gray45
+hi Title term=bold ctermfg=5 gui=bold guifg=DeepPink3
+hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey80 guibg=fg
+hi VisualNOS term=bold,underline cterm=bold,underline gui=bold,underline
+hi WarningMsg term=standout ctermfg=1 gui=bold guifg=Red
+hi WildMenu term=standout ctermfg=0 ctermbg=3 guifg=Black guibg=Yellow
+hi Folded term=standout ctermfg=4 ctermbg=7 guifg=Black guibg=#e3c1a5
+hi FoldColumn term=standout ctermfg=4 ctermbg=7 guifg=DarkBlue guibg=Gray80
+hi DiffAdd term=bold ctermbg=4 guibg=White
+hi DiffChange term=bold ctermbg=5 guibg=#edb5cd
+hi DiffDelete term=bold cterm=bold ctermfg=4 ctermbg=6 gui=bold guifg=LightBlue guibg=#f6e8d0
+hi DiffText term=reverse cterm=bold ctermbg=1 gui=bold guibg=#ff8060
+hi Cursor guifg=bg guibg=fg
+hi lCursor guifg=bg guibg=fg
+
+" Colors for syntax highlighting
+hi Comment term=bold ctermfg=4 guifg=#406090
+hi Constant term=underline ctermfg=1 guifg=#c00058
+hi Special term=bold ctermfg=5 guifg=SlateBlue
+hi Identifier term=underline ctermfg=6 guifg=DarkCyan
+hi Statement term=bold ctermfg=3 gui=bold guifg=Brown
+hi PreProc term=underline ctermfg=5 guifg=Magenta3
+hi Type term=underline ctermfg=2 gui=bold guifg=SeaGreen
+hi Ignore cterm=bold ctermfg=7 guifg=bg
+hi Error term=reverse cterm=bold ctermfg=7 ctermbg=1 gui=bold guifg=White guibg=Red
+hi Todo term=standout ctermfg=0 ctermbg=3 guifg=Blue guibg=Yellow
+
diff --git a/runtime/colors/ron.vim b/runtime/colors/ron.vim
new file mode 100644
index 000000000..45d64455a
--- /dev/null
+++ b/runtime/colors/ron.vim
@@ -0,0 +1,43 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "ron"
+hi Normal guifg=cyan guibg=black
+hi NonText guifg=brown
+hi comment guifg=green
+hi constant guifg=cyan gui=bold
+hi identifier guifg=cyan gui=NONE
+hi statement guifg=lightblue gui=NONE
+hi preproc guifg=Pink2
+hi type guifg=seagreen gui=bold
+hi special guifg=yellow
+hi ErrorMsg guifg=Black guibg=Red
+hi WarningMsg guifg=Black guibg=Green
+hi Error guibg=Red
+hi Todo guifg=Black guibg=orange
+hi Cursor guibg=#60a060 guifg=#00ff00
+hi Search guibg=lightslateblue
+hi IncSearch gui=NONE guibg=steelblue
+hi LineNr guifg=darkgrey
+hi title guifg=darkgrey
+hi StatusLineNC gui=NONE guifg=lightblue guibg=darkblue
+hi StatusLine gui=bold guifg=cyan guibg=blue
+hi label guifg=gold2
+hi operator guifg=orange
+hi clear Visual
+hi Visual term=reverse cterm=reverse gui=reverse
+hi DiffChange guibg=darkgreen
+hi DiffText guibg=olivedrab
+hi DiffAdd guibg=slateblue
+hi DiffDelete guibg=coral
+hi Folded guibg=gray30
+hi FoldColumn guibg=gray30 guifg=white
+hi cIf0 guifg=gray
diff --git a/runtime/colors/shine.vim b/runtime/colors/shine.vim
new file mode 100644
index 000000000..afc72b30f
--- /dev/null
+++ b/runtime/colors/shine.vim
@@ -0,0 +1,60 @@
+" Vim color file
+" Maintainer: Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
+" Last Change: 2001 May 25
+
+" This look like normal text editor.
+" This color scheme uses a light background.
+
+" First remove all existing highlighting.
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "shine"
+
+hi Normal ctermbg=White ctermfg=Black guifg=Black guibg=White
+
+" Groups used in the 'highlight' and 'guicursor' options default value.
+hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
+hi IncSearch term=reverse cterm=reverse gui=reverse
+hi ModeMsg term=bold cterm=bold gui=bold
+hi StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold
+hi StatusLineNC term=reverse cterm=reverse gui=reverse
+hi VertSplit term=reverse cterm=reverse gui=reverse
+hi Visual term=reverse cterm=reverse gui=reverse guifg=Grey guibg=fg
+hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
+hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
+hi Cursor ctermbg=Green guibg=Green guifg=Black
+hi lCursor guibg=Cyan guifg=Black
+hi Directory term=bold ctermfg=LightRed guifg=Red
+hi LineNr term=underline ctermfg=Yellow guifg=Yellow
+hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
+hi NonText term=bold ctermfg=LightBlue gui=bold guifg=LightBlue guibg=grey90
+hi Question term=standout ctermfg=LightGreen gui=bold guifg=Green
+hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi SpecialKey term=bold ctermfg=LightBlue guifg=Blue
+hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta
+hi WarningMsg term=standout ctermfg=LightRed guifg=Red
+hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
+hi Folded term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue
+hi FoldColumn term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
+hi DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue
+hi DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta
+hi DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan
+
+hi Comment ctermfg=DarkGrey ctermbg=White guifg=DarkGrey gui=bold
+hi SpecialChar ctermfg=DarkGrey ctermbg=White guifg=DarkGrey gui=bold
+hi StorageClass ctermfg=Red ctermbg=White guifg=Red gui=bold
+hi Number ctermfg=LightRed ctermbg=White guifg=LightRed gui=bold
+
+" Groups for syntax highlighting
+hi Constant term=underline ctermfg=Magenta guifg=#a07070 guibg=grey80
+hi Special term=bold ctermfg=LightRed guifg=DarkOrange guibg=grey80
+if &t_Co > 8
+ hi Statement term=bold cterm=bold ctermfg=DarkGreen ctermbg=White guifg=#ffff60 gui=bold
+endif
+hi Ignore ctermfg=LightGrey guifg=grey90
+
+" vim: sw=2
diff --git a/runtime/colors/torte.vim b/runtime/colors/torte.vim
new file mode 100644
index 000000000..65d4b3f89
--- /dev/null
+++ b/runtime/colors/torte.vim
@@ -0,0 +1,50 @@
+" Vim color file
+" Maintainer: Thorsten Maerz <info@netztorte.de>
+" Last Change: 2001 Jul 23
+" grey on black
+" optimized for TFT panels
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+"colorscheme default
+let g:colors_name = "torte"
+
+" hardcoded colors :
+" GUI Comment : #80a0ff = Light blue
+
+" GUI
+highlight Normal guifg=Grey80 guibg=Black
+highlight Search guifg=Black guibg=Red gui=bold
+highlight Visual guifg=Grey25 gui=bold
+highlight Cursor guifg=Black guibg=Green gui=bold
+highlight Special guifg=Orange
+highlight Comment guifg=#80a0ff
+highlight StatusLine guifg=blue guibg=white
+highlight Statement guifg=Yellow gui=NONE
+highlight Type gui=NONE
+
+" Console
+highlight Normal ctermfg=LightGrey ctermbg=Black
+highlight Search ctermfg=Black ctermbg=Red cterm=NONE
+highlight Visual cterm=reverse
+highlight Cursor ctermfg=Black ctermbg=Green cterm=bold
+highlight Special ctermfg=Brown
+highlight Comment ctermfg=Blue
+highlight StatusLine ctermfg=blue ctermbg=white
+highlight Statement ctermfg=Yellow cterm=NONE
+highlight Type cterm=NONE
+
+" only for vim 5
+if has("unix")
+ if v:version<600
+ highlight Normal ctermfg=Grey ctermbg=Black cterm=NONE guifg=Grey80 guibg=Black gui=NONE
+ highlight Search ctermfg=Black ctermbg=Red cterm=bold guifg=Black guibg=Red gui=bold
+ highlight Visual ctermfg=Black ctermbg=yellow cterm=bold guifg=Grey25 gui=bold
+ highlight Special ctermfg=LightBlue cterm=NONE guifg=LightBlue gui=NONE
+ highlight Comment ctermfg=Cyan cterm=NONE guifg=LightBlue gui=NONE
+ endif
+endif
+
diff --git a/runtime/colors/zellner.vim b/runtime/colors/zellner.vim
new file mode 100644
index 000000000..ab875825c
--- /dev/null
+++ b/runtime/colors/zellner.vim
@@ -0,0 +1,54 @@
+" local syntax file - set colors on a per-machine basis:
+" vim: tw=0 ts=4 sw=4
+" Vim color file
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2003 May 02
+
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "zellner"
+
+hi Comment term=bold ctermfg=Red guifg=Red
+hi Normal guifg=black guibg=white
+hi Constant term=underline ctermfg=Magenta guifg=Magenta
+hi Special term=bold ctermfg=Magenta guifg=Magenta
+hi Identifier term=underline ctermfg=Blue guifg=Blue
+hi Statement term=bold ctermfg=DarkRed gui=NONE guifg=Brown
+hi PreProc term=underline ctermfg=Magenta guifg=Purple
+hi Type term=underline ctermfg=Blue gui=NONE guifg=Blue
+hi Visual term=reverse ctermfg=Yellow ctermbg=Red gui=NONE guifg=Black guibg=Yellow
+hi Search term=reverse ctermfg=Black ctermbg=Cyan gui=NONE guifg=Black guibg=Cyan
+hi Tag term=bold ctermfg=DarkGreen guifg=DarkGreen
+hi Error term=reverse ctermfg=15 ctermbg=9 guibg=Red guifg=White
+hi Todo term=standout ctermbg=Yellow ctermfg=Black guifg=Blue guibg=Yellow
+hi StatusLine term=bold,reverse cterm=NONE ctermfg=Yellow ctermbg=DarkGray gui=NONE guifg=Yellow guibg=DarkGray
+hi! link MoreMsg Comment
+hi! link ErrorMsg Visual
+hi! link WarningMsg ErrorMsg
+hi! link Question Comment
+hi link String Constant
+hi link Character Constant
+hi link Number Constant
+hi link Boolean Constant
+hi link Float Number
+hi link Function Identifier
+hi link Conditional Statement
+hi link Repeat Statement
+hi link Label Statement
+hi link Operator Statement
+hi link Keyword Statement
+hi link Exception Statement
+hi link Include PreProc
+hi link Define PreProc
+hi link Macro PreProc
+hi link PreCondit PreProc
+hi link StorageClass Type
+hi link Structure Type
+hi link Typedef Type
+hi link SpecialChar Special
+hi link Delimiter Special
+hi link SpecialComment Special
+hi link Debug Special
diff --git a/runtime/compiler/README.txt b/runtime/compiler/README.txt
new file mode 100644
index 000000000..3f0b97b83
--- /dev/null
+++ b/runtime/compiler/README.txt
@@ -0,0 +1,11 @@
+This directory contains Vim scripts to be used with a specific compiler.
+They are used with the ":compiler" command.
+
+These scripts usually set options, for example 'errorformat'.
+See ":help write-compiler-plugin".
+
+If you want to write your own compiler plugin, have a look at the other files
+for how to do it, the format is simple.
+
+If you think a compiler plugin you have written is useful for others, please
+send it to Bram@vim.org.
diff --git a/runtime/compiler/ant.vim b/runtime/compiler/ant.vim
new file mode 100644
index 000000000..51cd93185
--- /dev/null
+++ b/runtime/compiler/ant.vim
@@ -0,0 +1,38 @@
+" Vim Compiler File
+" Compiler: ant
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 15:01:45 CEST
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "ant"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+CompilerSet makeprg=ant
+
+" first line:
+" ant with jikes +E, which assumes the following
+" two property lines in your 'build.xml':
+"
+" <property name = "build.compiler" value = "jikes"/>
+" <property name = "build.compiler.emacs" value = "true"/>
+"
+" second line:
+" ant with javac
+"
+" note that this will work also for tasks like [wtkbuild]
+"
+setlocal errorformat=\ %#[%.%#]\ %#%f:%l:%v:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
+ \%A\ %#[%.%#]\ %f:%l:\ %m,%-Z\ %#[%.%#]\ %p^,%C\ %#[%.%#]\ %#%m
+
+" ,%-C%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/bcc.vim b/runtime/compiler/bcc.vim
new file mode 100644
index 000000000..5bd284a58
--- /dev/null
+++ b/runtime/compiler/bcc.vim
@@ -0,0 +1,19 @@
+" Vim compiler file
+" Compiler: bcc - Borland C
+" Maintainer: Emile van Raaij (eraaij@xs4all.nl)
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "bcc"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" A workable errorformat for Borland C
+CompilerSet errorformat=%*[^0-9]%n\ %f\ %l:\ %m
+
+" default make
+CompilerSet makeprg=make
diff --git a/runtime/compiler/bdf.vim b/runtime/compiler/bdf.vim
new file mode 100644
index 000000000..ae2da75e1
--- /dev/null
+++ b/runtime/compiler/bdf.vim
@@ -0,0 +1,30 @@
+" Vim compiler file
+" Compiler: BDF to PCF Conversion
+" Maintainer: Nikolai Weibull <sourc@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/compiler/pcp/bdf/
+" Latest Revision: 2004-05-22
+" arch-tag: 2e2f3a55-199b-468c-aa2e-d6b1a7b87806
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "bdf"
+
+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=bdftopcf\ $*
+
+CompilerSet errorformat=%ABDF\ %trror\ on\ line\ %l:\ %m,
+ \%-Z%p^,
+ \%Cbdftopcf:\ bdf\ input\\,\ %f\\,\ corrupt,
+ \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/compiler/checkstyle.vim b/runtime/compiler/checkstyle.vim
new file mode 100644
index 000000000..8d696f050
--- /dev/null
+++ b/runtime/compiler/checkstyle.vim
@@ -0,0 +1,20 @@
+" Vim compiler file
+" Compiler: Checkstyle
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/checkstyle.vim
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "checkstyle"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain
+
+" sample error: WebTable.java:282: '+=' is not preceeded with whitespace.
+" WebTable.java:201:1: '{' should be on the previous line.
+CompilerSet errorformat=%f:%l:\ %m,%f:%l:%v:\ %m,%-G%.%#
diff --git a/runtime/compiler/cs.vim b/runtime/compiler/cs.vim
new file mode 100644
index 000000000..5b75d6d2a
--- /dev/null
+++ b/runtime/compiler/cs.vim
@@ -0,0 +1,19 @@
+" Vim compiler file
+" Compiler: ms C#
+" Maintainer: Joseph H. Yao (hyao@sina.com)
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "cs"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" default errorformat
+CompilerSet errorformat&
+
+" default make
+CompilerSet makeprg=csc\ %
diff --git a/runtime/compiler/dot.vim b/runtime/compiler/dot.vim
new file mode 100644
index 000000000..0327739aa
--- /dev/null
+++ b/runtime/compiler/dot.vim
@@ -0,0 +1,15 @@
+" Vim compiler file
+" Compiler: ATT dot
+" Maintainer: Marcos Macedo <bar4ka@bol.com.br>
+" Last Change: 2004 May 16
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "dot"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=dot\ -T$*\ \"%:p\"\ -o\ \"%:p:r.$*\"
diff --git a/runtime/compiler/fortran_F.vim b/runtime/compiler/fortran_F.vim
new file mode 100644
index 000000000..d9cb47cc1
--- /dev/null
+++ b/runtime/compiler/fortran_F.vim
@@ -0,0 +1,27 @@
+" Vim compiler file
+" Compiler: Fortran Company/NAGWare F compiler
+" URL: http://www.unb.ca/chem/ajit/compiler/fortran_F.vim
+" Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+" Version: 0.2
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "fortran_F"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cposet=&cpoptions
+set cpoptions-=C
+
+CompilerSet errorformat=%trror:\ %f\\,\ line\ %l:%m,
+ \%tarning:\ %f\\,\ line\ %l:%m,
+ \%tatal\ Error:\ %f\\,\ line\ %l:%m,
+ \%-G%.%#
+CompilerSet makeprg=F
+
+let &cpoptions=s:cposet
+unlet s:cposet
diff --git a/runtime/compiler/fortran_cv.vim b/runtime/compiler/fortran_cv.vim
new file mode 100644
index 000000000..089d3b27c
--- /dev/null
+++ b/runtime/compiler/fortran_cv.vim
@@ -0,0 +1,30 @@
+" Vim compiler file
+" Compiler: Compaq Visual Fortran
+" Maintainer: Joh.-G. Simon (johann-guenter.simon@linde-le.com)
+" Last Change: 11/05/2002
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "fortran_cv"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cposet = &cpoptions
+set cpoptions-=C
+
+" A workable errorformat for Compaq Visual Fortran
+CompilerSet errorformat=
+ \%E%f(%l)\ :\ Error:%m,
+ \%W%f(%l)\ :\ Warning:%m,
+ \%-Z%p%^%.%#,
+ \%-G%.%#,
+" Compiler call
+CompilerSet makeprg=df\ /nologo\ /noobj\ /c\ %
+" Visual fortran defaults to printing output on stderr
+" Adjust option shellpipe accordingly
+
+let &cpoptions = s:cposet
+unlet s:cposet
diff --git a/runtime/compiler/fortran_elf90.vim b/runtime/compiler/fortran_elf90.vim
new file mode 100644
index 000000000..34c33cfaf
--- /dev/null
+++ b/runtime/compiler/fortran_elf90.vim
@@ -0,0 +1,33 @@
+" Vim compiler file
+" Compiler: Essential Lahey Fortran 90
+" Probably also works for Lahey Fortran 90
+" URL: http://www.unb.ca/chem/ajit/compiler/fortran_elf90.vim
+" Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+" Version: 0.2
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "fortran_elf90"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cposet=&cpoptions
+set cpoptions-=C
+
+CompilerSet errorformat=\%ALine\ %l\\,\ file\ %f,
+ \%C%tARNING\ --%m,
+ \%C%tATAL\ --%m,
+ \%C%tBORT\ --%m,
+ \%+C%\\l%.%#\.,
+ \%C%p\|,
+ \%C%.%#,
+ \%Z%$,
+ \%-G%.%#
+CompilerSet makeprg=elf90
+
+let &cpoptions=s:cposet
+unlet s:cposet
diff --git a/runtime/compiler/fortran_g77.vim b/runtime/compiler/fortran_g77.vim
new file mode 100644
index 000000000..94018e7f2
--- /dev/null
+++ b/runtime/compiler/fortran_g77.vim
@@ -0,0 +1,48 @@
+" Vim compiler file
+" Compiler: g77 (GNU Fortran)
+" Maintainer: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+" Last Change: $Date$
+" $Revision$
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "fortran_g77"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" Note: The errorformat assumes GNU make
+
+" sample multiline errors (besides gcc backend one-liners):
+" gev.f:14:
+" parameter UPLO = 'Upper-triangle'
+" ^
+" Unsupported VXT statement at (^)
+" gev.f:6:
+" integer desca( * ), descb( * )
+" 1
+" gev.f:19: (continued):
+" end subroutine
+" 2
+" Invalid declaration of or reference to symbol `desca' at (2) [initially seen at (1)]
+
+CompilerSet errorformat=
+ \%Omake:\ %r,
+ \%f:%l:\ warning:\ %m,
+ \%A%f:%l:\ (continued):,
+ \%W%f:%l:\ warning:,
+ \%A%f:%l:\ ,
+ \%-C\ \ \ %p%*[0123456789^]%.%#,
+ \%-C\ \ \ %.%#,
+ \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+ \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+ \%DMaking\ %*\\a\ in\ %f,
+ \%Z%m
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/fortran_lf95.vim b/runtime/compiler/fortran_lf95.vim
new file mode 100644
index 000000000..685fee7b4
--- /dev/null
+++ b/runtime/compiler/fortran_lf95.vim
@@ -0,0 +1,27 @@
+" Vim compiler file
+" Compiler: Lahey/Fujitsu Fortran 95
+" URL: http://www.unb.ca/chem/ajit/compiler/fortran_lf95.vim
+" Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+" Version: 0.2
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "fortran_lf95"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cposet=&cpoptions
+set cpoptions-=C
+
+CompilerSet errorformat=\ %#%n-%t:\ \"%f\"\\,\ line\ %l:%m,
+ \Error\ LINK\.%n:%m,
+ \Warning\ LINK\.%n:%m,
+ \%-G%.%#
+CompilerSet makeprg=lf95
+
+let &cpoptions=s:cposet
+unlet s:cposet
diff --git a/runtime/compiler/hp_acc.vim b/runtime/compiler/hp_acc.vim
new file mode 100644
index 000000000..eaf61b2f1
--- /dev/null
+++ b/runtime/compiler/hp_acc.vim
@@ -0,0 +1,28 @@
+" Vim compiler file
+" Compiler: HP aCC
+" Maintainer: Matthias Ulrich <matthias-ulrich@web.de>
+" URL: http://www.subhome.de/vim/hp_acc.vim
+" Last Change: 2004 Mar 27
+"
+" aCC --version says: "HP ANSI C++ B3910B A.03.13"
+" This compiler has been tested on:
+" hp-ux 10.20, hp-ux 11.0 and hp-ux 11.11 (64bit)
+"
+" Tim Brown's aCC is: "HP ANSI C++ B3910B A.03.33"
+" and it also works fine...
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "hp_acc"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%A%trror\ %n\:\ \"%f\"\\,\ line\ %l\ \#\ %m,
+ \%A%tarning\ %n\:\ \"%f\"\\,\ line\ %l\ \#\ %m\ %#,
+ \%Z\ \ \ \ %p^%.%#,
+ \%-C%.%#
+
+" vim:ts=8:sw=4:cindent
diff --git a/runtime/compiler/icc.vim b/runtime/compiler/icc.vim
new file mode 100644
index 000000000..751fba65c
--- /dev/null
+++ b/runtime/compiler/icc.vim
@@ -0,0 +1,18 @@
+" Vim compiler file
+" Compiler: icc - Intel C++
+" Maintainer: Peter Puck <PtrPck@netscape.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "icc"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" I think that Intel is calling the compiler icl under Windows
+
+CompilerSet errorformat=%-Z%p^,%f(%l):\ remark\ #%n:%m,%f(%l)\ :\ (col.\ %c)\ remark:\ %m,%E%f(%l):\ error:\ %m,%E%f(%l):\ error:\ #%n:\ %m,%W%f(%l):\ warning\ #%n:\ %m,%W%f(%l):\ warning:\ %m,%-C%.%#
+
diff --git a/runtime/compiler/intel.vim b/runtime/compiler/intel.vim
new file mode 100644
index 000000000..918382646
--- /dev/null
+++ b/runtime/compiler/intel.vim
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler: Intel C++ 7.1
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 May 16
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "intel"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%E%f(%l):\ error:\ %m,
+ \%W%f(%l):\ warning:\ %m,
+ \%I%f(%l):\ remark\ #%n:\ %m,
+ \%+C\ \ %m.,
+ \%-Z\ \ %p^,
+ \%-G\\s%#,
+ \%-G%.%#
diff --git a/runtime/compiler/irix5_c.vim b/runtime/compiler/irix5_c.vim
new file mode 100644
index 000000000..87bb9e11d
--- /dev/null
+++ b/runtime/compiler/irix5_c.vim
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler: SGI IRIX 5.3 cc
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "irix5_c"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=\%Ecfe:\ Error:\ %f\\,\ line\ %l:\ %m,
+ \%Wcfe:\ Warning:\ %n:\ %f\\,\ line\ %l:\ %m,
+ \%Wcfe:\ Warning\ %n:\ %f\\,\ line\ %l:\ %m,
+ \%W(%l)\ \ Warning\ %n:\ %m,
+ \%-Z\ %p^,
+ \-G\\s%#,
+ \%-G%.%#
diff --git a/runtime/compiler/irix5_cpp.vim b/runtime/compiler/irix5_cpp.vim
new file mode 100644
index 000000000..f5057682c
--- /dev/null
+++ b/runtime/compiler/irix5_cpp.vim
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler: SGI IRIX 5.3 CC or NCC
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "irix5_cpp"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%E\"%f\"\\,\ line\ %l:\ error(%n):\ ,
+ \%E\"%f\"\\,\ line\ %l:\ error(%n):\ %m,
+ \%W\"%f\"\\,\ line\ %l:\ warning(%n):\ %m,
+ \%+IC++\ prelinker:\ %m,
+ \%-Z\ \ %p%^,
+ \%+C\ %\\{10}%.%#,
+ \%-G%.%#
diff --git a/runtime/compiler/javac.vim b/runtime/compiler/javac.vim
new file mode 100644
index 000000000..296f766d6
--- /dev/null
+++ b/runtime/compiler/javac.vim
@@ -0,0 +1,18 @@
+" Vim compiler file
+" Compiler: javac
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/javac.vim
+" Last Change: 2004 Apr 15
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "javac"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=javac
+
+CompilerSet errorformat=%E%f:%l:\ %m,%-Z%p^,%-C%.%#,%-G%.%#
diff --git a/runtime/compiler/jikes.vim b/runtime/compiler/jikes.vim
new file mode 100644
index 000000000..8566969ac
--- /dev/null
+++ b/runtime/compiler/jikes.vim
@@ -0,0 +1,18 @@
+" Vim Compiler File
+" Compiler: Jikes
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Change: 2004 Mar 27
+" URL: http://mywebpage.netscape.com/sharppeople/vim/compiler
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "jikes"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" Jikes defaults to printing output on stderr
+CompilerSet makeprg=jikes\ -Xstdout\ +E\ \"%\"
+CompilerSet errorformat=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
diff --git a/runtime/compiler/mips_c.vim b/runtime/compiler/mips_c.vim
new file mode 100644
index 000000000..b57eac023
--- /dev/null
+++ b/runtime/compiler/mips_c.vim
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler: SGI IRIX 6.5 MIPS C (cc)
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "mips_c"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Wcc\-%n\ %.%#:\ WARNING\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Icc\-%n\ %.%#:\ REMARK\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%+C\ \ %m.,
+ \%-Z\ \ %p^,
+ \%-G\\s%#,
+ \%-G%.%#
diff --git a/runtime/compiler/mipspro_c89.vim b/runtime/compiler/mipspro_c89.vim
new file mode 100644
index 000000000..258a80043
--- /dev/null
+++ b/runtime/compiler/mipspro_c89.vim
@@ -0,0 +1,22 @@
+" Vim compiler file
+" Compiler: SGI IRIX 6.5 MIPSPro C (c89)
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "mipspro_c89"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Wcc\-%n\ %.%#:\ WARNING\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Icc\-%n\ %.%#:\ REMARK\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%-Z%p%^,
+ \%+C\ %\\{10}%m%.,
+ \%+C\ \ %m,
+ \%-G\\s%#,
+ \%-G%.%#
diff --git a/runtime/compiler/mipspro_cpp.vim b/runtime/compiler/mipspro_cpp.vim
new file mode 100644
index 000000000..1f6074a10
--- /dev/null
+++ b/runtime/compiler/mipspro_cpp.vim
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler: SGI IRIX 6.5 MIPSPro C++ (CC)
+" Maintainer: David Harrison <david_jr@users.sourceforge.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "mipspro_cpp"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Wcc\-%n\ %.%#:\ WARNING\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%Icc\-%n\ %.%#:\ REMARK\ File\ =\ %f\%\\,\ Line\ =\ %l,
+ \%+C\ \ %m.,
+ \%-Z\ \ %p^,
+ \%-G\\s%#,
+ \%-G%.%#
diff --git a/runtime/compiler/modelsim_vcom.vim b/runtime/compiler/modelsim_vcom.vim
new file mode 100644
index 000000000..6aa1bde0b
--- /dev/null
+++ b/runtime/compiler/modelsim_vcom.vim
@@ -0,0 +1,20 @@
+" Vim Compiler File
+" Compiler: Modelsim Vcom
+" Maintainer: Paul Baleme <pbaleme@mail.com>
+" Last Change: September 8, 2003
+" Thanks to: allanherriman@hotmail.com
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "modelsim_vcom"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+"setlocal errorformat=\*\*\ %tRROR:\ %f(%l):\ %m,%tRROR:\ %f(%l):\ %m,%tARNING\[%*[0-9]\]:\ %f(%l):\ %m,\*\*\ %tRROR:\ %m,%tRROR:\ %m,%tARNING\[%*[0-9]\]:\ %m
+
+"setlocal errorformat=%tRROR:\ %f(%l):\ %m,%tARNING\[%*[0-9]\]:\ %m
+CompilerSet errorformat=\*\*\ %tRROR:\ %f(%l):\ %m,\*\*\ %tRROR:\ %m,\*\*\ %tARNING:\ %m,\*\*\ %tOTE:\ %m,%tRROR:\ %f(%l):\ %m,%tARNING\[%*[0-9]\]:\ %f(%l):\ %m,%tRROR:\ %m,%tARNING\[%*[0-9]\]:\ %m
+
diff --git a/runtime/compiler/msvc.vim b/runtime/compiler/msvc.vim
new file mode 100644
index 000000000..5fb1f24b3
--- /dev/null
+++ b/runtime/compiler/msvc.vim
@@ -0,0 +1,17 @@
+" Vim compiler file
+" Compiler: Miscrosoft Visual C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Mar 19
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "msvc"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" The errorformat for MSVC is the default.
+CompilerSet errorformat&
+CompilerSet makeprg=nmake
diff --git a/runtime/compiler/neato.vim b/runtime/compiler/neato.vim
new file mode 100644
index 000000000..bd184b7f6
--- /dev/null
+++ b/runtime/compiler/neato.vim
@@ -0,0 +1,15 @@
+" Vim compiler file
+" Compiler: ATT neato
+" Maintainer: Marcos Macedo <bar4ka@bol.com.br>
+" Last Change: 2004 May 16
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "neato"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=neato\ -T$*\ \"%:p\"\ -o\ \"%:p:r.$*\"
diff --git a/runtime/compiler/onsgmls.vim b/runtime/compiler/onsgmls.vim
new file mode 100644
index 000000000..130d3e21b
--- /dev/null
+++ b/runtime/compiler/onsgmls.vim
@@ -0,0 +1,24 @@
+" Vim compiler file
+" Compiler: onsgmls
+" Maintainer: Robert Rowsome <rowsome@wam.umd.edu>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "onsgmls"
+
+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=onsgmls\ -s\ %
+
+CompilerSet errorformat=onsgmls:%f:%l:%c:%t:%m,
+ \onsgmls:%f:%l:%c:%m
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/pbx.vim b/runtime/compiler/pbx.vim
new file mode 100644
index 000000000..9e81ea735
--- /dev/null
+++ b/runtime/compiler/pbx.vim
@@ -0,0 +1,20 @@
+" Vim compiler file
+" Compiler: Apple Project Builder
+" Maintainer: Alexander von Below (public@vonBelow.Com)
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "pbx"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" The compiler actually is gcc, so the errorformat is unchanged
+CompilerSet errorformat&
+
+" default make
+CompilerSet makeprg=pbxbuild
+
diff --git a/runtime/compiler/perl.vim b/runtime/compiler/perl.vim
new file mode 100644
index 000000000..1d30472bb
--- /dev/null
+++ b/runtime/compiler/perl.vim
@@ -0,0 +1,39 @@
+" Vim Compiler File
+" Compiler: Perl syntax checks (perl -Wc)
+" Maintainer: Christian J. Robinson <infynity@onewest.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "perl"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:savecpo = &cpo
+set cpo&vim
+
+if getline(1) =~# '-[^ ]*T'
+ CompilerSet makeprg=perl\ -WTc\ %
+else
+ CompilerSet makeprg=perl\ -Wc\ %
+endif
+
+CompilerSet errorformat=
+ \%-G%.%#had\ compilation\ errors.,
+ \%-G%.%#syntax\ OK,
+ \%m\ at\ %f\ line\ %l.,
+ \%+A%.%#\ at\ %f\ line\ %l\\,%.%#,
+ \%+C%.%#
+
+" Explanation:
+" %-G%.%#had\ compilation\ errors., - Ignore the obvious.
+" %-G%.%#syntax\ OK, - Don't include the 'a-okay' message.
+" %m\ at\ %f\ line\ %l., - Most errors...
+" %+A%.%#\ at\ %f\ line\ %l\\,%.%#, - As above, including ', near ...'
+" %+C%.%# - ... Which can be multi-line.
+
+let &cpo = s:savecpo
+unlet s:savecpo
diff --git a/runtime/compiler/pyunit.vim b/runtime/compiler/pyunit.vim
new file mode 100644
index 000000000..2a4ea92b6
--- /dev/null
+++ b/runtime/compiler/pyunit.vim
@@ -0,0 +1,16 @@
+" Vim compiler file
+" Compiler: Unit testing tool for Python
+" Maintainer: Max Ischenko <mfi@ukr.net>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "pyunit"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
+
diff --git a/runtime/compiler/rst.vim b/runtime/compiler/rst.vim
new file mode 100644
index 000000000..c9e5be186
--- /dev/null
+++ b/runtime/compiler/rst.vim
@@ -0,0 +1,33 @@
+" Vim compiler file
+" Compiler: reStructuredText Documentation Format
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/compiler/pcp/rst/
+" Latest Revision: 2004-05-22
+" arch-tag: ac64a95a-5d45-493d-a9f9-f96fc8568657
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "rst"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet errorformat=
+ \%f:%l:\ (%tEBUG/0)\ %m,
+ \%f:%l:\ (%tNFO/1)\ %m,
+ \%f:%l:\ (%tARNING/2)\ %m,
+ \%f:%l:\ (%tRROR/3)\ %m,
+ \%f:%l:\ (%tEVERE/3)\ %m,
+ \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+ \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+ \%DMaking\ %*\\a\ in\ %f
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/compiler/ruby.vim b/runtime/compiler/ruby.vim
new file mode 100644
index 000000000..f124ed3a3
--- /dev/null
+++ b/runtime/compiler/ruby.vim
@@ -0,0 +1,62 @@
+" Vim compiler file
+" Compiler: Ruby syntax check and/or error reporting
+" Maintainer: Tim Hammerquist <timmy@cpan.org>
+" Last Change: Tue Jul 16 00:38:00 PDT 2002
+"
+" 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@mugca.its.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
+endif
+let current_compiler = "ruby"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" default settings runs script normally
+" add '-c' switch to run syntax check only:
+"
+" CompilerSet makeprg=ruby\ -wc\ $*
+"
+" or add '-c' at :make command line:
+"
+" :make -c %<CR>
+"
+CompilerSet makeprg=ruby\ -w\ $*
+
+CompilerSet errorformat=
+ \%+E%f:%l:\ parse\ error,
+ \%W%f:%l:\ warning:\ %m,
+ \%E%f:%l:in\ %*[^:]:\ %m,
+ \%E%f:%l:\ %m,
+ \%-C%\tfrom\ %f:%l:in\ %.%#,
+ \%-Z%\tfrom\ %f:%l,
+ \%-Z%p^,
+ \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ft=vim
diff --git a/runtime/compiler/se.vim b/runtime/compiler/se.vim
new file mode 100644
index 000000000..ac0aab805
--- /dev/null
+++ b/runtime/compiler/se.vim
@@ -0,0 +1,28 @@
+" Vim compiler file
+" Compiler: se (SmartEiffel Compiler)
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/se.vim
+" Last Change: 2004 May 16
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "se"
+
+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=compile\ %
+
+CompilerSet errorformat=%W******\ Warning:\ %m,
+ \%E******\ Fatal\ Error:\ %m,
+ \%E******\ Error:\ %m,
+ \%CLine\ %l\ column\ %c\ in\ %\\w%\\+\ (%f)\ :,
+ \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/splint.vim b/runtime/compiler/splint.vim
new file mode 100644
index 000000000..8ba9c974e
--- /dev/null
+++ b/runtime/compiler/splint.vim
@@ -0,0 +1,70 @@
+" Vim compiler file
+" Compiler: splint/lclint (C source code checker)
+" Maintainer: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+" Splint Home: http://www.splint.org/
+" Last Change: $Date$
+" $Revision$
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "splint"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+" adapt this if you want to check more than one file at a time.
+" put command line options in .splintrc or ~/.splintrc
+CompilerSet makeprg=splint\ %
+
+" Note: when using the new array bounds checking flags: Each warning
+" usually has several lines and several references to source code mostly
+" within one or two lines (see sample warning below). The easiest way
+" not to mess up file name detection and not to jump to all positions is
+" to add something like
+" -linelen 500 +boundscompacterrormessages
+" to your .splintrc and 'set cmdheight=4' or more.
+" TODO: reliable way to distinguish file names and constraints.
+"
+" sample warning (generic):
+"
+"foo.c:1006:12: Clauses exit with var referencing local storage in one
+" case, fresh storage in other case
+" foo.c:1003:2: Fresh storage var allocated
+"
+" sample warning (bounds checking):
+"
+"bounds.c: (in function updateEnv)
+"bounds.c:10:5: Possible out-of-bounds store:
+" strcpy(str, tmp)
+" Unable to resolve constraint:
+" requires maxSet(str @ bounds.c:10:13) >= maxRead(getenv("MYENV") @
+" bounds.c:6:9)
+" needed to satisfy precondition:
+" requires maxSet(str @ bounds.c:10:13) >= maxRead(tmp @ bounds.c:10:18)
+" derived from strcpy precondition: requires maxSet(<parameter 1>) >=
+" maxRead(<parameter 2>)
+" A memory write may write to an address beyond the allocated buffer. (Use
+" -boundswrite to inhibit warning)
+
+CompilerSet errorformat=%OLCLint*m,
+ \%OSplint*m,
+ \%*[\ ]%f:%l:%c:\ %m,
+ \%*[\ ]%f:%l:\ %m,
+ \%*[^\"]\"%f\"%*\\D%l:\ %m,
+ \\"%f\"%*\\D%l:\ %m,
+ \%A%f:%l:%c:\ %m,
+ \%A%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,
+ \%C\ \ %m
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/tcl.vim b/runtime/compiler/tcl.vim
new file mode 100644
index 000000000..76d3edf12
--- /dev/null
+++ b/runtime/compiler/tcl.vim
@@ -0,0 +1,18 @@
+" Vim compiler file
+" Compiler: tcl
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/tcl.vim
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "tcl"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=tcl
+
+CompilerSet errorformat=%EError:\ %m,%+Z\ %\\{4}(file\ \"%f\"\ line\ %l),%-G%.%#
diff --git a/runtime/compiler/tex.vim b/runtime/compiler/tex.vim
new file mode 100644
index 000000000..5828a91ab
--- /dev/null
+++ b/runtime/compiler/tex.vim
@@ -0,0 +1,68 @@
+" Vim compiler file
+" Compiler: TeX
+" Maintainer: Artem Chuprina <ran@ran.pp.ru>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" If makefile exists and we are not asked to ignore it, we use standard make
+" (do not redefine makeprg)
+if exists('b:tex_ignore_makefile') || exists('g:tex_ignore_makefile') ||
+ \(!filereadable('Makefile') && !filereadable('makefile'))
+ " If buffer-local variable 'tex_flavor' exists, it defines TeX flavor,
+ " otherwize the same for global variable with same name, else it will be
+ " LaTeX
+ if exists("b:tex_flavor")
+ let current_compiler = b:tex_flavor
+ elseif exists("g:tex_flavor")
+ let current_compiler = g:tex_flavor
+ else
+ let current_compiler = "latex"
+ endif
+ let &l:makeprg=current_compiler.' -interaction=nonstopmode'
+else
+ 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,
+ \%E!\ %m,
+ \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,
+ \%+W%.%#\ at\ lines\ %l--%*\\d,
+ \%WLaTeX\ %.%#Warning:\ %m,
+ \%Cl.%l\ %m,
+ \%+C\ \ %m.,
+ \%+C%.%#-%.%#,
+ \%+C%.%#[]%.%#,
+ \%+C[]%.%#,
+ \%+C%.%#%[{}\\]%.%#,
+ \%+C<%.%#>%.%#,
+ \%C\ \ %m,
+ \%-GSee\ the\ LaTeX%m,
+ \%-GType\ \ H\ <return>%m,
+ \%-G\ ...%.%#,
+ \%-G%.%#\ (C)\ %.%#,
+ \%-G(see\ the\ transcript%.%#),
+ \%-G\\s%#,
+ \%+O(%*[^()])%r,
+ \%+O%*[^()](%*[^()])%r,
+ \%+P(%f%r,
+ \%+P\ %\\=(%f%r,
+ \%+P%*[^()](%f%r,
+ \%+P[%\\d%[^()]%#(%f%r,
+ \%+Q)%r,
+ \%+Q%*[^()])%r,
+ \%+Q[%\\d%*[^()])%r
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/tidy.vim b/runtime/compiler/tidy.vim
new file mode 100644
index 000000000..36416ebfc
--- /dev/null
+++ b/runtime/compiler/tidy.vim
@@ -0,0 +1,29 @@
+" Vim compiler file
+" Compiler: HTML Tidy
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/tidy.vim
+" Last Change: 2004 Mar 27
+
+" NOTE: set 'tidy_compiler_040800' if you are using the 4th August 2000 release
+" of HTML Tidy.
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "tidy"
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+" this is needed to work around a bug in the 04/08/00 release of tidy which
+" failed to set the filename if the -quiet option was used
+if exists("tidy_compiler_040800")
+ CompilerSet makeprg=tidy\ -errors\ --gnu-emacs\ yes\ %
+else
+ CompilerSet makeprg=tidy\ -quiet\ -errors\ --gnu-emacs\ yes\ %
+endif
+
+" sample warning: foo.html:8:1: Warning: inserting missing 'foobar' element
+" sample error: foo.html:9:2: Error: <foobar> is not recognized!
+CompilerSet errorformat=%f:%l:%c:\ Error:%m,%f:%l:%c:\ Warning:%m,%-G%.%#
diff --git a/runtime/compiler/xmllint.vim b/runtime/compiler/xmllint.vim
new file mode 100644
index 000000000..b7110c719
--- /dev/null
+++ b/runtime/compiler/xmllint.vim
@@ -0,0 +1,29 @@
+" Vim compiler file
+" Compiler: xmllint
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/compiler/xmllint.vim
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "xmllint"
+
+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=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,
+ \%-Z%p^,
+ \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/compiler/xmlwf.vim b/runtime/compiler/xmlwf.vim
new file mode 100644
index 000000000..cd2e2bb6a
--- /dev/null
+++ b/runtime/compiler/xmlwf.vim
@@ -0,0 +1,23 @@
+" Vim Compiler File
+" Compiler: xmlwf
+" Maintainer: Robert Rowsome <rowsome@wam.umd.edu>
+" Last Change: 2004 Mar 27
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "xmlwf"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2 " older Vim always used :setlocal
+ command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=xmlwf\ %
+
+CompilerSet errorformat=%f:%l%c:%m
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/delmenu.vim b/runtime/delmenu.vim
new file mode 100644
index 000000000..81df87d34
--- /dev/null
+++ b/runtime/delmenu.vim
@@ -0,0 +1,25 @@
+" This Vim script deletes all the menus, so that they can be redefined.
+" Warning: This also deletes all menus defined by the user!
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 27
+
+aunmenu *
+
+silent! unlet did_install_default_menus
+silent! unlet did_install_syntax_menu
+if exists("did_menu_trans")
+ menutrans clear
+ unlet did_menu_trans
+endif
+
+silent! unlet find_help_dialog
+
+silent! unlet menutrans_help_dialog
+silent! unlet menutrans_path_dialog
+silent! unlet menutrans_tags_dialog
+silent! unlet menutrans_textwidth_dialog
+silent! unlet menutrans_fileformat_dialog
+silent! unlet menutrans_no_file
+
+" vim: set sw=2 :
diff --git a/runtime/doc.info b/runtime/doc.info
new file mode 100755
index 000000000..a836031ee
--- /dev/null
+++ b/runtime/doc.info
Binary files differ
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
new file mode 100644
index 000000000..a87565ebe
--- /dev/null
+++ b/runtime/doc/Makefile
@@ -0,0 +1,363 @@
+#
+# Makefile for the Vim documentation on Unix
+#
+# If you get "don't know how to make scratch", first run make in the source
+# directory. Or remove the include below.
+
+AWK = awk
+
+# Set to $(VIMTARGET) when executed from src/Makefile.
+VIMEXE = vim
+
+# include the config.mk from the source directory. It's only needed to set
+# AWK, used for "make html". Comment this out if the include gives problems.
+include ../../src/auto/config.mk
+
+DOCS = \
+ arabic.txt \
+ autocmd.txt \
+ change.txt \
+ cmdline.txt \
+ debugger.txt \
+ develop.txt \
+ diff.txt \
+ digraph.txt \
+ editing.txt \
+ eval.txt \
+ farsi.txt \
+ filetype.txt \
+ fold.txt \
+ gui.txt \
+ gui_w16.txt \
+ gui_w32.txt \
+ gui_x11.txt \
+ hangulin.txt \
+ hebrew.txt \
+ help.txt \
+ howto.txt \
+ if_cscop.txt \
+ if_ole.txt \
+ if_perl.txt \
+ if_pyth.txt \
+ if_ruby.txt \
+ if_sniff.txt \
+ if_tcl.txt \
+ indent.txt \
+ index.txt \
+ insert.txt \
+ intro.txt \
+ map.txt \
+ message.txt \
+ motion.txt \
+ mbyte.txt \
+ mlang.txt \
+ netbeans.txt \
+ options.txt \
+ os_390.txt \
+ os_amiga.txt \
+ os_beos.txt \
+ os_dos.txt \
+ os_mac.txt \
+ os_mint.txt \
+ os_msdos.txt \
+ os_os2.txt \
+ os_qnx.txt \
+ os_risc.txt \
+ os_unix.txt \
+ os_vms.txt \
+ os_win32.txt \
+ pattern.txt \
+ pi_expl.txt \
+ pi_gzip.txt \
+ pi_netrw.txt \
+ pi_spec.txt \
+ quickfix.txt \
+ quickref.txt \
+ quotes.txt \
+ recover.txt \
+ remote.txt \
+ repeat.txt \
+ rileft.txt \
+ russian.txt \
+ scroll.txt \
+ sign.txt \
+ sponsor.txt \
+ starting.txt \
+ syntax.txt \
+ tagsrch.txt \
+ term.txt \
+ tips.txt \
+ todo.txt \
+ uganda.txt \
+ undo.txt \
+ usr_01.txt \
+ usr_02.txt \
+ usr_03.txt \
+ usr_04.txt \
+ usr_05.txt \
+ usr_06.txt \
+ usr_07.txt \
+ usr_08.txt \
+ usr_09.txt \
+ usr_10.txt \
+ usr_11.txt \
+ usr_12.txt \
+ usr_20.txt \
+ usr_21.txt \
+ usr_22.txt \
+ usr_23.txt \
+ usr_24.txt \
+ usr_25.txt \
+ usr_26.txt \
+ usr_27.txt \
+ usr_28.txt \
+ usr_29.txt \
+ usr_30.txt \
+ usr_31.txt \
+ usr_40.txt \
+ usr_41.txt \
+ usr_42.txt \
+ usr_43.txt \
+ usr_44.txt \
+ usr_45.txt \
+ usr_90.txt \
+ usr_toc.txt \
+ various.txt \
+ version4.txt \
+ version5.txt \
+ version6.txt \
+ vi_diff.txt \
+ visual.txt \
+ windows.txt \
+ workshop.txt
+
+HTMLS = \
+ arabic.html \
+ autocmd.html \
+ change.html \
+ cmdline.html \
+ debugger.html \
+ develop.html \
+ diff.html \
+ digraph.html \
+ editing.html \
+ eval.html \
+ farsi.html \
+ filetype.html \
+ fold.html \
+ gui.html \
+ gui_w16.html \
+ gui_w32.html \
+ gui_x11.html \
+ hangulin.html \
+ hebrew.html \
+ help.html \
+ howto.html \
+ if_cscop.html \
+ if_ole.html \
+ if_perl.html \
+ if_pyth.html \
+ if_ruby.html \
+ if_sniff.html \
+ if_tcl.html \
+ indent.html \
+ index.html \
+ insert.html \
+ intro.html \
+ map.html \
+ message.html \
+ motion.html \
+ mbyte.html \
+ mlang.html \
+ netbeans.html \
+ options.html \
+ os_390.html \
+ os_amiga.html \
+ os_beos.html \
+ os_dos.html \
+ os_mac.html \
+ os_mint.html \
+ os_msdos.html \
+ os_os2.html \
+ os_qnx.html \
+ os_risc.html \
+ os_unix.html \
+ os_vms.html \
+ os_win32.html \
+ pattern.html \
+ pi_expl.html \
+ pi_gzip.html \
+ pi_netrw.html \
+ pi_spec.html \
+ quickfix.html \
+ quickref.html \
+ quotes.html \
+ recover.html \
+ remote.html \
+ repeat.html \
+ rileft.html \
+ russian.html \
+ scroll.html \
+ sign.html \
+ sponsor.html \
+ starting.html \
+ syntax.html \
+ tagsrch.html \
+ tags.html \
+ term.html \
+ tips.html \
+ todo.html \
+ uganda.html \
+ undo.html \
+ usr_01.html \
+ usr_02.html \
+ usr_03.html \
+ usr_04.html \
+ usr_05.html \
+ usr_06.html \
+ usr_07.html \
+ usr_08.html \
+ usr_09.html \
+ usr_10.html \
+ usr_11.html \
+ usr_12.html \
+ usr_20.html \
+ usr_21.html \
+ usr_22.html \
+ usr_23.html \
+ usr_24.html \
+ usr_25.html \
+ usr_26.html \
+ usr_27.html \
+ usr_28.html \
+ usr_29.html \
+ usr_30.html \
+ usr_31.html \
+ usr_40.html \
+ usr_41.html \
+ usr_42.html \
+ usr_43.html \
+ usr_44.html \
+ usr_45.html \
+ usr_90.html \
+ usr_toc.html \
+ various.html \
+ version4.html \
+ version5.html \
+ version6.html \
+ vi_diff.html \
+ visual.html \
+ windows.html \
+ workshop.html
+
+.SUFFIXES:
+.SUFFIXES: .c .o .txt .html
+
+all: tags vim.man vimdiff.man vimtutor.man xxd.man
+
+# Use Vim to generate the tags file. Can only be used when Vim has been
+# compiled and installed. Supports multiple languages.
+vimtags: $(DOCS)
+ $(VIMEXE) -u NONE -esX -c "helptags ." -c quit
+
+# Use "doctags" to generate the tags file. Only works for English!
+tags: doctags $(DOCS)
+ ./doctags $(DOCS) | LANG=C LC_ALL=C sort >tags
+ uniq -d -2 tags
+
+doctags: doctags.c
+ $(CC) doctags.c -o doctags
+
+vim.man: vim.1
+ nroff -man vim.1 | sed -e s/.//g > vim.man
+
+vimdiff.man: vimdiff.1
+ nroff -man vimdiff.1 | sed -e s/.//g > vimdiff.man
+
+vimtutor.man: vimtutor.1
+ nroff -man vimtutor.1 | sed -e s/.//g > vimtutor.man
+
+xxd.man: xxd.1
+ nroff -man xxd.1 | sed -e s/.//g > xxd.man
+
+uganda.nsis.txt: uganda.txt
+ sed -e 's/[ ]*\*[-a-zA-Z0-9.]*\*//g' -e 's/vim:tw=78://' \
+ uganda.txt | uniq >uganda.nsis.txt
+
+# Awk version of .txt to .html conversion.
+html: noerrors tags tags.ref $(HTMLS)
+ @if test -f errors.log; then more errors.log; fi
+
+noerrors:
+ -rm -f errors.log
+
+.txt.html:
+ $(AWK) -f makehtml.awk $< >$@
+
+tags.ref tags.html: tags
+ $(AWK) -f maketags.awk tags >tags.html
+
+# Perl version of .txt to .html conversion.
+# There can't be two rules to produce a .html from a .txt file.
+# Just run over all .txt files each time one changes. It's fast anyway.
+perlhtml: tags $(DOCS)
+ ./vim2html.pl tags $(DOCS)
+
+clean:
+ -rm doctags *.html tags.ref
+
+# These files are in the extra archive, skip if not present
+
+arabic.txt:
+ touch arabic.txt
+
+farsi.txt:
+ touch farsi.txt
+
+hebrew.txt:
+ touch hebrew.txt
+
+russian.txt:
+ touch russian.txt
+
+gui_w16.txt:
+ touch gui_w16.txt
+
+gui_w32.txt:
+ touch gui_w32.txt
+
+if_ole.txt:
+ touch if_ole.txt
+
+os_390.txt:
+ touch os_390.txt
+
+os_amiga.txt:
+ touch os_amiga.txt
+
+os_beos.txt:
+ touch os_beos.txt
+
+os_dos.txt:
+ touch os_dos.txt
+
+os_mac.txt:
+ touch os_mac.txt
+
+os_mint.txt:
+ touch os_mint.txt
+
+os_msdos.txt:
+ touch os_msdos.txt
+
+os_os2.txt:
+ touch os_os2.txt
+
+os_qnx.txt:
+ touch os_qnx.txt
+
+os_risc.txt:
+ touch os_risc.txt
+
+os_win32.txt:
+ touch os_win32.txt
diff --git a/runtime/doc/arabic.txt b/runtime/doc/arabic.txt
new file mode 100644
index 000000000..2d961485a
--- /dev/null
+++ b/runtime/doc/arabic.txt
@@ -0,0 +1,323 @@
+*arabic.txt* For Vim version 7.0aa. Last change: 2004 Jun 09
+
+
+ VIM REFERENCE MANUAL by Nadim Shaikli
+
+
+Arabic Language support (options & mappings) for Vim *Arabic*
+
+{Vi does not have any of these commands}
+
+ *E800*
+In order to use right-to-left and Arabic mapping support, it is
+necessary to compile VIM with the |+arabic| feature.
+
+These functions have been created by Nadim Shaikli <nadim-at-arabeyes.org>
+
+It is best to view this file with these settings within VIM's GUI: >
+
+ :set encoding=utf-8
+ :set arabicshape
+
+
+Introduction
+------------
+Arabic is a rather demanding language in which a number of special
+features are required. Characters are right-to-left oriented and
+ought to appear as such on the screen (ie. from right to left).
+Arabic also requires shaping of its characters, meaning the same
+character has a different visual form based on its relative location
+within a word (initial, medial, final or stand-alone). Arabic also
+requires two different forms of combining and the ability, in
+certain instances, to either superimpose up to two characters on top
+of another (composing) or the actual substitution of two characters
+into one (combining). Lastly, to display Arabic properly one will
+require not only ISO-8859-6 (U+0600-U+06FF) fonts, but will also
+require Presentation Form-B (U+FE70-U+FEFF) fonts both of which are
+subsets within a so-called ISO-10646-1 font.
+
+The commands, prompts and help files are not in Arabic, therefore
+the user interface remains the standard Vi interface.
+
+
+Highlights
+----------
+o Editing left-to-right files as in the original VIM hasn't changed.
+
+o Viewing and editing files in right-to-left windows. File
+ orientation is per window, so it is possible to view the same
+ file in right-to-left and left-to-right modes, simultaneously.
+
+o No special terminal with right-to-left capabilities is required.
+ The right-to-left changes are completely hardware independent.
+ Only Arabic fonts are necessary.
+
+o Compatible with the original VIM. Almost all features work in
+ right-to-left mode (there are liable to be bugs).
+
+o Changing keyboard mapping and reverse insert modes using a single
+ command.
+
+o Toggling complete Arabic support via a single command.
+
+o While in Arabic mode, numbers are entered from left to right. Upon
+ entering a none number character, that character will be inserted
+ just into the left of the last number.
+
+o Arabic keymapping on the command line in reverse insert mode.
+
+o Proper Bidirectional functionality is possible given VIM is
+ started within a Bidi capable terminal emulator.
+
+
+Arabic Fonts *arabicfonts*
+------------
+
+VIM requires monospaced fonts of which there are many out there.
+Arabic requires ISO-8859-6 as well as Presentation Form-B fonts
+(without Form-B, Arabic will _NOT_ be usable). It is highly
+recommended that users search for so-called 'ISO-10646-1' fonts.
+Do an Internet search or check www.arabeyes.org for further
+info on where to attain the necessary Arabic fonts.
+
+
+Font Installation
+-----------------
+
+o Installation of fonts for X Window systems (Unix/Linux)
+
+ Depending on your system, copy your_ARABIC_FONT file into a
+ directory of your choice. Change to the directory containing
+ the Arabic fonts and execute the following commands:
+
+ % mkfontdir
+ % xset +fp path_name_of_arabic_fonts_directory
+
+
+Usage
+-----
+Prior to the actual usage of Arabic within VIM, a number of settings
+need to be accounted for and invoked.
+
+o Setting the Arabic fonts
+
+ + For VIM GUI set the 'guifont' to your_ARABIC_FONT. This is done
+ by entering the following command in the VIM window.
+>
+ :set guifont=your_ARABIC_FONT
+<
+ NOTE: the string 'your_ARABIC_FONT' is used to denote a complete
+ font name akin to that used in linux/unix system.
+ (eg. -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1)
+
+ You can append the 'guifont' set command to your .vimrc file
+ in order to get the same above noted results. In other words,
+ you can include ':set guifont=your_ARABIC_FONT' to your .vimrc
+ file.
+
+ + Under the X Window environment, you can also start VIM with
+ '-fn your_ARABIC_FONT' option.
+
+o Setting the appropriate character Encoding
+ To enable the correct Arabic encoding the following command needs
+ to be appended,
+>
+ :set encoding=utf-8
+<
+ to your .vimrc file (entering the command manually into you VIM
+ window is highly discouraged). In short, include ':set
+ encoding=utf-8' to your .vimrc file.
+
+ Attempts to use Arabic without UTF-8 will result the following
+ warning message,
+
+ *W17* >
+ Arabic requires UTF-8, do ':set encoding=utf-8'
+
+o Enable Arabic settings [short-cut]
+
+ In order to simplify and streamline things, you can either invoke
+ VIM with the command-line option,
+
+ % vim -A my_utf8_arabic_file ...
+
+ or enable 'arabic' via the following command within VIM
+>
+ :set arabic
+<
+ The two above noted possible invocations are the preferred manner
+ in which users are instructed to proceed. Baring an enabled 'termbidi'
+ setting, both command options:
+
+ 1. set the appropriate keymap
+ 2. enable the deletion of a single combined pair character
+ 3. enable rightleft mode
+ 4. enable rightleftcmd mode (affecting the command-line)
+ 5. enable arabicshape mode (do visual character alterations)
+
+ You may also append the command to your .vimrc file and simply
+ include ':set arabic' to it.
+
+ You are also capable of disabling Arabic support via
+>
+ :set noarabic
+<
+ which resets everything that the command had enabled without touching
+ the global settings as they could affect other possible open buffers.
+ In short the 'noarabic' command,
+
+ 1. resets to the alternate keymap
+ 2. disables the deletion of a single combined pair character
+ 3. disables rightleft mode
+
+ NOTE: the 'arabic' command takes into consideration 'termbidi' for
+ possible external bi-directional (bidi) support from the
+ terminal ("mlterm" for instance offers such support).
+ 'termbidi', if available, is superior to rightleft support
+ and its support is preferred due to its level of offerings.
+ 'arabic' when 'termbidi' is enabled only sets the keymap.
+
+ If, on the other hand, you'd like to be verbose and explicit and
+ are opting not to use the 'arabic' short-cut command, here's what
+ is needed (ie. if you use ':set arabic' you can skip this section) -
+
+ + Arabic Keymapping Activation
+
+ To activate the Arabic keymap (ie. to remap your English/Latin
+ keyboard to look-n-feel like a standard Arabic one), set the
+ 'keymap' command to "arabic". This is done by entering
+>
+ :set keymap=arabic
+<
+ in your VIM window. You can also append the 'keymap' set command to
+ your .vimrc file. In other words, you can include ':set keymap=arabic'
+ to your .vimrc file.
+
+ To turn toggle (or switch) your keymapping between Arabic and the
+ default mapping (English), it is advised that users use the 'CTRL-^'
+ key press while in insert (or add/replace) mode. The command-line
+ will display your current mapping by displaying an "Arabic" string
+ next to your insertion mode (eg. -- INSERT Arabic --) indicating
+ your current keymap.
+
+ + Arabic deletion of a combined pair character
+
+ By default VIM has the 'delcombine' option disabled. This option
+ allows the deletion of ALEF in a LAM_ALEF (LAA) combined character
+ and still retain the LAM (ie. it reverts to treating the combined
+ character as its natural two characters form -- this also pertains
+ to harakat and their combined forms). You can enable this option
+ by entering
+>
+ :set delcombine
+<
+ in our VIM window. You can also append the 'delcombine' set command
+ to your .vimrc file. In other words, you can include ':set delcombine'
+ to your .vimrc file.
+
+ + Arabic right-to-left Mode
+
+ By default VIM starts in Left-to-right mode. 'rightleft' is the
+ command that allows one to alter a window's orientation - that can
+ be accomplished via,
+
+ - Toggling between left-to-right and right-to-left modes is
+ accomplished through ':set rightleft' and ':set norightleft'.
+
+ - While in Left-to-right mode, enter ':set rl' in the command line
+ ('rl' is the abbreviation for rightleft).
+
+ - Put the ':set rl' line in your '.vimrc' file to start the VIM in
+ right-to-left mode permanently.
+
+ + Arabic right-to-left command-line Mode
+
+ For certain commands the editing can be done in right-to-left mode.
+ Currently this is only applicable to search commands.
+
+ This is controlled with the 'rightleftcmd' option. The default is
+ "search", which means that windows in which 'rightleft' is set will
+ edit search commands in right-left mode. To disable this behavior,
+>
+ :set rightleftcmd=
+<
+ To enable right-left editing of search commands again,
+>
+ :set rightleftcmd&
+<
+ + Arabic Shaping Mode
+
+ To activate the required visual characters alterations (shaping,
+ composing, combining) which the Arabic language requires, enable
+ the 'arabicshape' command. This is done by entering
+>
+ :set arabicshape
+<
+ in our VIM window. You can also append the 'arabicshape' set
+ command to your .vimrc file. In other words, you can include
+ ':set arabicshape' to your .vimrc file.
+
+
+Keymap/Keyboard *arabickeymap*
+---------------
+
+The character/letter encoding used in VIM is the standard UTF-8.
+It is widely discouraged that any other encoding be used or even
+attempted.
+
+Note: UTF-8 is an all encompassing encoding and as such is
+ the only supported (and encouraged) encoding with
+ regard to Arabic (all other proprietary encodings
+ should be discouraged and frowned upon).
+
+o Keyboard
+
+ + CTRL-^ in insert/replace mode toggles between Arabic/Latin mode
+
+ + Keyboard mapping is based on the Microsoft's Arabic keymap (the
+ defacto standard in the Arab world):
+
+ +---------------------------------------------------------------------+
+ |! |@ |# |$ |% |^ |& |* |( |) |_ |+ || |~ Ù‘ |
+ |1 Ù¡ |2 Ù¢ |3 Ù£ |4 Ù¤ |5 Ù¥ |6 Ù¦ |7 Ù§ |8 Ù¨ |9 Ù© |0 Ù  |- |= |\ |` Ø° |
+ +---------------------------------------------------------------------+
+ |Q َ |W ً |E ٠|R ٌ |T لإ |Y إ |U ` |I ÷ |O x |P ؛ |{ < |} > |
+ |q ض |w ص |e ث |r ق |t ٠|y غ |u ع |i ه |o خ |p ح |[ ج |] د |
+ +-----------------------------------------------------------+
+ |A ٠|S ٠|D [ |F ] |G لأ |H أ |J ـ |K ، |L / |: |" |
+ |a ش |s س |d ي |f ب |g ل |h ا |j ت |k ن |l م |; ك |' ط |
+ +------------------------------------------------------+
+ |Z ~ |X ْ |C { |V } |B لآ |N آ |M ' |< , |> . |? ؟ |
+ |z ئ |x ء |c ؤ |v ر |b لا |n ى |m ة |, و |. ز |/ ظ |
+ +-------------------------------------------------+
+
+Restrictions
+------------
+
+o VIM in its GUI form does not currently support Bi-directionality
+ (ie. the ability to see both Arabic and Latin intermixed within
+ the same line).
+
+
+Known Bugs
+----------
+
+There is one known minor bug,
+
+ 1. If you insert a haraka (eg. Fatha (U+064E)) after a LAM (U+0644)
+ and then insert an ALEF (U+0627), the appropriate combining will
+ not happen due to the sandwiched haraka resulting in something
+ that will NOT be displayed correctly.
+
+ WORK-AROUND: Don't include harakats between LAM and ALEF combos.
+ In general, don't anticipate to see correct visual
+ representation with regard to harakats and LAM+ALEF
+ combined characters (even those entered after both
+ characters). The problem noted is strictly a visual
+ one, meaning saving such a file will contain all the
+ appropriate info/encodings - nothing is lost.
+
+No other bugs are known to exist.
+
+ vim:tw=78:ts=8:ft=help:norl:
+
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
new file mode 100644
index 000000000..4cc747211
--- /dev/null
+++ b/runtime/doc/autocmd.txt
@@ -0,0 +1,904 @@
+*autocmd.txt* For Vim version 7.0aa. Last change: 2004 Apr 20
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Automatic commands *autocommand*
+
+For a basic explanation, see section |40.3| in the user manual.
+
+1. Introduction |autocmd-intro|
+2. Defining autocommands |autocmd-define|
+3. Removing autocommands |autocmd-remove|
+4. Listing autocommands |autocmd-list|
+5. Events |autocmd-events|
+6. Patterns |autocmd-patterns|
+7. Groups |autocmd-groups|
+8. Executing autocommands |autocmd-execute|
+9. Using autocommands |autocmd-use|
+
+{Vi does not have any of these commands}
+{only when the |+autocmd| feature has not been disabled at compile time}
+
+==============================================================================
+1. Introduction *autocmd-intro*
+
+You can specify commands to be executed automatically for when reading or
+writing a file, when entering or leaving a buffer or window, and when exiting
+Vim. For example, you can create an autocommand to set the 'cindent' option
+for files matching *.c. You can also use autocommands to implement advanced
+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*
+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.
+ For example: If you use autocommands to decompress a file when starting to
+ edit it, make sure that the autocommands for compressing when writing work
+ correctly.
+- Be prepared for an error halfway through (e.g., disk full). Vim will mostly
+ be able to undo the changes to the buffer, but you may have to clean up the
+ changes to other files by hand (e.g., compress a file that has been
+ decompressed).
+- If the BufRead* events allow you to edit a compressed file, the FileRead*
+ events should do the same (this makes recovery possible in some rare cases).
+ It's a good idea to use the same autocommands for the File* and Buf* events
+ when possible.
+
+==============================================================================
+2. Defining autocommands *autocmd-define*
+
+Note: The ":autocmd" command cannot be followed by another command, since any
+'|' is considered part of the command.
+
+ *:au* *:autocmd*
+:au[tocmd] [group] {event} {pat} [nested] {cmd}
+ Add {cmd} to the list of commands that Vim will
+ execute automatically on {event} for a file matching
+ {pat}. Vim always adds the {cmd} after existing
+ autocommands, so that the autocommands execute in the
+ order in which they were given. See |autocmd-nested|
+ for [nested].
+
+Note that special characters (e.g., "%", "<cword>") in the ":autocmd"
+arguments are not expanded when the autocommand is defined. These will be
+expanded when the Event is recognized, and the {cmd} is executed. The only
+exception is that "<sfile>" is expanded when the autocmd is defined. Example:
+>
+ :au BufNewFile,BufRead *.html so <sfile>:h/html.vim
+
+Here Vim expands <sfile> to the name of the file containing this line.
+
+When your .vimrc file is sourced twice, the autocommands will appear twice.
+To avoid this, put this command in your .vimrc file, before defining
+autocommands: >
+
+ :autocmd! " Remove ALL autocommands for the current group.
+
+If you don't want to remove all autocommands, you can instead use a variable
+to ensure that Vim includes the autocommands only once: >
+
+ :if !exists("autocommands_loaded")
+ : let autocommands_loaded = 1
+ : au ...
+ :endif
+
+When the [group] argument is not given, Vim uses the current group (as defined
+with ":augroup"); otherwise, Vim uses the group defined with [group]. Note
+that [group] must have been defined before. You cannot define a new group
+with ":au group ..."; use ":augroup" for that.
+
+While testing autocommands, you might find the 'verbose' option to be useful: >
+ :set verbose=9
+This setting makes Vim echo the autocommands as it executes them.
+
+When defining an autocommand in a script, it will be able to call functions
+local to the script and use mappings local to the script. When the event is
+triggered and the command executed, it will run in the context of the script
+it was defined in. This matters if |<SID>| is used in a command.
+
+When executing the commands, the messages from one command overwrites a
+previous message. This is different from when executing the commands
+manually. Mostly the screen will not scroll up, thus there is no hit-enter
+prompt. When one command outputs two messages this can happen anyway.
+
+==============================================================================
+3. Removing autocommands *autocmd-remove*
+
+:au[tocmd]! [group] {event} {pat} [nested] {cmd}
+ Remove all autocommands associated with {event} and
+ {pat}, and add the command {cmd}. See
+ |autocmd-nested| for [nested].
+
+:au[tocmd]! [group] {event} {pat}
+ Remove all autocommands associated with {event} and
+ {pat}.
+
+:au[tocmd]! [group] * {pat}
+ Remove all autocommands associated with {pat} for all
+ events.
+
+:au[tocmd]! [group] {event}
+ Remove ALL autocommands for {event}.
+
+:au[tocmd]! [group] Remove ALL autocommands.
+
+When the [group] argument is not given, Vim uses the current group (as defined
+with ":augroup"); otherwise, Vim uses the group defined with [group].
+
+==============================================================================
+4. Listing autocommands *autocmd-list*
+
+:au[tocmd] [group] {event} {pat}
+ Show the autocommands associated with {event} and
+ {pat}.
+
+:au[tocmd] [group] * {pat}
+ Show the autocommands associated with {pat} for all
+ events.
+
+:au[tocmd] [group] {event}
+ Show all autocommands for {event}.
+
+:au[tocmd] [group] Show all autocommands.
+
+If you provide the [group] argument, Vim lists only the autocommands for
+[group]; otherwise, Vim lists the autocommands for ALL groups. Note that this
+argument behavior differs from that for defining and removing autocommands.
+
+==============================================================================
+5. Events *autocmd-events* *E215* *E216*
+
+ *autocommand-events* *{event}*
+Vim recognizes the following events. Vim ignores the case of event names
+(e.g., you can use "BUFread" or "bufread" instead of "BufRead").
+
+ *BufNewFile*
+BufNewFile When starting to edit a file that doesn't
+ exist. Can be used to read in a skeleton
+ file.
+ *BufReadPre* *E200* *E201*
+BufReadPre When starting to edit a new buffer, before
+ reading the file into the buffer. Not used
+ if the file doesn't exist.
+ *BufRead* *BufReadPost*
+BufRead or BufReadPost When starting to edit a new buffer, after
+ reading the file into the buffer, before
+ executing the modelines. See |BufWinEnter|
+ for when you need to do something after
+ processing the modelines.
+ This does NOT work for ":r file". Not used
+ when the file doesn't exist. Also used after
+ successfully recovering a file.
+ *BufReadCmd*
+BufReadCmd Before starting to edit a new buffer. Should
+ read the file into the buffer. |Cmd-event|
+ *BufFilePre*
+BufFilePre Before changing the name of the current buffer
+ with the ":file" or ":saveas" command.
+ *BufFilePost*
+BufFilePost After changing the name of the current buffer
+ with the ":file" or ":saveas" command.
+ *FileReadPre*
+FileReadPre Before reading a file with a ":read" command.
+ *FileReadPost*
+FileReadPost After reading a file with a ":read" command.
+ Note that Vim sets the '[ and '] marks to the
+ first and last line of the read. This can be
+ used to operate on the lines just read.
+ *FileReadCmd*
+FileReadCmd Before reading a file with a ":read" command.
+ Should do the reading of the file. |Cmd-event|
+ *FilterReadPre* *E135*
+FilterReadPre Before reading a file from a filter command.
+ Vim checks the pattern against the name of
+ the current buffer, not the name of the
+ temporary file that is the output of the
+ filter command.
+ *FilterReadPost*
+FilterReadPost After reading a file from a filter command.
+ Vim checks the pattern against the name of
+ the current buffer as with FilterReadPre.
+ *FileType*
+FileType When the 'filetype' option has been set.
+ <afile> can be used for the name of the file
+ where this option was set, and <amatch> for
+ the new value of 'filetype'.
+ See |filetypes|.
+ *Syntax*
+Syntax When the 'syntax' option has been set.
+ <afile> can be used for the name of the file
+ where this option was set, and <amatch> for
+ the new value of 'syntax'.
+ See |:syn-on|.
+ *StdinReadPre*
+StdinReadPre Before reading from stdin into the buffer.
+ Only used when the "-" argument was used when
+ Vim was started |--|.
+ *StdinReadPost*
+StdinReadPost After reading from the stdin into the buffer,
+ before executing the modelines. Only used
+ when the "-" argument was used when Vim was
+ started |--|.
+ *BufWrite* *BufWritePre*
+BufWrite or BufWritePre Before writing the whole buffer to a file.
+ *BufWritePost*
+BufWritePost After writing the whole buffer to a file
+ (should undo the commands for BufWritePre).
+ *BufWriteCmd*
+BufWriteCmd Before writing the whole buffer to a file.
+ Should do the writing of the file and reset
+ 'modified' if successful. The buffer contents
+ should not be changed. |Cmd-event|
+ *FileWritePre*
+FileWritePre Before writing to a file, when not writing the
+ whole buffer.
+ *FileWritePost*
+FileWritePost After writing to a file, when not writing the
+ whole buffer.
+ *FileWriteCmd*
+FileWriteCmd Before writing to a file, when not writing the
+ whole buffer. Should do the writing to the
+ file. Should not change the buffer.
+ |Cmd-event|
+ *FileAppendPre*
+FileAppendPre Before appending to a file.
+ *FileAppendPost*
+FileAppendPost After appending to a file.
+ *FileAppendCmd*
+FileAppendCmd Before appending to a file. Should do the
+ appending to the file. |Cmd-event|
+ *FilterWritePre*
+FilterWritePre Before writing a file for a filter command or
+ making a diff.
+ Vim checks the pattern against the name of
+ the current buffer, not the name of the
+ temporary file that is the output of the
+ filter command.
+ *FilterWritePost*
+FilterWritePost After writing a file for a filter command or
+ making a diff.
+ Vim checks the pattern against the name of
+ the current buffer as with FilterWritePre.
+ *FileChangedShell*
+FileChangedShell When Vim notices that the modification time of
+ a file has changed since editing started.
+ Also when the file attributes of the file
+ change. |timestamp|
+ Mostly triggered after executing a shell
+ command, but also with a |:checktime| command
+ or when Vim regains input focus.
+ This autocommand is triggered for each changed
+ file. It is not used when 'autoread' is set
+ and the buffer was not changed. If a
+ FileChangedShell autocommand is present the
+ warning message and prompt is not given.
+ This is useful for reloading related buffers
+ which are affected by a single command.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer that was changed "<afile>".
+ NOTE: The commands must not change the current
+ buffer, jump to another buffer or delete a
+ buffer. *E246*
+ NOTE: This event never nests, to avoid an
+ endless loop. This means that while executing
+ commands for the FileChangedShell event no
+ other FileChangedShell event will be
+ triggered.
+ *FileChangedRO*
+FileChangedRO Before making the first change to a read-only
+ file. Can be used to check-out the file from
+ a source control system. Not triggered when
+ the change was caused by an autocommand.
+ WARNING: This event is triggered when making a
+ change, just before the change is applied to
+ the text. If the autocommand moves the cursor
+ the effect of the change is undefined.
+ *FocusGained*
+FocusGained When Vim got input focus. Only for the GUI
+ version and a few console versions where this
+ can be detected.
+ *FocusLost*
+FocusLost When Vim lost input focus. Only for the GUI
+ version and a few console versions where this
+ can be detected.
+ *FuncUndefined*
+FuncUndefined When a user function is used but it isn't
+ defined. Useful for defining a function only
+ when it's used. Both <amatch> and <afile> are
+ set to the name of the function.
+ *CursorHold*
+CursorHold When the user doesn't press a key for the time
+ specified with 'updatetime'. Not re-triggered
+ until the user has pressed a key (i.e. doesn't
+ fire every 'updatetime' ms if you leave Vim to
+ make some coffee. :) See |CursorHold-example|
+ for previewing tags.
+ This event is only triggered in Normal mode.
+ Note: Interactive commands cannot be used for
+ this event. There is no hit-enter prompt,
+ the screen is updated directly (when needed).
+ Note: In the future there will probably be
+ another option to set the time.
+ Hint: to force an update of the status lines
+ use: >
+ :let &ro = &ro
+< {only on Amiga, Unix, Win32, MSDOS and all GUI
+ versions}
+ *BufEnter*
+BufEnter After entering a buffer. Useful for setting
+ options for a file type. Also executed when
+ starting to edit a buffer, after the
+ BufReadPost autocommands.
+ *BufLeave*
+BufLeave Before leaving to another buffer. Also when
+ leaving or closing the current window and the
+ new current window is not for the same buffer.
+ Not used for ":qa" or ":q" when exiting Vim.
+ *BufWinEnter*
+BufWinEnter After a buffer is displayed in a window. This
+ can be when the buffer is loaded (after
+ processing the modelines), when a hidden
+ buffer is displayed in a window (and is no
+ longer hidden) or a buffer already visible in
+ a window is also displayed in another window.
+ *BufWinLeave*
+BufWinLeave Before a buffer is removed from a window.
+ Not when it's still visible in another window.
+ Also triggered when exiting. It's triggered
+ before BufUnload or BufHidden.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being unloaded "<afile>".
+ *BufUnload*
+BufUnload Before unloading a buffer. This is when the
+ text in the buffer is going to be freed. This
+ may be after a BufWritePost and before a
+ BufDelete. Also used for all buffers that are
+ loaded when Vim is going to exit.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being unloaded "<afile>".
+ *BufHidden*
+BufHidden Just after a buffer has become hidden. That
+ is, when there are no longer windows that show
+ the buffer, but the buffer is not unloaded or
+ deleted. Not used for ":qa" or ":q" when
+ exiting Vim.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being unloaded "<afile>".
+ *BufNew*
+BufNew Just after creating a new buffer. Also used
+ just after a buffer has been renamed. When
+ the buffer is added to the buffer list BufAdd
+ will be triggered too.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being created "<afile>".
+ *BufCreate* *BufAdd*
+BufAdd or BufCreate Just after creating a new buffer which is
+ added to the buffer list, or adding a buffer
+ to the buffer list.
+ Also used just after a buffer in the buffer
+ list has been renamed.
+ The BufCreate event is for historic reasons.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being created "<afile>".
+ *BufDelete*
+BufDelete Before deleting a buffer from the buffer list.
+ The BufUnload may be called first (if the
+ buffer was loaded).
+ Also used just before a buffer in the buffer
+ list is renamed.
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being deleted "<afile>".
+ *BufWipeout*
+BufWipeout Before completely deleting a buffer. The
+ BufUnload and BufDelete events may be called
+ first (if the buffer was loaded and was in the
+ buffer list). Also used just before a buffer
+ is renamed (also when it's not in the buffer
+ list).
+ NOTE: When this autocommand is executed, the
+ current buffer "%" may be different from the
+ buffer being deleted "<afile>".
+ *WinEnter*
+WinEnter After entering another window. Not done for
+ the first window, when Vim has just started.
+ Useful for setting the window height.
+ If the window is for another buffer, Vim
+ executes the BufEnter autocommands after the
+ WinEnter autocommands.
+ Note: When using ":split fname" the WinEnter
+ event is triggered after the split but before
+ the file "fname" is loaded.
+ *WinLeave*
+WinLeave Before leaving a window. If the window to be
+ entered next is for a different buffer, Vim
+ executes the BufLeave autocommands before the
+ WinLeave autocommands (but not for ":new").
+ Not used for ":qa" or ":q" when exiting Vim.
+ *CmdwinEnter*
+CmdwinEnter After entering the command-line window.
+ Useful for setting options specifically for
+ this special type of window. This is
+ triggered _instead_ of BufEnter and WinEnter.
+ <afile> is set to a single character,
+ indicating the type of command-line.
+ |cmdwin-char|
+ *CmdwinLeave*
+CmdwinLeave Before leaving the command-line window.
+ Useful to clean up any global setting done
+ with CmdwinEnter. This is triggered _instead_
+ of BufLeave and WinLeave.
+ <afile> is set to a single character,
+ indicating the type of command-line.
+ |cmdwin-char|
+ *GUIEnter*
+GUIEnter After starting the GUI successfully, and after
+ opening the window. It is triggered before
+ VimEnter when using gvim. Can be used to
+ position the window from a .gvimrc file: >
+ :autocmd GUIEnter * winpos 100 50
+< *VimEnter*
+VimEnter After doing all the startup stuff, including
+ loading .vimrc files, executing the "-c cmd"
+ arguments, creating all windows and loading
+ the buffers in them.
+ *VimLeavePre*
+VimLeavePre Before exiting Vim, just before writing the
+ .viminfo file. This is executed only once,
+ if there is a match with the name of what
+ happens to be the current buffer when exiting.
+ Mostly useful with a "*" pattern. >
+ :autocmd VimLeavePre * call CleanupStuff()
+< To detect an abnormal exit use |v:dying|.
+ *VimLeave*
+VimLeave Before exiting Vim, just after writing the
+ .viminfo file. Executed only once, like
+ VimLeavePre.
+ To detect an abnormal exit use |v:dying|.
+ *EncodingChanged*
+EncodingChanged Fires off when the 'encoding' option is
+ changed. Useful to set up fonts, for example.
+ *FileEncoding*
+FileEncoding Obsolete. It still works and is equivalent
+ to |EncodingChanged|.
+ *RemoteReply*
+RemoteReply When a reply from a Vim that functions as
+ server was received |server2client()|.
+ <amatch> is equal to the {serverid} from which
+ the reply was sent, and <afile> is the actual
+ reply string.
+ Note that even if an autocommand is defined,
+ the reply should be read with |remote_read()|
+ to consume it.
+ *TermChanged*
+TermChanged After the value of 'term' has changed. Useful
+ for re-loading the syntax file to update the
+ colors, fonts and other terminal-dependent
+ settings. Executed for all loaded buffers.
+ *TermResponse*
+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.
+ *UserGettingBored*
+UserGettingBored When the user hits CTRL-C. Just kidding! :-)
+ *User*
+User Never executed automatically. To be used for
+ autocommands that are only executed with
+ ":doautocmd".
+
+You can specify a comma-separated list of event names. No white space can be
+used in this list. The command applies to all the events in the list.
+
+For READING FILES there are four kinds of events possible:
+ BufNewFile starting to edit a non-existent file
+ BufReadPre BufReadPost starting to edit an existing file
+ FilterReadPre FilterReadPost read the temp file with filter output
+ FileReadPre FileReadPost any other file read
+Vim uses only one of these four kinds when reading a file. The "Pre" and
+"Post" events are both triggered, before and after reading the file.
+
+Note that the autocommands for the *ReadPre events and all the Filter events
+are not allowed to change the current buffer (you will get an error message if
+this happens). This is to prevent the file to be read into the wrong buffer.
+
+Note that the 'modified' flag is reset AFTER executing the BufReadPost
+and BufNewFile autocommands. But when the 'modified' option was set by the
+autocommands, this doesn't happen.
+
+You can use the 'eventignore' option to ignore a number of events or all
+events.
+
+==============================================================================
+6. Patterns *autocmd-patterns* *{pat}*
+
+The file pattern {pat} is tested for a match against the file name in one of
+two ways:
+1. When there is no '/' in the pattern, Vim checks for a match against only
+ the tail part of the file name (without its leading directory path).
+2. When there is a '/' in the pattern, Vim checks for a match against the
+ both short file name (as you typed it) and the full file name (after
+ expanding it to a full path and resolving symbolic links).
+
+Examples: >
+ :autocmd BufRead *.txt set et
+Set the 'et' option for all text files. >
+
+ :autocmd BufRead /vim/src/*.c set cindent
+Set the 'cindent' option for C files in the /vim/src directory. >
+
+ :autocmd BufRead /tmp/*.c set ts=5
+If you have a link from "/tmp/test.c" to "/home/nobody/vim/src/test.c", and
+you start editing "/tmp/test.c", this autocommand will match.
+
+Note: To match part of a path, but not from the root directory, use a '*' as
+the first character. Example: >
+ :autocmd BufRead */doc/*.txt set tw=78
+This autocommand will for example be executed for "/tmp/doc/xx.txt" and
+"/usr/home/piet/doc/yy.txt". The number of directories does not matter here.
+
+
+The file name that the pattern is matched against is after expanding
+wildcards. Thus is you issue this command: >
+ :e $ROOTDIR/main.$EXT
+The argument is first expanded to: >
+ /usr/root/main.py
+Before it's matched with the pattern of the autocommand. Careful with this
+when using events like FileReadCmd, the value of <amatch> may not be what you
+expect.
+
+
+Environment variables can be used in a pattern: >
+ :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
+And ~ can be used for the home directory (if $HOME is defined): >
+ :autocmd BufWritePost ~/.vimrc so ~/.vimrc
+ :autocmd BufRead ~archive/* set readonly
+The environment variable is expanded when the autocommand is defined, not when
+the autocommand is executed. This is different from the command!
+
+ *file-pattern*
+The pattern is interpreted like mostly used in file names:
+ * matches any sequence of characters
+ ? matches any single character
+ \? matches a '?'
+ . matches a '.'
+ ~ matches a '~'
+ , separates patterns
+ \, matches a ','
+ { } like \( \) in a |pattern|
+ , inside { }: like \| in a |pattern|
+ \ special meaning like in a |pattern|
+ [ch] matches 'c' or 'h'
+ [^ch] match any character but 'c' and 'h'
+
+Note that for all systems the '/' character is used for path separator (even
+MS-DOS and OS/2). This was done because the backslash is difficult to use
+in a pattern and to make the autocommands portable across different systems.
+
+
+Matching with the pattern is done when an event is triggered. Changing the
+buffer name in one of the autocommands, or even deleting the buffer, does not
+change which autocommands will be executed. Example: >
+
+ au BufEnter *.foo bdel
+ au BufEnter *.foo set modified
+
+This will delete the current buffer and then set 'modified' in what has become
+the current buffer instead. Vim doesn't take into account that "*.foo"
+doesn't match with that buffer name. It matches "*.foo" with the name of the
+buffer at the moment the event was triggered.
+
+==============================================================================
+7. Groups *autocmd-groups*
+
+Autocommands can be put together in a group. This is useful for removing or
+executing a group of autocommands. For example, all the autocommands for
+syntax highlighting are put in the "highlight" group, to be able to execute
+":doautoall highlight BufRead" when the GUI starts.
+
+When no specific group is selected, Vim uses the default group. The default
+group does not have a name. You cannot execute the autocommands from the
+default group separately; you can execute them only by executing autocommands
+for all groups.
+
+Normally, when executing autocommands automatically, Vim uses the autocommands
+for all groups. The group only matters when executing autocommands with
+":doautocmd" or ":doautoall", or when defining or deleting autocommands.
+
+The group name can contain any characters except white space. The group name
+"end" is reserved (also in uppercase).
+
+The group name is case sensitive. Note that this is different from the event
+name!
+
+ *:aug* *:augroup*
+:aug[roup] {name} Define the autocmd group name for the
+ following ":autocmd" commands. The name "end"
+ or "END" selects the default group.
+
+ *:augroup-delete* *E367*
+:aug[roup]! {name} Delete the autocmd group {name}. Don't use
+ this if there is still an autocommand using
+ this group! This is not checked.
+
+To enter autocommands for a specific group, use this method:
+1. Select the group with ":augroup {name}".
+2. Delete any old autocommands with ":au!".
+3. Define the autocommands.
+4. Go back to the default group with "augroup END".
+
+Example: >
+ :augroup uncompress
+ : au!
+ : au BufEnter *.gz %!gunzip
+ :augroup END
+
+This prevents having the autocommands defined twice (e.g., after sourcing the
+.vimrc file again).
+
+==============================================================================
+8. Executing autocommands *autocmd-execute*
+
+Vim can also execute Autocommands non-automatically. This is useful if you
+have changed autocommands, or when Vim has executed the wrong autocommands
+(e.g., the file pattern match was wrong).
+
+Note that the 'eventignore' option applies here too. Events listed in this
+option will not cause any commands to be executed.
+
+ *:do* *:doau* *:doautocmd* *E217*
+:do[autocmd] [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
+ match the right pattern, after changing settings, or
+ to execute autocommands for a certain event.
+ 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
+< Be careful to avoid endless loops. See
+ |autocmd-nested|.
+
+ When the [group] argument is not given, Vim executes
+ the autocommands for all groups. When the [group]
+ 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.
+
+ *:doautoa* *:doautoall*
+:doautoa[ll] [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
+ applied.
+ Careful: Don't use this for autocommands that delete a
+ buffer, change to another buffer or change the
+ contents of a buffer; the result is unpredictable.
+ This command is intended for autocommands that set
+ options, change highlighting, and things like that.
+
+==============================================================================
+9. Using autocommands *autocmd-use*
+
+For WRITING FILES there are four possible sets of events. Vim uses only one
+of these sets for a write command:
+
+BufWriteCmd BufWritePre BufWritePost writing the whole buffer
+ FilterWritePre FilterWritePost writing to filter temp file
+FileAppendCmd FileAppendPre FileAppendPost appending to a file
+FileWriteCmd FileWritePre FileWritePost any other file write
+
+When there is a matching "*Cmd" autocommand, it is assumed it will do the
+writing. No further writing is done and the other events are not triggered.
+|Cmd-event|
+
+Note that the *WritePost commands should undo any changes to the buffer that
+were caused by the *WritePre commands; otherwise, writing the file will have
+the side effect of changing the buffer.
+
+Before executing the autocommands, the buffer from which the lines are to be
+written temporarily becomes the current buffer. Unless the autocommands
+change the current buffer or delete the previously current buffer, the
+previously current buffer is made the current buffer again.
+
+The *WritePre and *AppendPre autocommands must not delete the buffer from
+which the lines are to be written.
+
+The '[ and '] marks have a special position:
+- Before the *ReadPre event the '[ mark is set to the line just above where
+ the new lines will be inserted.
+- Before the *ReadPost event the '[ mark is set to the first line that was
+ just read, the '] mark to the last line.
+- Before executing the *WritePre and *AppendPre autocommands the '[ mark is
+ set to the first line that will be written, the '] mark to the last line.
+Careful: '[ and '] change when using commands that change the buffer.
+
+In commands which expect a file name, you can use "<afile>" for the file name
+that is being read |:<afile>| (you can also use "%" for the current file
+name). "<abuf>" can be used for the buffer number of the currently effective
+buffer. This also works for buffers that doesn't have a name. But it doesn't
+work for files without a buffer (e.g., with ":r file").
+
+ *gzip-example*
+Examples for reading and writing compressed files: >
+ :augroup gzip
+ : autocmd!
+ : autocmd BufReadPre,FileReadPre *.gz set bin
+ : autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
+ : autocmd BufReadPost,FileReadPost *.gz set nobin
+ : autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r")
+ : autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r
+ : autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r
+
+ : autocmd FileAppendPre *.gz !gunzip <afile>
+ : autocmd FileAppendPre *.gz !mv <afile>:r <afile>
+ : autocmd FileAppendPost *.gz !mv <afile> <afile>:r
+ : autocmd FileAppendPost *.gz !gzip <afile>:r
+ :augroup END
+
+The "gzip" group is used to be able to delete any existing autocommands with
+":autocmd!", for when the file is sourced twice.
+
+("<afile>:r" is the file name without the extension, see |:_%:|)
+
+The commands executed for the BufNewFile, BufRead/BufReadPost, BufWritePost,
+FileAppendPost and VimLeave events do not set or reset the changed flag of the
+buffer. When you decompress the buffer with the BufReadPost autocommands, you
+can still exit with ":q". When you use ":undo" in BufWritePost to undo the
+changes made by BufWritePre commands, you can still do ":q" (this also makes
+"ZZ" work). If you do want the buffer to be marked as modified, set the
+'modified' option.
+
+To execute Normal mode commands from an autocommand, use the ":normal"
+command. Use with care! If the Normal mode command is not finished, the user
+needs to type characters (e.g., after ":normal m" you need to type a mark
+name).
+
+If you want the buffer to be unmodified after changing it, reset the
+'modified' option. This makes it possible to exit the buffer with ":q"
+instead of ":q!".
+
+ *autocmd-nested* *E218*
+By default, autocommands do not nest. If you use ":e" or ":w" in an
+autocommand, Vim does not execute the BufRead and BufWrite autocommands for
+those commands. If you do want this, use the "nested" flag for those commands
+in which you want nesting. For example: >
+ :autocmd FileChangedShell *.c nested e!
+The nesting is limited to 10 levels to get out of recursive loops.
+
+It's possible to use the ":au" command in an autocommand. This can be a
+self-modifying command! This can be useful for an autocommand that should
+execute only once.
+
+There is currently no way to disable the autocommands. If you want to write a
+file without executing the autocommands for that type of file, write it under
+another name and rename it with a shell command. In some situations you can
+use the 'eventignore' option.
+
+Note: When reading a file (with ":read file" or with a filter command) and the
+last line in the file does not have an <EOL>, Vim remembers this. At the next
+write (with ":write file" or with a filter command), if the same line is
+written again as the last line in a file AND 'binary' is set, Vim does not
+supply an <EOL>. This makes a filter command on the just read lines write the
+same file as was read, and makes a write command on just filtered lines write
+the same file as was read from the filter. For example, another way to write
+a compressed file: >
+
+ :autocmd FileWritePre *.gz set bin|'[,']!gzip
+ :autocmd FileWritePost *.gz undo|set nobin
+<
+ *autocommand-pattern*
+You can specify multiple patterns, separated by commas. Here are some
+examples: >
+
+ :autocmd BufRead * set tw=79 nocin ic infercase fo=2croq
+ :autocmd BufRead .letter set tw=72 fo=2tcrq
+ :autocmd BufEnter .letter set dict=/usr/lib/dict/words
+ :autocmd BufLeave .letter set dict=
+ :autocmd BufRead,BufNewFile *.c,*.h set tw=0 cin noic
+ :autocmd BufEnter *.c,*.h abbr FOR for (i = 0; i < 3; ++i)<CR>{<CR>}<Esc>O
+ :autocmd BufLeave *.c,*.h unabbr FOR
+
+For makefiles (makefile, Makefile, imakefile, makefile.unix, etc.): >
+
+ :autocmd BufEnter ?akefile* set include=^s\=include
+ :autocmd BufLeave ?akefile* set include&
+
+To always start editing C files at the first function: >
+
+ :autocmd BufRead *.c,*.h 1;/^{
+
+Without the "1;" above, the search would start from wherever the file was
+entered, rather than from the start of the file.
+
+ *skeleton* *template*
+To read a skeleton (template) file when opening a new file: >
+
+ :autocmd BufNewFile *.c 0r ~/vim/skeleton.c
+ :autocmd BufNewFile *.h 0r ~/vim/skeleton.h
+ :autocmd BufNewFile *.java 0r ~/vim/skeleton.java
+
+To insert the current date and time in a *.html file when writing it: >
+
+ :autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s
+ :fun LastMod()
+ : if line("$") > 20
+ : let l = 20
+ : else
+ : let l = line("$")
+ : endif
+ : exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified: " .
+ : \ strftime("%Y %b %d")
+ :endfun
+
+You need to have a line "Last modified: <date time>" in the first 20 lines
+of the file for this to work. Vim replaces <date time> (and anything in the
+same line after it) with the current date and time. Explanation:
+ ks mark current position with mark 's'
+ call LastMod() call the LastMod() function to do the work
+ 's return the cursor to the old position
+The LastMod() function checks if the file is shorter than 20 lines, and then
+uses the ":g" command to find lines that contain "Last modified: ". For those
+lines the ":s" command is executed to replace the existing date with the
+current one. The ":execute" command is used to be able to use an expression
+for the ":g" and ":s" commands. The date is obtained with the strftime()
+function. You can change its argument to get another date string.
+
+When entering :autocmd on the command-line, completion of events and command
+names may be done (with <Tab>, CTRL-D, etc.) where appropriate.
+
+Vim executes all matching autocommands in the order that you specify them.
+It is recommended that your first autocommand be used for all files by using
+"*" as the file pattern. This means that you can define defaults you like
+here for any settings, and if there is another matching autocommand it will
+override these. But if there is no other matching autocommand, then at least
+your default settings are recovered (if entering this file from another for
+which autocommands did match). Note that "*" will also match files starting
+with ".", unlike Unix shells.
+
+ *autocmd-searchpat*
+Autocommands do not change the current search patterns. Vim saves the current
+search patterns before executing autocommands then restores them after the
+autocommands finish. This means that autocommands do not affect the strings
+highlighted with the 'hlsearch' option. Within autocommands, you can still
+use search patterns normally, e.g., with the "n" command.
+If you want an autocommand to set the search pattern, such that it is used
+after the autocommand finishes, use the ":let @/ =" command.
+The search-highlighting cannot be switched off with ":nohlsearch" in an
+autocommand. Use the 'h' flag in the 'viminfo' option to disable search-
+highlighting when starting Vim.
+
+ *Cmd-event*
+When using one of the "*Cmd" events, the matching autocommands are expected to
+do the file reading or writing. This can be used when working with a special
+kind of file, for example on a remote system.
+CAREFUL: If you use these events in a wrong way, it may have the effect of
+making it impossible to read or write the matching files! Make sure you test
+your autocommands properly. Best is to use a pattern that will never match a
+normal file name, for example "ftp://*".
+
+When defining a BufReadCmd it will be difficult for Vim to recover a crashed
+editing session. When recovering from the original file, Vim reads only those
+parts of a file that are not found in the swap file. Since that is not
+possible with a BufReadCmd, use the |:preserve| command to make sure the
+original file isn't needed for recovery. You might want to do this only when
+you expect the file to be modified.
+
+The |v:cmdarg| variable holds the "++enc=" and "++ff=" argument that are
+effective. These should be used for the command that reads/writes the file.
+The |v:cmdbang| variable is one when "!" was used, zero otherwise.
+
+See the $VIMRUNTIME/plugin/netrw.vim for examples.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
new file mode 100644
index 000000000..2e56ccb5c
--- /dev/null
+++ b/runtime/doc/change.txt
@@ -0,0 +1,1425 @@
+*change.txt* For Vim version 7.0aa. Last change: 2004 May 08
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+This file describes commands that delete or change text. In this context,
+changing text means deleting the text and replacing it with other text using
+one command. You can undo all of these commands. You can repeat the non-Ex
+commands with the "." command.
+
+1. Deleting text |deleting|
+2. Delete and insert |delete-insert|
+3. Simple changes |simple-change| *changing*
+4. Complex changes |complex-change|
+5. Copying and moving text |copy-move|
+6. Formatting text |formatting|
+
+For inserting text see |insert.txt|.
+
+==============================================================================
+1. Deleting text *deleting* *E470*
+
+["x]<Del> or *<Del>* *x* *dl*
+["x]x Delete [count] characters under and after the cursor
+ [into register x] (not |linewise|). Does the same as
+ "dl".
+ The <Del> key does not take a [count]. Instead, it
+ deletes the last character of the count.
+ See |:fixdel| if the <Del> key does not do what you
+ want. See |'whichwrap'| for deleting a line break
+ (join lines). {Vi does not support <Del>}
+
+ *X* *dh*
+["x]X Delete [count] characters before the cursor [into
+ register x] (not |linewise|). Does the same as "dh".
+ Also see |'whichwrap'|.
+
+ *d*
+["x]d{motion} Delete text that {motion} moves over [into register
+ x]. See below for exceptions.
+
+ *dd*
+["x]dd Delete [count] lines [into register x] |linewise|.
+
+ *D*
+["x]D Delete the characters under the cursor until the end
+ of the line and [count]-1 more lines [into register
+ x]; synonym for "d$".
+ (not |linewise|)
+
+{Visual}["x]x or *v_x* *v_d* *v_<Del>*
+{Visual}["x]d or
+{Visual}["x]<Del> Delete the highlighted text [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+{Visual}["x]CTRL-H or *v_CTRL-H* *v_<BS>*
+{Visual}["x]<BS> When in Select mode: Delete the highlighted text [into
+ register x].
+
+{Visual}["x]X or *v_X* *v_D* *v_b_D*
+{Visual}["x]D Delete the highlighted lines [into register x] (for
+ {Visual} see |Visual-mode|). In Visual block mode,
+ "D" deletes the highlighted text plus all text until
+ the end of the line. {not in Vi}
+
+ *:d* *:de* *:del* *:delete*
+:[range]d[elete] [x] Delete [range] lines (default: current line) [into
+ register x].
+
+:[range]d[elete] [x] {count}
+ Delete {count} lines, starting with [range]
+ (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
+|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.
+
+Trying to delete an empty region of text (e.g., "d0" in the first column)
+is an error when 'cpoptions' includes the 'E' flag.
+
+ *J*
+J Join [count] lines, with a minimum of two lines.
+ Remove the indent and insert up to two spaces (see
+ below).
+
+ *v_J*
+{Visual}J Join the highlighted lines, with a minimum of two
+ lines. Remove the indent and insert up to two spaces
+ (see below). {not in Vi}
+
+ *gJ*
+gJ Join [count] lines, with a minimum of two lines.
+ Don't insert or remove any spaces. {not in Vi}
+
+ *v_gJ*
+{Visual}gJ Join the highlighted lines, with a minimum of two
+ lines. Don't insert or remove any spaces. {not in
+ Vi}
+
+ *:j* *:join*
+:[range]j[oin][!] Join [range] lines. Same as "J", except with [!]
+ the join does not insert or delete any spaces.
+ If a [range] has equal start and end values, this
+ command does nothing. The default behavior is to
+ join the current line with the line below it.
+ {not in Vi: !}
+
+:[range]j[oin][!] {count}
+ Join {count} lines, starting with [range] (default:
+ current line |cmdline-ranges|). Same as "J", except
+ with [!] the join does not insert or delete any
+ spaces.
+ {not in Vi: !}
+
+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
+undo them.
+
+These commands, except "gJ", insert one space in place of the <EOL> unless
+there is trailing white space or the next line starts with a ')'. These
+commands, except "gJ", delete any leading white space on the next line. If
+the 'joinspaces' option is on, these commands insert two spaces after a '.',
+'!' or '?' (but if 'cpoptions' includes the 'j' flag, they insert two spaces
+only after a '.').
+The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting
+spaces before and after a multi-byte character |fo-table|.
+
+
+==============================================================================
+2. Delete and insert *delete-insert* *replacing*
+
+ *R*
+R Enter Replace mode: Each character you type replaces
+ an existing character, starting with the character
+ under the cursor. Repeat the entered text [count]-1
+ times. See |Replace-mode| for more details.
+
+ *gR*
+gR Enter Virtual Replace mode: Each character you type
+ replaces existing characters in screen space. So a
+ <Tab> may replace several characters at once.
+ Repeat the entered text [count]-1 times. See
+ |Virtual-Replace-mode| for more details.
+ {not available when compiled without the +vreplace
+ feature}
+
+ *c*
+["x]c{motion} Delete {motion} text [into register x] and start
+ insert. When 'cpoptions' includes the 'E' flag and
+ there is no text to delete (e.g., with "cTx" when the
+ cursor is just after an 'x'), an error occurs and
+ insert mode does not start (this is Vi compatible).
+ When 'cpoptions' does not include the 'E' flag, the
+ "c" command always starts insert mode, even if there
+ is no text to delete.
+
+ *cc*
+["x]cc Delete [count] lines [into register x] and start
+ insert |linewise|. If 'autoindent' is on, preserve
+ the indent of the first line.
+
+ *C*
+["x]C Delete from the cursor position to the end of the
+ line and [count]-1 more lines [into register x], and
+ start insert. Synonym for c$ (not |linewise|).
+
+ *s*
+["x]s Delete [count] characters [into register x] and start
+ insert (s stands for Substitute). Synonym for "cl"
+ (not |linewise|).
+
+ *S*
+["x]S Delete [count] lines [into register x] and start
+ insert. Synonym for "cc" |linewise|.
+
+{Visual}["x]c or *v_c* *v_s*
+{Visual}["x]s Delete the highlighted text [into register x] and
+ start insert (for {Visual} see |Visual-mode|). {not
+ in Vi}
+
+ *v_r*
+{Visual}["x]r{char} Replace all selected characters by {char}.
+
+ *v_C*
+{Visual}["x]C Delete the highlighted lines [into register x] and
+ start insert. In Visual block mode it works
+ differently |v_b_C|. {not in Vi}
+ *v_S*
+{Visual}["x]S Delete the highlighted lines [into register x] and
+ start insert (for {Visual} see |Visual-mode|). {not
+ in Vi}
+ *v_R*
+{Visual}["x]R Currently just like {Visual}["x]S. In a next version
+ it might work differently. {not in Vi}
+
+Notes:
+- You can end Insert and Replace mode with <Esc>.
+- See the section "Insert and Replace mode" |mode-ins-repl| for the other
+ special characters in these modes.
+- The effect of [count] takes place after Vim exits Insert or Replace mode.
+- When the 'cpoptions' option contains '$' and the change is within one line,
+ Vim continues to show the text to be deleted and puts a '$' at the last
+ deleted character.
+
+See |registers| for an explanation of registers.
+
+Replace mode is just like Insert mode, except that every character you enter
+deletes one character. If you reach the end of a line, Vim appends any
+further characters (just like Insert mode). In Replace mode, the backspace
+key restores the original text (if there was any). (See section "Insert and
+Replace mode" |mode-ins-repl|).
+
+ *cw* *cW*
+Special case: "cw" and "cW" work the same as "ce" and "cE" if the cursor is
+on a non-blank. This is because Vim interprets "cw" as change-word, and a
+word does not include the following white space. {Vi: "cw" when on a blank
+followed by other blanks changes only the first blank; this is probably a
+bug, because "dw" deletes all the blanks; use the 'w' flag in 'cpoptions' to
+make it work like Vi anyway}
+
+If you prefer "cw" to include the space after a word, use this mapping: >
+ :map cw dwi
+<
+ *:c* *:ch* *:change*
+:{range}c[hange] Replace lines of text with some different text.
+ Type a line containing only "." to stop replacing.
+ Without {range}, this command changes only the current
+ line.
+
+==============================================================================
+3. Simple changes *simple-change*
+
+ *r*
+r{char} Replace the character under the cursor with {char}.
+ If {char} is a <CR> or <NL>, a line break replaces the
+ character. To replace with a real <CR>, use CTRL-V
+ <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 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
+ five characters with a single line break.
+ When {char} is a <CR> or <NL>, Vim performs
+ autoindenting. This works just like deleting the
+ characters that are replaced and then doing
+ "i<CR><Esc>".
+ {char} can be entered as a digraph |digraph-arg|.
+ |:lmap| mappings apply to {char}. The CTRL-^ command
+ in Insert mode can be used to switch this on/off
+ |i_CTRL-^|. See |utf-8-char-arg| about using
+ composing characters when 'encoding' is Unicode.
+
+ *gr*
+gr{char} Replace the virtual characters under the cursor with
+ {char}. This replaces in screen space, not file
+ space. See |gR| and |Virtual-Replace-mode| for more
+ details. As with |r| a count may be given.
+ {char} can be entered like with |r|.
+ {not available when compiled without the +vreplace
+ feature}
+
+ *digraph-arg*
+The argument for Normal mode commands like |r| and |t| is a single character.
+When 'cpo' doesn't contain the 'D' flag, this character can also be entered
+like |digraphs|. First type CTRL-K and then the two digraph characters.
+{not available when compiled without the |+digraphs| feature}
+
+ *case*
+The following commands change the case of letters. The currently active
+|locale| is used. See |:language|. The LC_CTYPE value matters here.
+
+ *~*
+~ 'notildeop' option: Switch case of the character
+ under the cursor and move the cursor to the right.
+ If a [count] is given, do that many characters. {Vi:
+ no count}
+
+~{motion} 'tildeop' option: switch case of {motion} text. {Vi:
+ tilde cannot be used as an operator}
+
+ *g~*
+g~{motion} Switch case of {motion} text. {not in Vi}
+
+g~g~ *g~g~* *g~~*
+g~~ Switch case of current line. {not in Vi}.
+
+ *v_~*
+{Visual}~ Switch case of highlighted text (for {Visual} see
+ |Visual-mode|). {not in Vi}
+
+ *v_U*
+{Visual}U Make highlighted text uppercase (for {Visual} see
+ |Visual-mode|). {not in Vi}
+
+ *gU* *uppercase*
+gU{motion} Make {motion} text uppercase. {not in Vi}
+ Example: >
+ :map! <C-F> <Esc>gUiw`]a
+< This works in Insert mode: press CTRL-F to make the
+ word before the cursor uppercase. Handy to type
+ words in lowercase and then make them uppercase.
+
+
+gUgU *gUgU* *gUU*
+gUU Make current line uppercase. {not in Vi}.
+
+ *v_u*
+{Visual}u Make highlighted text lowercase (for {Visual} see
+ |Visual-mode|). {not in Vi}
+
+ *gu* *lowercase*
+gu{motion} Make {motion} text lowercase. {not in Vi}
+
+gugu *gugu* *guu*
+guu Make current line lowercase. {not in Vi}.
+
+ *g?* *rot13*
+g?{motion} Rot13 encode {motion} text. {not in Vi}
+
+ *v_g?*
+{Visual}g? Rot13 encode the highlighted text (for {Visual} see
+ |Visual-mode|). {not in Vi}
+
+g?g? *g?g?* *g??*
+g?? Rot13 encode current line. {not in Vi}.
+
+
+Adding and subtracting ~
+ *CTRL-A*
+CTRL-A Add [count] to the number or alphabetic character at
+ or after the cursor. {not in Vi}
+
+ *CTRL-X*
+CTRL-X Subtract [count] from the number or alphabetic
+ character at or after the cursor. {not in Vi}
+
+The CTRL-A and CTRL-X commands work for (signed) decimal numbers, unsigned
+octal and hexadecimal numbers and alphabetic characters. This depends on the
+'nrformats' option.
+- When 'nrformats' includes "alpha", Vim will change the alphabetic character
+ under or after the cursor. This is useful to make lists with an alphabetic
+ index.
+- When 'nrformats' includes "hex", Vim assumes numbers starting with '0x' or
+ '0X' are hexadecimal. The case of the rightmost letter in the number
+ determines the case of the resulting hexadecimal number. If there is no
+ letter in the current number, Vim uses the previously detected case.
+- When 'nrformats' includes "octal", Vim considers numbers starting with a '0'
+ to be octal. Other numbers are decimal and may have a preceding minus sign.
+ If the cursor is on a number, the commands apply to that number; otherwise
+ Vim uses the number to the right of the cursor.
+
+For numbers with leading zeros (including all octal and hexadecimal numbers),
+Vim preserves the number of characters in the number when possible. CTRL-A on
+"0077" results in "0100", CTRL-X on "0x100" results in "0x0ff". Note that
+when 'nrformats' includes "octal", decimal numbers with leading zeros are
+impossible because they are indistinguishable from octal numbers.
+
+The CTRL-A command is very useful in a macro. Example: Use the following
+steps to make a numbered list.
+
+1. Create the first list entry, make sure it starts with a number.
+2. qa - start recording into buffer 'a'
+3. Y - yank the entry
+4. p - put a copy of the entry below the first one
+5. CTRL-A - increment the number
+6. q - stop recording
+7. <count>@a - repeat the yank, put and increment <count> times
+
+
+SHIFTING LINES LEFT OR RIGHT *shift-left-right*
+
+ *<*
+<{motion} Shift {motion} lines one 'shiftwidth' leftwards.
+
+ *<<*
+<< Shift [count] lines one 'shiftwidth' leftwards.
+
+ *v_<*
+{Visual}[count]< Shift the highlighted lines [count] 'shiftwidth'
+ leftwards (for {Visual} see |Visual-mode|). {not in
+ Vi}
+
+ *>*
+ >{motion} Shift {motion} lines one 'shiftwidth' rightwards.
+
+ *>>*
+ >> Shift [count] lines one 'shiftwidth' rightwards.
+
+ *v_>*
+{Visual}[count]> Shift the highlighted lines [count] 'shiftwidth'
+ rightwards (for {Visual} see |Visual-mode|). {not in
+ Vi}
+
+ *:<*
+:[range]< Shift [range] lines one 'shiftwidth' left. Repeat '<'
+ for shifting multiple 'shiftwidth's.
+
+:[range]< {count} Shift {count} lines one 'shiftwidth' left, starting
+ with [range] (default current line |cmdline-ranges|).
+ Repeat '<' for shifting multiple 'shiftwidth's.
+
+:[range]le[ft] [indent] left align lines in [range]. Sets the indent in the
+ lines to [indent] (default 0). {not in Vi}
+
+ *:>*
+:[range]> Shift {count} [range] lines one 'shiftwidth' right.
+ Repeat '>' for shifting multiple 'shiftwidth's.
+
+:[range]> {count} Shift {count} lines one 'shiftwidth' right, starting
+ with [range] (default current line |cmdline-ranges|).
+ Repeat '>' for shifting multiple 'shiftwidth's.
+
+The ">" and "<" commands are handy for changing the indentation within
+programs. Use the 'shiftwidth' option to set the size of the white space
+which these commands insert or delete. Normally the 'shiftwidth' option is 8,
+but you can set it to, say, 3 to make smaller indents. The shift leftwards
+stops when there is no indent. The shift right does not affect empty lines.
+
+If the 'shiftround' option is on, the indent is rounded to a multiple of
+'shiftwidth'.
+
+If the 'smartindent' option is on, or 'cindent' is on and 'cinkeys' contains
+'#', shift right does not affect lines starting with '#' (these are supposed
+to be C preprocessor lines that must stay in column 1).
+
+When the 'expandtab' option is off (this is the default) Vim uses <Tab>s as
+much as possible to make the indent. You can use ">><<" to replace an indent
+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!").
+
+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
+ :>> 5 move 5 lines 2 indents to the right
+ :5>> move line 5 2 indents to the right
+
+==============================================================================
+4. Complex changes *complex-change*
+
+ *!* *filter*
+!{motion}{filter} Filter {motion} text lines through the external
+ program {filter}.
+
+ *!!*
+!!{filter} Filter [count] lines through the external program
+ {filter}.
+
+ *v_!*
+{Visual}!{filter} Filter the highlighted lines through the external
+ program {filter} (for {Visual} see |Visual-mode|).
+ {not in Vi}
+
+:{range}![!]{filter} [!][arg] *:range!*
+ Filter {range} lines through the external program
+ {filter}. Vim replaces the optional bangs with the
+ latest given command and appends the optional [arg].
+ Vim saves the output of the filter command in a
+ temporary file and then reads the file into the
+ buffer. Vim uses the 'shellredir' option to redirect
+ the filter output to the temporary file.
+ When the 'R' flag is included in 'cpoptions' marks in
+ the filtered lines are deleted, unless the
+ |:keepmarks| command is used. Example: >
+ :keepmarks '<,'>!sort
+< When the number of lines after filtering is less than
+ before, marks in the missing lines are deleted anyway.
+
+ *=*
+={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|.
+
+ *==*
+== Filter [count] lines like with ={motion}.
+
+ *v_=*
+{Visual}= Filter the highlighted lines like with ={motion}.
+ {not in Vi}
+
+A filter is a program that accepts text at standard input, changes it in some
+way, and sends it to standard output. You can use the commands above to send
+some text through a filter. Examples of filters are "sort", which sorts lines
+alphabetically, and "indent", which formats C program files (you need a
+version of indent that 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.
+
+
+ *:s* *:su* *:substitute*
+:[range]s[ubstitute]/{pattern}/{string}/[&][c][e][g][p][r][i][I] [count]
+ For each line in [range] replace a match of {pattern}
+ with {string}.
+ For the {pattern} see |pattern|.
+ {string} can be a literal string, or something
+ special; see |sub-replace-special|.
+ When [range] and [count] are omitted, replace in the
+ current line only.
+ When [count] is given, replace in [count] lines,
+ starting with the last line in [range]. When [range]
+ is omitted start in the current line.
+ Also see |cmdline-ranges|.
+ See |:s_flags| for the flags.
+
+:[range]s[ubstitute] [c][e][g][p][r][i][I] [count]
+:[range]&[&][c][e][g][p][r][i][I] [count] *:&*
+ Repeat last :substitute with same search pattern and
+ substitute string, but without the same flags. You
+ may add extra flags (see |:s_flags|).
+ 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
+ 'r' flags isn't required, but in scripts it's a good
+ idea to keep it to avoid confusion.
+
+:[range]~[&][c][e][g][p][r][i][I] [count] *:~*
+ Repeat last substitute with same substitute string
+ but with last used search pattern. This is like
+ ":&r". See |:s_flags| for the flags.
+
+ *&*
+& Synonym for ":s//~/" (repeat last substitute). Note
+ that the flags are not remembered, thus it might
+ 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).
+ Mnemonic: global substitute. {not in Vi}
+
+ *:snomagic* *:sno*
+:[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'.
+ {not in Vi}
+
+ *:s_flags*
+The flags that you can use for the substitute commands:
+
+[&] Must be the first one: Keep the flags from the previous substitute
+ command. Examples: >
+ :&&
+ :s/this/that/&
+< Note that ":s" and ":&" don't keep the flags.
+ {not in Vi}
+
+[c] Confirm each substitution. Vim highlights the matching string (with
+ |hl-IncSearch|). You can type: *:s_c*
+ 'y' to substitute this match
+ 'l' to substitute this match and then quit ("last")
+ 'n' to skip this match
+ <Esc> to quit substituting
+ 'a' to substitute this and all remaining matches {not in Vi}
+ 'q' to quit substituting {not in Vi}
+ CTRL-E to scroll the screen up {not in Vi, not available when
+ compiled without the +insert_expand feature}
+ CTRL-Y to scroll the screen down {not in Vi, not available when
+ compiled without the +insert_expand feature}
+ If the 'edcompatible' option is on, Vim remembers the [c] flag and
+ toggles it each time you use it, but resets it when you give a new
+ search pattern.
+ {not in Vi: highlighting of the match, other responses than 'y' or 'n'}
+
+[e] When the search pattern fails, do not issue an error message and, in
+ particular, continue in maps as if no error occurred. This is most
+ useful to prevent the "No match" error from breaking a mapping. Vim
+ does not suppress the following error messages, however:
+ Regular expressions can't be delimited by letters
+ \ should be followed by /, ? or &
+ No previous substitute regular expression
+ Trailing characters
+ Interrupted
+ {not in Vi}
+
+[g] Replace all occurrences in the line. Without this argument,
+ replacement occurs only for the first occurrence in each line. If
+ the 'edcompatible' option is on, Vim remembers this flag and toggles
+ it each time you use it, but resets it when you give a new search
+ pattern. If the 'gdefault' option is on, this flag is on by default
+ and the [g] argument switches it off.
+
+[i] Ignore case for the pattern. The 'ignorecase' and 'smartcase' options
+ are not used.
+ {not in Vi}
+
+[I] Don't ignore case for the pattern. The 'ignorecase' and 'smartcase'
+ options are not used.
+ {not in Vi}
+
+[p] Print the line containing the last substitute.
+ {not in Vi}
+
+[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
+ command was a search command such as "/", use the pattern from that
+ command.
+ For ":s" with an argument this already happens: >
+ :s/blue/red/
+ /green
+ :s//red/ or :~ or :&r
+< The last commands will replace "green" with "red". >
+ :s/blue/red/
+ /green
+ :&
+< The last command will replace "blue" with "red".
+ {not in Vi}
+
+Note that there is no flag to change the "magicness" of the pattern. A
+different command is used instead. The reason is that the flags can only be
+found by skipping the pattern, and in 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
+command.
+
+For compatibility with Vi these two exceptions are allowed:
+"\/{string}/" and "\?{string}?" do the same as "//{string}/r".
+"\&{string}&" does the same as "//{string}/".
+ *E146*
+Instead of the '/' which surrounds the pattern and replacement string, you
+can use any other character, but not an alphanumeric character, '\', '"' or
+'|'. This is useful if you want to include a '/' in the search pattern or
+replacement string. Example: >
+ :s+/+//+
+
+For the definition of a pattern, see |pattern|.
+
+ *sub-replace-special* *:s\=*
+When the {string} starts with "\=" it is evaluated as an expression, see
+|sub-replace-expression|. Otherwise these characters in {string} have a
+special meaning:
+
+magic nomagic action ~
+ & \& replaced with the whole matched pattern *s/\&*
+ \& & replaced with &
+ \0 replaced with the whole matched pattern *\0* *s/\0*
+ \1 replaced with the matched pattern in the first
+ pair of () *s/\1*
+ \2 replaced with the matched pattern in the first
+ pair of () *s/\2*
+ .. .. *s/\3*
+ \9 replaced with the matched pattern in the ninth
+ pair of () *s/\9*
+ ~ \~ replaced with the {string} of the previous
+ substitute *s~*
+ \~ ~ replaced with ~ *s/\~*
+ \u next character made uppercase *s/\u*
+ \U following characters made uppercase, until \E *s/\U*
+ \l next character made lowercase *s/\l*
+ \L following characters made lowercase, until \E *s/\L*
+ \e end of \u, \U, \l and \L (NOTE: not <Esc>!) *s/\e*
+ \E end of \u, \U, \l and \L *s/\E*
+ <CR> split line in two at this point
+ (Type the <CR> as CTRL-V <Enter>) *s<CR>*
+ \r idem *s/\r*
+ \<CR> insert a carriage-return (CTRL-M)
+ (Type the <CR> as CTRL-V <Enter>) *s/\<CR>*
+ \n insert a <NL> (<NUL> in the file)
+ (does NOT break the line) *s/\n*
+ \b insert a <BS> *s/\b*
+ \t insert a <Tab> *s/\t*
+ \\ insert a single backslash *s/\\*
+ \x where x is any character not mentioned above:
+ Reserved for future expansion
+
+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"
+
+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.
+
+command text result ~
+:s/aa/a^Ma/ aa a<line-break>a
+:s/aa/a\^Ma/ aa a^Ma
+:s/aa/a\\^Ma/ aa a\<line-break>a
+
+(you need to type CTRL-V <CR> to get a ^M here)
+
+The numbering of "\1", "\2" etc. is done based on which "\(" comes first in
+the pattern (going left to right). When a parentheses group matches several
+times, the last one will be used for "\1", "\2", etc. Example: >
+ :s/\(\(a[a-d] \)*\)/\2/ modifies "aa ab x" to "ab x"
+
+When using parentheses in combination with '|', like in \([ab]\)\|\([cd]\),
+either the first or second pattern in parentheses did not match, so either
+\1 or \2 is empty. Example: >
+ :s/\([ab]\)\|\([cd]\)/\1x/g modifies "a b c d" to "ax bx x x"
+<
+
+Substitute with an expression *sub-replace-expression*
+
+When the substitute string starts with "\=" the remainer is interpreted as an
+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 "<CR>", "\<CR>" and "\\". Thus in the result of the
+expression you need to use two backslashes 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).
+
+The whole matched text can be accessed with "submatch(0)". The text matched
+with the first pair of () with "submatch(1)". Likewise for further
+sub-matches in ().
+
+Be careful: The separation character must not appear in the expression!
+Consider using a character like "@" or ":". There is no problem if the result
+of the expression contains the separation character.
+
+Example: >
+ :s@\n@\="\r" . expand("$HOME") . "\r"@
+This replaces an end-of-line with a new line containing the value of $HOME.
+
+
+ *:pro* *:promptfind*
+:promptf[ind] [string]
+ Put up a Search dialog. When [string] is given, it is
+ used as the initial search string.
+ {only for Win32, Motif and GTK GUI}
+
+ *:promptr* *:promptrepl*
+:promptr[epl] [string]
+ Put up a Search/Replace dialog. When [string] is
+ given, it is used as the initial search string.
+ {only for Win32, Motif and GTK GUI}
+
+ *:ret* *:retab*
+:[range]ret[ab][!] [new_tabstop]
+ Replace all sequences of white-space containing a
+ <Tab> with new strings of white-space using the new
+ tabstop value given. If you do not specify a new
+ tabstop size or it is zero, Vim uses the current value
+ of 'tabstop'.
+ The current value of 'tabstop' is always used to
+ compute the width of existing tabs.
+ With !, Vim also replaces strings of only normal
+ spaces with tabs where appropriate.
+ With 'expandtab' on, Vim replaces all tabs with the
+ appropriate number of spaces.
+ This command sets 'tabstop' to the new value given,
+ and if performed on the whole file, which is default,
+ should not make any visible change.
+ 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
+ <Tab> characters, which can mess up a printf().
+ {not in Vi}
+ Not available when |+ex_extra| feature was disabled at
+ compile time.
+
+ *retab-example*
+Example for using autocommands and ":retab" to edit a file which is stored
+with tabstops at 8 but edited with tabstops set at 4. Warning: white space
+inside of strings can change! Also see 'softtabstop' option. >
+
+ :auto BufReadPost *.xx retab! 4
+ :auto BufWritePre *.xx retab! 8
+ :auto BufWritePost *.xx retab! 4
+ :auto BufNewFile *.xx set ts=4
+
+==============================================================================
+5. Copying and moving text *copy-move*
+
+ *quote*
+"{a-zA-Z0-9.%#:-"} Use register {a-zA-Z0-9.%#:-"} for next delete, yank
+ or put (use uppercase character to append with
+ delete and yank) ({.%#:} only work with put).
+
+ *:reg* *:registers*
+:reg[isters] Display the contents of all numbered and named
+ registers. {not in Vi}
+
+:reg[isters] {arg} Display the contents of the numbered and named
+ registers that are mentioned in {arg}. For example: >
+ :dis 1a
+< to display registers '1' and 'a'. Spaces are allowed
+ in {arg}. {not in Vi}
+
+ *:di* *:display*
+:di[splay] [arg] Same as :registers. {not in Vi}
+
+ *y* *yank*
+["x]y{motion} Yank {motion} text [into register x]. When no
+ characters are to be yanked (e.g., "y0" in column 1),
+ this is an error when 'cpoptions' includes the 'E'
+ flag.
+
+ *yy*
+["x]yy Yank [count] lines [into register x] |linewise|.
+
+ *Y*
+["x]Y yank [count] lines [into register x] (synonym for
+ yy, |linewise|). If you like "Y" to work from the
+ cursor to the end of line (which is more logical,
+ but not Vi-compatible) use ":map Y y$".
+
+ *v_y*
+{Visual}["x]y Yank the highlighted text [into register x] (for
+ {Visual} see |Visual-mode|). {not in Vi}
+
+ *v_Y*
+{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].
+
+:[range]y[ank] [x] {count}
+ Yank {count} lines, starting with last line number
+ in [range] (default: current line |cmdline-ranges|),
+ [into register x].
+
+ *p* *put* *E353*
+["x]p Put the text [from register x] after the cursor
+ [count] times. {Vi: no count}
+
+ *P*
+["x]P Put the text [from register x] before the cursor
+ [count] times. {Vi: no count}
+
+ *<MiddleMouse>*
+["x]<MiddleMouse> Put the text from a register before the cursor [count]
+ times. Uses the "* register, unless another is
+ specified. Using the mouse only works when 'mouse'
+ contains 'n' or 'a'.
+ {not in Vi}
+ If you have a scrollwheel and often accidentally paste
+ text, you can use these mappings to disable the
+ pasting with the middle mouse button: >
+ :map <MiddleMouse> <Nop>
+ :imap <MiddleMouse> <Nop>
+< You might want to disable the multi-click versions
+ too, see |double-click|.
+
+ *gp*
+["x]gp Just like "p", but leave the cursor just after the new
+ text. {not in Vi}
+
+ *gP*
+["x]gP Just like "P", but leave the cursor just after the new
+ text. {not in Vi}
+
+ *:pu* *:put*
+:[line]pu[t] [x] Put the text [from register x] after [line] (default
+ current line). This always works |linewise|, thus
+ this command can be used to put a yanked block as new
+ lines.
+ 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 '"'
+ characters to prevent them from terminating the
+ command. Example: >
+ :put ='path' . \",/test\"
+< If there is no expression after '=', Vim uses the
+ previous expression. You can see it with ":dis =".
+
+:[line]pu[t]! [x] Put the text [from register x] before [line] (default
+ current line).
+
+["x]]p or *]p* *]<MiddleMouse>*
+["x]]<MiddleMouse> Like "p", but adjust the indent to the current line.
+ Using the mouse only works when 'mouse' contains 'n'
+ or 'a'. {not in Vi}
+
+["x][P or *[P*
+["x]]P or *]P*
+["x][p or *[p* *[<MiddleMouse>*
+["x][<MiddleMouse> Like "P", but adjust the indent to the current line.
+ Using the mouse only works when 'mouse' contains 'n'
+ or 'a'. {not in Vi}
+
+You can use these commands to copy text from one place to another. Do this
+by first getting the text into a register with a yank, delete or change
+command, then inserting the register contents with a put command. You can
+also use these commands to move text from one file to another, because Vim
+preserves all registers when changing buffers (the CTRL-^ command is a quick
+way to toggle between two files).
+
+ *linewise-register* *characterwise-register*
+You can repeat the put commands with "." (except for :put) and undo them. If
+the command that was used to get the text into the register was |linewise|,
+Vim inserts the text below ("p") or above ("P") the line where the cursor is.
+Otherwise Vim inserts the text after ("p") or before ("P") the cursor. With
+the ":put" command, Vim always inserts the text in the next line. You can
+exchange two characters with the command sequence "xp". You can exchange two
+lines with the command sequence "ddp". You can exchange two words with the
+command sequence "deep" (start with the cursor in the blank space before the
+first word). You can use the "']" or "`]" command after the put command to
+move the cursor to the end of the inserted text, or use "'[" or "`[" to move
+the cursor to the start.
+
+ *put-Visual-mode* *v_p* *v_P*
+When using a put command like |p| or |P| in Visual mode, Vim will try to
+replace the selected text with the contents of the register. Whether this
+works well depends on the type of selection and the type of the text in the
+register. With blockwise selection it also depends on the size of the block
+and whether the corners are on an existing character. (implementation detail:
+it actually works by first putting the register after the selection and then
+deleting the selection).
+
+ *blockwise-register*
+If you use a blockwise Visual mode command to get the text into the register,
+the block of text will be inserted before ("P") or after ("p") the cursor
+column in the current and next lines. Vim makes the whole block of text start
+in the same column. Thus the inserted text looks the same as when it was
+yanked or deleted. Vim may replace some <Tab> characters with spaces to make
+this happen. However, if the width of the block is not a multiple of a <Tab>
+width and the text after the inserted block contains <Tab>s, that text may be
+misaligned.
+
+Note that after a characterwise yank command, Vim leaves the cursor on the
+first yanked character that is closest to the start of the buffer. This means
+that "yl" doesn't move the cursor, but "yh" moves the cursor one character
+left.
+Rationale: In Vi the "y" command followed by a backwards motion would
+ sometimes not move the cursor to the first yanked character,
+ because redisplaying was skipped. In Vim it always moves to
+ the first character, as specified by Posix.
+With a linewise yank command the cursor is put in the first line, but the
+column is unmodified, thus it may not be on the first yanked character.
+
+There are nine types of registers: *registers* *E354*
+1. The unnamed register ""
+2. 10 numbered registers "0 to "9
+3. The small delete register "-
+4. 26 named registers "a to "z or "A to "Z
+5. four read-only registers ":, "., "% and "#
+6. the expression register "=
+7. The selection and drop registers "*, "+ and "~
+8. The black hole register "_
+9. Last search pattern register "/
+
+1. Unnamed register "" *quote_quote* *quotequote*
+Vim fills this register with text deleted with the "d", "c", "s", "x" commands
+or copied with the yank "y" command, regardless of whether or not a specific
+register was used (e.g. "xdd). An exception is the '_' register: "_dd does
+not store the deleted text in any register. Vim uses the contents of this
+register for any put command (p or P) which does not specify a register.
+Additionally you can access it with the name '"'. This means you have to type
+two double quotes. Writing to the "" register writes to register "0.
+{Vi: register contents are lost when changing files, no '"'}
+
+2. Numbered registers "0 to "9 *quote_number* *quote0* *quote1*
+ *quote2* *quote3* *quote4* *quote9*
+Vim fills these registers with text from yank and delete commands.
+ Numbered register 0 contains the text from the most recent yank command,
+unless the command specified another register with ["x].
+ Numbered register 1 contains the text deleted by the most recent delete or
+change command, unless the command specified another register or the text is
+less than one line (the small delete register is used then). An exception is
+made for these commands: |%|, |(|, |)|, |`|, |/|, |?|, |n|, |N|, |{| and |}|.
+Register "1 is always used then (this is Vi compatible). The "- register is
+used as well if the delete is within a line.
+ With each successive deletion or change, Vim shifts the previous contents
+of register 1 into register 2, 2 into 3, and so forth, losing the previous
+contents of register 9.
+{Vi: numbered register contents are lost when changing files; register 0 does
+not exist}
+
+3. Small delete register "- *quote_-* *quote-*
+This register contains text from commands that delete less than one line,
+except when the command specifies a register with ["x].
+{not in Vi}
+
+4. Named registers "a to "z or "A to "Z *quote_alpha* *quotea*
+Vim fills these registers only when you say so. Specify them as lowercase
+letters to replace their previous contents or as uppercase letters to append
+to their previous contents.
+
+5. Read-only registers ":, "., "% and "#
+These are '%', '#', ':' and '.'. You can use them only with the "p", "P",
+and ":put" commands and with CTRL-R. {not in Vi}
+ *quote_.* *quote.* *E29*
+ ". Contains the last inserted text (the same as what is inserted
+ with the insert mode commands CTRL-A and CTRL-@). Note: this
+ doesn't work with CTRL-R on the command-line. It works a bit
+ differently, like inserting the text instead of putting it
+ ('textwidth' and other options affect what is inserted).
+ *quote_%* *quote%*
+ "% Contains the name of the current file.
+ *quote_#* *quote#*
+ "# Contains the name of the alternate file.
+ *quote_:* *quote:* *E30*
+ ": Contains the most recent executed command-line. Example: Use
+ "@:" to repeat the previous command-line command.
+ The command-line is only stored in this register when at least
+ one character of it was typed. Thus it remains unchanged if
+ the command was completely from a mapping.
+ {not available when compiled without the |+cmdline_hist|
+ feature}
+
+6. Expression register "= *quote_=* *quote=*
+This is not really a register that stores text, but is a way to use an
+expression in commands which use a register. The expression register is
+read-only; you cannot put text into it. After the '=', the cursor moves to
+the command-line, where you can enter any expression (see |expression|). All
+normal command-line editing commands are available, including a special
+history for expressions. When you end the command-line by typing <CR>, Vim
+computes the result of the expression. If you end it with <Esc>, Vim abandons
+the expression. If you do not enter an expression, Vim uses the previous
+expression (like with the "/" command). If the "= register is used for the
+"p" command, the string is split up at <NL> characters. If the string ends in
+a <NL>, it is regarded as a linewise register. {not in Vi}
+
+7. Selection and drop registers "*, "+ and "~
+Use these register for storing and retrieving the selected text for the GUI.
+See |quotestar| and |quoteplus|. When the clipboard is not available or not
+working, the unnamed register is used instead. {not in Vi}
+
+Note that there is only a distinction between "* and "+ for X11 systems. For
+an explanation of the difference, see |x11-selection|. Under MS-Windows, use
+of "* and "+ is actually synonymous and refers to the |gui-clipboard|.
+
+ *quote_~* *quote~* *<Drop>*
+The read-only "~ register stores the dropped text from the last drag'n'drop
+operation. When something has been dropped onto Vim, the "~ register is
+filled in and the <Drop> pseudo key is sent for notification. You can remap
+this key if you want; the default action (for all modes) is to insert the
+contents of the "~ register at the cursor position. {not in Vi}
+{only available when compiled with the |+dnd| feature, curently only with the
+GTK GUI}
+
+Note: The "~ register is only used when dropping plain text onto Vim.
+Drag'n'drop of URI lists is handled internally.
+
+8. Black hole register "_ *quote_*
+When writing to this register, nothing happens. This can be used to delete
+text without affecting the normal registers. When reading from this register,
+nothing is returned. {not in Vi}
+
+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
+other matches without actually searching. You can't yank or delete into this
+register. {not in Vi}
+
+ *@/*
+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
+command displays all named and numbered registers; the unnamed register is
+labelled '"').
+
+The next three commands always work on whole lines.
+
+:[range]co[py] {address} *:co* *:copy*
+ Copy the lines given by [range] to below the line
+ given by {address}.
+
+ *:t*
+:t Synonym for copy.
+
+:[range]m[ove] {address} *:m* *:mo* *:move* *E134*
+ Move the lines given by [range] to below the line
+ given by {address}.
+
+==============================================================================
+6. Formatting text *formatting*
+
+:[range]ce[nter] [width] *:ce* *:center*
+ Center lines in [range] between [width] columns
+ (default 'textwidth' or 80 when 'textwidth' is 0).
+ {not in Vi}
+ Not available when |+ex_extra| feature was disabled at
+ compile time.
+
+:[range]ri[ght] [width] *:ri* *:right*
+ Right-align lines in [range] at [width] columns
+ (default 'textwidth' or 80 when 'textwidth' is 0).
+ {not in Vi}
+ Not available when |+ex_extra| feature was disabled at
+ compile time.
+
+ *:le* *:left*
+:[range]le[ft] [indent]
+ Left-align lines in [range]. Sets the indent in the
+ lines to [indent] (default 0). {not in Vi}
+ Not available when |+ex_extra| feature was disabled at
+ compile time.
+
+ *gq*
+gq{motion} Format the lines that {motion} moves over. The
+ 'textwidth' option controls the length of each
+ formatted line (see below). If the 'textwidth' option
+ is 0, the formatted line length is the screen width
+ (with a maximum width of 79). {not in Vi}
+ The 'formatoptions' option controls the type of
+ formatting |fo-table|.
+ NOTE: The "Q" command formerly performed this
+ function. If you still want to use "Q" for
+ formatting, use this mapping: >
+ :nnoremap Q gq
+
+gqgq *gqgq* *gqq*
+gqq Format the current line. {not in Vi}
+
+ *v_gq*
+{Visual}gq Format the highlighted text. (for {Visual} see
+ |Visual-mode|). {not in Vi}
+
+ *gw*
+gw{motion} Format the lines that {motion} moves over. Similar to
+ |gq| but puts the cursor back at the same position in
+ the text. However, 'formatprg' is not used.
+ {not in Vi}
+
+Example: To format the current paragraph use: *gqap* >
+ gqap
+
+The "gq" command leaves the cursor in the line where the motion command takes
+the cursor. This allows you to repeat formatting repeated with ".". This
+works well with "gqj" (format current and next line) and "gq}" (format until
+end of paragraph). Note: When 'formatprg' is set, "gq" leaves the cursor on
+the first formatted line (as with using a filter command).
+
+If you want to format the current paragraph and continue where you were, use: >
+ gwap
+If you always want to keep paragraphs formatted you may want to add the 'a'
+flag to 'formatoptions'. See |auto-format|.
+
+If the 'autoindent' option is on, Vim uses the indent of the first line for
+the following lines.
+
+Formatting does not change empty lines (but it does change lines with only
+white space!).
+
+The 'joinspaces' option is used when lines are joined together.
+
+You can set the 'formatprg' option to the name of an external program for Vim
+to use for text formatting. The 'textwidth' and other options have no effect
+on formatting by an external program.
+
+ *right-justify*
+There is no command in Vim to right justify text. You can do it with
+an external command, like "par" (e.g.: "!}par" to format until the end of the
+paragraph) or set 'formatprg' to "par".
+
+ *format-comments*
+Vim can format comments in a special way. Vim recognizes a comment by a
+specific string at the start of the line (ignoring white space). Three types
+of comments can be used:
+
+- A comment string that repeats at the start of each line. An example is the
+ type of comment used in shell scripts, starting with "#".
+- A comment string that occurs only in the first line, not in the following
+ lines. An example is this list with dashes.
+- Three-piece comments that have a start string, an end string, and optional
+ lines in between. The strings for the start, middle and end are different.
+ An example is the C-style comment:
+ /*
+ * this is a C comment
+ */
+
+The 'comments' option is a comma-separated list of parts. Each part defines a
+type of comment string. A part consists of:
+ {flags}:{string}
+
+{string} is the literal text that must appear.
+
+{flags}:
+ n Nested comment. Nesting with mixed parts is allowed. If 'comments'
+ is "n:),n:>" a line starting with "> ) >" is a comment.
+
+ b Blank (<Space>, <Tab> or <EOL>) required after {string}.
+
+ f Only the first line has the comment string. Do not repeat comment on
+ the next line, but preserve indentation (e.g., a bullet-list).
+
+ s Start of three-piece comment
+
+ m Middle of a three-piece comment
+
+ e End of a three-piece comment
+
+ l Left adjust middle with start or end (default). Only recognized when
+ used together with 's' or 'e'.
+
+ r Right adjust middle with start or end. Only recognized when used
+ together with 's' or 'e'.
+
+ O Don't use this one for the "O" command.
+
+ x Allows three-piece comments to be ended by just typing the last
+ character of the end-comment string as the first character on a new
+ line, when the middle-comment string has already been inserted
+ automatically. See below for more details.
+
+ {digits}
+ When together with 's' or 'e': add extra indent for the middle part.
+ This can be used to left-align the middle part with the start or end
+ and then add an offset.
+
+ -{digits}
+ Like {digits} but reduce the indent. This only works when there is
+ some indent for the start or end part that can be removed.
+
+When a string has none of the 'f', 's', 'm' or 'e' flags, Vim assumes the
+comment string repeats at the start of each line. The flags field may be
+empty.
+
+Any blank space in the text before and after the {string} is part of the
+{string}, so do not include leading or trailing blanks unless the blanks are a
+required part of the comment string.
+
+When one comment leader is part of another, specify the part after the whole.
+For example, to include both "-" and "->", use >
+ :set comments=f:->,f:-
+
+A three-piece comment must always be given as start,middle,end, with no other
+parts in between. An example of a three-piece comment is >
+ sr:/*,mb:*,ex:*/
+for C-comments. To avoid recognizing "*ptr" as a comment, the middle string
+includes the 'b' flag. For three-piece comments, Vim checks the text after
+the start and middle strings for the end string. If Vim finds the end string,
+the comment does not continue on the next line. Three-piece comments must
+have a middle string because otherwise Vim can't recognize the middle lines.
+
+Notice the use of the "x" flag in the above three-piece comment definition.
+When you hit Return in a C-comment, Vim will insert the middle comment leader
+for the new line, e.g. " * ". To close this comment you just have to type "/"
+before typing anything else on the new line. This will replace the
+middle-comment leader with the end-comment leader, leaving just " */". There
+is no need to hit BackSpace first.
+
+Examples: >
+ "b:*" Includes lines starting with "*", but not if the "*" is
+ followed by a non-blank. This avoids a pointer dereference
+ like "*str" to be recognized as a comment.
+ "n:>" Includes a line starting with ">", ">>", ">>>", etc.
+ "fb:-" Format a list that starts with "- ".
+
+By default, "b:#" is included. This means that a line that starts with
+"#include" is not recognized as a comment line. But a line that starts with
+"# define" is recognized. This is a compromise.
+
+Often the alignment can be changed from right alignment to a left alignment
+with an additional space. For example, for Javadoc comments, this can be
+used (insert a backslash before the space when using ":set"): >
+ s1:/*,mb:*,ex:*/
+Note that an offset is included with start, so that the middle part is left
+aligned with the start and then an offset of one character added. This makes
+it possible to left align the start and middle for this construction: >
+ /**
+ * comment
+ */
+
+{not available when compiled without the |+comments| feature}
+
+ *fo-table*
+You can use the 'formatoptions' option to influence how Vim formats text.
+'formatoptions' is a string that can contain any of the letters below. The
+default setting is "tcq". You can separate the option letters with commas for
+readability.
+
+letter meaning when present in 'formatoptions' ~
+
+t Auto-wrap text using textwidth (does not apply to comments)
+c Auto-wrap comments using textwidth, inserting the current comment
+ leader automatically.
+r Automatically insert the current comment leader after hitting
+ <Enter> in Insert mode.
+o Automatically insert the current comment leader after hitting 'o' or
+ 'O' in Normal mode.
+q Allow formatting of comments with "gq".
+ Note that formatting will not change blank lines or lines containing
+ only the comment leader. A new paragraph starts after such a line,
+ or when the comment leader changes.
+w Trailing white space indicates a paragraph continues in the next line.
+ A line that ends in a non-white character ends a paragraph.
+a Automatic formatting of paragraphs. Every time text is inserted or
+ deleted the paragraph will be reformatted. See |auto-format|.
+ When the 'c' flag is present this only happens for recognized
+ comments.
+n When formatting text, recognize numbered lists. The indent of the
+ text after the number is used for the next line. The number may
+ optionally be followed by '.', ':', ')', ']' or '}'. Note that
+ 'autoindent' must be set too. Doesn't work well together with "2".
+ Example: >
+ 1. the first item
+ wraps
+ 2. the second item
+2 When formatting text, use the indent of the second line of a paragraph
+ for the rest of the paragraph, instead of the indent of the first
+ line. This supports paragraphs in which the first line has a
+ different indent than the rest. Note that 'autoindent' must be set
+ too. Example: >
+ first line of a paragraph
+ second line of the same paragraph
+ third line.
+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
+ bugs in this area. It uses the screen column instead of the line
+ column.)
+b Like 'v', but only auto-wrap if you enter a blank at or before
+ the wrap margin. If the line was longer than 'textwidth' when you
+ started the insert, or you do not enter a blank in the insert before
+ reaching 'textwidth', Vim does not perform auto-wrapping.
+l Long lines are not broken in insert mode: When a line was longer than
+ 'textwidth' when the insert command started, Vim does not
+ automatically format it.
+m Also break at a multi-byte character above 255. This is useful for
+ Asian text where every character is a word on its own.
+M When joining lines, don't insert a space before or after a multi-byte
+ character. Overrules the 'B' flag.
+B When joining lines, don't insert a space between two multi-byte
+ 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).
+
+
+With 't' and 'c' you can specify when Vim performs auto-wrapping:
+value action ~
+"" no automatic formatting (you can use "gq" for manual formatting)
+"t" automatic formatting of text, but not comments
+"c" automatic formatting for comments, but not text (good for C code)
+"tc" automatic formatting for text and comments
+
+Note that when 'textwidth' is 0, Vim does no formatting anyway (but does
+insert comment leaders according to the 'comments' option).
+
+Note that when 'paste' is on, Vim does no formatting at all.
+
+Note that 'textwidth' can be non-zero even if Vim never performs auto-wrapping;
+'textwidth' is still useful for formatting with "gq".
+
+If the 'comments' option includes "/*", "*" and/or "*/", then Vim has some
+built in stuff to treat these types of comments a bit more cleverly.
+Opening a new line before or after "/*" or "*/" (with 'r' or 'o' present in
+'formatoptions') gives the correct start of the line automatically. The same
+happens with formatting and auto-wrapping. Opening a line after a line
+starting with "/*" or "*" and containing "*/", will cause no comment leader to
+be inserted, and the indent of the new line is taken from the line containing
+the start of the comment.
+E.g.:
+ /* ~
+ * Your typical comment. ~
+ */ ~
+ The indent on this line is the same as the start of the above
+ comment.
+
+All of this should be really cool, especially in conjunction with the new
+:autocmd command to prepare different settings for different types of file.
+
+Some examples:
+ for C code (only format comments): >
+ :set fo=croq
+< for Mail/news (format all, don't start comment with "o" command): >
+ :set fo=tcrq
+<
+
+Automatic formatting *auto-format*
+
+When the 'a' flag is present in 'formatoptions' text is formatted
+automatically when inserting text or deleting text. This works nice for
+editing text paragraphs. A few hints on how to use this:
+
+- You need to properly define paragraphs. The simplest is paragraphs that are
+ separated by a blank line. When there is no separating blank line, consider
+ using the 'w' flag and adding a space at the end of each line in the
+ paragraphs except the last one.
+
+- You can set the 'formatoptions' based on the type of file |filetype| or
+ specifically for one file with a |modeline|.
+
+- Set 'formatoptions' to "aw2tq" to make text with indents like this:
+
+ bla bla foobar bla
+ bla foobar bla foobar bla
+ bla bla foobar bla
+ bla foobar bla bla foobar
+
+- Add the 'c' flag to only auto-format comments. Useful in source code.
+
+And a few warnings:
+
+- When part of the text is not properly separated in paragraphs, making
+ changes in this text will cause it to be formatted anyway. Consider doing >
+
+ :set fo-=a
+
+- When using the 'w' flag (trailing space means paragraph continues) and
+ deleting the last line of a paragraph with |dd|, the paragraph will be
+ joined with the next one.
+
+- Changed text is saved for undo. Formatting is also a change. Thus each
+ format action saves text for undo. This may consume quite a lot of memory.
+
+- Formatting a long paragraph and/or with complicated indenting may be slow.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
new file mode 100644
index 000000000..90b35b412
--- /dev/null
+++ b/runtime/doc/cmdline.txt
@@ -0,0 +1,992 @@
+*cmdline.txt* For Vim version 7.0aa. Last change: 2004 Mar 31
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *Cmdline-mode* *Command-line-mode*
+Command-line mode *Cmdline* *Command-line* *mode-cmdline* *:*
+
+Command-line mode is used to enter Ex commands (":"), search patterns
+("/" and "?"), and filter commands ("!").
+
+Basic command line editing is explained in chapter 20 of the user manual
+|usr_20.txt|.
+
+1. Command-line editing |cmdline-editing|
+2. Command-line completion |cmdline-completion|
+3. Ex command-lines |cmdline-lines|
+4. Ex command-line ranges |cmdline-ranges|
+5. Ex special characters |cmdline-special|
+6. Command-line window |cmdline-window|
+
+==============================================================================
+1. Command-line editing *cmdline-editing*
+
+Normally characters are inserted in front of the cursor position. You can
+move around in the command-line with the left and right cursor keys. With the
+<Insert> key, you can toggle between inserting and overstriking characters.
+{Vi: can only alter the last character in the line}
+
+Note that if your keyboard does not have working cursor keys or any of the
+other special keys, you can use ":cnoremap" to define another key for them.
+For example, to define tcsh style editing keys: *tcsh-style* >
+ :cnoremap <C-A> <Home>
+ :cnoremap <C-F> <Right>
+ :cnoremap <C-B> <Left>
+ :cnoremap <Esc>b <S-Left>
+ :cnoremap <Esc>f <S-Right>
+(<> notation |<>|; type all this literally)
+
+ *cmdline-too-long*
+When the command line is getting longer than what fits on the screen, only the
+part that fits will be shown. The cursor can only move in this visible part,
+thus you cannot edit beyond that.
+
+ *cmdline-history* *history*
+The command-lines that you enter are remembered in a history table. You can
+recall them with the up and down cursor keys. There are actually four
+history tables:
+- one for ':' commands
+- one for search strings
+- one for expressions
+- one for input lines, typed for the |input()| function.
+These are completely separate. Each history can only be accessed when
+entering the same type of line.
+Use the 'history' option to set the number of lines that are remembered
+(default: 20).
+Notes:
+- When you enter a command-line that is exactly the same as an older one, the
+ old one is removed (to avoid repeated commands moving older commands out of
+ the history).
+- Only commands that are typed are remembered. Ones that completely come from
+ mappings are not put in the history
+- All searches are put in the search history, including the ones that come
+ from commands like "*" and "#". But for a mapping, only the last search is
+ remembered (to avoid that long mappings trash the history).
+{Vi: no history}
+{not available when compiled without the |+cmdline_hist| feature}
+
+There is an automatic completion of names on the command-line; see
+|cmdline-completion|.
+
+ *c_CTRL-V*
+CTRL-V Insert next non-digit literally. Up to three digits form the
+ decimal value of a single byte. The non-digit and the three
+ digits are not considered for mapping. This works the same
+ way as in Insert mode (see above, |i_CTRL-V|).
+ Note: Under Windows CTRL-V is often mapped to paste text.
+ Use CTRL-Q instead then.
+ *c_CTRL-Q*
+CTRL-Q Same as CTRL-V. But with some terminals it is used for
+ control flow, it doesn't work then.
+
+ *c_<Left>*
+<Left> cursor left
+ *c_<Right>*
+<Right> cursor right
+ *c_<S-Left>*
+<S-Left> or <C-Left> *c_<C-Left>*
+ cursor one WORD left
+ *c_<S-Right>*
+<S-Right> or <C-Right> *c_<C-Right>*
+ cursor one WORD right
+CTRL-B or <Home> *c_CTRL-B* *c_<Home>*
+ cursor to beginning of command-line
+CTRL-E or <End> *c_CTRL-E* *c_<End>*
+ cursor to end of command-line
+
+ *c_<LeftMouse>*
+<LeftMouse> cursor to position of mouse click.
+
+CTRL-H *c_<BS>* *c_CTRL-H*
+<BS> delete the character in front of the cursor (see |:fixdel| if
+ your <BS> key does not do what you want).
+ *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).
+ *c_CTRL-W*
+CTRL-W delete the word before the cursor
+ *c_CTRL-U*
+CTRL-U remove all characters between the cursor position and
+ the beginning of the line. Previous versions of vim
+ deleted all characters on the line. If that is the
+ preferred behavior, add the following to your .vimrc: >
+ :cnoremap <C-U> <C-E><C-U>
+<
+ Note: if the command-line becomes empty with one of the
+ delete commands, Command-line mode is quit.
+ *c_<Insert>*
+<Insert> Toggle between insert and overstrike. {not in Vi}
+
+{char1} <BS> {char2} or *c_digraph*
+CTRL-K {char1} {char2} *c_CTRL-K*
+ enter digraph (see |digraphs|). When {char1} is a special
+ key, the code for that key is inserted in <> form. {not in Vi}
+
+CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
+ Insert the contents of a numbered or named register. Between
+ typing CTRL-R and the second character '"' will be displayed
+ to indicate that you are expected to enter the name of a
+ register.
+ The text is inserted as if you typed it, but mappings and
+ abbreviations are not used. Command-line completion through
+ 'wildchar' is not triggered though. And characters that end
+ the command line are inserted literally (<Esc>, <CR>, <NL>,
+ <C-C>). A <BS> or CTRL-W could still end the command line
+ though, and remaining characters will then be interpreted in
+ another mode, which might not be what you intended.
+ Special registers:
+ '"' the unnamed register, containing the text of
+ the last delete or yank
+ '%' the current file name
+ '#' the alternate file name
+ '*' the clipboard contents (X11: primary selection)
+ '+' the clipboard contents
+ '/' the last search pattern
+ ':' the last command-line
+ '-' the last small (less than a line) delete
+ '.' the last inserted text
+ *c_CTRL-R_=*
+ '=' the expression register: you are prompted to
+ enter an expression (see |expression|)
+ See |registers| about registers. {not in Vi}
+
+CTRL-R CTRL-F *c_CTRL-R_CTRL-F* *c_<C-R>_<C-F>*
+CTRL-R CTRL-P *c_CTRL-R_CTRL-P* *c_<C-R>_<C-P>*
+CTRL-R CTRL-W *c_CTRL-R_CTRL-W* *c_<C-R>_<C-W>*
+CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c_<C-R>_<C-A>*
+ Insert the object under the cursor:
+ CTRL-F the Filename under the cursor
+ CTRL-P the Filename under the cursor, expanded with
+ 'path' as in |gf|
+ CTRL-W the Word under the cursor
+ CTRL-A the WORD under the cursor; see |WORD|
+ {not in Vi}
+ CTRL-F and CTRL-P: {only when +file_in_path feature is
+ included}
+
+ *c_CTRL-R_CTRL-R* *c_<C-R>_<C-R>*
+ *c_CTRL-R_CTRL-O* *c_<C-R>_<C-O>*
+CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A}
+CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A}
+ Insert register or object under the cursor. Works like
+ |c_CTRL-R| but inserts the text literally. For example, if
+ register a contains "xy^Hz" (where ^H is a backspace),
+ "CTRL-R a" will insert "xz" while "CTRL-R CTRL-R a" will
+ insert "xy^Hz".
+
+CTRL-\ e {expr} *c_CTRL-\_e*
+ Evaluate {expr} and replace the whole command line with the
+ result. You will be prompted for the expression, type <Enter>
+ to finish it. It's most useful in mappings though. See
+ |expression|.
+ See |c_CTRL-R_=| for inserting the result of an expression.
+ Useful functions are |getcmdline()| and |getcmdpos()|.
+ The cursor position is unchanged, except when the cursor was
+ at the end of the line, then it stays at the end.
+ |setcmdpos()| can be used to set the cursor position.
+ Example: >
+ :cmap <F7> <C-\>eAppendSome()<CR>
+ :func AppendSome()
+ :let cmd = getcmdline() . " Some()"
+ :" place the cursor on the )
+ :call setcmdpos(strlen(cmd))
+ :return cmd
+ :endfunc
+<
+ *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>*
+<CR> or <NL> start entered command
+ *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.
+ *c_CTRL-C*
+CTRL-C quit command-line without executing
+
+ *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>*
+<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|
+ feature}
+
+ *c_<S-Up>* *c_<PageUp>*
+<S-Up> or <PageUp>
+ recall older command-line from history
+ {not available when compiled without the |+cmdline_hist|
+ feature}
+ *c_<S-Down>* *c_<PageDown>*
+<S-Down> or <PageDown>
+ recall more recent command-line from history
+ {not available when compiled without the |+cmdline_hist|
+ feature}
+
+CTRL-D command-line completion (see |cmdline-completion|)
+'wildchar' option
+ command-line completion (see |cmdline-completion|)
+CTRL-N command-line completion (see |cmdline-completion|)
+CTRL-P command-line completion (see |cmdline-completion|)
+CTRL-A command-line completion (see |cmdline-completion|)
+CTRL-L command-line completion (see |cmdline-completion|)
+
+ *c_CTRL-_*
+CTRL-_ a - switch between Hebrew and English keyboard mode, which is
+ private to the command-line and not related to hkmap.
+ This is useful when Hebrew text entry is required in the
+ command-line, searches, abbreviations, etc. Applies only if
+ Vim is compiled with the |+rightleft| feature and the
+ 'allowrevins' option is set.
+ See |rileft.txt|.
+
+ b - switch between Farsi and English keyboard mode, which is
+ private to the command-line and not related to fkmap. In
+ Farsi keyboard mode the characters are inserted in reverse
+ insert manner. This is useful when Farsi text entry is
+ required in the command-line, searches, abbreviations, etc.
+ Applies only if Vim is compiled with the |+farsi| feature.
+ See |farsi.txt|.
+
+ *c_CTRL-^*
+CTRL-^ Toggle the use of language |:lmap| mappings and/or Input
+ Method.
+ When typing a pattern for a search command and 'imsearch' is
+ not -1, VAL is the value of 'imsearch', otherwise VAL is the
+ value of 'iminsert'.
+ When language mappings are defined:
+ - If VAL is 1 (langmap mappings used) it becomes 0 (no langmap
+ mappings used).
+ - If VAL was not 1 it becomes 1, thus langmap mappings are
+ enabled.
+ When no language mappings are defined:
+ - If VAL is 2 (Input Method is used) it becomes 0 (no input
+ method used)
+ - If VAL has another value it becomes 2, thus the Input Method
+ is enabled.
+ These language mappings are normally used to type characters
+ that are different from what the keyboard produces. The
+ 'keymap' option can be used to install a whole number of them.
+ When entering a command line, langmap mappings are switched
+ off, since you are expected to type a command. After
+ switching it on with CTRL-^, the new state is not used again
+ for the next command or Search pattern.
+ {not in Vi}
+
+For Emacs-style editing on the command-line see |emacs-keys|.
+
+The <Up> and <Down> keys take the current command-line as a search string.
+The beginning of the next/previous command-lines are compared with this
+string. The first line that matches is the new command-line. When typing
+these two keys repeatedly, the same string is used again. For example, this
+can be used to find the previous substitute command: Type ":s" and then <Up>.
+The same could be done by typing <S-Up> a number of times until the desired
+command-line is shown. (Note: the shifted arrow keys do not work on all
+terminals)
+
+ *his* *:history*
+:his[tory] Print the history of last entered commands.
+ {not in Vi}
+ {not available when compiled without the |+cmdline_hist|
+ feature}
+
+: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
+ a[ll] all of the above
+ {not in Vi}
+
+ If the numbers {first} and/or {last} are given, the respective
+ range of entries from a history is listed. These numbers can
+ be specified in the following form:
+ *:history-indexing*
+ A positive number represents the absolute index of an entry
+ as it is given in the first column of a :history listing.
+ This number remains fixed even if other entries are deleted.
+
+ A negative number means the relative position of an entry,
+ counted from the newest entry (which has index -1) backwards.
+
+ Examples:
+ List entries 6 to 12 from the search history: >
+ :history / 6,12
+<
+ List the recent five entries from all histories: >
+ :history all -5,
+
+==============================================================================
+2. Command-line completion *cmdline-completion*
+
+When editing the command-line, a few commands can be used to complete the
+word before the cursor. This is available for:
+
+- Command names: At the start of the command-line.
+- Tags: Only after the ":tag" command.
+- File names: Only after a command that accepts a file name or a setting for
+ an option that can be set to a file name. This is called file name
+ completion.
+- Options: Only after the ":set" command.
+- 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.
+
+These are the commands that can be used:
+
+ *c_CTRL-D*
+CTRL-D List names that match the pattern in front of the cursor.
+ When showing file names, directories are highlighted (see
+ 'highlight' option). Names where 'suffixes' matches are moved
+ to the end.
+ *c_CTRL-I* *c_wildchar* *c_<Tab>*
+'wildchar' option
+ A match is done on the pattern in front of the cursor. The
+ match (if there are several, the first match) is inserted
+ in place of the pattern. (Note: does not work inside a
+ macro, because <Tab> or <Esc> are mostly used as 'wildchar',
+ and these have a special meaning in some macros.) When typed
+ again and there were multiple matches, the next
+ match is inserted. After the last match, the first is used
+ again (wrap around).
+ The behavior can be changed with the 'wildmode' option.
+ *c_CTRL-N*
+CTRL-N After using 'wildchar' which got multiple matches, go to next
+ match. Otherwise recall more recent command-line from history.
+<S-Tab> *c_CTRL-P* *c_<S-Tab>*
+CTRL-P After using 'wildchar' which got multiple matches, go to
+ previous match. Otherwise recall older command-line from
+ history. <S-Tab> only works with the GUI, on the Amiga and
+ with MS-DOS.
+ *c_CTRL-A*
+CTRL-A All names that match the pattern in front of the cursor are
+ inserted.
+ *c_CTRL-L*
+CTRL-L A match is done on the pattern in front of the cursor. If
+ there is one match, it is inserted in place of the pattern.
+ If there are multiple matches the longest common part is
+ inserted in place of the pattern. If the result is shorter
+ than the pattern, no completion is done.
+
+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.
+
+If you like tcsh's autolist completion, you can use this mapping:
+ :cnoremap X <C-L><C-D>
+(Where X is the command key to use, <C-L> is CTRL-L and <C-D> is CTRL-D)
+This will find the longest match and then list all matching files.
+
+If you like tcsh's autolist completion, you can use the 'wildmode' option to
+emulate it. For example, this mimics autolist=ambiguous:
+ :set wildmode=longest,list
+This will find the longest match with the first 'wildchar', then list all
+matching files with the next.
+
+ *suffixes*
+For file name completion you can use the 'suffixes' option to set a priority
+between files with almost the same name. If there are multiple matches,
+those files with an extension that is in the 'suffixes' option are ignored.
+The default is ".bak,~,.o,.h,.info,.swp,.obj", which means that files ending
+in ".bak", "~", ".o", ".h", ".info", ".swp" and ".obj" are sometimes ignored.
+It is impossible to ignore suffixes with two dots. Examples:
+
+ pattern: files: match: ~
+ test* test.c test.h test.o test.c
+ test* test.h test.o test.h and test.o
+ test* test.i test.h test.c test.i and test.c
+
+If there is more than one matching file (after ignoring the ones matching
+the 'suffixes' option) the first file name is inserted. You can see that
+there is only one match when you type 'wildchar' twice and the completed
+match stays the same. You can get to the other matches by entering
+'wildchar', CTRL-N or CTRL-P. All files are included, also the ones with
+extensions matching the 'suffixes' option.
+
+To completely ignore files with some extension use 'wildignore'.
+
+The old value of an option can be obtained by hitting 'wildchar' just after
+the '='. For example, typing 'wildchar' after ":set dir=" will insert the
+current value of 'dir'. This overrules file name completion for the options
+that take a file name.
+
+If you would like using <S-Tab> for CTRL-P in an xterm, put this command in
+your .cshrc: >
+ xmodmap -e "keysym Tab = Tab Find"
+And this in your .vimrc: >
+ :cmap <Esc>[1~ <C-P>
+
+==============================================================================
+3. Ex command-lines *cmdline-lines*
+
+The Ex commands have a few specialties:
+
+ *:quote*
+'"' at the start of a line causes the whole line to be ignored. '"'
+after a command causes the rest of the line to be ignored. This can be used
+to add comments. Example: >
+ :set ai "set 'autoindent' option
+It is not possible to add a comment to a shell command ":!cmd" or to the
+":map" command and friends, because they see the '"' as part of their
+argument.
+
+ *:bar* *:\bar*
+'|' can be used to separate commands, so you can give multiple commands in one
+line. If you want to use '|' in an argument, precede it with '\'.
+
+These commands see the '|' as their argument, and can therefore not be
+followed by another command:
+ :argdo
+ :autocmd
+ :bufdo
+ :command
+ :cscope
+ :debug
+ :folddoopen
+ :folddoclosed
+ :function
+ :global
+ :help
+ :helpfind
+ :make
+ :normal
+ :perl
+ :perldo
+ :promptfind
+ :promptrepl
+ :pyfile
+ :python
+ :registers
+ :read !
+ :scscope
+ :tcl
+ :tcldo
+ :tclfile
+ :vglobal
+ :windo
+ :write !
+ :[range]!
+ a user defined command without the "-bar" argument |:command|
+
+Note that this is confusing (inherited from Vi): With ":g" the '|' is included
+in the command, with ":s" it is not.
+
+To be able to use another command anyway, use the ":execute" command.
+Example (append the output of "ls" and jump to the first line): >
+ :execute 'r !ls' | '[
+
+There is one exception: When the 'b' flag is present in 'cpoptions', with the
+":map" and ":abbr" commands and friends CTRL-V needs to be used instead of
+'\'. You can also use "<Bar>" instead. See also |map_bar|.
+
+Examples: >
+ :!ls | wc view the output of two commands
+ :r !ls | wc insert the same output in the text
+ :%g/foo/p|> moves all matching lines one shiftwidth
+ :%s/foo/bar/|> moves one line one shiftwidth
+ :map q 10^V| map "q" to "10|"
+ :map q 10\| map \ l map "q" to "10\" and map "\" to "l"
+ (when 'b' is present in 'cpoptions')
+
+You can also use <NL> to separate commands in the same way as with '|'. To
+insert a <NL> use CTRL-V CTRL-J. "^@" will be shown. Using '|' is the
+preferred method. But for external commands a <NL> must be used, because a
+'|' is included in the external command. To avoid the special meaning of <NL>
+it must be preceded with a backslash. Example: >
+ :r !date<NL>-join
+This reads the current date into the file and joins it with the previous line.
+
+Note that when the command before the '|' generates an error, the following
+commands will not be executed.
+
+
+Because of Vi compatibility the following strange commands are supported: >
+ :| print current line (like ":p")
+ :3| print line 3 (like ":3p")
+ :3 goto line 3
+
+A colon is allowed between the range and the command name. It is ignored
+(this is Vi compatible). For example: >
+ :1,$:s/pat/string
+
+When the character '%' or '#' is used where a file name is expected, they are
+expanded to the current and alternate file name (see the chapter "editing
+files" |:_%| |:_#|).
+
+Embedded spaces in file names are allowed on the Amiga if one file name is
+expected as argument. Trailing spaces will be ignored, unless escaped with a
+backslash or CTRL-V. Note that the ":next" command uses spaces to separate
+file names. Escape the spaces to include them in a file name. Example: >
+ :next foo\ bar goes\ to school\
+starts editing the three files "foo bar", "goes to" and "school ".
+
+When you want to use the special characters '"' or '|' in a command, or want
+to use '%' or '#' in a file name, precede them with a backslash. The
+backslash is not required in a range and in the ":substitute" command.
+
+ *:_!*
+The '!' (bang) character after an Ex command makes the command behave in a
+different way. The '!' should be placed immediately after the command, without
+any blanks in between. If you insert blanks the '!' will be seen as an
+argument for the command, which has a different meaning. For example:
+ :w! name write the current buffer to file "name", overwriting
+ any existing file
+ :w !name send the current buffer as standard input to command
+ "name"
+
+==============================================================================
+4. Ex command-line ranges *cmdline-ranges* *[range]* *E16* *E493*
+
+Some Ex commands accept a line range in front of them. This is noted as
+[range]. It consists of one or more line specifiers, separated with ',' or
+';'.
+
+The basics are explained in section |10.3| of the user manual.
+
+ *:,* *:;*
+When separated with ';' the cursor position will be set to that line
+before interpreting the next line specifier. This doesn't happen for ','.
+Examples: >
+ 4,/this line/
+< from line 4 till match with "this line" after the cursor line. >
+ 5;/that line/
+< from line 5 till match with "that line" after line 5.
+
+The default line specifier for most commands is the cursor position, but the
+commands ":write" and ":global" have the whole file (1,$) as default.
+
+If more line specifiers are given than required for the command, the first
+one(s) will be ignored.
+
+Line numbers may be specified with: *:range* *E14* *{address}*
+ {number} an absolute line number
+ . the current line *:.*
+ $ the last line in the file *:$*
+ % equal to 1,$ (the entire file) *:%*
+ 't position of mark t (lowercase) *:'*
+ 'T position of mark T (uppercase); when the mark is in
+ another file it cannot be used in a range
+ /{pattern}[/] the next line where {pattern} matches *:/*
+ ?{pattern}[?] the previous line where {pattern} matches *:?*
+ \/ the next line where the previously used search
+ pattern matches
+ \? the previous line where the previously used search
+ pattern matches
+ \& the next line where the previously used substitute
+ pattern matches
+
+Each may be followed (several times) by '+' or '-' and an optional number.
+This number is added or subtracted from the preceding line number. If the
+number is omitted, 1 is used.
+
+The "/" and "?" after {pattern} are required to separate the pattern from
+anything that follows.
+
+The "/" and "?" may be preceded with another address. The search starts from
+there. The difference from using ';' is that the cursor isn't moved.
+Examples: >
+ /pat1//pat2/ Find line containing "pat2" after line containing
+ "pat1", without moving the cursor.
+ 7;/pat2/ Find line containing "pat2", after line 7, leaving
+ the cursor in line 7.
+
+The {number} must be between 0 and the number of lines in the file. When
+using a 0 (zero) this is interpreted as a 1 by most commands. Commands that
+use it as a count do use it as a zero (|:tag|, |:pop|, etc). Some commands
+interpret the zero as "before the first line" (|:read|, search pattern, etc).
+
+Examples: >
+ .+3 three lines below the cursor
+ /that/+1 the line below the next line containing "that"
+ .,$ from current line until end of file
+ 0;/that the first line containing "that", also matches in the
+ first line.
+ 1;/that the first line after line 1 containing "that"
+
+Some commands allow for a count after the command. This count is used as the
+number of lines to be used, starting with the line given in the last line
+specifier (the default is the cursor line). The commands that accept a count
+are the ones that use a range but do not have a file name argument (because
+a file name can also be a number).
+
+Examples: >
+ :s/x/X/g 5 substitute 'x' by 'X' in the current line and four
+ following lines
+ :23d 4 delete lines 23, 24, 25 and 26
+
+
+Folds and Range
+
+When folds are active the line numbers are rounded off to include the whole
+closed fold. See |fold-behavior|.
+
+
+Reverse Range
+
+A range should have the lower line number first. If this is not the case, Vim
+will ask you if it should swap the line numbers. This is not done within the
+global command ":g".
+
+
+Count and Range *N:*
+
+When giving a count before entering ":", this is translated into:
+ :.,.+(count - 1)
+In words: The 'count' lines at and after the cursor. Example: To delete
+three lines: >
+ 3:d<CR> is translated into: .,.+2d<CR>
+<
+
+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
+ it possible to select a similar line from the command-line
+ history for repeating a command on different Visually selected
+ lines.
+
+==============================================================================
+5. Ex special characters *cmdline-special*
+
+In Ex commands, at places where a file name can be used, the following
+characters have a special meaning. These can also be used in the expression
+function expand() |expand()|.
+ % is replaced with the current file name *:_%*
+ # is replaced with the alternate file name *:_#*
+ #n (where n is a number) is replaced with the file name of
+ buffer n. "#0" is the same as "#"
+ ## is replaced with all names in the argument list *:_##*
+ concatenated, separated by spaces. Each space in a name
+ is preceded with a backslash.
+Note that these give the file name as it was typed. If an absolute path is
+needed (when using the file name from a different directory), you need to add
+":p". See |filename-modifiers|.
+Note that backslashes are inserted before spaces, so that the command will
+correctly interpret the file name. But this doesn't happen for shell
+commands. For those you probably have to use quotes: >
+ :!ls "%"
+ :r !spell "%"
+
+To avoid the special meaning of '%' and '#' insert a backslash before it.
+Detail: The special meaning is always escaped when there is a backslash before
+it, no matter how many backslashes.
+ you type: result ~
+ # alternate.file
+ \# #
+ \\# \#
+
+ *:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
+ *:<sfile>* *<sfile>* *:<afile>* *<afile>*
+ *:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
+ *E495* *E496* *E497* *E498* *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
+ effective buffer number (for ":r file" it is the current
+ buffer, the file being read is not in a buffer).
+ <amatch> when executing autocommands, is replaced with the match for
+ which this autocommand was executed. It differs form
+ <afile> only when the file name isn't used to match with
+ (for FileType and Syntax events).
+ <sfile> when executing a ":source" command, is replaced with the
+ file name of the sourced file;
+ 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.
+
+ *filename-modifiers*
+ *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
+The file name modifiers can be used after "%", "#", "#n", "<cfile>", "<sfile>",
+"<afile>" or "<abuf>". They are also used with the |fnamemodify()| function.
+These are not available when Vim has been compiled without the |+modify_fname|
+feature.
+These modifiers can be given, in this order:
+ :p Make file name a full path. Must be the first modifier. Also
+ changes "~/" (and "~user/" for Unix and VMS) to the path for
+ 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.
+ :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.
+ :~ Reduce file name to be relative to the home directory, if
+ possible. File name is unmodified if it is not below the home
+ directory.
+ :. Reduce file name to be relative to current directory, if
+ possible. File name is unmodified if it is not below the
+ current directory.
+ For maximum shortness, use ":~:.".
+ :h Head of the file name (the last component and any separators
+ removed). Cannot be used with :e, :r or :t.
+ Can be repeated to remove several components at the end.
+ When the file name ends in a path separator, only the path
+ separator is removed. Thus ":p:h" on a directory name results
+ on the directory name itself (without trailing slash).
+ When the file name is an absolute path (starts with "/" for
+ Unix; "x:\" for MS-DOS, WIN32, OS/2; "drive:" for Amiga), that
+ part is not removed. When there is no head (path is relative
+ to current directory) the result is empty.
+ :t Tail of the file name (last component of the name). Must
+ precede any :r or :e.
+ :r Root of the file name (the last extension removed). When
+ there is only an extension (file name that starts with '.',
+ e.g., ".vimrc"), it is not removed. Can be repeated to remove
+ several extensions (last one first).
+ :e Extension of the file name. Only makes sense when used alone.
+ When there is no extension the result is empty.
+ When there is only an extension (file name that starts with
+ '.'), the result is empty. Can be repeated to include more
+ extensions. If there are not enough extensions (but at least
+ one) as much as possible are included.
+ :s?pat?sub?
+ Substitute the first occurrence of "pat" with "sub". This
+ works like the |:s| command. "pat" is a regular expression.
+ Any character can be used for '?', but it must not occur in
+ "pat" or "sub".
+ 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
+ this works like ":s".
+
+Examples, when the file name is "src/version.c", current dir
+"/home/mool/vim": >
+ :p /home/mool/vim/src/version.c
+ :p:. src/version.c
+ :p:~ ~/vim/src/version.c
+ :h src
+ :p:h /home/mool/vim/src
+ :p:h:h /home/mool/vim
+ :t version.c
+ :p:t version.c
+ :r src/version
+ :p:r /home/mool/vim/src/version
+ :t:r version
+ :e c
+ :s?version?main? src/main.c
+ :s?version?main?:p /home/mool/vim/src/main.c
+ :p:gs?/?\\? \home\mool\vim\src\version.c
+
+Examples, when the file name is "src/version.c.gz": >
+ :p /home/mool/vim/src/version.c.gz
+ :e gz
+ :e:e c.gz
+ :e:e:e c.gz
+ :e:e:r c
+ :r src/version.c
+ :r:e c
+ :r:r src/version
+ :r:r:r src/version
+<
+ *extension-removal* *:_%<*
+If a "<" is appended to "%", "#", "#n" or "CTRL-V p" the extension of the file
+name is removed (everything after and including the last '.' in the file
+name). This is included for backwards compatibility with version 3.0, the
+":r" form is preferred. Examples: >
+
+ % current file name
+ %< current file name without extension
+ # alternate file name for current window
+ #< idem, without extension
+ #31 alternate file number 31
+ #31< idem, without extension
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor (see |WORD|)
+ <cfile> path name under the cursor
+ <cfile>< idem, without extension
+
+Note: Where a file name is expected wildcards expansion is done. On Unix the
+shell is used for this, unless it can be done internally (for speed).
+Backticks also work, like in >
+ :n `echo *.c`
+(backtick expansion is not possible in |restricted-mode|)
+But expansion is only done if there are any wildcards before expanding the
+'%', '#', etc.. This avoids expanding wildcards inside a file name. If you
+want to expand the result of <cfile>, add a wildcard character to it.
+Examples: (alternate file name is "?readme?")
+ command expands to ~
+ :e # :e ?readme?
+ :e `ls #` :e {files matching "?readme?"}
+ :e #.* :e {files matching "?readme?.*"}
+ :cd <cfile> :cd {file name under cursor}
+ :cd <cfile>* :cd {file name under cursor plus "*" and then expanded}
+
+When the expanded argument contains a "!" and it is used for a shell command
+(":!cmd", ":r !cmd" or ":w !cmd"), it is escaped with a backslash to avoid it
+being expanded into a previously used command. When the 'shell' option
+contains "sh", this is done twice, to avoid the shell trying to expand the
+"!".
+
+ *filename-backslash*
+For filesystems that use a backslash as directory separator (MS-DOS, Windows,
+OS/2), it's a bit difficult to recognize a backslash that is used to escape
+the special meaning of the next character. The general rule is: If the
+backslash is followed by a normal file name character, it does not have a
+special meaning. Therefore "\file\foo" is a valid file name, you don't have
+to type the backslash twice.
+
+An exception is the '$' sign. It is a valid character in a file name. But
+to avoid a file name like "$home" to be interpreted as an environment variable,
+it needs to be preceded by a backslash. Therefore you need to use "/\$home"
+for the file "$home" in the root directory. A few examples:
+
+ FILE NAME INTERPRETED AS ~
+ $home expanded to value of environment var $home
+ \$home file "$home" in current directory
+ /\$home file "$home" in root directory
+ \\$home file "\\", followed by expanded $home
+
+==============================================================================
+6. Command-line window *cmdline-window* *cmdwin*
+
+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
+it in a normal way.
+{not available when compiled without the |+cmdline_hist| or |+vertsplit|
+feature}
+
+
+OPEN
+
+There are two ways to open the command-line window:
+1. From Command-line mode, use the key specified with the 'cedit' option.
+ The default is CTRL-F when 'compatible' is not set.
+2. From Normal mode, use the "q:", "q/" or "q?" command. *q:* *q/* *q?*
+ This starts editing an Ex command-line ("q:") or search string ("q/" or
+ "q?"). Note that this is not possible while recording is in progress (the
+ "q" stops recording then).
+
+When the window opens it is filled with the command-line history. The last
+line contains the command as typed so far. The left column will show a
+character that indicates the type of command-line being edited, see
+|cmdwin-char|.
+
+Vim will be in Normal mode when the editor is opened, except when 'insertmode'
+is set.
+
+The height of the window is specified with 'cmdwinheight' (or smaller if there
+is no room). The window is always full width and is positioned just above the
+command-line.
+
+
+EDIT
+
+You can now use commands to move around and edit the text in the window. Both
+in Normal mode and Insert mode.
+
+It is possible to use ":", "/" and other commands that use the command-line,
+but it's not possible to open another command-line window then. There is no
+nesting.
+ *E11*
+The command-line window is not a normal window. It is not possible to move to
+another window or edit another buffer. All commands that would do this are
+disabled in the command-line window. Of course it _is_ possible to execute
+any command that you entered in the command-line window.
+
+
+CLOSE *E199*
+
+There are several ways to leave the command-line window:
+
+<CR> Execute the command-line under the cursor. Works both in
+ Insert and in Normal mode.
+CTRL-C Continue in Command-line mode. The command-line under the
+ cursor is used as the command-line. Works both in Insert and
+ in Normal mode. ":close" also works. There is no redraw,
+ thus the window will remain visible.
+:quit Discard the command line and go back to Normal mode.
+ ":exit", ":xit" and CTRL-\ CTRL-N also work.
+:qall Quit Vim, unless there are changes in some buffer.
+:qall! Quit Vim, discarding changes to any buffer.
+
+Once the command-line window is closed the old window sizes are restored. The
+executed command applies to the window and buffer where the command-line was
+started from. This works as if the command-line window was not there, except
+that there will be an extra screen redraw.
+The buffer used for the command-line window is deleted. Any changes to lines
+other than the one that is executed with <CR> are lost.
+
+
+VARIOUS
+
+The command-line window cannot be used:
+- when there already is a command-line window (no nesting)
+- for entering a encryption key or when using inputsecret()
+- when Vim was not compiled with the +vertsplit feature
+
+Some options are set when the command-line window is opened:
+'filetype' "vim", when editing an Ex command-line; this starts Vim syntax
+ highlighting if it was enabled
+'rightleft' off
+'modifiable' on
+'buftype' "nofile"
+'swapfile' off
+
+It is allowed to write the buffer contents to a file. This is an easy way to
+save the command-line history and read it back later.
+
+If the 'wildchar' option is set to <Tab>, and the command-line window is used
+for an Ex command, then two mappings will be added to use <Tab> for completion
+in the command-line window, like this: >
+ :imap <buffer> <Tab> <C-X><C-V>
+ :nmap <buffer> <Tab> a<C-X><C-V>
+Note that hitting <Tab> in Normal mode will do completion on the next
+character. That way it works at the end of the line.
+If you don't want these mappings, disable them with: >
+ au CmdwinEnter [:>] iunmap <Tab>
+ au CmdwinEnter [:>] nunmap <Tab>
+You could put these lines in your vimrc file.
+
+While in the command-line window you cannot use the mouse to put the cursor in
+another window, or drag statuslines of other windows. You can drag the
+statusline of the command-line window itself and the statusline above it.
+Thus you can resize the command-line window, but not others.
+
+
+AUTOCOMMANDS
+
+Two autocommand events are used: |CmdwinEnter| and |CmdwinLeave|. Since this
+window is of a special type, the WinEnter, WinLeave, BufEnter and BufLeave
+events are not triggered. You can use the Cmdwin events to do settings
+specifically for the command-line window. Be careful not to cause side
+effects!
+Example: >
+ :au CmdwinEnter : let b:cpt_save = &cpt | set cpt=v
+ :au CmdwinLeave : let &cpt = b:cpt_save
+This sets 'complete' to use command-line completion in Insert mode for CTRL-N.
+Another example: >
+ :au CmdwinEnter [/?] startinsert
+This will make Vim start in Insert mode in the command-line window.
+
+ *cmdwin-char*
+The character used for the pattern indicates the type of command-line:
+ : normal Ex command
+ > debug mode command |debug-mode|
+ / forward search string
+ ? backward search string
+ = expression for "= |expr-register|
+ @ string for |input()|
+ - text for |:insert| or |:append|
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/debugger.txt b/runtime/doc/debugger.txt
new file mode 100644
index 000000000..4b1a188db
--- /dev/null
+++ b/runtime/doc/debugger.txt
@@ -0,0 +1,135 @@
+*debugger.txt* For Vim version 7.0aa. Last change: 2001 Dec 22
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+
+
+Debugger Support Features *debugger-support*
+
+1. Debugger Features |debugger-features|
+2. Vim Compile Options |debugger-compilation|
+3. Integrated Debuggers |debugger-integration|
+
+{Vi does not have any of these features}
+
+==============================================================================
+1. Debugger Features *debugger-features*
+
+The following features are available for an integration with a debugger or
+an Integrated Programming Environment (IPE) or Integrated Development
+Environment (IDE):
+
+ Alternate Command Input |alt-input|
+ Debug Signs |debug-signs|
+ Debug Source Highlight |debug-highlight|
+ Message Footer |gui-footer|
+ Balloon Evaluation |balloon-eval|
+
+These features were added specifically for use in the Motif version of gvim.
+However, the |alt-input| and |debug-highlight| were written to be usable in
+both vim and gvim. Some of the other features could be used in the non-GUI
+vim with slight modifications. However, I did not do this nor did I test the
+reliability of building for vim or non Motif GUI versions.
+
+
+1.1 Alternate Command Input *alt-input*
+
+For Vim to work with a debugger there must be at least an input connection
+with a debugger or external tool. In many cases there will also be an output
+connection but this isn't absolutely necessary.
+
+The purpose of the input connection is to let the external debugger send
+commands to Vim. The commands sent by the debugger should give the debugger
+enough control to display the current debug environment and state.
+
+The current implementation is based on the X Toolkit dispatch loop and the
+XtAddInput() function call.
+
+
+1.2 Debug Signs *debug-signs*
+
+Many debuggers mark specific lines by placing a small sign or color highlight
+on the line. The |:sign| command lets the debugger set this graphic mark. Some
+examples where this feature would be used would be a debugger showing an arrow
+representing the Program Counter (PC) of the program being debugged. Another
+example would be a small stop sign for a line with a breakpoint. These visible
+highlights let the user keep track of certain parts of the state of the
+debugger.
+
+This feature can be used with more than debuggers, too. An IPE can use a sign
+to highlight build errors, searched text, or other things. The sign feature
+can also work together with the |debug-highlight| to ensure the mark is
+highly visible.
+
+Debug signs are defined and placed using the |:sign| command.
+
+
+1.3 Debug Source Highlight *debug-highlight*
+
+This feature allows a line to have a predominant highlight. The highlight is
+intended to make a specific line stand out. The highlight could be made to
+work for both vim and gvim, whereas the debug sign is, in most cases, limited
+to gvim. The one exception to this is Sun Microsystem's dtterm. The dtterm
+from Sun has a "sign gutter" for showing signs.
+
+
+1.4 Message Footer *gui-footer*
+
+The message footer can be used to display messages from a debugger or IPE. It
+can also be used to display menu and toolbar tips. The footer area is at the
+bottom of the GUI window, below the line used to display colon commands.
+
+The display of the footer is controlled by the 'guioptions' letter 'F'.
+
+
+1.5 Balloon Evaluation *balloon-eval*
+
+This feature allows a debugger, or other external tool, to display dynamic
+information based on where the mouse is pointing. The purpose of this feature
+was to allow Sun's Visual WorkShop debugger to display expression evaluations.
+However, the feature was implemented in as general a manner as possible and
+could be used for displaying other information as well.
+
+The Balloon Evaluation has some settable parameters too. The font list and
+colors can be set via X resources (XmNballoonEvalFontList,
+XmNballoonEvalBackground, and XmNballoonEvalForeground).
+The 'balloondelay' option sets the delay before an attempt is made to show a
+balloon.
+The 'ballooneval' option needs to be set to switch it on.
+
+Balloon evaluation is only available when compiled with the |+balloon_eval|
+and |+sun_workshop| features.
+
+The Balloon evaluation functions are also used to show a tooltip for the
+toolbar. The 'ballooneval' option does not need to be set for this. But the
+other settings apply.
+
+==============================================================================
+2. Vim Compile Options *debugger-compilation*
+
+The debugger features were added explicitly for use with Sun's Visual
+WorkShop Integrated Programming Environment (ipe). However, they were done
+in as generic a manner as possible so that integration with other debuggers
+could also use some or all of the tools used with Sun's ipe.
+
+The following compile time preprocessor variables control the features:
+
+ Alternate Command Input ALT_X_INPUT
+ Debug Glyphs FEAT_SIGNS
+ Debug Highlights FEAT_SIGNS
+ Message Footer FEAT_FOOTER
+ Balloon Evaluation FEAT_BEVAL
+
+The first integration with a full IPE/IDE was with Sun Visual WorkShop. To
+compile a gvim which interfaces with VWS set the following flag, which sets
+all the above flags:
+
+ Sun Visual WorkShop FEAT_SUN_WORKSHOP
+
+==============================================================================
+3. Integrated Debuggers *debugger-integration*
+
+Currently the only fully integrated debugger/IPE/IDE is Sun's Visual WorkShop
+Integrated Programming Environment.
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
new file mode 100644
index 000000000..6e4f4e35a
--- /dev/null
+++ b/runtime/doc/develop.txt
@@ -0,0 +1,384 @@
+*develop.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Development of Vim. *development*
+
+This text is important for those who want to be involved in further developing
+Vim.
+
+1. Design goals |design-goals|
+2. Coding style |coding-style|
+3. Design decisions |design-decisions|
+4. Assumptions |design-assumptions|
+
+See the file README.txt in the "src" directory for an overview of the source
+code.
+
+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.
+
+==============================================================================
+1. Design goals *design-goals*
+
+Most important things come first (roughly).
+
+Note that quite a few items are contradicting. This is intentional. A
+balance must be found between them.
+
+
+VIM IS... VI COMPATIBLE *design-compatible*
+
+First of all, it should be possible to use Vim as a drop-in replacement for
+Vi. When the user wants to, he can use Vim in compatible mode and hardly
+notice any difference with the original Vi.
+
+Exceptions:
+- We don't reproduce obvious Vi bugs in Vim.
+- There are different versions of Vi. I am using Version 3.7 (6/7/85) as a
+ reference. But support for other versions is also included when possible.
+ The Vi part of POSIX is not considered a definitive source.
+- Vim adds new commands, you cannot rely on some command to fail because it
+ didn't exist in Vi.
+- Vim will have a lot of features that Vi doesn't have. Going back from Vim
+ to Vi will be a problem, this cannot be avoided.
+- Some things are hardly ever used (open mode, sending an e-mail when
+ crashing, etc.). Those will only be included when someone has a good reason
+ why it should be included and it's not too much work.
+- For some items it is debatable whether Vi compatibility should be
+ maintained. There will be an option flag for these.
+
+
+VIM IS... IMPROVED *design-improved*
+
+The IMproved bits of Vim should make it a better Vi, without becoming a
+completely different editor. Extensions are done with a "Vi spirit".
+- Use the keyboard as much as feasible. The mouse requires a third hand,
+ which we don't have. Many terminals don't have a mouse.
+- When the mouse is used anyway, avoid the need to switch back to the
+ keyboard. Avoid mixing mouse and keyboard handling.
+- Add commands and options in a consistent way. Otherwise people will have a
+ hard time finding and remembering them. Keep in mind that more commands and
+ options will be added later.
+- A feature that people do not know about is a useless feature. Don't add
+ obscure features, or at least add hints in documentation that they exists.
+- Minimize using CTRL and other modifiers, they are more difficult to type.
+- There are many first-time and inexperienced Vim users. Make it easy for
+ them to start using Vim and learn more over time.
+- There is no limit to the features that can be added. Selecting new features
+ is one based on (1) what users ask for, (2) how much effort it takes to
+ implement and (3) someone actually implementing it.
+
+
+VIM IS... MULTI PLATFORM *design-multi-platform*
+
+Vim tries to help as many users on as many platforms as possible.
+- Support many kinds of terminals. The minimal demands are cursor positioning
+ and clear-screen. Commands should only use key strokes that most keyboards
+ have. Support all the keys on the keyboard for mapping.
+- Support many platforms. A condition is that there is someone willing to do
+ Vim development on that platform, and it doesn't mean messing up the code.
+- Support many compilers and libraries. Not everybody is able or allowed to
+ install another compiler or GUI library.
+- People switch from one platform to another, and from GUI to terminal
+ version. Features should be present in all versions, or at least in as many
+ as possible with a reasonable effort. Try to avoid that users must switch
+ between platforms to accomplish their work efficiently.
+- That a feature is not possible on some platforms, or only possible on one
+ platform, does not mean it cannot be implemented. [This intentionally
+ contradicts the previous item, these two must be balanced.]
+
+
+VIM IS... WELL DOCUMENTED *design-documented*
+
+- A feature that isn't documented is a useless feature. A patch for a new
+ feature must include the documentation.
+- Documentation should be comprehensive and understandable. Using examples is
+ recommended.
+- Don't make the text unnecessarily long. Less documentation means that an
+ item is easier to find.
+
+
+VIM IS... HIGH SPEED AND SMALL IN SIZE *design-speed-size*
+
+Using Vim must not be a big attack on system resources. Keep it small and
+fast.
+- Computers are becoming faster and bigger each year. Vim can grow too, but
+ no faster than computers are growing. Keep Vim usable on older systems.
+- Many users start Vim from a shell very often. Startup time must be short.
+- Commands must work efficiently. The time they consume must be as small as
+ possible. Useful commands may take longer.
+- Don't forget that some people use Vim over a slow connection. Minimize the
+ communication overhead.
+- Items that add considerably to the size and are not used by many people
+ should be a feature that can be disabled.
+- Vim is a component among other components. Don't turn it into a massive
+ application, but have it work well together with other programs.
+
+
+VIM IS... MAINTAINABLE *design-maintain*
+
+- The source code should not become a mess. It should be reliable code.
+- Use the same layout in all files to make it easy to read |coding-style|.
+- Use comments in a useful way!
+- Porting to another platform should be made easy, without having to change
+ too much platform-independent code.
+- Use the object-oriented spirit: Put data and code together. Minimize the
+ knowledge spread to other parts of the code.
+
+
+VIM IS... FLEXIBLE *design-flexible*
+
+Vim should make it easy for users to work in their preferred styles rather
+than coercing its users into particular patterns of work. This can be for
+items with a large impact (e.g., the 'compatible' option) or for details. The
+defaults are carefully chosen such that most users will enjoy using Vim as it
+is. Commands and options can be used to adjust Vim to the desire of the user
+and its environment.
+
+
+VIM IS... NOT *design-not*
+
+- Vim is not a shell or an Operating System. You will not be able to run a
+ shell inside Vim or use it to control a debugger. This should work the
+ other way around: Use Vim as a component from a shell or in an IDE.
+ A satirical way to say this: "Unlike Emacs, Vim does not attempt to include
+ everything but the kitchen sink, but some people say that you can clean one
+ with it. ;-)"
+- Vim is not a fancy GUI editor that tries to look nice at the cost of
+ being less consistent over all platforms. But functional GUI features are
+ welcomed.
+
+==============================================================================
+2. Coding style *coding-style*
+
+These are the rules to use when making changes to the Vim source code. Please
+stick to these rules, to keep the sources readable and maintainable.
+
+This list is not complete. Look in the source code for more examples.
+
+
+MAKING CHANGES *style-changes*
+
+The basic steps to make changes to the code:
+1. Adjust the documentation. Doing this first gives you an impression of how
+ your changes affect the user.
+2. Make the source code changes.
+3. Check ../doc/todo.txt if the change affects any listed item.
+4. Make a patch with "diff -c" against the unmodified code and docs.
+5. Make a note about what changed and include it with the patch.
+
+
+USE OF COMMON FUNCTIONS *style-functions*
+
+Some functions that are common to use, have a special Vim version. Always
+consider using the Vim version, because they were introduced with a reason.
+
+NORMAL NAME VIM NAME DIFFERENCE OF VIM VERSION
+free() vim_free() Checks for freeing NULL
+malloc() alloc() Checks for out of memory situation
+malloc() lalloc() Like alloc(), but has long argument
+strcpy() STRCPY() Includes cast to (char *), for char_u * args
+strchr() vim_strchr() Accepts special characters
+strrchr() vim_strrchr() Accepts special characters
+isspace() vim_isspace() Can handle characters > 128
+iswhite() vim_iswhite() Only TRUE for Tab and space
+memcpy() vim_memmove() Handles overlapped copies
+bcopy() vim_memmove() Handles overlapped copies
+memset() vim_memset() Uniform for all systems
+
+
+NAMES *style-names*
+
+Function names can not be more than 31 characters long (because of VMS).
+
+Don't use "delete" as a variable name, C++ doesn't like it.
+
+Because of the requirement that Vim runs on as many systems as possible, we
+need to avoid using names that are already defined by the system. This is a
+list of names that are known to cause trouble. The name is given as a regexp
+pattern.
+
+is.*() POSIX, ctype.h
+to.*() POSIX, ctype.h
+
+d_.* POSIX, dirent.h
+l_.* POSIX, fcntl.h
+gr_.* POSIX, grp.h
+pw_.* POSIX, pwd.h
+sa_.* POSIX, signal.h
+mem.* POSIX, string.h
+str.* POSIX, string.h
+wcs.* POSIX, string.h
+st_.* POSIX, stat.h
+tms_.* POSIX, times.h
+tm_.* POSIX, time.h
+c_.* POSIX, termios.h
+MAX.* POSIX, limits.h
+__.* POSIX, system
+_[A-Z].* POSIX, system
+E[A-Z0-9]* POSIX, errno.h
+
+*_t POSIX, for typedefs. Use *_T instead.
+
+wait don't use as argument to a function, conflicts with types.h
+index shadows global declaration
+time shadows global declaration
+new C++ reserved keyword
+try Borland C++ doesn't like it to be used as a variable.
+
+basename() GNU string function
+dirname() GNU string function
+get_env_value() Linux system function
+
+
+VARIOUS *style-various*
+
+Typedef'ed names should end in "_t": >
+ typedef int some_t;
+Define'ed names should be uppercase: >
+ #define SOME_THING
+Features always start with "FEAT_": >
+ #define FEAT_FOO
+
+Don't use '\"', some compilers can't handle it. '"' works fine.
+
+Don't use:
+ #if HAVE_SOME
+Some compilers can't handle that and complain that "HAVE_SOME" is not defined.
+Use
+ #ifdef HAVE_SOME
+or
+ #if defined(HAVE_SOME)
+
+
+STYLE *style-examples*
+
+General rule: One statement per line.
+
+Wrong: if (cond) a = 1;
+
+OK: if (cond)
+ a = 1;
+
+Wrong: while (cond);
+
+OK: while (cond)
+ ;
+
+Wrong: do a = 1; while (cond);
+
+OK: do
+ a = 1;
+ while (cond);
+
+
+Functions start with:
+
+Wrong: int function_name(int arg1, int arg2)
+
+OK: /*
+ * Explanation of what this function is used for.
+ *
+ * Return value explanation.
+ */
+ int
+ function_name(arg1, arg2)
+ int arg1; /* short comment about arg1 */
+ int arg2; /* short comment about arg2 */
+ {
+ int local; /* comment about local */
+
+ local = arg1 * arg2;
+
+NOTE: Don't use ANSI style function declarations. A few people still have to
+use a compiler that doesn't support it.
+
+
+SPACES AND PUNCTUATION *style-spaces*
+
+No space between a function name and the bracket:
+
+Wrong: func (arg);
+OK: func(arg);
+
+Do use a space after if, while, switch, etc.
+
+Wrong: if(arg) for(;;)
+OK: if (arg) for (;;)
+
+Use a space after a comma and semicolon:
+
+Wrong: func(arg1,arg2); for (i = 0;i < 2;++i)
+OK: func(arg1, arg2); for (i = 0; i < 2; ++i)
+
+Use a space before and after '=', '+', '/', etc.
+
+Wrong: var=a*5;
+OK: var = a * 5;
+
+In general: Use empty lines to group lines of code together. Put a comment
+just above the group of lines. This makes it more easy to quickly see what is
+being done.
+
+OK: /* Prepare for building the table. */
+ get_first_item();
+ table_idx = 0;
+
+ /* Build the table */
+ while (has_item())
+ table[table_idx++] = next_item();
+
+ /* Finish up. */
+ cleanup_items();
+ generate_hash(table);
+
+==============================================================================
+3. Design decisions *design-decisions*
+
+Folding
+
+Several forms of folding should be possible for the same buffer. For example,
+have one window that shows the text with function bodies folded, another
+window that shows a function body.
+
+Folding is a way to display the text. It should not change the text itself.
+Therefore the folding has been implemented as a filter between the text stored
+in a buffer (buffer lines) and the text displayed in a window (logical lines).
+
+
+Naming the window
+
+The word "window" is commonly used for several things: A window on the screen,
+the xterm window, a window inside Vim to view a buffer.
+To avoid confusion, other items that are sometimes called window have been
+given another name. Here is an overview of the related items:
+
+screen The whole display. For the GUI it's something like 1024x768
+ pixels. The Vim shell can use the whole screen or part of it.
+shell The Vim application. This can cover the whole screen (e.g.,
+ when running in a console) or part of it (xterm or GUI).
+window View on a buffer. There can be several windows in Vim,
+ together with the command line, menubar, toolbar, etc. they
+ fit in the shell.
+
+
+To be continued...
+
+==============================================================================
+4. Assumptions *design-assumptions*
+
+Size of variables:
+char 8 bit signed
+char_u 8 bit unsigned
+int 16, 32 or 64 bit signed
+unsigned 16, 32 or 64 bit unsigned
+long 32 or 64 bit signed, can hold a pointer
+
+Note that some compilers cannot handle long lines or strings. The C89
+standard specifies a limit of 509 characters.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
new file mode 100644
index 000000000..102072349
--- /dev/null
+++ b/runtime/doc/diff.txt
@@ -0,0 +1,371 @@
+*diff.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *diff* *vimdiff* *gvimdiff* *diff-mode*
+This file describes the +diff feature: Showing differences between two or
+three versions of the same file.
+
+The basics are explained in section |08.7| of the user manual.
+
+1. Starting diff mode |vimdiff|
+2. Viewing diffs |view-diffs|
+3. Jumping to diffs |jumpto-diffs|
+4. Copying diffs |copy-diffs|
+5. Diff options |diff-options|
+
+{not in Vi}
+
+==============================================================================
+1. Starting diff mode
+
+The easiest way to start editing in diff mode is with the "vimdiff" command.
+This starts Vim as usual, and additionally sets up for viewing the differences
+between the arguments. >
+
+ vimdiff file1 file2 [file3 [file4]]
+
+This is equivalent to: >
+
+ vim -d file1 file2 [file3 [file4]]
+
+You may also use "gvimdiff" or "vim -d -g". The GUI is started then.
+You may also use "viewdiff" or "gviewdiff". Vim starts in readonly mode then.
+"r" may be prepended for restricted mode (see |-Z|).
+
+The second and following arguments may also be a directory name. Vim will
+then append the file name of the first argument to the directory name to find
+the file.
+
+This only works when a standard "diff" command is available. See 'diffexpr'.
+
+What happens is that Vim opens a window for each of the files. This is like
+using the |-O| argument. This uses vertical splits. If you prefer horizontal
+splits add the |-o| argument: >
+
+ vimdiff -o file1 file2 [file3]
+
+In each of the edited files these options are set:
+
+ 'diff' on
+ 'scrollbind' on
+ 'scrollopt' includes "hor"
+ 'wrap' off
+ 'foldmethod' "diff"
+ 'foldcolumn' 2
+
+These options are set local to the window. When editing another file they are
+reset to the global value.
+
+The differences shown are actually the differences in the buffer. Thus if you
+make changes after loading a file, these will be included in the displayed
+diffs. You might have to do ":diffupdate" now and then, not all changes are
+immediately taken into account.
+
+In your .vimrc file you could do something special when Vim was started in
+diff mode. You could use a construct like this: >
+
+ if &diff
+ setup for diff mode
+ else
+ setup for non-diff mode
+ endif
+
+While already in Vim you can start diff mode in three ways.
+
+ *E98*
+:diffsplit {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
+ the option like for "vimdiff".
+
+:diffpatch {patchfile} *: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".
+ {patchfile} can be in any format that the "patch" program
+ understands or 'patchexpr' can handle.
+ Note that {patchfile} should only contain a diff for one file,
+ the current file. If {patchfile} contains diffs for other
+ files as well, the results are unpredictable. Vim changes
+ directory to /tmp to avoid files in the current directory
+ accidentally being patched. But it may still result in
+ various ".rej" files to be created. And when absolute path
+ names are present these files may get patched anyway.
+
+To make these commands use a vertical split, prepend |:vertical|. Examples: >
+
+ :vert diffsplit main.c~
+ :vert diffpatch /tmp/diff
+<
+ *E96*
+There can be up to four buffers with 'diff' set.
+
+Since the option values are remembered with the buffer, you can edit another
+file for a moment and come back to the same file and be in diff mode again.
+If you don't want diff mode, reset the 'diff' option. And you probably want
+to get rid of the fold column: >
+
+ :set nodiff foldcolumn=0
+
+==============================================================================
+2. Viewing diffs *view-diffs*
+
+The effect is that the diff windows show the same text, with the differences
+highlighted. When scrolling the text, the 'scrollbind' option will make the
+text in other windows to be scrolled as well. With vertical splits the text
+should be aligned properly.
+
+The alignment of text will go wrong when:
+- 'wrap' is on, some lines will be wrapped and occupy two or more screen
+ lines
+- folds are open in one window but not another
+- 'scrollbind' is off
+- changes have been made to the text
+- "filler" is not present in 'diffopt', deleted/inserted lines makes the
+ alignment go wrong
+
+All the buffers edited in a window where the 'diff' option is set will join in
+the diff. This is also possible for hidden buffers. They must have been
+edited in a window first for this to be possible.
+
+Since 'diff' is a window-local option, it's possible to view the same buffer
+in diff mode in one window and "normal" in another window. It is also
+possible to view the changes you have made to a buffer, but since Vim doesn't
+allow having two buffers for the same file, you need to make a copy of the
+original file and diff with that. For example: >
+ :!cp % tempfile
+ :diffsplit tempfile
+
+A buffer that is unloaded cannot be used for the diff. But it does work for
+hidden buffers. You can use ":hide" to close a window without unloading the
+buffer.
+
+
+ *:diffu* *:diffupdate*
+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
+line and more complicated changes do not cause the differences to be updated.
+To force the differences to be updated use: >
+
+ :diffupdate
+
+
+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
+this file. Removing "filler" from the 'diffopt' option will make Vim not
+display these filler lines.
+
+
+Folds are used to hide the text that wasn't changed. See |folding| for all
+the commands that can be used with folds.
+
+The context of lines above a difference that are not included in the fold can
+be set with the 'diffopt' option. For example, to set the context to three
+lines: >
+
+ :set diffopt=filler,context:3
+
+
+The diffs are highlighted with these groups:
+
+|hl-DiffAdd| DiffAdd Added (inserted) lines. These lines exist in
+ this buffer but not in another.
+|hl-DiffChange| DiffChange Changed lines.
+|hl-DiffText| DiffText Changed text inside a Changed line. Vim
+ finds the first character that is different,
+ and the last character that is different
+ (searching from the end of the line). The
+ text in between is highlighted. This means
+ that parts in the middle that are still the
+ same are highlighted anyway.
+|hl-DiffDelete| DiffDelete Deleted lines. Also called filler lines,
+ because they don't really exist in this
+ buffer.
+
+==============================================================================
+3. Jumping to diffs *jumpto-diffs*
+
+Two commands can be used to jump to diffs:
+ *[c*
+ [c Jump backwards to the previous start of a change.
+ When a count is used, do it that many times.
+ *]c*
+ ]c Jump forwards to the next start of a change.
+ When a count is used, do it that many times.
+
+It is an error if there is no change for the cursor to move to.
+
+==============================================================================
+4. Diff copying *copy-diffs* *E99* *E100* *E101* *E102* *E103*
+
+There are two commands to copy text from one buffer to another. The result is
+that the buffers will be equal within the specified range.
+
+ *:diffg* *:diffget*
+:[range]diffg[et] [bufspec]
+ Modify the current buffer to undo difference with another
+ buffer. If [bufspec] is given, that buffer is used.
+ Otherwise this only works if there is one other buffer in diff
+ mode.
+ See below for [range].
+
+ *:diffpu* *:diffput*
+:[range]diffpu[t] [bufspec]
+ Modify another buffer to undo difference with the current
+ buffer. Just like ":diffget" but the other buffer is modified
+ instead of the current one.
+ See below for [range].
+
+ *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"!).
+
+ *dp*
+dp Same as ":diffput" without argument or range.
+
+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
+lines. When there are deleted lines, this may not always be possible.
+
+There can be deleted lines below the last line of the buffer. When the cursor
+is on the last line in the buffer and there is no diff above this line, the
+":diffget" and "do" commands will obtain lines from the other buffer.
+
+To be able to get those lines from another buffer in a [range] it's allowed to
+use the last line number plus one. This command gets all diffs from the other
+buffer: >
+
+ :1,$+1diffget
+
+Note that deleted lines are displayed, but not counted as text lines. You
+can't move the cursor into them. To fill the deleted lines with the lines
+from another buffer use ":diffget" on the line below them.
+
+The [bufspec] argument above can be a buffer number, a pattern for a buffer
+name or a part of a buffer name. Examples:
+
+ :diffget Use the other buffer which is in diff mode
+ :diffget 3 Use buffer 3
+ :diffget v2 Use the buffer which matches "v2" and is in
+ diff mode (e.g., "file.c.v2")
+
+==============================================================================
+5. Diff options *diff-options*
+
+Also see |'diffopt'| and the "diff" item of |'fillchars'|.
+
+
+FINDING THE DIFFERENCES *diff-diffexpr*
+
+The 'diffexpr' option can be set to use something else than the standard
+"diff" program to compare two files and find the differences.
+
+When 'diffexpr' is empty, Vim uses this command to find the differences
+between file1 and file2: >
+
+ diff file1 file2 > outfile
+
+The ">" is replaced with the value of 'shellredir'.
+
+The output of "diff" must be a normal "ed" style diff. Do NOT use a context
+diff. This example explains the format that Vim expects: >
+
+ 1a2
+ > bbb
+ 4d4
+ < 111
+ 7c7
+ < GGG
+ ---
+ > ggg
+
+The "1a2" item appends the line "bbb".
+The "4d4" item deletes the line "111".
+The '7c7" item replaces the line "GGG" with "ggg".
+
+When 'diffexpr' is not empty, Vim evaluates to obtain a diff file in the
+format mentioned. These variables are set to the file names used:
+
+ v:fname_in original file
+ v:fname_new new version of the same file
+ v:fname_out resulting diff file
+
+Additionally, 'diffexpr' should take care of "icase" and "iwhite" in the
+'diffopt' option. 'diffexpr' cannot change the value of 'lines' and
+'columns'.
+
+Example (this does almost the same as 'diffexpr' being empty): >
+
+ set diffexpr=MyDiff()
+ function MyDiff()
+ let opt = ""
+ if &diffopt =~ "icase"
+ let opt = opt . "-i "
+ endif
+ if &diffopt =~ "iwhite"
+ let opt = opt . "-b "
+ endif
+ silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
+ \ " > " . v:fname_out
+ endfunction
+
+The "-a" argument is used to force comparing the files as text, comparing as
+binaries isn't useful. The "--binary" argument makes the files read in binary
+mode, so that a CTRL-Z doesn't end the text on DOS.
+
+ *E97*
+Vim will do a test if the diff output looks alright. If it doesn't, you will
+get an error message. Possible causes:
+- The "diff" program cannot be executed.
+- The "diff" program doesn't produce normal "ed" style diffs (see above).
+- The 'shell' and associated options are not set correctly. Try if filtering
+ works with a command like ":!sort".
+- You are using 'diffexpr' and it doesn't work.
+If it's not clear what the problem is set the 'verbose' option to see more
+messages.
+
+
+USING PATCHES *diff-patchexpr*
+
+The 'patchexpr' option can be set to use something else than the standard
+"patch" program.
+
+When 'patchexpr' is empty, Vim will call the "patch" program like this: >
+
+ patch -o outfile origfile < patchfile
+
+This should work fine with most versions of the "patch" program. Note that a
+CR in the middle of a line may cause problems, it is seen as a line break.
+
+If the default doesn't work for you, set the 'patchexpr' to an expression that
+will have the same effect. These variables are set to the file names used:
+
+ v:fname_in original file
+ v:fname_diff patch file
+ v:fname_out resulting patched file
+
+Example (this does the same as 'patchexpr' being empty): >
+
+ let patchexpr=MyPatch
+ function MyPatch
+ :call system("patch -o " . v:fname_out . " " . v:fname_in .
+ \ " < " . v:fname_diff)
+ endfunction
+
+Make sure that using the "patch" program doesn't have unwanted side effects.
+For example, watch out for additionally generated files, which should be
+deleted. It should just patch the file and nothing else.
+ Vim will change directory to "/tmp" or another temp directory before
+evaluating 'patchexpr'. This hopefully avoids that files in the current
+directory are accidentally patched. Vim will also delete files starting with
+v:fname_in and ending in ".rej" and ".orig".
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt
new file mode 100644
index 000000000..529b30d2d
--- /dev/null
+++ b/runtime/doc/digraph.txt
@@ -0,0 +1,322 @@
+*digraph.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Digraphs *digraphs* *Digraphs*
+
+Digraphs are used to enter characters that normally cannot be entered by
+an ordinary keyboard. These are mostly accented characters which have the
+eighth bit set. The digraphs are easier to remember than the decimal number
+that can be entered with CTRL-V (see |i_CTRL-V|).
+
+There is a brief introduction on digraphs in the user manual: |24.9|
+An alternative is using the 'keymap' option.
+
+1. Defining digraphs |digraphs-define|
+2. Using digraphs |digraphs-use|
+3. Default digraphs |digraphs-default|
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Defining digraphs *digraphs-define*
+
+ *:dig* *:digraphs*
+:dig[raphs] show currently defined digraphs.
+ *E104* *E39*
+:dig[raphs] {char1}{char2} {number} ...
+ Add digraph {char1}{char2} to the list. {number} is
+ the decimal representation of the character.
+ Example: >
+ :digr e: 235 a: 228
+< Avoid defining a digraph with '_' (underscore) as the
+ first character, it has a special meaning in the
+ future.
+
+Vim is normally compiled with the |+digraphs| feature. If the feature is
+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
+
+The first two characters in each column are the characters you have to type to
+enter the digraph.
+
+In the middle of each column is the resulting character. This may be mangled
+if you look at it on a system that does not support digraphs or if you print
+this file.
+
+The decimal number is the number of the character.
+
+==============================================================================
+2. Using digraphs *digraphs-use*
+
+There are two methods to enter digraphs: *i_digraph*
+ CTRL-K {char1} {char2} or
+ {char1} <BS> {char2}
+The first is always available; the second only when the 'digraph' option is
+set.
+
+If a digraph with {char1}{char2} does not exist, Vim searches for a digraph
+{char2}{char1}. This helps when you don't remember which character comes
+first.
+
+Note that when you enter CTRL-K {char1}, where {char1} is a special key, Vim
+enters the code for that special key. This is not a digraph.
+
+Once you have entered the digraph, Vim treats the character like a normal
+character that occupies only one character in the file and on the screen.
+Example: >
+ 'B' <BS> 'B' will enter the broken '|' character (166)
+ 'a' <BS> '>' will enter an 'a' with a circumflex (226)
+ CTRL-K '-' '-' will enter a soft hyphen (173)
+
+The current digraphs are listed with the ":digraphs" command. Some of the
+default ones are listed below |digraph-table|.
+
+For CTRL-K, there is one general digraph: CTRL-K <Space> {char} will enter
+{char} with the highest bit set. You can use this to enter meta-characters.
+
+The <Esc> character cannot be part of a digraph. When hitting <Esc>, Vim
+stops digraph entry and ends Insert mode or Command-line mode, just like
+hitting an <Esc> out of digraph context. Use CTRL-V 155 to enter meta-ESC
+(CSI).
+
+If you accidentally typed an 'a' that should be an 'e', you will type 'a' <BS>
+'e'. But that is a digraph, so you will not get what you want. To correct
+this, you will have to type <BS> e again. To avoid this don't set the
+'digraph' option and use CTRL-K to enter digraphs.
+
+You may have problems using Vim with characters which have an ASCII value
+above 128. For example: You insert ue (u-umlaut) and the editor echoes \334
+in Insert mode. After leaving the Insert mode everything is fine. Note that
+fmt removes all characters with ASCII codes above 128 from the text being
+formatted. On some Unix systems this means you have to define the
+environment-variable LC_CTYPE. If you are using csh, then put the following
+line in your .cshrc: >
+ setenv LC_CTYPE iso_8859_1
+
+==============================================================================
+3. Default digraphs *digraphs-default*
+
+Vim comes with a set of default digraphs. Check the output of ":digraphs" to
+see them.
+
+On most systems Vim uses the same digraphs. They work for the Unicode and
+ISO-8859-1 character sets. These default digraphs are taken from the RFC1345
+mnemonics. To make it easy to remember the mnemonic, the second character has
+a standard meaning:
+
+ char name char meaning ~
+ Exclamation mark ! Grave
+ Apostrophe ' Acute accent
+ Greater-Than sign > Circumflex accent
+ Question Mark ? tilde
+ Hyphen-Minus - Macron
+ Left parenthesis ( Breve
+ Full Stop . Dot Above
+ Colon : Diaeresis
+ Comma , Cedilla
+ Underline _ Underline
+ Solidus / Stroke
+ Quotation mark " Double acute accent
+ Semicolon ; Ogonek
+ Less-Than sign < Caron
+ Zero 0 Ring above
+ Two 2 Hook
+ Nine 9 Horn
+
+ Equals = Cyrillic
+ Asterisk * Greek
+ Percent sign % Greek/Cyrillic special
+ Plus + smalls: Arabic, capitals: Hebrew
+ Three 3 some Latin/Greek/Cyrillic letters
+ Four 4 Bopomofo
+ Five 5 Hiragana
+ Six 6 Katakana
+
+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
+Vim was compiled with the |+multi_byte| feature.
+ *digraph-table*
+char digraph hex dec official name ~
+^@ NU 0x00 0 NULL (NUL)
+^A SH 0x01 1 START OF HEADING (SOH)
+^B SX 0x02 2 START OF TEXT (STX)
+^C EX 0x03 3 END OF TEXT (ETX)
+^D ET 0x04 4 END OF TRANSMISSION (EOT)
+^E EQ 0x05 5 ENQUIRY (ENQ)
+^F AK 0x06 6 ACKNOWLEDGE (ACK)
+^G BL 0x07 7 BELL (BEL)
+^H BS 0x08 8 BACKSPACE (BS)
+^I HT 0x09 9 CHARACTER TABULATION (HT)
+^@ LF 0x0a 10 LINE FEED (LF)
+^K VT 0x0b 11 LINE TABULATION (VT)
+^L FF 0x0c 12 FORM FEED (FF)
+^M CR 0x0d 13 CARRIAGE RETURN (CR)
+^N SO 0x0e 14 SHIFT OUT (SO)
+^O SI 0x0f 15 SHIFT IN (SI)
+^P DL 0x10 16 DATALINK ESCAPE (DLE)
+^Q D1 0x11 17 DEVICE CONTROL ONE (DC1)
+^R D2 0x12 18 DEVICE CONTROL TWO (DC2)
+^S D3 0x13 19 DEVICE CONTROL THREE (DC3)
+^T D4 0x14 20 DEVICE CONTROL FOUR (DC4)
+^U NK 0x15 21 NEGATIVE ACKNOWLEDGE (NAK)
+^V SY 0x16 22 SYNCRONOUS IDLE (SYN)
+^W EB 0x17 23 END OF TRANSMISSION BLOCK (ETB)
+^X CN 0x18 24 CANCEL (CAN)
+^Y EM 0x19 25 END OF MEDIUM (EM)
+^Z SB 0x1a 26 SUBSTITUTE (SUB)
+^[ EC 0x1b 27 ESCAPE (ESC)
+^\ FS 0x1c 28 FILE SEPARATOR (IS4)
+^] GS 0x1d 29 GROUP SEPARATOR (IS3)
+^^ RS 0x1e 30 RECORD SEPARATOR (IS2)
+^_ US 0x1f 31 UNIT SEPARATOR (IS1)
+ SP 0x20 32 SPACE
+# Nb 0x23 35 NUMBER SIGN
+$ DO 0x24 36 DOLLAR SIGN
+@ At 0x40 64 COMMERCIAL AT
+[ <( 0x5b 91 LEFT SQUARE BRACKET
+\ // 0x5c 92 REVERSE SOLIDUS
+] )> 0x5d 93 RIGHT SQUARE BRACKET
+^ '> 0x5e 94 CIRCUMFLEX ACCENT
+` '! 0x60 96 GRAVE ACCENT
+{ (! 0x7b 123 LEFT CURLY BRACKET
+| !! 0x7c 124 VERTICAL LINE
+} !) 0x7d 125 RIGHT CURLY BRACKET
+~ '? 0x7e 126 TILDE
+^? DT 0x7f 127 DELETE (DEL)
+~@ PA 0x80 128 PADDING CHARACTER (PAD)
+~A HO 0x81 129 HIGH OCTET PRESET (HOP)
+~B BH 0x82 130 BREAK PERMITTED HERE (BPH)
+~C NH 0x83 131 NO BREAK HERE (NBH)
+~D IN 0x84 132 INDEX (IND)
+~E NL 0x85 133 NEXT LINE (NEL)
+~F SA 0x86 134 START OF SELECTED AREA (SSA)
+~G ES 0x87 135 END OF SELECTED AREA (ESA)
+~H HS 0x88 136 CHARACTER TABULATION SET (HTS)
+~I HJ 0x89 137 CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
+~J VS 0x8a 138 LINE TABULATION SET (VTS)
+~K PD 0x8b 139 PARTIAL LINE FORWARD (PLD)
+~L PU 0x8c 140 PARTIAL LINE BACKWARD (PLU)
+~M RI 0x8d 141 REVERSE LINE FEED (RI)
+~N S2 0x8e 142 SINGLE-SHIFT TWO (SS2)
+~O S3 0x8f 143 SINGLE-SHIFT THREE (SS3)
+~P DC 0x90 144 DEVICE CONTROL STRING (DCS)
+~Q P1 0x91 145 PRIVATE USE ONE (PU1)
+~R P2 0x92 146 PRIVATE USE TWO (PU2)
+~S TS 0x93 147 SET TRANSMIT STATE (STS)
+~T CC 0x94 148 CANCEL CHARACTER (CCH)
+~U MW 0x95 149 MESSAGE WAITING (MW)
+~V SG 0x96 150 START OF GUARDED AREA (SPA)
+~W EG 0x97 151 END OF GUARDED AREA (EPA)
+~X SS 0x98 152 START OF STRING (SOS)
+~Y GC 0x99 153 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
+~Z SC 0x9a 154 SINGLE CHARACTER INTRODUCER (SCI)
+~[ CI 0x9b 155 CONTROL SEQUENCE INTRODUCER (CSI)
+~\ ST 0x9c 156 STRING TERMINATOR (ST)
+~] OC 0x9d 157 OPERATING SYSTEM COMMAND (OSC)
+~^ 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
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/doctags.c b/runtime/doc/doctags.c
new file mode 100644
index 000000000..9213dd9c1
--- /dev/null
+++ b/runtime/doc/doctags.c
@@ -0,0 +1,83 @@
+/* vim:set ts=4 sw=4:
+ * this program makes a tags file for vim_ref.txt
+ *
+ * Usage: doctags vim_ref.txt vim_win.txt ... >tags
+ *
+ * A tag in this context is an identifier between stars, e.g. *c_files*
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#define LINELEN 200
+
+ int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ char line[LINELEN];
+ char *p1, *p2;
+ char *p;
+ FILE *fd;
+
+ if (argc <= 1)
+ {
+ fprintf(stderr, "Usage: doctags docfile ... >tags\n");
+ exit(1);
+ }
+ printf("help-tags\ttags\t1\n");
+ while (--argc > 0)
+ {
+ ++argv;
+ fd = fopen(argv[0], "r");
+ if (fd == NULL)
+ {
+ fprintf(stderr, "Unable to open %s for reading\n", argv[0]);
+ continue;
+ }
+ while (fgets(line, LINELEN, fd) != NULL)
+ {
+ p1 = strchr(line, '*'); /* find first '*' */
+ while (p1 != NULL)
+ {
+ p2 = strchr(p1 + 1, '*'); /* find second '*' */
+ if (p2 != NULL && p2 > p1 + 1) /* skip "*" and "**" */
+ {
+ for (p = p1 + 1; p < p2; ++p)
+ if (*p == ' ' || *p == '\t' || *p == '|')
+ break;
+ /*
+ * Only accept a *tag* when it consists of valid
+ * characters, there is white space before it and is
+ * followed by a white character or end-of-line.
+ */
+ if (p == p2
+ && (p1 == line || p1[-1] == ' ' || p1[-1] == '\t')
+ && (strchr(" \t\n\r", p[1]) != NULL
+ || p[1] == '\0'))
+ {
+ *p2 = '\0';
+ ++p1;
+ printf("%s\t%s\t/*", p1, argv[0]);
+ while (*p1)
+ {
+ /* insert backslash before '\\' and '/' */
+ if (*p1 == '\\' || *p1 == '/')
+ putchar('\\');
+ putchar(*p1);
+ ++p1;
+ }
+ printf("*\n");
+ p2 = strchr(p2 + 1, '*'); /* find next '*' */
+ }
+ }
+ p1 = p2;
+ }
+ }
+ fclose(fd);
+ }
+ return 0;
+}
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
new file mode 100644
index 000000000..e25c34a6f
--- /dev/null
+++ b/runtime/doc/editing.txt
@@ -0,0 +1,1432 @@
+*editing.txt* For Vim version 7.0aa. Last change: 2004 Apr 28
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Editing files *edit-files*
+
+1. Introduction |edit-intro|
+2. Editing a file |edit-a-file|
+3. Dialogs |edit-dialogs|
+4. The current directory |current-directory|
+5. The argument list |argument-list|
+6. Writing |writing|
+7. Writing and quitting |write-quit|
+8. Editing binary files |edit-binary|
+9. Encryption |encryption|
+10. Timestamps |timestamps|
+
+==============================================================================
+1. Introduction *edit-intro*
+
+Editing a file with Vim means:
+
+1. reading the file into the internal buffer
+2. changing the buffer with editor commands
+3. writing the buffer into a file
+
+ *current-file*
+As long as you don't write the buffer, the original file remains unchanged.
+If you start editing a file (read a file into the buffer), the file name is
+remembered as the "current file name".
+
+ *alternate-file*
+If there already was a current file name, then that one becomes the alternate
+file name. All file names are remembered in the file list. When you enter a
+file name, for editing (e.g., with ":e filename") or writing (e.g., with (:w
+file name"), the file name is added to the list. You can use this list to
+remember which files you edited and to quickly switch from one file to
+another with the CTRL-^ command (e.g., to copy text). First type the number
+of the file and then hit CTRL-^. {Vi: only one alternate file name}
+
+CTRL-G or *CTRL-G* *:f* *:fi* *:file*
+:f[ile] Prints the current file name (as typed), the
+ cursor position (unless the 'ruler' option is set),
+ and the file status (readonly, modified, read errors,
+ new file)). See the 'shortmess' option about how tho
+ make this message shorter. {Vi does not include
+ column number}
+
+{count}CTRL-G Like CTRL-G, but prints the current file name with
+ full path. If the count is higher than 1 the current
+ buffer number is also given. {not in Vi}
+
+ *g_CTRL-G* *word-count* *byte-count*
+g CTRL-G Prints the current position of the cursor in four
+ ways: Column, Line, Word and Byte. If there are
+ characters in the line that take more than one
+ position on the screen (<Tab> or special character),
+ both the "real" column and the screen column are
+ shown, separated with a dash. See also 'ruler'
+ option. {not in Vi}
+
+ *v_g_CTRL-G*
+{Visual}g CTRL-G Similar to "g CTRL-G", but Word, Line, and Byte counts
+ for the visually selected region are displayed. In
+ Blockwise mode, Column count is also shown. (For
+ {Visual} see |Visual-mode|.)
+ {not in VI}
+
+ *:file_f*
+:f[ile] {name} Sets the current file name to {name}.
+
+:buffers
+:files
+:ls List all the currently known file names. See
+ 'windows.txt' |:files| |:buffers| |:ls|. {not in
+ Vi}
+
+Vim will remember the full path name of a file name that you enter. In most
+cases when the file name is displayed only the name you typed is shown, but
+the full path name is being used if you used the ":cd" command |:cd|.
+
+ *home-replace*
+If the environment variable $HOME is set, and the file name starts with that
+string, it is often displayed with HOME replaced with "~". This was done to
+keep file names short. When reading or writing files the full name is still
+used, the "~" is only used when displaying file names. When replacing the
+file name would result in just "~", "~/" is used instead (to avoid confusion
+with 'backupext' set to "~").
+
+When writing the buffer, the default is to use the current file name. Thus
+when you give the "ZZ" or ":wq" command, the original file will be
+overwritten. If you do not want this, the buffer can be written into another
+file by giving a file name argument to the ":write" command. For example: >
+
+ vim testfile
+ [change the buffer with editor commands]
+ :w newfile
+ :q
+
+This will create a file "newfile", that is a modified copy of "testfile".
+The file "testfile" will remain unchanged. Anyway, if the 'backup' option is
+set, Vim renames or copies the original file before it will be overwritten.
+You can use this file if you discover that you need the original file. See
+also the 'patchmode' option. The name of the backup file is normally the same
+as the original file with 'backupext' appended. The default "~" is a bit
+strange to avoid accidentally overwriting existing files. If you prefer ".bak"
+change the 'backupext' option. Extra dots are replaced with '_' on MS-DOS
+machines, when Vim has detected that an MS-DOS-like filesystem is being used
+(e.g., messydos or crossdos) or when the 'shortname' option is on. The
+backup file can be placed in another directory by setting 'backupdir'.
+
+ *auto-shortname*
+Technical: On the Amiga you can use 30 characters for a file name. But on an
+ MS-DOS-compatible filesystem only 8 plus 3 characters are
+ available. Vim tries to detect the type of filesystem when it is
+ creating the .swp file. If an MS-DOS-like filesystem is suspected,
+ a flag is set that has the same effect as setting the 'shortname'
+ option. This flag will be reset as soon as you start editing a
+ new file. The flag will be used when making the file name for the
+ ".swp" and ".~" files for the current file. But when you are
+ editing a file in a normal filesystem and write to an MS-DOS-like
+ filesystem the flag will not have been set. In that case the
+ creation of the ".~" file may fail and you will get an error
+ message. Use the 'shortname' option in this case.
+
+When you started editing without giving a file name, "No File" is displayed in
+messages. If the ":write" command is used with a file name argument, the file
+name for the current file is set to that file name. This only happens when
+the 'F' flag is included in 'cpoptions' (by default it is included). This is
+useful when entering text in an empty buffer and then writing it to a file.
+If 'cpoptions' contains the 'f' flag (by default it is NOT included) the file
+name is set for the ":read file" command. This is useful when starting Vim
+without an argument and then doing ":read file" to start editing a file.
+ *not-edited*
+Because the file name was set without really starting to edit that file, you
+are protected from overwriting that file. This is done by setting the
+"notedited" flag. You can see if this flag is set with the CTRL-G or ":file"
+command. It will include "[Not edited]" when the "notedited" flag is set.
+When writing the buffer to the current file name (with ":w!"), the "notedited"
+flag is reset.
+
+ *abandon*
+Vim remembers whether you have changed the buffer. You are protected from
+losing the changes you made. If you try to quit without writing, or want to
+start editing another file, Vim will refuse this. In order to overrule this
+protection, add a '!' to the command. The changes will then be lost. For
+example: ":q" will not work if the buffer was changed, but ":q!" will. To see
+whether the buffer was changed use the "CTRL-G" command. The message includes
+the string "[Modified]" if the buffer has been changed.
+
+If you want to automatically save the changes without asking, switch on the
+'autowriteall' option. 'autowrite' is the associated Vi-compatible option
+that does not work for all commands.
+
+If you want to keep the changed buffer without saving it, switch on the
+'hidden' option. See |hidden-buffer|.
+
+==============================================================================
+2. Editing a file *edit-a-file*
+
+ *:e* *:edit*
+:e[dit] [++opt] [+cmd] Edit the current file. This is useful to re-edit the
+ current file, when it has been changed outside of Vim.
+ This fails when changes have been made to the current
+ buffer and 'autowriteall' isn't set or the file can't
+ be written.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+ *:edit!*
+:e[dit]! [++opt] [+cmd]
+ Edit the current file always. Discard any changes to
+ the current buffer. This is useful if you want to
+ start all over again.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+ *:edit_f*
+:e[dit] [++opt] [+cmd] {file}
+ Edit {file}.
+ This fails when changes have been made to the current
+ buffer, unless 'hidden' is set or 'autowriteall' is
+ set and the file can be written.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+ *:edit!_f*
+:e[dit]! [++opt] [+cmd] {file}
+ Edit {file} always. Discard any changes to the
+ current buffer.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+:e[dit] [++opt] [+cmd] #[count]
+ Edit the [count]th alternate file name (as shown by
+ :files). This command does the same as
+ [count] CTRL-^. But ":e #" doesn't work if the
+ alternate buffer doesn't have a file name, while
+ CTRL-^ still works then.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+ *:ene* *:enew*
+:ene[w] Edit a new, unnamed buffer. This fails when changes
+ have been made to the current buffer, unless 'hidden'
+ is set or 'autowriteall' is set and the file can be
+ written.
+ If 'fileformats' is not empty, the first format given
+ will be used for the new buffer. If 'fileformats' is
+ empty, the 'fileformat' of the current buffer is used.
+ {not in Vi}
+
+ *:ene!* *:enew!*
+:ene[w]! Edit a new, unnamed buffer. Discard any changes to
+ the current buffer.
+ Set 'fileformat' like |:enew|.
+ {not in Vi}
+
+ *:fin* *:find*
+:fin[d][!] [++opt] [+cmd] {file}
+ Find {file} in 'path' and then |:edit| it.
+ {not in Vi} {not available when the |+file_in_path|
+ feature was disabled at compile time}
+
+:{count}fin[d][!] [++opt] [+cmd] {file}
+ Just like ":find", but use the {count} match in
+ 'path'. Thus ":2find file" will find the second
+ "file" found in 'path'. When there are fewer matches
+ for the file in 'path' than asked for, you get an
+ error message.
+
+ *:ex*
+:ex [++opt] [+cmd] [file]
+ Same as |:edit|.
+
+ *:vi* *:visual*
+:vi[sual][!] [++opt] [+cmd] [file]
+ When entered in Ex mode: Leave |Ex-mode|, go back to
+ Normal mode. Otherwise same as |:edit|.
+
+ *:vie* *:view*
+:vie[w] [++opt] [+cmd] file
+ When entered in Ex mode: Leave Ex mode, go back to
+ Normal mode. Otherwise same as |:edit|, but set
+ 'readonly' option for this buffer. {not in Vi}
+
+ *CTRL-^* *CTRL-6*
+[count]CTRL-^ Edit [count]th alternate file (equivalent to ":e
+ #[count]"). Without count this gets you to the
+ previously edited file. This is a quick way to toggle
+ between two (or more) files.
+ If the 'autowrite' or 'autowriteall' option is on and
+ the buffer was changed, write it.
+ Mostly the ^ character is positioned on the 6 key,
+ pressing CTRL and 6 then gets you what we call CTRL-^.
+ But on some non-US keyboards CTRL-^ is produced in
+ another way.
+
+[count]]f *]f* *[f*
+[count][f Same as "gf". Deprecated.
+
+ *gf* *E446* *E447*
+[count]gf Edit the file whose name is under or after the cursor.
+ Mnemonic: "goto file".
+ Uses the 'isfname' option to find out which characters
+ are supposed to be in a file name. Trailing
+ punctuation characters ".,:;!" are ignored.
+ Uses the 'path' option as a list of directory names
+ to look for the file. Also looks for the file
+ relative to the current file.
+ Uses the 'suffixesadd' option to check for file names
+ with a suffix added.
+ If the file can't be found, 'includeexpr' is used to
+ modify the name and another attempt is done.
+ If a [count] is given, the count'th file that is found
+ in the 'path' is edited.
+ This command fails if Vim refuses to |abandon| the
+ current file.
+ If you do want to edit a new file, use: >
+ :e <cfile>
+< To make gf always work like that: >
+ :map gf :e <cfile><CR>
+< If the name is a hypertext link, that looks like
+ "type://machine/path", you need the |netrw| plugin.
+ For Unix the '~' character is expanded, like in
+ "~user/file". Environment variables are expanded too
+ |expand-env|.
+ {not in Vi}
+ {not available when the |+file_in_path| feature was
+ disabled at compile time}
+
+ *v_gf*
+{Visual}[count]gf Same as "gf", but the highlighted text is used as the
+ name of the file to edit. 'isfname' is ignored.
+ Leading blanks are skipped, otherwise all blanks and
+ special characters are included in the file name.
+ (For {Visual} see |Visual-mode|.)
+ {not in VI}
+
+These commands are used to start editing a single file. This means that the
+file is read into the buffer and the current file name is set. The file that
+is opened depends on the current directory, see |:cd|.
+
+See |read-messages| for an explanation of the message that is given after the
+file has been read.
+
+You can use the ":e!" command if you messed up the buffer and want to start
+all over again. The ":e" command is only useful if you have changed the
+current file name.
+
+ *:filename* *{file}*
+Note for systems other than Unix and MS-DOS: When using a command that
+accepts a single file name (like ":edit file") spaces in the file name are
+allowed, but trailing spaces are ignored. This is useful on systems that
+allow file names with embedded spaces (like the Amiga). Example: The command
+":e Long File Name " will edit the file "Long File Name". When using a
+command that accepts more than one file name (like ":next file1 file2")
+embedded spaces must be escaped with a backslash.
+
+Wildcards in {file} are expanded. Which wildcards are supported depends on
+the system. These are the common ones:
+ * matches anything, including nothing
+ ? matches one character
+ [abc] match 'a', 'b' or 'c'
+To avoid the special meaning of the wildcards prepend a backslash. However,
+on MS-Windows the backslash is a path separator and "path\[abc]" is still seen
+as a wildcard when "[" is in the 'isfname' option. A simple way to avoid this
+is to use "path\[[]abc]". Then the file "path[abc]" literally.
+
+ *backtick-expansion* *`-expansion*
+On Unix you can also use backticks in the file name, for example: >
+ :e `find . -name ver\\*.c -print`
+The backslashes before the star are required to prevent "ver*.c" to be
+expanded by the shell before executing the find program.
+This also works for most other systems, with the restriction that the
+backticks must be around the whole item. It is not possible to have text
+directly before the first or just after the last backtick.
+
+You can have the backticks expanded as a Vim expression, instead of
+an external command, by using the syntax `={expr}` e.g. >
+ :let foo='bar'
+ :e `=foo . ".c" `
+edits "bar.c". Note that the expression cannot contain a backtick.
+
+ *++opt* *[++opt]*
+The [++opt] argument can be used to force the value of 'fileformat' or
+'fileencoding' to a value for one command. The form is: >
+ ++{optname}={value}
+
+Where {optname} is one of: *++ff* *++enc* *++bin* *++nobin*
+ ff or fileformat overrides 'fileformat'
+ enc or encoding overrides 'fileencoding'
+ bin or binary sets 'binary'
+ nobin or nobinary resets 'binary'
+
+{value} cannot contain white space. It can be any valid value for these
+options. Examples: >
+ :e ++ff=unix
+This edits the same file again with 'fileformat' set to "unix". >
+
+ :w ++enc=latin1 newfile
+This writes the current buffer to "newfile" in latin1 format.
+
+Note that when reading, the 'fileformat' and 'fileencoding' options will be
+set to the used format. When writing this doesn't happen, thus a next write
+will use the old value of the option. Same for the 'binary' option.
+
+There may be several ++opt arguments, separated by white space. They must all
+appear before any |+cmd| argument.
+
+ *+cmd* *[+cmd]*
+The [+cmd] argument can be used to position the cursor in the newly opened
+file, or execute any other command:
+ + Start at the last line.
+ +{num} Start at line {num}.
+ +/{pat} Start at first line containing {pat}.
+ +{command} Execute {command} after opening the new file.
+ {command} is any Ex command.
+To include a white space in the {pat} or {command}, precede it with a
+backslash. Double the number of backslashes. >
+ :edit +/The\ book file
+ :edit +/dir\ dirname\\ file
+ :edit +set\ dir=c:\\\\temp file
+Note that in the last example the number of backslashes is halved twice: Once
+for the "+cmd" argument and once for the ":set" command.
+
+ *file-formats*
+The 'fileformat' option sets the <EOL> style for a file:
+'fileformat' characters name ~
+ "dos" <CR><NL> or <NL> DOS format *DOS-format*
+ "unix" <NL> Unix format *Unix-format*
+ "mac" <CR> Mac format *Mac-format*
+Previously 'textmode' was used. It is obsolete now.
+
+When reading a file, the mentioned characters are interpreted as the <EOL>.
+In DOS format (default for MS-DOS, OS/2 and Win32), <CR><NL> and <NL> are both
+interpreted as the <EOL>. Note that when writing the file in DOS format,
+<CR> characters will be added for each single <NL>. Also see |file-read|.
+
+When writing a file, the mentioned characters are used for <EOL>. For DOS
+format <CR><NL> is used. Also see |DOS-format-write|.
+
+You can read a file in DOS format and write it in Unix format. This will
+replace all <CR><NL> pairs by <NL> (assuming 'fileformats' includes "dos"): >
+ :e file
+ :set fileformat=unix
+ :w
+If you read a file in Unix format and write with DOS format, all <NL>
+characters will be replaced with <CR><NL> (assuming 'fileformats' includes
+"unix"): >
+ :e file
+ :set fileformat=dos
+ :w
+
+If you start editing a new file and the 'fileformats' option is not empty
+(which is the default), Vim will try to detect whether the lines in the file
+are separated by the specified formats. When set to "unix,dos", Vim will
+check for lines with a single <NL> (as used on Unix and Amiga) or by a <CR>
+<NL> pair (MS-DOS). Only when ALL lines end in <CR><NL>, 'fileformat' is set
+to "dos", otherwise it is set to "unix". When 'fileformats' includes "mac",
+and no <NL> characters are found in the file, 'fileformat' is set to "mac".
+
+If the 'fileformat' option is set to "dos" on non-MS-DOS systems the message
+"[dos format]" is shown to remind you that something unusual is happening. On
+MS-DOS systems you get the message "[unix format]" if 'fileformat' is set to
+"unix". On all systems but the Macintosh you get the message "[mac format]"
+if 'fileformat' is set to "mac".
+
+If the 'fileformats' option is empty and DOS format is used, but while reading
+a file some lines did not end in <CR><NL>, "[CR missing]" will be included in
+the file message.
+If the 'fileformats' option is empty and Mac format is used, but while reading
+a file a <NL> was found, "[NL missing]" will be included in the file message.
+
+If the new file does not exist, the 'fileformat' of the current buffer is used
+when 'fileformats' is empty. Otherwise the first format from 'fileformats' is
+used for the new file.
+
+Before editing binary, executable or Vim script files you should set the
+'binary' option. A simple way to do this is by starting Vim with the "-b"
+option. This will avoid the use of 'fileformat'. Without this you risk that
+single <NL> characters are unexpectedly replaced with <CR><NL>.
+
+You can encrypt files that are written by setting the 'key' option. This
+provides some security against others reading your files. |encryption|
+
+
+File Searching *file-searching*
+
+{not available when compiled without the |+path_extra| feature}
+
+The file searching is currently used for the 'path', 'cdpath' and 'tags'
+options. There are three different types of searching:
+
+1) Downward search:
+ Downward search uses the wildcards '*', '**' and possibly others
+ supported by your operating system. '*' and '**' are handled inside Vim, so
+ they work on all operating systems.
+
+ The usage of '*' is quite simple: It matches 0 or more characters.
+
+ '**' is more sophisticated:
+ - It ONLY matches directories.
+ - It matches up to 30 directories deep, so you can use it to search an
+ entire directory tree
+ - The maximum number of levels matched can be given by appending a number
+ to '**'.
+ Thus '/usr/**2' can match: >
+ /usr
+ /usr/include
+ /usr/include/sys
+ /usr/include/g++
+ /usr/lib
+ /usr/lib/X11
+ ....
+< It does NOT match '/usr/include/g++/std' as this would be three
+ levels.
+ The allowed number range is 0 ('**0' is removed) to 255.
+ If the given number is smaller than 0 it defaults to 30, if it's
+ bigger than 255 it defaults to 255.
+ - '**' can only be at the end of the path or be followed by a path
+ separator or by a number and a path separator.
+
+ You can combine '*' and '**' in any order: >
+ /usr/**/sys/*
+ /usr/*/sys/**
+ /usr/**2/sys/*
+
+2) Upward search:
+ Here you can give a directory and then search the directory tree upward for
+ a file. You could give stop-directories to limit the upward search. The
+ stop-directories are appended to the path (for the 'path' option) or to
+ the filename (for the 'tags' option) with a ';'. If you want several
+ stop-directories separate them with ';'. If you want no stop-directory
+ ("search upward till the root directory) just use ';'. >
+ /usr/include/sys;/usr
+< will search in: >
+ /usr/include/sys
+ /usr/include
+ /usr
+<
+ If you use a relative path the upward search is started in Vim's current
+ directory or in the directory of the current file (if the relative path
+ starts with './' and 'd' is not included in 'cpoptions').
+
+ If Vim's current path is /u/user_x/work/release and you do >
+ :set path=include;/u/user_x
+< and then search for a file with |gf| the file is searched in: >
+ /u/user_x/work/release/include
+ /u/user_x/work/include
+ /u/user_x/include
+
+3) Combined up/downward search
+ If Vim's current path is /u/user_x/work/release and you do >
+ set path=**;/u/user_x
+< and then search for a file with |gf| the file is searched in: >
+ /u/user_x/work/release/**
+ /u/user_x/work/**
+ /u/user_x/**
+<
+ BE CAREFUL! This might consume a lot of time, as the search of
+ '/u/user_x/**' includes '/u/user_x/work/**' and
+ '/u/user_x/work/release/**'. So '/u/user_x/work/release/**' is searched
+ three and '/u/user_x/work/**' is searched two times.
+
+ In the above example you might want to set path to: >
+ :set path=**,/u/user_x/**
+< This searches: >
+ /u/user_x/work/release/**
+ /u/user_x/**
+< This searches the same directories, but in a different order.
+
+==============================================================================
+3. Dialogs *edit-dialogs*
+
+ *: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).
+
+Examples: >
+ :confirm w foo
+< Will ask for confirmation when "foo" already exists. >
+ :confirm q
+< Will ask for confirmation when there are changes. >
+ :confirm qa
+< If any modified, unsaved buffers exist, you will be prompted to save
+ or abandon each one. There are also choices to "save all" or "abandon
+ all".
+
+If you want to always use ":confirm", set the 'confirm' option.
+
+ *:browse* *:bro* *E338* *E614* *E615* *E616* *E578*
+:bro[wse] {command} Open a file selection dialog for an argument to
+ {command}. At present this works for |:e|, |:w|,
+ |:r|, |:saveas|, |:sp|, |:mkexrc|, |:mkvimrc| and
+ |:mksession|.
+ {only in Win32, Athena, Motif, GTK and Mac GUI}
+ When ":browse" is not possible you get an error
+ message. If the |+browse| feature is missing or the
+ {command} doesn't support browsing, the {command} is
+ executed without a dialog.
+ ":browse set" works like |:options|.
+
+The syntax is best shown via some examples: >
+ :browse e $vim/foo
+< Open the browser in the $vim/foo directory, and edit the
+ file chosen. >
+ :browse e
+< Open the browser in the directory specified with 'browsedir',
+ and edit the file chosen. >
+ :browse w
+< Open the browser in the directory of the current buffer,
+ with the current buffer filename as default, and save the
+ buffer under the filename chosen. >
+ :browse w C:/bar
+< Open the browser in the C:/bar directory, with the current
+ buffer filename as default, and save the buffer under the
+ filename chosen.
+Also see the |'browsedir'| option.
+For versions of Vim where browsing is not supported, the command is executed
+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 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).
+
+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"
+
+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
+filetype plugin, so that the browse dialog would contain entries related to
+the type of file you are currently editing. Disadvantage: This makes it
+difficult to start editing a file of a different type. To overcome this, you
+may want to add "All Files\t*.*\n" as the final filter, so that the user can
+still access any desired file.
+
+==============================================================================
+4. The current directory *current-directory*
+
+You may use the |:cd| and |:lcd| commands to change to another directory, so
+you will not have to type that directory name in front of the file names. It
+also makes a difference for executing external commands, e.g. ":!ls".
+
+ *:cd* *E472*
+:cd On non-Unix systems: Print the current directory
+ name. On Unix systems: Change the current directory
+ to the home directory. Use |:pwd| to print the
+ current directory on all systems.
+
+:cd {path} Change the current directory to {path}.
+ If {path} is relative, it is searched for in the
+ directories listed in |'cdpath'|.
+ Does not change the meaning of an already opened file,
+ because its full path name is remembered. Files from
+ the |arglist| may change though!
+ On MS-DOS this also changes the active drive.
+ To change to the directory of the current file: >
+ :cd %:h
+<
+ *:cd-* *E186*
+:cd - Change to the previous current directory (before the
+ previous ":cd {path}" command). {not in Vi}
+
+ *:chd* *:chdir*
+:chd[ir] [path] Same as |:cd|.
+
+ *:lc* *:lcd*
+:lc[d] {path} Like |:cd|, but only set the current directory for the
+ current window. The current directory for other
+ windows is not changed. {not in Vi}
+
+ *:lch* *:lchdir*
+:lch[dir] Same as |:lcd|. {not in Vi}
+
+ *:pw* *:pwd* *E187*
+:pw[d] Print the current directory name. {Vi: no pwd}
+ Also see |getcwd()|.
+
+So long as no |:lcd| command has been used, all windows share the same current
+directory. Using a command to jump to another window doesn't change anything
+for the current directory.
+When a |:lcd| command has been used for a window, the specified directory
+becomes the current directory for that window. Windows where the |:lcd|
+command has not been used stick to the global current directory. When jumping
+to another window the current directory will become the last specified local
+current directory. If none was specified, the global current directory is
+used.
+When a |:cd| command is used, the current window will lose his local current
+directory and will use the global current directory from now on.
+
+After using |:cd| the full path name will be used for reading and writing
+files. On some networked file systems this may cause problems. The result of
+using the full path name is that the file names currently in use will remain
+referring to the same file. Example: If you have a file a:test and a
+directory a:vim the commands ":e test" ":cd vim" ":w" will overwrite the file
+a:test and not write a:vim/test. But if you do ":w test" the file a:vim/test
+will be written, because you gave a new file name and did not refer to a
+filename before the ":cd".
+
+==============================================================================
+5. The argument list *argument-list* *arglist*
+
+If you give more than one file name when starting Vim, this list is remembered
+as the argument list. You can jump to each file in this list.
+
+Do not confuse this with the buffer list, which you can see with the
+|:buffers| command. The argument list was already present in Vi, the buffer
+list is new in Vim. A file name in the argument list will also be present in
+the buffer list (unless it was deleted with ":bdel").
+
+This subject is introduced in section |07.2| of the user manual.
+
+There is one global argument list, which is used for all windows by default.
+It is possible to create a new argument list local to a window, see
+|:arglocal|.
+
+You can use the argument list with the following commands, and with the
+expression functions |argc()| and |argv()|. These all work on the argument
+list of the current window.
+
+ *:ar* *:args*
+:ar[gs] Print the argument list, with the current file in
+ square brackets.
+
+:ar[gs] [++opt] [+cmd] {arglist} *:args_f*
+ Define {arglist} as the new argument list and edit
+ the first one. This fails when changes have been made
+ and Vim does not want to |abandon| the current buffer.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+:ar[gs]! [++opt] [+cmd] {arglist} *:args_f!*
+ Define {arglist} as the new argument list and edit
+ the first one. Discard any changes to the current
+ buffer.
+ Also see |++opt| and |+cmd|.
+ {Vi: no ++opt}
+
+:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
+ Add {name} to the argument list and edit it.
+ When {name} already exists in the argument list, this
+ entry is edited.
+ This is like using |:argadd| and then |:edit|.
+ Note that only one file name is allowed, and spaces
+ inside the file name are allowed, like with |:edit|.
+ [count] is used like with |:argadd|.
+ [!] is required if the current file cannot be
+ |abandon|ed.
+ Also see |++opt| and |+cmd|.
+ {not in Vi}
+
+:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
+ Add the {name}s to the argument list.
+ If [count] is omitted, the {name}s are added just
+ after the current entry in the argument list.
+ Otherwise they are added after the [count]'th file.
+ If the argument list is "a b c", and "b" is the
+ current argument, then these commands result in:
+ command new argument list ~
+ :argadd x a b x c
+ :0argadd x x a b c
+ :1argadd x a x b c
+ :99argadd x a b c x
+ There is no check for duplicates, it is possible to
+ add a file to the argument list twice.
+ The currently edited file is not changed.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+ Note: you can also use this method: >
+ :args ## x
+< This will add the "x" item and sort the new list.
+
+:argd[elete] {pattern} .. *:argd* *:argdelete* *E480*
+ Delete files from the argument list that match the
+ {pattern}s. {pattern} is used like a file pattern,
+ see |file-pattern|. "%" can be used to delete the
+ current entry.
+ This command keeps the currently edited file, also
+ when it's deleted from the argument list.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+
+:{range}argd[elete] Delete the {range} files from the argument list.
+ When the last number in the range is too high, up to
+ the last argument is deleted. Example: >
+ :10,1000argdel
+< Deletes arguments 10 and further, keeping 1-9.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+
+ *:argu* *:argument*
+:[count]argu[ment] [count] [++opt] [+cmd]
+ Edit file [count] in the argument list. When [count]
+ is omitted the current entry is used. This fails
+ when changes have been made and Vim does not want to
+ |abandon| the current buffer.
+ Also see |++opt| and |+cmd|.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+
+:[count]argu[ment]! [count] [++opt] [+cmd]
+ Edit file [count] in the argument list, discard any
+ changes to the current buffer. When [count] is
+ omitted the current entry is used.
+ Also see |++opt| and |+cmd|.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+
+:[count]n[ext] [++opt] [+cmd] *:n* *:ne* *:next* *E165* *E163*
+ Edit [count] next file. This fails when changes have
+ been made and Vim does not want to |abandon| the
+ current buffer. Also see |++opt| and |+cmd|. {Vi: no
+ count or ++opt}.
+
+:[count]n[ext]! [++opt] [+cmd]
+ Edit [count] next file, discard any changes to the
+ buffer. Also see |++opt| and |+cmd|. {Vi: no count
+ or ++opt}.
+
+:n[ext] [++opt] [+cmd] {arglist} *:next_f*
+ Same as |:args_f|.
+
+:n[ext]! [++opt] [+cmd] {arglist}
+ Same as |:args_f!|.
+
+:[count]N[ext] [count] [++opt] [+cmd] *:Next* *:N* *E164*
+ Edit [count] previous file in argument list. This
+ fails when changes have been made and Vim does not
+ want to |abandon| the current buffer.
+ Also see |++opt| and |+cmd|. {Vi: no count or ++opt}.
+
+:[count]N[ext]! [count] [++opt] [+cmd]
+ Edit [count] previous file in argument list. Discard
+ any changes to the buffer. Also see |++opt| and
+ |+cmd|. {Vi: no count or ++opt}.
+
+:[count]prev[ious] [count] [++opt] [+cmd] *:prev* *:previous*
+ Same as :Next. Also see |++opt| and |+cmd|. {Vi:
+ only in some versions}
+
+ *:rew* *:rewind*
+:rew[ind] [++opt] [+cmd]
+ Start editing the first file in the argument list.
+ This fails when changes have been made and Vim does
+ not want to |abandon| the current buffer.
+ Also see |++opt| and |+cmd|. {Vi: no ++opt}
+
+:rew[ind]! [++opt] [+cmd]
+ Start editing the first file in the argument list.
+ Discard any changes to the buffer. Also see |++opt|
+ and |+cmd|. {Vi: no ++opt}
+
+ *:fir* *:first*
+:fir[st][!] [++opt] [+cmd]
+ Other name for ":rewind". {not in Vi}
+
+ *:la* *:last*
+:la[st] [++opt] [+cmd]
+ Start editing the last file in the argument list.
+ This fails when changes have been made and Vim does
+ not want to |abandon| the current buffer.
+ Also see |++opt| and |+cmd|. {not in Vi}
+
+:la[st]! [++opt] [+cmd]
+ Start editing the last file in the argument list.
+ Discard any changes to the buffer. Also see |++opt|
+ and |+cmd|. {not in Vi}
+
+ *:wn* *:wnext*
+:[count]wn[ext] [++opt] [+cmd]
+ Write current file and start editing the [count]
+ next file. Also see |++opt| and |+cmd|. {not in Vi}
+
+:[count]wn[ext] [++opt] [+cmd] {file}
+ Write current file to {file} and start editing the
+ [count] next file, unless {file} already exists and
+ the 'writeany' option is off. Also see |++opt| and
+ |+cmd|. {not in Vi}
+
+:[count]wn[ext]! [++opt] [+cmd] {file}
+ Write current file to {file} and start editing the
+ [count] next file. Also see |++opt| and |+cmd|. {not
+ in Vi}
+
+:[count]wN[ext][!] [++opt] [+cmd] [file] *:wN* *:wNext*
+:[count]wp[revous][!] [++opt] [+cmd] [file] *:wp* *:wprevious*
+ Same as :wnext, but go to previous file instead of
+ next. {not in Vi}
+
+The [count] in the commands above defaults to one. For some commands it is
+possible to use two counts. The last one (rightmost one) is used.
+
+If no [+cmd] argument is present, the cursor is positioned at the last known
+cursor position for the file. If 'startofline' is set, the cursor will be
+positioned at the first non-blank in the line, otherwise the last know column
+is used. If there is no last known cursor position the cursor will be in the
+first line (the last line in Ex mode).
+
+The wildcards in the argument list are expanded and the file names are sorted.
+Thus you can use the command "vim *.c" to edit all the C files. From within
+Vim the command ":n *.c" does the same. On Unix you can also use backticks,
+for example: >
+ :n `find . -name \\*.c -print`
+The backslashes before the star are required to prevent "*.c" to be expanded
+by the shell before executing the find program.
+
+ *arglist-position*
+When there is an argument list you can see which file you are editing in the
+title of the window (if there is one and 'title' is on) and with the file
+message you get with the "CTRL-G" command. You will see something like
+ (file 4 of 11)
+If 'shortmess' contains 'f' it will be
+ (4 of 11)
+If you are not really editing the file at the current position in the argument
+list it will be
+ (file (4) of 11)
+This means that you are position 4 in the argument list, but not editing the
+fourth file in the argument list. This happens when you do ":e file".
+
+
+LOCAL ARGUMENT LIST
+
+{not in Vi}
+{not available when compiled without the |+windows| or |+listcmds| feature}
+
+ *:arglocal*
+:argl[ocal] Make a local copy of the global argument list.
+ Doesn't start editing another file.
+
+:argl[ocal][!] [++opt] [+cmd] {arglist}
+ Define a new argument list, which is local to the
+ current window. Works like |:args_f| otherwise.
+
+ *:argglobal*
+:argg[lobal] Use the global argument list for the current window.
+ Doesn't start editing another file.
+
+:argg[lobal][!] [++opt] [+cmd] {arglist}
+ Use the global argument list for the current window.
+ Define a new global argument list like |:args_f|.
+ All windows using the global argument list will see
+ this new list.
+
+There can be several argument lists. They can be shared between windows.
+When they are shared, changing the argument list in one window will also
+change it in the other window.
+
+When a window is split the new window inherits the argument list from the
+current window. The two windows then share this list, until one of them uses
+|:arglocal| or |:argglobal| to use another argument list.
+
+
+USING THE ARGUMENT LIST
+
+ *:argdo*
+:argdo[!] {cmd} Execute {cmd} for each file in the argument list.
+ It works like doing this: >
+ :rewind
+ :{cmd}
+ :next
+ :{cmd}
+ etc.
+< When the current file can't be |abandon|ed and the [!]
+ is not present, the command fails.
+ When an error is detected on one file, further files
+ in the argument list will not be visited.
+ The last file in the argument list (or where an error
+ occurred) becomes the current file.
+ {cmd} can contain '|' to concatenate several commands.
+ {cmd} must not change the argument list.
+ Note: While this command is executing, the Syntax
+ autocommand event is disabled by adding it to
+ 'eventignore'. This considerably speeds up editing
+ each file.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+ Also see |:windo| and |:bufdo|.
+
+Example: >
+ :args *.c
+ :argdo set ff=unix | update
+This sets the 'fileformat' option to "unix" and writes the file if is now
+changed. This is done for all *.c files.
+
+Example: >
+ :args *.[ch]
+ :argdo %s/\<my_foo\>/My_Foo/ge | update
+This changes the word "my_foo" to "My_Foo" in all *.c and *.h files. The "e"
+flag is used for the ":substitute" command to avoid an error for files where
+"my_foo" isn't used. ":update" writes the file only if changes were made.
+
+==============================================================================
+6. Writing *writing* *save-file*
+
+Note: When the 'write' option is off, you are not able to write any file.
+
+ *:w* *:write*
+ *E502* *E503* *E504* *E505*
+ *E512* *E514* *E667*
+:w[rite] Write the whole buffer to the current file. This is
+ the normal way to save changes to a file. It fails
+ when the 'readonly' option is set or when there is
+ another reason why the file can't be written.
+
+:w[rite]! Like ":write", but forcefully write when 'readonly' is
+ set or there is another reason why writing was
+ refused.
+ Note: This may change the permission and ownership of
+ the file and break (symbolic) links. Add the 'W' flag
+ to 'cpoptions' to avoid this.
+
+:[range]w[rite][!] Write the specified lines to the current file. This
+ is unusual, because the file will not contain all
+ lines in the buffer.
+
+ *:w_f* *:write_f*
+:[range]w[rite] {file} Write the specified lines to {file}, unless it
+ already exists and the 'writeany' option is off.
+
+ *:w!*
+:[range]w[rite]! {file} Write the specified lines to {file}. Overwrite an
+ existing file.
+
+ *:w_a* *:write_a* *E494*
+:[range]w[rite][!] >> Append the specified lines to the current file.
+
+:[range]w[rite][!] >> {file}
+ Append the specified lines to {file}. '!' forces the
+ write even if file does not exist.
+
+ *:w_c* *:write_c*
+:[range]w[rite] !{cmd} Execute {cmd} with [range] lines as standard input
+ (note the space in front of the '!'). {cmd} is
+ executed like with ":!{cmd}", any '!' is replaced with
+ the previous command |:!|.
+
+The default [range] for the ":w" command is the whole buffer (1,$).
+If a file name is given with ":w" it becomes the alternate file. This can be
+used, for example, when the write fails and you want to try again later with
+":w #". This can be switched off by removing the 'A' flag from the
+'cpoptions' option.
+
+ *:sav* *:saveas*
+:sav[eas][!] {file} Save the current buffer under the name {file} and set
+ the filename of the current buffer to {file}. The
+ previous name is used for the alternate file name.
+ The [!] is needed to overwrite an existing file.
+ {not in Vi}
+
+ *:up* *:update*
+:[range]up[date][!] [>>] [file]
+ Like ":write", but only write when the buffer has been
+ modified. {not in Vi}
+
+
+WRITING WITH MULTIPLE BUFFERS *buffer-write*
+
+ *:wa* *:wall*
+:wa[ll] Write all changed buffers. Buffers without a file
+ name or which are readonly are not written. {not in
+ Vi}
+
+:wa[ll]! Write all changed buffers, even the ones that are
+ readonly. Buffers without a file name are not
+ written. {not in Vi}
+
+
+Vim will warn you if you try to overwrite a file that has been changed
+elsewhere. See |timestamp|.
+
+ *backup* *E207* *E506* *E507* *E508* *E509* *E510*
+If you write to an existing file (but do not append) while the 'backup',
+'writebackup' or 'patchmode' option is on, a backup of the original file is
+made. The file is either copied or renamed (see 'backupcopy'). After the
+file has been successfully written and when the 'writebackup' option is on and
+the 'backup' option is off, the backup file is deleted. When the 'patchmode'
+option is on the backup file may be renamed.
+
+ *backup-table*
+'backup' 'writebackup' action ~
+ off off no backup made
+ off on backup current file, deleted afterwards (default)
+ on off delete old backup, backup current file
+ on on delete old backup, backup current file
+
+When the 'backupskip' pattern matches with the name of the file which is
+written, no backup file is made. The values of 'backup' and 'writebackup' are
+ignored then.
+
+When the 'backup' option is on, an old backup file (with the same name as the
+new backup file) will be deleted. If 'backup' is not set, but 'writebackup'
+is set, an existing backup file will not be deleted. The backup file that is
+made while the file is being written will have a different name.
+
+On some filesystems it's possible that in a crash you lose both the backup and
+the newly written file (it might be there but contain bogus data). In that
+case try recovery, because the swap file is synced to disk and might still be
+there. |:recover|
+
+The directories given with the 'backupdir' option is used to put the backup
+file in. (default: same directory as the written file).
+
+Whether the backup is a new file, which is a copy of the original file, or the
+original file renamed depends on the 'backupcopy' option. See there for an
+explanation of when the copy is made and when the file is renamed.
+
+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-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,
+if the system allows it (the directory must be writable).
+
+ *write-fail*
+If the writing of the new file fails, you have to be careful not to lose
+your changes AND the original file. If there is no backup file and writing
+the new file failed, you have already lost the original file! DON'T EXIT VIM
+UNTIL YOU WRITE OUT THE FILE! If a backup was made, it is put back in place
+of the original file (if possible). If you exit Vim, and lose the changes
+you made, the original file will mostly still be there. If putting back the
+original file fails, there will be an error message telling you that you
+lost the original file.
+
+ *DOS-format-write*
+If the 'fileformat' is "dos", <CR> <NL> is used for <EOL>. This is default
+for MS-DOS, Win32 and OS/2. On other systems the message "[dos format]" is
+shown to remind you that an unusual <EOL> was used.
+ *Unix-format-write*
+If the 'fileformat' is "unix", <NL> is used for <EOL>. On MS-DOS, Win32 and
+OS/2 the message "[unix format]" is shown.
+ *Mac-format-write*
+If the 'fileformat' is "mac", <CR> is used for <EOL>. On non-Mac systems the
+message "[mac format]" is shown.
+
+See also |file-formats| and the 'fileformat' and 'fileformats' options.
+
+ *ACL*
+ACL stands for Access Control List. It is an advanced way to control access
+rights for a file. It is used on new MS-Windows and Unix systems, but only
+when the filesystem supports it.
+ Vim attempts to preserve the ACL info when writing a file. The backup file
+will get the ACL info of the original file.
+ The ACL info is also used to check if a file is read-only (when opening the
+file).
+
+ *read-only-share*
+When MS-Windows shares a drive on the network it can be marked as read-only.
+This means that even if the file read-only attribute is absent, and the ACL
+settings on NT network shared drives allow writing to the file, you can still
+not write to the file. Vim on Win32 platforms will detect read-only network
+drives and will mark the file as read-only. You will not be able to override
+it with |:write|.
+
+ *write-device*
+When the file name is actually a device name, Vim will not make a backup (that
+would be impossible). You need to use "!", since the device already exists.
+Example for Unix: >
+ :w! /dev/lpt0
+and for MS-DOS or MS-Windows: >
+ :w! lpt0
+For Unix a device is detected when the name doesn't refer to a normal file or
+a directory. A fifo or named pipe also looks like a device to Vim.
+For MS-DOS and MS-Windows the device is detected by its name:
+ AUX
+ CON
+ CLOCK$
+ NUL
+ PRN
+ COMn n=1,2,3... etc
+ LPTn n=1,2,3... etc
+The names can be in upper- or lowercase.
+
+==============================================================================
+7. Writing and quitting *write-quit*
+
+ *:q* *:quit*
+:q[uit] Quit the current window. Quit Vim if this is the last
+ window. This fails when changes have been made and
+ Vim refuses to |abandon| the current buffer, and when
+ the last file in the argument list has not been
+ edited.
+
+:conf[irm] q[uit] Quit, but give prompt when changes have been made, or
+ the last file in the argument list has not been
+ edited. See |:confirm| and 'confirm'. {not in Vi}
+
+:q[uit]! Quit without writing, also when visible buffers have
+ changes. Does not exit when there are changed hidden
+ buffers. Use ":qall!" to exit always.
+
+:cq[uit] Quit always, without writing, and return an error
+ code. See |:cq|. Used for Manx's QuickFix mode (see
+ |quickfix|). {not in Vi}
+
+ *:wq*
+:wq Write the current file and quit. Writing fails when
+ the file is read-only or the buffer does not have a
+ name. Quitting fails when the last file in the
+ argument list has not been edited.
+
+:wq! Write the current file and quit. Writing fails when
+ the current buffer does not have a name.
+
+:wq {file} Write to {file} and quit. Quitting fails when the
+ last file in the argument list has not been edited.
+
+:wq! {file} Write to {file} and quit.
+
+:[range]wq[!] [file] Same as above, but only write the lines in [range].
+
+ *:x* *:xit*
+:[range]x[it][!] [file]
+ Like ":wq", but write only when changes have been
+ made.
+ When 'hidden' is set and there are more windows, the
+ current buffer becomes hidden, after writing the file.
+
+ *:exi* *:exit*
+:[range]exi[t][!] [file]
+ Same as :xit.
+
+ *ZZ*
+ZZ Write current file, if modified, and quit (same as
+ ":x"). (Note: If there are several windows for the
+ current file, the file is written if it was modified
+ and the window is closed).
+
+ *ZQ*
+ZQ Quit without checking for changes (same as ":q!").
+ {not in Vi}
+
+MULTIPLE WINDOWS AND BUFFERS *window-exit*
+
+ *:qa* *:qall*
+:qa[ll] Exit Vim, unless there are some buffers which have been
+ changed. (Use ":bmod" to go to the next modified buffer).
+ When 'autowriteall' is set all changed buffers will be
+ written, like |:wqall|. {not in Vi}
+
+:conf[irm] qa[ll]
+ Exit Vim. Bring up a prompt when some buffers have been
+ changed. See |:confirm|. {not in Vi}
+
+:qa[ll]! Exit Vim. Any changes to buffers are lost. {not in Vi}
+
+ *:quita* *:quitall*
+:quita[ll][!] Same as ":qall". {not in Vi}
+
+:wqa[ll] *:wqa* *:wqall* *:xa* *:xall*
+:xa[ll] Write all changed buffers and exit Vim. If there are buffers
+ without a file name, which are readonly or which cannot be
+ written for another reason, Vim will not quit. {not in Vi}
+
+:conf[irm] wqa[ll]
+:conf[irm] xa[ll]
+ Write all changed buffers and exit Vim. Bring up a prompt
+ when some buffers are readonly or cannot be written for
+ another reason. See |:confirm|. {not in Vi}
+
+:wqa[ll]!
+:xa[ll]! Write all changed buffers, even the ones that are readonly,
+ and exit Vim. If there are buffers without a file name or
+ which cannot be written for another reason, Vim will not quit.
+ {not in Vi}
+
+==============================================================================
+8. Editing binary files *edit-binary*
+
+Although Vim was made to edit text files, it is possible to edit binary
+files. The |-b| Vim argument (b for binary) makes Vim do file I/O in binary
+mode, and sets some options for editing binary files ('binary' on, 'textwidth'
+to 0, 'modeline' off, 'expandtab' off). Setting the 'binary' option has the
+same effect. Don't forget to do this before reading the file.
+
+There are a few things to remember when editing binary files:
+- When editing executable files the number of characters must not change.
+ Use only the "R" or "r" command to change text. Do not delete characters
+ with "x" or by backspacing.
+- Set the 'textwidth' option to 0. Otherwise lines will unexpectedly be
+ split in two.
+- When there are not many <EOL>s, the lines will become very long. If you
+ want to edit a line that does not fit on the screen reset the 'wrap' option.
+ Horizontal scrolling is used then. If a line becomes too long (more than
+ about 32767 characters on the Amiga, much more on 32-bit systems, see
+ |limits|) you cannot edit that line. The line will be split when reading
+ the file. It is also possible that you get an "out of memory" error when
+ reading the file.
+- Make sure the 'binary' option is set BEFORE loading the
+ file. Otherwise both <CR> <NL> and <NL> are considered to end a line
+ and when the file is written the <NL> will be replaced with <CR> <NL>.
+- <Nul> characters are shown on the screen as ^@. You can enter them with
+ "CTRL-V CTRL-@" or "CTRL-V 000" {Vi cannot handle <Nul> characters in the
+ file}
+- To insert a <NL> character in the file split up a line. When writing the
+ buffer to a file a <NL> will be written for the <EOL>.
+- Vim normally appends an <EOL> at the end of the file if there is none.
+ Setting the 'binary' option prevents this. If you want to add the final
+ <EOL>, set the 'endofline' option. You can also read the value of this
+ option to see if there was an <EOL> for the last line (you cannot see this
+ in the text).
+
+==============================================================================
+9. Encryption *encryption*
+
+Vim is able to write files encrypted, and read them back. The encrypted text
+cannot be read without the right key.
+
+Note: The swapfile and text in memory is not encrypted. A system
+administrator will be able to see your text while you are editing it.
+When filtering text with ":!filter" or using ":w !command" the text is not
+encrypted, this may reveal it to others.
+
+WARNING: If you make a typo when entering the key and then write the file and
+exit, the text will be lost!
+
+The normal way to work with encryption, is to use the ":X" command, which will
+ask you to enter a key. A following write command will use that key to
+encrypt the file. If you later edit the same file, Vim will ask you to enter
+a key. If you type the same key as that was used for writing, the text will
+be readable again. If you use a wrong key, it will be a mess.
+
+ *:X*
+:X Prompt for an encryption key. The typing is done without showing the
+ actual text, so that someone looking at the display won't see it.
+ The typed key is stored in the 'key' option, which is used to encrypt
+ the file when it is written. The file will remain unchanged until you
+ write it. See also |-x|.
+
+The value of the 'key' options is used when text is written. When the option
+is not empty, the written file will be encrypted, using the value as the
+encryption key. A magic number is prepended, so that Vim can recognize that
+the file is encrypted.
+
+To disable the encryption, reset the 'key' option to an empty value: >
+ :set key=
+
+When reading a file that has been encrypted and this option is not empty, it
+will be used for decryption. If the value is empty, you will be prompted to
+enter the key. If you don't enter a key, the file is edited without being
+decrypted.
+
+If want to start reading a file that uses a different key, set the 'key'
+option to an empty string, so that Vim will prompt for a new one. Don't use
+the ":set" command to enter the value, other people can read the command over
+your shoulder.
+
+Since the value of the 'key' option is supposed to be a secret, its value can
+never be viewed. You should not set this option in a vimrc file.
+
+An encrypted file can be recognized by the "file" command, if you add this
+line to "/etc/magic", "/usr/share/misc/magic" or wherever your system has the
+"magic" file: >
+ 0 string VimCrypt~ Vim encrypted file
+
+Notes:
+- Encryption is not possible when doing conversion with 'charconvert'.
+- Text you copy or delete goes to the numbered registers. The registers can
+ be saved in the .viminfo file, where they could be read. Change your
+ 'viminfo' option to be safe.
+- Someone can type commands in Vim when you walk away for a moment, he should
+ not be able to get the key.
+- If you make a typing mistake when entering the key, you might not be able to
+ get your text back!
+- If you type the key with a ":set key=value" command, it can be kept in the
+ 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.
+- Vim originates from the Netherlands. That is where the sources come from.
+ Thus the encryption code is not exported from the USA.
+
+==============================================================================
+10. Timestamps *timestamp* *timestamps*
+
+Vim remembers the modification timestamp of a file when you begin editing it.
+This is used to avoid that you have two different versions of the same file
+(without you knowing this).
+
+After a shell command is run (|:!cmd| |suspend| |:read!| |K|) timestamps are
+compared for all buffers in a window. Vim will run any associated
+|FileChangedShell| autocommands or display a warning for any files that have
+changed. In the GUI this happens when Vim regains input focus.
+
+ *E321* *E462*
+If you want to automatically reload a file when it has been changed outside of
+Vim, set the 'autoread' option. This doesn't work at the moment you write the
+file though, only when the file wasn't changed inside of Vim.
+
+Note that if a FileChangedShell autocommand is defined you will not get a
+warning message or prompt. The autocommand is expected to handle this.
+
+There is no warning for a directory (e.g., in the |file-explorer|). But you
+do get warned if you started editing a new file and it was created as a
+directory later.
+
+When Vim notices the timestamp of a file has changed, and the file is being
+edited in a buffer but has not changed, Vim checks if the contents of the file
+is equal. This is done by reading the file again (into a hidden buffer, which
+is immediately deleted again) and comparing the text. If the text is equal,
+you will get no warning.
+
+If you don't get warned often enough you can use the following command.
+
+ *:checkt* *:checktime*
+:checkt[ime] Check if any buffers were changed outside of Vim.
+ This checks and warns you if you would end up with two
+ versions of a file.
+ If this is called from an autocommand, a ":global"
+ command or is not typed the actual check is postponed
+ until a moment the side effects (reloading the file)
+ would be harmless.
+ Each loaded buffer is checked for its associated file
+ being changed. If the file was changed Vim will take
+ action. If there are no changes in the buffer and
+ 'autoread' is set, the buffer is reloaded. Otherwise,
+ you are offered the choice of reloading the file. If
+ the file was deleted you get an error message.
+ If the file previously didn't exist you get a warning
+ if it exists now.
+ Once a file has been checked the timestamp is reset,
+ you will not be warned again.
+
+:[N]checkt[ime] {filename}
+:[N]checkt[ime] [N]
+ Check the timestamp of a specific buffer. The buffer
+ may be specified by name, number or with a pattern.
+
+
+Before writing a file the timestamp is checked. If it has changed, Vim will
+ask if you really want to overwrite the file:
+
+ WARNING: The file has been changed since reading it!!!
+ Do you really want to write to it (y/n)?
+
+If you hit 'y' Vim will continue writing the file. If you hit 'n' the write is
+aborted. If you used ":wq" or "ZZ" Vim will not exit, you will get another
+chance to write the file.
+
+The message would normally mean that somebody has written to the file after
+the edit session started. This could be another person, in which case you
+probably want to check if your changes to the file and the changes from the
+other person should be merged. Write the file under another name and check for
+differences (the "diff" program can be used for this).
+
+It is also possible that you modified the file yourself, from another edit
+session or with another command (e.g., a filter command). Then you will know
+which version of the file you want to keep.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
new file mode 100644
index 000000000..4685ff5e6
--- /dev/null
+++ b/runtime/doc/eval.txt
@@ -0,0 +1,4583 @@
+*eval.txt* For Vim version 7.0aa. Last change: 2004 May 18
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Expression evaluation *expression* *expr* *E15* *eval*
+
+Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.
+
+Note: Expression evaluation can be disabled at compile time. If this has been
+done, the features in this document are not available. See |+eval| and the
+last chapter below.
+
+1. Variables |variables|
+2. Expression syntax |expression-syntax|
+3. Internal variable |internal-variables|
+4. Builtin Functions |functions|
+5. Defining functions |user-functions|
+6. Curly braces names |curly-braces-names|
+7. Commands |expression-commands|
+8. Exception handling |exception-handling|
+9. Examples |eval-examples|
+10. No +eval feature |no-eval-feature|
+11. The sandbox |eval-sandbox|
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Variables *variables*
+
+There are two types of variables:
+
+Number a 32 bit signed number.
+String a NUL terminated string of 8-bit unsigned characters.
+
+These are converted automatically, depending on how they 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"
+
+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
+
+To force conversion from String to Number, add zero to it: >
+ :echo "0100" + 0
+
+For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE.
+
+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")
+
+If you need to know the type of a variable or expression, use the |type()|
+function.
+
+When the '!' flag is included in the 'viminfo' option, global variables that
+start with an uppercase letter, and don't contain a lowercase letter, are
+stored in the viminfo file |viminfo-file|.
+
+When the 'sessionoptions' option contains "global", global variables that
+start with an uppercase letter and contain at least one lowercase letter are
+stored in the session file |session-file|.
+
+variable name can be stored where ~
+my_var_6 not
+My_Var_6 session file
+MY_VAR_6 viminfo file
+
+
+It's possible to form a variable name with curly braces, see
+|curly-braces-names|.
+
+==============================================================================
+2. Expression syntax *expression-syntax*
+
+Expression syntax summary, from least to most significant:
+
+|expr1| expr2 ? expr1 : expr1 if-then-else
+
+|expr2| expr3 || expr3 .. logical OR
+
+|expr3| expr4 && expr4 .. logical AND
+
+|expr4| expr5 == expr5 equal
+ expr5 != expr5 not equal
+ expr5 > expr5 greater than
+ expr5 >= expr5 greater than or equal
+ expr5 < expr5 smaller than
+ expr5 <= expr5 smaller than or equal
+ expr5 =~ expr5 regexp matches
+ expr5 !~ expr5 regexp doesn't match
+
+ expr5 ==? expr5 equal, ignoring case
+ expr5 ==# expr5 equal, match case
+ etc. As above, append ? for ignoring case, # for
+ matching case
+
+|expr5| expr6 + expr6 .. number addition
+ expr6 - expr6 .. number subtraction
+ expr6 . expr6 .. string concatenation
+
+|expr6| expr7 * expr7 .. number multiplication
+ expr7 / expr7 .. number division
+ expr7 % expr7 .. number modulo
+
+|expr7| ! expr7 logical NOT
+ - expr7 unary minus
+ + expr7 unary plus
+ expr8
+
+|expr8| expr9[expr1] index in String
+
+|expr9| number number constant
+ "string" string constant
+ 'string' literal string constant
+ &option option value
+ (expr1) nested expression
+ variable internal variable
+ va{ria}ble internal variable with curly braces
+ $VAR environment variable
+ @r contents of register 'r'
+ function(expr1, ...) function call
+ func{ti}on(expr1, ...) function call with curly braces
+
+
+".." indicates that the operations in this level can be concatenated.
+Example: >
+ &nu || &list && &shell == "csh"
+
+All expressions within one level are parsed from left to right.
+
+
+expr1 *expr1* *E109*
+-----
+
+expr2 ? expr1 : expr1
+
+The expression before the '?' is evaluated to a number. If it evaluates to
+non-zero, the result is the value of the expression between the '?' and ':',
+otherwise the result is the value of the expression after the ':'.
+Example: >
+ :echo lnum == 1 ? "top" : lnum
+
+Since the first expression is an "expr2", it cannot contain another ?:. The
+other two expressions can, thus allow for recursive use of ?:.
+Example: >
+ :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
+
+To keep this readable, using |line-continuation| is suggested: >
+ :echo lnum == 1
+ :\ ? "top"
+ :\ : lnum == 1000
+ :\ ? "last"
+ :\ : lnum
+
+
+expr2 and expr3 *expr2* *expr3*
+---------------
+
+ *expr-barbar* *expr-&&*
+The "||" and "&&" operators take one argument on each side. The arguments
+are (converted to) Numbers. The result is:
+
+ input output ~
+n1 n2 n1 || n2 n1 && n2 ~
+zero zero zero zero
+zero non-zero non-zero zero
+non-zero zero non-zero zero
+non-zero non-zero non-zero non-zero
+
+The operators can be concatenated, for example: >
+
+ &nu || &list && &shell == "csh"
+
+Note that "&&" takes precedence over "||", so this has the meaning of: >
+
+ &nu || (&list && &shell == "csh")
+
+Once the result is known, the expression "short-circuits", that is, further
+arguments are not evaluated. This is like what happens in C. For example: >
+
+ let a = 1
+ echo a || b
+
+This is valid even if there is no variable called "b" because "a" is non-zero,
+so the result must be non-zero. Similarly below: >
+
+ echo exists("b") && b == "yes"
+
+This is valid whether "b" has been defined or not. The second clause will
+only be evaluated if "b" has been defined.
+
+
+expr4 *expr4*
+-----
+
+expr5 {cmp} expr5
+
+Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1
+if it evaluates to true.
+
+ *expr-==* *expr-!=* *expr->* *expr->=*
+ *expr-<* *expr-<=* *expr-=~* *expr-!~*
+ *expr-==#* *expr-!=#* *expr->#* *expr->=#*
+ *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
+ *expr-==?* *expr-!=?* *expr->?* *expr->=?*
+ *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
+ use 'ignorecase' match case ignore case ~
+equal == ==# ==?
+not equal != !=# !=?
+greater than > ># >?
+greater than or equal >= >=# >=?
+smaller than < <# <?
+smaller than or equal <= <=# <=?
+regexp matches =~ =~# =~?
+regexp doesn't match !~ !~# !~?
+
+Examples:
+"abc" ==# "Abc" evaluates to 0
+"abc" ==? "Abc" evaluates to 1
+"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise
+
+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,
+because 'x' converted to a Number is zero.
+
+When comparing two Strings, this is done with strcmp() or stricmp(). This
+results in the mathematical difference (comparing byte values), not
+necessarily the alphabetical difference in the local language.
+
+When using the operators with a trailing '#", or the short version and
+'ignorecase' is off, the comparing is done with strcmp().
+
+When using the operators with a trailing '?', or the short version and
+'ignorecase' is set, the comparing is done with stricmp().
+
+The "=~" and "!~" operators match the lefthand argument with the righthand
+argument, which is used as a pattern. See |pattern| for what a pattern is.
+This matching is always done like 'magic' was set and 'cpoptions' is empty, no
+matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts
+portable. To avoid backslashes in the regexp pattern to be doubled, use a
+single-quote string, see |literal-string|.
+Since a string is considered to be a single line, a multi-line pattern
+(containing \n, backslash-n) will not match. However, a literal NL character
+can be matched like an ordinary character. Examples:
+ "foo\nbar" =~ "\n" evaluates to 1
+ "foo\nbar" =~ "\\n" evaluates to 0
+
+
+expr5 and expr6 *expr5* *expr6*
+---------------
+expr6 + expr6 .. number addition *expr-+*
+expr6 - expr6 .. number subtraction *expr--*
+expr6 . expr6 .. string concatenation *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.
+
+Note the difference between "+" and ".":
+ "123" + "456" = 579
+ "123" . "456" = "123456"
+
+When the righthand side of '/' is zero, the result is 0x7fffffff.
+When the righthand side of '%' is zero, the result is 0.
+
+
+expr7 *expr7*
+-----
+! expr7 logical NOT *expr-!*
+- expr7 unary minus *expr-unary--*
++ expr7 unary plus *expr-unary-+*
+
+For '!' non-zero becomes zero, zero becomes one.
+For '-' the sign of the number is changed.
+For '+' the number is unchanged.
+
+A String will be converted to a Number first.
+
+These three can be repeated and mixed. Examples:
+ !-1 == 0
+ !!8 == 1
+ --9 == 9
+
+
+expr8 *expr8*
+-----
+expr9[expr1] index in String *expr-[]* *E111*
+
+This results in a String that contains the expr1'th single byte from expr9.
+expr9 is used as a String, expr1 as a Number. Note that this doesn't work for
+multi-byte encodings.
+
+Note that index zero gives the first character. This is like it works in C.
+Careful: text column numbers start with one! Example, to get the character
+under the cursor: >
+ :let c = getline(line("."))[col(".") - 1]
+
+If the length of the String is less than the index, the result is an empty
+String.
+
+ *expr9*
+number
+------
+number number constant *expr-number*
+
+Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
+
+
+string *expr-string* *E114*
+------
+"string" string constant *expr-quote*
+
+Note that double quotes are used.
+
+A string constant accepts these special characters:
+\... three-digit octal number (e.g., "\316")
+\.. two-digit octal number (must be followed by non-digit)
+\. one-digit octal number (must be followed by non-digit)
+\x.. byte specified with two hex numbers (e.g., "\x1f")
+\x. byte specified with one hex number (must be followed by non-hex char)
+\X.. same as \x..
+\X. same as \x.
+\u.... character specified with up to 4 hex numbers, stored according to the
+ current value of 'encoding' (e.g., "\u02a4")
+\U.... same as \u....
+\b backspace <BS>
+\e escape <Esc>
+\f formfeed <FF>
+\n newline <NL>
+\r return <CR>
+\t tab <Tab>
+\\ backslash
+\" double quote
+\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W.
+
+Note that "\000" and "\x00" force the end of the string.
+
+
+literal-string *literal-string* *E115*
+---------------
+'string' literal string constant *expr-'*
+
+Note that single quotes are used.
+
+This string is taken literally. No backslashes are removed or have a special
+meaning. A literal-string cannot contain a single quote. Use a normal string
+for that.
+
+
+option *expr-option* *E112* *E113*
+------
+&option option value, local value if possible
+&g:option global option value
+&l:option local option value
+
+Examples: >
+ echo "tabstop is " . &tabstop
+ if &insertmode
+
+Any option name can be used here. See |options|. When using the local value
+and there is no buffer-local or window-local value, the global value is used
+anyway.
+
+
+register *expr-register*
+--------
+@r contents of register 'r'
+
+The result is the contents of the named register, as a single string.
+Newlines are inserted where required. To get the contents of the unnamed
+register use @" or @@. The '=' register can not be used here. See
+|registers| for an explanation of the available registers.
+
+
+nesting *expr-nesting* *E110*
+-------
+(expr1) nested expression
+
+
+environment variable *expr-env*
+--------------------
+$VAR environment variable
+
+The String value of any environment variable. When it is not defined, the
+result is an empty string.
+ *expr-env-expand*
+Note that there is a difference between using $VAR directly and using
+expand("$VAR"). Using it directly will only expand environment variables that
+are known inside the current Vim session. Using expand() will first try using
+the environment variables known inside the current Vim session. If that
+fails, a shell will be used to expand the variable. This can be slow, but it
+does expand all variables that the shell knows about. Example: >
+ :echo $version
+ :echo expand("$version")
+The first one probably doesn't echo anything, the second echoes the $version
+variable (if your shell supports it).
+
+
+internal variable *expr-variable*
+-----------------
+variable internal variable
+See below |internal-variables|.
+
+
+function call *expr-function* *E116* *E117* *E118* *E119* *E120*
+-------------
+function(expr1, ...) function call
+See below |functions|.
+
+
+==============================================================================
+3. Internal variable *internal-variables* *E121*
+ *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|.
+
+An internal variable is created with the ":let" command |:let|.
+An internal variable is destroyed with the ":unlet" command |:unlet|.
+Using a name that isn't an internal variable, or an internal variable that has
+been destroyed, results in an error.
+
+There are several name spaces for variables. Which one is to be used is
+specified by what is prepended:
+
+ (nothing) In a function: local to a function; otherwise: global
+|buffer-variable| b: Local to the current buffer.
+|window-variable| w: Local to the current window.
+|global-variable| g: Global.
+|local-variable| l: Local to a function.
+|script-variable| s: Local to a |:source|'ed Vim script.
+|function-argument| a: Function argument (only inside a function).
+|vim-variable| v: Global, predefined by Vim.
+
+ *buffer-variable* *b:var*
+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 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
+ the buffer has changed. Example: >
+ :if my_changedtick != b:changedtick
+ : let my_changedtick = b:changedtick
+ : call My_Update()
+ :endif
+<
+ *window-variable* *w:var*
+A variable name that is preceded with "w:" is local to the current window. It
+is deleted when the window is closed.
+
+ *global-variable* *g:var*
+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*
+Inside functions local variables are accessed without prepending anything.
+But you can also prepend "l:" if you like.
+
+ *script-variable* *s:var*
+In a Vim script variables starting with "s:" can be used. They cannot be
+accessed from outside of the scripts, thus are local to the script.
+
+They can be used in:
+- commands executed while the script is sourced
+- functions defined in the script
+- autocommands defined in the script
+- functions and autocommands defined in functions and autocommands which were
+ defined in the script (recursively)
+- user defined commands defined in the script
+Thus not in:
+- other scripts sourced from this one
+- mappings
+- etc.
+
+script variables can be used to avoid conflicts with global variable names.
+Take this example:
+
+ let s:counter = 0
+ function MyCounter()
+ let s:counter = s:counter + 1
+ echo s:counter
+ endfunction
+ command Tick call MyCounter()
+
+You can now invoke "Tick" from any script, and the "s:counter" variable in
+that script will not be changed, only the "s:counter" in the script where
+"Tick" was defined is used.
+
+Another example that does the same: >
+
+ let s:counter = 0
+ command Tick let s:counter = s:counter + 1 | echo s:counter
+
+When calling a function and invoking a user-defined command, the context for
+script varialbes is set to the script where the function or command was
+defined.
+
+The script variables are also available when a function is defined inside a
+function that is defined in a script. Example: >
+
+ let s:counter = 0
+ function StartCounting(incr)
+ if a:incr
+ function MyCounter()
+ let s:counter = s:counter + 1
+ endfunction
+ else
+ function MyCounter()
+ let s:counter = s:counter - 1
+ endfunction
+ endif
+ endfunction
+
+This defines the MyCounter() function either for counting up or counting down
+when calling StartCounting(). It doesn't matter from where StartCounting() is
+called, the s:counter variable will be accessible in MyCounter().
+
+When the same script is sourced again it will use the same script variables.
+They will remain valid as long as Vim is running. This can be used to
+maintain a counter: >
+
+ if !exists("s:counter")
+ let s:counter = 1
+ echo "script executed for the first time"
+ else
+ let s:counter = s:counter + 1
+ echo "script executed " . s:counter . " times now"
+ endif
+
+Note that this means that filetype plugins don't get a different set of script
+variables for each buffer. Use local buffer variables instead |b:var|.
+
+
+Predefined Vim variables: *vim-variable* *v:var*
+
+ *v:charconvert_from* *charconvert_from-variable*
+v:charconvert_from
+ The name of the character encoding of a file to be converted.
+ Only valid while evaluating the 'charconvert' option.
+
+ *v:charconvert_to* *charconvert_to-variable*
+v:charconvert_to
+ The name of the character encoding of a file after conversion.
+ Only valid while evaluating the 'charconvert' option.
+
+ *v:cmdarg* *cmdarg-variable*
+v:cmdarg This variable is used for two purposes:
+ 1. The extra arguments given to a file read/write command.
+ Currently these are "++enc=" and "++ff=". This variable is
+ set before an autocommand event for a file read/write
+ command is triggered. There is a leading space to make it
+ possible to append this variable directly after the
+ read/write command. Note: The "+cmd" argument isn't
+ included here, because it will be executed anyway.
+ 2. When printing a PostScript file with ":hardcopy" this is
+ the argument for the ":hardcopy" command. This can be used
+ in 'printexpr'.
+
+ *v:cmdbang* *cmdbang-variable*
+v:cmdbang Set like v:cmdarg for a file read/write command. When a "!"
+ was used the value is 1, otherwise it is 0. Note that this
+ can only be used in autocommands. For user commands |<bang>|
+ can be used.
+
+ *v:count* *count-variable*
+v:count The count given for the last Normal mode command. Can be used
+ to get the count before a mapping. Read-only. Example: >
+ :map _x :<C-U>echo "the count is " . v:count<CR>
+< Note: The <C-U> is required to remove the line range that you
+ get when typing ':' after a count.
+ "count" also works, for backwards compatibility.
+
+ *v:count1* *count1-variable*
+v:count1 Just like "v:count", but defaults to one when no count is
+ used.
+
+ *v:ctype* *ctype-variable*
+v:ctype The current locale setting for characters of the runtime
+ environment. This allows Vim scripts to be aware of the
+ current locale encoding. Technical: it's the value of
+ LC_CTYPE. When not using a locale the value is "C".
+ This variable can not be set directly, use the |:language|
+ command.
+ See |multi-lang|.
+
+ *v:dying* *dying-variable*
+v:dying Normally zero. When a deadly signal is caught it's set to
+ one. When multiple signals are caught the number increases.
+ Can be used in an autocommand to check if Vim didn't
+ terminate normally. {only works on Unix}
+ Example: >
+ :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
+<
+ *v:errmsg* *errmsg-variable*
+v:errmsg Last given error message. It's allowed to set this variable.
+ Example: >
+ :let v:errmsg = ""
+ :silent! next
+ :if v:errmsg != ""
+ : ... handle error
+< "errmsg" also works, for backwards compatibility.
+
+ *v:exception* *exception-variable*
+v:exception The value of the exception most recently caught and not
+ finished. See also |v:throwpoint| and |throw-variables|.
+ Example: >
+ :try
+ : throw "oops"
+ :catch /.*/
+ : echo "caught" v:exception
+ :endtry
+< Output: "caught oops".
+
+ *v:fname_in* *fname_in-variable*
+v:fname_in The name of the input file. Only valid while evaluating:
+ option used for ~
+ 'charconvert' file to be converted
+ 'diffexpr' original file
+ 'patchexpr' original file
+ 'printexpr' file to be printed
+
+ *v:fname_out* *fname_out-variable*
+v:fname_out The name of the output file. Only valid while
+ evaluating:
+ option used for ~
+ 'charconvert' resulting converted file (*)
+ 'diffexpr' output of diff
+ 'patchexpr' resulting patched file
+ (*) When doing conversion for a write command (e.g., ":w
+ file") it will be equal to v:fname_in. When doing conversion
+ for a read command (e.g., ":e file") it will be a temporary
+ file and different from v:fname_in.
+
+ *v:fname_new* *fname_new-variable*
+v:fname_new The name of the new version of the file. Only valid while
+ evaluating 'diffexpr'.
+
+ *v:fname_diff* *fname_diff-variable*
+v:fname_diff The name of the diff (patch) file. Only valid while
+ evaluating 'patchexpr'.
+
+ *v:folddashes* *folddashes-variable*
+v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed
+ fold.
+ Read-only. |fold-foldtext|
+
+ *v:foldlevel* *foldlevel-variable*
+v:foldlevel Used for 'foldtext': foldlevel of closed fold.
+ Read-only. |fold-foldtext|
+
+ *v:foldend* *foldend-variable*
+v:foldend Used for 'foldtext': last line of closed fold.
+ Read-only. |fold-foldtext|
+
+ *v:foldstart* *foldstart-variable*
+v:foldstart Used for 'foldtext': first line of closed fold.
+ Read-only. |fold-foldtext|
+
+ *v:lang* *lang-variable*
+v:lang The current locale setting for messages of the runtime
+ environment. This allows Vim scripts to be aware of the
+ current language. Technical: it's the value of LC_MESSAGES.
+ The value is system dependent.
+ This variable can not be set directly, use the |:language|
+ command.
+ It can be different from |v:ctype| when messages are desired
+ in a different language than what is used for character
+ encoding. See |multi-lang|.
+
+ *v:lc_time* *lc_time-variable*
+v:lc_time The current locale setting for time messages of the runtime
+ environment. This allows Vim scripts to be aware of the
+ current language. Technical: it's the value of LC_TIME.
+ This variable can not be set directly, use the |:language|
+ command. See |multi-lang|.
+
+ *v:lnum* *lnum-variable*
+v:lnum Line number for the 'foldexpr' and 'indentexpr' expressions.
+ Only valid while one of these expressions is being evaluated.
+ Read-only. |fold-expr| 'indentexpr'
+
+ *v:prevcount* *prevcount-variable*
+v:prevcount The count given for the last but one Normal mode command.
+ This is the v:count value of the previous command. Useful if
+ you want to cancel Visual mode and then use the count. >
+ :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
+< Read-only.
+
+ *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.
+ 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:servername* *servername-variable*
+v:servername The resulting registered |x11-clientserver| name if any.
+ Read-only.
+
+ *v:shell_error* *shell_error-variable*
+v:shell_error Result of the last shell command. When non-zero, the last
+ shell command had an error. When zero, there was no problem.
+ This only works when the shell returns the error code to Vim.
+ The value -1 is often used when the command could not be
+ executed. Read-only.
+ Example: >
+ :!mv foo bar
+ :if v:shell_error
+ : echo 'could not rename "foo" to "bar"!'
+ :endif
+< "shell_error" also works, for backwards compatibility.
+
+ *v:statusmsg* *statusmsg-variable*
+v:statusmsg Last given status message. It's allowed to set this variable.
+
+ *v:termresponse* *termresponse-variable*
+v:termresponse The escape sequence returned by the terminal for the |t_RV|
+ termcap entry. It is set when Vim receives an escape sequence
+ that starts with ESC [ or CSI and ends in a 'c', with only
+ digits, ';' and '.' in between.
+ When this option is set, the TermResponse autocommand event is
+ fired, so that you can react to the response from the
+ terminal.
+ The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c". Pp
+ is the terminal type: 0 for vt100 and 1 for vt220. Pv is the
+ patch level (since this was introduced in patch 95, it's
+ always 95 or bigger). Pc is always zero.
+ {only when compiled with |+termresponse| feature}
+
+ *v:this_session* *this_session-variable*
+v:this_session Full filename of the last loaded or saved session file. See
+ |:mksession|. It is allowed to set this variable. When no
+ session file has been saved, this variable is empty.
+ "this_session" also works, for backwards compatibility.
+
+ *v:throwpoint* *throwpoint-variable*
+v:throwpoint The point where the exception most recently caught and not
+ finished was thrown. Not set when commands are typed. See
+ also |v:exception| and |throw-variables|.
+ Example: >
+ :try
+ : throw "oops"
+ :catch /.*/
+ : echo "Exception from" v:throwpoint
+ :endtry
+< Output: "Exception from test.vim, line 2"
+
+ *v:version* *version-variable*
+v:version Version number of Vim: Major version number times 100 plus
+ minor version number. Version 5.0 is 500. Version 5.1 (5.01)
+ is 501. Read-only. "version" also works, for backwards
+ compatibility.
+ Use |has()| to check if a certain patch was included, e.g.: >
+ if has("patch123")
+< Note that patch numbers are specific to the version, thus both
+ version 5.0 and 5.1 may have a patch 123, but these are
+ completely different.
+
+ *v:warningmsg* *warningmsg-variable*
+v:warningmsg Last given warning message. It's allowed to set this variable.
+
+==============================================================================
+4. Builtin Functions *functions*
+
+See |function-list| for a list grouped by what the function is used for.
+
+(Use CTRL-] on the function name to jump to the full explanation)
+
+USAGE RESULT DESCRIPTION ~
+
+append( {lnum}, {string}) Number append {string} below line {lnum}
+argc() Number number of files in the argument list
+argidx() Number current index in the argument list
+argv( {nr}) String {nr} entry of the argument list
+browse( {save}, {title}, {initdir}, {default})
+ String put up a file requester
+bufexists( {expr}) Number TRUE if buffer {expr} exists
+buflisted( {expr}) Number TRUE if buffer {expr} is listed
+bufloaded( {expr}) Number TRUE if buffer {expr} is loaded
+bufname( {expr}) String Name of the buffer {expr}
+bufnr( {expr}) Number Number of the buffer {expr}
+bufwinnr( {expr}) Number window number of buffer {expr}
+byte2line( {byte}) Number line number at byte count {byte}
+char2nr( {expr}) Number ASCII value of first char in {expr}
+cindent( {lnum}) Number C indent for line {lnum}
+col( {expr}) Number column nr of cursor or mark
+confirm( {msg} [, {choices} [, {default} [, {type}]]])
+ Number number of choice picked by user
+cscope_connection( [{num} , {dbpath} [, {prepend}]])
+ Number checks existence of cscope connection
+cursor( {lnum}, {col}) Number position cursor at {lnum}, {col}
+delete( {fname}) Number delete file {fname}
+did_filetype() Number TRUE if FileType autocommand event used
+escape( {string}, {chars}) String escape {chars} in {string} with '\'
+eventhandler( ) Number TRUE if inside an event handler
+executable( {expr}) Number 1 if executable {expr} exists
+exists( {expr}) Number TRUE if {expr} exists
+expand( {expr}) String expand special keywords in {expr}
+filereadable( {file}) Number TRUE if {file} is a readable file
+filewritable( {file}) Number TRUE if {file} is a writable file
+fnamemodify( {fname}, {mods}) String modify file name
+foldclosed( {lnum}) Number first line of fold at {lnum} if closed
+foldclosedend( {lnum}) Number last line of fold at {lnum} if closed
+foldlevel( {lnum}) Number fold level at {lnum}
+foldtext( ) String line displayed for closed fold
+foreground( ) Number bring the Vim window to the foreground
+getchar( [expr]) Number get one character from the user
+getcharmod( ) Number modifiers for the last typed character
+getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
+getcmdline() String return the current command-line
+getcmdpos() Number return cursor position in command-line
+getcwd() String the current working directory
+getfsize( {fname}) Number size in bytes of file
+getftime( {fname}) Number last modification time of file
+getline( {lnum}) String line {lnum} from current buffer
+getreg( [{regname}]) String contents of register
+getregtype( [{regname}]) String type of register
+getwinposx() Number X coord in pixels of GUI Vim window
+getwinposy() Number Y coord in pixels of GUI Vim window
+getwinvar( {nr}, {varname}) variable {varname} in window {nr}
+glob( {expr}) String expand file wildcards in {expr}
+globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path}
+has( {feature}) Number TRUE if feature {feature} supported
+hasmapto( {what} [, {mode}]) Number TRUE if mapping to {what} exists
+histadd( {history},{item}) String add an item to a history
+histdel( {history} [, {item}]) String remove an item from a history
+histget( {history} [, {index}]) String get the item {index} from a history
+histnr( {history}) Number highest index of a history
+hlexists( {name}) Number TRUE if highlight group {name} exists
+hlID( {name}) Number syntax ID of highlight group {name}
+hostname() String name of the machine Vim is running on
+iconv( {expr}, {from}, {to}) String convert encoding of {expr}
+indent( {lnum}) Number indent of line {lnum}
+input( {prompt} [, {text}]) String get input from the user
+inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
+inputrestore() Number restore typeahead
+inputsave() Number save and clear typeahead
+inputsecret( {prompt} [, {text}]) String like input() but hiding the text
+isdirectory( {directory}) Number TRUE if {directory} is a directory
+libcall( {lib}, {func}, {arg}) String call {func} in library {lib} with {arg}
+libcallnr( {lib}, {func}, {arg}) Number idem, but return a Number
+line( {expr}) Number line nr of cursor, last line or mark
+line2byte( {lnum}) Number byte count of line {lnum}
+lispindent( {lnum}) Number Lisp indent for line {lnum}
+localtime() Number current time
+maparg( {name}[, {mode}]) String rhs of mapping {name} in mode {mode}
+mapcheck( {name}[, {mode}]) String check for mappings matching {name}
+match( {expr}, {pat}[, {start}])
+ Number position where {pat} matches in {expr}
+matchend( {expr}, {pat}[, {start}])
+ Number position where {pat} ends in {expr}
+matchstr( {expr}, {pat}[, {start}])
+ String match of {pat} in {expr}
+mode() String current editing mode
+nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum}
+nr2char( {expr}) String single char with ASCII value {expr}
+prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum}
+remote_expr( {server}, {string} [, {idvar}])
+ String send expression
+remote_foreground( {server}) Number bring Vim server to the foreground
+remote_peek( {serverid} [, {retvar}])
+ Number check for reply string
+remote_read( {serverid}) String read reply string
+remote_send( {server}, {string} [, {idvar}])
+ String send key sequence
+rename( {from}, {to}) Number rename (move) file from {from} to {to}
+resolve( {filename}) String get filename a shortcut points to
+search( {pattern} [, {flags}]) Number search for {pattern}
+searchpair( {start}, {middle}, {end} [, {flags} [, {skip}]])
+ Number search for other end of start/end pair
+server2client( {clientid}, {string})
+ Number send reply string
+serverlist() String get a list of available servers
+setbufvar( {expr}, {varname}, {val}) set {varname} in buffer {expr} to {val}
+setcmdpos( {pos}) Number set cursor position in command-line
+setline( {lnum}, {line}) Number set line {lnum} to {line}
+setreg( {n}, {v}[, {opt}]) Number set register to value and type
+setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val}
+simplify( {filename}) String simplify filename as much as possible
+strftime( {format}[, {time}]) String time in specified format
+stridx( {haystack}, {needle}) Number first index of {needle} in {haystack}
+strlen( {expr}) Number length of the String {expr}
+strpart( {src}, {start}[, {len}])
+ String {len} characters of {src} at {start}
+strridx( {haystack}, {needle}) Number last index of {needle} in {haystack}
+strtrans( {expr}) String translate string to make it printable
+submatch( {nr}) String specific match in ":substitute"
+substitute( {expr}, {pat}, {sub}, {flags})
+ String all {pat} in {expr} replaced with {sub}
+synID( {line}, {col}, {trans}) Number syntax ID at {line} and {col}
+synIDattr( {synID}, {what} [, {mode}])
+ String attribute {what} of syntax ID {synID}
+synIDtrans( {synID}) Number translated syntax ID of {synID}
+system( {expr}) String output of shell command {expr}
+tempname() String name for a temporary file
+tolower( {expr}) String the String {expr} switched to lowercase
+toupper( {expr}) String the String {expr} switched to uppercase
+type( {name}) Number type of variable {name}
+virtcol( {expr}) Number screen column of cursor or mark
+visualmode( [expr]) String last visual mode used
+winbufnr( {nr}) Number buffer number of window {nr}
+wincol() Number window column of the cursor
+winheight( {nr}) Number height of window {nr}
+winline() Number window line of the cursor
+winnr() Number number of current window
+winrestcmd() String returns command to restore window sizes
+winwidth( {nr}) Number width of window {nr}
+
+append({lnum}, {string}) *append()*
+ Append the text {string} after line {lnum} in the current
+ buffer. {lnum} can be zero, to insert a line before the first
+ one. Returns 1 for failure ({lnum} out of range) or 0 for
+ success.
+
+ *argc()*
+argc() The result is the number of files in the argument list of the
+ current window. See |arglist|.
+
+ *argidx()*
+argidx() The result is the current index in the argument list. 0 is
+ the first file. argc() - 1 is the last one. See |arglist|.
+
+ *argv()*
+argv({nr}) The result is the {nr}th file in the argument list of the
+ current window. See |arglist|. "argv(0)" is the first one.
+ Example: >
+ :let i = 0
+ :while i < argc()
+ : let f = escape(argv(i), '. ')
+ : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
+ : let i = i + 1
+ :endwhile
+<
+ *browse()*
+browse({save}, {title}, {initdir}, {default})
+ Put up a file requester. This only works when "has("browse")"
+ returns non-zero (only in some GUI versions).
+ The input fields are:
+ {save} when non-zero, select file to write
+ {title} title for the requester
+ {initdir} directory to start browsing in
+ {default} default file name
+ When the "Cancel" button is hit, something went wrong, or
+ browsing is not possible, an empty string is returned.
+
+bufexists({expr}) *bufexists()*
+ The result is a Number, which is non-zero if a buffer called
+ {expr} exists.
+ If the {expr} argument is a string it must match a buffer name
+ exactly.
+ If the {expr} argument is a number buffer numbers are used.
+ Unlisted buffers will be found.
+ Note that help files are listed by their short name in the
+ output of |:buffers|, but bufexists() requires using their
+ long name to be able to find them.
+ Use "bufexists(0)" to test for the existence of an alternate
+ file name.
+ *buffer_exists()*
+ Obsolete name: buffer_exists().
+
+buflisted({expr}) *buflisted()*
+ The result is a Number, which is non-zero if a buffer called
+ {expr} exists and is listed (has the 'buflisted' option set).
+ The {expr} argument is used like with bufexists().
+
+bufloaded({expr}) *bufloaded()*
+ The result is a Number, which is non-zero if a buffer called
+ {expr} exists and is loaded (shown in a window or hidden).
+ The {expr} argument is used like with bufexists().
+
+bufname({expr}) *bufname()*
+ The result is the name of a buffer, as it is displayed by the
+ ":ls" command.
+ If {expr} is a Number, that buffer number's name is given.
+ Number zero is the alternate buffer for the current window.
+ If {expr} is a String, it is used as a |file-pattern| to match
+ with the buffer names. This is always done like 'magic' is
+ set and 'cpoptions' is empty. When there is more than one
+ match an empty string is returned.
+ "" or "%" can be used for the current buffer, "#" for the
+ alternate buffer.
+ A full match is preferred, otherwise a match at the start, end
+ or middle of the buffer name is accepted.
+ Listed buffers are found first. If there is a single match
+ with a listed buffer, that one is returned. Next unlisted
+ buffers are searched for.
+ If the {expr} is a String, but you want to use it as a buffer
+ number, force it to be a Number by adding zero to it: >
+ :echo bufname("3" + 0)
+< If the buffer doesn't exist, or doesn't have a name, an empty
+ string is returned. >
+ bufname("#") alternate buffer name
+ bufname(3) name of buffer 3
+ bufname("%") name of current buffer
+ bufname("file2") name of buffer where "file2" matches.
+< *buffer_name()*
+ Obsolete name: buffer_name().
+
+ *bufnr()*
+bufnr({expr}) The result is the number of a buffer, as it is displayed by
+ the ":ls" command. For the use of {expr}, see |bufname()|
+ above. If the buffer doesn't exist, -1 is returned.
+ bufnr("$") is the last buffer: >
+ :let last_buffer = bufnr("$")
+< The result is a Number, which is the highest buffer number
+ of existing buffers. Note that not all buffers with a smaller
+ number necessarily exist, because ":bwipeout" may have removed
+ them. Use bufexists() to test for the existence of a buffer.
+ *buffer_number()*
+ Obsolete name: buffer_number().
+ *last_buffer_nr()*
+ Obsolete name for bufnr("$"): last_buffer_nr().
+
+bufwinnr({expr}) *bufwinnr()*
+ The result is a Number, which is the number of the first
+ window associated with buffer {expr}. For the use of {expr},
+ see |bufname()| above. If buffer {expr} doesn't exist or
+ there is no such window, -1 is returned. Example: >
+
+ echo "A window containing buffer 1 is " . (bufwinnr(1))
+
+< The number can be used with |CTRL-W_w| and ":wincmd w"
+ |:wincmd|.
+
+
+byte2line({byte}) *byte2line()*
+ Return the line number that contains the character at byte
+ count {byte} in the current buffer. This includes the
+ end-of-line character, depending on the 'fileformat' option
+ for the current buffer. The first character has byte count
+ one.
+ Also see |line2byte()|, |go| and |:goto|.
+ {not available when compiled without the |+byte_offset|
+ feature}
+
+char2nr({expr}) *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": >
+ char2nr("á") returns 225
+ char2nr("á"[0]) returns 195
+
+cindent({lnum}) *cindent()*
+ Get the amount of indent for line {lnum} according the C
+ indenting rules, as with 'cindent'.
+ The indent is counted in spaces, the value of 'tabstop' is
+ relevant. {lnum} is used just like in |getline()|.
+ When {lnum} is invalid or Vim was not compiled the |+cindent|
+ feature, -1 is returned.
+
+ *col()*
+col({expr}) The result is a Number, which is the column of the file
+ 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)
+ 'x position of mark x (if the mark is not set, 0 is
+ returned)
+ For the screen column position use |virtcol()|.
+ Note that only marks in the current file can be used.
+ Examples: >
+ col(".") column of cursor
+ col("$") length of cursor line plus one
+ col("'t") column of mark t
+ col("'" . markname) column of mark markname
+< The first column is 1. 0 is returned for an error.
+ For the cursor position, when 'virtualedit' is active, the
+ column is one higher if the cursor is after the end of the
+ line. This can be used to obtain the column in Insert mode: >
+ :imap <F2> <C-O>:let save_ve = &ve<CR>
+ \<C-O>:set ve=all<CR>
+ \<C-O>:echo col(".") . "\n" <Bar>
+ \let &ve = save_ve<CR>
+<
+ *confirm()*
+confirm({msg} [, {choices} [, {default} [, {type}]]])
+ Confirm() offers the user a dialog, from which a choice can be
+ made. It returns the number of the choice. For the first
+ choice this is 1.
+ Note: confirm() is only supported when compiled with dialog
+ support, see |+dialog_con| and |+dialog_gui|.
+ {msg} is displayed in a |dialog| with {choices} as the
+ alternatives. When {choices} is missing or empty, "&OK" is
+ used (and translated).
+ {msg} is a String, use '\n' to include a newline. Only on
+ some systems the string is wrapped when it doesn't fit.
+ {choices} is a String, with the individual choices separated
+ by '\n', e.g. >
+ confirm("Save changes?", "&Yes\n&No\n&Cancel")
+< The letter after the '&' is the shortcut key for that choice.
+ Thus you can type 'c' to select "Cancel". The shortcut does
+ not need to be the first letter: >
+ confirm("file has been modified", "&Save\nSave &All")
+< For the console, the first letter of each choice is used as
+ the default shortcut key.
+ The optional {default} argument is the number of the choice
+ that is made if the user hits <CR>. Use 1 to make the first
+ choice the default one. Use 0 to not set a default. If
+ {default} is omitted, 1 is used.
+ The optional {type} argument gives the type of dialog. This
+ is only used for the icon of the Win32 GUI. It can be one of
+ these values: "Error", "Question", "Info", "Warning" or
+ "Generic". Only the first character is relevant. When {type}
+ is omitted, "Generic" is used.
+ If the user aborts the dialog by pressing <Esc>, CTRL-C,
+ or another valid interrupt key, confirm() returns 0.
+
+ An example: >
+ :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
+ :if choice == 0
+ : echo "make up your mind!"
+ :elseif choice == 3
+ : echo "tasteful"
+ :else
+ : echo "I prefer bananas myself."
+ :endif
+< In a GUI dialog, buttons are used. The layout of the buttons
+ depends on the 'v' flag in 'guioptions'. If it is included,
+ the buttons are always put vertically. Otherwise, confirm()
+ tries to put the buttons in one horizontal line. If they
+ don't fit, a vertical layout is used anyway. For some systems
+ the horizontal layout is always used.
+
+ *cscope_connection()*
+cscope_connection([{num} , {dbpath} [, {prepend}]])
+ Checks for the existence of a |cscope| connection. If no
+ parameters are specified, then the function returns:
+ 0, if cscope was not available (not compiled in), or
+ if there are no cscope connections;
+ 1, if there is at least one cscope connection.
+
+ If parameters are specified, then the value of {num}
+ determines how existence of a cscope connection is checked:
+
+ {num} Description of existence check
+ ----- ------------------------------
+ 0 Same as no parameters (e.g., "cscope_connection()").
+ 1 Ignore {prepend}, and use partial string matches for
+ {dbpath}.
+ 2 Ignore {prepend}, and use exact string matches for
+ {dbpath}.
+ 3 Use {prepend}, use partial string matches for both
+ {dbpath} and {prepend}.
+ 4 Use {prepend}, use exact string matches for both
+ {dbpath} and {prepend}.
+
+ Note: All string comparisons are case sensitive!
+
+ Examples. Suppose we had the following (from ":cs show"): >
+
+ # pid database name prepend path
+ 0 27664 cscope.out /usr/local
+<
+ Invocation Return Val ~
+ ---------- ---------- >
+ cscope_connection() 1
+ cscope_connection(1, "out") 1
+ cscope_connection(2, "out") 0
+ cscope_connection(3, "out") 0
+ cscope_connection(3, "out", "local") 1
+ cscope_connection(4, "out") 0
+ cscope_connection(4, "out", "local") 0
+ cscope_connection(4, "cscope.out", "/usr/local") 1
+<
+cursor({lnum}, {col}) *cursor()*
+ Positions the cursor at the column {col} in the line {lnum}.
+ Does not change the jumplist.
+ If {lnum} is greater than the number of lines in the buffer,
+ the cursor will be positioned at the last line in the buffer.
+ If {lnum} is zero, the cursor will stay in the current line.
+ If {col} is greater than the number of characters in the line,
+ the cursor will be positioned at the last character in the
+ line.
+ If {col} is zero, the cursor will stay in the current column.
+
+ *delete()*
+delete({fname}) Deletes the file by the name {fname}. The result is a Number,
+ which is 0 if the file was deleted successfully, and non-zero
+ when the deletion failed.
+
+ *did_filetype()*
+did_filetype() Returns non-zero when autocommands are being executed and the
+ FileType event has been triggered at least once. Can be used
+ to avoid triggering the FileType event again in the scripts
+ that detect the file type. |FileType|
+ When editing another file, the counter is reset, thus this
+ really checks if the FileType event has been triggered for the
+ current buffer. This allows an autocommand that starts
+ editing another buffer to set 'filetype' and load a syntax
+ file.
+
+escape({string}, {chars}) *escape()*
+ Escape the characters in {chars} that occur in {string} with a
+ backslash. Example: >
+ :echo escape('c:\program files\vim', ' \')
+< results in: >
+ c:\\program\ files\\vim
+<
+eventhandler() *eventhandler()*
+ Returns 1 when inside an event handler. That is that Vim got
+ interrupted while waiting for the user to type a character,
+ e.g., when dropping a file on Vim. This means interactive
+ commands cannot be used. Otherwise zero is returned.
+
+executable({expr}) *executable()*
+ This function checks if an executable with the name {expr}
+ exists. {expr} must be the name of the program without any
+ arguments. executable() uses the normal $PATH.
+ The result is a Number:
+ 1 exists
+ 0 does not exist
+ -1 not implemented on this system
+
+ *exists()*
+exists({expr}) The result is a Number, which is non-zero if {expr} is
+ defined, zero otherwise. The {expr} argument is a string,
+ which contains one of these:
+ &option-name Vim option (only checks if it exists,
+ not if it really works)
+ +option-name Vim option that works.
+ $ENVNAME environment variable (could also be
+ done by comparing with an empty
+ string)
+ *funcname built-in function (see |functions|)
+ or user defined function (see
+ |user-functions|).
+ varname internal variable (see
+ |internal-variables|). Does not work
+ for |curly-braces-names|.
+ :cmdname Ex command: built-in command, user
+ command or command modifier |:command|.
+ Returns:
+ 1 for match with start of a command
+ 2 full match with a command
+ 3 matches several user commands
+ To check for a supported command
+ always check the return value to be 2.
+ #event autocommand defined for this event
+ #event#pattern autocommand defined for this event and
+ pattern (the pattern is taken
+ literally and compared to the
+ autocommand patterns character by
+ character)
+ For checking for a supported feature use |has()|.
+
+ Examples: >
+ exists("&shortname")
+ exists("$HOSTNAME")
+ exists("*strftime")
+ exists("*s:MyFunc")
+ exists("bufcount")
+ exists(":Make")
+ exists("#CursorHold");
+ exists("#BufReadPre#*.gz")
+< There must be no space between the symbol (&/$/*/#) and the
+ name.
+ Note that the argument must be a string, not the name of the
+ variable itself! For example: >
+ exists(bufcount)
+< This doesn't check for existence of the "bufcount" variable,
+ but gets the contents of "bufcount", and checks if that
+ exists.
+
+expand({expr} [, {flag}]) *expand()*
+ Expand wildcards and the following special keywords in {expr}.
+ The result is a String.
+
+ 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.
+
+ When {expr} starts with '%', '#' or '<', the expansion is done
+ like for the |cmdline-special| variables with their associated
+ modifiers. Here is a short overview:
+
+ % current file name
+ # alternate file name
+ #n alternate file name n
+ <cfile> file name under the cursor
+ <afile> autocmd file name
+ <abuf> autocmd buffer number (as a String!)
+ <amatch> autocmd matched name
+ <sfile> sourced script file name
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor
+ <client> the {clientid} of the last received
+ message |server2client()|
+ Modifiers:
+ :p expand to full path
+ :h head (last path component removed)
+ :t tail (last path component only)
+ :r root (one extension removed)
+ :e extension only
+
+ Example: >
+ :let &tags = expand("%:p:h") . "/tags"
+< Note that when expanding a string that starts with '%', '#' or
+ '<', any following text is ignored. This does NOT work: >
+ :let doesntwork = expand("%:h.bak")
+< Use this: >
+ :let doeswork = expand("%:h") . ".bak"
+< Also note that expanding "<cfile>" and others only returns the
+ referenced file name without further expansion. If "<cfile>"
+ is "~/.cshrc", you need to do another expand() to have the
+ "~/" expanded into the path of the home directory: >
+ :echo expand(expand("<cfile>"))
+<
+ There cannot be white space between the variables and the
+ following modifier. The |fnamemodify()| function can be used
+ to modify normal file names.
+
+ When using '%' or '#', and the current or alternate file name
+ is not defined, an empty string is used. Using "%:p" in a
+ buffer with no name, results in the current directory, with a
+ '/' added.
+
+ 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.
+
+ Expand() can also be used to expand variables and environment
+ variables that are only known in a shell. But this can be
+ slow, because a shell must be started. See |expr-env-expand|.
+ The expanded variable is still handled like a list of file
+ names. When an environment variable cannot be expanded, it is
+ left unchanged. Thus ":echo expand('$FOOBAR')" results in
+ "$FOOBAR".
+
+ See |glob()| for finding existing files. See |system()| for
+ getting the raw output of an external command.
+
+filereadable({file}) *filereadable()*
+ The result is a Number, which is TRUE when a file with the
+ name {file} exists, and can be read. If {file} doesn't exist,
+ or is a directory, the result is FALSE. {file} is any
+ expression, which is used as a String.
+ *file_readable()*
+ Obsolete name: file_readable().
+
+filewritable({file}) *filewritable()*
+ The result is a Number, which is 1 when a file with the
+ name {file} exists, and can be written. If {file} doesn't
+ exist, or is not writable, the result is 0. If (file) is a
+ directory, and we can write to it, the result is 2.
+
+fnamemodify({fname}, {mods}) *fnamemodify()*
+ Modify file name {fname} according to {mods}. {mods} is a
+ string of characters like it is used for file names on the
+ command line. See |filename-modifiers|.
+ Example: >
+ :echo fnamemodify("main.c", ":p:h")
+< results in: >
+ /home/mool/vim/vim/src
+< Note: Environment variables and "~" don't work in {fname}, use
+ |expand()| first then.
+
+foldclosed({lnum}) *foldclosed()*
+ The result is a Number. If the line {lnum} is in a closed
+ fold, the result is the number of the first line in that fold.
+ If the line {lnum} is not in a closed fold, -1 is returned.
+
+foldclosedend({lnum}) *foldclosedend()*
+ The result is a Number. If the line {lnum} is in a closed
+ fold, the result is the number of the last line in that fold.
+ If the line {lnum} is not in a closed fold, -1 is returned.
+
+foldlevel({lnum}) *foldlevel()*
+ The result is a Number, which is the foldlevel of line {lnum}
+ in the current buffer. For nested folds the deepest level is
+ returned. If there is no fold at line {lnum}, zero is
+ returned. It doesn't matter if the folds are open or closed.
+ When used while updating folds (from 'foldexpr') -1 is
+ returned for lines where folds are still to be updated and the
+ foldlevel is unknown. As a special case the level of the
+ previous line is usually available.
+
+ *foldtext()*
+foldtext() Returns a String, to be displayed for a closed fold. This is
+ the default function used for the 'foldtext' option and should
+ only be called from evaluating 'foldtext'. It uses the
+ |v:foldstart|, |v:foldend| and |v:folddashes| variables.
+ The returned string looks like this: >
+ +-- 45 lines: abcdef
+< The number of dashes depends on the foldlevel. The "45" is
+ the number of lines in the fold. "abcdef" is the text in the
+ first non-blank line of the fold. Leading white space, "//"
+ or "/*" and the text from the 'foldmarker' and 'commentstring'
+ options is removed.
+ {not available when compiled without the |+folding| feature}
+
+ *foreground()*
+foreground() Move the Vim window to the foreground. Useful when sent from
+ a client to a Vim server. |remote_send()|
+ On Win32 systems this might not work, the OS does not always
+ allow a window to bring itself to the foreground. Use
+ |remote_foreground()| instead.
+ {only in the Win32, Athena, Motif and GTK GUI versions and the
+ Win32 console version}
+
+getchar([expr]) *getchar()*
+ Get a single character from the user. If it is an 8-bit
+ character, the result is a number. Otherwise a String is
+ returned with the encoded character. For a special key it's a
+ sequence of bytes starting with 0x80 (decimal: 128).
+ If [expr] is omitted, wait until a character is available.
+ If [expr] is 0, only get a character when one is available.
+ If [expr] is 1, only check if a character is available, it is
+ not consumed. If a normal character is
+ available, it is returned, otherwise a
+ non-zero value is returned.
+ If a normal character available, it is returned as a Number.
+ Use nr2char() to convert it to a String.
+ The returned value is zero if no character is available.
+ The returned value is a string of characters for special keys
+ and when a modifier (shift, control, alt) was used.
+ There is no prompt, you will somehow have to make clear to the
+ user that a character has to be typed.
+ There is no mapping for the character.
+ Key codes are replaced, thus when the user presses the <Del>
+ key you get the code for the <Del> key, not the raw character
+ sequence. Examples: >
+ getchar() == "\<Del>"
+ getchar() == "\<S-Left>"
+< This example redefines "f" to ignore case: >
+ :nmap f :call FindChar()<CR>
+ :function FindChar()
+ : let c = nr2char(getchar())
+ : while col('.') < col('$') - 1
+ : normal l
+ : if getline('.')[col('.') - 1] ==? c
+ : break
+ : endif
+ : endwhile
+ :endfunction
+
+getcharmod() *getcharmod()*
+ The result is a Number which is the state of the modifiers for
+ the last obtained character with getchar() or in another way.
+ These values are added together:
+ 2 shift
+ 4 control
+ 8 alt (meta)
+ 16 mouse double click
+ 32 mouse triple click
+ 64 mouse quadruple click
+ 128 Macintosh only: command
+ Only the modifiers that have not been included in the
+ character itself are obtained. Thus Shift-a results in "A"
+ with no modifier.
+
+getbufvar({expr}, {varname}) *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.
+ This also works for a global or local window option, but it
+ doesn't work for a global or local window variable.
+ 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.
+ Examples: >
+ :let bufmodified = getbufvar(1, "&mod")
+ :echo "todo myvar = " . getbufvar("todo", "myvar")
+<
+getcmdline() *getcmdline()*
+ Return the current command-line. Only works when the command
+ line is being edited, thus requires use of |c_CTRL-\_e| or
+ |c_CTRL-R_=|.
+ Example: >
+ :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
+< Also see |getcmdpos()| and |setcmdpos()|.
+
+getcmdpos({pos}) *getcmdpos()*
+ 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.
+ Also see |setcmdpos()| and |getcmdline()|.
+
+ *getcwd()*
+getcwd() The result is a String, which is the name of the current
+ working directory.
+
+getfsize({fname}) *getfsize()*
+ The result is a Number, which is the size in bytes of the
+ given file {fname}.
+ If {fname} is a directory, 0 is returned.
+ If the file {fname} can't be found, -1 is returned.
+
+getftime({fname}) *getftime()*
+ The result is a Number, which is the last modification time of
+ the given file {fname}. The value is measured as seconds
+ since 1st Jan 1970, and may be passed to strftime(). See also
+ |localtime()| and |strftime()|.
+ If the file {fname} can't be found -1 is returned.
+
+ *getline()*
+getline({lnum}) The result is a String, which is line {lnum} from the current
+ buffer. Example: >
+ getline(1)
+< When {lnum} is a String that doesn't start with a
+ digit, line() is called to translate the String into a Number.
+ To get the line under the cursor: >
+ getline(".")
+< When {lnum} is smaller than 1 or bigger than the number of
+ lines in the buffer, an empty string is returned.
+
+getreg([{regname}]) *getreg()*
+ The result is a String, which is the contents of register
+ {regname}. Example: >
+ :let cliptext = getreg('*')
+< getreg('=') returns the last evaluated value of the expression
+ register. (For use in maps).
+ If {regname} is not specified, |v:register| is used.
+
+getregtype([{regname}]) *getregtype()*
+ The result is a String, which is type of register {regname}.
+ The value will be one of:
+ "v" for |characterwise| text
+ "V" for |linewise| text
+ "<CTRL-V>{width}" for |blockwise-visual| text
+ 0 for an empty or unknown register
+ <CTRL-V> is one character with value 0x16.
+ If {regname} is not specified, |v:register| is used.
+
+ *getwinposx()*
+getwinposx() The result is a Number, which is the X coordinate in pixels of
+ the left hand side of the GUI Vim window. The result will be
+ -1 if the information is not available.
+
+ *getwinposy()*
+getwinposy() The result is a Number, which is the Y coordinate in pixels of
+ the top of the GUI Vim window. The result will be -1 if the
+ information is not available.
+
+getwinvar({nr}, {varname}) *getwinvar()*
+ The result is the value of option or local window variable
+ {varname} in window {nr}.
+ This also works for a global or local buffer option, but it
+ doesn't work for a global or local buffer variable.
+ Note that the name without "w:" must be used.
+ Examples: >
+ :let list_is_on = getwinvar(2, '&list')
+ :echo "myvar = " . getwinvar(1, 'myvar')
+<
+ *glob()*
+glob({expr}) Expand the file wildcards in {expr}. The result is a String.
+ When there are several matches, they are separated by <NL>
+ characters.
+ If the expansion fails, the result is an empty string.
+ A name for a non-existing file is not included.
+
+ For most systems backticks can be used to get files names from
+ any external command. Example: >
+ :let tagfiles = glob("`find . -name tags -print`")
+ :let &tags = substitute(tagfiles, "\n", ",", "g")
+< The result of the program inside the backticks should be one
+ item per line. Spaces inside an item are allowed.
+
+ See |expand()| for expanding special Vim variables. See
+ |system()| for getting the raw output of an external command.
+
+globpath({path}, {expr}) *globpath()*
+ Perform glob() on all directories in {path} and concatenate
+ the results. Example: >
+ :echo globpath(&rtp, "syntax/c.vim")
+< {path} is a comma-separated list of directory names. Each
+ directory name is prepended to {expr} and expanded like with
+ glob(). A path separator is inserted when needed.
+ To add a comma inside a directory name escape it with a
+ backslash. Note that on MS-Windows a directory may have a
+ trailing backslash, remove it if you put a comma after it.
+ If the expansion fails for one of the directories, there is no
+ error message.
+ The 'wildignore' option applies: Names matching one of the
+ patterns in 'wildignore' will be skipped.
+
+ *has()*
+has({feature}) The result is a Number, which is 1 if the feature {feature} is
+ supported, zero otherwise. The {feature} argument is a
+ string. See |feature-list| below.
+ Also see |exists()|.
+
+hasmapto({what} [, {mode}]) *hasmapto()*
+ The result is a Number, which is 1 if there is a mapping that
+ contains {what} in somewhere in the rhs (what it is mapped to)
+ and this mapping exists in one of the modes indicated by
+ {mode}.
+ Both the global mappings and the mappings local to the current
+ buffer are checked for a match.
+ If no matching mapping is found 0 is returned.
+ The following characters are recognized in {mode}:
+ n Normal mode
+ v Visual mode
+ o Operator-pending mode
+ i Insert mode
+ l Language-Argument ("r", "f", "t", etc.)
+ c Command-line mode
+ When {mode} is omitted, "nvo" is used.
+
+ This function is useful to check if a mapping already exists
+ to a function in a Vim script. Example: >
+ :if !hasmapto('\ABCdoit')
+ : map <Leader>d \ABCdoit
+ :endif
+< This installs the mapping to "\ABCdoit" only if there isn't
+ already a mapping to "\ABCdoit".
+
+histadd({history}, {item}) *histadd()*
+ Add the String {item} to the history {history} which can be
+ one of: *hist-names*
+ "cmd" or ":" command line history
+ "search" or "/" search pattern history
+ "expr" or "=" typed expression history
+ "input" or "@" input line history
+ 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,
+ otherwise 0 is returned.
+
+ Example: >
+ :call histadd("input", strftime("%Y %b %d"))
+ :let date=input("Enter date: ")
+< This function is not available in the |sandbox|.
+
+histdel({history} [, {item}]) *histdel()*
+ Clear {history}, ie. delete all its entries. See |hist-names|
+ for the possible values of {history}.
+
+ If the parameter {item} is given as String, this is seen
+ as regular expression. All entries matching that expression
+ will be removed from the history (if there are any).
+ Upper/lowercase must match, unless "\c" is used |/\c|.
+ If {item} is a Number, it will be interpreted as index, see
+ |:history-indexing|. The respective entry will be removed
+ if it exists.
+
+ The result is a Number: 1 for a successful operation,
+ otherwise 0 is returned.
+
+ Examples:
+ Clear expression register history: >
+ :call histdel("expr")
+<
+ Remove all entries starting with "*" from the search history: >
+ :call histdel("/", '^\*')
+<
+ The following three are equivalent: >
+ :call histdel("search", histnr("search"))
+ :call histdel("search", -1)
+ :call histdel("search", '^'.histget("search", -1).'$')
+<
+ To delete the last search pattern and use the last-but-one for
+ the "n" command and 'hlsearch': >
+ :call histdel("search", -1)
+ :let @/ = histget("search", -1)
+
+histget({history} [, {index}]) *histget()*
+ The result is a String, the entry with Number {index} from
+ {history}. See |hist-names| for the possible values of
+ {history}, and |:history-indexing| for {index}. If there is
+ no such entry, an empty String is returned. When {index} is
+ omitted, the most recent item from the history is used.
+
+ Examples:
+ Redo the second last search from history. >
+ :execute '/' . histget("search", -2)
+
+< Define an Ex command ":H {num}" that supports re-execution of
+ the {num}th entry from the output of |:history|. >
+ :command -nargs=1 H execute histget("cmd", 0+<args>)
+<
+histnr({history}) *histnr()*
+ The result is the Number of the current entry in {history}.
+ See |hist-names| for the possible values of {history}.
+ If an error occurred, -1 is returned.
+
+ Example: >
+ :let inp_index = histnr("expr")
+<
+hlexists({name}) *hlexists()*
+ The result is a Number, which is non-zero if a highlight group
+ called {name} exists. This is when the group has been
+ defined in some way. Not necessarily when highlighting has
+ been defined for it, it may also have been used for a syntax
+ item.
+ *highlight_exists()*
+ Obsolete name: highlight_exists().
+
+ *hlID()*
+hlID({name}) The result is a Number, which is the ID of the highlight group
+ with name {name}. When the highlight group doesn't exist,
+ zero is returned.
+ This can be used to retrieve information about the highlight
+ group. For example, to get the background color of the
+ "Comment" group: >
+ :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
+< *highlightID()*
+ Obsolete name: highlightID().
+
+hostname() *hostname()*
+ The result is a String, which is the name of the machine on
+ which Vim is currently running. Machine names greater than
+ 256 characters long are truncated.
+
+iconv({expr}, {from}, {to}) *iconv()*
+ The result is a String, which is the text {expr} converted
+ from encoding {from} to encoding {to}.
+ When the conversion fails an empty string is returned.
+ The encoding names are whatever the iconv() library function
+ can accept, see ":!man 3 iconv".
+ Most conversions require Vim to be compiled with the |+iconv|
+ feature. Otherwise only UTF-8 to latin1 conversion and back
+ can be done.
+ This can be used to display messages with special characters,
+ no matter what 'encoding' is set to. Write the message in
+ UTF-8 and use: >
+ echo iconv(utf8_str, "utf-8", &enc)
+< Note that Vim uses UTF-8 for all Unicode encodings, conversion
+ from/to UCS-2 is automatically changed to use UTF-8. You
+ cannot use UCS-2 in a string anyway, because of the NUL bytes.
+ {only available when compiled with the +multi_byte feature}
+
+ *indent()*
+indent({lnum}) The result is a Number, which is indent of line {lnum} in the
+ current buffer. The indent is counted in spaces, the value
+ of 'tabstop' is relevant. {lnum} is used just like in
+ |getline()|.
+ When {lnum} is invalid -1 is returned.
+
+input({prompt} [, {text}]) *input()*
+ The result is a String, which is whatever the user typed on
+ the command-line. The parameter is either a prompt string, or
+ a blank string (for no prompt). A '\n' can be used in the
+ prompt to start a new line. The highlighting set with
+ |:echohl| is used for the prompt. The input is entered just
+ like a command-line, with the same editing commands and
+ mappings. There is a separate history for lines typed for
+ input().
+ If the optional {text} is present, this is used for the
+ default reply, as if the user typed this.
+ NOTE: This must not be used in a startup file, for the
+ versions that only run in GUI mode (e.g., the Win32 GUI).
+ Note: When input() is called from within a mapping it will
+ consume remaining characters from that mapping, because a
+ mapping is handled like the characters were typed.
+ Use |inputsave()| before input() and |inputrestore()|
+ after input() to avoid that. Another solution is to avoid
+ that further characters follow in the mapping, e.g., by using
+ |:execute| or |:normal|.
+
+ Example: >
+ :if input("Coffee or beer? ") == "beer"
+ : echo "Cheers!"
+ :endif
+< Example with default text: >
+ :let color = input("Color? ", "white")
+< Example with a mapping: >
+ :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
+ :function GetFoo()
+ : call inputsave()
+ : let g:Foo = input("enter search pattern: ")
+ : call inputrestore()
+ :endfunction
+
+inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
+ 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
+< When the dialog is cancelled {cancelreturn} is returned. When
+ omitted an empty string is returned.
+ Hitting <Enter> works like pressing the OK button. Hitting
+ <Esc> works like pressing the Cancel button.
+
+inputrestore() *inputrestore()*
+ Restore typeahead that was saved with a previous inputsave().
+ Should be called the same number of times inputsave() is
+ called. Calling it more often is harmless though.
+ Returns 1 when there is nothing to restore, 0 otherwise.
+
+inputsave() *inputsave()*
+ Preserve typeahead (also from mappings) and clear it, so that
+ a following prompt gets input from the user. Should be
+ followed by a matching inputrestore() after the prompt. Can
+ be used several times, in which case there must be just as
+ many inputrestore() calls.
+ Returns 1 when out of memory, 0 otherwise.
+
+inputsecret({prompt} [, {text}]) *inputsecret()*
+ This function acts much like the |input()| function with but
+ two exceptions:
+ a) the user's response will be displayed as a sequence of
+ asterisks ("*") thereby keeping the entry secret, and
+ b) the user's response will not be recorded on the input
+ |history| stack.
+ The result is a String, which is whatever the user actually
+ typed on the command-line in response to the issued prompt.
+
+isdirectory({directory}) *isdirectory()*
+ The result is a Number, which is non-zero when a directory
+ with the name {directory} exists. If {directory} doesn't
+ exist, or isn't a directory, the result is FALSE. {directory}
+ is any expression, which is used as a String.
+
+ *libcall()* *E364* *E368*
+libcall({libname}, {funcname}, {argument})
+ Call function {funcname} in the run-time library {libname}
+ with single argument {argument}.
+ This is useful to call functions in a library that you
+ especially made to be used with Vim. Since only one argument
+ is possible, calling standard library functions is rather
+ limited.
+ The result is the String returned by the function. If the
+ function returns NULL, this will appear as an empty string ""
+ to Vim.
+ If the function returns a number, use libcallnr()!
+ If {argument} is a number, it is passed to the function as an
+ int; if {argument} is a string, it is passed as a
+ null-terminated string.
+ This function will fail in |restricted-mode|.
+
+ libcall() allows you to write your own 'plug-in' extensions to
+ Vim without having to recompile the program. It is NOT a
+ means to call system functions! If you try to do so Vim will
+ very probably crash.
+
+ For Win32, the functions you write must be placed in a DLL
+ and use the normal C calling convention (NOT Pascal which is
+ used in Windows System DLLs). The function must take exactly
+ one parameter, either a character pointer or a long integer,
+ and must return a character pointer or NULL. The character
+ pointer returned must point to memory that will remain valid
+ after the function has returned (e.g. in static data in the
+ DLL). If it points to allocated memory, that memory will
+ leak away. Using a static buffer in the function should work,
+ it's then freed when the DLL is unloaded.
+
+ WARNING: If the function returns a non-valid pointer, Vim may
+ crash! This also happens if the function returns a number,
+ because Vim thinks it's a pointer.
+ For Win32 systems, {libname} should be the filename of the DLL
+ without the ".DLL" suffix. A full path is only required if
+ the DLL is not in the usual places.
+ For Unix: When compiling your own plugins, remember that the
+ object code must be compiled as position-independent ('PIC').
+ {only in Win32 on some Unix versions, when the |+libcall|
+ feature is present}
+ Examples: >
+ :echo libcall("libc.so", "getenv", "HOME")
+ :echo libcallnr("/usr/lib/libc.so", "getpid", "")
+<
+ *libcallnr()*
+libcallnr({libname}, {funcname}, {argument})
+ Just like libcall(), but used for a function that returns an
+ int instead of a string.
+ {only in Win32 on some Unix versions, when the |+libcall|
+ feature is present}
+ Example (not very useful...): >
+ :call libcallnr("libc.so", "printf", "Hello World!\n")
+ :call libcallnr("libc.so", "sleep", 10)
+<
+ *line()*
+line({expr}) The result is a Number, which is the line number of the file
+ position given with {expr}. The accepted positions are:
+ . the cursor position
+ $ the last line in the current buffer
+ 'x position of mark x (if the mark is not set, 0 is
+ returned)
+ Note that only marks in the current file can be used.
+ Examples: >
+ line(".") line number of the cursor
+ line("'t") line number of mark t
+ line("'" . marker) line number of mark marker
+< *last-position-jump*
+ This autocommand jumps to the last known position in a file
+ just after opening it, if the '" mark is set: >
+ :au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g'\"" | endif
+<
+line2byte({lnum}) *line2byte()*
+ 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.
+ 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.
+ When {lnum} is invalid, or the |+byte_offset| feature has been
+ disabled at compile time, -1 is returned.
+ Also see |byte2line()|, |go| and |:goto|.
+
+lispindent({lnum}) *lispindent()*
+ Get the amount of indent for line {lnum} according the lisp
+ indenting rules, as with 'lisp'.
+ The indent is counted in spaces, the value of 'tabstop' is
+ relevant. {lnum} is used just like in |getline()|.
+ When {lnum} is invalid or Vim was not compiled the
+ |+lispindent| feature, -1 is returned.
+
+localtime() *localtime()*
+ Return the current time, measured as seconds since 1st Jan
+ 1970. See also |strftime()| and |getftime()|.
+
+maparg({name}[, {mode}]) *maparg()*
+ Return the rhs of mapping {name} in mode {mode}. When there
+ is no mapping for {name}, an empty String is returned.
+ These characters can be used for {mode}:
+ "n" Normal
+ "v" Visual
+ "o" Operator-pending
+ "i" Insert
+ "c" Cmd-line
+ "l" langmap |language-mapping|
+ "" Normal, Visual and Operator-pending
+ When {mode} is omitted, the modes from "" are used.
+ 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.
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+
+mapcheck({name}[, {mode}]) *mapcheck()*
+ Check if there is a mapping that matches with {name} in mode
+ {mode}. See |maparg()| for {mode} and special names in
+ {name}.
+ A match happens with a mapping that starts with {name} and
+ with a mapping which is equal to the start of {name}.
+
+ matches mapping "a" "ab" "abc" ~
+ mapcheck("a") yes yes yes
+ mapcheck("abc") yes yes yes
+ mapcheck("ax") yes no no
+ mapcheck("b") no no no
+
+ The difference with maparg() is that mapcheck() finds a
+ mapping that matches with {name}, while maparg() only finds a
+ mapping for {name} exactly.
+ When there is no mapping that starts with {name}, an empty
+ String is returned. If there is one, the rhs of that mapping
+ is returned. If there are several mappings that start with
+ {name}, the rhs of one of them is returned.
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+ This function can be used to check if a mapping can be added
+ without being ambiguous. Example: >
+ :if mapcheck("_vv") == ""
+ : map _vv :set guifont=7x13<CR>
+ :endif
+< This avoids adding the "_vv" mapping when there already is a
+ mapping for "_v" or for "_vvv".
+
+match({expr}, {pat}[, {start}]) *match()*
+ The result is a Number, which gives the index (byte offset) in
+ {expr} where {pat} matches. A match at the first character
+ returns zero. If there is no match -1 is returned. Example: >
+ :echo match("testing", "ing")
+< results in "4".
+ See |string-match| for how {pat} is used.
+ If {start} is given, the search starts from index {start}.
+ The result, however, is still the index counted from the
+ first character. Example: >
+ :echo match("testing", "ing", 2)
+< result is again "4". >
+ :echo match("testing", "ing", 4)
+< result is again "4". >
+ :echo match("testing", "t", 2)
+< result is "3".
+ If {start} < 0, it will be set to 0.
+ If {start} > strlen({expr}) -1 is returned.
+ See |pattern| for the patterns that are accepted.
+ The 'ignorecase' option is used to set the ignore-caseness of
+ the pattern. 'smartcase' is NOT used. The matching is always
+ done like 'magic' is set and 'cpoptions' is empty.
+
+matchend({expr}, {pat}[, {start}]) *matchend()*
+ Same as match(), but return the index of first character after
+ the match. Example: >
+ :echo matchend("testing", "ing")
+< results in "7".
+ The {start}, if given, has the same meaning as for match(). >
+ :echo matchend("testing", "ing", 2)
+< results in "7". >
+ :echo matchend("testing", "ing", 5)
+< result is "-1".
+
+matchstr({expr}, {pat}[, {start}]) *matchstr()*
+ Same as match(), but return the matched string. Example: >
+ :echo matchstr("testing", "ing")
+< results in "ing".
+ When there is no match "" is returned.
+ The {start}, if given, has the same meaning as for match(). >
+ :echo matchstr("testing", "ing", 2)
+< results in "ing". >
+ :echo matchstr("testing", "ing", 5)
+< result is "".
+
+ *mode()*
+mode() Return a string that indicates the current mode:
+ n Normal
+ v Visual by character
+ V Visual by line
+ CTRL-V Visual blockwise
+ s Select by character
+ S Select by line
+ CTRL-S Select blockwise
+ i Insert
+ R Replace
+ c Command-line
+ r Hit-enter prompt
+ This is useful in the 'statusline' option. In most other
+ places it always returns "c" or "n".
+
+nextnonblank({lnum}) *nextnonblank()*
+ Return the line number of the first line at or below {lnum}
+ that is not blank. Example: >
+ if getline(nextnonblank(1)) =~ "Java"
+< When {lnum} is invalid or there is no non-blank line at or
+ below it, zero is returned.
+ See also |prevnonblank()|.
+
+nr2char({expr}) *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": >
+ nr2char(300) returns I with bow character
+< 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 isn't very useful.
+
+prevnonblank({lnum}) *prevnonblank()*
+ Return the line number of the first line at or above {lnum}
+ that is not blank. Example: >
+ let ind = indent(prevnonblank(v:lnum - 1))
+< When {lnum} is invalid or there is no non-blank line at or
+ above it, zero is returned.
+ Also see |nextnonblank()|.
+
+ *remote_expr()* *E449*
+remote_expr({server}, {string} [, {idvar}])
+ Send the {string} to {server}. The string is sent as an
+ expression and the result is returned after evaluation.
+ If {idvar} is present, it is taken as the name of a
+ variable and a {serverid} for later use with
+ remote_read() is stored there.
+ See also |clientserver| |RemoteReply|.
+ This function is not available in the |sandbox|.
+ {only available when compiled with the |+clientserver| feature}
+ Note: Any errors will cause a local error message to be issued
+ and the result will be the empty string.
+ Examples: >
+ :echo remote_expr("gvim", "2+2")
+ :echo remote_expr("gvim1", "b:current_syntax")
+<
+
+remote_foreground({server}) *remote_foreground()*
+ Move the Vim server with the name {server} to the foreground.
+ This works like: >
+ remote_expr({server}, "foreground()")
+< Except that on Win32 systems the client does the work, to work
+ around the problem that the OS doesn't always allow the server
+ to bring itself to the foreground.
+ This function is not available in the |sandbox|.
+ {only in the Win32, Athena, Motif and GTK GUI versions and the
+ Win32 console version}
+
+
+remote_peek({serverid} [, {retvar}]) *remote_peek()*
+ Returns a positive number if there are available strings
+ from {serverid}. Copies any reply string into the variable
+ {retvar} if specified. {retvar} must be a string with the
+ name of a variable.
+ Returns zero if none are available.
+ Returns -1 if something is wrong.
+ See also |clientserver|.
+ This function is not available in the |sandbox|.
+ {only available when compiled with the |+clientserver| feature}
+ Examples: >
+ :let repl = ""
+ :echo "PEEK: ".remote_peek(id, "repl").": ".repl
+
+remote_read({serverid}) *remote_read()*
+ Return the oldest available reply from {serverid} and consume
+ it. It blocks until a reply is available.
+ See also |clientserver|.
+ This function is not available in the |sandbox|.
+ {only available when compiled with the |+clientserver| feature}
+ Example: >
+ :echo remote_read(id)
+<
+ *remote_send()* *E241*
+remote_send({server}, {string} [, {idvar}])
+ Send the {string} to {server}. The string is sent as
+ input keys and the function returns immediately.
+ If {idvar} is present, it is taken as the name of a
+ variable and a {serverid} for later use with
+ remote_read() is stored there.
+ See also |clientserver| |RemoteReply|.
+ This function is not available in the |sandbox|.
+ {only available when compiled with the |+clientserver| feature}
+ Note: Any errors will be reported in the server and may mess
+ up the display.
+ Examples: >
+ :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
+ \ remote_read(serverid)
+
+ :autocmd NONE RemoteReply *
+ \ echo remote_read(expand("<amatch>"))
+ :echo remote_send("gvim", ":sleep 10 | echo ".
+ \ 'server2client(expand("<client>"), "HELLO")<CR>')
+
+
+rename({from}, {to}) *rename()*
+ Rename the file by the name {from} to the name {to}. This
+ should also work to move files across file systems. The
+ result is a Number, which is 0 if the file was renamed
+ successfully, and non-zero when the renaming failed.
+ This function is not available in the |sandbox|.
+
+resolve({filename}) *resolve()* *E655*
+ On MS-Windows, when {filename} is a shortcut (a .lnk file),
+ returns the path the shortcut points to in a simplified form.
+ On Unix, repeat resolving symbolic links in all path
+ components of {filename} and return the simplified result.
+ To cope with link cycles, resolving of symbolic links is
+ stopped after 100 iterations.
+ On other systems, return the simplified {filename}.
+ The simplification step is done as by |simplify()|.
+ resolve() keeps a leading path component specifying the
+ current directory (provided the result is still a relative
+ path name) and also keeps a trailing path separator.
+
+search({pattern} [, {flags}]) *search()*
+ Search for regexp pattern {pattern}. The search starts at the
+ cursor position.
+ {flags} is a String, which can contain these character flags:
+ 'b' search backward instead of forward
+ 'w' wrap around the end of the file
+ 'W' don't wrap around the end of the file
+ If neither 'w' or 'W' is given, the 'wrapscan' option applies.
+
+ When a match has been found its line number is returned, and
+ the cursor will be positioned at the match. If there is no
+ match a 0 is returned and the cursor doesn't move. No error
+ message is given.
+
+ Example (goes over all files in the argument list): >
+ :let n = 1
+ :while n <= argc() " loop over all files in arglist
+ : exe "argument " . n
+ : " start at the last char in the file and wrap for the
+ : " first search to find match at start of file
+ : normal G$
+ : let flags = "w"
+ : while search("foo", flags) > 0
+ : s/foo/bar/g
+ : let flags = "W"
+ : endwhile
+ : update " write the file if modified
+ : let n = n + 1
+ :endwhile
+<
+ *searchpair()*
+searchpair({start}, {middle}, {end} [, {flags} [, {skip}]])
+ Search for the match of a nested start-end pair. This can be
+ used to find the "endif" that matches an "if", while other
+ if/endif pairs in between are ignored.
+ The search starts at the cursor. If a match is found, the
+ cursor is positioned at it and the line number is returned.
+ If no match is found 0 or -1 is returned and the cursor
+ doesn't move. No error message is given.
+
+ {start}, {middle} and {end} are patterns, see |pattern|. They
+ must not contain \( \) pairs. Use of \%( \) is allowed. When
+ {middle} is not empty, it is found when searching from either
+ direction, but only when not in a nested start-end pair. A
+ typical use is: >
+ searchpair('\<if\>', '\<else\>', '\<endif\>')
+< By leaving {middle} empty the "else" is skipped.
+
+ {flags} are used like with |search()|. Additionally:
+ 'n' do Not move the cursor
+ 'r' Repeat until no more matches found; will find the
+ outer pair
+ 'm' return number of Matches instead of line number with
+ the match; will only be > 1 when 'r' is used.
+
+ When a match for {start}, {middle} or {end} is found, the
+ {skip} expression is evaluated with the cursor positioned on
+ the start of the match. It should return non-zero if this
+ match is to be skipped. E.g., because it is inside a comment
+ or a string.
+ When {skip} is omitted or empty, every match is accepted.
+ When evaluating {skip} causes an error the search is aborted
+ and -1 returned.
+
+ The value of 'ignorecase' is used. 'magic' is ignored, the
+ patterns are used like it's on.
+
+ The search starts exactly at the cursor. A match with
+ {start}, {middle} or {end} at the next character, in the
+ direction of searching, is the first one found. Example: >
+ if 1
+ if 2
+ endif 2
+ endif 1
+< When starting at the "if 2", with the cursor on the "i", and
+ searching forwards, the "endif 2" is found. When starting on
+ the character just before the "if 2", the "endif 1" will be
+ found. That's because the "if 2" will be found first, and
+ then this is considered to be a nested if/endif from "if 2" to
+ "endif 2".
+ When searching backwards and {end} is more than one character,
+ it may be useful to put "\zs" at the end of the pattern, so
+ that when the cursor is inside a match with the end it finds
+ the matching start.
+
+ Example, to find the "endif" command in a Vim script: >
+
+ :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
+ \ 'getline(".") =~ "^\\s*\""')
+
+< The cursor must be at or after the "if" for which a match is
+ to be found. Note that single-quote strings are used to avoid
+ having to double the backslashes. The skip expression only
+ catches comments at the start of a line, not after a command.
+ Also, a word "en" or "if" halfway a line is considered a
+ match.
+ Another example, to search for the matching "{" of a "}": >
+
+ :echo searchpair('{', '', '}', 'bW')
+
+< This works when the cursor is at or before the "}" for which a
+ match is to be found. To reject matches that syntax
+ highlighting recognized as strings: >
+
+ :echo searchpair('{', '', '}', 'bW',
+ \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+<
+server2client( {clientid}, {string}) *server2client()*
+ Send a reply string to {clientid}. The most recent {clientid}
+ that sent a string can be retrieved with expand("<client>").
+ {only available when compiled with the |+clientserver| feature}
+ Note:
+ This id has to be stored before the next command can be
+ received. Ie. before returning from the received command and
+ before calling any commands that waits for input.
+ See also |clientserver|.
+ Example: >
+ :echo server2client(expand("<client>"), "HELLO")
+<
+serverlist() *serverlist()*
+ Return a list of available server names, one per line.
+ When there are no servers or the information is not available
+ an empty string is returned. See also |clientserver|.
+ {only available when compiled with the |+clientserver| feature}
+ Example: >
+ :echo serverlist()
+<
+setbufvar({expr}, {varname}, {val}) *setbufvar()*
+ Set option or local variable {varname} in buffer {expr} to
+ {val}.
+ This also works for a global or local window option, but it
+ doesn't work for a global or local window variable.
+ For a local window option the global value is unchanged.
+ For the use of {expr}, see |bufname()| above.
+ Note that the variable name without "b:" must be used.
+ Examples: >
+ :call setbufvar(1, "&mod", 1)
+ :call setbufvar("todo", "myvar", "foobar")
+< This function is not available in the |sandbox|.
+
+setcmdpos({pos}) *setcmdpos()*
+ Set the cursor position in the command line to byte position
+ {pos}. The first position is 1.
+ Use |getcmdpos()| to obtain the current position.
+ Only works while editing the command line, thus you must use
+ |c_CTRL-\_e| or |c_CTRL-R_=|. The position is set after the
+ command line is set to the expression.
+ When the number is too big the cursor is put at the end of the
+ line. A number smaller than one has undefined results.
+ Returns 0 when successful, 1 when not editing the command
+ line.
+
+setline({lnum}, {line}) *setline()*
+ Set line {lnum} of the current buffer to {line}. If this
+ succeeds, 0 is returned. If this fails (most likely because
+ {lnum} is invalid) 1 is returned. Example: >
+ :call setline(5, strftime("%c"))
+< Note: The '[ and '] marks are not set.
+
+ *setreg()*
+setreg({regname}, {value} [,{options}])
+ Set the register {regname} to {value}.
+ If {options} contains "a" or {regname} is upper case,
+ then the value is appended.
+ {options} can also contains a register type specification:
+ "c" or "v" |characterwise| mode
+ "l" or "V" |linewise| mode
+ "b" or "<CTRL-V>" |blockwise-visual| mode
+ If a number immediately follows "b" or "<CTRL-V>" then this is
+ used as the width of the selection - if it is not specified
+ then the width of the block is set to the number of characters
+ in the longest line (counting a <TAB> as 1 character).
+
+ 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.
+
+ Examples: >
+ :call setreg(v:register, @*)
+ :call setreg('*', @%, 'ac')
+ :call setreg('a', "1\n2\n3", 'b5')
+
+< This example shows using the functions to save and restore a
+ register. >
+ :let var_a = getreg('a')
+ :let var_amode = getregtype('a')
+ ....
+ :call setreg('a', var_a, var_amode)
+
+< You can also change the type of a register by appending
+ nothing: >
+ :call setreg('a', '', 'al')
+
+setwinvar({nr}, {varname}, {val}) *setwinvar()*
+ Set option or local variable {varname} in window {nr} to
+ {val}.
+ This also works for a global or local buffer option, but it
+ 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.
+ Examples: >
+ :call setwinvar(1, "&list", 0)
+ :call setwinvar(2, "myvar", "foobar")
+< This function is not available in the |sandbox|.
+
+simplify({filename}) *simplify()*
+ Simplify the file name as much as possible without changing
+ the meaning. Shortcuts (on MS-Windows) or symbolic links (on
+ Unix) are not resolved. If the first path component in
+ {filename} designates the current directory, this will be
+ valid for the result as well. A trailing path separator is
+ not removed either.
+ Example: >
+ simplify("./dir/.././/file/") == "./file/"
+< Note: The combination "dir/.." is only removed if "dir" is
+ a searchable directory or does not exist. On Unix, it is also
+ removed when "dir" is a symbolic link within the same
+ directory. In order to resolve all the involved symbolic
+ links before simplifying the path name, use |resolve()|.
+
+strftime({format} [, {time}]) *strftime()*
+ The result is a String, which is a formatted date and time, as
+ specified by the {format} string. The given {time} is used,
+ or the current time if no time is given. The accepted
+ {format} depends on your system, thus this is not portable!
+ See the manual page of the C function strftime() for the
+ format. The maximum length of the result is 80 characters.
+ See also |localtime()| and |getftime()|.
+ The language can be changed with the |:language| command.
+ Examples: >
+ :echo strftime("%c") Sun Apr 27 11:49:23 1997
+ :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25
+ :echo strftime("%y%m%d %T") 970427 11:53:55
+ :echo strftime("%H:%M") 11:55
+ :echo strftime("%c", getftime("file.c"))
+ Show mod time of file.c.
+<
+stridx({haystack}, {needle}) *stridx()*
+ The result is a Number, which gives the index in {haystack} of
+ the first occurrence of the String {needle} in the String
+ {haystack}. The search is done case-sensitive. For advanced
+ searches use |match()|.
+ If the {needle} does not occur in {haystack} it returns -1.
+ See also |strridx()|. Examples: >
+ :echo stridx("An Example", "Example") 3
+ :echo stridx("Starting point", "Start") 0
+ :echo stridx("Starting point", "start") -1
+<
+ *strlen()*
+strlen({expr}) The result is a Number, which is the length of the String
+ {expr} in bytes. If you want to count the number of
+ multi-byte characters use something like this: >
+
+ :let len = strlen(substitute(str, ".", "x", "g"))
+
+< Composing characters are not counted.
+
+strpart({src}, {start}[, {len}]) *strpart()*
+ The result is a String, which is part of {src}, starting from
+ byte {start}, with the length {len}.
+ When non-existing bytes are included, this doesn't result in
+ an error, the bytes are simply omitted.
+ If {len} is missing, the copy continues from {start} till the
+ end of the {src}. >
+ strpart("abcdefg", 3, 2) == "de"
+ strpart("abcdefg", -2, 4) == "ab"
+ strpart("abcdefg", 5, 4) == "fg"
+ strpart("abcdefg", 3) == "defg"
+< Note: To get the first character, {start} must be 0. For
+ example, to get three bytes under and after the cursor: >
+ strpart(getline(line(".")), col(".") - 1, 3)
+<
+strridx({haystack}, {needle}) *strridx()*
+ The result is a Number, which gives the index in {haystack} of
+ the last occurrence of the String {needle} in the String
+ {haystack}. The search is done case-sensitive. For advanced
+ searches use |match()|.
+ If the {needle} does not occur in {haystack} it returns -1.
+ See also |stridx()|. Examples: >
+ :echo strridx("an angry armadillo", "an") 3
+<
+strtrans({expr}) *strtrans()*
+ The result is a String, which is {expr} with all unprintable
+ characters translated into printable characters |'isprint'|.
+ Like they are shown in a window. Example: >
+ echo strtrans(@a)
+< This displays a newline in register a as "^@" instead of
+ starting a new line.
+
+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.
+ Example: >
+ :s/\d\+/\=submatch(0) + 1/
+< This finds the first number in the line and adds one to it.
+ A line break is included as a newline character.
+
+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).
+ See |string-match| for how {pat} is used.
+ And 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".
+
+synID({line}, {col}, {trans}) *synID()*
+ The result is a Number, which is the syntax ID at the position
+ {line} and {col} in the current window.
+ The syntax ID can be used with |synIDattr()| and
+ |synIDtrans()| to obtain syntax information about text.
+ {col} is 1 for the leftmost column, {line} is 1 for the first
+ line.
+ When {trans} is non-zero, transparent items are reduced to the
+ item that they reveal. This is useful when wanting to know
+ the effective color. When {trans} is zero, the transparent
+ item is returned. This is useful when wanting to know which
+ syntax item is effective (e.g. inside parens).
+ Warning: This function can be very slow. Best speed is
+ obtained by going through the file in forward direction.
+
+ Example (echoes the name of the syntax item under the cursor): >
+ :echo synIDattr(synID(line("."), col("."), 1), "name")
+<
+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
+ about a syntax item.
+ {mode} can be "gui", "cterm" or "term", to get the attributes
+ for that mode. When {mode} is omitted, or an invalid value is
+ used, the attributes for the currently active highlighting are
+ used (GUI, cterm or term).
+ Use synIDtrans() to follow linked highlight groups.
+ {what} result
+ "name" the name of the syntax item
+ "fg" foreground color (GUI: color name used to set
+ the color, cterm: color number as a string,
+ term: empty string)
+ "bg" background color (like "fg")
+ "fg#" like "fg", but for the GUI and the GUI is
+ running the name in "#RRGGBB" form
+ "bg#" like "fg#" for "bg"
+ "bold" "1" if bold
+ "italic" "1" if italic
+ "reverse" "1" if reverse
+ "inverse" "1" if inverse (= reverse)
+ "underline" "1" if underlined
+
+ Example (echoes the color of the syntax item under the
+ cursor): >
+ :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
+<
+synIDtrans({synID}) *synIDtrans()*
+ The result is a Number, which is the translated syntax ID of
+ {synID}. This is the syntax group ID of what is being used to
+ highlight the character. Highlight links given with
+ ":highlight link" are followed.
+
+ *system()*
+system({expr}) Get the output of the shell command {expr}. Note: newlines
+ in {expr} may cause the command to fail. The characters in
+ 'shellquote' and 'shellxquote' may also cause trouble.
+ This is not to be used for interactive commands.
+ The result is a String. Example: >
+
+ :let files = system("ls")
+
+< To make the result more system-independent, the shell output
+ is filtered to replace <CR> with <NL> for Macintosh, and
+ <CR><NL> with <NL> for DOS-like systems.
+ The command executed is constructed using several options:
+ 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
+ ({tmp} is an automatically generated file name).
+ For Unix and OS/2 braces are put around {expr} to allow for
+ concatenated commands.
+
+ The resulting error code can be found in |v:shell_error|.
+ This function will fail in |restricted-mode|.
+ Unlike ":!cmd" there is no automatic check for changed files.
+ Use |:checktime| to force a check.
+
+tempname() *tempname()* *temp-file-name*
+ The result is a String, which is the name of a file that
+ doesn't exist. It can be used for a temporary file. The name
+ is different for at least 26 consecutive calls. Example: >
+ :let tmpfile = tempname()
+ :exe "redir > " . tmpfile
+< For Unix, the file will be in a private directory (only
+ accessible by the current user) to avoid security problems
+ (e.g., a symlink attack or other people reading your file).
+ When Vim exits the directory and all files in it are deleted.
+ For MS-Windows forward slashes are used when the 'shellslash'
+ option is set or when 'shellcmdflag' starts with '-'.
+
+tolower({expr}) *tolower()*
+ The result is a copy of the String given, with all uppercase
+ characters turned into lowercase (just like applying |gu| to
+ the string).
+
+toupper({expr}) *toupper()*
+ The result is a copy of the String given, with all lowercase
+ characters turned into uppercase (just like applying |gU| to
+ the string).
+
+type({expr}) *type()*
+ The result is a Number:
+ 0 if {expr} has the type Number
+ 1 if {expr} has the type String
+
+virtcol({expr}) *virtcol()*
+ The result is a Number, which is the screen column of the file
+ position given with {expr}. That is, the last screen position
+ occupied by the character at that position, when the screen
+ 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.
+ For the byte position use |col()|.
+ 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:
+ . the cursor position
+ $ the end of the cursor line (the result is the
+ number of displayed characters in the cursor line
+ plus one)
+ 'x position of mark x (if the mark is not set, 0 is
+ returned)
+ Note that only marks in the current file can be used.
+ Examples: >
+ virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5
+ virtcol("$") with text "foo^Lbar", returns 9
+ virtcol("'t") with text " there", with 't at 'h', returns 6
+< The first column is 1. 0 is returned for an error.
+
+visualmode([expr]) *visualmode()*
+ The result is a String, which describes the last Visual mode
+ used. Initially it returns an empty string, but once Visual
+ mode has been used, it returns "v", "V", or "<CTRL-V>" (a
+ single CTRL-V character) for character-wise, line-wise, or
+ block-wise Visual mode respectively.
+ Example: >
+ :exe "normal " . visualmode()
+< This enters the same Visual mode as before. It is also useful
+ in scripts if you wish to act differently depending on the
+ Visual mode that was used.
+
+ If an expression is supplied that results in a non-zero number
+ or a non-empty string, then the Visual mode will be cleared
+ and the old value is returned. Note that " " and "0" are also
+ non-empty strings, thus cause the mode to be cleared.
+
+ *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
+ the buffer in the current window is returned. When window
+ {nr} doesn't exist, -1 is returned.
+ Example: >
+ :echo "The file in the current window is " . bufname(winbufnr(0))
+<
+ *wincol()*
+wincol() The result is a Number, which is the virtual column of the
+ cursor in the window. This is counting screen cells from the
+ left side of the window. The leftmost column is one.
+
+winheight({nr}) *winheight()*
+ The result is a Number, which is the height of window {nr}.
+ When {nr} is zero, the height of the current window is
+ returned. When window {nr} doesn't exist, -1 is returned.
+ An existing window always has a height of zero or more.
+ Examples: >
+ :echo "The current window has " . winheight(0) . " lines."
+<
+ *winline()*
+winline() The result is a Number, which is the screen line of the cursor
+ in the window. This is counting screen lines from the top of
+ the window. The first line is one.
+
+ *winnr()*
+winnr() The result is a Number, which is the number of the current
+ window. The top window has number 1. The number can be used
+ with |CTRL-W_w| and ":wincmd w" |:wincmd|.
+
+ *winrestcmd()*
+winrestcmd() Returns a sequence of |:resize| commands that should restore
+ the current window sizes. Only works properly when no windows
+ are opened or closed and the current window is unchanged.
+ Example: >
+ :let cmd = winrestcmd()
+ :call MessWithWindowSizes()
+ :exe cmd
+
+winwidth({nr}) *winwidth()*
+ The result is a Number, which is the width of window {nr}.
+ When {nr} is zero, the width of the current window is
+ returned. When window {nr} doesn't exist, -1 is returned.
+ An existing window always has a width of zero or more.
+ Examples: >
+ :echo "The current window has " . winwidth(0) . " columns."
+ :if winwidth(0) <= 50
+ : exe "normal 50\<C-W>|"
+ :endif
+<
+
+ *feature-list*
+There are three types of features:
+1. Features that are only supported when they have been enabled when Vim
+ was compiled |+feature-list|. Example: >
+ :if has("cindent")
+2. Features that are only supported when certain conditions have been met.
+ Example: >
+ :if has("gui_running")
+< *has-patch*
+3. Included patches. First check |v:version| for the version of Vim.
+ Then the "patch123" feature means that patch 123 has been included for
+ this version. Example (checking version 6.2.148 or later): >
+ :if v:version > 602 || v:version == 602 && has("patch148")
+
+all_builtin_terms Compiled with all builtin terminals enabled.
+amiga Amiga version of Vim.
+arabic Compiled with Arabic support |Arabic|.
+arp Compiled with ARP support (Amiga).
+autocmd Compiled with autocommands support.
+balloon_eval Compiled with |balloon-eval| support.
+beos BeOS version of Vim.
+browse Compiled with |:browse| support, and browse() will
+ work.
+builtin_terms Compiled with some builtin terminals.
+byte_offset Compiled with support for 'o' in 'statusline'
+cindent Compiled with 'cindent' support.
+clientserver Compiled with remote invocation support |clientserver|.
+clipboard Compiled with 'clipboard' support.
+cmdline_compl Compiled with |cmdline-completion| support.
+cmdline_hist Compiled with |cmdline-history| support.
+cmdline_info Compiled with 'showcmd' and 'ruler' support.
+comments Compiled with |'comments'| support.
+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.
+ebcdic Compiled on a machine with ebcdic character set.
+emacs_tags Compiled with support for Emacs tags.
+eval Compiled with expression evaluation support. Always
+ true, of course!
+ex_extra Compiled with extra Ex commands |+ex_extra|.
+extra_search Compiled with support for |'incsearch'| and
+ |'hlsearch'|
+farsi Compiled with Farsi support |farsi|.
+file_in_path Compiled with support for |gf| and |<cfile>|
+find_in_path Compiled with support for include file searches
+ |+find_in_path|.
+fname_case Case in file names matters (for Amiga, MS-DOS, and
+ Windows this is not present).
+folding Compiled with |folding| support.
+footer Compiled with GUI footer support. |gui-footer|
+fork Compiled to use fork()/exec() instead of system().
+gettext Compiled with message translation |multi-lang|
+gui Compiled with GUI enabled.
+gui_athena Compiled with Athena GUI.
+gui_beos Compiled with BeOs GUI.
+gui_gtk Compiled with GTK+ GUI (any version).
+gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined).
+gui_mac Compiled with Macintosh GUI.
+gui_motif Compiled with Motif GUI.
+gui_photon Compiled with Photon GUI.
+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
+ Insert mode.
+jumplist Compiled with |jumplist| support.
+keymap Compiled with 'keymap' support.
+langmap Compiled with 'langmap' support.
+libcall Compiled with |libcall()| support.
+linebreak Compiled with 'linebreak', 'breakat' and 'showbreak'
+ support.
+lispindent Compiled with support for lisp indenting.
+listcmds Compiled with commands for the buffer list |:files|
+ and the argument list |arglist|.
+localmap Compiled with local mappings and abbr. |:map-local|
+mac Macintosh version of Vim.
+macunix Macintosh version of Vim, using Unix files (OS-X).
+menu Compiled with support for |:menu|.
+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_xterm Compiled with support for xterm mouse.
+multi_byte Compiled with support for editing Korean et al.
+multi_byte_ime Compiled with support for IME input method.
+multi_lang Compiled with support for multiple languages.
+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.
+postscript Compiled with PostScript file printing.
+printer Compiled with |:hardcopy| support.
+python Compiled with Python interface.
+qnx QNX version of Vim.
+quickfix Compiled with |quickfix| support.
+rightleft Compiled with 'rightleft' support.
+ruby Compiled with Ruby interface |ruby|.
+scrollbind Compiled with 'scrollbind' support.
+showcmd Compiled with 'showcmd' support.
+signs Compiled with |:sign| support.
+smartindent Compiled with 'smartindent' support.
+sniff Compiled with SniFF interface support.
+statusline Compiled with support for 'statusline', 'rulerformat'
+ and special formats of 'titlestring' and 'iconstring'.
+sun_workshop Compiled with support for Sun |workshop|.
+syntax Compiled with syntax highlighting support.
+syntax_items There are active syntax highlighting items for the
+ current buffer.
+system Compiled to use system() instead of fork()/exec().
+tag_binary Compiled with binary searching in tags files
+ |tag-binary-search|.
+tag_old_static Compiled with support for old static tags
+ |tag-old-static|.
+tag_any_white Compiled with support for any white characters in tags
+ files |tag-any-white|.
+tcl Compiled with Tcl interface.
+terminfo Compiled with terminfo instead of termcap.
+termresponse Compiled with support for |t_RV| and |v:termresponse|.
+textobjects Compiled with support for |text-objects|.
+tgetent Compiled with tgetent support, able to use a termcap
+ or terminfo file.
+title Compiled with window title support |'title'|.
+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|.
+virtualedit Compiled with 'virtualedit' option.
+visual Compiled with Visual mode.
+visualextra Compiled with extra Visual mode commands.
+ |blockwise-operators|.
+vms VMS version of Vim.
+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).
+win32unix Win32 version of Vim, using Unix files (Cygwin)
+win95 Win32 version for MS-Windows 95/98/ME.
+writebackup Compiled with 'writebackup' default on.
+xfontset Compiled with X fontset support |xfontset|.
+xim Compiled with X input method support |xim|.
+xsmp Compiled with X session management support.
+xsmp_interact Compiled with interactive X session management support.
+xterm_clipboard Compiled with support for xterm clipboard.
+xterm_save Compiled with support for saving and restoring the
+ xterm screen.
+x11 Compiled with X11 support.
+
+ *string-match*
+Matching a pattern in a String
+
+A regexp pattern as explained at |pattern| is normally used to find a match in
+the buffer lines. When a pattern is used to find a match in a String, almost
+everything works in the same way. The difference is that a String is handled
+like it is one line. When it contains a "\n" character, this is not seen as a
+line break for the pattern. It can be matched with a "\n" in the pattern, or
+with ".". Example: >
+ :let a = "aaaa\nxxxx"
+ :echo matchstr(a, "..\n..")
+ aa
+ xx
+ :echo matchstr(a, "a.x")
+ a
+ x
+
+Don't forget that "^" will only match at the first character of the String and
+"$" at the last character of the string. They don't match after or before a
+"\n".
+
+==============================================================================
+5. Defining functions *user-functions*
+
+New functions can be defined. These can be called just like builtin
+functions. The function executes a sequence of Ex commands. Normal mode
+commands can be executed with the |:normal| command.
+
+The function name must start with an uppercase letter, to avoid confusion with
+builtin functions. To prevent from using the same name in different scripts
+avoid obvious, short names. A good habit is to start the function name with
+the name of the script, e.g., "HTMLcolor()".
+
+It's also possible to use curly braces, see |curly-braces-names|.
+
+ *local-function*
+A function local to a script must start with "s:". A local script function
+can only be called from within the script and from functions, user commands
+and autocommands defined in the script. It is also possible to call the
+function from a mappings defined in the script, but then |<SID>| must be used
+instead of "s:" when the mapping is expanded outside of the script.
+
+ *:fu* *:function* *E128* *E129* *E123*
+:fu[nction] List all functions and their arguments.
+
+:fu[nction] {name} List function {name}.
+ *E124* *E125*
+:fu[nction][!] {name}([arguments]) [range] [abort]
+ Define a new function by the name {name}. The name
+ must be made of alphanumeric characters and '_', and
+ must start with a capital or "s:" (see above).
+ *function-argument* *a:var*
+ An argument can be defined by giving its name. In the
+ function this can then be used as "a:name" ("a:" for
+ argument).
+ Up to 20 arguments can be given, separated by commas.
+ Finally, an argument "..." can be specified, which
+ means that more arguments may be following. In the
+ function they can be used as "a:1", "a:2", etc. "a:0"
+ is set to the number of extra arguments (which can be
+ 0).
+ When not using "...", the number of arguments in a
+ function call must be equal to the number of named
+ arguments. When using "...", the number of arguments
+ may be larger.
+ It is also possible to define a function without any
+ arguments. You must still supply the () then.
+ The body of the function follows in the next lines,
+ until the matching |:endfunction|. It is allowed to
+ define another function inside a function body.
+ *E127* *E122*
+ When a function by this name already exists and [!] is
+ not used an error message is given. When [!] is used,
+ an existing function is silently replaced. Unless it
+ is currently being executed, that is an error.
+ *a:firstline* *a:lastline*
+ When the [range] argument is added, the function is
+ expected to take care of a range itself. The range is
+ passed as "a:firstline" and "a:lastline". If [range]
+ 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|.
+ When the [abort] argument is added, the function will
+ abort as soon as an error is detected.
+ The last used search pattern and the redo command "."
+ will not be changed by the function.
+
+ *:endf* *:endfunction* *E126* *E193*
+:endf[unction] The end of a function definition. Must be on a line
+ by its own, without other commands.
+
+ *:delf* *:delfunction* *E130* *E131*
+:delf[unction] {name} Delete function {name}.
+
+ *:retu* *:return* *E133*
+:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
+ evaluated and returned as the result of the function.
+ If "[expr]" is not given, the number 0 is returned.
+ When a function ends without an explicit ":return",
+ the number 0 is returned.
+ Note that there is no check for unreachable lines,
+ thus there is no warning if commands follow ":return".
+
+ If the ":return" is used after a |:try| but before the
+ matching |:finally| (if present), the commands
+ following the ":finally" up to the matching |:endtry|
+ are executed first. This process applies to all
+ nested ":try"s inside the function. The function
+ returns at the outermost ":endtry".
+
+
+Inside a function variables can be used. These are local variables, which
+will disappear when the function returns. Global variables need to be
+accessed with "g:".
+
+Example: >
+ :function Table(title, ...)
+ : echohl Title
+ : echo a:title
+ : echohl None
+ : let idx = 1
+ : while idx <= a:0
+ : echo a:{idx} . ' '
+ : let idx = idx + 1
+ : endwhile
+ : return idx
+ :endfunction
+
+This function can then be called with: >
+ let lines = Table("Table", "line1", "line2")
+ let lines = Table("Empty Table")
+
+To return more than one value, pass the name of a global variable: >
+ :function Compute(n1, n2, divname)
+ : if a:n2 == 0
+ : return "fail"
+ : endif
+ : let g:{a:divname} = a:n1 / a:n2
+ : return "ok"
+ :endfunction
+
+This function can then be called with: >
+ :let success = Compute(13, 1324, "div")
+ :if success == "ok"
+ : echo div
+ :endif
+
+An alternative is to return a command that can be executed. This also works
+with local variables in a calling function. Example: >
+ :function Foo()
+ : execute Bar()
+ : echo "line " . lnum . " column " . col
+ :endfunction
+
+ :function Bar()
+ : return "let lnum = " . line(".") . " | let col = " . col(".")
+ :endfunction
+
+The names "lnum" and "col" could also be passed as argument to Bar(), to allow
+the caller to set the names.
+
+ *:cal* *:call* *E107*
+:[range]cal[l] {name}([arguments])
+ Call a function. The name of the function and its arguments
+ are as specified with |:function|. Up to 20 arguments can be
+ used.
+ Without a range and for functions that accept a range, the
+ function is called once. When a range is given the cursor is
+ positioned at the start of the first line before executing the
+ function.
+ When a range is given and the function doesn't handle it
+ itself, the function is executed for each line in the range,
+ with the cursor in the first column of that line. The cursor
+ is left at the last line (possibly moved by the last function
+ call). The arguments are re-evaluated for each line. Thus
+ this works:
+ *function-range-example* >
+ :function Mynumber(arg)
+ : echo line(".") . " " . a:arg
+ :endfunction
+ :1,5call Mynumber(getline("."))
+<
+ The "a:firstline" and "a:lastline" are defined anyway, they
+ can be used to do something different at the start or end of
+ the range.
+
+ Example of a function that handles the range itself: >
+
+ :function Cont() range
+ : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
+ :endfunction
+ :4,8call Cont()
+<
+ This function inserts the continuation character "\" in front
+ of all the lines in the range, except the first one.
+
+ *E132*
+The recursiveness of user functions is restricted with the |'maxfuncdepth'|
+option.
+
+ *autoload-functions*
+When using many or large functions, it's possible to automatically define them
+only when they are used. Use the FuncUndefined autocommand event with a
+pattern that matches the function(s) to be defined. Example: >
+
+ :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
+
+The file "~/vim/bufnetfuncs.vim" should then define functions that start with
+"BufNet". Also see |FuncUndefined|.
+
+==============================================================================
+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: >
+ my_{adjective}_variable
+
+When Vim encounters this, it evaluates the expression inside the braces, puts
+that in place of the expression, and re-interprets the whole as a variable
+name. So in the above example, if the variable "adjective" was set to
+"noisy", then the reference would be to "my_noisy_variable", whereas if
+"adjective" was set to "quiet", then it would be to "my_quiet_variable".
+
+One application for this is to create a set of variables governed by an option
+value. For example, the statement >
+ echo my_{&background}_message
+
+would output the contents of "my_dark_message" or "my_light_message" depending
+on the current value of 'background'.
+
+You can use multiple brace pairs: >
+ echo my_{adverb}_{adjective}_message
+..or even nest them: >
+ echo my_{ad{end_of_word}}_message
+where "end_of_word" is either "verb" or "jective".
+
+However, the expression inside the braces must evaluate to a valid single
+variable name. e.g. this is invalid: >
+ :let foo='a + b'
+ :echo c{foo}d
+.. since the result of expansion is "ca + bd", which is not a variable name.
+
+ *curly-braces-function-names*
+You can call and define functions by an evaluated name in a similar way.
+Example: >
+ :let func_end='whizz'
+ :call my_func_{func_end}(parameter)
+
+This would call the function "my_func_whizz(parameter)".
+
+==============================================================================
+7. Commands *expression-commands*
+
+:let {var-name} = {expr1} *:let* *E18*
+ Set internal variable {var-name} to the result of the
+ expression {expr1}. The variable will get the type
+ from the {expr}. If {var-name} didn't exist yet, it
+ is created.
+
+:let ${env-name} = {expr1} *:let-environment* *:let-$*
+ Set environment variable {env-name} to the result of
+ the expression {expr1}. The type is always String.
+
+:let @{reg-name} = {expr1} *:let-register* *:let-@*
+ Write the result of the expression {expr1} in register
+ {reg-name}. {reg-name} must be a single letter, and
+ must be the name of a writable register (see
+ |registers|). "@@" can be used for the unnamed
+ register, "@/" for the search pattern.
+ If the result of {expr1} ends in a <CR> or <NL>, the
+ register will be linewise, otherwise it will be set to
+ characterwise.
+ This can be used to clear the last search pattern: >
+ :let @/ = ""
+< This is different from searching for an empty string,
+ that would match everywhere.
+
+:let &{option-name} = {expr1} *:let-option* *:let-star*
+ Set option {option-name} to the result of the
+ expression {expr1}. The value is always converted to
+ the type of the option.
+ For an option local to a window or buffer the effect
+ is just like using the |:set| command: both the local
+ value and the global value is changed.
+
+:let &l:{option-name} = {expr1}
+ Like above, but only set the local value of an option
+ (if there is one). Works like |:setlocal|.
+
+:let &g:{option-name} = {expr1}
+ Like above, but only set the global value of an option
+ (if there is one). Works like |:setglobal|.
+
+ *E106*
+:let {var-name} .. List the value of variable {var-name}. Several
+ variable names may be given.
+
+:let List the values of all variables.
+
+ *:unlet* *:unl* *E108*
+:unl[et][!] {var-name} ...
+ Remove the internal variable {var-name}. Several
+ variable names can be given, they are all removed.
+ With [!] no error message is given for non-existing
+ variables.
+
+:if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580*
+:en[dif] Execute the commands until the next matching ":else"
+ or ":endif" if {expr1} evaluates to non-zero.
+
+ From Vim version 4.5 until 5.0, every Ex command in
+ between the ":if" and ":endif" is ignored. These two
+ commands were just to allow for future expansions in a
+ backwards compatible way. Nesting was allowed. Note
+ that any ":else" or ":elseif" was ignored, the "else"
+ part was not executed either.
+
+ You can use this to remain compatible with older
+ versions: >
+ :if version >= 500
+ : version-5-specific-commands
+ :endif
+< The commands still need to be parsed to find the
+ "endif". Sometimes an older Vim has a problem with a
+ new command. For example, ":silent" is recognized as
+ a ":substitute" command. In that case ":execute" can
+ avoid problems: >
+ :if version >= 600
+ : execute "silent 1,$delete"
+ :endif
+<
+ NOTE: The ":append" and ":insert" commands don't work
+ properly in between ":if" and ":endif".
+
+ *:else* *:el* *E581* *E583*
+:el[se] Execute the commands until the next matching ":else"
+ or ":endif" if they previously were not being
+ executed.
+
+ *:elseif* *:elsei* *E582* *E584*
+:elsei[f] {expr1} Short for ":else" ":if", with the addition that there
+ is no extra ":endif".
+
+:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw*
+ *E170* *E585* *E588*
+:endw[hile] Repeat the commands between ":while" and ":endwhile",
+ as long as {expr1} evaluates to non-zero.
+ When an error is detected from a command inside the
+ loop, execution continues after the "endwhile".
+
+ NOTE: The ":append" and ":insert" commands don't work
+ properly inside a ":while" loop.
+
+ *:continue* *:con* *E586*
+:con[tinue] When used inside a ":while", jumps back to the
+ ":while". If it is used after a |:try| inside the
+ ":while" but before the matching |:finally| (if
+ present), the commands following the ":finally" up to
+ the matching |:endtry| are executed first. This
+ process applies to all nested ":try"s inside the
+ ":while". The outermost ":endtry" then jumps back to
+ the ":while".
+
+ *:break* *:brea* *E587*
+:brea[k] When used inside a ":while", skips to the command
+ after the matching ":endwhile". If it is used after
+ a |:try| inside the ":while" but before the matching
+ |:finally| (if present), the commands following the
+ ":finally" up to the matching |:endtry| are executed
+ first. This process applies to all nested ":try"s
+ inside the ":while". The outermost ":endtry" then
+ jumps to the command after the ":endwhile".
+
+:try *:try* *:endt* *:endtry* *E600* *E601* *E602*
+:endt[ry] Change the error handling for the commands between
+ ":try" and ":endtry" including everything being
+ executed across ":source" commands, function calls,
+ or autocommand invocations.
+
+ When an error or interrupt is detected and there is
+ a |:finally| command following, execution continues
+ after the ":finally". Otherwise, or when the
+ ":endtry" is reached thereafter, the next
+ (dynamically) surrounding ":try" is checked for
+ a corresponding ":finally" etc. Then the script
+ processing is terminated. (Whether a function
+ definition has an "abort" argument does not matter.)
+ Example: >
+ :try | edit too much | finally | echo "cleanup" | endtry
+ :echo "impossible" " not reached, script terminated above
+<
+ Moreover, an error or interrupt (dynamically) inside
+ ":try" and ":endtry" is converted to an exception. It
+ can be caught as if it were thrown by a |:throw|
+ command (see |:catch|). In this case, the script
+ processing is not terminated.
+
+ The value "Vim:Interrupt" is used for an interrupt
+ exception. An error in a Vim command is converted
+ to a value of the form "Vim({command}):{errmsg}",
+ other errors are converted to a value of the form
+ "Vim:{errmsg}". {command} is the full command name,
+ and {errmsg} is the message that is displayed if the
+ error exception is not caught, always beginning with
+ the error number.
+ Examples: >
+ :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
+ :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
+<
+ *:cat* *:catch* *E603* *E604* *E605*
+:cat[ch] /{pattern}/ The following commands until the next ":catch",
+ |:finally|, or |:endtry| that belongs to the same
+ |:try| as the ":catch" are executed when an exception
+ matching {pattern} is being thrown and has not yet
+ been caught by a previous ":catch". Otherwise, these
+ commands are skipped.
+ When {pattern} is omitted all errors are caught.
+ Examples: >
+ :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C)
+ :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors
+ :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts
+ :catch /^Vim(write):/ " catch all errors in :write
+ :catch /^Vim\%((\a\+)\)\=:E123/ " catch error E123
+ :catch /my-exception/ " catch user exception
+ :catch /.*/ " catch everything
+ :catch " same as /.*/
+<
+ Another character can be used instead of / around the
+ {pattern}, so long as it does not have a special
+ meaning (e.g., '|' or '"') and doesn't occur inside
+ {pattern}.
+ NOTE: It is not reliable to ":catch" the TEXT of
+ an error message because it may vary in different
+ locales.
+
+ *:fina* *:finally* *E606* *E607*
+:fina[lly] The following commands until the matching |:endtry|
+ are executed whenever the part between the matching
+ |:try| and the ":finally" is left: either by falling
+ through to the ":finally" or by a |:continue|,
+ |:break|, |:finish|, or |:return|, or by an error or
+ interrupt or exception (see |:throw|).
+
+ *:th* *:throw* *E608*
+:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
+ If the ":throw" is used after a |:try| but before the
+ first corresponding |:catch|, commands are skipped
+ until the first ":catch" matching {expr1} is reached.
+ If there is no such ":catch" or if the ":throw" is
+ used after a ":catch" but before the |:finally|, the
+ commands following the ":finally" (if present) up to
+ the matching |:endtry| are executed. If the ":throw"
+ is after the ":finally", commands up to the ":endtry"
+ are skipped. At the ":endtry", this process applies
+ again for the next dynamically surrounding ":try"
+ (which may be found in a calling function or sourcing
+ script), until a matching ":catch" has been found.
+ If the exception is not caught, the command processing
+ is terminated.
+ Example: >
+ :try | throw "oops" | catch /^oo/ | echo "caught" | endtry
+<
+
+ *:ec* *:echo*
+:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The
+ first {expr1} starts on a new line.
+ Also see |:comment|.
+ Use "\n" to start a new line. Use "\r" to move the
+ cursor to the first column.
+ Uses the highlighting set by the |:echohl| command.
+ Cannot be followed by a comment.
+ Example: >
+ :echo "the value of 'shell' is" &shell
+< A later redraw may make the message disappear again.
+ To avoid that a command from before the ":echo" causes
+ a redraw afterwards (redraws are often postponed until
+ you type something), force a redraw with the |:redraw|
+ command. Example: >
+ :new | redraw | echo "there is a new window"
+<
+ *:echon*
+:echon {expr1} .. Echoes each {expr1}, without anything added. Also see
+ |:comment|.
+ Uses the highlighting set by the |:echohl| command.
+ Cannot be followed by a comment.
+ Example: >
+ :echon "the value of 'shell' is " &shell
+<
+ Note the difference between using ":echo", which is a
+ Vim command, and ":!echo", which is an external shell
+ command: >
+ :!echo % --> filename
+< The arguments of ":!" are expanded, see |:_%|. >
+ :!echo "%" --> filename or "filename"
+< Like the previous example. Whether you see the double
+ quotes or not depends on your 'shell'. >
+ :echo % --> nothing
+< The '%' is an illegal character in an expression. >
+ :echo "%" --> %
+< This just echoes the '%' character. >
+ :echo expand("%") --> filename
+< This calls the expand() function to expand the '%'.
+
+ *:echoh* *:echohl*
+:echoh[l] {name} Use the highlight group {name} for the following
+ |:echo|, |:echon| and |:echomsg| commands. Also used
+ for the |input()| prompt. Example: >
+ :echohl WarningMsg | echo "Don't panic!" | echohl None
+< Don't forget to set the group back to "None",
+ otherwise all following echo's will be highlighted.
+
+ *:echom* *:echomsg*
+:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the
+ message in the |message-history|.
+ Spaces are placed between the arguments as with the
+ |:echo| command. But unprintable characters are
+ displayed, not interpreted.
+ Uses the highlighting set by the |:echohl| command.
+ Example: >
+ :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
+<
+ *:echoe* *:echoerr*
+:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the
+ message in the |message-history|. When used in a
+ script or function the line number will be added.
+ Spaces are placed between the arguments as with the
+ :echo command. When used inside a try conditional,
+ the message is raised as an error exception instead
+ (see |try-echoerr|).
+ Example: >
+ :echoerr "This script just failed!"
+< If you just want a highlighted message use |:echohl|.
+ And to get a beep: >
+ :exe "normal \<Esc>"
+<
+ *:exe* *:execute*
+:exe[cute] {expr1} .. Executes the string that results from the evaluation
+ of {expr1} as an Ex command. Multiple arguments are
+ concatenated, with a space in between. {expr1} is
+ used as the processed command, command line editing
+ keys are not recognized.
+ Cannot be followed by a comment.
+ Examples: >
+ :execute "buffer " nextbuf
+ :execute "normal " count . "w"
+<
+ ":execute" can be used to append a command to commands
+ that don't accept a '|'. Example: >
+ :execute '!ls' | echo "theend"
+
+< ":execute" is also a nice way to avoid having to type
+ control characters in a Vim script for a ":normal"
+ command: >
+ :execute "normal ixxx\<Esc>"
+< This has an <Esc> character, see |expr-string|.
+
+ Note: The executed string may be any command-line, but
+ you cannot start or end a "while" or "if" command.
+ Thus this is illegal: >
+ :execute 'while i > 5'
+ :execute 'echo "test" | break'
+<
+ It is allowed to have a "while" or "if" command
+ completely in the executed string: >
+ :execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
+<
+
+ *:comment*
+ ":execute", ":echo" and ":echon" cannot be followed by
+ a comment directly, because they see the '"' as the
+ start of a string. But, you can use '|' followed by a
+ comment. Example: >
+ :echo "foo" | "this is a comment
+
+==============================================================================
+8. Exception handling *exception-handling*
+
+The Vim script language comprises an exception handling feature. This section
+explains how it can be used in a Vim script.
+
+Exceptions may be raised by Vim on an error or on interrupt, see
+|catch-errors| and |catch-interrupt|. You can also explicitly throw an
+exception by using the ":throw" command, see |throw-catch|.
+
+
+TRY CONDITIONALS *try-conditionals*
+
+Exceptions can be caught or can cause cleanup code to be executed. You can
+use a try conditional to specify catch clauses (that catch exceptions) and/or
+a finally clause (to be executed for cleanup).
+ A try conditional begins with a |:try| command and ends at the matching
+|:endtry| command. In between, you can use a |:catch| command to start
+a catch clause, or a |:finally| command to start a finally clause. There may
+be none or multiple catch clauses, but there is at most one finally clause,
+which must not be followed by any catch clauses. The lines before the catch
+clauses and the finally clause is called a try block. >
+
+ :try
+ : ...
+ : ... TRY BLOCK
+ : ...
+ :catch /{pattern}/
+ : ...
+ : ... CATCH CLAUSE
+ : ...
+ :catch /{pattern}/
+ : ...
+ : ... CATCH CLAUSE
+ : ...
+ :finally
+ : ...
+ : ... FINALLY CLAUSE
+ : ...
+ :endtry
+
+The try conditional allows to watch code for exceptions and to take the
+appropriate actions. Exceptions from the try block may be caught. Exceptions
+from the try block and also the catch clauses may cause cleanup actions.
+ When no exception is thrown during execution of the try block, the control
+is transferred to the finally clause, if present. After its execution, the
+script continues with the line following the ":endtry".
+ When an exception occurs during execution of the try block, the remaining
+lines in the try block are skipped. The exception is matched against the
+patterns specified as arguments to the ":catch" commands. The catch clause
+after the first matching ":catch" is taken, other catch clauses are not
+executed. The catch clause ends when the next ":catch", ":finally", or
+":endtry" command is reached - whatever is first. Then, the finally clause
+(if present) is executed. When the ":endtry" is reached, the script execution
+continues in the following line as usual.
+ When an exception that does not match any of the patterns specified by the
+":catch" commands is thrown in the try block, the exception is not caught by
+that try conditional and none of the catch clauses is executed. Only the
+finally clause, if present, is taken. The exception pends during execution of
+the finally clause. It is resumed at the ":endtry", so that commands after
+the ":endtry" are not executed and the exception might be caught elsewhere,
+see |try-nesting|.
+ When during execution of a catch clause another exception is thrown, the
+remaining lines in that catch clause are not executed. The new exception is
+not matched against the patterns in any of the ":catch" commands of the same
+try conditional and none of its catch clauses is taken. If there is, however,
+a finally clause, it is executed, and the exception pends during its
+execution. The commands following the ":endtry" are not executed. The new
+exception might, however, be caught elsewhere, see |try-nesting|.
+ When during execution of the finally clause (if present) an exception is
+thrown, the remaining lines in the finally clause are skipped. If the finally
+clause has been taken because of an exception from the try block or one of the
+catch clauses, the original (pending) exception is discarded. The commands
+following the ":endtry" are not executed, and the exception from the finally
+clause is propagated and can be caught elsewhere, see |try-nesting|.
+
+The finally clause is also executed, when a ":break" or ":continue" for
+a ":while" loop enclosing the complete try conditional is executed from the
+try block or a catch clause. Or when a ":return" or ":finish" is executed
+from the try block or a catch clause of a try conditional in a function or
+sourced script, respectively. The ":break", ":continue", ":return", or
+":finish" pends during execution of the finally clause and is resumed when the
+":endtry" is reached. It is, however, discarded when an exception is thrown
+from the finally clause.
+ When a ":break" or ":continue" for a ":while" loop enclosing the complete
+try conditional or when a ":return" or ":finish" is encountered in the finally
+clause, the rest of the finally clause is skipped, and the ":break",
+":continue", ":return" or ":finish" is executed as usual. If the finally
+clause has been taken because of an exception or an earlier ":break",
+":continue", ":return", or ":finish" from the try block or a catch clause,
+this pending exception or command is discarded.
+
+For examples see |throw-catch| and |try-finally|.
+
+
+NESTING OF TRY CONDITIONALS *try-nesting*
+
+Try conditionals can be nested arbitrarily. That is, a complete try
+conditional can be put into the try block, a catch clause, or the finally
+clause of another try conditional. If the inner try conditional does not
+catch an exception thrown in its try block or throws a new exception from one
+of its catch clauses or its finally clause, the outer try conditional is
+checked according to the rules above. If the inner try conditional is in the
+try block of the outer try conditional, its catch clauses are checked, but
+otherwise only the finally clause is executed. It does not matter for
+nesting, whether the inner try conditional is directly contained in the outer
+one, or whether the outer one sources a script or calls a function containing
+the inner try conditional.
+
+When none of the active try conditionals catches an exception, just their
+finally clauses are executed. Thereafter, the script processing terminates.
+An error message is displayed in case of an uncaught exception explicitly
+thrown by a ":throw" command. For uncaught error and interrupt exceptions
+implicitly raised by Vim, the error message(s) or interrupt message are shown
+as usual.
+
+For examples see |throw-catch|.
+
+
+EXAMINING EXCEPTION HANDLING CODE *except-examine*
+
+Exception handling code can get tricky. If you are in doubt what happens, set
+'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
+script file. Then you see when an exception is thrown, discarded, caught, or
+finished. When using a verbosity level of at least 14, things pending in
+a finally clause are also shown. This information is also given in debug mode
+(see |debug-scripts|).
+
+
+THROWING AND CATCHING EXCEPTIONS *throw-catch*
+
+You can throw any number or string as an exception. Use the |:throw| command
+and pass the value to be thrown as argument: >
+ :throw 4711
+ :throw "string"
+< *throw-expression*
+You can also specify an expression argument. The expression is then evaluated
+first, and the result is thrown: >
+ :throw 4705 + strlen("string")
+ :throw strpart("strings", 0, 6)
+
+An exception might be thrown during evaluation of the argument of the ":throw"
+command. Unless it is caught there, the expression evaluation is abandoned.
+The ":throw" command then does not throw a new exception.
+ Example: >
+
+ :function! Foo(arg)
+ : try
+ : throw a:arg
+ : catch /foo/
+ : endtry
+ : return 1
+ :endfunction
+ :
+ :function! Bar()
+ : echo "in Bar"
+ : return 4710
+ :endfunction
+ :
+ :throw Foo("arrgh") + Bar()
+
+This throws "arrgh", and "in Bar" is not displayed since Bar() is not
+executed. >
+ :throw Foo("foo") + Bar()
+however displays "in Bar" and throws 4711.
+
+Any other command that takes an expression as argument might also be
+abandoned by an (uncaught) exception during the expression evaluation. The
+exception is then propagated to the caller of the command.
+ Example: >
+
+ :if Foo("arrgh")
+ : echo "then"
+ :else
+ : echo "else"
+ :endif
+
+Here neither of "then" or "else" is displayed.
+
+ *catch-order*
+Exceptions can be caught by a try conditional with one or more |:catch|
+commands, see |try-conditionals|. The values to be caught by each ":catch"
+command can be specified as a pattern argument. The subsequent catch clause
+gets executed when a matching exception is caught.
+ Example: >
+
+ :function! Foo(value)
+ : try
+ : throw a:value
+ : catch /^\d\+$/
+ : echo "Number thrown"
+ : catch /.*/
+ : echo "String thrown"
+ : endtry
+ :endfunction
+ :
+ :call Foo(0x1267)
+ :call Foo('string')
+
+The first call to Foo() displays "Number thrown", the second "String thrown".
+An exception is matched against the ":catch" commands in the order they are
+specified. Only the first match counts. So you should place the more
+specific ":catch" first. The following order does not make sense: >
+
+ : catch /.*/
+ : echo "String thrown"
+ : catch /^\d\+$/
+ : echo "Number thrown"
+
+The first ":catch" here matches always, so that the second catch clause is
+never taken.
+
+ *throw-variables*
+If you catch an exception by a general pattern, you may access the exact value
+in the variable |v:exception|: >
+
+ : catch /^\d\+$/
+ : echo "Number thrown. Value is" v:exception
+
+You may also be interested where an exception was thrown. This is stored in
+|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the
+exception most recently caught as long it is not finished.
+ Example: >
+
+ :function! Caught()
+ : if v:exception != ""
+ : echo 'Caught "' . v:exception . '" in ' . v:throwpoint
+ : else
+ : echo 'Nothing caught'
+ : endif
+ :endfunction
+ :
+ :function! Foo()
+ : try
+ : try
+ : try
+ : throw 4711
+ : finally
+ : call Caught()
+ : endtry
+ : catch /.*/
+ : call Caught()
+ : throw "oops"
+ : endtry
+ : catch /.*/
+ : call Caught()
+ : finally
+ : call Caught()
+ : endtry
+ :endfunction
+ :
+ :call Foo()
+
+This displays >
+
+ Nothing caught
+ Caught "4711" in function Foo, line 4
+ Caught "oops" in function Foo, line 10
+ Nothing caught
+
+A practical example: The following command ":LineNumber" displays the line
+number in the script or function where it has been used: >
+
+ :function! LineNumber()
+ : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "")
+ :endfunction
+ :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
+<
+ *try-nested*
+An exception that is not caught by a try conditional can be caught by
+a surrounding try conditional: >
+
+ :try
+ : try
+ : throw "foo"
+ : catch /foobar/
+ : echo "foobar"
+ : finally
+ : echo "inner finally"
+ : endtry
+ :catch /foo/
+ : echo "foo"
+ :endtry
+
+The inner try conditional does not catch the exception, just its finally
+clause is executed. The exception is then caught by the outer try
+conditional. The example displays "inner finally" and then "foo".
+
+ *throw-from-catch*
+You can catch an exception and throw a new one to be caught elsewhere from the
+catch clause: >
+
+ :function! Foo()
+ : throw "foo"
+ :endfunction
+ :
+ :function! Bar()
+ : try
+ : call Foo()
+ : catch /foo/
+ : echo "Caught foo, throw bar"
+ : throw "bar"
+ : endtry
+ :endfunction
+ :
+ :try
+ : call Bar()
+ :catch /.*/
+ : echo "Caught" v:exception
+ :endtry
+
+This displays "Caught foo, throw bar" and then "Caught bar".
+
+ *rethrow*
+There is no real rethrow in the Vim script language, but you may throw
+"v:exception" instead: >
+
+ :function! Bar()
+ : try
+ : call Foo()
+ : catch /.*/
+ : echo "Rethrow" v:exception
+ : throw v:exception
+ : endtry
+ :endfunction
+< *try-echoerr*
+Note that this method cannot be used to "rethrow" Vim error or interrupt
+exceptions, because it is not possible to fake Vim internal exceptions.
+Trying so causes an error exception. You should throw your own exception
+denoting the situation. If you want to cause a Vim error exception containing
+the original error exception value, you can use the |:echoerr| command: >
+
+ :try
+ : try
+ : asdf
+ : catch /.*/
+ : echoerr v:exception
+ : endtry
+ :catch /.*/
+ : echo v:exception
+ :endtry
+
+This code displays
+
+ Vim(echoerr):Vim:E492: Not an editor command: asdf ~
+
+
+CLEANUP CODE *try-finally*
+
+Scripts often change global settings and restore them at their end. If the
+user however interrupts the script by pressing CTRL-C, the settings remain in
+an inconsistent state. The same may happen to you in the development phase of
+a script when an error occurs or you explicitly throw an exception without
+catching it. You can solve these problems by using a try conditional with
+a finally clause for restoring the settings. Its execution is guaranteed on
+normal control flow, on error, on an explicit ":throw", and on interrupt.
+(Note that errors and interrupts from inside the try conditional are converted
+to exceptions. When not caught, they terminate the script after the finally
+clause has been executed.)
+Example: >
+
+ :try
+ : let s:saved_ts = &ts
+ : set ts=17
+ :
+ : " Do the hard work here.
+ :
+ :finally
+ : let &ts = s:saved_ts
+ : unlet s:saved_ts
+ :endtry
+
+This method should be used locally whenever a function or part of a script
+changes global settings which need to be restored on failure or normal exit of
+that function or script part.
+
+ *break-finally*
+Cleanup code works also when the try block or a catch clause is left by
+a ":continue", ":break", ":return", or ":finish".
+ Example: >
+
+ :let first = 1
+ :while 1
+ : try
+ : if first
+ : echo "first"
+ : let first = 0
+ : continue
+ : else
+ : throw "second"
+ : endif
+ : catch /.*/
+ : echo v:exception
+ : break
+ : finally
+ : echo "cleanup"
+ : endtry
+ : echo "still in while"
+ :endwhile
+ :echo "end"
+
+This displays "first", "cleanup", "second", "cleanup", and "end". >
+
+ :function! Foo()
+ : try
+ : return 4711
+ : finally
+ : echo "cleanup\n"
+ : endtry
+ : echo "Foo still active"
+ :endfunction
+ :
+ :echo Foo() "returned by Foo"
+
+This displays "cleanup" and "4711 returned by Foo". You don't need to add an
+extra ":return" in the finally clause. (Above all, this would override the
+return value.)
+
+ *except-from-finally*
+Using either of ":continue", ":break", ":return", ":finish", or ":throw" in
+a finally clause is possible, but not recommended since it abandons the
+cleanup actions for the try conditional. But, of course, interrupt and error
+exceptions might get raised from a finally clause.
+ Example where an error in the finally clause stops an interrupt from
+working correctly: >
+
+ :try
+ : try
+ : echo "Press CTRL-C for interrupt"
+ : while 1
+ : endwhile
+ : finally
+ : unlet novar
+ : endtry
+ :catch /novar/
+ :endtry
+ :echo "Script still running"
+ :sleep 1
+
+If you need to put commands that could fail into a finally clause, you should
+think about catching or ignoring the errors in these commands, see
+|catch-errors| and |ignore-errors|.
+
+
+CATCHING ERRORS *catch-errors*
+
+If you want to catch specific errors, you just have to put the code to be
+watched in a try block and add a catch clause for the error message. The
+presence of the try conditional causes all errors to be converted to an
+exception. No message is displayed and |v:errmsg| is not set then. To find
+the right pattern for the ":catch" command, you have to know how the format of
+the error exception is.
+ Error exceptions have the following format: >
+
+ Vim({cmdname}):{errmsg}
+or >
+ Vim:{errmsg}
+
+{cmdname} is the name of the command that failed; the second form is used when
+the command name is not known. {errmsg} is the error message usually produced
+when the error occurs outside try conditionals. It always begins with
+a capital "E", followed by a two or three-digit error number, a colon, and
+a space.
+
+Examples:
+
+The command >
+ :unlet novar
+normally produces the error message >
+ E108: No such variable: "novar"
+which is converted inside try conditionals to an exception >
+ Vim(unlet):E108: No such variable: "novar"
+
+The command >
+ :dwim
+normally produces the error message >
+ E492: Not an editor command: dwim
+which is converted inside try conditionals to an exception >
+ Vim:E492: Not an editor command: dwim
+
+You can catch all ":unlet" errors by a >
+ :catch /^Vim(unlet):/
+or all errors for misspelled command names by a >
+ :catch /^Vim:E492:/
+
+Some error messages may be produced by different commands: >
+ :function nofunc
+and >
+ :delfunction nofunc
+both produce the error message >
+ E128: Function name must start with a capital: nofunc
+which is converted inside try conditionals to an exception >
+ Vim(function):E128: Function name must start with a capital: nofunc
+or >
+ Vim(delfunction):E128: Function name must start with a capital: nofunc
+respectively. You can catch the error by its number independently on the
+command that caused it if you use the following pattern: >
+ :catch /^Vim(\a\+):E128:/
+
+Some commands like >
+ :let x = novar
+produce multiple error messages, here: >
+ E121: Undefined variable: novar
+ E15: Invalid expression: novar
+Only the first is used for the exception value, since it is the most specific
+one (see |except-several-errors|). So you can catch it by >
+ :catch /^Vim(\a\+):E121:/
+
+You can catch all errors related to the name "nofunc" by >
+ :catch /\<nofunc\>/
+
+You can catch all Vim errors in the ":write" and ":read" commands by >
+ :catch /^Vim(\(write\|read\)):E\d\+:/
+
+You can catch all Vim errors by the pattern >
+ :catch /^Vim\((\a\+)\)\=:E\d\+:/
+<
+ *catch-text*
+NOTE: You should never catch the error message text itself: >
+ :catch /No such variable/
+only works in the english locale, but not when the user has selected
+a different language by the |:language| command. It is however helpful to
+cite the message text in a comment: >
+ :catch /^Vim(\a\+):E108:/ " No such variable
+
+
+IGNORING ERRORS *ignore-errors*
+
+You can ignore errors in a specific Vim command by catching them locally: >
+
+ :try
+ : write
+ :catch
+ :endtry
+
+But you are strongly recommended NOT to use this simple form, since it could
+catch more than you want. With the ":write" command, some autocommands could
+be executed and cause errors not related to writing, for instance: >
+
+ :au BufWritePre * unlet novar
+
+There could even be such errors you are not responsible for as a script
+writer: a user of your script might have defined such autocommands. You would
+then hide the error from the user.
+ It is much better to use >
+
+ :try
+ : write
+ :catch /^Vim(write):/
+ :endtry
+
+which only catches real write errors. So catch only what you'd like to ignore
+intentionally.
+
+For a single command that does not cause execution of autocommands, you could
+even suppress the conversion of errors to exceptions by the ":silent!"
+command: >
+ :silent! nunmap k
+This works also when a try conditional is active.
+
+
+CATCHING INTERRUPTS *catch-interrupt*
+
+When there are active try conditionals, an interrupt (CTRL-C) is converted to
+the exception "Vim:Interrupt". You can catch it like every exception. The
+script is not terminated, then.
+ Example: >
+
+ :function! TASK1()
+ : sleep 10
+ :endfunction
+
+ :function! TASK2()
+ : sleep 20
+ :endfunction
+
+ :while 1
+ : let command = input("Type a command: ")
+ : try
+ : if command == ""
+ : continue
+ : elseif command == "END"
+ : break
+ : elseif command == "TASK1"
+ : call TASK1()
+ : elseif command == "TASK2"
+ : call TASK2()
+ : else
+ : echo "\nIllegal command:" command
+ : continue
+ : endif
+ : catch /^Vim:Interrupt$/
+ : echo "\nCommand interrupted"
+ : " Caught the interrupt. Continue with next prompt.
+ : endtry
+ :endwhile
+
+You can interrupt a task here by pressing CTRL-C; the script then asks for
+a new command. If you press CTRL-C at the prompt, the script is terminated.
+
+For testing what happens when CTRL-C would be pressed on a specific line in
+your script, use the debug mode and execute the |>quit| or |>interrupt|
+command on that line. See |debug-scripts|.
+
+
+CATCHING ALL *catch-all*
+
+The commands >
+
+ :catch /.*/
+ :catch //
+ :catch
+
+catch everything, error exceptions, interrupt exceptions and exceptions
+explicitly thrown by the |:throw| command. This is useful at the top level of
+a script in order to catch unexpected things.
+ Example: >
+
+ :try
+ :
+ : " do the hard work here
+ :
+ :catch /MyException/
+ :
+ : " handle known problem
+ :
+ :catch /^Vim:Interrupt$/
+ : echo "Script interrupted"
+ :catch /.*/
+ : echo "Internal error (" . v:exception . ")"
+ : echo " - occurred at " . v:throwpoint
+ :endtry
+ :" end of script
+
+Note: Catching all might catch more things than you want. Thus, you are
+strongly encouraged to catch only for problems that you can really handle by
+specifying a pattern argument to the ":catch".
+ Example: Catching all could make it nearly impossible to interrupt a script
+by pressing CTRL-C: >
+
+ :while 1
+ : try
+ : sleep 1
+ : catch
+ : endtry
+ :endwhile
+
+
+EXCEPTIONS AND AUTOCOMMANDS *except-autocmd*
+
+Exceptions may be used during execution of autocommands. Example: >
+
+ :autocmd User x try
+ :autocmd User x throw "Oops!"
+ :autocmd User x catch
+ :autocmd User x echo v:exception
+ :autocmd User x endtry
+ :autocmd User x throw "Arrgh!"
+ :autocmd User x echo "Should not be displayed"
+ :
+ :try
+ : doautocmd User x
+ :catch
+ : echo v:exception
+ :endtry
+
+This displays "Oops!" and "Arrgh!".
+
+ *except-autocmd-Pre*
+For some commands, autocommands get executed before the main action of the
+command takes place. If an exception is thrown and not caught in the sequence
+of autocommands, the sequence and the command that caused its execution are
+abandoned and the exception is propagated to the caller of the command.
+ Example: >
+
+ :autocmd BufWritePre * throw "FAIL"
+ :autocmd BufWritePre * echo "Should not be displayed"
+ :
+ :try
+ : write
+ :catch
+ : echo "Caught:" v:exception "from" v:throwpoint
+ :endtry
+
+Here, the ":write" command does not write the file currently being edited (as
+you can see by checking 'modified'), since the exception from the BufWritePre
+autocommand abandons the ":write". The exception is then caught and the
+script displays: >
+
+ Caught: FAIL from BufWrite Auto commands for "*"
+<
+ *except-autocmd-Post*
+For some commands, autocommands get executed after the main action of the
+command has taken place. If this main action fails and the command is inside
+an active try conditional, the autocommands are skipped and an error exception
+is thrown that can be caught by the caller of the command.
+ Example: >
+
+ :autocmd BufWritePost * echo "File successfully written!"
+ :
+ :try
+ : write /i/m/p/o/s/s/i/b/l/e
+ :catch
+ : echo v:exception
+ :endtry
+
+This just displays: >
+
+ Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e)
+
+If you really need to execute the autocommands even when the main action
+fails, trigger the event from the catch clause.
+ Example: >
+
+ :autocmd BufWritePre * set noreadonly
+ :autocmd BufWritePost * set readonly
+ :
+ :try
+ : write /i/m/p/o/s/s/i/b/l/e
+ :catch
+ : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e
+ :endtry
+<
+You can also use ":silent!": >
+
+ :let x = "ok"
+ :let v:errmsg = ""
+ :autocmd BufWritePost * if v:errmsg != ""
+ :autocmd BufWritePost * let x = "after fail"
+ :autocmd BufWritePost * endif
+ :try
+ : silent! write /i/m/p/o/s/s/i/b/l/e
+ :catch
+ :endtry
+ :echo x
+
+This displays "after fail".
+
+If the main action of the command does not fail, exceptions from the
+autocommands will be catchable by the caller of the command: >
+
+ :autocmd BufWritePost * throw ":-("
+ :autocmd BufWritePost * echo "Should not be displayed"
+ :
+ :try
+ : write
+ :catch
+ : echo v:exception
+ :endtry
+<
+ *except-autocmd-Cmd*
+For some commands, the normal action can be replaced by a sequence of
+autocommands. Exceptions from that sequence will be catchable by the caller
+of the command.
+ Example: For the ":write" command, the caller cannot know whether the file
+had actually been written when the exception occurred. You need to tell it in
+some way. >
+
+ :if !exists("cnt")
+ : let cnt = 0
+ :
+ : autocmd BufWriteCmd * if &modified
+ : autocmd BufWriteCmd * let cnt = cnt + 1
+ : autocmd BufWriteCmd * if cnt % 3 == 2
+ : autocmd BufWriteCmd * throw "BufWriteCmdError"
+ : autocmd BufWriteCmd * endif
+ : autocmd BufWriteCmd * write | set nomodified
+ : autocmd BufWriteCmd * if cnt % 3 == 0
+ : autocmd BufWriteCmd * throw "BufWriteCmdError"
+ : autocmd BufWriteCmd * endif
+ : autocmd BufWriteCmd * echo "File successfully written!"
+ : autocmd BufWriteCmd * endif
+ :endif
+ :
+ :try
+ : write
+ :catch /^BufWriteCmdError$/
+ : if &modified
+ : echo "Error on writing (file contents not changed)"
+ : else
+ : echo "Error after writing"
+ : endif
+ :catch /^Vim(write):/
+ : echo "Error on writing"
+ :endtry
+
+When this script is sourced several times after making changes, it displays
+first >
+ File successfully written!
+then >
+ Error on writing (file contents not changed)
+then >
+ Error after writing
+etc.
+
+ *except-autocmd-ill*
+You cannot spread a try conditional over autocommands for different events.
+The following code is ill-formed: >
+
+ :autocmd BufWritePre * try
+ :
+ :autocmd BufWritePost * catch
+ :autocmd BufWritePost * echo v:exception
+ :autocmd BufWritePost * endtry
+ :
+ :write
+
+
+EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param*
+
+Some programming languages allow to use hierarchies of exception classes or to
+pass additional information with the object of an exception class. You can do
+similar things in Vim.
+ In order to throw an exception from a hierarchy, just throw the complete
+class name with the components separated by a colon, for instance throw the
+string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library.
+ When you want to pass additional information with your exception class, add
+it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)"
+for an error when writing "myfile".
+ With the appropriate patterns in the ":catch" command, you can catch for
+base classes or derived classes of your hierarchy. Additional information in
+parentheses can be cut out from |v:exception| with the ":substitute" command.
+ Example: >
+
+ :function! CheckRange(a, func)
+ : if a:a < 0
+ : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
+ : endif
+ :endfunction
+ :
+ :function! Add(a, b)
+ : call CheckRange(a:a, "Add")
+ : call CheckRange(a:b, "Add")
+ : let c = a:a + a:b
+ : if c < 0
+ : throw "EXCEPT:MATHERR:OVERFLOW"
+ : endif
+ : return c
+ :endfunction
+ :
+ :function! Div(a, b)
+ : call CheckRange(a:a, "Div")
+ : call CheckRange(a:b, "Div")
+ : if (a:b == 0)
+ : throw "EXCEPT:MATHERR:ZERODIV"
+ : endif
+ : return a:a / a:b
+ :endfunction
+ :
+ :function! Write(file)
+ : try
+ : execute "write" a:file
+ : catch /^Vim(write):/
+ : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
+ : endtry
+ :endfunction
+ :
+ :try
+ :
+ : " something with arithmetics and I/O
+ :
+ :catch /^EXCEPT:MATHERR:RANGE/
+ : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "")
+ : echo "Range error in" function
+ :
+ :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV
+ : echo "Math error"
+ :
+ :catch /^EXCEPT:IO/
+ : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
+ : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
+ : if file !~ '^/'
+ : let file = dir . "/" . file
+ : endif
+ : echo 'I/O error for "' . file . '"'
+ :
+ :catch /^EXCEPT/
+ : echo "Unspecified error"
+ :
+ :endtry
+
+The exceptions raised by Vim itself (on error or when pressing CTRL-C) use
+a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself
+exceptions with the "Vim" prefix; they are reserved for Vim.
+ Vim error exceptions are parameterized with the name of the command that
+failed, if known. See |catch-errors|.
+
+
+PECULIARITIES
+ *except-compat*
+The exception handling concept requires that the command sequence causing the
+exception is aborted immediately and control is transferred to finally clauses
+and/or a catch clause.
+
+In the Vim script language there are cases where scripts and functions
+continue after an error: in functions without the "abort" flag or in a command
+after ":silent!", control flow goes to the following line, and outside
+functions, control flow goes to the line following the outermost ":endwhile"
+or ":endif". On the other hand, errors should be catchable as exceptions
+(thus, requiring the immediate abortion).
+
+This problem has been solved by converting errors to exceptions and using
+immediate abortion (if not suppressed by ":silent!") only when a try
+conditional is active. This is no restriction since an (error) exception can
+be caught only from an active try conditional. If you want an immediate
+termination without catching the error, just use a try conditional without
+catch clause. (You can cause cleanup code being executed before termination
+by specifying a finally clause.)
+
+When no try conditional is active, the usual abortion and continuation
+behavior is used instead of immediate abortion. This ensures compatibility of
+scripts written for Vim 6.1 and earlier.
+
+However, when sourcing an existing script that does not use exception handling
+commands (or when calling one of its functions) from inside an active try
+conditional of a new script, you might change the control flow of the existing
+script on error. You get the immediate abortion on error and can catch the
+error in the new script. If however the sourced script suppresses error
+messages by using the ":silent!" command (checking for errors by testing
+|v:errmsg| if appropriate), its execution path is not changed. The error is
+not converted to an exception. (See |:silent|.) So the only remaining cause
+where this happens is for scripts that don't care about errors and produce
+error messages. You probably won't want to use such code from your new
+scripts.
+
+ *except-syntax-err*
+Syntax errors in the exception handling commands are never caught by any of
+the ":catch" commands of the try conditional they belong to. Its finally
+clauses, however, is executed.
+ Example: >
+
+ :try
+ : try
+ : throw 4711
+ : catch /\(/
+ : echo "in catch with syntax error"
+ : catch
+ : echo "inner catch-all"
+ : finally
+ : echo "inner finally"
+ : endtry
+ :catch
+ : echo 'outer catch-all caught "' . v:exception . '"'
+ : finally
+ : echo "outer finally"
+ :endtry
+
+This displays: >
+ inner finally
+ outer catch-all caught "Vim(catch):E54: Unmatched \("
+ outer finally
+The original exception is discarded and an error exception is raised, instead.
+
+ *except-single-line*
+The ":try", ":catch", ":finally", and ":endtry" commands can be put on
+a single line, but then syntax errors may make it difficult to recognize the
+"catch" line, thus you better avoid this.
+ Example: >
+ :try | unlet! foo # | catch | endtry
+raises an error exception for the trailing characters after the ":unlet!"
+argument, but does not see the ":catch" and ":endtry" commands, so that the
+error exception is discarded and the "E488: Trailing characters" message gets
+displayed.
+
+ *except-several-errors*
+When several errors appear in a single command, the first error message is
+usually the most specific one and therefor converted to the error exception.
+ Example: >
+ echo novar
+causes >
+ E121: Undefined variable: novar
+ E15: Invalid expression: novar
+The value of the error exception inside try conditionals is: >
+ Vim(echo):E121: Undefined variable: novar
+< *except-syntax-error*
+But when a syntax error is detected after a normal error in the same command,
+the syntax error is used for the exception being thrown.
+ Example: >
+ unlet novar #
+causes >
+ E108: No such variable: "novar"
+ E488: Trailing characters
+The value of the error exception inside try conditionals is: >
+ Vim(unlet):E488: Trailing characters
+This is done because the syntax error might change the execution path in a way
+not intended by the user. Example: >
+ try
+ try | unlet novar # | catch | echo v:exception | endtry
+ catch /.*/
+ echo "outer catch:" v:exception
+ endtry
+This displays "outer catch: Vim(unlet):E488: Trailing characters", and then
+a "E600: Missing :endtry" error message is given, see |except-single-line|.
+
+==============================================================================
+9. Examples *eval-examples*
+
+Printing in Hex ~
+>
+ :" The function Nr2Hex() returns the Hex string of a number.
+ :func Nr2Hex(nr)
+ : let n = a:nr
+ : let r = ""
+ : while n
+ : let r = '0123456789ABCDEF'[n % 16] . r
+ : let n = n / 16
+ : endwhile
+ : return r
+ :endfunc
+
+ :" The function String2Hex() converts each character in a string to a two
+ :" character Hex string.
+ :func String2Hex(str)
+ : let out = ''
+ : let ix = 0
+ : while ix < strlen(a:str)
+ : let out = out . Nr2Hex(char2nr(a:str[ix]))
+ : let ix = ix + 1
+ : endwhile
+ : return out
+ :endfunc
+
+Example of its use: >
+ :echo Nr2Hex(32)
+result: "20" >
+ :echo String2Hex("32")
+result: "3332"
+
+
+Sorting lines (by Robert Webb) ~
+
+Here is a Vim script to sort lines. Highlight the lines in Vim and type
+":Sort". This doesn't call any external programs so it'll work on any
+platform. The function Sort() actually takes the name of a comparison
+function as its argument, like qsort() does in C. So you could supply it
+with different comparison functions in order to sort according to date etc.
+>
+ :" Function for use with Sort(), to compare two strings.
+ :func! Strcmp(str1, str2)
+ : if (a:str1 < a:str2)
+ : return -1
+ : elseif (a:str1 > a:str2)
+ : return 1
+ : else
+ : return 0
+ : endif
+ :endfunction
+
+ :" Sort lines. SortR() is called recursively.
+ :func! SortR(start, end, cmp)
+ : if (a:start >= a:end)
+ : return
+ : endif
+ : let partition = a:start - 1
+ : let middle = partition
+ : let partStr = getline((a:start + a:end) / 2)
+ : let i = a:start
+ : while (i <= a:end)
+ : let str = getline(i)
+ : exec "let result = " . a:cmp . "(str, partStr)"
+ : if (result <= 0)
+ : " Need to put it before the partition. Swap lines i and partition.
+ : let partition = partition + 1
+ : if (result == 0)
+ : let middle = partition
+ : endif
+ : if (i != partition)
+ : let str2 = getline(partition)
+ : call setline(i, str2)
+ : call setline(partition, str)
+ : endif
+ : endif
+ : let i = i + 1
+ : endwhile
+
+ : " Now we have a pointer to the "middle" element, as far as partitioning
+ : " goes, which could be anywhere before the partition. Make sure it is at
+ : " the end of the partition.
+ : if (middle != partition)
+ : let str = getline(middle)
+ : let str2 = getline(partition)
+ : call setline(middle, str2)
+ : call setline(partition, str)
+ : endif
+ : call SortR(a:start, partition - 1, a:cmp)
+ : call SortR(partition + 1, a:end, a:cmp)
+ :endfunc
+
+ :" To Sort a range of lines, pass the range to Sort() along with the name of a
+ :" function that will compare two lines.
+ :func! Sort(cmp) range
+ : call SortR(a:firstline, a:lastline, a:cmp)
+ :endfunc
+
+ :" :Sort takes a range of lines and sorts them.
+ :command! -nargs=0 -range Sort <line1>,<line2>call Sort("Strcmp")
+<
+ *sscanf*
+There is no sscanf() function in Vim. If you need to extract parts from a
+line, you can use matchstr() and substitute() to do it. This example shows
+how to get the file name, line number and column number out of a line like
+"foobar.txt, 123, 45". >
+ :" Set up the match bit
+ :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)'
+ :"get the part matching the whole expression
+ :let l = matchstr(line, mx)
+ :"get each item out of the match
+ :let file = substitute(l, mx, '\1', '')
+ :let lnum = substitute(l, mx, '\2', '')
+ :let col = substitute(l, mx, '\3', '')
+
+The input is in the variable "line", the results in the variables "file",
+"lnum" and "col". (idea from Michael Geddes)
+
+==============================================================================
+10. No +eval feature *no-eval-feature*
+
+When the |+eval| feature was disabled at compile time, none of the expression
+evaluation commands are available. To prevent this from causing Vim scripts
+to generate all kinds of errors, the ":if" and ":endif" commands are still
+recognized, though the argument of the ":if" and everything between the ":if"
+and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but
+only if the commands are at the start of the line. The ":else" command is not
+recognized.
+
+Example of how to avoid executing commands when the |+eval| feature is
+missing: >
+
+ :if 1
+ : echo "Expression evaluation is compiled in"
+ :else
+ : echo "You will _never_ see this message"
+ :endif
+
+==============================================================================
+11. The sandbox *eval-sandbox* *sandbox* *E48*
+
+The 'foldexpr', 'includeexpr', 'indentexpr', 'statusline' and 'foldtext'
+options are evaluated in a sandbox. This means that you are protected from
+these expressions having nasty side effects. This gives some safety for when
+these options are set from a modeline. It is also used when the command from
+a tags file is executed.
+This is not guaranteed 100% secure, but it should block most attacks.
+
+These items are not allowed in the sandbox:
+ - changing the buffer text
+ - defining or changing mapping, autocommands, functions, user commands
+ - setting certain options (see |option-summary|)
+ - executing a shell command
+ - reading or writing a file
+ - jumping to another buffer or editing a file
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/evim.1 b/runtime/doc/evim.1
new file mode 100644
index 000000000..bd25ed6eb
--- /dev/null
+++ b/runtime/doc/evim.1
@@ -0,0 +1,49 @@
+.TH EVIM 1 "2002 February 16"
+.SH NAME
+evim \- easy Vim, edit a file with Vim and setup for modeless editing
+.SH SYNOPSIS
+.br
+.B evim
+[options] [file ..]
+.br
+.B eview
+.SH DESCRIPTION
+.B eVim
+starts
+.B Vim
+and sets options to make it behave like a modeless editor.
+This is still Vim but used as a point-and-click editor.
+This feels a lot like using Notepad on MS-Windows.
+.B eVim
+will always run in the GUI, to enable the use of menus and toolbar.
+.PP
+Only to be used for people who really can't work with Vim in the normal way.
+Editing will be much less efficient.
+.PP
+.B eview
+is the same, but starts in read-only mode. It works just like evim -R.
+.PP
+See vim(1) for details about Vim, options, etc.
+.PP
+The 'insertmode' option is set to be able to type text directly.
+.br
+Mappings are setup to make Copy and Paste work with the MS-Windows keys.
+CTRL-X cuts text, CTRL-C copies text and CTRL-V pastes text.
+Use CTRL-Q to obtain the original meaning of CTRL-V.
+.SH OPTIONS
+See vim(1).
+.SH FILES
+.TP 15
+/usr/local/lib/vim/evim.vim
+The script loaded to initialize eVim.
+.SH AKA
+Also Known As "Vim for gumbies".
+When using evim you are expected to take a handkerchief,
+make a knot in each corner and wear it on your head.
+.SH SEE ALSO
+vim(1)
+.SH AUTHOR
+Most of
+.B Vim
+was made by Bram Moolenaar, with a lot of help from others.
+See the Help/Credits menu.
diff --git a/runtime/doc/farsi.txt b/runtime/doc/farsi.txt
new file mode 100644
index 000000000..9902709da
--- /dev/null
+++ b/runtime/doc/farsi.txt
@@ -0,0 +1,269 @@
+*farsi.txt* For Vim version 7.0aa. Last change: 2002 Oct 29
+
+
+ VIM REFERENCE MANUAL by Mortaza Ghassab Shiran
+
+
+Right to Left and Farsi Mapping for Vim *farsi* *Farsi*
+
+{Vi does not have any of these commands}
+
+ *E27*
+In order to use right-to-left and Farsi mapping support, it is necessary to
+compile Vim with the |+farsi| feature.
+
+These functions have been made by Mortaza G. Shiran <shiran@jps.net>
+
+
+Introduction
+------------
+In right-to-left oriented files the characters appear on the screen from right
+to left. This kind of file is most useful when writing Farsi documents,
+composing faxes or writing Farsi memos.
+
+The commands, prompts and help files are not in Farsi, therefore the user
+interface remains the standard Vi interface.
+
+
+Highlights
+----------
+o Editing left-to-right files as in the original Vim, no change.
+
+o Viewing and editing files in right-to-left windows. File orientation is
+ per window, so it is possible to view the same file in right-to-left and
+ left-to-right modes, simultaneously.
+
+o Compatibility to the original Vim. Almost all features work in
+ right-to-left mode (see bugs below).
+
+o Changing keyboard mapping and reverse insert modes using a single
+ command.
+
+o Backing from reverse insert mode to the correct place in the file
+ (if possible).
+
+o While in Farsi mode, numbers are entered from left to right. Upon entering
+ a none number character, that character will be inserted just into the
+ left of the last number.
+
+o No special terminal with right-to-left capabilities is required. The
+ right-to-left changes are completely hardware independent. Only
+ Farsi font is necessary.
+
+o Farsi keymapping on the command line in reverse insert mode.
+
+o Toggling between left-to-right and right-to-left via F8 function key.
+
+o Toggling between Farsi ISIR-3342 standard encoding and VIM Farsi via F9
+ function key. Since this makes sense only for the text written in
+ right-to-left mode, this function is also supported only in right-to-left
+ mode.
+
+Farsi Fonts *farsi fonts*
+-----------
+
+If the "extra" archive has been unpacked, the following files are found in the
+subdirectories of the '$VIM/farsi' directory:
+
+ + far-a01.pcf X Windows fonts for Unix including Linux systems
+ + far-a01.bf X Windows fonts for SunOs
+ + far-a01.f16 a screen fonts for Unix including Linux systems
+ + far-a01.fon a monospaced fonts for Windows NT/95/98
+ + far-a01.com a screen fonts for DOS
+
+
+Font Installation
+-----------------
+
+o Installation of fonts for MS Window systems (NT/95/98)
+
+ From 'Control Panel' folder, start the 'Fonts' program. Then from 'file'
+ menu item select 'Install New Fonts ...'. Browse and select the
+ 'far-a01.fon', then follow the installation guide.
+ NOTE: several people have reported that this does not work. The solution
+ is unknown.
+
+o Installation of fonts for X Window systems (Unix/Linux)
+
+ Depending on your system, copy far-a01.pcf.Z or far-a01.pcf.gz into a
+ directory of your choice. Change to the directory containing the Farsi
+ fonts and execute the following commands:
+
+ > mkfontdir
+ > xset +fp path_name_of_farsi_fonts_directory
+
+o Installation of fonts for X Window systems (SunOs)
+
+ Copy far-a01.bf font into a directory of your choice.
+ Change to the directory containing the far-a01.fb fonts and
+ execute the following commands:
+
+ > fldfamily
+ > xset +fp path_name_of_fonts_directory
+
+o Installation of ASCII screen fonts (Unix/Linux)
+
+ For Linux system, copy the far-a01.f16 fonts into /usr/lib/kbd/consolefonts
+ directory and execute the setfont program as "setfont far-a01.f16". For
+ other systems (e.g. SCO Unix), please refer to the fonts installation
+ section of your system administration manuals.
+
+o Installation of ASCII screen fonts (DOS)
+
+ After system power on, prior to the first use of VIM, upload the Farsi
+ fonts by executing the far-a01.com font uploading program.
+
+
+Usage
+-----
+Prior to starting VIM, the environment in which VIM can run in Farsi mode,
+must be set. In addition to installation of Farsi fonts, following points
+refer to some of the system environments, which you may need to set:
+Key code mapping, loading graphic card in ASCII screen mode, setting the IO
+driver in 8 bit clean mode ... .
+
+o Setting the Farsi fonts
+
+ + For VIM GUI set the 'guifont' to far-a01. This is done by entering
+ ':set guifont=far-a01' in the VIM window.
+
+ You can have 'guifont' set to far-a01 by VIM during the VIM startup
+ by appending the ':set guifont=far-a01' into your .vimrc file
+ (in case of NT/95/98 platforms _vimrc).
+
+ Under the X Window environment, you can also start the VIM with
+ '-fn far-a01' option.
+
+ + For the VIM within a xterm, start a xterm with the Farsi fonts (e.g.
+ kterm -fn far-a01). Then start the VIM inside the kterm.
+
+ + For VIM under DOS, prior to the first usage of VIM, upload the Farsi
+ fonts by executing the far-a01.com fonts uploading program.
+
+o Farsi Keymapping Activation
+
+ To activate the Farsi keymapping, set either 'altkeymap' or 'fkmap'.
+ This is done by entering ':set akm' or ':set fk' in the VIM window.
+ You can have 'altkeymap' or 'fkmap' set as default by appending ':set akm'
+ or ':set fk' in your .vimrc file or _vimrc in case of NT/95/98 platforms.
+
+ To turn off the Farsi keymapping as a default second language keymapping,
+ reset the 'altkeymap' by entering ':set noakm'.
+
+o right-to-left Farsi Mode
+
+ By default VIM starts in Left-to-right mode. Following are ways to change
+ the window orientation:
+
+ + Start the VIM with -F option (e.g. vim -F ... ).
+
+ + Use F8 function key to toggle between left-to-right and right-to-left.
+
+ + While in Left-to-right mode, enter 'set rl' in the command line ('rl' is
+ the abbreviation for rightleft).
+
+ + Put the 'set rl' line in your '.vimrc' file to start the VIM in
+ right-to-left mode permanently.
+
+Encoding
+--------
+
+The letter encoding used is the VIM extended ISIR-3342 standard with a built
+in function to convert between VIM extended ISIR-3342 and ISIR-3342 standard.
+
+For document portability reasons, the letter encoding is kept the same across
+different platforms (i.e. UNIX's, NT/95/98, MS DOS, ...).
+
+
+o Keyboard
+
+ + CTRL-_ in insert/replace modes toggles between Farsi(akm)/Latin
+ mode as follows:
+
+ + CTRL-_ moves the cursor to the end of the typed text in edit mode.
+
+ + CTRL-_ in command mode only toggles keyboard mapping between Farsi(akm)/
+ Latin. The Farsi text is then entered in reverse insert mode.
+
+ + F8 - Toggles between left-to-right and right-to-left.
+
+ + F9 - Toggles the encoding between ISIR-3342 standard and VIM extended
+ ISIR-3342 (supported only in right-to-left mode).
+
+ + Keyboard mapping is based on the Iranian ISIRI-2901 standard.
+ Following table shows the keyboard mapping while Farsi(akm) mode set:
+
+ -------------------------------------
+ ` 1 2 3 4 5 6 7 8 9 0 - =
+ ¢ ± ² ³ ´ µ ¶ · ¸ ¹ ° ­ ½
+ -------------------------------------
+ ~ ! @ # $ % ^ & * ( ) _ +
+ ~ £ § ® ¤ ¥ ª ¬ è ¨ © é «
+ -------------------------------------
+ q w e r t z u i o p [ ]
+ Ó Ò Æ Ù Ø Õ Ö à Ê É Ç ˆ
+ -------------------------------------
+ Q W E R T Z U I O P { }
+ ÷ õ ô ó ò ý ð ö [ ] { }
+ -------------------------------------
+ a s d f g h j k l ; ' \
+ Ñ Ð á Ã Ü Á Å Þ Ý Ú Û ë
+ -------------------------------------
+ A S D F G H J K L : " |
+ ù û  þ ú ø À ü æ ç º » ê
+ -------------------------------------
+ < y x c v b n m , . /
+ ¾ × Ô Î Í Ì Ë Ä ß ¦ ¯
+ -------------------------------------
+ > Y X C V B N M < > ?
+ ¼ ñ Ô Ï Í ¡ Ë Â ¾ ¼ ¿
+ -------------------------------------
+
+Note:
+ ¡ stands for Farsi PSP (break without space)
+
+ ¢ stands for Farsi PCN (for HAMZE attribute )
+
+Restrictions
+------------
+
+o In insert/replace mode and fkmap (Farsi mode) set, CTRL-B is not
+ supported.
+
+o If you change the character mapping between Latin/Farsi, the redo buffer
+ will be reset (emptied). That is, redo is valid and will function (using
+ '.') only within the mode you are in.
+
+o While numbers are entered in Farsi mode, the redo buffer will be reset
+ (emptied). That is, you can not redo the last changes (using '.') after
+ entering numbers.
+
+o While in left-to-right and Farsi mode set, CTRL-R is not supported.
+
+o While in right-to-left mode, the search on 'Latin' pattern does not work,
+ except if you enter the Latin search pattern in reverse.
+
+o In the command mode, there is no support for entering the numbers from left
+ to right and also for the sake of the flexibility the keymapping logic is
+ restricted.
+
+o Under X Window environment, if you want to run the VIM within a xterm
+ terminal emulator and Farsi mode set, you need to have an ANSI compatible
+ xterm terminal emulator. This is because the letter codes above 128 decimal
+ have certain meanings in the standard xterm terminal emulator.
+
+ Note: Under X Window environment, VIM GUI works fine in Farsi mode.
+ This eliminates the need of any xterm terminal emulator.
+
+
+Bugs
+----
+While in insert/replace and Farsi mode set, if you repeatedly change the
+cursor position (via cursor movement) and enter new text and then try to undo
+the last change, the undo will lag one change behind. But as you continue to
+undo, you will reach the original line of text. You can also use U to undo all
+changes made in the current line.
+
+For more information about the bugs refer to rileft.txt.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
new file mode 100644
index 000000000..a855d4661
--- /dev/null
+++ b/runtime/doc/filetype.txt
@@ -0,0 +1,529 @@
+*filetype.txt* For Vim version 7.0aa. Last change: 2004 May 05
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Filetypes *filetype* *file-type*
+
+1. Filetypes |filetypes|
+2. Filetype plugin |filetype-plugins|
+3. Docs for the default filetype plugins. |ftplugin-docs|
+
+Also see |autocmd.txt|.
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Filetypes *filetypes* *file-types*
+
+Vim can detect the type of file that is edited. This is done by checking the
+file name and sometimes by inspecting the contents of the file for specific
+text.
+
+ *:filetype* *:filet*
+To enable file type detection, use this command in your vimrc: >
+ :filetype on
+Each time a new or existing file is edited, Vim will try to recognize the type
+of the file and set the 'filetype' option. This will trigger the FileType
+event, which can be used to set the syntax highlighting, set options, etc.
+
+NOTE: Filetypes and 'compatible' don't work together well, since being Vi
+compatible means options are global. Resetting 'compatible' is recommended,
+if you didn't do that already.
+
+Detail: The ":filetype on" command will load one of these files:
+ Amiga $VIMRUNTIME/filetype.vim
+ Mac $VIMRUNTIME:filetype.vim
+ MS-DOS $VIMRUNTIME\filetype.vim
+ RiscOS Vim:Filetype
+ Unix $VIMRUNTIME/filetype.vim
+ VMS $VIMRUNTIME/filetype.vim
+ This file is a Vim script that defines autocommands for the
+ BufNewFile and BufRead events. If the file type is not found by the
+ name, the file $VIMRUNTIME/scripts.vim is used to detect it from the
+ contents of the file.
+
+To add your own file types, see |new-filetype| below.
+
+If the file type is not detected automatically, or it finds the wrong type,
+you can either set the 'filetype' option manually, or add a modeline to your
+file. Example, for in an IDL file use the command: >
+ :set filetype=idl
+or add this |modeline| to the file: >
+ /* vim: set filetype=idl : */
+<
+ *:filetype-plugin-on*
+You can enable loading the plugin files for specific file types with: >
+ :filetype plugin on
+If filetype detection was not switched on yet, it will be as well.
+This actually loads the file "ftplugin.vim" in 'runtimepath'.
+The result is that when a file is edited its plugin file is loaded (if there
+is one for the detected filetype). |filetype-plugin|
+
+ *:filetype-plugin-off*
+You can disable it again with: >
+ :filetype plugin off
+The filetype detection is not switched off then. But if you do switch off
+filetype detection, the plugins will not be loaded either.
+This actually loads the file "ftplugof.vim" in 'runtimepath'.
+
+ *:filetype-indent-on*
+You can enable loading the indent file for specific file types with: >
+ :filetype indent on
+If filetype detection was not switched on yet, it will be as well.
+This actually loads the file "indent.vim" in 'runtimepath'.
+The result is that when a file is edited its indent file is loaded (if there
+is one for the detected filetype). |indent-expression|
+
+ *:filetype-indent-off*
+You can disable it again with: >
+ :filetype indent off
+The filetype detection is not switched off then. But if you do switch off
+filetype detection, the indent files will not be loaded either.
+This actually loads the file "indoff.vim" in 'runtimepath'.
+
+ *:filetype-off*
+To disable file type detection, use this command: >
+ :filetype off
+This will keep the flags for "plugin" and "indent", but since no file types
+are being detected, they won't work until the next ":filetype on".
+
+
+Overview: *:filetype-overview*
+
+command detection plugin indent ~
+:filetype on on unchanged unchanged
+:filetype off off unchanged unchanged
+:filetype plugin on on on unchanged
+:filetype plugin off unchanged off unchanged
+:filetype indent on on unchanged on
+:filetype indent off unchanged unchanged off
+:filetype plugin indent on on on on
+:filetype plugin indent off unchanged off off
+
+To see the current status, type: >
+ :filetype
+The output looks something like this: >
+ filetype detection:ON plugin:ON indent:OFF
+
+The file types are also used for syntax highlighting. If the ":syntax on"
+command is used, the file type detection is installed too. There is no need
+to do ":filetype on" after ":syntax on".
+
+To disable one of the file types, add a line in the your filetype file, see
+|remove-filetype|.
+
+ *filetype-detect*
+To detect the file type again: >
+ :filetype detect
+Use this if you started with an empty file and typed text that makes it
+possible to detect the file type. For example, when you entered this in a
+shell script: "#!/bin/csh".
+ When filetype detection was off, it will be enabled first, like the "on"
+argument was used.
+
+ *filetype-overrule*
+When the same extension is used for two filetypes, Vim tries to guess what
+kind of file it is. This doesn't always work. A number of global variables
+can be used to overrule the filetype used for certain extensions:
+
+ file name variable ~
+ *.asa g:filetype_asa |aspvbs-syntax| |aspperl-syntax|
+ *.asp g:filetype_asp |aspvbs-syntax| |aspperl-syntax|
+ *.asm g:asmsyntax |asm-syntax|
+ *.prg g:filetype_prg
+ *.pl g:filetype_pl
+ *.inc g:filetype_inc
+ *.w g:filetype_w |cweb-syntax|
+ *.i g:filetype_i |progress-syntax|
+ *.p g:filetype_p |pascal-syntax|
+ *.sh g:bash_is_sh |sh-syntax|
+
+ *filetype-ignore*
+To avoid that certain files are being inspected, the g:ft_ignore_pat variable
+is used. The default value is set like this: >
+ :let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
+This means that the contents of compressed files are not inspected.
+
+ *new-filetype*
+If a file type that you want to use is not detected yet, there are three ways
+to add it. In any way, it's better not modify the $VIMRUNTIME/filetype.vim
+file. It will be overwritten when installing a new version of Vim.
+
+A. If you want to overrule all default file type checks.
+ This works by writing one file for each filetype. The disadvantage is that
+ means there can be many files. The advantage is that you can simply drop
+ this file in the right directory to make it work.
+
+ 1. Create your user runtime directory. You would normally use the first
+ item of the 'runtimepath' option. Then create the directory "ftdetect"
+ inside it. Example for Unix: >
+ :!mkdir ~/.vim
+ :!mkdir ~/.vim/ftdetect
+<
+ 2. Create a file that contains an autocommand to detect the file type.
+ Example: >
+ au BufRead,BufNewFile *.mine set filetype=mine
+< Note that there is no "augroup" command, this has already been done
+ when sourcing your file. You could also use the pattern "*" and then
+ check the contents of the file to recognize it.
+ Write this file as "mine.vim" in the "ftdetect" directory in your user
+ runtime directory. For example, for Unix: >
+ :w ~/.vim/ftdetect/mine.vim
+
+< 3. To use the new filetype detection you must restart Vim.
+
+ The files in the "ftdetect" directory are used after all the default
+ checks, thus they can overrule a previously detected file type.
+
+B. If you want to detect your file after the default file type checks.
+
+ This works like A above, but instead of setting 'filetype' unconditionally
+ use ":setfiletype". This will only set 'filetype' if no file type was
+ detected yet. Example: >
+ au BufRead,BufNewFile *.txt setfiletype text
+<
+ You can also use the already detected file type in your command. For
+ example, to use the file type "mypascal" when "pascal" has been detected: >
+ au BufRead,BufNewFile * if &ft == 'pascal' | set ft=mypascal
+ | endif
+
+C. If your file type can be detected by the file name.
+ 1. Create your user runtime directory. You would normally use the first
+ item of the 'runtimepath' option. Example for Unix: >
+ :!mkdir ~/.vim
+<
+ 2. Create a file that contains autocommands to detect the file type.
+ Example: >
+ " my filetype file
+ if exists("did_load_filetypes")
+ finish
+ endif
+ augroup filetypedetect
+ au! BufRead,BufNewFile *.mine setfiletype mine
+ au! BufRead,BufNewFile *.xyz setfiletype drawing
+ augroup END
+< Write this file as "filetype.vim" in your user runtime directory. For
+ example, for Unix: >
+ :w ~/.vim/filetype.vim
+
+< 3. To use the new filetype detection you must restart Vim.
+
+ Your filetype.vim will be sourced before the default FileType autocommands
+ have been installed. Your autocommands will match first, and the
+ ":setfiletype" command will make sure that no other autocommands will set
+ 'filetype' after this.
+ *new-filetype-scripts*
+D. If your filetype can only be detected by inspecting the contents of the
+ file.
+
+ 1. Create your user runtime directory. You would normally use the first
+ item of the 'runtimepath' option. Example for Unix: >
+ :!mkdir ~/.vim
+<
+ 2. Create a vim script file for doing this. Example: >
+ if did_filetype() " filetype already set..
+ finish " ..don't do these checks
+ endif
+ if getline(1) =~ '^#!.*\<mine\>'
+ setfiletype mine
+ elseif getline(1) =~? '\<drawing\>'
+ setfiletype drawing
+ endif
+< See $VIMRUNTIME/scripts.vim for more examples.
+ Write this file as "scripts.vim" in your user runtime directory. For
+ example, for Unix: >
+ :w ~/.vim/scripts.vim
+<
+ 3. The detection will work right away, no need to restart Vim.
+
+ Your scripts.vim is loaded before the default checks for file types, which
+ means that your rules override the default rules in
+ $VIMRUNTIME/scripts.vim.
+
+ *remove-filetype*
+If a file type is detected that is wrong for you, install a filetype.vim or
+scripts.vim to catch it (see above). You can set 'filetype' to a non-existing
+name to avoid that it will be set later anyway: >
+ :set filetype=ignored
+
+If you are setting up a system with many users, and you don't want each user
+to add/remove the same filetypes, consider writing the filetype.vim and
+scripts.vim files in a runtime directory that is used for everybody. Check
+the 'runtimepath' for a directory to use. If there isn't one, set
+'runtimepath' in the |system-vimrc|. Be careful to keep the default
+directories!
+
+
+ *autocmd-osfiletypes*
+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.
+
+The actual type checking depends on which platform you are running Vim
+on; see your system's documentation for details.
+
+To use osfiletype checking in an autocommand you should put a list of types to
+match in angle brackets in place of a pattern, like this: >
+
+ :au BufRead *.html,<&faf;HTML> runtime! syntax/html.vim
+
+This will match:
+
+- Any file whose name ends in `.html'
+- Any file whose type is `&faf' or 'HTML', where the meaning of these types
+ depends on which version of Vim you are using.
+ Unknown types are considered NOT to match.
+
+You can also specify a type and a pattern at the same time (in which case they
+must both match): >
+
+ :au BufRead <&fff>diff*
+
+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'
+option. All of these directories will be searched for plugins and they are
+all loaded. For example, if this command: >
+
+ set runtimepath
+
+produces this output: >
+
+ runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim60
+
+then Vim will load all plugins in these directories: >
+
+ /etc/vim/plugin/
+ ~/.vim/plugin/
+ /usr/local/share/vim/vim60/plugin/
+
+Note that the last one is the value of $VIMRUNTIME which has been expanded.
+
+What if it looks like your plugin is not being loaded? You can find out what
+happens when Vim starts up by using the |-V| argument: >
+ vim -V1
+You will see a lot of messages, in between them is a remark about loading the
+plugins. It starts with: >
+ Searching for "plugin/*.vim" in
+There you can see where Vim looks for your plugin scripts.
+
+==============================================================================
+2. Filetype plugin *filetype-plugins*
+
+When loading filetype plugins has been enabled |:filetype-plugin-on|, options
+will be set and mappings defined. These are all local to the buffer, they
+will not be used for other files.
+
+Defining mappings for a filetype may get in the way of the mappings you
+define yourself. There are a few ways to avoid this:
+1. Set the "maplocalleader" variable to the key sequence you want the mappings
+ to start with. Example: >
+ :let maplocalleader = ","
+< All mappings will then start with a comma instead of the default, which
+ is a backslash. Also see |<LocalLeader>|.
+
+2. Define your own mapping. Example: >
+ :map ,p <Plug>MailQuote
+< You need to check the description of the plugin file below for the
+ functionality it offers and the string to map to.
+ You need to define your own mapping before the plugin is loaded (before
+ editing a file of that type). The plugin will then skip installing the
+ default mapping.
+
+3. Disable defining mappings for a specific filetype by setting a variable,
+ which contains the name of the filetype. For the "mail" filetype this
+ would be: >
+ :let no_mail_maps = 1
+
+4. Disable defining mappings for all filetypes by setting a variable: >
+ :let no_plugin_maps = 1
+<
+
+ *ftplugin-overrule*
+If a global filetype plugin does not do exactly what you want, there are three
+ways to change this:
+
+1. Add a few settings.
+ You must create a new filetype plugin in a directory early in
+ 'runtimepath'. For Unix, for example you could use this file: >
+ vim ~/.vim/ftplugin/fortran.vim
+< You can set those settings and mappings that you would like to add. Note
+ that the global plugin will be loaded after this, it may overrule the
+ settings that you do here. If this is the case, you need to use one of the
+ following two methods.
+
+2. Make a copy of the plugin and change it.
+ You must put the copy in a directory early in 'runtimepath'. For Unix, for
+ example, you could do this: >
+ cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim
+< Then you can edit the copied file to your liking. Since the b:did_ftplugin
+ variable will be set, the global plugin will not be loaded.
+ A disadvantage of this method is that when the distributed plugin gets
+ improved, you will have to copy and modify it again.
+
+3. Overrule the settings after loading the global plugin.
+ You must create a new filetype plugin in a directory from the end of
+ 'runtimepath'. For Unix, for example, you could use this file: >
+ vim ~/.vim/after/ftplugin/fortran.vim
+< In this file you can change just those settings that you want to change.
+
+==============================================================================
+3. Docs for the default filetype plugins. *ftplugin-docs*
+
+
+CHANGELOG *changelog-plugin*
+
+Allows for easy entrance of Changelog entries in Changelog files. There are
+some commands, mappings, and variables worth exploring:
+
+Options:
+'comments' is made empty to not mess up formatting.
+'textwidth' is set to 78, which is standard.
+'formatoptions' the 't' flag is added to wrap when inserting text.
+
+Commands:
+NewChangelogEntry Adds a new Changelog entry in an intelligent fashion
+ (see below).
+
+Local mappings:
+<Leader>o Starts a new Changelog entry in an equally intelligent
+ fashion (see below).
+
+Global mappings:
+ NOTE: The global mappings are accessed by sourcing the
+ ftplugin/changelog.vim file first, e.g. with >
+ runtime ftplugin/man.vim
+< in your |.vimrc|.
+<Leader>o Switches to the ChangeLog buffer opened for the
+ current directory, or opens it in a new buffer if it
+ exists in the current directory. Then it does the
+ same as the local <Leader>o described above.
+
+Variables:
+g:changelog_timeformat The date (and time) format used in ChangeLog entries.
+ The format accepted is the same as for the
+ |strftime()| function.
+ The default is "%Y-%m-%d" which is the standard format
+ for many ChangeLog layouts.
+g:changelog_username The name and email address of the user.
+ The default is deduced from environment variables and
+ system files. It searches /etc/passwd for the comment
+ part of the current user, which informally contains
+ the real name of the user up to the first separating
+ comma. then it checks the $NAME environment variable
+ and finally runs `whoami` and `hostname` to build an
+ email address. The final form is >
+ Full Name <user@host>
+<
+g:changelog_new_date_format
+ The format to use when creating a new date-entry.
+ The following table describes special tokens in the
+ string:
+ %% insert a single '%' character
+ %d insert the date from above
+ %u insert the user from above
+ %c where to position cursor when done
+ The default is "%d %u\n\n\t* %c\n\n", which produces
+ something like (| is where cursor will be, unless at
+ the start of the line where it denotes the beginning
+ of the line) >
+ |2003-01-14 Full Name <user@host>
+ |
+ | * |
+<
+g:changelog_new_entry_format
+ The format used when creating a new entry.
+ The following table describes special tokens in the
+ string:
+ %c where to position cursor when done
+ The default is "\t*%c", which produces something
+ similar to >
+ | * |
+<
+g:changelog_date_entry_search
+ The search pattern to use when searching for a
+ date-entry.
+ The same tokens that can be used for
+ g:changelog_new_date_format can be used here as well.
+ The default is '^\s*%d\_s*%u' which finds lines
+ matching the form >
+ |2003-01-14 Full Name <user@host>
+< and some similar formats.
+
+The Changelog entries are inserted where they add the least amount of text.
+After figuring out the current date and user, the file is searched for an
+entry beginning with the current date and user and if found adds another item
+under it. If not found, a new entry and item is prepended to the beginning of
+the Changelog.
+
+
+FORTRAN *fortran-plugin*
+
+Options:
+'expandtab' is switched on to avoid tabs as required by the Fortran
+ standards unless the user has set fortran_have_tabs in .vimrc.
+'textwidth' is set to 72 for fixed source format as required by the
+ Fortran standards and to 80 for free source format.
+'formatoptions' is set to break code and comment lines and to preserve long
+ lines. You can format comments with |gq|.
+For further discussion of fortran_have_tabs and the method used for the
+detection of source format see |fortran-syntax|.
+
+
+MAIL *mail-plugin*
+
+Options:
+'modeline' is switched off to avoid the danger of trojan horses, and to
+ avoid that a Subject line with "Vim:" in it will cause an
+ error message.
+'textwidth' is set to 72. This is often recommended for e-mail.
+'formatoptions' is set to break text lines and to repeat the comment leader
+ in new lines, so that a leading ">" for quotes is repeated.
+ You can also format quoted text with |gq|.
+
+Local mappings:
+<LocalLeader>q or \\MailQuote
+ Quotes the text selected in Visual mode, or from the cursor position
+ to the end of the file in Normal mode. This means "> " is inserted in
+ each line.
+
+MAN *man-plugin* *:Man*
+
+Displays a manual page in a nice way. Also see the user manual
+|find-manpage|.
+
+To start using the ":Man" command before any manual page was loaded, source
+this script from your startup vimrc file: >
+
+ runtime ftplugin/man.vim
+
+Options:
+'iskeyword' the '.' character is added to be able to use CTRL-] on the
+ manual page name.
+
+Commands:
+Man {name} Display the manual page for {name} in a window.
+Man {number} {name}
+ Display the manual page for {name} in a section {number}.
+
+Global mapping:
+<Leader>K Displays the manual page for the word under the cursor.
+
+Local mappings:
+CTRL-] Jump to the manual page for the word under the cursor.
+CTRL-T Jump back to the previous manual page.
+
+
+RPM SPEC *spec-plugin*
+
+Since the text for this plugin is rather long it has been put in a separate
+file: |pi_spec.txt|.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
new file mode 100644
index 000000000..cbe1237ea
--- /dev/null
+++ b/runtime/doc/fold.txt
@@ -0,0 +1,581 @@
+*fold.txt* For Vim version 7.0aa. Last change: 2004 May 20
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Folding *Folding* *folding*
+
+You can find an introduction on folding in chapter 28 of the user manual.
+|usr_28.txt|
+
+1. Fold methods |fold-methods|
+2. Fold commands |fold-commands|
+3. Fold options |fold-options|
+4. Behavior of folds |fold-behavior|
+
+{Vi has no Folding}
+{not available when compiled without the +folding feature}
+
+==============================================================================
+1. Fold methods *fold-methods*
+
+The folding method can be set with the 'foldmethod' option.
+
+When setting 'foldmethod' to a value other than "manual", all folds are
+deleted and new ones created. Switching to the "manual" method doesn't remove
+the existing folds. This can be used to first define the folds automatically
+and then change them manually.
+
+There are six methods to select folds:
+ manual manually define folds
+ indent more indent means a higher fold level
+ expr specify an expression to define folds
+ syntax folds defined by syntax highlighting
+ diff folds for unchanged text
+ marker folds defined by markers in the text
+
+
+MANUAL *fold-manual*
+
+Use commands to manually define the fold regions. This can also be used by a
+script that parses text to find folds.
+
+The level of a fold is only defined by its nesting. To increase the fold
+level of a fold for a range of lines, define a fold inside it that has the
+same lines.
+
+The manual folds are lost when you abandon the file. To save the folds use
+the |:mkview| command. The view can be restored later with |:loadview|.
+
+
+INDENT *fold-indent*
+
+The folds are automatically defined by the indent of the lines.
+
+The foldlevel is computed from the indent of the line, divided by the
+'shiftwidth' (rounded down). A sequence of lines with the same or higher fold
+level form a fold, with the lines with a higher level forming a nested fold.
+
+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
+with a character in 'foldignore'. White space is skipped before checking for
+characters in 'foldignore'. For C use "#" to ignore preprocessor lines.
+
+When you want to ignore lines in another way, use the 'expr' method. The
+|indent()| function can be used in 'foldexpr' to get the indent of a line.
+
+
+EXPR *fold-expr*
+
+The folds are automatically defined by their foldlevel, like with the "indent"
+method. The value of the 'foldexpr' option is evaluated to get the foldlevel
+of a line. Examples:
+This will create a fold for all consecutive lines that start with a Tab: >
+ :set foldexpr=getline(v:lnum)[0]==\"\\t\"
+This will call a function to compute the fold level: >
+ :set foldexpr=MyFoldLevel(v:lnum)
+This will make a fold out of paragraphs separated by blank lines: >
+ :set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
+this does the same: >
+ :set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
+
+Note that backslashes must be used to escape characters that ":set" handles
+differently (space, backslash, double quote, etc., see |option-backslash|).
+
+These are the conditions with which the expression is evaluated:
+- The current buffer and window are set for the line.
+- The variable "v:lnum" is set to the line number.
+- The result is used for the fold level in this way:
+ value meaning ~
+ 0 the line is not in a fold
+ 1, 2, .. the line is in a fold with this level
+ -1 the fold level is undefined, use the fold level of a
+ line before or after this line, whichever is the
+ lowest.
+ "=" use fold level from the previous line
+ "a1", "a2", .. add one, two, .. to the fold level of the previous
+ line
+ "s1", "s2", .. subtract one, two, .. from the fold level of the
+ previous line
+ "<1", "<2", .. a fold with this level ends at this line
+ ">1", ">2", .. a fold with this level starts at this line
+
+It is not required to mark the start (end) of a fold with ">1" ("<1"), a fold
+will also start (end) when the fold level is higher (lower) than the fold
+level of the previous line.
+
+There must be no side effects from the expression. The text in the buffer,
+cursor position, the search patterns, options etc. must not be changed.
+
+If there is some error in the expression, or the resulting value isn't
+recognized, there is no error message and the fold level will be zero.
+For debugging the 'debug' option can be set to "msg", the error messages will
+be visible then.
+
+Note: Since the expression has to be evaluated for every line, this fold
+method can be very slow!
+
+Try to avoid the "=", "a" and "s" return values, since Vim often has to search
+backwards for a line for which the fold level is defined. This can be slow.
+
+|foldlevel()| can be useful to compute a fold level relative to a previous
+fold level. But note that foldlevel() may return -1 if the level is not known
+yet. And it returns the level at the start of the line, while a fold might
+end in that line.
+
+
+SYNTAX *fold-syntax*
+
+A fold is defined by syntax items that have the "fold" argument. |:syn-fold|
+
+The fold level is defined by nesting folds. The nesting of folds is limited
+with 'foldnestmax'.
+
+Be careful to specify proper syntax syncing. If this is not done right, folds
+may differ from the displayed highlighting. This is especially relevant when
+using patterns that match more than one line. In case of doubt, try using
+brute-force syncing: >
+ :syn sync fromstart
+
+
+DIFF *fold-diff*
+
+The folds are automatically defined for text that is not part of a change or
+close to a change.
+
+This method only works properly when the 'diff' option is set for the current
+window and changes are being displayed. Otherwise the whole buffer will be
+one big fold.
+
+The 'diffopt' option can be used to specify the context. That is, the number
+of lines between the fold and a change that are not included in the fold. For
+example, to use a context of 8 lines: >
+ :set diffopt=filler,context:8
+The default context is six lines.
+
+When 'scrollbind' is also set, Vim will attempt to keep the same folds open in
+other diff windows, so that the same text is visible.
+
+
+MARKER *fold-marker*
+
+Markers in the text tell where folds start and end. This allows you to
+precisely specify the folds. This will allow deleting and putting a fold,
+without the risk of including the wrong lines. The 'foldtext' option is
+normally set such that the text before the marker shows up in the folded line.
+This makes it possible to give a name to the fold.
+
+Markers can have a level included, or can use matching pairs. Including a
+level is easier, you don't have to add end markers and avoid problems with
+non-matching marker pairs. Example: >
+ /* global variables {{{1 */
+ int varA, varB;
+
+ /* functions {{{1 */
+ /* funcA() {{{2 */
+ void funcA() {}
+
+ /* funcB() {{{2 */
+ void funcB() {}
+
+A fold starts at a "{{{" marker. The following number specifies the fold
+level. What happens depends on the difference between the current fold level
+and the level given by the marker:
+1. If a marker with the same fold level is encountered, the previous fold
+ ends and another fold with the same level starts.
+2. If a marker with a higher fold level is found, a nested fold is started.
+3. if a marker with a lower fold level is found, all folds up to and including
+ this level end and a fold with the specified level starts.
+
+The number indicates the fold level. A zero cannot be used.
+You can use "}}}" with a digit to indicate the level of the fold that
+ends. The fold level of the following line will be one less than the
+indicated level. Note that Vim doesn't look back to the level of the matching
+marker (that would take too much time). Example: >
+
+ {{{1
+ fold level here is 1
+ {{{3
+ fold level here is 3
+ }}}3
+ fold level here is 2
+
+You can also use matching pairs of "{{{" and "}}}" markers to define folds.
+Each "{{{" increases the fold level by one, each "}}}" decreases the fold
+level by one. Be careful to keep the markers matching! Example: >
+
+ {{{
+ fold level here is 1
+ {{{
+ fold level here is 2
+ }}}
+ fold level here is 1
+
+You can mix using markers with a number and without a number. A useful way of
+doing this is to use numbered markers for large folds, and unnumbered markers
+locally in a function. For example use level one folds for the sections of
+your file like "structure definitions", "local variables" and "functions".
+Use level 2 markers for each definition and function, Use unnumbered markers
+inside functions. When you make changes in a function to split up folds, you
+don't have to renumber the markers.
+
+The markers can be set with the 'foldmarker' option. It is recommended to
+keep this at the default value of "{{{,}}}", so that files can be exchanged
+between Vim users. Only change it when it is required for the file (e.g., it
+contains markers from another folding editor, or the default markers cause
+trouble for the language of the file).
+
+ *fold-create-marker*
+"zf" can be used to create a fold defined by markers. Vim will insert the
+markers for you. Vim will append the start and end marker, as specified with
+'foldmarker'. The markers are appended to the end of the line.
+'commentstring' is used if it isn't empty.
+This does not work properly when:
+- The line already contains a marker with a level number. Vim then doesn't
+ know what to do.
+- Folds nearby use a level number in their marker which gets in the way.
+- The line is inside a comment, 'commentstring' isn't empty and nested
+ comments don't work. For example with C: adding /* {{{ */ inside a comment
+ will truncate the existing comment. Either put the marker before or after
+ the comment, or add the marker manually.
+Generally it's not a good idea to let Vim create markers when you already have
+markers with a level number.
+
+ *fold-delete-marker*
+"zd" can be used to delete a fold defined by markers. Vim will delete the
+markers for you. Vim will search for the start and end markers, as specified
+with 'foldmarker', at the start and end of the fold. When the text around the
+marker matches with 'commentstring', that text is deleted as well.
+This does not work properly when:
+- A line contains more than one marker and one of them specifies a level.
+ Only the first one is removed, without checking if this will have the
+ desired effect of deleting the fold.
+- The marker contains a level number and is used to start or end several folds
+ at the same time.
+
+==============================================================================
+2. Fold commands *fold-commands* *E490*
+
+All folding commands start with "z". Hint: the "z" looks like a folded piece
+of paper, if you look at it from the side.
+
+
+CREATING AND DELETING FOLDS ~
+ *zf* *E350*
+zf{motion} or
+{Visual}zf Operator to create a fold.
+ This only works when 'foldmethod' is "manual" or "marker".
+ The new fold will be closed for the "manual" method.
+ 'foldenable' will be set.
+ Also see |fold-create-marker|.
+
+ *zF*
+zF Create a fold for N lines. Works like "zf".
+
+:{range}fo[ld] *:fold* *:fo*
+ Create a fold for the lines in {range}. Works like "zf".
+
+ *zd* *E351*
+zd Delete one fold at the cursor. When the cursor is on folded
+ line, that fold is deleted. Nested folds are moved one level
+ up. In Visual mode all folds (partially) in the selected area
+ are deleted. Careful: This easily deletes more folds than you
+ expect and there is no undo.
+ This only works when 'foldmethod' is "manual" or "marker".
+ Also see |fold-delete-marker|.
+
+ *zD*
+zD Delete folds recursively at the cursor. In Visual mode all
+ folds (partially) in the selected area and all nested folds in
+ them are deleted.
+ This only works when 'foldmethod' is "manual" or "marker".
+ Also see |fold-delete-marker|.
+
+ *zE* *E352*
+zE Eliminate all folds in the window.
+ This only works when 'foldmethod' is "manual" or "marker".
+ Also see |fold-delete-marker|.
+
+
+OPENING AND CLOSING FOLDS ~
+
+A fold smaller than 'foldminlines' will always be displayed like it was open.
+Therefore the commands below may work differently on small folds.
+
+ *zo*
+zo Open one fold under the cursor. When a count is given, that
+ many folds deep will be opened. In Visual mode one level of
+ folds is opened for all lines in the selected area.
+
+ *zO*
+zO Open all folds under the cursor recursively. Folds that don't
+ contain the cursor line are unchanged.
+ In Visual mode it opens all folds that are in the selected
+ area, also those that are only partly selected.
+
+ *zc*
+zc Close one fold under the cursor. When a count is given, that
+ many folds deep are closed. In Visual mode one level of folds
+ is closed for all lines in the selected area.
+ 'foldenable' will be set.
+
+ *zC*
+zC Close all folds under the cursor recursively. Folds that
+ don't contain the cursor line are unchanged.
+ In Visual mode it closes all folds that are in the selected
+ area, also those that are only partly selected.
+ 'foldenable' will be set.
+
+ *za*
+za When on a closed fold: open it. When folds are nested, you
+ may have to use "za" several times. When a count is given,
+ that many closed folds are opened.
+ When on an open fold: close it and set 'foldenable'. This
+ will only close one level, since using "za" again will open
+ the fold. When a count is given that many folds will be
+ closed (that's not the same as repeating "za" that many
+ times).
+
+ *zA*
+zA When on a closed fold: open it recursively.
+ When on an open fold: close it recursively and set
+ 'foldenable'.
+
+ *zv*
+zv View cursor line: Open just enough folds to make the line in
+ which the cursor is located not folded.
+
+ *zx*
+zx Update folds: Undo manually opened and closed folds: re-apply
+ 'foldlevel', then do "zv": View cursor line.
+
+ *zX*
+zX Undo manually opened and closed folds: re-apply 'foldlevel'.
+
+ *zm*
+zm Fold more: Subtract one from 'foldlevel'. If 'foldlevel' was
+ already zero nothing happens.
+ 'foldenable' will be set.
+
+ *zM*
+zM Close all folds: set 'foldlevel' to 0.
+ 'foldenable' will be set.
+
+ *zr*
+zr Reduce folding: Add one to 'foldlevel'.
+
+ *zR*
+zR Open all folds. This sets 'foldlevel' to highest fold level.
+
+ *:foldo* *:foldopen*
+:{range}foldo[pen][!]
+ Open folds in {range}. When [!] is added all folds are
+ opened. Useful to see all the text in {range}. Without [!]
+ one level of folds is opened.
+
+ *:foldc* *:foldclose*
+:{range}foldc[lose][!]
+ Close folds in {range}. When [!] is added all folds are
+ closed. Useful to hide all the text in {range}. Without [!]
+ one level of folds is closed.
+
+ *zn*
+zn Fold none: reset 'foldenable'. All folds will be open.
+
+ *zN*
+zN Fold normal: set 'foldenable'. All folds will be as they
+ were before.
+
+ *zi*
+zi Invert 'foldenable'.
+
+
+MOVING OVER FOLDS ~
+ *[z*
+[z Move to the start of the current open fold. If already at the
+ start, move to the start of the fold that contains it. If
+ there is no containing fold, the command fails.
+ When a count is used, repeats the command N times.
+
+ *]z*
+]z Move to the end of the current open fold. If already at the
+ end, move to the end of the fold that contains it. If there
+ is no containing fold, the command fails.
+ When a count is used, repeats the command N times.
+
+ *zj*
+zj Move downwards to the start of the next fold. A closed fold
+ is counted as one fold.
+ When a count is used, repeats the command N times.
+ This command can be used after an |operator|.
+
+ *zk*
+zk Move upwards to the end of the previous fold. A closed fold
+ is counted as one fold.
+ When a count is used, repeats the command N times.
+ This command can be used after an |operator|.
+
+
+EXECUTING COMMANDS ON FOLDS ~
+
+:[range]foldd[oopen] {cmd} *:foldd* *:folddoopen*
+ Execute {cmd} on all lines that are not in a closed fold.
+ When [range] is given, only these lines are used.
+ Each time {cmd} is executed the cursor is positioned on the
+ line it is executed for.
+ This works like the ":global" command: First all lines that
+ are not in a closed fold are marked. Then the {cmd} is
+ executed for all marked lines. Thus when {cmd} changes the
+ folds, this has no influence on where it is executed (except
+ when lines are deleted, of course).
+ Example: >
+ :folddoopen s/end/loop_end/ge
+< Note the use of the "e" flag to avoid getting an error message
+ where "end" doesn't match.
+
+:[range]folddoc[losed] {cmd} *:folddoc* *:folddoclosed*
+ Execute {cmd} on all lines that are in a closed fold.
+ Otherwise like ":folddoopen".
+
+==============================================================================
+3. Fold options *fold-options*
+
+COLORS *fold-colors*
+
+The colors of a closed fold are set with the Folded group |hl-Folded|. The
+colors of the fold column are set with the FoldColumn group |hl-FoldColumn|.
+Example to set the colors: >
+
+ :highlight Folded guibg=grey guifg=blue
+ :highlight FoldColumn guibg=darkgrey guifg=white
+
+
+FOLDLEVEL *fold-foldlevel*
+
+'foldlevel' is a number option: The higher the more folded regions are open.
+When 'foldlevel' is 0, all folds are closed.
+When 'foldlevel' is positive, some folds closed.
+When 'foldlevel' is very high, all folds are open.
+'foldlevel' is applied when it is changed. After that manually folds can be
+opened and closed.
+When increased, folds above the new level are opened. No manually opened
+folds will be closed.
+When decreased, folds above the new level are closed. No manually closed
+folds will be opened.
+
+
+FOLDTEXT *fold-foldtext*
+
+'foldtext' is a string option that specifies an expression. This expression
+is evaluated to obtain the text displayed for a closed fold. Example: >
+
+ :set foldtext=v:folddashes.substitute(getline(v:foldstart),'/\\*\\\|\\*/\\\|{{{\\d\\=','','g')
+
+This shows the first line of the fold, with "/*", "*/" and "{{{" removed.
+Note the use of backslashes to avoid some characters to be interpreted by the
+":set" command. It's simpler to define a function and call that: >
+
+ :set foldtext=MyFoldText()
+ :function MyFoldText()
+ : let line = getline(v:foldstart)
+ : let sub = substitute(line, '/\*\|\*/\|{{{\d\=', '', 'g')
+ : return v:folddashes . sub
+ :endfunction
+
+Evaluating 'foldtext' is done in the |sandbox|. The current window is set to
+the window that displays the line. Errors are ignored.
+
+The default value is |foldtext()|. This returns a reasonable text for most
+types of folding. If you don't like it, you can specify your own 'foldtext'
+expression. It can use these special Vim variables:
+ v:foldstart line number of first line in the fold
+ v:foldend line number of last line in the fold
+ v:folddashes a string that contains dashes to represent the
+ foldlevel.
+ v:foldlevel the foldlevel of the fold
+
+In the result a TAB is replaced with a space and unprintable characters are
+made into printable characters.
+
+The resulting line is truncated to fit in the window, it never wraps.
+When there is room after the text, it is filled with the character specified
+by 'fillchars'.
+
+Note that backslashes need to be used for characters that the ":set" command
+handles differently: Space, backslash and double-quote. |option-backslash|
+
+
+FOLDCOLUMN *fold-foldcolumn*
+
+'foldcolumn' is a number, which sets the width for a column on the side of the
+window to indicate folds. When it is zero, there is no foldcolumn. A normal
+value is 4 or 5. The minimal useful value is 2. The maximum is 12.
+
+An open fold is indicated with a column that has a '-' at the top and '|'
+characters below it. This column stops where the open fold stops. When folds
+nest, the nested fold is one character right of the fold it's contained in.
+
+A closed fold is indicated with a '+'.
+
+Where the fold column is too narrow to display all nested folds, digits are
+shown to indicate the nesting level.
+
+The mouse can also be used to open and close folds by clicking in the
+fold column:
+- Click on a '+' to open the closed fold at this row.
+- Click on any other non-blank character to close the open fold at this row.
+
+
+OTHER OPTIONS
+
+'foldenable' 'fen': Open all folds while not set.
+'foldexpr' 'fde': Expression used for "expr" folding.
+'foldignore' 'fdi': Characters used for "indent" folding.
+'foldmarker' 'fmr': Defined markers used for "marker" folding.
+'foldmethod' 'fdm': Name of the current folding method.
+'foldminlines' 'fml': Minimum number of screen lines for a fold to be
+ displayed closed.
+'foldnestmax' 'fdn': Maximum nesting for "indent" and "syntax" folding.
+'foldopen' 'fdo': Which kinds of commands open closed folds.
+'foldclose' 'fcl': When the folds not under the cursor are closed.
+
+==============================================================================
+4. Behavior of folds *fold-behavior*
+
+When moving the cursor upwards or downwards and when scrolling, the cursor
+will move to the first line of a sequence of folded lines. When the cursor is
+already on a folded line, it moves to the next unfolded line or the next
+closed fold.
+
+While the cursor is on folded lines, the cursor is always displayed in the
+first column. The ruler does show the actual cursor position, but since the
+line is folded, it cannot be displayed there.
+
+Many movement commands handle a sequence of folded lines like an empty line.
+For example, the "w" command stops once in the first column.
+
+When in Insert mode, the cursor line is never folded. That allows you to see
+what you type!
+
+When using an operator, a closed fold is included as a whole. Thus "dl"
+deletes the whole closed fold under the cursor.
+
+For Ex commands the range is adjusted to always start at the first line of a
+fold and end at the last line of a fold. Thus this command: >
+ :s/foo/bar/g
+when used with the cursor on a closed fold, will replace "foo" with "bar" in
+all lines of the fold.
+This does not happen for |:folddoopen| and |:folddoclosed|.
+
+When editing a buffer that has been edited before, the last used folding
+settings are used again. For manual folding the defined folds are restored.
+For all folding methods the manually opened and closed folds are restored.
+If this buffer has been edited in this window, the values from back then are
+used. Otherwise the values from the window where the buffer was edited last
+are used.
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
new file mode 100644
index 000000000..430a3eb5c
--- /dev/null
+++ b/runtime/doc/gui.txt
@@ -0,0 +1,951 @@
+*gui.txt* For Vim version 7.0aa. Last change: 2004 Jun 02
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Vim's Graphical User Interface *gui* *GUI*
+
+1. Starting the GUI |gui-start|
+2. Scrollbars |gui-scrollbars|
+3. Mouse Control |gui-mouse|
+4. Making GUI Selections |gui-selections|
+5. Menus |menus|
+6. Extras |gui-extras|
+7. Shell Commands |gui-shell|
+
+Other GUI documentation:
+|gui_x11.txt| For specific items of the X11 GUI.
+|gui_w32.txt| For specific items of the Win32 GUI.
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Starting the GUI *gui-start* *E229* *E233*
+
+First you must make sure you actually have a version of Vim with the GUI code
+included. You can check this with the ":version" command, it should include
+"+GUI_Athena", "+GUI_BeOS", "+GUI_GTK", "+GUI_Motif" or "MS-Windows ... bit
+GUI version".
+
+How to start the GUI depends on the system used. Mostly you can run the
+GUI version of Vim with:
+ gvim [options] [files...]
+
+The X11 version of Vim can run both in GUI and in non-GUI mode. See
+|gui-x11-start|.
+
+ *gui-init* *gvimrc* *.gvimrc* *_gvimrc*
+When the GUI starts up initializations are carried out, in this order:
+- The termcap options are reset to their default value for the GUI.
+- If the system menu file exists, it is sourced. The name of this file is
+ normally "$VIMRUNTIME/menu.vim". You can check this with ":version". Also
+ see |$VIMRUNTIME|. To skip loading the system menu include 'M' in
+ 'guioptions'. *buffers-menu* *no_buffers_menu*
+ The system menu file includes a "Buffers" menu. If you don't want this, set
+ the "no_buffers_menu" variable in your .vimrc (not .gvimrc!): >
+ :let no_buffers_menu = 1
+< NOTE: Switching on syntax highlighting also loads the menu file, thus
+ disabling the Buffers menu must be done before ":syntax on".
+ The path names are truncated to 35 characters. You can truncate them at a
+ different length, for example 50, like this: >
+ :let bmenu_max_pathlen = 50
+- If the "-U {gvimrc}" command-line option has been used when starting Vim,
+ the {gvimrc} file will be read for initializations. The following
+ initializations are skipped.
+- For Unix and MS-Windows, if the system gvimrc exists, it is sourced. The
+ name of this file is normally "$VIM/gvimrc". You can check this with
+ ":version". Also see |$VIM|.
+- The following are tried, and only the first one that exists is used:
+ - If the GVIMINIT environment variable exists and is not empty, it is
+ executed as an Ex command.
+ - If the user gvimrc file exists, it is sourced. The name of this file is
+ normally "$HOME/.gvimrc". You can check this with ":version".
+ - For Win32, when $HOME is not set, "$VIM\_gvimrc" is used.
+ - When a "_gvimrc" file is not found, ".gvimrc" is tried too. And vice
+ versa.
+- If the 'exrc' option is set (which is NOT the default) the file ./.gvimrc
+ is sourced, if it exists and isn't the same file as the system or user
+ gvimrc file. If this file is not owned by you, some security restrictions
+ apply. When ".gvimrc" is not found, "_gvimrc" is tried too. For Macintosh
+ and DOS/Win32 "_gvimrc" is tried first.
+
+NOTE: All but the first one are not carried out if Vim was started with
+"-u NONE" and no "-U" argument was given, or when started with "-U NONE".
+
+All this happens AFTER the normal Vim initializations, like reading your
+.vimrc file. See |initialization|.
+But the GUI window is only opened after all the initializations have been
+carried out. If you want some commands to be executed just after opening the
+GUI window, use the |GUIEnter| autocommand event. Example: >
+ :autocommand GUIEnter * winpos 100 50
+
+You can use the gvimrc files to set up your own customized menus (see |:menu|)
+and initialize other things that you may want to set up differently from the
+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
+
+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
+documented in |options.txt| with all the other options.
+
+If using the Motif or Athena version of the GUI (but not for the GTK+ or Win32
+version), a number of X resources are available. See |gui-resources|.
+
+Another way to set the colors for different occasions is with highlight
+groups. The "Normal" group is used to set the background and foreground
+colors. Example (which looks nice): >
+
+ :highlight Normal guibg=grey90
+
+The "guibg" and "guifg" settings override the normal background and
+foreground settings. The other settings for the Normal highlight group are
+not used. Use the 'guifont' option to set the font.
+
+Also check out the 'guicursor' option, to set the colors for the cursor in
+various modes.
+
+Vim tries to make the window fit on the screen when it starts up. This avoids
+that you can't see part of it. On the X Window System this requires a bit of
+guesswork. You can change the height that is used for the window title and a
+task bar with the 'guiheadroom' option.
+
+ *:winp* *:winpos* *E188*
+:winp[os]
+ Display current position of the top left corner of the GUI vim
+ window in pixels. Does not work in all versions.
+
+:winp[os] {X} {Y} *E466*
+ Put the GUI vim window at the given {X} and {Y} coordinates.
+ The coordinates should specify the position in pixels of the
+ top left corner of the window. Does not work in all versions.
+ Does work in an (new) xterm |xterm-color|.
+ When the GUI window has not been opened yet, the values are
+ remembered until the window is opened. The position is
+ adjusted to make the window fit on the screen (if possible).
+
+ *:win* *:winsize* *E465*
+:win[size] {width} {height}
+ Set the window height to {width} by {height} characters.
+ Obsolete, use ":set lines=11 columns=22".
+ If you get less lines than expected, check the 'guiheadroom'
+ option.
+
+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
+
+==============================================================================
+2. Scrollbars *gui-scrollbars*
+
+There are vertical scrollbars and a horizontal scrollbars. You may
+configure which ones appear with the 'guioptions' option.
+
+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)
+
+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
+only useful when 'nowrap' is set.
+
+
+VERTICAL SCROLLBARS *gui-vert-scroll*
+
+Each Vim window has a scrollbar next to it which may be scrolled up and down
+to move through the text in that buffer. The size of the scrollbar-thumb
+indicates the fraction of the buffer which can be seen in the window.
+When the scrollbar is dragged all the way down, the last line of the file
+will appear in the top of the window.
+
+If a window is shrunk to zero height (by the growth of another window) its
+scrollbar disappears. It reappears when the window is restored.
+
+If a window is vertically split, it will get a scrollbar when it is the
+current window and when, taking the middle of the current window and drawing a
+vertical line, this line goes through the window.
+When there are scrollbars on both sides, and the middle of the current window
+is on the left half, the right scrollbar column will contain scrollbars for
+the rightmost windows. The same happens on the other side.
+
+
+HORIZONTAL SCROLLBARS *gui-horiz-scroll*
+
+The horizontal scrollbar (at the bottom of the Vim GUI) may be used to
+scroll text sideways when the 'wrap' option is turned off. The
+scrollbar-thumb size is such that the text of the longest visible line may be
+scrolled as far as possible left and right. The cursor is moved when
+necessary, it must remain on a visible character (unless 'virtualedit' is
+set).
+
+Computing the length of the longest visible takes quite a bit of computation,
+and it has to be done every time something changes. If this takes too much
+time or you don't like the cursor jumping to another line, include the 'h'
+flag in 'guioptions'. Then the scrolling is limited by the text of the
+current cursor line.
+
+ *athena-intellimouse*
+If you have an Intellimouse and an X server that supports using the wheel,
+then you can use the wheel to scroll the text up and down in gvim. This works
+with XFree86 4.0 and later, and with some older versions when you add patches.
+See |scroll-mouse-wheel|.
+
+For older versions of XFree86 you must patch your X server. The following
+page has a bit of information about using the Intellimouse on Linux as well as
+links to the patches and X server binaries (may not have the one you need
+though):
+ http://www.inria.fr/koala/colas/mouse-wheel-scroll/
+
+==============================================================================
+3. Mouse Control *gui-mouse*
+
+The mouse only works if the appropriate flag in the 'mouse' option is set.
+When the GUI is switched on, and 'mouse' wasn't set yet, the 'mouse' option is
+automatically set to "a", enabling it for all modes except for the
+|hit-enter| prompt. If you don't want this, a good place to change the
+'mouse' option is the "gvimrc" file.
+
+Other options that are relevant:
+'mousefocus' window focus follows mouse pointer |gui-mouse-focus|
+'mousemodel' what mouse button does which action
+'mousehide' hide mouse pointer while typing text
+'selectmode' whether to start Select mode or Visual mode
+
+A quick way to set these is with the ":behave" command.
+ *:behave* *:be*
+:be[have] {model} Set behavior for mouse and selection. Valid
+ arguments are:
+ mswin MS-Windows behavior
+ xterm Xterm behavior
+
+ Using ":behave" changes these options:
+ option mswin xterm ~
+ 'selectmode' "mouse,key" ""
+ 'mousemodel' "popup" "extend"
+ 'keymodel' "startsel,stopsel" ""
+ 'selection' "exclusive" "inclusive"
+
+In the $VIMRUNTIME directory, there is a script called |mswin.vim|, which will
+also map a few keys to the MS-Windows cut/copy/paste commands. This is NOT
+compatible, since it uses the CTRL-V, CTRL-X and CTRL-C keys. If you don't
+mind, use this command: >
+ :so $VIMRUNTIME/mswin.vim
+
+For scrolling with a wheel on a mouse, see |scroll-mouse-wheel|.
+
+
+3.1 Moving Cursor with Mouse *gui-mouse-move*
+
+Click the left mouse button somewhere in a text buffer where you want the
+cursor to go, and it does!
+This works in when 'mouse' contains ~
+Normal mode 'n' or 'a'
+Visual mode 'v' or 'a'
+Insert mode 'i' or 'a'
+
+Select mode is handled like Visual mode.
+
+You may use this with an operator such as 'd' to delete text from the current
+cursor position to the position you point to with the mouse. That is, you hit
+'d' and then click the mouse somewhere.
+
+ *gui-mouse-focus*
+The 'mousefocus' option can be set to make the keyboard focus follow the
+mouse pointer. This means that the window where the mouse pointer is, is the
+active window. Warning: this doesn't work very well when using a menu,
+because the menu command will always be applied to the top window.
+
+If you are on the ':' line (or '/' or '?'), then clicking the left or right
+mouse button will position the cursor on the ':' line (if 'mouse' contains
+'c', 'a' or 'A').
+
+In any situation the middle mouse button may be clicked to paste the current
+selection.
+
+
+3.2 Selection with Mouse *gui-mouse-select*
+
+The mouse can be used to start a selection. How depends on the 'mousemodel'
+option:
+'mousemodel' is "extend": use the right mouse button
+'mousemodel' is "popup": use the left mouse button, while keeping the Shift
+key pressed.
+
+If there was no selection yet, this starts a selection from the old cursor
+position to the position pointed to with the mouse. If there already is a
+selection then the closest end will be extended.
+
+If 'selectmode' contains "mouse", then the selection will be in Select mode.
+This means that typing normal text will replace the selection. See
+|Select-mode|. Otherwise, the selection will be in Visual mode.
+
+Double clicking may be done to make the selection word-wise, triple clicking
+makes it line-wise, and quadruple clicking makes it rectangular block-wise.
+
+See |gui-selections| on how the selection is used.
+
+
+3.3 Other Text Selection with Mouse *gui-mouse-modeless*
+ *modeless-selection*
+A different kind of selection is used when:
+- in Command-line mode
+- in the Command-line window and pointing in another window
+- at the |hit-enter| prompt
+- whenever the current mode is not in the 'mouse' option
+- when holding the CTRL and SHIFT keys in the GUI
+Since Vim continues like the selection isn't there, and there is no mode
+associated with the selection, this is called modeless selection. Any text in
+the Vim window can be selected. Select the text by pressing the left mouse
+button at the start, drag to the end and release. To extend the selection,
+use the right mouse button when 'mousemodel' is "extend", or the left mouse
+button with the shift key pressed when 'mousemodel' is "popup".
+The middle mouse button pastes the text.
+The selection is removed when the selected text is scrolled or changed.
+On the command line CTRL-Y can be used to copy the selection into the
+clipboard. To do this from Insert mode, use CTRL-O : CTRL-Y <CR>.
+
+
+3.4 Using Mouse on Status Lines *gui-mouse-status*
+
+Clicking the left or right mouse button on the status line below a Vim
+window makes that window the current window. This actually happens on button
+release (to be able to distinguish a click from a drag action).
+
+With the left mouse button a status line can be dragged up and down, thus
+resizing the windows above and below it. This does not change window focus.
+
+The same can be used on the vertical separator: click to give the window left
+of it focus, drag left and right to make windows wider and narrower.
+
+
+3.5 Various Mouse Clicks *gui-mouse-various*
+
+ <S-LeftMouse> Search forward for the word under the mouse click.
+ When 'mousemodel' is "popup" this starts or extends a
+ selection.
+ <S-RightMouse> Search backward for the word under the mouse click.
+ <C-LeftMouse> Jump to the tag name under the mouse click.
+ <C-RightMouse> Jump back to position before the previous tag jump
+ (same as "CTRL-T")
+
+
+3.6 Mouse Mappings *gui-mouse-mapping*
+
+The mouse events, complete with modifiers, may be mapped. Eg: >
+ :map <S-LeftMouse> <RightMouse>
+ :map <S-LeftDrag> <RightDrag>
+ :map <S-LeftRelease> <RightRelease>
+ :map <2-S-LeftMouse> <2-RightMouse>
+ :map <2-S-LeftDrag> <2-RightDrag>
+ :map <2-S-LeftRelease> <2-RightRelease>
+ :map <3-S-LeftMouse> <3-RightMouse>
+ :map <3-S-LeftDrag> <3-RightDrag>
+ :map <3-S-LeftRelease> <3-RightRelease>
+ :map <4-S-LeftMouse> <4-RightMouse>
+ :map <4-S-LeftDrag> <4-RightDrag>
+ :map <4-S-LeftRelease> <4-RightRelease>
+These mappings make selection work the way it probably should in a Motif
+application, with shift-left mouse allowing for extending the visual area
+rather than the right mouse button.
+
+Mouse mapping with modifiers does not work for modeless selection.
+
+
+3.7 Drag and drop *drag-n-drop*
+
+You can drag and drop one or more files into the Vim window, where they will
+be opened as if a |:drop| command was used.
+
+If you hold down Shift while doing this, Vim changes to the first dropped
+file's directory. If you hold Ctrl Vim will always split a new window for the
+file. Otherwise it's only done if the current buffer has been changed.
+
+You can also drop a directory on Vim. This starts the explorer plugin for
+that directory (assuming it was enabled, otherwise you'll get an error
+message). Keep Shift pressed to change to the directory instead.
+
+If Vim happens to be editing a command line, the names of the dropped files
+and directories will be inserted at the cursor. This allows you to use these
+names with any Ex command. Special characters (space, tab, double quote and
+'|'; backslash on non-MS-Windows systems) will be escaped.
+
+==============================================================================
+4. Making GUI Selections *gui-selections*
+
+ *quotestar*
+You may make selections with the mouse (see |gui-mouse-select|), or by using
+Vim's Visual mode (see |v|). If 'a' is present in 'guioptions', then
+whenever a selection is started (Visual or Select mode), or when the selection
+is changed, Vim becomes the owner of the windowing system's primary selection
+(on MS-Windows the |gui-clipboard| is used; under X11, the |x11-selection| is
+used - you should read whichever of these is appropriate now).
+
+ *clipboard*
+There is a special register for storing this selection, it is the "*
+register. Nothing is put in here unless the information about what text is
+selected is about to change (eg with a left mouse click somewhere), or when
+another application wants to paste the selected text. Then the text is put
+in the "* register. For example, to cut a line and make it the current
+selection/put it on the clipboard: >
+
+ "*dd
+
+Similarly, when you want to paste a selection from another application, e.g.,
+by clicking the middle mouse button, the selection is put in the "* register
+first, and then 'put' like any other register. For example, to put the
+selection (contents of the clipboard): >
+
+ "*p
+
+When using this register under X11, also see |x11-selection|. This also
+explains the related "+ register.
+
+Note that when pasting text from one Vim into another separate Vim, the type
+of selection (character, line, or block) will also be copied. For other
+applications the type is always character. However, if the text gets
+transferred via the |x11-cut-buffer|, the selection type is ALWAYS lost.
+
+When the "unnamed" string is included in the 'clipboard' option, the unnamed
+register is the same as the "* register. Thus you can yank to and paste the
+selection without prepending "* to commands.
+
+==============================================================================
+5. Menus *menus*
+
+For an introduction see |usr_42.txt| in the user manual.
+
+
+5.1 Using Menus *using-menus*
+
+Basically, menus can be used just like mappings. You can define your own
+menus, as many as you like.
+Long-time Vim users won't use menus much. But the power is in adding your own
+menus and menu items. They are most useful for things that you can't remember
+what the key sequence was.
+
+For creating menus in a different language, see |:menutrans|.
+
+ *menu.vim*
+The default menus are read from the file "$VIMRUNTIME/menu.vim". See
+|$VIMRUNTIME| for where the path comes from. You can set up your own menus.
+Starting off with the default set is a good idea. You can add more items, or,
+if you don't like the defaults at all, start with removing all menus
+|:unmenu-all|. You can also avoid the default menus being loaded by adding
+this line to your .vimrc file (NOT your .gvimrc file!): >
+ :let did_install_default_menus = 1
+If you also want to avoid the Syntax menu: >
+ :let did_install_syntax_menu = 1
+If you do want the Syntax menu but not all the entries for each available
+syntax file (which take quite a bit of time to load): >
+ :let skip_syntax_sel_menu = 1
+<
+ *console-menus*
+Although this documentation is in the GUI section, you can actually use menus
+in console mode too. You will have to load |menu.vim| explicitly then, it is
+not done by default. You can use the |:emenu| command and command-line
+completion with 'wildmenu' to access the menu entries almost like a real menu
+system. To do this, put these commands in your .vimrc file: >
+ :source $VIMRUNTIME/menu.vim
+ :set wildmenu
+ :set cpo-=<
+ :set wcm=<C-Z>
+ :map <F4> :emenu <C-Z>
+Pressing <F4> will start the menu. You can now use the cursor keys to select
+a menu entry. Hit <Enter> to execute it. Hit <Esc> if you want to cancel.
+This does require the |+menu| feature enabled at compile time.
+
+ *tear-off-menus*
+GTK+ and Motif support Tear-off menus. These are sort of sticky menus or
+pop-up menus that are present all the time. If the resizing does not work
+correctly, this may be caused by using something like "Vim*geometry" in the
+defaults. Use "Vim.geometry" instead.
+
+The Win32 GUI version emulates Motif's tear-off menus. Actually, a Motif user
+will spot the differences easily, but hopefully they're just as useful. You
+can also use the |:tearoff| command together with |hidden-menus| to create
+floating menus that do not appear on the main menu bar.
+
+
+5.2 Creating New Menus *creating-menus*
+
+ *:me* *:menu* *:noreme* *:noremenu*
+ *:am* *:amenu* *:an* *:anoremenu*
+ *:nme* *:nmenu* *:nnoreme* *:nnoremenu*
+ *:ome* *:omenu* *:onoreme* *:onoremenu*
+ *:vme* *:vmenu* *:vnoreme* *:vnoremenu*
+ *:ime* *:imenu* *:inoreme* *:inoremenu*
+ *:cme* *:cmenu* *:cnoreme* *:cnoremenu*
+ *E330* *E327* *E331* *E336* *E333*
+ *E328* *E329* *E337*
+To create a new menu item, use the ":menu" commands. They are mostly like
+the ":map" set of commands but the first argument is a menu item name, given
+as a path of menus and submenus with a '.' between them. eg: >
+
+ :menu File.Save :w<CR>
+ :inoremenu File.Save <C-O>:w<CR>
+ :menu Edit.Big\ Changes.Delete\ All\ Spaces :%s/[ ^I]//g<CR>
+
+This last one will create a new item in the menu bar called "Edit", holding
+the mouse button down on this will pop up a menu containing the item
+"Big Changes", which is a sub-menu containing the item "Delete All Spaces",
+which when selected, performs the operation.
+
+Special characters in a menu name:
+
+ & The next character is the shortcut key. Make sure each
+ shortcut key is only used once in a (sub)menu. If you want to
+ insert a literal "&" in the menu name use "&&".
+ <Tab> Separates the menu name from right-aligned text. This can be
+ used to show the equivalent typed command. The text "<Tab>"
+ can be used here for convenience. If you are using a real
+ Tab, don't forget to put a backslash before it!
+Example: >
+
+ :amenu &File.&Open<Tab>:e :browse e<CR>
+
+[typed literally]
+With the shortcut "F" (while keeping the <Alt> key pressed), and then "O",
+this menu can be used. The second part is shown as "Open :e". The ":e"
+is right aligned, and the "O" is underlined, to indicate it is the shortcut.
+
+The ":amenu" command can be used to define menu entries for all modes at once.
+To make the command work correctly, a character is automatically inserted for
+some modes:
+ mode inserted appended ~
+ Normal nothing nothing
+ Visual <C-C> <C-\><C-G>
+ Insert <C-O>
+ Cmdline <C-C> <C-\><C-G>
+ Op-pending <C-C> <C-\><C-G>
+
+Appending CTRL-\ CTRL-G is for going back to insert mode when 'insertmode' is
+set. |CTRL-\_CTRL-G|
+
+Example: >
+
+ :amenu File.Next :next^M
+
+is equal to: >
+
+ :nmenu File.Next :next^M
+ :vmenu File.Next ^C:next^M^\^G
+ :imenu File.Next ^O:next^M
+ :cmenu File.Next ^C:next^M^\^G
+ :omenu File.Next ^C:next^M^\^G
+
+Careful: In Insert mode this only works for a SINGLE Normal mode command,
+because of the CTRL-O. If you have two or more commands, you will need to use
+the ":imenu" command. For inserting text in any mode, you can use the
+expression register: >
+
+ :amenu Insert.foobar "='foobar'<CR>P
+
+Note that the '<' and 'k' flags in 'cpoptions' also apply here (when
+included they make the <> form and raw key codes not being recognized).
+
+Note that <Esc> in Cmdline mode executes the command, like in a mapping. This
+is Vi compatible. Use CTRL-C to quit Cmdline mode.
+
+ *:menu-<silent>* *:menu-silent*
+To define a menu which will not be echoed on the command line, add
+"<silent>" as the first argument. Example: >
+ :menu <silent> Settings.Ignore\ case :set ic<CR>
+The ":set ic" will not be echoed when using this menu. Messages from the
+executed command are still given though. To shut them up too, add a ":silent"
+in the executed command: >
+ :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR>
+<
+ *:menu-<script>* *:menu-script*
+The "to" part of the menu will be inspected for mappings. If you don't want
+this, use the ":noremenu" command (or the similar one for a specific mode).
+If you do want to use script-local mappings, add "<script>" as the very first
+argument to the ":menu" command or after "<silent>".
+
+ *menu-priority*
+You can give a priority to a menu. Menus with a higher priority go more to
+the right. The priority is given as a number before the ":menu" command.
+Example: >
+ :80menu Buffer.next :bn<CR>
+
+The default menus have these priorities:
+ File 10
+ Edit 20
+ Tools 40
+ Syntax 50
+ Buffers 60
+ Window 70
+ Help 9999
+
+When no or zero priority is given, 500 is used.
+The priority for the PopUp menu is not used.
+
+The Help menu will be placed on the far right side of the menu bar on systems
+which support this (Motif and GTK+). For GTK+ 2, this is not done anymore
+because right-aligning the Help menu is now discouraged UI design.
+
+You can use a priority higher than 9999, to make it go after the Help menu,
+but that is non-standard and is discouraged. The highest possible priority is
+about 32000. The lowest is 1.
+
+ *sub-menu-priority*
+The same mechanism can be used to position a sub-menu. The priority is then
+given as a dot-separated list of priorities, before the menu name: >
+ :menu 80.500 Buffer.next :bn<CR>
+Giving the sub-menu priority is only needed when the item is not to be put
+in a normal position. For example, to put a sub-menu before the other items: >
+ :menu 80.100 Buffer.first :brew<CR>
+Or to put a sub-menu after the other items, and further items with default
+priority will be put before it: >
+ :menu 80.900 Buffer.last :blast<CR>
+When a number is missing, the default value 500 will be used: >
+ :menu .900 myMenu.test :echo "text"<CR>
+The menu priority is only used when creating a new menu. When it already
+existed, e.g., in another mode, the priority will not change. Thus, the
+priority only needs to be given the first time a menu is used.
+An exception is the PopUp menu. There is a separate menu for each mode
+(Normal, Op-pending, Visual, Insert, Cmdline). The order in each of these
+menus can be different. This is different from menu-bar menus, which have
+the same order for all modes.
+NOTE: sub-menu priorities currently don't work for all versions of the GUI.
+
+ *menu-separator* *E332*
+Menu items can be separated by a special item that inserts some space between
+items. Depending on the system this is displayed as a line or a dotted line.
+These items must start with a '-' and end in a '-'. The part in between is
+used to give it a unique name. Priorities can be used as with normal items.
+Example: >
+ :menu Example.item1 :do something
+ :menu Example.-Sep- :
+ :menu Example.item2 :do something different
+Note that the separator also requires a rhs. It doesn't matter what it is,
+because the item will never be selected. Use a single colon to keep it
+simple.
+
+ *gui-toolbar*
+The toolbar is currently available in the Win32, Athena, Motif, GTK+ (X11) and
+Photon GUI. It should turn up in other GUIs in due course. The default
+toolbar is setup in menu.vim.
+The display of the toolbar is controlled by the 'guioptions' letter 'T'. You
+can thus have menu & toolbar together, or either on its own, or neither.
+The appearance is controlled by the 'toolbar' option. You can chose between
+an image, text or both.
+
+ *toolbar-icon*
+The toolbar is defined as a special menu called ToolBar, which only has one
+level. Vim interprets the items in this menu as follows:
+1) If an "icon=" argument was specified, the file with this name is used.
+ The file can either be specified with the full path or with the base name.
+ In the last case it is searched for in the "bitmaps" directory in
+ 'runtimepath', like in point 3). Examples: >
+ :amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"<CR>
+ :amenu icon=FooIcon ToolBar.Foo :echo "Foo"<CR>
+< Note that in the first case the extension is included, while in the second
+ case it is omitted.
+ If the file cannot be opened the next points are tried.
+ A space in the file name must be escaped with a backslash.
+ A menu priority must come _after_ the icon argument: >
+ :amenu icon=foo 1.42 ToolBar.Foo :echo "42!"<CR>
+2) An item called 'BuiltIn##', where ## is a number, is taken as number ## of
+ the built-in bitmaps available in Vim. Currently there are 31 numbered
+ from 0 to 30 which cover most common editing operations |builtin-tools|. >
+ :amenu ToolBar.BuiltIn22 :call SearchNext("back")<CR>
+3) An item with another name is first searched for in the directory
+ "bitmaps" in 'runtimepath'. If found, the bitmap file is used as the
+ toolbar button image. Note that the exact filename is OS-specific: For
+ example, under Win32 the command >
+ :amenu ToolBar.Hello :echo "hello"<CR>
+< would find the file 'hello.bmp'. Under GTK+/X11 it is 'Hello.xpm'. With
+ GTK+ 2 the files 'Hello.png', 'Hello.xpm' and 'Hello.bmp' are checked for
+ existence, and the first one found would be used.
+ For MS-Windows and GTK+ 2 the bitmap is scaled to fit the button. For
+ MS-Windows a size of 18 by 18 pixels works best.
+ For MS-Windows the bitmap should have 16 colors with the standard palette.
+ The light grey pixels will be changed to the Window frame color and the
+ dark grey pixels to the window shadow color. More colors might also work,
+ depending on your system.
+4) If the bitmap is still not found, Vim checks for a match against its list
+ of built-in names. Each built-in button image has a name.
+ So the command >
+ :amenu ToolBar.Open :e
+< will show the built-in "open a file" button image if no open.bmp exists.
+ All the built-in names can be seen used in menu.vim.
+5) If all else fails, a blank, but functioning, button is displayed.
+
+ *builtin-tools*
+nr Name Normal action ~
+00 New open new window
+01 Open browse for file to open in current window
+02 Save write buffer to file
+03 Undo undo last change
+04 Redo redo last undone change
+05 Cut delete selected text to clipboard
+06 Copy copy selected text to clipboard
+07 Paste paste text from clipboard
+08 Print print current buffer
+09 Help open a buffer on Vim's builtin help
+10 Find start a search command
+11 SaveAll write all modified buffers to file
+12 SaveSesn write session file for current situation
+13 NewSesn write new session file
+14 LoadSesn load session file
+15 RunScript browse for file to run as a Vim script
+16 Replace prompt for substitute command
+17 WinClose close current window
+18 WinMax make current window use many lines
+19 WinMin make current window use few lines
+20 WinSplit split current window
+21 Shell start a shell
+22 FindPrev search again, backward
+23 FindNext search again, forward
+24 FindHelp prompt for word to search help for
+25 Make run make and jump to first error
+26 TagJump jump to tag under the cursor
+27 RunCtags build tags for files in current directory
+28 WinVSplit split current window vertically
+29 WinMaxWidth make current window use many columns
+30 WinMinWidth make current window use few columns
+
+ *hidden-menus* *win32-hidden-menus*
+In the Win32 and GTK+ GUI, starting a menu name with ']' excludes that menu
+from the main menu bar. You must then use the |:popup| or |:tearoff| command
+to display it.
+
+ *popup-menu*
+In the Win32, GTK+, Motif, Athena and Photon GUI, you can define the special
+menu "PopUp". This is the menu that is displayed when the right mouse button
+is pressed, if 'mousemodel' is set to popup or popup_setpos.
+
+
+5.3 Showing What Menus Are Mapped To *showing-menus*
+
+To see what an existing menu is mapped to, use just one argument after the
+menu commands (just like you would with the ":map" commands). If the menu
+specified is a submenu, then all menus under that hierarchy will be shown.
+If no argument is given after :menu at all, then ALL menu items are shown
+for the appropriate mode (eg, Command-line mode for :cmenu).
+
+Special characters in the list, just before the rhs:
+* The menu was defined with "nore" to disallow remapping.
+& The menu was defined with "<script>" to allow remapping script-local
+ mappings only.
+- The menu was disabled.
+
+Note that hitting <Tab> while entering a menu name after a menu command may
+be used to complete the name of the menu item.
+
+
+5.4 Executing Menus *execute-menus*
+
+ *:em* *:emenu* *E334* *E335*
+:[range]em[enu] {menu} Execute {menu} from the command line.
+ The default is to execute the Normal mode
+ menu. If a range is specified, it executes
+ the Visual mode menu.
+ If used from <c-o>, it executes the
+ insert-mode menu Eg: >
+ :emenu File.Exit
+
+If the console-mode vim has been compiled with WANT_MENU defined, you can
+use :emenu to access useful menu items you may have got used to from GUI
+mode. See 'wildmenu' for an option that works well with this. See
+|console-menus| for an example.
+
+When using a range, if the lines match with '<,'>, then the menu is executed
+using the last visual selection.
+
+
+5.5 Deleting Menus *delete-menus*
+
+ *:unme* *:unmenu*
+ *:aun* *:aunmenu*
+ *:nunme* *:nunmenu*
+ *:ounme* *:ounmenu*
+ *:vunme* *:vunmenu*
+ *:iunme* *:iunmenu*
+ *:cunme* *:cunmenu*
+To delete a menu item or a whole submenu, use the unmenu commands, which are
+analogous to the unmap commands. Eg: >
+ :unmenu! Edit.Paste
+
+This will remove the Paste item from the Edit menu for Insert and
+Command-line modes.
+
+Note that hitting <Tab> while entering a menu name after an umenu command
+may be used to complete the name of the menu item for the appropriate mode.
+
+To remove all menus use: *:unmenu-all* >
+ :unmenu * " remove all menus in Normal and visual mode
+ :unmenu! * " remove all menus in Insert and Command-line mode
+ :aunmenu * " remove all menus in all modes
+
+If you want to get rid of the menu bar: >
+ :set guioptions-=m
+
+
+5.6 Disabling Menus *disable-menus*
+
+ *:menu-disable* *:menu-enable*
+If you do not want to remove a menu, but disable it for a moment, this can be
+done by adding the "enable" or "disable" keyword to a ":menu" command.
+Examples: >
+ :menu disable &File.&Open\.\.\.
+ :amenu enable *
+ :amenu disable &Tools.*
+
+The command applies to the modes as used with all menu commands. Note that
+characters like "&" need to be included for translated names to be found.
+When the argument is "*", all menus are affected. Otherwise the given menu
+name and all existing submenus below it are affected.
+
+
+5.7 Examples for Menus *menu-examples*
+
+Here is an example on how to add menu items with menu's! You can add a menu
+item for the keyword under the cursor. The register "z" is used. >
+
+ :nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR>
+ :nmenu Words.Remove\ Var wb"zye:unmenu! Words.<C-R>z<CR>
+ :vmenu Words.Add\ Var "zy:menu! Words.<C-R>z <C-R>z <CR>
+ :vmenu Words.Remove\ Var "zy:unmenu! Words.<C-R>z<CR>
+ :imenu Words.Add\ Var <Esc>wb"zye:menu! Words.<C-R>z <C-R>z<CR>a
+ :imenu Words.Remove\ Var <Esc>wb"zye:unmenu! Words.<C-R>z<CR>a
+
+(the rhs is in <> notation, you can copy/paste this text to try out the
+mappings, or put these lines in your gvimrc; "<C-R>" is CTRL-R, "<CR>" is
+the <CR> key. |<>|)
+
+
+5.8 Tooltips & Menu tips
+
+See section |42.4| in the user manual.
+
+ *:tmenu* *:tm*
+:tm[enu] {menupath} {rhs} Define a tip for a menu or tool. {only in
+ X11 and Win32 GUI}
+
+:tm[enu] [menupath] List menu tips. {only in X11 and Win32 GUI}
+
+ *:tunmenu* *:tu*
+:tu[nmenu] {menupath} Remove a tip for a menu or tool.
+ {only in X11 and Win32 GUI}
+
+When a tip is defined for a menu item, it appears in the command-line area
+when the mouse is over that item, much like a standard Windows menu hint in
+the status bar. (Except when Vim is in Command-line mode, when of course
+nothing is displayed.)
+When a tip is defined for a ToolBar item, it appears as a tooltip when the
+mouse pauses over that button, in the usual fashion. Use the |hl-Tooltip|
+highlight group to change its colors.
+
+A "tip" can be defined for each menu item. For example, when defining a menu
+item like this: >
+ :amenu MyMenu.Hello :echo "Hello"<CR>
+The tip is defined like this: >
+ :tmenu MyMenu.Hello Displays a greeting.
+And delete it with: >
+ :tunmenu MyMenu.Hello
+
+Tooltips are currently only supported for the X11 and Win32 GUI. However, they
+should appear for the other gui platforms in the not too distant future.
+
+The ":tmenu" command works just like other menu commands, it uses the same
+arguments. ":tunmenu" deletes an existing menu tip, in the same way as the
+other unmenu commands.
+
+If a menu item becomes invalid (i.e. its actions in all modes are deleted) Vim
+deletes the menu tip (and the item) for you. This means that :aunmenu deletes
+a menu item - you don't need to do a :tunmenu as well.
+
+
+5.9 Popup Menus
+
+In the Win32 and GTK+ GUI, you can cause a menu to popup at the cursor.
+This behaves similarly to the PopUp menus except that any menu tree can
+be popped up.
+
+This command is for backwards compatibility, using it is discouraged, because
+it behaves in a strange way.
+
+ *:popup* *:popu*
+:popu[p] {name} Popup the menu {name}. The menu named must
+ have at least one subentry, but need not
+ appear on the menu-bar (see |hidden-menus|).
+ {only available for Win32 and GTK GUI}
+
+Example: >
+ :popup File
+will make the "File" menu (if there is one) appear at the text cursor. >
+
+ :amenu ]Toolbar.Make :make<CR>
+ :popup ]Toolbar
+This creates a popup menu that doesn't exist on the main menu-bar.
+
+Note that a menu that starts with ']' will not be displayed.
+
+==============================================================================
+6. Extras *gui-extras*
+
+This section describes other features which are related to the GUI.
+
+- With the GUI, there is no wait for one second after hitting escape, because
+ the key codes don't start with <Esc>.
+
+- Typing ^V followed by a special key in the GUI will insert "<Key>", since
+ the internal string used is meaningless. Modifiers may also be held down to
+ get "<Modifiers-Key>".
+
+- In the GUI, the modifiers SHIFT, CTRL, and ALT (or META) may be used within
+ mappings of special keys and mouse events. eg: :map <M-LeftDrag> <LeftDrag>
+
+- In the GUI, several normal keys may have modifiers in mappings etc, these
+ are <Space>, <Tab>, <NL>, <CR>, <Esc>.
+
+- To check in a Vim script if the GUI is being used, you can use something
+ like this: >
+
+ if has("gui_running")
+ echo "yes, we have a GUI"
+ else
+ echo "Boring old console"
+ endif
+
+==============================================================================
+7. Shell Commands *gui-shell*
+
+For the X11 GUI the external commands are executed inside the gvim window.
+See |gui-pty|.
+
+WARNING: Executing an external command from the X11 GUI will not always
+work. "normal" commands like "ls", "grep" and "make" mostly work fine.
+Commands that require an intelligent terminal like "less" and "ispell" won't
+work. Some may even hang and need to be killed from another terminal. So be
+careful!
+
+For the Win32 GUI the external commands are executed in a separate window.
+See |gui-shell-win32|.
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui_w16.txt b/runtime/doc/gui_w16.txt
new file mode 100644
index 000000000..5055afec6
--- /dev/null
+++ b/runtime/doc/gui_w16.txt
@@ -0,0 +1,186 @@
+*gui_w16.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Vim's Graphical User Interface *gui-w16* *win16-gui*
+
+1. Starting the GUI |win16-start|
+2. Vim as default editor |win16-default-editor|
+3. Using the clipboard |win16-clipboard|
+4. Shell Commands |win16-shell|
+5. Special colors |win16-colors|
+6. Windows dialogs & browsers |win16-dialogs|
+7. Various |win16-various|
+
+Other relevant documentation:
+|gui.txt| For generic items of the GUI.
+|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}
+
+The Win16 version of Vim will run on Windows 3.1 or later. It has not been
+tested on 3.0, it probably won't work without being recompiled and
+modified. (but you really should upgrade to 3.11 anyway. :)
+
+In most respects it behaves identically to the Win32 GUI version, including
+having a flat-style toolbar(!). The chief differences:
+
+1) Bold/Italic text is not available, to speed up repaint/reduce resource
+ usage. (You can re-instate this by undefining MSWIN16_FASTTEXT.)
+2) No tearoff menu emulation.
+3) No OLE interface.
+4) No long filename support (of course)
+5) No tooltips on toolbar buttons - instead they produce command-line tips
+ like menu items do.
+6) Line length limited to 32767 characters (like 16-bit DOS version)
+
+
+==============================================================================
+1. Starting the GUI *win16-start*
+
+The Win16 GUI version of Vim will always start the GUI, no matter how you
+start it or what it's called. There is no 'console' version as such, but you
+can use one of the DOS versions in a DOS box.
+
+The Win16 GUI has an extra menu item: "Window/Select Font". It brings up the
+standard Windows font selector. Note that bold and italic fonts are not
+supported in an attempt to maximize GDI drawing speed.
+
+Setting the menu height doesn't work for the Win16 GUI.
+
+ *win16-maximized*
+If you want Vim to start with a maximized window, add this command to your
+vimrc or gvimrc file: >
+ au GUIEnter * simalt ~x
+<
+
+There is a specific version of gvim.exe that runs under the Win32s subsystem
+of Windows 3.1 or 3.11. See |win32s|.
+
+==============================================================================
+2. Vim as default editor *win16-default-editor*
+
+To set Vim as the default editor for a file type you can use File Manager's
+"Associate" feature.
+
+When you open a file in Vim by double clicking it, Vim changes to that
+file's directory.
+
+See also |notepad|.
+
+==============================================================================
+3. Using the clipboard *win16-clipboard*
+
+Windows has a clipboard, where you can copy text to, and paste text from. Vim
+supports this in several ways.
+The clipboard works in the same way as the Win32 version: see |gui-clipboard|.
+
+==============================================================================
+4. Shell Commands *win16-shell*
+
+Vim spawns a DOS window for external commands, to make it possible to run any
+DOS command. The window uses the _default.pif settings.
+
+ *win16-!start*
+Normally, Vim waits for a command to complete before continuing (this makes
+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:
+ :!start {command}
+This may only work for a Windows program though.
+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.
+
+==============================================================================
+5. Special colors *win16-colors*
+
+On Win16, the normal DOS colors can be used. See |dos-colors|.
+
+Additionally the system configured colors can also be used. These are known
+by the names Sys_XXX, where XXX is the appropriate system color name, from the
+following list (see the Win32 documentation for full descriptions). Case is
+ignored.
+
+Sys_BTNFace Sys_BTNShadow Sys_ActiveBorder
+Sys_ActiveCaption Sys_AppWorkspace Sys_Background
+Sys_BTNText Sys_CaptionText Sys_GrayText
+Sys_Highlight Sys_HighlightText Sys_InactiveBorder
+Sys_InactiveCaption Sys_InactiveCaptionText Sys_Menu
+Sys_MenuText Sys_ScrollBar Sys_Window
+Sys_WindowFrame Sys_WindowText
+
+Probably the most useful values are
+ Sys_Window Normal window background
+ Sys_WindowText Normal window text
+ Sys_Highlight Highlighted background
+ Sys_HighlightText Highlighted text
+
+These extra colors are also available:
+Gray, Grey, LightYellow, SeaGreen, Orange, Purple, SlateBlue, Violet,
+
+
+See also |rgb.txt|.
+
+==============================================================================
+ *win16-dialogs*
+6. Windows dialogs & browsers
+
+The Win16 GUI can use familiar Windows components for some operations, as well
+as the traditional interface shared with the console version.
+
+
+6.1 Dialogs
+
+The dialogs displayed by the "confirm" family (i.e. the 'confirm' option,
+|:confirm| command and |confirm()| function are GUI-based rather than the
+console-based ones used by other versions. There is no option to change this.
+
+
+6.2 File Browsers
+
+When prepending ":browse" before file editing commands, a file requester is
+used to allow you to select an existing file. See |:browse|.
+
+
+==============================================================================
+7. Various *win16-various*
+
+ *win16-printing*
+The "File/Print" menu uses Notepad to print the current buffer. This is a bit
+clumsy, but it's portable. If you want something else, you can define your
+own print command. For example, you could look for the 16-bit version of
+PrintFile. See $VIMRUNTIME/menu.vim for how it works by default.
+
+Using this should also work: >
+ :w >>prn
+
+Vim supports a number of standard MS Windows features. Some of these are
+detailed elsewhere: see |'mouse'|, |win32-hidden-menus|.
+Also see |:simalt|
+
+ *win16-drag-n-drop*
+You can drag and drop one or more files into the vim window, where they will
+be opened as normal. If you hold down Shift while doing this, Vim changes to
+the (first) dropped file's directory. If you hold Ctrl, Vim will always split
+a new window for the file. Otherwise it's only done if the current buffer has
+been changed.
+You can also drop a directory's icon, but rather than open all files in the
+directory (which wouldn't usually be what you want) Vim instead changes to
+that directory and begins a new file.
+If Vim happens to be editing a command line, the names of the dropped files
+and directories will be inserted at the cursor. This allows you to use these
+names with any Ex command.
+
+ *win16-truetype*
+It is recommended that you use a raster font and not a TrueType
+fixed-pitch font. e.g. Use Courier, not Courier New. This is not just
+to use less resources but because there are subtle bugs in the
+handling of fixed-pitch TrueType in Win3.1x. In particular, when you move
+a block cursor over a pipe character '|', the cursor is drawn in the wrong
+size and bits get left behind. This is a bug in the Win3.1x GDI, it doesn't
+happen if you run the exe under 95/NT.
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt
new file mode 100644
index 000000000..574aa35b0
--- /dev/null
+++ b/runtime/doc/gui_w32.txt
@@ -0,0 +1,472 @@
+*gui_w32.txt* For Vim version 7.0aa. Last change: 2004 May 03
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Vim's Win32 Graphical User Interface *gui-w32* *win32-gui*
+
+1. Starting the GUI |gui-w32-start|
+2. Vim as default editor |vim-default-editor|
+3. Using the clipboard |gui-clipboard|
+4. Shell Commands |gui-shell-win32|
+5. Special colors |win32-colors|
+6. Windows dialogs & browsers |gui-w32-dialogs|
+7. Command line arguments |gui-w32-cmdargs|
+8. Various |gui-w32-various|
+
+Other relevant documentation:
+|gui.txt| For generic items of the GUI.
+|os_win32.txt| For Win32 specific items.
+
+{Vi does not have a Windows GUI}
+
+==============================================================================
+1. Starting the GUI *gui-w32-start*
+
+The Win32 GUI version of Vim will always start the GUI, no matter how you
+start it or what it's called.
+
+The GUI will always run in the Windows subsystem. Mostly shells automatically
+return with a command prompt after starting gvim. If not, you should use the
+"start" command: >
+ start gvim [options] file ..
+
+Note: All fonts (bold, italic) must be of the same size!!! If you don't do
+this, text will disappear or mess up the display. Vim does not check the font
+sizes. It's the size in screen pixels that must be the same. Note that some
+fonts that have the same point size don't have the same pixel size!
+Additionally, the positioning of the fonts must be the same (ascent and
+descent).
+
+The Win32 GUI has an extra menu item: "Edit/Select Font". It brings up the
+standard Windows font selector.
+
+Setting the menu height doesn't work for the Win32 GUI.
+
+ *gui-win32-maximized*
+If you want Vim to start with a maximized window, add this command to your
+vimrc or gvimrc file: >
+ au GUIEnter * simalt ~x
+<
+ *gui-w32s*
+There is a specific version of gvim.exe that runs under the Win32s subsystem
+of Windows 3.1 or 3.11. See |win32s|.
+
+==============================================================================
+2. Vim as default editor *vim-default-editor*
+
+To set Vim as the default editor for a file type:
+1. Start a Windows Explorer
+2. Chose View/Options -> File Types
+3. Select the path to gvim for every file type that you want to use it for.
+ (you can also use three spaces in the file type field, for files without an
+ extension).
+ In the "open" action, use: >
+ gvim "%1"
+< The quotes are required for using file names with embedded spaces.
+ You can also use this: >
+ gvim "%L"
+< This should avoid short (8.3 character) file names in some situations. But
+ I'm not sure if this works everywhere.
+
+When you open a file in Vim by double clicking it, Vim changes to that
+file's directory.
+
+If you want Vim to start full-screen, use this for the Open action: >
+ gvim -c "simalt ~x" "%1"
+
+Another method, which also works when you put Vim in another directory (e.g.,
+when you have got a new version):
+1. select a file you want to use Vim with
+2. <Shift-F10>
+3. select "Open With..." menu entry
+4. click "Other..."
+5. browse to the (new) location of Vim and click "Open"
+6. make "Always Use this program..." checked
+7. <OK>
+
+ *send-to-menu* *sendto*
+You can also install Vim in the "Send To" menu:
+1. Start a Windows Explorer
+2. Navigate to your sendto directory:
+ Windows 95: %windir%\sendto (e.g. "c:\windows\sendto")
+ Windows NT: %windir%\profiles\%user%\sendto (e.g.
+ "c:\winnt\profiles\mattha\sendto").
+3. Right-click in the file pane and select New->Shortcut
+4. Follow the shortcut wizard, using the full path to VIM/GVIM.
+
+When you 'send a file to Vim', Vim changes to that file's directory. Note,
+however, that any long directory names will appear in their short (MS-DOS)
+form. This is a limitation of the Windows "Send To" mechanism.
+
+ *notepad*
+You could replace notepad.exe with gvim.exe, but that has a few side effects.
+Some programs rely on notepad arguments, which are not recognized by Vim. For
+example "notepad -p" is used by some applications to print a file. It's
+better to leave notepad where it is and use another way to start Vim.
+
+ *win32-popup-menu*
+A more drastic approach is to install an "Edit with Vim" entry in the popup
+menu for the right mouse button. With this you can edit any file with Vim.
+
+This can co-exist with the file associations mentioned above. The difference
+is that the file associations will make starting Vim the default action. With
+the "Edit with Vim" menu entry you can keep the existing file association for
+double clicking on the file, and edit the file with Vim when you want. For
+example, you can associate "*.mak" with your make program. You can execute
+the makefile by double clicking it and use the "Edit with Vim" entry to edit
+the makefile.
+
+You can select any files and right-click to see a menu option called "Edit
+with gvim". Chosing this menu option will invoke gvim with the file you have
+selected. If you select multiple files, you will find two gvim-related menu
+options:
+"Edit with multiple gvims" -- one gvim for each file in the selection
+"Edit with single gvim" -- one gvim for all the files in the selection
+And if there already is a gvim running:
+"Edit with existing gvim" -- edit the file with the running gvim
+
+ *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.
+
+You can also do this by hand. This is complicated! Use the install.exe if
+you can.
+
+1. Start the registry editor with "regedit".
+2. Add these keys:
+ key value name value ~
+ HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ {default} Vim Shell Extension
+ HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32
+ {default} {path}\gvimext.dll
+ ThreadingModel Apartment
+ HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim
+ {default} {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved
+ {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+ Vim Shell Extension
+ HKEY_LOCAL_MACHINE\Software\Vim\Gvim
+ path {path}\gvim.exe
+ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\vim 5.6
+ DisplayName Vim 5.6: Edit with Vim popup menu entry
+ UninstallString {path}\uninstal.exe
+
+ Replace {path} with the path that leads to the executable.
+ Don't type {default}, this is the value for the key itself.
+
+To remove "Edit with Vim" from the popup menu, just remove the registry
+entries mentioned above. The "uninstal.exe" program can do this for you. You
+can also use the entry in the Windows standard "Add/Remove Programs" list.
+
+If you notice that this entry overrules other file type associations, set
+those associations again by hand (using Windows Explorer, see above). This
+only seems to happen on some Windows NT versions (Windows bug?). Procedure:
+1. Find the name of the file type. This can be done by starting the registry
+ editor, and searching for the extension in \\HKEY_CLASSES_ROOT
+2. In a Windows Explorer, use View/Options/File Types. Search for the file
+ type in the list and click "Edit". In the actions list, you can select on
+ to be used as the default (normally the "open" action) and click on the
+ "Set Default" button.
+
+
+Vim in the "Open With..." context menu *win32-open-with-menu*
+
+If you use the Vim install program you have the choice to add Vim to the "Open
+With..." menu. This means you can use Vim to edit many files. Not every file
+(for unclear reasons...), thus the "Edit with Vim" menu entry is still useful.
+
+One reason to add this is to be able to edit HTML files directly from Internet
+Explorer. To enable this use the "Tools" menu, "Internet Options..." entry.
+In the dialog select the "Programs" tab and select Vim in the "HTML editor"
+choice. If it's not there than installing didn't work properly.
+
+Doing this manually can be done with this script:
+
+----------------------------------------------------------
+REGEDIT4
+
+[HKEY_CLASSES_ROOT\Applications\gvim.exe]
+
+[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell]
+
+[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit]
+
+[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command]
+@="c:\\vim\\vim62\\gvim.exe \"%1\""
+
+[HKEY_CLASSES_ROOT\.htm\OpenWithList\gvim.exe]
+
+[HKEY_CLASSES_ROOT\*\OpenWithList\gvim.exe]
+
+----------------------------------------------------------
+
+Change the "c:\\vim\\vim62" bit to where gvim.exe is actually located.
+
+To uninstall this run the Vim uninstall program or manually delete the
+registry entries with "regedit".
+
+==============================================================================
+3. Using the clipboard *gui-clipboard*
+
+Windows has a clipboard, where you can copy text to, and paste text from. Vim
+supports this in several ways. For other systems see |gui-selections|.
+
+The "* register reflects the contents of the clipboard. |quotestar|
+
+When the "unnamed" string is included in the 'clipboard' option, the unnamed
+register is the same. Thus you can yank to and paste from the clipboard
+without prepending "* to commands.
+
+The 'a' flag in 'guioptions' is not included by default. This means that text
+is only put on the clipboard when an operation is performed on it. Just
+Visually selecting text doesn't put it on the clipboard. When the 'a' flag is
+included, the text is copied to the clipboard even when it is not operated
+upon.
+
+ *mswin.vim*
+To use the standard MS-Windows way of CTRL-X, CTRL-C and CTRL-V, use the
+$VIMRUNTIME/mswin.vim script. You could add this line to your _vimrc file: >
+ source $VIMRUNTIME/mswin.vim
+
+Since CTRL-C is used to copy the text to the clipboard, it can't be used to
+cancel an operation. Use CTRL-Break for that.
+
+ *CTRL-V-alternative*
+Since CTRL-V is used to paste, you can't use it to start a blockwise Visual
+selection. You can use CTRL-Q instead. You can also use CTRL-Q in Insert
+mode and Command-line mode to get the old meaning of CTRL-V. But CTRL-Q
+doesn't work for terminals when it's used for control flow.
+
+NOTE: The clipboard support still has a number of bugs. See |todo|.
+
+==============================================================================
+4. Shell Commands *gui-shell-win32*
+
+Vim uses another window for external commands, to make it possible to run any
+command. The external command gets its own environment for running, just like
+it was started from a DOS prompt.
+
+ *win32-vimrun*
+Executing an external command is done indirectly by the "vimrun" command. The
+"vimrun.exe" must be in the path for this to work. Or it must be in the same
+directory as the Vim executable. If "vimrun" cannot be found, the command is
+executed directly, but then the DOS window closes immediately after the
+external command has finished.
+WARNING: If you close this window with the "X" button, and confirm the
+question if you really want to kill the application, Vim may be killed too!
+(This does not apply to commands run asynchronously with ":!start".)
+
+In Windows 95, the window in which the commands are executed is always 25x80
+characters, to be as DOS compatible as possible (this matters!). The default
+system font is used. On NT, the window will be the default you have set up for
+"Console" in Control Panel. On Win32s, the properties of the DOS box are
+determined by _default.pif in the windows directory.
+
+ *msdos-mode*
+If you get a dialog that says "This program is set to run in MS-DOS mode..."
+when you run an external program, you can solve this by changing the
+properties of the associated shortcut:
+- Use a Windows Explorer to find the command.com that is used. It can be
+ c:\command.com, c:\dos\command.com, c:\windows\command.com, etc.
+- With the right mouse button, select properties of this command.com.
+- In the Program tab select "Advanced".
+- Unselect "MS-DOS mode".
+- Click "OK" twice.
+
+ *win32-!start*
+Normally, Vim waits for a command to complete before continuing (this makes
+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}
+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.
+
+==============================================================================
+5. Special colors *win32-colors*
+
+On Win32, the normal DOS colors can be used. See |dos-colors|.
+
+Additionally the system configured colors can also be used. These are known
+by the names Sys_XXX, where XXX is the appropriate system color name, from the
+following list (see the Win32 documentation for full descriptions). Case is
+ignored. note: On Win32s not all of these colors are supported.
+
+Sys_3DDKShadow Sys_3DFace Sys_BTNFace
+Sys_3DHilight Sys_3DHighlight Sys_BTNHilight
+Sys_BTNHighlight Sys_3DLight Sys_3DShadow
+Sys_BTNShadow Sys_ActiveBorder Sys_ActiveCaption
+Sys_AppWorkspace Sys_Background Sys_Desktop
+Sys_BTNText Sys_CaptionText Sys_GrayText
+Sys_Highlight Sys_HighlightText Sys_InactiveBorder
+Sys_InactiveCaption Sys_InactiveCaptionText Sys_InfoBK
+Sys_InfoText Sys_Menu Sys_MenuText
+Sys_ScrollBar Sys_Window Sys_WindowFrame
+Sys_WindowText
+
+Probably the most useful values are
+ Sys_Window Normal window background
+ Sys_WindowText Normal window text
+ Sys_Highlight Highlighted background
+ Sys_HighlightText Highlighted text
+
+These extra colors are also available:
+Gray, Grey, LightYellow, SeaGreen, Orange, Purple, SlateBlue, Violet,
+
+ *rgb.txt*
+Additionally, colors defined by a "rgb.txt" file can be used. This file is
+well known from X11. A few lines from it: >
+
+ 255 218 185 peach puff
+ 205 133 63 peru
+ 255 181 197 pink
+
+This shows the layout of the file: First the R, G and B value as a decimal
+number, followed by the name of the color. The four fields are separated by
+spaces.
+
+You can get an rgb.txt file from any X11 distribution. It is located in a
+directory like "/usr/X11R6/lib/X11/". For Vim it must be located in the
+$VIMRUNTIME directory. Thus the file can be found with "$VIMRUNTIME/rgb.txt".
+
+==============================================================================
+ *gui-w32-dialogs* *dialog*
+6. Windows dialogs & browsers
+
+The Win32 GUI can use familiar Windows components for some operations, as well
+as the traditional interface shared with the console version.
+
+
+6.1 Dialogs
+
+The dialogs displayed by the "confirm" family (i.e. the 'confirm' option,
+|:confirm| command and |confirm()| function) are GUI-based rather than the
+console-based ones used by other versions. The 'c' flag in 'guioptions'
+changes this.
+
+
+6.2 File Browsers
+
+When prepending ":browse" before file editing commands, a file requester is
+used to allow you to select an existing file. See |:browse|.
+
+
+6.3 Tearoff Menus
+
+The Win32 GUI emulates Motif's tear-off menus. At the top of each menu you
+will see a small graphic "rip here" sign. Selecting it will cause a floating
+window to be created with the same menu entries on it. The floating menu can
+then be accessed just as if it was the original (including sub-menus), but
+without having to go to the menu bar each time.
+This is most useful if you find yourself using a command buried in a sub-menu
+over and over again.
+The tearoff menus can be positioned where you like, and always stay just above
+the Main Vim window. You can get rid of them by closing them as usual; they
+also of course close when you exit Vim.
+
+ *:tearoff* *:te*
+:te[aroff] {name} Tear-off the menu {name}. The menu named must have at
+ least one subentry, but need not appear on the
+ menu-bar (see |win32-hidden-menus|).
+
+Example: >
+ :tearoff File
+will make the "File" menu (if there is one) appear as a tearoff menu. >
+
+ :amenu ]Toolbar.Make :make<CR>
+ :tearoff ]Toolbar
+This creates a floating menu that doesn't exist on the main menu-bar.
+
+Note that a menu that starts with ']' will not be displayed.
+
+==============================================================================
+7. Command line arguments *gui-w32-cmdargs*
+
+Analysis of a command line into parameters is not standardised in MS Windows.
+Gvim has to provide logic to analyse a command line. This logic is likely to
+be different from the default logic provided by a compilation system used to
+build vim. The differences relate to unusual double quote (") usage.
+The arguments "C:\My Music\freude.txt" and "+/Sch\"iller" are handled in the
+same way. The argument "+/Sch""iller" may be handled different by gvim and
+vim, depending what it was compiled with.
+
+The rules are:
+ a) A parameter is a sequence of graphic characters.
+ b) Parameters are separated by white space.
+ c) A parameter can be enclosed in double quotes to include white space.
+ d) A sequence of zero or more backslashes (\) and a double quote (")
+ is special. The effective number of backslashes is halved, rounded
+ down. An even number of backslashes reverses the acceptability of
+ spaces and tabs, an odd number of backslashes produces a literal
+ double quote.
+
+So:
+ " is a special double quote
+ \" is a literal double quote
+ \\" is a literal backslash and a special double quote
+ \\\" is a literal backslash and a literal double quote
+ \\\\" is 2 literal backslashes and a special double quote
+ \\\\\" is 2 literal backslashes and a literal double quote
+ etc.
+
+Example: >
+ gvim "C:\My Music\freude" +"set ignorecase" +/"\"foo\\" +\"bar\\\"
+
+opens "C:\My Music\freude" and executes the line mode commands: >
+ set ignorecase; /"foo\ and /bar\"
+
+==============================================================================
+8. Various *gui-w32-various*
+
+ *gui-w32-printing*
+The "File/Print" menu prints the text with syntax highlighting, see
+|:hardcopy|. If you just want to print the raw text and have a default
+printer installed this should also work: >
+ :w >>prn
+
+Vim supports a number of standard MS Windows features. Some of these are
+detailed elsewhere: see |'mouse'|, |win32-hidden-menus|.
+
+ *drag-n-drop-win32*
+You can drag and drop one or more files into the Vim window, where they will
+be opened as normal. See |drag-n-drop|.
+
+ *:simalt* *:si*
+:sim[alt] {key} simulate pressing {key} while holding Alt pressed.
+ {not in Vi} {only for Win32 versions}
+
+Normally, Vim takes control of all Alt-<Key> combinations, to increase the
+number of possible mappings. This clashes with the standard use of Alt as the
+key for accessing menus.
+The quick way of getting standard behavior is to set the 'winaltkeys' option
+to "yes". This however prevents you from mapping Alt keys at all.
+Another way is to set 'winaltkeys' to "menu". Menu shortcut keys are then
+handled by windows, other ALT keys can be mapped. This doesn't allow a
+dependency on the current state though.
+To get round this, the :simalt command allows Vim (when 'winaltkeys' is not
+"yes") to fake a Windows-style Alt keypress. You can use this to map Alt key
+combinations (or anything else for that matter) to produce standard Windows
+actions. Here are some examples: >
+
+ :map <M-f> :simalt f<CR>
+This makes Alt-F pop down the 'File' menu (with the stock Menu.vim) by
+simulating the keystrokes Alt, F. >
+ :map <M-Space> :simalt ~<CR>
+This maps Alt-Space to pop down the system menu for the Vim window. Note that
+~ is used by simalt to represent the <Space> character. >
+ :map <C-n> :simalt ~n<CR>
+Maps Control-N to produce the keys Alt-Space followed by N. This minimizes the
+Vim window via the system menu.
+
+ *intellimouse-wheel-problems*
+When using the Intellimouse mouse wheel causes Vim to stop accepting input, go
+to:
+ ControlPanel - Mouse - Wheel - UniversalScrolling - Exceptions
+
+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.
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui_x11.txt b/runtime/doc/gui_x11.txt
new file mode 100644
index 000000000..d54730229
--- /dev/null
+++ b/runtime/doc/gui_x11.txt
@@ -0,0 +1,576 @@
+*gui_x11.txt* For Vim version 7.0aa. Last change: 2004 Mar 16
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Vim's Graphical User Interface *gui-x11* *GUI-X11*
+ *Athena* *Motif*
+1. Starting the X11 GUI |gui-x11-start|
+2. GUI Resources |gui-resources|
+3. Shell Commands |gui-pty|
+4. Various |gui-x11-various|
+5. GTK version |gui-gtk|
+6. GNOME version |gui-gnome|
+7. Compiling |gui-x11-compiling|
+8. X11 selection mechanism |x11-selection|
+
+Other relevant documentation:
+|gui.txt| For generic items of the GUI.
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Starting the X11 GUI *gui-x11-start* *E665*
+
+Then you can run the GUI version of Vim in either of these ways:
+ gvim [options] [files...]
+ vim -g [options] [files...]
+
+So if you call the executable "gvim", or make "gvim" a link to the executable,
+then the GUI version will automatically be used. Additional characters may be
+added after "gvim", for example "gvim-5".
+
+You may also start up the GUI from within the terminal version by using one of
+these commands:
+ :gui [++opt] [+cmd] [-f|-b] [files...] *:gu* *:gui*
+ :gvim [++opt] [+cmd] [-f|-b] [files...] *:gv* *:gvim*
+The "-f" option runs Vim in the foreground.
+The "-b" option runs Vim in the background (this is the default).
+Also see |++opt| and |+cmd|.
+
+ *gui-fork*
+When the GUI is started, it does a fork() and exits the current process.
+When gvim was started from a shell this makes the shell accept further
+commands. If you don't want this (e.g. when using gvim for a mail program
+that waits for gvim to exit), start gvim with "gvim -f", "vim -gf" or use
+":gui -f". Don't use "vim -fg", because "-fg" specifies the foreground
+color.
+
+When using "gvim -f" and then ":gui", Vim will run in the foreground. The
+"-f" argument will be remembered. To force running Vim in the background use
+":gui -b".
+
+"gvim --nofork" does the same as "gvim -f".
+
+If you want the GUI to run in the foreground always, include the 'f'
+flag in 'guioptions'. |-f|.
+
+==============================================================================
+2. GUI Resources *gui-resources* *.Xdefaults*
+
+If using the Motif or Athena version of the GUI (not for the GTK+ or Win32
+version), a number of X resources are available. You should use Vim's class
+"Vim" when setting these. They are as follows:
+
+ Resource name Meaning ~
+
+ reverseVideo Boolean: should reverse video be used?
+ background Color of background.
+ foreground Color of normal text.
+ scrollBackground Color of trough portion of scrollbars.
+ scrollForeground Color of slider and arrow portions of scrollbars.
+ menuBackground Color of menu backgrounds.
+ menuForeground Color of menu foregrounds.
+ tooltipForeground Color of tooltip and balloon foreground.
+ tooltipBackground Color of tooltip and balloon background.
+
+ font Name of font used for normal text.
+ boldFont Name of font used for bold text.
+ italicFont Name of font used for italic text.
+ boldItalicFont Name of font used for bold, italic text.
+ menuFont Name of font used for the menus, used when compiled
+ without the |+xfontset| feature
+ menuFontSet Name of fontset used for the menus, used when compiled
+ with the |+xfontset| feature
+ tooltipFont Name of the font used for the tooltip and balloons.
+ When compiled with the |+xfontset| feature this is a
+ fontset name.
+
+ geometry Initial geometry to use for gvim's window (default
+ is same size as terminal that started it).
+ scrollbarWidth Thickness of scrollbars.
+ borderWidth Thickness of border around text area.
+ menuHeight Height of the menu bar (only for Athena).
+
+A special font for italic, bold, and italic-bold text will only be used if
+the user has specified one via a resource. No attempt is made to guess what
+fonts should be used for these based on the normal text font.
+
+Note that the colors can also be set with the ":highlight" command, using the
+"Normal", "Menu", "Tooltip", and "Scrollbar" groups. Example: >
+ :highlight Menu guibg=lightblue
+ :highlight Tooltip guibg=yellow
+ :highlight Scrollbar guibg=lightblue guifg=blue
+ :highlight Normal guibg=grey90
+<
+ *font-sizes*
+Note: All fonts (except for the menu and tooltip) must be of the same size!!!
+If you don't do this, text will disappear or mess up the display. Vim does
+not check the font sizes. It's the size in screen pixels that must be the
+same. Note that some fonts that have the same point size don't have the same
+pixel size! Additionally, the positioning of the fonts must be the same
+(ascent and descent). You can check this with "xlsfonts -l {fontname}".
+
+If any of these things are also set with Vim commands, eg with
+":set guifont=Screen15", then this will override the X resources (currently
+'guifont' is the only option that is supported).
+
+Here is an example of what you might put in your ~/.Xdefaults file: >
+
+ Vim*useSchemes: all
+ Vim*sgiMode: true
+ Vim*useEnhancedFSB: true
+ Vim.foreground: Black
+ Vim.background: Wheat
+ Vim*fontList: 7x13
+
+The first three of these are standard resources on Silicon Graphics machines
+which make Motif applications look even better, highly recommended!
+
+The "Vim*fontList" is to set the menu font for Motif. Example: >
+ Vim*menuBar*fontList: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
+With Athena: >
+ Vim*menuBar*SmeBSB*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
+ Vim*menuBar*MenuButton*font: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
+
+NOTE: A more portable, and indeed more correct, way to specify the menu font
+in either Motif or Athena is through the resource: >
+ Vim.menuFont: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
+Or, when compiled with the |+xfontset| feature: >
+ Vim.menuFontSet: -*-courier-medium-r-*-*-10-*-*-*-*-*-*-*
+
+Don't use "Vim*geometry" in the defaults. This will break the menus. Use
+"Vim.geometry" instead.
+
+If you get an error message "Cannot allocate colormap entry for "gray60",
+try adding this to your Vim resources (change the colors to your liking): >
+
+ Vim*scrollBackground: Black
+ Vim*scrollForeground: Blue
+
+The resources can also be set with arguments to Vim:
+
+ argument meaning ~
+ *-gui*
+ -display {display} Run vim on {display} *-display*
+ -iconic Start vim iconified *-iconic*
+ -background {color} Use {color} for the background *-background*
+ -bg {color} idem *-bg*
+ -foreground {color} Use {color} for normal text *-foreground*
+ -fg {color} idem *-fg*
+ -ul {color} idem *-ul*
+ -font {font} Use {font} for normal text *-font*
+ -fn {font} idem *-fn*
+ -boldfont {font} Use {font} for bold text *-boldfont*
+ -italicfont {font} Use {font} for italic text *-italicfont*
+ -menufont {font} Use {font} for menu items *-menufont*
+ -menufontset {fontset} Use {fontset} for menu items *-menufontset*
+ -mf {font} idem *-mf*
+ -geometry {geom} Use {geom} for initial geometry *-geometry*
+ -geom {geom} idem, see |-geometry-example| *-geom*
+ -borderwidth {width} Use a border width of {width} *-borderwidth*
+ -bw {width} idem *-bw*
+ *-scrollbarwidth*
+ -scrollbarwidth {width} Use a scrollbar width of {width}
+ -sw {width} idem *-sw*
+ -menuheight {height} Use a menu bar height of {height} *-menuheight*
+ -mh {height} idem *-mh*
+ NOTE: On Motif the value is ignored, the menu height
+ is computed to fit the menus.
+ -reverse Use reverse video *-reverse*
+ -rv idem *-rv*
+ +reverse Don't use reverse video *-+reverse*
+ +rv idem *-+rv*
+ -xrm {resource} Set the specified resource *-xrm*
+
+Note about reverse video: Vim checks that the result is actually a light text
+on a dark background. The reason is that some X11 versions swap the colors,
+and some don't. These two examples will both give yellow text on a blue
+background:
+ gvim -fg Yellow -bg Blue -reverse
+ gvim -bg Yellow -fg Blue -reverse
+
+ *-geometry-example*
+An example for the geometry argument: >
+ gvim -geometry 80x63+8+100
+This creates a window with 80 columns and 63 lines at position 8 pixels from
+the left and 100 pixels from the top of the screen.
+
+==============================================================================
+3. Shell Commands *gui-pty*
+
+WARNING: Executing an external command from the GUI will not always work.
+"normal" commands like "ls", "grep" and "make" mostly work fine. Commands
+that require an intelligent terminal like "less" and "ispell" won't work.
+Some may even hang and need to be killed from another terminal. So be
+careful!
+
+There are two ways to do the I/O with a shell command: Pipes and a pseudo-tty.
+The default is to use a pseudo-tty. This should work best on most systems.
+
+Unfortunately, the implementation of the pseudo-tty is different on every Unix
+system. And some systems require root permission. To avoid running into
+problems with a pseudo-tty when you least expect it, test it when not editing
+a file. Be prepared to "kill" the started command or Vim. Commands like
+":r !cat" may hang!
+
+If using a pseudo-tty does not work for you, reset the 'guipty' option: >
+
+ :set noguipty
+
+Using a pipe should work on any Unix system, but there are disadvantages:
+- Some shell commands will notice that a pipe is being used and behave
+ differently. E.g., ":!ls" will list the files in one column.
+- The ":sh" command won't show a prompt, although it will sort of work.
+- When using ":make" it's not possible to interrupt with a CTRL-C.
+
+Typeahead while the external command is running is often lost. This happens
+both with a pipe and a pseudo-tty. This is a known problem, but it seems it
+can't be fixed (or at least, it's very difficult).
+
+ *gui-pty-erase*
+When your erase character is wrong for an external command, you should fix
+this in your "~/.cshrc" file, or whatever file your shell uses for
+initializations. For example, when you want to use backspace to delete
+characters, but hitting backspaces produces "^H" instead, try adding this to
+your "~/.cshrc": >
+ stty erase ^H
+The ^H is a real CTRL-H, type it as CTRL-V CTRL-H.
+
+==============================================================================
+4. Various *gui-x11-various*
+
+ *gui-x11-printing*
+The "File/Print" menu simply sends the current buffer to "lpr". No options or
+whatever. If you want something else, you can define your own print command.
+For example: >
+
+ :10amenu File.Print :w !lpr -Php3
+ :10vmenu File.Print :w !lpr -Php3
+<
+ *X11-icon*
+Vim uses a black&white icon by default when compiled with Motif or Athena. A
+colored Vim icon is included as $VIMRUNTIME/vim32x32.xpm. For GTK+, this is
+the builtin icon used. Unfortunately, how you should install it depends on
+your window manager. When you use this, remove the 'i' flag from
+'guioptions', to remove the black&white icon: >
+ :set guioptions-=i
+
+If you use one of the fvwm* family of window managers simply add this line to
+your .fvwm2rc configuration file: >
+
+ Style "vim" Icon vim32x32.xpm
+
+Make sure the icon file's location is consistent with the window manager's
+ImagePath statement. Either modify the ImagePath from within your .fvwm2rc or
+drop the icon into one the pre-defined directories: >
+
+ ImagePath /usr/X11R6/include/X11/pixmaps:/usr/X11R6/include/X11/bitmaps
+
+Note: older versions of fvwm use "IconPath" instead of "ImagePath".
+
+For CDE "dtwm" (a derivative of Motif) add this line in the .Xdefaults: >
+ Dtwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
+
+For "mwm" (Motif window manager) the line would be: >
+ Mwm*Vim*iconImage: /usr/local/share/vim/vim32x32.xpm
+
+Mouse Pointers Available in X11 *X11_mouse_shapes*
+
+By using the |'mouseshape'| option, the mouse pointer can be automatically
+changed whenever Vim enters one of its various modes (e.g., Insert or
+Command). Currently, the available pointers are:
+
+ arrow an arrow pointing northwest
+ beam a I-like vertical bar
+ size an arrow pointing up and down
+ busy a wristwatch
+ blank an invisible pointer
+ crosshair a thin "+" sign
+ hand1 a dark hand pointing northeast
+ hand2 a light hand pointing northwest
+ pencil a pencil pointing southeast
+ question question_arrow
+ right_arrow an arrow pointing northeast
+ up_arrow an arrow pointing upwards
+
+Additionally, any of the mouse pointers that are built into X11 may be
+used by specifying an integer from the X11/cursorfont.h include file.
+
+If a name is used that exists on other systems, but not in X11, the default
+"arrow" pointer is used.
+
+==============================================================================
+5. GTK version *gui-gtk* *GTK+* *GTK*
+
+The GTK version of the GUI works a little bit different.
+
+GTK does _not_ use the traditional X resource settings. Thus items in your
+~/.Xdefaults or app-defaults files are not used.
+Many of the traditional X command line arguments are not supported. (e.g.,
+stuff like -bg, -fg, etc). The ones that are supported are:
+
+ command line argument resource name meaning ~
+ -fn or -font .font font name for the text
+ -geom or -geometry .geometry size of the gvim window
+ -rv or -reverse *reverseVideo white text on black background
+ -display display to be used
+ -fg -foreground {color} foreground color
+ -bg -background {color} background color
+
+To set the font, see |'guifont'|. For GTK, there's also a menu option that
+does this.
+
+Additionally, there are these command line arguments, which are handled by GTK
+internally. Look in the GTK documentation for how they are used:
+ --sync
+ --gdk-debug
+ --gdk-no-debug
+ --no-xshm (not in GTK+ 2)
+ --xim-preedit (not in GTK+ 2)
+ --xim-status (not in GTK+ 2)
+ --gtk-debug
+ --gtk-no-debug
+ --g-fatal-warnings
+ --gtk-module
+ --display (GTK+ counterpart of -display; works the same way.)
+ --screen (The screen number; for GTK+ 2.2 multihead support.)
+
+These arguments are ignored when the |+netbeans_intg| feature is used:
+ -xrm
+ -mf
+
+As for colors, Vim's color settings (for syntax highlighting) is still
+done the traditional Vim way. See |:highlight| for more help.
+
+If you want to set the colors of remaining gui components (e.g., the
+menubar, scrollbar, whatever), those are GTK specific settings and you
+need to set those up in some sort of gtkrc file. You'll have to refer
+to the GTK documentation, however little there is, on how to do this.
+See http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html
+for more information.
+
+ *gtk-tooltip-colors*
+Example, which sets the tooltip colors to black on light-yellow: >
+
+ style "tooltips"
+ {
+ bg[NORMAL] = "#ffffcc"
+ fg[NORMAL] = "#000000"
+ }
+
+ widget "gtk-tooltips*" style "tooltips"
+
+Write this in the file ~/.gtkrc and it will be used by GTK+. For GTK+ 2
+you might have to use the file ~/.gtkrc-2.0 instead, depending on your
+distribution.
+
+Using Vim as a GTK+ plugin *gui-gtk-socketid*
+
+When the GTK+ version of Vim starts up normally, it creates its own top level
+window (technically, a 'GtkWindow'). GTK+ provides an embedding facility with
+its GtkSocket and GtkPlug widgets. If one GTK+ application creates a
+GtkSocket widget in one of its windows, an entirely different GTK+ application
+may embed itself into the first application by creating a top-level GtkPlug
+widget using the socket's ID.
+
+If you pass Vim the command-line option '--socketid' with a decimal or
+hexadecimal value, Vim will create a GtkPlug widget using that value instead
+of the normal GtkWindow. This enables Vim to act as a GTK+ plugin.
+
+This really is a programmer's interface, and is of no use without a supporting
+application to spawn the Vim correctly. For more details on GTK+ sockets, see
+http://www.gtk.org/api/
+
+Note that this feature requires the latest GTK version. GTK 1.2.10 still has
+a small problem. The socket feature has not yet been tested with GTK+ 2 --
+feel free to volunteer.
+
+==============================================================================
+6. GNOME version *gui-gnome* *Gnome* *GNOME*
+
+The GNOME GUI works just like the GTK+ version. See |GTK+| above for how it
+works. It looks a bit different though, and implements one important feature
+that's not available in the plain GTK+ GUI: Interaction with the session
+manager. |gui-gnome-session|
+
+These are the different looks:
+- Uses GNOME dialogs (GNOME 1 only). The GNOME 2 GUI uses the same nice
+ dialogs as the GTK+ 2 version.
+- Uses the GNOME dock, so that the toolbar and menubar can be moved to
+ different locations other than the top (e.g., the toolbar can be placed on
+ the left, right, top, or bottom). The placement of the menubar and
+ toolbar is only saved in the GNOME 2 version.
+- That means the menubar and toolbar handles are back! Yeah! And the
+ resizing grid still works too.
+
+GNOME is automatically compiled with if it was found by configure.
+(FIXME: Is this still true? Use --enable-gnome-check to force it to.)
+
+GNOME session support *gui-gnome-session* *gnome-session*
+
+On logout, Vim shows the well-known exit confirmation dialog if any buffers
+are modified. Clicking [Cancel] will stop the logout process. Otherwise the
+current session is stored to disk by using the |:mksession| command, and
+restored the next time you log in.
+
+The GNOME session support should also work with the KDE session manager.
+If you are experiencing any problems please report them as bugs.
+
+Note: The automatic session save works entirely transparent, in order to
+avoid conflicts with your own session files, scripts and autocommands. That
+means in detail:
+- The session file is stored to a separate directory (usually $HOME/.gnome2).
+- 'sessionoptions' is ignored, and a hardcoded set of appropriate flags is
+ used instead: >
+ blank,curdir,folds,globals,help,options,winsize
+- The internal variable |v:this_session| is not changed when storing the
+ session. Also, it is restored to its old value when logging in again.
+
+The position and size of the GUI window is not saved by Vim since doing so
+is the window manager's job. But if compiled with GTK+ 2 support, Vim helps
+the WM to identify the window by restoring the window role (using the |--role|
+command line argument).
+
+==============================================================================
+7. Compiling *gui-x11-compiling*
+
+If using X11, Vim's Makefile will by default first try to find the necessary
+GTK+ files on your system. If the GTK+ files cannot be found, then the Motif
+files will be searched for. Finally, if this fails, the Athena files will be
+searched for. If all three fail, the GUI will be disabled.
+
+For GTK+, Vim's configuration process requires that GTK+ be properly
+installed. That is, the shell script 'gtk-config' must be in your PATH, and
+you can already successful compile, build, and execute a GTK+ program. The
+reason for this is because the compiler flags (CFLAGS) and link flags
+(LDFLAGS) are obtained through the 'gtk-config' shell script.
+
+If you want to build with GTK+ 2 support pass the --enable-gtk2-check argument
+to ./configure. Optionally, support for GNOME 2 will be compiled if the
+--enable-gnome-check option is also given. Note that the support for GTK+ 2
+is still experimental. However, many people have reported that it works just
+fine for them.
+
+Otherwise, if you are using Motif or Athena, when you have the Motif or Athena
+files in a directory where configure doesn't look, edit the Makefile to enter
+the names of the directories. Search for "GUI_INC_LOC" for an example to set
+the Motif directories, "CONF_OPT_X" for Athena.
+
+ *gui-x11-gtk*
+At the time of this writing, you may use either GTK+ version 1.0.6 or 1.2. It
+is suggested that you use v1.2 since not all of Vim's GUI features are present
+if using v1.0.6. For instance, there are no tearoff menus present in v1.0.6.
+Using a version from GTK+'s CVS tree may or may not work, and is therefore not
+supported and not recommended.
+
+For the experimental GTK+ 2 GUI, using the latest release of the GTK+ 2.0 or
+GTK+ 2.2 series is recommended. CVS HEAD seems to work fine most of time as
+well.
+
+Lastly, although GTK+ has supposedly been ported to the Win32 platform, this
+has not been tested with Vim and is also unsupported. Also, it's unlikely to
+even compile since GTK+ GUI uses parts of the generic X11 code. This might
+change in distant future; particularly because getting rid of the X11 centric
+code parts is also required for GTK+ framebuffer support.
+
+ *gui-x11-motif*
+For Motif, you need at least Motif version 1.2 and/or X11R5. Motif 2.0 and
+X11R6 are OK. Motif 1.1 and X11R4 might work, no guarantee (there may be a
+few problems, but you might make it compile and run with a bit of work, please
+send me the patches if you do). The newest releases of LessTif have been
+reported to work fine too.
+
+ *gui-x11-athena*
+The Athena version uses the Xaw widget set by default. If you have the 3D
+version, you might want to link with Xaw3d instead. This will make the
+menus look a bit better. Edit the Makefile and look for "XAW_LIB". The
+scrollbars will remain the same, because Vim has its own, which are already
+3D (in fact, they look more like Motif).
+
+ *gui-x11-neXtaw*
+The neXtaw version is mostly like Athena, but uses different widgets.
+
+ *gui-x11-misc*
+In general, do not try to mix files from different GTK+, Motif, Athena and X11
+versions. This will cause problems. For example, using header files for
+X11R5 with a library for X11R6 probably doesn't work (although the linking
+won't give an error message, Vim will crash later).
+
+==============================================================================
+8. X11 selection mechanism *x11-selection*
+
+If using X11, in either the GUI or an xterm with an X11-aware Vim, then Vim
+provides varied access to the X11 selection and clipboard. These are accessed
+by using the two selection registers "* and "+.
+
+X11 provides two basic types of global store, selections and cut-buffers,
+which differ in one important aspect: selections are "owned" by an
+application, and disappear when that application (e.g., Vim) exits, thus
+losing the data, whereas cut-buffers, are stored within the X-server itself
+and remain until written over or the X-server exits (e.g., upon logging out).
+
+The contents of selections are held by the originating application (e.g., upon
+a copy), and only passed on to another application when that other application
+asks for them (e.g., upon a paste).
+
+The contents of cut-buffers are immediately written to, and are then
+accessible directly from the X-server, without contacting the originating
+application.
+
+ *quoteplus* *quote+*
+There are three documented X selections: PRIMARY (which is expected to
+represent the current visual selection - as in Vim's Visual mode), SECONDARY
+(which is ill-defined) and CLIPBOARD (which is expected to be used for
+cut, copy and paste operations).
+
+Of these three, Vim uses PRIMARY when reading and writing the "* register
+(hence when the X11 selections are available, Vim sets a default value for
+|'clipboard'| of "autoselect"), and CLIPBOARD when reading and writing the "+
+register. Vim does not access the SECONDARY selection.
+
+Examples: (assuming the default option values)
+- Select an URL in Visual mode in Vim. Go to a text field in Netscape and
+ click the middle mouse button. The selected text will be inserted
+ (hopefully!).
+- Select some text in Netscape by dragging with the mouse. Go to Vim and
+ press the middle mouse button: The selected text is inserted.
+- Select some text in Vim and do "+y. Go to Netscape, select some text in a
+ textfield by dragging with the mouse. Now use the right mouse button and
+ select "Paste" from the popup menu. The selected text is overwritten by the
+ text from Vim.
+Note that the text in the "+ register remains available when making a Visual
+selection, which makes other text available in the "* register. That allows
+overwriting selected text.
+ *x11-cut-buffer*
+There are, by default, 8 cut-buffers: CUT_BUFFER0 to CUT_BUFFER7. Vim only
+uses CUT_BUFFER0, which is the one that xterm uses by default.
+
+Whenever Vim is about to become unavailable (either via exiting or becoming
+suspended), and thus unable to respond to another application's selection
+request, it writes the contents of any owned selection to CUT_BUFFER0. If the
+"+ CLIPBOARD selection is owned by Vim, then this is written in preference,
+otherwise if the "* PRIMARY selection is owned by Vim, then that is written.
+
+Similarly, when Vim tries to paste from "* or "+ (either explicitly, or, in
+the case of the "* register, when the middle mouse button is clicked), if the
+requested X selection is empty or unavailable, Vim reverts to reading the
+current value of the CUT_BUFFER0.
+
+Note that when text is copied to CUT_BUFFER0 in this way, the type of
+selection (character, line or block) is always lost, even if it is a Vim which
+later pastes it.
+
+Xterm, by default, always writes visible selections to both PRIMARY and
+CUT_BUFFER0. When it pastes, it uses PRIMARY if this is available, or else
+falls back upon CUT_BUFFER0. For this reason, when cutting and pasting
+between Vim and an xterm, you should use the "* register. Xterm doesn't use
+CLIPBOARD, thus the "+ doesn't work with xterm.
+
+Most newer applications will provide their current selection via PRIMARY ("*)
+and use CLIPBOARD ("+) for cut/copy/paste operations. You thus have access to
+both by choosing to use either of the "* or "+ registers.
+
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/hangulin.txt b/runtime/doc/hangulin.txt
new file mode 100644
index 000000000..c1133cb97
--- /dev/null
+++ b/runtime/doc/hangulin.txt
@@ -0,0 +1,101 @@
+*hangulin.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Chi-Deok Hwang and Sung-Hyun Nam
+
+Introduction *hangul*
+------------
+It is to input hangul, the Korean language, with VIM GUI version.
+If you have a XIM program, you can use another |+xim| feature.
+Basically, it is for whom has no XIM program.
+
+Compile
+-------
+Next is a basic option. You can add any other configure option. >
+
+ ./configure --with-x --enable-multibyte --enable-fontset --enable-hangulinput
+
+And you should check the feature.h. If |+hangul_input| feature is enabled
+by configure, you can select more options such as keyboard type, 2 bulsik
+or 3 bulsik. You can find keywords like next in there. >
+
+ #define HANGUL_DEFAULT_KEYBOARD 2
+ #define ESC_CHG_TO_ENG_MODE
+ /* #define X_LOCALE */
+ /* #define SLOW_XSERVER */
+
+Environment variables
+---------------------
+You should set LANG variable to Korean locale such as ko or ko_KR.euc.
+If you set LC_ALL variable, it should be set to Korean locale also.
+
+VIM resource
+------------
+You should add nexts to your global vimrc ($HOME/.vimrc). >
+
+ :set fileencoding=korea
+
+Keyboard
+--------
+You can change keyboard type (2 bulsik or 3 bulsik) using VIM_KEYBOARD
+or HANGUL_KEYBOARD_TYPE environment variables. For sh, just do (2 bulsik): >
+
+ export VIM_KEYBOARD="2"
+or >
+ export HANGUL_KEYBOARD_TYPE="2"
+
+If both are set, VIM_KEYBOARD has higher priority.
+
+Hangul Fonts
+------------
+You can set text font using $HOME/.Xdefaults or $HOME/.gvimrc.
+But to use Hangul, you should set 'guifontset' in your vimrc.
+
+$HOME/.Xdefaults: >
+ Vim.font: english_font
+
+ ! Nexts are for hangul menu with Athena
+ *international: True
+ Vim*fontSet: english_font,hangul_font
+
+ ! Nexts are for hangul menu with Motif
+ *international: True
+ Vim*fontList: english_font;hangul_font:
+
+$HOME/.gvimrc: >
+ set guifontset=english_font,hangul_font
+
+attention! the , (comma) or ; (semicolon)
+
+And there should be no ':set guifont'. If it exists, then Gvim ignores
+':set guifontset'. It means VIM runs without fontset supporting.
+So, you can see only English. Hangul does not be correctly displayed.
+
+After 'fontset' feature is enabled, VIM does not allow using 'font'.
+For example, if you use >
+ :set guifontset=eng_font,your_font
+in your .gvimrc, then you should do for syntax >
+ :hi Comment guifg=Cyan font=another_eng_font,another_your_font
+If you just do >
+ :hi Comment font=another_eng_font
+then you can see a GOOD error message. Be careful!
+
+hangul_font width should be twice than english_font width.
+
+Unsupported Feature
+-------------------
+Johab font not yet supported. And I don't have any plan.
+If you really want to use johab font, you can use the
+hanguldraw.c in gau package.
+
+Hanja input not yet supported. And I don't have any plan.
+If you really want to input hanja, just use VIM with hanterm.
+
+Bug or Comment
+--------------
+Send comments, patches and suggestions to:
+
+ Chi-Deok Hwang <hwang@mizi.co.kr>
+ Nam SungHyun <namsh@lge.com>
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/hebrew.txt b/runtime/doc/hebrew.txt
new file mode 100644
index 000000000..f595e29e8
--- /dev/null
+++ b/runtime/doc/hebrew.txt
@@ -0,0 +1,145 @@
+*hebrew.txt* For Vim version 7.0aa. Last change: 2003 May 11
+
+
+ VIM REFERENCE MANUAL by Ron Aaron (and Avner Lottem)
+
+
+Hebrew Language support (options & mapping) for Vim *hebrew*
+
+The supporting 'rightleft' functionality was originally created by Avner
+Lottem:
+ E-mail: alottem@iil.intel.com
+ Phone: +972-4-8307322
+
+Ron Aaron <ron@ronware.org> is currently helping support these features.
+
+{Vi does not have any of these commands}
+
+All this is only available when the |+rightleft| feature was enabled at
+compile time.
+
+
+Introduction
+------------
+Hebrew-specific options are 'hkmap', 'hkmapp' 'keymap'=hebrew and 'aleph'.
+Hebrew-useful options are 'delcombine', 'allowrevins', 'revins', 'rightleft'
+and 'rightleftcmd'.
+
+The 'rightleft' mode reverses the display order, so characters are displayed
+from right to left instead of the usual left to right. This is useful
+primarily when editing Hebrew or other Middle-Eastern languages.
+See |rileft.txt| for further details.
+
+Details
+--------------
++ Options:
+ + 'rightleft' ('rl') sets window orientation to right-to-left. This means
+ that the logical text 'ABC' will be displayed as 'CBA', and will start
+ drawing at the right edge of the window, not the left edge.
+ + 'hkmap' ('hk') sets keyboard mapping to Hebrew, in insert/replace modes.
+ + 'aleph' ('al'), numeric, holds the decimal code of Aleph, for keyboard
+ mapping.
+ + 'hkmapp' ('hkp') sets keyboard mapping to 'phonetic hebrew'
+
+ NOTE: these three ('hkmap', 'hkmapp' and 'aleph') are obsolete. You should
+ use ":set keymap=hebrewp" instead.
+
+ + 'delcombine' ('deco'), boolean, if editing UTF-8 encoded Hebrew, allows
+ one to remove the niqud or te`amim by pressing 'x' on a character (with
+ associated niqud).
+
+ + 'rightleftcmd' ('rlc') makes the command-prompt for searches show up on
+ the right side. It only takes effect if the window is 'rightleft'.
+
++ Encoding:
+ + Under Unix, ISO 8859-8 encoding (Hebrew letters codes: 224-250).
+ + Under MS DOS, PC encoding (Hebrew letters codes: 128-154).
+ These are defaults, that can be overridden using the 'aleph' option.
+ + You should prefer using UTF8, as it supports the combining-characters
+ ('deco' does nothing if UTF8 encoding is not active).
+
++ Vim arguments:
+ + 'vim -H file' starts editing a Hebrew file, i.e. 'rightleft' and 'hkmap'
+ are set.
+
++ Keyboard:
+ + The 'allowrevins' option enables the CTRL-_ command in Insert mode and
+ in Command-line mode.
+
+ + CTRL-_ in insert/replace modes toggles 'revins' and 'hkmap' as follows:
+
+ When in rightleft window, 'revins' and 'nohkmap' are toggled, since
+ English will likely be inserted in this case.
+
+ When in norightleft window, 'revins' 'hkmap' are toggled, since Hebrew
+ will likely be inserted in this case.
+
+ CTRL-_ moves the cursor to the end of the typed text.
+
+ + CTRL-_ in command mode only toggles keyboard mapping (see Bugs below).
+ This setting is independent of 'hkmap' option, which only applies to
+ insert/replace mode.
+
+ Note: On some keyboards, CTRL-_ is mapped to CTRL-?.
+
+ + Keyboard mapping while 'hkmap' is set (standard Israeli keyboard):
+
+ q w e r t y u i o p
+ / ' ק ר × ×˜ ו ן × ×¤
+
+ a s d f g h j k l ; '
+ ש ד ג כ ע י ח ל ך ף ,
+
+ z x c v b n m , . /
+ ז ס ב ה נ מ צ ת ץ .
+
+ 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
+ keymap file 'hebrew.vim' etc.
+
+
+Typing backwards
+
+If the 'revins' (reverse insert) option is set, inserting happens backwards.
+This can be used to type Hebrew. When inserting characters the cursor is not
+moved and the text moves rightwards. A <BS> deletes the character under the
+cursor. CTRL-W and CTRL-U also work in the opposite direction. <BS>, CTRL-W
+and CTRL-U do not stop at the start of insert or end of line, no matter how
+the 'backspace' option is set.
+
+There is no reverse replace mode (yet).
+
+If the 'showmode' option is set, "-- REVERSE INSERT --" will be shown in the
+status line when reverse Insert mode is active.
+
+When the 'allowrevins' option is set, reverse Insert mode can be also entered
+via CTRL-_, which has some extra functionality: First, keyboard mapping is
+changed according to the window orientation -- if in a left-to-right window,
+'revins' is used to enter Hebrew text, so the keyboard changes to Hebrew
+('hkmap' is set); if in a right-to-left window, 'revins' is used to enter
+English text, so the keyboard changes to English ('hkmap' is reset). Second,
+when exiting 'revins' via CTRL-_, the cursor moves to the end of the typed
+text (if possible).
+
+
+Pasting when in a rightleft window
+----------------------------------
+When cutting text with the mouse and pasting it in a rightleft window
+the text will be reversed, because the characters come from the cut buffer
+from the left to the right, while inserted in the file from the right to
+the left. In order to avoid it, toggle 'revins' (by typing CTRL-? or CTRL-_)
+before pasting.
+
+
+Hebrew characters and the 'isprint' variable
+--------------------------------------------
+Sometimes Hebrew character codes are in the non-printable range defined by
+the 'isprint' variable. For example in the Linux console, the Hebrew font
+encoding starts from 128, while the default 'isprint' variable is @,161-255.
+The result is that all Hebrew characters are displayed as ~x. To solve this
+problem, set isprint=@,128-255.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
new file mode 100644
index 000000000..3614e4cdb
--- /dev/null
+++ b/runtime/doc/help.txt
@@ -0,0 +1,197 @@
+*help.txt* For Vim version 7.0aa. Last change: 2004 May 04
+
+ VIM - main help file
+ k
+ Move around: Use the cursor keys, or "h" to go left, h l
+ "j" to go down, "k" to go up, "l" to go right. j
+Close this window: Use ":q<Enter>".
+ Get out of Vim: Use ":qa!<Enter>" (careful, all changes are lost!).
+
+Jump to a subject: Position the cursor on a tag between |bars| and hit CTRL-].
+ With the mouse: ":set mouse=a" to enable the mouse (in xterm or GUI).
+ Double-click the left mouse button on a tag between |bars|.
+ Jump back: Type CTRL-T or CTRL-O (repeat to go further back).
+
+Get specific help: It is possible to go directly to whatever you want help
+ on, by giving an argument to the ":help" command |:help|.
+ It is possible to further specify the context:
+ *help-context*
+ WHAT PREPEND EXAMPLE ~
+ Normal mode commands (nothing) :help x
+ Visual mode commands v_ :help v_u
+ Insert mode commands i_ :help i_<Esc>
+ Command-line commands : :help :quit
+ Command-line editing c_ :help c_<Del>
+ Vim command arguments - :help -r
+ Options ' :help 'textwidth'
+ Search for help: Type ":help word", then hit CTRL-D to see matching
+ help entries for "word".
+
+VIM stands for Vi IMproved. Most of VIM was made by Bram Moolenaar, but only
+through the help of many others. See |credits|.
+------------------------------------------------------------------------------
+ *doc-file-list* *Q_ct*
+BASIC:
+|quickref| Overview of the most common commands you will use
+|tutor| 30 minutes training course for beginners
+|copying| About copyrights
+|iccf| Helping poor children in Uganda
+|sponsor| Sponsor Vim development, become a registered Vim user
+|www| Vim on the World Wide Web
+|bugs| Where to send bug reports
+
+USER MANUAL: These files explain how to accomplish an editing task.
+
+|usr_toc.txt| Table Of Contents
+
+Getting Started ~
+|usr_01.txt| About the manuals
+|usr_02.txt| The first steps in Vim
+|usr_03.txt| Moving around
+|usr_04.txt| Making small changes
+|usr_05.txt| Set your settings
+|usr_06.txt| Using syntax highlighting
+|usr_07.txt| Editing more than one file
+|usr_08.txt| Splitting windows
+|usr_09.txt| Using the GUI
+|usr_10.txt| Making big changes
+|usr_11.txt| Recovering from a crash
+|usr_12.txt| Clever tricks
+
+Editing Effectively ~
+|usr_20.txt| Typing command-line commands quickly
+|usr_21.txt| Go away and come back
+|usr_22.txt| Finding the file to edit
+|usr_23.txt| Editing other files
+|usr_24.txt| Inserting quickly
+|usr_25.txt| Editing formatted text
+|usr_26.txt| Repeating
+|usr_27.txt| Search commands and patterns
+|usr_28.txt| Folding
+|usr_29.txt| Moving through programs
+|usr_30.txt| Editing programs
+|usr_31.txt| Exploiting the GUI
+
+Tuning Vim ~
+|usr_40.txt| Make new commands
+|usr_41.txt| Write a Vim script
+|usr_42.txt| Add new menus
+|usr_43.txt| Using filetypes
+|usr_44.txt| Your own syntax highlighted
+|usr_45.txt| Select your language
+
+Making Vim Run ~
+|usr_90.txt| Installing Vim
+
+
+REFERENCE MANUAL: These files explain every detail of Vim.
+
+General subjects ~
+|intro.txt| general introduction to Vim; notation used in help files
+|help.txt| overview and quick reference (this file)
+|index.txt| alphabetical index of all commands
+|help-tags| all the tags you can jump to (index of tags)
+|howto.txt| how to do the most common editing tasks
+|tips.txt| various tips on using Vim
+|message.txt| (error) messages and explanations
+|quotes.txt| remarks from users of Vim
+|todo.txt| known problems and desired extensions
+|develop.txt| development of Vim
+|uganda.txt| Vim distribution conditions and what to do with your money
+
+Basic editing ~
+|starting.txt| starting Vim, Vim command arguments, initialisation
+|editing.txt| editing and writing files
+|motion.txt| commands for moving around
+|scroll.txt| scrolling the text in the window
+|insert.txt| Insert and Replace mode
+|change.txt| deleting and replacing text
+|indent.txt| automatic indenting for C and other languages
+|undo.txt| Undo and Redo
+|repeat.txt| repeating commands, Vim scripts and debugging
+|visual.txt| using the Visual mode (selecting a text area)
+|various.txt| various remaining commands
+|recover.txt| recovering from a crash
+
+Advanced editing ~
+|cmdline.txt| Command-line editing
+|options.txt| description of all options
+|pattern.txt| regexp patterns and search commands
+|map.txt| key mapping and abbreviations
+|tagsrch.txt| tags and special searches
+|quickfix.txt| commands for a quick edit-compile-fix cycle
+|windows.txt| commands for using multiple windows and buffers
+|syntax.txt| syntax highlighting
+|diff.txt| working with two or three versions of the same file
+|autocmd.txt| automatically executing commands on an event
+|filetype.txt| settings done specifically for a type of file
+|eval.txt| expression evaluation, conditional commands
+|fold.txt| hide (fold) ranges of lines
+
+Special issues ~
+|remote.txt| using Vim as a server or client
+|term.txt| using different terminals and mice
+|digraph.txt| list of available digraphs
+|mbyte.txt| multi-byte text support
+|mlang.txt| non-English language support
+|arabic.txt| Arabic language support and editing
+|farsi.txt| Farsi (Persian) editing
+|hebrew.txt| Hebrew language support and editing
+|russian.txt| Russian language support and editing
+|hangulin.txt| Hangul (Korean) input mode
+|rileft.txt| right-to-left editing mode
+
+GUI ~
+|gui.txt| Graphical User Interface (GUI)
+|gui_w16.txt| Windows 3.1 GUI
+|gui_w32.txt| Win32 GUI
+|gui_x11.txt| X11 GUI
+
+Interfaces ~
+|if_cscop.txt| using cscope with Vim
+|if_perl.txt| Perl interface
+|if_pyth.txt| Python interface
+|if_sniff.txt| SNiFF+ interface
+|if_tcl.txt| Tcl interface
+|if_ole.txt| OLE automation interface for Win32
+|if_ruby.txt| Ruby interface
+|debugger.txt| Interface with a debugger
+|workshop.txt| Sun Visual Workshop interface
+|netbeans.txt| NetBeans External Editor interface
+|sign.txt| debugging signs
+
+Versions ~
+|vi_diff.txt| Main differences between Vim and Vi
+|version4.txt| Differences between Vim version 3.0 and 4.x
+|version5.txt| Differences between Vim version 4.6 and 5.x
+|version6.txt| Differences between Vim version 5.7 and 6.x
+ *sys-file-list*
+Remarks about specific systems ~
+|os_390.txt| OS/390 Unix
+|os_amiga.txt| Amiga
+|os_beos.txt| BeOS and BeBox
+|os_dos.txt| MS-DOS and MS-Windows NT/95 common items
+|os_mac.txt| Macintosh
+|os_mint.txt| Atari MiNT
+|os_msdos.txt| MS-DOS (plain DOS and DOS box under Windows)
+|os_os2.txt| OS/2
+|os_qnx.txt| QNX
+|os_risc.txt| RISC-OS
+|os_unix.txt| Unix
+|os_vms.txt| VMS
+|os_win32.txt| MS-Windows 95/98/NT
+ *standard-plugin-list*
+Standard plugins ~
+|pi_netrw.txt| Reading and writing files over a network
+|pi_gzip.txt| Reading and writing compressed files
+|pi_expl.txt| File explorer
+
+LOCAL ADDITIONS: *local-additions*
+
+------------------------------------------------------------------------------
+*bars* Bars example
+
+Now that you've jumped here with CTRL-] or a double mouse click, you can use
+CTRL-T, CTRL-O, g<RightMouse>, or <C-RightMouse> to go back to where you were.
+------------------------------------------------------------------------------
+ vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
diff --git a/runtime/doc/help.txt.info b/runtime/doc/help.txt.info
new file mode 100755
index 000000000..0f8df8182
--- /dev/null
+++ b/runtime/doc/help.txt.info
Binary files differ
diff --git a/runtime/doc/howto.txt b/runtime/doc/howto.txt
new file mode 100644
index 000000000..aa99190bd
--- /dev/null
+++ b/runtime/doc/howto.txt
@@ -0,0 +1,96 @@
+*howto.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+How to ... *howdoi* *how-do-i* *howto* *how-to*
+
+|tutor| get started
+|:quit| exit? I'm trapped, help me!
+|initialization| initialize Vim
+|vimrc-intro| write a Vim script file (vimrc)
+|suspend| suspend Vim
+|usr_11.txt| recover after a crash
+|07.4| keep a backup of my file when writing over it
+
+|usr_07.txt| edit files
+|23.4| edit binary files
+|usr_24.txt| insert text
+|deleting| delete text
+|usr_04.txt| change text
+|04.5| copy and move text
+|usr_25.txt| format text
+|30.6| format comments
+|30.2| indent C programs
+|25.3| automatically set indent
+
+|usr_26.txt| repeat commands
+|02.5| undo and redo
+
+|usr_03.txt| move around
+|word-motions| word motions
+|left-right-motions| left-right motions
+|up-down-motions| up-down motions
+|object-motions| text-object motions
+|various-motions| various motions
+|object-select| text-object selection
+|'whichwrap'| move over line breaks
+|'virtualedit'| move to where there is no text
+|usr_27.txt| specify pattern for searches
+|tags-and-searches| do tags and special searches
+|29.4| search in include'd files used to find
+ variables, functions, or macros
+|K| look up manual for the keyword under cursor
+
+|03.7| scroll
+|'sidescroll'| scroll horizontally/sideways
+|'scrolloff'| set visible context lines
+
+|mode-switching| change modes
+|04.4| use Visual mode
+|'insertmode'| start Vim in Insert mode
+
+|40.1| map keys
+|24.7| create abbreviations
+
+|ins-expandtab| expand a tab to spaces in Insert mode
+|i_CTRL-R| insert contents of a register in Insert mode
+|24.3| complete words in Insert mode
+|25.1| break a line before it gets too long
+
+|20.1| do command-line editing
+|20.3| do command-line completion
+|'cmdheight'| increase the height of command-line
+|10.3| specify command-line ranges
+|40.3| specify commands to be executed automatically
+ before/after reading/writing entering/leaving a
+ buffer/window
+
+|'autowrite'| write automatically
+|30.1| speedup edit-compile-edit cycle or compile and fix
+ errors within Vim
+
+|options| set options
+|auto-setting| set options automatically
+|term-dependent-settings| set options depending on terminal name
+|save-settings| save settings
+|:quote| comment my exrc/vimrc/gvimrc files
+|'helpheight'| change the default help height
+|'highlight'| set various highlighting modes
+|'title'| set the window title
+|'icon'| set window icon title
+|'report'| avoid seeing the change messages on every line
+|'shortmess'| avoid |hit-enter| prompts
+
+|mouse-using| use mouse with Vim
+|usr_08.txt| manage multiple windows and buffers
+|gui.txt| use the gui
+
+|You can't! (yet)| do dishes using Vim
+
+|usr_06.txt| switch on syntax highlighting
+|2html.vim| convert a colored file to HTML
+|less| use Vim like less or more with syntax highlighting
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_cscop.txt b/runtime/doc/if_cscop.txt
new file mode 100644
index 000000000..44ff66c1d
--- /dev/null
+++ b/runtime/doc/if_cscop.txt
@@ -0,0 +1,474 @@
+*if_cscop.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Andy Kahn
+
+ *cscope* *Cscope*
+This document explains how to use Vim's cscope interface.
+
+Cscope is a tool like ctags, but think of it as ctags on steroids since it
+does a lot more than what ctags provides. In Vim, jumping to a result from
+a cscope query is just like jumping to any tag; it is saved on the tag stack
+so that with the right keyboard mappings, you can jump back and forth between
+functions as you normally would with |tags|.
+
+1. Cscope introduction |cscope-intro|
+2. Cscope related commands |cscope-commands|
+3. Cscope options |cscope-options|
+4. How to use cscope in Vim |cscope-howtouse|
+5. Limitations |cscope-limitations|
+6. Suggested usage |cscope-suggestions|
+7. Availability & Information |cscope-info|
+
+This is currently for Unix and Win32 only.
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Cscope introduction *cscope-intro*
+
+The following text is taken from a version of the cscope man page:
+
+ -----
+
+ Cscope is an interactive screen-oriented tool that helps you:
+
+ Learn how a C program works without endless flipping through a thick
+ listing.
+
+ Locate the section of code to change to fix a bug without having to
+ learn the entire program.
+
+ Examine the effect of a proposed change such as adding a value to an
+ enum variable.
+
+ Verify that a change has been made in all source files such as adding
+ an argument to an existing function.
+
+ Rename a global variable in all source files.
+
+ Change a constant to a preprocessor symbol in selected lines of files.
+
+ It is designed to answer questions like:
+ Where is this symbol used?
+ Where is it defined?
+ Where did this variable get its value?
+ What is this global symbol's definition?
+ Where is this function in the source files?
+ What functions call this function?
+ What functions are called by this function?
+ Where does the message "out of space" come from?
+ Where is this source file in the directory structure?
+ What files include this header file?
+
+ Cscope answers these questions from a symbol database that it builds the
+ first time it is used on the source files. On a subsequent call, cscope
+ rebuilds the database only if a source file has changed or the list of
+ source files is different. When the database is rebuilt the data for the
+ unchanged files is copied from the old database, which makes rebuilding
+ much faster than the initial build.
+
+ -----
+
+When cscope is normally invoked, you will get a full-screen selection
+screen allowing you to make a query for one of the above questions.
+However, once a match is found to your query and you have entered your
+text editor to edit the source file containing match, you cannot simply
+jump from tag to tag as you normally would with vi's Ctrl-] or :tag
+command.
+
+Vim's cscope interface is done by invoking cscope with its line-oriented
+interface, and then parsing the output returned from a query. The end
+result is that cscope query results become just like regular tags, so
+you can jump to them just like you do with normal tags (Ctrl-] or :tag)
+and then go back by popping off the tagstack with Ctrl-T. (Please note
+however, that you don't actually jump to a cscope tag simply by doing
+Ctrl-] or :tag without remapping these commands or setting an option.
+See the remaining sections on how the cscope interface works and for
+suggested use.)
+
+
+==============================================================================
+2. Cscope related commands *cscope-commands*
+
+ *:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
+All cscope commands are accessed through suboptions to the main cscope
+command ":cscope". The shortest abbreviation is ":cs". The ":scscope"
+command does the same and also splits the window (short: "scs").
+
+The available subcommands are:
+
+ *E563* *E564* *E566* *E568* *E569* *E622* *E623*
+ *E625* *E626* *E609*
+ add : Add a new cscope database/connection.
+
+ USAGE :cs add {file|dir} [pre-path] [flags]
+
+ [pre-path] is the pathname used with the -P command to cscope.
+
+ [flags] are any additional flags you want to pass to cscope.
+
+ EXAMPLES >
+ :cscope add /usr/local/cdb/cscope.out
+ :cscope add /projects/vim/cscope.out /usr/local/vim
+ :cscope add cscope.out /usr/local/vim -C
+<
+ *cscope-find* *cs-find*
+ *E565* *E567*
+ find : Query cscope. All cscope query options are available
+ except option #5 ("Change this grep pattern").
+
+ USAGE :cs find {querytype} {name}
+
+ {querytype} corresponds to the actual cscope line
+ interface numbers as well as default nvi commands:
+
+ 0 or s: Find this C symbol
+ 1 or g: Find this definition
+ 2 or d: Find functions called by this function
+ 3 or c: Find functions calling this function
+ 4 or t: Find this text string
+ 6 or e: Find this egrep pattern
+ 7 or f: Find this file
+ 8 or i: Find files #including this file
+
+ EXAMPLES >
+ :cscope find c vim_free
+ :cscope find 3 vim_free
+<
+ These two examples perform the same query. >
+
+ :cscope find 0 DEFAULT_TERM
+<
+ Executing this example on the source code for Vim 5.1 produces the
+ following output:
+
+ Cscope tag: DEFAULT_TERM
+ # line filename / context / line
+ 1 1009 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"amiga"
+ 2 1013 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"win32"
+ 3 1017 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"pcterm"
+ 4 1021 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"ansi"
+ 5 1025 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"vt52"
+ 6 1029 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"os2ansi"
+ 7 1033 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"ansi"
+ 8 1037 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ # undef DEFAULT_TERM
+ 9 1038 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"beos-ansi"
+ 10 1042 vim-5.1-gtk/src/term.c <<GLOBAL>>
+ #define DEFAULT_TERM (char_u *)"mac-ansi"
+ 11 1335 vim-5.1-gtk/src/term.c <<set_termname>>
+ term = DEFAULT_TERM;
+ 12 1459 vim-5.1-gtk/src/term.c <<set_termname>>
+ if (STRCMP(term, DEFAULT_TERM))
+ 13 1826 vim-5.1-gtk/src/term.c <<termcapinit>>
+ term = DEFAULT_TERM;
+ 14 1833 vim-5.1-gtk/src/term.c <<termcapinit>>
+ term = DEFAULT_TERM;
+ 15 3635 vim-5.1-gtk/src/term.c <<update_tcap>>
+ p = find_builtin_term(DEFAULT_TERM);
+ Enter nr of choice (<CR> to abort):
+
+ The output shows several pieces of information:
+ 1. The tag number (there are 15 in this example).
+ 2. The line number where the tag occurs.
+ 3. The filename where the tag occurs.
+ 4. The context of the tag (e.g., global, or the function name).
+ 5. The line from the file itself.
+
+ help : Show a brief synopsis.
+
+ USAGE :cs help
+
+ *E260* *E261*
+ kill : Kill a cscope connection (or kill all cscope connections).
+
+ USAGE :cs kill {num|partial_name}
+
+ To kill a cscope connection, the connection number or a partial
+ name must be specified. The partial name is simply any part of
+ the pathname of the cscope database. Kill a cscope connection
+ using the partial name with caution!
+
+ If the specified connection number is -1, then _ALL_ cscope
+ connections will be killed.
+
+ reset : Reinit all cscope connections.
+
+ USAGE :cs reset
+
+ show : Show cscope connections.
+
+ USAGE :cs show
+
+ *:cstag* *E257* *E562*
+If you use cscope as well as ctags, |:cstag| allows you to search one or
+the other before making a jump. For example, you can choose to first
+search your cscope database(s) for a match, and if one is not found, then
+your tags file(s) will be searched. The order in which this happens
+is determined by the value of |csto|. See |cscope-options| for more
+details.
+
+|:cstag| performs the equivalent of ":cs find g" on the identifier when
+searching through the cscope database(s).
+
+|:cstag| performs the equivalent of |:tjump| on the identifier when searching
+through your tags file(s).
+
+
+==============================================================================
+3. Cscope options *cscope-options*
+
+Use the |:set| command to set all cscope options. Ideally, you would do
+this in one of your startup files (e.g., .vimrc). Some cscope related
+variables are only valid within |.vimrc|. Setting them after vim has
+started will have no effect!
+
+ *cscopeprg* *csprg*
+'cscopeprg' specifies the command to execute cscope. The default is
+"cscope". For example: >
+ :set csprg=/usr/local/bin/cscope
+<
+ *cscopequickfix* *csqf* *E469*
+{not available when compiled without the |+quickfix| feature}
+'cscopequickfix' specifies whether to use quickfix window to show cscope
+results. This is a list of comma-separated values. Each item consists of
+|cscope-find| command (s, g, d, c, t, e, f or i) and flag (+, - or 0).
+'+' indicates that results must be appended to quickfix window,
+'-' implies previous results clearance, '0' or command absence - don't use
+quickfix. Search is performed from start until first command occurrence.
+The default value is "" (don't use quickfix anyway). The following value
+seems to be useful: "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: >
+ :set cst
+ :set nocst
+<
+ *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
+by tag file(s) if cscope did not return any matches. If 'csto' is set to
+one, tag file(s) are searched before cscope database(s). The default is zero.
+Examples: >
+ :set csto=0
+ :set csto=1
+<
+ *cscopeverbose* *csverb*
+If 'cscopeverbose' is not set (the default), messages will not be printed
+indicating success or failure when adding a cscope database. Ideally, you
+should reset this option in your |.vimrc| before adding any cscope databases,
+and after adding them, set it. From then on, when you add more databases
+within Vim, you will get a (hopefully) useful message should the database fail
+to be added. Examples: >
+ :set csverb
+ :set nocsverb
+<
+ *cscopepathcomp* *cspc*
+The value of 'cspc' determines how many components of a file's path to
+display. With the default value of zero the entire path will be displayed.
+The value one will display only the filename with no path. Other values
+display that many components. For example: >
+ :set cspc=3
+will display the last 3 components of the file's path, including the file
+name itself.
+
+==============================================================================
+4. How to use cscope in Vim *cscope-howtouse*
+
+The first thing you need to do is to build a cscope database for your
+source files. For the most basic case, simply do "cscope -b". Please
+refer to the cscope man page for more details.
+
+Assuming you have a cscope database, you need to "add" the database to Vim.
+This establishes a cscope "connection" and makes it available for Vim to use.
+You can do this in your .vimrc file, or you can do it manually after starting
+vim. For example, to add the cscope database "cscope.out", you would do:
+
+ :cs add cscope.out
+
+You can double-check the result of this by executing ":cs show". This will
+produce output which looks like this:
+
+ # pid database name prepend path
+ 0 28806 cscope.out <none>
+
+Note:
+Because of the Microsoft RTL limitations, Win32 version shows 0 instead
+of the real pid.
+
+Once a cscope connection is established, you can make queries to cscope and
+the results will be printed to you. Queries are made using the command
+":cs find". For example:
+
+ :cs find g ALIGN_SIZE
+
+This can get a little cumbersome since one ends up doing a significant
+amount of typing. Fortunately, there are ways around this by mapping
+shortcut keys. See |cscope-suggestions| for suggested usage.
+
+If the results return only one match, you will automatically be taken to it.
+If there is more than one match, you will be given a selection screen to pick
+the match you want to go to. After you have jumped to the new location,
+simply hit Ctrl-T to get back to the previous one.
+
+
+==============================================================================
+5. Limitations *cscope-limitations*
+
+Cscope support for Vim is only available on systems that support these four
+system calls: fork(), pipe(), execl(), waitpid(). This means it is mostly
+limited to Unix systems.
+
+Additionally Cscope support works for Win32. For more information and a
+cscope version for Win32 see:
+
+ http://iamphet.nm.ru/cscope/index.html
+
+There are a couple of hard-coded limitations:
+
+ 1. The maximum number of cscope connections allowed is 8. Do you
+ really need more?
+
+ 2. Doing a |:tjump| when |:cstag| searches the tag files is not
+ configurable (e.g., you can't do a tselect instead).
+
+==============================================================================
+6. Suggested usage *cscope-suggestions*
+
+Put these entries in your .vimrc (adjust the pathname accordingly to your
+setup): >
+
+ if has("cscope")
+ set csprg=/usr/local/bin/cscope
+ set csto=0
+ set cst
+ set nocsverb
+ " add any database in current directory
+ if filereadable("cscope.out")
+ cs add cscope.out
+ " else add database pointed to by environment
+ elseif $CSCOPE_DB != ""
+ cs add $CSCOPE_DB
+ endif
+ set csverb
+ endif
+
+By setting 'cscopetag', we have effectively replaced all instances of the :tag
+command with :cstag. This includes :tag, Ctrl-], and "vim -t". In doing
+this, the regular tag command not only searches your ctags generated tag
+files, but your cscope databases as well.
+
+Some users may want to keep the regular tag behavior and have a different
+shortcut to access :cstag. For example, one could map Ctrl-_ (underscore)
+to :cstag with the following command: >
+
+ map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>
+
+A couple of very commonly used cscope queries (using ":cs find") is to
+find all functions calling a certain function and to find all occurrences
+of a particular C symbol. To do this, you can use these mappings as an
+example: >
+
+ map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
+ map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
+
+These mappings for Ctrl-] (right bracket) and Ctrl-\ (backslash) allow you to
+place your cursor over the function name or C symbol and quickly query cscope
+for any matches.
+
+Or you may use the following scheme, inspired by Vim/Cscope tutorial from
+Cscope Home Page (http://cscope.sourceforge.net/): >
+
+ nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
+ nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
+ nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
+
+ " Using 'CTRL-spacebar' then a search type makes the vim window
+ " split horizontally, with search result displayed in
+ " the new window.
+
+ nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
+ nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
+ nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>
+
+ " Hitting CTRL-space *twice* before the search type does a vertical
+ " split instead of a horizontal one
+
+ nmap <C-Space><C-Space>s
+ \:vert scs find s <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space><C-Space>g
+ \:vert scs find g <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space><C-Space>c
+ \:vert scs find c <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space><C-Space>t
+ \:vert scs find t <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space><C-Space>e
+ \:vert scs find e <C-R>=expand("<cword>")<CR><CR>
+ nmap <C-Space><C-Space>i
+ \:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
+ nmap <C-Space><C-Space>d
+ \:vert scs find d <C-R>=expand("<cword>")<CR><CR>
+
+==============================================================================
+7. Cscope availability and information *cscope-info*
+
+If you do not already have cscope (it did not come with your compiler
+license or OS distribution), then you can download it for free from:
+ http://cscope.sourceforge.net/
+This is released by SCO under the BSD license.
+
+If you want a newer version of cscope, you will probably have to buy it.
+According to the (old) nvi documentation:
+
+ You can buy version 13.3 source with an unrestricted license
+ for $400 from AT&T Software Solutions by calling +1-800-462-8146.
+
+Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
+which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
+from World-Wide Exptools Open Source packages page:
+ http://www.bell-labs.com/project/wwexptools/packages.html
+
+In Solaris 2.x, if you have the C compiler license, you will also have
+cscope. Both are usually located under /opt/SUNWspro/bin
+
+SGI developers can also get it. Search for Cscope on this page:
+ http://freeware.sgi.com/index-by-alpha.html
+ https://toolbox.sgi.com/toolbox/utilities/cscope/
+The second one is for those who have a password for the SGI toolbox.
+
+There is source to an older version of a cscope clone (called "cs") available
+on the net. Due to various reasons, this is not supported with Vim.
+
+The cscope interface/support for Vim was originally written by
+Andy Kahn <ackahn@netapp.com>. The original structure (as well as a tiny
+bit of code) was adapted from the cscope interface in nvi. Please report
+any problems, suggestions, patches, et al., you have for the usage of
+cscope within Vim to him.
+ *cscope-win32*
+For a cscope version for Win32 see: http://iamphet.nm.ru/cscope/index.html
+
+Win32 support was added by Sergey Khorev <khorev@softlab.ru>. Contact him
+if you have Win32-specific issues.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_ole.txt b/runtime/doc/if_ole.txt
new file mode 100644
index 000000000..9ced34eca
--- /dev/null
+++ b/runtime/doc/if_ole.txt
@@ -0,0 +1,162 @@
+*if_ole.txt* For Vim version 7.0aa. Last change: 2003 Jun 19
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+
+
+The OLE Interface to Vim *ole-interface*
+
+1. Activation |ole-activation|
+2. Methods |ole-methods|
+3. The "normal" command |ole-normal|
+4. Registration |ole-registration|
+5. MS Visual Studio integration |MSVisualStudio|
+
+{Vi does not have any of these commands}
+
+OLE is only available when compiled with the |+ole| feature. See
+src/if_ole.INSTALL.
+An alternative is using the client-server communication |clientserver|.
+
+==============================================================================
+1. Activation *ole-activation*
+
+Vim acts as an OLE automation server, accessible from any automation client,
+for example, Visual Basic, Python, or Perl. The Vim application "name" (its
+"ProgID", in OLE terminology) is "Vim.Application".
+
+Hence, in order to start a Vim instance (or connect to an already running
+instance), code similar to the following should be used:
+
+[Visual Basic] >
+ Dim Vim As Object
+ Set Vim = CreateObject("Vim.Application")
+
+[Python] >
+ from win32com.client.dynamic import Dispatch
+ vim = Dispatch('Vim.Application')
+
+[Perl] >
+ use Win32::OLE;
+ $vim = new Win32::OLE 'Vim.Application';
+
+Vim does not support acting as a "hidden" OLE server, like some other OLE
+Automation servers. When a client starts up an instance of Vim, that instance
+is immediately visible. Simply closing the OLE connection to the Vim instance
+is not enough to shut down the Vim instance - it is necessary to explicitly
+execute a quit command (for example, :qa!, :wqa).
+
+==============================================================================
+2. Methods *ole-methods*
+
+Vim exposes four methods for use by clients.
+
+ *ole-sendkeys*
+SendKeys(keys) Execute a series of keys.
+
+This method takes a single parameter, which is a string of keystrokes. These
+keystrokes are executed exactly as if they had been types in at the keyboard.
+Special keys can be given using their <..> names, as for the right hand side
+of a mapping. Note: Execution of the Ex "normal" command is not supported -
+see below |ole-normal|.
+
+Examples (Visual Basic syntax) >
+ Vim.SendKeys "ihello<Esc>"
+ Vim.SendKeys "ma1GV4jy`a"
+
+These examples assume that Vim starts in Normal mode. To force Normal mode,
+start the key sequence with CTRL-\ CTRL-N as in >
+
+ Vim.SendKeys "<C-\><C-N>ihello<Esc>"
+
+CTRL-\ CTRL-N returns Vim to Normal mode, when in Insert or Command-line mode.
+Note that this doesn't work halfway a Vim command
+
+ *ole-eval*
+Eval(expr) Evaluate an expression.
+
+This method takes a single parameter, which is an expression in Vim's normal
+format (see |expression|). It returns a string, which is the result of
+evaluating the expression.
+
+Examples (Visual Basic syntax) >
+ Line20 = Vim.Eval("getline(20)")
+ Twelve = Vim.Eval("6 + 6") ' Note this is a STRING
+ Font = Vim.Eval("&guifont")
+<
+ *ole-setforeground*
+SetForeground() Make the Vim window come to the foreground
+
+This method takes no arguments. No value is returned.
+
+Example (Visual Basic syntax) >
+ Vim.SetForeground
+<
+
+ *ole-gethwnd*
+GetHwnd() Return the handle of the Vim window.
+
+This method takes no arguments. It returns the hwnd of the main Vimwindow.
+You can use this if you are writing something which needs to manipulate the
+Vim window, or to track it in the z-order, etc.
+
+Example (Visual Basic syntax) >
+ Vim_Hwnd = Vim.GetHwnd
+<
+
+==============================================================================
+3. The "normal" command *ole-normal*
+
+Due to the way Vim processes OLE Automation commands, combined with the method
+of implementation of the ex command :normal, it is not possible to execute the
+:normal command via OLE automation. Any attempt to do so will fail, probably
+harmlessly, although possibly in unpredictable ways.
+
+There is currently no practical way to trap this situation, and users must
+simply be aware of the limitation.
+==============================================================================
+4. Registration *ole-registration* *E243*
+
+Before Vim will act as an OLE server, it must be registered in the system
+registry. In order to do this, Vim should be run with a single parameter of
+"-register".
+ *-register* >
+ gvim -register
+
+If gvim with OLE support is run and notices that no Vim OLE server has been
+registered, it will present a dialog and offers you the choice to register by
+clicking "Yes".
+
+In some situations registering is not possible. This happens when the
+registry is not writable. If you run into this problem you need to run gvim
+as "Administrator".
+
+Once vim is registered, the application path is stored in the registry. Before
+moving, deleting, or upgrading Vim, the registry entries should be removed
+using the "-unregister" switch.
+ *-unregister* >
+ gvim -unregister
+
+The OLE mechanism will use the first registered Vim it finds. If a Vim is
+already running, this one will be used. If you want to have (several) Vim
+sessions open that should not react to OLE commands, use the non-OLE version,
+and put it in a different directory. The OLE version should then be put in a
+directory that is not in your normal path, so that typing "gvim" will start
+the non-OLE version.
+
+ *-silent*
+To avoid the message box that pops up to report the result, prepend "-silent":
+>
+ gvim -silent -register
+ gvim -silent -unregister
+
+==============================================================================
+5. MS Visual Studio integration *MSVisualStudio* *VisVim*
+
+The OLE version can be used to run Vim as the editor in Microsoft Visual
+Studio. This is called "VisVim". It is included in the archive that contains
+the OLE version. The documentation can be found in the runtime directory, the
+README_VisVim.txt file.
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt
new file mode 100644
index 000000000..882cd6a85
--- /dev/null
+++ b/runtime/doc/if_perl.txt
@@ -0,0 +1,258 @@
+*if_perl.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by Sven Verdoolaege
+ and Matt Gerassimof
+
+Perl and Vim *perl* *Perl*
+
+1. Editing Perl files |perl-editing|
+2. Compiling VIM with Perl interface |perl-compiling|
+3. Using the Perl interface |perl-using|
+
+{Vi does not have any of these commands}
+
+The Perl interface only works when Vim was compiled with the |+perl| feature.
+
+==============================================================================
+1. Editing Perl files *perl-editing*
+
+Vim syntax highlighting supports Perl and POD files. Vim assumes a file is
+Perl code if the filename has a .pl or .pm suffix. Vim also examines the first
+line of a file, regardless of the filename suffix, to check if a file is a
+Perl script (see scripts.vim in Vim's syntax directory). Vim assumes a file
+is POD text if the filename has a .POD suffix.
+
+To use tags with Perl, you need a recent version of Exuberant ctags. Look
+here:
+ http://ctags.sourceforge.net
+
+Alternatively, you can use the Perl script pltags.pl, which is shipped with
+Vim in the $VIMRUNTIME/tools directory. This script has currently more
+features than Exuberant ctags' Perl support.
+
+==============================================================================
+2. Compiling VIM with Perl interface *perl-compiling*
+
+To compile Vim with Perl interface, you need Perl 5.004 (or later). Perl must
+be installed before you compile Vim. Vim's Perl interface does NOT work with
+the 5.003 version that has been officially released! It will probably work
+with Perl 5.003_05 and later.
+
+The Perl patches for Vim were made by:
+ 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/
+
+==============================================================================
+3. Using the Perl interface *perl-using*
+
+ *:perl* *:pe*
+:pe[rl] {cmd} Execute Perl command {cmd}. The current package
+ is "main".
+
+:pe[rl] << {endpattern}
+{script}
+{endpattern}
+ Execute Perl script {script}.
+ {endpattern} must NOT be preceded by any white space.
+ If {endpattern} is omitted, it defaults to a dot '.'
+ like for the |:append| and |:insert| commands. Using
+ '.' helps when inside a function, because "$i;" looks
+ like the start of an |:insert| command to Vim.
+ This form of the |:perl| command is mainly useful for
+ including perl code in vim scripts.
+ Note: This command doesn't work when the Perl feature
+ wasn't compiled in. To avoid errors, see
+ |script-here|.
+
+
+Example vim script: >
+
+ function! WhitePearl()
+ perl << EOF
+ VIM::Msg("pearls are nice for necklaces");
+ VIM::Msg("rubys for rings");
+ VIM::Msg("pythons for bags");
+ VIM::Msg("tcls????");
+ EOF
+ endfunction
+<
+
+ *:perldo* *:perld*
+:[range]perld[o] {cmd} Execute Perl command {cmd} for each line in the
+ [range], with $_ being set to the text of each line in
+ turn, without a trailing <EOL>. Setting $_ will change
+ the text, but note that it is not possible to add or
+ delete lines using this command.
+ The default for [range] is the whole file: "1,$".
+
+Here are some things you can try: >
+
+ :perl $a=1
+ :perldo $_ = reverse($_);1
+ :perl VIM::Msg("hello")
+ :perl $line = $curbuf->Get(42)
+<
+ *E299*
+Executing Perl commands in the |sandbox| is limited. ":perldo" will not be
+possible at all. ":perl" will be evaluated in the Safe environment, if
+possible.
+
+
+ *perl-overview*
+Here is an overview of the functions that are available to Perl: >
+
+ :perl VIM::Msg("Text") # displays a message
+ :perl VIM::Msg("Error", "ErrorMsg") # displays an error message
+ :perl VIM::Msg("remark", "Comment") # displays a highlighted message
+ :perl VIM::SetOption("ai") # sets a vim option
+ :perl $nbuf = VIM::Buffers() # returns the number of buffers
+ :perl @buflist = VIM::Buffers() # returns array of all buffers
+ :perl $mybuf = (VIM::Buffers('qq.c'))[0] # returns buffer object for 'qq.c'
+ :perl @winlist = VIM::Windows() # returns array of all windows
+ :perl $nwin = VIM::Windows() # returns the number of windows
+ :perl ($success, $v) = VIM::Eval('&path') # $v: option 'path', $success: 1
+ :perl ($success, $v) = VIM::Eval('&xyz') # $v: '' and $success: 0
+ :perl $v = VIM::Eval('expand("<cfile>")') # expands <cfile>
+ :perl $curwin->SetHeight(10) # sets the window height
+ :perl @pos = $curwin->Cursor() # returns (row, col) array
+ :perl @pos = (10, 10)
+ :perl $curwin->Cursor(@pos) # sets cursor to @pos
+ :perl $curwin->Cursor(10,10) # sets cursor to row 10 col 10
+ :perl $mybuf = $curwin->Buffer() # returns the buffer object for window
+ :perl $curbuf->Name() # returns buffer name
+ :perl $curbuf->Number() # returns buffer number
+ :perl $curbuf->Count() # returns the number of lines
+ :perl $l = $curbuf->Get(10) # returns line 10
+ :perl @l = $curbuf->Get(1 .. 5) # returns lines 1 through 5
+ :perl $curbuf->Delete(10) # deletes line 10
+ :perl $curbuf->Delete(10, 20) # delete lines 10 through 20
+ :perl $curbuf->Append(10, "Line") # appends a line
+ :perl $curbuf->Append(10, "Line1", "Line2", "Line3") # appends 3 lines
+ :perl @l = ("L1", "L2", "L3")
+ :perl $curbuf->Append(10, @l) # appends L1, L2 and L3
+ :perl $curbuf->Set(10, "Line") # replaces line 10
+ :perl $curbuf->Set(10, "Line1", "Line2") # replaces lines 10 and 11
+ :perl $curbuf->Set(10, @l) # replaces 3 lines
+<
+ *perl-Msg*
+VIM::Msg({msg}, {group}?)
+ Displays the message {msg}. The optional {group}
+ argument specifies a highlight group for Vim to use
+ for the message.
+
+ *perl-SetOption*
+VIM::SetOption({arg}) Sets a vim option. {arg} can be any argument that the
+ ":set" command accepts. Note that this means that no
+ spaces are allowed in the argument! See |:set|.
+
+ *perl-Buffers*
+VIM::Buffers([{bn}...]) With no arguments, returns a list of all the buffers
+ in an array context or returns the number of buffers
+ in a scalar context. For a list of buffer names or
+ numbers {bn}, returns a list of the buffers matching
+ {bn}, using the same rules as Vim's internal
+ |bufname()| function.
+
+ *perl-Windows*
+VIM::Windows([{wn}...]) With no arguments, returns a list of all the windows
+ in an array context or returns the number of windows
+ in a scalar context. For a list of window numbers
+ {wn}, returns a list of the windows with those
+ numbers.
+
+ *perl-DoCommand*
+VIM::DoCommand({cmd}) Executes Ex command {cmd}.
+
+ *perl-Eval*
+VIM::Eval({expr}) Evaluates {expr} and returns (success, val).
+ 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
+ x, '&x' returns the value of option x, 'x' returns the
+ value of internal |variables| x, and '$x' is equivalent
+ to perl's $ENV{x}. All |functions| accessible from
+ the command-line are valid for {expr}.
+
+ *perl-SetHeight*
+Window->SetHeight({height})
+ Sets the Window height to {height}, within screen
+ limits.
+
+ *perl-GetCursor*
+Window->Cursor({row}?, {col}?)
+ With no arguments, returns a (row, col) array for the
+ current cursor position in the Window. With {row} and
+ {col} arguments, sets the Window's cursor position to
+ {row} and {col}. Note that {col} is numbered from 0,
+ Perl-fashion, and thus is one less than the value in
+ Vim's ruler.
+
+Window->Buffer() *perl-Buffer*
+ Returns the Buffer object corresponding to the given
+ Window.
+
+ *perl-Name*
+Buffer->Name() Returns the filename for the Buffer.
+
+ *perl-Number*
+Buffer->Number() Returns the number of the Buffer.
+
+ *perl-Count*
+Buffer->Count() Returns the number of lines in the Buffer.
+
+ *perl-Get*
+Buffer->Get({lnum}, {lnum}?, ...)
+ Returns a text string of line {lnum} in the Buffer
+ for each {lnum} specified. An array can be passed
+ with a list of {lnum}'s specified.
+
+ *perl-Delete*
+Buffer->Delete({lnum}, {lnum}?)
+ Deletes line {lnum} in the Buffer. With the second
+ {lnum}, deletes the range of lines from the first
+ {lnum} to the second {lnum}.
+
+ *perl-Append*
+Buffer->Append({lnum}, {line}, {line}?, ...)
+ Appends each {line} string after Buffer line {lnum}.
+ The list of {line}s can be an array.
+
+ *perl-Set*
+Buffer->Set({lnum}, {line}, {line}?, ...)
+ Replaces one or more Buffer lines with specified
+ {lines}s, starting at Buffer line {lnum}. The list of
+ {line}s can be an array. If the arguments are
+ invalid, replacement does not occur.
+
+$main::curwin
+ The current window object.
+
+$main::curbuf
+ The current buffer object.
+
+
+ *script-here*
+When using a script language in-line, you might want to skip this when the
+language isn't supported. But this mechanism doesn't work: >
+ if has('perl')
+ perl << EOF
+ this will NOT work!
+ EOF
+ endif
+Instead, put the Perl/Python/Ruby/etc. command in a function and call that
+function: >
+ if has('perl')
+ function DefPerl()
+ perl << EOF
+ this works
+ EOF
+ endfunction
+ call DefPerl()
+ endif
+Note that "EOF" must be at the start of the line.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt
new file mode 100644
index 000000000..df75fcf56
--- /dev/null
+++ b/runtime/doc/if_pyth.txt
@@ -0,0 +1,299 @@
+*if_pyth.txt* For Vim version 7.0aa. Last change: 2004 Feb 28
+
+
+ VIM REFERENCE MANUAL by Paul Moore
+
+
+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|
+
+{Vi does not have any of these commands}
+
+The Python interface is available only when Vim was compiled with the
+|+python| feature.
+
+==============================================================================
+1. Commands *python-commands*
+
+ *:python* *:py* *E205* *E263* *E264*
+:[range]py[thon] {stmt}
+ Execute Python statement {stmt}.
+
+:[range]py[thon] << {endmarker}
+{script}
+{endmarker}
+ Execute Python script {script}.
+ Note: This command doesn't work when the Python
+ feature wasn't compiled in. To avoid errors, see
+ |script-here|.
+
+{endmarker} must NOT be preceded by any white space. If {endmarker} is
+omitted from after the "<<", a dot '.' must be used after {script}, like
+for the |:append| and |:insert| commands.
+This form of the |:python| command is mainly useful for including python code
+in Vim scripts.
+
+Example: >
+ function! IcecreamInitialize()
+ python << EOF
+ class StrawberryIcecream:
+ def __call__(self):
+ print 'EAT ME'
+ EOF
+ endfunction
+<
+Note: Python is very sensitive to the indenting. Also make sure the "class"
+line and "EOF" do not have any indent.
+
+ *:pyfile* *:pyf*
+:[range]pyf[ile] {file}
+ Execute the Python script in {file}. The whole
+ argument is used as a single file name. {not in Vi}
+
+Both of these commands do essentially the same thing - they execute a piece of
+Python code, with the "current range" |python-range| set to the given line
+range.
+
+In the case of :python, the code to execute is in the command-line.
+In the case of :pyfile, the code to execute is the contents of the given file.
+
+Python commands cannot be used in the |sandbox|.
+
+To pass arguments you need to set sys.argv[] explicitly. Example: >
+
+ :python import sys
+ :python sys.argv = ["foo", "bar"]
+ :pyfile myscript.py
+
+Here are some examples *python-examples* >
+
+ :python from vim import *
+ :python from string import upper
+ :python current.line = upper(current.line)
+ :python print "Hello"
+ :python str = current.buffer[42]
+
+(Note that changes - like the imports - persist from one command to the next,
+just like in the Python interpreter.)
+
+==============================================================================
+2. The vim module *python-vim*
+
+Python code gets all of its access to vim (with one exception - see
+|python-output| below) via the "vim" module. The vim module implements two
+methods, three constants, and one error object. You need to import the vim
+module before using it: >
+ :python import vim
+
+Overview >
+ print "Hello" # displays a message
+ vim.command(cmd) # execute an ex command
+ w = vim.windows[n] # gets window "n"
+ cw = vim.current.window # gets the current window
+ b = vim.buffers[n] # gets buffer "n"
+ cb = vim.current.buffer # gets the current buffer
+ w.height = lines # sets the window height
+ w.cursor = (row, col) # sets the window cursor position
+ pos = w.cursor # gets a tuple (row, col)
+ name = b.name # gets the buffer file name
+ line = b[n] # gets a line from the buffer
+ lines = b[n:m] # gets a list of lines
+ num = len(b) # gets the number of lines
+ b[n] = str # sets a line in the buffer
+ b[n:m] = [str1, str2, str3] # sets a number of lines at once
+ del b[n] # deletes a line
+ del b[n:m] # deletes a number of lines
+
+
+Methods of the "vim" module
+
+vim.command(str) *python-command*
+ Executes the vim (ex-mode) command str. Returns None.
+ Examples: >
+ vim.command("set tw=72")
+ vim.command("%s/aaa/bbb/g")
+< The following definition executes Normal mode commands: >
+ def normal(str):
+ vim.command("normal "+str)
+ # Note the use of single quotes to delimit a string containing
+ # double quotes
+ normal('"a2dd"aP')
+< *E659*
+ The ":python" command cannot be used recursively with Python 2.2 and
+ older. This only works with Python 2.3 and later: >
+ :python vim.command("python print 'Hello again Python'")
+
+vim.eval(str) *python-eval*
+ Evaluates the expression str using the vim internal expression
+ evaluator (see |expression|). Returns the expression result as a
+ string.
+ Examples: >
+ text_width = vim.eval("&tw")
+ str = vim.eval("12+12") # NB result is a string! Use
+ # string.atoi() to convert to
+ # a number.
+
+Error object of the "vim" module
+
+vim.error *python-error*
+ Upon encountering a Vim error, Python raises an exception of type
+ vim.error.
+ Example: >
+ try:
+ vim.command("put a")
+ except vim.error:
+ # nothing in register a
+
+Constants of the "vim" module
+
+ Note that these are not actually constants - you could reassign them.
+ But this is silly, as you would then lose access to the vim objects
+ to which the variables referred.
+
+vim.buffers *python-buffers*
+ A sequence object providing access to the list of vim buffers. The
+ object supports the following operations: >
+ b = vim.buffers[i] # Indexing (read-only)
+ b in vim.buffers # Membership test
+ n = len(vim.buffers) # Number of elements
+ for b in vim.buffers: # Sequential access
+<
+vim.windows *python-windows*
+ A sequence object providing access to the list of vim windows. The
+ object supports the following operations: >
+ w = vim.windows[i] # Indexing (read-only)
+ w in vim.windows # Membership test
+ n = len(vim.windows) # Number of elements
+ for w in vim.windows: # 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.range The current line range (RO) Range
+
+ The last case deserves a little explanation. When the :python or
+ :pyfile command specifies a range, this range of lines becomes the
+ "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.
+
+
+Output from Python *python-output*
+ Vim displays all Python code output in the Vim message area. Normal
+ output appears as information messages, and error output appears as
+ error messages.
+
+ In implementation terms, this means that all output to sys.stdout
+ (including the output from print statements) appears as information
+ messages, and all output to sys.stderr (including error tracebacks)
+ appears as error messages.
+
+ *python-input*
+ Input (via sys.stdin, including input() and raw_input()) is not
+ supported, and may cause the program to crash. This should probably be
+ fixed.
+
+==============================================================================
+3. Buffer objects *python-buffer*
+
+Buffer objects represent vim buffers. You can obtain them in a number of ways:
+ - via vim.current.buffer (|python-current|)
+ - 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).
+
+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
+element being a line of the buffer. All of the usual sequence operations,
+including indexing, index assignment, slicing and slice assignment, work as
+you would expect. Note that the result of indexing (slicing) a buffer is a
+string (list of strings). This has one unusual consequence - b[:] is different
+from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
+"b = None" merely updates the variable b, with no effect on the buffer.
+
+Buffer indexes start at zero, as is normal in Python. This differs from vim
+line numbers, which start from 1. This is particularly relevant when dealing
+with marks (see below) which use vim line numbers.
+
+The buffer object methods are:
+ b.append(str) Append a line to the buffer
+ b.append(list) Append a list of lines to the buffer
+ Note that the option of supplying a list of strings to
+ the append method differs from the equivalent method
+ for Python's built-in list objects.
+ b.mark(name) Return a tuple (row,col) representing the position
+ of the named mark (can also get the []"<> marks)
+ b.range(s,e) Return a range object (see |python-range|) which
+ represents the part of the given buffer between line
+ numbers s and e |inclusive|.
+
+Examples (assume b is the current buffer) >
+ print b.name # write the buffer file name
+ b[0] = "hello!!!" # replace the top line
+ b[:] = None # delete the whole buffer
+ del b[:] # delete the whole buffer (same as above)
+ b[0:0] = [ "a line" ] # add a line at the top
+ del b[2] # delete a line (the third)
+ b.append("bottom") # add a line at the bottom
+ n = len(b) # number of lines
+ (row,col) = b.mark('a') # named mark
+ r = b.range(1,5) # a sub-range of the buffer
+
+==============================================================================
+4. Range objects *python-range*
+
+Range objects represent a part of a vim buffer. You can obtain them in a
+number of ways:
+ - via vim.current.range (|python-current|)
+ - from a buffer's range() method (|python-buffer|)
+
+A range object is almost identical in operation to a buffer object. However,
+all operations are restricted to the lines within the range (this line range
+can, of course, change as a result of slice assignments, line deletions, or
+the range.append() method).
+
+The range object attributes are:
+ r.start Index of first line into the buffer
+ r.end Index of last line into the buffer
+
+The range object methods are:
+ r.append(str) Append a line to the range
+ r.append(list) Append a list of lines to the range
+ Note that the option of supplying a list of strings to
+ the append method differs from the equivalent method
+ for Python's built-in list objects.
+
+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))
+
+==============================================================================
+5. Window objects *python-window*
+
+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|)
+
+You can manipulate window objects only through their attributes. They have no
+methods, and no sequence or other interface.
+
+Window attributes are:
+ buffer (read-only) The buffer displayed in this window
+ cursor (read-write) The current cursor position in the window
+ This is a tuple, (row,col).
+ height (read-write) The window height, in rows
+ width (read-write) The window width, in columns
+The height attribute is writable only if the screen is split horizontally.
+The width attribute is writable only if the screen is split vertically.
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt
new file mode 100644
index 000000000..e8d09f62c
--- /dev/null
+++ b/runtime/doc/if_ruby.txt
@@ -0,0 +1,175 @@
+*if_ruby.txt* For Vim version 7.0aa. Last change: 2004 Mar 14
+
+
+ VIM REFERENCE MANUAL by Shugo Maeda
+
+The Ruby Interface to Vim *ruby* *Ruby*
+
+
+1. Commands |ruby-commands|
+2. The VIM module |ruby-vim|
+3. VIM::Buffer objects |ruby-buffer|
+4. VIM::Window objects |ruby-window|
+5. Global variables |ruby-globals|
+
+{Vi does not have any of these commands}
+ *E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*
+
+The Ruby interface only works when Vim was compiled with the |+ruby| feature.
+
+The home page for ruby is http://www.ruby-lang.org/. You can find links for
+downloading Ruby there.
+
+==============================================================================
+1. Commands *ruby-commands*
+
+ *:ruby* *:rub*
+:rub[y] {cmd} Execute Ruby command {cmd}.
+
+:rub[y] << {endpattern}
+{script}
+{endpattern}
+ Execute Ruby script {script}.
+ {endpattern} must NOT be preceded by any white space.
+ If {endpattern} is omitted, it defaults to a dot '.'
+ like for the |:append| and |:insert| commands. This
+ form of the |:ruby| command is mainly useful for
+ including ruby code in vim scripts.
+ Note: This command doesn't work when the Ruby feature
+ wasn't compiled in. To avoid errors, see
+ |script-here|.
+
+Example Vim script: >
+
+ function! RedGem()
+ ruby << EOF
+ class Garnet
+ def initialize(s)
+ @buffer = VIM::Buffer.current
+ vimputs(s)
+ end
+ def vimputs(s)
+ @buffer.append(@buffer.count,s)
+ end
+ end
+ gem = Garnet.new("pretty")
+ EOF
+ endfunction
+<
+
+ *:rubydo* *:rubyd* *E265*
+:[range]rubyd[o] {cmd} Evaluate Ruby command {cmd} for each line in the
+ [range], with $_ being set to the text of each line in
+ turn, without a trailing <EOL>. Setting $_ will change
+ the text, but note that it is not possible to add or
+ delete lines using this command.
+ The default for [range] is the whole file: "1,$".
+
+ *:rubyfile* *:rubyf*
+:rubyf[ile] {file} Execute the Ruby script in {file}. This is the same as
+ ":ruby load 'file'", but allows file name completion.
+
+Executing Ruby commands is not possible in the |sandbox|.
+
+==============================================================================
+2. The VIM module *ruby-vim*
+
+Ruby code gets all of its access to vim via the "VIM" module.
+
+Overview >
+ print "Hello" # displays a message
+ VIM.command(cmd) # execute an ex command
+ num = VIM::Window.count # gets the number of windows
+ w = VIM::Window[n] # gets window "n"
+ cw = VIM::Window.current # gets the current window
+ num = VIM::Buffer.count # gets the number of buffers
+ b = VIM::Buffer[n] # gets buffer "n"
+ cb = VIM::Buffer.current # gets the current buffer
+ w.height = lines # sets the window height
+ w.cursor = [row, col] # sets the window cursor position
+ pos = w.cursor # gets an array [row, col]
+ name = b.name # gets the buffer file name
+ line = b[n] # gets a line from the buffer
+ num = b.count # gets the number of lines
+ b[n] = str # sets a line in the buffer
+ b.delete(n) # deletes a line
+ b.append(n, str) # appends a line after n
+<
+
+Module Functions:
+
+ *ruby-message*
+VIM::message({msg})
+ Displays the message {msg}.
+
+ *ruby-set_option*
+VIM::set_option({arg})
+ Sets a vim option. {arg} can be any argument that the ":set" command
+ accepts. Note that this means that no spaces are allowed in the
+ argument! See |:set|.
+
+ *ruby-command*
+VIM::command({cmd})
+ Executes Ex command {cmd}.
+
+ *ruby-evaluate*
+VIM::evaluate({expr})
+ Evaluates {expr} using the vim internal expression evaluator (see
+ |expression|). Returns the expression result as a string.
+
+==============================================================================
+3. VIM::Buffer objects *ruby-buffer*
+
+VIM::Buffer objects represent vim buffers.
+
+Class Methods:
+
+current Returns the current buffer object.
+count Returns the number of buffers.
+self[{n}] Returns the buffer object for the number {n}. The first number
+ is 0.
+
+Methods:
+
+name Returns the name of the buffer.
+number Returns the number of the buffer.
+count Returns the number of lines.
+length Returns the number of lines.
+self[{n}] Returns a line from the buffer. {n} is the line number.
+self[{n}] = {str}
+ Sets a line in the buffer. {n} is the line number.
+delete({n}) Deletes a line from the buffer. {n} is the line number.
+append({n}, {str})
+ Appends a line after the line {n}.
+
+==============================================================================
+4. VIM::Window objects *ruby-window*
+
+VIM::Window objects represent vim windows.
+
+Class Methods:
+
+current Returns the current window object.
+count Returns the number of windows.
+self[{n}] Returns the window object for the number {n}. The first number
+ is 0.
+
+Methods:
+
+buffer Returns the buffer displayed in the window.
+height Returns the height of the window.
+height = {n} Sets the window height to {n}.
+cursor Returns a [row, col] array for the cursor position.
+cursor = [{row}, {col}]
+ Sets the cursor position to {row} and {col}.
+
+==============================================================================
+4. Global variables *ruby-globals*
+
+There are two global variables.
+
+$curwin The current window object.
+$curbuf The current buffer object.
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_sniff.txt b/runtime/doc/if_sniff.txt
new file mode 100644
index 000000000..12b34c481
--- /dev/null
+++ b/runtime/doc/if_sniff.txt
@@ -0,0 +1,95 @@
+*if_sniff.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL
+ by Anton Leherbauer (toni@takefive.co.at)
+
+
+SNiFF+ and Vim *sniff*
+
+1. Introduction |sniff-intro|
+2. Commands |sniff-commands|
+3. Compiling Vim with SNiFF+ interface |sniff-compiling|
+
+{Vi does not have any of these commands} *E275* *E274* *E276* *E278* *E279*
+
+The SNiFF+ interface only works, when Vim was compiled with the |+sniff|
+feature.
+
+==============================================================================
+1. Introduction *sniff-intro*
+
+The following features for the use with SNiFF+ are available:
+
+ * Vim can be used for all editing requests
+ * SNiFF+ recognizes and updates all browsers when a file is saved in Vim
+ * SNiFF+ commands can be issued directly from Vim
+
+How to use Vim with SNiFF+
+ 1. Make sure SNiFF+ is running.
+ 2. In the Editor view of the Preferences dialog set the Field named
+ 'External Editor' to 'Emacs/Vim'.
+ 4. Start Vim
+ 5. Connect to SNiFF+ (:sniff connect)
+
+Once a connection is established, SNiFF+ uses Vim for all requests to show or
+edit source code. On the other hand, you can send queries to SNiFF+ with the
+:sniff command.
+
+==============================================================================
+2. Commands *sniff-commands*
+
+ *:sniff* *:sni*
+:sni[ff] request [symbol] Send request to sniff with optional symbol.
+ {not in Vi}
+:sni[ff] Display all possible requests and the connection
+ status
+
+Most requests require a symbol (identifier) as parameter. If it is omitted,
+Vim will use the current word under the cursor.
+The available requests are listed below:
+
+request mapping description
+-------------------------------------------------------------------------------
+connect sc Establish connection with SNiFF+.
+ Make sure SNiFF+ is prepared for this in the
+ Preferences
+disconnect sq Disconnect from SNiFF+. You can reconnect any
+ time with :sniff connect (or 'sc')
+toggle st Toggle between implementation
+ and definition file
+find-symbol sf Load the symbol into a Symbol Browser
+browse-class sb Loads the class into a Class Browser
+superclass ss Edit superclass of symbol
+overridden so Edit overridden method of symbol
+retrieve-file srf Retrieve symbol in current file
+retrieve-project srp Retrieve symbol in current project
+retrieve-all-projects srP Retrieve symbol in all projects
+retrieve-next sR Retrieve symbol using current Retriever
+ settings
+goto-symbol sg Goto definition or implementation of symbol
+hierarchy sh Load symbol into the Hierarchy Browser
+restr-hier sH same as above but show only related classes
+xref-to sxt Start a refers-to query on symbol and
+ load the results into the Cross Referencer
+xref-by sxb Start a referred-by query on symbol
+xref-has sxh Start a refers-to components query on symbol
+xref-used-by sxu Start a referred-by as component query on
+ symbol
+show-docu sd Show documentation of symbol
+gen-docu sD Generate documentation of symbol
+
+The mappings are defined in a file 'sniff.vim', which is part of every SNiFF+
+product ($SNIFF_DIR/config/sniff.vim). This file is sourced whenever Vim
+connects to SNiFF+.
+
+==============================================================================
+3. Compiling Vim with SNiFF+ interface *sniff-compiling*
+
+To compile Vim with SNiFF+ support, you need two source files of the extra
+archive: if_sniff.c and if_sniff.h.
+On Unix: Edit the Makefile and uncomment the line "--enable-sniff". Or run
+configure manually with this argument.
+On NT: Specify SNIFF=yes with your make command.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/if_tcl.txt b/runtime/doc/if_tcl.txt
new file mode 100644
index 000000000..b386bed15
--- /dev/null
+++ b/runtime/doc/if_tcl.txt
@@ -0,0 +1,512 @@
+*if_tcl.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Ingo Wilken
+
+
+The Tcl Interface to Vim *tcl* *Tcl* *TCL*
+
+1. Commands |tcl-ex-commands|
+2. Tcl commands |tcl-commands|
+3. Tcl variables |tcl-variables|
+4. Tcl window commands |tcl-window-cmds|
+5. Tcl buffer commands |tcl-buffer-cmds|
+6. Miscellaneous; Output from Tcl |tcl-misc| |tcl-output|
+7. Known bugs & problems |tcl-bugs|
+8. Examples |tcl-examples|
+
+{Vi does not have any of these commands} *E280* *E281*
+
+The Tcl interface only works when Vim was compiled with the |+tcl| feature.
+
+WARNING: There are probably still some bugs. Please send bug reports,
+comments, ideas etc to <Ingo.Wilken@informatik.uni-oldenburg.de>
+
+==============================================================================
+1. Commands *tcl-ex-commands* *E571* *E572*
+
+ *:tcl* *:tc*
+:tc[l] {cmd} Execute Tcl command {cmd}.
+
+:[range]tc[l] << {endmarker}
+{script}
+{endmarker}
+ Execute Tcl script {script}.
+ Note: This command doesn't work when the Tcl feature
+ wasn't compiled in. To avoid errors, see
+ |script-here|.
+
+{endmarker} must NOT be preceded by any white space. If {endmarker} is
+omitted from after the "<<", a dot '.' must be used after {script}, like for
+the |:append| and |:insert| commands.
+This form of the |:tcl| command is mainly useful for including tcl code in Vim
+scripts.
+
+Example: >
+ function! DefineDate()
+ tcl << EOF
+ proc date {} {
+ return [clock format [clock seconds]]
+ }
+ EOF
+ endfunction
+<
+
+ *:tcldo* *:tcld*
+:[range]tcld[o] {cmd} Execute Tcl command {cmd} for each line in [range]
+ with the variable "line" being set to the text of each
+ line in turn, and "lnum" to the line number. Setting
+ "line" will change the text, but note that it is not
+ possible to add or delete lines using this command.
+ If {cmd} returns an error, the command is interrupted.
+ The default for [range] is the whole file: "1,$".
+ See |tcl-var-line| and |tcl-var-lnum|. {not in Vi}
+
+ *:tclfile* *:tclf*
+:tclf[ile] {file} Execute the Tcl script in {file}. This is the same as
+ ":tcl source {file}", but allows file name completion.
+ {not in Vi}
+
+
+Note that Tcl objects (like variables) persist from one command to the next,
+just as in the Tcl shell.
+
+Executing Tcl commands is not possible in the |sandbox|.
+
+==============================================================================
+2. Tcl commands *tcl-commands*
+
+Tcl code gets all of its access to vim via commands in the "::vim" namespace.
+The following commands are implemented: >
+
+ ::vim::beep # Guess.
+ ::vim::buffer {n} # Create Tcl command for one buffer.
+ ::vim::buffer list # Create Tcl commands for all buffers.
+ ::vim::command [-quiet] {cmd} # Execute an ex command.
+ ::vim::expr {expr} # Use Vim's expression evaluator.
+ ::vim::option {opt} # Get vim option.
+ ::vim::option {opt} {val} # Set vim option.
+ ::vim::window list # Create Tcl commands for all windows.
+
+Commands:
+ ::vim::beep *tcl-beep*
+ Honk. Does not return a result.
+
+ ::vim::buffer {n} *tcl-buffer*
+ ::vim::buffer exists {n}
+ ::vim::buffer list
+ Provides access to vim buffers. With an integer argument, creates a
+ buffer command (see |tcl-buffer-cmds|) for the buffer with that
+ number, and returns its name as the result. Invalid buffer numbers
+ result in a standard Tcl error. To test for valid buffer numbers,
+ vim's internal functions can be used: >
+ set nbufs [::vim::expr bufnr("$")]
+ set isvalid [::vim::expr "bufexists($n)"]
+< The "list" option creates a buffer command for each valid buffer, and
+ returns a list of the command names as the result.
+ Example: >
+ set bufs [::vim::buffer list]
+ foreach b $bufs { $b append end "The End!" }
+< The "exists" option checks if a buffer with the given number exists.
+ Example: >
+ if { [::vim::buffer exists $n] } { ::vim::command ":e #$n" }
+< This command might be replaced by a variable in future versions.
+ See also |tcl-var-current| for the current buffer.
+
+ ::vim::command {cmd} *tcl-command*
+ ::vim::command -quiet {cmd}
+ Execute the vim (ex-mode) command {cmd}. Any ex command that affects
+ a buffer or window uses the current buffer/current window. Does not
+ return a result other than a standard Tcl error code. After this
+ command is completed, the "::vim::current" variable is updated.
+ The "-quiet" flag suppresses any error messages from vim.
+ Examples: >
+ ::vim::command "set ts=8"
+ ::vim::command "%s/foo/bar/g"
+< To execute normal-mode commands, use "normal" (see |:normal|): >
+ set cmd "jj"
+ ::vim::command "normal $cmd"
+< See also |tcl-window-command| and |tcl-buffer-command|.
+
+ ::vim::expr {expr} *tcl-expr*
+ Evaluates the expression {expr} using vim's internal expression
+ evaluator (see |expression|). Any expression that queries a buffer
+ or window property uses the current buffer/current window. Returns
+ the result as a string.
+ Examples: >
+ set perl_available [::vim::expr has("perl")]
+< See also |tcl-window-expr| and |tcl-buffer-expr|.
+
+ ::vim::option {opt} *tcl-option*
+ ::vim::option {opt} {value}
+ Without second argument, queries the value of a vim option. With this
+ argument, sets the vim option to {value}, and returns the previous
+ value as the result. Any options that are marked as 'local to buffer'
+ or 'local to window' affect the current buffer/current window. The
+ global value is not changed, use the ":set" command for that. For
+ boolean options, {value} should be "0" or "1", or any of the keywords
+ "on", "off" or "toggle". See |option-summary| for a list of options.
+ Example: >
+ ::vim::option ts 8
+< See also |tcl-window-option| and |tcl-buffer-option|.
+
+ ::vim::window {option} *tcl-window*
+ Provides access to vim windows. Currently only the "list" option is
+ implemented. This creates a window command (see |tcl-window-cmds|) for
+ each window, and returns a list of the command names as the result.
+ Example: >
+ set wins [::vim::window list]
+ foreach w $wins { $w height 4 }
+< This command might be replaced by a variable in future versions.
+ See also |tcl-var-current| for the current window.
+
+==============================================================================
+3. Tcl variables *tcl-variables*
+
+The ::vim namespace contains a few variables. These are created when the Tcl
+interpreter is called from vim and set to current values. >
+
+ ::vim::current # array containing "current" objects
+ ::vim::lbase # number of first line
+ ::vim::range # array containing current range numbers
+ line # current line as a string (:tcldo only)
+ lnum # current line number (:tcldo only)
+
+Variables:
+ ::vim::current *tcl-var-current*
+ This is an array providing access to various "current" objects
+ available in vim. The contents of this array are updated after
+ "::vim::command" is called, as this might change vim's current
+ settings (e.g., by deleting the current buffer).
+ The "buffer" element contains the name of the buffer command for the
+ current buffer. This can be used directly to invoke buffer commands
+ (see |tcl-buffer-cmds|). This element is read-only.
+ Example: >
+ $::vim::current(buffer) insert begin "Hello world"
+< The "window" element contains the name of the window command for the
+ current window. This can be used directly to invoke window commands
+ (see |tcl-window-cmds|). This element is read-only.
+ Example: >
+ $::vim::current(window) height 10
+<
+ ::vim::lbase *tcl-var-lbase*
+ This variable controls how Tcl treats line numbers. If it is set to
+ '1', then lines and columns start at 1. This way, line numbers from
+ Tcl commands and vim expressions are compatible. If this variable is
+ set to '0', then line numbers and columns start at 0 in Tcl. This is
+ useful if you want to treat a buffer as a Tcl list or a line as a Tcl
+ string and use standard Tcl commands that return an index ("lsort" or
+ "string first", for example). The default value is '1'. Currently,
+ any non-zero values is treated as '1', but your scripts should not
+ rely on this. See also |tcl-linenumbers|.
+
+ ::vim::range *tcl-var-range*
+ This is an array with three elements, "start", "begin" and "end". It
+ contains the line numbers of the start and end row of the current
+ range. "begin" is the same as "start". This variable is read-only.
+ See |tcl-examples|.
+
+ line *tcl-var-line*
+ lnum *tcl-var-lnum*
+ These global variables are only available if the ":tcldo" ex command
+ is being executed. They contain the text and line number of the
+ current line. When the Tcl command invoked by ":tcldo" is completed,
+ the current line is set to the contents of the "line" variable, unless
+ the variable was unset by the Tcl command. The "lnum" variable is
+ read-only. These variables are not in the "::vim" namespace so they
+ can be used in ":tcldo" without much typing (this might be changed in
+ future versions). See also |tcl-linenumbers|.
+
+==============================================================================
+4. Tcl window commands *tcl-window-cmds*
+
+Window commands represent vim windows. They are created by several commands:
+ ::vim::window list |tcl-window|
+ "windows" option of a buffer command |tcl-buffer-windows|
+The ::vim::current(window) variable contains the name of the window command
+for the current window. A window command is automatically deleted when the
+corresponding vim window is closed.
+
+Lets assume the name of the window command is stored in the Tcl variable "win",
+i.e. "$win" calls the command. The following options are available: >
+
+ $win buffer # Create Tcl command for window's buffer.
+ $win command {cmd} # Execute ex command in windows context.
+ $win cursor # Get current cursor position.
+ $win cursor {var} # Set cursor position from array variable.
+ $win cursor {row} {col} # Set cursor position.
+ $win delcmd {cmd} # Call Tcl command when window is closed.
+ $win expr {expr} # Evaluate vim expression in windows context.
+ $win height # Report the window's height.
+ $win height {n} # Set the window's height.
+ $win option {opt} [val] # Get/Set vim option in windows context.
+
+Options:
+ $win buffer *tcl-window-buffer*
+ Creates a Tcl command for the window's buffer, and returns its name as
+ the result. The name should be stored in a variable: >
+ set buf [$win buffer]
+< $buf is now a valid Tcl command. See |tcl-buffer-cmds| for the
+ available options.
+
+ $win cursor *tcl-window-cursor*
+ $win cursor {var}
+ $win cursor {row} {col}
+ Without argument, reports the current cursor position as a string.
+ This can be converted to a Tcl array variable: >
+ array set here [$win cursor]
+< "here(row)" and "here(column)" now contain the cursor position.
+ With a single argument, the argument is interpreted as the name of a
+ Tcl array variable, which must contain two elements "row" and "column".
+ These are used to set the cursor to the new position: >
+ $win cursor here ;# not $here !
+< With two arguments, sets the cursor to the specified row and column: >
+ $win cursor $here(row) $here(column)
+< Invalid positions result in a standard Tcl error, which can be caught
+ with "catch". The row and column values depend on the "::vim::lbase"
+ variable. See |tcl-var-lbase|.
+
+ $win delcmd {cmd} *tcl-window-delcmd*
+ Registers the Tcl command {cmd} as a deletion callback for the window.
+ This command is executed (in the global scope) just before the window
+ is closed. Complex commands should be build with "list": >
+ $win delcmd [list puts vimerr "window deleted"]
+< See also |tcl-buffer-delcmd|.
+
+ $win height *tcl-window-height*
+ $win height {n}
+ Without argument, reports the window's current height. With an
+ argument, tries to set the window's height to {n}, then reports the
+ new height (which might be different from {n}).
+
+ $win command [-quiet] {cmd} *tcl-window-command*
+ $win expr {expr} *tcl-window-expr*
+ $win option {opt} [val] *tcl-window-option*
+ These are similar to "::vim::command" etc., except that everything is
+ done in the context of the window represented by $win, instead of the
+ current window. For example, setting an option that is marked 'local
+ to window' affects the window $win. Anything that affects or queries
+ a buffer uses the buffer displayed in this window (i.e. the buffer
+ that is represented by "$win buffer"). See |tcl-command|, |tcl-expr|
+ and |tcl-option| for more information.
+ Example: >
+ $win option number on
+
+==============================================================================
+5. Tcl buffer commands *tcl-buffer-cmds*
+
+Buffer commands represent vim buffers. They are created by several commands:
+ ::vim::buffer {N} |tcl-buffer|
+ ::vim::buffer list |tcl-buffer|
+ "buffer" option of a window command |tcl-window-buffer|
+The ::vim::current(buffer) variable contains the name of the buffer command
+for the current buffer. A buffer command is automatically deleted when the
+corresponding vim buffer is destroyed. Whenever the buffer's contents are
+changed, all marks in the buffer are automatically adjusted. Any changes to
+the buffer's contents made by Tcl commands can be undone with the "undo" vim
+command (see |undo|).
+
+Lets assume the name of the buffer command is stored in the Tcl variable "buf",
+i.e. "$buf" calls the command. The following options are available: >
+
+ $buf append {n} {str} # Append a line to buffer, after line {n}.
+ $buf command {cmd} # Execute ex command in buffers context.
+ $buf count # Report number of lines in buffer.
+ $buf delcmd {cmd} # Call Tcl command when buffer is deleted.
+ $buf delete {n} # Delete a single line.
+ $buf delete {n} {m} # Delete several lines.
+ $buf expr {expr} # Evaluate vim expression in buffers context.
+ $buf get {n} # Get a single line as a string.
+ $buf get {n} {m} # Get several lines as a list.
+ $buf insert {n} {str} # Insert a line in buffer, as line {n}.
+ $buf last # Report line number of last line in buffer.
+ $buf mark {mark} # Report position of buffer mark.
+ $buf name # Report name of file in buffer.
+ $buf number # Report number of this buffer.
+ $buf option {opt} [val] # Get/Set vim option in buffers context.
+ $buf set {n} {text} # Replace a single line.
+ $buf set {n} {m} {list} # Replace several lines.
+ $buf windows # Create Tcl commands for buffer's windows.
+<
+ *tcl-linenumbers*
+Most buffer commands take line numbers as arguments. How Tcl treats these
+numbers depends on the "::vim::lbase" variable (see |tcl-var-lbase|). Instead
+of line numbers, several keywords can be also used: "top", "start", "begin",
+"first", "bottom", "end" and "last".
+
+Options:
+ $buf append {n} {str} *tcl-buffer-append*
+ $buf insert {n} {str} *tcl-buffer-insert*
+ Add a line to the buffer. With the "insert" option, the string
+ becomes the new line {n}, with "append" it is inserted after line {n}.
+ Example: >
+ $buf insert top "This is the beginning."
+ $buf append end "This is the end."
+< To add a list of lines to the buffer, use a loop: >
+ foreach line $list { $buf append $num $line ; incr num }
+<
+ $buf count *tcl-buffer-count*
+ Reports the total number of lines in the buffer.
+
+ $buf delcmd {cmd} *tcl-buffer-delcmd*
+ Registers the Tcl command {cmd} as a deletion callback for the buffer.
+ This command is executed (in the global scope) just before the buffer
+ is deleted. Complex commands should be build with "list": >
+ $buf delcmd [list puts vimerr "buffer [$buf number] gone"]
+< See also |tcl-window-delcmd|.
+
+ $buf delete {n} *tcl-buffer-delete*
+ $buf delete {n} {m}
+ Deletes line {n} or lines {n} through {m} from the buffer.
+ This example deletes everything except the last line: >
+ $buf delete first [expr [$buf last] - 1]
+<
+ $buf get {n} *tcl-buffer-get*
+ $buf get {n} {m}
+ Gets one or more lines from the buffer. For a single line, the result
+ is a string; for several lines, a list of strings.
+ Example: >
+ set topline [$buf get top]
+<
+ $buf last *tcl-buffer-last*
+ Reports the line number of the last line. This value depends on the
+ "::vim::lbase" variable. See |tcl-var-lbase|.
+
+ $buf mark {mark} *tcl-buffer-mark*
+ Reports the position of the named mark as a string, similar to the
+ cursor position of the "cursor" option of a window command (see
+ |tcl-window-cursor|). This can be converted to a Tcl array variable: >
+ array set mpos [$buf mark "a"]
+< "mpos(column)" and "mpos(row)" now contain the position of the mark.
+ If the mark is not set, a standard Tcl error results.
+
+ $buf name
+ Reports the name of the file in the buffer. For a buffer without a
+ file, this is an empty string.
+
+ $buf number
+ Reports the number of this buffer. See |:buffers|.
+ This example deletes a buffer from vim: >
+ ::vim::command "bdelete [$buf number]"
+<
+ $buf set {n} {string} *tcl-buffer-set*
+ $buf set {n} {m} {list}
+ Replace one or several lines in the buffer. If the list contains more
+ elements than there are lines to replace, they are inserted into the
+ buffer. If the list contains fewer elements, any unreplaced line is
+ deleted from the buffer.
+
+ $buf windows *tcl-buffer-windows*
+ Creates a window command for each window that displays this buffer, and
+ returns a list of the command names as the result.
+ Example: >
+ set winlist [$buf windows]
+ foreach win $winlist { $win height 4 }
+< See |tcl-window-cmds| for the available options.
+
+ $buf command [-quiet] {cmd} *tcl-buffer-command*
+ $buf expr {exr} *tcl-buffer-expr*
+ $buf option {opt} [val] *tcl-buffer-option*
+ These are similar to "::vim::command" etc., except that everything is
+ done in the context of the buffer represented by $buf, instead of the
+ current buffer. For example, setting an option that is marked 'local
+ to buffer' affects the buffer $buf. Anything that affects or queries
+ a window uses the first window in vim's window list that displays this
+ buffer (i.e. the first entry in the list returned by "$buf windows").
+ See |tcl-command|, |tcl-expr| and |tcl-option| for more information.
+ Example: >
+ if { [$buf option modified] } { $buf command "w" }
+
+==============================================================================
+6. Miscellaneous; Output from Tcl *tcl-misc* *tcl-output*
+
+The standard Tcl commands "exit" and "catch" are replaced by custom versions.
+"exit" terminates the current Tcl script and returns to vim, which deletes the
+Tcl interpreter. Another call to ":tcl" then creates a new Tcl interpreter.
+"exit" does NOT terminate vim! "catch" works as before, except that it does
+not prevent script termination from "exit". An exit code != 0 causes the ex
+command that invoked the Tcl script to return an error.
+
+Two new I/O streams are available in Tcl, "vimout" and "vimerr". All output
+directed to them is displayed in the vim message area, as information messages
+and error messages, respectively. The standard Tcl output streams stdout and
+stderr are mapped to vimout and vimerr, so that a normal "puts" command can be
+used to display messages in vim.
+
+==============================================================================
+7. Known bugs & problems *tcl-bugs*
+
+Calling one of the Tcl ex commands from inside Tcl (via "::vim::command") may
+have unexpected side effects. The command creates a new interpreter, which
+has the same abilities as the standard interpreter - making "::vim::command"
+available in a safe child interpreter therefore makes the child unsafe. (It
+would be trivial to block nested :tcl* calls or ensure that such calls from a
+safe interpreter create only new safe interpreters, but quite pointless -
+depending on vim's configuration, "::vim::command" may execute arbitrary code
+in any number of other scripting languages.) A call to "exit" within this new
+interpreter does not affect the old interpreter; it only terminates the new
+interpreter, then script processing continues normally in the old interpreter.
+
+Input from stdin is currently not supported.
+
+==============================================================================
+8. Examples: *tcl-examples*
+
+Here are a few small (and maybe useful) Tcl scripts.
+
+This script sorts the lines of the entire buffer (assume it contains a list
+of names or something similar):
+ set buf $::vim::current(buffer)
+ set lines [$buf get top bottom]
+ set lines [lsort -dictionary $lines]
+ $buf set top bottom $lines
+
+This script reverses the lines in the buffer. Note the use of "::vim::lbase"
+and "$buf last" to work with any line number setting.
+ set buf $::vim::current(buffer)
+ set t $::vim::lbase
+ set b [$buf last]
+ while { $t < $b } {
+ set tl [$buf get $t]
+ set bl [$buf get $b]
+ $buf set $t $bl
+ $buf set $b $tl
+ incr t
+ incr b -1
+ }
+
+This script adds a consecutive number to each line in the current range:
+ set buf $::vim::current(buffer)
+ set i $::vim::range(start)
+ set n 1
+ while { $i <= $::vim::range(end) } {
+ set line [$buf get $i]
+ $buf set $i "$n\t$line"
+ incr i ; incr n
+ }
+
+The same can also be done quickly with two ex commands, using ":tcldo":
+ :tcl set n 1
+ :[range]tcldo set line "$n\t$line" ; incr n
+
+This procedure runs an ex command on each buffer (idea stolen from Ron Aaron):
+ proc eachbuf { cmd } {
+ foreach b [::vim::buffer list] {
+ $b command $cmd
+ }
+ }
+Use it like this:
+ :tcl eachbuf %s/foo/bar/g
+Be careful with Tcl's string and backslash substitution, tough. If in doubt,
+surround the ex command with curly braces.
+
+
+If you want to add some Tcl procedures permanently to vim, just place them in
+a file (e.g. "~/.vimrc.tcl" on Unix machines), and add these lines to your
+startup file (usually "~/.vimrc" on Unix):
+ if has("tcl")
+ tclfile ~/.vimrc.tcl
+ endif
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt
new file mode 100644
index 000000000..a35ce54ce
--- /dev/null
+++ b/runtime/doc/indent.txt
@@ -0,0 +1,522 @@
+*indent.txt* For Vim version 7.0aa. Last change: 2004 Apr 25
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+This file is about indenting C programs and other files.
+
+1. Indenting C programs |C-indenting|
+2. Indenting by expression |indent-expression|
+
+==============================================================================
+1. Indenting C programs *C-indenting*
+
+The basics for C indenting are explained in section |30.2| of the user manual.
+
+Vim has options for automatically indenting C program files. These options
+affect only the indent and do not perform other formatting. For comment
+formatting, see |format-comments|.
+
+Note that this will not work when the |+smartindent| or |+cindent| features
+have been disabled at compile time.
+
+There are in fact four methods available for indentation:
+'autoindent' uses the indent from the previous line.
+'smartindent' is like 'autoindent' but also recognizes some C syntax to
+ increase/reduce the indent where appropriate.
+'cindent' Works more cleverly than the other two and is configurable to
+ different indenting styles.
+'indentexpr' The most flexible of all: Evaluates an expression to compute
+ the indent of a line. When non-empty this method overrides
+ the other ones. See |indent-expression|.
+The rest of this section describes the 'cindent' option.
+
+Note that 'cindent' indenting does not work for every code scenario. Vim
+is not a C compiler: it does not recognize all syntax.
+
+These four options control C program indenting:
+'cindent' Enables Vim to perform C program indenting automatically.
+'cinkeys' Specifies which keys trigger reindenting in insert mode.
+'cinoptions' Sets your preferred indent style.
+'cinwords' Defines keywords that start an extra indent in the next line.
+
+If 'lisp' is not on and 'equalprg' is empty, the "=" operator indents using
+Vim's built-in algorithm rather than calling an external program.
+
+See |autocommand| for how to set the 'cindent' option automatically for C code
+files and reset it for others.
+
+ *cinkeys-format* *indentkeys-format*
+The 'cinkeys' option is a string that controls Vim's indenting in response to
+typing certain characters or commands in certain contexts. Note that this not
+only triggers C-indenting. When 'indentexpr' is not empty 'indentkeys' is
+used instead. The format of 'cinkeys' and 'indentkeys' is equal.
+
+The default is "0{,0},0),:,0#,!^F,o,O,e" which specifies that indenting occurs
+as follows:
+
+ "0{" if you type '{' as the first character in a line
+ "0}" if you type '}' as the first character in a line
+ "0)" if you type ')' as the first character in a line
+ ":" if you type ':' after a label or case statement
+ "0#" if you type '#' as the first character in a line
+ "!^F" if you type CTRL-F (which is not inserted)
+ "o" if you type a <CR> anywhere or use the "o" command (not in
+ insert mode!)
+ "O" if you use the "O" command (not in insert mode!)
+ "e" if you type the second 'e' for an "else" at the start of a
+ line
+
+Characters that can precede each key:
+! When a '!' precedes the key, Vim will not insert the key but will
+ instead reindent the current line. This allows you to define a
+ command key for reindenting the current line. CTRL-F is the default
+ key for this. Be careful if you define CTRL-I for this because CTRL-I
+ is the ASCII code for <Tab>.
+* When a '*' precedes the key, Vim will reindent the line before
+ inserting the key. If 'cinkeys' contains "*<Return>", Vim reindents
+ the current line before opening a new line.
+0 When a zero precedes the key (but appears after '!' or '*') Vim will
+ reindent the line only if the key is the first character you type in
+ the line. When used before "=" Vim will only reindent the line if
+ there is only white space before the word.
+
+When neither '!' nor '*' precedes the key, Vim reindents the line after you
+type the key. So ';' sets the indentation of a line which includes the ';'.
+
+Special key names:
+<> Angle brackets mean spelled-out names of keys. For example: "<Up>",
+ "<Ins>" (see |key-notation|).
+^ Letters preceded by a caret (^) are control characters. For example:
+ "^F" is CTRL-F.
+o Reindent a line when you use the "o" command or when Vim opens a new
+ line below the current one (e.g., when you type <Enter> in insert
+ mode).
+O Reindent a line when you use the "O" command.
+e Reindent a line that starts with "else" when you type the second 'e'.
+: Reindent a line when a ':' is typed which is after a label or case
+ statement. Don't reindent for a ":" in "class::method" for C++. To
+ Reindent for any ":", use "<:>".
+=word Reindent when typing the last character of "word". "word" may
+ actually be part of another word. Thus "=end" would cause reindenting
+ when typing the "d" in "endif" or "endwhile". But not when typing
+ "bend". Also reindent when completion produces a word that starts
+ with "word". "0=word" reindents when there is only white space before
+ the word.
+=~word Like =word, but ignore case.
+
+If you really want to reindent when you type 'o', 'O', 'e', '0', '<', '>',
+'*', ':' or '!', use "<o>", "<O>", "<e>", "<0>", "<<>", "<>>", "<*>", "<:>" or
+"<!>", respectively, for those keys.
+
+For an emacs-style indent mode where lines aren't indented every time you
+press Enter but only if you press Tab, I suggest:
+ :set cinkeys=0{,0},:,0#,!<Tab>,!^F
+You might also want to switch off 'autoindent' then.
+
+Note: If you change the current line's indentation manually, Vim ignores the
+cindent settings for that line. This prevents vim from reindenting after you
+have changed the indent by typing <BS>, <Tab>, or <Space> in the indent or
+used CTRL-T or CTRL-D.
+
+ *cinoptions-values*
+The 'cinoptions' option sets how Vim performs indentation. 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.
+
+ >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').
+
+ cino= cino=>2 cino=>2s >
+ if (cond) if (cond) if (cond)
+ { { {
+ foo; foo; foo;
+ } } }
+<
+ 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
+ different indent when the '{' is at the start of the line from
+ when '{' is at the end of the line. (default 0).
+
+ cino= cino=e2 cino=e-2 >
+ if (cond) { if (cond) { if (cond) {
+ foo; foo; foo;
+ } } }
+ else else else
+ { { {
+ bar; bar; bar;
+ } } }
+<
+ 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 '{'
+ before the statement from when there is a '{' before it.
+ (default 0).
+
+ cino= cino=n2 cino=n-2 >
+ if (cond) if (cond) if (cond)
+ foo; foo; foo;
+ else else else
+ { { {
+ bar; bar; bar;
+ } } }
+<
+ 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
+ after the brace is put relative to this brace. (default 0).
+
+ cino= cino=f.5s cino=f1s >
+ func() func() func()
+ { { {
+ int foo; int foo; int foo;
+<
+ {N Place opening braces N characters from the prevailing indent.
+ This applies only for opening braces that are inside other
+ braces. (default 0).
+
+ cino= cino={.5s cino={1s >
+ if (cond) if (cond) if (cond)
+ { { {
+ foo; foo; foo;
+<
+ }N Place closing braces N characters from the matching opening
+ brace. (default 0).
+
+ cino= cino={2,}-0.5s cino=}2 >
+ if (cond) if (cond) if (cond)
+ { { {
+ foo; foo; foo;
+ } } }
+<
+ ^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
+ negative number). (default 0).
+
+ cino= cino=^-2 cino=^-s >
+ func() func() func()
+ { { {
+ if (cond) if (cond) if (cond)
+ { { {
+ a = b; a = b; a = b;
+ } } }
+ } } }
+<
+ :N Place case labels N characters from the indent of the switch().
+ (default 'shiftwidth').
+
+ cino= cino=:0 >
+ switch (x) switch(x)
+ { {
+ case 1: case 1:
+ a = b; a = b;
+ default: default:
+ } }
+<
+ =N Place statements occurring after a case label N characters from
+ the indent of the label. (default 'shiftwidth').
+
+ cino= cino==10 >
+ case 11: case 11: a = a + 1;
+ a = a + 1; b = b + 1;
+<
+ lN If N != 0 Vim will align with a case label instead of the
+ statement after it in the same line.
+
+ cino= cino=l1 >
+ switch (a) { switch (a) {
+ case 1: { case 1: {
+ break; break;
+ } }
+<
+ 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).
+
+ cino= cino=b1 >
+ switch (x) switch(x)
+ { {
+ case 1: case 1:
+ a = b; a = b;
+ break; break;
+
+ default: default:
+ a = 0; a = 0;
+ break; break;
+ } }
+<
+ 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:".
+
+ cino= cino=g0 >
+ { {
+ public: public:
+ a = b; a = b;
+ private: private:
+ } }
+<
+ hN Place statements occurring after a C++ scope declaration N
+ characters from the indent of the label. (default
+ 'shiftwidth').
+
+ cino= cino=h10 >
+ public: public: a = a + 1;
+ a = a + 1; b = b + 1;
+<
+ pN Parameter declarations for K&R-style function declarations will
+ be indented N characters from the margin. (default
+ 'shiftwidth').
+
+ cino= cino=p0 cino=p2s >
+ func(a, b) func(a, b) func(a, b)
+ int a; int a; int a;
+ char b; char b; char b;
+<
+ tN Indent a function return type declaration N characters from the
+ margin. (default 'shiftwidth').
+
+ cino= cino=t0 cino=t7 >
+ int int int
+ func() func() func()
+<
+ iN Indent C++ base class declarations and contructor
+ initializations, if they start in a new line (otherwise they
+ are aligned at the right side of the ':').
+ (default 'shiftwidth').
+
+ cino= cino=i0 >
+ class MyClass : class MyClass :
+ public BaseClass public BaseClass
+ {} {}
+ MyClass::MyClass() : MyClass::MyClass() :
+ BaseClass(3) BaseClass(3)
+ {} {}
+<
+ +N Indent a continuation line (a line that spills onto the next) N
+ additional characters. (default 'shiftwidth').
+
+ cino= cino=+10 >
+ a = b + 9 * a = b + 9 *
+ c; 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|.
+
+ cino= cino=c5 >
+ /* /*
+ text. text.
+ */ */
+<
+ 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).
+
+ cino=c0 cino=c0,C1 >
+ /******** /********
+ text. text.
+ ********/ ********/
+< (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
+
+ /N Indent comment lines N characters extra. (default 0).
+ cino= cino=/4 >
+ a = b; a = b;
+ /* comment */ /* comment */
+ c = d; c = d;
+<
+ (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
+ is the first non-white character in its line, line up with the
+ next non-white character after the unclosed parentheses.
+ (default 'shiftwidth' * 2).
+
+ cino= cino=(0 >
+ if (c1 && (c2 || if (c1 && (c2 ||
+ c3)) c3))
+ foo; foo;
+ if (c1 && if (c1 &&
+ (c2 || c3)) (c2 || c3))
+ { {
+<
+ uN Same as (N, but for one level deeper. (default 'shiftwidth').
+
+ cino= cino=u2 >
+ if (c123456789 if (c123456789
+ && (c22345 && (c22345
+ || c3)) || c3))
+<
+ 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).
+
+ cino= or cino=(s cino=(s,U1 >
+ c = c1 && c = c1 &&
+ ( (
+ c2 || c2 ||
+ c3 c3
+ ) && c4; ) && c4;
+<
+ 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
+ up with the character immediately after the unclosed parentheses
+ rather than the first non-white character. (default 0).
+
+ cino=(0 cino=(0,w1 >
+ if ( c1 if ( c1
+ && ( c2 && ( c2
+ || c3)) || c3))
+ foo; foo;
+<
+ 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
+ closing parentheses, indent the following line N characters
+ relative to the outer context (i.e. start of the line or the
+ next unclosed parentheses). (default: 0).
+
+ cino=(0 cino=(0,W4 >
+ a_long_line( a_long_line(
+ argument, argument,
+ argument); argument);
+ a_short_line(argument, a_short_line(argument,
+ argument); argument);
+<
+ 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).
+
+ cino=(s cino=(s,m1 >
+ c = c1 && ( c = c1 && (
+ c2 || c2 ||
+ c3 c3
+ ) && c4; ) && c4;
+ if ( if (
+ c1 && c2 c1 && c2
+ ) )
+ foo; foo;
+<
+ *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: >
+
+ object.add(new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ do_something();
+ }
+ });
+<
+ )N Vim searches for unclosed parentheses at most N lines away.
+ This limits the time needed to search for parentheses. (default
+ 20 lines).
+
+ *N Vim searches for unclosed comments at most N lines away. This
+ limits the time needed to search for the start of a comment.
+ (default 30 lines).
+
+
+The defaults, spelled out in full, are:
+ cinoptions=>s,e0,n0,f0,{0,}0,^0,:s,=s,l0,gs,hs,ps,ts,+s,c3,C0,(2s,us,
+ \U0,w0,m0,j0,)20,*30
+
+Vim puts a line in column 1 if:
+- It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+- It starts with a label (a keyword followed by ':', other than "case" and
+ "default").
+- Any combination of indentations causes the line to have less than 0
+ indentation.
+
+==============================================================================
+2. Indenting by expression *indent-expression*
+
+The basics for using flexible indenting are explained in section |30.3| of the
+user manual.
+
+If you want to write your own indent file, it must set the 'indentexpr'
+option. Setting the 'indentkeys' option is often useful. See the
+$VIMRUNTIME/indent directory for examples.
+
+
+REMARKS ABOUT SPECIFIC INDENT FILES ~
+
+
+FORTRAN *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 |fortran-syntax|.
+
+Do loops ~
+All do loops are left unindented by default. Do loops can be unstructured in
+Fortran with (possibly multiple) loops ending on a labelled executable
+statement of almost arbitrary type. Correct indentation requires
+compiler-quality parsing. Old code with do loops ending on labelled statements
+of arbitrary type can be indented with elaborate programs such as Tidy
+(http://www.unb.ca/chem/ajit/f_tidy.htm). Structured do/continue loops are
+also left unindented because continue statements are also used for purposes
+other than ending a do loop. Programs such as Tidy can convert structured
+do/continue loops to the do/enddo form. Do loops of the do/enddo variety can
+be indented. If you use only structured loops of the do/enddo form, you should
+declare this by setting the fortran_do_enddo variable in your .vimrc as
+follows >
+
+ let fortran_do_enddo=1
+
+in which case do loops will be indented. If all your loops are of do/enddo
+type only in, say, .f90 files, then you should set a buffer flag with an
+autocommand such as >
+
+ au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1
+
+to get do loops indented in .f90 files and left alone in Fortran files with
+other extensions such as .for.
+
+
+VERILOG *verilog-indent*
+
+General block statements such as if, for, case, always, initial, function,
+specify and begin, etc., are indented. The module block statements (first
+level blocks) are not indented by default. you can turn on the indent with
+setting a variable in the .vimrc as follows: >
+
+ let b:verilog_indent_modules = 1
+
+then the module blocks will be indented. To stop this, remove the variable: >
+
+ :unlet b:verilog_indent_modules
+
+To set the variable only for Verilog file. The following statements can be
+used: >
+
+ au BufReadPost * if exists("b:current_syntax")
+ au BufReadPost * if b:current_syntax == "verilog"
+ au BufReadPost * let b:verilog_indent_modules = 1
+ au BufReadPost * endif
+ au BufReadPost * endif
+
+Furthermore, setting the variable b:verilog_indent_width to change the
+indenting width (default is 'shiftwidth'): >
+
+ let b:verilog_indent_width = 4
+ let b:verilog_indent_width = &sw * 2
+
+In addition, you can turn the verbose mode for debug issue: >
+
+ let b:verilog_indent_verbose = 1
+
+Make sure to do ":set cmdheight=2" first to allow the display of the message.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
new file mode 100644
index 000000000..791e5ba36
--- /dev/null
+++ b/runtime/doc/index.txt
@@ -0,0 +1,1423 @@
+*index.txt* For Vim version 7.0aa. Last change: 2004 May 24
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+ *index*
+This file contains a list of all commands for each mode, with a tag and a
+short description. The lists are sorted on ASCII value.
+
+Tip: When looking for certain functionality, use a search command. E.g.,
+to look for deleting something, use: "/delete".
+
+1. Insert mode |insert-index|
+2. Normal mode |normal-index|
+ 2.1. Text objects |objects|
+ 2.2. Window commands |CTRL-W|
+ 2.3. Square bracket commands |[|
+ 2.4. Commands starting with 'g' |g|
+ 2.5. Commands starting with 'z' |z|
+3. Visual mode |visual-index|
+4. Command-line editing |ex-edit-index|
+5. EX commands |ex-cmd-index|
+
+For an overview of options see help.txt |option-list|.
+For an overview of built-in functions see |functions|.
+For a list of Vim variables see |vim-variable|.
+For a complete listing of all help items see |help-tags|.
+
+==============================================================================
+1. Insert mode *insert-index*
+
+tag char action ~
+-----------------------------------------------------------------------
+|i_CTRL-@| CTRL-@ insert previously inserted text and stop
+ insert
+|i_CTRL-A| CTRL-A insert previously inserted text
+ CTRL-B not used |i_CTRL-B-gone|
+|i_CTRL-C| CTRL-C quit insert mode, without checking for
+ abbreviation, unless 'insertmode' set.
+|i_CTRL-D| CTRL-D delete one shiftwidth of indent in the current
+ line
+|i_CTRL-E| CTRL-E insert the character which is below the cursor
+ CTRL-F not used (but by default it's in 'cinkeys' to
+ re-indent the current line)
+|i_CTRL-G_j| CTRL-G CTRL-J line down, to column where inserting started
+|i_CTRL-G_j| CTRL-G j line down, to column where inserting started
+|i_CTRL-G_j| CTRL-G <Down> line down, to column where inserting started
+|i_CTRL-G_k| CTRL-G CTRL-K line up, to column where inserting started
+|i_CTRL-G_k| CTRL-G k line up, to column where inserting started
+|i_CTRL-G_k| CTRL-G <Up> line up, to column where inserting started
+|i_CTRL-G_u| CTRL-G u start new undoable edit
+|i_<BS>| <BS> delete character before the cursor
+|i_digraph| {char1}<BS>{char2}
+ enter digraph (only when 'digraph' option set)
+|i_CTRL-H| CTRL-H same as <BS>
+|i_<Tab>| <Tab> insert a <Tab> character
+|i_CTRL-I| CTRL-I same as <Tab>
+|i_<NL>| <NL> same as <CR>
+|i_CTRL-J| CTRL-J same as <CR>
+|i_CTRL-K| CTRL-K {char1} {char2}
+ enter digraph
+|i_CTRL-L| CTRL-L when 'insertmode' set: Leave Insert mode
+|i_<CR>| <CR> begin new line
+|i_CTRL-M| CTRL-M same as <CR>
+|i_CTRL-N| CTRL-N find next match for keyword in front of the
+ cursor
+|i_CTRL-O| CTRL-O execute a single command and return to insert
+ mode
+|i_CTRL-P| CTRL-P find previous match for keyword in front of
+ the cursor
+|i_CTRL-Q| CTRL-Q same as CTRL-V, unless used for terminal
+ control flow
+|i_CTRL-R| CTRL-R {0-9a-z"%#*:=}
+ insert the contents of a register
+|i_CTRL-R_CTRL-R| CTRL-R CTRL-R {0-9a-z"%#*:=}
+ insert the contents of a register literally
+|i_CTRL-R_CTRL-O| CTRL-R CTRL-O {0-9a-z"%#*:=}
+ insert the contents of a register literally
+ and don't auto-indent
+|i_CTRL-R_CTRL-P| CTRL-R CTRL-P {0-9a-z"%#*:=}
+ insert the contents of a register literally
+ and fix indent.
+ CTRL-S (used for terminal control flow)
+|i_CTRL-T| CTRL-T insert one shiftwidth of indent in current
+ line
+|i_CTRL-U| CTRL-U delete all entered characters in the current
+ line
+|i_CTRL-V| CTRL-V {char} insert next non-digit literally
+|i_CTRL-V_digit| CTRL-V {number} insert three digit decimal number as a single
+ byte.
+|i_CTRL-W| CTRL-W delete word before the cursor
+|i_CTRL-X| CTRL-X {mode} enter CTRL-X sub mode, see below
+|i_CTRL-Y| CTRL-Y insert the character which is above the cursor
+|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'
+ CTRL-\ a - z reserved for extensions
+ CTRL-\ others not used
+|i_CTRL-]| CTRL-] trigger abbreviation
+|i_CTRL-^| CTRL-^ toggle use of |:lmap| mappings
+|i_CTRL-_| CTRL-_ When 'allowrevins' set: change language
+ (Hebrew, Farsi) {only when compiled with
+ +rightleft feature}
+
+ <Space> to '~' not used, except '0' and '^' followed by
+ CTRL-D
+
+|i_0_CTRL-D| 0 CTRL-D delete all indent in the current line
+|i_^_CTRL-D| ^ CTRL-D delete all indent in the current line, restore
+ it in the next line
+
+|i_<Del>| <Del> delete character under the cursor
+
+ Meta characters (0x80 to 0xff, 128 to 255)
+ not used
+
+|i_<Left>| <Left> cursor one character left
+|i_<S-Left>| <S-Left> cursor one word left
+|i_<C-Left>| <C-Left> cursor one word left
+|i_<Right>| <Right> cursor one character right
+|i_<S-Right>| <S-Right> cursor one word right
+|i_<C-Right>| <C-Right> cursor one word right
+|i_<Up>| <Up> cursor one line up
+|i_<S-Up>| <S-Up> same as <PageUp>
+|i_<Down>| <Down> cursor one line down
+|i_<S-Down>| <S-Down> same as <PageDown>
+|i_<Home>| <Home> cursor to start of line
+|i_<C-Home>| <C-Home> cursor to start of file
+|i_<End>| <End> cursor past end of line
+|i_<C-End>| <C-End> cursor past end of file
+|i_<PageUp>| <PageUp> one screenfull backward
+|i_<PageDown>| <PageDown> one screenfull forward
+|i_<F1>| <F1> same as <Help>
+|i_<Help>| <Help> stop insert mode and display help window
+|i_<Insert>| <Insert> toggle Insert/Replace mode
+|i_<LeftMouse>| <LeftMouse> cursor at mouse click
+|i_<MouseDown>| <MouseDown> scroll three lines downwards
+|i_<S-MouseDown>| <S-MouseDown> scroll a full page downwards
+|i_<MouseUp>| <MouseUp> scroll three lines upwards
+|i_<S-MouseUp>| <S-MouseUp> scroll a full page upwards
+
+commands in CTRL-X submode
+
+|i_CTRL-X_CTRL-D| CTRL-X CTRL-D complete defined identifiers
+|i_CTRL-X_CTRL-E| CTRL-X CTRL-E scroll up
+|i_CTRL-X_CTRL-F| CTRL-X CTRL-F complete file names
+|i_CTRL-X_CTRL-I| CTRL-X CTRL-I complete identifiers
+|i_CTRL-X_CTRL-K| CTRL-X CTRL-K complete identifiers from dictionary
+|i_CTRL-X_CTRL-L| CTRL-X CTRL-L complete whole lines
+|i_CTRL-X_CTRL-N| CTRL-X CTRL-N next completion
+|i_CTRL-X_CTRL-P| CTRL-X CTRL-P previous completion
+|i_CTRL-X_CTRL-T| CTRL-X CTRL-T complete identifiers from thesaurus
+|i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down
+|i_CTRL-X_CTRL-]| CTRL-X CTRL-] complete tags
+{not available when compiled without the +insert_expand feature}
+
+==============================================================================
+2. Normal mode *normal-index*
+
+CHAR any non-blank character
+WORD a sequence of non-blank characters
+N a number entered before the command
+{motion} a cursor movement command
+Nmove the text that is moved over with a {motion}
+SECTION a section that possibly starts with '}' instead of '{'
+
+note: 1 = cursor movement command; 2 = can be undone/redone
+
+tag char note action in Normal mode ~
+------------------------------------------------------------------------------
+ CTRL-@ not used
+|CTRL-A| CTRL-A 2 add N to number at/after cursor
+|CTRL-B| CTRL-B 1 scroll N screens Backwards
+|CTRL-C| CTRL-C interrupt current (search) command
+|CTRL-D| CTRL-D scroll Down N lines (default: half a screen)
+|CTRL-E| CTRL-E scroll N lines upwards (N lines Extra)
+|CTRL-F| CTRL-F 1 scroll N screens Forward
+|CTRL-G| CTRL-G display current file name and position
+|<BS>| <BS> 1 same as "h"
+|CTRL-H| CTRL-H 1 same as "h"
+|<Tab>| <Tab> 1 go to N newer entry in jump list
+|CTRL-I| CTRL-I 1 same as <Tab>
+|<NL>| <NL> 1 same as "j"
+|CTRL-J| CTRL-J 1 same as "j"
+ CTRL-K not used
+|CTRL-L| CTRL-L redraw screen
+|<CR>| <CR> 1 cursor to the first CHAR N lines lower
+|CTRL-M| CTRL-M 1 same as <CR>
+|CTRL-N| CTRL-N 1 same as "j"
+|CTRL-O| CTRL-O 1 go to N older entry in jump list
+|CTRL-P| CTRL-P 1 same as "k"
+ CTRL-Q (used for terminal control flow)
+|CTRL-R| CTRL-R 2 redo changes which were undone with 'u'
+ CTRL-S (used for terminal control flow)
+|CTRL-T| CTRL-T jump to N older Tag in tag list
+|CTRL-U| CTRL-U scroll N lines Upwards (default: half a
+ screen)
+|CTRL-V| CTRL-V start blockwise Visual mode
+|CTRL-W| CTRL-W {char} window commands, see |CTRL-W|
+|CTRL-X| CTRL-X 2 subtract N from number at/after cursor
+|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-\ a - z reserved for extensions
+ CTRL-\ others not used
+|CTRL-]| CTRL-] :ta to ident under cursor
+|CTRL-^| CTRL-^ edit Nth alternate file (equivalent to
+ ":e #N")
+ CTRL-_ not used
+
+|<Space>| <Space> 1 same as "l"
+|!| !{motion}{filter}
+ 2 filter Nmove text through the {filter}
+ command
+|!!| !!{filter} 2 filter N lines through the {filter} command
+|quote| "{a-zA-Z0-9.%#:-"} use register {a-zA-Z0-9.%#:-"} for next
+ delete, yank or put (uppercase to append)
+ ({.%#:} only work with put)
+|#| # 1 search backward for the Nth occurrence of
+ the ident under the cursor
+|$| $ 1 cursor to the end of Nth next line
+|%| % 1 find the next (curly/square) bracket on
+ this line and go to its match, or go to
+ matching comment bracket, or go to matching
+ preprocessor directive.
+|N%| {count}% 1 go to N percentage in the file
+|&| & 2 repeat last :s
+|'| '{a-zA-Z0-9} 1 cursor to the first CHAR on the line with
+ mark {a-zA-Z0-9}
+|''| '' 1 cursor to the first CHAR of the line where
+ the cursor was before the latest jump.
+|'(| '( 1 cursor to the first CHAR on the line of the
+ start of the current sentence
+|')| ') 1 cursor to the first CHAR on the line of the
+ end of the current sentence
+|'<| '< 1 cursor to the first CHAR of the line where
+ highlighted area starts/started in the
+ current buffer.
+|'>| '> 1 cursor to the first CHAR of the line where
+ highlighted area ends/ended in the current
+ buffer.
+|'[| '[ 1 cursor to the first CHAR on the line of the
+ start of last operated text or start of put
+ text
+|']| '] 1 cursor to the first CHAR on the line of the
+ end of last operated text or end of put
+ text
+|'{| '{ 1 cursor to the first CHAR on the line of the
+ start of the current paragraph
+|'}| '} 1 cursor to the first CHAR on the line of the
+ end of the current paragraph
+|(| ( 1 cursor N sentences backward
+|)| ) 1 cursor N sentences forward
+|star| * 1 search forward for the Nth occurrence of
+ the ident under the cursor
+|+| + 1 same as <CR>
+|,| , 1 repeat latest f, t, F or T in opposite
+ direction N times
+|-| - 1 cursor to the first CHAR N lines higher
+|.| . 2 repeat last change with count replaced with
+ N
+|/| /{pattern}<CR> 1 search forward for the Nth occurrence of
+ {pattern}
+|/<CR>| /<CR> 1 search forward for {pattern} of last search
+|count| 0 1 cursor to the first char of the line
+|count| 1 prepend to command to give a count
+|count| 2 "
+|count| 3 "
+|count| 4 "
+|count| 5 "
+|count| 6 "
+|count| 7 "
+|count| 8 "
+|count| 9 "
+|:| : 1 start entering an Ex command
+|N:| {count}: start entering an Ex command with range
+ from current line to N-1 lines down
+|;| ; 1 repeat latest f, t, F or T N times
+|<| <{motion} 2 shift Nmove lines one 'shiftwidth'
+ leftwards
+|<<| << 2 shift N lines one 'shiftwidth' leftwards
+|=| ={motion} 2 filter Nmove lines through "indent"
+|==| == 2 filter N lines through "indent"
+|>| >{motion} 2 shift Nmove lines one 'shiftwidth'
+ rightwards
+|>>| >> 2 shift N lines one 'shiftwidth' rightwards
+|?| ?{pattern}<CR> 1 search backward for the Nth previous
+ occurrence of {pattern}
+|?<CR>| ?<CR> 1 search backward for {pattern} of last search
+|@| @{a-z} 2 execute the contents of register {a-z}
+ N times
+|@:| @: repeat the previous ":" command N times
+|@@| @@ 2 repeat the previous @{a-z} N times
+|A| A 2 append text after the end of the line N times
+|B| B 1 cursor N WORDS backward
+|C| ["x]C 2 change from the cursor position to the end
+ of the line, and N-1 more lines [into
+ buffer x]; synonym for "c$"
+|D| ["x]D 2 delete the characters under the cursor
+ until the end of the line and N-1 more
+ lines [into buffer x]; synonym for "d$"
+|E| E 1 cursor forward to the end of WORD N
+|F| F{char} 1 cursor to the Nth occurrence of {char} to
+ the left
+|G| G 1 cursor to line N, default last line
+|H| H 1 cursor to line N from top of screen
+|I| I 2 insert text before the first CHAR on the
+ line N times
+|J| J 2 Join N lines; default is 2
+|K| K lookup Keyword under the cursor with
+ 'keywordprg'
+|L| L 1 cursor to line N from bottom of screen
+|M| M 1 cursor to middle line of screen
+|N| N 1 repeat the latest '/' or '?' N times in
+ opposite direction
+|O| O 2 begin a new line above the cursor and
+ insert text, repeat N times
+|P| ["x]P 2 put the text [from buffer x] before the
+ cursor N times
+|Q| Q switch to "Ex" mode
+|R| R 2 enter replace mode: overtype existing
+ characters, repeat the entered text N-1
+ times
+|S| ["x]S 2 delete N lines [into buffer x] and start
+ insert; synonym for "^cc" or "0cc",
+ depending on autoindent
+|T| T{char} 1 cursor till after Nth occurrence of {char}
+ to the left
+|U| U 2 undo all latest changes on one line
+|V| V start linewise Visual mode
+|W| W 1 cursor N WORDS forward
+|X| ["x]X 2 delete N characters before the cursor [into
+ buffer x]
+|Y| ["x]Y yank N lines [into buffer x]; synonym for
+ "yy"
+|ZZ| ZZ store current file if modified, and exit
+|ZQ| ZQ exit current file always
+|[| [{char} square bracket command (see below)
+ \ not used
+|]| ]{char} square bracket command (see below)
+|^| ^ 1 cursor to the first CHAR of the line
+|_| _ 1 cursor to the first CHAR N - 1 lines lower
+|`| `{a-zA-Z0-9} 1 cursor to the mark {a-zA-Z0-9}
+|`(| `( 1 cursor to the start of the current sentence
+|`)| `) 1 cursor to the end of the current sentence
+|`<| `< 1 cursor to the start of the highlighted area
+|`>| `> 1 cursor to the end of the highlighted area
+|`[| `[ 1 cursor to the start of last operated text
+ or start of putted text
+|`]| `] 1 cursor to the end of last operated text or
+ end of putted text
+|``| `` 1 cursor to the position before latest jump
+|`{| `{ 1 cursor to the start of the current paragraph
+|`}| `} 1 cursor to the end of the current paragraph
+|a| a 2 append text after the cursor N times
+|b| b 1 cursor N words backward
+|c| ["x]c{motion} 2 delete Nmove text [into buffer x] and start
+ insert
+|cc| ["x]cc 2 delete N lines [into buffer x] and start
+ insert
+|d| ["x]d{motion} 2 delete Nmove text [into buffer x]
+|dd| ["x]dd 2 delete N lines [into buffer x]
+|do| do 2 same as ":diffget"
+|dp| dp 2 same as ":diffput"
+|e| e 1 cursor forward to the end of word N
+|f| f{char} 1 cursor to Nth occurrence of {char} to the
+ right
+|g| g{char} extended commands, see below
+|h| h 1 cursor N chars to the left
+|i| i 2 insert text before the cursor N times
+|j| j 1 cursor N lines downward
+|k| k 1 cursor N lines upward
+|l| l 1 cursor N chars to the right
+|m| m{A-Za-z} set mark {A-Za-z} at cursor position
+|n| n 1 repeat the latest '/' or '?' N times
+|o| o 2 begin a new line below the cursor and
+ insert text, repeat N times
+|p| ["x]p 2 put the text [from register x] after the
+ cursor N times
+|q| q{0-9a-zA-Z"} record typed characters into named register
+ {0-9a-zA-Z"} (uppercase to append)
+|q| q (while recording) stops recording
+|q:| q: edit : command-line in command-line window
+|q/| q/ edit / command-line in command-line window
+|q?| q? edit ? command-line in command-line window
+|r| r{char} 2 replace N chars with {char}
+|s| ["x]s 2 (substitute) delete N characters [into
+ buffer x] and start insert
+|t| t{char} 1 cursor till before Nth occurrence of {char}
+ to the right
+|u| u 2 undo changes
+|v| v start characterwise Visual mode
+|w| w 1 cursor N words forward
+|x| ["x]x 2 delete N characters under and after the
+ cursor [into buffer x]
+|y| ["x]y{motion} yank Nmove text [into buffer x]
+|yy| ["x]yy yank N lines [into buffer x]
+|z| z{char} commands starting with 'z', see below
+|{| { 1 cursor N paragraphs backward
+|bar| | 1 cursor to column N
+|}| } 1 cursor N paragraphs forward
+|~| ~ 2 'tildeop' off: switch case of N characters
+ under cursor and move the cursor N
+ characters to the right
+|~| ~{motion} 'tildeop' on: switch case of Nmove text
+|<C-End>| <C-End> 1 same as "G"
+|<C-Home>| <C-Home> 1 same as "gg"
+|<C-Left>| <C-Left> 1 same as "b"
+|<C-LeftMouse>| <C-LeftMouse> ":ta" to the keyword at the mouse click
+|<C-Right>| <C-Right> 1 same as "w"
+|<C-RightMouse>| <C-RightMouse> same as "CTRL-T"
+|<Del>| ["x]<Del> 2 same as "x"
+|N<Del>| {count}<Del> remove the last digit from {count}
+|<Down>| <Down> 1 same as "j"
+|<End>| <End> 1 same as "$"
+|<F1>| <F1> same as <Help>
+|<Help>| <Help> open a help window
+|<Home>| <Home> 1 same as "0"
+|<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 "P" at the mouse click position
+|<PageDown>| <PageDown> same as CTRL-F
+|<PageUp>| <PageUp> same as CTRL-B
+|<Right>| <Right> 1 same as "l"
+|<RightMouse>| <RightMouse> start Visual mode, move cursor to the mouse
+ click position
+|<S-Down>| <S-Down> 1 same as CTRL-F
+|<S-Left>| <S-Left> 1 same as "b"
+|<S-LeftMouse>| <S-LeftMouse> same as "*" at the mouse click position
+|<S-Right>| <S-Right> 1 same as "w"
+|<S-RightMouse>| <S-RightMouse> same as "#" at the mouse click position
+|<S-Up>| <S-Up> 1 same as CTRL-B
+|<Undo>| <Undo> 2 same as "u"
+|<Up>| <Up> 1 same as "k"
+|<MouseDown>| <MouseDown> scroll three lines downwards
+|<S-MouseDown>| <S-MouseDown> scroll a full page downwards
+|<MouseUp>| <MouseUp> scroll three lines upwards
+|<S-MouseUp>| <S-MouseUp> scroll a full page upwards
+
+==============================================================================
+2.1 Text objects *objects*
+
+These can be used after an operator or in Visual mode to select an object.
+
+tag command action in Normal mode ~
+------------------------------------------------------------------------------
+|v_a(| a( same as ab
+|v_a)| a) same as ab
+|v_a<| a< "a <>" from '<' to the matching '>'
+|v_a>| a> same as a<
+|v_aB| aB "a Block" from "[{" to "]}" (with brackets)
+|v_aW| aW "a WORD" (with white space)
+|v_a[| a[ "a []" from '[' to the matching ']'
+|v_a]| a] same as a[
+|v_ab| ab "a block" from "[(" to "])" (with braces)
+|v_ap| ap "a paragraph" (with white space)
+|v_as| as "a sentence" (with white space)
+|v_aw| aw "a word" (with white space)
+|v_a{| a{ same as aB
+|v_a}| a} same as aB
+|v_i(| i( same as ib
+|v_i)| i) same as ib
+|v_i<| i< "inner <>" from '<' to the matching '>'
+|v_i>| i> same as i<
+|v_iB| iB "inner Block" from "[{" and "]}"
+|v_iW| iW "inner WORD"
+|v_i[| i[ "inner []" from '[' to the matching ']'
+|v_i]| i] same as i[
+|v_ib| ib "inner block" from "[(" to "])"
+|v_ip| ip "inner paragraph"
+|v_is| is "inner sentence"
+|v_iw| iw "inner word"
+|v_i{| i{ same as iB
+|v_i}| i} same as iB
+
+==============================================================================
+2.2 Window commands *CTRL-W*
+
+tag command action in Normal mode ~
+------------------------------------------------------------------------------
+|CTRL-W_CTRL-B| CTRL-W CTRL-B same as "CTRL-W b"
+|CTRL-W_CTRL-C| CTRL-W CTRL-C same as "CTRL-W c"
+|CTRL-W_CTRL-D| CTRL-W CTRL-D same as "CTRL-W d"
+|CTRL-W_CTRL-F| CTRL-W CTRL-F same as "CTRL-W f"
+ CTRL-W CTRL-G same as "CTRL-W g .."
+|CTRL-W_CTRL-H| CTRL-W CTRL-H same as "CTRL-W h"
+|CTRL-W_CTRL-I| CTRL-W CTRL-I same as "CTRL-W i"
+|CTRL-W_CTRL-J| CTRL-W CTRL-J same as "CTRL-W j"
+|CTRL-W_CTRL-K| CTRL-W CTRL-K same as "CTRL-W k"
+|CTRL-W_CTRL-L| CTRL-W CTRL-L same as "CTRL-W l"
+|CTRL-W_CTRL-N| CTRL-W CTRL-N same as "CTRL-W n"
+|CTRL-W_CTRL-O| CTRL-W CTRL-O same as "CTRL-W o"
+|CTRL-W_CTRL-P| CTRL-W CTRL-P same as "CTRL-W p"
+|CTRL-W_CTRL-Q| CTRL-W CTRL-Q same as "CTRL-W q"
+|CTRL-W_CTRL-R| CTRL-W CTRL-R same as "CTRL-W r"
+|CTRL-W_CTRL-S| CTRL-W CTRL-S same as "CTRL-W s"
+|CTRL-W_CTRL-T| CTRL-W CTRL-T same as "CTRL-W t"
+|CTRL-W_CTRL-V| CTRL-W CTRL-V same as "CTRL-W v"
+|CTRL-W_CTRL-W| CTRL-W CTRL-W same as "CTRL-W w"
+|CTRL-W_CTRL-X| CTRL-W CTRL-X same as "CTRL-W x"
+|CTRL-W_CTRL-Z| CTRL-W CTRL-Z same as "CTRL-W z"
+|CTRL-W_CTRL-]| CTRL-W CTRL-] same as "CTRL-W ]"
+|CTRL-W_CTRL-^| CTRL-W CTRL-^ same as "CTRL-W ^"
+|CTRL-W_CTRL-_| CTRL-W CTRL-_ same as "CTRL-W _"
+|CTRL-W_+| CTRL-W + increase current window height N lines
+|CTRL-W_-| CTRL-W - decrease current window height N lines
+|CTRL-W_<| CTRL-W < decrease current window width N columns
+|CTRL-W_=| CTRL-W = make all windows the same height
+|CTRL-W_>| CTRL-W > increase current window width N columns
+|CTRL-W_H| CTRL-W H move current window to the far left
+|CTRL-W_J| CTRL-W J move current window to the very bottom
+|CTRL-W_K| CTRL-W K move current window to the very top
+|CTRL-W_L| CTRL-W L move current window to the far right
+|CTRL-W_P| CTRL-W P go to preview window
+|CTRL-W_R| CTRL-W R rotate windows upwards N times
+|CTRL-W_S| CTRL-W S same as "CTRL-W s"
+|CTRL-W_W| CTRL-W W go to N previous window (wrap around)
+|CTRL-W_]| CTRL-W ] split window and jump to tag under cursor
+|CTRL-W_^| CTRL-W ^ split current window and edit alternate
+ file N
+|CTRL-W__| CTRL-W _ set current window height to N (default:
+ very high)
+|CTRL-W_b| CTRL-W b go to bottom window
+|CTRL-W_c| CTRL-W c close current window (like |:close|)
+|CTRL-W_d| CTRL-W d split window and jump to definition under
+ the cursor
+|CTRL-W_f| CTRL-W f split window and edit file name under the
+ cursor
+|CTRL-W_g_CTRL-]| CTRL-W g CTRL-] split window and do |:tjump| to tag under
+ cursor
+|CTRL-W_g]| CTRL-W g ] split window and do |:tselect| for tag
+ under cursor
+|CTRL-W_g}| CTRL-W g } do a |:ptjump| to the tag under the cursor
+|CTRL-W_h| CTRL-W h go to Nth left window (stop at first window)
+|CTRL-W_i| CTRL-W i split window and jump to declaration of
+ identifier under the cursor
+|CTRL-W_j| CTRL-W j go N windows down (stop at last window)
+|CTRL-W_k| CTRL-W k go N windows up (stop at first window)
+|CTRL-W_l| CTRL-W l go to Nth right window (stop at last window)
+|CTRL-W_n| CTRL-W n open new window, N lines high
+|CTRL-W_o| CTRL-W o close all but current window (like |:only|)
+|CTRL-W_p| CTRL-W p go to previous (last accessed) window
+|CTRL-W_q| CTRL-W q quit current window (like |:quit|)
+|CTRL-W_r| CTRL-W r rotate windows downwards N times
+|CTRL-W_s| CTRL-W s split current window in two parts, new
+ window N lines high
+|CTRL-W_t| CTRL-W t go to top window
+|CTRL-W_v| CTRL-W v split current window vertically, new window
+ N lines wide
+|CTRL-W_w| CTRL-W w go to N next window (wrap around)
+|CTRL-W_x| CTRL-W x exchange current window with window N
+ (default: next window)
+|CTRL-W_z| CTRL-W z close preview window
+|CTRL-W_bar| CTRL-W | set window width to N columns
+|CTRL-W_}| CTRL-W } show tag under cursor in preview window
+|CTRL-W_<Down>| CTRL-W <Down> same as "CTRL-W j"
+|CTRL-W_<Up>| CTRL-W <Up> same as "CTRL-W k"
+|CTRL-W_<Left>| CTRL-W <Left> same as "CTRL-W h"
+|CTRL-W_<Right>| CTRL-W <Right> same as "CTRL-W l"
+
+==============================================================================
+2.3 Square bracket commands *[* *]*
+
+tag char note action in Normal mode ~
+------------------------------------------------------------------------------
+|[_CTRL-D| [ CTRL-D jump to first #define found in current and
+ included files matching the word under the
+ cursor, start searching at beginning of
+ current file
+|[_CTRL-I| [ CTRL-I jump to first line in current and included
+ files that contains the word under the
+ cursor, start searching at beginning of
+ current file
+|[#| [# 1 cursor to N previous unmatched #if, #else
+ or #ifdef
+|['| [' 1 cursor to previous lowercase mark, on first
+ non-blank
+|[(| [( 1 cursor N times back to unmatched '('
+|[star| [* 1 same as "[/"
+|[`| [` 1 cursor to previous lowercase mark
+|[/| [/ 1 cursor to N previous start of a C comment
+|[D| [D list all defines found in current and
+ included files matching the word under the
+ cursor, start searching at beginning of
+ current file
+|[I| [I list all lines found in current and
+ included files that contain the word under
+ the cursor, start searching at beginning of
+ current file
+|[P| [P 2 same as "[p"
+|[[| [[ 1 cursor N sections backward
+|[]| [] 1 cursor N SECTIONS backward
+|[c| [c 1 cursor N times backwards to start of change
+|[d| [d show first #define found in current and
+ included files matching the word under the
+ cursor, start searching at beginning of
+ current file
+|[f| [f same as "gf"
+|[i| [i show first line found in current and
+ included files that contains the word under
+ the cursor, start searching at beginning of
+ current file
+|[p| [p 2 like "P", but adjust indent to current line
+|[m| [m 1 cursor N times back to start of member
+ function
+|[z| [z 1 move to start of open fold
+|[{| [{ 1 cursor N times back to unmatched '{'
+|[<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
+ cursor, start searching at cursor position
+|]_CTRL-I| ] CTRL-I jump to first line in current and included
+ files that contains the word under the
+ cursor, start searching at cursor position
+|]#| ]# 1 cursor to N next unmatched #endif or #else
+|]'| ]' 1 cursor to next lowercase mark, on first
+ non-blank
+|])| ]) 1 cursor N times forward to unmatched ')'
+|]star| ]* 1 same as "]/"
+|]`| ]` 1 cursor to next lowercase mark
+|]/| ]/ 1 cursor to N next end of a C comment
+|]D| ]D list all #defines found in current and
+ included files matching the word under the
+ cursor, start searching at cursor position
+|]I| ]I list all lines found in current and
+ included files that contain the word under
+ the cursor, start searching at cursor
+ position
+|]P| ]P 2 same as "[p"
+|][| ][ 1 cursor N SECTIONS forward
+|]]| ]] 1 cursor N sections forward
+|]c| ]c 1 cursor N times forward to start of change
+|]d| ]d show first #define found in current and
+ included files matching the word under the
+ cursor, start searching at cursor position
+|]f| ]f same as "gf"
+|]i| ]i show first line found in current and
+ included files that contains the word under
+ the cursor, start searching at cursor
+ position
+|]p| ]p 2 like "p", but adjust indent to current line
+|]m| ]m 1 cursor N times forward to end of member
+ function
+|]z| ]z 1 move to end of open fold
+|]}| ]} 1 cursor N times forward to unmatched '}'
+|]<MiddleMouse> ]<MiddleMouse> 2 same as "]p"
+
+==============================================================================
+2.4 Commands starting with 'g' *g*
+
+tag char note action in Normal mode ~
+------------------------------------------------------------------------------
+|g_CTRL-A| g CTRL-A only when compiled with MEM_PROFILE
+ defined: dump a memory profile
+|g_CTRL-G| g CTRL-G show information about current cursor
+ position
+|g_CTRL-H| g CTRL-H start Select block mode
+|g_CTRL-]| g CTRL-] |:tjump| to the tag under the cursor
+|g#| g# 1 like "#", but without using "\<" and "\>"
+|g$| g$ 1 when 'wrap' off go to rightmost character of
+ the current line that is on the screen;
+ when 'wrap' on go to the rightmost character
+ of the current screen line
+|g&| g& 2 repeat last ":s" on all lines
+|g'| g'{mark} 1 like |'| but without changing the jumplist
+|g`| g`{mark} 1 like |`| but without changing the jumplist
+|gstar| g* 1 like "*", but without using "\<" and "\>"
+|g0| g0 1 when 'wrap' off go to leftmost character of
+ the current line that is on the screen;
+ when 'wrap' on go to the leftmost character
+ of the current screen line
+|g8| g8 print hex value of bytes used in UTF-8
+ character under the cursor
+|g?| g? 2 Rot13 encoding operator
+|g?g?| g?? 2 Rot13 encode current line
+|g?g?| g?g? 2 Rot13 encode current line
+|gD| gD 1 go to definition of word under the cursor
+ in current file
+|gE| gE 1 go backwards to the end of the previous
+ WORD
+|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
+|gP| ["x]gP 2 put the text [from register x] before the
+ cursor N times, leave the cursor after it
+|gR| gR 2 enter Virtual Replace mode
+|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
+ mode
+|g]| g] :tselect on the tag under the cursor
+|g^| g^ 1 when 'wrap' off go to leftmost non-white
+ character of the current line that is on
+ the screen; when 'wrap' on go to the
+ leftmost non-white character of the current
+ screen line
+|ga| ga print ascii value of character under the
+ cursor
+|gd| gd 1 go to definition of word under the cursor
+ in current function
+|ge| ge 1 go backwards to the end of the previous
+ word
+|gf| gf start editing the file whose name is under
+ the cursor
+|gg| gg 1 cursor to line N, default first line
+|gh| gh start Select mode
+|gi| gi 2 like "i", but first move to the |'^| mark
+|gj| gj 1 like "j", but when 'wrap' on go N screen
+ lines down
+|gk| gk 1 like "k", but when 'wrap' on go N screen
+ lines up
+|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
+ cursor N times, leave the cursor after it
+|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)
+|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
+|g~| g~{motion} 2 swap case for Nmove text
+|g<Down>| g<Down> 1 same as "gj"
+|g<End>| g<End> 1 same as "g$"
+|g<Home>| g<Home> 1 same as "g0"
+|g<LeftMouse>| g<LeftMouse> same as <C-LeftMouse>
+ g<MiddleMouse> same as <C-MiddleMouse>
+|g<RightMouse>| g<RightMouse> same as <C-RightMouse>
+|g<Up>| g<Up> 1 same as "gk"
+
+==============================================================================
+2.5 Commands starting with 'z' *z*
+
+tag char note action in Normal mode ~
+------------------------------------------------------------------------------
+|z<CR>| z<CR> redraw, cursor line to top of window,
+ cursor on first non-blank
+|zN<CR>| z{height}<CR> redraw, make window {height} lines high
+|z+| z+ cursor on line N (default line below
+ window), otherwise like "z<CR>"
+|z-| z- redraw, cursor line at bottom of window,
+ cursor on first non-blank
+|z.| z. redraw, cursor line to center of window,
+ cursor on first non-blank
+|zA| zA open a closed fold or close an open fold
+ recursively
+|zC| zC close folds recursively
+|zD| zD delete folds recursively
+|zE| zE eliminate all folds
+|zF| zF create a fold for N lines
+|zM| zM set 'foldlevel' to zero
+|zN| zN set 'foldenable'
+|zO| zO open folds recursively
+|zR| zR set 'foldlevel' to the deepest fold
+|zX| zX re-apply 'foldlevel'
+|z^| z^ cursor on line N (default line above
+ window), otherwise like "z-"
+|za| za open a closed fold, close an open fold
+|zb| zb redraw, cursor line at bottom of window
+|zc| zc close a fold
+|zd| zd delete a fold
+|ze| ze when 'wrap' off scroll horizontally to
+ position the cursor at the end (right side)
+ of the screen
+|zf| zf{motion} create a fold for Nmove text
+|zh| zh when 'wrap' off scroll screen N characters
+ to the right
+|zi| zi toggle 'foldenable'
+|zj| zj 1 move to the start of the next fold
+|zk| zk 1 move to the end of the previous fold
+|zl| zl when 'wrap' off scroll screen N characters
+ to the left
+|zm| zm subtract one from 'foldlevel'
+|zn| zn reset 'foldenable'
+|zo| zo open fold
+|zr| zr add one to 'foldlevel'
+|zs| zs when 'wrap' off scroll horizontally to
+ position the cursor at the start (left
+ side) of the screen
+|zt| zt redraw, cursor line at top of window
+|zv| zv open enough folds to view the cursor line
+|zx| zx re-apply 'foldlevel' and do "zv"
+|zz| zz redraw, cursor line at center of window
+|z<Left>| z<Left> same as "zh"
+|z<Right>| z<Right> same as "zl"
+
+==============================================================================
+3. Visual mode *visual-index*
+
+Most commands in Visual mode are the same as in Normal mode. The ones listed
+here are those that are different.
+
+tag command note action in Visual mode ~
+------------------------------------------------------------------------------
+|v_CTRL-\_CTRL-N| CTRL-\ CTRL-N stop Visual mode
+|v_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode'
+|v_CTRL-G| CTRL-G toggle between Visual mode and Select mode
+|v_<BS>| <BS> 2 Select mode: delete highlighted area
+|v_CTRL-H| CTRL-H 2 same as <BS>
+|v_CTRL-O| CTRL-O switch from Select to Visual mode for one
+ command
+|v_CTRL-V| CTRL-V make Visual mode blockwise or stop Visual
+ mode
+|v_CTRL-]| CTRL-] jump to highlighted tag
+|v_!| !{filter} 2 filter the highlighted lines through the
+ external command {filter}
+|v_:| : start a command-line with the highlighted
+ lines as a range
+|v_<| < 2 shift the highlighted lines one
+ 'shiftwidth' left
+|v_=| = 2 filter the highlighted lines through the
+ external program given with the 'equalprg'
+ option
+|v_>| > 2 shift the highlighted lines one
+ 'shiftwidth' right
+|v_b_A| A 2 block mode: append same text in all lines,
+ after the highlighted area
+|v_C| C 2 delete the highlighted lines and start
+ insert
+|v_D| D 2 delete the highlighted lines
+|v_b_I| I 2 block mode: insert same text in all lines,
+ before the highlighted area
+|v_J| J 2 join the highlighted lines
+|v_K| K run 'keywordprg' on the highlighted area
+|v_O| O Move horizontally to other corner of area.
+ Q does not start Ex mode
+|v_R| R 2 delete the highlighted lines and start
+ insert
+|v_S| S 2 delete the highlighted lines and start
+ insert
+|v_U| U 2 make highlighted area uppercase
+|v_V| V make Visual mode linewise or stop Visual
+ mode
+|v_X| X 2 delete the highlighted lines
+|v_Y| Y yank the highlighted lines
+|v_a(| a( same as ab
+|v_a)| a) same as ab
+|v_a<| a< extend highlighted area with a <> block
+|v_a>| a> same as a<
+|v_aB| aB extend highlighted area with a {} block
+|v_aW| aW extend highlighted area with "a WORD"
+|v_a[| a[ extend highlighted area with a [] block
+|v_a]| a] same as a[
+|v_ab| ab extend highlighted area with a () block
+|v_ap| ap extend highlighted area with a paragraph
+|v_as| as extend highlighted area with a sentence
+|v_aw| aw extend highlighted area with "a word"
+|v_a{| a{ same as aB
+|v_a}| a} same as aB
+|v_c| c 2 delete highlighted area and start insert
+|v_d| d 2 delete highlighted area
+|v_gJ| gJ 2 join the highlighted lines without
+ inserting spaces
+|v_gq| gq 2 format the highlighted lines
+|v_gv| gv exchange current and previous highlighted
+ area
+|v_i(| i( same as ib
+|v_i)| i) same as ib
+|v_i<| i< extend highlighted area with inner <> block
+|v_i>| i> same as i<
+|v_iB| iB extend highlighted area with inner {} block
+|v_iW| iW extend highlighted area with "inner WORD"
+|v_i[| i[ extend highlighted area with inner [] block
+|v_i]| i] same as i[
+|v_ib| ib extend highlighted area with inner () block
+|v_ip| ip extend highlighted area with inner paragraph
+|v_is| is extend highlighted area with inner sentence
+|v_iw| iw extend highlighted area with "inner word"
+|v_i{| i{ same as iB
+|v_i}| i} same as iB
+|v_o| o move cursor to other corner of area
+|v_r| r 2 delete highlighted area and start insert
+|v_s| s 2 delete highlighted area and start insert
+|v_u| u 2 make highlighted area lowercase
+|v_v| v make Visual mode characterwise or stop
+ Visual mode
+|v_x| x 2 delete the highlighted area
+|v_y| y yank the highlighted area
+|v_~| ~ 2 swap case for the highlighted area
+
+==============================================================================
+4. Command-line editing *ex-edit-index*
+
+Get to the command-line with the ':', '!', '/' or '?' commands.
+Normal characters are inserted at the current cursor position.
+"Completion" below refers to context-sensitive completion. It will complete
+file names, tags, commands etc. as appropriate.
+
+ 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-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
+|'cedit'| CTRL-F default value for 'cedit': opens the
+ command-line window; otherwise not used
+ CTRL-G not used
+|c_<BS>| <BS> delete the character in front of the cursor
+|c_digraph| {char1} <BS> {char2}
+ enter digraph when 'digraph' is on
+|c_CTRL-H| CTRL-H same as <BS>
+|c_<Tab>| <Tab> if 'wildchar' is <Tab>: Do completion on
+ the pattern in front of the cursor
+|c_<S-Tab>| <S-Tab> same as CTRL-P
+|c_wildchar| 'wildchar' Do completion on the pattern in front of the
+ cursor (default: <Tab>)
+|c_CTRL-I| CTRL-I same as <Tab>
+|c_<NL>| <NL> same as <CR>
+|c_CTRL-J| CTRL-J same as <CR>
+|c_CTRL-K| CTRL-K {char1} {char2}
+ enter digraph
+|c_CTRL-L| CTRL-L do completion on the pattern in front of the
+ cursor and insert the longest common part
+|c_<CR>| <CR> execute entered command
+|c_<CR>| CTRL-M same as <CR>
+|c_CTRL-N| CTRL-N after using 'wildchar' with multiple matches:
+ go to next match, otherwise: same as <Down>
+ CTRL-O not used
+|c_CTRL-P| CTRL-P after using 'wildchar' with multiple matches:
+ go to previous match, otherwise: same as <Up>
+|c_CTRL-Q| CTRL-Q same as CTRL-V, unless it's used for terminal
+ control flow
+|c_CTRL-R| CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}
+ insert the contents of a register or object
+ under the cursor as if typed
+|c_CTRL-R_CTRL-R| CTRL-R CTRL-R {0-9a-z"%#*:= CTRL-F CTRL-P CTRL-W CTRL-A}
+ insert the contents of a register or object
+ under the cursor literally
+ CTRL-S (used for terminal control flow)
+ CTRL-T not used
+|c_CTRL-U| CTRL-U remove all characters
+|c_CTRL-V| CTRL-V insert next non-digit literally, insert three
+ digit decimal number as a single byte.
+|c_CTRL-W| CTRL-W delete the word in front of the cursor
+ CTRL-X not used (reserved for completion)
+ CTRL-Y copy (yank) modeless selection
+ 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',
+ abandon command-line
+ CTRL-\ a - d reserved for extensions
+|c_CTRL-\_e| CTRL-\ e {expr} replace the command line with the result of
+ {expr}
+ CTRL-\ f - z reserved for extensions
+ CTRL-\ others not used
+ CTRL-] not used
+|c_CTRL-^| CTRL-^ toggle use of |:lmap| mappings
+|c_CTRL-_| CTRL-_ when 'allowrevins' set: change language
+ (Hebrew, Farsi)
+|c_<Del>| <Del> delete the character under the cursor
+
+|c_<Left>| <Left> cursor left
+|c_<S-Left>| <S-Left> cursor one word left
+|c_<C-Left>| <C-Left> cursor one word left
+|c_<Right>| <Right> cursor right
+|c_<S-Right>| <S-Right> cursor one word right
+|c_<C-Right>| <C-Right> cursor one word right
+|c_<Up>| <Up> recall previous command-line from history that
+ matches pattern in front of the cursor
+|c_<S-Up>| <S-Up> recall previous command-line from history
+|c_<Down>| <Down> recall next command-line from history that
+ matches pattern in front of the cursor
+|c_<S-Down>| <S-Down> recall next command-line from history
+|c_<Home>| <Home> cursor to start of command-line
+|c_<End>| <End> cursor to end of command-line
+|c_<PageDown>| <PageDown> same as <S-Down>
+|c_<PageUp>| <PageUp> same as <S-Up>
+|c_<Insert>| <Insert> toggle insert/overstrike mode
+|c_<LeftMouse>| <LeftMouse> cursor at mouse click
+
+You found it, Arthur! *holy-grail*
+
+==============================================================================
+5. EX commands *ex-cmd-index* *:index*
+
+This is a brief but complete listing of all the ":" commands, without
+mentioning any arguments. The optional part of the command name is inside [].
+The commands are sorted on the non-optional part of their name.
+
+|:!| :! filter lines or execute an external command
+|:!!| :!! repeat last ":!" command
+|:#| :# same as ":number"
+|:&| :& repeat last ":substitute"
+|:star| :* execute contents of a register
+|:<| :< shift lines one 'shiftwidth' left
+|:=| := print the cursor line number
+|:>| :> shift lines one 'shiftwidth' right
+|:@| :@ execute contents of a register
+|:@@| :@@ repeat the previous ":@"
+|:Next| :N[ext] go to previous file in the argument list
+|:Print| :P[rint] print lines
+|:X| :X ask for encryption key
+|:append| :a[ppend] append text
+|:abbreviate| :ab[breviate] enter abbreviation
+|:abclear| :abc[lear] remove all abbreviations
+|:aboveleft| :abo[veleft] make split window appear left or above
+|:all| :al[l] open a window for each file in the argument
+ list
+|:amenu| :am[enu] enter new menu item for all modes
+|:anoremenu| :an[oremenu] enter a new menu for all modes that will not
+ be remapped
+|:args| :ar[gs] print the argument list
+|:argadd| :arga[dd] add items to the argument list
+|:argdelete| :argd[elete] delete items from the argument list
+|:argedit| :arge[dit] add item to the argument list and edit it
+|:argdo| :argdo do a command on all items in the argument list
+|:argglobal| :argg[lobal] define the global argument list
+|:arglocal| :argl[ocal] define a local argument list
+|:argument| :argu[ment] go to specific file in the argument list
+|:ascii| :as[cii] print ascii value of character under the cursor
+|:autocmd| :au[tocmd] enter or show autocommands
+|:augroup| :aug[roup] select the autocommand group to use
+|:aunmenu| :aun[menu] remove menu for all modes
+|:buffer| :b[uffer] go to specific buffer in the buffer list
+|:bNext| :bN[ext] go to previous buffer in the buffer list
+|:ball| :ba[ll] open a window for each buffer in the buffer list
+|:badd| :bad[d] add buffer to the buffer list
+|:bdelete| :bd[elete] remove a buffer from the buffer list
+|:behave| :be[have] set mouse and selection behavior
+|:belowright| :bel[owright] make split window appear right or below
+|:bfirst| :bf[irst] go to first buffer in the buffer list
+|:blast| :bl[ast] go to last buffer in the buffer list
+|:bmodified| :bm[odified] go to next buffer in the buffer list that has
+ been modified
+|:bnext| :bn[ext] go to next buffer in the buffer list
+|:botright| :bo[tright] make split window appear at bottom or far right
+|:bprevious| :bp[revious] go to previous buffer in the buffer list
+|:brewind| :br[ewind] go to first buffer in the buffer list
+|:break| :brea[k] break out of while loop
+|:breakadd| :breaka[dd] add a debugger breakpoint
+|:breakdel| :breakd[el] delete a debugger breakpoint
+|:breaklist| :breakl[ist] list debugger breakpoints
+|:browse| :bro[wse] use file selection dialog
+|:bufdo| :bufdo execute command in each listed buffer
+|:buffers| :buffers list all files in the buffer list
+|:bunload| :bun[load] unload a specific buffer
+|:bwipeout| :bw[ipeout] really delete a buffer
+|:change| :c[hange] replace a line or series of lines
+|:cNext| :cN[ext] go to previous error
+|:cNfile| :cNf[ile] go to last error in previous file
+|:cabbrev| :ca[bbrev] like ":abbreviate" but for Command-line mode
+|:cabclear| :cabc[lear] clear all abbreviations for Command-line mode
+|:call| :cal[l] call a function
+|:catch| :cat[ch] part of a :try command
+|:cc| :cc go to specific error
+|:cclose| :ccl[ose] close quickfix window
+|:cd| :cd change directory
+|:center| :ce[nter] format lines at the center
+|:cfile| :cf[ile] read file with error messages and jump to first
+|:cfirst| :cfir[st] go to the specified error, default first one
+|:cgetfile| :cg[etfile] read file with error messages
+|:changes| :cha[nges] print the change list
+|:chdir| :chd[ir] change directory
+|:checkpath| :che[ckpath] list included files
+|:checktime| :checkt[ime] check timestamp of loaded buffers
+|:clist| :cl[ist] list all errors
+|:clast| :cla[st] go to the specified error, default last one
+|:close| :clo[se] close current window
+|:cmap| :cm[ap] like ":map" but for Command-line mode
+|:cmapclear| :cmapc[lear] clear all mappings for Command-line mode
+|:cmenu| :cme[nu] add menu for Command-line mode
+|:cnext| :cn[ext] go to next error
+|:cnewer| :cnew[er] go to newer error list
+|:cnfile| :cnf[ile] go to first error in next file
+|:cnoremap| :cno[remap] like ":noremap" but for Command-line mode
+|:cnoreabbrev| :cnorea[bbrev] like ":noreabbrev" but for Command-line mode
+|:cnoremenu| :cnoreme[nu] like ":noremenu" but for Command-line mode
+|:copy| :co[py] copy lines
+|:colder| :col[der] go to older error list
+|:colorscheme| :colo[rscheme] load a specific color scheme
+|:command| :com[mand] create user-defined command
+|:comclear| :comc[lear] clear all user-defined commands
+|:compiler| :comp[iler] do settings for a specific compiler
+|:continue| :con[tinue] go back to :while
+|:confirm| :conf[irm] prompt user when confirmation required
+|:copen| :cope[n] open quickfix window
+|:cprevious| :cp[revious] go to previous error
+|:cpfile| :cpf[ile] go to last error in previous file
+|:cquit| :cq[uit] quit Vim with an error code
+|:crewind| :cr[ewind] go to the specified error, default first one
+|:cscope| :cs[cope] execute cscope command
+|:cstag| :cst[ag] use cscope to jump to a tag
+|:cunmap| :cu[nmap] like ":unmap" but for Command-line mode
+|:cunabbrev| :cuna[bbrev] like ":unabbrev" but for Command-line mode
+|:cunmenu| :cunme[nu] remove menu for Command-line mode
+|:cwindow| :cw[indow] open or close quickfix window
+|:delete| :d[elete] delete lines
+|:debug| :deb[ug] run a command in debugging mode
+|:debuggreedy| :debugg[reedy] read debug mode commands from normal input
+|:delcommand| :delc[ommand] delete user-defined command
+|:delfunction| :delf[unction] delete a user function
+|:diffupdate| :dif[fupdate] update 'diff' buffers
+|:diffget| :diffg[et] remove differences in current buffer
+|:diffpatch| :diffp[atch] apply a patch and show differences
+|:diffput| :diffpu[t] remove differences in other buffer
+|:diffsplit| :diffs[plit] show differences with another file
+|:diffthis| :diffthis make current window a diff window
+|:digraphs| :dig[raphs] show or enter digraphs
+|:display| :di[splay] display registers
+|:djump| :dj[ump] jump to #define
+|:dlist| :dl[ist] list #defines
+|:doautocmd| :do[autocmd] apply autocommands to current buffer
+|:doautoall| :doautoa[ll] apply autocommands for all loaded buffers
+|:drop| :dr[op] jump to window editing file or edit file in
+ current window
+|:dsearch| :ds[earch] list one #define
+|:dsplit| :dsp[lit] split window and jump to #define
+|:edit| :e[dit] edit a file
+|:echo| :ec[ho] echoes the result of expressions
+|:echoerr| :echoe[rr] like :echo, show like an error and use history
+|:echohl| :echoh[l] set highlighting for echo commands
+|:echomsg| :echom[sg] same as :echo, put message in history
+|:echon| :echon same as :echo, but without <EOL>
+|:else| :el[se] part of an :if command
+|:elseif| :elsei[f] part of an :if command
+|:emenu| :em[enu] execute a menu by name
+|:endif| :en[dif] end previous :if
+|:endfunction| :endf[unction] end of a user function
+|:endtry| :endt[ry] end previous :try
+|:endwhile| :endw[hile] end previous :while
+|:enew| :ene[w] edit a new, unnamed buffer
+|:ex| :ex same as ":edit"
+|:execute| :exe[cute] execute result of expressions
+|:exit| :exi[t] same as ":xit"
+|:file| :f[ile] show or set the current file name
+|:files| :files list all files in the buffer list
+|:filetype| :filet[ype] switch file type detection on/off
+|:find| :fin[d] find file in 'path' and edit it
+|:finally| :fina[lly] part of a :try command
+|:finish| :fini[sh] quit sourcing a Vim script
+|:first| :fir[st] go to the first file in the argument list
+|:fixdel| :fix[del] set key code of <Del>
+|:fold| :fo[ld] create a fold
+|:foldclose| :foldc[lose] close folds
+|:folddoopen| :foldd[oopen] execute command on lines not in a closed fold
+|:folddoclosed| :folddoc[losed] execute command on lines in a closed fold
+|:foldopen| :foldo[pen] open folds
+|:function| :fu[nction] define a user function
+|:global| :g[lobal] execute commands for matching lines
+|:goto| :go[to] go to byte in the buffer
+|:grep| :gr[ep] run 'grepprg' and jump to first match
+|:grepadd| :grepa[dd] like grep, but append to current list
+|:gui| :gu[i] start the GUI
+|:gvim| :gv[im] start the GUI
+|:hardcopy| :ha[rdcopy] send text to the printer
+|:help| :h[elp] open a help window
+|:helpfind| :helpf[ind] dialog to open a help window
+|:helpgrep| :helpg[rep] like ":grep" but searches help files
+|:helptags| :helpt[ags] generate help tags for a directory
+|:highlight| :hi[ghlight] specify highlighting methods
+|:hide| :hid[e] hide current buffer for a command
+|:history| :his[tory] print a history list
+|:insert| :i[nsert] insert text
+|:iabbrev| :ia[bbrev] like ":abbrev" but for Insert mode
+|:iabclear| :iabc[lear] like ":abclear" but for Insert mode
+|:if| :if execute commands when condition met
+|:ijump| :ij[ump] jump to definition of identifier
+|:ilist| :il[ist] list lines where identifier matches
+|:imap| :im[ap] like ":map" but for Insert mode
+|:imapclear| :imapc[lear] like ":mapclear" but for Insert mode
+|:imenu| :ime[nu] add menu for Insert mode
+|:inoremap| :ino[remap] like ":noremap" but for Insert mode
+|:inoreabbrev| :inorea[bbrev] like ":noreabbrev" but for Insert mode
+|:inoremenu| :inoreme[nu] like ":noremenu" but for Insert mode
+|:intro| :int[ro] print the introductory message
+|:isearch| :is[earch] list one line where identifier matches
+|:isplit| :isp[lit] split window and jump to definition of
+ identifier
+|:iunmap| :iu[nmap] like ":unmap" but for Insert mode
+|:iunabbrev| :iuna[bbrev] like ":unabbrev" but for Insert mode
+|:iunmenu| :iunme[nu] remove menu for Insert mode
+|:join| :j[oin] join lines
+|:jumps| :ju[mps] print the jump list
+|:k| :k set a mark
+|:keepmarks| :kee[pmarks] following command keeps marks where they are
+|:keepjumps| :keepj[jumps] following command keeps jumplist and marks
+|:list| :l[ist] print lines
+|:last| :la[st] go to the last file in the argument list
+|:language| :lan[guage] set the language (locale)
+|:lcd| :lc[d] change directory locally
+|:lchdir| :lch[dir] change directory locally
+|:left| :le[ft] left align lines
+|:leftabove| :lefta[bove] make split window appear left or above
+|:let| :let assign a value to a variable or option
+|:lmap| :lm[ap] like ":map!" but includes Lang-Arg mode
+|:lmapclear| :lmapc[lear] like ":mapclear!" but includes Lang-Arg mode
+|:lnoremap| :ln[oremap] like ":noremap!" but includes Lang-Arg mode
+|:loadkeymap| :loadk[eymap] load the following keymaps until EOF
+|:loadview| :lo[adview] load view for current window from a file
+|:lockmarks| :loc[kmarks] following command keeps marks where they are
+|:ls| :ls list all buffers
+|:lunmap| :lu[nmap] like ":unmap!" but includes Lang-Arg mode
+|:move| :m[ove] move lines
+|:mark| :ma[rk] set a mark
+|:make| :mak[e] execute external command 'makeprg' and parse
+ error messages
+|:map| :map show or enter a mapping
+|:mapclear| :mapc[lear] clear all mappings for Normal and Visual mode
+|:marks| :marks list all marks
+|:match| :mat[ch] define a match to highlight
+|:menu| :me[nu] enter a new menu item
+|:menutranslate| :menut[ranslate] add a menu translation item
+|:messages| :mes[sages] view previously displayed messages
+|:mkexrc| :mk[exrc] write current mappings and settings to a file
+|:mksession| :mks[ession] write session info to a file
+|:mkvimrc| :mkv[imrc] write current mappings and settings to a file
+|:mkview| :mkvie[w] write view of current window to a file
+|:mode| :mod[e] show or change the screen mode
+|:next| :n[ext] go to next file in the argument list
+|:new| :new create a new empty window
+|:nmap| :nm[ap] like ":map" but for Normal mode
+|:nmapclear| :nmapc[lear] clear all mappings for Normal mode
+|:nmenu| :nme[nu] add menu for Normal mode
+|:nnoremap| :nn[oremap] like ":noremap" but for Normal mode
+|:nnoremenu| :nnoreme[nu] like ":noremenu" but for Normal mode
+|:noremap| :no[remap] enter a mapping that will not be remapped
+|:nohlsearch| :noh[lsearch] suspend 'hlsearch' highlighting
+|:noreabbrev| :norea[bbrev] enter an abbreviation that will not be
+ remapped
+|:noremenu| :noreme[nu] enter a menu that will not be remapped
+|:normal| :norm[al] execute Normal mode commands
+|:number| :nu[mber] print lines with line number
+|:nunmap| :nun[map] like ":unmap" but for Normal mode
+|:nunmenu| :nunme[nu] remove menu for Normal mode
+|:open| :o[pen] start open mode (not implemented)
+|:omap| :om[ap] like ":map" but for Operator-pending mode
+|:omapclear| :omapc[lear] remove all mappings for Operator-pending mode
+|:omenu| :ome[nu] add menu for Operator-pending mode
+|:only| :on[ly] close all windows except current one
+|:onoremap| :ono[remap] like ":noremap" but for Operator-pending mode
+|:onoremenu| :onoreme[nu] like ":noremenu" but for Operator-pending mode
+|:options| :opt[ions] open the options-window
+|:ounmap| :ou[nmap] like ":unmap" but for Operator-pending mode
+|:ounmenu| :ounme[nu] remove menu for Operator-pending mode
+|:print| :p[rint] print lines
+|:pclose| :pc[lose] close preview window
+|:pedit| :ped[it] edit file in the preview window
+|:perl| :pe[rl] execute Perl command
+|: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
+|: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
+|:promptfind| :pro[mptfind] Search dialog
+|:promptrepl| :promptr[epl] Search/Replace dialog
+|:psearch| :ps[earch] like ":ijump" but shows match in preview window
+|:ptag| :pt[ag] show tag in preview window
+|:ptNext| :ptN[ext] |:tNext| in preview window
+|:ptfirst| :ptf[irst] |:trewind| in preview window
+|:ptjump| :ptj[ump] |:tjump| and show tag in preview window
+|:ptlast| :ptl[ast] |:tlast| in preview window
+|:ptnext| :ptn[ext] |:tnext| in preview window
+|:ptprevious| :ptp[revious] |:tprevious| in preview window
+|:ptrewind| :ptr[ewind] |:trewind| in preview window
+|:ptselect| :pts[elect] |:tselect| and show tag in preview window
+|:put| :pu[t] insert contents of register in the text
+|:pwd| :pw[d] print current directory
+|:python| :py[thon] execute Python command
+|:pyfile| :pyf[ile] execute Python script file
+|:quit| :q[uit] quit current window (when one window quit Vim)
+|:quitall| :quita[ll] quit Vim
+|:qall| :qa[ll] quit Vim
+|:read| :r[ead] read file into the text
+|:recover| :rec[over] recover a file from a swap file
+|:redo| :red[o] redo one undone change
+|:redir| :redi[r] redirect messages to a file or register
+|:redraw| :redr[aw] force a redraw of the display
+|:redrawstatus| :redraws[tatus] force a redraw of the status line(s)
+|:registers| :reg[isters] display the contents of registers
+|:resize| :res[ize] change current window height
+|:retab| :ret[ab] change tab size
+|:return| :retu[rn] return from a user function
+|:rewind| :rew[ind] go to the first file in the argument list
+|:right| :ri[ght] right align text
+|:rightbelow| :rightb[elow] make split window appear right or below
+|:ruby| :rub[y] execute Ruby command
+|:rubydo| :rubyd[o] execute Ruby command for each line
+|:rubyfile| :rubyf[ile] execute Ruby script file
+|:runtime| :ru[ntime] source vim scripts in 'runtimepath'
+|:rviminfo| :rv[iminfo] read from viminfo file
+|:substitute| :s[ubstitute] find and replace text
+|:sNext| :sN[ext] split window and go to previous file in
+ argument list
+|:sargument| :sa[rgument] split window and go to specific file in
+ argument list
+|:sall| :sal[l] open a window for each file in argument list
+|:saveas| :sav[eas] save file under another name.
+|:sbuffer| :sb[uffer] split window and go to specific file in the
+ buffer list
+|:sbNext| :sbN[ext] split window and go to previous file in the
+ buffer list
+|:sball| :sba[ll] open a window for each file in the buffer list
+|:sbfirst| :sbf[irst] split window and go to first file in the
+ buffer list
+|:sblast| :sbl[ast] split window and go to last file in buffer
+ list
+|:sbmodified| :sbm[odified] split window and go to modified file in the
+ buffer list
+|:sbnext| :sbn[ext] split window and go to next file in the buffer
+ list
+|:sbprevious| :sbp[revious] split window and go to previous file in the
+ buffer list
+|:sbrewind| :sbr[ewind] split window and go to first file in the
+ buffer list
+|:scriptnames| :scrip[tnames] list names of all sourced Vim scripts
+|:scriptencoding| :scripte[ncoding] encoding used in sourced Vim script
+|:scscope| :scs[cope] split window and execute cscope command
+|:set| :se[t] show or set options
+|:setfiletype| :setf[iletype] set 'filetype', unless it was set already
+|:setglobal| :setg[lobal] show global values of options
+|:setlocal| :setl[ocal] show or set options locally
+|:sfind| :sf[ind] split current window and edit file in 'path'
+|:sfirst| :sfir[st] split window and go to first file in the
+ argument list
+|:shell| :sh[ell] escape to a shell
+|:simalt| :sim[alt] Win32 GUI: simulate Windows ALT key
+|:sign| :sig[n] manipulate signs
+|:silent| :sil[ent] Run a command silently
+|:sleep| :sl[eep] do nothing for a few seconds
+|:slast| :sla[st] split window and go to last file in the
+ argument list
+|:smagic| :sm[agic] :substitute with 'magic'
+|:snext| :sn[ext] split window and go to next file in the
+ argument list
+|:sniff| :sni[ff] send request to sniff
+|:snomagic| :sno[magic] :substitute with 'nomagic'
+|:source| :so[urce] read Vim or Ex commands from a file
+|:split| :sp[lit] split current window
+|:sprevious| :spr[evious] split window and go to previous file in the
+ argument list
+|:srewind| :sre[wind] split window and go to first file in the
+ argument list
+|:stop| :st[op] suspend the editor or escape to a shell
+|:stag| :sta[g] split window and jump to a tag
+|:startinsert| :star[tinsert] start Insert mode
+|:stopinsert|| :stopi[nsert] stop Insert mode
+|:stjump| :stj[ump] do ":tjump" and split window
+|:stselect| :sts[elect] do ":tselect" and split window
+|:sunhide| :sun[hide] same as ":unhide"
+|:suspend| :sus[pend] same as ":stop"
+|: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
+|:syncbind| :sync[bind] sync scroll binding
+|:t| :t same as ":copy"
+|:tNext| :tN[ext] jump to previous matching tag
+|:tag| :ta[g] jump to tag
+|:tags| :tags show the contents of the tag stack
+|:tcl| :tc[l] execute Tcl command
+|:tcldo| :tcld[o] execute Tcl command for each line
+|:tclfile| :tclf[ile] execute Tcl script file
+|:tearoff| :te[aroff] tear-off a menu
+|:tfirst| :tf[irst] jump to first matching tag
+|:throw| :th[row] throw an exception
+|:tjump| :tj[ump] like ":tselect", but jump directly when there
+ is only one match
+|:tlast| :tl[ast] jump to last matching tag
+|:tmenu| :tm[enu] define menu tooltip
+|:tnext| :tn[ext] jump to next matching tag
+|:topleft| :to[pleft] make split window appear at top or far left
+|:tprevious| :tp[revious] jump to previous matching tag
+|:trewind| :tr[ewind] jump to first matching tag
+|:try| :try execute commands, abort on error or exception
+|:tselect| :ts[elect] list matching tags and select one
+|:tunmenu| :tu[nmenu] remove menu tooltip
+|:undo| :u[ndo] undo last change(s)
+|:unabbreviate| :una[bbreviate] remove abbreviation
+|:unhide| :unh[ide] open a window for each loaded file in the
+ buffer list
+|:unlet| :unl[et] delete variable
+|:unmap| :unm[ap] remove mapping
+|:unmenu| :unme[nu] remove menu
+|:update| :up[date] write buffer if modified
+|:vglobal| :v[global] execute commands for not matching lines
+|:version| :ve[rsion] print version number and other info
+|:verbose| :verb[ose] execute command with 'verbose' set
+|:vertical| :vert[ical] make following command split vertically
+|:visual| :vi[sual] same as ":edit", but turns off "Ex" mode
+|:view| :vie[w] edit a file read-only
+|:vmap| :vm[ap] like ":map" but for Visual mode
+|:vmapclear| :vmapc[lear] remove all mappings for Visual mode
+|:vmenu| :vme[nu] add menu for Visual mode
+|:vnoremap| :vn[oremap] like ":noremap" but for Visual mode
+|:vnew| :vne[w] create a new empty window, vertically split
+|:vnoremenu| :vnoreme[nu] like ":noremenu" but for Visual mode
+|:vsplit| :vs[plit] split current window vertically
+|:vunmap| :vu[nmap] like ":unmap" but for Visual mode
+|:vunmenu| :vunme[nu] remove menu for Visual mode
+|:windo| :windo execute command in each window
+|:write| :w[rite] write to a file
+|:wNext| :wN[ext] write to a file and go to previous file in
+ argument list
+|:wall| :wa[ll] write all (changed) buffers
+|:while| :wh[ile] execute loop for as long as condition met
+|:winsize| :wi[nsize] get or set window size (obsolete)
+|:wincmd| :winc[md] execute a Window (CTRL-W) command
+|:winpos| :winp[os] get or set window position
+|:wnext| :wn[ext] write to a file and go to next file in
+ argument list
+|:wprevious| :wp[revious] write to a file and go to previous file in
+ argument list
+|:wq| :wq write to a file and quit window or Vim
+|:wqall| :wqa[ll] write all changed buffers and quit Vim
+|:wsverb| :ws[verb] pass the verb to workshop over IPC
+|:wviminfo| :wv[iminfo] write to viminfo file
+|:xit| :x[it] write if buffer changed and quit window or Vim
+|:xall| :xa[ll] same as ":wqall"
+|:yank| :y[ank] yank lines into a register
+|:z| :z print some lines
+|:~| :~ repeat last ":substitute"
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
new file mode 100644
index 000000000..1439dbeaf
--- /dev/null
+++ b/runtime/doc/insert.txt
@@ -0,0 +1,1064 @@
+*insert.txt* For Vim version 7.0aa. Last change: 2004 Apr 09
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *Insert* *Insert-mode*
+Inserting and replacing text *mode-ins-repl*
+
+Most of this file is about Insert and Replace mode. At the end are a few
+commands for inserting text in other ways.
+
+An overview of the most often used commands can be found in chapter 24 of the
+user manual |usr_24.txt|.
+
+1. Special keys |ins-special-keys|
+2. Special special keys |ins-special-special|
+3. 'textwidth' and 'wrapmargin' options |ins-textwidth|
+4. 'expandtab', 'smarttab' and 'softtabstop' options |ins-expandtab|
+5. Replace mode |Replace-mode|
+6. Virtual Replace mode |Virtual-Replace-mode|
+7. Insert mode completion |ins-completion|
+8. Insert mode commands |inserting|
+9. Ex insert commands |inserting-ex|
+10. Inserting a file |inserting-file|
+
+Also see 'virtualedit', for moving the cursor to positions where there is no
+character. Useful for editing a table.
+
+==============================================================================
+1. Special keys *ins-special-keys*
+
+In Insert and Replace mode, the following characters have a special meaning;
+other characters are inserted directly. To insert one of these special
+characters into the buffer, precede it with CTRL-V. To insert a <Nul>
+character use "CTRL-V CTRL-@" or "CTRL-V 000". On some systems, you have to
+use "CTRL-V 003" to insert a CTRL-C. Note: When CTRL-V is mapped you can
+often use CTRL-Q instead |i_CTRL-Q|.
+
+If you are working in a special language mode when inserting text, see the
+'langmap' option, |'langmap'|, on how to avoid switching this mode on and off
+all the time.
+
+If you have 'insertmode' set, <Esc> and a few other keys get another meaning.
+See |'insertmode'|.
+
+char action ~
+-----------------------------------------------------------------------
+ *i_CTRL-[* *i_<Esc>*
+<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
+ abbreviation.
+ Note: If your <Esc> key is hard to hit on your keyboard, train
+ yourself to use CTRL-[.
+ *i_CTRL-C*
+CTRL-C Quit insert mode, go back to Normal mode. Do not check for
+ abbreviations.
+
+ *i_CTRL-@*
+CTRL-@ Insert previously inserted text and stop insert. {Vi: only
+ when typed as first char, only up to 128 chars}
+ *i_CTRL-A*
+CTRL-A Insert previously inserted text. {not in Vi}
+
+ *i_CTRL-H* *i_<BS>* *i_BS*
+<BS> or CTRL-H Delete the character before the cursor (see |i_backspacing|
+ about joining lines).
+ See |:fixdel| if your <BS> key does not do what you want.
+ {Vi: does not delete autoindents}
+ *i_<Del>* *i_DEL*
+<Del> Delete the character under the cursor. If the cursor is at
+ the end of the line, and the 'backspace' option includes
+ "eol", delete the <EOL>; the next line is appended after the
+ current one.
+ See |:fixdel| if your <Del> key does not do what you want.
+ {not in Vi}
+ *i_CTRL-W*
+CTRL-W Delete the word before the cursor (see |i_backspacing| about
+ joining lines). See the section "word motions",
+ |word-motions|, for the definition of a word.
+ *i_CTRL-U*
+CTRL-U Delete all entered characters in the current line (see
+ |i_backspacing| about joining lines).
+
+ *i_CTRL-I* *i_<Tab>* *i_Tab*
+<Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the
+ equivalent number of spaces is inserted (use CTRL-V <Tab> to
+ avoid the expansion; use CTRL-Q <Tab> if CTRL-V is mapped
+ |i_CTRL-Q|). See also the 'smarttab' option and
+ |ins-expandtab|.
+ *i_CTRL-J* *i_<NL>*
+<NL> or CTRL-J Begin new line.
+ *i_CTRL-M* *i_<CR>*
+<CR> or CTRL-M Begin new line.
+ *i_CTRL-K*
+CTRL-K {char1} [char2]
+ Enter digraph (see |digraphs|). When {char1} is a special
+ key, the code for that key is inserted in <> form. For
+ example, the string "<S-Space>" can be entered by typing
+ <C-K><S-Space> (two keys). Neither char is considered for
+ mapping. {not in Vi}
+
+CTRL-N Find next keyword (see |i_CTRL-N|). {not in Vi}
+CTRL-P Find previous keyword (see |i_CTRL-P|). {not in Vi}
+
+CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R*
+ Insert the contents of a register. Between typing CTRL-R and
+ the second character, '"' will be displayed to indicate that
+ you are expected to enter the name of a register.
+ The text is inserted as if you typed it, but mappings and
+ abbreviations are not used. If you have options like
+ 'textwidth', 'formatoptions', or 'autoindent' set, this will
+ influence what will be inserted. This is different from what
+ happens with the "p" command and pasting with the mouse.
+ Special registers:
+ '"' the unnamed register, containing the text of
+ the last delete or yank
+ '%' the current file name
+ '#' the alternate file name
+ '*' the clipboard contents (X11: primary selection)
+ '+' the clipboard contents
+ '/' the last search pattern
+ ':' the last command-line
+ '.' the last inserted text
+ '-' the last small (less than a line) delete
+ '=' the expression register: you are prompted to
+ enter an expression (see |expression|)
+ See |registers| about registers. {not in Vi}
+
+CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R*
+ Insert the contents of a register. Works like using a single
+ CTRL-R, but the text is inserted literally, not as if typed.
+ This differs when the register contains characters like <BS>.
+ Example, where register a contains "ab^Hc": >
+ CTRL-R a results in "ac".
+ CTRL-R CTRL-R a results in "ab^Hc".
+< Options 'textwidth', 'formatoptions', etc. still apply. If
+ you also want to avoid these, use "<C-R><C-O>r", see below.
+ The '.' register (last inserted text) is still inserted as
+ typed. {not in Vi}
+
+CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O*
+ Insert the contents of a register literally and don't
+ auto-indent. Does the same as pasting with the mouse
+ |<MiddleMouse>|.
+ Does not replace characters!
+ The '.' register (last inserted text) is still inserted as
+ typed. {not in Vi}
+
+CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P*
+ Insert the contents of a register literally and fix the
+ indent, like |[<MiddleMouse>|.
+ Does not replace characters!
+ The '.' register (last inserted text) is still inserted as
+ typed. {not in Vi}
+
+ *i_CTRL-T*
+CTRL-T Insert one shiftwidth of indent at the start of the current
+ line. The indent is always rounded to a 'shiftwidth' (this is
+ vi compatible). {Vi: only when in indent}
+ *i_CTRL-D*
+CTRL-D Delete one shiftwidth of indent at the start of the current
+ line. The indent is always rounded to a 'shiftwidth' (this is
+ vi compatible). {Vi: CTRL-D works only when used after
+ autoindent}
+ *i_0_CTRL-D*
+0 CTRL-D Delete all indent in the current line. {Vi: CTRL-D works
+ only when used after autoindent}
+ *i_^_CTRL-D*
+^ CTRL-D Delete all indent in the current line. The indent is
+ restored in the next line. This is useful when inserting a
+ label. {Vi: CTRL-D works only when used after autoindent}
+
+ *i_CTRL-V*
+CTRL-V Insert next non-digit literally. For special keys, the
+ terminal code is inserted. It's also possible to enter the
+ decimal, octal or hexadecimal value of a character
+ |i_CTRL-V_digit|.
+ The characters typed right after CTRL-V are not considered for
+ mapping. {Vi: no decimal byte entry}
+ Note: When CTRL-V is mapped (e.g., to paste text) you can
+ often use CTRL-Q instead |i_CTRL-Q|.
+
+ *i_CTRL-Q*
+CTRL-Q Same as CTRL-V.
+ Note: Some terminal connections may eat CTRL-Q, it doesn't
+ work then. It does work in the GUI.
+
+CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can
+ be given to complete words or scroll the window. See
+ |i_CTRL-X| and |ins-completion|. {not in Vi}
+
+ *i_CTRL-E*
+CTRL-E Insert the character which is below the cursor. {not in Vi}
+ *i_CTRL-Y*
+CTRL-Y Insert the character which is above the cursor. {not in Vi}
+ Note that for CTRL-E and CTRL-Y 'textwidth' is not used, to be
+ able to copy characters from a long line.
+
+ *i_CTRL-_*
+CTRL-_ Switch between languages, as follows:
+ - When in a rightleft window, revins and nohkmap are toggled,
+ since English will likely be inserted in this case.
+ - When in a norightleft window, revins and hkmap are toggled,
+ since Hebrew will likely be inserted in this case.
+
+ CTRL-_ moves the cursor to the end of the typed text.
+
+ This command is only available when the 'allowrevins' option
+ is set.
+ Please refer to |rileft.txt| for more information about
+ right-to-left mode.
+ {not in Vi}
+ Only if compiled with the |+rightleft| feature (which is not
+ the default).
+ *i_CTRL-^*
+CTRL-^ Toggle the use of typing language characters.
+ When language |:lmap| mappings are defined:
+ - If 'iminsert' is 1 (langmap mappings used) it becomes 0 (no
+ langmap mappings used).
+ - If 'iminsert' has another value it becomes 1, thus langmap
+ mappings are enabled.
+ When no language mappings are defined:
+ - If 'iminsert' is 2 (Input Method used) it becomes 0 (no
+ Input Method used).
+ - If 'iminsert' has another value it becomes 2, thus the Input
+ Method is enabled.
+ When set to 1, the value of the "b:keymap_name" variable, the
+ 'keymap' option or "<lang>" appears in the status line.
+ The language mappings are normally used to type characters
+ that are different from what the keyboard produces. The
+ 'keymap' option can be used to install a whole number of them.
+ {not in Vi}
+
+ *i_CTRL-]*
+CTRL-] Trigger abbreviation, without inserting a character. {not in
+ Vi}
+
+ *i_<Insert>*
+<Insert> Toggle between Insert and Replace mode. {not in Vi}
+-----------------------------------------------------------------------
+
+ *i_backspacing*
+The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option
+(unless 'revins' is set). This is a comma separated list of items:
+
+item action ~
+indent allow backspacing over autoindent
+eol allow backspacing over end-of-line (join lines)
+start allow backspacing over the start position of insert; CTRL-W and
+ CTRL-U stop once at the start position
+
+When 'backspace' is empty, Vi compatible backspacing is used. You cannot
+backspace over autoindent, before column 1 or before where insert started.
+
+For backwards compatibility the values "0", "1" and "2" are also allowed, see
+|'backspace'|.
+
+If the 'backspace' option does contain "eol" and the cursor is in column 1
+when one of the three keys is used, the current line is joined with the
+previous line. This effectively deletes the <EOL> in front of the cursor.
+{Vi: does not cross lines, does not delete past start position of insert}
+
+ *i_CTRL-V_digit*
+With CTRL-V the decimal, octal or hexadecimal value of a character can be
+entered directly. This way you can enter any character, except a line break
+(<NL>, value 10). There are five ways to enter the character value:
+
+first char mode max nr of chars max value ~
+(none) decimal 3 255
+o or O octal 3 255
+x or X hexadecimal 2 ff (255)
+u hexadecimal 4 ffff (65535)
+U hexadecimal 8 7fffffff (2147483647)
+
+Normally you would type the maximum number of characters. Thus to enter a
+space (value 32) you would type <C-V>032. You can omit the leading zero, in
+which case the character typed after the number must be a non-digit. This
+happens for the other modes as well: As soon as you type a character that is
+invalid for the mode, the value before it will be used and the "invalid"
+character is dealt with in the normal way.
+
+If you enter a value of 10, it will end up in the file as a 0. The 10 is a
+<NL>, which is used internally to represent the <Nul> character. When writing
+the buffer to a file, the <NL> character is translated into <Nul>. The <NL>
+character is written at the end of each line. Thus if you want to insert a
+<NL> character in a file you will have to make a line break.
+
+ *i_CTRL-X* *insert_expand*
+CTRL-X enters a sub-mode where several commands can be used. Most of these
+commands do keyword completion; see |ins-completion|. These are not available
+when Vim was compiled without the |+insert_expand| feature.
+
+Two commands can be used to scroll the window up or down, without exiting
+insert mode:
+
+ *i_CTRL-X_CTRL-E*
+CTRL-X CTRL-E scroll window one line up.
+
+ *i_CTRL-X_CTRL-Y*
+CTRL-X CTRL-Y scroll window one line down.
+
+After CTRL-X is pressed, each CTRL-E (CTRL-Y) scrolls the window up (down) by
+one line unless that would cause the cursor to move from its current position
+in the file. As soon as another key is pressed, CTRL-X mode is exited and
+that key is interpreted as in Insert mode.
+
+
+==============================================================================
+2. Special special keys *ins-special-special*
+
+The following keys are special. They stop the current insert, do something,
+and then restart insertion. This means you can do something without getting
+out of Insert mode. This is very handy if you prefer to use the Insert mode
+all the time, just like editors that don't have a separate Normal mode. You
+may also want to set the 'backspace' option to "indent,eol,start" and set the
+'insertmode' option. You can use CTRL-O if you want to map a function key to
+a command.
+
+The changes (inserted or deleted characters) before and after these keys can
+be undone separately. Only the last change can be redone and always behaves
+like an "i" command.
+
+char action ~
+-----------------------------------------------------------------------
+<Up> cursor one line up *i_<Up>*
+<Down> cursor one line down *i_<Down>*
+CTRL-G <Up> cursor one line up, insert start column *i_CTRL-G_<Up>*
+CTRL-G k cursor one line up, insert start column *i_CTRL-G_k*
+CTRL-G CTRL-K cursor one line up, insert start column *i_CTRL-G_CTRL-K*
+CTRL-G <Down> cursor one line down, insert start column *i_CTRL-G_<Down>*
+CTRL-G j cursor one line down, insert start column *i_CTRL-G_j*
+CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J*
+<Left> cursor one character left *i_<Left>*
+<Right> cursor one character right *i_<Right>*
+<S-Left> cursor one word back (like "b" command) *i_<S-Left>*
+<C-Left> cursor one word back (like "b" command) *i_<C-Left>*
+<S-Right> cursor one word forward (like "w" command) *i_<S-Right>*
+<C-Right> cursor one word forward (like "w" command) *i_<C-Right>*
+<Home> cursor to first char in the line *i_<Home>*
+<End> cursor to after last char in the line *i_<End>*
+<C-Home> cursor to first char in the file *i_<C-Home>*
+<C-End> cursor to after last char in the file *i_<C-End>*
+<LeftMouse> cursor to position of mouse click *i_<LeftMouse>*
+<S-Up> move window one page up *i_<S-Up>*
+<PageUp> move window one page up *i_<PageUp>*
+<S-Down> move window one page down *i_<S-Down>*
+<PageDown> move window one page down *i_<PageDown>*
+<MouseDown> scroll three lines down *i_<MouseDown>*
+<S-MouseDown> scroll a full page down *i_<S-MouseDown>*
+<MouseUp> scroll three lines up *i_<MouseUp>*
+<S-MouseUp> scroll a full page up *i_<S-MouseUp>*
+CTRL-O execute one command, return to Insert mode *i_CTRL-O*
+CTRL-G u break undo sequence, start new change *i_CTRL-G_u*
+-----------------------------------------------------------------------
+
+Note: If the cursor keys take you out of Insert mode, check the 'noesckeys'
+option.
+
+The CTRL-O command sometimes has a side effect: If the cursor was beyond the
+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).
+
+The shifted cursor keys are not available on all terminals.
+
+Another side effect is that a count specified before the "i" or "a" command is
+ignored. That is because repeating the effect of the command after CTRL-O is
+too complicated.
+
+An example for using CTRL-G u: >
+
+ :inoremap <C-H> <C-G>u<C-H>
+
+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.
+
+When the 'whichwrap' option is set appropriately, the <Left> and <Right>
+keys on the first/last character in the line make the cursor wrap to the
+previous/next line.
+
+The CTRL-G j and CTRL-G k commands can be used to insert text in front of a
+column. Example: >
+ int i;
+ int j;
+Position the cursor on the first "int", type "istatic<C-G>j ". The
+result is: >
+ static int i;
+ int j;
+When inserting the same text in front of the column in every line, use the
+Visual blockwise command "I" |v_b_I|.
+
+==============================================================================
+3. 'textwidth' and 'wrapmargin' options *ins-textwidth*
+
+The 'textwidth' option can be used to automatically break a line before it
+gets too long. Set the 'textwidth' option to the desired maximum line
+length. If you then type more characters (not spaces or tabs), the
+last word will be put on a new line (unless it is the only word on the
+line). If you set 'textwidth' to 0, this feature is disabled.
+
+The 'wrapmargin' option does almost the same. The difference is that
+'textwidth' has a fixed width while 'wrapmargin' depends on the width of the
+screen. When using 'wrapmargin' this is equal to using 'textwidth' with a
+value equal to (columns - 'wrapmargin'), where columns is the width of the
+screen.
+
+When 'textwidth' and 'wrapmargin' are both set, 'textwidth' is used.
+
+If you don't really want to break the line, but view the line wrapped at a
+convenient place, see the 'linebreak' option.
+
+The line is only broken automatically when using insert mode, or when
+appending to a line. When in replace mode and the line length is not
+changed, the line will not be broken.
+
+Long lines are broken if you enter a non-white character after the margin.
+The situations where a line will be broken can be restricted by adding
+characters to the 'formatoptions' option:
+"l" Only break a line if it was not longer than 'textwidth' when the insert
+ started.
+"v" Only break at a white character that has been entered during the
+ current insert command. This is mostly Vi-compatible.
+"lv" Only break if the line was not longer than 'textwidth' when the insert
+ started and only at a white character that has been entered during the
+ current insert command. Only differs from "l" when entering non-white
+ characters while crossing the 'textwidth' boundary.
+
+If you want to format a block of text, you can use the "gq" operator. Type
+"gq" and a movement command to move the cursor to the end of the block. In
+many cases, the command "gq}" will do what you want (format until the end of
+paragraph). Alternatively, you can use "gqap", which will format the whole
+paragraph, no matter where the cursor currently is. Or you can use Visual
+mode: hit "v", move to the end of the block, and type "gq". See also |gq|.
+
+==============================================================================
+4. 'expandtab', 'smarttab' and 'softtabstop' options *ins-expandtab*
+
+If the 'expandtab' option is on, spaces will be used to fill the amount of
+whitespace of the tab. If you want to enter a real <Tab>, type CTRL-V first
+(use CTRL-Q when CTRL-V is mapped |i_CTRL-Q|).
+The 'expandtab' option is off by default. Note that in Replace mode, a single
+character is replaced with several spaces. The result of this is that the
+number of characters in the line increases. Backspacing will delete one
+space at a time. The original character will be put back for only one space
+that you backspace over (the last one). {Vi does not have the 'expandtab'
+option}
+
+ *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
+is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only
+used for ">>" and the like. {not in Vi}
+
+ *ins-softtabstop*
+When the 'softtabstop' option is non-zero, a <Tab> inserts 'softtabstop'
+positions, and a <BS> used to delete white space, will delete 'softtabstop'
+positions. This feels like 'tabstop' was set to 'softtabstop', but a real
+<Tab> character still takes 'tabstop' positions, so your file will still look
+correct when used by other applications.
+
+If 'softtabstop' is non-zero, a <BS> will try to delete as much white space to
+move to the previous 'softtabstop' position, except when the previously
+inserted character is a space, then it will only delete the character before
+the cursor. Otherwise you cannot always delete a single character before the
+cursor. You will have to delete 'softtabstop' characters first, and then type
+extra spaces to get where you want to be.
+
+==============================================================================
+5. Replace mode *Replace* *Replace-mode* *mode-replace*
+
+Enter Replace mode with the "R" command in normal mode.
+
+In Replace mode, one character in the line is deleted for every character you
+type. If there is no character to delete (at the end of the line), the
+typed character is appended (as in Insert mode). Thus the number of
+characters in a line stays the same until you get to the end of the line.
+If a <NL> is typed, a line break is inserted and no character is deleted.
+
+Be careful with <Tab> characters. If you type a normal printing character in
+its place, the number of characters is still the same, but the number of
+columns will become smaller.
+
+If you delete characters in Replace mode (with <BS>, CTRL-W, or CTRL-U), what
+happens is that you delete the changes. The characters that were replaced
+are restored. If you had typed past the existing text, the characters you
+added are deleted. This is effectively a character-at-a-time undo.
+
+If the 'expandtab' option is on, a <Tab> will replace one character with
+several spaces. The result of this is that the number of characters in the
+line increases. Backspacing will delete one space at a time. The original
+character will be put back for only one space that you backspace over (the
+last one). {Vi does not have the 'expandtab' option}
+
+==============================================================================
+6. Virtual Replace mode *vreplace-mode* *Virtual-Replace-mode*
+
+Enter Virtual Replace mode with the "gR" command in normal mode.
+{not available when compiled without the +vreplace feature}
+{Vi does not have Virtual Replace mode}
+
+Virtual Replace mode is similar to Replace mode, but instead of replacing
+actual characters in the file, you are replacing screen real estate, so that
+characters further on in the file never appear to move.
+
+So if you type a <Tab> it may replace several normal characters, and if you
+type a letter on top of a <Tab> it may not replace anything at all, since the
+<Tab> will still line up to the same place as before.
+
+Typing a <NL> still doesn't cause characters later in the file to appear to
+move. The rest of the current line will be replaced by the <NL> (that is,
+they are deleted), and replacing continues on the next line. A new line is
+NOT inserted unless you go past the end of the file.
+
+Interesting effects are seen when using CTRL-T and CTRL-D. The characters
+before the cursor are shifted sideways as normal, but characters later in the
+line still remain still. CTRL-T will hide some of the old line under the
+shifted characters, but CTRL-D will reveal them again.
+
+As with Replace mode, using <BS> etc will bring back the characters that were
+replaced. This still works in conjunction with 'smartindent', CTRL-T and
+CTRL-D, 'expandtab', 'smarttab', 'softtabstop', etc.
+
+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.
+
+This mode is very useful for editing <Tab> separated columns in tables, for
+entering new data while keeping all the columns aligned.
+
+==============================================================================
+7. Insert mode completion *ins-completion*
+
+In Insert and Replace modes, there are several commands to complete part of a
+keyword or line that has been typed. This is useful if you are using
+complicated keywords (e.g., function names with capitals and underscores).
+
+These commands are not available when the |+insert_expand| feature was
+disabled at compile time.
+
+Completion can be done for:
+
+1. Whole lines |i_CTRL-X_CTRL-L|
+2. keywords in the current file |i_CTRL-X_CTRL-N|
+3. keywords in 'dictionary' |i_CTRL-X_CTRL-K|
+4. keywords in 'thesaurus', thesaurus-style |i_CTRL-X_CTRL-T|
+5. keywords in the current and included files |i_CTRL-X_CTRL-I|
+6. tags |i_CTRL-X_CTRL-]|
+7. file names |i_CTRL-X_CTRL-F|
+8. definitions or macros |i_CTRL-X_CTRL-D|
+9. Vim command-line |i_CTRL-X_CTRL-V|
+10. keywords in 'complete' |i_CTRL-N|
+
+All these (except 2) are done in CTRL-X mode. This is a sub-mode of Insert
+and Replace modes. You enter CTRL-X mode by typing CTRL-X and one of the
+CTRL-X commands. You exit CTRL-X mode by typing a key that is not a valid
+CTRL-X mode command. Valid keys are the CTRL-X command itself, CTRL-N (next),
+and CTRL-P (previous).
+
+Also see the 'infercase' option if you want to adjust the case of the match.
+
+Note: The keys that are valid in CTRL-X mode are not mapped. This allows for
+":map ^F ^X^F" to work (where ^F is CTRL-F and ^X is CTRL-X). The key that
+ends CTRL-X mode (any key that is not a valid CTRL-X mode command) is mapped.
+Also, when doing completion with 'complete' mappings apply as usual.
+
+The following mappings are suggested to make typing the completion commands
+a bit easier (although they will hide other commands): >
+ :inoremap ^] ^X^]
+ :inoremap ^F ^X^F
+ :inoremap ^D ^X^D
+ :inoremap ^L ^X^L
+
+As a special case, typing CTRL-R to perform register insertion (see
+|i_CTRL-R|) will not exit CTRL-X mode. This is primarily to allow the use of
+the '=' register to call some function to determine the next operation. If
+the contents of the register (or result of the '=' register evaluation) are
+not valid CTRL-X mode keys, then CTRL-X mode will be exited as if those keys
+had been typed.
+
+For example, the following will map <Tab> to either actually insert a <Tab> if
+the current line is currently only whitespace, or start/continue a CTRL-N
+completion operation: >
+
+ function! CleverTab()
+ if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
+ return "\<Tab>"
+ else
+ return "\<C-N>"
+ endfunction
+ inoremap <Tab> <C-R>=CleverTab()<CR>
+
+
+
+Completing whole lines *compl-whole-line*
+
+ *i_CTRL-X_CTRL-L*
+CTRL-X CTRL-L Search backwards for a line that starts with the
+ same characters as in the current line before the
+ cursor. Indent is ignored. The found line is
+ inserted in front of the cursor.
+ The 'complete' option is used to decide in which
+ buffers a match is searched for. But only loaded
+ buffers are used.
+ CTRL-L or
+ CTRL-P Search backwards for next matching line. This line
+ replaces the previous matching line.
+
+ CTRL-N Search forward for next matching line. This line
+ replaces the previous matching line.
+
+ CTRL-X CTRL-L After expanding a line you can additionally get the
+ line next to it by typing CTRL-X CTRL-L again, unless
+ a double CTRL-X is used.
+
+Completing keywords in current file *compl-current*
+
+ *i_CTRL-X_CTRL-P*
+ *i_CTRL-X_CTRL-N*
+CTRL-X CTRL-N Search forwards for words that start with the keyword
+ in front of the cursor. The found keyword is inserted
+ in front of the cursor.
+
+CTRL-X CTRL-P Search backwards for words that start with the keyword
+ in front of the cursor. The found keyword is inserted
+ in front of the cursor.
+
+ CTRL-N Search forward for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-P Search backwards for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-X CTRL-N or
+ CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will
+ copy the words following the previous expansion in
+ other contexts unless a double CTRL-X is used.
+
+If there is a keyword in front of the cursor (a name made out of alphabetic
+characters and characters in 'iskeyword'), it is used as the search pattern,
+with "\<" prepended (meaning: start of a word). Otherwise "\<\k\k" is used
+as search pattern (start of any keyword of at least two characters).
+
+In Replace mode, the number of characters that are replaced depends on the
+length of the matched string. This works like typing the characters of the
+matched string in Replace mode.
+
+If there is not a valid keyword character before the cursor, any keyword of
+at least two characters is matched.
+ e.g., to get:
+ printf("(%g, %g, %g)", vector[0], vector[1], vector[2]);
+ just type:
+ printf("(%g, %g, %g)", vector[0], ^P[1], ^P[2]);
+
+Multiple repeats of the same completion are skipped; thus a different match
+will be inserted at each CTRL-N and CTRL-P (unless there is only one
+matching keyword).
+
+Single character matches are never included, as they usually just get in
+the way of what you were really after.
+ e.g., to get:
+ printf("name = %s\n", name);
+ just type:
+ printf("name = %s\n", n^P);
+ or even:
+ printf("name = %s\n", ^P);
+The 'n' in '\n' is skipped.
+
+After expanding a word, you can use CTRL-X CTRL-P or CTRL-X CTRL-N to get the
+word following the expansion in other contexts. These sequences search for
+the text just expanded and further expand by getting an extra word. This is
+useful if you need to repeat a sequence of complicated words. Although CTRL-P
+and CTRL-N look just for strings of at least two characters, CTRL-X CTRL-P and
+CTRL-X CTRL-N can be used to expand words of just one character.
+ e.g., to get:
+ M&eacute;xico
+ you can type:
+ M^N^P^X^P^X^P
+CTRL-N starts the expansion and then CTRL-P takes back the single character
+"M", the next two CTRL-X CTRL-P's get the words "&eacute" and ";xico".
+
+If the previous expansion was split, because it got longer than 'textwidth',
+then just the text in the current line will be used.
+
+If the match found is at the end of a line, then the first word in the next
+line will be inserted and the message "word from next line" displayed, if
+this word is accepted the next CTRL-X CTRL-P or CTRL-X CTRL-N will search
+for those lines starting with this word.
+
+
+Completing keywords in 'dictionary' *compl-dictionary*
+
+ *i_CTRL-X_CTRL-K*
+CTRL-X CTRL-K Search the files given with the 'dictionary' option
+ for words that start with the keyword in front of the
+ cursor. This is like CTRL-N, but only the dictionary
+ files are searched, not the current file. The found
+ keyword is inserted in front of the cursor. This
+ could potentially be pretty slow, since all matches
+ are found before the first match is used. By default,
+ the 'dictionary' option is empty.
+ For suggestions where to find a list of words, see the
+ 'dictionary' option.
+
+ CTRL-K or
+ CTRL-N Search forward for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-P Search backwards for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ *i_CTRL-X_CTRL-T*
+CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
+ the 'thesaurus' option instead of 'dictionary'. If a
+ match is found in the thesaurus file, all the
+ remaining words on the same line are included as
+ matches, even though they don't complete the word.
+ Thus a word can be completely replaced.
+
+ For an example, imagine the 'thesaurus' file has a
+ line like this: >
+ angry furious mad enraged
+< Placing the cursor after the letters "ang" and typing
+ CTRL-X CTRL-T would complete the word "angry";
+ subsequent presses would change the word to "furious",
+ "mad" etc.
+ Other uses include translation between two languages,
+ or grouping API functions by keyword.
+
+ CTRL-T or
+ CTRL-N Search forward for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-P Search backwards for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+
+Completing keywords in the current and included files *compl-keyword*
+
+The 'include' option is used to specify a line that contains an include file
+name. The 'path' option is used to search for include files.
+
+ *i_CTRL-X_CTRL-I*
+CTRL-X CTRL-I Search for the first keyword in the current and
+ included files that starts with the same characters
+ as those before the cursor. The matched keyword is
+ inserted in front of the cursor.
+
+ CTRL-N Search forwards for next matching keyword. This
+ keyword replaces the previous matching keyword.
+ Note: CTRL-I is the same as <Tab>, which is likely to
+ be typed after a successful completion, therefore
+ CTRL-I is not used for searching for the next match.
+
+ CTRL-P Search backward for previous matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-X CTRL-I Further use of CTRL-X CTRL-I will copy the words
+ following the previous expansion in other contexts
+ unless a double CTRL-X is used.
+
+Completing tags *compl-tag*
+ *i_CTRL-X_CTRL-]*
+CTRL-X CTRL-] Search for the first tag that starts with the same
+ characters as before the cursor. The matching tag is
+ inserted in front of the cursor. Alphabetic
+ characters and characters in 'iskeyword' are used
+ to decide which characters are included in the tag
+ name (same as for a keyword). See also |CTRL-]|.
+ The 'showfulltag' option can be used to add context
+ from around the tag definition.
+ CTRL-] or
+ CTRL-N Search forwards for next matching tag. This tag
+ replaces the previous matching tag.
+
+ CTRL-P Search backward for previous matching tag. This tag
+ replaces the previous matching tag.
+
+
+Completing file names *compl-filename*
+ *i_CTRL-X_CTRL-F*
+CTRL-X CTRL-F Search for the first file name that starts with the
+ same characters as before the cursor. The matching
+ file name is inserted in front of the cursor.
+ Alphabetic characters and characters in 'isfname'
+ are used to decide which characters are included in
+ the file name. Note: the 'path' option is not used
+ here (yet).
+ CTRL-F or
+ CTRL-N Search forwards for next matching file name. This
+ file name replaces the previous matching file name.
+
+ CTRL-P Search backward for previous matching file name.
+ This file name replaces the previous matching file
+ name.
+
+
+Completing definitions or macros *compl-define*
+
+The 'define' option is used to specify a line that contains a definition.
+The 'include' option is used to specify a line that contains an include file
+name. The 'path' option is used to search for include files.
+
+ *i_CTRL-X_CTRL-D*
+CTRL-X CTRL-D Search in the current and included files for the
+ first definition (or macro) name that starts with
+ the same characters as before the cursor. The found
+ definition name is inserted in front of the cursor.
+ CTRL-D or
+ CTRL-N Search forwards for next matching macro name. This
+ macro name replaces the previous matching macro
+ name.
+
+ CTRL-P Search backward for previous matching macro name.
+ This macro name replaces the previous matching macro
+ name.
+
+ CTRL-X CTRL-D Further use of CTRL-X CTRL-D will copy the words
+ following the previous expansion in other contexts
+ unless a double CTRL-X is used.
+
+
+Completing Vim commands *compl-vim*
+
+Completion is context-sensitive. It works like on the Command-line. It
+completes an Ex command as well as its arguments.
+
+ *i_CTRL-X_CTRL-V*
+CTRL-X CTRL-V Guess what kind of item is in front of the cursor and
+ find the first match for it.
+ Note: When CTRL-V is mapped you can often use CTRL-Q
+ instead |i_CTRL-Q|.
+ CTRL-V or
+ CTRL-N Search forwards for next match. This match replaces
+ the previous one.
+
+ CTRL-P Search backward for previous match. This match
+ replaces the previous one.
+
+ CTRL-X CTRL-V Further use of CTRL-X CTRL-V will do the same as
+ CTRL-V. This allows mapping a key to do Vim command
+ completion, for example: >
+ :imap <Tab> <C-X><C-V>
+
+Completing keywords from different sources *compl-generic*
+
+ *i_CTRL-N*
+CTRL-N Find next match for words that start with the
+ keyword in front of the cursor, looking in places
+ specified with the 'complete' option. The found
+ keyword is inserted in front of the cursor.
+
+ *i_CTRL-P*
+CTRL-P Find previous match for words that start with the
+ keyword in front of the cursor, looking in places
+ specified with the 'complete' option. The found
+ keyword is inserted in front of the cursor.
+
+ CTRL-N Search forward for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-P Search backwards for next matching keyword. This
+ keyword replaces the previous matching keyword.
+
+ CTRL-X CTRL-N or
+ CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will
+ copy the words following the previous expansion in
+ other contexts unless a double CTRL-X is used.
+
+==============================================================================
+8. Insert mode commands *inserting*
+
+The following commands can be used to insert new text into the buffer. They
+can all be undone and repeated with the "." command.
+
+ *a*
+a Append text after the cursor [count] times. If the
+ cursor is in the first column of an empty line Insert
+ starts there. But not when 'virtualedit' is set!
+
+ *A*
+A Append text at the end of the line [count] times.
+
+<insert> or *i* *insert* *<Insert>*
+i Insert text before the cursor [count] times.
+ When using CTRL-O in Insert mode |i_CTRL-O| the count
+ is not supported.
+
+ *I*
+I Insert text before the first non-blank in the line
+ [count] times.
+
+ *gI*
+gI Insert text in column 1 [count] times. {not in Vi}
+
+ *gi*
+gi Insert text in the same position as where Insert mode
+ was stopped last time in the current buffer.
+ This uses the |'^| mark. It's different from "`^i"
+ when the mark is past the end of the line.
+ The position is corrected for inserted/deleted lines,
+ but NOT for inserted/deleted characters.
+ When the |:keepjumps| command modifier is used the |'^|
+ mark wont be changed.
+ {not in Vi}
+
+ *o*
+o Begin a new line below the cursor and insert text,
+ repeat [count] times. {Vi: blank [count] screen
+ lines}
+
+ *O*
+O Begin a new line above the cursor and insert text,
+ repeat [count] times. {Vi: blank [count] screen
+ lines}
+
+These commands are used to start inserting text. You can end insert mode with
+<Esc>. See |mode-ins-repl| for the other special characters in Insert mode.
+The effect of [count] takes place after Insert mode is exited.
+
+When 'autoindent' is on, the indent for a new line is obtained from the
+previous line. When 'smartindent' or 'cindent' is on, the indent for a line
+is automatically adjusted for C programs.
+
+'textwidth' can be set to the maximum width for a line. When a line becomes
+too long when appending characters a line break is automatically inserted.
+
+
+==============================================================================
+9. Ex insert commands *inserting-ex*
+
+ *:a* *:append*
+:{range}a[ppend] Insert several lines of text below the specified
+ line. If the {range} is missing, the text will be
+ inserted after the current line.
+
+ *:i* *:in* *:insert*
+:{range}i[nsert] Insert several lines of text above the specified
+ line. If the {range} is missing, the text will be
+ inserted before the current line.
+
+These two commands will keep on asking for lines, until you type a line
+containing only a ".". Watch out for lines starting with a backslash, see
+|line-continuation|.
+NOTE: ":append" and ":insert" don't work properly in between ":if" and
+":endif".
+
+ *:start* *:startinsert*
+:star[tinsert][!] Start Insert mode just after executing this command.
+ Works like typing "i" in Normal mode. When the ! is
+ included it works like "A", append to the line.
+ Otherwise insertion starts at the cursor position.
+ Note that when using this command in a function or
+ script, the insertion only starts after the function
+ or script is finished.
+ {not in Vi}
+ {not available when compiled without the +ex_extra
+ feature}
+
+ *:stopi* *:stopinsert*
+:stopi[nsert] Stop Insert mode as soon as possible. Works like
+ typing <Esc> in Insert mode.
+ Can be used in an autocommand, example: >
+ :au BufEnter scratch stopinsert
+
+==============================================================================
+10. Inserting a file *inserting-file*
+
+ *:r* *:re* *:read*
+:r[ead] [name] Insert the file [name] (default: current file) below
+ the cursor.
+
+:{range}r[ead] [name] Insert the file [name] (default: current file) below
+ the specified line.
+
+ *:r!* *:read!*
+:r[ead] !{cmd} Execute {cmd} and insert its standard output below
+ the cursor. 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 |:!|.
+
+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 "."
+command. They work on a line basis, insertion starts below the line in which
+the cursor is, or below the specified line. To insert text above the first
+line use the command ":0r {name}".
+
+After the ":read" command, the cursor is left on the first non-blank in the
+first new line. Unless in Ex mode, then the cursor is left on the last new
+line (sorry, this is Vi compatible).
+
+If a file name is given with ":r", it becomes the alternate file. This can be
+used, for example, when you want to edit that file instead: ":e! #". This can
+be switched off by removing the 'a' flag from the 'cpoptions' option.
+
+ *file-read*
+The 'fileformat' option sets the <EOL> style for a file:
+'fileformat' characters name ~
+ "dos" <CR><NL> or <NL> DOS format
+ "unix" <NL> Unix format
+ "mac" <CR> Mac format
+Previously 'textmode' was used. It is obsolete now.
+
+If 'fileformat' is "dos", a <CR> in front of an <NL> is ignored and a CTRL-Z
+at the end of the file is ignored.
+
+If 'fileformat' is "mac", a <NL> in the file is internally represented by a
+<CR>. This is to avoid confusion with a <NL> which is used to represent a
+<NUL>. See |CR-used-for-NL|.
+
+If the 'fileformats' option is not empty Vim tries to recognize the type of
+<EOL> (see |file-formats|). However, the 'fileformat' option will not be
+changed, the detected format is only used while reading the file.
+A similar thing happens with 'fileencodings'.
+
+On non-MS-DOS, Win32, and OS/2 systems the message "[dos format]" is shown if
+a file is read in DOS format, to remind you that something unusual is done.
+On Macintosh, MS-DOS, Win32, and OS/2 the message "[unix format]" is shown if
+a file is read in Unix format.
+On non-Macintosh systems, the message "[Mac format]" is shown if a file is
+read in Mac format.
+
+An example on how to use ":r !": >
+ :r !uuencode binfile binfile
+This command reads "binfile", uuencodes it and reads it into the current
+buffer. Useful when you are editing e-mail and want to include a binary
+file.
+
+ *read-messages*
+When reading a file Vim will display a message with information about the read
+file. In the table is an explanation for some of the items. The others are
+self explanatory. Using the long or the short version depends on the
+'shortmess' option.
+
+ long short meaning ~
+ [readonly] {RO} the file is write protected
+ [fifo/socket] using a stream
+ [fifo] using a fifo stream
+ [socket] using a socket stream
+ [CR missing] reading with "dos" 'fileformat' and a
+ NL without a preceding CR was found.
+ [NL found] reading with "mac" 'fileformat' and a
+ NL was found (could be "unix" format)
+ [long lines split] at least one line was split in two
+ [NOT converted] conversion from 'fileencoding' to
+ 'encoding' was desired but not
+ possible
+ [converted] conversion from 'fileencoding' to
+ 'encoding' done
+ [crypted] file was decrypted
+ [READ ERRORS] not all of the file could be read
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
new file mode 100644
index 000000000..8d3ac6ead
--- /dev/null
+++ b/runtime/doc/intro.txt
@@ -0,0 +1,890 @@
+*intro.txt* For Vim version 7.0aa. Last change: 2004 Jun 12
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Introduction to Vim *ref* *reference*
+
+1. Introduction |intro|
+2. Vim on the internet |internet|
+3. Credits |credits|
+4. Notation |notation|
+5. Modes, introduction |vim-modes-intro|
+6. Switching from mode to mode |mode-switching|
+7. The window contents |window-contents|
+8. Definitions |definitions|
+
+==============================================================================
+1. Introduction *intro*
+
+Vim stands for Vi IMproved. It used to be Vi IMitation, but there are so many
+improvements that a name change was appropriate. Vim is a text editor which
+includes almost all the commands from the Unix program "Vi" and a lot of new
+ones. It is very useful for editing programs and other plain text.
+ All commands are given with the keyboard. This has the advantage that you
+can keep your fingers on the keyboard and your eyes on the screen. For those
+who want it, there is mouse support and a GUI version with scrollbars and
+menus (see |gui.txt|).
+
+An overview of this manual can be found in the file "help.txt", |help.txt|.
+It can be accessed from within Vim with the <Help> or <F1> key and with the
+|:help| command (just type ":help", without the bars or quotes).
+ The 'helpfile' option can be set to the name of the help file, in case it
+is not located in the default place. You can jump to subjects like with tags:
+Use CTRL-] to jump to a subject under the cursor, use CTRL-T to jump back.
+
+Throughout this manual the differences between Vi and Vim are mentioned in
+curly braces, like this: {Vi does not have on-line help}. See |vi_diff.txt|
+for a summary of the differences between Vim and Vi.
+
+This manual refers to Vim on various machines. There may be small differences
+between different computers and terminals. Besides the remarks given in this
+document, there is a separate document for each supported system, see
+|sys-file-list|.
+
+This manual is a reference for all the Vim commands and options. This is not
+an introduction to the use of Vi or Vim, it gets a bit complicated here and
+there. For beginners, there is a hands-on |tutor|. To learn using Vim, read
+the user manual |usr_toc.txt|.
+
+ *book*
+There are many books on Vi that contain a section for beginners. There are
+two books I can recommend:
+
+ "Vim - Vi Improved" by Steve Oualline
+
+This is the very first book completely dedicated to Vim. It is very good for
+beginners. The most often used commands are explained with pictures and
+examples. The less often used commands are also explained, the more advanced
+features are summarized. There is a comprehensive index and a quick
+reference. Parts of this book have been included in the user manual
+|frombook|.
+Published by New Riders Publishing. ISBN: 0735710015
+For more information try one of these:
+ http://iccf-holland.org/click5.html
+ http://www.vim.org/iccf/click5.html
+
+ "Learning the Vi editor" by Linda Lamb and Arnold Robbins
+
+This is a book about Vi that includes a chapter on Vim (in the sixth edition).
+The first steps in Vi are explained very well. The commands that Vim adds are
+only briefly mentioned. There is also a German translation.
+Published by O'Reilly. ISBN: 1-56592-426-6.
+
+==============================================================================
+2. Vim on the internet *internet*
+
+ *www* *faq* *FAQ* *distribution* *download*
+The Vim pages contain the most recent information about Vim. They also
+contain links to the most recent version of Vim. The FAQ is a list of
+Frequently Asked Questions. Read this if you have problems.
+
+ VIM home page: http://www.vim.org/
+ VIM FAQ: http://vimdoc.sf.net/
+ Downloading: ftp://ftp.vim.org/pub/vim/MIRRORS
+
+
+Usenet News group where Vim is discussed: *news* *usenet*
+ comp.editors
+This group is also for other editors. If you write about Vim, don't forget to
+mention that.
+
+ *mail-list* *maillist*
+There are several mailing lists for Vim:
+<vim@vim.org>
+ For discussions about using existing versions of Vim: Useful mappings,
+ questions, answers, where to get a specific version, etc.
+<vim-dev@vim.org> *vim-dev* *vimdev*
+ For discussions about changing Vim: New features, porting, patches,
+ beta-test versions, etc.
+<vim-announce@vim.org> *vim-announce*
+ Announcements about new versions of Vim; also for beta-test versions
+ and ports to different systems.
+<vim-multibyte@vim.org> *vim-multibyte*
+ For discussions about using and improving the multi-byte aspects of
+ Vim.
+<vim-mac@vim.org> *vim-mac*
+ For discussions about using and improving the Macintosh version of
+ Vim.
+
+See http://www.vim.org/maillist.php for the latest information.
+
+NOTE:
+- You can only send messages to these lists if you have subscribed!
+- You need to send the messages from the same location as where you subscribed
+ from (to avoid spam mail).
+- Maximum message size is 40000 characters.
+
+ *subscribe-maillist*
+If you want to join, send a message to
+ <vim-help@vim.org>
+Make sure that your "From:" address is correct. Then the list server will
+give you help on how to subscribe.
+
+You can retrieve old messages from the maillist software, and an index of
+messages. Ask vim-help for instructions.
+
+Archives are kept at: *maillist-archive*
+http://groups.yahoo.com/group/vim
+http://groups.yahoo.com/group/vimdev
+http://groups.yahoo.com/group/vimannounce
+http://groups.yahoo.com/group/vim-multibyte
+http://groups.yahoo.com/group/vim-mac
+
+
+Additional maillists:
+
+<vim-fr@club.voila.fr> *french-maillist*
+ Vim list in the French language. Subscribe by sending a message to
+ <vim-fr-subscribe@club.voila.fr>
+ Or go to http://groups.yahoo.com/group/vim-fr.
+
+
+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.
+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
+appearance of the bug. Try different machines, if possible. Send me patches
+if you can!
+
+In case of doubt, use: >
+ :so $VIMRUNTIME/bugreport.vim
+This will create a file "bugreport.txt" in the current directory, with a lot
+of information of your environment. Before sending this out, check if it
+doesn't contain any confidential information!
+
+ *debug-vim*
+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:
+
+1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
+ which you can uncomment).
+
+2. Execute these commands (replace "11" with the test that fails): >
+ cd testdir
+ gdb ../vim
+ run -u unix.vim -U NONE -s dotest.in test11.in
+
+3. Check where Vim crashes, gdb should give a message for this.
+
+4. Get a stack trace from gdb with this command: >
+ where
+< You can check out different places in the stack trace with: >
+ frame 3
+< Replace "3" with one of the numbers in the stack trace.
+
+ *year-2000* *Y2K*
+Since Vim internally doesn't use dates for editing, there is no year 2000
+problem to worry about. Vim does use the time in the form of seconds since
+January 1st 1970. It is used for a time-stamp check of the edited file and
+the swap file, which is not critical and should only cause warning messages.
+
+There might be a year 2038 problem, when the seconds don't fit in a 32 bit int
+anymore. This depends on the compiler, libraries and operating system.
+Specifically, time_t and the ctime() function are used. And the time_t is
+stored in four bytes in the swap file. But that's only used for printing a
+file date/time for recovery, it will never affect normal editing.
+
+The Vim strftime() function directly uses the strftime() system function.
+localtime() uses the time() system function. getftime() uses the time
+returned by the stat() system function. If your system libraries are year
+2000 compliant, Vim is too.
+
+The user may create scripts for Vim that use external commands. These might
+introduce Y2K problems, but those are not really part of Vim itself.
+
+==============================================================================
+3. Credits *credits* *author*
+
+Most of Vim was written by Bram Moolenaar <Bram@vim.org>.
+
+Parts of the documentation come from several Vi manuals, written by:
+ W.N. Joy
+ Alan P.W. Hewett
+ Mark Horton
+
+The Vim editor is based on Stevie and includes (ideas from) other software,
+worked on by the people mentioned here. Other people helped by sending me
+patches, suggestions and giving feedback about what is good and bad in Vim.
+
+Vim would never have become what it is now, without the help of these people!
+
+ Ron Aaron Win32 GUI changes
+ Zoltan Arpadffy work on VMS port
+ Tony Andrews Stevie
+ Gert van Antwerpen changes for DJGPP on MS-DOS
+ Berkeley DB(3) ideas for swap file implementation
+ Keith Bostic Nvi
+ Walter Briscoe Makefile updates, various patches
+ Ralf Brown SPAWNO library for MS-DOS
+ Robert Colon many useful remarks
+ Marcin Dalecki GTK+ GUI port, toolbar icons, gettext()
+ Kayhan Demirel sent me news in Uganda
+ Chris & John Downey xvi (ideas for multi-windows version)
+ Henk Elbers first VMS port
+ Eric Fischer Mac port, 'cindent', and other improvements
+ Benji Fisher Answering lots of user questions
+ Bill Foster Athena GUI port
+ Loic Grenie xvim (ideas for multi windows version)
+ Sven Guckes Vim promotor and previous WWW page maintainer
+ Darren Hiebert Exuberant ctags
+ Bruce Hunsaker improvements for VMS port
+ Andy Kahn Cscope support, GTK+ GUI port
+ Oezguer Kesim Maintainer of Vim Mailing Lists
+ Axel Kielhorn work on the Macintosh port
+ Steve Kirkendall Elvis
+ Roger Knobbe original port to Windows NT
+ Sergey Laskavy Vim's help from Moscow
+ Felix von Leitner Maintainer of Vim Mailing Lists
+ David Leonard Port of Python extensions to Unix
+ Avner Lottem Edit in right-to-left windows
+ Flemming Madsen X11 client-server, various features and patches
+ MicroSoft Gave me a copy of DevStudio to compile Vim with
+ Paul Moore Python interface extensions, many patches
+ Katsuhito Nagano Work on multi-byte versions
+ Sung-Hyun Nam Work on multi-byte versions
+ Vince Negri Win32 GUI and generic console enhancements
+ Steve Oualline Author of the first Vim book |frombook|
+ George V. Reilly Win32 port, Win32 GUI start-off
+ Stephen Riehm bug collector
+ Stefan Roemer various patches and help to users
+ Ralf Schandl IBM OS/390 port
+ Olaf Seibert DICE and BeBox version, regexp improvements
+ Mortaza Shiran Farsi patches
+ Peter da Silva termlib
+ Paul Slootman OS/2 port
+ Henry Spencer regular expressions
+ Dany St-Amant Macintosh port
+ Tim Thompson Stevie
+ G. R. (Fred) Walter Stevie
+ Sven Verdoolaege Perl interface
+ Robert Webb Command-line completion, GUI versions, and
+ lots of patches
+ Ingo Wilken Tcl interface
+ Mike Williams PostScript printing
+ Juergen Weigert Lattice version, AUX improvements, UNIX and
+ MS-DOS ports, autoconf
+ Stefan 'Sec' Zehl Maintainer of vim.org
+
+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!
+
+
+In this documentation there are several references to other versions of Vi:
+ *Vi*
+Vi "the original". Without further remarks this is the version
+ of Vi that appeared in Sun OS 4.x. ":version" returns
+ "Version 3.7, 6/7/85". Sometimes other versions are referred
+ to. Only runs under Unix. Source code only available with a
+ license. More information on Vi can be found through:
+ http://vi-editor.org [doesn't currently work...]
+ *Posix*
+Posix From the IEEE standard 1003.2, Part 2: Shell and utilities.
+ Generally known as "Posix". This is a textual description of
+ how Vi is supposed to work.
+ The version used is a draft from beginning 1996, so all remarks are
+ "expected to comply to" this. Anything can change though...
+ *Nvi*
+Nvi The "New" Vi. The version of Vi that comes with BSD 4.4 and FreeBSD.
+ Very good compatibility with the original Vi, with a few extensions.
+ The version used is 1.79. ":version" returns "Version 1.79
+ (10/23/96)". There has been no release the last few years, although
+ there is a development version 1.81.
+ Source code is freely available.
+ *Elvis*
+Elvis Another Vi clone, made by Steve Kirkendall. Very compact but isn't
+ as flexible as Vim.
+ The version used is 2.1. It is still being developed. Source code is
+ freely available.
+
+==============================================================================
+4. Notation *notation*
+
+When syntax highlighting is used to read this, text that is not typed
+literally is often highlighted with the Special group. These are items in [],
+{} and <>, and CTRL-X.
+
+Note that Vim uses all possible characters in commands. Sometimes the [], {}
+and <> are part of what you type, the context should make this clear.
+
+
+[] Characters in square brackets are optional.
+
+ *count* *[count]* *E489*
+[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
+ [count] is not mentioned in the description of the command,
+ but only in the explanation. This was done to make the
+ commands easier to look up. If the 'showcmd' option is on,
+ the (partially) entered count is shown at the bottom of the
+ window. You can use <Del> to erase the last digit (|N<Del>|).
+
+ *[quotex]*
+["x] An optional register designation where text can be stored.
+ See |registers|. The x is a single character between 'a' and
+ 'z' or 'A' and 'Z' or '"', and in some cases (with the put
+ command) between '0' and '9', '%', '#', or others. The
+ uppercase and lowercase letter designate the same register,
+ but the lowercase letter is used to overwrite the previous
+ register contents, while the uppercase letter is used to
+ append to the previous register contents. Without the ""x" or
+ with """" the stored text is put into the unnamed register.
+
+ *{}*
+{} Curly braces denote parts of the command which must appear,
+ but which can take a number of different values. The
+ differences between Vim and Vi are also given in curly braces
+ (this will be clear from the context).
+
+ *{char1-char2}*
+{char1-char2} A single character from the range char1 to char2. For
+ example: {a-z} is a lowercase letter. Multiple ranges may be
+ concatenated. For example, {a-zA-Z0-9} is any alphanumeric
+ character.
+
+ *{motion}*
+{motion} A command that moves the cursor. These are explained in
+ |motion.txt|. Examples:
+ w to start of next word
+ b to begin of current word
+ 4j four lines down
+ /The<CR> to next occurrence of "The"
+ This is used after an |operator| command to move over the text
+ that is to be operated upon.
+ - If the motion includes a count and the operator also has a
+ count, the two counts are multiplied. For example: "2d3w"
+ deletes six words.
+ - The motion can be backwards, e.g. "db" to delete to the
+ start of the word.
+ - The motion can also be a mouse click. The mouse is not
+ supported in every terminal though.
+ - The ":omap" command can be used to map characters while an
+ operator is pending.
+ - Ex commands can be used to move the cursor. This can be
+ used to call a function that does some complicated motion.
+ The motion is always characterwise exclusive, no matter
+ what ":" command is used. This means it's impossible to
+ include the last character of a line without the line break
+ (unless 'virtualedit' is set).
+ If the Ex command changes the text before where the operator
+ starts or jumps to another buffer the result is
+ unpredictable. It is possible to change the text further
+ down. Jumping to another buffer is possible if the current
+ buffer is not unloaded.
+
+ *{Visual}*
+{Visual} A selected text area. It is started with the "v", "V", or
+ CTRL-V command, then any cursor movement command can be used
+ to change the end of the selected text.
+ This is used before an |operator| command to highlight the
+ text that is to be operated upon.
+ See |Visual-mode|.
+
+ *<character>*
+<character> A special character from the table below, optionally with
+ modifiers, or a single ASCII character with modifiers.
+
+ *'character'*
+'c' A single ASCII character.
+
+ *CTRL-{char}*
+CTRL-{char} {char} typed as a control character; that is, typing {char}
+ while holding the CTRL key down. The case of {char} does not
+ matter; thus CTRL-A and CTRL-a are equivalent. But on some
+ terminals, using the SHIFT key will produce another code,
+ don't use it then.
+
+ *'option'*
+'option' An option, or parameter, that can be set to a value, is
+ enclosed in single quotes. See |options|.
+
+ *quotecommandquote*
+"command" A reference to a command that you can type is enclosed in
+ double quotes.
+
+ *key-notation* *key-codes* *keycodes*
+These names for keys are used in the documentation. They can also be used
+with the ":map" command (insert the key name by pressing CTRL-K and then the
+key you want the name for).
+
+notation meaning equivalent decimal value(s) ~
+-----------------------------------------------------------------------
+<Nul> zero CTRL-@ 0 (stored as 10) *<Nul>*
+<BS> backspace CTRL-H 8 *backspace*
+<Tab> tab CTRL-I 9 *tab* *Tab*
+ *linefeed*
+<NL> linefeed CTRL-J 10 (used for <Nul>)
+<FF> formfeed CTRL-L 12 *formfeed*
+<CR> carriage return CTRL-M 13 *carriage-return*
+<Return> same as <CR> *<Return>*
+<Enter> same as <CR> *<Enter>*
+<Esc> escape CTRL-[ 27 *escape* *<Esc>*
+<Space> space 32 *space*
+<lt> less-than < 60 *<lt>*
+<Bslash> backslash \ 92 *backslash* *<Bslash>*
+<Bar> vertical bar | 124 *<Bar>*
+<Del> delete 127
+<CSI> command sequence intro ALT-Esc 155 *<CSI>*
+<xCSI> CSI when typed in the GUI *<xCSI>*
+
+<EOL> end-of-line (can be <CR>, <LF> or <CR><LF>,
+ depends on system and 'fileformat') *<EOL>*
+
+<Up> cursor-up *cursor-up* *cursor_up*
+<Down> cursor-down *cursor-down* *cursor_down*
+<Left> cursor-left *cursor-left* *cursor_left*
+<Right> cursor-right *cursor-right* *cursor_right*
+<S-Up> shift-cursor-up
+<S-Down> shift-cursor-down
+<S-Left> shift-cursor-left
+<S-Right> shift-cursor-right
+<C-Left> control-cursor-left
+<C-Right> control-cursor-right
+<F1> - <F12> function keys 1 to 12 *function_key* *function-key*
+<S-F1> - <S-F12> shift-function keys 1 to 12 *<S-F1>*
+<Help> help key
+<Undo> undo key
+<Insert> insert key
+<Home> home *home*
+<End> end *end*
+<PageUp> page-up *page_up* *page-up*
+<PageDown> page-down *page_down* *page-down*
+<kHome> keypad home (upper left) *keypad-home*
+<kEnd> keypad end (lower left) *keypad-end*
+<kPageUp> keypad page-up (upper right) *keypad-page-up*
+<kPageDown> keypad page-down (lower right) *keypad-page-down*
+<kPlus> keypad + *keypad-plus*
+<kMinus> keypad - *keypad-minus*
+<kMultiply> keypad * *keypad-multiply*
+<kDivide> keypad / *keypad-divide*
+<kEnter> keypad Enter *keypad-enter*
+<kPoint> keypad Decimal point *keypad-point*
+<k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9*
+<S-...> shift-key *shift* *<S-*
+<C-...> control-key *control* *ctrl* *<C-*
+<M-...> alt-key or meta-key *meta* *alt* *<M-*
+<A-...> same as <M-...> *<A-*
+<D-...> command-key (Macintosh only) *<D-*
+<t_xx> key with "xx" entry in termcap
+-----------------------------------------------------------------------
+
+Note: The shifted cursor keys, the help key, and the undo key are only
+available on a few terminals. On the Amiga, shifted function key 10 produces
+a code (CSI) that is also used by key sequences. It will be recognized only
+after typing another key.
+
+Note: There are two codes for the delete key. 127 is the decimal ASCII value
+for the delete key, which is always recognized. Some delete keys send another
+value, in which case this value is obtained from the termcap entry "kD". Both
+values have the same effect. Also see |:fixdel|.
+
+Note: The keypad keys are used in the same way as the corresponding "normal"
+keys. For example, <kHome> has the same effect as <Home>. If a keypad key
+sends the same raw key code as its non-keypad equivalent, it will be
+recognized as the non-keypad code. For example, when <kHome> sends the same
+code as <Home>, when pressing <kHome> Vim will think <Home> was pressed.
+Mapping <kHome> will not work then.
+
+ *<>*
+Examples are often given in the <> notation. Sometimes this is just to make
+clear what you need to type, but often it can be typed literally, e.g., with
+the ":map" command. The rules are:
+ 1. Any printable characters are typed directly, except backslash and '<'
+ 2. A backslash is represented with "\\", double backslash, or "<Bslash>".
+ 3. A real '<' is represented with "\<" or "<lt>". When there is no
+ confusion possible, a '<' can be used directly.
+ 4. "<key>" means the special key typed. This is the notation explained in
+ the table above. A few examples:
+ <Esc> Escape key
+ <C-G> CTRL-G
+ <Up> cursor up key
+ <C-LeftMouse> Control- left mouse click
+ <S-F11> Shifted function key 11
+ <M-a> Meta- a ('a' with bit 8 set)
+ <M-A> Meta- A ('A' with bit 8 set)
+ <t_kd> "kd" termcap entry (cursor down key)
+
+If you want to use the full <> notation in Vim, you have to make sure the '<'
+flag is excluded from 'cpoptions' (when 'compatible' is not set, it already is
+by default). >
+ :set cpo-=<
+The <> notation uses <lt> to escape the special meaning of key names. Using a
+backslash also works, but only when 'cpoptions' does not include the 'B' flag.
+
+Examples for mapping CTRL-H to the six characters "<Home>": >
+ :imap <C-H> \<Home>
+ :imap <C-H> <lt>Home>
+The first one only works when the 'B' flag is not in 'cpoptions'. The second
+one always works.
+To get a literal "<lt>" in a mapping: >
+ :map <C-L> <lt>lt>
+
+For mapping, abbreviation and menu commands you can then copy-paste the
+examples and use them directly. Or type them literally, including the '<' and
+'>' characters. This does NOT work for other commands, like ":set" and
+":autocmd"!
+
+==============================================================================
+5. Modes, introduction *vim-modes-intro* *vim-modes*
+
+Vim has six BASIC modes:
+
+ *Normal* *Normal-mode* *command-mode*
+Normal mode In Normal mode you can enter all the normal editor
+ commands. If you start the editor you are in this
+ mode (unless you have set the 'insertmode' option,
+ see below). This is also known as command mode.
+
+Visual mode This is like Normal mode, but the movement commands
+ extend a highlighted area. When a non-movement
+ command is used, it is executed for the highlighted
+ area. See |Visual-mode|.
+ If the 'showmode' option is on "-- VISUAL --" is shown
+ at the bottom of the window.
+
+Select mode This looks most like the MS-Windows selection mode.
+ Typing a printable character deletes the selection
+ and starts Insert mode. See |Select-mode|.
+ If the 'showmode' option is on "-- SELECT --" is shown
+ at the bottom of the window.
+
+Insert mode In Insert mode the text you type is inserted into the
+ buffer. See |Insert-mode|.
+ If the 'showmode' option is on "-- INSERT --" is shown
+ at the bottom of the window.
+
+Command-line mode In Command-line mode (also called Cmdline mode) you
+Cmdline mode can enter one line of text at the bottom of the
+ window. This is for the Ex commands, ":", the pattern
+ search commands, "?" and "/", and the filter command,
+ "!". |Cmdline-mode|
+
+Ex mode Like Command-line mode, but after entering a command
+ you remain in Ex mode. Very limited editing of the
+ command line. |Ex-mode|
+
+There are five ADDITIONAL modes. These are variants of the BASIC modes:
+
+ *Operator-pending* *Operator-pending-mode*
+Operator-pending mode This is like Normal mode, but after an operator
+ command has started, and Vim is waiting for a {motion}
+ to specify the text that the operator will work on.
+
+Replace mode Replace mode is a special case of Insert mode. You
+ can do the same things as in Insert mode, but for
+ each character you enter, one character of the existing
+ text is deleted. See |Replace-mode|.
+ If the 'showmode' option is on "-- REPLACE --" is
+ shown at the bottom of the window.
+
+Insert Normal mode Entered when CTRL-O given in Insert mode. This is
+ like Normal mode, but after executing one command Vim
+ returns to Insert mode.
+ If the 'showmode' option is on "-- (insert) --" is
+ shown at the bottom of the window.
+
+Insert Visual mode Entered when starting a Visual selection from Insert
+ mode, e.g., by using CTRL-O and then "v", "V" or
+ CTRL-V. When the Visual selection ends, Vim returns
+ to Insert mode.
+ If the 'showmode' option is on "-- (insert) VISUAL --"
+ is shown at the bottom of the window.
+
+Insert Select mode Entered when starting Select mode from Insert mode.
+ E.g., by dragging the mouse or <S-Right>.
+ When the Select mode ends, Vim returns to Insert mode.
+ If the 'showmode' option is on "-- (insert) SELECT --"
+ is shown at the bottom of the window.
+
+==============================================================================
+6. Switching from mode to mode *mode-switching*
+
+If for any reason you do not know which mode you are in, you can always get
+back to Normal mode by typing <Esc> twice. This doesn't work for Ex mode
+though, use ":visual".
+You will know you are back in Normal mode when you see the screen flash or
+hear the bell after you type <Esc>. However, when pressing <Esc> after using
+CTRL-O in Insert mode you get a beep but you are still in Insert mode, type
+<Esc> again.
+
+ *i_esc*
+ TO mode ~
+ Normal Visual Select Insert Replace Cmd-line Ex ~
+FROM mode ~
+Normal v V ^V *4 *1 R : / ? ! Q
+Visual *2 ^G c C -- : --
+Select *5 ^O ^G *6 -- -- --
+Insert <Esc> -- -- <Insert> -- --
+Replace <Esc> -- -- <Insert> -- --
+Command-line *3 -- -- :start -- --
+Ex :vi -- -- -- -- --
+
+- NA
+-- not possible
+
+*1 Go from Normal mode to Insert mode by giving the command "i", "I", "a",
+ "A", "o", "O", "c", "C", "s" or S".
+*2 Go from Visual mode to Normal mode by giving a non-movement command, which
+ causes the command to be executed, or by hitting <Esc> "v", "V" or "CTRL-V"
+ (see |v_v|), which just stops Visual mode without side effects.
+*3 Go from Command-line mode to Normal mode by:
+ - Hitting <CR> or <NL>, which causes the entered command to be executed.
+ - Deleting the complete line (e.g., with CTRL-U) and giving a final <BS>.
+ - Hitting CTRL-C or <Esc>, which quits the command-line without executing
+ the command.
+ In the last case <Esc> may be the character defined with the 'wildchar'
+ option, in which case it will start command-line completion. You can
+ ignore that and type <Esc> again. {Vi: when hitting <Esc> the command-line
+ is executed. This is unexpected for most people; therefore it was changed
+ in Vim. But when the <Esc> is part of a mapping, the command-line is
+ executed. If you want the Vi behaviour also when typing <Esc>, use ":cmap
+ ^V<Esc> ^V^M"}
+*4 Go from Normal to Select mode by:
+ - use the mouse to select text while 'selectmode' contains "mouse"
+ - use a non-printable command to move the cursor while keeping the Shift
+ key pressed, and the 'selectmode' option contains "key"
+ - use "v", "V" or "CTRL-V" while 'selectmode' contains "cmd"
+ - use "gh", "gH" or "g CTRL-H" |g_CTRL-H|
+*5 Go from Select mode to Normal mode by using a non-printable command to move
+ the cursor, without keeping the Shift key pressed.
+*6 Go from Select mode to Insert mode by typing a printable character. The
+ selection is deleted and the character is inserted.
+
+If the 'insertmode' option is on, editing a file will start in Insert mode.
+
+ *CTRL-\_CTRL-N* *i_CTRL-\_CTRL-N* *c_CTRL-\_CTRL-N* *v_CTRL-\_CTRL-N*
+Additionally the command CTRL-\ CTRL-N or <C-\><C-N> can be used to go to
+Normal mode from any other mode. This can be used to make sure Vim is in
+Normal mode, without causing a beep like <Esc> would. However, this does not
+work in Ex mode. When used after a command that takes an argument, such as
+|f| or |m|, the timeout set with 'ttimeoutlen' applies.
+
+ *CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
+The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
+'insertmode' is set. Otherwise it goes to Normal mode. This can be used to
+make sure Vim is in the mode indicated by 'insertmode', without knowing in
+what mode Vim currently is.
+
+ *Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
+Q Switch to "Ex" mode. This is a bit like typing ":"
+ commands one after another, except:
+ - You don't have to keep pressing ":".
+ - The screen doesn't get updated after each command.
+ - There is no normal command-line editing.
+ - Mappings and abbreviations are not used.
+ In fact, you are editing the lines with the "standard"
+ line-input editing commands (<Del> or <BS> to erase,
+ CTRL-U to kill the whole line).
+ Vim will enter this mode by default if it's invoked as
+ "ex" on the command-line.
+ Use the ":vi" command |:visual| to exit "Ex" mode.
+ Note: In older versions of Vim "Q" formatted text,
+ that is now done with |gq|. But if you use the
+ |vimrc_example.vim| script "Q" works like "gq".
+
+ *gQ*
+gQ Switch to "Ex" mode, but really behave like typing ":"
+ commands after another. All command line editing,
+ completion etc. is available.
+ Use the ":vi" command |:visual| to exit "Ex" mode.
+ {not in Vi}
+
+==============================================================================
+7. The window contents *window-contents*
+
+In Normal mode and Insert/Replace mode the screen window will show the current
+contents of the buffer: What You See Is What You Get. There are two
+exceptions:
+- When the 'cpoptions' option contains '$', and the change is within one line,
+ the text is not directly deleted, but a '$' is put at the last deleted
+ character.
+- When inserting text in one window, other windows on the same text are not
+ updated until the insert is finished.
+{Vi: The screen is not always updated on slow terminals}
+
+Lines longer than the window width will wrap, unless the 'wrap' option is off
+(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: >
+
+ +-----------------------+
+ |some line |
+ |last line |
+ |~ |
+ |~ |
+ +-----------------------+
+
+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: >
+
+ +-----------------------+
+ |first line |
+ |second line |
+ |@ |
+ |@ |
+ +-----------------------+
+
+Thus the '@' lines indicate that there is a line that doesn't fit in the
+window.
+
+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: >
+
+ +-----------------------+
+ |first line |
+ |second line |
+ |a very long line that d|
+ |oesn't fit in the wi@@@|
+ +-----------------------+
+
+If there is a single line that is too long to fit in the window, this is a
+special situation. Vim will show only part of the line, around where the
+cursor is. There are no special characters shown, so that you can edit all
+parts of this line.
+{Vi: gives an "internal error" on lines that do not fit in the window}
+
+The '@' occasion in the 'highlight' option can be used to set special
+highlighting for the '@' and '~' characters. This makes it possible to
+distinguish them from real characters in the buffer.
+
+The 'showbreak' option contains the string to put in front of wrapped lines.
+
+ *wrap-off*
+If the 'wrap' option is off, long lines will not wrap. Only the part that
+fits on the screen is shown. If the cursor is moved to a part of the line
+that is not shown, the screen is scrolled horizontally. The advantage of
+this method is that columns are shown as they are and lines that cannot fit
+on the screen can be edited. The disadvantage is that you cannot see all the
+characters of a line at once. The 'sidescroll' option can be set to the
+minimal number of columns to scroll. {Vi: has no 'wrap' option}
+
+All normal ASCII characters are displayed directly on the screen. The <Tab>
+is replaced with the number of spaces that it represents. Other non-printing
+characters are replaced with "^{char}", where {char} is the non-printing
+character with 64 added. Thus character 7 (bell) will be shown as "^G".
+Characters between 127 and 160 are replaced with "~{char}", where {char} is
+the character with 64 subtracted. These characters occupy more than one
+position on the screen. The cursor can only be positioned on the first one.
+
+If you set the 'number' option, all lines will be preceded with their
+number. Tip: If you don't like wrapping lines to mix with the line numbers,
+set the 'showbreak' option to eight spaces:
+ ":set showbreak=\ \ \ \ \ \ \ \ "
+
+If you set the 'list' option, <Tab> characters will not be shown as several
+spaces, but as "^I". A '$' will be placed at the end of the line, so you can
+find trailing blanks.
+
+In Command-line mode only the command-line itself is shown correctly. The
+display of the buffer contents is updated as soon as you go back to Command
+mode.
+
+The last line of the window is used for status and other messages. The
+status messages will only be used if an option is on:
+
+status message option default Unix default ~
+current mode 'showmode' on on
+command characters 'showcmd' on off
+cursor position 'ruler' off off
+
+The current mode is "-- INSERT --" or "-- REPLACE --", see |'showmode'|. The
+command characters are those that you typed but were not used yet. {Vi: does
+not show the characters you typed or the cursor position}
+
+If you have a slow terminal you can switch off the status messages to speed
+up editing:
+ :set nosc noru nosm
+
+If there is an error, an error message will be shown for at least one second
+(in reverse video). {Vi: error messages may be overwritten with other
+messages before you have a chance to read them}
+
+Some commands show how many lines were affected. Above which threshold this
+happens can be controlled with the 'report' option (default 2).
+
+On the Amiga Vim will run in a CLI window. The name Vim and the full name of
+the current file name will be shown in the title bar. When the window is
+resized, Vim will automatically redraw the window. You may make the window as
+small as you like, but if it gets too small not a single line will fit in it.
+Make it at least 40 characters wide to be able to read most messages on the
+last line.
+
+On most Unix systems, resizing the window is recognized and handled correctly
+by Vim. {Vi: not ok}
+
+==============================================================================
+8. Definitions *definitions*
+
+ screen The whole area that Vim uses to work in. This can be
+ a terminal emulator window. Also called "the Vim
+ window".
+ window A view on a buffer.
+
+A screen contains one or more windows, separated by status lines and with the
+command line at the bottom.
+
+ +-------------------------------+
+screen | window 1 | window 2 |
+ | | |
+ | | |
+ |= status line =|= status line =|
+ | window 3 |
+ | |
+ | |
+ |==== status line ==============|
+ |command line |
+ +-------------------------------+
+
+The command line is also used for messages. It scrolls up the screen when
+there is not enough room in the command line.
+
+A difference is made between four types of lines:
+
+ buffer lines The lines in the buffer. This is the same as the
+ lines as they are read from/written to a file. They
+ can be thousands of characters long.
+ logical lines The buffer lines with folding applied. Buffer lines
+ in a closed fold are changed to a single logical line:
+ "+-- 99 lines folded". They can be thousands of
+ characters long.
+ window lines The lines displayed in a window: A range of logical
+ lines with wrapping, line breaks, etc. applied. They
+ can only be as long as the width of the window allows,
+ longer lines are wrapped or truncated.
+ screen lines The lines of the screen that Vim uses. Consists of
+ the window lines of all windows, with status lines
+ and the command line added. They can only be as long
+ as the width of the screen allows. When the command
+ line gets longer it wraps and lines are scrolled to
+ make room.
+
+buffer lines logical lines window lines screen lines ~
+
+1. one 1. one 1. +-- folded 1. +-- folded
+2. two 2. +-- folded 2. five 2. five
+3. three 3. five 3. six 3. six
+4. four 4. six 4. seven 4. seven
+5. five 5. seven 5. === status line ===
+6. six 6. aaa
+7. seven 7. bbb
+ 8. ccc ccc c
+1. aaa 1. aaa 1. aaa 9. cc
+2. bbb 2. bbb 2. bbb 10. ddd
+3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~
+4. ddd 4. ddd 4. cc 12. === status line ===
+ 5. ddd 13. (command line)
+ 6. ~
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/makehtml.awk b/runtime/doc/makehtml.awk
new file mode 100644
index 000000000..8ae067e81
--- /dev/null
+++ b/runtime/doc/makehtml.awk
@@ -0,0 +1,780 @@
+BEGIN {
+ # some initialization variables
+ asciiart="no";
+ wasset="no";
+ lineset=0;
+ sample="no";
+ while ( getline ti <"tags.ref" > 0 ) {
+ nf=split(ti,tag," ");
+ tagkey[tag[1]]="yes";tagref[tag[1]]=tag[2];
+ }
+ skip_word["and"]="yes";
+ skip_word["backspace"]="yes";
+ skip_word["beep"]="yes";
+ skip_word["bugs"]="yes";
+ skip_word["da"]="yes";
+ skip_word["end"]="yes";
+ skip_word["ftp"]="yes";
+ skip_word["go"]="yes";
+ skip_word["help"]="yes";
+ skip_word["home"]="yes";
+ skip_word["news"]="yes";
+ skip_word["index"]="yes";
+ skip_word["insert"]="yes";
+ skip_word["into"]="yes";
+ skip_word["put"]="yes";
+ skip_word["reference"]="yes";
+ skip_word["section"]="yes";
+ skip_word["space"]="yes";
+ skip_word["starting"]="yes";
+ skip_word["toggle"]="yes";
+ skip_word["various"]="yes";
+ skip_word["version"]="yes";
+ skip_word["is"]="yes";
+}
+#
+# protect special chars
+#
+/[><&á]/ {gsub(/&/,"\\&amp;");gsub(/>/,"\\&gt;");gsub(/</,"\\&lt;");gsub("á","\\&aacute;");}
+#
+# end of sample lines by non-blank in first column
+#
+sample == "yes" && substr($0,1,4) == "&lt;" { sample = "no"; gsub(/^&lt;/, " "); }
+sample == "yes" && substr($0,1,1) != " " && substr($0,1,1) != " " && length($0) > 0 { sample = "no" }
+#
+# sample lines printed bold unless empty...
+#
+sample == "yes" && $0 =="" { print ""; next; }
+sample == "yes" && $0 !="" { print "<B>" $0 "</B>"; next; }
+#
+# start of sample lines in next line
+#
+$0 == "&gt;" { sample = "yes"; print ""; next; }
+substr($0,length($0)-4,5) == " &gt;" { sample = "yes"; gsub(/ &gt;$/, ""); }
+#
+# header lines printed bold, colored
+#
+substr($0,length($0),1) == "~" { print "<B><FONT COLOR=\"PURPLE\">" substr($0,1,length($0)-1) "</FONT></B>"; next; }
+#
+#ad hoc code
+#
+/^"\|\& / {gsub(/\|/,"\\&#124;"); }
+/ = b / {gsub(/ b /," \\&#98; "); }
+#
+# one letter tag
+#
+/[ ]\*.\*[ ]/ {gsub(/\*/,"ZWWZ"); }
+#
+# isolated "*"
+#
+/[ ]\*[ ]/ {gsub(/ \* /," \\&#42; ");
+ gsub(/ \* /," \\&#42; ");
+ gsub(/ \* /," \\&#42; ");
+ gsub(/ \* /," \\&#42; "); }
+#
+# tag start
+#
+/[ ]\*[^ ]/ {gsub(/ \*/," ZWWZ");gsub(/ \*/," ZWWZ");}
+/^\*[^ ]/ {gsub(/^\*/,"ZWWZ");}
+#
+# tag end
+#
+/[^ ]\*$/ {gsub(/\*$/,"ZWWZ");}
+/[^ \/ ]\*[ ]/ {gsub(/\*/,"ZWWZ");}
+#
+# isolated "|"
+#
+/[ ]\|[ ]/ {gsub(/ \| /," \\&#124; ");
+ gsub(/ \| /," \\&#124; ");
+ gsub(/ \| /," \\&#124; ");
+ gsub(/ \| /," \\&#124; "); }
+/'\|'/ { gsub(/'\|'/,"'\\&#124;'"); }
+/\^V\|/ {gsub(/\^V\|/,"^V\\&#124;");}
+/ \\\| / {gsub(/\|/,"\\&#124;");}
+#
+# one letter pipes and "||" false pipe (digraphs)
+#
+/[ ]\|.\|[ ]/ && asciiart == "no" {gsub(/\|/,"YXXY"); }
+/^\|.\|[ ]/ {gsub(/\|/,"YXXY"); }
+/\|\|/ {gsub(/\|\|/,"\\&#124;\\&#124;"); }
+/^shellpipe/ {gsub(/\|/,"\\&#124;"); }
+#
+# pipe start
+#
+/[ ]\|[^ ]/ && asciiart == "no" {gsub(/ \|/," YXXY");
+ gsub(/ \|/," YXXY");}
+/^\|[^ ]/ {gsub(/^\|/,"YXXY");}
+#
+# pipe end
+#
+/[^ ]\|$/ && asciiart == "no" {gsub(/\|$/,"YXXY");}
+/[^ ]\|[s ,.); ]/ && asciiart == "no" {gsub(/\|/,"YXXY");}
+/[^ ]\|]/ && asciiart == "no" {gsub(/\|/,"YXXY");}
+#
+# various
+#
+/'"/ {gsub(/'"/,"\\&#39;\\&#34;'");}
+/"/ {gsub(/"/,"\\&quot;");}
+/%/ {gsub(/%/,"\\&#37;");}
+
+NR == 1 { nf=split(FILENAME,f,".")
+ print "<HTML>";
+
+ print "<HEAD>"
+ if ( FILENAME == "mbyte.txt" ) {
+ # needs utf-8 as uses many languages
+ print "<META HTTP-EQUIV=\"Content-type\" content=\"text/html; charset=UTF-8\">";
+ } else {
+ # common case - Latin1
+ print "<META HTTP-EQUIV=\"Content-type\" content=\"text/html; charset=ISO-8859-1\">";
+ }
+ print "<TITLE>Vim documentation: " f[1] "</TITLE>";
+ print "</HEAD>";
+
+ print "<BODY BGCOLOR=\"#ffffff\">";
+ print "<H1>Vim documentation: " f[1] "</H1>";
+ print "<A NAME=\"top\"></A>";
+ if ( FILENAME != "help.txt" ) {
+ print "<A HREF=\"help.html\">main help file</A>\n";
+ }
+ print "<HR>";
+ print "<PRE>";
+ filename=f[1]".html";
+}
+
+# set to a low value to test for few lines of text
+# NR == 99999 { exit; }
+
+# ignore underlines and tags
+substr($0,1,5) == " vim:" { next; }
+substr($0,1,4) == "vim:" { next; }
+# keep just whole lines of "-", "="
+substr($0,1,3) == "===" && substr($0,75,1) != "=" { next; }
+substr($0,1,3) == "---" && substr($0,75,1) != "-" { next; }
+
+{
+ nstar = split($0,s,"ZWWZ");
+ for ( i=2 ; i <= nstar ; i=i+2 ) {
+ nbla=split(s[i],blata,"[ ]");
+ if ( nbla > 1 ) {
+ gsub("ZWWZ","*");
+ nstar = split($0,s,"ZWWZ");
+ }
+ }
+ npipe = split($0,p,"YXXY");
+ for ( i=2 ; i <= npipe ; i=i+2 ) {
+ nbla=split(p[i],blata,"[ ]");
+ if ( nbla > 1 ) {
+ gsub("YXXY","|");
+ ntabs = split($0,p,"YXXY");
+ }
+ }
+}
+
+
+FILENAME == "gui.txt" && asciiart == "no" \
+ && $0 ~ /\+----/ && $0 ~ /----\+/ {
+ asciiart= "yes";
+ asciicnt=0;
+ }
+
+FILENAME == "quotes.txt" && asciiart == "no" \
+ && $0 ~ /In summary:/ {
+ asciiart= "yes";
+ asciicnt=0;
+ }
+
+FILENAME == "usr_20.txt" && asciiart == "no" \
+ && $0 ~ /an empty line at the end:/ {
+ asciiart= "yes";
+ asciicnt=0;
+ }
+
+asciiart == "yes" && $0=="" { asciicnt++; }
+
+asciiart == "yes" && asciicnt == 2 { asciiart = "no"; }
+
+asciiart == "yes" { npipe = 1; }
+# { print NR " <=> " asciiart; }
+
+#
+# line contains "*"
+#
+nstar > 2 && npipe < 3 {
+ printf("\n");
+ for ( i=1; i <= nstar ; i=i+2 ) {
+ this=s[i];
+ put_this();
+ ii=i+1;
+ nbla = split(s[ii],blata," ");
+ if ( ii <= nstar ) {
+ if ( nbla == 1 && substr(s[ii],length(s[ii]),1) != " " ) {
+ printf("*<A NAME=\"%s\"></A>",s[ii]);
+ printf("<B>%s</B>*",s[ii]);
+ } else {
+ printf("*%s*",s[ii]);
+ }
+ }
+ }
+ printf("\n");
+ next;
+ }
+#
+# line contains "|"
+#
+npipe > 2 && nstar < 3 {
+ if ( npipe%2 == 0 ) {
+ for ( i=1; i < npipe ; i++ ) {
+ gsub("ZWWZ","*",p[i]);
+ printf("%s|",p[i]);
+ }
+ printf("%s\n",p[npipe]);
+ next;
+ }
+ for ( i=1; i <= npipe ; i++ )
+ {
+ if ( i % 2 == 1 ) {
+ gsub("ZWWZ","*",p[i]);
+ this=p[i];
+ put_this();
+ }
+ else {
+ nfn=split(p[i],f,".");
+ if ( nfn == 1 || f[2] == "" || f[1] == "" || length(f[2]) < 3 ) {
+ find_tag1();
+ }
+ else {
+ printf "|<A HREF=\"" f[1] ".html\">" p[i] "</A>|";
+ }
+ }
+ }
+ printf("\n");
+ next;
+ }
+#
+# line contains both "|" and "*"
+#
+npipe > 2 && nstar > 2 {
+ printf("\n");
+ for ( j=1; j <= nstar ; j=j+2 ) {
+ npipe = split(s[j],p,"YXXY");
+ if ( npipe > 1 ) {
+ for ( np=1; np<=npipe; np=np+2 ) {
+ this=p[np];
+ put_this();
+ i=np+1;find_tag1();
+ }
+ } else {
+ this=s[j];
+ put_this();
+ }
+ jj=j+1;
+ nbla = split(s[jj],blata," ");
+ if ( jj <= nstar && nbla == 1 && s[jj] != "" ) {
+ printf("*<A NAME=\"%s\"></A>",s[jj]);
+ printf("<B>%s</B>*",s[jj]);
+ } else {
+ if ( s[jj] != "" ) {
+ printf("*%s*",s[jj]);
+ }
+ }
+ }
+ printf("\n");
+ next;
+ }
+#
+# line contains e-mail address john.doe@some.place.edu
+#
+$0 ~ /@/ && $0 ~ /[a-zA-Z0-9]@[a-z]/ \
+ {
+ nemail=split($0,em," ");
+ if ( substr($0,1,1) == " " ) { printf(" "); }
+ for ( i=1; i <= nemail; i++ ) {
+ if ( em[i] ~ /@/ ) {
+ if ( substr(em[i],2,3) == "lt;" && substr(em[i],length(em[i])-2,3) == "gt;" ) {
+ mailaddr=substr(em[i],5,length(em[i])-8);
+ printf("<A HREF=\"mailto:%s\">&lt;%s&gt;</A> ",mailaddr,mailaddr);
+ } else {
+ if ( substr(em[i],2,3) == "lt;" && substr(em[i],length(em[i])-3,3) == "gt;" ) {
+ mailaddr=substr(em[i],5,length(em[i])-9);
+ printf("<A HREF=\"mailto:%s\">&lt;%s&gt;</A>%s ",mailaddr,mailaddr,substr(em[i],length(em[i]),1));
+ } else {
+ printf("<A HREF=\"mailto:%s\">%s</A> ",em[i],em[i]);
+ }
+ }
+ } else {
+ printf("%s ",em[i]);
+ }
+ }
+ #print "*** " NR " " FILENAME " - possible mail ref";
+ printf("\n");
+ next;
+ }
+#
+# line contains http / ftp reference
+#
+$0 ~ /http:\/\// || $0 ~ /ftp:\/\// {
+ gsub("URL:","");
+ gsub("&lt;","");
+ gsub("&gt;","");
+ gsub("\\(","");
+ gsub("\\)","");
+ nemail=split($0,em," ");
+ for ( i=1; i <= nemail; i++ ) {
+ if ( substr(em[i],1,5) == "http:" ||
+ substr(em[i],1,4) == "ftp:" ) {
+ if ( substr(em[i],length(em[i]),1) != "." ) {
+ printf(" <A HREF=\"%s\">%s</A>",em[i],em[i]);
+ } else {
+ em[i]=substr(em[i],1,length(em[i])-1);
+ printf(" <A HREF=\"%s\">%s</A>.",em[i],em[i]);
+ }
+ } else {
+ printf(" %s",em[i]);
+ }
+ }
+ #print "*** " NR " " FILENAME " - possible http ref";
+ printf("\n");
+ next;
+ }
+#
+# some lines contains just one "almost regular" "*"...
+#
+nstar == 2 {
+ this=s[1];
+ put_this();
+ printf("*");
+ this=s[2];
+ put_this();
+ printf("\n");
+ next;
+ }
+#
+# regular line
+#
+ { ntabs = split($0,tb," ");
+ for ( i=1; i < ntabs ; i++) {
+ this=tb[i];
+ put_this();
+ printf(" ");
+ }
+ this=tb[ntabs];
+ put_this();
+ printf("\n");
+ }
+
+
+asciiart == "yes" && $0 ~ /\+-\+--/ \
+ && $0 ~ "scrollbar" { asciiart = "no"; }
+
+END {
+ topback();
+ print "</PRE>\n</BODY>\n\n\n</HTML>"; }
+
+#
+# as main we keep index.txt (by default)
+# other candidate, help.txt
+#
+function topback () {
+ if ( FILENAME != "tags" ) {
+ if ( FILENAME != "help.txt" ) {
+ printf("<A HREF=\"#top\">top</A> - ");
+ printf("<A HREF=\"help.html\">main help file</A>\n");
+ } else {
+ printf("<A HREF=\"#top\">top</A>\n");
+ }
+ }
+}
+
+function find_tag1() {
+ if ( p[i] == "" ) { return; }
+ if ( tagkey[p[i]] == "yes" ) {
+ which=tagref[p[i]];
+ put_href();
+ return;
+ }
+ # if not found, then we have a problem
+ print "============================================" >>"errors.log";
+ print FILENAME ", line " NR ", pointer: >>" p[i] "<<" >>"errors.log";
+ print $0 >>"errors.log";
+ which="intro.html";
+ put_href();
+}
+
+function see_tag() {
+# ad-hoc code:
+if ( atag == "\"--" || atag == "--\"" ) { return; }
+if_already();
+if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+allow_one_char="no";
+find_tag2();
+if ( done == "yes" ) { return; }
+rightchar=substr(atag,length(atag),1);
+if ( rightchar == "." \
+ || rightchar == "," \
+ || rightchar == ":" \
+ || rightchar == ";" \
+ || rightchar == "!" \
+ || rightchar == "?" \
+ || rightchar == ")" ) {
+ atag=substr(atag,1,length(atag)-1);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ find_tag2();
+ if ( done == "yes" ) { printf("%s",rightchar);return; }
+ leftchar=substr(atag,1,1);
+ lastbut1=substr(atag,length(atag),1);
+ if ( leftchar == "'" && lastbut1 == "'" ) {
+ allow_one_char="yes";
+ atag=substr(atag,2,length(atag)-2);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",leftchar);
+ aword=substr(atag,1,length(atag))""lastbut1""rightchar;
+ find_tag2();
+ if ( done == "yes" ) { printf("%s%s",lastbut1,rightchar);return; }
+ }
+ }
+atag=aword;
+leftchar=substr(atag,1,1);
+if ( leftchar == "'" && rightchar == "'" ) {
+ allow_one_char="yes";
+ atag=substr(atag,2,length(atag)-2);
+ if ( atag == "<" ) { printf(" |%s|%s| ",atag,p[2]); }
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",leftchar);
+ find_tag2();
+ if ( done == "yes" ) { printf("%s",rightchar);return; }
+ printf("%s%s",atag,rightchar);
+ return;
+ }
+last2=substr(atag,length(atag)-1,2);
+first2=substr(atag,1,2);
+if ( first2 == "('" && last2 == "')" ) {
+ allow_one_char="yes";
+ atag=substr(atag,3,length(atag)-4);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",first2);
+ find_tag2();
+ if ( done == "yes" ) { printf("%s",last2);return; }
+ printf("%s%s",atag,last2);
+ return;
+ }
+if ( last2 == ".)" ) {
+ atag=substr(atag,1,length(atag)-2);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ find_tag2();
+ if ( done == "yes" ) { printf("%s",last2);return; }
+ printf("%s%s",atag,last2);
+ return;
+ }
+if ( last2 == ")." ) {
+ atag=substr(atag,1,length(atag)-2);
+ find_tag2();
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ if ( done == "yes" ) { printf("%s",last2);return; }
+ printf("%s%s",atag,last2);
+ return;
+ }
+first6=substr(atag,1,6);
+last6=substr(atag,length(atag)-5,6);
+if ( last6 == atag ) {
+ printf("%s",aword);
+ return;
+ }
+last6of7=substr(atag,length(atag)-6,6);
+if ( first6 == "&quot;" && last6of7 == "&quot;" && length(atag) > 12 ) {
+ allow_one_char="yes";
+ atag=substr(atag,7,length(atag)-13);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",first6);
+ find_tag2();
+ if ( done == "yes" ) { printf("&quot;%s",rightchar); return; }
+ printf("%s&quot;%s",atag,rightchar);
+ return;
+ }
+if ( first6 == "&quot;" && last6 != "&quot;" ) {
+ allow_one_char="yes";
+ atag=substr(atag,7,length(atag)-6);
+ if ( atag == "[" ) { printf("&quot;%s",atag); return; }
+ if ( atag == "." ) { printf("&quot;%s",atag); return; }
+ if ( atag == ":" ) { printf("&quot;%s",atag); return; }
+ if ( atag == "a" ) { printf("&quot;%s",atag); return; }
+ if ( atag == "A" ) { printf("&quot;%s",atag); return; }
+ if ( atag == "g" ) { printf("&quot;%s",atag); return; }
+ if_already();
+ if ( already == "yes" ) {
+ printf("&quot;%s",atag);
+ return;
+ }
+ printf("%s",first6);
+ find_tag2();
+ if ( done == "yes" ) { return; }
+ printf("%s",atag);
+ return;
+ }
+if ( last6 == "&quot;" && first6 == "&quot;" ) {
+ allow_one_char="yes";
+ atag=substr(atag,7,length(atag)-12);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",first6);
+ find_tag2();
+ if ( done == "yes" ) { printf("%s",last6);return; }
+ printf("%s%s",atag,last6);
+ return;
+ }
+last6of7=substr(atag,length(atag)-6,6);
+if ( last6of7 == "&quot;" && first6 == "&quot;" ) {
+ allow_one_char="yes";
+ atag=substr(atag,7,length(atag)-13);
+ #printf("\natag=%s,aword=%s\n",atag,aword);
+ if_already();
+ if ( already == "yes" ) {
+ printf("%s",aword);
+ return;
+ }
+ printf("%s",first6);
+ find_tag2();
+ if ( done == "yes" ) { printf("%s%s",last6of7,rightchar);return; }
+ printf("%s%s%s",atag,last6of7,rightchar);
+ return;
+ }
+printf("%s",aword);
+}
+
+function find_tag2() {
+ done="no";
+ # no blanks present in a tag...
+ ntags=split(atag,blata,"[ ]");
+ if ( ntags > 1 ) { return; }
+ if ( ( allow_one_char == "no" ) && \
+ ( index("!#$%\&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",atag) !=0 ) ) {
+ return;
+ }
+ if ( skip_word[atag] == "yes" ) { return; }
+ if ( wasset == "yes" && lineset == NR ) {
+ wasset="no";
+ see_opt();
+ if ( done_opt == "yes" ) {return;}
+ }
+ if ( wasset == "yes" && lineset != NR ) {
+ wasset="no";
+ }
+ if ( atag == ":set" ) {
+ wasset="yes";
+ lineset=NR;
+ }
+ if ( tagkey[atag] == "yes" ) {
+ which=tagref[atag];
+ put_href2();
+ done="yes";
+ }
+}
+
+function find_tag3() {
+ done="no";
+ # no blanks present in a tag...
+ ntags=split(btag,blata,"[ ]");
+ if ( ntags > 1 ) { return; }
+ if ( ( allow_one_char == "no" ) && \
+ ( index("!#$%\&'()+,-./0:;=?@ACINX\\[\\]^_`at\\{\\}~",btag) !=0 ) ) {
+ return;
+ }
+ if ( skip_word[btag] == "yes" ) { return; }
+ if ( tagkey[btag] == "yes" ) {
+ which=tagref[btag];
+ put_href3();
+ done="yes";
+ }
+}
+
+function put_href() {
+ if ( p[i] == "" ) { return; }
+ if ( which == FILENAME ) {
+ printf("|<A HREF=\"#%s\">%s</A>|",p[i],p[i]);
+ }
+ else {
+ nz=split(which,zz,".");
+ if ( zz[2] == "txt" || zz[1] == "tags" ) {
+ printf("|<A HREF=\"%s.html#%s\">%s</A>|",zz[1],p[i],p[i]);
+ }
+ else {
+ printf("|<A HREF=\"intro.html#%s\">%s</A>|",p[i],p[i]);
+ }
+ }
+}
+
+function put_href2() {
+ if ( atag == "" ) { return; }
+ if ( which == FILENAME ) {
+ printf("<A HREF=\"#%s\">%s</A>",atag,atag);
+ }
+ else {
+ nz=split(which,zz,".");
+ if ( zz[2] == "txt" || zz[1] == "tags" ) {
+ printf("<A HREF=\"%s.html#%s\">%s</A>",zz[1],atag,atag);
+ }
+ else {
+ printf("<A HREF=\"intro.html#%s\">%s</A>",atag,atag);
+ }
+ }
+}
+
+function put_href3() {
+ if ( btag == "" ) { return; }
+ if ( which == FILENAME ) {
+ printf("<A HREF=\"#%s\">%s</A>",btag,btag2);
+ }
+ else {
+ nz=split(which,zz,".");
+ if ( zz[2] == "txt" || zz[1] == "tags" ) {
+ printf("<A HREF=\"%s.html#%s\">%s</A>",zz[1],btag,btag2);
+ }
+ else {
+ printf("<A HREF=\"intro.html#%s\">%s</A>",btag,btag2);
+ }
+ }
+}
+
+function put_this() {
+ ntab=split(this,ta," ");
+ for ( nta=1 ; nta <= ntab ; nta++ ) {
+ ata=ta[nta];
+ lata=length(ata);
+ aword="";
+ for ( iata=1 ; iata <=lata ; iata++ ) {
+ achar=substr(ata,iata,1);
+ if ( achar != " " ) { aword=aword""achar; }
+ else {
+ if ( aword != "" ) { atag=aword;
+ see_tag();
+ aword="";
+ printf(" "); }
+ else {
+ printf(" ");
+ }
+ }
+ }
+ if ( aword != "" ) { atag=aword;
+ see_tag();
+ }
+ if ( nta != ntab ) { printf(" "); }
+ }
+}
+
+function if_already() {
+ already="no";
+ if ( npipe < 2 ) { return; }
+ if ( atag == ":au" && p[2] == ":autocmd" ) { already="yes";return; }
+ for ( npp=2 ; npp <= npipe ; npp=npp+2 ) {
+ if ( ( (index(p[npp],atag)) != 0 \
+ && length(p[npp]) > length(atag) \
+ && length(atag) >= 1 \
+ ) \
+ || (p[npp] == atag) \
+ ) {
+ # printf("p=|%s|,tag=|%s| ",p[npp],atag);
+ already="yes"; return; }
+ }
+}
+
+function see_opt() {
+ done_opt="no";
+ stag=atag;
+ nfields = split(atag,tae,"=");
+ if ( nfields > 1 ) {
+ btag="'"tae[1]"'";
+ btag2=tae[1];
+ find_tag3();
+ if (done == "yes") {
+ for ( ntae=2 ; ntae <= nfields ; ntae++ ) {
+ printf("=%s",tae[ntae]);
+ }
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ btag=tae[1];
+ btag2=tae[1];
+ find_tag3();
+ if ( done=="yes" ) {
+ for ( ntae=2 ; ntae <= nfields ; ntae++ ) {
+ printf("=%s",tae[ntae]);
+ }
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ }
+ nfields = split(atag,tae,"&quot;");
+ if ( nfields > 1 ) {
+ btag="'"tae[1]"'";
+ btag2=tae[1];
+ find_tag3();
+ if (done == "yes") {
+ printf("&quot;");
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ btag=tae[1];
+ btag2=tae[1];
+ find_tag3();
+ if (done == "yes") {
+ printf("&quot;");
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ }
+ btag="'"tae[1]"'";
+ btag2=tae[1];
+ find_tag3();
+ if (done == "yes") {
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ btag=tae[1];
+ btag2=tae[1];
+ find_tag3();
+ if (done == "yes") {
+ atag=stag;
+ done_opt="yes";
+ return;
+ }
+ atag=stag;
+}
diff --git a/runtime/doc/maketags.awk b/runtime/doc/maketags.awk
new file mode 100644
index 000000000..c6b2cd91f
--- /dev/null
+++ b/runtime/doc/maketags.awk
@@ -0,0 +1,42 @@
+BEGIN { FS=" "; }
+
+NR == 1 { nf=split(FILENAME,f,".")
+ print "<HTML>";
+ print "<HEAD><TITLE>" f[1] "</TITLE></HEAD>";
+ print "<BODY BGCOLOR=\"#ffffff\">";
+ print "<H1>Vim Documentation: " f[1] "</H1>";
+ print "<A NAME=\"top\"></A>";
+ print "<HR>";
+ print "<PRE>";
+}
+
+{
+ #
+ # protect special chars
+ #
+ gsub(/&/,"\\&amp;");
+ gsub(/>/,"\\&gt;");
+ gsub(/</,"\\&lt;");
+ gsub(/"/,"\\&quot;");
+ gsub(/%/,"\\&#37;");
+
+ nf=split($0,tag," ");
+ tagkey[t]=tag[1];tagref[t]=tag[2];tagnum[t]=NR;
+ print $1 " " $2 " line " NR >"tags.ref"
+ n=split($2,w,".");
+ printf ("|<A HREF=\"%s.html#%s\">%s</A>| %s\n",w[1],$1,$1,$2);
+}
+
+END {
+ topback();
+ print "</PRE>\n</BODY>\n\n\n</HTML>";
+ }
+
+#
+# as main we keep index.txt (by default)
+# other candidate, help.txt
+#
+function topback () {
+ printf("<A HREF=\"#top\">top</A> - ");
+ printf("<A HREF=\"help.html\">back to help</A>\n");
+}
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
new file mode 100644
index 000000000..8c05ddc76
--- /dev/null
+++ b/runtime/doc/map.txt
@@ -0,0 +1,1094 @@
+*map.txt* For Vim version 7.0aa. Last change: 2004 May 21
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Key mapping, abbreviations and user-defined commands.
+
+This subject is introduced in sections |05.3|, |24.7| and |40.1| of the user
+manual.
+
+1. Key mapping |key-mapping|
+2. Abbreviations |abbreviations|
+3. Local mappings and functions |script-local|
+4. User-defined commands |user-commands|
+
+==============================================================================
+1. Key mapping *key-mapping* *mapping* *macro*
+
+Key mapping is used to change the meaning of typed keys. The most common use
+is to define a sequence commands for a function key. Example: >
+
+ :map <F2> a<C-R>=strftime("%c")<CR><Esc>
+
+This appends the current date and time after the cursor. (in <> notation |<>|)
+
+There are commands to enter new mappings, remove mappings and list mappings.
+See |map-overview| for the various forms of "map" and their relationships with
+modes.
+
+{lhs} means left-hand-side *{lhs}*
+{rhs} means right-hand-side *{rhs}*
+
+:map {lhs} {rhs} *:map*
+:nm[ap] {lhs} {rhs} *:nm* *:nmap*
+:vm[ap] {lhs} {rhs} *:vm* *:vmap*
+:om[ap] {lhs} {rhs} *:om* *:omap*
+:map! {lhs} {rhs} *:map!*
+:im[ap] {lhs} {rhs} *:im* *:imap*
+:lm[ap] {lhs} {rhs} *:lm* *:lmap*
+:cm[ap] {lhs} {rhs} *:cm* *:cmap*
+ Map the key sequence {lhs} to {rhs} for the modes
+ where the map command applies. The result, including
+ {rhs}, is then further scanned for mappings. This
+ allows for nested and recursive use of mappings.
+
+
+:no[remap] {lhs} {rhs} *:no* *:noremap*
+:nn[oremap] {lhs} {rhs} *:nn* *:nnoremap*
+:vn[oremap] {lhs} {rhs} *:vn* *:vnoremap*
+:ono[remap] {lhs} {rhs} *:ono* *:onoremap*
+:no[remap]! {lhs} {rhs} *:no!* *:noremap!*
+:ino[remap] {lhs} {rhs} *:ino* *:inoremap*
+:ln[oremap] {lhs} {rhs} *:ln* *:lnoremap*
+:cno[remap] {lhs} {rhs} *:cno* *:cnoremap*
+ Map the key sequence {lhs} to {rhs} for the modes
+ where the map command applies. Disallow mapping of
+ {rhs}, to avoid nested and recursive mappings. Often
+ used to redefine a command. {not in Vi}
+
+
+:unm[ap] {lhs} *:unm* *:unmap*
+:nun[map] {lhs} *:nun* *:nunmap*
+:vu[nmap] {lhs} *:vu* *:vunmap*
+:ou[nmap] {lhs} *:ou* *:ounmap*
+:unm[ap]! {lhs} *:unm!* *:unmap!*
+:iu[nmap] {lhs} *:iu* *:iunmap*
+:lu[nmap] {lhs} *:lu* *:lunmap*
+:cu[nmap] {lhs} *:cu* *:cunmap*
+ Remove the mapping of {lhs} for the modes where the
+ map command applies. The mapping may remain defined
+ for other modes where it applies.
+ Note: Trailing spaces are included in the {lhs}. This
+ unmap does NOT work: >
+ :map @@ foo
+ :unmap @@ | print
+
+:mapc[lear] *:mapc* *:mapclear*
+:nmapc[lear] *:nmapc* *:nmapclear*
+:vmapc[lear] *:vmapc* *:vmapclear*
+:omapc[lear] *:omapc* *:omapclear*
+:mapc[lear]! *:mapc!* *:mapclear!*
+:imapc[lear] *:imapc* *:imapclear*
+:lmapc[lear] *:lmapc* *:lmapclear*
+:cmapc[lear] *:cmapc* *:cmapclear*
+ Remove ALL mappings for the modes where the map
+ command applies. {not in Vi}
+ Warning: This also removes the default mappings.
+
+:map
+:nm[ap]
+:vm[ap]
+:om[ap]
+:map!
+:im[ap]
+:lm[ap]
+:cm[ap]
+ List all key mappings for the modes where the map
+ command applies. Note that ":map" and ":map!" are
+ used most often, because they include the other modes.
+
+:map {lhs} *:map_l*
+:nm[ap] {lhs} *:nmap_l*
+:vm[ap] {lhs} *:vmap_l*
+:om[ap] {lhs} *:omap_l*
+:map! {lhs} *:map_l!*
+:im[ap] {lhs} *:imap_l*
+:lm[ap] {lhs} *:lmap_l*
+:cm[ap] {lhs} *:cmap_l*
+ List the key mappings for the key sequences starting
+ with {lhs} in the modes where the map command applies.
+ {not in Vi}
+
+These commands are used to map a key or key sequence to a string of
+characters. You can use this to put command sequences under function keys,
+translate one key into another, etc. See |:mkexrc| for how to save and
+restore the current mappings.
+
+ *:map-local* *:map-<buffer>* *E224* *E225*
+If the first argument to one of these commands is "<buffer>" it will apply to
+mappings locally to the current buffer only. Example: >
+ :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 "<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.
+
+ *:map-<silent>* *:map-silent*
+To define a mapping which will not be echoed on the command line, add
+"<silent>" as the first argument. Example: >
+ :map <silent> ,h /Header<CR>
+The search string will not be echoed when using this mapping. Messages from
+the executed command are still given though. To shut them up too, add a
+":silent" in the executed command: >
+ :map <silent> ,h :exe ":silent normal /Header\r"<CR>
+Prompts will still be given, e.g., for inputdialog().
+Using "<silent>" for an abbreviation is possible, but will cause redrawing of
+the command line to fail.
+
+ *:map-<script>* *:map-script*
+If the first argument to one of these commands is "<script>" and it is used to
+define a new mapping or abbreviation, the mapping will only remap characters
+in the {rhs} using mappings that were defined local to a script, starting with
+"<SID>". This can be used to avoid that mappings from outside a script
+interfere (e.g., when CTRL-V is remapped in mswin.vim), but do use other
+mappings defined in the script.
+Note: ":map <script>" and ":noremap <script>" do the same thing. The
+"<script>" overrules the command name. Using ":noremap <script>" is
+preferred, because it's clearer that remapping is (mostly) disabled.
+
+ *:map-<unique>* *E226* *E227*
+If the first argument to one of these commands is "<unique>" and it is used to
+define a new mapping or abbreviation, the command will fail if the mapping or
+abbreviation already exists. Example: >
+ :map <unique> ,w /[#&!]<CR>
+When defining a local mapping, there will also be a check if a global map
+already exists which is equal.
+Example of what will fail: >
+ :map ,w /[#&!]<CR>
+ :map <buffer> <unique> ,w /[.,;]<CR>
+
+"<buffer>", "<silent>", "<script>" and "<unique>" can be used in any order.
+They must appear right after the command, before any other arguments.
+
+
+MAPPING AND MODES
+
+There are five sets of mappings
+- For Normal mode: When typing commands.
+- For Visual mode: When typing commands while the Visual area is highlighted.
+- For Operator-pending mode: When an operator is pending (after "d", "y", "c",
+ etc.). Example: ":omap { w" makes "y{" work like "yw" and "d{" like "dw".
+- For Insert mode. These are also used in Replace mode.
+- For Command-line mode: When entering a ":" or "/" command.
+
+There are no separate mappings for Select mode. The same as for Visual mode
+are used |Select-mode-mapping|.
+
+Special case: While typing a count for a command in Normal mode, mapping zero
+is disabled. This makes it possible to map zero without making it impossible
+to type a count with a zero.
+
+ *map-overview* *map-modes*
+Overview of which map command works in which mode:
+
+ commands: modes: ~
+ Normal Visual Operator-pending ~
+:map :noremap :unmap :mapclear yes yes yes
+:nmap :nnoremap :nunmap :nmapclear yes - -
+:vmap :vnoremap :vunmap :vmapclear - yes -
+:omap :onoremap :ounmap :omapclear - - yes
+
+ Insert Command-line Lang-Arg ~
+:map! :noremap! :unmap! :mapclear! yes yes -
+:imap :inoremap :iunmap :imapclear yes - -
+:cmap :cnoremap :cunmap :cmapclear - yes -
+:lmap :lnoremap :lunmap :lmapclear yes* yes* yes*
+
+The original Vi did not have separate mappings for
+Normal/Visual/Operator-pending mode and for Insert/Command-line mode.
+Therefore the ":map" and ":map!" commands enter and display mappings for
+several modes. In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
+":imap" commands to enter mappings for each mode separately.
+
+To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
+first define it for all three modes, then unmap it for Operator-pending mode:
+ :map xx something-difficult
+ :ounmap xx
+Likewise for a mapping for Visual and Operator-pending mode or Normal and
+Operator-pending mode.
+
+ *language-mapping*
+":lmap" defines a mapping that applies to:
+- Insert mode
+- Command-line mode
+- when entering a search pattern
+- the argument of the commands that accept a text character, such as "r" and
+ "f"
+- for the input() line
+Generally: Whenever a character is to be typed that is part of the text in the
+buffer, not a Vim command character. "Lang-Arg" isn't really another mode,
+it's just used here for this situation.
+ The simplest way to load a set of related language mappings is by using the
+'keymap' option. See |45.5|.
+ In Insert mode and in Command-line mode the mappings can be disabled with
+the CTRL-^ command |i_CTRL-^| |c_CTRL-^|. When starting to enter a normal
+command line (not a search pattern) the mappings are disabled until a CTRL-^
+is typed. The state last used is remembered for Insert mode and Search
+patterns separately. The state for Insert mode is also used when typing a
+character as an argument to command like "f" or "t".
+ When adding a ":lmap" mapping the use of these mappings in Insert mode and
+for Search patterns will be switched on.
+ Language mappings will never be applied to already mapped characters. They
+are only used for typed characters. This assumes that the language mapping
+was already done when typing the mapping.
+
+ *map-multibyte*
+It is possible to map multibyte characters, but only the whole character. You
+cannot map the first byte only. This was done to prevent problems in this
+scenario: >
+ :set encoding=latin1
+ :imap <M-C> foo
+ :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 á (0xea <M-a>) in UTF-8 encoding this is the
+two bytes 0xc3 0xa1. You don't want the 0xc3 byte to be mapped then,
+otherwise it would be impossible to type the á character.
+
+ *map-listing*
+When listing mappings the characters in the first two columns are:
+
+ CHAR MODE ~
+ <Space> Normal, Visual and Operator-pending
+ n Normal
+ v Visual
+ o Operator-pending
+ ! Insert and Command-line
+ i Insert
+ l ":lmap" mappings for Insert, Command-line and Lang-Arg
+ c Command-line
+
+Just before the {rhs} a special character can appear:
+ * indicates that it is not remappable
+ & indicates that only script-local mappings are remappable
+ @ indicates a buffer-local mapping
+
+Everything from the first non-blank after {lhs} up to the end of the line
+(or '|') is considered to be part of {rhs}. This allows the {rhs} to end
+with a space.
+
+Note: When using mappings for Visual mode, you can use the "'<" mark, which
+is the start of the last selected Visual area in the current buffer |'<|.
+
+ *map_backslash*
+Note that only CTRL-V is mentioned here as a special character for mappings
+and abbreviations. When 'cpoptions' does not contain 'B', a backslash can
+also be used like CTRL-V. The <> notation can be fully used then |<>|. But
+you cannot use "<C-V>" like CTRL-V to escape the special meaning of what
+follows.
+
+To map a backslash, or use a backslash literally in the {rhs}, the special
+sequence "<Bslash>" can be used. This avoids the need to double backslashes
+when using nested mappings.
+
+ *map-ambiguous*
+When two mappings start with the same sequence of characters, they are
+ambiguous. Example: >
+ :imap aa foo
+ :imap aaa bar
+When Vim has read "aa", it will need to get another character to be able to
+decide if "aa" or "aaa" should be mapped. This means that after typing "aa"
+that mapping won't get expanded yet, Vim is waiting for another character.
+If you type a space, then "foo" will get inserted, plus the space. If you
+type "a", then "bar" will get inserted.
+{Vi does not allow ambiguous mappings}
+
+ *map_CTRL_C*
+It's not possible to use a CTRL-C in the {lhs}. You just can't map CTRL-C.
+The reason is that CTRL-C must always be available to break a running command.
+Exception: When using the GUI version on MS-Windows CTRL-C can be mapped to
+allow a Copy command to the clipboard. Use CTRL-Break to interrupt Vim.
+
+ *map_space_in_lhs*
+To include a space in {lhs} precede it with a CTRL-V (type two CTRL-Vs for
+each space).
+ *map_space_in_rhs*
+If you want a {rhs} that starts with a space, use "<Space>". To be fully Vi
+compatible (but unreadable) don't use the |<>| notation, precede {rhs} with a
+single CTRL-V (you have to type CTRL-V two times).
+ *map_empty_rhs*
+You can create an empty {rhs} by typing nothing after a single CTRL-V (you
+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: >
+ :map <F8> <Nop>
+ :map! <F8> <Nop>
+<
+ *<Leader>* *mapleader*
+To define a mapping which uses the "mapleader" variable, the special string
+"<Leader>" can be used. It is replaced with the string value of "mapleader".
+If "mapleader" is not set or empty, a backslash is used instead. Example: >
+ :map <Leader>A oanother line<Esc>
+Works like: >
+ :map \A oanother line<Esc>
+But after: >
+ :let mapleader = ","
+It works like: >
+ :map ,A oanother line<Esc>
+
+Note that the value of "mapleader" is used at the moment the mapping is
+defined. Changing "mapleader" after that has no effect for already defined
+mappings.
+
+ *<LocalLeader>* *maplocalleader*
+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
+<
+In a global plugin <Leader> should be used and in a filetype plugin
+<LocalLeader>. "mapleader" and "maplocalleader" can be equal. Although, if
+you make them different, there is a smaller chance of mappings from global
+plugins to clash with mappings for filetype plugins. For example, you could
+keep "mapleader" at the default backslash, and set "maplocalleader" to an
+underscore.
+
+ *map-<SID>*
+In a script the special key name "<SID>" can be used to define a mapping
+that's local to the script. See |<SID>| for details.
+
+ *<Plug>*
+The special key name "<Plug>" can be used for an internal mapping, which is
+not to be matched with any key sequence. This is useful in plugins
+|using-<Plug>|.
+
+ *<Char>* *<Char->*
+To map a character by its decimal, octal or hexadecimal number the <Char>
+construct can be used:
+ <Char-123> character 123
+ <Char-033> character 27
+ <Char-0x7f> character 127
+This is useful to specify a (multi-byte) character in a 'keymap' file.
+Upper and lowercase differences are ignored.
+
+ *map-comments*
+It is not possible to put a comment after these commands, because the '"'
+character is considered to be part of the {lhs} or {rhs}.
+
+ *map_bar*
+Since the '|' character is used to separate a map command from the next
+command, you will have to do something special to include a '|' in {rhs}.
+There are three methods:
+ use works when example ~
+ <Bar> '<' is not in 'cpoptions' :map _l :!ls <Bar> more^M
+ \| 'b' is not in 'cpoptions' :map _l :!ls \| more^M
+ ^V| always, in Vim and Vi :map _l :!ls ^V| more^M
+
+(here ^V stands for CTRL-V; to get one CTRL-V you have to type it twice; you
+cannot use the <> notation "<C-V>" here).
+
+All three work when you use the default setting for 'cpoptions'.
+
+When 'b' is present in 'cpoptions', "\|" will be recognized as a mapping
+ending in a '\' and then another command. This is Vi compatible, but
+illogical when compared to other commands.
+
+ *map_return*
+When you have a mapping that contains an Ex command, you need to put a line
+terminator after it to have it executed. The use of <CR> is recommended for
+this (see |<>|). Example: >
+ :map _ls :!ls -l %<CR>:echo "the end"<CR>
+
+To avoid mapping of the characters you type in insert or Command-line mode,
+type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste'
+option is on.
+
+Note that when an error is encountered (that causes an error message or beep)
+the rest of the mapping is not executed. This is Vi-compatible.
+
+Note that the second character (argument) of the commands @zZtTfF[]rm'`"v
+and CTRL-X is not mapped. This was done to be able to use all the named
+registers and marks, even when the command with the same name has been
+mapped.
+
+ *map-which-keys*
+If you are going to map something, you will need to choose which key(s) to use
+for the {lhs}. You will have to avoid keys that are used for Vim commands,
+otherwise you would not be able to use those commands anymore. Here are a few
+suggestions:
+- Function keys <F2>, <F3>, etc.. Also the shifted function keys <S-F1>,
+ <S-F2>, etc. Note that <F1> is already used for the help command.
+- Meta-keys (with the ALT key pressed).
+- Use the '_' or ',' character and then any other character. The "_" and ","
+ commands do exist in Vim (see |_| and |,|), but you probably never use them.
+- Use a key that is a synonym for another command. For example: CTRL-P and
+ CTRL-N. Use an extra character to allow more mappings.
+
+See the file "index" for keys that are not used and thus can be mapped without
+losing any builtin function. You can also use ":help {key}^D" to find out if
+a key is used for some command. ({key} is the specific key you want to find
+out about, ^D is CTRL-D).
+
+ *map-examples*
+A few examples (given as you type them, for "<CR>" you type four characters;
+the '<' flag must not be present in 'cpoptions' for this to work). >
+
+ :map <F3> o#include
+ :map <M-g> /foo<CR>cwbar<Esc>
+ :map _x d/END/e<CR>
+ :map! qq quadrillion questions
+<
+ *map-typing*
+Vim will compare what you type with the start of a mapped sequence. If there
+is an incomplete match, it will get more characters until there either is a
+complete match or until there is no match at all. Example: If you map! "qq",
+the first 'q' will not appear on the screen until you type another
+character. This is because Vim cannot know if the next character will be a
+'q' or not. If the 'timeout' option is on (which is the default) Vim will
+only wait for one second (or as long as specified with the 'timeoutlen'
+option). After that it assumes that the 'q' is to be interpreted as such. If
+you type slowly, or your system is slow, reset the 'timeout' option. Then you
+might want to set the 'ttimeout' option.
+
+ *map-keys-fails*
+There is one situation where key codes might not be recognized:
+- Vim can only read part of the key code. Mostly this is only the first
+ character. This happens on some Unix versions in an xterm.
+- The key code is after character(s) that are mapped. E.g., "<F1><F1>" or
+ "g<F1>".
+The result is that the key code is not recognized in this situation, and the
+mapping fails.
+There are two actions needed to avoid this problem:
+- Remove the 'K' flag from 'cpoptions'. This will make Vim wait for the rest
+ of the characters of the function key.
+- When using <F1> to <F4> the actual key code generated may correspond to
+ <xF1> to <xF4>. There are mappings from <xF1> to <F1>, <xF2> to <F2>, etc.,
+ but these are not recognized after another half a mapping. Make sure the
+ key codes for <F1> to <F4> are correct: >
+ :set <F1>=<type CTRL-V><type F1>
+< Type the <F1> as four characters. The part after the "=" must be done with
+ the actual keys, not the literal text.
+Another solution is to use the actual key code in the mapping for the second
+special key: >
+ :map <F1><Esc>OP :echo "yes"<CR>
+Don't type a real <Esc>, Vim will recognize the key code and replace it with
+<F1> anyway.
+
+ *recursive_mapping*
+If you include the {lhs} in the {rhs} you have a recursive mapping. When
+{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is
+included in {rhs} is encountered it will be replaced with {rhs}, and so on.
+This makes it possible to repeat a command an infinite number of times. The
+only problem is that the only way to stop this is by causing an error. The
+macros to solve a maze uses this, look there for an example. There is one
+exception: If the {rhs} starts with {lhs}, the first character is not mapped
+again (this is Vi compatible).
+For example: >
+ :map ab abcd
+will execute the "a" command and insert "bcd" in the text. The "ab" in the
+{rhs} will not be mapped again.
+
+If you want to exchange the meaning of two keys you should use the :noremap
+command. For example: >
+ :noremap k j
+ :noremap j k
+This will exchange the cursor up and down commands.
+
+With the normal :map command, when the 'remap' option is on, mapping takes
+place until the text is found not to be a part of a {lhs}. For example, if
+you use: >
+ :map x y
+ :map y x
+Vim will replace x with y, and then y with x, etc. When this has happened
+'maxmapdepth' times (default 1000), Vim will give the error message
+"recursive mapping".
+
+ *:map-undo*
+If you include an undo command inside a mapped sequence, this will bring the
+text back in the state before executing the macro. This is compatible with
+the original Vi, as long as there is only one undo command in the mapped
+sequence (having two undo commands in a mapped sequence did not make sense
+in the original Vi, you would get back the text before the first undo).
+
+ *:map-special-keys*
+There are three ways to map a special key:
+1. The Vi-compatible method: Map the key code. Often this is a sequence that
+ starts with <Esc>. To enter a mapping like this you type ":map " and then
+ you have to type CTRL-V before hitting the function key. Note that when
+ the key code for the key is in the termcap (the t_ options), it will
+ automatically be translated into the internal code and become the second
+ way of mapping (unless the 'k' flag is included in 'cpoptions').
+2. The second method is to use the internal code for the function key. To
+ enter such a mapping type CTRL-K and then hit the function key, or use
+ the form "#1", "#2", .. "#9", "#0", "<Up>", "<S-Down>", "<S-F7>", etc.
+ (see table of keys |key-notation|, all keys from <Up> can be used). The
+ first ten function keys can be defined in two ways: Just the number, like
+ "#2", and with "<F>", like "<F2>". Both stand for function key 2. "#0"
+ refers to function key 10, defined with option 't_f10', which may be
+ function key zero on some keyboards. The <> form cannot be used when
+ 'cpoptions' includes the '<' flag.
+3. Use the termcap entry, with the form <t_xx>, where "xx" is the name of the
+ termcap entry. Any string entry can be used. For example: >
+ :map <t_F3> G
+< Maps function key 13 to "G". This does not work if 'cpoptions' includes
+ the '<' flag.
+
+The advantage of the second and third method is that the mapping will work on
+different terminals without modification (the function key will be
+translated into the same internal code or the actual key code, no matter what
+terminal you are using. The termcap must be correct for this to work, and you
+must use the same mappings).
+
+DETAIL: Vim first checks if a sequence from the keyboard is mapped. If it
+isn't the terminal key codes are tried (see |terminal-options|). If a
+terminal code is found it is replaced with the internal code. Then the check
+for a mapping is done again (so you can map an internal code to something
+else). What is written into the script file depends on what is recognized.
+If the terminal key code was recognized as a mapping the key code itself is
+written to the script file. If it was recognized as a terminal code the
+internal code is written to the script file.
+
+==============================================================================
+2. Abbreviations *abbreviations* *Abbreviations*
+
+Abbreviations are used in Insert mode, Replace mode and Command-line mode.
+If you enter a word that is an abbreviation, it is replaced with the word it
+stands for. This can be used to save typing for often used long words. And
+you can use it to automatically correct obvious spelling errors.
+Examples:
+
+ :iab ms MicroSoft
+ :iab tihs this
+
+There are three types of abbreviations:
+
+full-id The "full-id" type consists entirely of keyword characters (letters
+ and characters from 'iskeyword' option). This is the most common
+ abbreviation.
+
+ Examples: "foo", "g3", "-1"
+
+end-id The "end-id" type ends in a keyword character, but all the other
+ characters are not keyword characters.
+
+ Examples: "#i", "..f", "$/7"
+
+non-id The "non-id" type ends in a non-keyword character, the other
+ characters may be of any type, excluding space and Tab. {this type
+ is not supported by Vi}
+
+ Examples: "def#", "4/7$"
+
+Examples of strings that cannot be abbreviations: "a.b", "#def", "a b", "_$r"
+
+An abbreviation is only recognized when you type a non-keyword character.
+This can also be the <Esc> that ends insert mode or the <CR> that ends a
+command. The non-keyword character which ends the abbreviation is inserted
+after the expanded abbreviation. An exception to this is the character <C-]>,
+which is used to expand an abbreviation without inserting any extra
+characters.
+
+Example: >
+ :ab hh hello
+< "hh<Space>" is expanded to "hello<Space>"
+ "hh<C-]>" is expanded to "hello"
+
+The characters before the cursor must match the abbreviation. Each type has
+an additional rule:
+
+full-id In front of the match is a non-keyword character, or this is where
+ the line or insertion starts. Exception: When the abbreviation is
+ only one character, it is not recognized if there is a non-keyword
+ character in front of it, other than a space or a <Tab>.
+
+end-id In front of the match is a keyword character, or a space or a <Tab>,
+ or this is where the line or insertion starts.
+
+non-id In front of the match is a space, <Tab> or the start of the line or
+ the insertion.
+
+Examples: ({CURSOR} is where you type a non-keyword character) >
+ :ab foo four old otters
+< " foo{CURSOR}" is expanded to " four old otters"
+ " foobar{CURSOR}" is not expanded
+ "barfoo{CURSOR}" is not expanded
+>
+ :ab #i #include
+< "#i{CURSOR}" is expanded to "#include"
+ ">#i{CURSOR}" is not expanded
+>
+ :ab ;; <endofline>"
+< "test;;" is not expanded
+ "test ;;" is expanded to "test <endofline>"
+
+To avoid the abbreviation in insert mode: Type part of the abbreviation, exit
+insert mode with <Esc>, re-enter insert mode with "a" and type the rest. Or
+type CTRL-V before the character after the abbreviation.
+To avoid the abbreviation in Command-line mode: Type CTRL-V twice somewhere in
+the abbreviation to avoid it to be replaced. A CTRL-V in front of a normal
+character is mostly ignored otherwise.
+
+It is possible to move the cursor after an abbreviation: >
+ :iab if if ()<Left>
+This does not work if 'cpoptions' includes the '<' flag. |<>|
+
+You can even do more complicated things. For example, to consume the space
+typed after an abbreviation: >
+ func Eatchar(pat)
+ let c = nr2char(getchar())
+ return (c =~ a:pat) ? '' : c
+ endfunc
+ iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>
+
+There are no default abbreviations.
+
+Abbreviations are never recursive. You can use ":ab f f-o-o" without any
+problem. But abbreviations can be mapped. {some versions of Vi support
+recursive abbreviations, for no apparent reason}
+
+Abbreviations are disabled if the 'paste' option is on.
+
+ *:abbreviate-local* *:abbreviate-<buffer>*
+Just like mappings, abbreviations can be local to a buffer. This is mostly
+used in a |filetype-plugin| file. Example for a C plugin file: >
+ :abb <buffer> FF for (i = 0; i < ; ++i)
+<
+ *:ab* *:abbreviate*
+:ab[breviate] list all abbreviations. The character in the first
+ column indicates the mode where the abbreviation is
+ used: 'i' for insert mode, 'c' for Command-line
+ mode, '!' for both. These are the same as for
+ mappings, see |map-listing|.
+
+:ab[breviate] {lhs} list the abbreviations that start with {lhs}
+ You may need to insert a CTRL-V (type it twice) to
+ avoid that a typed {lhs} is expanded, since
+ command-line abbreviations apply here.
+
+:ab[breviate] {lhs} {rhs}
+ add abbreviation for {lhs} to {rhs}. If {lhs} already
+ existed it is replaced with the new {rhs}. {rhs} may
+ contain spaces.
+
+ *:una* *:unabbreviate*
+:una[bbreviate] {lhs} Remove abbreviation for {lhs} from the list. If none
+ is found, remove abbreviations in which {lhs} matches
+ with the {rhs}. This is done so that you can even
+ remove abbreviations after expansion. To avoid
+ expansion insert a CTRL-V (type it twice).
+
+ *:norea* *:noreabbrev*
+:norea[bbrev] [lhs] [rhs]
+ same as ":ab", but no remapping for this {rhs} {not
+ in Vi}
+
+ *:ca* *:cabbrev*
+:ca[bbrev] [lhs] [rhs] same as ":ab", but for Command-line mode only. {not
+ in Vi}
+
+ *:cuna* *:cunabbrev*
+:cuna[bbrev] {lhs} same as ":una", but for Command-line mode only. {not
+ in Vi}
+
+ *:cnorea* *:cnoreabbrev*
+:cnorea[bbrev] [lhs] [rhs]
+ same as ":ab", but for Command-line mode only and no
+ remapping for this {rhs} {not in Vi}
+
+ *:ia* *:iabbrev*
+:ia[bbrev] [lhs] [rhs] same as ":ab", but for Insert mode only. {not in Vi}
+
+ *:iuna* *:iunabbrev*
+:iuna[bbrev] {lhs} same as ":una", but for insert mode only. {not in
+ Vi}
+
+ *:inorea* *:inoreabbrev*
+:inorea[bbrev] [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}
+
+ *:iabc* *:iabclear*
+:iabc[lear] Remove all abbreviations for Insert mode. {not in Vi}
+
+ *:cabc* *:cabclear*
+:cabc[lear] Remove all abbreviations for Command-line mode. {not
+ in Vi}
+
+ *using_CTRL-V*
+It is possible to use special characters in the rhs of an abbreviation.
+CTRL-V has to be used to avoid the special meaning of most non printable
+characters. How many CTRL-Vs need to be typed depends on how you enter the
+abbreviation. This also applies to mappings. Let's use an example here.
+
+Suppose you want to abbreviate "esc" to enter an <Esc> character. When you
+type the ":ab" command in Vim, you have to enter this: (here ^V is a CTRL-V
+and ^[ is <Esc>)
+
+You type: ab esc ^V^V^V^V^V^[
+
+ All keyboard input is subjected to ^V quote interpretation, so
+ the first, third, and fifth ^V characters simply allow the second,
+ and fourth ^Vs, and the ^[, to be entered into the command-line.
+
+You see: ab esc ^V^V^[
+
+ The command-line contains two actual ^Vs before the ^[. This is
+ how it should appear in your .exrc file, if you choose to go that
+ route. The first ^V is there to quote the second ^V; the :ab
+ command uses ^V as its own quote character, so you can include quoted
+ whitespace or the | character in the abbreviation. The :ab command
+ doesn't do anything special with the ^[ character, so it doesn't need
+ to be quoted. (Although quoting isn't harmful; that's why typing 7
+ [but not 8!] ^Vs works.)
+
+Stored as: esc ^V^[
+
+ After parsing, the abbreviation's short form ("esc") and long form
+ (the two characters "^V^[") are stored in the abbreviation table.
+ If you give the :ab command with no arguments, this is how the
+ abbreviation will be displayed.
+
+ Later, when the abbreviation is expanded because the user typed in
+ the word "esc", the long form is subjected to the same type of
+ ^V interpretation as keyboard input. So the ^V protects the ^[
+ character from being interpreted as the "exit input-mode" character.
+ Instead, the ^[ is inserted into the text.
+
+Expands to: ^[
+
+[example given by Steve Kirkendall]
+
+==============================================================================
+3. Local mappings and functions *script-local*
+
+When using several Vim script files, there is the danger that mappings and
+functions used in one script use the same name as in other scripts. To avoid
+this, they can be made local to the script.
+
+ *<SID>* *<SNR>* *E81*
+The string "<SID>" can be used in a mapping or menu. This requires that the
+'<' flag is not present in 'cpoptions'.
+ When executing the map command, Vim will replace "<SID>" with the special
+key code <SNR>, followed by a number that's unique for the script, and an
+underscore. Example: >
+ :map <SID>Add
+could define a mapping "<SNR>23_Add".
+
+When defining a function in a script, "s:" can be prepended to the name to
+make it local to the script. But when a mapping is executed from outside of
+the script, it doesn't know in which script the function was defined. To
+avoid this problem, use "<SID>" instead of "s:". The same translation is done
+as for mappings. This makes it possible to define a call to the function in
+mapping.
+
+When a local function is executed, it runs in the context of the script it was
+defined in. This means that new functions and mappings it defines can also
+use "s:" or "<SID>" and it will use the same unique number as when the
+function itself was defined. Also, the "s:var" local script variables can be
+used.
+
+When executing an autocommand or a user command, it will run in the context of
+the script it was defined in. This makes it possible that the command calls a
+local function or uses a local mapping.
+
+Otherwise, using "<SID>" outside of a script context is an error.
+
+If you need to get the script number to use in a complicated script, you can
+use this trick: >
+ :map <SID>xx <SID>xx
+ :let s:sid = maparg("<SID>xx")
+ :unmap <SID>xx
+And remove the trailing "xx".
+
+The "<SNR>" will be shown when listing functions and mappings. This is useful
+to find out what they are defined to.
+
+The |:scriptnames| command can be used to see which scripts have been sourced
+and what their <SNR> number is.
+
+This is all {not in Vi} and {not available when compiled without the +eval
+feature}.
+
+==============================================================================
+4. User-defined commands *user-commands*
+
+It is possible to define your own Ex commands. A user-defined command can act
+just like a built-in command (it can have a range or arguments, arguments can
+be completed as filenames or buffer names, etc), except that when the command
+is executed, it is transformed into a normal ex command and then executed.
+
+For starters: See section |40.2| in the user manual.
+
+ *E183* *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.
+
+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
+built-in command will always take precedence.
+
+Example: >
+ :command Rename ...
+ :command Renumber ...
+ :Rena " Means "Rename"
+ :Renu " Means "Renumber"
+ :Ren " Error - ambiguous
+ :command Paste ...
+ :P " The built-in :Print
+
+It is recommended that full names for user-defined commands are used in
+scripts.
+
+:com[mand] *:com* *:command*
+ List all user-defined commands. When listing commands,
+ the characters in the first two columns are
+ ! Command has the -bang attribute
+ " Command has the -register attribute
+ b Command is local to current buffer
+ (see below for details on attributes)
+
+:com[mand] {cmd} List the user-defined commands that start with {cmd}
+
+ *E174* *E182*
+:com[mand][!] [{attr}...] {cmd} {rep}
+ Define a user command. The name of the command is
+ {cmd} and its replacement text is {rep}. The command's
+ attributes (see below) are {attr}. If the command
+ already exists, an error is reported, unless a ! is
+ specified, in which case the command is redefined.
+
+:delc[ommand] {cmd} *:delc* *:delcommand* *E184*
+ Delete the user-defined command {cmd}.
+
+:comc[lear] *:comc* *:comclear*
+ Delete all user-defined commands.
+
+Command attributes
+
+User-defined commands are treated by Vim just like any other ex commands. They
+can have arguments, or have a range specified. Arguments are subject to
+completion as filenames, buffers, etc. Exactly how this works depends upon the
+command's attributes, which are specified when the command is defined.
+
+There are a number of attributes, split into four categories: argument
+handling, completion behavior, range handling, and special cases. The
+attributes are described below, by category.
+
+Argument handling *E175* *E176*
+
+By default, a user defined command will take no arguments (and an error is
+reported if any are supplied). However, it is possible to specify that the
+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=? 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.
+
+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
+defined, not where it is invoked! Example:
+ script1.vim: >
+ :let s:error = "None"
+ :command -nargs=1 Error echoerr <args>
+< script2.vim: >
+ :source script1.vim
+ :let s:error = "Wrong!"
+ :Error s:error
+Executing script2.vim will result in "None" to be echoed. Not what you
+intended! Calling a function may be an alternative.
+
+Completion behavior *:command-completion*
+ *E179* *E180* *E181*
+By default, the arguments of user defined commands do not undergo completion.
+However, by specifying one or the other of the following attributes, argument
+completion can be enabled:
+
+ -complete=augroup autocmd groups
+ -complete=buffer buffer names
+ -complete=command Ex command (and arguments)
+ -complete=dir directory names
+ -complete=environment environment variable names
+ -complete=event autocommand events
+ -complete=expression Vim expression
+ -complete=file file and directory names
+ -complete=function function name
+ -complete=help help subjects
+ -complete=highlight highlight groups
+ -complete=mapping mapping name
+ -complete=menu menus
+ -complete=option options
+ -complete=tag tags
+ -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
+ -complete=var user variables
+ -complete=custom,{func} custom completion, defined via {func}
+
+Custom completion *:command-completion-custom*
+ *E467* *E468*
+It is possible to define customized completion schemes via the "custom,{func}"
+completion argument. The {func} part should be a function with the following
+prototype >
+
+ :function {func}(ArgLead, CmdLine, CursorPos)
+
+The function need not use all these arguments, but it should provide the
+completion candidates as the return value, one per line in a newline separated
+string. The function arguments are:
+ ArgLead the leading portion of the argument currently being
+ completed on
+ CmdLine the entire command line
+ CursorPos the cursor position in it
+The function may use these for determining context. It is not necessary to
+filter candidates against the (implicit pattern in) ArgLead. Vim will do
+filter the candidates with its regexp engine after function return, and this
+is probably more efficient in most cases.
+
+The following example lists user names to a Finger command >
+ :com -complete=custom,ListUsers -nargs=1 Finger !finger <args>
+ :fun ListUsers(A,L,P)
+ : return system("cut -d: -f1 /etc/passwd")
+ :endfun
+
+Range handling *E177* *E178*
+
+By default, user-defined commands do not accept a line number range. However,
+it is possible to specify that the command does take a range (the -range
+attribute), or that it takes an arbitrary count value, either in the line
+number position (-range=N, like the |:split| command) or as a "count"
+argument (-count=N, like the |:Next| command). Possible attributes are:
+
+ -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|)
+ -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
+
+Note that -range=N and -count=N are mutually exclusive - only one should be
+specified.
+
+Special cases
+
+There are some special cases as well:
+
+ -bang The command can take a ! modifier (like :q or :w)
+ -bar The command can be followed by a "|" and another command.
+ A "|" inside the command argument is not allowed then.
+ Also checks for a " to start a comment.
+ -register The first argument to the command can be an optional
+ register name (like :del, :put, :yank).
+ -buffer The command will only be available in the current buffer.
+
+In the cases of the -count and -register attributes, if the optional argument
+is supplied, it is removed from the argument list and is available to the
+replacement text separately.
+
+Replacement text
+
+The replacement text for a user defined command is scanned for special escape
+sequences, using <...> notation. Escape sequences are replaced with values
+from the entered command line, and all other text is copied unchanged. The
+resulting string is executed as an Ex command. If the initial < of an escape
+sequence is preceded by a backslash, the sequence is copied unchanged.
+
+The valid escape sequences are
+
+ *<line1>*
+ <line1> The starting line of the command range.
+ *<line2>*
+ <line2> The final line of the command range.
+ *<count>*
+ <count> Any count supplied (as described for the '-range'
+ and '-count' attributes).
+ *<bang>*
+ <bang> (See the '-bang' attribute) Expands to a ! if the
+ command was executed with a ! modifier, otherwise
+ expands to nothing.
+ *<reg>* *<register>*
+ <reg> (See the '-register' attribute) The optional register,
+ if specified. Otherwise, expands to nothing. <register>
+ is a synonym for this.
+ *<args>*
+ <args> The command arguments, exactly as supplied (but as
+ noted above, any count or register can consume some
+ of the arguments, which are then not part of <args>).
+ <lt> A single '<' (Less-Than) character. This is needed if you
+ want to get a literal copy of one of these escape sequences
+ into the expansion - for example, to get <bang>, use
+ <lt>bang>.
+
+ *<q-args>*
+If the first two characters of an escape sequence are "q-" (for example,
+<q-args>) then the value is quoted in such a way as to make it a valid value
+for use in an expression. This uses the argument as one single value.
+
+To allow commands to pass their arguments on to a user-defined function, there
+is a special form <f-args> ("function args"). This splits the command
+arguments at spaces and Tabs, quotes each argument individually, and the
+<f-args> sequence is replaced by the comma-separated list of quoted arguments.
+See the Mycmd example below. When there is no argument, <f-args> also has no
+argument.
+
+Examples >
+
+ " Delete everything after here to the end
+ :com Ddel +,$d
+
+ " Rename the current buffer
+ :com -nargs=1 -bang -complete=file Ren f <args>|w<bang>
+
+ " Replace a range with the contents of a file
+ " (Enter this all as one line)
+ :com -range -nargs=1 -complete=file
+ Replace <line1>-pu_|<line1>,<line2>d|r <args>|<line1>d
+
+ " Count the number of lines in the range
+ :com! -range -nargs=0 Lines :echo <line2> - <line1> + 1 "lines"
+
+ " Call a user function (example of <f-args>)
+ :com -nargs=* Mycmd call Myfunc(<f-args>)
+
+When executed as: >
+ :Mycmd arg1 arg2
+This will invoke: >
+ :call Myfunc("arg1","arg2")
+
+ :" A more substantial example
+ :function Allargs(command)
+ : let i = 0
+ : while i < argc()
+ : if filereadable(argv(i))
+ : execute "e " . argv(i)
+ : execute a:command
+ : endif
+ : let i = i + 1
+ : endwhile
+ :endfunction
+ :command -nargs=+ -complete=command Allargs call Allargs(<q-args>)
+
+The command Allargs takes any Vim command(s) as argument and executes it on all
+files in the argument list. Usage example (note use of the "e" flag to ignore
+errors and the "update" command to write modified buffers): >
+ :Allargs %s/foo/bar/ge|update
+This will invoke: >
+ :call Allargs("%s/foo/bar/ge|update")
+<
+When defining an user command in a script, it will be able to call functions
+local to the script and use mappings local to the script. When the user
+invokes the user command, it will run in the context of the script it was
+defined in. This matters if |<SID>| is used in a command.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt
new file mode 100644
index 000000000..52c3b2406
--- /dev/null
+++ b/runtime/doc/mbyte.txt
@@ -0,0 +1,1368 @@
+*mbyte.txt* For Vim version 7.0aa. Last change: 2004 Jun 07
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar et al.
+
+
+Multi-byte support *multibyte* *multi-byte*
+ *Chinese* *Japanese* *Korean*
+This is about editing text in languages which have many characters that can
+not be represented using one byte (one octet). Examples are Chinese, Japanese
+and Korean. Unicode is also covered here.
+
+For an introduction to the most common features, see |usr_45.txt| in the user
+manual.
+For changing the language of messages and menus see |mlang.txt|.
+
+{not available when compiled without the +multi_byte feature}
+
+
+1. Getting started |mbyte-first|
+2. Locale |mbyte-locale|
+3. Encoding |mbyte-encoding|
+4. Using a terminal |mbyte-terminal|
+5. Fonts on X11 |mbyte-fonts-X11|
+6. Fonts on MS-Windows |mbyte-fonts-MSwin|
+7. Input on X11 |mbyte-XIM|
+8. Input on MS-Windows |mbyte-IME|
+9. Input with a keymap |mbyte-keymap|
+10. Using UTF-8 |mbyte-utf8|
+11. Overview of options |mbyte-options|
+
+NOTE: This file contains UTF-8 characters. These may show up as strange
+characters or boxes when using another encoding.
+
+==============================================================================
+1. Getting started *mbyte-first*
+
+This is a summary of the multibyte features in Vim. If you are lucky it works
+as described and you can start using Vim without much trouble. If something
+doesn't work you will have to read the rest. Don't be surprised if it takes
+quite a bit of work and experimenting to make Vim use all the multi-byte
+features. Unfortunately, every system has its own way to deal with multibyte
+languages and it is quite complicated.
+
+
+COMPILING
+
+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.
+
+
+LOCALE
+
+First of all, you must make sure your current locale is set correctly. If
+your system has been installed to use the language, it probably works right
+away. If not, you can often make it work by setting the $LANG environment
+variable in your shell: >
+
+ setenv LANG ja_JP.EUC
+
+Unfortunately, the name of the locale depends on your system. Japanese might
+also be called "ja_JP.EUCjp" or just "ja". To see what is currently used: >
+
+ :language
+
+To change the locale inside Vim use: >
+
+ :language ja_JP.EUC
+
+Vim will give an error message if this doesn't work. This is a good way to
+experiment and find the locale name you want to use. But it's always better
+to set the locale in the shell, so that it is used right from the start.
+
+See |mbyte-locale| for details.
+
+
+ENCODING
+
+If your locale works properly, Vim will try to set the 'encoding' option
+accordingly. If this doesn't work you can overrule its value: >
+
+ :set encoding=utf-8
+
+See |encoding-values| for a list of acceptable values.
+
+The result is that all the text that is used inside Vim will be in this
+encoding. Not only the text in the buffers, but also in registers, variables,
+etc. This also means that changing the value of 'encoding' makes the existing
+text invalid! The text doesn't change, but it will be displayed wrong.
+
+You can edit files in another encoding than what 'encoding' is set to. Vim
+will convert the file when you read it and convert it back when you write it.
+See 'fileencoding', 'fileencodings' and |++enc|.
+
+
+DISPLAY AND FONTS
+
+If you are working in a terminal (emulator) you must make sure it accepts the
+same encoding as which Vim is working with. If this is not the case, you can
+use the 'termencoding' option to make Vim convert text automatically.
+
+For the GUI you must select fonts that work with the current 'encoding'. This
+is the difficult part. It depends on the system you are using, the locale and
+a few other things. See the chapters on fonts: |mbyte-fonts-X11| for
+X-Windows and |mbyte-fonts-MSwin| for MS-Windows.
+
+For GTK+ 2, you can skip most of this section. The option 'guifontset' does
+no longer exist. You only need to set 'guifont' and everything should "just
+work". If your system comes with Xft2 and fontconfig and the current font
+does not contain a certain glyph, a different font will be used automatically
+if available. The 'guifontwide' option is still supported but usually you do
+not need to set it. It is only necessary if the automatic font selection does
+not suit your needs.
+
+For X11 you can set the 'guifontset' option to a list of fonts that together
+cover the characters that are used. Example for Korean: >
+
+ :set guifontset=k12,r12
+
+Alternatively, you can set 'guifont' and 'guifontwide'. 'guifont' is used for
+the single-width characters, 'guifontwide' for the double-width characters.
+Thus the 'guifontwide' font must be exactly twice as wide as 'guifont'.
+Example for UTF-8: >
+
+ :set guifont=-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
+ :set guifontwide=-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1
+
+You can also set 'guifont' alone, Vim will try to find a matching
+'guifontwide' for you.
+
+
+INPUT
+
+There are several ways to enter multi-byte characters:
+- For X11 XIM can be used. See |XIM|.
+- For MS-Windows IME can be used. See |IME|.
+- For all systems keymaps can be used. See |mbyte-keymap|.
+
+The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
+the different input medhods or disable them temporarily.
+
+==============================================================================
+2. Locale *mbyte-locale*
+
+The easiest setup is when your whole system uses the locale you want to work
+in. But it's also possible to set the locale for one shell you are working
+in, or just use a certain locale inside Vim.
+
+
+WHAT IS A LOCALE? *locale*
+
+There are many of languages in the world. And there are different cultures
+and environments at least as much as the number of languages. A linguistic
+environment corresponding to an area is called "locale". This includes
+information about the used language, the charset, collating order for sorting,
+date format, currency format and so on. For Vim only the language and charset
+really matter.
+
+You can only use a locale if your system has support for it. Some systems
+have only a few locales, especially in the USA. The language which you want
+to use may not be on your system. In that case you might be able to install
+it as an extra package. Check your system documentation for how to do that.
+
+The location in which the locales are installed varies from system to system.
+For example, "/usr/share/locale" or "/usr/lib/locale". See your system's
+setlocale() man page.
+
+Looking in these directories will show you the exact name of each locale.
+Mostly upper/lowercase matters, thus "ja_JP.EUC" and "ja_jp.euc" are
+different. Some systems have a locale.alias file, which allows translation
+from a short name like "nl" to the full name "nl_NL.ISO_8859-1".
+
+Note that X-windows has its own locale stuff. And unfortunately uses locale
+names different from what is used elsewhere. This is confusing! For Vim it
+matters what the setlocale() function uses, which is generally NOT the
+X-windows stuff. You might have to do some experiments to find out what
+really works.
+
+ *locale-name*
+The (simplified) format of |locale| name is:
+
+ language
+or language_territory
+or language_territory.codeset
+
+Territory means the country (or part of it), codeset means the |charset|. For
+example, the locale name "ja_JP.eucJP" means:
+ ja the language is Japanese
+ JP the country is Japan
+ eucJP the codeset is EUC-JP
+But it also could be "ja", "ja_JP.EUC", "ja_JP.ujis", etc. And unfortunately,
+the locale name for a specific language, territory and codeset is not unified
+and depends on your system.
+
+Examples of locale name:
+ charset language locale name ~
+ GB2312 Chinese (simplified) zh_CN.EUC, zh_CN.GB2312
+ Big5 Chinese (traditional) zh_TW.BIG5, zh_TW.Big5
+ CNS-11643 Chinese (traditional) zh_TW
+ EUC-JP Japanese ja, ja_JP.EUC, ja_JP.ujis, ja_JP.eucJP
+ Shift_JIS Japanese ja_JP.SJIS, ja_JP.Shift_JIS
+ EUC-KR Korean ko, ko_KR.EUC
+
+
+USING A LOCALE
+
+To start using a locale for the whole system, see the documentation of your
+system. Mostly you need to set it in a configuration file in "/etc".
+
+To use a locale in a shell, set the $LANG environment value. When you want to
+use Korean and the |locale| name is "ko", do this:
+
+ sh: export LANG=ko
+ csh: setenv LANG ko
+
+You can put this in your ~/.profile or ~/.cshrc file to always use it.
+
+To use a locale in Vim only, use the |:language| command: >
+
+ :language ko
+
+Put this in your ~/.vimrc file to use it always.
+
+Or specify $LANG when starting Vim:
+
+ sh: LANG=ko vim {vim-arguments}
+ csh: env LANG=ko vim {vim-arguments}
+
+You could make a small shell script for this.
+
+==============================================================================
+3. Encoding *mbyte-encoding*
+
+Vim uses the 'encoding' option to specify how characters identified and
+encoded when they are used inside Vim. This applies to all the places where
+text is used, including buffers (files loaded into memory), registers and
+variables.
+
+ *charset* *codeset*
+Charset is another name for encoding. There are subtle differences, but these
+don't matter when using Vim. "codeset" is another similar name.
+
+Each character is encoded as one or more bytes. When all characters are
+encoded with one byte, we call this a single-byte encoding. The most often
+used one is called "latin1". This limits the number of characters to 256.
+Some of these are control characters, thus even fewer can be used for text.
+
+When some characters use two or more bytes, we call this a multi-byte
+encoding. This allows using much more than 256 characters, which is required
+for most East Asian languages.
+
+Most multi-byte encodings use one byte for the first 127 characters. These
+are equal to ASCII, which makes it easy to exchange plain-ASCII text, no
+matter what language is used. Thus you might see the right text even when the
+encoding was set wrong.
+
+ *encoding-names*
+Vim can use many different character encodings. There are three major groups:
+
+1 8bit Single-byte encodings, 256 different characters. Mostly used
+ in USA and Europe. Example: ISO-8859-1 (Latin1). All
+ characters occupy one screen cell only.
+
+2 2byte Double-byte encodings, over 10000 different characters.
+ Mostly used in Asian countries. Example: euc-kr (Korean)
+ The number of screen cells is equal to the number of bytes
+ (except for euc-jp when the first byte is 0x8e).
+
+u Unicode Universal encoding, can replace all others. ISO 10646.
+ Millions of different characters. Example: UTF-8. The
+ relation between bytes and screen cells is complex.
+
+Other encodings cannot be used by Vim internally. But files in other
+encodings can be edited by using conversion, see 'fileencoding'.
+Note that all encodings must use ASCII for the characters up to 128 (except
+when compiled for EBCDIC).
+
+Supported 'encoding' values are: *encoding-values*
+1 latin1 8-bit characters (ISO 8859-1)
+1 iso-8859-n ISO_8859 variant (n = 2 to 15)
+1 koi8-r Russian
+1 koi8-u Ukrainian
+1 macroman MacRoman (Macintosh encoding)
+1 8bit-{name} any 8-bit encoding (Vim specific name)
+1 cp{number} MS-Windows: any installed single-byte codepage
+2 cp932 Japanese (Windows only)
+2 euc-jp Japanese (Unix only)
+2 sjis Japanese (Unix only)
+2 cp949 Korean (Unix and Windows)
+2 euc-kr Korean (Unix only)
+2 cp936 simplified Chinese (Windows only)
+2 euc-cn simplified Chinese (Unix only)
+2 cp950 traditional Chinese (on Unix alias for big5)
+2 big5 traditional Chinese (on Windows alias for cp950)
+2 euc-tw traditional Chinese (Unix only)
+2 2byte-{name} Unix: any double-byte encoding (Vim specific name)
+2 cp{number} MS-Windows: any installed double-byte codepage
+u utf-8 32 bit UTF-8 encoded Unicode (ISO/IEC 10646-1)
+u ucs-2 16 bit UCS-2 encoded Unicode (ISO/IEC 10646-1)
+u ucs-2le like ucs-2, little endian
+u utf-16 ucs-2 extended with double-words for more characters
+u utf-16le like utf-16, little endian
+u ucs-4 32 bit UCS-4 encoded Unicode (ISO/IEC 10646-1)
+u ucs-4le like ucs-4, little endian
+
+The {name} can be any encoding name that your system supports. It is passed
+to iconv() to convert between the encoding of the file and the current locale.
+For MS-Windows "cp{number}" means using codepage {number}.
+Examples: >
+ :set encoding=8bit-cp1252
+ :set encoding=2byte-cp932
+<
+Several aliases can be used, they are translated to one of the names above.
+An incomplete list:
+
+1 ansi same as latin1 (obsolete, for backward compatibility)
+2 japan Japanese: on Unix "euc-jp", on MS-Windows cp932
+2 korea Korean: on Unix "euc-kr", on MS-Windows cp949
+2 prc simplified Chinese: on Unix "euc-cn", on MS-Windows cp936
+2 chinese same as "prc"
+2 taiwan traditional Chinese: on Unix "euc-tw", on MS-Windows cp950
+u utf8 same as utf-8
+u unicode same as ucs-2
+u ucs2be same as ucs-2 (big endian)
+u ucs-2be same as ucs-2 (big endian)
+u ucs-4be same as ucs-4 (big endian)
+
+For the UCS codes the byte order matters. This is tricky, use UTF-8 whenever
+you can. The default is to use big-endian (most significant byte comes
+first):
+ name bytes char ~
+ ucs-2 11 22 1122
+ ucs-2le 22 11 1122
+ ucs-4 11 22 33 44 11223344
+ ucs-4le 44 33 22 11 11223344
+
+On MS-Windows systems you often want to use "ucs-2le", because it uses little
+endian UCS-2.
+
+There are a few encodings which are similar, but not exactly the same. Vim
+treats them as if they were different encodings, so that conversion will be
+done when needed. You might want to use the similar name to avoid conversion
+or when conversion is not possible:
+
+ cp932, shift-jis, sjis
+ cp936, euc-cn
+
+ *encoding-table*
+Normally 'encoding' is equal to your current locale and 'termencoding' is
+empty. This means that your keyboard and display work with characters encoded
+in your current locale, and Vim uses the same characters internally.
+
+You can make Vim use characters in a different encoding by setting the
+'encoding' option to a different value. Since the keyboard and display still
+use the current locale, conversion needs to be done. The 'termencoding' then
+takes over the value of the current locale, so Vim converts between 'encoding'
+and 'termencoding'. Example: >
+ :let &termencoding = &encoding
+ :set encoding=utf-8
+
+However, not all combinations of values are possible. The table below tells
+you how each of the nine combinations works. This is further restricted by
+not all conversions being possible, iconv() being present, etc. Since this
+depends on the system used, no detailed list can be given.
+
+('tenc' is the short name for 'termencoding' and 'enc' short for 'encoding')
+
+'tenc' 'enc' remark ~
+
+ 8bit 8bit Works. When 'termencoding' is different from
+ 'encoding' typing and displaying may be wrong for some
+ characters, Vim does NOT perform conversion (set
+ 'encoding' to "utf-8" to get this).
+ 8bit 2byte MS-Windows: works for all codepages installed on your
+ system; you can only type 8bit characters;
+ Other systems: does NOT work.
+ 8bit Unicode Works, but you can only type 8bit characters; in a
+ terminal you can only see 8bit characters; the GUI can
+ show all characters that the 'guifont' supports.
+
+ 2byte 8bit Works, but typing non-ASCII characters might
+ be a problem.
+ 2byte 2byte MS-Windows: works for all codepages installed on your
+ system; typing characters might be a problem when
+ locale is different from 'encoding'.
+ Other systems: Only works when 'termencoding' is equal
+ to 'encoding', you might as well leave it empty.
+ 2byte Unicode works, Vim will translate typed characters.
+
+ Unicode 8bit works (unusual)
+ Unicode 2byte does NOT work
+ Unicode Unicode works very well (leaving 'termencoding' empty works
+ the same way, because all Unicode is handled
+ internally as UTF-8)
+
+CONVERSION *charset-conversion*
+
+Vim will automatically convert from one to another encoding in several places:
+- When reading a file and 'fileencoding' is different from 'encoding'
+- When writing a file and 'fileencoding' is different from 'encoding'
+- When displaying characters and 'termencoding' is different from 'encoding'
+- When reading input and 'termencoding' is different from 'encoding'
+- When displaying messages and the encoding used for LC_MESSAGES differs from
+ 'encoding' (requires a gettext version that supports this).
+- When reading a Vim script where |:scriptencoding| is different from
+ 'encoding'.
+- When reading or writing a |viminfo| file.
+Most of these require the |+iconv| feature. Conversion for reading and
+writing files may also be specified with the 'charconvert' option.
+
+Useful utilities for converting the charset:
+ All: iconv
+ GNU iconv can convert most encodings. Unicode is used as the
+ intermediate encoding, which allows conversion from and to all other
+ encodings. See http://www.gnu.org/directory/libiconv.html.
+
+ Japanese: nkf
+ Nkf is "Network Kanji code conversion Filter". One of the most unique
+ facility of nkf is the guess of the input Kanji code. So, you don't
+ need to know what the inputting file's |charset| is. When convert to
+ EUC-JP from ISO-2022-JP or Shift_JIS, simply do the following command
+ in Vim:
+ :%!nkf -e
+ Nkf can be found at:
+ http://www.sfc.wide.ad.jp/~max/FreeBSD/ports/distfiles/nkf-1.62.tar.gz
+
+ Chinese: hc
+ Hc is "Hanzi Converter". Hc convert a GB file to a Big5 file, or Big5
+ file to GB file. Hc can be found at:
+ ftp://ftp.cuhk.hk/pub/chinese/ifcss/software/unix/convert/hc-30.tar.gz
+
+ Korean: hmconv
+ Hmconv is Korean code conversion utility especially for E-mail. It can
+ convert between EUC-KR and ISO-2022-KR. Hmconv can be found at:
+ ftp://ftp.kaist.ac.kr/pub/hangul/code/hmconv/
+
+ Multilingual: lv
+ Lv is a Powerful Multilingual File Viewer. And it can be worked as
+ |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
+
+
+ *mbyte-conversion*
+When reading and writing files in an encoding different from 'encoding',
+conversion needs to be done. These conversions are supported:
+- All conversions between Latin-1 (ISO-8859-1), UTF-8, UCS-2 and UCS-4 are
+ handled internally.
+- For MS-Windows, when 'encoding' is a Unicode encoding, conversion from and
+ to any codepage should work.
+- Conversion specified with 'charconvert'
+- Conversion with the iconv library, if it is available.
+ Old versions of GNU iconv() may cause the conversion to fail (they
+ request a very large buffer, more than Vim is willing to provide).
+ Try getting another iconv() implementation.
+
+==============================================================================
+4. Using a terminal *mbyte-terminal*
+
+The GUI fully supports multi-byte characters. It is also possible in a
+terminal, if the terminal supports the same encoding that Vim uses. Thus this
+is less flexible.
+
+For example, you can run Vim in a xterm with added multi-byte support and/or
+|XIM|. Examples are kterm (Kanji term) and hanterm (for Korean), Eterm
+(Enlightened terminal) and rxvt.
+
+If your terminal does not support the right encoding, you can set the
+'termencoding' option. Vim will then convert the typed characters from
+'termencoding' to 'encoding'. And displayed text will be converted from
+'encoding' to 'termencoding'. If the encoding supported by the terminal
+doesn't include all the characters that Vim uses, this leads to lost
+characters. This may mess up the display. If you use a terminal that
+supports Unicode, such as the xterm mentioned below, it should work just fine,
+since nearly every character set can be converted to Unicode without loss of
+information.
+
+
+UTF-8 IN XFREE86 XTERM *UTF8-xterm*
+
+This is a short explanation of how to use UTF-8 character encoding in the
+xterm that comes with XFree86 by Thomas Dickey (text by Markus Kuhn).
+
+Get the latest xterm version which has now UTF-8 support:
+
+ http://invisible-island.net/xterm/xterm.html
+
+Compile it with "./configure --enable-wide-chars ; make"
+
+Also get the ISO 10646-1 version of various fonts, which is available on
+
+ http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
+
+and install the font as described in the README file.
+
+Now start xterm with >
+
+ xterm -u8 -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
+or, for bigger character: >
+ xterm -u8 -fn -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1
+
+and you will have a working UTF-8 terminal emulator. Try both >
+
+ cat utf-8-demo.txt
+ vim utf-8-demo.txt
+
+with the demo text that comes with ucs-fonts.tar.gz in order to see
+whether there are any problems with UTF-8 in your xterm.
+
+For Vim you may need to set 'encoding' to "utf-8".
+
+==============================================================================
+5. Fonts on X11 *mbyte-fonts-X11*
+
+Unfortunately, using fonts in X11 is complicated. The name of a single-byte
+font is a long string. For multi-byte fonts we need several of these...
+
+Note: Most of this is no longer relevant for GTK+ 2. Selecting a font via
+its XLFD is not supported anymore; see 'guifont' for an example of how to
+set the font. Do yourself a favor and ignore the |XLFD| and |xfontset|
+sections below.
+
+First of all, Vim only accepts fixed-width fonts for displaying text. You
+cannot use proportionally spaced fonts. This excludes many of the available
+(and nicer looking) fonts. However, for menus and tooltips any font can be
+used.
+
+Note that Display and Input are independent. It is possible to see your
+language even though you have no input method for it.
+
+You should get a default font for menus and tooltips that works, but it might
+be ugly. Read the following to find out how to select a better font.
+
+
+X LOGICAL FONT DESCRIPTION (XLFD)
+ *XLFD*
+XLFD is the X font name and contains the information about the font size,
+charset, etc. The name is in this format:
+
+FOUNDRY-FAMILY-WEIGHT-SLANT-WIDTH-STYLE-PIXEL-POINT-X-Y-SPACE-AVE-CR-CE
+
+Each field means:
+
+- FOUNDRY: FOUNDRY field. The company that created the font.
+- FAMILY: FAMILY_NAME field. Basic font family name. (helvetica, gothic,
+ times, etc)
+- WEIGHT: WEIGHT_NAME field. How thick the letters are. (light, medium,
+ bold, etc)
+- SLANT: SLANT field.
+ r: Roman (no slant)
+ i: Italic
+ o: Oblique
+ ri: Reverse Italic
+ ro: Reverse Oblique
+ ot: Other
+ number: Scaled font
+- WIDTH: SETWIDTH_NAME field. Width of characters. (normal, condensed,
+ narrow, double wide)
+- STYLE: ADD_STYLE_NAME field. Extra info to describe font. (Serif, Sans
+ Serif, Informal, Decorated, etc)
+- PIXEL: PIXEL_SIZE field. Height, in pixels, of characters.
+- POINT: POINT_SIZE field. Ten times height of characters in points.
+- X: RESOLUTION_X field. X resolution (dots per inch).
+- Y: RESOLUTION_Y field. Y resolution (dots per inch).
+- SPACE: SPACING field.
+ p: Proportional
+ m: Monospaced
+ c: CharCell
+- AVE: AVERAGE_WIDTH field. Ten times average width in pixels.
+- CR: CHARSET_REGISTRY field. The name of the charset group.
+- CE: CHARSET_ENCODING field. The rest of the charset name. For some
+ 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
+written like:
+ -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0
+
+
+X FONTSET
+ *fontset* *xfontset*
+A single-byte charset is typically associated with one font. For multi-byte
+charsets a combination of fonts is often used. This means that one group of
+characters are used from one font and another group from another font (which
+might be double wide). This collection of fonts is called a fontset.
+
+Which fonts are required in a fontset depends on the current locale. X
+windows maintains a table of which groups of characters are required for a
+locale. You have to specify all the fonts that a locale requires in the
+'guifontset' option.
+
+NOTE: The fontset always uses the current locale, even though 'encoding' may
+be set to use a different charset. In that situation you might want to use
+'guifont' and 'guifontwide' instead of 'guifontset'.
+
+Example:
+ |charset| language "groups of characters" ~
+ GB2312 Chinese (simplified) ISO-8859-1 and GB 2312
+ Big5 Chinese (traditional) ISO-8859-1 and Big5
+ CNS-11643 Chinese (traditional) ISO-8859-1, CNS 11643-1 and CNS 11643-2
+ EUC-JP Japanese JIS X 0201 and JIS X 0208
+ EUC-KR Korean ISO-8859-1 and KS C 5601 (KS X 1001)
+
+You can search for fonts using the xlsfonts command. For example, when you're
+searching for a font for KS C 5601: >
+ xlsfonts | grep ksc5601
+
+This is complicated and confusing. You might want to consult the X-Windows
+documentation if there is something you don't understand.
+
+ *base_font_name_list*
+When you have found the names of the fonts you want to use, you need to set
+the 'guifontset' option. You specify the list by concatenating the font names
+and putting a comma in between them.
+
+For example, when you use the ja_JP.eucJP locale, this requires JIS X 0201
+and JIS X 0208. You could supply a list of fonts that explicitly specifies
+the charsets, like: >
+
+ :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0,
+ \-misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0
+
+Alternatively, you can supply a base font name list that omits the charset
+name, letting X-Windows select font characters required for the locale. For
+example: >
+
+ :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140,
+ \-misc-fixed-medium-r-normal--14-130-75-75-c-70
+
+Alternatively, you can supply a single base font name that allows X-Windows to
+select from all available fonts. For example: >
+
+ :set guifontset=-misc-fixed-medium-r-normal--14-*
+
+Alternatively, you can specify alias names. See the fonts.alias file in the
+fonts directory (e.g., /usr/X11R6/lib/X11/fonts/). For example: >
+
+ :set guifontset=k14,r14
+<
+ *E253*
+Note that in East Asian fonts, the standard character cell is square. When
+mixing a Latin font and an East Asian font, the East Asian font width should
+be twice the Latin font width.
+
+If 'guifontset' is not empty, the "font" argument of the |:highlight| command
+is also interpreted as a fontset. For example, you should use for
+highlighting: >
+ :hi Comment font=english_font,your_font
+If you use a wrong "font" argument you will get an error message.
+Also make sure that you set 'guifontset' before setting fonts for highlight
+groups.
+
+
+USING RESOURCE FILES
+
+Instead of specifying 'guifontset', you can set X11 resources and Vim will
+pick them up. This is only for people who know how X resource files work.
+
+For Motif and Athena insert these three lines in your $HOME/.Xdefaults file:
+
+ Vim.font: |base_font_name_list|
+ Vim*fontSet: |base_font_name_list|
+ Vim*fontList: your_language_font
+
+Note: Vim.font is for text area.
+ Vim*fontSet is for menu.
+ Vim*fontList is for menu (for Motif GUI)
+
+For example, when you are using Japanese and a 14 dots font, >
+
+ Vim.font: -misc-fixed-medium-r-normal--14-*
+ Vim*fontSet: -misc-fixed-medium-r-normal--14-*
+ Vim*fontList: -misc-fixed-medium-r-normal--14-*
+<
+or: >
+
+ Vim*font: k14,r14
+ Vim*fontSet: k14,r14
+ Vim*fontList: k14,r14
+<
+To have them take effect immediately you will have to do >
+
+ xrdb -merge ~/.Xdefaults
+
+Otherwise you will have to stop and restart the X server before the changes
+take effect.
+
+
+The GTK+ version of GUI Vim does not use .Xdefaults, use ~/.gtkrc instead.
+The default mostly works OK. But for the menus you might have to change
+it. Example: >
+
+ style "default"
+ {
+ fontset="-*-*-medium-r-normal--14-*-*-*-c-*-*-*"
+ }
+ widget_class "*" style "default"
+
+==============================================================================
+6. Fonts on MS-Windows *mbyte-fonts-MSwin*
+
+The simplest is to use the font dialog to select fonts and try them out. You
+can find this at the "Edit/Select Font..." menu. Once you find a font name
+that works well you can use this command to see its name: >
+
+ :set guifont
+
+Then add a command to your |gvimrc| file to set 'guifont': >
+
+ :set guifont=courier_new:h12
+
+==============================================================================
+7. Input on X11 *mbyte-XIM*
+
+X INPUT METHOD (XIM) BACKGROUND *XIM* *xim* *x-input-method*
+
+XIM is an international input module for X. There are two kind of structures,
+Xlib unit type and |IM-server| (Input-Method server) type. |IM-server| type
+is suitable for complex input, such as CJK.
+
+- IM-server
+ *IM-server*
+ In |IM-server| type input structures, the input event is handled by either
+ of the two ways: FrontEnd system and BackEnd system. In the FrontEnd
+ system, input events are snatched by the |IM-server| first, then |IM-server|
+ give the application the result of input. On the other hand, the BackEnd
+ system works reverse order. MS Windows adopt BackEnd system. In X, most of
+ |IM-server|s adopt FrontEnd system. The demerit of BackEnd system is the
+ large overhead in communication, but it provides safe synchronization with
+ no restrictions on applications.
+
+ For example, there are xwnmo and kinput2 Japanese |IM-server|, both are
+ FrontEnd system. Xwnmo is distributed with Wnn (see below), kinput2 can be
+ found at: ftp://ftp.sra.co.jp/pub/x11/kinput2/
+
+ For Chinese, there's a great XIM server named "xcin", you can input both
+ Traditional and Simplified Chinese characters. And it can accept other
+ locale if you make a correct input table. Xcin can be found at:
+ http://xcin.linux.org.tw/
+
+- Conversion Server
+ *conversion-server*
+ Some system needs additional server: conversion server. Most of Japanese
+ |IM-server|s need it, Kana-Kanji conversion server. For Chinese inputting,
+ it depends on the method of inputting, in some methods, PinYin or ZhuYin to
+ HanZi conversion server is needed. For Korean inputting, if you want to
+ input Hanja, Hangul-Hanja conversion server is needed.
+
+ For example, the Japanese inputting process is divided into 2 steps. First
+ we pre-input Hira-gana, second Kana-Kanji conversion. There are so many
+ Kanji characters (6349 Kanji characters are defined in JIS X 0208) and the
+ 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).
+
+There is a good input system: Wnn4.2. Wnn 4.2 contains,
+ xwnmo (|IM-server|)
+ jserver (Japanese Kana-Kanji conversion server)
+ cserver (Chinese PinYin or ZhuYin to simplified HanZi conversion server)
+ tserver (Chinese PinYin or ZhuYin to traditional HanZi conversion server)
+ kserver (Hangul-Hanja conversion server)
+Wnn 4.2 for several systems can be found at various places on the internet.
+Use the RPM or port for your system.
+
+
+- Input Style
+ *xim-input-style*
+ When inputting CJK, there are four areas:
+ 1. The area to display of the input while it is being composed
+ 2. The area to display the currently active input mode.
+ 3. The area to display the next candidate for the selection.
+ 4. The area to display other tools.
+
+ The third area is needed when converting. For example, in Japanese
+ inputting, multiple Kanji characters could have the same pronunciation, so
+ a sequence of Hira-gana characters could map to a distinct sequence of Kanji
+ characters.
+
+ The first and second areas are defined in international input of X with the
+ names of "Preedit Area", "Status Area" respectively. The third and fourth
+ areas are not defined and are left to be managed by the |IM-server|. In the
+ international input, four input styles have been defined using combinations
+ of Preedit Area and Status Area: |OnTheSpot|, |OffTheSpot|, |OverTheSpot|
+ and |Root|.
+
+ Currently, GUI Vim support three style, |OverTheSpot|, |OffTheSpot| and
+ |Root|.
+
+*. on-the-spot *OnTheSpot*
+ Preedit Area and Status Area are performed by the client application in
+ the area of application. The client application is directed by the
+ |IM-server| to display all pre-edit data at the location of text
+ insertion. The client registers callbacks invoked by the input method
+ during pre-editing.
+*. over-the-spot *OverTheSpot*
+ Status Area is created in a fixed position within the area of application,
+ in case of Vim, the position is the additional status line. Preedit Area
+ is made at present input position of application. The input method
+ displays pre-edit data in a window which it brings up directly over the
+ text insertion position.
+*. off-the-spot *OffTheSpot*
+ Preedit Area and Status Area are performed in the area of application, in
+ case of Vim, the area is additional status line. The client application
+ provides display windows for the pre-edit data to the input method which
+ displays into them directly.
+*. root-window *Root*
+ Preedit Area and Status Area are outside of the application. The input
+ method displays all pre-edit data in a separate area of the screen in a
+ window specific to the input method.
+
+
+USING XIM *multibyte-input* *E284* *E286* *E287* *E288*
+ *E285* *E291* *E292* *E290* *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
+method doesn't match your Input method, the text will be displayed wrong.
+
+ Note: You can not use IM unless you specify 'guifontset'.
+ Therefore, Latin users, you have to also use 'guifontset'
+ if you use IM.
+
+To input your language you should run the |IM-server| which supports your
+language and |conversion-server| if needed.
+
+The next 3 lines should be put in your ~/.Xdefaults file. They are common for
+all X applications which uses |XIM|. If you already use |XIM|, you can skip
+this. >
+
+ *international: True
+ *.inputMethod: your_input_server_name
+ *.preeditType: your_input_style
+<
+input_server_name is your |IM-server| name (check your |IM-server|
+ manual).
+your_input_style is one of |OverTheSpot|, |OffTheSpot|, |Root|. See
+ also |xim-input-style|.
+
+*international may not necessary if you use X11R6.
+*.inputMethod and *.preeditType are optional if you use X11R6.
+
+For example, when you are using kinput2 as |IM-server|, >
+
+ *international: True
+ *.inputMethod: kinput2
+ *.preeditType: OverTheSpot
+<
+When using |OverTheSpot|, GUI Vim always connects to the IM Server even in
+Normal mode, so you can input your language with commands like "f" and "r".
+But when using one of the other two methods, GUI Vim connects to the IM Server
+only if it is not in Normal mode.
+
+If your IM Server does not support |OverTheSpot|, and if you want to use your
+language with some Normal mode command like "f" or "r", then you should use a
+localized xterm or an xterm which supports |XIM|
+
+If needed, you can set the XMODIFIERS environment variable:
+
+ sh: export XMODIFIERS="@im=input_server_name"
+ csh: setenv XMODIFIERS "@im=input_server_name"
+
+For example, when you are using kinput2 as |IM-server| and sh, >
+
+ export XMODIFIERS="@im=kinput2"
+<
+
+FULLY CONTROLLED XIM
+
+You can fully control XIM, like with IME of MS-Windows (see |multibyte-ime|).
+This is currently only available for the GTK GUI.
+
+Before using fully controlled XIM, one setting is required. Set the
+'imactivatekey' option to the key that is used for the activation of the input
+method. For example, when you are using kinput2 + canna as IM Server, the
+activation key is probably Shift+Space: >
+
+ :set imactivatekey=S-space
+
+See 'imactivatekey' for the format.
+
+==============================================================================
+8. Input on MS-Windows *mbyte-IME*
+
+(Windows IME support) *multibyte-ime* *IME*
+
+{only works Windows GUI and compiled with the |+multi_byte_ime| feature}
+
+To input multibyte characters on Windows, you have to use Input Method Editor
+(IME). In process of your editing text, you must switch status (on/off) of
+IME many many many times. Because IME with status on is hooking all of your
+key inputs, you cannot input 'j', 'k', or almost all of keys to Vim directly.
+
+This |+multi_byte_ime| feature help this. It reduce times of switch status of
+IME manually. In normal mode, there are almost no need working IME, even
+editing multibyte text. So exiting insert mode with ESC, Vim memorize last
+status of IME and force turn off IME. When re-enter insert mode, Vim revert
+IME status to that memorized automatically.
+
+This works on not only insert-normal mode, but also search-command input and
+replace mode.
+The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
+the different input medhods or disable them temporarily.
+
+WHAT IS IME
+ IME is a part of East asian version Windows. That helps you to input
+ multibyte character. English and other language version Windows does not
+ have any IME. (Also there are no need usually.) But there is one that
+ called Microsoft Global IME. Global IME is a part of Internet Explorer
+ 4.0 or above. You can get more information about Global IME, at below
+ URL.
+
+WHAT IS GLOBAL IME *global-ime*
+ Global IME makes capability to input Chinese, Japanese, and Korean text
+ into Vim buffer on any language version of Windows 98, Windows 95, and
+ Windows NT 4.0.
+ On Windows 2000 and XP it should work as well (without downloading). On
+ Windows 2000 Professional, Global IME is built in, and the Input Locales
+ can be added through Control Panel/Regional Options/Input Locales.
+ Please see below URL for detail of Global IME. You can also find various
+ language version of Global IME at same place.
+
+ - Global IME detailed information.
+ http://www.microsoft.com/windows/ie/features/ime.asp
+
+ - Active Input Method Manager (Global IME)
+ http://msdn.microsoft.com/workshop/misc/AIMM/aimm.asp
+
+ Support Global IME is a experimental feature.
+
+NOTE: For IME to work you must make sure the input locales of your language
+are added to your system. The exact location of this depends on the version
+of Windows you use. For example, on my W2P box:
+1. Control Panel
+2. Regional Options
+3. Input Locales Tab
+4. Add Installed input locales -> Chinese(PRC)
+ The default is still English (United Stated)
+
+
+Cursor color when IME or XIM is on *CursorIM*
+ There is a little cute feature for IME. Cursor can indicate status of IME
+ by changing its color. Usually status of IME was indicated by little icon
+ at a corner of desktop (or taskbar). It is not easy to verify status of
+ IME. But this feature help this.
+ This works in the same way when using XIM.
+
+ You can select cursor color when status is on by using highlight group
+ CursorIM. For example, add these lines to your _gvimrc: >
+
+ if has('multi_byte_ime')
+ highlight Cursor guifg=NONE guibg=Green
+ highlight CursorIM guifg=NONE guibg=Purple
+ endif
+<
+ Cursor color with off IME is green. And purple cursor indicates that
+ status is on.
+
+==============================================================================
+9. Input with a keymap *mbyte-keymap*
+
+When the keyboard doesn't produce the characters you want to enter in your
+text, you can use the 'keymap' option. This will translate one or more
+(English) characters to another (non-English) character. This only happens
+when typing text, not when typing Vim commands. This avoids having to switch
+between two keyboard settings.
+
+The value of the 'keymap' option specifies a keymap file to use. The name of
+this file is one of these two:
+
+ keymap/{keymap}_{encoding}.vim
+ keymap/{keymap}.vim
+
+Here {keymap} is the value of the 'keymap' option and {encoding} of the
+'encoding' option. The file name with the {encoding} included is tried first.
+
+'runtimepath' is used to find these files. To see an overview of all
+available keymap files, use this: >
+ :echo globpath(&rtp, "keymap/*.vim")
+
+In Insert and Command-line mode you can use CTRL-^ to toggle between using the
+keyboard map or not. |i_CTRL-^| |c_CTRL-^|
+This flag is remembered for Insert mode with the 'iminsert' option. When
+leaving and entering Insert mode the previous value is used. The same value
+is also used for commands that take a single character argument, like |f| and
+|r|.
+For Command-line mode the flag is NOT remembered. You are expected to type an
+Ex command first, which is ASCII.
+For typing search patterns the 'imsearch' option is used. It can be set to
+use the same value as for 'iminsert'.
+
+It is possible to give the GUI cursor another color when the language mappings
+are being used. This is disabled by default, to avoid that the cursor becomes
+invisible when you use a non-standard background color. Here is an example to
+use a brightly colored cursor: >
+ :highlight Cursor guifg=NONE guibg=Green
+ :highlight lCursor guifg=NONE guibg=Cyan
+<
+ *keymap-file-format* *:loadk* *:loadkeymap* *E105*
+The keymap file looks something like this: >
+
+ " Maintainer: name <email@address>
+ " Last Changed: 2001 Jan 1
+
+ let b:keymap_name = "short"
+
+ loadkeymap
+ a A
+ b B comment
+
+The lines starting with a " are comments and will be ignored. Blank lines are
+also ignored. The lines with the mappings may have a comment after the useful
+text.
+
+The "b:keymap_name" can be set to a short name, which will be shown in the
+status line. The idea is that this takes less room than the value of
+'keymap', which might be long to distinguish between different languages,
+keyboards and encodings.
+
+The actual mappings are in the lines below "loadkeymap". In the example "a"
+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..
+You can check the result with this command: >
+ :lmap
+The two items must be separated by white space. You cannot include white
+space inside an item, use the special names "<Tab>" and "<Space>" instead.
+The length of the two items together must not exceed 200 bytes.
+
+It's possible to have more than one character in the first column. This works
+like a dead key. Example: >
+ 'a á
+Since Vim doesn't know if the next character after a quote is really an "a",
+it will wait for the next character. To be able to insert a single quote,
+also add this line: >
+ '' '
+Since the mapping is defined with |:lnoremap| the resulting quote will not be
+used for the start of another character.
+
+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
+ A <char-97> decimal value
+ A <char-0x61> hexadecimal value
+ A <char-0141> octal value
+ x <Space> special key name
+
+The characters are assumed to be encoded for the current value of 'encoding'.
+It's possible to use ":scriptencoding" when all characters are given
+literally. That doesn't work when using the <char-> construct, because the
+conversion is done on the keymap file, not on the resulting character.
+
+The lines after "loadkeymap" are interpreted with 'cpoptions' set to "C".
+This means that continuation lines are not used and a backslash has a special
+meaning in the mappings. Examples: >
+
+ " a comment line
+ \" x maps " to x
+ \\ y maps \ to y
+
+If you write a keymap file that will be useful for others, consider submitting
+it to the Vim maintainer for inclusion in the distribution:
+<maintainer@vim.org>
+
+
+HEBREW KEYMAP *keymap-hebrew*
+
+This file explains what characters are available in UTF-8 and CP1255 encodings,
+and what the keymaps are to get those characters:
+
+glyph encoding keymap ~
+Char utf-8 cp1255 hebrew hebrewp name ~
+× 0x5d0 0xe0 t a 'alef
+ב 0x5d1 0xe1 c b bet
+×’ 0x5d2 0xe2 d g gimel
+ד 0x5d3 0xe3 s d dalet
+×” 0x5d4 0xe4 v h he
+ו 0x5d5 0xe5 u v vav
+×– 0x5d6 0xe6 z z zayin
+×— 0x5d7 0xe7 j j het
+ט 0x5d8 0xe8 y T tet
+×™ 0x5d9 0xe9 h y yod
+ך 0x5da 0xea l K kaf sofit
+×› 0x5db 0xeb f k kaf
+ל 0x5dc 0xec k l lamed
+× 0x5dd 0xed o M mem sofit
+מ 0x5de 0xee n m mem
+ן 0x5df 0xef i N nun sofit
+×  0x5e0 0xf0 b n nun
+ס 0x5e1 0xf1 x s samech
+×¢ 0x5e2 0xf2 g u `ayin
+×£ 0x5e3 0xf3 ; P pe sofit
+פ 0x5e4 0xf4 p p pe
+×¥ 0x5e5 0xf5 . X tsadi sofit
+צ 0x5e6 0xf6 m x tsadi
+ק 0x5e7 0xf7 e q qof
+ר 0x5e8 0xf8 r r resh
+ש 0x5e9 0xf9 a w shin
+ת 0x5ea 0xfa , t tav
+
+Vowel marks and special punctuation:
+×”Ö° 0x5b0 0xc0 A: A: sheva
+×”Ö± 0x5b1 0xc1 HE HE hataf segol
+×”Ö² 0x5b2 0xc2 HA HA hataf patah
+×”Ö³ 0x5b3 0xc3 HO HO hataf qamats
+×”Ö´ 0x5b4 0xc4 I I hiriq
+×”Öµ 0x5b5 0xc5 AY AY tsere
+×”Ö¶ 0x5b6 0xc6 E E segol
+×”Ö· 0x5b7 0xc7 AA AA patah
+×”Ö¸ 0x5b8 0xc8 AO AO qamats
+×”Ö¹ 0x5b9 0xc9 O O holam
+×”Ö» 0x5bb 0xcb U U qubuts
+×›Ö¼ 0x5bc 0xcc D D dagesh
+×”Ö½ 0x5bd 0xcd ]T ]T meteg
+×”Ö¾ 0x5be 0xce ]Q ]Q maqaf
+בֿ 0x5bf 0xcf ]R ]R rafe
+ב׀ 0x5c0 0xd0 ]p ]p paseq
+×©× 0x5c1 0xd1 SR SR shin-dot
+שׂ 0x5c2 0xd2 SL SL sin-dot
+׃ 0x5c3 0xd3 ]P ]P sof-pasuq
+×° 0x5f0 0xd4 VV VV double-vav
+×± 0x5f1 0xd5 VY VY vav-yod
+ײ 0x5f2 0xd6 YY YY yod-yod
+
+The following are only available in utf-8
+
+Cantillation marks:
+glyph
+Char utf-8 hebrew name
+ב֑ 0x591 C: etnahta
+ב֒ 0x592 Cs segol
+ב֓ 0x593 CS shalshelet
+ב֔ 0x594 Cz zaqef qatan
+ב֕ 0x595 CZ zaqef gadol
+ב֖ 0x596 Ct tipeha
+ב֗ 0x597 Cr revia
+ב֘ 0x598 Cq zarqa
+ב֙ 0x599 Cp pashta
+ב֚ 0x59a C! yetiv
+ב֛ 0x59b Cv tevir
+ב֜ 0x59c Cg geresh
+×‘Ö 0x59d C* geresh qadim
+ב֞ 0x59e CG gershayim
+ב֟ 0x59f CP qarnei-parah
+ב֪ 0x5aa Cy yerach-ben-yomo
+ב֫ 0x5ab Co ole
+ב֬ 0x5ac Ci iluy
+ב֭ 0x5ad Cd dehi
+ב֮ 0x5ae Cn zinor
+ב֯ 0x5af CC masora circle
+
+Combining forms:
+ﬠ 0xfb20 X` Alternative `ayin
+ﬡ 0xfb21 X' Alternative 'alef
+ﬢ 0xfb22 X-d Alternative dalet
+ﬣ 0xfb23 X-h Alternative he
+ﬤ 0xfb24 X-k Alternative kaf
+ﬥ 0xfb25 X-l Alternative lamed
+ﬦ 0xfb26 X-m Alternative mem-sofit
+ﬧ 0xfb27 X-r Alternative resh
+ﬨ 0xfb28 X-t Alternative tav
+﬩ 0xfb29 X-+ Alternative plus
+שׁ 0xfb2a XW shin+shin-dot
+שׂ 0xfb2b Xw shin+sin-dot
+שּׁ 0xfb2c X..W shin+shin-dot+dagesh
+שּׂ 0xfb2d X..w shin+sin-dot+dagesh
+אַ 0xfb2e XA alef+patah
+אָ 0xfb2f XO alef+qamats
+אּ 0xfb30 XI alef+hiriq (mapiq)
+בּ 0xfb31 X.b bet+dagesh
+גּ 0xfb32 X.g gimel+dagesh
+דּ 0xfb33 X.d dalet+dagesh
+הּ 0xfb34 X.h he+dagesh
+וּ 0xfb35 Xu vav+dagesh
+זּ 0xfb36 X.z zayin+dagesh
+טּ 0xfb38 X.T tet+dagesh
+יּ 0xfb39 X.y yud+dagesh
+ךּ 0xfb3a X.K kaf sofit+dagesh
+כּ 0xfb3b X.k kaf+dagesh
+לּ 0xfb3c X.l lamed+dagesh
+מּ 0xfb3e X.m mem+dagesh
+ï­€ 0xfb40 X.n nun+dagesh
+ï­ 0xfb41 X.s samech+dagesh
+ï­ƒ 0xfb43 X.P pe sofit+dagesh
+ï­„ 0xfb44 X.p pe+dagesh
+ï­† 0xfb46 X.x tsadi+dagesh
+ï­‡ 0xfb47 X.q qof+dagesh
+ï­ˆ 0xfb48 X.r resh+dagesh
+ï­‰ 0xfb49 X.w shin+dagesh
+ï­Š 0xfb4a X.t tav+dagesh
+ï­‹ 0xfb4b Xo vav+holam
+בֿ 0xfb4c XRb bet+rafe
+ï­ 0xfb4d XRk kaf+rafe
+ï­Ž 0xfb4e XRp pe+rafe
+ï­ 0xfb4f Xal alef-lamed
+
+==============================================================================
+10. Using UTF-8 *mbyte-utf8* *UTF-8* *utf-8* *utf8*
+ *Unicode* *unicode*
+The Unicode character set was designed to include all characters from other
+character sets. Therefore it is possible to write text in any language using
+Unicode (with a few rarely used languages excluded). And it's mostly possible
+to mix these languages in one file, which is impossible with other encodings.
+
+Unicode can be encoded in several ways. The two most popular ones are UCS-2,
+which uses 16-bit words and UTF-8, which uses one or more bytes for each
+character. Vim can support all of these encodings, but always uses UTF-8
+internally.
+
+Vim has comprehensive UTF-8 support. It appears to work in:
+- xterm with utf-8 support enabled
+- Athena, Motif and GTK GUI
+- MS-Windows GUI
+
+Double-width characters are supported. This works best with 'guifontwide' or
+'guifontset'. When using only 'guifont' the wide characters are drawn in the
+normal width and a space to fill the gap. Note that the 'guifontset' option
+is no longer relevant in the GTK+ 2 GUI.
+
+Up to two combining characters can be used. The combining character is drawn
+on top of the preceding character. When editing text a composing character is
+mostly considered part of the preceding character. For example "x" will
+delete a character and its following composing characters by default. If the
+'delcombine' option is on, then pressing 'x' will delete the combining
+characters, one at a time, then the base character. But when inserting, you
+type the first character and the following composing characters separately,
+after which they will be joined. The "r" command will not allow you to type a
+combining character, because it doesn't know one is coming. Use "R" instead.
+
+Bytes which are not part of a valid UTF-8 byte sequence are handled like a
+single character and displayed as <xx>, where "xx" is the hex value of the
+byte.
+
+Overlong sequences are not handled specially and displayed like a valid
+character. However, search patterns may not match on an overlong sequence.
+(an overlong sequence is where more bytes are used than required for the
+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.
+
+Useful commands:
+- "ga" shows the decimal, hexadecimal and octal value of the character under
+ the cursor. If there are composing characters these are shown too. (if the
+ message is truncated, use ":messages").
+- "g8" shows the bytes used in a UTF-8 character, also the composing
+ characters, as hex numbers.
+- ":set encoding=utf-8 fileencodings=" forces using UTF-8 for all files. The
+ default is to use the current locale for 'encoding' and set 'fileencodings'
+ to automatically the encoding of a file.
+
+
+STARTING VIM
+
+If your current locale is in an utf-8 encoding, Vim will automatically start
+in utf-8 mode.
+
+If you are using another locale: >
+
+ set encoding=utf-8
+
+You might also want to select the font used for the menus. Unfortunately this
+doesn't always work. See the system specific remarks below, and 'langmenu'.
+
+
+USING UTF-8 IN X-Windows *utf-8-in-xwindows*
+
+Note: This section does not apply to the GTK+ 2 GUI.
+
+You need to specify a font to be used. For double-wide characters another
+font is required, which is exactly twice as wide. There are three ways to do
+this:
+
+1. Set 'guifont' and let Vim find a matching 'guifontwide'
+2. Set 'guifont' and 'guifontwide'
+3. Set 'guifontset'
+
+See the documentation for each option for details. Example: >
+
+ :set guifont=-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1
+
+You might also want to set the font used for the menus. This only works for
+Motif. Use the ":hi Menu font={fontname}" command for this. |:highlight|
+
+
+TYPING UTF-8 *utf-8-typing*
+
+If you are using X-Windows, you should find an input method that supports
+utf-8.
+
+If your system does not provide support for typing utf-8, you can use the
+'keymap' feature. This allows writing a keymap file, which defines a utf-8
+character as a sequence of ASCII characters. See |mbyte-keymap|.
+
+Another method is to set the current locale to the language you want to use
+and for which you have a XIM available. Then set 'termencoding' to that
+language and Vim will convert the typed characters to 'encoding' for you.
+
+If everything else fails, you can type any character as four hex bytes: >
+
+ CTRL-V u 1234
+
+"1234" is interpreted as a hex number. You must type four characters, prepend
+a zero if necessary.
+
+
+COMMAND ARGUMENTS *utf-8-char-arg*
+
+Commands like |f|, |F|, |t| and |r| take an argument of one character. For
+UTF-8 this argument may include one or two composing characters. These needs
+to be produced together with the base character, Vim doesn't wait for the next
+character to be typed to find out if it is a composing character or not.
+Using 'keymap' or |:lmap| is a nice way to type these characters.
+
+The commands that search for a character in a line handle composing characters
+as follows. When searching for a character without a composing character,
+this will find matches in the text with or without composing characters. When
+searching for a character with a composing character, this will only find
+matches with that composing character. It was implemented this way, because
+not everybody is able to type a composing character.
+
+
+==============================================================================
+11. Overview of options *mbyte-options*
+
+These options are relevant for editing multi-byte files. Check the help in
+options.txt for detailed information.
+
+'encoding' Encoding used for the keyboard and display. It is also the
+ default encoding for files.
+
+'fileencoding' Encoding of a file. When it's different from 'encoding'
+ conversion is done when reading or writing the file.
+
+'fileencodings' List of possible encodings of a file. When opening a file
+ these will be tried and the first one that doesn't cause an
+ error is used for 'fileencoding'.
+
+'charconvert' Expression used to convert files from one encoding to another.
+
+'formatoptions' The 'm' flag can be included to have formatting break a line
+ at a multibyte character of 256 or higher. Thus is useful for
+ languages where a sequence of characters can be broken
+ anywhere.
+
+'guifontset' The list of font names used for a multi-byte encoding. When
+ this option is not empty, it replaces 'guifont'.
+
+'keymap' Specify the name of a keyboard mapping.
+
+==============================================================================
+
+Contributions specifically for the multi-byte features by:
+ Chi-Deok Hwang <hwang@mizi.co.kr>
+ Nam SungHyun <namsh@lge.com>
+ K.Nagano <nagano@atese.advantest.co.jp>
+ Taro Muraoka <koron@tka.att.ne.jp>
+ Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
new file mode 100644
index 000000000..b5973b031
--- /dev/null
+++ b/runtime/doc/message.txt
@@ -0,0 +1,775 @@
+*message.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+This file contains an alphabetical list of messages and error messages that
+Vim produces. You can use this if you don't understand what the message
+means. It is not complete though.
+
+1. Old messages |:messages|
+2. Error messages |error-messages|
+3. Messages |messages|
+
+==============================================================================
+1. Old messages *:messages* *:mes* *message-history*
+
+The ":messages" command can be used to view previously given messages. This
+is especially useful when messages have been overwritten or truncated. This
+depends on the 'shortmess' option.
+
+The number of remembered messages is fixed at 20.
+
+If you are using translated messages, the first printed line tells who
+maintains the messages or the translations. You can use this to contact the
+maintainer when you spot a mistake.
+
+If you want to find help on a specific (error) message, use the ID at the
+start of the message. For example, to get help on the message: >
+
+ E72: Close error on swap file
+
+or (translated): >
+
+ E72: Errore durante chiusura swap file
+
+Use: >
+
+ :help E72
+
+If you are lazy, it also works without the shift key: >
+
+ :help e72
+
+==============================================================================
+2. Error messages *error-messages*
+
+When an error message is displayed, but it is removed before you could read
+it, you can see it again with: >
+ :echo errmsg
+or view a list of recent messages with: >
+ :messages
+
+
+LIST OF MESSAGES
+ *E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
+ *E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
+ *E323* *E341* *E473* *E570* >
+ Add to read buffer
+ makemap: Illegal mode
+ Cannot create BalloonEval with both message and callback
+ Hangul automata ERROR
+ block was not locked
+ Didn't get block nr {N}?
+ ml_timestamp: Didn't get block 0??
+ pointer block id wrong {N}
+ Updated too many blocks?
+ get_varp ERROR
+ u_undo: line numbers wrong
+ undo list corrupt
+ undo line missing
+ ml_get: cannot find line {N}
+ cannot find line {N}
+ line number out of range: {N} past the end
+ line count wrong in block {N}
+ Internal error
+ fatal error in cs_manage_matches
+
+This is an internal error. If you can reproduce it, please send in a bug
+report. |bugs|
+
+>
+ ATTENTION
+ Found a swap file by the name ...
+
+See |ATTENTION|.
+
+ *E92* >
+ Buffer {N} not found
+
+The buffer you requested does not exist. This can also happen when you have
+wiped out a buffer which contains a mark or is referenced in another way.
+|:bwipeout|
+
+ *E95* >
+ Buffer with this name already exists
+
+You cannot have two buffers with the same name.
+
+ *E72* >
+ Close error on swap file
+
+The |swap-file|, that is used to keep a copy of the edited text, could not be
+closed properly. Mostly harmless.
+
+ *E169* >
+ Command too recursive
+
+This happens when an Ex command executes an Ex command that executes an Ex
+command, etc. This is only allowed 200 times. When it's more there probably
+is an endless loop. Probably a |:execute| or |:source| command is involved.
+
+ *E254* >
+ Cannot allocate color {name}
+
+The color name {name} is unknown. See |gui-colors| for a list of colors that
+are available on most systems.
+
+ *E458* >
+ Cannot allocate colormap entry for "xxxx"
+ Cannot allocate colormap entry, some colors may be incorrect
+
+This means that there are not enough colors available for Vim. It will still
+run, but some of the colors will not appear in the specified color. Try
+stopping other applications that use many colors, or start them after starting
+gvim.
+Netscape is known to consume a lot of colors. You can avoid this by telling
+it to use its own colormap: >
+ netscape -install
+Or tell it to limit to a certain number of colors (64 should work well): >
+ netscape -ncols 64
+This can also be done with a line in your Xdefaults file: >
+ Netscape*installColormap: Yes
+or >
+ Netscape*maxImageColors: 64
+<
+ *E79* >
+ Cannot expand wildcards
+
+A filename contains a strange combination of characters, which causes Vim to
+attempt expanding wildcards but this fails. This does NOT mean that no
+matching file names could be found, but that the pattern was illegal.
+
+ *E459* >
+ Cannot go back to previous directory
+
+While expanding a file name, Vim failed to go back to the previously used
+directory. All file names being used may be invalid now! You need to have
+execute permission on the current directory.
+
+ *E190* *E212* >
+ Cannot open "{filename}" for writing
+ Can't open file for writing
+
+For some reason the file you are writing to cannot be created or overwritten.
+The reason could be that you do not have permission to write in the directory
+or the file name is not valid.
+
+ *E166* >
+ Can't open linked file for writing
+
+You are trying to write to a file which can't be overwritten, and the file is
+a link (either a hard link or a symbolic link). Writing might still be
+possible if the directory that contains the link or the file is writable, but
+Vim now doesn't know if you want to delete the link and write the file in its
+place, or if you want to delete the file itself and write the new file in its
+place. If you really want to write the file under this name, you have to
+manually delete the link or the file, or change the permissions so that Vim
+can overwrite.
+
+ *E46* >
+ Cannot set read-only variable "{name}"
+
+You are trying to assign a value to an argument of a function |a:var| or a Vim
+internal variable |v:var| which is read-only.
+
+ *E90* >
+ Cannot unload last buffer
+
+Vim always requires one buffer to be loaded, otherwise there would be nothing
+to display in the window.
+
+ *E40* >
+ Can't open errorfile <filename>
+
+When using the ":make" or ":grep" commands: The file used to save the error
+messages or grep output cannot be opened. This can have several causes:
+- 'shellredir' has a wrong value.
+- The shell changes directory, causing the error file to be written in another
+ directory. This could be fixed by changing 'makeef', but then the make
+ command is still executed in the wrong directory.
+- 'makeef' has a wrong value.
+- The 'grepprg' or 'makeprg' could not be executed. This cannot always be
+ detected (especially on MS-Windows). Check your $PATH.
+
+ >
+ Can't open file C:\TEMP\VIoD243.TMP
+
+On MS-Windows, this message appears when the output of an external command was
+to be read, but the command didn't run successfully. This can be caused by
+many things. Check the 'shell', 'shellquote', 'shellxquote', 'shellslash' and
+related options. It might also be that the external command was not found,
+there is no different error message for that.
+
+ *E12* >
+ Command not allowed from exrc/vimrc in current dir or tag search
+
+Some commands are not allowed for security reasons. These commands mostly
+come from a .exrc or .vimrc file in the current directory, or from a tags
+file. Also see 'secure'.
+
+ *E74* >
+ Command too complex
+
+A mapping resulted in a very long command string. Could be caused by a
+mapping that indirectly calls itself.
+
+>
+ CONVERSION ERROR
+
+When writing a file and the text "CONVERSION ERROR" appears, this means that
+some bits were lost when converting text from the internally used UTF-8 to the
+format of the file. The file will not be marked unmodified. If you care
+about the loss of information, set the 'fileencoding' option to another value
+that can handle the characters in the buffer and write again. If you don't
+care, you can abandon the buffer or reset the 'modified' option.
+
+ *E302* >
+ Could not rename swap file
+
+When the file name changes, Vim tries to rename the |swap-file| as well.
+This failed and the old swap file is now still used. Mostly harmless.
+
+ *E43* *E44* >
+ Damaged match string
+ Corrupted regexp program
+
+Something inside Vim went wrong and resulted in a corrupted regexp. If you
+know how to reproduce this problem, please report it. |bugs|
+
+ *E208* *E209* *E210* >
+ Error writing to "{filename}"
+ Error closing "{filename}"
+ Error reading "{filename}"
+
+This occurs when Vim is trying to rename a file, but a simple change of file
+name doesn't work. Then the file will be copied, but somehow this failed.
+The result may be that both the original file and the destination file exist
+and the destination file may be incomplete.
+
+>
+ Vim: Error reading input, exiting...
+
+This occurs when Vim cannot read typed characters while input is required.
+Vim got stuck, the only thing it can do is exit. This can happen when both
+stdin and stderr are redirected and executing a script that doesn't exit Vim.
+
+ *E47* >
+ Error while reading errorfile
+
+Reading the error file was not possible. This is NOT caused by an error
+message that was not recognized.
+
+ *E80* >
+ Error while writing
+
+Writing a file was not completed successfully. The file is probably
+incomplete.
+
+ *E13* *E189* >
+ File exists (use ! to override)
+ "{filename}" exists (use ! to override)
+
+You are protected from accidentally overwriting a file. When you want to
+write anyway, use the same command, but add a "!" just after the command.
+Example: >
+ :w /tmp/test
+changes to: >
+ :w! /tmp/test
+<
+ *E139* >
+ File is loaded in another buffer
+
+You are trying to write a file under a name which is also used in another
+buffer. This would result in two versions of the same file.
+
+ *E142* >
+ File not written: Writing is disabled by 'write' option
+
+The 'write' option is off. This makes all commands that try to write a file
+generate this message. This could be caused by a |-m| commandline argument.
+You can switch the 'write' option on with ":set write".
+
+ *E25* >
+ GUI cannot be used: Not enabled at compile time
+
+You are running a version of Vim that doesn't include the GUI code. Therefore
+"gvim" and ":gui" don't work.
+
+ *E49* >
+ Invalid scroll size
+
+This is caused by setting an invalid value for the 'scroll', 'scrolljump' or
+'scrolloff' options.
+
+ *E17* >
+ "{filename}" is a directory
+
+You tried to write a file with the name of a directory. This is not possible.
+You probably need to append a file name.
+
+ *E19* >
+ Mark has invalid line number
+
+You are using a mark that has a line number that doesn't exist. This can
+happen when you have a mark in another file, and some other program has
+deleted lines from it.
+
+ *E219* *E220* >
+ Missing {.
+ Missing }.
+
+Using a {} construct in a file name, but there is a { without a matching } or
+the other way around. It should be used like this: {foo,bar}. This matches
+"foo" and "bar".
+
+ *E315* >
+ ml_get: invalid lnum:
+
+This is an internal Vim error. Please try to find out how it can be
+reproduced, and submit a bug report |bugreport.vim|.
+
+ *E173* >
+ {number} more files to edit
+
+You are trying to exit, while the last item in the argument list has not been
+edited. This protects you from accidentally exiting when you still have more
+files to work on. See |argument-list|. If you do want to exit, just do it
+again and it will work.
+
+ *E23* *E194* >
+ No alternate file
+ No alternate file name to substitute for '#'
+
+The alternate file is not defined yet. See |alternate-file|.
+
+ *E32* >
+ No file name
+
+The current buffer has no name. To write it, use ":w fname". Or give the
+buffer a name with ":file fname".
+
+ *E141* >
+ No file name for buffer {number}
+
+One of the buffers that was changed does not have a file name. Therefore it
+cannot be written. You need to give the buffer a file name: >
+ :buffer {number}
+ :file {filename}
+<
+ *E33* >
+ No previous substitute regular expression
+
+When using the '~' character in a pattern, it is replaced with the previously
+used pattern in a ":substitute" command. This fails when no such command has
+been used yet. See |/~|.
+
+ *E35* >
+ No previous regular expression
+
+When using an empty search pattern, the previous search pattern is used. But
+that is not possible if there was no previous search.
+
+ *E24* >
+ No such abbreviation
+
+You have used an ":unabbreviate" command with an argument which is not an
+existing abbreviation. All variations of this command give the same message:
+":cunabbrev", ":iunabbrev", etc. Check for trailing white space.
+
+>
+ /dev/dsp: No such file or directory
+
+Only given for GTK GUI with Gnome support. Gnome tries to use the audio
+device and it isn't present. You can ignore this error.
+
+ *E31* >
+ No such mapping
+
+You have used an ":unmap" command with an argument which is not an existing
+mapping. All variations of this command give the same message: ":cunmap",
+":unmap!", etc. Check for trailing white space.
+
+ *E37* *E89* >
+ No write since last change (use ! to override)
+ No write since last change for buffer {N} (use ! to override)
+
+You are trying to |abandon| a file that has changes. Vim protects you from
+losing your work. You can either write the changed file with ":w", or, if you
+are sure, |abandon| it anyway, and lose all the changes. This can be done by
+adding a '!' character just after the command you used. Example: >
+ :e other_file
+changes to: >
+ :e! other_file
+<
+ *E162* >
+ No write since last change for buffer "{name}"
+
+This appears when you try to exit Vim while some buffers are changed. You
+will either have to write the changed buffer (with |:w|), or use a command to
+abandon the buffer forcefully, e.g., with ":qa!". Careful, make sure you
+don't throw away changes you really want to keep. You might have forgotten
+about a buffer, especially when 'hidden' is set.
+
+ *E38* >
+ Null argument
+
+Something inside Vim went wrong and resulted in a NULL pointer. If you know
+how to reproduce this problem, please report it. |bugs|
+
+ *E172* >
+ Only one file name allowed
+
+The ":edit" command only accepts one file name. When you want to specify
+several files for editing use ":next" |:next|.
+
+ *E41* *E82* *E83* *E342* >
+ Out of memory!
+ Out of memory! (allocating {number} bytes)
+ Cannot allocate any buffer, exiting...
+ Cannot allocate buffer, using other one...
+
+Oh, oh. You must have been doing something complicated, or some other program
+is consuming your memory. Be careful! Vim is not completely prepared for an
+out-of-memory situation. First make sure that any changes are saved. Then
+try to solve the memory shortage. To stay on the safe side, exit Vim and
+start again. Also see |msdos-limitations|.
+
+ *E339* >
+ Pattern too long
+
+This only happens on systems with 16 bit ints: The compiled regexp pattern is
+longer than about 65000 characters. Try using a shorter pattern.
+
+ *E45* >
+ 'readonly' option is set (use ! to override)
+
+You are trying to write a file that was marked as read-only. To write the
+file anyway, either reset the 'readonly' option, or add a '!' character just
+after the command you used. Example: >
+ :w
+changes to: >
+ :w!
+<
+ *E294* *E295* *E301* >
+ Read error in swap file
+ Seek error in swap file read
+ Oops, lost the swap file!!!
+
+Vim tried to read text from the |swap-file|, but something went wrong. The
+text in the related buffer may now be corrupted! Check carefully before you
+write a buffer. You may want to write it in another file and check for
+differences.
+
+ *E192* >
+ Recursive use of :normal too deep
+
+You are using a ":normal" command, whose argument again uses a ":normal"
+command in a recursive way. This is restricted to 'maxmapdepth' levels. This
+example illustrates how to get this message: >
+ :map gq :normal gq<CR>
+If you type "gq", it will execute this mapping, which will call "gq" again.
+
+ *E22* >
+ Scripts nested too deep
+
+Scripts can be read with the "-s" command-line argument and with the ":source"
+command. The script can then again read another script. This can continue
+for about 14 levels. When more nesting is done, Vim assumes that there is a
+recursive loop somewhere and stops with this error message.
+
+ *E319* >
+ Sorry, the command is not available in this version
+
+You have used a command that is not present in the version of Vim you are
+using. When compiling Vim, many different features can be enabled or
+disabled. This depends on how big Vim has chosen to be and the operating
+system. See |+feature-list| for when which feature is available. The
+|:version| command shows which feature Vim was compiled with.
+
+ *E300* >
+ Swap file already exists (symlink attack?)
+
+This message appears when Vim is trying to open a swap file and finds it
+already exists or finds a symbolic link in its place. This shouldn't happen,
+because Vim already checked that the file doesn't exist. Either someone else
+opened the same file at exactly the same moment (very unlikely) or someone is
+attempting a symlink attack (could happen when editing a file in /tmp or when
+'directory' starts with "/tmp", which is a bad choice).
+
+ *E432* >
+ Tags file not sorted: {file name}
+
+Vim (and Vi) expect tags files to be sorted in ASCII order. Binary searching
+can then be used, which is a lot faster than a linear search. If your tags
+files are not properly sorted, reset the |'tagbsearch'| option.
+This message is only given when Vim detects a problem when searching for a
+tag. Sometimes this message is not given, even thought the tags file is not
+properly sorted.
+
+ *E460* >
+ The resource fork would be lost (add ! to override)
+
+On the Macintosh (classic), when writing a file, Vim attempts to preserve all
+info about a file, including its resource fork. If this is not possible you
+get this error message. Append "!" to the command name to write anyway (and
+lose the info).
+
+ *E424* >
+ Too many different highlighting attributes in use
+
+Vim can only handle about 223 different kinds of highlighting. If you run
+into this limit, you have used too many |:highlight| commands with different
+arguments. A ":highlight link" is not counted.
+
+ *E77* >
+ Too many file names
+
+When expanding file names, more than one match was found. Only one match is
+allowed for the command that was used.
+
+ *E303* >
+ Unable to open swap file for "{filename}", recovery impossible
+
+Vim was not able to create a swap file. You can still edit the file, but if
+Vim unexpected exits the changes will be lost. And Vim may consume a lot of
+memory when editing a big file. You may want to change the 'directory' option
+to avoid this error. See |swap-file|.
+
+ *E140* >
+ Use ! to write partial buffer
+
+When using a range to write part of a buffer, it is unusual to overwrite the
+original file. It is probably a mistake (e.g., when Visual mode was active
+when using ":w"), therefore Vim requires using a ! after the command, e.g.:
+":3,10w!".
+>
+
+ Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type
+ VirtualBinding
+
+Messages like this appear when starting up. This is not a Vim problem, your
+X11 configuration is wrong. You can find a hint on how to solve this here:
+http://groups.yahoo.com/group/solarisonintel/message/12179.
+
+ *W10* >
+ Warning: Changing a readonly file
+
+The file is read-only and you are making a change to it anyway. You can use
+the |FileChangedRO| autocommand event to avoid this message (the autocommand
+must reset the 'readonly' option). See 'modifiable' to completely disallow
+making changes to a file.
+
+ *W13* >
+ Warning: File "{filename}" has been created after editing started
+
+You are editing a file in Vim when it didn't exist, but it does exist now.
+You will have to decide if you want to keep the version in Vim or the newly
+created file. This message is not given when 'buftype' is not empty.
+
+ *W11* >
+ Warning: File "{filename}" has changed since editing started
+
+The file which you have started editing has got another timestamp and the
+contents changed (more precisely: When reading the file again with the current
+option settings and autocommands you would end up with different text). This
+probably means that some other program changed the file. You will have to
+find out what happened, and decide which version of the file you want to keep.
+Set the 'autoread' option if you want to do this automatically.
+This message is not given when 'buftype' is not empty.
+
+There is one situation where you get this message even though there is nothing
+wrong: If you save a file in Windows on the day the daylight saving time
+starts. It can be fixed in one of these ways:
+- Add this line in your autoexec.bat: >
+ SET TZ=-1
+< Adjust the "-1" for your time zone.
+- Disable "automatically adjust clock for daylight saving changes".
+- Just write the file again the next day. Or set your clock to the next day,
+ write the file twice and set the clock back.
+
+ *W12* >
+ Warning: File "{filename}" has changed and the buffer was changed in Vim as well
+
+Like the above, and the buffer for the file was changed in this Vim as well.
+You will have to decide if you want to keep the version in this Vim or the one
+on disk. This message is not given when 'buftype' is not empty.
+
+ *W16* >
+ Warning: Mode of file "{filename}" has changed since editing started
+
+When the timestamp for a buffer was changed and the contents are still the
+same but the mode (permissions) have changed. This usually occurs when
+checking out a file from a version control system, which causes the read-only
+bit to be reset. It should be safe to reload the file. Set 'autoread' to
+automatically reload the file.
+
+ *E211* >
+ Warning: File "{filename}" no longer available
+
+The file which you have started editing has disappeared, or is no longer
+accessible. Make sure you write the buffer somewhere to avoid losing
+changes. This message is not given when 'buftype' is not empty.
+
+ *W14* >
+ Warning: List of file names overflow
+
+You must be using an awful lot of buffers. It's now possible that two buffers
+have the same number, which causes various problems. You might want to exit
+Vim and restart it.
+
+ *E296* *E297* >
+ Seek error in swap file write
+ Write error in swap file
+
+This mostly happens when the disk is full. Vim could not write text into the
+|swap-file|. It's not directly harmful, but when Vim unexpectedly exits some
+text may be lost without recovery being possible. Vim might run out of memory
+when this problem persists.
+
+ *connection-refused* >
+ Xlib: connection to "<machine-name:0.0" refused by server
+
+This happens when Vim tries to connect to the X server, but the X server does
+not allow a connection. The connection to the X server is needed to be able
+to restore the title and for the xterm clipboard support. Unfortunately this
+error message cannot be avoided, except by disabling the |+xterm_clipboard|
+and |+X11| features.
+
+ *E10* >
+ \\ should be followed by /, ? or &
+
+A command line started with a backslash or the range of a command contained a
+backslash in a wrong place. This is often caused by command-line continuation
+being disabled. Remove the 'C' flag from the 'cpoptions' option to enable it.
+
+ *E471* >
+ Argument required
+
+This happens when an Ex command with mandatory argument(s) was executed, but
+no argument has been specified.
+
+ *E474* *E475* >
+ Invalid argument
+
+An Ex command has been executed, but an invalid argument has been specified.
+
+ *E488* >
+ Trailing characters
+
+An argument has been added to an Ex command that does not permit one.
+
+ *E477* *E478* >
+ No ! allowed
+ Don't panic!
+
+You have added a "!" after an Ex command that doesn't permit one.
+
+ *E481* >
+ No range allowed
+
+A range was specified for an Ex command that doesn't permit one. See
+|cmdline-ranges|.
+
+ *E482* *E483* >
+ Can't create file {filename}
+ Can't get temp file name
+
+Vim cannot create a temporary file.
+
+ *E484* *E485* >
+ Can't open file %s"
+ Can't read file %s"
+
+Vim cannot read a temporary file.
+
+ *E464* >
+ Ambiguous use of user-defined command
+
+There are two user-defined commands with a common name prefix, and you used
+Command-line completion to execute one of them. |user-cmd-ambiguous|
+Example: >
+ :command MyCommand1 echo "one"
+ :command MyCommand2 echo "two"
+ :MyCommand
+<
+ *E492* >
+ Not an editor command
+
+You tried to execute a command that is neither an Ex command nor
+a user-defined command.
+
+==============================================================================
+3. Messages *messages*
+
+This is an (incomplete) overview of various messages that Vim gives:
+
+ *hit-enter* *press-enter* *hit-return* *press-return* >
+
+ Hit ENTER or type command to continue
+
+This message is given when there is something on the screen for you to read,
+and the screen is about to be redrawn:
+- After executing an external command (e.g., ":!ls" and "=").
+- Something is displayed on the status line that is longer than the width of
+ the window, or runs into the 'showcmd' or 'ruler' output.
+
+-> Hit <Enter> or <Space> to redraw the screen and continue, without that key
+ being used otherwise.
+-> Hit ":" or any other Normal mode command character to start that command.
+-> Hit <C-Y> to copy (yank) a modeless selection to the clipboard register.
+-> Use a menu. The characters defined for Cmdline-mode are used.
+-> When 'mouse' contains the 'r' flag, clicking the left mouse button works
+ like pressing <Space>. This makes it impossible to select text though.
+-> For the GUI clicking the left mouse button in the last line works like
+ pressing <Space>.
+{Vi: only ":" commands are interpreted}
+
+To reduce the number of hit-enter prompts:
+- Set 'cmdheight' to 2 or higher.
+- Add flags to 'shortmess'.
+- Reset 'showcmd' and/or 'ruler'.
+
+Also see 'mouse'. The hit-enter message is highlighted with the |hl-Question|
+group.
+
+
+ *more-prompt* *pager* >
+ -- More --
+ -- More -- (RET: line, SPACE: page, d: half page, q: quit)
+ -- More -- (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)
+
+This message is given when the screen is filled with messages. It is only
+given when the 'more' option is on. It is highlighted with the |hl-MoreMsg|
+group.
+
+Type effect ~
+ <CR> or <NL> or j or <Down> one more line
+ <BS> or k or <Up> one line back (*)
+ <Space> or <PageDown> next page
+ b or <PageUp> previous page (*)
+ d down half a page
+ u up half a page (*)
+ q, <Esc> or CTRL-C stop the listing
+ : stop the listing and enter a
+ command-line
+ <C-Y> yank (copy) a modeless selection to
+ the clipboard ("* and "+ registers)
+ {menu-entry} what the menu is defined to in
+ Cmdline-mode.
+ <LeftMouse> (**) next page
+
+Any other key causes the meaning of the keys to be displayed.
+
+(*) backwards scrolling is only supported for these commands: >
+ :clist
+(**) Clicking the left mouse button only works:
+ - For the GUI: in the last line of the screen.
+ - When 'r' is included in 'mouse' (but then selecting text won't work).
+
+
+Note: The typed key is directly obtained from the terminal, it is not mapped
+and typeahead is ignored.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
new file mode 100644
index 000000000..3045b46a1
--- /dev/null
+++ b/runtime/doc/mlang.txt
@@ -0,0 +1,205 @@
+*mlang.txt* For Vim version 7.0aa. Last change: 2004 Feb 24
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Multi-language features *multilang* *multi-lang*
+
+This is about using messages and menus in various languages. For editing
+multi-byte text see |multibyte|.
+
+The basics are explained in the user manual: |usr_45.txt|.
+
+1. Messages |multilang-messages|
+2. Menus |multilang-menus|
+3. Scripts |multilang-scripts|
+
+Also see |help-translated| for multi-language help.
+
+{Vi does not have any of these features}
+{not available when compiled without the |+multi_lang| feature}
+
+==============================================================================
+1. Messages *multilang-messages*
+
+Vim picks up the locale from the environment. In most cases this means Vim
+will use the language that you prefer, unless it's not available.
+
+To see a list of supported locale names on your system, look in one of these
+directories (for Unix):
+ /usr/lib/locale ~
+ /usr/share/locale ~
+Unfortunately, upper/lowercase differences matter. Also watch out for the
+use of "-" and "_".
+
+ *:lan* *:lang* *:language* *E197*
+:lan[guage]
+:lan[guage] mes[sages]
+:lan[guage] cty[pe]
+:lan[guage] tim[e]
+ Print the current language (aka locale).
+ With the "messages" argument the language used for
+ messages is printed. Technical: LC_MESSAGES.
+ With the "ctype" argument the language used for
+ character encoding is printed. Technical: LC_CTYPE.
+ With the "time" argument the language used for
+ strftime() is printed. Technical: LC_TIME.
+ Without argument all parts of the locale are printed
+ (this is system dependent).
+ The current language can also be obtained with the
+ |v:lang|, |v:ctype| and |v:lc_time| variables.
+
+:lan[guage] {name}
+:lan[guage] mes[sages] {name}
+:lan[guage] cty[pe] {name}
+:lan[guage] tim[e] {name}
+ Set the current language (aka locale) to {name}.
+ The locale {name} must be a valid locale on your
+ system. Some systems accept aliases like "en" or
+ "en_US", but some only accept the full specification
+ like "en_US.ISO_8859-1".
+ With the "messages" argument the language used for
+ messages is set. This can be different when you want,
+ for example, English messages while editing Japanese
+ text. This sets $LC_MESSAGES.
+ 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
+ $LC_CTYPE.
+ With the "time" argument the language used for time
+ and date messages is set. This affects strftime().
+ This sets $LC_TIME.
+ Without an argument both are set, and additionally
+ $LANG is set.
+ This will make a difference for items that depend on
+ the language (some messages, time and date format).
+ Not fully supported on all systems
+ If this fails there will be an error message. If it
+ succeeds there is no message. Example: >
+ :language
+ Current language: C
+ :language de_DE.ISO_8859-1
+ :language mes
+ Current messages language: de_DE.ISO_8859-1
+ :lang mes en
+<
+
+MS-WINDOWS MESSAGE TRANSLATIONS *win32-gettext*
+
+If you used the self-installing .exe file, message translations should work
+already. Otherwise get the libintl.dll file if you don't have it yet:
+
+ http://sourceforge.net/projects/gettext
+
+This also contains tools xgettext, msgformat and others.
+
+libintl.dll should be placed in same directory with (g)vim.exe, or some
+place where PATH environment value describe. Message files (vim.mo)
+have to be placed in "$VIMRUNTIME/lang/xx/LC_MESSAGES", where "xx" is the
+abbreviation of the language (mostly two letters).
+
+If you write your own translations you need to generate the .po file and
+convert it to a .mo file. You need to get the source distribution and read
+the file "src/po/README.txt".
+
+To overrule the automatic choice of the language, set the $LANG variable to
+the language of your choice. use "en" to disable translations. >
+
+ :let $LANG = 'ja'
+
+(text for Windows by Muraoka Taro)
+
+==============================================================================
+2. Menus *multilang-menus*
+
+See |45.2| for the basics.
+
+Note that if changes have been made to the menus after the translation was
+done, some of the menus may be shown in English. Please try contacting the
+maintainer of the translation and ask him to update it. You can find the
+name and e-mail address of the translator in
+"$VIMRUNTIME/lang/menu_<lang>.vim".
+
+To set the font (or fontset) to use for the menus, use the |:highlight|
+command. Example: >
+
+ :highlight Menu font=k12,r12
+
+
+ALIAS LOCALE NAMES
+
+Unfortunately, the locale names are different on various systems, even though
+they are for the same language and encoding. If you do not get the menu
+translations you expected, check the output of this command: >
+
+ echo v:lang
+
+Now check the "$VIMRUNTIME/lang" directory for menu translation files that use
+a similar language. A difference in a "-" being a "_" already causes a file
+not to be found! Another common difference to watch out for is "iso8859-1"
+versus "iso_8859-1". Fortunately Vim makes all names lowercase, thus you
+don't have to worry about case differences. Spaces are changed to
+underscores, to avoid having to escape them.
+
+If you find a menu translation file for your language with a different name,
+create a file in your own runtime directory to load that one. The name of
+that file could be: >
+
+ ~/.vim/lang/menu_<v:lang>.vim
+
+Check the 'runtimepath' option for directories which are searched. In that
+file put a command to load the menu file with the other name: >
+
+ runtime lang/menu_<other_lang>.vim
+
+
+TRANSLATING MENUS
+
+If you want to do your own translations, you can use the |:menutrans| command,
+explained below. It is recommended to put the translations for one language
+in a Vim script. For a language that has no translation yet, please consider
+becoming the maintainer and make your translations available to all Vim users.
+Send an e-mail to the Vim maintainer <maintainer@vim.org>.
+
+ *:menut* *:menutrans* *:menutranslate*
+:menut[ranslate] clear
+ Clear all menu translations.
+
+:menut[ranslate] {english} {mylang}
+ Translate menu name {english} to {mylang}. All
+ special characters like "&" and "<Tab>" need to be
+ included. Spaces and dots need to be escaped with a
+ backslash, just like in other |:menu| commands.
+
+See the $VIMRUNTIME/lang directory for examples.
+
+To try out your translations you first have to remove all menus. This is how
+you can do it without restarting Vim: >
+ :source $VIMRUNTIME/delmenu.vim
+ :source <your-new-menu-file>
+ :source $VIMRUNTIME/menu.vim
+
+Each part of a menu path is translated separately. The result is that when
+"Help" is translated to "Hilfe" and "Overview" to "Überblick" then
+"Help.Overview" will be translated to "Hilfe.Überblick".
+
+==============================================================================
+3. Scripts *multilang-scripts*
+
+In Vim scripts you can use the |v:lang| variable to get the current language
+(locale). The default value is "C" or comes from the $LANG environment
+variable.
+
+The following example shows how this variable is used in a simple way, to make
+a message adapt to language preferences of the user, >
+
+ :if v:lang =~ "de_DE"
+ : echo "Guten Morgen"
+ :else
+ : echo "Good morning"
+ :endif
+<
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
new file mode 100644
index 000000000..b22413a84
--- /dev/null
+++ b/runtime/doc/motion.txt
@@ -0,0 +1,1191 @@
+*motion.txt* For Vim version 7.0aa. Last change: 2004 May 13
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Cursor motions *cursor-motions* *navigation*
+
+These commands move the cursor position. If the new position is off of the
+screen, the screen is scrolled to show the cursor (see also 'scrolljump' and
+'scrolloff' options).
+
+1. Motions and operators |operator|
+2. Left-right motions |left-right-motions|
+3. Up-down motions |up-down-motions|
+4. Word motions |word-motions|
+5. Text object motions |object-motions|
+6. Text object selection |object-select|
+7. Marks |mark-motions|
+8. Jumps |jump-motions|
+9. Various motions |various-motions|
+
+General remarks:
+
+If you want to know where you are in the file use the "CTRL-G" command
+|CTRL-G| or the "g CTRL-G" command |g_CTRL-G|. If you set the 'ruler' option,
+the cursor position is continuously shown in the status line (which slows down
+Vim a little).
+
+Experienced users prefer the hjkl keys because they are always right under
+their fingers. Beginners often prefer the arrow keys, because they do not
+know what the hjkl keys do. The mnemonic value of hjkl is clear from looking
+at the keyboard. Think of j as an arrow pointing downwards.
+
+The 'virtualedit' option can be set to make it possible to move the cursor to
+positions where there is no character or halfway a character.
+
+==============================================================================
+1. Motions and operators *operator*
+
+The motion commands can be used after an operator command, to have the command
+operate on the text that was moved over. That is the text between the cursor
+position before and after the motion. Operators are generally used to delete
+or change text. The following operators are available:
+
+ |c| c change
+ |d| d delete
+ |y| y yank into register (does not change the text)
+ |~| ~ swap case (only if 'tildeop' is set)
+ |g~| g~ swap case
+ |gu| gu make lowercase
+ |gU| gU make uppercase
+ |!| ! filter through an external program
+ |=| = filter through 'equalprg' or C-indenting if empty
+ |gq| gq text formatting
+ |g?| g? ROT13 encoding
+ |>| > shift right
+ |<| < shift left
+ |zf| zf define a fold
+
+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.
+
+After applying the operator the cursor is mostly left at the start of the text
+that was operated upon. For example, "yfe" doesn't move the cursor, but "yFe"
+moves the cursor leftwards to the "e" where the yank started.
+
+ *linewise* *characterwise*
+The operator either affects whole lines, or the characters between the start
+and end position. Generally, motions that move between lines affect lines
+(are linewise), and motions that move within a line affect characters (are
+characterwise). However, there are some exceptions.
+
+ *exclusive* *inclusive*
+A character motion is either inclusive or exclusive. When inclusive, the start
+and end position of the motion are included in the operation. When exclusive,
+the last character towards the end of the buffer is not included. Linewise
+motions always include the start and end position.
+
+Which motions are linewise, inclusive or exclusive is mentioned below. There
+are however, two general exceptions:
+1. If the motion is exclusive and the end of the motion is in column 1, the
+ end of the motion is moved to the end of the previous line and the motion
+ becomes inclusive. Example: "}" moves to the first line after a paragraph,
+ but "d}" will not include that line.
+2. If the motion is exclusive, the end of the motion is in column 1 and the
+ start of the motion was at or before the first non-blank in the line, the
+ motion becomes linewise. Example: If a paragraph begins with some blanks
+ and you do "d}" while standing on the first non-blank, all the lines of
+ the paragraph are deleted, including the blanks. If you do a put now, the
+ deleted lines will be inserted below the cursor position.
+
+Note that when the operator is pending (the operator command is typed, but the
+motion isn't yet), a special set of mappings can be used. See |:omap|.
+
+Instead of first giving the operator and then a motion you can use Visual
+mode: mark the start of the text with "v", move the cursor to the end of the
+text that is to be affected and then hit the operator. The text between the
+start and the cursor position is highlighted, so you can see what text will
+be operated upon. This allows much more freedom, but requires more key
+strokes and has limited redo functionality. See the chapter on Visual mode
+|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.
+This can be repeated: >
+ d:call search("f")<CR>
+This cannot be repeated: >
+ d:if 1<CR>
+ call search("f")<CR>
+ endif<CR>
+
+
+FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE
+
+When a motion is not of the type you would like to use, you can force another
+type by using "v", "V" or CTRL-V just after the operator.
+Example: >
+ dj
+deletes two lines >
+ dvj
+deletes from the cursor position until the character below the cursor >
+ d<C-V>j
+deletes the character under the cursor and the character below the cursor. >
+
+Be careful with forcing a linewise movement to be used characterwise or
+blockwise, the column may not always be defined.
+
+ *o_v*
+v When used after an operator, before the motion command: Force
+ the operator to work characterwise, also when the motion is
+ linewise. If the motion was linewise, it will become
+ |exclusive|.
+ If the motion already was characterwise, toggle
+ inclusive/exclusive. This can be used to make an exclusive
+ motion inclusive and an inclusive motion exclusive.
+
+ *o_V*
+V When used after an operator, before the motion command: Force
+ the operator to work linewise, also when the motion is
+ characterwise.
+
+ *o_CTRL-V*
+CTRL-V When used after an operator, before the motion command: Force
+ the operator to work blockwise. This works like Visual block
+ mode selection, with the corners defined by the cursor
+ position before and after the motion.
+
+==============================================================================
+2. Left-right motions *left-right-motions*
+
+h or *h*
+<Left> or *<Left>*
+CTRL-H or *CTRL-H* *<BS>*
+<BS> [count] characters to the left. |exclusive| motion.
+ Note: If you prefer <BS> to delete a character, use
+ the mapping:
+ :map CTRL-V<BS> X
+ (to enter "CTRL-V<BS>" type the CTRL-V key, followed
+ by the <BS> key)
+ See |:fixdel| if the <BS> key does not do what you
+ want.
+
+l or *l*
+<Right> or *<Right>* *<Space>*
+<Space> [count] characters to the right. |exclusive| motion.
+
+ *0*
+0 To the first character of the line. |exclusive|
+ motion. When moving up or down, stay in same screen
+ column (if possible).
+
+ *<Home>* *<kHome>*
+<Home> To the first character of the line. |exclusive|
+ motion. When moving up or down, stay in same text
+ column (if possible). Works like "1|", which differs
+ from "0" when the line starts with a <Tab>. {not in
+ Vi}
+
+ *^*
+^ To the first non-blank character of the line.
+ |exclusive| motion.
+
+ *$* *<End>* *<kEnd>*
+$ or <End> To the end of the line. When a count is given also go
+ [count - 1] lines downward |inclusive|.
+ In Visual mode the cursor goes to just after the last
+ character in the line.
+ When 'virtualedit' is active, "$" may move the cursor
+ back from past the end of the line to the last
+ character in the line.
+
+ *g_*
+g_ To the last non-blank character of the line and
+ [count - 1] lines downward |inclusive|. {not in Vi}
+
+ *g0* *g<Home>*
+g0 or g<Home> When lines wrap ('wrap' on): To the first character of
+ the screen line. |exclusive| motion. Differs from
+ "0" when a line is wider than the screen.
+ When lines don't wrap ('wrap' off): To the leftmost
+ character of the current line that is on the screen.
+ Differs from "0" when the first character of the line
+ is not on the screen. {not in Vi}
+
+ *g^*
+g^ When lines wrap ('wrap' on): To the first non-blank
+ character of the screen line. |exclusive| motion.
+ Differs from "^" when a line is wider than the screen.
+ When lines don't wrap ('wrap' off): To the leftmost
+ non-blank character of the current line that is on the
+ screen. Differs from "^" when the first non-blank
+ character of the line is not on the screen. {not in
+ Vi}
+
+ *gm*
+gm Like "g0", but half a screenwidth to the right (or as
+ much as possible). {not in Vi}
+
+ *g$* *g<End>*
+g$ or g<End> When lines wrap ('wrap' on): To the last character of
+ the screen line and [count - 1] screen lines downward
+ |inclusive|. Differs from "$" when a line is wider
+ than the screen.
+ When lines don't wrap ('wrap' off): To the rightmost
+ character of the current line that is visible on the
+ screen. Differs from "$" when the last character of
+ the line is not on the screen or when a count is used.
+ Additionally, vertical movements keep the column,
+ instead of going to the end of the line.
+ {not in Vi}
+
+ *bar*
+| To screen column [count] in the current line.
+ |exclusive| motion.
+
+ *f*
+f{char} To [count]'th occurrence of {char} to the right. The
+ cursor is placed on {char} |inclusive|.
+ {char} can be entered as a digraph |digraph-arg|.
+ When 'encoding' is set to Unicode, composing
+ characters may be used, see |utf-8-char-arg|.
+ |:lmap| mappings apply to {char}. The CTRL-^ command
+ in Insert mode can be used to switch this on/off
+ |i_CTRL-^|.
+
+ *F*
+F{char} To the [count]'th occurrence of {char} to the left.
+ The cursor is placed on {char} |inclusive|.
+ {char} can be entered like with the |f| command.
+
+ *t*
+t{char} Till before [count]'th occurrence of {char} to the
+ right. The cursor is placed on the character left of
+ {char} |inclusive|.
+ {char} can be entered like with the |f| command.
+
+ *T*
+T{char} Till after [count]'th occurrence of {char} to the
+ left. The cursor is placed on the character right of
+ {char} |inclusive|.
+ {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 in opposite direction
+ [count] times.
+
+These commands move the cursor to the specified column in the current line.
+They stop at the first column and at the end of the line, except "$", which
+may move to one of the next lines. See 'whichwrap' option to make some of the
+commands move across line boundaries.
+
+==============================================================================
+3. Up-down motions *up-down-motions*
+
+k or *k*
+<Up> or *<Up>* *CTRL-P*
+CTRL-P [count] lines upward |linewise|.
+
+j or *j*
+<Down> or *<Down>*
+CTRL-J or *CTRL-J*
+<NL> or *<NL>* *CTRL-N*
+CTRL-N [count] lines downward |linewise|.
+
+gk or *gk* *g<Up>*
+g<Up> [count] display lines upward. |exclusive| motion.
+ Differs from 'k' when lines wrap, and when used with
+ an operator, because it's not linewise. {not in Vi}
+
+gj or *gj* *g<Down>*
+g<Down> [count] display lines downward. |exclusive| motion.
+ Differs from 'j' when lines wrap, and when used with
+ an operator, because it's not linewise. {not in Vi}
+
+ *-*
+- <minus> [count] lines upward, on the first non-blank
+ character |linewise|.
+
++ or *+*
+CTRL-M or *CTRL-M* *<CR>*
+<CR> [count] lines downward, on the first non-blank
+ character |linewise|.
+
+ *_*
+_ <underscore> [count] - 1 lines downward, on the first non-blank
+ character |linewise|.
+
+ *G*
+G Goto line [count], default last line, on the first
+ non-blank character |linewise|. If 'startofline' not
+ set, keep the same column.
+
+ *<C-End>*
+<C-End> Goto line [count], default last line, on the last
+ character |inclusive|. {not in Vi}
+
+<C-Home> or *gg* *<C-Home>*
+gg Goto line [count], default first line, on the first
+ non-blank character |linewise|. If 'startofline' not
+ set, keep the same column.
+
+:[range] Set the cursor on the specified line number. If
+ there are several numbers, the last one is used.
+
+ *N%*
+{count}% Go to {count} percentage in the file, on the first
+ non-blank in the line |linewise|. To compute the new
+ line number this formula is used:
+ ({count} * number-of-lines + 99) / 100
+ See also 'startofline' option. {not in Vi}
+
+:[range]go[to] [count] *:go* *:goto* *go*
+[count]go Go to {count} byte in the buffer. Default [count] is
+ one, start of the file. When giving [range], the
+ last number in it used as the byte count. End-of-line
+ characters are counted depending on the current
+ 'fileformat' setting.
+ {not in Vi}
+ {not available when compiled without the
+ |+byte_offset| feature}
+
+These commands move to the specified line. They stop when reaching the first
+or the last line. The first two commands put the cursor in the same column
+(if possible) as it was after the last command that changed the column,
+except after the "$" command, then the cursor will be put on the last
+character of the line.
+
+==============================================================================
+4. Word motions *word-motions*
+
+<S-Right> or *<S-Right>* *w*
+w [count] words forward. |exclusive| motion.
+
+<C-Right> or *<C-Right>* *W*
+W [count] WORDS forward. |exclusive| motion.
+
+ *e*
+e Forward to the end of word [count] |inclusive|.
+
+ *E*
+E Forward to the end of WORD [count] |inclusive|.
+
+<S-Left> or *<S-Left>* *b*
+b [count] words backward. |exclusive| motion.
+
+<C-Left> or *<C-Left>* *B*
+B [count] WORDS backward. |exclusive| motion.
+
+ *ge*
+ge Backward to the end of word [count] |inclusive|.
+
+ *gE*
+gE Backward to the end of WORD [count] |inclusive|.
+
+These commands move over words or WORDS.
+ *word*
+A word consists of a sequence of letters, digits and underscores, or a
+sequence of other non-blank characters, separated with white space (spaces,
+tabs, <EOL>). This can be changed with the 'iskeyword' option.
+ *WORD*
+A WORD consists of a sequence of non-blank characters, separated with white
+space. An empty line is also considered to be a word and a WORD.
+
+A sequence of folded lines is counted for one word of a single character.
+"w" and "W", "e" and "E" move to the start/end of the first word or WORD after
+a range of folded lines. "b" and "B" move to the start of the first word or
+WORD before the fold.
+
+Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is
+on a non-blank. This is because "cw" is interpreted as change-word, and a
+word does not include the following white space. {Vi: "cw" when on a blank
+followed by other blanks changes only the first blank; this is probably a
+bug, because "dw" deletes all the blanks}
+
+Another special case: When using the "w" motion in combination with an
+operator and the last word moved over is at the end of a line, the end of
+that word becomes the end of the operated text, not the first word in the
+next line.
+
+The original Vi implementation of "e" is buggy. For example, the "e" command
+will stop on the first character of a line if the previous line was empty.
+But when you use "2e" this does not happen. In Vim "ee" and "2e" are the
+same, which is more logical. However, this causes a small incompatibility
+between Vi and Vim.
+
+==============================================================================
+5. Text object motions *object-motions*
+
+ *(*
+( [count] sentences backward. |exclusive| motion.
+
+ *)*
+) [count] sentences forward. |exclusive| motion.
+
+ *{*
+{ [count] paragraphs backward. |exclusive| motion.
+
+ *}*
+} [count] paragraphs forward. |exclusive| motion.
+
+ *]]*
+]] [count] sections forward or to the next '{' in the
+ first column. When used after an operator, then the
+ '}' in the first column. |linewise|
+
+ *][*
+][ [count] sections forward or to the next '}' in the
+ first column. |linewise|
+
+ *[[*
+[[ [count] sections backward or to the previous '{' in
+ the first column. |linewise|
+
+ *[]*
+[] [count] sections backward or to the previous '}' in
+ the first column. |linewise|
+
+These commands move over three kinds of text objects.
+
+ *sentence*
+A sentence is defined as ending at a '.', '!' or '?' followed by either the
+end of a line, or by a space or tab. Any number of closing ')', ']', '"'
+and ''' characters may appear after the '.', '!' or '?' before the spaces,
+tabs or end of line. A paragraph and section boundary is also a sentence
+boundary.
+If the 'J' flag is present in 'cpoptions', at least two spaces have to
+follow the punctuation mark; <Tab>s are not recognized as white space.
+The definition of a sentence cannot be changed.
+
+ *paragraph*
+A paragraph begins after each empty line, and also at each of a set of
+paragraph macros, specified by the pairs of characters in the 'paragraphs'
+option. The default is "IPLPPPQPP LIpplpipbp", which corresponds to the
+macros ".IP", ".LP", etc. (These are nroff macros, so the dot must be in the
+first column). A section boundary is also a paragraph boundary. Note that
+this does not include a '{' or '}' in the first column. Also note that a
+blank line (only containing white space) is NOT a paragraph boundary.
+
+ *section*
+A section begins after a form-feed (<C-L>) in the first column and at each of
+a set of section macros, specified by the pairs of characters in the
+'sections' option. The default is "SHNHH HUnhsh", which defines a section to
+start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
+
+The "]" and "[" commands stop at the '{' or '}' in the first column. This is
+useful to find the start or end of a function in a C program. Note that the
+first character of the command determines the search direction and the
+second character the type of brace found.
+
+If your '{' or '}' are not in the first column, and you would like to use "[["
+and "]]" anyway, try these mappings: >
+ :map [[ ?{<CR>w99[{
+ :map ][ /}<CR>b99]}
+ :map ]] j0[[%/{<CR>
+ :map [] k$][%?}<CR>
+[type these literally, see |<>|]
+
+==============================================================================
+6. Text object selection *object-select* *text-objects*
+ *v_a* *v_i*
+
+This is a series of commands that can only be used while in Visual mode or
+after an operator. The commands that start with "a" select "a"n object
+including white space, the commands starting with "i" select an "inner" object
+without white space, or just the white space. Thus the "inner" commands
+always select less text than the "a" commands.
+
+These commands are {not in Vi}.
+These commands are not available when the |+textobjects| feature has been
+disabled at compile time.
+ *v_aw* *aw*
+aw "a word", select [count] words (see |word|).
+ Leading or trailing white space is included, but not
+ counted.
+ When used in Visual linewise mode "aw" switches to
+ Visual characterwise mode.
+
+ *v_iw* *iw*
+iw "inner word", select [count] words (see |word|).
+ White space between words is counted too.
+ When used in Visual linewise mode "iw" switches to
+ Visual characterwise mode.
+
+ *v_aW* *aW*
+aW "a WORD", select [count] WORDs (see |WORD|).
+ Leading or trailing white space is included, but not
+ counted.
+ When used in Visual linewise mode "aW" switches to
+ Visual characterwise mode.
+
+ *v_iW* *iW*
+iW "inner WORD", select [count] WORDs (see |WORD|).
+ White space between words is counted too.
+ When used in Visual linewise mode "iW" switches to
+ Visual characterwise mode.
+
+ *v_as* *as*
+as "a sentence", select [count] sentences (see
+ |sentence|).
+ When used in Visual mode it is made characterwise.
+
+ *v_is* *is*
+is "inner sentence", select [count] sentences (see
+ |sentence|).
+ When used in Visual mode it is made characterwise.
+
+ *v_ap* *ap*
+ap "a paragraph", select [count] paragraphs (see
+ |paragraph|).
+ Exception: a blank line (only containing white space)
+ is also a paragraph boundary.
+ When used in Visual mode it is made linewise.
+
+ *v_ip* *ip*
+ip "inner paragraph", select [count] paragraphs (see
+ |paragraph|).
+ Exception: a blank line (only containing white space)
+ is also a paragraph boundary.
+ When used in Visual mode it is made linewise.
+
+a] *v_a]* *v_a[* *a]* *a[*
+a[ "a [] block", select [count] '[' ']' blocks. This
+ goes backwards to the [count] unclosed '[', and finds
+ the matching ']'. The enclosed text is selected,
+ including the '[' and ']'.
+ When used in Visual mode it is made characterwise.
+
+i] *v_i]* *v_i[* *i]* *i[*
+i[ "inner [] block", select [count] '[' ']' blocks. This
+ goes backwards to the [count] unclosed '[', and finds
+ the matching ']'. The enclosed text is selected,
+ excluding the '[' and ']'.
+ When used in Visual mode it is made characterwise.
+
+a) *v_a)* *a)* *a(*
+a( *v_ab* *v_a(* *ab*
+ab "a block", select [count] blocks, from "[count] [(" to
+ the matching ')', including the '(' and ')' (see
+ |[(|). Does not include white space outside of the
+ parenthesis.
+ When used in Visual mode it is made characterwise.
+
+i) *v_i)* *i)* *i(*
+i( *v_ib* *v_i(* *ib*
+ib "inner block", select [count] blocks, from "[count] [("
+ to the matching ')', excluding the '(' and ')' (see
+ |[(|).
+ When used in Visual mode it is made characterwise.
+
+a> *v_a>* *v_a<* *a>* *a<*
+a< "a <> block", select [count] <> blocks, from the
+ [count]'th unmatched '<' backwards to the matching
+ '>', including the '<' and '>'.
+ When used in Visual mode it is made characterwise.
+
+i> *v_i>* *v_i<* *i>* *i<*
+i< "inner <> block", select [count] <> blocks, from
+ the [count]'th unmatched '<' backwards to the matching
+ '>', excluding the '<' and '>'.
+ When used in Visual mode it is made characterwise.
+
+a} *v_a}* *a}* *a{*
+a{ *v_aB* *v_a{* *aB*
+aB "a Block", select [count] Blocks, from "[count] [{" to
+ the matching '}', including the '{' and '}' (see
+ |[{|).
+ When used in Visual mode it is made characterwise.
+
+i} *v_i}* *i}* *i{*
+i{ *v_iB* *v_i{* *iB*
+iB "inner Block", select [count] Blocks, from "[count] [{"
+ to the matching '}', excluding the '{' and '}' (see
+ |[{|).
+ When used in Visual mode it is made characterwise.
+
+When used after an operator:
+For non-block objects:
+ For the "a" commands: The operator applies to the object and the white
+ space after the object. If there is no white space after the object
+ or when the cursor was in the white space before the object, the white
+ space before the object is included.
+ For the "inner" commands: If the cursor was on the object, the
+ operator applies to the object. If the cursor was on white space, the
+ operator applies to the white space.
+For a block object:
+ The operator applies to the block where the cursor is in, or the block
+ on which the cursor is on one of the braces. For the "inner" commands
+ the surrounding braces are excluded. For the "a" commands, the braces
+ are included.
+
+When used in Visual mode:
+When start and end of the Visual area are the same (just after typing "v"):
+ One object is selected, the same as for using an operator.
+When start and end of the Visual area are not the same:
+ For non-block objects the area is extended by one object or the white
+ space up to the next object, or both for the "a" objects. The
+ direction in which this happens depends on which side of the Visual
+ area the cursor is. For the block objects the block is extended one
+ level outwards.
+
+For illustration, here is a list of delete commands, grouped from small to big
+objects. Note that for a single character and a whole line the existing vi
+movement commands are used.
+ "dl" delete character (alias: "x") |dl|
+ "diw" delete inner word *diw*
+ "daw" delete a word *daw*
+ "diW" delete inner WORD (see |WORD|) *diW*
+ "daW" delete a WORD (see |WORD|) *daW*
+ "dd" delete one line |dd|
+ "dis" delete inner sentence *dis*
+ "das" delete a sentence *das*
+ "dib" delete inner '(' ')' block *dib*
+ "dab" delete a '(' ')' block *dab*
+ "dip" delete inner paragraph *dip*
+ "dap" delete a paragraph *dap*
+ "diB" delete inner '{' '}' block *diB*
+ "daB" delete a '{' '}' block *daB*
+
+Note the difference between using a movement command and an object. The
+movement command operates from here (cursor position) to where the movement
+takes us. When using an object the whole object is operated upon, no matter
+where on the object the cursor is. For example, compare "dw" and "daw": "dw"
+deletes from the cursor position to the start of the next word, "daw" deletes
+the word under the cursor and the space after or before it.
+
+==============================================================================
+7. Marks *mark-motions* *E20* *E78*
+
+Jumping to a mark can be done in two ways:
+1. With ` (backtick): The cursor is positioned at the specified location
+ and the motion is |exclusive|.
+2. With ' (single quote): The cursor is positioned on the first non-blank
+ character in the line of the specified location and
+ the motion is linewise.
+
+ *m* *mark* *Mark*
+m{a-zA-Z} Set mark {a-zA-Z} at cursor position (does not move
+ the cursor, this is not a motion command).
+
+ *m'* *m`*
+m' or m` Set the previous context mark. This can be jumped to
+ with the "''" or "``" command (does not move the
+ cursor, this is not a motion command).
+
+ *m[* *m]*
+m[ or m] Set the |'[| or |']| mark. Useful when an operator is
+ to be simulated by multiple commands. (does not move
+ the cursor, this is not a motion command).
+
+ *:ma* *:mark* *E191*
+:[range]ma[rk] {a-zA-Z} Set mark {a-zA-Z} at last line number in [range],
+ column 0. Default is cursor line.
+
+ *:k*
+:[range]k{a-zA-Z} Same as :mark, but the space before the mark name can
+ be omitted.
+
+ *'* *'a* *`* *`a*
+'{a-z} `{a-z} Jump to the mark {a-z}.
+
+ *'A* *'0* *`A* *`0*
+'{A-Z0-9} `{A-Z0-9} To the mark {A-Z0-9} in the correct file (not a motion
+ command when in another file). {not in Vi}
+
+ *g'* *g'a* *g`* *g`a*
+g'{mark} g`{mark}
+ Jump to the {mark}, but don't change the jumplist when
+ jumping within the current buffer. Example: >
+ g`"
+< jumps to the last known position in a file. See
+ $VIMRUNTIME/vimrc_example.vim. {not in Vi}
+
+ *:marks*
+:marks List all the current marks (not a motion command).
+ The |'(|, |')|, |'{| and |'}| marks are not listed.
+ {not in Vi}
+ *E283*
+:marks {arg} List the marks that are mentioned in {arg} (not a
+ motion command). For example: >
+ :marks aB
+< to list marks 'a' and 'B'. {not in Vi}
+
+A mark is not visible in any way. It is just a position in the file that is
+remembered. Do not confuse marks with named registers, they are totally
+unrelated.
+
+'a - 'z lowercase marks, valid within one file
+'A - 'Z uppercase marks, also called file marks, valid between files
+'0 - '9 numbered marks, set from .viminfo file
+
+Lowercase marks 'a to 'z are remembered as long as the file remains in the
+buffer list. If you remove the file from the buffer list, all its marks are
+lost. If you delete a line that contains a mark, that mark is erased.
+
+To delete a mark: Create a new line, position the mark there, delete the line.
+E.g.: "o<Esc>mxdd". This does change the file though. Using "u" won't work,
+it also restores marks.
+
+Lowercase marks can be used in combination with operators. For example: "d't"
+deletes the lines from the cursor position to mark 't'. Hint: Use mark 't' for
+Top, 'b' for Bottom, etc.. Lowercase marks are restored when using undo and
+redo.
+
+Uppercase marks 'A to 'Z include the file name. {Vi: no uppercase marks} You
+can use them to jump from file to file. You can only use an uppercase mark
+with an operator if the mark is in the current file. The line number of the
+mark remains correct, even if you insert/delete lines or edit another file for
+a moment. When the 'viminfo' option is not empty, uppercase marks are kept in
+the .viminfo file. See |viminfo-file-marks|.
+
+Numbered marks '0 to '9 are quite different. They can not be set directly.
+They are only present when using a viminfo file |viminfo-file|. Basically '0
+is the location of the cursor when you last exited Vim, '1 the last but one
+time, etc. Use the "r" flag in 'viminfo' to specify files for which no
+Numbered mark should be stored. See |viminfo-file-marks|.
+
+
+ *'[* *`[*
+'[ `[ To the first character of the previously changed
+ or yanked text. {not in Vi}
+
+ *']* *`]*
+'] `] To the last character of the previously changed or
+ yanked text. {not in Vi}
+
+After executing an operator the Cursor is put at the beginning of the text
+that was operated upon. After a put command ("p" or "P") the cursor is
+sometimes placed at the first inserted line and sometimes on the last inserted
+character. The four commands above put the cursor at either end. Example:
+After yanking 10 lines you want to go to the last one of them: "10Y']". After
+inserting several lines with the "p" command you want to jump to the lowest
+inserted line: "p']". This also works for text that has been inserted.
+
+Note: After deleting text, the start and end positions are the same, except
+when using blockwise Visual mode. These commands do not work when no change
+was made yet in the current file.
+
+ *'<* *`<*
+'< `< To the first character of the last selected Visual
+ area in the current buffer. {not in Vi}.
+
+ *'>* *`>*
+'> `> To the last character of the last selected Visual
+ area in the current buffer. {not in Vi}.
+
+ *''* *``*
+'' `` To the position before latest jump, or where the last
+ "m'" or "m`" command was given. Not set when the
+ |:keepjumps| command modifier was used.
+ Also see |restore-position|.
+
+ *'quote* *`quote*
+'" `" To the cursor position when last exiting the current
+ buffer. Defaults to the first character of the first
+ line. See |last-position-jump| for how to use this
+ for each opened file.
+ Only one position is remembered per buffer, not one
+ for each window. As long as the buffer is visible in
+ a window the position won't be changed.
+ {not in Vi}.
+
+ *'^* *`^*
+'^ `^ To the position where the cursor was the last time
+ when Insert mode was stopped This is used by the |gi|
+ command. Not set when the |:keepjumps| command
+ modifier was used. {not in Vi}
+
+ *'.* *`.*
+'. `. To the position where the last change was made. The
+ position is at or near where the change started.
+ Sometimes a command is executed as several changes,
+ then the position can be near the end of what the
+ command changed. For example when inserting a word,
+ the position will be on the last character.
+ {not in Vi}
+
+ *'(* *`(*
+'( `( To the start of the current sentence, like the |(|
+ command. {not in Vi}
+
+ *')* *`)*
+') `) To the end of the current sentence, like the |)|
+ command. {not in Vi}
+
+ *'{* *`{*
+'{ `{ To the start of the current paragraph, like the |{|
+ command. {not in Vi}
+
+ *'}* *`}*
+'} `} To the end of the current paragraph, like the |}|
+ command. {not in Vi}
+
+These commands are not marks themselves, but jump to a mark:
+
+ *]'*
+]' [count] times to next line with a lowercase mark below
+ the cursor, on the first non-blank character in the
+ line. {not in Vi}
+
+ *]`*
+]` [count] times to lowercase mark after the cursor. {not
+ in Vi}
+
+ *['*
+[' [count] times to previous line with a lowercase mark
+ before the cursor, on the first non-blank character in
+ the line. {not in Vi}
+
+ *[`*
+[` [count] times to lowercase mark before the cursor.
+ {not in Vi}
+
+
+:loc[kmarks] {command} *:loc* *:lockmarks*
+ Execute {command} without adjusting marks. This is
+ useful when changing text in a way that the line count
+ will be the same when the change has completed.
+ WARNING: When the line count does change, marks below
+ the change will keep their line number, thus move to
+ another text line.
+ These items will not be adjusted for deleted/inserted
+ lines:
+ - lower case letter marks 'a - 'z
+ - upper case letter marks 'A - 'Z
+ - numbered marks '0 - '9
+ - last insert position '^
+ - last change position '.
+ - the Visual area '< and '>
+ - line numbers in placed signs
+ - line numbers in quickfix positions
+ - positions in the |jumplist|
+ - positions in the |tagstack|
+ These items will still be adjusted:
+ - previous context mark ''
+ - the cursor position
+ - the view of a window on a buffer
+ - folds
+ - diffs
+
+:kee[pmarks] {command} *:kee* *:keepmarks*
+ Currently only has effect for the filter command
+ |:range!|:
+ - When the number of lines after filtering is equal to
+ or larger than before, all marks are kept at the
+ same line number.
+ - When the number of lines decreases, the marks in the
+ ilnes that disappeared are deleted.
+ In any case the marks below the filtered text have
+ their line numbers adjusted, thus stick to the text,
+ as usual.
+ When the 'R' flag is missing from 'cpoptions' this has
+ the same effect as using ":keepmarks".
+
+ *:keepj* *:keepjumps*
+:keepj[umps] {command}
+ Do not change the |''|, |'.| and |'^| marks, the
+ |jumplist| or the |changelist|. Useful when making a
+ change or inserting text automatically and the user
+ doesn't want to go to this position. E.g., when
+ updating a "Last change" timestamp: >
+ autocmd BufWritePre,FileWritePre *.abc keepjumps call SetLastChange()
+
+==============================================================================
+8. Jumps *jump-motions*
+
+A "jump" is one of the following commands: "'", "`", "G", "/", "?", "n",
+"N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and
+the commands that start editing a new file. If you make the cursor "jump"
+with one of these commands, the position of the cursor before the jump is
+remembered. You can return to that position with the "''" and "``" command,
+unless the line containing that position was changed or deleted.
+
+ *CTRL-O*
+CTRL-O Go to [count] Older cursor position in jump list
+ (not a motion command). {not in Vi}
+ {not available without the +jumplist feature}
+
+<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}
+
+ *:ju* *:jumps*
+:ju[mps] Print the jump list (not a motion command). {not in
+ Vi} {not available without the +jumplist feature}
+
+ *jumplist*
+Jumps are remembered in a jump list. With the CTRL-O and CTRL-I command you
+can go to cursor positions before older jumps, and back again. Thus you can
+move up and down the list. There is a separate jump list for each window.
+The maximum number of entries is fixed at 100.
+{not available without the +jumplist feature}
+
+For example, after three jump commands you have this jump list:
+
+ jump line col file/line ~
+ 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
+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 ~
+ 2 1 0 some text ~
+ 1 70 0 another line ~
+ > 0 1154 23 end. ~
+ 1 1167 0 foo bar ~
+
+The pointer will be set at the last used jump position. The next CTRL-O
+command will use the entry above it, the next CTRL-I command will use the
+entry below it. If the pointer is below the last entry, this indicates that
+you did not use a CTRL-I or CTRL-O before. In this case the CTRL-O command
+will cause the cursor position to be added to the jump list, so you can get
+back to the position before the CTRL-O. In this case this is line 1167.
+
+With more CTRL-O commands you will go to lines 70 and 1. If you use CTRL-I
+you can go back to 1154 and 1167 again. Note that the number in the "jump"
+column indicates the count for the CTRL-O or CTRL-I command that takes you to
+this position.
+
+If you use a jump command, the current line number is inserted at the end of
+the jump list. If the same line was already in the jump list, it is removed.
+The result is that when repeating CTRL-O you will get back to old positions
+only once.
+
+When the |:keepjumps| command modifier is used, jumps are not stored in the
+jumplist.
+
+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 ~
+ 4 1 0 some text ~
+ 3 70 0 another line ~
+ 2 1167 0 foo bar ~
+ 1 1154 23 end. ~
+ > ~
+
+The line numbers will be adjusted for deleted and inserted lines. This fails
+if you stop editing a file without writing, like with ":n!".
+
+When you split a window, the jumplist will be copied to the new window.
+
+If you have included the ' item in the 'viminfo' option the jumplist will be
+stored in the viminfo file and restored when starting Vim.
+
+
+CHANGE LIST JUMPS *changelist* *change-list-jumps* *E664*
+
+When making a change the cursor position is remembered. One position is
+remembered for every change that can be undone, unless it is close to a
+previous change. Two commands can be used to jump to positions of changes,
+also those that have been undone:
+
+ *g;* *E662*
+g; Go to [count] older position in change list.
+ If [count] is larger than the number of older change
+ positions go to the oldest change.
+ If there is no older change an error message is given.
+ (not a motion command)
+ {not in Vi}
+ {not available without the +jumplist feature}
+
+ *g,* *E663*
+g, Go to [count] newer cursor position in change list.
+ Just like "g;| but in the opposite direction.
+ (not a motion command)
+ {not in Vi}
+ {not available without the +jumplist feature}
+
+When using a count you jump as far back or forward as possible. Thus you can
+use "999g;" to go to the first change for which the position is still
+remembered. The number of entries in the change list is fixed and is the same
+as for the |jumplist|.
+
+When two undo-able changes are in the same line and at a column position less
+than 'textwidth' apart only the last one is remembered. This avoids that a
+sequence of small changes in a line, for example "xxxxx", adds many positions
+to the change list. When 'textwidth' is zero 'wrapmargin' is used. When that
+also isn't set a fixed number of 79 is used. Detail: For the computations
+bytes are used, not characters, to avoid a speed penalty (this only matters
+for multi-byte encodings).
+
+Note that when text has been inserted or deleted the cursor position might be
+a bit different from the position of the change. Especially when lines have
+been deleted.
+
+When the |:keepjumps| command modifier is used the position of a change is not
+remembered.
+
+ *:changes*
+:changes Print the change list. A ">" character indicates the
+ current position. Just after a change it is below the
+ newest entry, indicating that "g;" takes you to the
+ newest entry position. The first column indicates the
+ count needed to take you to this position. Example:
+
+ change line col text ~
+ 3 9 8 bla bla bla
+ 2 11 57 foo is a bar
+ 1 14 54 the latest changed line
+ >
+
+ The "3g;" command takes you to line 9. Then the
+ output of ":changes is:
+
+ change line col text ~
+ > 0 9 8 bla bla bla
+ 1 11 57 foo is a bar
+ 2 14 54 the latest changed line
+
+ Now you can use "g," to go to line 11 and "2g," to go
+ to line 14.
+
+==============================================================================
+9. Various motions *various-motions*
+
+ *%*
+% Find the next item in this line after or under the
+ cursor and jump to its match. |inclusive| motion.
+ Items can be:
+ ([{}]) parenthesis or (curly/square) brackets
+ (this can be changed with the
+ 'matchpairs' option)
+ /* */ start or end of C-style comment
+ #if, #ifdef, #else, #elif, #endif
+ C preprocessor conditionals (when the
+ cursor is on the # or no ([{
+ following)
+ For other items the matchit plugin can be used, see
+ |matchit-install|.
+
+ When 'cpoptions' contains "M" |cpo-M| backslashes
+ before parens and braces are ignored. Without "M" the
+ number of backslashes matters: an even number doesn't
+ match with an odd number. Thus in "( \) )" and "\( (
+ \)" the first and last parenthesis match.
+ When the '%' character is not present in 'cpoptions'
+ |cpo-%|, parens and braces inside double quotes are
+ ignored, unless the number of parens/braces in a line
+ is uneven and this line and the previous one does not
+ end in a backslash. '(', '{', '[', ']', '}' and ')'
+ are also ignored (parens and braces inside single
+ quotes). Note that this works fine for C, but not for
+ Perl, where single quotes are used for strings.
+ No count is allowed ({count}% jumps to a line {count}
+ percentage down the file |N%|). Using '%' on
+ #if/#else/#endif makes the movement linewise.
+
+ *[(*
+[( go to [count] previous unmatched '('.
+ |exclusive| motion. {not in Vi}
+
+ *[{*
+[{ go to [count] previous unmatched '{'.
+ |exclusive| motion. {not in Vi}
+
+ *])*
+]) go to [count] next unmatched ')'.
+ |exclusive| motion. {not in Vi}
+
+ *]}*
+]} go to [count] next unmatched '}'.
+ |exclusive| motion. {not in Vi}
+
+The above four commands can be used to go to the start or end of the current
+code block. It is like doing "%" on the '(', ')', '{' or '}' at the other
+end of the code block, but you can do this from anywhere in the code block.
+Very useful for C programs. Example: When standing on "case x:", "[{" will
+bring you back to the switch statement.
+
+ *]m*
+]m Go to [count] next start of a method (for Java or
+ similar structured language). When not before the
+ start of a method, jump to the start or end of the
+ class. When no '{' is found after the cursor, this is
+ an error. |exclusive| motion. {not in Vi}
+ *]M*
+]M Go to [count] next end of a method (for Java or
+ similar structured language). When not before the end
+ of a method, jump to the start or end of the class.
+ When no '}' is found after the cursor, this is an
+ error. |exclusive| motion. {not in Vi}
+ *[m*
+[m Go to [count] previous start of a method (for Java or
+ similar structured language). When not after the
+ start of a method, jump to the start or end of the
+ class. When no '{' is found before the cursor this is
+ an error. |exclusive| motion. {not in Vi}
+ *[M*
+[M Go to [count] previous end of a method (for Java or
+ similar structured language). When not after the
+ end of a method, jump to the start or end of the
+ class. When no '}' is found before the cursor this is
+ an error. |exclusive| motion. {not in Vi}
+
+The above two commands assume that the file contains a class with methods.
+The class definition is surrounded in '{' and '}'. Each method in the class
+is also surrounded with '{' and '}'. This applies to the Java language. The
+file looks like this: >
+
+ // comment
+ class foo {
+ int method_one() {
+ body_one();
+ }
+ int method_two() {
+ body_two();
+ }
+ }
+Starting with the cursor on "body_two()", using "[m" will jump to the '{' at
+the start of "method_two()" (obviously this is much more useful when the
+method is long!). Using "2[m" will jump to the start of "method_one()".
+Using "3[m" will jump to the start of the class.
+
+ *[#*
+[# go to [count] previous unmatched "#if" or "#else".
+ |exclusive| motion. {not in Vi}
+
+ *]#*
+]# go to [count] next unmatched "#else" or "#endif".
+ |exclusive| motion. {not in Vi}
+
+These two commands work in C programs that contain #if/#else/#endif
+constructs. It brings you to the start or end of the #if/#else/#endif where
+the current line is included. You can then use "%" to go to the matching line.
+
+ *[star* *[/*
+[* or [/ go to [count] previous start of a C comment "/*".
+ |exclusive| motion. {not in Vi}
+
+ *]star* *]/*
+]* or ]/ go to [count] next end of a C comment "*/".
+ |exclusive| motion. {not in Vi}
+
+
+ *H*
+H To line [count] from top (Home) of window (default:
+ first line on the window) on the first non-blank
+ character |linewise|. See also 'startofline' option.
+ Cursor is adjusted for 'scrolloff' option.
+
+ *M*
+M To Middle line of window, on the first non-blank
+ character |linewise|. See also 'startofline' option.
+
+ *L*
+L To line [count] from bottom of window (default: Last
+ line on the window) on the first non-blank character
+ |linewise|. See also 'startofline' option.
+ Cursor is adjusted for 'scrolloff' option.
+
+<LeftMouse> Moves to the position on the screen where the mouse
+ click is |inclusive|. See also |<LeftMouse>|. If the
+ position is in a status line, that window is made the
+ active window and the cursor is not moved. {not in Vi}
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/netbeans.txt b/runtime/doc/netbeans.txt
new file mode 100644
index 000000000..55725e15e
--- /dev/null
+++ b/runtime/doc/netbeans.txt
@@ -0,0 +1,735 @@
+*netbeans.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+
+
+NetBeans ExternalEditor Integration Features *netbeans*
+ *netbeans-support*
+1. Introduction |netbeans-intro|
+2. NetBeans Key Bindings |netbeans-keybindings|
+3. Configuring Vim for NetBeans |netbeans-configure|
+4. Downloading NetBeans |netbeans-download|
+5. Preparing NetBeans for Vim |netbeans-preparation|
+6. Obtaining the External Editor Module |obtaining-exted|
+7. Setting up NetBeans to run with Vim |netbeans-setup|
+8. Messages |netbeans-messages|
+9. Running Vim from NetBeans |netbeans-run|
+10. NetBeans protocol |netbeans-protocol|
+11. Known problems |netbeans-problems|
+
+{Vi does not have any of these features}
+{only available when compiled with the |+netbeans_intg| feature}
+
+==============================================================================
+1. Introduction *netbeans-intro*
+
+NetBeans is an open source Integrated Development Environment developed
+jointly by Sun Microsystems, Inc. and the netbeans.org developer community.
+Initially just a Java IDE, NetBeans has had C, C++, and Fortran support added
+in recent releases.
+
+For more information visit the main NetBeans web site http://www.netbeans.org
+or the NetBeans External Editor site at http://externaleditor.netbeans.org.
+
+Sun Microsystems, Inc. also ships NetBeans under the name Sun ONE Studio.
+Visit http://www.sun.com for more information regarding the Sun ONE Studio
+product line.
+
+Current releases of NetBeans provide full support for Java and limited support
+for C, C++, and Fortran. Current releases of Sun ONE Studio provide full
+support for Java, C, C++, and Fortran.
+
+The interface to NetBeans is also supported by Agide, the A-A-P GUI IDE.
+Agide is very different from NetBeans:
+- Based on Python instead of Java, much smaller footprint and fast startup.
+- Agide is a framework in which many different tools can work together.
+See the A-A-P website for information: http://www.A-A-P.org.
+
+==============================================================================
+2. NetBeans Key Bindings *netbeans-keybindings*
+
+Vim understands a number of key bindings that execute NetBeans commands. These
+are typically all the Function key combinations. To execute a NetBeans command,
+the user must press the Pause key followed by a NetBeans key binding. For
+example, in order to compile a Java file, the NetBeans key binding is "F9". So,
+while in vim, press "Pause F9" to compile a java file. To toggle a breakpoint
+at the current line, press "Pause Shift F8".
+
+The Pause key is Function key 21. If you don't have a working Pause key and
+want to use F8 instead, use: >
+
+ :map <F8> <F21>
+
+The External Editor module dynamically reads the NetBeans key bindings so vim
+should always have the latest key bindings, even when NetBeans changes them.
+
+==============================================================================
+3. Configuring Vim for NetBeans *netbeans-configure*
+
+For more help installing vim, please read |usr_90.txt| in the Vim User Manual.
+
+
+On Unix
+
+When running configure without arguments the NetBeans interface should be
+included. That is, if the configure check to find out if your system supports
+the required features succeeds.
+
+In case you do not want the NetBeans interface you can disable it by
+uncommenting a line with "--disable-netbeans" in the Makefile.
+
+Currently, only gvim is supported in this integration as NetBeans does not
+have means to supply a terminal emulator for the vim command. Furthermore,
+there is only GUI support for GTK, GNOME, 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.
+
+
+On MS-Windows
+
+The Win32 support is now in beta stage.
+
+To use XPM signs on Win32 (e.g. when using with NetBeans) you can compile
+XPM by yourself or use precompiled libraries from http://iamphet.nm.ru/misc/
+(for MS Visual C++) or http://gnuwin32.sourceforge.net (for MinGW).
+
+==============================================================================
+4. Downloading NetBeans *netbeans-download*
+
+The NetBeans IDE is available for download from netbeans.org. You can download
+a released version, download sources, or use CVS to download the current
+source tree. If you choose to download sources, follow directions from
+netbeans.org on building NetBeans.
+
+Depending on the version of NetBeans you download, you may need to do further
+work to get the required External Editor module. This is the module which lets
+NetBeans work with gvim (or xemacs :-). See http://externaleditor.netbeans.org
+for details on downloading this module if your NetBeans release does not have
+it.
+
+For C, C++, and Fortran support you will also need the cpp module. See
+http://cpp.netbeans.org for information regarding this module.
+
+You can also download Sun ONE Studio from Sun Microsystems, Inc for a 30 day
+free trial. See http://www.sun.com for further details.
+
+==============================================================================
+5. Preparing NetBeans for Vim *netbeans-preparation*
+
+In order for NetBeans to work with vim, the NetBeans External Editor module
+must be loaded and enabled. If you have a Sun ONE Studio Enterprise Edition
+then this module should be loaded and enabled. If you have a NetBeans release
+you may need to find another way of obtaining this open source module.
+
+You can check if you have this module by opening the Tools->Options dialog
+and drilling down to the "Modules" list (IDE Configuration->System->Modules).
+If your Modules list has an entry for "External Editor" you must make sure
+it is enabled (the "Enabled" property should have the value "True"). If your
+Modules list has no External Editor see the next section on |obtaining-exted|.
+
+==============================================================================
+6. Obtaining the External Editor Module *obtaining-exted*
+
+There are 2 ways of obtaining the External Editor module. The easiest way
+is to use the NetBeans Update Center to download and install the module.
+Unfortunately, some versions do not have this module in their update
+center. If you cannot download via the update center you will need to
+download sources and build the module. I will try and get the module
+available from the NetBeans Update Center so building will be unnecessary.
+Also check http://externaleditor.netbeans.org for other availability options.
+
+To download the External Editor sources via CVS and build your own module,
+see http://externaleditor.netbeans.org and http://www.netbeans.org.
+Unfortunately, this is not a trivial procedure.
+
+==============================================================================
+7. Setting up NetBeans to run with Vim *netbeans-setup*
+
+Assuming you have loaded and enabled the NetBeans External Editor module
+as described in |netbeans-preparation| all you need to do is verify that
+the gvim command line is properly configured for your environment.
+
+Open the Tools->Options dialog and open the Editing category. Select the
+External Editor. The right hand pane should contain a Properties tab and
+an Expert tab. In the Properties tab make sure the "Editor Type" is set
+to "Vim". In the Expert tab make sure the "Vim Command" is correct.
+
+You should be careful if you change the "Vim Command". There are command
+line options there which must be there for the connection to be properly
+set up. You can change the command name but thats about it. If your gvim
+can be found by your $PATH then the VIM Command can start with "gvim". If
+you don't want gvim searched from your $PATH then hard code in the full
+Unix path name. At this point you should get a gvim for any source file
+you open in NetBeans.
+
+If some files come up in gvim and others (with different file suffixes) come
+up in the default NetBeans editor you should verify the MIME type in the
+Expert tab MIME Type property. NetBeans is MIME oriented and the External
+Editor will only open MIME types specified in this property.
+
+==============================================================================
+8. Messages *netbeans-messages*
+
+These messages are specific for NetBeans:
+
+ *E463*
+Region is guarded, cannot modify
+ NetBeans defines guarded areas in the text, which you cannot
+ change.
+
+ *E656*
+NetBeans dissallows writes of unmodified buffers
+ NetBeans does not support writes of unmodified buffers that
+ were opened from NetBeans.
+
+ *E657*
+Partial writes disallowed for NetBeans buffers
+ NetBeans does not support partial writes for buffers that were
+ opened from NetBeans.
+
+ *E658*
+NetBeans connection lost for this buffer
+ NetBeans has become confused about the state of this file.
+ Rather than risc data corruption, NetBeans has severed the
+ connection for this file. Vim will take over responsibility
+ for saving changes to this file and NetBeans will no longer
+ know of these changes.
+
+==============================================================================
+9. Running Vim from NetBeans *netbeans-run*
+
+NetBeans starts Vim with the |-nb| argument. Three forms can be used, that
+differ in the way the information for the connection is specified:
+
+ -nb={fname} from a file
+ -nb:{hostname}:{addr}:{password} directly
+ -nb from a file or environment
+
+ *E660* *E668*
+For security reasons, the best method is to write the information in a file
+readable only by the user. The name of the file can be passed with the
+"-nb={fname}" argument or, when "-nb" is used without a parameter, the
+environment variable "__NETBEANS_CONINFO". The file must contain these three
+lines, in any order:
+
+ host={hostname}
+ port={addr}
+ auth={password}
+
+Other lines are ignored. The caller of Vim is responsible for deleting the
+file afterwards.
+
+{hostname} is the name of the machine where NetBeans is running. When omitted
+the environment variable "__NETBEANS_HOST" is used or the default "localhost".
+
+{addr} is the port number for NetBeans. When omitted the environment variable
+"__NETBEANS_SOCKET" is used or the default 3219.
+
+{password} is the password for connecting to NetBeans. When omitted the
+environment variable "__NETBEANS_VIM_PASSWORD" is used or "changeme".
+
+==============================================================================
+10. NetBeans protocol *netbeans-protocol*
+
+The communication between NetBeans and Vim uses plain text messages. This
+protocol was first designed to work with the external editor module of
+NetBeans (see http://externaleditor.netbeans.org). Later it was extended to
+work with Agide (A-A-P GUI IDE, see http://www.a-a-p.org). The extensions are
+marked with "version 2.1".
+
+Version 2.2 of the protocol has several minor changes which should only
+affect NetBeans users (ie, not Agide users). However, a bug was fixed which
+could cause confusion. The netbeans_saved() function sent a "save" protocol
+command. In protocol version 2.1 and earlier this was incorrectly interpreted
+as a notification that a write had taken place. In reality, it told NetBeans
+to save the file so multiple writes were being done. This caused various
+problems and has been fixed in 2.2. To decrease the likelyhood of this
+confusion happening again, netbeans_saved() has been renamed to
+netbeans_save_buffer().
+
+The messages are currently sent over a socket. Since the messages are in
+plain UTF-8 text this protocol could also be used with any other communication
+mechanism.
+
+10.1 Kinds of messages |nb-messages|
+10.2 Terms |nb-terms|
+10.3 Commands |nb-commands|
+10.4 Functions and Replies |nb-functions|
+10.5 Events |nb-events|
+10.6 Special messages |nb-special|
+
+*E627* *E628* *E629* *E630* *E631* *E632* *E633* *E634* *E635* *E636*
+*E637* *E638* *E639* *E640* *E641* *E642* *E643* *E644* *E645* *E646*
+*E647* *E648* *E649* *E650* *E651* *E652* *E653* *E654*
+These errors occur when a message violates the protocol.
+
+
+10.1 Kinds of messages *nb-messages*
+
+There are four kinds of messages:
+
+kind direction comment ~
+Command IDE -> editor no reply necessary
+Function IDE -> editor editor must send back a reply
+Reply editor -> IDE only in response to a Function
+Event editor -> IDE no reply necessary
+
+The messages are sent as a single line with a terminating newline character.
+Arguments are separated by a single space. The first item of the message
+depends on the kind of message:
+
+kind first item example ~
+Command bufID:name!seqno 11:showBalloon!123 "text"
+Function bufID:name/seqno 11:getLength/123
+Reply seqno 123 5000
+Event bufID:name=123 11:keyCommand=123 "S-F2"
+
+
+10.2 Terms *nb-terms*
+
+bufID Buffer number. A message may be either for a specific buffer
+ or generic. Generic messages use a bufID of zero. NOTE: this
+ buffer ID is assigned by the IDE, it is not Vim's buffer
+ number. The bufID must be a sequentially rising number,
+ starting at one.
+
+seqno The IDE uses a sequence number for Commands and Functions. A
+ Reply must use the sequence number of the Function that it is
+ associated with. A zero sequence number can be used for
+ Events (the seqno of the last received Command or Function can
+ also be used).
+
+string Argument in double quotes. Text is in UTF-8 encoding. This
+ means ASCII is passed as-is. Special characters are
+ represented with a backslash:
+ \" double quote
+ \n newline
+ \r carriage-return
+ \t tab (optional, also works literally)
+ \\ backslash
+ NUL bytes are not allowed!
+
+boolean Argument with two possible values:
+ T true
+ F false
+
+number Argument with a decimal number.
+
+optnum Argument with either a decimal number or "none" (without the
+ quotes).
+
+offset A number argument that indicates a byte position in a buffer.
+ The first byte has offset zero. Line breaks are counted for
+ how they appear in the file (CR/LF counts for two bytes).
+ Note that a multi-byte character is counted for the number of
+ bytes it takes.
+
+lnum/col Argument with a line number and column number position. The
+ line number starts with one, the column is the byte position,
+ starting with zero. Note that a multi-byte character counts
+ for several columns.
+
+pathname String argument: file name with full path.
+
+
+10.3 Commands *nb-commands*
+
+actionMenuItem Not implemented.
+
+actionSensitivity
+ Not implemented.
+
+addAnno serNum typeNum off len
+ Place an annotation in this buffer.
+ Arguments:
+ serNum number serial number of this placed
+ annotation, used to be able to remove
+ it
+ typeNum number sequence number of the annotation
+ defined with defineAnnoType for this
+ buffer
+ off number offset where annotation is to be placed
+ len number not used
+ In version 2.1 "lnum/col" can be used instead of "off".
+
+balloonResult text
+ Not implemented.
+
+close Close the buffer. This leaves us without current buffer, very
+ dangerous to use!
+
+create Creates a buffer without a name. Replaces the current buffer
+ (it's hidden when it was changed).
+ NetBeans uses this as the first command for a file that is
+ being opened. The sequence of commands could be:
+ create
+ setCaretListener (ignored)
+ setModified (no effect)
+ setContentType (ignored)
+ startDocumentListen
+ setTitle
+ setFullName
+
+defineAnnoType typeNum typeName tooltip glyphFile fg bg
+ Define a type of annotation for this buffer.
+ Arguments:
+ typeNum number sequence number (not really used)
+ typeName string name that identifies this annotation
+ tooltip string not used
+ glyphFile string name of icon file
+ fg optnum foreground color for line highlighting
+ bg optnum background color for line highlighting
+ Vim will define a sign for the annotation.
+ When both "fg" and "bg" are "none" no line highlighting is
+ used (new in version 2.1).
+ When "glyphFile" is empty, no text sign is used (new in
+ version 2.1).
+ When "glyphFile" is one or two characters long, a text sign is
+ defined (new in version 2.1).
+ Note: the annotations will be defined in sequence, and the
+ sequence number is later used with addAnno.
+
+editFile pathname
+ Set the name for the buffer and edit the file "pathname", a
+ string argument.
+ Normal way for the IDE to tell the editor to edit a file. If
+ the IDE is going to pass the file text to the editor use these
+ commands instead:
+ setFullName
+ insert
+ initDone
+ New in version 2.1.
+
+enableBalloonEval
+ Not implemented.
+
+endAtomic End an atomic operation. The changes between "startAtomic"
+ and "endAtomic" can be undone as one operation. But it's not
+ implemented yet. Redraw when necessary.
+
+guard off len
+ Mark an area in the buffer as guarded. This means it cannot
+ be edited. "off" and "len" are numbers and specify the text
+ to be guarded.
+
+initDone Mark the buffer as ready for use. Implicitly makes the buffer
+ the current buffer. Fires the BufReadPost autocommand event.
+
+moveAnnoToFront serNum
+ Not implemented.
+
+netbeansBuffer isNetbeansBuffer
+ If "isNetbeansBuffer" is "T" then this buffer is ``owned'' by
+ NetBeans.
+ New in version 2.2.
+
+putBufferNumber pathname
+ Associate a buffer number with the Vim buffer by the name
+ "pathname", a string argument. To be used when the editor
+ reported editing another file to the IDE and the IDE needs to
+ tell the editor what buffer number it will use for this file.
+ Also marks the buffer as initialized.
+ New in version 2.1.
+
+raise Bring the editor to the foreground.
+ New in version 2.1.
+
+removeAnno serNum
+ Remove a previously place annotation for this buffer.
+ "serNum" is the same number used in addAnno.
+
+save Save the buffer when it was modified. The other side of the
+ interface is expected to write the buffer and invoke
+ "setModified" to reset the "changed" flag of the buffer.
+ The writing is skipped when one of these conditions is true:
+ - 'write' is not set
+ - the buffer is read-only
+ - the buffer does not have a file name
+ - 'buftype' disallows writing
+ New in version 2.2.
+
+setAsUser Not implemented.
+
+setBufferNumber pathname
+ Associate a buffer number with Vim buffer by the name
+ "pathname". To be used when the editor reported editing
+ another file to the IDE and the IDE needs to tell the editor
+ what buffer number it will use for this file.
+ Has the side effect of making the buffer the current buffer.
+ See "putBufferNumber" for a more useful command.
+
+setContentType
+ Not implemented.
+
+setDot off Make the buffer the current buffer and set the cursor at the
+ specified position. If there are folds they are opened to
+ make the cursor line visible.
+ In version 2.1 "lnum/col" can be used instead of "off".
+
+setExitDelay seconds
+ Set the delay for exiting to "seconds", a number.
+ This delay is used to give the IDE a chance to handle things
+ before really exiting. The default delay is two seconds.
+ New in version 2.1.
+
+setFullName pathname
+ Set the file name to be used for a buffer to "pathname", a
+ string argument.
+ Used when the IDE wants to edit a file under control of the
+ IDE. This makes the buffer the current buffer, but does not
+ read the file. "insert" commands will be used next to set the
+ contents.
+
+setLocAndSize Not implemented.
+
+setMark Not implemented.
+
+setModified modified
+ When the boolean argument "modified" is "T" mark the buffer as
+ modified, when it is "F" mark it as unmodified.
+
+setReadOnly Not implemented.
+
+setStyle Not implemented.
+
+setTitle name
+ Set the title for the buffer to "name", a string argument.
+ The title is only used for NetBeans functions, not by Vim.
+
+setVisible visible
+ When the boolean argument "visible" is "T", goto the buffer.
+ The "F" argument does nothing.
+
+showBalloon text
+ Show a balloon (popup window) at the mouse pointer position,
+ containing "text", a string argument. The balloon should
+ disappear when the mouse is moved more than a few pixels.
+ New in version 2.1.
+
+specialKeys Not implemented.
+
+startAtomic Begin an atomic operation. The screen will not be updated
+ until "endAtomic" is given.
+
+startCaretListen
+ Not implemented.
+
+startDocumentListen
+ Mark the buffer to report changes to the IDE with the
+ "insert" and "remove" events. The default is to report
+ changes.
+
+stopCaretListen
+ Not implemented.
+
+stopDocumentListen
+ Mark the buffer to stop reporting changes to the IDE.
+ Opposite of startDocumentListen.
+
+unguard off len
+ Opposite of "guard", remove guarding for a text area.
+
+version Not implemented.
+
+
+10.4 Functions and Replies *nb-functions*
+
+getDot Not implemented.
+
+getCursor Return the current buffer and cursor position.
+ The reply is:
+ seqno bufID lnum col off
+ seqno = sequence number of the function
+ bufID = buffer ID of the current buffer (if this is unknown -1
+ is used)
+ lnum = line number of the cursor (first line is one)
+ col = column number of the cursor (in bytes, zero based)
+ off = offset of the cursor in the buffer (in bytes)
+ New in version 2.1.
+
+getLength Return the length of the buffer in bytes.
+ Reply example for a buffer with 5000 bytes:
+ 123 5000
+ TODO: explain use of partial line.
+
+getMark Not implemented.
+
+getModified When a buffer is specified: Return zero if the buffer does not
+ have changes, one if it does have changes.
+ When no buffer is specified (buffer number zero): Return the
+ number of buffers with changes. When the result is zero it's
+ safe to tell Vim to exit.
+ New in version 2.1.
+
+getText Return the contents of the buffer as a string.
+ Reply example for a buffer with two lines
+ 123 "first line\nsecond line\n"
+ NOTE: docs indicate an offset and length argument, but this is
+ not implemented.
+
+insert off text
+ Insert "text" before position "off". "text" is a string
+ argument, "off" a number.
+ Possible replies:
+ 123 no problem
+ 123 !message failed
+ Note that the message in the reply is not quoted.
+
+remove off length
+ Delete "length" bytes of text at position "off". Both
+ arguments are numbers.
+ Possible replies:
+ 123 no problem
+ 123 !message failed
+ Note that the message in the reply is not quoted.
+
+saveAndExit Perform the equivalent of closing Vim: ":confirm qall".
+ If there are no changed files or the user does not cancel the
+ operation Vim exits and no result is sent back. The IDE can
+ consider closing the connection as a successful result.
+ If the user cancels the operation the number of modified
+ buffers that remains is returned and Vim does not exit.
+ New in version 2.1.
+
+
+10.5 Events *nb-events*
+
+balloonEval off len type
+ The mouse pointer rests on text for a short while. When "len"
+ is zero, there is no selection and the pointer is at position
+ "off". When "len" is non-zero the text from position "off" to
+ "off" + "len" is selected.
+ Only sent after "enableBalloonEval" was used for this buffer.
+ "type" is not yet defined.
+ Not implemented yet.
+
+balloonText text
+ Used when 'ballooneval' is set and the mouse pointer rests on
+ some text for a moment. "text" is a string, the text under
+ the mouse pointer.
+ New in version 2.1.
+
+buttonRelease button lnum col
+ Report which button was pressed and the location of the cursor
+ at the time of the release. Only for buffers that are owned
+ by NetBeans. This event is not sent if the button was
+ released while the mouse was in the status line or in a
+ separator line. If col is less than 1 the button release was
+ in the sign area.
+ New in version 2.2.
+
+fileClosed Not implemented.
+
+fileModified Not implemented.
+
+fileOpened pathname open modified
+ A file was opened by the user.
+ Arguments:
+ pathname string name of the file
+ open boolean always "T"
+ modified boolean always "F"
+
+geometry cols rows x y
+ Report the size and position of the editor window.
+ Arguments:
+ cols number number of text columns
+ rows number number of text rows
+ x number pixel position on screen
+ y number pixel position on screen
+ Only works for Motif.
+
+insert off text
+ Text "text" has been inserted in Vim at position "off".
+ Only fired when enabled, see "startDocumentListen".
+
+invokeAction Not implemented.
+
+keyCommand keyName
+ Reports a special key being pressed with name "keyName", which
+ is a string.
+ Supported key names:
+ F1 function key 1
+ F2 function key 2
+ ...
+ F12 function key 12
+
+ ' ' space (without the quotes)
+ ! exclamation mark
+ ... any other ASCII printable character
+ ~ tilde
+
+ X any unrecognized key
+
+ The key may be prepended by "C", "S" and/or "M" for Control,
+ Shift and Meta (Alt) modifiers. If there is a modifier a dash
+ is used to separate it from the key name. For example:
+ "C-F2".
+ ASCII characters are new in version 2.1.
+
+keyAtPos keyName lnum/col
+ Like "keyCommand" and also report the line number and column
+ of the cursor.
+ New in version 2.1.
+
+killed A file was closed by the user. Only for files that have been
+ assigned a number by the IDE.
+
+newDotAndMark off off
+ Reports the position of the cursor being at "off" bytes into
+ the buffer. Only sent just before a "keyCommand" event.
+
+quit Not implemented.
+
+remove off len
+ Text was deleted in Vim at position "off" with byte length
+ "len".
+ Only fired when enabled, see "startDocumentListen".
+
+revert Not implemented.
+
+save The buffer has been saved and is now unmodified.
+ Only fired when enabled, see "startDocumentListen".
+
+startupDone The editor has finished its startup work and is ready for
+ editing files.
+ New in version 2.1.
+
+unmodified The buffer is now unmodified.
+ Only fired when enabled, see "startDocumentListen".
+
+version vers Report the version of the interface implementation. Vim
+ reports "2.2" (including the quotes).
+
+
+10.6 Special messages *nb-special*
+
+These messages do not follow the style of the messages above. They are
+terminated by a newline character.
+
+ACCEPT Not used.
+
+AUTH password editor -> IDE: First message that the editor sends to the IDE.
+ Must contain the password for the socket server, as specified
+ with the |-nb| argument. No quotes are used!
+
+DISCONNECT IDE -> editor: break the connection. The editor will exit.
+ The IDE must only send this message when there are no unsaved
+ changes!
+
+DETACH IDE -> editor: break the connection without exiting the
+ editor. Used when the IDE exits without bringing down the
+ editor as well.
+ New in version 2.1.
+
+REJECT Not used.
+
+==============================================================================
+11. Known problems *netbeans-problems*
+
+NUL bytes are not possible. For editor -> IDE they will appear as NL
+characters. For IDE -> editor they cannot be inserted.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
new file mode 100644
index 000000000..5dfb582e8
--- /dev/null
+++ b/runtime/doc/options.txt
@@ -0,0 +1,6826 @@
+*options.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Options *options*
+
+1. Setting options |set-option|
+2. Automatically setting options |auto-setting|
+3. Options summary |option-summary|
+
+For an overview of options see help.txt |option-list|.
+
+Vim has a number of internal variables and switches which can be set to
+achieve special effects. These options come in three forms:
+ boolean can only be on or off *boolean* *toggle*
+ number has a numeric value
+ string has a string value
+
+==============================================================================
+1. Setting options *set-option*
+
+ *:se* *:set*
+:se[t] Show all options that differ from their default value.
+
+:se[t] all Show all but terminal options.
+
+:se[t] termcap Show all terminal options. Note that in the GUI the
+ key codes are not shown, because they are generated
+ internally and can't be changed. Changing the terminal
+ codes in the GUI is not useful either...
+
+ *E518* *E519*
+:se[t] {option}? Show value of {option}.
+
+:se[t] {option} Toggle option: set, switch it on.
+ Number option: show value.
+ String option: show value.
+
+:se[t] no{option} Toggle option: Reset, switch it off.
+
+:se[t] {option}! or
+:se[t] inv{option} Toggle option: Invert value. {not in Vi}
+
+ *:set-default* *:set-&* *:set-&vi* *:set-&vim*
+:se[t] {option}& Reset option to its default value. May depend on the
+ current value of 'compatible'. {not in Vi}
+:se[t] {option}&vi Reset option to its Vi default value. {not in Vi}
+:se[t] {option}&vim Reset option to its Vim default value. {not in Vi}
+
+:se[t] all& Set all options, except terminal options, to their
+ default value. The values of 'term', 'lines' and
+ 'columns' are not changed. {not in Vi}
+
+ *:set-args* *E487* *E521*
+:se[t] {option}={value} or
+:se[t] {option}:{value}
+ Set string or number option to {value}.
+ For numeric options the value can be given in decimal,
+ hex (preceded with 0x) or octal (preceded with '0')
+ (hex and octal are only available for machines which
+ have the strtol() function).
+ The old value can be inserted by typing 'wildchar' (by
+ default this is a <Tab> or CTRL-E if 'compatible' is
+ set). See |cmdline-completion|.
+ White space between {option} and '=' is allowed and
+ will be ignored. White space between '=' and {value}
+ is not allowed.
+ See |option-backslash| for using white space and
+ backslashes in {value}.
+
+:se[t] {option}+={value} *:set+=*
+ Add the {value} to a number option, or append the
+ {value} to a string option. When the option is a
+ comma separated list, a comma is added, unless the
+ value was empty.
+ If the option is a list of flags, superfluous flags
+ are removed. Otherwise there is no check for doubled
+ values. You can avoid this by removing a value first.
+ Example: >
+ :set guioptions-=T guioptions+=T
+< Also see |:set-args| above.
+ {not in Vi}
+
+:se[t] {option}^={value} *:set^=*
+ Multiply the {value} to a number option, or prepend
+ the {value} to a string option. When the option is a
+ comma separated list, a comma is added, unless the
+ value was empty.
+ Also see |:set-args| above.
+ {not in Vi}
+
+:se[t] {option}-={value} *:set-=*
+ Subtract the {value} from a number option, or remove
+ the {value} from a string option, if it is there.
+ If the {value} is not found in a string option, there
+ is no error or warning. When the option is a comma
+ separated list, a comma is deleted, unless the option
+ becomes empty.
+ When the option is a list of flags, {value} must be
+ exactly as they appear in the option. Remove flags
+ one by one to avoid problems.
+ Also see |:set-args| above.
+ {not in Vi}
+
+The {option} arguments to ":set" may be repeated. For example: >
+ :set ai nosi sw=3 ts=3
+If you make an error in one of the arguments, an error message will be given
+and the following arguments will be ignored.
+
+ *:set-verbose*
+When 'verbose' is non-zero, displaying an option value will also tell where it
+was last set. Example: >
+ :verbose set shiftwidth cindent?
+ shiftwidth=4
+ Last set from modeline
+ cindent
+ Last set from /usr/local/share/vim/vim60/ftplugin/c.vim
+This is only done when specific option values are requested, not for ":set
+all" or ":set" without an argument.
+When the option was set by hand there is no "Last set" message. There is only
+one value for all local options with the same name. Thus the message applies
+to the option name, not necessarily its value.
+When the option was set while executing a function, user command or
+autocommand, the script in which it was defined is reported.
+Note that an option may also have been set as a side effect of setting
+'compatible'.
+{not available when compiled without the +eval feature}
+
+ *:set-termcap* *E522*
+For {option} the form "t_xx" may be used to set a termcap option. This will
+override the value from the termcap. You can then use it in a mapping. If
+the "xx" part contains special characters, use the <t_xx> form: >
+ :set <t_#4>=^[Ot
+This can also be used to translate a special code for a normal key. For
+example, if Alt-b produces <Esc>b, use this: >
+ :set <M-b>=^[b
+(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.
+
+The listing from ":set" looks different from Vi. Long string options are put
+at the end of the list. The number of options is quite large. The output of
+"set all" probably does not fit on the screen, causing Vim to give the
+|more-prompt|.
+
+ *option-backslash*
+To include white space in a string option value it has to be preceded with a
+backslash. To include a backslash you have to use two. Effectively this
+means that the number of backslashes in an option value is halved (rounded
+down).
+A few examples: >
+ :set tags=tags\ /usr/tags results in "tags /usr/tags"
+ :set tags=tags\\,file results in "tags\,file"
+ :set tags=tags\\\ file results in "tags\ file"
+
+The "|" character separates a ":set" command from a following command. To
+include the "|" in the option value, use "\|" instead. This example sets the
+'titlestring' option to "hi|there": >
+ :set titlestring=hi\|there
+This sets the 'titlestring' option to "hi" and 'iconstring' to "there": >
+ :set titlestring=hi|set iconstring=there
+
+For MS-DOS and WIN32 backslashes in file names are mostly not removed. More
+precise: For options that expect a file name (those where environment
+variables are expanded) a backslash before a normal file name character is not
+removed. But a backslash before a special character (space, backslash, comma,
+etc.) is used like explained above.
+There is one special situation, when the value starts with "\\": >
+ :set dir=\\machine\path results in "\\machine\path"
+ :set dir=\\\\machine\\path results in "\\machine\path"
+ :set dir=\\path\\file results in "\\path\file" (wrong!)
+For the first one the start is kept, but for the second one the backslashes
+are halved. This makes sure it works both when you expect backslashes to be
+halved and when you expect the backslashes to be kept. The third gives a
+result which is probably not what you want. Avoid it.
+
+ *add-option-flags* *remove-option-flags*
+ *E539* *E550* *E551* *E552*
+Some options are a list of flags. When you want to add a flag to such an
+option, without changing the existing ones, you can do it like this: >
+ :set guioptions+=a
+Remove a flag from an option like this: >
+ :set guioptions-=a
+This removes the 'a' flag from 'guioptions'.
+Note that you should add or remove one flag at a time. If 'guioptions' has
+the value "ab", using "set guioptions-=ba" won't work, because the string "ba"
+doesn't appear.
+
+ *:set_env* *expand-env* *expand-environment-var*
+Environment variables in most string options will be expanded. If the
+environment variable exists the '$' and the following environment variable
+name is replaced with its value. If it does not exist the '$' and the name
+are not modified. Any non-id character (not a letter, digit or '_') may
+follow the environment variable name. That character and what follows is
+appended to the value of the environment variable. Examples: >
+ :set term=$TERM.new
+ :set path=/usr/$INCLUDE,$HOME/include,.
+When adding or removing a string from an option with ":set opt-=val" or ":set
+opt+=val" the expansion is done before the adding or removing.
+
+
+Handling of local options *local-options*
+
+Some of the options only apply to a window or buffer. Each window or buffer
+has its own copy of this option, thus can each have their own value. This
+allows you to set 'list' in one window but not in another. And set
+'shiftwidth' to 3 in one buffer and 4 in another.
+
+The following explains what happens to these local options in specific
+situations. You don't really need to know all of this, since Vim mostly uses
+the option values you would expect. Unfortunately, doing what the user
+expects is a bit complicated...
+
+When splitting a window, the local options are copied to the new window. Thus
+right after the split the contents of the two windows look the same.
+
+When editing a new buffer, its local option values must be initialized. Since
+the local options of the current buffer might be specifically for that buffer,
+these are not used. Instead, for each buffer-local option there also is a
+global value, which is used for new buffers. With ":set" both the local and
+global value is changed. With "setlocal" only the local value is changed,
+thus this value is not used when editing a new buffer.
+
+When editing a buffer that has been edited before, the last used window
+options are used again. If this buffer has been edited in this window, the
+values from back then are used. Otherwise the values from the window where
+the buffer was edited last are used.
+
+It's possible to set a local window option specifically for a type of buffer.
+When you edit another buffer in the same window, you don't want to keep
+using these local window options. Therefore Vim keeps a global value of the
+local window options, which is used when editing another buffer. Each window
+has its own copy of these values. Thus these are local to the window, but
+global to all buffers in the window. With this you can do: >
+ :e one
+ :set list
+ :e two
+Now the 'list' option will also be set in "two", since with the ":set list"
+command you have also set the global value. >
+ :set nolist
+ :e one
+ :setlocal list
+ :e two
+Now the 'list' option is not set, because ":set nolist" resets the global
+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.
+
+ *:setl* *:setlocal*
+:setl[ocal] ... Like ":set" but set only the value local to the
+ current buffer or window. Not all options have a
+ local value. If the option does not have a local
+ value the global value is set.
+ With the "all" argument: display all local option's
+ local values.
+ Without argument: Display all local option's local
+ values which are different from the default.
+ When displaying a specific local option, show the
+ local value. For a global option the global value is
+ shown (but that might change in the future).
+ {not in Vi}
+
+:setl[ocal] {option}< Set the local value of {option} to its global value.
+ {not in Vi}
+
+ *:setg* *:setglobal*
+:setg[lobal] ... Like ":set" but set only the global value for a local
+ option without changing the local value.
+ When displaying an option, the global value is shown.
+ With the "all" argument: display all local option's
+ global values.
+ Without argument: display all local option's global
+ values which are different from the default.
+ {not in Vi}
+
+For buffer-local and window-local options:
+ Command global value local value ~
+ :set option=value set set
+ :setlocal option=value - set
+:setglobal option=value set -
+ :set option? - display
+ :setlocal option? - display
+:setglobal option? display -
+
+
+Global options with a local value *global-local*
+
+Options are global when you mostly use one value for all buffers. For some
+global options it's useful to sometimes have a different local value. You can
+set the local value with ":setlocal". That buffer will then use the local
+value, while other buffers continue using the global value.
+
+For example, you have two windows, both on C source code. They use the global
+'makeprg' option. If you do this in one of the two windows: >
+ :set makeprg=gmake
+then the other window will switch to the same value. There is no need to set
+the 'makeprg' option in the other C source window too.
+However, if you start editing a Perl file in a new window, you want to use
+another 'makeprog' for it, without changing the value used for the C source
+files. You use this command: >
+ :setlocal makeprg=perlmake
+You can switch back to using the global value by making the local value empty: >
+ :setlocal makeprg=
+This only works for a string option. For a boolean option you need to use the
+"<" flag, like this: >
+ :setlocal autoread<
+Note that for non-boolean options using "<" copies the global value to the
+local value, it doesn't switch back to using the global value (that matters
+when changing the global value later).
+Note: In the future more global options can be made global-local. Using
+":setlocal" on a global option might work differently then.
+
+
+Setting the filetype
+
+:setf[iletype] {filetype} *:setf* *:setfiletype*
+ Set the 'filetype' option to {filetype}, but only if
+ not done yet in a sequence of (nested) autocommands.
+ This is short for: >
+ :if !did_filetype()
+ : setlocal filetype={filetype}
+ :endif
+< This command is used in a filetype.vim file to avoid
+ setting the 'filetype' option twice, causing different
+ settings and syntax files to be loaded.
+ {not in Vi}
+
+: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.
+ Offers short help for each option. Hit <CR> on the
+ short help to open a help window with more help for
+ the option.
+ Modify the value of the option and hit <CR> on the
+ "set" line to set the new value. For window and
+ buffer specific options, the last accessed window is
+ used to set the option value in, unless this is a help
+ window, in which case the window below help window is
+ used (skipping the option-window).
+ {not available when compiled without the |+eval| or
+ |+autocmd| features}
+
+ *$HOME*
+Using "~" is like using "$HOME", but it is only recognized at the start of an
+option and after a space or comma.
+
+On Unix systems "~user" can be used too. It is replaced by the home directory
+of user "user". Example: >
+ :set path=~mool/include,/usr/include,.
+
+On Unix systems the form "${HOME}" can be used too. The name between {} can
+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'.
+
+NOTE: expanding environment variables and "~/" is only done with the ":set"
+command, not when assigning a value to an option with ":let".
+
+
+Note the maximum length of an expanded option is limited. How much depends on
+the system, mostly it is something like 256 or 1024 characters.
+
+ *:fix* *:fixdel*
+:fix[del] Set the value of 't_kD':
+ 't_kb' is 't_kD' becomes ~
+ CTRL-? CTRL-H
+ not CTRL-? CTRL-?
+
+ (CTRL-? is 0177 octal, 0x7f hex) {not in Vi}
+
+ If your delete key terminal code is wrong, but the
+ code for backspace is alright, you can put this in
+ your .vimrc: >
+ :fixdel
+< This works no matter what the actual code for
+ backspace is.
+
+ If the backspace key terminal code is wrong you can
+ use this: >
+ :if &term == "termname"
+ : set t_kb=^V<BS>
+ : fixdel
+ :endif
+< Where "^V" is CTRL-V and "<BS>" is the backspace key
+ (don't type four characters!). Replace "termname"
+ with your terminal name.
+
+ If your <Delete> key sends a strange key sequence (not
+ CTRL-? or CTRL-H) you cannot use ":fixdel". Then use: >
+ :if &term == "termname"
+ : set t_kD=^V<Delete>
+ :endif
+< Where "^V" is CTRL-V and "<Delete>" is the delete key
+ (don't type eight characters!). Replace "termname"
+ with your terminal name.
+
+ *Linux-backspace*
+ Note about Linux: By default the backspace key
+ produces CTRL-?, which is wrong. You can fix it by
+ putting this line in your rc.local: >
+ echo "keycode 14 = BackSpace" | loadkeys
+<
+ *NetBSD-backspace*
+ Note about NetBSD: If your backspace doesn't produce
+ the right code, try this: >
+ xmodmap -e "keycode 22 = BackSpace"
+< If this works, add this in your .Xmodmap file: >
+ keysym 22 = BackSpace
+< You need to restart for this to take effect.
+
+==============================================================================
+2. Automatically setting options *auto-setting*
+
+Besides changing options with the ":set" command, there are three alternatives
+to set options automatically for one or more files:
+
+1. When starting Vim initializations are read from various places. See
+ |initialization|. Most of them are performed for all editing sessions,
+ and some of them depend on the directory where Vim is started.
+ You can create an initialization file with |:mkvimrc|, |:mkview| and
+ |:mksession|.
+2. If you start editing a new file, the automatic commands are executed.
+ This can be used to set options for files matching a particular pattern and
+ many other things. See |autocommand|.
+3. If you start editing a new file, and the 'modeline' option is on, a
+ number of lines at the beginning and end of the file are checked for
+ modelines. This is explained here.
+
+ *modeline* *vim:* *vi:* *ex:* *E520*
+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
+
+Example: >
+ vi:noai:sw=3 ts=6
+
+The second form (this is compatible with some versions of Vi):
+
+ [text]{white}{vi:|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
+
+Example: >
+ /* 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:").
+
+ *modeline-local*
+The options are set like with ":setlocal": The new value only applies to the
+buffer that contains the window. Although it's possible to set global options
+from a modeline, this is unusual. If you have two windows open and the files
+in it set the same global option to a different value, the result depends on
+which one was opened last.
+
+ *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:
+ vim{vers}: version {vers} or later
+ vim<{vers}: version before {vers}
+ vim={vers}: version {vers}
+ vim>{vers}: version after {vers}
+{vers} is 600 for Vim 6.0 (hundred times the major version plus minor).
+For example, to use a modeline only for Vim 6.0 and later: >
+ /* vim600: set foldmethod=marker: */
+To use a modeline for Vim before version 5.7: >
+ /* vim<570: set sw=4: */
+There can be no blanks between "vim" and the ":".
+
+
+The number of lines that are checked can be set with the 'modelines' option.
+If 'modeline' is off or 'modelines' is 0 no lines are checked.
+
+Note that for the first form all of the rest of the line is used, thus a line
+like: >
+ /* vi:ts=4: */
+will give an error message for the trailing "*/". This line is OK: >
+ /* vi:set ts=4: */
+
+If an error is detected the rest of the line is skipped.
+
+If you want to include a ':' in a set command precede it with a '\'. The
+backslash in front of the ':' will be removed. Example: >
+ /* vi:set dir=c\:\tmp: */
+This sets the 'dir' option to "c:\tmp". Only a single backslash before the
+':' is removed. Thus to include "\:" you have to specify "\\:".
+
+No other commands than "set" are supported, for security reasons (somebody
+might create a Trojan horse text file with modelines).
+
+Hint: If you would like to do something else than setting an option, you could
+define an autocommand that checks the file for a specific string. For
+example: >
+ au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
+And define a function SetVar() that does something with the line containing
+"VAR".
+
+==============================================================================
+3. Options summary *option-summary*
+
+In the list below all the options are mentioned with their full name and with
+an abbreviation if there is one. Both forms may be used.
+
+In this document when a boolean option is "set" that means that ":set option"
+is entered. When an option is "reset", ":set nooption" is used.
+
+For some options there are two default values: The "Vim default", which is
+used when 'compatible' is not set, and the "Vi default", which is used when
+'compatible' is set.
+
+Most options are the same in all windows and buffers. There are a few that
+are specific to how the text is presented in a window. These can be set to a
+different value in each window. For example the 'list' option can be set in
+one window and reset in another for the same text, giving both types of view
+at the same time. There are a few options that are specific to a certain
+file. These can have a different value for each file or buffer. For example
+the 'textwidth' option can be 78 for a normal text file and 0 for a C
+program.
+
+ global one option for all buffers and windows
+ local to window each window has its own copy of this option
+ local to buffer each buffer has its own copy of this option
+
+When creating a new window the option values from the currently active window
+are used as a default value for the window-specific options. For the
+buffer-specific options this depends on the 's' and 'S' flags in the
+'cpoptions' option. If 's' is included (which is the default) the values for
+buffer options are copied from the currently active buffer when a buffer is
+first entered. If 'S' is present the options are copied each time the buffer
+is entered, this is almost like having global options. If 's' and 'S' are not
+present, the options are copied from the currently active buffer when the
+buffer is created.
+
+Not all options are supported in all versions. To test if option "foo" can be
+used with ":set" use "exists('&foo')". This doesn't mean the value is
+actually remembered and works. Some options are hidden, which means that you
+can set them but the value is not remembered. To test if option "foo" is
+really supported use "exists('+foo')".
+
+ *E355*
+A jump table for the options with a short description can be found at |Q_op|.
+
+ *'aleph'* *'al'* *aleph* *Aleph*
+'aleph' 'al' number (default 128 for MS-DOS, 224 otherwise)
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ The ASCII code for the first letter of the Hebrew alphabet. The
+ routine that maps the keyboard in Hebrew mode, both in Insert mode
+ (when hkmap is set) and on the command-line (when hitting CTRL-_)
+ outputs the Hebrew characters in the range [aleph..aleph+26].
+ aleph=128 applies to PC code, and aleph=224 applies to ISO 8859-8.
+ See |rileft.txt|.
+
+ *'allowrevins'* *'ari'* *'noallowrevins'* *'noari'*
+'allowrevins' 'ari' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ Allow CTRL-_ in Insert and Command-line mode. This is default off, to
+ avoid that users that accidentally type CTRL-_ instead of SHIFT-_ get
+ into reverse Insert mode, and don't know how to get out. See
+ 'revins'.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'altkeymap'* *'akm'* *'noaltkeymap'* *'noakm'*
+'altkeymap' 'akm' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+farsi|
+ feature}
+ When on, the second language is Farsi. In editing mode CTRL-_ toggles
+ the keyboard map between Farsi and English, when 'allowrevins' set.
+
+ When off, the keyboard map toggles between Hebrew and English. This
+ is useful to start the Vim in native mode i.e. English (left-to-right
+ mode) and have default second language Farsi or Hebrew (right-to-left
+ mode). See |farsi.txt|.
+
+ *'ambiwidth'* *'ambw'*
+'ambiwidth' 'ambw' string (default: "single")
+ global
+ {not in Vi}
+ {only available when compiled with the |+multi_byte|
+ feature}
+ Only effective when 'encoding' is "utf-8" or another Unicode encoding.
+ Tells Vim what to do with characters with East Asian Width Class
+ Ambiguous (such as Euro, Registered Sign, Copyright Sign, Greek
+ letters, Cyrillic letters).
+
+ There are currently two possible values:
+ "single": Use the same width as characters in US-ASCII. This is
+ expected by most users.
+ "double": Use twice the width of ASCII characters.
+
+ There are a number of CJK fonts for which the width of glyphs for
+ those characters are solely based on how many octets they take in
+ legacy/traditional CJK encodings. In those encodings, Euro,
+ Registered sign, Greek/Cyrillic letters are represented by two octets,
+ therefore those fonts have "wide" glyphs for them. This is also
+ true of some line drawing characters used to make tables in text
+ file. Therefore, when a CJK font is used for GUI Vim or
+ Vim is running inside a terminal (emulators) that uses a CJK font
+ (or Vim is run inside an xterm invoked with "-cjkwidth" option.),
+ this option should be set to "double" to match the width perceived
+ by Vim with the width of glyphs in the font. Perhaps it also has
+ to be set to "double" under CJK Windows 9x/ME or Windows 2k/XP
+ when the system locale is set to one of CJK locales. See Unicode
+ Standard Annex #11 (http://www.unicode.org/reports/tr11).
+
+ *'antialias'* *'anti'* *'noantialias'* *'noanti'*
+'antialias' 'anti' boolean (default: off)
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled
+ on Mac OS X}
+ This option only has an effect in the GUI version of Vim on Mac OS X
+ v10.2 or later. When on, Vim will use smooth ("antialiased") fonts,
+ which can be easier to read at certain sizes on certain displays.
+ Setting this option can sometimes cause problems if 'guifont' is set
+ to its default (empty string).
+
+ *'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
+'autochdir' 'acd' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the
+ |+netbeans_intg| or |+sun_workshop| feature}
+ When on, Vim will change its value for the current working directory
+ whenever you open a file, switch buffers, delete a buffer or
+ open/close a window. It will change to the directory containing the
+ file which was opened or selected. This option is provided for
+ backward compatibility with the Vim released with Sun ONE Studio 4
+ Enterprise Edition.
+
+ *'arabic'* *'arab'* *'noarabic'* *'noarab'*
+'arabic' 'arab' boolean (default off)
+ local to window
+ {not in Vi}
+ {only available when compiled with the |+arabic|
+ feature}
+ This option can be set to start editing Arabic text.
+ Setting this option will:
+ - Set the 'rightleft' option, unless 'termbidi' is set.
+ - Set the 'arabicshape' option, unless 'termbidi' is set.
+ - Set the 'keymap' option to "arabic"; in Insert mode CTRL-^ toggles
+ between typing English and Arabic key mapping.
+ - Set the 'delcombine' option
+ Note that 'encoding' must be "utf-8" for working with Arabic text.
+
+ Resetting this option will:
+ - 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.
+ Also see |arabic.txt|.
+
+ *'arabicshape'* *'arshape'*
+ *'noarabicshape'* *'noarshape'*
+'arabicshape' 'arshape' boolean (default on)
+ global
+ {not in Vi}
+ {only available when compiled with the |+arabic|
+ 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
+ one which encompasses:
+ a) the changing/morphing of characters based on their location
+ within a word (initial, medial, final and stand-alone).
+ b) the enabling of the ability to compose characters
+ c) the enabling of the required combining of some characters
+ When disabled the character display reverts back to each character's
+ true stand-alone form.
+ Arabic is a complex language which requires other settings, for
+ further details see |arabic.txt|.
+
+ *'autoindent'* *'ai'* *'noautoindent'* *'noai'*
+'autoindent' 'ai' boolean (default off)
+ local to buffer
+ Copy indent from current line when starting a new line (typing <CR>
+ in Insert mode or when using the "o" or "O" command). If you do not
+ type anything on the new line except <BS> or CTRL-D and then type
+ <Esc> or <CR>, the indent is deleted again. When autoindent is on,
+ formatting (with the "gq" command or when you reach 'textwidth' in
+ Insert mode) uses the indentation of the first line.
+ When 'smartindent' or 'cindent' is on the indent is changed in
+ a different way.
+ The 'autoindent' option is reset when the 'paste' option is set.
+ {small difference from Vi: After the indent is deleted when typing
+ <Esc> or <CR>, the cursor position when moving up or down is after the
+ deleted indent; Vi puts the cursor somewhere in the deleted indent}.
+
+ *'autoread'* *'ar'* *'noautoread'* *'noar'*
+'autoread' 'ar' boolean (default off)
+ global or local to buffer |global-local|
+ {not in Vi}
+ When a file has been detected to have been changed outside of Vim and
+ it has not been changed inside of Vim, automatically read it again.
+ When the file has been deleted this is not done. |timestamp|
+ If this option has a local value, use this command to switch back to
+ using the global value: >
+ :set autoread<
+<
+ *'autowrite'* *'aw'* *'noautowrite'* *'noaw'*
+'autowrite' 'aw' boolean (default off)
+ global
+ Write the contents of the file, if it has been modified, on each
+ :next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
+ :make, CTRL-] and CTRL-^ command; and when a CTRL-O, CTRL-I,
+ '{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
+ Note that for some commands the 'autowrite' option is not used, see
+ 'autowriteall' for that.
+
+ *'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
+'autowriteall' 'awa' boolean (default off)
+ global
+ {not in Vi}
+ Like 'autowrite', but also used for commands ":edit", ":enew", ":quit",
+ ":qall", ":exit", ":xit", ":recover" and closing the Vim window.
+ Setting this option also implies that Vim behaves like 'autowrite' has
+ been set.
+
+ *'background'* *'bg'*
+'background' 'bg' string (default "dark" or "light")
+ global
+ {not in Vi}
+ When set to "dark", Vim will try to use colors that look good on a
+ dark background. When set to "light", Vim will try to use colors that
+ look good on a light background. Any other value is illegal.
+ Vim tries to set the default value according to the terminal used.
+ This will not always be correct.
+ Setting this option does not change the background color, it tells Vim
+ what the background color looks like. For changing the background
+ color, see |:hi-normal|.
+
+ When 'background' is set Vim will adjust the default color groups for
+ the new value. But the colors used for syntax highlighting will not
+ change.
+ When a color scheme is loaded (the "colors_name" variable is set)
+ setting 'background' will cause the color scheme to be reloaded. If
+ the color scheme adjusts to the value of 'background' this will work.
+ However, if the color scheme sets 'background' itself the effect may
+ be undone. First delete the "colors_name" variable when needed.
+
+ When setting 'background' to the default value with: >
+ :set background&
+< Vim will guess the value. In the GUI this should work correctly,
+ in other cases Vim might not be able to guess the right value.
+
+ When starting the GUI, the default value for 'background' will be
+ "light". When the value is not set in the .gvimrc, and Vim detects
+ that the background is actually quite dark, 'background' is set to
+ "dark". But this happens only AFTER the .gvimrc file has been read
+ (because the window needs to be opened to find the actual background
+ 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").
+ Normally this option would be set in the .vimrc file. Possibly
+ depending on the terminal name. Example: >
+ :if &term == "pcterm"
+ : set background=dark
+ :endif
+< When this option is set, the default settings for the highlight groups
+ will change. To use other settings, place ":highlight" commands AFTER
+ the setting of the 'background' option.
+ This option is also used in the "$VIMRUNTIME/syntax/syntax.vim" file
+ to select the colors for syntax highlighting. After changing this
+ option, you must load syntax.vim again to see the result. This can be
+ done with ":syntax on".
+
+ *'backspace'* *'bs'*
+'backspace' 'bs' string (default "")
+ global
+ {not in Vi}
+ Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
+ mode. This is a list of items, separated by commas. Each item allows
+ a way to backspace over something:
+ value effect ~
+ indent allow backspacing over autoindent
+ eol allow backspacing over line breaks (join lines)
+ start allow backspacing over the start of insert; CTRL-W and CTRL-U
+ stop once at the start of insert.
+
+ When the value is empty, Vi compatible backspacing is used.
+
+ For backwards compatibility with version 5.4 and earlier:
+ value effect ~
+ 0 same as ":set backspace=" (Vi compatible)
+ 1 same as ":set backspace=indent,eol"
+ 2 same as ":set backspace=indent,eol,start"
+
+ See |:fixdel| if your <BS> or <Del> key does not do what you want.
+ NOTE: This option is set to "" when 'compatible' is set.
+
+ *'backup'* *'bk'* *'nobackup'* *'nobk'*
+'backup' 'bk' boolean (default off)
+ global
+ {not in Vi}
+ Make a backup before overwriting a file. Leave it around after the
+ file has been successfully written. If you do not want to keep the
+ backup file, but you do want a backup while the file is being
+ written, reset this option and set the 'writebackup' option (this is
+ the default). If you do not want a backup file at all reset both
+ options (use this if your file system is almost full). See the
+ |backup-table| for more explanations.
+ When the 'backupskip' pattern matches, a backup is not made anyway.
+ When 'patchmode' is set, the backup may be renamed to become the
+ oldest version of a file.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'backupcopy'* *'bkc'*
+'backupcopy' 'bkc' string (Vi default for Unix: "yes", otherwise: "auto")
+ global
+ {not in Vi}
+ When writing a file and a backup is made, this option tells how it's
+ done. This is a comma separated list of words.
+
+ The main values are:
+ "yes" make a copy of the file and overwrite the original one
+ "no" rename the file and write a new one
+ "auto" one of the previous, what works best
+
+ Extra values that can be combined with the ones above are:
+ "breaksymlink" always break symlinks when writing
+ "breakhardlink" always break hardlinks when writing
+
+ Making a copy and overwriting the original file:
+ - Takes extra time to copy the file.
+ + When the file has special attributes, is a (hard/symbolic) link or
+ has a resource fork, all this is preserved.
+ - When the file is a link the backup will have the name of the link,
+ not of the real file.
+
+ Renaming the file and writing a new one:
+ + It's fast.
+ - Sometimes not all attributes of the file can be copied to the new
+ file.
+ - When the file is a link the new file will not be a link.
+
+ The "auto" value is the middle way: When Vim sees that renaming file
+ is possible without side effects (the attributes can be passed on and
+ and the file is not a link) that is used. When problems are expected,
+ a copy will be made.
+
+ The "breaksymlink" and "breakhardlink" values can be used in
+ combination with any of "yes", "no" and "auto". When included, they
+ force Vim to always break either symbolic or hard links by doing
+ exactly what the "no" option does, renaming the original file to
+ become the backup and writing a new file in its place. This can be
+ useful for example in source trees where all the files are symbolic or
+ hard links and any changes should stay in the local source tree, not
+ be propagated back to the original source.
+ *crontab*
+ One situation where "no" and "auto" will cause problems: A program
+ that opens a file, invokes Vim to edit that file, and then tests if
+ the open file was changed (through the file descriptor) will check the
+ backup file instead of the newly created file. "crontab -e" is an
+ example.
+
+ When a copy is made, the original file is truncated and then filled
+ with the new text. This means that protection bits, owner and
+ symbolic links of the original file are unmodified. The backup file
+ however, is a new file, owned by the user who edited the file. The
+ group of the backup is set to the group of the original file. If this
+ fails, the protection bits for the group are made the same as for
+ others.
+
+ When the file is renamed this is the other way around: The backup has
+ the same attributes of the original file, and the newly written file
+ is owned by the current user. When the file was a (hard/symbolic)
+ link, the new file will not! That's why the "auto" value doesn't
+ rename when the file is a link. The owner and group of the newly
+ written file will be set to the same ones as the original file, but
+ the system may refuse to do this. In that case the "auto" value will
+ again not rename the file.
+
+ *'backupdir'* *'bdir'*
+'backupdir' 'bdir' string (default for Amiga: ".,t:",
+ for MS-DOS and Win32: ".,c:/tmp,c:/temp"
+ for Unix: ".,~/tmp,~/")
+ global
+ {not in Vi}
+ List of directories for the backup file, separated with commas.
+ - The backup file will be created in the first directory in the list
+ where this is possible.
+ - 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.
+ - A directory starting with "./" (or ".\" for MS-DOS et.al.) means to
+ put the backup file relative to where the edited file is. The
+ leading "." is replaced with the path name of the edited file.
+ ("." inside a directory name has no special meaning).
+ - Spaces after the comma are ignored, other spaces are considered part
+ of the directory name. To have a space at the start of a directory
+ name, precede it with a backslash.
+ - To include a comma in a directory name precede it with a backslash.
+ - A directory name may end in an '/'.
+ - Environment variables are expanded |:set_env|.
+ - Careful with '\' characters, type one before a space, type two to
+ get one in the option (see |option-backslash|), for example: >
+ :set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
+< - For backwards compatibility with Vim version 3.0 a '>' at the start
+ of the option is removed.
+ See also 'backup' and 'writebackup' options.
+ If you want to hide your backup files on Unix, consider this value: >
+ :set backupdir=./.backup,~/.backup,.,/tmp
+< You must create a ".backup" directory in each directory and in your
+ home directory for this to work properly.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ directories from the list. This avoids problems when a future version
+ uses another default.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'backupext'* *'bex'* *E589*
+'backupext' 'bex' string (default "~", for VMS: "_")
+ global
+ {not in Vi}
+ String which is appended to a file name to make the name of the
+ backup file. The default is quite unusual, because this avoids
+ accidentally overwriting existing files with a backup file. You might
+ prefer using ".bak", but make sure that you don't have files with
+ ".bak" that you want to keep.
+
+ *'backupskip'* *'bsk'*
+'backupskip' 'bsk' string (default: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
+ global
+ {not in Vi}
+ {not available when compiled without the |+wildignore|
+ feature}
+ A list of file patterns. When one of the patterns matches with the
+ name of the file which is written, no backup file is created. Both
+ the specified file name and the full path name of the file are used.
+ The pattern is used like with |:autocmd|, see |autocmd-patterns|.
+ Watch out for special characters, see |option-backslash|.
+ When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
+ default value. "/tmp/*" is only used for Unix.
+
+ *'balloondelay'* *'bdlay'*
+'balloondelay' 'bdlay' number (default: 600)
+ global
+ {not in Vi}
+ {only available when compiled with the |+balloon_eval|
+ feature}
+ Delay in milliseconds before a balloon may pop up. See |balloon-eval|.
+
+ *'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
+'ballooneval' 'beval' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+balloon_eval|
+ and |+sun_workshop| or |+netbeans_intg| features}
+ Switch on the |balloon-eval| functionality.
+
+ *'binary'* *'bin'* *'nobinary'* *'nobin'*
+'binary' 'bin' boolean (default off)
+ local to buffer
+ {not in Vi}
+ This option should be set before editing a binary file. You can also
+ use the |-b| Vim argument. When this option is switched on a few
+ options will be changed (also when it already was on):
+ 'textwidth' will be set to 0
+ 'wrapmargin' will be set to 0
+ 'modeline' will be off
+ 'expandtab' will be off
+ Also, 'fileformat' and 'fileformats' options will not be used, the
+ file is read and written like 'fileformat' was "unix" (a single <NL>
+ separates lines).
+ The 'fileencoding' and 'fileencodings' options will not be used, the
+ file is read without conversion.
+ NOTE: When you start editing a(nother) file while the 'bin' option is
+ on, settings from autocommands may change the settings again (e.g.,
+ 'textwidth'), causing trouble when editing. You might want to set
+ 'bin' again when the file has been loaded.
+ The previous values of these options are remembered and restored when
+ 'bin' is switched from on to off. Each buffer has its own set of
+ saved option values.
+ To edit a file with 'binary' set you can use the |++bin| argument.
+ This avoids you have to do ":set bin", which would have effect for all
+ files you edit.
+ When writing a file the <EOL> for the last line is only written if
+ there was one in the original file (normally Vim appends an <EOL> to
+ the last line if there is none; this would make the file longer). See
+ the 'endofline' option.
+
+ *'bioskey'* *'biosk'* *'nobioskey'* *'nobiosk'*
+'bioskey' 'biosk' boolean (default on)
+ global
+ {not in Vi} {only for MS-DOS}
+ When on the bios is called to obtain a keyboard character. This works
+ better to detect CTRL-C, but only works for the console. When using a
+ terminal over a serial port reset this option.
+ Also see |'conskey'|.
+
+ *'bomb'* *'nobomb'*
+'bomb' boolean (default off)
+ local to buffer
+ {not in Vi}
+ {only available when compiled with the |+multi_byte|
+ feature}
+ When writing a file and the following conditions are met, a BOM (Byte
+ Order Mark) is prepended to the file:
+ - this option is on
+ - the 'binary' option is off
+ - 'fileencoding' is "utf-8", "ucs-2", "ucs-4" or one of the little/big
+ endian variants.
+ Some applications use the BOM to recognize the encoding of the file.
+ Often used for UCS-2 files on MS-Windows. For other applications it
+ causes trouble, for example: "cat file1 file2" makes the BOM of file2
+ appear halfway the resulting file.
+ When Vim reads a file and 'fileencodings' starts with "ucs-bom", a
+ check for the presence of the BOM is done and 'bomb' set accordingly.
+ Unless 'binary' is set, it is removed from the first line, so that you
+ don't see it when editing. When you don't change the options, the BOM
+ will be restored when writing the file.
+
+ *'breakat'* *'brk'*
+'breakat' 'brk' string (default " ^I!@*-+;:,./?")
+ global
+ {not in Vi}
+ {not available when compiled without the |+linebreak|
+ feature}
+ This option lets you choose which characters might cause a line
+ break if 'linebreak' is on.
+
+ *'browsedir'* *'bsdir'*
+'browsedir' 'bsdir' string (default for "last")
+ global
+ {not in Vi} {only for Motif and Win32 GUI}
+ Which directory to use for the file browser:
+ last Use same directory as with last file browser.
+ buffer Use the directory of the related buffer.
+ current Use the current directory.
+ {path} Use the specified directory
+
+ *'bufhidden'* *'bh'*
+'bufhidden' 'bh' string (default: "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ This option specifies what happens when a buffer is no longer
+ displayed in a window:
+ <empty> follow the global 'hidden' option
+ hide hide the buffer (don't unload it), also when 'hidden'
+ is not set
+ unload unload the buffer, also when 'hidden' is set or using
+ |:hide|
+ delete delete the buffer from the buffer list, also when
+ 'hidden' is set or using |:hide|, like using
+ |:bdelete|
+ wipe wipe out the buffer from the buffer list, also when
+ 'hidden' is set or using |:hide|, like using
+ |:bwipeout|
+
+ This option is used together with 'buftype' and 'swapfile' to specify
+ special kinds of buffers. See |special-buffers|.
+
+ *'buflisted'* *'bl'* *'nobuflisted'* *'nobl'* *E85*
+'buflisted' 'bl' boolean (default: on)
+ local to buffer
+ {not in Vi}
+ When this option is set, the buffer shows up in the buffer list. If
+ it is reset it is not used for ":bnext", "ls", the Buffers menu, etc.
+ This option is reset by Vim for buffers that are only used to remember
+ a file name or marks. Vim sets it when starting to edit a buffer.
+ But not when moving to a buffer with ":buffer".
+
+ *'buftype'* *'bt'* *E382*
+'buftype' 'bt' string (default: "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ The value of this option specifies the type of a buffer:
+ <empty> normal buffer
+ nofile buffer which is not related to a file and will not be
+ written
+ nowrite buffer which will not be written
+ quickfix quickfix buffer, contains list of errors |:cwindow|
+ help help buffer (you are not supposed to set this
+ manually)
+
+ This option is used together with 'bufhidden' and 'swapfile' to
+ specify special kinds of buffers. See |special-buffers|.
+
+ Be careful with changing this option, it can have many side effects!
+
+ A "quickfix" buffer is only used for the error list. This value is
+ set by the |:cwindow| command and you are not supposed to change it.
+
+ "nofile" and "nowrite" buffers are similar:
+ both: The buffer is not to be written to disk, ":w" doesn't
+ work (":w filename" does work though).
+ both: The buffer is never considered to be |'modified'|.
+ There is no warning when the changes will be lost, for
+ example when you quit Vim.
+ both: A swap file is only created when using too much memory
+ (when 'swapfile' has been reset there is never a swap
+ file).
+ nofile only: The buffer name is fixed, it is not handled like a
+ file name. It is not modified in response to a |:cd|
+ command.
+
+ *'casemap'* *'cmp'*
+'casemap' 'cmp' string (default: "internal,keepascii")
+ global
+ {not in Vi}
+ Specifies details about changing the case of letters. It may contain
+ these words, separated by a comma:
+ internal Use internal case mapping functions, the current
+ locale does not change the case mapping. This only
+ matters when 'encoding' is a Unicode encoding. When
+ "internal" is omitted, the towupper() and towlower()
+ system library functions are used when available.
+ keepascii For the ASCII characters (0x00 to 0x7f) use the US
+ case mapping, the current locale is not effective.
+ This probably only matters for Turkish.
+
+ *'cdpath'* *'cd'* *E344* *E346*
+'cdpath' 'cd' string (default: equivalent to $CDPATH or ",,")
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+file_in_path| feature}
+ This is a list of directories which will be searched when using the
+ |:cd| and |:lcd| commands, provided that the directory being searched
+ for has a relative path (not starting with "/", "./" or "../").
+ The 'cdpath' option's value has the same form and semantics as
+ |'path'|. Also see |file-searching|.
+ The default value is taken from $CDPATH, with a "," prepended to look
+ in the current directory first.
+ If the default value taken from $CDPATH is not what you want, include
+ a modified version of the following command in your vimrc file to
+ override it: >
+ :let &cdpath = ',' . substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
+< This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+ (parts of 'cdpath' can be passed to the shell to expand file names).
+
+ *'cedit'*
+'cedit' string (Vi default: "", Vim default: CTRL-F)
+ global
+ {not in Vi}
+ {not available when compiled without the |+vertsplit|
+ feature}
+ The key used in Command-line Mode to open the command-line window.
+ The default is CTRL-F when 'compatible' is off.
+ Only non-printable keys are allowed.
+ The key can be specified as a single character, but it is difficult to
+ type. The preferred way is to use the <> notation. Examples: >
+ :set cedit=<C-Y>
+ :set cedit=<Esc>
+< |Nvi| also has this option, but it only uses the first character.
+ See |cmdwin|.
+
+ *'charconvert'* *'ccv'* *E202* *E214* *E513*
+'charconvert' 'ccv' string (default "")
+ global
+ {only available when compiled with the |+multi_byte|
+ feature and the |+eval| feature}
+ {not in Vi}
+ An expression that is used for character encoding conversion. It is
+ evaluated when a file that is to be read or has been written has a
+ different encoding from what is desired.
+ 'charconvert' is not used when the internal iconv() function is
+ supported and is able to do the conversion. Using iconv() is
+ preferred, because it is much faster.
+ 'charconvert' is not used when reading stdin |--|, because there is no
+ file to convert from. You will have to save the text in a file first.
+ The expression must return zero or an empty string for success,
+ non-zero for failure.
+ The possible encoding names encountered are in 'encoding'.
+ Additionally, names given in 'fileencodings' and 'fileencoding' are
+ used.
+ Conversion between "latin1", "unicode", "ucs-2", "ucs-4" and "utf-8"
+ is done internally by Vim, 'charconvert' is not used for this.
+ 'charconvert' is also used to convert the viminfo file, if the 'c'
+ flag is present in 'viminfo'. Also used for Unicode conversion.
+ Example: >
+ set charconvert=CharConvert()
+ fun CharConvert()
+ system("recode "
+ \ . v:charconvert_from . ".." . v:charconvert_to
+ \ . " <" . v:fname_in . " >" v:fname_out)
+ return v:shell_error
+ endfun
+< The related Vim variables are:
+ v:charconvert_from name of the current encoding
+ v:charconvert_to name of the desired encoding
+ v:fname_in name of the input file
+ v:fname_out name of the output file
+ Note that v:fname_in and v:fname_out will never be the same.
+ Note that v:charconvert_from and v:charconvert_to may be different
+ from 'encoding'. Vim internally uses UTF-8 instead of UCS-2 or UCS-4.
+ Encryption is not done by Vim when using 'charconvert'. If you want
+ to encrypt the file after conversion, 'charconvert' should take care
+ of this.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'cindent'* *'cin'* *'nocindent'* *'nocin'*
+'cindent' 'cin' boolean (default off)
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+cindent|
+ feature}
+ Enables automatic C program indenting See 'cinkeys' to set the keys
+ that trigger reindenting in insert mode and 'cinoptions' to set your
+ preferred indent style.
+ If 'indentexpr' is not empty, it overrules 'cindent'.
+ If 'lisp' is not on and both 'indentexpr' and 'equalprg' are empty,
+ the "=" operator indents using this algorithm rather than calling an
+ external program.
+ See |C-indenting|.
+ When you don't like the way 'cindent' works, try the 'smartindent'
+ option or 'indentexpr'.
+ This option is not used when 'paste' is set.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'cinkeys'* *'cink'*
+'cinkeys' 'cink' string (default "0{,0},0),:,0#,!^F,o,O,e")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+cindent|
+ feature}
+ A list of keys that, when typed in Insert mode, cause reindenting of
+ the current line. Only used if 'cindent' is on and 'indentexpr' is
+ empty.
+ For the format of this option see |cinkeys-format|.
+ See |C-indenting|.
+
+ *'cinoptions'* *'cino'*
+'cinoptions' 'cino' string (default "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+cindent|
+ feature}
+ The 'cinoptions' affect the way 'cindent' reindents lines in a C
+ program. See |cinoptions-values| for the values of this option, and
+ |C-indenting| for info on C indenting in general.
+
+
+ *'cinwords'* *'cinw'*
+'cinwords' 'cinw' string (default "if,else,while,do,for,switch")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without both the
+ |+cindent| and the |+smartindent| features}
+ These keywords start an extra indent in the next line when
+ 'smartindent' or 'cindent' is set. For 'cindent' this is only done at
+ an appropriate place (inside {}).
+ Note that 'ignorecase' isn't used for 'cinwords'. If case doesn't
+ matter, include the keyword both the uppercase and lowercase:
+ "if,If,IF".
+
+ *'clipboard'* *'cb'*
+'clipboard' 'cb' string (default "autoselect,exclude:cons\|linux"
+ for X-windows, "" otherwise)
+ global
+ {not in Vi}
+ {only in GUI versions or when the |+xterm_clipboard|
+ feature is included}
+ This option is a list of comma separated names.
+ These names are recognized:
+
+ 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
+ register is explicitly specified, it will always be
+ used regardless of whether "unnamed" is in 'clipboard'
+ or not. The clipboard register can always be
+ explicitly accessed using the "* notation. Also see
+ |gui-clipboard|.
+
+ 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
+ windowing system's global selection or put the
+ selected text on the clipboard used by the selection
+ register "*. See |guioptions_a| and |quotestar| for
+ details. When the GUI is active, the 'a' flag in
+ 'guioptions' is used, when the GUI is not active, this
+ "autoselect" flag is used.
+ Also applies to the modeless selection.
+
+ autoselectml Like "autoselect", but for the modeless selection
+ only. Compare to the 'A' flag in 'guioptions'.
+
+ exclude:{pattern}
+ Defines a pattern that is matched against the name of
+ the terminal 'term'. If there is a match, no
+ connection will be made to the X server. This is
+ useful in this situation:
+ - Running Vim in a console.
+ - $DISPLAY is set to start applications on another
+ display.
+ - You do not want to connect to the X server in the
+ console, but do want this in a terminal emulator.
+ To never connect to the X server use: >
+ exclude:.*
+< This has the same effect as using the |-X| argument.
+ Note that when there is no connection to the X server
+ the window title won't be restored and the clipboard
+ cannot be accessed.
+ The value of 'magic' is ignored, {pattern} is
+ interpreted as if 'magic' was on.
+ The rest of the option value will be used for
+ {pattern}, this must be the last entry.
+
+ *'cmdheight'* *'ch'*
+'cmdheight' 'ch' number (default 1)
+ global
+ {not in Vi}
+ Number of screen lines to use for the command-line. Helps avoiding
+ |hit-enter| prompts.
+
+ *'cmdwinheight'* *'cwh'*
+'cmdwinheight' 'cwh' number (default 7)
+ global
+ {not in Vi}
+ {not available when compiled without the |+vertsplit|
+ feature}
+ Number of screen lines to use for the command-line window. |cmdwin|
+
+ *'columns'* *'co'* *E594*
+'columns' 'co' number (default 80 or terminal width)
+ global
+ {not in Vi}
+ Number of columns of the screen. Normally this is set by the terminal
+ initialization and does not have to be set by hand.
+ When Vim is running in the GUI or in a resizable window, setting this
+ option will cause the window size to be changed. When you only want
+ to use the size for the GUI, put the command in your |gvimrc| file.
+ When you set this option and Vim is unable to change the physical
+ number of columns of the display, the display may be messed up.
+
+ *'comments'* *'com'* *E524* *E525*
+'comments' 'com' string (default
+ "s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+comments|
+ feature}
+ A comma separated list of strings that can start a comment line. See
+ |format-comments|. See |option-backslash| about using backslashes to
+ insert a space.
+
+ *'commentstring'* *'cms'* *E537*
+'commentstring' 'cms' string (default "/*%s*/")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ A template for a comment. The "%s" in the value is replaced with the
+ comment text. Currently only used to add markers for folding, see
+ |fold-marker|.
+
+ *'compatible'* *'cp'* *'nocompatible'* *'nocp'*
+'compatible' 'cp' boolean (default on, off when a .vimrc file is found)
+ global
+ {not in Vi}
+ This option has the effect of making Vim either more Vi-compatible, or
+ make Vim behave in a more useful way.
+ This is a special kind of option, because when it's set or reset,
+ other options are also changed as a side effect. CAREFUL: Setting or
+ resetting this option can have a lot of unexpected effects: Mappings
+ are interpreted in another way, undo behaves differently, etc. If you
+ set this option in your vimrc file, you should probably put it at the
+ very start.
+ By default this option is on and the Vi defaults are used for the
+ options. This default was chosen for those people who want to use Vim
+ just like Vi, and don't even (want to) know about the 'compatible'
+ option.
+ When a ".vimrc" file is found while Vim is starting up, this option is
+ switched off, and all options that have not been modified will be set
+ to the Vim defaults. Effectively, this means that when a ".vimrc"
+ file exists, Vim will use the Vim defaults, otherwise it will use the
+ Vi defaults. (Note: This doesn't happen for the system-wide vimrc
+ file). Also see |compatible-default|.
+ You can also set this option with the "-C" argument, and reset it with
+ "-N". See |-C| and |-N|.
+ Switching this option off makes the Vim defaults be used for options
+ that have a different Vi and Vim default value. See the options
+ marked with a '+' below. Other options are not modified.
+ At the moment this option is set, several other options will be set
+ or reset to make Vim as Vi-compatible as possible. See the table
+ below. This can be used if you want to revert to Vi compatible
+ editing.
+ See also 'cpoptions'.
+
+ option + set value effect ~
+
+ 'allowrevins' off no CTRL-_ command
+ 'backupcopy' Unix: "yes" backup file is a copy
+ others: "auto" copy or rename backup file
+ 'backspace' "" normal backspace
+ 'backup' off no backup file
+ 'cindent' off no C code indentation
+ 'cedit' + "" no key to open the |cmdwin|
+ 'cpoptions' + (all flags) Vi-compatible flags
+ 'cscopetag' off don't use cscope for ":tag"
+ 'cscopetagorder' 0 see |cscopetagorder|
+ 'cscopeverbose' off see |cscopeverbose|
+ 'digraph' off no digraphs
+ 'esckeys' + off no <Esc>-keys in Insert mode
+ 'expandtab' off tabs not expanded to spaces
+ 'fileformats' + "" no automatic file format detection,
+ "dos,unix" except for DOS, Windows and OS/2
+ 'formatoptions' + "vt" Vi compatible formatting
+ 'gdefault' off no default 'g' flag for ":s"
+ 'history' + 0 no commandline history
+ 'hkmap' off no Hebrew keyboard mapping
+ 'hkmapp' off no phonetic Hebrew keyboard mapping
+ 'hlsearch' off no highlighting of search matches
+ 'incsearch' off no incremental searching
+ 'indentexpr' "" no indenting by expression
+ 'insertmode' off do not start in Insert mode
+ 'iskeyword' + "@,48-57,_" keywords contain alphanumeric
+ characters and '_'
+ 'joinspaces' on insert 2 spaces after period
+ 'modeline' + off no modelines
+ 'more' + off no pauses in listings
+ 'revins' off no reverse insert
+ 'ruler' off no ruler
+ 'scrolljump' 1 no jump scroll
+ 'scrolloff' 0 no scroll offset
+ 'shiftround' off indent not rounded to shiftwidth
+ 'shortmess' + "" no shortening of messages
+ 'showcmd' + off command characters not shown
+ 'showmode' + off current mode not shown
+ 'smartcase' off no automatic ignore case switch
+ 'smartindent' off no smart indentation
+ 'smarttab' off no smart tab size
+ 'softtabstop' 0 tabs are always 'tabstop' positions
+ 'startofline' on goto startofline with some commands
+ 'tagrelative' + off tag file names are not relative
+ 'textauto' + off no automatic textmode detection
+ 'textwidth' 0 no automatic line wrap
+ 'tildeop' off tilde is not an operator
+ 'ttimeout' off no terminal timeout
+ 'whichwrap' + "" left-right movements don't wrap
+ 'wildchar' + CTRL-E only when the current value is <Tab>
+ use CTRL-E for cmdline completion
+ 'writebackup' on or off depends on +writebackup feature
+
+ *'complete'* *'cpt'* *E535*
+'complete' 'cpt' string (default: ".,w,b,u,t,i")
+ local to buffer
+ {not in Vi}
+ This option specifies how keyword completion |ins-completion| works
+ 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)
+ 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
+ U scan the buffers that are not in the buffer list
+ k scan the files given with the 'dictionary' option
+ k{dict} scan the file {dict}. Several "k" flags can be given,
+ patterns are valid too. For example: >
+ :set cpt=k/usr/dict/*,k~/spanish
+< s scan the files given with the 'thesaurus' option
+ s{tsr} scan the file {tsr}. Several "s" flags can be given, patterns
+ are valid too.
+ i scan current and included files
+ d scan current and included files for defined name or macro
+ |i_CTRL-X_CTRL-D|
+ ] tag completion
+ t same as "]"
+
+ Unloaded buffers are not loaded, thus their autocmds |:autocmd| are
+ not executed, this may lead to unexpected completions from some files
+ (gzipped files for example). Unloaded buffers are not scanned for
+ whole-line completion.
+
+ The default is ".,w,b,u,t,i", which means to scan:
+ 1. the current buffer
+ 2. buffers in other windows
+ 3. other loaded buffers
+ 4. unloaded buffers
+ 5. tags
+ 6. included files
+
+ As you can see, CTRL-N and CTRL-P can be used to do any 'iskeyword'-
+ based expansion (eg dictionary |i_CTRL-X_CTRL-K|, included patterns
+ |i_CTRL-X_CTRL-I|, tags |i_CTRL-X_CTRL-]| and normal expansions)
+
+ *'confirm'* *'cf'* *'noconfirm'* *'nocf'*
+'confirm' 'cf' boolean (default off)
+ global
+ {not in Vi}
+ When 'confirm' is on, certain operations that would normally
+ fail because of unsaved changes to a buffer, e.g. ":q" and ":e",
+ instead raise a |dialog| asking if you wish to save the current
+ file(s). You can still use a ! to unconditionally |abandon| a buffer.
+ If 'confirm' is off you can still activate confirmation for one
+ command only (this is most useful in mappings) with the |:confirm|
+ command.
+ Also see the |confirm()| function and the 'v' flag in 'guioptions'.
+
+ *'conskey'* *'consk'* *'noconskey'* *'noconsk'*
+'conskey' 'consk' boolean (default off)
+ global
+ {not in Vi} {only for MS-DOS}
+ When on direct console I/O is used to obtain a keyboard character.
+ This should work in most cases. Also see |'bioskey'|. Together,
+ three methods of console input are available:
+ 'conskey' 'bioskey' action ~
+ on on or off direct console input
+ off on BIOS
+ off off STDIN
+
+ *'copyindent'* *'ci'* *'nocopyindent'* *'noci'*
+'copyindent' 'ci' boolean (default off)
+ local to buffer
+ {not in Vi}
+ Copy the structure of the existing lines indent when autoindenting a
+ new line. Normally the new indent is reconstructed by a series of
+ tabs followed by spaces as required (unless |'expandtab'| is enabled,
+ in which case only spaces are used). Enabling this option makes the
+ new line copy whatever characters were used for indenting on the
+ existing line. If the new indent is greater than on the existing
+ line, the remaining space is filled in the normal manner.
+ NOTE: 'copyindent' is reset when 'compatible' is set.
+ Also see 'preserveindent'.
+
+ *'cpoptions'* *'cpo'*
+'cpoptions' 'cpo' string (Vim default: "aABceFs",
+ Vi default: all flags)
+ global
+ {not in Vi}
+ A sequence of single character flags. When a character is present
+ this indicates vi-compatible behavior. This is used for things where
+ not being vi-compatible is mostly or sometimes preferred.
+ 'cpoptions' stands for "compatible-options".
+ Commas can be added for readability.
+ To avoid problems with flags that are added in the future, use the
+ "+=" and "-=" feature of ":set" |add-option-flags|.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ contains behavior ~
+ *cpo-a*
+ a When included, a ":read" command with a file name
+ argument will set the alternate file name for the
+ current window.
+ *cpo-A*
+ A When included, a ":write" command with a file name
+ argument will set the alternate file name for the
+ current window.
+ *cpo-b*
+ b "\|" in a ":map" command is recognized as the end of
+ the map command. The '\' is included in the mapping,
+ the text after the '|' is interpreted as the next
+ command. Use a CTRL-V instead of a backslash to
+ include the '|' in the mapping. Applies to all
+ mapping, abbreviation, menu and autocmd commands.
+ See also |map_bar|.
+ *cpo-B*
+ B A backslash has no special meaning in mappings,
+ abbreviations and the "to" part of the menu commands.
+ Remove this flag to be able to use a backslash like a
+ CTRL-V. For example, the command ":map X \<Esc>"
+ results in X being mapped to:
+ 'B' included: "\^[" (^[ is a real <Esc>)
+ 'B' excluded: "<Esc>" (5 characters)
+ ('<' excluded in both cases)
+ *cpo-c*
+ c Searching continues at the end of any match at the
+ cursor position, but not further than the start of the
+ next line. When not present searching continues
+ one character from the cursor position. With 'c'
+ "abababababab" only gets three matches when repeating
+ "/abab", without 'c' there are five matches.
+ *cpo-C*
+ C Do not concatenate sourced lines that start with a
+ backslash. See |line-continuation|.
+ *cpo-d*
+ d Using "./" in the 'tags' option doesn't mean to use
+ the tags file relative to the current file, but the
+ tags file in the current directory.
+ *cpo-D*
+ D Can't use CTRL-K to enter a digraph after Normal mode
+ commands with a character argument, like |r|, |f| and
+ |t|.
+ *cpo-e*
+ e When executing a register with ":@r", always add a
+ <CR> to the last line, also when the register is not
+ linewise. If this flag is not present, the register
+ is not linewise and the last line does not end in a
+ <CR>, then the last line is put on the command-line
+ and can be edited before hitting <CR>.
+ *cpo-E*
+ E It is an error when using "y", "d", "c", "g~", "gu" or
+ "gU" on an Empty region. The operators only work when
+ at least one character is to be operate on. Example:
+ This makes "y0" fail in the first column.
+ *cpo-f*
+ f When included, a ":read" command with a file name
+ argument will set the file name for the current buffer,
+ if the current buffer doesn't have a file name yet.
+ *cpo-F*
+ F When included, a ":write" command with a file name
+ argument will set the file name for the current
+ buffer, if the current buffer doesn't have a file name
+ yet.
+ *cpo-g*
+ g Goto line 1 when using ":edit" without argument.
+ *cpo-i*
+ i When included, interrupting the reading of a file will
+ leave it modified.
+ *cpo-j*
+ j When joining lines, only add two spaces after a '.',
+ not after '!' or '?'. Also see 'joinspaces'.
+ *cpo-J*
+ J A |sentence| has to be followed by two spaces after
+ the '.', '!' or '?'. A <Tab> is not recognized as
+ white space.
+ *cpo-k*
+ k Disable the recognition of raw key codes in
+ mappings, abbreviations, and the "to" part of menu
+ commands. For example, if <Key> sends ^[OA (where ^[
+ is <Esc>), the command ":map X ^[OA" results in X
+ being mapped to:
+ 'k' included: "^[OA" (3 characters)
+ 'k' excluded: "<Key>" (one key code)
+ Also see the '<' flag below.
+ *cpo-K*
+ K Don't wait for a key code to complete when it is
+ halfway a mapping. This breaks mapping <F1><F1> when
+ only part of the second <F1> has been read. It
+ enables cancelling the mapping by typing <F1><Esc>.
+ *cpo-l*
+ l Backslash in a [] range in a search pattern is taken
+ literally, only "\]" is special See |/[]|
+ 'l' included: "/[ \t]" finds <Space>, '\' and 't'
+ 'l' excluded: "/[ \t]" finds <Space> and <Tab>
+ *cpo-L*
+ L When the 'list' option is set, 'wrapmargin',
+ 'textwidth', 'softtabstop' and Virtual Replace mode
+ (see |gR|) count a <Tab> as two characters, instead of
+ the normal behavior of a <Tab>.
+ *cpo-m*
+ m When included, a showmatch will always wait half a
+ second. When not included, a showmatch will wait half
+ a second or until a character is typed. |'showmatch'|
+ *cpo-M*
+ M When excluded, "%" matching will take backslashes into
+ account. Thus in "( \( )" and "\( ( \)" the outer
+ parenthesis match. When included "%" ignores
+ backslashes, which is Vi compatible.
+ *cpo-n*
+ n When included, the column used for 'number' will also
+ be used for text of wrapped lines.
+ *cpo-o*
+ o Line offset to search command is not remembered for
+ next search.
+ *cpo-O*
+ O Don't complain if a file is being overwritten, even
+ when it didn't exist when editing it. This is a
+ protection against a file unexpectedly created by
+ someone else. Vi didn't complain about this.
+ *cpo-p*
+ p Vi compatible Lisp indenting. When not present, a
+ slightly better algorithm is used.
+ *cpo-r*
+ r Redo ("." command) uses "/" to repeat a search
+ command, instead of the actually used search string.
+ *cpo-R*
+ R Remove marks from filtered lines. Without this flag
+ marks are kept like |:keepmarks| was used.
+ *cpo-s*
+ s Set buffer options when entering the buffer for the
+ first time. This is like it is in Vim version 3.0.
+ And it is the default. If not present the options are
+ set when the buffer is created.
+ *cpo-S*
+ S Set buffer options always when entering a buffer
+ (except 'readonly', 'fileformat', 'filetype' and
+ 'syntax'). This is the (most) Vi compatible setting.
+ The options are set to the values in the current
+ buffer. When you change an option and go to another
+ buffer, the value is copied. Effectively makes the
+ buffer options global to all buffers.
+
+ 's' 'S' copy buffer options
+ no no when buffer created
+ yes no when buffer first entered (default)
+ X yes each time when buffer entered (vi comp.)
+ *cpo-t*
+ t Search pattern for the tag command is remembered for
+ "n" command. Otherwise Vim only puts the pattern in
+ the history for search pattern, but doesn't change the
+ last used search pattern.
+ *cpo-u*
+ u Undo is Vi compatible. See |undo-two-ways|.
+ *cpo-v*
+ v Backspaced characters remain visible on the screen in
+ Insert mode. Without this flag the characters are
+ erased from the screen right away. With this flag the
+ screen newly typed text overwrites backspaced
+ characters.
+ *cpo-w*
+ w When using "cw" on a blank character, only change one
+ character and not all blanks until the start of the
+ next word.
+ *cpo-W*
+ W Don't overwrite a readonly file. When omitted, ":w!"
+ overwrites a readonly file, if possible.
+ *cpo-x*
+ x <Esc> on the command-line executes the command-line.
+ The default in Vim is to abandon the command-line,
+ because <Esc> normally aborts a command. |c_<Esc>|
+ *cpo-y*
+ y A yank command can be redone with ".".
+ *cpo-!*
+ ! When redoing a filter command, use the last used
+ external command, whatever it was. Otherwise the last
+ used -filter- command is used.
+ *cpo-$*
+ $ When making a change to one line, don't redisplay the
+ line, but put a '$' at the end of the changed text.
+ The changed text will be overwritten when you type the
+ new text. The line is redisplayed if you type any
+ command that moves the cursor from the insertion
+ point.
+ *cpo-%*
+ % Vi-compatible matching is done for the "%" command.
+ Does not recognize "#if", "#endif", etc.
+ Does not recognize "/*" and "*/".
+ Parens inside single and double quotes are also
+ counted, causing a string that contains a paren to
+ disturb the matching. For example, in a line like
+ "if (strcmp("foo(", s))" the first paren does not
+ match the last one. When this flag is not included,
+ parens inside single and double quotes are treated
+ specially. When matching a paren outside of quotes,
+ everything inside quotes is ignored. When matching a
+ paren inside quotes, it will find the matching one (if
+ there is one). This works very well for C programs.
+ *cpo-star*
+ * Use ":*" in the same way as ":@". When not included,
+ ":*" is an alias for ":'<,'>", select the Visual area.
+ *cpo-<*
+ < Disable the recognition of special key codes in |<>|
+ form in mappings, abbreviations, and the "to" part of
+ menu commands. For example, the command
+ ":map X <Tab>" results in X being mapped to:
+ '<' included: "<Tab>" (5 characters)
+ '<' excluded: "^I" (^I is a real <Tab>)
+ Also see the 'k' flag above.
+
+ *'cscopepathcomp'* *'cspc'*
+'cscopepathcomp' 'cspc' number (default 0)
+ global
+ {not available when compiled without the |+cscope|
+ feature}
+ {not in Vi}
+ Determines how many components of the path to show in a list of tags.
+ See |cscopepathcomp|.
+
+ *'cscopeprg'* *'csprg'*
+'cscopeprg' 'csprg' string (default "cscope")
+ global
+ {not available when compiled without the |+cscope|
+ feature}
+ {not in Vi}
+ Specifies the command to execute cscope. See |cscopeprg|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'cscopequickfix'* *'csqf'*
+'cscopequickfix' 'csqf' string (default "")
+ global
+ {not available when compiled without the |+cscope|
+ or |+quickfix| features}
+ {not in Vi}
+ Specifies whether to use quickfix window to show cscope results.
+ See |cscopequickfix|.
+
+ *'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
+'cscopetag' 'cst' boolean (default off)
+ global
+ {not available when compiled without the |+cscope|
+ feature}
+ {not in Vi}
+ Use cscope for tag commands. See |cscope-options|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'cscopetagorder'* *'csto'*
+'cscopetagorder' 'csto' number (default 0)
+ global
+ {not available when compiled without the |+cscope|
+ feature}
+ {not in Vi}
+ Determines the order in which ":cstag" performs a search. See
+ |cscopetagorder|.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
+ *'cscopeverbose'* *'csverb'*
+ *'nocscopeverbose'* *'nocsverb'*
+'cscopeverbose' 'csverb' boolean (default off)
+ global
+ {not available when compiled without the |+cscope|
+ feature}
+ {not in Vi}
+ Give messages when adding a cscope database. See |cscopeverbose|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'debug'*
+'debug' string (default "")
+ global
+ {not in Vi}
+ When set to "msg", error messages that would otherwise be omitted will
+ be given anyway. This is useful when debugging 'foldexpr' or
+ 'indentexpr'.
+
+ *'define'* *'def'*
+'define' 'def' string (default "^\s*#\s*define")
+ global or local to buffer |global-local|
+ {not in Vi}
+ Pattern to be used to find a macro definition. It is a search
+ pattern, just like for the "/" command. This option is used for the
+ commands like "[i" and "[d" |include-search|. The 'isident' option is
+ used to recognize the defined name after the match:
+ {match with 'define'}{non-ID chars}{defined name}{non-ID char}
+ See |option-backslash| about inserting backslashes to include a space
+ or backslash.
+ The default value is for C programs. For C++ this value would be
+ useful, to include const type declarations: >
+ ^\(#\s*define\|[a-z]*\s*const\s*[a-z]*\)
+< When using the ":set" command, you need to double the backslashes!
+
+ *'delcombine'* *'deco'* *'nodelcombine'* *'nodeco'*
+'delcombine' 'deco' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+multi_byte|
+ feature}
+ If editing Unicode and this option is set, backspace and Normal mode
+ "x" delete each combining character on its own. When it is off (the
+ default) the character along with its combining characters are
+ deleted.
+ Note: When 'delcombine' is set "xx" may work different from "2x"!
+
+ This is useful for Arabic, Hebrew and many other languages where one
+ may have combining characters overtop of base characters, and want
+ to remove only the combining ones.
+
+ *'dictionary'* *'dict'*
+'dictionary' 'dict' string (default "")
+ global or local to buffer |global-local|
+ {not in Vi}
+ List of file names, separated by commas, that are used to lookup words
+ for keyword completion commands |i_CTRL-X_CTRL-K|. Each file should
+ contain a list of words. This can be one word per line, or several
+ words per line, separated by non-keyword characters (white space is
+ preferred). Maximum line length is 510 bytes.
+ 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.
+ Where to find a list of words?
+ - On FreeBSD, there is the file "/usr/share/dict/words".
+ - In the Simtel archive, look in the "msdos/linguist" directory.
+ - In "miscfiles" of the GNU collection.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ directories from the list. This avoids problems when a future version
+ uses another default.
+ Backticks cannot be used in this option for security reasons.
+
+ *'diff'* *'nodiff'*
+'diff' boolean (default off)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+ Join the current window in the group of windows that shows differences
+ between files. See |vimdiff|.
+
+ *'dex'* *'diffexpr'*
+'diffexpr' 'dex' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+ Expression which is evaluated to obtain an ed-style diff file from two
+ versions of a file. See |diff-diffexpr|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'dip'* *'diffopt'*
+'diffopt' 'dip' string (default "filler")
+ global
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+ Option settings for diff mode. It can consist of the following items.
+ All are optional. Items must be separated by a comma.
+
+ filler Show filler lines, to keep the text
+ synchronized with a window that has inserted
+ lines at the same position. Mostly useful
+ when windows are side-by-side and 'scrollbind'
+ is set.
+
+ context:{n} Use a context of {n} lines between a change
+ and a fold that contains unchanged lines.
+ When omitted a context of six lines is used.
+ See |fold-diff|.
+
+ icase Ignore changes in case of text. "a" and "A"
+ are considered the same. Adds the "-i" flag
+ to the "diff" command if 'diffexpr' is empty.
+
+ iwhite Ignore changes in amount of white space. Adds
+ the "-b" flag to the "diff" command if
+ 'diffexpr' is empty. Check the documentation
+ of the "diff" command for what this does
+ exactly. It should ignore adding trailing
+ white space, but not leading white space.
+
+ Examples: >
+
+ :set diffopt=filler,context:4
+ :set diffopt=
+ :set diffopt=filler
+<
+ *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
+'digraph' 'dg' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the |+digraphs|
+ feature}
+ Enable the entering of digraphs in Insert mode with {char1} <BS>
+ {char2}. See |digraphs|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'directory'* *'dir'*
+'directory' 'dir' string (default for Amiga: ".,t:",
+ for MS-DOS and Win32: ".,c:\tmp,c:\temp"
+ for Unix: ".,~/tmp,/var/tmp,/tmp")
+ global
+ List of directory names for the swap file, separated with commas.
+ - The swap file will be created in the first directory where this is
+ possible.
+ - Empty means that no swap file will be used (recovery is
+ impossible!).
+ - A directory "." means to put the swap file in the same directory as
+ the edited file. On Unix, a dot is prepended to the file name, so
+ it doesn't show in a directory listing. On MS-Windows the "hidden"
+ attribute is set and a dot prepended if possible.
+ - A directory starting with "./" (or ".\" for MS-DOS et.al.) means to
+ put the swap file relative to where the edited file is. The leading
+ "." is replaced with the path name of the edited file.
+ - For Unix and Win32, if a directory ends in two path separators, the
+ swap file name will be built from the complete path to the file
+ with all path separators substituted to percent '%' signs. This will
+ ensure file name uniqueness in the preserve directory.
+ - Spaces after the comma are ignored, other spaces are considered part
+ of the directory name. To have a space at the start of a directory
+ name, precede it with a backslash.
+ - To include a comma in a directory name precede it with a backslash.
+ - A directory name may end in an ':' or '/'.
+ - Environment variables are expanded |:set_env|.
+ - Careful with '\' characters, type one before a space, type two to
+ get one in the option (see |option-backslash|), for example: >
+ :set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
+< - For backwards compatibility with Vim version 3.0 a '>' at the start
+ of the option is removed.
+ Using "." first in the list is recommended. This means that editing
+ the same file twice will result in a warning. Using "/tmp" on Unix is
+ discouraged: When the system crashes you lose the swap file.
+ "/var/tmp" is often not cleared when rebooting, thus is a better
+ choice than "/tmp". But it can contain a lot of files, your swap
+ files get lost in the crowd. That is why a "tmp" directory in your
+ home directory is tried first.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ directories from the list. This avoids problems when a future version
+ uses another default.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+ {Vi: directory to put temp file in, defaults to "/tmp"}
+
+ *'display'* *'dy'*
+'display' 'dy' string (default "")
+ global
+ {not in Vi}
+ Change the way text is displayed. This is comma separated list of
+ flags:
+ lastline When included, as much as possible of the last line
+ in a window will be displayed. When not included, a
+ last line that doesn't fit is replaced with "@" lines.
+ uhex Show unprintable characters hexadecimal as <xx>
+ instead of using ^C and ~C.
+
+ *'eadirection'* *'ead'*
+'eadirection' 'ead' string (default "both")
+ global
+ {not in Vi}
+ {not available when compiled without the +vertsplit
+ feature}
+ Tells when the 'equalalways' option applies:
+ ver vertically, width of windows is not affected
+ hor horizontally, height of windows is not affected
+ both width and height of windows is affected
+
+ *'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
+'edcompatible' 'ed' boolean (default off)
+ global
+ Makes the 'g' and 'c' flags of the ":substitute" command to be
+ toggled each time the flag is given. See |complex-change|. See
+ also 'gdefault' option.
+ Switching this option on is discouraged!
+
+ *'encoding'* *'enc'* *E543*
+'encoding' 'enc' string (default: "latin1" or value from $LANG)
+ global
+ {only available when compiled with the |+multi_byte|
+ feature}
+ {not in Vi}
+ Sets the character encoding used inside Vim. It applies to text in
+ the buffers, registers, Strings in expressions, text stored in the
+ viminfo file, etc. It sets the kind of characters which Vim can work
+ with. See |encoding-names| for the possible values.
+
+ NOTE: Changing this option will not change the encoding of the
+ existing text in Vim. It may cause multi-byte text to become invalid.
+ It should normally be kept at its default value, or set when Vim
+ starts up. See |multibyte|.
+
+ NOTE: For GTK+ 2 it is highly recommended to set 'encoding' to
+ "utf-8". Although care has been taken to allow different values of
+ 'encoding', "utf-8" is the natural choice for the environment and
+ avoids unnecessary conversion overhead. "utf-8" has not been made
+ the default to prevent different behaviour of the GUI and terminal
+ versions, and to avoid changing the encoding of newly created files
+ without your knowledge (in case 'fileencodings' is empty).
+
+ The character encoding of files can be different from 'encoding'.
+ This is specified with 'fileencoding'. The conversion is done with
+ iconv() or as specified with 'charconvert'.
+
+ Normally 'encoding' will be equal to your current locale. This will
+ be the default if Vim recognizes your environment settings. If
+ 'encoding' is not set to the current locale, 'termencoding' must be
+ set to convert typed and displayed text. See |encoding-table|.
+
+ When you set this option, it fires the |EncodingChanged| autocommand
+ event so that you can set up fonts if necessary.
+
+ When the option is set, the value is converted to lowercase. Thus
+ you can set it with uppercase values too. Underscores are translated
+ to '-' signs.
+ When the encoding is recognized, it is changed to the standard name.
+ For example "Latin-1" becomes "latin1", "ISO_88592" becomes
+ "iso-8859-2" and "utf8" becomes "utf-8".
+
+ Note: "latin1" is also used when the encoding could not be detected.
+ This only works when editing files in the same encoding! When the
+ actual character set is not latin1, make sure 'fileencoding' and
+ 'fileencodings' are empty. When conversion is needed, switch to using
+ utf-8.
+
+ When "unicode", "ucs-2" or "ucs-4" is used, Vim internally uses utf-8.
+ You don't notice this while editing, but it does matter for the
+ |viminfo-file|. And Vim expects the terminal to use utf-8 too. Thus
+ setting 'encoding' to one of these values instead of utf-8 only has
+ effect for encoding used for files when 'fileencoding' is empty.
+
+ When 'encoding' is set to a Unicode encoding, and 'fileencodings' was
+ not set yet, the default for 'fileencodings' is changed.
+
+ *'endofline'* *'eol'* *'noendofline'* *'noeol'*
+'endofline' 'eol' boolean (default on)
+ local to buffer
+ {not in Vi}
+ When writing a file and this option is off and the 'binary' option
+ is on, no <EOL> will be written for the last line in the file. This
+ option is automatically set when starting to edit a new file, unless
+ the file does not have an <EOL> for the last line in the file, in
+ which case it is reset. Normally you don't have to set or reset this
+ option. When 'binary' is off the value is not used when writing the
+ file. When 'binary' is on it is used to remember the presence of a
+ <EOL> for the last line in the file, so that when you write the file
+ the situation from the original file can be kept. But you can change
+ it if you want to.
+
+ *'equalalways'* *'ea'* *'noequalalways'* *'noea'*
+'equalalways' 'ea' boolean (default on)
+ global
+ {not in Vi}
+ When on, all the windows are automatically made the same size after
+ splitting or closing a window. When off, splitting a window will
+ reduce the size of the current window and leave the other windows the
+ same. When closing a window the extra lines are given to the window
+ next to it (depending on 'splitbelow' and 'splitright').
+ When mixing vertically and horizontally split windows, a minimal size
+ is computed and some windows may be larger if there is room. The
+ 'eadirection' option tells in which direction the size is affected.
+ Changing the height of a window can be avoided by setting
+ 'winfixheight'.
+
+ *'equalprg'* *'ep'*
+'equalprg' 'ep' string (default "")
+ global or local to buffer |global-local|
+ {not in Vi}
+ External program to use for "=" command. When this option is empty
+ the internal formatting functions are used ('lisp', 'cindent' or
+ 'indentexpr').
+ Environment variables are expanded |:set_env|. See |option-backslash|
+ about including spaces and backslashes.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'errorbells'* *'eb'* *'noerrorbells'* *'noeb'*
+'errorbells' 'eb' boolean (default off)
+ global
+ Ring the bell (beep or screen flash) for error messages. This only
+ makes a difference for error messages, the bell will be used always
+ for a lot of errors without a message (e.g., hitting <Esc> in Normal
+ mode). See 'visualbell' on how to make the bell behave like a beep,
+ screen flash or do nothing.
+
+ *'errorfile'* *'ef'*
+'errorfile' 'ef' string (Amiga default: "AztecC.Err",
+ others: "errors.err")
+ global
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ Name of the errorfile for the QuickFix mode (see |:cf|).
+ When the "-q" command-line argument is used, 'errorfile' is set to the
+ following argument. See |-q|.
+ NOT used for the ":make" command. See 'makeef' for that.
+ Environment variables are expanded |:set_env|.
+ See |option-backslash| about including spaces and backslashes.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'errorformat'* *'efm'*
+'errorformat' 'efm' string (default is very long)
+ global or local to buffer |global-local|
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ Scanf-like description of the format for the lines in the error file
+ (see |errorformat|).
+
+ *'esckeys'* *'ek'* *'noesckeys'* *'noek'*
+'esckeys' 'ek' boolean (Vim default: on, Vi default: off)
+ global
+ {not in Vi}
+ Function keys that start with an <Esc> are recognized in Insert
+ mode. When this option is off, the cursor and function keys cannot be
+ used in Insert mode if they start with an <Esc>. The advantage of
+ this is that the single <Esc> is recognized immediately, instead of
+ after one second. Instead of resetting this option, you might want to
+ try changing the values for 'timeoutlen' and 'ttimeoutlen'. Note that
+ when 'esckeys' is off, you can still map anything, but the cursor keys
+ won't work by default.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'eventignore'* *'ei'*
+'eventignore' 'ei' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+autocmd|
+ feature}
+ A list of autocommand event names, which are to be ignored.
+ When set to "all", all autocommand events are ignored, autocommands
+ will not be executed.
+ Otherwise this is a comma separated list of event names. Example: >
+ :set ei=WinEnter,WinLeave
+<
+ *'expandtab'* *'et'* *'noexpandtab'* *'noet'*
+'expandtab' 'et' boolean (default off)
+ local to buffer
+ {not in Vi}
+ In Insert mode: Use the appropriate number of spaces to insert a
+ <Tab>. Spaces are used in indents with the '>' and '<' commands and
+ when 'autoindent' is on. To insert a real tab when 'expandtab' is
+ on, use CTRL-V<Tab>. See also |:retab| and |ins-expandtab|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'exrc'* *'ex'* *'noexrc'* *'noex'*
+'exrc' 'ex' boolean (default off)
+ global
+ {not in Vi}
+ Enables the reading of .vimrc, .exrc and .gvimrc in the current
+ directory. If you switch this option on you should also consider
+ setting the 'secure' option (see |initialization|). Using a local
+ .exrc, .vimrc or .gvimrc is a potential security leak, use with care!
+ also see |.vimrc| and |gui-init|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'fileencoding'* *'fenc'* *E213*
+'fileencoding' 'fenc' string (default: "")
+ local to buffer
+ {only available when compiled with the |+multi_byte|
+ feature}
+ {not in Vi}
+ Sets the character encoding for the file of this buffer.
+ When 'fileencoding' is different from 'encoding', conversion will be
+ done when reading and writing the file.
+ When 'fileencoding' is empty, the same value as 'encoding' will be
+ used (no conversion when reading or writing a file).
+ WARNING: Conversion can cause loss of information! When
+ 'encoding' is "utf-8" conversion is most likely done in a way
+ that the reverse conversion results in the same text. When
+ 'encoding' is not "utf-8" some characters may be lost!
+ See 'encoding' for the possible values. Additionally, values may be
+ specified that can be handled by the converter, see
+ |mbyte-conversion|.
+ When reading a file 'fileencoding' will be set from 'fileencodings'.
+ To read a file in a certain encoding it won't work by setting
+ 'fileencoding', use the |++enc| argument.
+ Prepending "8bit-" and "2byte-" has no meaning here, they are ignored.
+ When the option is set, the value is converted to lowercase. Thus
+ you can set it with uppercase values too. '_' characters are
+ replaced with '-'. If a name is recognized from the list for
+ 'encoding', it is replaced by the standard name. For example
+ "ISO8859-2" becomes "iso-8859-2".
+ When this option is set, after starting to edit a file, the 'modified'
+ option is set, because the file would be different when written.
+ If you do this in a modeline, you might want to set 'nomodified' to
+ avoid this.
+ This option can not be changed when 'modifiable' is off.
+
+ *'fe'*
+ NOTE: Before version 6.0 this option specified the encoding for the
+ whole of Vim, this was a mistake. Now use 'encoding' instead. The
+ old short name was 'fe', which is no longer used.
+
+ *'fileencodings'* *'fencs'*
+'fileencodings' 'fencs' string (default: "ucs-bom", "ucs-bom,utf-8,latin1"
+ when 'encoding' is set to a Unicode value)
+ global
+ {only available when compiled with the |+multi_byte|
+ feature}
+ {not in Vi}
+ This is a list of character encodings considered when starting to edit
+ an existing file. When a file is read, Vim tries to use the first
+ mentioned character encoding. If an error is detected, the next one
+ in the list is tried. When an encoding is found that works,
+ 'fileencoding' is set to it. If all fail, 'fileencoding' is set to
+ an empty string, which means the value of 'encoding' is used.
+ WARNING: Conversion can cause loss of information! When
+ 'encoding' is "utf-8" (or one of the other Unicode variants)
+ conversion is most likely done in a way that the reverse
+ conversion results in the same text. When 'encoding' is not
+ "utf-8" special characters may be lost!
+ For an empty file or a file with only ASCII characters most encodings
+ will work and the first entry of 'fileencodings' will be used (except
+ "ucs-bom", which requires the BOM to be present). If you prefer
+ another encoding use an BufReadPost autocommand event to test if your
+ preferred encoding is to be used. Example: >
+ au BufReadPost * if search('\S', 'w') == 0 |
+ \ set fenc=iso-2022-jp | endif
+< This sets 'fileencoding' to "iso-2022-jp" if the file does not contain
+ non-blank characters.
+ Note that 'fileencodings' is not used for an new file, 'fileencoding'
+ is always empty then. This means that a non-existing file may get a
+ different encoding than an empty file.
+ The special value "ucs-bom" can be used to check for a Unicode BOM
+ (Byte Order Mark) at the start of the file. It must not be preceded
+ by "utf-8" or another Unicode encoding for this to work properly.
+ An entry for an 8-bit encoding (e.g., "latin1") should be the last,
+ because Vim cannot detect an error, thus the encoding is always
+ accepted.
+ WRONG VALUES: WHAT'S WRONG:
+ latin1,utf-8 "latin1" will always be used
+ utf-8,ucs-bom,latin1 BOM won't be recognized in an utf-8
+ file
+ cp1250,latin1 "cp1250" will always be used
+ If 'fileencodings' is empty, 'fileencoding' is not modified.
+ See 'fileencoding' for the possible values.
+ Setting this option does not have an effect until the next time a file
+ is read.
+
+ *'fileformat'* *'ff'*
+'fileformat' 'ff' string (MS-DOS, MS-Windows, OS/2 default: "dos",
+ Unix default: "unix",
+ Macintosh default: "mac")
+ local to buffer
+ {not in Vi}
+ This gives the <EOL> of the current buffer, which is used for
+ reading/writing the buffer from/to a file:
+ dos <CR> <NL>
+ unix <NL>
+ mac <CR>
+ When "dos" is used, CTRL-Z at the end of a file is ignored.
+ 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'.
+ 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'
+ option is set, because the file would be different when written.
+ This option can not be changed when 'modifiable' is off.
+ For backwards compatibility: When this option is set to "dos",
+ 'textmode' is set, otherwise 'textmode' is reset.
+
+ *'fileformats'* *'ffs'*
+'fileformats' 'ffs' string (default:
+ Vim+Vi MS-DOS, MS-Windows OS/2: "dos,unix",
+ Vim Unix: "unix,dos",
+ Vim Mac: "mac,unix,dos",
+ Vi Cygwin: "unix,dos",
+ Vi others: "")
+ global
+ {not in Vi}
+ This gives the end-of-line (<EOL>) formats that will be tried when
+ starting to edit a new buffer and when reading a file into an existing
+ buffer:
+ - When empty, the format defined with 'fileformat' will be used
+ always. It is not set automatically.
+ - When set to one name, that format will be used whenever a new buffer
+ is opened. 'fileformat' is set accordingly for that buffer. The
+ 'fileformats' name will be used when a file is read into an existing
+ buffer, no matter what 'fileformat' for that buffer is set to.
+ - When more than one name is present, separated by commas, automatic
+ <EOL> detection will be done when reading a file. When starting to
+ edit a file, a check is done for the <EOL>:
+ 1. If all lines end in <CR><NL>, and 'fileformats' includes "dos",
+ 'fileformat' is set to "dos".
+ 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".
+ 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
+ this happens like 'fileformat' has been set appropriately for that
+ file only, the option is not changed.
+ When 'binary' is set, the value of 'fileformats' is not used.
+
+ 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:
+ - When 'fileformats' is empty, there is no automatic detection. Dos
+ format will be used.
+ - When 'fileformats' is set to one or more names, automatic detection
+ is done. This is based on the first <NL> in the file: If there is a
+ <CR> in front of it, Dos format is used, otherwise Unix format is
+ used.
+ Also see |file-formats|.
+ For backwards compatibility: When this option is set to an empty
+ string or one format (no comma is included), 'textauto' is reset,
+ otherwise 'textauto' is set.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'filetype'* *'ft'*
+'filetype' 'ft' string (default: "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+autocmd|
+ feature}
+ When this option is set, the FileType autocommand event is triggered.
+ All autocommands that match with the value of this option will be
+ executed. Thus the value of 'filetype' is used in place of the file
+ name.
+ Otherwise this option does not always reflect the current file type.
+ This option is normally set when the file type is detected. To enable
+ this use the ":filetype on" command. |:filetype|
+ Setting this option to a different value is most useful in a modeline,
+ for a file for which the file type is not automatically recognized.
+ Example, for in an IDL file: >
+ /* vim: set filetype=idl : */
+< |FileType| |filetypes|
+ 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'.
+
+ *'fillchars'* *'fcs'*
+'fillchars' 'fcs' string (default "vert:|,fold:-")
+ global
+ {not in Vi}
+ {not available when compiled without the |+windows|
+ and |+folding| features}
+ Characters to fill the statuslines and vertical separators.
+ It is a comma separated list of items:
+
+ item default Used for ~
+ stl:c ' ' or '^' statusline of the current window
+ stlnc:c ' ' or '-' statusline of the non-current windows
+ vert:c '|' vertical separators |:vsplit|
+ fold:c '-' filling 'foldtext'
+ diff:c '-' deleted lines of the 'diff' option
+
+ Any one that is omitted will fall back to the default. For "stl" and
+ "stlnc" the space will be used when there is highlighting, '^' or '-'
+ otherwise.
+
+ Example: >
+ :set fillchars=stl:^,stlnc:-,vert:\|,fold:-,diff:-
+< This is similar to the default, except that these characters will also
+ be used when there is highlighting.
+
+ The highlighting used for these items:
+ item highlight group ~
+ stl:c StatusLine |hl-StatusLine|
+ stlnc:c StatusLineNC |hl-StatusLineNC|
+ vert:c VertSplit |hl-VertSplit|
+ fold:c Folded |hl-Folded|
+ diff:c DiffDelete |hl-DiffDelete|
+
+ *'fkmap'* *'fk'* *'nofkmap'* *'nofk'*
+'fkmap' 'fk' boolean (default off) *E198*
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ When on, the keyboard is mapped for the Farsi character set.
+ Normally you would set 'allowrevins' and use CTRL-_ in insert mode to
+ toggle this option |i_CTRL-_|. See |farsi.txt|.
+
+ *'foldclose'* *'fcl'*
+'foldclose' 'fcl' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ When set to "all", a fold is closed when the cursor isn't in it and
+ its level is higher than 'foldlevel'. Useful if you want folds to
+ automatically close when moving out of them.
+
+ *'foldcolumn'* *'fdc'*
+'foldcolumn' 'fdc' number (default 0)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ When non-zero, a column with the specified width is shown at the side
+ of the window which indicates open and closed folds. The maximum
+ value is 12.
+ See |folding|.
+
+ *'foldenable'* *'fen'* *'nofoldenable'* *'nofen'*
+'foldenable' 'fen' boolean (default on)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ When off, all folds are open. This option can be used to quickly
+ switch between showing all text unfolded and viewing the text with
+ folds (including manually opened or closed folds). It can be toggled
+ with the |zi| command. The 'foldcolumn' will remain blank when
+ 'foldenable' is off.
+ This option is set by commands that create a new fold or close a fold.
+ See |folding|.
+
+ *'foldexpr'* *'fde'*
+'foldexpr' 'fde' string (default: "0")
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ or |+eval| feature}
+ The expression used for when 'foldmethod' is "expr". It is evaluated
+ for each line to obtain its fold level. See |fold-expr|. Also see
+ |eval-sandbox|.
+
+ *'foldignore'* *'fdi'*
+'foldignore' 'fdi' string (default: "#")
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ Used only when 'foldmethod' is "indent". Lines starting with
+ characters in 'foldignore' will get their fold level from surrounding
+ lines. White space is skipped before checking for this character.
+ The default "#" works well for C programs. See |fold-indent|.
+
+ *'foldlevel'* *'fdl'*
+'foldlevel' 'fdl' number (default: 0)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ Sets the fold level: Folds with a higher level will be closed.
+ Setting this option to zero will close all folds. Higher numbers will
+ close fewer folds.
+ This option is set by commands like |zm|, |zM| and |zR|.
+ See |fold-foldlevel|.
+
+ *'foldlevelstart'* *'fdls'*
+'foldlevelstart' 'fdls' number (default: -1)
+ global
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ Sets 'foldlevel' when starting to edit another buffer in a window.
+ Useful to always start editing with all folds closed (value zero),
+ some folds closed (one) or no folds closed (99).
+ This is done before reading any modeline, thus a setting in a modeline
+ overrules this option. Starting to edit a file for |diff-mode| also
+ ignores this option and closes all folds.
+ It is also done before BufReadPre autocommands, to allow an autocmd to
+ overrule the 'foldlevel' value for specific files.
+ When the value is negative, it is not used.
+
+ *'foldmarker'* *'fmr'* *E536*
+'foldmarker' 'fmr' string (default: "{{{,}}}")
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ The start and end marker used when 'foldmethod' is "marker". There
+ must be one comma, which separates the start and end marker. The
+ marker is a literal string (a regular expression would be too slow).
+ See |fold-marker|.
+
+ *'foldmethod'* *'fdm'*
+'foldmethod' 'fdm' string (default: "manual")
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ The kind of folding used for the current window. Possible values:
+ |fold-manual| manual Folds are created manually.
+ |fold-indent| indent Lines with equal indent form a fold.
+ |fold-expr| expr 'foldexpr' gives the fold level of a line.
+ |fold-marker| marker Markers are used to specify folds.
+ |fold-syntax| syntax Syntax highlighting items specify folds.
+ |fold-diff| diff Fold text that is not changed.
+
+ *'foldminlines'* *'fml'*
+'foldminlines' 'fml' number (default: 1)
+ local to window
+ {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
+ "zc" to close a fold, which is displayed open because it's smaller
+ than 'foldminlines', a following "zc" may close a containing fold.
+
+ *'foldnestmax'* *'fdn'*
+'foldnestmax' 'fdn' number (default: 20)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ Sets the maximum nesting of folds for the "indent" and "syntax"
+ methods. This avoids that too many folds will be created. Using more
+ than 20 doesn't work, because the internal limit is 20.
+
+ *'foldopen'* *'fdo'*
+'foldopen' 'fdo' string (default: "block,hor,mark,percent,quickfix,
+ search,tag,undo")
+ global
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ 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.
+ item commands ~
+ all any
+ block "(", "{", "[[", "[{", etc.
+ hor horizontal movements: "l", "w", "fx", etc.
+ insert any command in Insert mode
+ jump far jumps: "G", "gg", etc.
+ mark jumping to a mark: "'m", CTRL-O, etc.
+ percent "%"
+ quickfix ":cn", ":crew", ":make", etc.
+ search search for a pattern: "/", "n", "*", "gd", etc.
+ (not for a search pattern in a ":" command)
+ 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.
+ Note that vertical movements are not here, because it would make it
+ very difficult to move onto a closed fold.
+ In insert mode the folds containing the cursor will always be open
+ when text is inserted.
+ To close folds you can re-apply 'foldlevel' with the |zx| command or
+ set the 'foldclose' option to "all".
+
+ *'foldtext'* *'fdt'*
+'foldtext' 'fdt' string (default: "foldtext()")
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+folding|
+ feature}
+ An expression which is used to specify the text displayed for a closed
+ fold. See |fold-foldtext|.
+
+ *'formatoptions'* *'fo'*
+'formatoptions' 'fo' string (Vim default: "tcq", Vi default: "vt")
+ local to buffer
+ {not in Vi}
+ This is a sequence of letters which describes how automatic
+ formatting is to be done. See |fo-table|. When the 'paste' option is
+ on, no formatting is done (like 'formatoptions' is empty). Commas can
+ be inserted for readability.
+ To avoid problems with flags that are added in the future, use the
+ "+=" and "-=" feature of ":set" |add-option-flags|.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'formatprg'* *'fp'*
+'formatprg' 'fp' string (default "")
+ global
+ {not in Vi}
+ The name of an external program that will be used to format the lines
+ selected with the "gq" command. The program must take the input on
+ stdin and produce the output on stdout. The Unix program "fmt" is
+ such a program. If this option is an empty string, the internal
+ format function will be used |C-indenting|. Environment variables are
+ expanded |:set_env|. See |option-backslash| about including spaces
+ and backslashes.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
+'gdefault' 'gd' boolean (default off)
+ global
+ {not in Vi}
+ When on, the ":substitute" flag 'g' is default on. This means that
+ all matches in a line are substituted instead of one. When a 'g' flag
+ is given to a ":substitute" command, this will toggle the substitution
+ of all or one match. See |complex-change|.
+
+ command 'gdefault' on 'gdefault' off ~
+ :s/// subst. all subst. one
+ :s///g subst. one subst. all
+ :s///gg subst. all subst. one
+
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'grepformat'* *'gfm'*
+'grepformat' 'gfm' string (default "%f:%l%m,%f %l%m")
+ global
+ {not in Vi}
+ Format to recognize for the ":grep" command output.
+ This is a scanf-like string that uses the same format as the
+ 'errorformat' option: see |errorformat|.
+
+ *'grepprg'* *'gp'*
+'grepprg' 'gp' string (default "grep -n ",
+ Unix: "grep -n $* /dev/null",
+ Win32: "findstr /n" or "grep -n",
+ VMS: "SEARCH/NUMBERS ")
+ global or local to buffer |global-local|
+ {not in Vi}
+ Program to use for the ":grep" command. This option may contain '%'
+ and '#' characters, which are expanded like when used in a command-
+ line. The placeholder "$*" is allowed to specify where the arguments
+ will be included. Environment variables are expanded |:set_env|. See
+ |option-backslash| about including spaces and backslashes.
+ When your "grep" accepts the "-H" argument, use this to make ":grep"
+ also work well with a single file: >
+ :set grepprg=grep\ -nH
+< See also the section |:make_makeprg|, since most of the comments there
+ apply equally to 'grepprg'.
+ For Win32, the default is "findstr /n" if "findstr.exe" can be found,
+ otherwise it's "grep -n".
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'guicursor'* *'gcr'* *E545* *E546* *E548* *E549*
+'guicursor' 'gcr' string (default "n-v-c:block-Cursor/lCursor,
+ ve:ver35-Cursor,
+ o:hor50-Cursor,
+ i-ci:ver25-Cursor/lCursor,
+ r-cr:hor20-Cursor/lCursor,
+ sm:block-Cursor
+ -blinkwait175-blinkoff150-blinkon175",
+ for MS-DOS and Win32 console:
+ "n-v-c:block,o:hor50,i-ci:hor15,
+ r-cr:hor30,sm:block")
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled, and
+ for MS-DOS and Win32 console}
+ This option tells Vim what the cursor should look like in different
+ modes. It fully works in the GUI. In an MSDOS or Win32 console, only
+ the height of the cursor can be changed. This can be done by
+ specifying a block cursor, or a percentage for a vertical or
+ horizontal cursor.
+
+ The option is a comma separated list of parts. Each part consist of a
+ mode-list and an argument-list:
+ mode-list:argument-list,mode-list:argument-list,..
+ The mode-list is a dash separated list of these modes:
+ n Normal mode
+ v Visual mode
+ ve Visual mode with 'selection' "exclusive" (same as 'v',
+ if not specified)
+ o Operator-pending mode
+ i Insert mode
+ r Replace mode
+ c Command-line Normal (append) mode
+ ci Command-line Insert mode
+ cr Command-line Replace mode
+ sm showmatch in Insert mode
+ a all modes
+ The argument-list is a dash separated list of these arguments:
+ hor{N} horizontal bar, {N} percent of the character height
+ ver{N} vertical bar, {N} percent of the character width
+ block block cursor, fills the whole character
+ [only one of the above three should be present]
+ blinkwait{N} *cursor-blinking*
+ blinkon{N}
+ blinkoff{N}
+ blink times for cursor: blinkwait is the delay before
+ the cursor starts blinking, blinkon is the time that
+ the cursor is shown and blinkoff is the time that the
+ cursor is not shown. The times are in msec. When one
+ of the numbers is zero, there is no blinking. The
+ default is: "blinkwait700-blinkon400-blinkoff250".
+ These numbers are used for a missing entry. This
+ means that blinking is enabled by default. To switch
+ blinking off you can use "blinkon0". The cursor only
+ blinks when Vim is waiting for input, not while
+ executing a command.
+ To make the cursor blink in an xterm, see
+ |xterm-blink|.
+ {group-name}
+ a highlight group name, that sets the color and font
+ for the cursor
+ {group-name}/{group-name}
+ Two highlight group names, the first is used when
+ no language mappings are used, the other when they
+ are. |language-mapping|
+
+ Examples of parts:
+ n-c-v:block-nCursor in Normal, Command-line and Visual mode, use a
+ block cursor with colors from the "nCursor"
+ highlight group
+ i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150
+ In Insert and Command-line Insert mode, use a
+ 30% vertical bar cursor with colors from the
+ "iCursor" highlight group. Blink a bit
+ faster.
+
+ The 'a' mode is different. It will set the given argument-list for
+ all modes. It does not reset anything to defaults. This can be used
+ to do a common setting for all modes. For example, to switch off
+ blinking: "a:blinkon0"
+
+ Examples of cursor highlighting: >
+ :highlight Cursor gui=reverse guifg=NONE guibg=NONE
+ :highlight Cursor gui=NONE guifg=bg guibg=fg
+<
+ *'guifont'* *'gfn'*
+ *E235* *E596* *E610* *E611*
+'guifont' 'gfn' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled}
+ This is a list of fonts which will be used for the GUI version of Vim.
+ In its simplest form the value is just one font name. When
+ the font cannot be found you will get an error message. To try other
+ font names a list can be specified, font names separated with commas.
+ The first valid font is used.
+ When 'guifontset' is not empty, 'guifont' is not used.
+ Spaces after a comma are ignored. To include a comma in a font name
+ precede it with a backslash. Setting an option requires an extra
+ backslash before a space and a backslash. See also
+ |option-backslash|. For example: >
+ :set guifont=Screen15,\ 7x13,font\\,with\\,commas
+< will make vim try to use the font "Screen15" first, and if it fails it
+ will try to use "7x13" and then "font,with,commas" instead.
+ For the GTK+ 2 GUI the font name looks like this: >
+ :set guifont=Andale\ Mono\ 11
+< That's all. XLFDs are no longer accepted.
+ *E236*
+ Note that the fonts must be mono-spaced (all characters have the same
+ width).
+ To preview a font on X11, you might be able to use the "xfontsel"
+ program. The "xlsfonts" program gives a list of all available fonts.
+ For Win32, GTK and Photon only: >
+ :set guifont=*
+< will bring up a font requester, where you can pick the font you want.
+ If none of the fonts can be loaded, vim will keep the current setting.
+ If an empty font list is given, vim will try using other resource
+ settings (for X, it will use the Vim.font resource), and finally it
+ will try some builtin default which should always be there ("7x13" in
+ the case of X). The font names given should be "normal" fonts. Vim
+ will try to find the related bold and italic fonts.
+ For the Win32 GUI *E244* *E245*
+ - takes these options in the font name:
+ hXX - height is XX (points, can be floating-point)
+ wXX - width is XX (points, can be floating-point)
+ b - bold
+ i - italic
+ u - underline
+ s - strikeout
+ cXX - character set XX. valid charsets are: ANSI, ARABIC,
+ BALTIC, CHINESEBIG5, DEFAULT, EASTEUROPE, GB2312, GREEK,
+ HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS,
+ SYMBOL, THAI, TURKISH, VIETNAMESE ANSI and BALTIC.
+
+ Use a ':' to separate the options.
+ - A '_' can be used in the place of a space, so you don't need to use
+ backslashes to escape the spaces.
+ - Examples: >
+ :set guifont=courier_new:h12:w5:b:cRUSSIAN
+ :set guifont=Andale_Mono:h7.5:w4.5
+< See also |font-sizes|.
+
+ *'guifontset'* *'gfs'*
+ *E250* *E252* *E234* *E597* *E598*
+'guifontset' 'gfs' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled and
+ with the |+xfontset| feature}
+ {not available in the GTK+ 2 GUI}
+ When not empty, specifies two (or more) fonts to be used. The first
+ one for normal English, the second one for your special language. See
+ |xfontset|.
+ Setting this option also means that all font names will be handled as
+ a fontset name. Also the ones used for the "font" argument of the
+ |:highlight| command.
+ The fonts must match with the current locale. If fonts for the
+ character sets that the current locale uses are not included, setting
+ 'guifontset' will fail.
+ Note the difference between 'guifont' and 'guifontset': In 'guifont'
+ the comma-separated names are alternative names, one of which will be
+ used. In 'guifontset' the whole string is one fontset name,
+ including the commas. It is not possible to specify alternative
+ fontset names.
+ This example works on many X11 systems: >
+ :set guifontset=-*-*-medium-r-normal--16-*-*-*-c-*-*-*
+<
+ *'guifontwide'* *'gfw'* *E231* *E533* *E534*
+'guifontwide' 'gfw' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled}
+ When not empty, specifies a comma-separated list of fonts to be used
+ for double-width characters. The first font that can be loaded is
+ used.
+ Note: The size of these fonts must be exactly twice as wide as the one
+ specified with 'guifont' and the same height.
+
+ All GUI versions but GTK+ 2:
+
+ 'guifontwide' is only used when 'encoding' is set to "utf-8" and
+ 'guifontset' is empty or invalid.
+ When 'guifont' is set and a valid font is found in it and
+ 'guifontwide' is empty Vim will attempt to find a matching
+ double-width font and set 'guifontwide' to it.
+
+ GTK+ 2 GUI only: *guifontwide_gtk2*
+
+ If set and valid, 'guifontwide' is always used for double width
+ characters, even if 'encoding' is not set to "utf-8".
+ Vim does not attempt to find an appropriate value for 'guifontwide'
+ automatically. If 'guifontwide' is empty Pango/Xft will choose the
+ font for characters not available in 'guifont'. Thus you do not need
+ to set 'guifontwide' at all unless you want to override the choice
+ made by Pango/Xft.
+
+ *'guiheadroom'* *'ghr'*
+'guiheadroom' 'ghr' number (default 50)
+ global
+ {not in Vi} {only for GTK and X11 GUI}
+ The number of pixels subtracted from the screen height when fitting
+ the GUI window on the screen. Set this before the GUI is started,
+ e.g., in your |gvimrc| file. When zero, the whole screen height will
+ be used by the window. When positive, the specified number of pixel
+ lines will be left for window decorations and other items on the
+ screen. Set it to a negative value to allow windows taller than the
+ screen.
+
+ *'guioptions'* *'go'*
+'guioptions' 'go' string (default "gmrLtT" (MS-Windows),
+ "agimrLtT" (GTK, Motif and Athena)
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled}
+ This option only has an effect in the GUI version of vim. It is a
+ sequence of letters which describes what components and options of the
+ GUI should be used.
+ To avoid problems with flags that are added in the future, use the
+ "+=" and "-=" feature of ":set" |add-option-flags|.
+
+ Valid letters are as follows:
+ *guioptions_a*
+ 'a' Autoselect: If present, then whenever VISUAL mode is started,
+ or the Visual area extended, Vim tries to become the owner of
+ the windowing system's global selection. This means that the
+ Visually highlighted text is available for pasting into other
+ applications as well as into Vim itself. When the Visual mode
+ ends, possibly due to an operation on the text, or when an
+ application wants to paste the selection, the highlighted text
+ is automatically yanked into the "* selection register.
+ Thus the selection is still available for pasting into other
+ applications after the VISUAL mode has ended.
+ If not present, then Vim won't become the owner of the
+ 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.
+
+ 'A' Autoselect for the modeless selection. Like 'a', but only
+ applies to the modeless selection.
+
+ 'guioptions' autoselect Visual autoselect modeless ~
+ "" - -
+ "a" yes yes
+ "A" - yes
+ "aA" yes yes
+
+ 'c' Use console dialogs instead of popup dialogs for simple
+ choices.
+
+ 'f' Foreground: Don't use fork() to detach the GUI from the shell
+ where it was started. Use this for programs that wait for the
+ editor to finish (e.g., an e-mail program). Alternatively you
+ can use "gvim -f" or ":gui -f" to start the GUI in the
+ foreground. |gui-fork|
+ Note: Set this option in the vimrc file. The forking may have
+ happened already when the gvimrc file is read.
+
+ 'i' Use a Vim icon. For GTK with KDE it is used in the left-upper
+ corner of the window. It's black&white on non-GTK, because of
+ limitations of X11. For a color icon, see |X11-icon|.
+
+ 'm' Menu bar is present.
+ 'M' The system menu "$VIMRUNTIME/menu.vim" is not sourced. Note
+ that this flag must be added in the .vimrc file, before
+ switching on syntax or filetype recognition (when the .gvimrc
+ file is sourced the system menu has already been loaded; the
+ ":syntax on" and ":filetype on" commands load the menu too).
+ 'g' Grey menu items: Make menu items that are not active grey. If
+ 'g' is not included inactive menu items are not shown at all.
+ Exception: Athena will always use grey menu items.
+
+ 't' Include tearoff menu items. Currently only works for Win32,
+ GTK+, and Motif 1.2 GUI.
+ 'T' Include Toolbar. Currently only in Win32, GTK+, Motif, and
+ Athena GUIs.
+
+ 'r' Right-hand scrollbar is always present.
+ 'R' Right-hand scrollbar is present when there is a vertically
+ split window.
+ 'l' Left-hand scrollbar is always present.
+ 'L' Left-hand scrollbar is present when there is a vertically
+ split window.
+ 'b' Bottom (horizontal) scrollbar is present. Its size depends on
+ the longest visible line, or on the cursor line if the 'h'
+ flag is included. |gui-horiz-scroll|
+ 'h' Limit horizontal scrollbar size to the length of the cursor
+ line. Reduces computations. |gui-horiz-scroll|
+
+ And yes, you may even have scrollbars on the left AND the right if
+ you really want to :-). See |gui-scrollbars| for more information.
+
+ 'v' Use a vertical button layout for dialogs. When not included,
+ a horizontal layout is preferred, but when it doesn't fit a
+ vertical layout is used anyway.
+ 'p' Use Pointer callbacks for X11 GUI. This is required for some
+ window managers. If the cursor is not blinking or hollow at
+ the right moment, try adding this flag. This must be done
+ before starting the GUI. Set it in your gvimrc. Adding or
+ removing it after the GUI has started has no effect.
+ 'F' Add a footer. Only for Motif. See |gui-footer|.
+
+ *'guipty'* *'noguipty'*
+'guipty' boolean (default on)
+ global
+ {not in Vi}
+ {only available when compiled with GUI enabled}
+ Only in the GUI: If on, an attempt is made to open a pseudo-tty for
+ I/O to/from shell commands. See |gui-pty|.
+
+ *'helpfile'* *'hf'*
+'helpfile' 'hf' string (default (MSDOS) "$VIMRUNTIME\doc\help.txt"
+ (others) "$VIMRUNTIME/doc/help.txt")
+ global
+ {not in Vi}
+ Name of the main help file. All distributed help files should be
+ placed together in one directory. Additionally, all "doc" directories
+ in 'runtimepath' will be used.
+ Environment variables are expanded |:set_env|. For example:
+ "$VIMRUNTIME/doc/help.txt". If $VIMRUNTIME is not set, $VIM is also
+ tried. Also see |$VIMRUNTIME| and |option-backslash| about including
+ spaces and backslashes.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'helpheight'* *'hh'*
+'helpheight' 'hh' number (default 20)
+ global
+ {not in Vi}
+ {not available when compiled without the +windows
+ feature}
+ Minimal initial height of the help window when it is opened with the
+ ":help" command. The initial height of the help window is half of the
+ current window, or (when the 'ea' option is on) the same as other
+ windows. When the height is less than 'helpheight', the height is
+ set to 'helpheight'. Set to zero to disable.
+
+ *'helplang'* *'hlg'*
+'helplang' 'hlg' string (default: messages language or empty)
+ global
+ {only available when compiled with the |+multi_lang|
+ feature}
+ {not in Vi}
+ Comma separated list of languages. Vim will use the first language
+ for which the desired help can be found. The English help will always
+ be used as a last resort. You can add "en" to prefer English over
+ another language, but that will only find tags that exist in that
+ language and not in the English help.
+ Example: >
+ :set helplang=de,it
+< This will first search German, then Italian and finally English help
+ files.
+ When using |CTRL-]| and ":help!" in a non-English help file Vim will
+ try to find the tag in the current language before using this option.
+ See |help-translated|.
+
+ *'hidden'* *'hid'* *'nohidden'* *'nohid'*
+'hidden' 'hid' boolean (default off)
+ global
+ {not in Vi}
+ When off a buffer is unloaded when it is |abandon|ed. When on a
+ buffer becomes hidden when it is |abandon|ed. If the buffer is still
+ displayed in another window, it does not become hidden, of course.
+ The commands that move through the buffer list sometimes make a buffer
+ hidden although the 'hidden' option is off: When the buffer is
+ modified, 'autowrite' is off or writing is not possible, and the '!'
+ flag was used. See also |windows.txt|.
+ This option is set for one command with ":hide {command}" |:hide|.
+ WARNING: It's easy to forget that you have changes in hidden buffers.
+ Think twice when using ":q!" or ":qa!".
+
+ *'highlight'* *'hl'*
+'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,
+ f:Folded,F:FoldColumn,A:DiffAdd,
+ C:DiffChange,D:DiffDelete,T:DiffText,
+ >:SignColumn")
+ global
+ {not in Vi}
+ This option can be used to set highlighting mode for various
+ occasions. It is a comma separated list of character pairs. The
+ first character in a pair gives the occasion, the second the mode to
+ use for that occasion. The occasions are:
+ |hl-SpecialKey| 8 Meta and special keys listed with ":map"
+ |hl-NonText| @ '~' and '@' at the end of the window and
+ characters from 'showbreak'
+ |hl-Directory| d directories in CTRL-D listing and other special
+ things in listings
+ |hl-ErrorMsg| e error messages
+ h (obsolete, ignored)
+ |hl-IncSearch| i 'incsearch' highlighting
+ |hl-Search| l last search pattern highlighting (see 'hlsearch')
+ |hl-MoreMsg| m |more-prompt|
+ |hl-ModeMsg| M Mode (e.g., "-- INSERT --")
+ |hl-LineNr| n line number for ":number" and ":#" commands
+ |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
+ |hl-Title| t Titles for output from ":set all", ":autocmd" etc.
+ |hl-VertSplit| c column used to separate vertically split windows
+ |hl-Visual| v Visual mode
+ |hl-VisualNOS| V Visual mode when Vim does is "Not Owning the
+ Selection" Only X11 Gui's |gui-x11| and
+ |xterm-clipboard|.
+ |hl-WarningMsg| w warning messages
+ |hl-WildMenu| W wildcard matches displayed for 'wildmenu'
+ |hl-Folded| f line used for closed folds
+ |hl-FoldColumn| F 'foldcolumn'
+ |hl-SignColumn| > column used for |signs|
+
+ The display modes are:
+ r reverse (termcap entry "mr" and "me")
+ i italic (termcap entry "ZH" and "ZR")
+ b bold (termcap entry "md" and "me")
+ s standout (termcap entry "so" and "se")
+ u underline (termcap entry "us" and "ue")
+ n no highlighting
+ - no highlighting
+ : use a highlight group
+ The default is used for occasions that are not included.
+ If you want to change what the display modes do, see |dos-colors|
+ for an example.
+ When using the ':' display mode, this must be followed by the name of
+ a highlight group. A highlight group can be used to define any type
+ of highlighting, including using color. See |:highlight| on how to
+ define one. The default uses a different group for each occasion.
+ See |highlight-default| for the default highlight groups.
+
+ *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
+'hlsearch' 'hls' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+extra_search| feature}
+ When there is a previous search pattern, highlight all its matches.
+ The type of highlighting used can be set with the 'l' occasion in the
+ 'highlight' option. This uses the "Search" highlight group by
+ default. Note that only the matching text is highlighted, any offsets
+ 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.
+ 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 an newly drawn line.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'history'* *'hi'*
+'history' 'hi' number (Vim default: 20, Vi default: 0)
+ global
+ {not in Vi}
+ A history of ":" commands, and a history of previous search patterns
+ are remembered. This option decides how many entries may be stored in
+ each of these histories (see |cmdline-editing|).
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'hkmap'* *'hk'* *'nohkmap'* *'nohk'*
+'hkmap' 'hk' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ When on, the keyboard is mapped for the Hebrew character set.
+ Normally you would set 'allowrevins' and use CTRL-_ in insert mode to
+ toggle this option. See |rileft.txt|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'hkmapp'* *'hkp'* *'nohkmapp'* *'nohkp'*
+'hkmapp' 'hkp' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ When on, phonetic keyboard mapping is used. 'hkmap' must also be on.
+ This is useful if you have a non-Hebrew keyboard.
+ See |rileft.txt|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'icon'* *'noicon'*
+'icon' boolean (default off, on when title can be restored)
+ global
+ {not in Vi}
+ {not available when compiled without the |+title|
+ feature}
+ When on, the icon text of the window will be set to the value of
+ 'iconstring' (if it is not empty), or to the name of the file
+ currently being edited. Only the last part of the name is used.
+ Overridden by the 'iconstring' option.
+ Only works if the terminal supports setting window icons (currently
+ only X11 GUI and terminals with a non-empty 't_IS' option - these are
+ Unix xterm and iris-ansi by default, where 't_IS' is taken from the
+ builtin termcap).
+ When Vim was compiled with HAVE_X11 defined, the original icon will be
+ restored if possible |X11|. See |X11-icon| for changing the icon on
+ X11.
+
+ *'iconstring'*
+'iconstring' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+title|
+ feature}
+ When this option is not empty, it will be used for the icon text of
+ the window. This happens only when the 'icon' option is on.
+ Only works if the terminal supports setting window icon text
+ (currently only X11 GUI and terminals with a non-empty 't_IS' option).
+ Does not work for MS Windows.
+ When Vim was compiled with HAVE_X11 defined, the original icon will be
+ restored if possible |X11|.
+ When this option contains printf-style '%' items, they will be
+ expanded according to the rules used for 'statusline'. See
+ 'titlestring' for example settings.
+ {not available when compiled without the |+statusline| feature}
+
+ *'ignorecase'* *'ic'* *'noignorecase'* *'noic'*
+'ignorecase' 'ic' boolean (default off)
+ global
+ Ignore case in search patterns. Also used when searching in the tags
+ file.
+ Also see 'smartcase'.
+ Can be overruled by using "\c" or "\C" in the pattern, see
+ |/ignorecase|.
+
+ *'imactivatekey'* *'imak'*
+'imactivatekey' 'imak' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with |+xim| and
+ |+GUI_GTK|}
+ Specifies the key that your Input Method in X-Windows uses for
+ activation. When this is specified correctly, vim can fully control
+ IM with 'imcmdline', 'iminsert' and 'imsearch'.
+ You can't use this option to change the activation key, the option
+ tells Vim what the key is.
+ Format:
+ [MODIFIER_FLAG-]KEY_STRING
+
+ These characters can be used for MODIFIER_FLAG (case is ignored):
+ S Shift key
+ L Lock key
+ C Control key
+ 1 Mod1 key
+ 2 Mod2 key
+ 3 Mod3 key
+ 4 Mod4 key
+ 5 Mod5 key
+ Combinations are allowed, for example "S-C-space" or "SC-space" are
+ both shift+ctrl+space.
+ See <X11/keysymdef.h> and XStringToKeysym for KEY_STRING.
+
+ Example: >
+ :set imactivatekey=S-space
+< "S-space" means shift+space. This is the activation key for kinput2 +
+ canna (Japanese), and ami (Korean).
+
+ *'imcmdline'* *'imc'* *'noimcmdline'* *'noimc'*
+'imcmdline' 'imc' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+xim|
+ |+multi_byte_ime| or |global-ime| feature}
+ When set the Input Method is always on when starting to edit a command
+ line, unless entering a search pattern (see 'imsearch' for that).
+ Setting this option is useful when your input method allows entering
+ English characters directly, e.g., when it's used to type accented
+ characters with dead keys.
+
+ *'imdisable'* *'imd'* *'nodisable'* *'noimd'*
+'imdisable' 'imd' boolean (default off, on for some systems (SGI))
+ global
+ {not in Vi}
+ {only available when compiled with the |+xim|
+ |+multi_byte_ime| or |global-ime| feature}
+ When set the Input Method is never used. This is useful to disable
+ the IM when it doesn't work properly.
+ Currently this option is on by default for SGI/IRIX machines. This
+ may change in later releases.
+
+ *'iminsert'* *'imi'*
+'iminsert' 'imi' number (default 0, 2 when an input method is supported)
+ local to buffer
+ {not in Vi}
+ Specifies whether :lmap or an Input Method (IM) is to be used in
+ Insert mode. Valid values:
+ 0 :lmap is off and IM is off
+ 1 :lmap is ON and IM is off
+ 2 :lmap is off and IM is ON
+ 2 is available only when compiled with the |+multi_byte_ime|, |+xim|
+ or |global-ime|.
+ To always reset the option to zero when leaving Insert mode with <Esc>
+ this can be used: >
+ :inoremap <ESC> <ESC>:set iminsert=0<CR>
+< This makes :lmap and IM turn off automatically when leaving Insert
+ mode.
+ Note that this option changes when using CTRL-^ in Insert mode
+ |i_CTRL-^|.
+ The value is set to 1 when setting 'keymap' to a valid keymap name.
+ It is also used for the argument of commands like "r" and "f".
+ The value 0 may not work correctly with Athena and Motif with some XIM
+ methods. Use 'imdisable' to disable XIM then.
+
+ *'imsearch'* *'ims'*
+'imsearch' 'ims' number (default 0, 2 when an input method is supported)
+ local to buffer
+ {not in Vi}
+ Specifies whether :lmap or an Input Method (IM) is to be used when
+ entering a search pattern. Valid values:
+ -1 the value of 'iminsert' is used, makes it look like
+ 'iminsert' is also used when typing a search pattern
+ 0 :lmap is off and IM is off
+ 1 :lmap is ON and IM is off
+ 2 :lmap is off and IM is ON
+ Note that this option changes when using CTRL-^ in Command-line mode
+ |c_CTRL-^|.
+ The value is set to 1 when it is not -1 and setting the 'keymap'
+ option to a valid keymap name.
+ The value 0 may not work correctly with Athena and Motif with some XIM
+ methods. Use 'imdisable' to disable XIM then.
+
+ *'include'* *'inc'*
+'include' 'inc' string (default "^\s*#\s*include")
+ global or local to buffer |global-local|
+ {not in Vi}
+ {not available when compiled without the
+ |+find_in_path| feature}
+ Pattern to be used to find an include command. It is a search
+ pattern, just like for the "/" command (See |pattern|). The default
+ value is for C programs. This option is used for the commands "[i",
+ "]I", "[d", etc.. The 'isfname' option is used to recognize the file
+ name that comes after the matched pattern. See |option-backslash|
+ about including spaces and backslashes.
+
+ *'includeexpr'* *'inex'*
+'includeexpr' 'inex' string (default "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the
+ |+find_in_path| or |+eval| feature}
+ Expression to be used to transform the string found with the 'include'
+ option to a file name. Mostly useful to change "." to "/" for Java: >
+ :set includeexpr=substitute(v:fname,'\\.','/','g')
+< The "v:fname" variable will be set to the file name that was detected.
+ Evaluated in the |sandbox|.
+ Also used for the |gf| command if an unmodified file name can't be
+ found. Allows doing "gf" on the name after an 'include' statement.
+ Also used for |<cfile>|.
+
+ *'incsearch'* *'is'* *'noincsearch'* *'nois'*
+'incsearch' 'is' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+extra_search| feature}
+ While typing a search command, show immediately where the so far
+ typed pattern matches. The matched string is highlighted. If the
+ pattern is invalid or not found, nothing is shown. The screen will
+ be updated often, this is only useful on fast terminals. Note that
+ the match will be shown, but the cursor is not actually positioned
+ there. You still need to finish the search command with <CR> to move
+ the cursor. The highlighting can be set with the 'i' flag in
+ 'highlight'. See also: 'hlsearch'.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'indentexpr'* *'inde'*
+'indentexpr' 'inde' string (default "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+cindent|
+ or |+eval| features}
+ Expression which is evaluated to obtain the proper indent for a line.
+ 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.
+ 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 as this line
+ when the expression is evaluated (but it may be moved around).
+ The expression must return the number of spaces worth of indent. It
+ can return "-1" to keep the current indent (this means 'autoindent' is
+ used for the indent).
+ Functions useful for computing the indent are |indent()|, |cindent()|
+ and |lispindent()|.
+ The evaluation of the expression must not have side effects! It must
+ not change the text, jump to another window, etc. Afterwards the
+ cursor position is always restored, thus the cursor may be moved.
+ Normally this option would be set to call a function: >
+ :set indentexpr=GetMyIndent()
+< Error messages will be suppressed, unless the 'debug' option contains
+ "msg".
+ See |indent-expression|. Also see |eval-sandbox|.
+ NOTE: This option is made empty when 'compatible' is set.
+
+ *'indentkeys'* *'indk'*
+'indentkeys' 'indk' string (default "0{,0},:,0#,!^F,o,O,e")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+cindent|
+ feature}
+ A list of keys that, when typed in Insert mode, cause reindenting of
+ the current line. Only happens if 'indentexpr' isn't empty.
+ The format is identical to 'cinkeys', see |indentkeys-format|.
+ See |C-indenting| and |indent-expression|.
+
+ *'infercase'* *'inf'* *'noinfercase'* *'noinf'*
+'infercase' 'inf' boolean (default off)
+ local to buffer
+ {not in Vi}
+ When doing keyword completion in insert mode |ins-completion|, and
+ 'ignorecase' is also on, the case of the match is adjusted. If the
+ typed text contains a lowercase letter where the match has an upper
+ case letter, the completed part is made lowercase. If the typed text
+ has no lowercase letters and the match has a lowercase letter where
+ the typed text has an uppercase letter, and there is a letter before
+ it, the completed part is made uppercase.
+
+ *'insertmode'* *'im'* *'noinsertmode'* *'noim'*
+'insertmode' 'im' boolean (default off)
+ global
+ {not in Vi}
+ Makes Vim work in a way that Insert mode is the default mode. Useful
+ if you want to use Vim as a modeless editor. Used for |evim|.
+ These Insert mode commands will be useful:
+ - Use the cursor keys to move around.
+ - Use CTRL-O to execute one Normal mode command |i_CTRL-O|). When
+ this is a mapping, it is executed as if 'insertmode' was off.
+ Normal mode remains active until the mapping is finished.
+ *i_CTRL-L*
+ - Use CTRL-L to execute a number of Normal mode commands, then use
+ <Esc> to get back to Insert mode.
+
+ These items change when 'insertmode' is set:
+ - when starting to edit of a file, Vim goes to Insert mode.
+ - <Esc> in Insert mode is a no-op and beeps.
+ - <Esc> in Normal mode makes Vim go to Insert mode.
+ - CTRL-L in Insert mode is a command, it is not inserted.
+ - CTRL-Z in Insert mode suspends Vim, see |CTRL-Z|. *i_CTRL-Z*
+ However, when <Esc> is used inside a mapping, it behaves like
+ 'insertmode' was not set. This was done to be able to use the same
+ mappings with 'insertmode' set or not set.
+ When executing commands with |:normal| 'insertmode' is not used.
+
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'isfname'* *'isf'*
+'isfname' 'isf' string (default for MS-DOS, Win32 and OS/2:
+ "@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
+ for AMIGA: "@,48-57,/,.,-,_,+,,,$,:"
+ for VMS: "@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~"
+ for OS/390: "@,240-249,/,.,-,_,+,,,#,$,%,~,="
+ otherwise: "@,48-57,/,.,-,_,+,,,#,$,%,~,=")
+ global
+ {not in Vi}
+ The characters specified by this option are included in file names and
+ path names. Filenames are used for commands like "gf", "[i" and in
+ the tags file. It is also used for "\f" in a |pattern|.
+ Multi-byte characters 256 and above are always included, only the
+ characters up to 255 are specified with this option.
+ For UTF-8 the characters 0xa0 to 0xff are included as well.
+
+ Note that on systems using a backslash as path separator, Vim tries to
+ do its best to make it work as you would expect. That is a bit
+ tricky, since Vi originally used the backslash to escape special
+ characters. Vim will not remove a backslash in front of a normal file
+ name character on these systems, but it will on Unix and alikes. The
+ '&' and '^' are not included by default, because these are special for
+ cmd.exe.
+
+ The format of this option is a list of parts, separated with commas.
+ Each part can be a single character number or a range. A range is two
+ character numbers with '-' in between. A character number can be a
+ decimal number between 0 and 255 or the ASCII character itself (does
+ not work for digits). Example:
+ "_,-,128-140,#-43" (include '_' and '-' and the range
+ 128 to 140 and '#' to 43)
+ If a part starts with '^', the following character number or range
+ will be excluded from the option. The option is interpreted from left
+ to right. Put the excluded character after the range where it is
+ included. To include '^' itself use it as the last character of the
+ option or the end of a range. Example:
+ "^a-z,#,^" (exclude 'a' to 'z', include '#' and '^')
+ If the character is '@', all characters where isalpha() returns TRUE
+ are included. Normally these are the characters a to z and A to Z,
+ plus accented characters. To include '@' itself use "@-@". Examples:
+ "@,^a-z" All alphabetic characters, excluding lower
+ case letters.
+ "a-z,A-Z,@-@" All letters plus the '@' character.
+ A comma can be included by using it where a character number is
+ expected. Example:
+ "48-57,,,_" Digits, comma and underscore.
+ A comma can be excluded by prepending a '^'. Example:
+ " -~,^,,9" All characters from space to '~', excluding
+ comma, plus <Tab>.
+ See |option-backslash| about including spaces and backslashes.
+
+ *'isident'* *'isi'*
+'isident' 'isi' string (default for MS-DOS, Win32 and OS/2:
+ "@,48-57,_,128-167,224-235"
+ otherwise: "@,48-57,_,192-255")
+ global
+ {not in Vi}
+ The characters given by this option are included in identifiers.
+ Identifiers are used in recognizing environment variables and after a
+ match of the 'define' option. It is also used for "\i" in a
+ |pattern|. See 'isfname' for a description of the format of this
+ option.
+ Careful: If you change this option, it might break expanding
+ environment variables. E.g., when '/' is included and Vim tries to
+ expand "$HOME/.viminfo". Maybe you should change 'iskeyword' instead.
+
+ *'iskeyword'* *'isk'*
+'iskeyword' 'isk' string (Vim default for MS-DOS and Win32:
+ "@,48-57,_,128-167,224-235"
+ otherwise: "@,48-57,_,192-255"
+ Vi default: "@,48-57,_")
+ local to buffer
+ {not in Vi}
+ Keywords are used in searching and recognizing with many commands:
+ "w", "*", "[i", etc. It is also used for "\k" in a |pattern|. See
+ 'isfname' for a description of the format of this option. For C
+ programs you could use "a-z,A-Z,48-57,_,.,-,>".
+ For a help file it is set to all non-blank printable characters except
+ '*', '"' and '|' (so that CTRL-] on a command finds the help for that
+ command).
+ When the 'lisp' option is on the '-' character is always included.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'isprint'* *'isp'*
+'isprint' 'isp' string (default for MS-DOS, Win32, OS/2 and Macintosh:
+ "@,~-255"; otherwise: "@,161-255")
+ global
+ {not in Vi}
+ The characters given by this option are displayed directly on the
+ screen. It is also used for "\p" in a |pattern|. The characters from
+ space (ASCII 32) to '~' (ASCII 126) are always displayed directly,
+ even when they are not included in 'isprint' or excluded. See
+ 'isfname' for a description of the format of this option.
+
+ Non-printable characters are displayed with two characters:
+ 0 - 31 "^@" - "^_"
+ 32 - 126 always single characters
+ 127 "^?"
+ 128 - 159 "~@" - "~_"
+ 160 - 254 "| " - "|~"
+ 255 "~?"
+ When 'encoding' is a Unicode one, illegal bytes from 128 to 255 are
+ displayed as <xx>, with the hexadecimal value of the byte.
+ When 'display' contains "uhex" all unprintable characters are
+ displayed as <xx>.
+ The NonText highlighting will be used for unprintable characters.
+ |hl-NonText|
+
+ Multi-byte characters 256 and above are always included, only the
+ characters up to 255 are specified with this option. When a character
+ is printable but it is not available in the current font, a
+ replacement character will be shown.
+ Unprintable and zero-width Unicode characters are displayed as <xxxx>.
+ There is no option to specify these characters.
+
+ *'joinspaces'* *'js'* *'nojoinspaces'* *'nojs'*
+'joinspaces' 'js' boolean (default on)
+ global
+ {not in Vi}
+ Insert two spaces after a '.', '?' and '!' with a join command.
+ When 'cpoptions' includes the 'j' flag, only do this after a '.'.
+ Otherwise only one space is inserted.
+ NOTE: This option is set when 'compatible' is set.
+
+ *'key'*
+'key' string (default "")
+ local to buffer
+ {not in Vi}
+ The key that is used for encrypting and decrypting the current buffer.
+ See |encryption|.
+ Careful: Do not set the key value by hand, someone might see the typed
+ key. Use the |:X| command. But you can make 'key' empty: >
+ :set key=
+< It is not possible to get the value of this option with ":set key" or
+ "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!
+
+ *'keymap'* *'kmp'* *E544*
+'keymap' 'kmp' string (default "")
+ local to buffer
+ {not in Vi}
+ {only available when compiled with the |+keymap|
+ feature}
+ Name of a keyboard mapping. See |mbyte-keymap|.
+ Setting this option to a valid keymap name has the side effect of
+ setting 'iminsert' to one, so that the keymap becomes effective.
+ 'imsearch' is also set to one, unless it was -1
+
+ *'keymodel'* *'km'*
+'keymodel' 'km' string (default "")
+ global
+ {not in Vi}
+ List of comma separated words, which enable special things that keys
+ can do. These values can be used:
+ startsel Using a shifted special key starts selection (either
+ Select mode or Visual mode, depending on "key" being
+ present in 'selectmode').
+ stopsel Using a not-shifted special key stops selection.
+ Special keys in this context are the cursor keys, <End>, <Home>,
+ <PageUp> and <PageDown>.
+ The 'keymodel' option is set by the |:behave| command.
+
+ *'keywordprg'* *'kp'*
+'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help",
+ OS/2: "view /", VMS: "help")
+ global or local to buffer |global-local|
+ {not in Vi}
+ Program to use for the |K| command. Environment variables are
+ expanded |:set_env|. ":help" may be used to access the Vim internal
+ help. (Note that previously setting the global option to the empty
+ value did this, which is now deprecated.)
+ When "man" is used, Vim will automatically translate a count for the
+ "K" command to a section number. Also for "man -s", in which case the
+ "-s" is removed when there is no count.
+ See |option-backslash| about including spaces and backslashes.
+ Example: >
+ :set keywordprg=man\ -s
+< This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'langmap'* *'lmap'* *E357* *E358*
+'langmap' 'lmap' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with the |+langmap|
+ feature}
+ This option allows switching your keyboard into a special language
+ mode. When you are typing text in Insert mode the characters are
+ inserted directly. When in command mode the 'langmap' option takes
+ care of translating these special characters to the original meaning
+ of the key. This means you don't have to change the keyboard mode to
+ be able to execute Normal mode commands.
+ This is the opposite of the 'keymap' option, where characters are
+ mapped in Insert mode.
+ This only works for 8-bit characters. The value of 'langmap' may be
+ specified with multi-byte characters (e.g., UTF-8), but only the lower
+ 8 bits of each character will be used.
+
+ Example (for Greek): *greek* >
+ :set langmap=ÁA,ÂB,ØC,ÄD,ÅE,ÖF,ÃG,ÇH,ÉI,ÎJ,ÊK,ËL,ÌM,ÍN,ÏO,ÐP,QQ,ÑR,ÓS,ÔT,ÈU,ÙV,WW,×X,ÕY,ÆZ,áa,âb,øc,äd,åe,öf,ãg,çh,éi,îj,êk,ël,ìm,ín,ïo,ðp,qq,ñr,ós,ôt,èu,ùv,òw,÷x,õy,æz
+< Example (exchanges meaning of z and y for commands): >
+ :set langmap=zy,yz,ZY,YZ
+<
+ The 'langmap' option is a list of parts, separated with commas. Each
+ part can be in one of two forms:
+ 1. A list of pairs. Each pair is a "from" character immediately
+ followed by the "to" character. Examples: "aA", "aAbBcC".
+ 2. A list of "from" characters, a semi-colon and a list of "to"
+ characters. Example: "abc;ABC"
+ Example: "aA,fgh;FGH,cCdDeE"
+ Special characters need to be preceded with a backslash. These are
+ ";", ',' and backslash itself.
+
+ This will allow you to activate vim actions without having to switch
+ back and forth between the languages. Your language characters will
+ be understood as normal vim English characters (according to the
+ langmap mappings) in the following cases:
+ o Normal/Visual mode (commands, buffer/register names, user mappings)
+ o Insert/Replace Mode: Register names after CTRL-R
+ o Insert/Replace Mode: Mappings
+ Characters entered in Command-line mode will NOT be affected by
+ this option. Note that this option can be changed at any time
+ allowing to switch between mappings for different languages/encodings.
+ Use a mapping to avoid having to type it each time!
+
+ *'langmenu'* *'lm'*
+'langmenu' 'lm' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with the |+menu| and
+ |+multi_lang| features}
+ Language to use for menu translation. Tells which file is loaded
+ from the "lang" directory in 'runtimepath': >
+ "lang/menu_" . &langmenu . ".vim"
+< (without the spaces). For example, to always use the Dutch menus, no
+ matter what $LANG is set to: >
+ :set langmenu=nl_NL.ISO_8859-1
+< When 'langmenu' is empty, |v:lang| is used.
+ If your $LANG is set to a non-English language but you do want to use
+ the English menus: >
+ :set langmenu=none
+< This option must be set before loading menus, switching on filetype
+ detection or syntax highlighting. Once the menus are defined setting
+ this option has no effect. But you could do this: >
+ :source $VIMRUNTIME/delmenu.vim
+ :set langmenu=de_DE.ISO_8859-1
+ :source $VIMRUNTIME/menu.vim
+< Warning: This deletes all menus that you defined yourself!
+
+ *'laststatus'* *'ls'*
+'laststatus' 'ls' number (default 1)
+ global
+ {not in Vi}
+ The value of this option influences when the last window will have a
+ status line:
+ 0: never
+ 1: only if there are at least two windows
+ 2: always
+ The screen looks nicer with a status line if you have several
+ windows, but it takes another screen line. |status-line|
+
+ *'lazyredraw'* *'lz'* *'nolazyredraw'* *'nolz'*
+'lazyredraw' 'lz' boolean (default off)
+ global
+ {not in Vi}
+ When this option is set, the screen will not be redrawn while
+ executing macros, registers and other commands that have not been
+ typed. Also, updating the window title is postponed. To force an
+ update use |:redraw|.
+
+ *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
+'linebreak' 'lbr' boolean (default off)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+linebreak|
+ feature}
+ If on Vim will wrap long lines at a character in 'breakat' rather
+ than at the last character that fits on the screen. Unlike
+ 'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
+ it only affects the way the file is displayed, not its contents. The
+ value of 'showbreak' is used to put in front of wrapped lines.
+ This option is not used when the 'wrap' option is off or 'list' is on.
+ Note that <Tab> characters after an <EOL> are mostly not displayed
+ with the right amount of white space.
+
+ *'lines'* *E593*
+'lines' number (default 24 or terminal height)
+ global
+ Number of lines of the Vim window.
+ Normally you don't need to set this. It is done automatically by the
+ terminal initialization code.
+ When Vim is running in the GUI or in a resizable window, setting this
+ option will cause the window size to be changed. When you only want
+ to use the size for the GUI, put the command in your |gvimrc| file.
+ Vim limits the number of lines to what fits on the screen. You can
+ use this command to get the tallest window possible: >
+ :set lines=999
+< If you get less lines than expected, check the 'guiheadroom' option.
+ When you set this option and Vim is unable to change the physical
+ number of lines of the display, the display may be messed up.
+
+ *'linespace'* *'lsp'*
+'linespace' 'lsp' number (default 0, 1 for Win32 GUI)
+ global
+ {not in Vi}
+ {only in the GUI}
+ Number of pixel lines inserted between characters. Useful if the font
+ uses the full character cell height, making lines touch each other.
+ When non-zero there is room for underlining.
+
+ *'lisp'* *'nolisp'*
+'lisp' boolean (default off)
+ local to buffer
+ {not available when compiled without the |+lispindent|
+ feature}
+ Lisp mode: When <Enter> is typed in insert mode set the indent for
+ the next line to Lisp standards (well, sort of). Also happens with
+ "cc" or "S". 'autoindent' must also be on for this to work. The 'p'
+ flag in 'cpoptions' changes the method of indenting: Vi compatible or
+ better. Also see 'lispwords'.
+ The '-' character is included in keyword characters. Redefines the
+ "=" operator to use this same indentation algorithm rather than
+ calling an external program if 'equalprg' is empty.
+ This option is not used when 'paste' is set.
+ {Vi: Does it a little bit differently}
+
+ *'lispwords'* *'lw'*
+'lispwords' 'lw' string (default is very long)
+ global
+ {not in Vi}
+ {not available when compiled without the |+lispindent|
+ feature}
+ Comma separated list of words that influence the Lisp indenting.
+ |'lisp'|
+
+ *'list'* *'nolist'*
+'list' boolean (default off)
+ local to window
+ List mode: Show tabs as CTRL-I, show end of line with $. Useful to
+ see the difference between tabs and spaces and for trailing blanks.
+ Note that this will also affect formatting (set with 'textwidth' or
+ 'wrapmargin') when 'cpoptions' includes 'L'. See 'listchars' for
+ changing the way tabs are displayed.
+
+ *'listchars'* *'lcs'*
+'listchars' 'lcs' string (default "eol:$")
+ global
+ {not in Vi}
+ Strings to use in 'list' mode. It is a comma separated list of string
+ settings.
+ eol:c Character to show at the end of each line. When
+ omitted, there is no extra character at the end of the
+ line.
+ 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.
+ trail:c Character to show for trailing spaces. When omitted,
+ trailing spaces are blank.
+ extends:c Character to show in the last column, when 'wrap' is
+ off and the line continues beyond the right of the
+ screen.
+ 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.
+
+ The characters ':' and ',' should not be used. UTF-8 characters can
+ be used when 'encoding' is "utf-8", otherwise only printable
+ characters are allowed.
+
+ Examples: >
+ :set lcs=tab:>-,trail:-
+ :set lcs=tab:>-,eol:<
+ :set lcs=extends:>,precedes:<
+< The "NonText" highlighting will be used for "eol", "extends" and
+ "precedes". "SpecialKey" for "tab" and "trail".
+
+ *'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*
+'loadplugins' 'lpl' boolean (default on)
+ global
+ {not in Vi}
+ When on the plugin scripts are loaded when starting up |load-plugins|.
+ This option can be reset in your |vimrc| file to disable the loading
+ of plugins.
+ Note that using the "-u NONE" and "--noplugin" command line arguments
+ reset this option. |-u| |--noplugin|
+
+ *'magic'* *'nomagic'*
+'magic' boolean (default on)
+ global
+ Changes the special characters that can be used in search patterns.
+ See |pattern|.
+ NOTE: To avoid portability problems with using patterns, always keep
+ this option at the default "on". Only switch it off when working with
+ old Vi scripts. In any other situation write patterns that work when
+ 'magic' is on.
+
+ *'makeef'* *'mef'*
+'makeef' 'mef' string (default: "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ Name of the errorfile for the |:make| command (see |:make_makeprg|)
+ and the |:grep| command.
+ When it is empty, an internally generated temp file will be used.
+ When "##" is included, it is replaced by a number to make the name
+ unique. This makes sure that the ":make" command doesn't overwrite an
+ existing file.
+ NOT used for the ":cf" command. See 'errorfile' for that.
+ Environment variables are expanded |:set_env|.
+ See |option-backslash| about including spaces and backslashes.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'makeprg'* *'mp'*
+'makeprg' 'mp' string (default "make", VMS: "MMS")
+ global or local to buffer |global-local|
+ {not in Vi}
+ Program to use for the ":make" command. See |:make_makeprg|. This
+ option may contain '%' and '#' characters, which are expanded like
+ when used in a command-line. Environment variables are expanded
+ |:set_env|. See |option-backslash| about including spaces and
+ backslashes. Note that a '|' must be escaped twice: once for ":set"
+ and once for the interpretation of a command. When you use a filter
+ called "myfilter" do it like this: >
+ :set makeprg=gmake\ \\\|\ myfilter
+< The placeholder "$*" can be given (even multiple times) to specify
+ where the arguments will be included, for example: >
+ :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
+< This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'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 character pairs are allowed, and they
+ must be different. The characters must be separated by a colon. The
+ pairs must be separated by a comma. Example for including '<' and '>'
+ (HTML): >
+ :set mps+=<:>
+
+< A more exotic example, to jump between the '=' and ';' in an
+ assignment, useful for languages like C and Java: >
+ :au FileType c,cpp,java set mps+==:;
+
+< For a more advanced way of using "%", see the matchit.vim plugin in
+ the $VIMRUNTIME/macros directory. |add-local-help|
+
+ *'matchtime'* *'mat'*
+'matchtime' 'mat' number (default 5)
+ global
+ {not in Vi}{in Nvi}
+ Tenths of a second to show the matching paren, when 'showmatch' is
+ set. Note that this is not in milliseconds, like other options that
+ set a time. This is to be compatible with Nvi.
+
+ *'maxfuncdepth'* *'mfd'*
+'maxfuncdepth' 'mfd' number (default 100)
+ global
+ {not in Vi}
+ Maximum depth of function calls for user functions. This normally
+ catches endless recursion. When using a recursive function with
+ more depth, set 'maxfuncdepth' to a bigger number. But this will use
+ more memory, there is the danger of failing when memory is exhausted.
+ See also |:function|.
+
+ *'maxmapdepth'* *'mmd'* *E223*
+'maxmapdepth' 'mmd' number (default 1000)
+ global
+ {not in Vi}
+ Maximum number of times a mapping is done without resulting in a
+ character to be used. This normally catches endless mappings, like
+ ":map x y" with ":map y x". It still does not catch ":map g wg",
+ because the 'w' is used before the next mapping is done. See also
+ |key-mapping|.
+
+ *'maxmem'* *'mm'*
+'maxmem' 'mm' number (default between 256 to 5120 (system
+ dependent) or half the amount of memory
+ available)
+ global
+ {not in Vi}
+ Maximum amount of memory (in Kbyte) to use for one buffer. When this
+ limit is reached allocating extra memory for a buffer will cause
+ other memory to be freed. Maximum value 2000000. Use this to work
+ without a limit. Also see 'maxmemtot'.
+
+ *'maxmemtot'* *'mmt'*
+'maxmemtot' 'mmt' number (default between 2048 and 10240 (system
+ dependent) or half the amount of memory
+ available)
+ global
+ {not in Vi}
+ Maximum amount of memory (in Kbyte) to use for all buffers together.
+ Maximum value 2000000. Use this to work without a limit. Also see
+ 'maxmem'.
+
+ *'menuitems'* *'mis'*
+'menuitems' 'mis' number (default 25)
+ global
+ {not in Vi}
+ {not available when compiled without the |+menu|
+ feature}
+ Maximum number of items to use in a menu. Used for menus that are
+ generated from a list of items, e.g., the Buffers menu. Changing this
+ option has no direct effect, the menu must be refreshed first.
+
+ *'modeline'* *'ml'* *'nomodeline'* *'noml'*
+'modeline' 'ml' boolean (Vim default: on, Vi default: off)
+ local to buffer
+ *'modelines'* *'mls'*
+'modelines' 'mls' number (default 5)
+ global
+ {not in Vi}
+ If 'modeline' is on 'modelines' gives the number of lines that is
+ checked for set commands. If 'modeline' is off or 'modelines' is zero
+ no lines are checked. See |modeline|.
+ NOTE: 'modeline' is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
+'modifiable' 'ma' boolean (default on)
+ local to buffer
+ {not in Vi} *E21*
+ When off the buffer contents cannot be changed. The 'fileformat' and
+ 'fileencoding' options also can't be changed.
+ Can be reset with the |-M| command line argument.
+
+ *'modified'* *'mod'* *'nomodified'* *'nomod'*
+'modified' 'mod' boolean (default off)
+ local to buffer
+ {not in Vi}
+ When on, the buffer is considered to be modified. This option is set
+ when:
+ 1. A change was made to the text since it was last written. Using the
+ |undo| command to go back to the original text will reset the
+ option. But undoing changes that were made before writing the
+ buffer will set the option again, since the text is different from
+ when it was written.
+ 2. 'fileformat' or 'fileencoding' is different from its original
+ value. The original value is set when the buffer is read or
+ written. A ":set nomodified" command also resets the original
+ values to the current values and the 'modified' option will be
+ reset.
+ When 'buftype' is "nowrite" or "nofile" this option may be set, but
+ will be ignored.
+
+ *'more'* *'nomore'*
+'more' boolean (Vim default: on, Vi default: off)
+ global
+ {not in Vi}
+ When on, listings pause when the whole screen is filled. You will get
+ the |more-prompt|. When this option is off there are no pauses, the
+ listing continues until finished.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'mouse'* *E538*
+'mouse' string (default "", "a" for GUI, MS-DOS and Win32)
+ global
+ {not in Vi}
+ Enable the use of the mouse. Only works for certain terminals
+ (xterm, MS-DOS, Win32 |win32-mouse|, QNX pterm, and Linux console
+ with gpm). For using the mouse in the GUI, see |gui-mouse|.
+ The mouse can be enabled for different modes:
+ n Normal mode
+ v Visual mode
+ i Insert mode
+ c Command-line mode
+ h all previous modes when editing a help file
+ a all previous modes
+ r for |hit-enter| and |more-prompt| prompt
+ A auto-select in Visual mode
+ Normally you would enable the mouse in all four modes with: >
+ :set mouse=a
+< When the mouse is not enabled, the GUI will still use the mouse for
+ modeless selection. This doesn't move the text cursor.
+
+ See |mouse-using|. Also see |'clipboard'|.
+
+ Note: When enabling the mouse in a terminal, copy/paste will use the
+ "* register if there is access to an X-server. The xterm handling of
+ the mouse buttons can still be used by keeping the shift key pressed.
+ Also see the 'clipboard' option.
+
+ *'mousefocus'* *'mousef'* *'nomousefocus'* *'nomousef'*
+'mousefocus' 'mousef' boolean (default off)
+ global
+ {not in Vi}
+ {only works in the GUI}
+ The window that the mouse pointer is on is automatically activated.
+ When changing the window layout or window focus in another way, the
+ mouse pointer is moved to the window with keyboard focus. Off is the
+ default because it makes using the pull down menus a little goofy, as
+ a pointer transit may activate a window unintentionally.
+
+ *'mousehide'* *'mh'* *'nomousehide'* *'nomh'*
+'mousehide' 'mh' boolean (default on)
+ global
+ {not in Vi}
+ {only works in the GUI}
+ When on, the mouse pointer is hidden when characters are typed.
+ The mouse pointer is restored when the mouse is moved.
+
+ *'mousemodel'* *'mousem'*
+'mousemodel' 'mousem' string (default "extend", "popup" for MS-DOS and Win32)
+ global
+ {not in Vi}
+ Sets the model to use for the mouse. The name mostly specifies what
+ the right mouse button is used for:
+ extend Right mouse button extends a selection. This works
+ like in an xterm.
+ popup Right mouse button pops up a menu. The shifted left
+ mouse button extends a selection. This works like
+ with Microsoft Windows
+ popup_setpos Like "popup", but the cursor will be moved to the
+ position where the mouse was clicked, and thus the
+ selected operation will act upon the clicked object.
+ If clicking inside a selection, that selection will
+ be acted upon, ie. no cursor move. This implies of
+ course, that right clicking outside a selection will
+ end Visual mode.
+ Overview of what button does what for each model:
+ mouse extend popup(_setpos) ~
+ left click place cursor place cursor
+ left drag start selection start selection
+ shift-left search word extend selection
+ right click extend selection popup menu (place cursor)
+ right drag extend selection -
+ middle click paste paste
+
+ In the "popup" model the right mouse button produces a pop-up menu.
+ You need to define this first, see |popup-menu|.
+
+ Note that you can further refine the meaning of buttons with mappings.
+ See |gui-mouse-mapping|. But mappings are NOT used for modeless
+ selection (because that's handled in the GUI code directly).
+
+ The 'mousemodel' option is set by the |:behave| command.
+
+ *'mouseshape'* *'mouses'* *E547*
+'mouseshape' 'mouses' string (default "i:beam,r:beam,s:updown,sd:cross,
+ m:no,ml:up-arrow,v:rightup-arrow"
+ global
+ {not in Vi}
+ {only available when compiled with the |+mouseshape|
+ feature}
+ This option tells Vim what the mouse pointer should look like in
+ different modes. The option is a comma separated list of parts, much
+ like used for 'guicursor'. Each part consist of a mode/location-list
+ and an argument-list:
+ mode-list:shape,mode-list:shape,..
+ The mode-list is a dash separated list of these modes/locations:
+ In a normal window: ~
+ n Normal mode
+ v Visual mode
+ ve Visual mode with 'selection' "exclusive" (same as 'v',
+ if not specified)
+ o Operator-pending mode
+ i Insert mode
+ r Replace mode
+
+ Others: ~
+ c appending to the command-line
+ ci inserting in the command-line
+ cr replacing in the command-line
+ m at the 'Hit ENTER' or 'More' prompts
+ ml idem, but cursor in the last line
+ e any mode, pointer below last window
+ s any mode, pointer on a status line
+ sd any mode, while dragging a status line
+ vs any mode, pointer on a vertical separator line
+ vd any mode, while dragging a vertical separator line
+ a everywhere
+
+ The shape is one of the following:
+ avail name looks like ~
+ w x arrow Normal mouse pointer
+ w x blank no pointer at all (use with care!)
+ w x beam I-beam
+ w x updown up-down sizing arrows
+ w x leftright left-right sizing arrows
+ w x busy The system's usual busy pointer
+ w x no The system's usual 'no input' pointer
+ x udsizing indicates up-down resizing
+ x lrsizing indicates left-right resizing
+ x crosshair like a big thin +
+ x hand1 black hand
+ x hand2 white hand
+ x pencil what you write with
+ x question big ?
+ x rightup-arrow arrow pointing right-up
+ w x up-arrow arrow pointing up
+ x <number> any X11 pointer number (see X11/cursorfont.h)
+
+ The "avail" column contains a 'w' if the shape is available for Win32,
+ x for X11.
+ Any modes not specified or shapes not available use the normal mouse
+ pointer.
+
+ Example: >
+ :set mouseshape=s:udsizing,m:no
+< will make the mouse turn to a sizing arrow over the status lines and
+ indicate no input when the hit-enter prompt is displayed (since
+ clicking the mouse has no effect in this state.)
+
+ *'mousetime'* *'mouset'*
+'mousetime' 'mouset' number (default 500)
+ global
+ {not in Vi}
+ Only for GUI, MS-DOS, Win32 and Unix with xterm. Defines the maximum
+ time in msec between two mouse clicks for the second click to be
+ recognized as a multi click.
+
+ *'nrformats'* *'nf'*
+'nrformats' 'nf' string (default "octal,hex")
+ local to buffer
+ {not in Vi}
+ This defines what bases Vim will consider for numbers when using the
+ CTRL-A and CTRL-X commands for adding to and subtracting from a number
+ 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 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
+ considered to be hexadecimal. Example: Using CTRL-X on
+ "0x100" results in "0x0ff".
+ Numbers which simply begin with a digit in the range 1-9 are always
+ considered decimal. This also happens for numbers that are not
+ recognized as octal or hex.
+
+ *'number'* *'nu'* *'nonumber'* *'nonu'*
+'number' 'nu' boolean (default off)
+ local to window
+ Print the line number in front of each line. When the 'n' option is
+ excluded from 'cpoptions' a wrapped line will not use the column of
+ line numbers (this is the default when 'compatible' isn't set).
+ 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.
+
+ *'osfiletype'* *'oft'* *E366*
+'osfiletype' 'oft' string (RISC-OS default: "Text",
+ others 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
+ use to set the file type when file is written.
+ It can affect the pattern matching of the automatic commands.
+ |autocmd-osfiletypes|
+
+ *'paragraphs'* *'para'*
+'paragraphs' 'para' string (default "IPLPPPQPP LIpplpipbp")
+ global
+ Specifies the nroff macros that separate paragraphs. These are pairs
+ of two letters (see |object-motions|).
+
+ *'paste'* *'nopaste'*
+'paste' boolean (default off)
+ global
+ {not in Vi}
+ Put Vim in Paste mode. This is useful if you want to cut or copy
+ some text from one window and paste it in Vim. This will avoid
+ unexpected effects.
+ Setting this option is useful when using Vim in a terminal, where Vim
+ cannot distinguish between typed text and pasted text. In the GUI, Vim
+ knows about pasting and will mostly do the right thing without 'paste'
+ being set. The same is true for a terminal where Vim handles the
+ mouse clicks itself.
+ When the 'paste' option is switched on (also when it was already on):
+ - mapping in Insert mode and Command-line mode is disabled
+ - abbreviations are disabled
+ - 'textwidth' is set to 0
+ - 'wrapmargin' is set to 0
+ - 'autoindent' is reset
+ - 'smartindent' is reset
+ - 'softtabstop' is set to 0
+ - 'revins' is reset
+ - 'ruler' is reset
+ - 'showmatch' is reset
+ - 'formatoptions' is used like it is empty
+ These options keep their value, but their effect is disabled:
+ - 'lisp'
+ - 'indentexpr'
+ - 'cindent'
+ NOTE: When you start editing another file while the 'paste' option is
+ on, settings from the modelines or autocommands may change the
+ settings again, causing trouble when pasting text. You might want to
+ set the 'paste' option again.
+ When the 'paste' option is reset the mentioned options are restored to
+ the value before the moment 'paste' was switched from off to on.
+ Resetting 'paste' before ever setting it does not have any effect.
+ Since mapping doesn't work while 'paste' is active, you need to use
+ the 'pastetoggle' option to toggle the 'paste' option with some key.
+
+ *'pastetoggle'* *'pt'*
+'pastetoggle' 'pt' string (default "")
+ global
+ {not in Vi}
+ When non-empty, specifies the key sequence that toggles the 'paste'
+ option. This is like specifying a mapping: >
+ :map {keys} :set invpaste<CR>
+< Where {keys} is the value of 'pastetoggle'.
+ The difference is that it will work even when 'paste' is set.
+ 'pastetoggle' works in Insert mode and Normal mode, but not in
+ Command-line mode.
+ Mappings are checked first, thus overrule 'pastetoggle'. However,
+ when 'paste' is on mappings are ignored in Insert mode, thus you can do
+ this: >
+ :map <F10> :set paste<CR>
+ :map <F11> :set nopaste<CR>
+ :imap <F10> <C-O>:set paste<CR>
+ :imap <F11> <nop>
+ :set pastetoggle=<F11>
+< This will make <F10> start paste mode and <F11> stop paste mode.
+ Note that typing <F10> in paste mode inserts "<F10>", since in paste
+ mode everything is inserted literally, except the 'pastetoggle' key
+ sequence.
+
+ *'pex'* *'patchexpr'*
+'patchexpr' 'pex' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+ Expression which is evaluated to apply a patch to a file and generate
+ the resulting new version of the file. See |diff-patchexpr|.
+
+ *'patchmode'* *'pm'* *E206*
+'patchmode' 'pm' string (default "")
+ global
+ {not in Vi}
+ When non-empty the oldest version of a file is kept. This can be used
+ to keep the original version of a file if you are changing files in a
+ source distribution. Only the first time that a file is written a
+ copy of the original file will be kept. The name of the copy is the
+ name of the original file with the string in the 'patchmode' option
+ appended. This option should start with a dot. Use a string like
+ ".org". 'backupdir' must not be empty for this to work (Detail: The
+ backup file is renamed to the patchmode file after the new file has
+ been successfully written, that's why it must be possible to write a
+ backup file). If there was no file to be backed up, an empty file is
+ created.
+ When the 'backupskip' pattern matches, a patchmode file is not made.
+ Using 'patchmode' for compressed files appends the extension at the
+ end (e.g., "file.gz.orig"), thus the resulting name isn't always
+ recognized as a compressed file.
+
+ *'path'* *'pa'* *E343* *E345* *E347*
+'path' 'pa' string (default on Unix: ".,/usr/include,,"
+ on OS/2: ".,/emx/include,,"
+ other systems: ".,,")
+ global or local to buffer |global-local|
+ {not in Vi}
+ This is a list of directories which will be searched when using the
+ |gf|, [f, ]f, ^Wf, |:find| and other commands, provided that the file
+ being searched for has a relative path (not starting with '/'). The
+ directories in the 'path' option may be relative or absolute.
+ - Use commas to separate directory names: >
+ :set path=.,/usr/local/include,/usr/include
+< - Spaces can also be used to separate directory names (for backwards
+ compatibility with version 3.0). To have a space in a directory
+ name, precede it with an extra backslash, and escape the space: >
+ :set path=.,/dir/with\\\ space
+< - To include a comma in a directory name precede it with an extra
+ backslash: >
+ :set path=.,/dir/with\\,comma
+< - To search relative to the directory of the current file, use: >
+ :set path=.
+< - To search in the current directory use an empty string between two
+ commas: >
+ :set path=,,
+< - A directory name may end in a ':' or '/'.
+ - Environment variables are expanded |:set_env|.
+ - When using |netrw.vim| URLs can be used. For example, adding
+ "http://www.vim.org" will make ":find index.html" work.
+ - Search upwards and downwards in a directory tree:
+ 1) "*" matches a sequence of characters, e.g.: >
+ :set path=/usr/include/*
+< means all subdirectories in /usr/include (but not /usr/include
+ itself). >
+ :set path=/usr/*c
+< matches /usr/doc and /usr/src.
+ 2) "**" matches a subtree, up to 100 directories deep. Example: >
+ :set path=/home/user_x/src/**
+< means search in the whole subtree under "/home/usr_x/src".
+ 3) If the path ends with a ';', this path is the startpoint
+ for upward search.
+ See |file-searching| for more info and exact syntax.
+ {not available when compiled without the |+path_extra| feature}
+ - Careful with '\' characters, type two to get one in the option: >
+ :set path=.,c:\\include
+< Or just use '/' instead: >
+ :set path=.,c:/include
+< Don't forget "." or files won't even be found in the same directory as
+ the file!
+ The maximum length is limited. How much depends on the system, mostly
+ it is something like 256 or 1024 characters.
+ You can check if all the include files are found, using the value of
+ 'path', see |:checkpath|.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ directories from the list. This avoids problems when a future version
+ uses another default. To remove the current directory use: >
+ :set path-=
+< To add the current directory use: >
+ :set path+=
+< To use an environment variable, you probably need to replace the
+ separator. Here is an example to append $INCL, in which directory
+ names are separated with a semi-colon: >
+ :let &path = &path . "," . substitute($INCL, ';', ',', 'g')
+< Replace the ';' with a ':' or whatever separator is used. Note that
+ this doesn't work when $INCL contains a comma or white space.
+
+ *'preserveindent'* *'pi'* *'nopreserveindent'* *'nopi'*
+'preserveindent' 'pi' boolean (default off)
+ local to buffer
+ {not in Vi}
+ When changing the indent of the current line, preserve as much of the
+ indent structure as possible. Normally the indent is replaced by a
+ series of tabs followed by spaces as required (unless |'expandtab'| is
+ enabled, in which case only spaces are used). Enabling this option
+ means the indent will preserve as many existing characters as possible
+ for indenting, and only add additional tabs or spaces as required.
+ NOTE: When using ">>" multiple times the resulting indent is a mix of
+ tabs and spaces. You might not like this.
+ NOTE: 'preserveindent' is reset when 'compatible' is set.
+ Also see 'copyindent'.
+ Use |:retab| to clean up white space.
+
+ *'previewheight'* *'pvh'*
+'previewheight' 'pvh' number (default 12)
+ global
+ {not in Vi}
+ {not available when compiled without the |+windows| or
+ |+quickfix| feature}
+ Default height for a preview window. Used for |:ptag| and associated
+ commands. Used for |CTRL-W_}| when no count is given.
+
+ *'previewwindow'* *'nopreviewwindow'*
+ *'pvw'* *'nopvw'* *E590*
+'previewwindow' 'pvw' boolean (default off)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+windows| or
+ |+quickfix| feature}
+ Identifies the preview window. Only one window can have this option
+ set. It's normally not set directly, but by using one of the commands
+ |:ptag|, |:pedit|, etc.
+
+ *'printdevice'* *'pdev'*
+'printdevice' 'pdev' string (default empty)
+ global
+ {not in Vi}
+ {only available when compiled with the |+printer|
+ feature}
+ This defines the name of the printer to be used when the |:hardcopy|
+ command is issued with a bang (!) to skip the printer selection
+ dialog. On Win32, it should be the printer name exactly as it appears
+ in the standard printer dialog.
+ If the option is empty, then vim will use the system default printer
+ for ":hardcopy!"
+
+ *'printencoding'* *'penc'* *E620*
+'printencoding' 'penc' String (default empty, except for:
+ Windows, OS/2: cp1252,
+ Macintosh: mac-roman,
+ VMS: dec-mcs,
+ HPUX: hp-roman8,
+ EBCDIC: ebcdic-uk)
+ global
+ {not in Vi}
+ {only available when compiled with the |+printer|
+ and |+postscript| features}
+ Sets the character encoding used when printing. This option tells VIM
+ which print character encoding file from the "print" directory in
+ 'runtimepath' to use.
+
+ This option will accept any value from |encoding-names|. Any
+ recognized names are converted to VIM standard names - see 'encoding'
+ for more details. Names not recognized by VIM will just be converted
+ to lower case and underscores replaced with '-' signs.
+
+ If 'printencoding' is empty or VIM cannot find the file then it will
+ use 'encoding' (if VIM is compiled with |+multi_byte| and it is set an
+ 8-bit encoding) to find the print character encoding file. If VIM is
+ unable to find a character encoding file then it will use the "latin1"
+ print character encoding file.
+
+ When 'encoding' is set to a multi-byte encoding, VIM will try to
+ convert characters to the printing encoding for printing (if
+ 'printencoding' is empty then the conversion will be to latin1).
+ Conversion to a printing encoding other than latin1 will require VIM
+ to be compiled with the |+iconv| feature. If no conversion is
+ possible then printing will fail. Any characters that cannot be
+ converted will be replaced with upside down question marks.
+
+ Four print character encoding files are provided to support default
+ Mac, VMS, HPUX, and EBCDIC character encodings and are used by default
+ on these platforms. Code page 1252 print character encoding is used
+ by default on Windows and OS/2 platforms.
+
+
+ *'printexpr'* *'pexpr'*
+'printexpr' 'pexpr' String (default: see below)
+ global
+ {not in Vi}
+ {only available when compiled with the |+printer|
+ and |+postscript| features}
+ Expression that is evaluated to print the PostScript produced with
+ ":hardcopy".
+ The file name to be printed is in |v:fname_in|.
+ The arguments to the ":hardcopy" command are in |v:cmdarg|.
+ The expression must take care of deleting the file after printing it.
+ When there is an error, the expression must return a non-zero number.
+ If there is no error, return zero or an empty string.
+ The default for non MS-Windows or VMS systems is to simply use "lpr"
+ to print the file: >
+
+ system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice)
+ . ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error
+<
+ On MS-Windows machines the default is to copy the file to the
+ currently specified printdevice: >
+
+ system('copy' . ' ' . v:fname_in . ' "' . &printdevice . '"')
+ . delete(v:fname_in)
+<
+ On VMS machines the default is to send the file to either the default
+ or currently specified printdevice: >
+
+ system('print' . (&printdevice == '' ? '' : ' /queue=' .
+ &printdevice) . ' ' . v:fname_in) . delete(v:fname_in)
+<
+ If you change this option, using a function is an easy way to avoid
+ having to escape all the spaces. Example: >
+
+ :set printexpr=PrintFile(v:fname_in)
+ :function PrintFile(fname)
+ : call system("ghostview " . a:fname)
+ : call delete(a:fname)
+ : return v:shell_error
+ :endfunc
+
+< Be aware that some print programs return control before they have read
+ the file. If you delete the file too soon it will not be printed.
+ These programs usually offer an option to have them remove the file
+ when printing is done.
+ *E365*
+ If evaluating the expression fails or it results in a non-zero number,
+ you get an error message. In that case Vim will delete the
+ file. In the default value for non-MS-Windows a trick is used: Adding
+ "v:shell_error" will result in a non-zero number when the system()
+ call fails.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'printfont'* *'pfn'* *E613*
+'printfont' 'pfn' string (default "courier")
+ global
+ {not in Vi}
+ {only available when compiled with the |+printer|
+ feature}
+ This is the name of the font that will be used for the |:hardcopy|
+ command's output. It has the same format as the 'guifont' option,
+ except that only one font may be named, and the special "guifont=*"
+ syntax is not available.
+ In the Win32 GUI version this specifies a font name with its extra
+ attributes, as with the 'guifont' option.
+ For other systems, only ":h11" is recognized, where "11" is the point
+ size of the font. When omitted, the point size is 10.
+
+ *'printheader'* *'pheader'*
+'printheader' 'pheader' string (default "%<%f%h%m%=Page %N")
+ global
+ {not in Vi}
+ {only available when compiled with the |+printer|
+ feature}
+ This defines the format of the header produced in |:hardcopy| output.
+ The option is defined in the same way as the 'statusline' option.
+ If Vim has not been compiled with the |+statusline| feature, this
+ option has no effect and a simple default header is used, which shows
+ the page number.
+
+ *'printoptions'* *'popt'*
+'printoptions' 'popt' string (default "")
+ global
+ {not in Vi}
+ {only available when compiled with |+printer| feature}
+ This is a comma-separated list of items that control the format of
+ the output of |:hardcopy|:
+
+ left:{spec} left margin (default: 10pc)
+ right:{spec} right margin (default: 5pc)
+ top:{spec} top margin (default: 5pc)
+ bottom:{spec} bottom margin (default: 5pc)
+ {spec} is a number followed by "in" for
+ inches, "pt" for points (1 point is 1/72 of an
+ inch), "mm" for millimeters or "pc" for a
+ percentage of the media size.
+ Weird example:
+ left:2in,top:30pt,right:16mm,bottom:3pc
+ If the unit is not recognized there is no
+ error and the default value is used.
+
+ header:{nr} Number of lines to reserve for the header.
+ Only the first line is actually filled, thus
+ when {nr} is 2 there is one empty line. The
+ header is formatted according to
+ 'printheader'.
+ header:0 Do not print a header.
+ header:2 (default) Use two lines for the header
+
+ syntax:n Do not use syntax highlighting. This is
+ faster and thus useful when printing large
+ files.
+ syntax:y Do syntax highlighting.
+ syntax:a (default) Use syntax highlighting if the printer appears
+ to be able to print color or grey.
+
+ number:y Include line numbers in the printed output.
+ number:n (default) No line numbers.
+
+ wrap:y (default) Wrap long lines.
+ wrap:n Truncate long lines.
+
+ duplex:off Print on one side.
+ duplex:long (default) Print on both sides (when possible), bind on
+ long side.
+ duplex:short Print on both sides (when possible), bind on
+ short side.
+
+ collate:y (default) Collating: 1 2 3, 1 2 3, 1 2 3
+ collate:n No collating: 1 1 1, 2 2 2, 3 3 3
+
+ jobsplit:n (default) Do all copies in one print job
+ jobsplit:y Do each copy as a separate print job. Useful
+ when doing N-up postprocessing.
+
+ portrait:y (default) Orientation is portrait.
+ portrait:n Orientation is landscape.
+ *a4* *letter*
+ paper:A4 (default) Paper size: A4
+ paper:{name} Paper size from this table:
+ {name} size in cm size in inch ~
+ 10x14 25.4 x 35.57 10 x 14
+ A3 29.7 x 42 11.69 x 16.54
+ A4 21 x 29.7 8.27 x 11.69
+ A5 14.8 x 21 5.83 x 8.27
+ B4 25 x 35.3 10.12 x 14.33
+ B5 17.6 x 25 7.17 x 10.12
+ executive 18.42 x 26.67 7.25 x 10.5
+ folio 21 x 33 8.27 x 13
+ ledger 43.13 x 27.96 17 x 11
+ legal 21.59 x 35.57 8.5 x 14
+ letter 21.59 x 27.96 8.5 x 11
+ quarto 21.59 x 27.5 8.5 x 10.83
+ statement 13.97 x 21.59 5.5 x 8.5
+ tabloid 27.96 x 43.13 11 x 17
+
+ formfeed:n (default) Treat form feed characters (0x0c) as a normal
+ print character.
+ formfeed:y When a form feed character is encountered,
+ continue printing of the current line at the
+ beginning of the first line on a new page.
+
+ The item indicated with (default) is used when the item is not
+ present. The values are not always used, especially when using a
+ dialog to select the printer and options.
+ Example: >
+ :set printoptions=paper:letter,duplex:off
+<
+ *'readonly'* *'ro'* *'noreadonly'* *'noro'*
+'readonly' 'ro' boolean (default off)
+ local to buffer
+ If on, writes fail unless you use a '!'. Protects you from
+ accidentally overwriting a file. Default on when Vim is started
+ in read-only mode ("vim -R") or when the executable is called "view".
+ {not in Vi:} When using the ":view" command the 'readonly' option is
+ set for the newly edited buffer. When using ":w!" the 'readonly'
+ option is reset for the current buffer.
+
+ *'remap'* *'noremap'*
+'remap' boolean (default on)
+ global
+ Allows for mappings to work recursively. If you do not want this for
+ a single entry, use the :noremap[!] command.
+
+ *'report'*
+'report' number (default 2)
+ global
+ Threshold for reporting number of lines changed. When the number of
+ changed lines is more than 'report' a message will be given for most
+ ":" commands. If you want it always, set 'report' to 0.
+ For the ":substitute" command the number of substitutions is used
+ instead of the number of lines.
+
+ *'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
+'restorescreen' 'rs' boolean (default on)
+ global
+ {not in Vi} {only in Windows 95/NT console version}
+ When set, the screen contents is restored when exiting Vim. This also
+ happens when executing external commands.
+
+ For non-Windows Vim: You can set or reset the 't_ti' and 't_te'
+ options in your .vimrc. To disable restoring:
+ set t_ti= t_te=
+ To enable restoring (for an xterm):
+ set t_ti=^[7^[[r^[[?47h t_te=^[[?47l^[8
+ (Where ^[ is an <Esc>, type CTRL-V <Esc> to insert it)
+
+ *'revins'* *'ri'* *'norevins'* *'nori'*
+'revins' 'ri' boolean (default off)
+ global
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ Inserting characters in Insert mode will work backwards. See "typing
+ backwards" |ins-reverse|. This option can be toggled with the CTRL-_
+ command in Insert mode, when 'allowrevins' is set.
+ NOTE: This option is reset when 'compatible' or 'paste' is set.
+
+ *'rightleft'* *'rl'* *'norightleft'* *'norl'*
+'rightleft' 'rl' boolean (default off)
+ local to window
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ When on, display orientation becomes right-to-left, i.e., characters
+ that are stored in the file appear from the right to the left.
+ Using this option, it is possible to edit files for languages that
+ are written from the right to the left such as Hebrew and Arabic.
+ This option is per window, so it is possible to edit mixed files
+ simultaneously, or to view the same file in both ways (this is
+ useful whenever you have a mixed text file with both right-to-left
+ and left-to-right strings so that both sets are displayed properly
+ in different windows). Also see |rileft.txt|.
+
+ *'rightleftcmd'* *'rlc'* *'norightleftcmd'* *'norlc'*
+'rightleftcmd' 'rlc' string (default "search")
+ local to window
+ {not in Vi}
+ {only available when compiled with the |+rightleft|
+ feature}
+ Each word in this option enables the command line editing to work in
+ right-to-left mode for a group of commands:
+
+ search "/" and "?" commands
+
+ This is useful for languages such as Hebrew, Arabic and Farsi.
+ The 'rightleft' option must be set for 'rightleftcmd' to take effect.
+
+ *'ruler'* *'ru'* *'noruler'* *'noru'*
+'ruler' 'ru' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+cmdline_info| feature}
+ Show the line and column number of the cursor position, separated by a
+ comma. When there is room, the relative position of the displayed
+ text in the file is shown on the far right:
+ Top first line is visible
+ Bot last line is visible
+ All first and last line are visible
+ 45% relative position in the file
+ If 'rulerformat' is set, it will determine the contents of the ruler.
+ Each window has its own ruler. If a window has a status line, the
+ ruler is shown there. Otherwise it is shown in the last line of the
+ screen. If the statusline is given by 'statusline' (ie. not empty),
+ this option takes precedence over 'ruler' and 'rulerformat'
+ If the number of characters displayed is different from the number of
+ bytes in the text (e.g., for a TAB or a multi-byte character), both
+ the text column (byte number) and the screen column are shown,
+ separated with a dash.
+ For an empty line "0-1" is shown.
+ For an empty buffer the line number will also be zero: "0,0-1".
+ This option is reset when the 'paste' option is set.
+ If you don't want to see the ruler all the time but want to know where
+ you are, use "g CTRL-G" |g_CTRL-G|.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'rulerformat'* *'ruf'*
+'rulerformat' 'ruf' string (default empty)
+ global
+ {not in Vi}
+ {not available when compiled without the |+statusline|
+ feature}
+ When this option is not empty, it determines the content of the ruler
+ string, as displayed for the 'ruler' option.
+ The format of this option, is like that of 'statusline'.
+ The default ruler width is 17 characters. To make the ruler 15
+ characters wide, put "%15(" at the start and "%)" at the end.
+ Example: >
+ :set rulerformat=%15(%c%V\ %p%%%)
+<
+ *'runtimepath'* *'rtp'* *vimfiles*
+'runtimepath' 'rtp' string (default:
+ Unix: "$HOME/.vim,
+ $VIM/vimfiles,
+ $VIMRUNTIME,
+ $VIM/vimfiles/after,
+ $HOME/.vim/after"
+ Amiga: "home:vimfiles,
+ $VIM/vimfiles,
+ $VIMRUNTIME,
+ $VIM/vimfiles/after,
+ home:vimfiles/after"
+ PC, OS/2: "$HOME/vimfiles,
+ $VIM/vimfiles,
+ $VIMRUNTIME,
+ $VIM/vimfiles/after,
+ $HOME/vimfiles/after"
+ Macintosh: "$VIM:vimfiles,
+ $VIMRUNTIME,
+ $VIM:vimfiles:after"
+ RISC-OS: "Choices:vimfiles,
+ $VIMRUNTIME,
+ Choices:vimfiles/after"
+ VMS: "sys$login:vimfiles,
+ $VIM/vimfiles,
+ $VIMRUNTIME,
+ $VIM/vimfiles/after,
+ sys$login:vimfiles/after"
+ global
+ {not in Vi}
+ This is a list of directories which will be searched for runtime
+ files:
+ filetype.vim filetypes by file name |new-filetype|
+ scripts.vim filetypes by file contents |new-filetype-scripts|
+ colors/ color scheme files |:colorscheme|
+ compiler/ compiler files |:compiler|
+ doc/ documentation |write-local-help|
+ ftplugin/ filetype plugins |write-filetype-plugin|
+ indent/ indent scripts |indent-expression|
+ keymap/ key mapping files |mbyte-keymap|
+ lang/ menu translations |:menutrans|
+ menu.vim GUI menus |menu.vim|
+ plugin/ plugin scripts |write-plugin|
+ print/ files for printing |postscript-print-encoding|
+ syntax/ syntax files |mysyntaxfile|
+ tutor/ files for vimtutor |tutor|
+
+ And any other file searched for with the |:runtime| command.
+
+ The defaults for most systems are setup to search five locations:
+ 1. In your home directory, for your personal preferences.
+ 2. In a system-wide Vim directory, for preferences from the system
+ administrator.
+ 3. In $VIMRUNTIME, for files distributed with Vim.
+ *after-directory*
+ 4. In the "after" directory in the system-wide Vim directory. This is
+ for the system administrator to overrule or add to the distributed
+ defaults (rarely needed)
+ 5. In the "after" directory in your home directory. This is for
+ personal preferences to overrule or add to the distributed defaults
+ or system-wide settings (rarely needed).
+
+ Note that, unlike 'path', no wildcards like "**" are allowed. Normal
+ wildcards are allowed, but can significantly slow down searching for
+ runtime files. For speed, use as few items as possible and avoid
+ wildcards.
+ See |:runtime|.
+ Example: >
+ :set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME
+< This will use the directory "~/vimruntime" first (containing your
+ personal Vim runtime files), then "/mygroup/vim" (shared between a
+ group of people) and finally "$VIMRUNTIME" (the distributed runtime
+ files).
+ You probably should always include $VIMRUNTIME somewhere, to use the
+ distributed runtime files. You can put a directory before $VIMRUNTIME
+ to find files which replace a distributed runtime files. You can put
+ a directory after $VIMRUNTIME to find files which add to distributed
+ runtime files.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'scroll'* *'scr'*
+'scroll' 'scr' number (default: half the window height)
+ local to window
+ Number of lines to scroll with CTRL-U and CTRL-D commands. Will be
+ set to half the number of lines in the window when the window size
+ changes. If you give a count to the CTRL-U or CTRL-D command it will
+ be used as the new value for 'scroll'. Reset to half the window
+ height with ":set scroll=0". {Vi is a bit different: 'scroll' gives
+ the number of screen lines instead of file lines, makes a difference
+ when lines wrap}
+
+ *'scrollbind'* *'scb'* *'noscrollbind'* *'noscb'*
+'scrollbind' 'scb' boolean (default off)
+ local to window
+ {not in Vi}
+ {not available when compiled without the |+scrollbind|
+ feature}
+ See also |scroll-binding|. When this option is set, the current
+ window scrolls as other scrollbind windows (windows that also have
+ this option set) scroll. This option is useful for viewing the
+ differences between two versions of a file, see 'diff'.
+ See |'scrollopt'| for options that determine how this option should be
+ interpreted.
+ This option is mostly reset when splitting a window to edit another
+ file. This means that ":split | edit file" results in two windows
+ with scroll-binding, but ":split file" does not.
+
+ *'scrolljump'* *'sj'*
+'scrolljump' 'sj' number (default 1)
+ global
+ {not in Vi}
+ Minimal number of lines to scroll when the cursor gets off the
+ screen (e.g., with "j"). Not used for scroll commands (e.g., CTRL-E,
+ CTRL-D). Useful if your terminal scrolls very slowly.
+ NOTE: This option is set to 1 when 'compatible' is set.
+
+ *'scrolloff'* *'so'*
+'scrolloff' 'so' number (default 0)
+ global
+ {not in Vi}
+ Minimal number of screen lines to keep above and below the cursor.
+ This will make some context visible around where you are working. If
+ you set it to a very large value (999) the cursor line will always be
+ in the middle of the window (except at the start or end of the file or
+ when long lines wrap).
+ For scrolling horizontally see 'sidescrolloff'.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
+ *'scrollopt'* *'sbo'*
+'scrollopt' 'sbo' string (default "ver,jump")
+ global
+ {not available when compiled without the |+scrollbind|
+ feature}
+ {not in Vi}
+ This is a comma-separated list of words that specifies how
+ 'scrollbind' windows should behave.
+ The following words are available:
+ ver Bind vertical scrolling for 'scrollbind' windows
+ hor Bind horizontal scrolling for 'scrollbind' windows
+ jump Applies to the offset between two windows for vertical
+ scrolling. This offset is the difference in the first
+ displayed line of the bound windows. When moving
+ around in a window, another 'scrollbind' window may
+ reach a position before the start or after the end of
+ the buffer. The offset is not changed though, when
+ moving back the 'scrollbind' window will try to scroll
+ to the desired position when possible.
+ When now making that window the current one, two
+ things can be done with the relative offset:
+ 1. When "jump" is not included, the relative offset is
+ adjusted for the scroll position in the new current
+ window. When going back to the other window, the
+ the new relative offset will be used.
+ 2. When "jump" is included, the other windows are
+ scrolled to keep the same relative offset. When
+ going back to the other window, it still uses the
+ same relative offset.
+ Also see |scroll-binding|.
+
+ *'sections'* *'sect'*
+'sections' 'sect' string (default "SHNHH HUnhsh")
+ global
+ Specifies the nroff macros that separate sections. These are pairs of
+ two letters (See |object-motions|). The default makes a section start
+ at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
+
+ *'secure'* *'nosecure'* *E523*
+'secure' boolean (default off)
+ global
+ {not in Vi}
+ When on, ":autocmd", shell and write commands are not allowed in
+ ".vimrc" and ".exrc" in the current directory and map commands are
+ displayed. Switch it off only if you know that you will not run into
+ problems, or when the 'exrc' option is off. On Unix this option is
+ only used if the ".vimrc" or ".exrc" is not owned by you. This can be
+ dangerous if the systems allows users to do a "chown". You better set
+ 'secure' at the end of your ~/.vimrc then.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'selection'* *'sel'*
+'selection' 'sel' string (default "inclusive")
+ global
+ {not in Vi}
+ This option defines the behavior of the selection. It is only used
+ in Visual and Select mode.
+ Possible values:
+ value past line inclusive ~
+ old no yes
+ inclusive yes yes
+ exclusive yes no
+ "past line" means that the cursor is allowed to be positioned one
+ character past the line.
+ "inclusive" means that the last character of the selection is included
+ in an operation. For example, when "x" is used to delete the
+ selection.
+ Note that when "exclusive" is used and selecting from the end
+ backwards, you cannot include the last character of a line, when
+ starting in Normal mode and 'virtualedit' empty.
+
+ The 'selection' option is set by the |:behave| command.
+
+ *'selectmode'* *'slm'*
+'selectmode' 'slm' string (default "")
+ global
+ {not in Vi}
+ This is a comma separated list of words, which specifies when to start
+ Select mode instead of Visual mode, when a selection is started.
+ Possible values:
+ mouse when using the mouse
+ key when using shifted special keys
+ cmd when using "v", "V" or CTRL-V
+ See |Select-mode|.
+ The 'selectmode' option is set by the |:behave| command.
+
+ *'sessionoptions'* *'ssop'*
+'sessionoptions' 'ssop' string (default: "blank,buffers,curdir,folds,
+ help,options,winsize")
+ global
+ {not in Vi}
+ {not available when compiled without the +mksession
+ feature}
+ Changes the effect of the |:mksession| command. It is a comma
+ separated list of words. Each word enables saving and restoring
+ something:
+ word save and restore ~
+ blank empty windows
+ buffers hidden and unloaded buffers, not just those in windows
+ curdir the current directory
+ folds manually created folds, opened/closed folds and local
+ fold options
+ globals global variables that start with an uppercase letter
+ and contain at least one lowercase letter.
+ help the help window
+ localoptions options and mappings local to a window or buffer (not
+ global values for local options)
+ options all options and mappings (also global values for local
+ options)
+ resize size of the Vim window: 'lines' and 'columns'
+ sesdir the directory in which the session file is located
+ will become the current directory (useful with
+ projects accessed over a network from different
+ systems)
+ slash backslashes in file names replaced with forward
+ slashes
+ unix with Unix end-of-line format (single <NL>), even when
+ on Windows or DOS
+ winpos position of the whole Vim window
+ winsize window sizes
+
+ Don't include both "curdir" and "sesdir".
+ When "curdir" nor "sesdir" is included, file names are stored with
+ absolute paths.
+ "slash" and "unix" are useful on Windows when sharing session files
+ with Unix. The Unix version of Vim cannot source dos format scripts,
+ but the Windows version of Vim can source unix format scripts.
+
+ *'shell'* *'sh'* *E91*
+'shell' 'sh' string (default $SHELL or "sh",
+ MS-DOS and Win32: "command.com" or
+ "cmd.exe", OS/2: "cmd")
+ global
+ Name of the shell to use for ! and :! commands. When changing the
+ value also check these options: 'shelltype', 'shellpipe', 'shellslash'
+ 'shellredir', 'shellquote', 'shellxquote' and 'shellcmdflag'.
+ It is allowed to give an argument to the command, e.g. "csh -f".
+ See |option-backslash| about including spaces and backslashes.
+ Environment variables are expanded |:set_env|.
+ If the name of the shell contains a space, you might need to enclose
+ it in quotes. Example: >
+ :set shell=\"c:\program\ files\unix\sh.exe\"\ -f
+< Note the backslash before each quote (to avoid starting a comment) and
+ each space (to avoid ending the option value). Also note that the
+ "-f" is not inside the quotes, because it is not part of the command
+ name. And Vim automagically recognizes the backslashes that are path
+ separators.
+ For Dos 32 bits (DJGPP), you can set the $DJSYSFLAGS environment
+ variable to change the way external commands are executed. See the
+ libc.inf file of DJGPP.
+ Under MS-Windows, when the executable ends in ".com" it must be
+ included. Thus setting the shell to "command.com" or "4dos.com"
+ works, but "command" and "4dos" do not work for all commands (e.g.,
+ filtering).
+ For unknown reasons, when using "4dos.com" the current directory is
+ changed to "C:\". To avoid this set 'shell' like this: >
+ :set shell=command.com\ /c\ 4dos
+< This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'shellcmdflag'* *'shcf'*
+'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|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'shellpipe'* *'sp'*
+'shellpipe' 'sp' string (default ">", "| tee", "|& tee" or "2>&1| tee")
+ global
+ {not in Vi}
+ {not available when compiled without the |+quickfix|
+ feature}
+ String to be used to put the output of the ":make" command in the
+ error file. See also |:make_makeprg|. See |option-backslash| about
+ including spaces and backslashes.
+ The name of the temporary file can be represented by "%s" if necessary
+ (the file name is appended automatically if no %s appears in the value
+ of this option).
+ For the Amiga and MS-DOS the default is ">". The output is directly
+ saved in a file and not echoed to the screen.
+ 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.
+ 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
+ explicitly set before.
+ When 'shellpipe' is set to an empty string, no redirection of the
+ ":make" output will be done. This is useful if you use a 'makeprg'
+ that writes to 'makeef' by itself. If you want no piping, but do
+ want to include the 'makeef', set 'shellpipe' to a single space.
+ Don't forget to precede the space with a backslash: ":set sp=\ ".
+ In the future pipes may be used for filtering and this option will
+ become obsolete (at least for Unix).
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'shellquote'* *'shq'*
+'shellquote' 'shq' string (default: ""; MS-DOS and Win32, when 'shell'
+ contains "sh" somewhere: "\"")
+ global
+ {not in Vi}
+ Quoting character(s), put around the command passed to the shell, for
+ the "!" and ":!" commands. The redirection is kept outside of the
+ quoting. See 'shellxquote' to include the redirection. It's
+ probably not useful to set both options.
+ This is an empty string by default. Only known to be useful for
+ third-party shells on MS-DOS-like systems, 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.
+
+ *'shellredir'* *'srr'*
+'shellredir' 'srr' string (default ">", ">&" or ">%s 2>&1")
+ global
+ {not in Vi}
+ String to be used to put the output of a filter command in a temporary
+ file. See also |:!|. See |option-backslash| about including spaces
+ and backslashes.
+ The name of the temporary file can be represented by "%s" if necessary
+ (the file name is appended automatically if no %s appears in the value
+ of this option).
+ The default is ">". For Unix, if the 'shell' option is "csh", "tcsh"
+ or "zsh" during initializations, the default becomes ">&". If the
+ 'shell' option is "sh", "ksh" or "bash" the default becomes
+ ">%s 2>&1". This means that stderr is also included.
+ For Win32, the Unix checks are done and additionally "cmd" is checked
+ for, which makes the default ">%s 2>&1". Also, the same names with
+ ".exe" appended are checked for.
+ 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 'shellredir' option changes automatically unless it was
+ explicitly set before.
+ In the future pipes may be used for filtering and this option will
+ become obsolete (at least for Unix).
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'shellslash'* *'ssl'* *'noshellslash'* *'nossl'*
+'shellslash' 'ssl' boolean (default off)
+ global
+ {not in Vi} {only for MSDOS, MS-Windows and OS/2}
+ When set, a forward slash is used when expanding file names. This is
+ useful when a Unix-like shell is used instead of command.com or
+ cmd.exe. Backward slashes can still be typed, but they are changed to
+ forward slashes by Vim.
+ Note that setting or resetting this option has no effect for some
+ existing file names, thus this option needs to be set before opening
+ any file for best results. This might change in the future.
+ 'shellslash' only works when a backslash can be used as a path
+ separator. To test if this is so use: >
+ if exists('+shellslash')
+<
+ *'shelltype'* *'st'*
+'shelltype' 'st' number (default 0)
+ global
+ {not in Vi} {only for the Amiga}
+ On the Amiga this option influences the way how the commands work
+ which use a shell.
+ 0 and 1: always use the shell
+ 2 and 3: use the shell only to filter lines
+ 4 and 5: use shell only for ':sh' command
+ When not using the shell, the command is executed directly.
+
+ 0 and 2: use "shell 'shellcmdflag' cmd" to start external commands
+ 1 and 3: use "shell cmd" to start external commands
+
+ *'shellxquote'* *'sxq'*
+'shellxquote' 'sxq' string (default: "";
+ for Win32, when 'shell' contains "sh"
+ somewhere: "\""
+ for Unix, when using system(): "\"")
+ global
+ {not in Vi}
+ Quoting character(s), put around the command passed to the shell, for
+ 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|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
+'shiftround' 'sr' boolean (default off)
+ global
+ {not in Vi}
+ Round indent to multiple of 'shiftwidth'. Applies to > and <
+ commands. CTRL-T and CTRL-D in Insert mode always round the indent to
+ a multiple of 'shiftwidth' (this is Vi compatible).
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'shiftwidth'* *'sw'*
+'shiftwidth' 'sw' number (default 8)
+ local to buffer
+ Number of spaces to use for each step of (auto)indent. Used for
+ |'cindent'|, |>>|, |<<|, etc.
+
+ *'shortmess'* *'shm'*
+'shortmess' 'shm' string (Vim default "filnxtToO", Vi default: "")
+ global
+ {not in Vi}
+ This option helps to avoid all the |hit-enter| prompts caused by file
+ messages, for example with CTRL-G, and to avoid some other messages.
+ It is a list of flags:
+ flag meaning when present ~
+ f use "(3 of 5)" instead of "(file 3 of 5)"
+ i use "[noeol]" instead of "[Incomplete last line]"
+ l use "999L, 888C" instead of "999 lines, 888 characters"
+ m use "[+]" instead of "[Modified]"
+ n use "[New]" instead of "[New File]"
+ r use "[RO]" instead of "[readonly]"
+ w use "[w]" instead of "written" for file write message
+ and "[a]" instead of "appended" for ':w >> file' command
+ x use "[dos]" instead of "[dos format]", "[unix]" instead of
+ "[unix format]" and "[mac]" instead of "[mac format]".
+ a all of the above abbreviations
+
+ o overwrite message for writing a file with subsequent message
+ for reading a file (useful for ":wn" or when 'autowrite' on)
+ O message for reading a file overwrites any previous message.
+ Also for quickfix message (e.g., ":cn").
+ s don't give "search hit BOTTOM, continuing at TOP" or "search
+ hit TOP, continuing at BOTTOM" messages
+ t truncate file message at the start if it is too long to fit
+ on the command-line, "<" will appear in the left most column.
+ Ignored in Ex mode.
+ T truncate other messages in the middle if they are too long to
+ fit on the command line. "..." will appear in the middle.
+ Ignored in Ex mode.
+ W don't give "written" or "[w]" when writing a file
+ A don't give the "ATTENTION" message when an existing swap file
+ is found.
+ I don't give the intro message when starting Vim |:intro|.
+
+ This gives you the opportunity to avoid that a change between buffers
+ requires you to hit <Enter>, but still gives as useful a message as
+ possible for the space available. To get the whole message that you
+ would have got with 'shm' empty, use ":file!"
+ Useful values:
+ shm= No abbreviation of message.
+ shm=a Abbreviation, but no loss of information.
+ shm=at Abbreviation, and truncate message when necessary.
+
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'shortname'* *'sn'* *'noshortname'* *'nosn'*
+'shortname' 'sn' boolean (default off)
+ local to buffer
+ {not in Vi, not in MS-DOS versions}
+ Filenames are assumed to be 8 characters plus one extension of 3
+ characters. Multiple dots in file names are not allowed. When this
+ option is on, dots in file names are replaced with underscores when
+ adding an extension (".~" or ".swp"). This option is not available
+ for MS-DOS, because then it would always be on. This option is useful
+ when editing files on an MS-DOS compatible filesystem, e.g., messydos
+ or crossdos. When running the Win32 GUI version under Win32s, this
+ option is always on by default.
+
+ *'showbreak'* *'sbr'* *E595*
+'showbreak' 'sbr' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+linebreak|
+ feature}
+ String to put at the start of lines that have been wrapped. Useful
+ values are "> " or "+++ ".
+ Only printable single-cell characters are allowed, excluding <Tab> and
+ comma (in a future version the comma might be used to separate the
+ part that is shown at the end and at the start of a line).
+ The characters are highlighted according to the '@' flag in
+ 'highlight'.
+ Note that tabs after the showbreak will be displayed differently.
+ If you want the 'showbreak' to appear in between line numbers, add the
+ "n" flag to 'cpoptions'.
+
+ *'showcmd'* *'sc'* *'noshowcmd'* *'nosc'*
+'showcmd' 'sc' boolean (Vim default: on, off for Unix, Vi default:
+ off)
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+cmdline_info| feature}
+ Show (partial) command in status line. Set this option off if your
+ terminal is slow.
+ In Visual mode the size of the selected area is shown:
+ - When selecting characters within a line, the number of characters.
+ - When selecting more than one line, the number of lines.
+ - When selecting a block, the size in screen characters: linesxcolumns.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'showfulltag'* *'sft'* *'noshowfulltag'* *'nosft'*
+'showfulltag' 'sft' boolean (default off)
+ global
+ {not in Vi}
+ When completing a word in insert mode (see |ins-completion|) from the
+ tags file, show both the tag name and a tidied-up form of the search
+ pattern (if there is one) as possible matches. Thus, if you have
+ matched a C function, you can see a template for what arguments are
+ required (coding style permitting).
+
+ *'showmatch'* *'sm'* *'noshowmatch'* *'nosm'*
+'showmatch' 'sm' boolean (default off)
+ global
+ When a bracket is inserted, briefly jump to the matching one. The
+ jump is only done if the match can be seen on the screen. The time to
+ show the match can be set with 'matchtime'.
+ A Beep is given if there is no match (no matter if the match can be
+ seen or not). This option is reset when the 'paste' option is set.
+ When the 'm' flag is not included in 'cpoptions', typing a character
+ will immediately move the cursor back to where it belongs.
+ See the "sm" field in 'guicursor' for setting the cursor shape and
+ blinking when showing the match.
+ The 'matchpairs' option can be used to specify the characters to show
+ matches for. 'rightleft' and 'revins' are used to look for opposite
+ matches.
+ Note: For the use of the short form parental guidance is advised.
+
+ *'showmode'* *'smd'* *'noshowmode'* *'nosmd'*
+'showmode' 'smd' boolean (Vim default: on, Vi default: off)
+ global
+ If in Insert, Replace or Visual mode put a message on the last line.
+ Use the 'M' flag in 'highlight' to set the type of highlighting for
+ this message.
+ When |XIM| may be used the message will include "XIM". But this
+ doesn't mean XIM is really active, especially when 'imactivatekey' is
+ not set.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'sidescroll'* *'ss'*
+'sidescroll' 'ss' number (default 0)
+ global
+ {not in Vi}
+ The minimal number of columns to scroll horizontally. Used only when
+ the 'wrap' option is off and the cursor is moved off of the screen.
+ When it is zero the cursor will be put in the middle of the screen.
+ When using a slow terminal set it to a large number or 0. When using
+ a fast terminal use a small number or 1. Not used for "zh" and "zl"
+ commands.
+
+ *'sidescrolloff'* *'siso'*
+'sidescrolloff' 'siso' number (default 0)
+ global
+ {not in Vi}
+ The minimal number of screen columns to keep to the left and to the
+ right of the cursor if 'nowrap' is set. Setting this option to a value
+ greater than 0 while having |'sidescroll'| also at a non-zero value
+ makes some context visible in the line you are scrolling in
+ horizontally (except at the end and beginning of the line). Setting
+ this option to a large value (like 999) has the effect of keeping the
+ cursor horizontally centered in the window, as long as one does not
+ come too close to the beginning or end of the line.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
+ Example: Try this together with 'sidescroll' and 'listchars' as
+ in the following example to never allow the cursor to move
+ onto the "extends" character:
+
+ :set nowrap sidescroll=1 listchars=extends:>,precedes:<
+ :set sidescrolloff=1
+
+
+ *'smartcase'* *'scs'* *'nosmartcase'* *'noscs'*
+'smartcase' 'scs' boolean (default off)
+ global
+ {not in Vi}
+ 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
+ "*" 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.
+
+ *'smartindent'* *'si'* *'nosmartindent'* *'nosi'*
+'smartindent' 'si' boolean (default off)
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the
+ |+smartindent| feature}
+ 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.
+ Normally 'autoindent' should also be on when using 'smartindent'.
+ An indent is automatically inserted:
+ - After a line ending in '{'.
+ - After a line starting with a keyword from 'cinwords'.
+ - Before a line starting with '}' (only with the "O" command).
+ When typing '}' as the first character in a new line, that line is
+ given the same indent as the matching '{'.
+ When typing '#' as the first character in a new line, the indent for
+ that line is removed, the '#' is put in the first column. The indent
+ is restored for the next line. If you don't want this, use this
+ mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
+ When using the ">>" command, lines starting with '#' are not shifted
+ right.
+ NOTE: 'smartindent' is reset when 'compatible' is set. When 'paste'
+ is set smart indenting is disabled.
+
+ *'smarttab'* *'sta'* *'nosmarttab'* *'nosta'*
+'smarttab' 'sta' boolean (default off)
+ global
+ {not in Vi}
+ When on, a <Tab> in front of a line inserts blanks according to
+ 'shiftwidth'. 'tabstop' is used in other places. A <BS> will delete
+ a 'shiftwidth' worth of space at the start of the line.
+ When off a <Tab> always inserts blanks according to 'tabstop'.
+ 'shiftwidth' is only used for shifting text left or right
+ |shift-left-right|.
+ What gets inserted (a Tab or spaces) depends on the 'expandtab'
+ option. Also see |ins-expandtab|. When 'expandtab' is not set, the
+ number of spaces minimized by using <Tab>s.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'softtabstop'* *'sts'*
+'softtabstop' 'sts' number (default 0)
+ local to buffer
+ {not in Vi}
+ Number of spaces that a <Tab> counts for while performing editing
+ operations, like inserting a <Tab> or using <BS>. It "feels" like
+ <Tab>s are being inserted, while in fact a mix of spaces and <Tab>s is
+ used. This is useful to keep the 'ts' setting at its standard value
+ 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.
+ '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.
+ The 'L' flag in 'cpoptions' changes how tabs are used when 'list' is
+ set.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
+ *'splitbelow'* *'sb'* *'nosplitbelow'* *'nosb'*
+'splitbelow' 'sb' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the +windows
+ feature}
+ When on, splitting a window will put the new window below the current
+ one. |:split|
+
+ *'splitright'* *'spr'* *'nosplitright'* *'nospr'*
+'splitright' 'spr' boolean (default off)
+ global
+ {not in Vi}
+ {not available when compiled without the +vertsplit
+ feature}
+ When on, splitting a window will put the new window right of the
+ current one. |:vsplit|
+
+ *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
+'startofline' 'sol' boolean (default on)
+ global
+ {not in Vi}
+ When "on" the commands listed below move the cursor to the first
+ blank of the line. When off the cursor is kept in the same column
+ (if possible). This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
+ CTRL-F, "G", "H", "M", "L", , and to the commands "d", "<<" and ">>"
+ with a linewise operator, with "%" with a count and to buffer changing
+ commands (CTRL-^, :bnext, :bNext, etc.). Also for an Ex command that
+ only has a line number, e.g., ":25" or ":+".
+ In case of buffer changing commands the cursor is placed at the column
+ 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' string (default empty)
+ global
+ {not in Vi}
+ {not available when compiled without the |+statusline|
+ feature}
+ When nonempty, this option determines the content of the status line.
+ Also see |status-line|.
+
+ The option consists of printf style '%' items interspersed with
+ 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.
+
+ Note that the only effect of 'ruler' when this option is set (and
+ 'laststatus' is 2) is controlling the output of |CTRL-G|.
+
+ field meaning ~
+ - Left justify the item. The default is right justified
+ when minwid is larger than the length of the item.
+ 0 Leading zeroes in numeric items. Overridden by '-'.
+ minwid Minimum width of the item, padding as set by '-' & '0'.
+ Value must be 50 or less.
+ maxwid Maximum width of the item. Truncation occurs with a '<'
+ on the left for text items. Numeric items will be
+ shifted down to maxwid-2 digits followed by '>'number
+ where number is the amount of missing digits, much like
+ an exponential notation.
+ item A one letter code as described below.
+
+ Following is a description of the possible statusline items. The
+ second character in "item" is the type:
+ N for number
+ S for string
+ F for flags as described below
+ - not applicable
+
+ item meaning ~
+ f S Path to the file in the buffer, relative to current directory.
+ F S Full path to the file in the buffer.
+ t S File name (tail) of file in the buffer.
+ m F Modified flag, text is " [+]"; " [-]" if 'modifiable' is off.
+ M F Modified flag, text is ",+" or ",-".
+ r F Readonly flag, text is " [RO]".
+ R F Readonly flag, text is ",RO".
+ h F Help buffer flag, text is " [help]".
+ H F Help buffer flag, text is ",HLP".
+ w F Preview window flag, text is " [Preview]".
+ W F Preview window flag, text is ",PRV".
+ y F Type of file in the buffer, e.g., " [vim]". See 'filetype'.
+ Y F Type of file in the buffer, e.g., ",VIM". See 'filetype'.
+ {not available when compiled without |+autocmd| feature}
+ 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 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)
+ {not available when compiled without |+byte_offset| feature}
+ O N As above, in hexadecimal.
+ N N Printer page number. (Only works in the 'printheader' option.)
+ l N Line number.
+ L N Number of lines in buffer.
+ c N Column number.
+ v N Virtual column number.
+ 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.
+ 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.
+ ( - Start of item group. Can be used for setting the width and
+ alignment of a section. Must be followed by %) somewhere.
+ ) - End of item group. No width fields allowed.
+ < - Where to truncate line if too long. Default is at the start.
+ No width fields allowed.
+ = - Separation point between left and right aligned items.
+ No width fields allowed.
+ * - Set highlight group to User{N}, where {N} is taken from the
+ minwid field. eg. %1*. Restore normal highlight with %* or %0*.
+ The difference between User{N} and StatusLine will be applied
+ to StatusLineNC for the statusline of non-current windows.
+ The number N must be between 1 and 9. See |hl-User1..9|
+
+ Display of flags are controlled by the following heuristic:
+ If a flag text starts with comma it is assumed that it wants to
+ separate itself from anything but preceding plaintext. If it starts
+ with a space it is assumed that it wants to separate itself from
+ anything but other flags. That is: A leading comma is removed if the
+ preceding character stems from plaintext. A leading space is removed
+ if the preceding character stems from another active flag. This will
+ make a nice display when flags are used like in the examples below.
+
+ When all items in a group becomes an empty string (ie. flags that are
+ not set) and a minwid is not set for the group, the whole group will
+ become empty. This will make a group like the following disappear
+ completely from the statusline when none of the flags are set. >
+ :set statusline=...%(\ [%M%R%H]%)...
+<
+ Beware that an expression is evaluated each and every time the status
+ line is displayed. The current buffer and current window will be set
+ temporarily to that of the window (and buffer) whose statusline is
+ currently being drawn. The expression will evaluate in this context.
+ The variable "actual_curbuf" is set to the 'bufnr()' number of the
+ real current buffer. The expression is evaluated in the |sandbox|.
+
+ If the statusline is not updated when you want it (e.g., after setting
+ a variable that's used in an expression), you can force an update by
+ setting an option without changing its value. Example: >
+ :let &ro = &ro
+
+< A result of all digits is regarded a number for display purposes.
+ Otherwise the result is taken as flag text and applied to the rules
+ described above.
+
+ Watch out for errors in expressions. They may render Vim unusable !
+ If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
+ edit your .vimrc or whatever with "vim -u NONE" to get it right.
+
+ Examples:
+ Emulate standard status line with 'ruler' set >
+ :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
+< Similar, but add ASCII value of char under the cursor (like "ga") >
+ :set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
+< Display byte count and byte value, modified flag in red. >
+ :set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
+ :hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red
+< Display a ,GZ flag if a compressed file is loaded >
+ :set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
+< In the |:autocmd|'s: >
+ :let b:gzflag = 1
+< And: >
+ :unlet b:gzflag
+< And define this function: >
+ :function VarExists(var, val)
+ : if exists(a:var) | return a:val | else | return '' | endif
+ :endfunction
+<
+ *'suffixes'* *'su'*
+'suffixes' 'su' string (default ".bak,~,.o,.h,.info,.swp,.obj")
+ global
+ {not in Vi}
+ Files with these suffixes get a lower priority when multiple files
+ match a wildcard. See |suffixes|. Commas can be used to separate the
+ suffixes. Spaces after the comma are ignored. A dot is also seen as
+ the start of a suffix. To avoid a dot or comma being recognized as a
+ separator, precede it with a backslash (see |option-backslash| about
+ including spaces and backslashes).
+ See 'wildignore' for completely ignoring files.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ suffixes from the list. This avoids problems when a future version
+ uses another default.
+
+ *'suffixesadd'* *'sua'*
+'suffixesadd' 'sua' string (default "")
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the
+ |+file_in_path| feature}
+ Comma separated list of suffixes, which are used when searching for a
+ file for the "gf", "[I", etc. commands. Example: >
+ :set suffixesadd=.java
+<
+ *'swapfile'* *'swf'* *'noswapfile'* *'noswf'*
+'swapfile' 'swf' boolean (default on)
+ local to buffer
+ {not in Vi}
+ Use a swapfile for the buffer. This option can be reset when a
+ swapfile is not wanted for a specific buffer. For example, with
+ confidential information that even root must not be able to access.
+ Careful: All text will be in memory:
+ - Don't use this for big files.
+ - Recovery will be impossible!
+ A swapfile will only be present when |'updatecount'| is non-zero and
+ 'swapfile' is set.
+ When 'swapfile' is reset, the swap file for the current buffer is
+ immediately deleted. When 'swapfile' is set, and 'updatecount' is
+ non-zero, a swap file is immediately created.
+ Also see |swap-file| and |'swapsync'|.
+
+ This option is used together with 'bufhidden' and 'buftype' to
+ specify special kinds of buffers. See |special-buffers|.
+
+ *'swapsync'* *'sws'*
+'swapsync' 'sws' string (default "fsync")
+ global
+ {not in Vi}
+ When this option is not empty a swap file is synced to disk after
+ writing to it. This takes some time, especially on busy unix systems.
+ When this option is empty parts of the swap file may be in memory and
+ not written to disk. When the system crashes you may lose more work.
+ On Unix the system does a sync now and then without Vim asking for it,
+ so the disadvantage of setting this option off is small. On some
+ systems the swap file will not be written at all. For a unix system
+ setting it to "sync" will use the sync() call instead of the default
+ fsync(), which may work better on some systems.
+
+ *'switchbuf'* *'swb'*
+'switchbuf' 'swb' string (default "")
+ global
+ {not in Vi}
+ This option controls the behavior when switching between buffers.
+ Possible values (comma separated list):
+ useopen If included, jump to the first open window that
+ contains the specified buffer (if there is one).
+ Otherwise: Do not examine other windows.
+ This setting is checked with |quickfix| commands, when
+ jumping to errors (":cc", ":cn", "cp", etc.). It is
+ also used in all buffer related split commands, for
+ example ":sbuffer", ":sbnext", or ":sbrewind".
+ 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.
+
+ *'syntax'* *'syn'*
+'syntax' 'syn' string (default empty)
+ local to buffer
+ {not in Vi}
+ {not available when compiled without the |+syntax|
+ feature}
+ When this option is set, the syntax with this name is loaded, unless
+ syntax highlighting has been switched off with ":syntax off".
+ Otherwise this option does not always reflect the current syntax (the
+ b:current_syntax variable does).
+ This option is most useful in a modeline, for a file which syntax is
+ not automatically recognized. Example, for in an IDL file: >
+ /* vim: set syntax=idl : */
+< To switch off syntax highlighting for the current file, use: >
+ :set syntax=OFF
+< To switch syntax highlighting on according to the current value of the
+ 'filetype' option: >
+ :set syntax=ON
+< What actually happens when setting the 'syntax' option is that the
+ Syntax autocommand event is triggered with the value as argument.
+ This option is not copied to another buffer, independent of the 's' or
+ 'S' flag in 'cpoptions'.
+
+ *'tabstop'* *'ts'*
+'tabstop' 'ts' number (default 8)
+ local to buffer
+ Number of spaces that a <Tab> in the file counts for. Also see
+ |:retab| command, and 'softtabstop' option.
+
+ Note: Setting 'tabstop' to any other value than 8 can make your file
+ appear wrong in many places (e.g., when printing it).
+
+ There are four main ways to use tabs in Vim:
+ 1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
+ (or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
+ will use a mix of tabs and spaces, but typing Tab and BS will
+ behave like a tab appears every 4 (or 3) characters.
+ 2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
+ 'expandtab'. This way you will always insert spaces. The
+ formatting will never be messed up when 'tabstop' is changed.
+ 3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
+ |modeline| to set these values when editing the file again. Only
+ works when using Vim to edit the file.
+ 4. Always set 'tabstop' and 'shiftwidth' to the same value, and
+ 'noexpandtab'. This should then work (for initial indents only)
+ for any tabstop setting that people use. It might be nice to have
+ tabs after the first non-blank inserted as spaces if you do this
+ though. Otherwise aligned comments will be wrong when 'tabstop' is
+ changed.
+
+ *'tagbsearch'* *'tbs'* *'notagbsearch'* *'notbs'*
+'tagbsearch' 'tbs' boolean (default on)
+ global
+ {not in Vi}
+ When searching for a tag (e.g., for the |:ta| command), Vim can either
+ use a binary search or a linear search in a tags file. Binary
+ searching makes searching for a tag a LOT faster, but a linear search
+ will find more tags if the tags file wasn't properly sorted.
+ Vim normally assumes that your tags files are sorted, or indicate that
+ they are not sorted. Only when this is not the case does the
+ 'tagbsearch' option need to be switched off.
+
+ When 'tagbsearch' is on, binary searching is first used in the tags
+ files. In certain situations, Vim will do a linear search instead for
+ certain files, or retry all files with a linear search. When
+ 'tagbsearch' is off, only a linear search is done.
+
+ Linear searching is done anyway, for one file, when Vim finds a line
+ at the start of the file indicating that it's not sorted: >
+ !_TAG_FILE_SORTED 0 /some command/
+< [The whitespace before and after the '0' must be a single <Tab>]
+
+ When a binary search was done and no match was found in any of the
+ files listed in 'tags', and 'ignorecase' is set or a pattern is used
+ instead of a normal tag name, a retry is done with a linear search.
+ Tags in unsorted tags files, and matches with different case will only
+ be found in the retry.
+
+ If a tag file indicates that is is case-fold sorted, the second,
+ linear search can be avoided for the 'ignorecase' case. Use a value
+ of '2' in the "!_TAG_FILE_SORTED" line for this. A tag file can be
+ case-fold sorted with the -f switch to "sort" in most unices, as in
+ the command: "sort -f -o tags tags". For "Exuberant ctags" version
+ 5.3 or higher the -f or --fold-case-sort switch can be used for this
+ as well. Note that case must be folded to uppercase for this to work.
+
+ When 'tagbsearch' is off, tags searching is slower when a full match
+ exists, but faster when no full match exists. Tags in unsorted tags
+ files may only be found with 'tagbsearch' off.
+ When the tags file is not sorted, or sorted in a wrong way (not on
+ ASCII byte value), 'tagbsearch' should be off, or the line given above
+ must be included in the tags file.
+ This option doesn't affect commands that find all matching tags (e.g.,
+ command-line completion and ":help").
+ {Vi: always uses binary search in some versions}
+
+ *'taglength'* *'tl'*
+'taglength' 'tl' number (default 0)
+ global
+ If non-zero, tags are significant up to this number of characters.
+
+ *'tagrelative'* *'tr'* *'notagrelative'* *'notr'*
+'tagrelative' 'tr' boolean (Vim default: on, Vi default: off)
+ global
+ {not in Vi}
+ If on and using a tag file in another directory, file names in that
+ tag file are relative to the directory where the tag file is.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'tags'* *'tag'* *E433*
+'tags' 'tag' string (default "./tags,tags", when compiled with
+ |+emacs_tags|: "./tags,./TAGS,tags,TAGS")
+ global or local to buffer |global-local|
+ Filenames for the tag command, separated by spaces or commas. To
+ include a space or comma in a file name, precede it with a backslash
+ (see |option-backslash| about including spaces and backslashes).
+ When a file name starts with "./", the '.' is replaced with the path
+ of the current file. But only when the 'd' flag is not included in
+ 'cpoptions'. Environment variables are expanded |:set_env|. Also see
+ |tags-option|.
+ "*", "**" and other wildcards can be used to search for tags files in
+ a directory tree. See |file-searching|. {not available when compiled
+ without the |+path_extra| feature}
+ If Vim was compiled with the |+emacs_tags| feature, Emacs-style tag
+ files are also supported. They are automatically recognized. The
+ default value becomes "./tags,./TAGS,tags,TAGS", unless case
+ differences are ignored (MS-Windows). |emacs-tags|
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ file names from the list. This avoids problems when a future version
+ uses another default.
+ {Vi: default is "tags /usr/lib/tags"}
+
+ *'tagstack'* *'tgst'* *'notagstack'* *'notgst'*
+'tagstack' 'tgst' boolean (default on)
+ global
+ {not in all versions of Vi}
+ When on, the |tagstack| is used normally. When off, a ":tag" or
+ ":tselect" command with an argument will not push the tag onto the
+ tagstack. A following ":tag" without an argument, a ":pop" command or
+ any other command that uses the tagstack will use the unmodified
+ tagstack, but does change the pointer to the active entry.
+ Resetting this option is useful when using a ":tag" command in a
+ mapping which should not change the tagstack.
+
+ *'term'* *E529* *E530* *E531*
+'term' string (default is $TERM, if that fails:
+ in the GUI: "builtin_gui"
+ on Amiga: "amiga"
+ on BeOS: "beos-ansi"
+ on Mac: "mac-ansi"
+ on MiNT: "vt52"
+ on MS-DOS: "pcterm"
+ on OS/2: "os2ansi"
+ on Unix: "ansi"
+ on VMS: "ansi"
+ on Win 32: "win32")
+ global
+ Name of the terminal. Used for choosing the terminal control
+ characters. Environment variables are expanded |:set_env|.
+ For example: >
+ :set term=$TERM
+< See |termcap|.
+
+ *'termbidi'* *'tbidi'*
+ *'notermbidi'* *'notbidi'*
+'termbidi' 'tbidi' boolean (default off, on for "mlterm")
+ global
+ {not in Vi}
+ {only available when compiled with the |+arabic|
+ feature}
+ The terminal is in charge of Bi-directionality of text (as specified
+ by Unicode). The terminal is also expected to do the required shaping
+ that some languages (such as Arabic) require.
+ Setting this option implies that 'rightleft' will not be set when
+ 'arabic' is set and the value of 'arabicshape' will be ignored.
+ Note that setting 'termbidi' has the immediate effect that
+ 'arabicshape' is ignored, but 'rightleft' isn't changed automatically.
+ This option is reset when the GUI is started.
+ For further details see |arabic.txt|.
+
+ *'termencoding'* *'tenc'*
+'termencoding' 'tenc' string (default ""; with GTK+ 2 GUI: "utf-8"; with
+ Macintosh GUI: "macroman")
+ global
+ {only available when compiled with the |+multi_byte|
+ feature}
+ {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
+ display).
+ In the Win32 console version the default value is the console codepage
+ when it differs from the ANSI codepage.
+ *E617*
+ Note: This does not apply to the GTK+ 2 GUI. After the GUI has been
+ successfully initialized, 'termencoding' is forcibly set to "utf-8".
+ Any attempts to set a different value will be rejected, and an error
+ message is shown.
+ For the Win32 GUI 'termencoding' is not used for typed characters,
+ because the Win32 system always passes Unicode characters.
+ When empty, the same encoding is used as for the 'encoding' option.
+ This is the normal value.
+ Not all combinations for 'termencoding' and 'encoding' are valid. See
+ |encoding-table|.
+ The value for this option must be supported by internal conversions or
+ iconv(). When this is not possible no conversion will be done and you
+ will probably experience problems with non-ASCII characters.
+ Example: You are working with the locale set to euc-jp (Japanese) and
+ want to edit a UTF-8 file: >
+ :let &termencoding = &encoding
+ :set encoding=utf-8
+< You need to do this when your system has no locale support for UTF-8.
+
+ *'terse'* *'noterse'*
+'terse' boolean (default off)
+ global
+ When set: Add 's' flag to 'shortmess' option (this makes the message
+ for a search that hits the start or end of the file not being
+ displayed). When reset: Remove 's' flag from 'shortmess' option. {Vi
+ shortens a lot of messages}
+
+ *'textauto'* *'ta'* *'notextauto'* *'nota'*
+'textauto' 'ta' boolean (Vim default: on, Vi default: off)
+ global
+ {not in Vi}
+ This option is obsolete. Use 'fileformats'.
+ For backwards compatibility, when 'textauto' is set, 'fileformats' is
+ set to the default value for the current system. When 'textauto' is
+ reset, 'fileformats' is made empty.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'textmode'* *'tx'* *'notextmode'* *'notx'*
+'textmode' 'tx' boolean (MS-DOS, Win32 and OS/2: default on,
+ others: default off)
+ local to buffer
+ {not in Vi}
+ This option is obsolete. Use 'fileformat'.
+ For backwards compatibility, when 'textmode' is set, 'fileformat' is
+ set to "dos". When 'textmode' is reset, 'fileformat' is set to
+ "unix".
+
+ *'textwidth'* *'tw'*
+'textwidth' 'tw' number (default 0)
+ local to buffer
+ {not in Vi}
+ Maximum width of text that is being inserted. A longer line will be
+ broken after white space to get this width. A zero value disables
+ this. 'textwidth' is set to 0 when the 'paste' option is set. When
+ 'textwidth' is zero, 'wrapmargin' may be used. See also
+ 'formatoptions' and |ins-textwidth|.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
+ *'thesaurus'* *'tsr'*
+'thesaurus' 'tsr' string (default "")
+ global or local to buffer |global-local|
+ {not in Vi}
+ List of file names, separated by commas, that are used to lookup words
+ for thesaurus completion commands |i_CTRL-X_CTRL-T|. Each line in
+ 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 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.
+ The use of |:set+=| and |:set-=| is preferred when adding or removing
+ directories from the list. This avoids problems when a future version
+ uses another default.
+ Backticks cannot be used in this option for security reasons.
+
+ *'tildeop'* *'top'* *'notildeop'* *'notop'*
+'tildeop' 'top' boolean (default off)
+ global
+ {not in Vi}
+ When on: The tilde command "~" behaves like an operator.
+ NOTE: This option is reset when 'compatible' is set.
+
+ *'timeout'* *'to'* *'notimeout'* *'noto'*
+'timeout' 'to' boolean (default on)
+ global
+ *'ttimeout'* *'nottimeout'*
+'ttimeout' boolean (default off)
+ global
+ {not in Vi}
+ These two options together determine the behavior when part of a
+ mapped key sequence or keyboard code has been received:
+
+ 'timeout' 'ttimeout' action ~
+ off off do not time out
+ on on or off time out on :mappings and key codes
+ off on time out on key codes
+
+ If both options are off, Vim will wait until either the complete
+ mapping or key sequence has been received, or it is clear that there
+ is no mapping or key sequence for the received characters. For
+ example: if you have mapped "vl" and Vim has received 'v', the next
+ character is needed to see if the 'v' is followed by an 'l'.
+ When one of the options is on, Vim will wait for about 1 second for
+ the next character to arrive. After that the already received
+ characters are interpreted as single characters. The waiting time can
+ be changed with the 'timeoutlen' option.
+ On slow terminals or very busy systems timing out may cause
+ malfunctioning cursor keys. If both options are off, Vim waits
+ forever after an entered <Esc> if there are key codes that start
+ with <Esc>. You will have to type <Esc> twice. If you do not have
+ problems with key codes, but would like to have :mapped key
+ sequences not timing out in 1 second, set the 'ttimeout' option and
+ reset the 'timeout' option.
+
+ NOTE: 'ttimeout' is reset when 'compatible' is set.
+
+ *'timeoutlen'* *'tm'*
+'timeoutlen' 'tm' number (default 1000)
+ global
+ {not in all versions of Vi}
+ *'ttimeoutlen'* *'ttm'*
+'ttimeoutlen' 'ttm' number (default -1)
+ global
+ {not in Vi}
+ The time in milliseconds that is waited for a key code or mapped key
+ sequence to complete. Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
+ when part of a command has been typed.
+ Normally only 'timeoutlen' is used and 'ttimeoutlen' is -1. When a
+ different timeout value for key codes is desired set 'ttimeoutlen' to
+ a non-negative number.
+
+ ttimeoutlen mapping delay key code delay ~
+ < 0 'timeoutlen' 'timeoutlen'
+ >= 0 'timeoutlen' 'ttimeoutlen'
+
+ The timeout only happens when the 'timeout' and 'ttimeout' options
+ tell so. A useful setting would be >
+ :set timeout timeoutlen=3000 ttimeoutlen=100
+< (time out on mapping after three seconds, time out on key codes after
+ a tenth of a second).
+
+ *'title'* *'notitle'*
+'title' boolean (default off, on when title can be restored)
+ global
+ {not in Vi}
+ {not available when compiled without the |+title|
+ feature}
+ When on, the title of the window will be set to the value of
+ 'titlestring' (if it is not empty), or to:
+ filename [+=-] (path) - VIM
+ Where:
+ filename the name of the file being edited
+ - indicates the file cannot be modified, 'ma' off
+ + indicates the file was modified
+ = indicates the file is read-only
+ =+ indicates the file is read-only and modified
+ (path) is the path of the file being edited
+ - VIM the server name |v:servername| or "VIM"
+ Only works if the terminal supports setting window titles
+ (currently Amiga console, Win32 console, all GUI versions and
+ terminals with a non- empty 't_ts' option - these are Unix xterm and
+ iris-ansi by default, where 't_ts' is taken from the builtin termcap).
+ *X11*
+ When Vim was compiled with HAVE_X11 defined, the original title will
+ be restored if possible. The output of ":version" will include "+X11"
+ when HAVE_X11 was defined, otherwise it will be "-X11". This also
+ works for the icon name |'icon'|.
+ But: When Vim was started with the |-X| argument, restoring the title
+ will not work (except in the GUI).
+ If the title cannot be restored, it is set to the value of 'titleold'.
+ You might want to restore the title outside of Vim then.
+ When using an xterm from a remote machine you can use this command:
+ rsh machine_name xterm -display $DISPLAY &
+ then the WINDOWID environment variable should be inherited and the
+ title of the window should change back to what it should be after
+ exiting Vim.
+
+ *'titlelen'*
+'titlelen' number (default 85)
+ global
+ {not in Vi}
+ {not available when compiled without the |+title|
+ feature}
+ Gives the percentage of 'columns' to use for the length of the window
+ title. When the title is longer, only the end of the path name is
+ shown. A '<' character before the path name is used to indicate this.
+ Using a percentage makes this adapt to the width of the window. But
+ it won't work perfectly, because the actual number of characters
+ available also depends on the font used and other things in the title
+ bar. When 'titlelen' is zero the full path is used. Otherwise,
+ values from 1 to 30000 percent can be used.
+ 'titlelen' is also used for the 'titlestring' option.
+
+ *'titleold'*
+'titleold' string (default "Thanks for flying Vim")
+ global
+ {not in Vi}
+ {only available when compiled with the |+title|
+ feature}
+ This option will be used for the window title when exiting Vim if the
+ original title cannot be restored. Only happens if 'title' is on or
+ 'titlestring' is not empty.
+ *'titlestring'*
+'titlestring' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the |+title|
+ feature}
+ When this option is not empty, it will be used for the title of the
+ window. This happens only when the 'title' option is on.
+ Only works if the terminal supports setting window titles (currently
+ Amiga console, Win32 console, all GUI versions and terminals with a
+ non-empty 't_ts' option).
+ When Vim was compiled with HAVE_X11 defined, the original title will
+ be restored if possible |X11|.
+ When this option contains printf-style '%' items, they will be
+ expanded according to the rules used for 'statusline'.
+ Example: >
+ :auto BufEnter * let &titlestring = hostname() . "/" . expand("%:p")
+ :set title titlestring=%<%F%=%l/%L-%P titlelen=70
+< The value of 'titlelen' is used to align items in the middle or right
+ of the available space.
+ Some people prefer to have the file name first: >
+ :set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
+< Note the use of "%{ }" and an expression to get the path of the file,
+ without the file name. The "%( %)" constructs are used to add a
+ separating space only when needed.
+ NOTE: Use of special characters in 'titlestring' may cause the display
+ to be garbled (e.g., when it contains a CR or NL character).
+ {not available when compiled without the |+statusline| feature}
+
+ *'toolbar'* *'tb'*
+'toolbar' 'tb' string (default "icons,tooltips")
+ global
+ {only for |+GUI_GTK|, |+GUI_Athena|, |+GUI_Motif| and
+ |+GUI_Photon|}
+ The contents of this option controls various toolbar settings. The
+ possible values are:
+ icons Toolbar buttons are shown with icons.
+ text Toolbar buttons shown with text.
+ horiz Icon and text of a toolbar button are
+ horizontally arranged. {only in GTK+ 2 GUI}
+ tooltips Tooltips are active for toolbar buttons.
+ Tooltips refer to the popup help text which appears after the mouse
+ cursor is placed over a toolbar button for a brief moment.
+
+ If you want the toolbar to be shown with icons as well as text, do the
+ following: >
+ :set tb=icons,text
+< Motif and Athena cannot display icons and text at the same time. They
+ will show icons if both are requested.
+
+ If none of the strings specified in 'toolbar' are valid or if
+ 'toolbar' is empty, this option is ignored. If you want to disable
+ the toolbar, you need to set the 'guioptions' option. For example: >
+ :set guioptions-=T
+< Also see |gui-toolbar|.
+
+ *'toolbariconsize'* *'tbis'*
+'toolbariconsize' 'tbis' string (default "small")
+ global
+ {not in Vi}
+ {only in the GTK+ 2 GUI}
+ Controls the size of toolbar icons. The possible values are:
+ tiny Use tiny toolbar icons.
+ small Use small toolbar icons (default).
+ medium Use medium-sized toolbar icons.
+ large Use large toolbar icons.
+ The exact dimensions in pixels of the various icon sizes depend on
+ the current theme. Common dimensions are large=32x32, medium=24x24,
+ small=20x20 and tiny=16x16.
+
+ If 'toolbariconsize' is empty, the global default size as determined
+ by user preferences or the current theme is used.
+
+ *'ttybuiltin'* *'tbi'* *'nottybuiltin'* *'notbi'*
+'ttybuiltin' 'tbi' boolean (default on)
+ global
+ {not in Vi}
+ When on, the builtin termcaps are searched before the external ones.
+ When off the builtin termcaps are searched after the external ones.
+ When this option is changed, you should set the 'term' option next for
+ the change to take effect, for example: >
+ :set notbi term=$TERM
+< See also |termcap|.
+ Rationale: The default for this option is "on", because the builtin
+ termcap entries are generally better (many systems contain faulty
+ xterm entries...).
+
+ *'ttyfast'* *'tf'* *'nottyfast'* *'notf'*
+'ttyfast' 'tf' boolean (default off, on when 'term' is xterm, hpterm,
+ sun-cmd, screen, rxvt, dtterm or
+ iris-ansi; also on when running Vim in
+ a DOS console)
+ global
+ {not in Vi}
+ Indicates a fast terminal connection. More characters will be sent to
+ the screen for redrawing, instead of using insert/delete line
+ commands. Improves smoothness of redrawing when there are multiple
+ windows and the terminal does not support a scrolling region.
+ Also enables the extra writing of characters at the end of each screen
+ line for lines that wrap. This helps when using copy/paste with the
+ mouse in an xterm and other terminals.
+
+ *'ttymouse'* *'ttym'*
+'ttymouse' 'ttym' string (default depends on 'term')
+ global
+ {not in Vi}
+ {only in Unix and VMS, doesn't work in the GUI; not
+ available when compiled without |+mouse|}
+ Name of the terminal type for which mouse codes are to be recognized.
+ Currently these three strings are valid:
+ *xterm-mouse*
+ xterm xterm-like mouse handling. The mouse generates
+ "<Esc>[Mscr", where "scr" is three bytes:
+ "s" = button state
+ "c" = column plus 33
+ "r" = row plus 33
+ xterm2 Works like "xterm", but with the xterm reporting the
+ mouse position while the mouse is dragged. This works
+ much faster and more precise. Your xterm must at
+ least at patchlevel 88 / XFree 3.3.3 for this to
+ work. See below for how Vim detects this
+ automatically.
+ *netterm-mouse*
+ netterm NetTerm mouse handling. The mouse generates
+ "<Esc>}r,c<CR>", where "r,c" are two decimal numbers
+ for the row and column.
+ *dec-mouse*
+ dec DEC terminal mouse handling. The mouse generates a
+ rather complex sequence, starting with "<Esc>[".
+ *jsbterm-mouse*
+ jsbterm JSB term mouse handling.
+ *pterm-mouse*
+ pterm QNX pterm mouse handling.
+
+ The mouse handling must be enabled at compile time |+mouse_xterm|
+ |+mouse_dec| |+mouse_netterm|.
+ Only "xterm"(2) is really recognized. NetTerm mouse codes are always
+ recognized, if enabled at compile time. DEC terminal mouse codes
+ are recognized if enabled at compile time, and 'ttymouse' is not
+ "xterm" (because the xterm and dec mouse codes conflict).
+ This option is automatically set to "xterm", when the 'term' option is
+ set to a name that starts with "xterm", and 'ttymouse' is not "xterm"
+ 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 "xterm2" value will be set if the xterm version is reported to be
+ 95 of higher. This only works when compiled with the |+termresponse|
+ feature and if |t_RV| is set to the escape sequence to request the
+ xterm version number. Otherwise "xterm2" must be set explicitly.
+ If you do not want 'ttymouse' to be set to "xterm2" automatically, set
+ t_RV to an empty string: >
+ :set t_RV=
+<
+ *'ttyscroll'* *'tsl'*
+'ttyscroll' 'tsl' number (default 999)
+ global
+ Maximum number of lines to scroll the screen. If there are more lines
+ to scroll the window is redrawn. For terminals where scrolling is
+ very slow and redrawing is not slow this can be set to a small number,
+ e.g., 3, to speed up displaying.
+
+ *'ttytype'* *'tty'*
+'ttytype' 'tty' string (default from $TERM)
+ global
+ Alias for 'term', see above.
+
+ *'undolevels'* *'ul'*
+'undolevels' 'ul' number (default 100, 1000 for Unix, VMS,
+ Win32 and OS/2)
+ global
+ {not in Vi}
+ Maximum number of changes that can be undone. Since undo information
+ is kept in memory, higher numbers will cause more memory to be used
+ (nevertheless, a single change can use an unlimited amount of memory).
+ Set to 0 for Vi compatibility: One level of undo and "u" undoes
+ itself: >
+ set ul=0
+< But you can also get Vi compatibility by including the 'u' flag in
+ 'cpoptions', and still be able to use CTRL-R to repeat undo.
+ Set to a negative number for no undo at all: >
+ set ul=-1
+< This helps when you run out of memory for a single change.
+ Also see |undo-two-ways|.
+
+ *'updatecount'* *'uc'*
+'updatecount' 'uc' number (default: 200)
+ global
+ {not in Vi}
+ After typing this many characters the swap file will be written to
+ disk. When zero, no swap file will be created at all (see chapter on
+ recovery |crash-recovery|). 'updatecount' is set to zero by starting
+ Vim with the "-n" option, see |startup|. When editing in readonly
+ mode this option will be initialized to 10000.
+ The swapfile can be disabled per buffer with |'swapfile'|.
+ When 'updatecount' is set from zero to non-zero, swap files are
+ created for all buffers that have 'swapfile' set. When 'updatecount'
+ is set to zero, existing swap files are not deleted.
+ Also see |'swapsync'|.
+ This option has no meaning in buffers where |'buftype'| is "nofile"
+ or "nowrite".
+
+ *'updatetime'* *'ut'*
+'updatetime' 'ut' number (default 4000)
+ global
+ {not in Vi}
+ If this many milliseconds nothing is typed the swap file will be
+ written to disk (see |crash-recovery|). Also used for the
+ |CursorHold| autocommand event.
+
+ *'verbose'* *'vbs'*
+'verbose' 'vbs' number (default 0)
+ global
+ {not in Vi, although some versions have a boolean
+ verbose option}
+ When bigger than zero, Vim will give messages about what it is doing.
+ Currently, these messages are given:
+ >= 1 When the viminfo file is read or written.
+ >= 2 When a file is ":source"'ed.
+ >= 5 Every searched tags file.
+ >= 8 Files for which a group of autocommands is executed.
+ >= 9 Every executed autocommand.
+ >= 12 Every executed function.
+ >= 13 When an exception is thrown, caught, finished, or discarded.
+ >= 14 Anything pending in a ":finally" clause.
+ >= 15 Every executed Ex command (truncated at 200 characters).
+
+ This option can also be set with the "-V" argument. See |-V|.
+ This option is also set by the |:verbose| command.
+
+ *'viewdir'* *'vdir'*
+'viewdir' 'vdir' string (default for Amiga, MS-DOS, OS/2 and Win32:
+ "$VIM/vimfiles/view",
+ for Unix: "~/.vim/view",
+ for Macintosh: "$VIM:vimfiles:view"
+ for VMS: "sys$login:vimfiles/view"
+ for RiscOS: "Choices:vimfiles/view")
+ global
+ {not in Vi}
+ {not available when compiled without the +mksession
+ feature}
+ Name of the directory where to store files for |:mkview|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'viewoptions'* *'vop'*
+'viewoptions' 'vop' string (default: "folds,options,cursor")
+ global
+ {not in Vi}
+ {not available when compiled without the +mksession
+ feature}
+ Changes the effect of the |:mkview| command. It is a comma separated
+ list of words. Each word enables saving and restoring something:
+ word save and restore ~
+ cursor cursor position in file and in window
+ folds manually created folds, opened/closed folds and local
+ fold options
+ options options and mappings local to a window or buffer (not
+ global values for local options)
+ slash backslashes in file names replaced with forward
+ slashes
+ unix with Unix end-of-line format (single <NL>), even when
+ on Windows or DOS
+
+ "slash" and "unix" are useful on Windows when sharing view files
+ with Unix. The Unix version of Vim cannot source dos format scripts,
+ but the Windows version of Vim can source unix format scripts.
+
+ *'viminfo'* *'vi'* *E526* *E527* *E528*
+'viminfo' 'vi' string (Vi default: "", Vim default for MS-DOS,
+ Windows and OS/2: '20,<50,s10,h,rA:,rB:,
+ for Amiga: '20,<50,s10,h,rdf0:,rdf1:,rdf2:
+ for others: '20,<50,s10,h)
+ global
+ {not in Vi}
+ {not available when compiled without the |+viminfo|
+ feature}
+ When non-empty, the viminfo file is read upon startup and written
+ when exiting Vim (see |viminfo-file|). The string should be a comma
+ separated list of parameters, each consisting of a single character
+ identifying the particular parameter, followed by a number or string
+ which specifies the value of that parameter. If a particular
+ character is left out, then the default value is used for that
+ parameter. The following is a list of the identifying characters and
+ the effect of their value.
+ CHAR VALUE ~
+ ! 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.
+ " 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!
+ % 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
+ buffer list is restored from the viminfo file. Buffers
+ without a file name and buffers for help files are not written
+ to the viminfo file.
+ ' 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.
+ / 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.
+ : Maximum number of items in the command-line history to be
+ saved. When not included, the value of 'history' is used.
+ < 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.
+ @ Maximum number of items in the input-line history to be
+ saved. When not included, the value of 'history' is used.
+ 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|.
+ 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").
+ 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.
+ 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.
+ 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
+ stored. This is to avoid removable media. For MS-DOS you
+ could use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:". You can
+ also use it for temp files, e.g., for Unix: "r/tmp". Case is
+ ignored. Maximum length of each 'r' argument is 50
+ characters.
+ 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.
+ Also see the '<' item above: line count limit.
+
+ Example: >
+ :set viminfo='50,<1000,s100,:0,n~/vim/viminfo
+<
+ '50 Marks will be remembered for the last 50 files you
+ edited.
+ <1000 Contents of registers (up to 1000 lines each) will be
+ remembered.
+ s100 Registers with more than 100 Kbyte text are skipped.
+ :0 Command-line history will not be saved.
+ n~/vim/viminfo The name of the file to use is "~/vim/viminfo".
+ no / Since '/' is not specified, the default will be used,
+ that is, save all of the search history, and also the
+ previous search and substitute patterns.
+ no % The buffer list will not be saved nor read back.
+ no h 'hlsearch' highlighting will be restored.
+
+ When setting 'viminfo' from an empty value you can use |:rviminfo| to
+ load the contents of the file, this is not done automatically.
+
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+ *'virtualedit'* *'ve'*
+'virtualedit' 've' string (default "")
+ global
+ {not in Vi}
+ {not available when compiled without the
+ |+virtualedit| feature}
+ A comma separated list of these words:
+ block Allow virtual editing in Visual block mode.
+ insert Allow virtual editing in Insert mode.
+ all Allow virtual editing in all modes.
+ Virtual editing means that the cursor can be positioned where there is
+ no actual character. This can be halfway into a Tab or beyond the end
+ of the line. Useful for selecting a rectangle in Visual mode and
+ editing a table.
+
+ *'visualbell'* *'vb'* *'novisualbell'* *'novb'* *beep*
+'visualbell' 'vb' boolean (default off)
+ global
+ {not in Vi}
+ Use visual bell instead of beeping. The terminal code to display the
+ visual bell is given with 't_vb'. When no beep or flash is wanted,
+ use ":set vb t_vb=".
+ Note: When the GUI starts, 't_vb' is reset to its default value. You
+ might want to set it again in your |gvimrc|.
+ In the GUI, 't_vb' defaults to "<Esc>|f", which inverts the display
+ for 20 msec. If you want to use a different time, use "<Esc>|40f",
+ where 40 is the time in msec.
+ Does not work on the Amiga, you always get a screen flash.
+ Also see 'errorbells'.
+
+ *'warn'* *'nowarn'*
+'warn' boolean (default on)
+ global
+ Give a warning message when a shell command is used while the buffer
+ has been changed.
+
+ *'weirdinvert'* *'wiv'* *'noweirdinvert'* *'nowiv'*
+'weirdinvert' 'wiv' boolean (default off)
+ global
+ {not in Vi}
+ This option has the same effect as the 't_xs' termcap option.
+ It is provided for backwards compatibility with version 4.x.
+ Setting 'weirdinvert' has the effect of making 't_xs' non-empty, and
+ vice versa. Has no effect when the GUI is running.
+
+ *'whichwrap'* *'ww'*
+'whichwrap' 'ww' string (Vim default: "b,s", Vi default: "")
+ global
+ {not in Vi}
+ Allow specified keys that move the cursor left/right to move to the
+ previous/next line when the cursor is on the first/last character in
+ the line. Concatenate characters to allow this for these keys:
+ char key mode ~
+ b <BS> Normal and Visual
+ s <Space> Normal and Visual
+ h "h" Normal and Visual
+ l "l" Normal and Visual
+ < <Left> Normal and Visual
+ > <Right> Normal and Visual
+ ~ "~" Normal
+ [ <Left> Insert and Replace
+ ] <Right> Insert and Replace
+ For example: >
+ :set ww=<,>,[,]
+< allows wrap only when cursor keys are used.
+ When the movement keys are used in combination with a delete or change
+ operator, the <EOL> also counts for a character. This makes "3h"
+ different from "3dh" when the cursor crosses the end of a line. This
+ is also true for "x" and "X", because they do the same as "dl" and
+ "dh". If you use this, you may also want to use the mapping
+ ":map <BS> X" to make backspace delete the character in front of the
+ cursor.
+ When 'l' is included, you get a side effect: "yl" on an empty line
+ will include the <EOL>, so that "p" will insert a new line.
+ NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'wildchar'* *'wc'*
+'wildchar' 'wc' number (Vim default: <Tab>, Vi default: CTRL-E)
+ global
+ {not in Vi}
+ Character you have to type to start wildcard expansion in the
+ command-line, as specified with 'wildmode'.
+ The character is not recognized when used inside a macro. See
+ 'wildcharm' for that.
+ Although 'wc' is a number option, you can set it to a special key: >
+ :set wc=<Esc>
+< NOTE: This option is set to the Vi default value when 'compatible' is
+ set and to the Vim default value when 'compatible' is reset.
+
+ *'wildcharm'* *'wcm'*
+'wildcharm' 'wcm' number (default: none (0))
+ global
+ {not in Vi}
+ 'wildcharm' works exactly like 'wildchar', except that it is
+ recognized when used inside a macro. You can find "spare" command-line
+ keys suitable for this option by looking at |ex-edit-index|. Normally
+ you'll never actually type 'wildcharm', just use it in mappings that
+ automatically invoke completion mode, e.g.: >
+ :set wcm=<C-Z>
+ :cmap ss so $vim/sessions/*.vim<C-Z>
+< Then after typing :ss you can use CTRL-P & CTRL-N.
+
+ *'wildignore'* *'wig'*
+'wildignore' 'wig' string (default "")
+ global
+ {not in Vi}
+ {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.
+ The pattern is used like with |:autocmd|, see |autocmd-patterns|.
+ Also see 'suffixes'.
+ Example: >
+ :set wildignore=*.o,*.obj
+< The use of |:set+=| and |:set-=| is preferred when adding or removing
+ a pattern from the list. This avoids problems when a future version
+ uses another default.
+
+ *'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
+'wildmenu' 'wmnu' boolean (default off)
+ global
+ {not in Vi}
+ {not available if compiled without the |+wildmenu|
+ feature}
+ When 'wildmenu' is on, command-line completion operates in an enhanced
+ mode. On pressing 'wildchar' (usually <Tab>) to invoke completion,
+ the possible matches are shown just above the command line, with the
+ first match highlighted (overwriting the status line, if there is
+ one). Keys that show the previous/next match, such as <Tab> or
+ 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.
+ 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.
+ The "wildmenu" mode is abandoned when a key is hit that is not used
+ for selecting a completion.
+ While the "wildmenu" is active the following keys have special
+ meanings:
+
+ <Left> <Right> - select previous/next match (like CTRL-P/CTRL-N)
+ <Down> - in filename/menu name completion: move into a
+ subdirectory or submenu.
+ <CR> - in menu completion, when the cursor is just after a
+ dot: move into a submenu.
+ <Up> - in filename/menu name completion: move up into
+ parent directory or parent menu.
+
+ This makes the menus accessible from the console |console-menus|.
+
+ If you prefer the <Left> and <Right> keys to move the cursor instead
+ of selecting a different match, use this: >
+ :cnoremap <Left> <Space><BS><Left>
+ :cnoremap <Right> <Space><BS><Right>
+<
+ The "WildMenu" highlighting is used for displaying the current match
+ |hl-WildMenu|.
+
+ *'wildmode'* *'wim'*
+'wildmode' 'wim' string (Vim default: "full")
+ global
+ {not in Vi}
+ Completion mode that is used for the character specified with
+ 'wildchar'. It is a comma separated list of up to four parts. Each
+ part specifies what to do for each consecutive use of 'wildchar. The
+ first part specifies the behavior for the first use of 'wildchar',
+ The second part for the second use, etc.
+ These are the possible values for each part:
+ "" Complete only the first match.
+ "full" Complete the next full match. After the last match,
+ the original string is used and then the first match
+ again.
+ "longest" Complete till longest common string. If this doesn't
+ result in a longer string, use the next part.
+ "longest:full" Like "longest", but also start 'wildmenu' if it is
+ enabled.
+ "list" When more than one match, list all matches.
+ "list:full" When more than one match, list all matches and
+ complete first match.
+ "list:longest" When more than one match, list all matches and
+ complete till longest common string.
+ When there is only a single match, it is fully completed in all cases.
+
+ Examples: >
+ :set wildmode=full
+< Complete first full match, next match, etc. (the default) >
+ :set wildmode=longest,full
+< Complete longest common string, then each full match >
+ :set wildmode=list:full
+< List all matches and complete each full match >
+ :set wildmode=list,full
+< List all matches without completing, then each full match >
+ :set wildmode=longest,list
+< Complete longest common string, then list alternatives.
+
+ *'winaltkeys'* *'wak'*
+'winaltkeys' 'wak' string (default "menu")
+ global
+ {not in Vi}
+ {only used in Win32, Motif, GTK and Photon GUI}
+ Some GUI versions allow the access to menu entries by using the ALT
+ key in combination with a character that appears underlined in the
+ menu. This conflicts with the use of the ALT key for mappings and
+ entering special characters. This option tells what to do:
+ no Don't use ALT keys for menus. ALT key combinations can be
+ mapped, but there is no automatic handling. This can then be
+ done with the |:simalt| command.
+ yes ALT key handling is done by the windowing system. ALT key
+ combinations cannot be mapped.
+ menu Using ALT in combination with a character that is a menu
+ shortcut key, will be handled by the windowing system. Other
+ keys can be mapped.
+ If the menu is disabled by excluding 'm' from 'guioptions', the ALT
+ key is never used for the menu.
+ In the Win32 version, the <F10> key is handled like this too, since
+ Windows uses it to select a menu.
+
+ *'winheight'* *'wh'* *E591*
+'winheight' 'wh' number (default 1)
+ global
+ {not in Vi}
+ {not available when compiled without the +windows
+ feature}
+ Minimal number of lines for the current window. This is not a hard
+ minimum, Vim will use fewer lines if there is not enough room. If the
+ current window is smaller, its size is increased, at the cost of the
+ height of other windows. Set it to 999 to make the current window
+ always fill the screen (although this has the drawback that ":all"
+ will create only two windows). Set it to a small number for normal
+ editing.
+ Minimum value is 1.
+ The height is not adjusted after one of the commands to change the
+ height of the current window.
+ 'winheight' applies to the current window. Use 'winminheight' to set
+ the minimal height for other windows.
+
+ *'winfixheight'* *'wfh'* *'nowinfixheight'* *'nowfh'*
+'winfixheight' 'wfh' boolean (default off)
+ local to window
+ {not in Vi}
+ {not available when compiled without the +windows
+ feature}
+ Keep the window height when windows are opened or closed and
+ 'equalalways' is set. Set by default for the |preview-window| and
+ |quickfix-window|.
+ The height may be changed anyway when running out of room.
+
+ *'winminheight'* *'wmh'*
+'winminheight' 'wmh' number (default 1)
+ global
+ {not in Vi}
+ {not available when compiled without the +windows
+ feature}
+ The minimal height of a window, when it's not the current window.
+ This is a hard minimum, windows will never become smaller.
+ When set to zero, windows may be "squashed" to zero lines (i.e. just a
+ status bar) if necessary. They will return to at least one line when
+ they become active (since the cursor has to have somewhere to go.)
+ Use 'winheight' to set the minimal height of the current window.
+ This option is only checked when making a window smaller. Don't use a
+ large number, it will cause errors when opening more than a few
+ windows. A value of 0 to 3 is reasonable.
+
+ *'winminwidth'* *'wmw'*
+'winminwidth' 'wmw' number (default 1)
+ global
+ {not in Vi}
+ {not available when compiled without the +vertsplit
+ feature}
+ The minimal width of a window, when it's not the current window.
+ This is a hard minimum, windows will never become smaller.
+ When set to zero, windows may be "squashed" to zero columns (i.e. just
+ a vertical separator) if necessary. They will return to at least one
+ line when they become active (since the cursor has to have somewhere
+ to go.)
+ Use 'winwidth' to set the minimal width of the current window.
+ This option is only checked when making a window smaller. Don't use a
+ large number, it will cause errors when opening more than a few
+ windows. A value of 0 to 12 is reasonable.
+
+ *'winwidth'* *'wiw'* *E592*
+'winwidth' 'wiw' number (default 20)
+ global
+ {not in Vi}
+ {not available when compiled without the +vertsplit
+ feature}
+ Minimal number of columns for the current window. This is not a hard
+ minimum, Vim will use fewer columns if there is not enough room. If
+ the current window is smaller, its size is increased, at the cost of
+ the width of other windows. Set it to 999 to make the current window
+ always fill the screen. Set it to a small number for normal editing.
+ The width is not adjusted after one of the commands to change the
+ width of the current window.
+ 'winwidth' applies to the current window. Use 'winminwidth' to set
+ the minimal width for other windows.
+
+ *'wrap'* *'nowrap'*
+'wrap' boolean (default on)
+ local to window
+ {not in Vi}
+ This option changes how text is displayed. It doesn't change the text
+ in the buffer, see 'textwidth' for that.
+ When on, lines longer than the width of the window will wrap and
+ displaying continues on the next line. When off lines will not wrap
+ and only part of long lines will be displayed. When the cursor is
+ moved to a part that is not shown, the screen will scroll
+ horizontally.
+ The line will be broken in the middle of a word if necessary. See
+ 'linebreak' to get the break at a word boundary.
+ To make scrolling horizontally a bit more useful, try this: >
+ :set sidescroll=5
+ :set listchars+=precedes:<,extends:>
+< See 'sidescroll', 'listchars' and |wrap-off|.
+
+ *'wrapmargin'* *'wm'*
+'wrapmargin' 'wm' number (default 0)
+ local to buffer
+ Number of characters from the right window border where wrapping
+ starts. When typing text beyond this limit, an <EOL> will be inserted
+ and inserting continues on the next line.
+ Options that add a margin, such as 'number' and 'foldcolumn', cause
+ the text width to be further reduced. This is Vi compatible.
+ When 'textwidth' is non-zero, this option is not used.
+ See also 'formatoptions' and |ins-textwidth|. {Vi: works differently
+ and less usefully}
+
+ *'wrapscan'* *'ws'* *'nowrapscan'* *'nows'*
+'wrapscan' 'ws' boolean (default on) *E384* *E385*
+ global
+ Searches wrap around the end of the file.
+
+ *'write'* *'nowrite'*
+'write' boolean (default on)
+ global
+ {not in Vi}
+ Allows writing files. When not set, writing a file is not allowed.
+ Can be used for a view-only mode, where modifications to the text are
+ still allowed. Can be reset with the |-m| or |-M| command line
+ argument. Filtering text is still possible, even though this requires
+ writing a temporary file.
+
+ *'writeany'* *'wa'* *'nowriteany'* *'nowa'*
+'writeany' 'wa' boolean (default off)
+ global
+ Allows writing to any file with no need for "!" override.
+
+ *'writebackup'* *'wb'* *'nowritebackup'* *'nowb'*
+'writebackup' 'wb' boolean (default on with |+writebackup| feature, off
+ otherwise)
+ global
+ {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.
+ When the 'backupskip' pattern matches, a backup is not made anyway.
+ NOTE: This option is set to the default value when 'compatible' is
+ set.
+
+ *'writedelay'* *'wd'*
+'writedelay' 'wd' number (default 0)
+ global
+ {not in Vi}
+ The number of microseconds to wait for each character sent to the
+ screen. When non-zero, characters are sent to the terminal one by
+ one. For MS-DOS pcterm this does not work. For debugging purposes.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_390.txt b/runtime/doc/os_390.txt
new file mode 100644
index 000000000..420260692
--- /dev/null
+++ b/runtime/doc/os_390.txt
@@ -0,0 +1,340 @@
+*os_390.txt* For Vim version 7.0aa. Last change: 2003 Jun 03
+
+
+ VIM REFERENCE MANUAL by Ralf Schandl
+
+ *zOS* *z/OS* *OS390* *os390* *MVS*
+This file contains the particulars for the z/OS UNIX version of Vim.
+
+1. Open source on z/OS UNIX |zOS-open-source|
+2. Your feedback is needed |zOS-feedback|
+3. Building VIM for z/OS UNIX |zOS-building|
+4. ASCII/EBCDIC dependent scripts |zOS-has-ebcdic|
+5. XTerm Problems |zOS-xterm|
+6. Motif Problems |zOS-Motif|
+7 Bugs |zOS-Bugs|
+8. Known weaknesses |zOS-weaknesses|
+9. Changes |zOS-changes|
+
+DISCLAIMER: ~
+We are IBM employees, but IBM is not responsible for this port. This is our
+private fun, and is provided in the hopes that it may be useful to others.
+
+Please note that this software has NOT been submitted to any formal IBM
+testing and is published AS IS. Please do not contact IBM for support for this
+software, as it is not an official component of any IBM product. IT IS NOT
+SUPPORTED, GUARANTEED, OR RELATED WHATSOEVER TO IBM.
+
+Contributors: ~
+The port to z/OS UNIX was done by Ralf Schandl for the Redbook mentioned
+below.
+
+Changes, bug-reports, or both by:
+
+ David Moore
+ Anthony Giorgio <agiorgio@fastmail.fm>
+ and others
+
+This document was written by Ralf Schandl and revised by Anthony Giorgio.
+
+==============================================================================
+1. Open source on z/OS UNIX *OS390-open-source* *zOS-open-source*
+
+If you are interested in other Open Source Software on z/OS UNIX, have a
+look at the following Redbook:
+
+ Mike MacIsaac et al
+ "Open Source Software for z/OS and OS/390 UNIX"
+ IBM Form Number: SG24-5944-01
+ ISBN: 0738424633
+
+You can find out more information, order a hard copy, or download a PDF
+version of these Redbooks at:
+
+ http://www.redbooks.ibm.com
+
+==============================================================================
+2. Your feedback is needed *OS390-feedback* *zOS-feedback*
+
+Vim should compile, link, and run right out of the box on a standard IBM z/OS
+UNIX mainframe. I've personally run it on z/OS V1R2 and V1R3 machines without
+problems.
+
+Many changes had to be done to the code to port Vim to z/OS UNIX. As like
+most UNIX programs, Vim contained heavy ASCII dependencies. I might have
+missed an ASCII dependency, or it is possible that a new one has been added
+with a feature or bug fix. Most programmers are simply not aware of possible
+ASCII/EBCDIC conversion issues. If you hit a problem that seems related to
+this, feel free to contact us at the email addresses above.
+
+One indication of ASCII/EBCDIC conversion problems is screen corruption with
+"unprintable" characters. For example, at one point the errorbell was broken
+in Vim. Any time Vim tried to ring the terminal bell an ASCII character 0x07
+would be printed. This works fine on most terminals, but is broken on an
+EBCDIC one. The correct solution was to define a different value for the bell
+character on EBCDIC systems.
+
+Remember, it's only possible to fix a bug if the community knows about it.
+Don't rely on someone else to report it! See the section |bug-reports|.
+
+==============================================================================
+3. Building VIM for z/OS UNIX *OS390-building* *zOS-building*
+
+A word on debugging code first: ~
+
+The normal run of configure adds the flag '-g' to the compiler options,
+to include debugging information into the executable. This information
+are normally removed from the executable with the strip command during
+installation. On z/OS UNIX, it is not possible to remove this from
+the executable. The strip command exists on z/OS UNIX and is called
+during the installation, but it does nothing. It is equivalent to the
+'touch' command. This is due to the way debug symbols are stored in the
+objects generated by the compiler.
+
+If you want to build Vim without debugging code, export the environment
+variable CFLAGS set to an empty string before you call the configure script.
+>
+ export CFLAGS=""
+
+
+Building without X11: ~
+
+Note: Use cc to build Vim. The c89 compiler has stricter syntax checking
+and will not compile Vim cleanly.
+
+If you build VIM without X11 support, compiling and building is
+straightforward. Don't forget to export _CC_CCMODE=1 before calling
+configure and make.
+>
+ $ export _CC_CCMODE=1
+ $./configure --with-features=big --without-x --enable-gui=no
+ $ make
+ $ make test
+<
+ Test notes:
+ Test 11 will fail if you do not have gzip installed.
+ Test 42 will fail, as VIM on z/OS UNIX doesn't support the multibyte
+ feature. (David Moore: "Doesn't work _yet_! :-) I'll see what I
+ can do.")
+>
+
+ $ make install
+
+
+Building with X11: ~
+
+There are two ways for building Vim with X11 support. You can link it
+statically with the X11 libraries or can bind it with the X11 DLLs. The
+statically linked version results in a huge executable (~13MB), while the
+dynamically linked executable is much smaller (~4.5MB).
+
+Here is what you do, if you want Motif:
+
+ a) Static link >
+ $ configure --with-features=big --enable-gui=motif
+ $ make
+<
+ VIM is now linked statically with the X11 libraries.
+
+ b) Dynamic link:
+ Make VIM as described for the static link. Then change the contents of
+ the 'auto/link.sed' file by appending: >
+ s%-lXm *%/usr/lib/Xm.x %g
+ s%-lX11 *%/usr/lib/X11.x %g
+ s%-lSM *%/usr/lib/SM.x %g
+ s%-lICE *%/usr/lib/ICE.x %g
+<
+ Then do: >
+ $ rm vim
+ $ make
+<
+ Now Vim is linked with the X11-DLLs.
+
+See the Makefile and the file link.sh on how link.sed is used.
+
+==============================================================================
+4. ASCII/EBCDIC dependent scripts *OS390-has-ebcdic* *zOS-has-ebcdic*
+
+For the internal script language the feature "ebcdic" was added. With this
+you can fix ASCII dependent scripts like this:
+>
+ if has("ebcdic")
+ let space = 64
+ else
+ let space = 32
+ endif
+<
+==============================================================================
+5. XTerm problems *OS390-xterm* *zOS-xterm*
+
+Note: This problem was resolved in version 6.1b. ~
+
+I saw one problem with XTerm on z/OS UNIX. The terminal code for moving the
+cursor to the left is wrong in the termlib database. Perhaps not wrong, but
+it didn't work with VIM syntax highlighting and command line cursor movement.
+
+If the highlighting is messed up while you type, but is okay after you refreshed
+the screen with <C-L> or if you can't move to the left with the cursor key on
+the command line, try adding >
+ :set t_le=^H
+<
+to your .vimrc. Note: '^H' is one character, hit <C-V><C-H> to get it.
+
+==============================================================================
+6. Motif Problems *OS390-Motif* *zOS-Motif*
+
+It seems that in porting the Motif library to z/OS, a translation from EBCDIC
+to ASCII for the accelerator characters of the pull-down menus was forgotten.
+Even after I tried to hand convert the menus, the accelerator keys continued
+to only work for the opening of menus (like <Alt-F> to open the file menu).
+They still do not work for the menu items themselves (like <Alt-F>O to open
+the file browser).
+
+There is no solution for this as of yet.
+
+==============================================================================
+7. Bugs *OS390-bugs* *zOS-Bugs*
+
+- Vim will consistently hang when a large amount of text is selected in
+ visual block mode. This may be due to a memory corruption issue. Note that
+ this occurs in both the terminal and gui versions.
+
+==============================================================================
+8. Known weaknesses *OS390-weaknesses* *zOS-weaknesses*
+
+- No binary search in tag files.
+ The program /bin/sort sorts by ASCII value by default. This program is
+ normally used by ctags to sort the tags. There might be a version of
+ ctags out there, that does it right, but we can't be sure. So this seems to
+ be a permanent restriction.
+
+- Multibyte support (utf-8) doesn't work, it's disabled at compile time.
+ (|multibyte|)
+
+- The cscope interface (|cscope|) doesn't work for the version of cscope
+ that we use on our mainframe. We have a copy of version 15.0b12, and it
+ causes Vim to hang when using the "cscope add" command. I'm guessing that
+ the binary format of the cscope database isn't quite what Vim is expecting.
+ I've tried to port the current version of cscope (15.3) to z/OS, without
+ much success. If anyone is interested in trying, drop me a line if you
+ make any progress.
+
+- No glib/gtk support. I have not been able to successfully compile glib on
+ z/OS UNIX. This means you'll have to live without the pretty gtk toolbar.
+
+Never tested:
+ - Perl interface (|perl|)
+ - Hangul input (|hangul|)
+ - Encryption support (|encryption|)
+ - Langmap (|'langmap'|)
+ - Python support (|Python|)
+ - Right-to-left mode (|'rightleft'|)
+ - SNiFF+ interface (|sniff|)
+ - TCL interface (|tcl|)
+ ...
+
+If you try any of these features and they work, drop us a note!
+
+==============================================================================
+9. Changes *OS390-changes* *zOS-changes*
+
+This is a small reference of the changes made to the z/OS port of Vim. It is
+not an exhaustive summary of all the modifications made to the code base.
+
+6.1b (beta):
+ Changed KS_LE in term.c to be "\b" instead of "\010" This fixed the
+ screen corruption problems in gVim reported by Anthony Giorgio.
+
+ Anthony Giorgio updated this document:
+ - Changed OS/390 to z/OS where appropriate. IBM decided to rename
+ all of its servers and operating systems. z/OS and OS/390
+ are the same product, but the version numbering system was
+ reset for the name change. (e.g. OS/390 V2R11 == z/OS V1R1)
+ - Added information about second edition of the Open Source Redbook.
+ - Moved Redbook information to a separate section.
+ - Various tweaks and changes.
+ - Updated testing section.
+
+6.0au:
+ Changed configure.in
+ Changed documentation.
+ Anthony Giorgio fixed the errorbell.
+
+ David Moore found some problems, which were fixed by Bram and/or David for
+ 6.0au.
+
+6.0q (alpha):
+ Minor changes for nrformats=alpha (see |'nrformats'|).
+ Problem with hard-coded keycode for the English pound sign. Added a define in
+ ascii.h
+ Disabled multibyte for EBCDIC in feature.h
+
+6.0f (alpha):
+ First compile of Vim 6 on z/OS UNIX. Some minor changes were needed.
+
+ Finally found the reason why make from the top level didn't work (I must have
+ been blind before!). The Makefile contained a list of targets in one target
+ line. On all other UNIX's the macro $@ evaluates to the first target in this
+ list, only on z/OS UNIX it evaluates to the last one :-(.
+
+5.6-390d:
+ Cleaned up some hacks.
+
+5.6-390c:
+ I grepped through the source and examined every spot with a character
+ involved in a operation (+-). I hope I now found all EBCDIC/ASCII
+ stuff, but ....
+
+ Fixed:
+ - fixed warning message in do_fixdel()
+ - fixed translation from Ctrl-Char to symbolic name (like ^h to CTRL-H)
+ for :help
+ - fixed yank/delete/... into register
+ - fixed :register command
+ - fixed viminfo register storing
+ - fixed quick-access table in findoptions()
+ - fixed 'g^H' select mode
+ - fixed tgetstr() 'get terminal capability string', ESC and
+ Ctrl chars where wrong. (Not used on OS/390 UNIX)
+
+
+ ctags:
+ - added trigraphs support (used in prolog of system header files)
+ (get.c)
+ - fixed sorting order with LC_COLLATE=S390 to force EBCDIC sorting.
+ (sort.c)
+
+5.6-390b:
+ Changed:
+ - configure.in:
+ - added test for OS/390 UNIX
+ - added special compiler and linker options if building with X11
+ - configure:
+ - after created via autoconf hand-edited it to make the test for
+ ICEConnectionNumber work. This is a autoconf problem. OS/390 UNIX
+ needs -lX11 for this.
+ - Makefile
+ - Don't include the lib directories ('-L...') into the variable
+ ALL_LIBS. Use own variable ALL_LIB_DIRS instead. A fully POSIX
+ compliant compiler must not accept objects/libraries and options
+ mixed. Now we can call the linker like this:
+
+ $(CC) $(LDFLAGS) $(ALL_LIB_DIRS) $(OBJ) $(ALL_LIBS)
+
+ Fixed:
+ - Double quote couldn't be entered
+ Missed ASCII dependencies while setting up terminal
+ In ASCII 127 is the delete char, in EBCDIC codepage 1047 the value 127
+ is the double quote.
+ - fixed ':fixdel'
+
+5.6-390a:
+ first alpha release for OS/390 UNIX.
+
+ Addition:
+ - For the internal script language I added the feature "ebcdic".
+ This can be queried with the has()-function of the internal
+ script language.
+
+------------------------------------------------------------------------------
+ vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_amiga.txt b/runtime/doc/os_amiga.txt
new file mode 100644
index 000000000..fd215834f
--- /dev/null
+++ b/runtime/doc/os_amiga.txt
@@ -0,0 +1,139 @@
+*os_amiga.txt* For Vim version 7.0aa. Last change: 2004 Apr 25
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *Amiga*
+This file contains the particularities for the Amiga version of Vim.
+There is also a section specifically for |MorphOS| below.
+
+Installation on the Amiga:
+- Assign "VIM:" to the directory where the Vim "doc" directory is. Vim will
+ look for the file "VIM:doc/help.txt" (for the help command).
+ Setting the environment variable $VIM also works. And the other way around:
+ when $VIM used and it is not defined, "VIM:" is used.
+- With DOS 1.3 or earlier: Put "arp.library" in "libs:". Vim must have been
+ compiled with the |+ARP| feature enabled. Make sure that newcli and run are
+ in "C:" (for executing external commands).
+- Put a shell that accepts a command with "-c" (e.g. "Csh" from Fish disk
+ 624) in "c:" or in any other directory that is in your search path (for
+ executing external commands).
+
+If you have sufficient memory you can avoid startup delays by making Vim and
+csh resident with the command "rez csh vim". You will have to put
+"rezlib.library" in your "libs:" directory. Under 2.0 you will need rez
+version 0.5.
+
+If you do not use digraphs, you can save some memory by recompiling without
+the |+digraphs| feature. If you want to use Vim with other terminals you can
+recompile with the TERMCAP option. Vim compiles with Manx 5.x and SAS 6.x.
+See the makefiles and feature.h.
+
+If you want to use different colors set the termcap codes:
+ t_mr (for inverted text)
+ t_md (for bold text)
+ t_me (for normal text after t_mr and t_md)
+ t_so (for standout mode)
+ t_se (for normal text after t_so)
+ t_us (for underlined text)
+ t_ue (for normal text after t_us)
+ t_ZH (for italic text)
+ t_ZR (for normal text after t_ZH)
+
+Standard ANSI escape sequences are used. The codes are:
+30 grey char 40 grey cell >0 grey background 0 all attributes off
+31 black char 41 black cell >1 black background 1 boldface
+32 white char 42 white cell >2 white background 2 faint
+33 blue char 43 blue cell >3 blue background 3 italic
+34 grey char 44 grey cell >4 grey background 4 underscore
+35 black char 45 black cell >5 black background 7 reverse video
+36 white char 46 white cell >6 white background 8 invisible
+37 blue char 47 blue cell >7 blue background
+
+The codes with '>' must be the last. The cell and background color should be
+the same. The codes can be combined by separating them with a semicolon. For
+example to get white text on a blue background: >
+ :set t_me=^V<Esc>[0;32;43;>3m
+ :set t_se=^V<Esc>[0;32;43;>3m
+ :set t_ue=^V<Esc>[0;32;43;>3m
+ :set t_ZR=^V<Esc>[0;32;43;>3m
+ :set t_md=^V<Esc>[1;32;43;>3m
+ :set t_mr=^V<Esc>[7;32;43;>3m
+ :set t_so=^V<Esc>[0;31;43;>3m
+ :set t_us=^V<Esc>[4;32;43;>3m
+ :set t_ZH=^V<Esc>[3;32;43;>3m
+
+When using multiple commands with a filter command, e.g. >
+ :r! echo this; echo that
+Only the output of the last command is used. To fix this you have to group the
+commands. This depends on the shell you use (that is why it is not done
+automatically in Vim). Examples: >
+ :r! (echo this; echo that)
+ :r! {echo this; echo that}
+
+Commands that accept a single file name allow for embedded spaces in the file
+name. However, when using commands that accept several file names, embedded
+spaces need to be escaped with a backslash.
+
+------------------------------------------------------------------------------
+Vim for MorphOS *MorphOS*
+
+[this section mostly by Ali Akcaagac]
+
+For the latest info about the MorphOS version:
+ http://www.akcaagac.com/index_vim.html
+
+
+Problems ~
+
+There are a couple of problems which are not MorphOS related but more Vim and
+UN*X related. When starting up Vim in ram: it complains with a nag requester
+from MorphOS please simply ignore it. Another problem is when running Vim as
+is some plugins will cause a few problems which you can ignore as well.
+Hopefully someone will be fixing it over the time.
+
+To pass all these problems for now you can either run:
+
+ vim <file to be edited>
+
+or if you want to run Vim plain and enjoy the motion of Helpfiles etc. it then
+would be better to enter:
+
+ vim --noplugins <of course you can add a file>
+
+
+Installation ~
+
+1) Please copy the binary 'VIM' file to c:
+2) Get the Vim runtime package from:
+
+ ftp://ftp.vim.org/pub/vim/amiga/vim62rt.tgz
+
+ and unpack it in your 'Apps' directory of the MorphOS installation. For me
+ this would create following directory hierarchy:
+
+ MorphOS:Apps/Vim/Vim62/...
+
+3) Add the following lines to your s:shell-startup (Important!).
+
+ ;Begin VIM
+ Set VIM=MorphOS:Apps/Vim/Vim62
+ Assign HOME: ""
+ ;End VIM
+
+4) Copy the '.vimrc' file to s:
+
+5) There is also a file named 'color-sequence' included in this archive. This
+ will set the MorphOS Shell to show ANSI colors. Please copy the file to s:
+ and change the s:shell-startup to:
+
+ ;Begin VIM
+ Set VIM=MorphOS:Apps/Vim/Vim62
+ Assign HOME: ""
+ Execute S:Color-Sequence
+ Cls
+ ;End VIM
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_beos.txt b/runtime/doc/os_beos.txt
new file mode 100644
index 000000000..d58966f49
--- /dev/null
+++ b/runtime/doc/os_beos.txt
@@ -0,0 +1,348 @@
+*os_beos.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *BeOS* *BeBox*
+This is a port of Vim 5.1 to the BeOS Preview Release 2 (also known as PR2)
+or later.
+
+This file contains the particularities for the BeBox/BeOS version of Vim. For
+matters not discussed in this file, Vim behaves very much like the Unix
+|os_unix.txt| version.
+
+ 1. General |beos-general|
+ 2. Compiling Vim |beos-compiling|
+ 3. Timeout in the Terminal |beos-timeout|
+ 4. Unicode vs. Latin1 |beos-unicode|
+ 5. The BeOS GUI |beos-gui|
+ 6. The $VIM directory |beos-vimdir|
+ 7. Drag & Drop |beos-dragndrop|
+ 8. Single Launch vs. Multiple
+ Launch |beos-launch|
+ 9. Fonts |beos-fonts|
+10. The meta key modifier |beos-meta|
+11. Mouse key mappings |beos-mouse|
+12. Color names |beos-colors|
+13. Compiling with Perl |beos-perl|
+
+
+1. General *beos-general*
+
+The default syntax highlighting mostly works with different foreground colors
+to highlight items. This works best if you set your Terminal window to a
+darkish background and light letters. Some middle-grey background (for
+instance (r,g,b)=(168,168,168)) with black letters also works nicely. If you
+use the default light background and dark letters, it may look better to
+simply reverse the notion of foreground and background color settings. To do
+this, add this to your .vimrc file (where <Esc> may need to be replaced with
+the escape character): >
+
+ :if &term == "beos-ansi"
+ : set t_AB=<Esc>[3%dm
+ : set t_AF=<Esc>[4%dm
+ :endif
+
+
+2. Compiling Vim *beos-compiling*
+
+From the Advanced Access Preview Release (AAPR) on, Vim can be configured with
+the standard configure script. To get the compiler and its flags right, use
+the following command-line in the shell (you can cut and paste it in one go):
+
+CC=$BE_C_COMPILER CFLAGS="$BE_DEFAULT_C_FLAGS -O7" \
+ ./configure --prefix=/boot/home/config
+
+$BE_C_COMPILER is usually "mwcc", $BE_DEFAULT_C_FLAGS is usually "-I- -I."
+
+When configure has run, and you wish to enable GUI support, you must edit the
+config.mk file so that the lines with GUI_xxx refer to $(BEOSGUI_xxx) instead
+of $(NONE_xxx).
+Alternatively you can make this change in the Makefile; it will have a
+more permanent effect. Search for "NONE_".
+
+After compilation you need to add the resources to the binary. Add the
+following few lines near the end (before the line with "exit $exit_value") of
+the link.sh script to do this automatically.
+
+ rmattr BEOS:TYPE vim
+ copyres os_beos.rsrc vim
+ mimeset vim
+
+Also, create a dummy file "strip":
+
+ #!/bin/sh
+ mimeset $1
+ exit 0
+
+You will need it when using "make install" to install Vim.
+
+Now type "make" to compile Vim, then "make install" to install it.
+
+If you want to install Vim by hand, you must copy Vim to $HOME/config/bin, and
+create a bunch of symlinks to it ({g,r,rg}{vim,ex,view}). Furthermore you must
+copy Vims configuration files to $HOME/config/share/vim:
+vim-5.0s/{*.vim,doc,syntax}. For completeness, you should also copy the nroff
+manual pages to $HOME/config/man/man1. Don't forget ctags/ctags and xxd/xxd!
+
+Obviously, you need the unlimited linker to actually link Vim. See
+http://www.metrowerks.com for purchasing the CodeWarrior compiler for BeOS.
+There are currently no other linkers that can do the job.
+
+This won't be able to include the Perl or Python interfaces even if
+you have the appropriate files installed. |beos-perl|
+
+
+3. Timeout in the Terminal *beos-timeout*
+
+Because some POSIX/UNIX features are still missing[1], there is no direct OS
+support for read-with-timeout in the Terminal. This would meat that you cannot
+use :mappings of more than one character, unless you also :set notimeout.
+|'timeout'|
+
+To circumvent this problem, I added a workaround to provide the necessary
+input with timeout by using an extra thread which reads ahead one character.
+As a side effect, it also makes Vim recognize when the Terminal window
+resizes.
+
+Function keys are not supported in the Terminal since they produce very
+indistinctive character sequences.
+
+These problems do not exist in the GUI.
+
+[1]: there is no select() on file descriptors; also the termios VMIN and VTIME
+settings do not seem to work properly. This has been the case since DR7 at
+least and still has not been fixed as of PR2.
+
+ *beos-unicode*
+4. Unicode vs. Latin1 *beos-utf8*
+
+BeOS uses Unicode and UTF-8 for text strings (16-bit characters encoded to
+8-bit characters). Vim assumes ISO-Latin1 or other 8-bit character codes.
+This does not produce the desired results for non-ASCII characters. Try the
+command :digraphs to see. If they look messed up, use :set isprint=@ to
+(slightly) improve the display of ISO-Latin1 characters 128-255. This works
+better in the GUI, depending on which font you use (below).
+
+You may also use the /boot/bin/xtou command to convert UTF-8 files from (xtou
+-f iso1 filename) or to (xtou -t iso1 filename) ISO-Latin1 characters.
+
+
+5. The BeOS GUI *beos-gui*
+
+Normally Vim starts with the GUI if you start it as gvim or vim -g. The BeOS
+version tries to determine if it was started from the Tracker instead of the
+Terminal, and if so, use the GUI anyway. However, the current detection scheme
+is fooled if you use the command "vim - </dev/null" or "vim filename &". The
+latter can be called a feature but probably only works because there is no
+BSD-style job control.
+
+Stuff that does not work yet:
+
+- Running external commands from the GUI does not work 100% (again due to lack
+ of support for select()). There was a choice between seeing the command's
+ output, or being able to interrupt it. I chose for seeing the output. Even
+ now the command sometimes crashes mysteriously, apparently in Be's
+ malloc_internal() called from the putenv() function, after fork()ing. (data
+ access exception occurred, ec01b0ec: 90e80000 *stw r7, 0x0000 (r8))(:!ls
+ works usually, :r !ls usually doesn't). This has been reported as bug
+ # 971215-083826.
+- The window title.
+- Starting the GUI from the Terminal version with :gui always acts as if
+ :gui -f were used. There is no way to fix this that I can see.
+- There are some small display glitches here and there that I hope to clean up
+ later. Most of them occur when the window is partially obscured. Some of
+ them seem to be bugs in BeOS, because the Terminal has similar glitches.
+- Mouse up events are not generated when outside the window. This is a bug in
+ BeOS. You can notice this when selecting text and moving the cursor outside
+ the window, then letting go of the mouse button. Another way is when you
+ drag the scrollbar and do the same thing. Because Vim still thinks you are
+ still playing with the scrollbar it won't change it itself. I provided a
+ workaround which kicks in when the window is activated or deactivated (so it
+ works best with focus- follows-mouse (/boot/bin/ffm) turned on).
+- The cursor does not flash (very low priority; I'm not sure I even like it
+ when it flashes)
+
+
+The $VIM directory *beos-vimdir*
+
+$VIM is the symbolic name for the place where Vims support files are stored.
+The default value for $VIM is set at compile time and can be determined with >
+
+ :version
+
+The normal value is /boot/home/config/share/vim. If you don't like it you can
+set the VIM environment variable to override this, or set 'helpfile' in your
+.vimrc: >
+
+ :if version >= 500
+ : set helpfile=~/vim/vim54/doc/help.txt
+ : syntax on
+ :endif
+
+
+7. Drag & Drop *beos-dragndrop*
+
+You can drop files and directories on either the Vim icon (starts a new Vim
+session, unless you use the File Types application to set Vim to be "Single
+Launch") or on the Vim window (starts editing the files). Dropping a folder
+sets Vim's current working directory. |:cd| |:pwd| If you drop files or
+folders with either SHIFT key pressed, Vim changes directory to the folder
+that contains the first item dropped. When starting Vim, there is no need to
+press shift: Vim behaves as if you do.
+
+Files dropped set the current argument list. |argument-list|
+
+
+8. Single Launch vs. Multiple Launch *beos-launch*
+
+As distributed Vim's Application Flags (as seen in the FileTypes preference)
+are set to Multiple Launch. If you prefer, you can set them to Single Launch
+instead. Attempts to start a second copy of Vim will cause the first Vim to
+open the files instead. This works from the Tracker but also from the command
+line. In the latter case, non-file (option) arguments are not supported.
+
+NB: Only the GUI version has a BApplication (and hence Application Flags).
+This section does not apply to the GUI-less version, should you compile one.
+
+
+9. Fonts *beos-fonts*
+
+Set fonts with >
+
+ :set guifont=Courier10_BT/Roman/10
+
+where the first part is the font family, the second part the style, and the
+third part the size. You can use underscores instead of spaces in family and
+style.
+
+Best results are obtained with monospaced fonts (such as Courier). Vim
+attempts to use all fonts in B_FIXED_SPACING mode but apparently this does not
+work for proportional fonts (despite what the BeBook says).
+
+Vim also tries to use the B_ISO8859_1 encoding, also known as ISO Latin 1.
+This also does not work for all fonts. It does work for Courier, but not for
+ProFontISOLatin1/Regular (strangely enough). You can verify this by giving the >
+
+ :digraphs
+
+command, which lists a bunch of characters with their ISO Latin 1 encoding.
+If, for instance, there are "box" characters among them, or the last character
+isn't a dotted-y, then for this font the encoding does not work.
+
+If the font you specify is unavailable, you get the system fixed font.
+
+Standard fixed-width system fonts are:
+
+ ProFontISOLatin1/Regular
+ Courier10_BT/Roman
+ Courier10_BT/Italic
+ Courier10_BT/Bold
+ Courier10_BT/Bold_Italic
+
+Standard proportional system fonts are:
+
+ Swis721_BT/Roman
+ Swis721_BT/Italic
+ Swis721_BT/Bold
+ Swis721_BT/Bold_Italic
+ Dutch801_Rm_BT/Roman
+ Dutch801_Rm_BT/Italic
+ Dutch801_Rm_BT/Bold
+ Dutch801_Rm_BT/Bold_Italic
+ Baskerville/Roman
+ Baskerville/Italic
+ Baskerville/Bold
+ Baskerville/Bold_Italic
+ SymbolProp_BT/Regular
+
+Try some of them, just for fun.
+
+
+10. The meta key modifier *beos-meta*
+
+The META key modifier is obtained by the left or right OPTION keys. This is
+because the ALT (aka COMMAND) keys are not passed to applications.
+
+
+11. Mouse key mappings *beos-mouse*
+
+Vim calls the various mouse buttons LeftMouse, MiddleMouse and RightMouse. If
+you use the default Mouse preference settings these names indeed correspond to
+reality. Vim uses this mapping:
+
+ Button 1 -> LeftMouse,
+ Button 2 -> RightMouse,
+ Button 3 -> MiddleMouse.
+
+If your mouse has fewer than 3 buttons you can provide your own mapping from
+mouse clicks with modifier(s) to other mouse buttons. See the file
+vim-5.x/macros/swapmous.vim for an example. |gui-mouse-mapping|
+
+
+12. Color names *beos-colors*
+
+Vim has a number of color names built-in. Additional names are read from the
+file $VIMRUNTIME/rgb.txt, if present. This file is basically the color
+database from X. Names used from this file are cached for efficiency.
+
+
+13. Compiling with Perl *beos-perl*
+
+Compiling with Perl support enabled is slightly tricky. The Metrowerks
+compiler has some strange ideas where to search for include files. Since
+several include files with Perl have the same names as some Vim header
+files, the wrong ones get included. To fix this, run the following Perl
+script while in the vim-5.0/src directory: >
+
+ preproc.pl > perl.h
+
+ #!/bin/env perl
+ # Simple #include expander, just good enough for the Perl header files.
+
+ use strict;
+ use IO::File;
+ use Config;
+
+ sub doinclude
+ {
+ my $filename = $_[0];
+ my $fh = new IO::File($filename, "r");
+ if (defined $fh) {
+ print "/* Start of $filename */\n";
+
+ while (<$fh>) {
+ if (/^#include "(.*)"/) {
+ doinclude($1);
+ print "/* Back in $filename */\n";
+ } else {
+ print $_;
+ }
+ }
+ print "/* End of $filename */\n";
+
+ undef $fh;
+ } else {
+ print "/* Cannot open $filename */\n";
+ print "#include \"$filename\"\n";
+ }
+ }
+
+ chdir $Config{installarchlib}."/CORE";
+ doinclude "perl.h";
+
+It expands the "perl.h" header file, using only other Perl header files.
+
+Now you can configure & make Vim with the --enable-perlinterp option.
+Be warned though that this adds about 616 kilobytes to the size of Vim!
+Without Perl, Vim with default features and GUI is about 575K, with Perl
+it is about 1191K.
+
+-Olaf Seibert
+
+[Note: these addresses no longer work:]
+<rhialto@polder.ubc.kun.nl>
+http://polder.ubc.kun.nl/~rhialto/be
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_dos.txt b/runtime/doc/os_dos.txt
new file mode 100644
index 000000000..3c82f17fe
--- /dev/null
+++ b/runtime/doc/os_dos.txt
@@ -0,0 +1,295 @@
+*os_dos.txt* For Vim version 7.0aa. Last change: 2003 Dec 20
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *dos* *DOS*
+This file documents the common particularities of the MS-DOS and Win32
+versions of Vim. Also see |os_win32.txt| and |os_msdos.txt|.
+
+1. File locations |dos-locations|
+2. Using backslashes |dos-backslash|
+3. Standard mappings |dos-standard-mappings|
+4. Screen output and colors |dos-colors|
+5. File formats |dos-file-formats|
+6. :cd command |dos-:cd|
+7. Interrupting |dos-CTRL-Break|
+8. Temp files |dos-temp-files|
+9. Shell option default |dos-shell|
+
+==============================================================================
+1. File locations *dos-locations*
+
+If you keep the Vim executable in the directory that contains the help and
+syntax subdirectories, there is no need to do anything special for Vim to
+work. No registry entries or environment variables need to be set. Just make
+sure that the directory is in your search path, or use a shortcut on the
+desktop.
+
+Your vimrc files ("_vimrc" and "_gvimrc") are normally located one directory
+up from the runtime files. If you want to put them somewhere else, set the
+environment variable $VIM to the directory where you keep them. Example: >
+ set VIM=C:\user\piet
+Will find "c:\user\piet\_vimrc".
+Note: This would only be needed when the computer is used by several people.
+Otherwise it's simpler to keep your _vimrc file in the default place.
+
+If you move the executable to another location, you also need to set the $VIM
+environment variable. The runtime files will be found in "$VIM/vim{version}".
+Example: >
+ set VIM=E:\vim
+Will find the version 5.4 runtime files in "e:\vim\vim54".
+Note: This is _not_ recommended. The preferred way is to keep the executable
+in the runtime directory.
+
+If you move your executable AND want to put your "_vimrc" and "_gvimrc" files
+somewhere else, you must set $VIM to where you vimrc files are, and set
+$VIMRUNTIME to the runtime files. Example: >
+ set VIM=C:\usr\piet
+ set VIMRUNTIME=E:\vim\vim54
+Will find "c:\user\piet\_vimrc" and the runtime files in "e:\vim\vim54".
+
+See |$VIM| and |$VIMRUNTIME| for more information.
+
+Under Windows 95, you can set $VIM in your C:\autoexec.bat file. For
+example: >
+ set VIM=D:\vim
+Under Windows NT, you can set environment variables for each user separately
+under "Start/Settings/Control Panel->System", or through the properties in the
+menu of "My Computer", under the Environment Tab.
+
+==============================================================================
+2. Using backslashes *dos-backslash*
+
+Using backslashes in file names can be a problem. Vi halves the number of
+backslashes for some commands. Vim is a bit more tolerant and does not remove
+backslashes from a file name, so ":e c:\foo\bar" works as expected. But when
+a backslash occurs before a special character (space, comma, backslash, etc.),
+Vim removes the backslash. Use slashes to avoid problems: ":e c:/foo/bar"
+works fine. Vim replaces the slashes with backslashes internally to avoid
+problems with some MS-DOS programs and Win32 programs.
+
+When you prefer to use forward slashes, set the 'shellslash' option. Vim will
+then replace backslashes with forward slashes when expanding file names. This
+is especially useful when using a Unix-like 'shell'.
+
+==============================================================================
+3. Standard mappings *dos-standard-mappings*
+
+CTRL-PageUp cursor to first screen line *<C-PageUp>*
+CTRL-PageDown cursor to last screen line, last character *<C-PageDown>*
+
+These mappings accomplish this:
+
+key key code Normal/Visual mode Insert mode ~
+CTRL-PageUp <M-N><M-C-D> H <C-O>H
+CTRL-PageDown <M-N>v L$ <C-O>L<C-O>$
+
+Additionally, these keys are available for copy/cut/paste. In the Win32
+and DJGPP versions, they also use the clipboard.
+
+Shift-Insert paste text (from clipboard) *<S-Insert>*
+CTRL-Insert copy Visual text (to clipboard) *<C-Insert>*
+CTRL-Del cut Visual text (to clipboard) *<C-Del>*
+Shift-Del cut Visual text (to clipboard) *<S-Del>*
+
+These mappings accomplish this (Win32 and DJGPP versions of Vim):
+
+key key code Normal Visual Insert ~
+Shift-Insert <M-N><M-T> "*P "-d"*P <C-R><C-O>*
+CTRL-Insert <M-N><M-U> "*y
+Shift-Del <M-N><M-W> "*d
+CTRL-Del <M-N><M-X> "*d
+
+Or these mappings (non-Win32 version of Vim):
+
+key key code Normal Visual Insert ~
+Shift-Insert <M-N><M-T> P "-dP <C-R><C-O>"
+CTRL-Insert <M-N><M-U> y
+Shift-Del <M-N><M-W> d
+CTRL-Del <M-N><M-X> d
+
+When the clipboard is supported, the "* register is used.
+
+==============================================================================
+4. Screen output and colors *dos-colors*
+
+The default output method for the screen is to use bios calls. This works
+right away on most systems. You do not need ansi.sys. You can use ":mode" to
+set the current screen mode. See |:mode|.
+
+To change the screen colors that Vim uses, you can use the |:highlight|
+command. The Normal highlight group specifies the colors Vim uses for normal
+text. For example, to get grey text on a blue background: >
+ :hi Normal ctermbg=Blue ctermfg=grey
+See |highlight-groups| for other groups that are available.
+
+A DOS console does not support attributes like bold and underlining. You can
+set the color used in five modes with nine termcap options. Note that this is
+not necessary since you can set the color directly with the ":highlight"
+command; these options are for backward compatibility with older Vim versions.
+The |'highlight'| option specifies which of the five modes is used for which
+action. >
+
+ :set t_mr=^V^[\|xxm start of invert mode
+ :set t_md=^V^[\|xxm start of bold mode
+ :set t_me=^V^[\|xxm back to normal text
+
+ :set t_so=^V^[\|xxm start of standout mode
+ :set t_se=^V^[\|xxm back to normal text
+
+ :set t_us=^V^[\|xxm start of underline mode
+ :set t_ue=^V^[\|xxm back to normal text
+
+ :set t_ZH=^V^[\|xxm start of italics mode
+ :set t_ZR=^V^[\|xxm back to normal text
+
+^V is CTRL-V
+^[ is <Esc>
+You must replace xx with a decimal code, which is the foreground color number
+and background color number added together:
+
+COLOR FOREGROUND BACKGROUND ~
+Black 0 0
+DarkBlue 1 16
+DarkGreen 2 32
+DarkCyan 3 48
+DarkRed 4 64
+DarkMagenta 5 80
+Brown, DarkYellow 6 96
+LightGray 7 112
+DarkGray 8 128 *
+Blue, LightBlue 9 144 *
+Green, LightGreen 10 160 *
+Cyan, LightCyan 11 176 *
+Red, LightRed 12 192 *
+Magenta, LightMagenta 13 208 *
+Yellow, LightYellow 14 224 *
+White 15 240 *
+
+* Depending on the display mode, the color codes above 128 may not be
+ available, and code 128 will make the text blink.
+
+When you use 0, the color is reset to the one used when you started Vim
+(usually 7, lightgray on black, but you can override this. If you have
+overridden the default colors in a command prompt, you may need to adjust
+some of the highlight colors in your vimrc---see below).
+This is the default for t_me.
+
+The defaults for the various highlight modes are:
+ t_mr 112 reverse mode: Black text (0) on LightGray (112)
+ t_md 15 bold mode: White text (15) on Black (0)
+ t_me 0 normal mode (revert to default)
+
+ t_so 31 standout mode: White (15) text on DarkBlue (16)
+ t_se 0 standout mode end (revert to default)
+
+ t_czh 225 italic mode: DarkBlue text (1) on Yellow (224)
+ t_czr 0 italic mode end (revert to default)
+
+ t_us 67 underline mode: DarkCyan text (3) on DarkRed (64)
+ t_ue 0 underline mode end (revert to default)
+
+These colors were chosen because they also look good when using an inverted
+display, but you can change them to your liking.
+
+Example: >
+ :set t_mr=^V^[\|97m " start of invert mode: DarkBlue (1) on Brown (96)
+ :set t_md=^V^[\|67m " start of bold mode: DarkCyan (3) on DarkRed (64)
+ :set t_me=^V^[\|112m " back to normal mode: Black (0) on LightGray (112)
+
+ :set t_so=^V^[\|37m " start of standout mode: DarkMagenta (5) on DarkGreen
+ (32)
+ :set t_se=^V^[\|112m " back to normal mode: Black (0) on LightGray (112)
+
+==============================================================================
+5. File formats *dos-file-formats*
+
+If the 'fileformat' option is set to "dos" (which is the default), Vim accepts
+a single <NL> or a <CR><NL> pair for end-of-line (<EOL>). When writing a
+file, Vim uses <CR><NL>. Thus, if you edit a file and write it, Vim replaces
+<NL> with <CR><NL>.
+
+If the 'fileformat' option is set to "unix", Vim uses a single <NL> for <EOL>
+and shows <CR> as ^M.
+
+You can use Vim to replace <NL> with <CR><NL> by reading in any mode and
+writing in Dos mode (":se ff=dos").
+You can use Vim to replace <CR><NL> with <NL> by reading in Dos mode and
+writing in Unix mode (":se ff=unix").
+
+Vim sets 'fileformat' automatically when 'fileformats' is not empty (which is
+the default), so you don't really have to worry about what you are doing.
+ |'fileformat'| |'fileformats'|
+
+If you want to edit a script file or a binary file, you should set the
+'binary' option before loading the file. Script files and binary files may
+contain single <NL> characters which Vim would replace with <CR><NL>. You can
+set 'binary' automatically by starting Vim with the "-b" (binary) option.
+
+==============================================================================
+6. :cd command *dos-:cd*
+
+The ":cd" command recognizes the drive specifier and changes the current
+drive. Use ":cd c:" to make drive C the active drive. Use ":cd d:\foo" to go
+to the directory "foo" in the root of drive D. Vim also recognizes UNC names
+if the system supports them; e.g., ":cd \\server\share\dir". |:cd|
+
+==============================================================================
+7. Interrupting *dos-CTRL-Break*
+
+Use CTRL-Break instead of CTRL-C to interrupt searches. Vim does not detect
+the CTRL-C until it tries to read a key.
+
+==============================================================================
+8. Temp files *dos-temp-files*
+
+Only for the 16 bit and 32 bit DOS version:
+Vim puts temporary files (for filtering) in the first of these directories
+that exists and in which Vim can create a file:
+ $TMP
+ $TEMP
+ C:\TMP
+ C:\TEMP
+ current directory
+
+For the Win32 version (both console and GUI):
+Vim uses standard Windows functions to obtain a temporary file name (for
+filtering). The first of these directories that exists and in which Vim can
+create a file is used:
+ $TMP
+ $TEMP
+ current directory
+
+==============================================================================
+9. Shell option default *dos-shell*
+
+The default for the 'sh' ('shell') option is "command.com" on Windows 95 and
+"cmd.exe" on Windows NT. If SHELL is defined, Vim uses SHELL instead, and if
+SHELL is not defined but COMSPEC is, Vim uses COMSPEC. Vim starts external
+commands with "<shell> /c <command_name>". Typing CTRL-Z starts a new command
+subshell. Return to Vim with "exit". |'shell'| |CTRL-Z|
+
+If you are running a third-party shell, you may need to set the
+|'shellcmdflag'| ('shcf') and |'shellquote'| ('shq') or |'shellxquote'|
+('sxq') options. Unfortunately, this also depends on the version of Vim used.
+For example, with the MKS Korn shell or with bash, the values of the options
+should be:
+
+ DOS 16 bit DOS 32 bit Win32 ~
+'shellcmdflag' -c -c -c
+'shellquote' "
+'shellxquote' "
+
+For Dos 16 bit this starts the shell as:
+ <shell> -c "command name" >file
+For Win32 as:
+ <shell> -c "command name >file"
+For DOS 32 bit, DJGPP does this internally somehow.
+
+When starting up, Vim checks for the presence of "sh" anywhere in the 'shell'
+option. If it is present, Vim sets the 'shellcmdflag' and 'shellquote' or
+'shellxquote' options will be set as described above.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_mac.txt b/runtime/doc/os_mac.txt
new file mode 100644
index 000000000..c2102bfc0
--- /dev/null
+++ b/runtime/doc/os_mac.txt
@@ -0,0 +1,98 @@
+*os_mac.txt* For Vim version 7.0aa. Last change: 2004 Apr 27
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar et al.
+
+
+ *mac* *Mac* *macintosh* *Macintosh*
+
+This file documents the particularities of the Macintosh version of Vim.
+
+NOTE: This file is a bit outdated. You might find more useful info here:
+ http://macvim.swdev.org/
+
+1. Filename Convention |mac-filename|
+2. .vimrc an .vim files |mac-vimfile|
+3. FAQ |mac-faq|
+4. Known Lack |mac-lack|
+5. Mac Bug Report |mac-bug|
+6. Compiling Vim |mac-compile|
+
+There was a Mac port for version 3.0 of Vim. Here are the first few lines
+from the old file:
+
+VIM Release Notes
+Initial Macintosh release, VIM version 3.0
+19 October 1994
+
+Eric Fischer
+<enf1@midway.uchicago.edu>, <eric@jcp.uchicago.edu>, <etaoin@uchicago.edu>
+5759 N. Guilford Ave
+Indianapolis IN 46220 USA
+
+==============================================================================
+1. Filename Convention *mac-filename*
+
+You can use either the unix or mac path separator or a mix of both. In order
+to determine if the specified filename is relative to the current folder or
+absolute (i.e. relative to the "Desktop"), the following algorithm is used:
+
+ If the path start by a "/", the path is absolute
+ If the path start by a ":", the path is relative
+ If the path doesn't start by neither a "/" nor ":",
+ and a ":" is found before a "/" then the path is absolute
+>
+ :e /HD/text
+ :e HD:text
+< Edit the file "text" of the disk "HD" >
+ :e :src:main.c
+ :e src/main.c
+< Edit the file "main.c" in the folder "src" in the current folder >
+ :e os_mac.c
+< Edit the file "os_mac.c" in the current folder.
+
+You can use the |$VIM| and |$VIMRUNTIME| variable. >
+
+ :so $VIMRUNTIME:syntax:syntax.vim
+
+==============================================================================
+2. .vimrc and .vim files *mac-vimfile*
+
+On the Mac files starting with a dot "." are discouraged, thus the rc files
+are named "vimrc" or "_vimrc" and "gvimrc" or "_gvimrc". These files can be in
+any format (mac, dos or unix). Vim can handle any file format when the
+|'nocompatible'| option is set, otherwise it will only handle mac format
+files.
+
+==============================================================================
+3. Mac FAQ *mac-faq*
+
+Q: I can't enter non-ASCII character in Apple Terminal.
+A: Under Window Settings, Emulation, make sure that "Escape non-ASCII
+ characters" is not checked.
+
+==============================================================================
+4. Mac Lack *mac-lack*
+
+-The filenames containing both ":" and "/" are sometimes misinterpreted.
+ (just re-execute the command)
+-Scrollbar are not scrolling live, and when only the arrow or scroll area,
+ a limit of 32 line or page is scrolled.
+-Syntax highlighting works on 68k Macs but is _really_ slow.
+
+==============================================================================
+5. Mac Bug Report *mac-bug*
+
+When reporting any Mac specific bug or feature change, please use the vim-mac
+maillist |vim-mac|. However, you need to be subscribed. An alternative is to
+send a message to the current MacVim maintainers:
+
+ mac@vim.org
+
+==============================================================================
+6. Compiling Vim *mac-compile*
+
+See the file "src/INSTALLmac.txt" that comes with the source files.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_mint.txt b/runtime/doc/os_mint.txt
new file mode 100644
index 000000000..979776e20
--- /dev/null
+++ b/runtime/doc/os_mint.txt
@@ -0,0 +1,39 @@
+*os_mint.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Jens M. Felderhoff
+
+
+ *MiNT* *Atari*
+This file contains the particularities for the Atari MiNT version of Vim.
+
+For compiling Vim on the Atari running MiNT see "INSTALL" and "Makefile"
+in the src directory.
+
+Vim for MiNT behaves almost exactly like the Unix version.
+The Unix behavior described in the documentation also refers to the
+MiNT version of Vim unless explicitly stated otherwise.
+
+For wildcard expansion of <~> (home directory) you need a shell that
+expands the tilde. The vanilla Bourne shell doesn't recognize it.
+With csh and ksh it should work OK.
+
+The MiNT version of vim needs the termcap file /etc/termcap with the
+terminal capabilities of your terminal. Builtin termcaps are
+supported for the vt52 terminal. Termcap entries for the TOSWIN window
+manager and the virtual console terminals have been appended to the
+termcap file that comes with the Vim distribution.
+
+If you should encounter problems with swapped <BS> and <Del> keys, see
+|:fixdel|.
+
+Because terminal updating under MiNT is often slow (e.g. serial line
+terminal), the 'showcmd' and 'ruler' options are default off.
+If you have a fast terminal, try setting them on. You might
+also want to set 'ttyfast'.
+
+Send bug reports to
+
+ Jens M. Felderhoff, e-mail: <jmf@infko.uni-koblenz.de>
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_msdos.txt b/runtime/doc/os_msdos.txt
new file mode 100644
index 000000000..01290e9ff
--- /dev/null
+++ b/runtime/doc/os_msdos.txt
@@ -0,0 +1,270 @@
+*os_msdos.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *msdos* *ms-dos* *MSDOS* *MS-DOS*
+This file contains the particularities for the MS-DOS version of Vim.
+
+1. Two versions for MS-DOS |msdos-versions|
+2. Known problems |msdos-problems|
+3. Long file names |msdos-longfname|
+4. Termcap codes |msdos-termcap|
+5. Shifted arrow keys |msdos-arrows|
+6. Filename extensions |msdos-fname-extensions|
+7. Memory usage and limitations |msdos-limitations|
+8. Symbolically linked files |msdos-linked-files|
+9. Copy/paste in a dos box |msdos-copy-paste|
+
+Additionally, there are a number of common Win32 and DOS items:
+File locations |dos-locations|
+Using backslashes |dos-backslash|
+Standard mappings |dos-standard-mappings|
+Screen output and colors |dos-colors|
+File formats |dos-file-formats|
+:cd command |dos-:cd|
+Interrupting |dos-CTRL-Break|
+Temp files |dos-temp-files|
+Shell option default |dos-shell|
+
+For compiling Vim see src/INSTALL.pc. *msdos-compiling*
+
+==============================================================================
+1. Two versions for MS-DOS *msdos-versions*
+
+There are two versions of Vim that can be used with MS-DOS machines:
+
+ *dos16*
+Dos16 version Can be used on any MS-DOS system, only uses up to 640 Kbyte of
+ memory. Also runs on OS/2, Windows 95, and NT. Excludes some
+ Vim-specific features (autocommands, syntax highlighting,
+ etc.). Recommended for use on pre-386 machines.
+ *dos32*
+Dos32 version Requires 386 processor and a |DPMI| driver, uses all
+ available memory. Supports long file names and the Windows
+ clipboard, but NOT on Windows NT. Recommended for MS-DOS,
+ Windows 3.1 and Windows 95.
+
+There are also two versions that run under Windows:
+Win32 version Requires Windows 95 or Windows NT, uses all available
+ memory, supports long file names, etc. Has some problems on
+ Windows 95. Recommended for Windows NT. See |os_win32.txt|
+Win32 GUI Requirements like the Win32 version, but runs in its own
+ window, instead of a console. Has scrollbars, menu, etc.
+ Recommended for Windows 95 and Windows NT. See |gui-w32|.
+
+It is recommended to use the Dos32 or Win32 version. Although the Dos16
+version is able to edit very big files, it quickly runs out of memory when
+making big changes. Disabling undo helps: ":set ul=-1". The screen updating
+of the Dos16 version is the fastest of the three on DOS or Windows 95; on
+Windows NT, the Win32 version is just as fast.
+
+ *DPMI*
+For the Dos32 version, you may need a DPMI driver when running in MS-DOS. If
+you are running Windows or installed a clever memory manager, it will probably
+work already. If you get the message "No DPMI", you need to install a DPMI
+driver. Such a driver is included with the executable in CSDPMI4B.ZIP. Run
+"cwsdpmi" just before starting Vim each time. Or you might want to include
+"cwsdpmi -p" in your autoexec.bat to make it resident. The latest version of
+"CSDPMI*.ZIP" can be obtained from: "ftp.neosoft.com:pub/users/s/sandmann".
+
+ *minimal-features*
+The 16 bit DOS version has been compiled with minimal features. Check the
+|+feature-list| which ones are included (marked with a "T").
+You can include more features by editing feature.h and recompiling.
+
+==============================================================================
+2. Known problems *msdos-problems*
+
+When using smartdrive (MS-DOS 6.x) with write-behind caching, it is possible
+that Vim will try to create a swap file on a read-only file system (e.g.
+write protected floppy). You will then be given the message >
+ A serious disk error has occurred .., Retry (r)?
+There is nothing you can do but unprotect the floppy or switch off the
+computer. Even CTRL-ALT-DEL will not get you out of this. This is really a
+problem of smartdrive, not Vim. Smartdrive works fine otherwise. If this
+bothers you, don't use the write-behind caching.
+
+Vim can't read swap files that have been opened already, unless the "share"
+command has been used. If you see stray warnings for existing swap files,
+include the "share" command in your config.sys or autoexec.bat (see your MSDOS
+documentation).
+
+The Dos16 version can only have about 10 files open (in a window or hidden) at
+one time. With more files you will get error messages when trying to read or
+write a file, and for filter commands. Or Vim runs out of memory, and random
+problems may result.
+
+The Dos32 version cannot have an unlimited number of files open at any one
+time. The limit depends on the setting of FILES in your CONFIG.SYS. This
+defaults to 15; if you need to edit a lot of files, you should increase this.
+If you do not set FILES high enough, you can get strange errors, and shell
+commands may cause a crash!
+
+The Dos32 version can work with long file names. When doing file name
+completion, matches for the short file name will also be found. But this will
+result in the corresponding long file name. For example, if you have the long
+file name "this_is_a_test" with the short file name "this_i~1", the command
+":e *1" will start editing "this_is_a_test".
+
+When using the Dos32 version and you run into problems with DPMI support,
+check if there is a program in your config.sys that eats resources. One
+program known to cause this problem is "netx", which says "NetWare v. 3.26
+Workstation shell". Replace it with version 3.32 to fix the problem.
+
+The Dos32 version will parse its arguments to handle quotation. This is good
+to edit a file with spaces in its name, for example: >
+ vim "program files\accessories\ppp.scp"
+A side effect is that single quotes are removed. Insert a backslash to avoid
+that. For example, to edit the file "fi'le.txt": >
+ vim fi\'le.txt
+
+==============================================================================
+3. Long file names *msdos-longfname*
+
+If the Dos32 version is run on Windows 95, it can use long file names. It
+will work by default. If you want to disable this, use this setting:
+ set LFN=N
+You can put this in your autoexec.bat file.
+
+Note: If you have installed DJGPP on your machine, you probably have a
+"djgpp.env" file, which contains "LFN=n". You need to use "LFN=Y" to switch
+on using long file names then.
+
+==============================================================================
+4. Termcap codes *msdos-termcap*
+
+If you want to use another output method (e.g., when using a terminal on a COM
+port), set the terminal name to "pcansi". You can change the termcap options
+when needed (see |terminal-options|). Note that the
+normal IBM ansi.sys does not support all the codes of the builtin pcansi
+terminal. If you use ansi.sys, you will need to delete the termcap entries
+t_al and t_dl with >
+ :set t_al= t_dl=
+Otherwise, the screen will not be updated correctly. It is better to use
+nansi.sys, nnansi.sys, or the like instead of ansi.sys.
+
+If you want to use Vim on a terminal connected to a COM: port, reset the
+'bioskey' option. Otherwise the commands will be read from the PC keyboard.
+CTRL-C and CTRL-P may not work correctly with 'bioskey' reset.
+
+==============================================================================
+5. Shifted arrow keys *msdos-arrows*
+
+Use CTRL-arrow-left and CTRL-arrow-right instead of SHIFT-arrow-left and
+SHIFT-arrow-right. The arrow-up and arrow-down cannot be used with SHIFT or
+CTRL.
+
+==============================================================================
+6. Filename extensions *msdos-fname-extensions*
+
+MS-DOS allows for only one file name extension. Therefore, when appending an
+extension, the '.' in the original file name is replaced with a '_', the name
+is truncated to 8 characters, and the new extension (e.g., ".swp") is
+appended. Two examples: "test.c" becomes "test_c.bak", "thisisat.est"
+becomes "thisisat.bak". To reduce these problems, the default for
+'backupext' is "~" instead of ".bak". The backup file for "thisisat.est"
+then becomes "thisisat.es~". The 'shortname' option is not available,
+because it would always be set.
+
+==============================================================================
+7. Memory usage and limitations *msdos-limitations*
+
+A swap file is used to store most of the text. You should be able to edit
+very large files. However, memory is used for undo and other things. If you
+delete a lot of text, you can still run out of memory in the Dos16 version.
+
+If Vim gives an "Out of memory" warning, you should stop editing. The result
+of further editing actions is unpredictable. Setting 'undolevels' to 0 saves
+some memory. Running the maze macros on a big maze is guaranteed to run out
+of memory, because each change is remembered for undo. In this case set
+'undolevels' to a negative number. This will switch off undo completely.
+
+ *msdos-clipboard-limits*
+In the Dos32 version, extended memory is used to avoid these problems.
+However, if you are using the clipboard, you can still run into memory
+limitations because the Windows clipboard can only communicate with Vim using
+Dos memory. This means that the largest amount of text that can be sent to
+or received from the Windows clipboard is limited by how much free Dos memory
+is available on your system.
+
+You can usually maximize the amount of available Dos memory by adding the
+following lines to Dos's "config.sys" file: >
+
+ DOS=HIGH,UMB
+ DEVICE=C:\WINDOWS\himem.sys
+ DEVICE=C:\WINDOWS\emm386.exe RAM
+
+Modifying config.sys in this way will also help to make more memory available
+for the Dos16 version, if you are using that.
+
+In the Dos16 version the line length is limited to about 32000 characters.
+When reading a file the lines are automatically split. But editing a line
+in such a way that it becomes too long may give unexpected results.
+
+==============================================================================
+8. Symbolically linked files *msdos-linked-files*
+
+When using Vim to edit a symbolically linked file on a unix NFS file server,
+you may run into problems.
+When writing the file, Vim does not "write through" the symlink. Instead, it
+deletes the symbolic link and creates a new file in its place.
+ On Unix, Vim is prepared for links (symbolic or hard). A backup copy of
+the original file is made and then the original file is overwritten. This
+assures that all properties of the file remain the same. On non-Unix systems,
+the original file is renamed and a new file is written. Only the protection
+bits are set like the original file. However, this doesn't work properly when
+working on an NFS-mounted file system where links and other things exist. The
+only way to fix this in the current version is not making a backup file, by
+":set nobackup nowritebackup" |'writebackup'|
+
+==============================================================================
+9. Copy/paste in a dos box *msdos-copy-paste*
+
+ *E450* *E451* *E452* *E453* *E454*
+The 32 bit version can copy/paste from/to the Windows clipboard directly. Use
+the "* register. Large amounts of text can be copied this way, but it must be
+possible to allocate memory for it, see |msdos-clipboard-limits|. When moving
+text from one Vim to another, the type of the selection
+(characterwise/linewise/blockwise) is passed on.
+
+In other versions, the following can be used.
+
+(posted to comp.editors by John Velman <velman@igate1.hac.com>)
+
+How to copy/paste text from/to vim in a dos box:
+
+1) to get VIM to run in a window, instead of full screen, press alt+enter.
+ This toggles back and forth between full screen and a dos window.
+ NOTE: In Windows 95 you must have the property "Fast Pasting" unchecked!
+ In the properties dialog box for the MS-DOS window, go to "MS-DOS
+ Prompt/Misc/Fast pasting" and make sure that it is NOT checked.
+ To make this permanent, change the properties for
+ "\windows\system\conagent.exe" (from Philip Nelson, unverified).
+
+2) To paste something _into_ Vim, put Vim in insert mode.
+
+3) put the text you want to paste on the windows clipboard.
+
+4) Click the control box in the upper left of the Vim window. (This looks
+ like a big minus sign). If you don't want to use the mouse, you can get
+ this with alt+spacebar.
+5) on the resulting dropdown menu choose "Edit"
+6) on the child dropdown menu choose "Paste"
+
+To copy something from the Vim window to the clipboard,
+
+1) select the control box to get the control drop down menu.
+2) select "Edit".
+3) select "Mark"
+4) using either the keys or the mouse, select the part of the Vim window that
+ you want to copy. To use the keys, use the arrow keys, and hold down shift
+ to extend the selection.
+5) when you've completed your selection, press 'enter.' The selection
+ is now in the windows clipboard. By the way, this can be any
+ rectangular selection, for example columns 4-25 in rows 7-10. It can
+ include anything in the VIM window: the output of a :!dir, for
+ example.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_os2.txt b/runtime/doc/os_os2.txt
new file mode 100644
index 000000000..3a4dd476f
--- /dev/null
+++ b/runtime/doc/os_os2.txt
@@ -0,0 +1,220 @@
+*os_os2.txt* For Vim version 7.0aa. Last change: 2004 Jan 09
+
+
+ VIM REFERENCE MANUAL by Paul Slootman
+
+
+ *os2* *OS2* *OS/2*
+This file contains the particularities for the OS/2 version of Vim.
+
+At present there is no native PM version of the GUI version of Vim: The OS/2
+version is a console application. However, there is now a Win32s-compatible
+GUI version, which should be usable by owners of Warp 4 (which supports
+Win32s) in a Win-OS/2 session. The notes in this file refer to the native
+console version.
+
+
+NOTE
+
+This OS/2 port works well for me and a couple of other OS/2 users; however,
+since I haven't had much feedback, that either means no (OS/2-specific) bugs
+exist (besides the ones mentioned below), or no one has yet created a
+situation in which any bugs are apparent. File I/O in Dos and Unix mode,
+binary mode, and FAT handling all seem to work well, which would seem to be
+the most likely places for trouble.
+
+A known problem is that files opened by Vim are inherited by other programs
+that are started via a shell escape from within Vim. This specifically means
+that Vim won't be able to remove the swap file(s) associated with buffers open
+at the time the other program was started, until the other program is stopped.
+At that time, the swap file may be removed, but if Vim could not do that the
+first time, it won't be removed at all. You'll get warnings that some other
+Vim session may be editing the file when you start Vim up again on that file.
+This can be reproduced with ":!start epm". Now quit Vim, and start Vim again
+with the file that was in the buffer at the time epm was started. I'm working
+on this!
+
+A second problem is that Vim doesn't understand the situation when using it
+when accessing the OS/2 system via the network, e.g. using telnet from a Unix
+system, and then starting Vim. The problem seems to be that OS/2 =sometimes=
+recognizes function / cursor keys, and tries to convert those to the
+corresponding OS/2 codes generated by the "normal" PC keyboard. I've been
+testing a workaround (mapping the OS/2 codes to the correct functions), but so
+far I can't say anything conclusive (this is on Warp 3, by the way). In the
+meantime any help will be appreciated.
+
+
+PREREQUISITES
+
+To run Vim, you need the emx runtime environment (at least rev. 0.9b). This
+is generally available as (ask Archie about it):
+
+ emxrt.zip emx runtime package
+
+I've included a copy of emx.dll, which should be copied to one of the
+directories listed in your LIBPATH. Emx is GPL'ed, but the emx.dll library is
+not (read COPYING.EMX to find out what that means to you).
+
+This emx.dll is from the emxfix04.zip package, which unfortunately has a bug,
+eh, I mean a POSIX feature, in select(). Versions of Vim before 3.27 will
+appear to hang when starting (actually, while processing vimrc). Hit <Enter> a
+couple of times until Vim starts working if this happens. Next, get an up to
+date version of Vim!
+
+
+HELP AND VIMRC FILE
+
+If you unpack the archive that Vim came in and run Vim directly from where it
+was unpacked, Vim should be able to find the runtime files and your .vimrc
+without any settings.
+
+If you put the runtime files separately from the binary, the VIM environment
+variable is used to find the location of the help files and the system .vimrc.
+Place an entry such as this in CONFIG.SYS: >
+
+ SET VIM=c:/local/lib/vim
+
+Put your .vimrc and your other Vim files in this directory. Copy the runtime
+directory to this directory. Each version of Vim has its own runtime
+directory. It will be called something like "c:/local/lib/vim/vim54". Thus
+you get a tree of Vim files like this:
+ c:/local/lib/vim/.vimrc
+ c:/local/lib/vim/vim54/filetype.vim
+ c:/local/lib/vim/vim54/doc/help.txt
+ etc.
+
+Note: .vimrc may also be called _vimrc to accommodate those who have chosen to
+install OS/2 on a FAT file system. Vim first tries to find .vimrc and if that
+fails, looks for _vimrc in the same place. The existence of a .vimrc or
+_vimrc file influences the 'compatible' options, which can have unexpected side
+effects. See |'compatible'|.
+
+If you're using network drives with OS/2, then you can install Vim on a
+network drive (including .vimrc; this is then called the "system" vimrc file),
+and then use a personal copy of .vimrc (the "user" vimrc file). This should be
+located in a directory indicated by the HOME environment variable.
+
+
+ENVIRONMENT VARIABLES IN FILE NAMES
+
+This HOME environment variable is also used when using ~ in file names, so
+":e ~/textfile" will edit the file "textfile" in the directory referred to by
+HOME. Additionally you can use other environment variables in file names, as
+as ":n $SRC/*.c".
+
+The HOME environment variable is also used to locate the .viminfo file
+(see |viminfo-file|). There is no support yet for .viminfo on FAT file
+systems yet, sorry. You could try the -i startup flag (as in "vim -i
+$HOME/_viminfo") however.
+
+If the HOME environment variable is not set, the value "C:/" is used as a
+default.
+
+
+BACKSLASHES
+
+Using slashes ('/') and backslashes ('\') can be a bit of a problem (see
+|dos-backslash| for more explanation), but in almost all cases Vim does "The
+Right Thing". Vim itself uses backslashes in file names, but will happily
+accept forward slashes if they are entered (in fact, sometimes that works
+better!).
+
+
+TEMP FILES
+
+Temporary files (for filtering) are put in the first directory in the next
+list that exists and where a file can be created:
+ $TMP
+ $TEMP
+ C:\TMP
+ C:\TEMP
+ current directory
+
+
+TERMINAL SETTING
+
+ *os2ansi*
+Use "os2ansi" as the TERM environment variable (or don't set it at all, as the
+default is the correct value). You can set term to os2ansi in the .vimrc, in
+case you need TERM to be a different value for other applications. The
+problem is that OS/2 ANSI emulation is quite limited (it doesn't have insert /
+delete line, for example).
+
+If you want to use a different value for TERM (because of other programs, for
+example), make sure that the termcap entry for that TERM value has the
+appropriate key mappings. The termcap.dat distributed with emx does not always
+have them. Here are some suitable values to add to the termcap entry of your
+choice; these allow the cursor keys and the named function keys (such as
+pagedown) to work.
+
+ :ku=\316H:kd=\316P:kl=\316K:kr=\316M:%i=\316t:#4=\316s:\
+ :kD=\316S:kI=\316R:kN=\316Q:kP=\316I:kh=\316G:@7=\316O:\
+ :k1=\316;:k2=\316<:k3=\316=:k4=\316>:k5=\316?:k6=\316@:\
+ :k7=\316A:k8=\316B:k9=\316C:k;=\316D:
+
+
+Paul Slootman
+
+
+43 LINE WINDOW
+
+A suggestion from Steven Tryon, on how to run Vim in a bigger window:
+
+When I call Vim from an OS/2 WPS application such as PMMail it comes up
+in the default 25-line mode. To get a more useful window size I make
+my external editor "vimbig.cmd" which in turn calls "vimbig2.cmd".
+Brute force and awkwardness, perhaps, but it works.
+
+vimbig.cmd: >
+ @echo off
+ start "Vi Improved" /f vimbig2.cmd %1 %2 %3 %4
+
+vimbig2.cmd: >
+ @echo off
+ mode 80,43
+ vim.exe %1 %2 %3 %4
+ exit
+<
+
+CLIPBOARD ACCESS (provided by Alexander Wagner)
+
+Vim for OS/2 has no direct access to the system clipboard. To enable access
+anyway you need an additional tool which gives you access to the clipboard
+from within a vio application. The freeware package clipbrd.zip by Stefan
+Gruendel can be used for this purpose. You might download the package
+including precompiled binaries and all sources from:
+ http://www.stellarcom.org/vim/index.html
+
+Installation of this package is straight forward: just put the two executables
+that come with this package into a directory within your PATH for Vim should
+be able to call them from whatever directory you are working.
+
+To copy text from the clipboard to your Vim session you can use the :r
+command. Simply call clipbrd.exe from within Vim in the following way: >
+
+ :r !clipbrd -r
+
+To copy text from Vim to the system clipboard just mark the text in the usual
+vim-manner and call: >
+
+ :!clipbrd -w
+
+which will write your selection right into OS/2's clipboard.
+
+For ease of use you might want to add some maps for this commands. E.g. to
+use F11 to paste the clipboard into Vim and F12 to copy selected text to the
+clipboard you would use: >
+
+ if has("os2")
+ imap <F11> <ESC>:r !clipbrd -r<CR>i
+ vmap <F12> :!clipbrd -w<cr>
+ else
+ imap <F11> <ESC>"*p<CR>i
+ vmap <F12> "*y
+ endif
+
+This will ensure that only on OS/2 clipbrd is called whereas on other
+platforms vims build in mechanism is used. (To enable this functions on every
+load of Vim place the above lines in your .vimrc.)
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_qnx.txt b/runtime/doc/os_qnx.txt
new file mode 100644
index 000000000..c0d1a4b32
--- /dev/null
+++ b/runtime/doc/os_qnx.txt
@@ -0,0 +1,138 @@
+*os_qnx.txt* For Vim version 7.0aa. Last change: 2004 Apr 23
+
+
+ VIM REFERENCE MANUAL by Julian Kinraid
+
+
+ *QNX* *qnx*
+
+1. General |qnx-general|
+2. Compiling Vim |qnx-compiling|
+3. Terminal support |qnx-terminal|
+4. Photon GUI |photon-gui|
+5. Photon fonts |photon-fonts|
+6. Bugs & things To Do
+
+==============================================================================
+
+1. General *qnx-general*
+
+Vim on QNX behaves much like other unix versions. |os_unix.txt|
+
+
+2. Compiling Vim *qnx-compiling*
+
+Vim can be compiled using the standard configure/make approach. If you want to
+compile for X11, pass the --with-x option to configure. Otherwise, running
+./configure without any arguments or passing --enable-gui=photon, will compile
+vim with the Photon gui support. Run ./configure --help , to find out other
+features you can enable/disable.
+
+
+3. Terminal support *qnx-terminal*
+
+Vim has support for the mouse and clipboard in a pterm, if those options
+are compiled in, which they are normally.
+
+The options that affect mouse support are |'mouse'| and |'ttymouse'|. When
+using the mouse, only simple left and right mouse clicking/dragging is
+supported. If you hold down shift, ctrl, or alt while using the mouse, pterm
+will handle the mouse itself. It will make a selection, separate from what
+vim's doing.
+
+When the mouse is in use, you can press Alt-RightMouse to open the pterm menu.
+To turn the mouse off in vim, set the mouse option to nothing, set mouse=
+
+
+4. Photon GUI *photon-gui*
+
+To start the gui for vim, you need to run either gvim or vim -g, otherwise
+the terminal version will run. For more info - |gui-x11-start|
+
+Supported features:
+ :browse command |:browse|
+ :confirm command |:confirm|
+ Cursor blinking |'guicursor'|
+ Menus, popup menus and menu priorities |:menu|
+ |popup-menu|
+ |menu-priority|
+ Toolbar |gui-toolbar|
+ |'toolbar'|
+ Font selector (:set guifont=*) |photon-fonts|
+ Mouse focus |'mousefocus'|
+ Mouse hide |'mousehide'|
+ Mouse cursor shapes |'mouseshape'|
+ Clipboard |gui-clipboard|
+
+Unfinished features:
+ Various international support, such as Farsi & Hebrew support,
+ different encodings, etc.
+
+ This help file
+
+Unsupported features:
+ Find & Replace window |:promptfind|
+ Tearoff menus
+
+ Other things which I can't think of so I can't list them
+
+
+5. Fonts *photon-fonts*
+
+You set fonts in the gui with the guifont option >
+ :set guifont=Lucida\ Terminal
+<
+The font must be a monospace font, and any spaces in the font name must be
+escaped with a '\'. The default font used is PC Terminal, size 8. Using
+'*' as the font name will open a standard Photon font selector where you can
+select a font.
+
+Following the name, you can include optional settings to control the size and
+style of the font, each setting separated by a ':'. Not all fonts support the
+various styles.
+
+The options are,
+ s{size} Set the size of the font to {size}
+ b Bold style
+ a Use antialiasing
+ i Italic style
+
+Examples:
+
+Set the font to monospace size 10 with antialiasing >
+ :set guifont=monospace:s10:a
+<
+Set the font to Courier size 12, with bold and italics >
+ :set guifont=Courier:s12:b:i
+<
+Select a font with the requester >
+ :set guifont=*
+<
+
+
+6. Bugs & things To Do
+
+Known problems:
+ - Vim hangs sometimes when running an external program. Workaround:
+ put this line in your |vimrc| file: >
+ set noguipty
+
+Bugs:
+ - Still a slight problem with menu highlighting
+ - When using phditto/phinows/etc., if you are using a font that
+ doesn't support the bold attribute, when vim attempts to draw
+ bold text it will be all messed up.
+ - The cursor can sometimes be hard to see.
+ - A number of minor problems that can fixed :)
+
+Todo:
+ - Improve multi-language support.
+ - Options for setting the fonts used in the menu and toolbar.
+ - Find & Replace dialog.
+ - The clientserver features.
+ - Maybe tearoff menus.
+
+ - Replace usage of fork() with spawn() when launching external
+ programs.
+
+ vim:tw=78:sw=4:ts=8:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_risc.txt b/runtime/doc/os_risc.txt
new file mode 100644
index 000000000..04f9ba551
--- /dev/null
+++ b/runtime/doc/os_risc.txt
@@ -0,0 +1,323 @@
+*os_risc.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ 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 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 (ie 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> (ie 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 (eg &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 (eg these help files)
+- Get the `extra' archive (contains the RISC OS specific bits)
+- 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 --git a/runtime/doc/os_unix.txt b/runtime/doc/os_unix.txt
new file mode 100644
index 000000000..903a574ab
--- /dev/null
+++ b/runtime/doc/os_unix.txt
@@ -0,0 +1,60 @@
+*os_unix.txt* For Vim version 7.0aa. Last change: 2003 Mar 15
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *unix* *Unix*
+This file contains the particularities for the Unix version of Vim.
+
+For compiling Vim on Unix see "INSTALL" and "Makefile" in the src directory.
+
+The default help file name is "/usr/local/lib/vim/help.txt"
+The files "$HOME/.vimrc" and "$HOME/.exrc" are used instead of "s:.vimrc" and
+"s:.exrc". Additionally "/usr/local/etc/vimrc" is used first.
+If "/usr/local/share" exists it is used instead of "/usr/local/lib".
+
+Temporary files (for filtering) are put in "/tmp". If you want to place them
+somewhere else, set the environment variable $TMPDIR to the directory you
+prefer.
+
+With wildcard expansion you can use '~' (home directory) and '$'
+(environment variable).
+
+ *fork* *spoon*
+For executing external commands fork()/exec() is used when possible, otherwise
+system() is used, which is a bit slower. The output of ":version" includes
+|+fork| when fork()/exec() is used, |+system()| when system() is used. This
+can be changed at compile time.
+(For forking of the GUI version see |gui-fork|).
+
+Because terminal updating under Unix is often slow (e.g. serial line
+terminal, shell window in suntools), the 'showcmd' and 'ruler' options
+are default off. If you have a fast terminal, try setting them on. You might
+also want to set 'ttyfast'.
+
+When using Vim in an xterm the mouse clicks can be used by Vim by setting
+'mouse' to "a". If there is access to an X-server gui style copy/paste will
+be used and visual feedback will be provided while dragging with the mouse.
+If you then still want the xterm copy/paste with the mouse, press the shift
+key when using the mouse. See |mouse-using|. Visual feedback while dragging
+can also be achieved via the 'ttymouse' option if your xterm is new enough.
+
+ *terminal-colors*
+To use colors in Vim you can use the following example (if your terminal
+supports colors, but "T_Co" is empty or zero): >
+ :set t_me=^[[0;1;36m " normal mode (undoes t_mr and t_md)
+ :set t_mr=^[[0;1;33;44m " reverse (invert) mode
+ :set t_md=^[[1;33;41m " bold mode
+ :set t_se=^[[1;36;40m " standout end
+ :set t_so=^[[1;32;45m " standout mode
+ :set t_ue=^[[0;1;36m " underline end
+ :set t_us=^[[1;32m " underline mode start
+[the ^[ is an <Esc>, type CTRL-V <Esc> to enter it]
+
+For real color terminals the ":highlight" command can be used.
+
+The file "tools/Vim132" is a shell script that can be used to put Vim in 132
+column mode on a vt100 and lookalikes.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
new file mode 100644
index 000000000..834b35b16
--- /dev/null
+++ b/runtime/doc/os_vms.txt
@@ -0,0 +1,779 @@
+*os_vms.txt* For Vim version 7.0aa. Last change: 2004 May 16
+
+
+ VIM REFERENCE MANUAL
+
+
+ *VMS* *vms*
+This file contains the particularities for the VMS version of Vim.
+You can reach this information file by typing :help VMS in Vim command
+prompt.
+
+ 1. Getting started |vms-started|
+ 2. Download files |vms-download|
+ 3. Compiling |vms-compiling|
+ 4. Problems |vms-problems|
+ 5. Deploy |vms-deploy|
+ 6. Practical usage |vms-usage|
+ 7. GUI mode questions |vms-gui|
+ 8. Useful notes |vms-notes|
+ 9. VMS related changes |vms-changes|
+10. Authors |vms-authors|
+
+==============================================================================
+
+1. Getting started *vms-started*
+
+Vim (Vi IMproved) is a vi-compatible text editor that runs on nearly every
+operating system known to humanity. Now use Vim on OpenVMS too, in character
+or X/Motif environment. It is fully featured and absolutely compatible with
+Vim on other operating systems.
+
+==============================================================================
+
+2. Download files *vms-download*
+
+You can download the Vim source code by ftp from the official Vim site:
+ ftp://ftp.vim.org/pub/vim/
+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/
+
+To use the precompiled binary version, you need one of these archives:
+
+ vim-XX-exe-alpha-gui.zip Alpha GUI/Motif executables
+ vim-XX-exe-alpha-gtk.zip Alpha GUI/GTK executables
+ vim-XX-exe-alpha-term.zip Alpha console executables
+ vim-XX-exe-vax-gui.zip VAX GUI executables
+ vim-XX-exe-vax-term.zip VAX console executables
+
+and of course
+ vim-XX-runtime.zip runtime files
+
+The binary archives contain: vim.exe, ctags.exe, xxd.exe, mms_vim.exe files.
+
+==============================================================================
+
+3. Compiling *vms-compiling*
+
+See the file [.SRC]INSTALLVMS.TXT.
+
+==============================================================================
+
+4. Problems *vms-problems*
+
+The code has been tested under Open VMS 6.2 - 7.3 on Alpha and VAX platforms
+with the DECC compiler. It should work without bigger problems.
+If it happened that your system does not have some include libraries you can
+tune up in OS_VMS_CONF.H file.
+
+If you decided to build Vim with +perl, +python, etc. options, first you need
+to download OpenVMS distributions of Perl and Python. Build and deploy the
+libraries and change adequate lines in MAKE_VMS.MMS file. There should not be
+problem from Vim side.
+
+Note: Under VAX it should work with DEC C compiler without problem. VAXC
+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 part of the job. For detailed instruction read file INSTALLvms.txt
+
+MMS_VIM.EXE is building together with VIM.EXE, but for XD.EXE you should
+change to subdirectory and build it separately.
+
+CTAGS is not part of Vim source distribution any more, however the OpenVMS
+specific source might contain CTAGS source files as it is described above.
+You can find more information about CTAGS on VMS at
+http://www.polarhome.com/ctags/
+
+Advanced users may try some acrobatics in FEATURE.H file also.
+
+It is possible to compile with +xfontset +xim options too, but then you have
+to set up GUI fonts etc. correctly. See. :help xim from Vim command prompt.
+
+You may want to use GUI with GTK icons, then you have to download and install
+GTK for OpenVMS or at least runtime shareable images - LIBGTK from
+polarhome.com
+
+For more advanced questions, please send your problem to Vim on VMS mailing
+list <vim-vms@polarhome.com>
+More about the vim-vms list can be found at:
+http://www.polarhome.com/mailman/listinfo/vim-vms
+
+==============================================================================
+
+5. Deploy *vms-deploy*
+
+Vim uses a special directory structure to hold the document and runtime files:
+
+ vim (or wherever)
+ |- tmp
+ |- vim57
+ |----- doc
+ |----- syntax
+ |- vim60
+ |----- doc
+ |----- syntax
+ |- vim61
+ |----- doc
+ |----- syntax
+ vimrc (system rc files)
+ gvimrc
+
+Use: >
+
+ define/nolog VIM device:[path.vim]
+ define/nolog VIMRUNTIME device:[path.vim.vim60]
+ define/nolog TMP device:[path.tmp]
+
+to get vim.exe to find its document, filetype, and syntax files, and to
+specify a directory where temporary files will be located. Copy the "runtime"
+subdirectory of the vim distribution to vimruntime.
+
+Logicals $VIMRUNTIME and $TMP are optional.
+
+If $VIMRUNTIME is not set, Vim will guess and try to set up automatically.
+Read more about at :help runtime
+
+If $TMP is not set, you will not be able to use some functions as CTAGS,
+XXD, printing etc. that use temporary directory for normal operation.
+$TMP directory should be readable and writable by the user(s).
+The easiest way to set up $TMP is to define logical: >
+
+ define/nolog TMP SYS$SCRATCH
+or as: >
+ define/nolog TMP SYS$LOGIN
+
+==============================================================================
+
+6. Practical usage *vms-usage*
+
+Usually, you want to run just one version of Vim on your system, therefore
+it is enough to dedicate one directory for Vim.
+Copy all Vim runtime directory structure to the deployment position.
+Add the following lines to your LOGIN.COM (in SYS$LOGIN directory).
+Set up logical $VIM as: >
+
+ $ define VIM device:<path>
+
+Set up some symbols: >
+
+ $ ! vi starts Vim in chr. mode.
+ $ vi*m :== mcr VIM:VIM.EXE
+
+ $ !gvi starts Vim in GUI mode.
+ $ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g
+
+Please, check the notes for customization and configuration of symbols.
+
+You may want to create .vimrc and .gvimrc files in your home directory
+(SYS$LOGIN) to overwrite default settings.
+
+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 is enough just to have their
+own additions or resetting in home directory in files .vimrc and .gvimrc.
+It should work without problems.
+
+Note: Remember, system rc files (default for all users) does not have leading
+"." So, system rc files are: >
+
+ $VIM:vimrc
+ $VIM:gvimrc
+ $VIM:menu.vim
+
+and user's customized rc files are: >
+
+ sys$login:.vimrc
+ sys$login:.gvimrc
+
+You can check that everything is on the right place with the :version command.
+
+Example LOGIN.COM: >
+
+ $ define/nolog VIM RF10:[UTIL.VIM]
+ $ vi*m :== mcr VIM:VIM.EXE
+ $ 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
+DECNET environment, it will satisfy you 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: >
+
+ $ define VIM "PLUTO::RF10:[UTIL.VIM]"
+ $ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! if passwd required
+
+You can also use $VIMRUNTIME logical to point to proper version of Vim if you
+have installed more versions in the same time. If $VIMRUNTIME is not defined
+Vim will borrow value from $VIM logical. You can find more information about
+$VIMRUNTIME logical by typing :help runtime as a Vim command.
+
+System administrators might want to set up a system wide Vim installation,
+then add to the SYS$STARTUP:SYLOGICALS.COM >
+
+ $ define/nolog/sys VIM device:<path>
+ $ define/nolog/sys TMP SYS$SCRATCH
+
+and to the SYS$STARTUP:SYLOGIN.COM >
+
+ $ vi*m :== mcr VIM:VIM.EXE
+ $ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
+
+
+It will set up normal Vim work environment for every user on the system.
+
+==============================================================================
+
+7. GUI mode questions *vms-gui*
+
+OpenVMS in a real mainframe OS, therefore even if it has a GUI console, most of
+the users does not use a native X/Window environment during normal operation.
+It is not possible to start Vim in GUI mode "just like that". But anyhow it is
+not too complicate either.
+
+First of all: you will need an executable that is built with enabled GUI.
+
+Second: you need to have installed DECW/Motif on your VMS server, otherwise
+you will get errors that some shareable libraries are missing.
+
+Third: If you choose to run Vim with extra feature as GUI/GTK then you need
+GTK installation too or at least GTK runtime environment (LIBGTK etc.)
+
+1) If you are working on the VMS X/Motif console:
+ Start Vim with the command: >
+
+ $ mc device:<path>VIM.EXE -g
+<
+ or type :gui as a command to the Vim command prompt. For more info :help gui
+
+2) If you are working on other X/Window environment as Unix or some remote X
+ VMS console. Set up display to your host with: >
+
+ $ set disp/create/node=<your IP address>/trans=<transport-name>
+<
+ and start Vim as in point 1. You can find more help in VMS documentation or
+ type: help set disp in VMS prompt.
+ Examples: >
+
+ $ set disp/create/node=192.168.5.159 ! default trans is DECnet
+ $ set disp/create/node=192.168.5.159/trans=tcpip ! TCP/IP network
+ $ set disp/create/node=192.168.5.159/trans=local ! display on the same node
+
+Note: you should define just one of these.
+For more information type $help set disp in VMS prompt.
+
+3) Another elegant solution is XDM if you have installed on OpenVMS box.
+ It is possible to work from XDM client as from GUI console.
+
+4) If you are working on MS Windows or 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.
+ as well as excellent commercial products as eXcursion or ReflectionX with
+ buit 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
+features, it is worth to choose non GUI executables.
+
+==============================================================================
+
+8. Useful notes *vms-notes*
+
+8.1 backspace/delete
+8.2 Filters
+8.3 VMS file version numbers
+8.4 Directory conversion
+8.5 Remote host invocation
+8.6 Terminal problems
+8.7 Hex-editing and other external tools
+8.8 Sourcing vimrc and gvimrc
+8.9 Printing from Vim
+8.10 Setting up the symbols
+8.11 diff and other GNU programs
+8.12 diff-mode
+8.13 Allow '$' in C keywords
+8.14 VIMTUTOR for beginners
+
+8.1 backspace/delete
+
+There are backspace/delete key inconsistencies with VMS.
+:fixdel doesn't do the trick, but the solution is: >
+
+ :inoremap ^? ^H " for terminal mode
+ :inoremap <Del> ^H " for gui mode
+
+Read more in ch: 8.6 (Terminal problems).
+(Bruce Hunsaker <BNHunsaker@chq.byu.edu> Vim 5.3)
+
+
+8.2 Filters
+
+Vim supports filters; ie. if you have a sort program that can handle
+input/output redirection like Unix (<infile >outfile), you could use >
+
+ :map \s 0!'aqsort<CR>
+
+(Charles E. Campbell, Jr. <cec@gryphon.gsfc.nasa.gov> Vim 5.4)
+
+
+8.3 VMS file version numbers
+
+Vim is saving files into a new file with the next higher file version
+number, try these settings. >
+
+ :set nobackup " does not create *.*_ backup files
+ :set nowritebackup " does not have any purpose on VMS. It's default.
+
+Recovery is working perfect as well from the default swap file.
+Read more with :help swapfile
+
+(Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5, Zoltan Arpadffy
+Vim 5.6 )
+
+
+8.4 Directory conversion
+
+Vim will internally convert any unix-style paths and even mixed unix/VMS
+paths into VMS style paths. Some typical conversions resemble:
+
+ /abc/def/ghi -> abc:[def]ghi.
+ /abc/def/ghi.j -> abc:[def]ghi.j
+ /abc/def/ghi.j;2 -> abc:[def]ghi.j;2
+ /abc/def/ghi/jkl/mno -> abc:[def.ghi.jkl]mno.
+ abc:[def.ghi]jkl/mno -> abc:[def.ghi.jkl]mno.
+ ./ -> current directory
+ ../ -> relative parent directory
+ [.def.ghi] -> relative child directory
+ ./def/ghi -> relative child directory
+
+Note: You may use <,> brackets as well (device:<path>file.ext;version) as
+rf10:<user.zay.work>test.c;1
+
+(David Elins <delins@foliage.com>, Jerome Lauret
+<JLAURET@mail.chem.sunysb.edu> Vim 5.6 )
+
+
+8.5 Remote host invocation
+
+It is possible to use Vim as an internode editor.
+1. Edit some file from remote node: >
+
+ vi "<server>""username passwd""::<device>:<path><filename>;<version>"
+
+example: >
+ vi "pluto""zay passwd""::RF10:<USER.ZAY.WORK>TEST.C;1"
+
+Note: syntax is very important, otherwise VMS will recognize more parameters
+instead of one (resulting with: file not found)
+
+2. Set up Vim as your internode editor. If Vim is not installed on your host,
+just set up your IP address, full Vim path including the server name and run
+the command procedure below: >
+
+ $ if (p1 .eqs. "") .OR. (p2 .eqs. "") then goto usage
+ $ set disp/create/node=<your_IP_here>/trans=tcpip
+ $ define "VIM "<vim_server>""''p1' ''p2'""::<device>:<vim_path>"
+ $ vi*m :== "mcr VIM:VIM.EXE"
+ $ gv*im :== "spawn/nowait mcr VIM:VIM.EXE -g"
+ $ goto end
+ $ usage:
+ $ write sys$output " Please enter username and password as a parameter."
+ $ write sys$output " Example: @SETVIM.COM username passwd"
+ $ end:
+
+Note: Never use it in clustered environment (you do not need it), and load could
+be very-very slow, but even faster then a local Emacs. :-)
+
+(Zoltan Arpadffy, Vim 5.6)
+
+
+8.6 Terminal problems
+
+If your terminal name is not known to Vim and it is trying to find the default
+one you will get the following message during start-up:
+---
+Terminal entry not found in termcap
+'unknown-terminal' not known. Available built-in terminals are:
+ builtin_gui
+ builtin_riscos
+ builtin_amiga
+ builtin_beos-ansi
+ builtin_ansi
+ builtin_vt320
+ builtin_vt52
+ builtin_pcansi
+ builtin_win32
+ builtin_xterm
+ builtin_iris-ansi
+ builtin_debug
+ builtin_dumb
+defaulting to 'vt320'
+---
+The solution is to define 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,
+Ins, Del buttons etc. Except Backspace in GUI mode. To solve it, add to
+.gvimrc: >
+
+ inoremap <Del> <BS>
+
+Vim will also recognize that they are fast terminals.
+
+If you have some annoying line jumping on the screen between windows add to
+your .vimrc file: >
+
+ 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: >
+
+ set nottyfast " set terminal to slow mode
+
+(Zoltan Arpadffy, Vim 5.6)
+
+
+8.7 Hex-editing and other external tools
+
+A very important difference between OpenVMS and other systems is that VMS uses
+special commands to execute executables: >
+
+ RUN <path>filename
+ MCR <path>filename <parameters>
+
+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 following the Vim documentation (see: help
+xxd).
+
+Solution: Execute with the MC command and add the full path to the executable.
+Example: Instead of :%!xxd command use: >
+
+ :%!mc vim:xxd
+
+... or in general: >
+ :!mc <path>filename <parameters>
+
+Note: You can use XXD, and CTAGS from GUI menu.
+
+To customize ctags it is possible to define logical $CTAGS with standard
+parameters as: >
+
+ define/nolog CTAGS "--totals -o sys$login:tags"
+
+For additional information, please read :help tagsearch and CTAGS
+documentation at http://ctags.sourceforge.net/ctags.html.
+
+(Zoltan Arpadffy, Vim 5.6-70)
+
+
+8.8 Sourcing vimrc and gvimrc
+
+If you want to use your .vimrc and .gvimrc from other platforms (e.g. Windows)
+you can get in trouble if you ftp that file(s): VMS has different end-of-line
+indication.
+The symptom is that ViM is not sourcing your .vimrc/.gvimrc, even if you say:
+>
+ :so sys$login:.vimrc
+
+One trick is to compress (e.g. zip) the files on the other platform and
+uncompress it on VMS; if you have the same symptom, try to create the files
+with copy-paste (for this you need both op. systems reachable from one
+machine, e.g. an Xterm on Windows or telnet to Windows from VMS).
+
+(Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> Vim 6.0a)
+
+
+8.9 Printing from Vim
+
+To be able to print from Vim (running in GUI mode) under VMS you have to set
+up $TMP logical which should point to some temporary directory and logical
+SYS$PRINT to your default print queue.
+Example: >
+
+ $define SYS$PRINT HP5ANSI
+
+You can print out whole buffer or just the marked area.
+More info under :help hardcopy
+
+(Zoltan Arpadffy, Vim 6.0c)
+
+
+8.10 Setting up the symbols
+
+When I use GVIM this way and press CTRL-Y in the parent terminal, gvim exits.
+I now use a different symbol that seems to work OK and fixes the problem.
+I suggest this instead: >
+
+ $ GV*IM:==SPAWN/NOWAIT/INPUT=NLA0: MCR VIM:VIM.EXE -G -GEOMETRY 80X40
+
+The /INPUT=NLA0: separates the standard input of the gvim process from the
+parent terminal, to block signals from the parent window.
+Without the -GEOMETRY, the GVIM window size will be minimal and the menu
+will be confused after a window-resize.
+
+(Carlo Mekenkamp, Coen Engelbarts, Vim 6.0ac)
+
+
+8.11 diff and other GNU programs
+
+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 an Unix like diff
+and Vim will work perfect 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)
+
+
+8.12 diff-mode
+
+Vim 6.0 and higher supports vim diff-mode (See |new-diff-mode|, |diff-mode|
+and |08.7|). This uses the external program 'diff' and expects a Unix-like
+output format from diff. The standard VMS diff has a different output
+format. To use vim on VMS in diff-mode, you need to:
+ 1 Install a Unix-like diff program, e.g. GNU diff
+ 2 Tell vim to use the Unix-like diff for diff-mode.
+
+You can download GNU diff from the VIM-VMS website, it is one of the GNU
+tools in http://www.polarhome.com/vim/files/gnu_tools.zip. I suggest to
+unpack it in a separate directory "GNU" and create a logical GNU: that
+points to that directory. e.g: >
+
+ DEFINE GNU <DISK>:[<DIRECTORY>.BIN.GNU]
+
+You may also want to define a symbol GDIFF, to use the GNU diff from the DCL
+prompt: >
+
+ GDIFF :== $GNU:DIFF.EXE
+
+Now you need to tell vim to use the new diff program. Take the example
+settings from |diff-diffexpr| and change the call to the external diff
+program to the new diff on VMS. Add this to your .vimrc file: >
+
+ " Set up vimdiff options
+ if v:version >= 600
+ " Use GNU diff on VMS
+ set diffexpr=MyDiff()
+ function MyDiff()
+ let opt = ""
+ if &diffopt =~ "icase"
+ let opt = opt . "-i "
+ endif
+ if &diffopt =~ "iwhite"
+ let opt = opt . "-b "
+ endif
+ silent execute "!mc GNU:diff.exe -a " . opt . v:fname_in . " " . v:fname_new .
+ \ " > " . v:fname_out
+ endfunction
+ endif
+
+You can now use vim in diff-mode, e.g. to compare two files in read-only
+mode: >
+
+ $ VIM -D/R <FILE1> <FILE2>
+
+You can also define new symbols for vimdiff, e.g.: >
+
+ $ VIMDIFF :== 'VIM' -D/R
+ $ GVIMDIFF :== 'GVIM' -D/R
+
+You can now compare files in 4 ways: >
+
+ 1. VMS diff: $ DIFF <FILE1> <FILE2>
+ 2. GNU diff: $ GDIFF <FILE1> <FILE2>
+ 3. VIM diff: $ VIMDIFF <FILE1> <FILE2>
+ 4. GVIM diff: $ GVIMDIFF <FILE1> <FILE2>
+
+( Coen Engelbarts, Vim 6.1)
+
+
+8.13 Allow '$' in C keywords
+
+DEC C uses many identifiers with '$' in them. This is not allowed in ANSI C,
+and vim recognises the '$' as the end of the identifier. You can change this
+with the |iskeyword|command.
+Add this command to your .vimrc file: >
+
+ autocmd FileType c,cpp,cs set iskeyword+=$
+
+You can also create the file(s) $VIM/FTPLUGIN/C.VIM (and/or CPP.VIM and
+CS.VIM) and add this command: >
+
+ set iskeyword+=$
+
+Now word-based commands, e.g. the '*'-search-command and the CTRL-]
+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)
+
+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: >
+
+ @vim:vimtutor
+
+(Thomas.R.Wyant III, Vim 6.1)
+
+==============================================================================
+
+9. VMS related changes *vms-changes*
+
+Version 6.3 (2004 May 10)
+- Improved vms_read function
+- CTAGS v5.5.4 included
+- Documentation corrected and updated
+
+Version 6.2 (2003 May 7)
+- Corrected VMS system call results
+- Low level character input is rewritten
+- Correction in tag and quickfix handling
+- First GTK build
+- Make file changes
+ - GTK feature added
+ - Define for OLD_VMS
+ - OpenVMS version 6.2 or older
+- Documentation updated with GTK features
+- CTAGS v5.5 included
+- VMS VIM tutor created
+
+Version 6.1 (2002 Mar 25)
+- TCL init_tcl() problem fixed
+- CTAGS v5.4 included
+- GNU tools binaries for OpenVMS
+- Make file changes
+ - PERL, PYTHON and TCL support improved
+ - InstallVMS.txt has a detailed description HOWTO build
+- VMS/Unix file handling rewritten
+- Minor casting and bug fixes
+
+Version 6.0 (2001 Sep 28)
+- Unix and VMS code has been merged
+ - separated "really" VMS related code
+ - included all possible Unix functionality
+ - simplified or deleted the configuration files
+ - makefile MAKE_VMS.MMS reviewed
+- menu changes (fixed printing, CTAGS and XXD usage)
+- fixed variable RMS record format handling anomaly
+- corrected syntax, ftplugin etc files load
+- changed expand_wildcards and expandpath functions to work more general
+- created OS_VMS_FILTER.COM - DECC->VAXC pre-processor directive convert
+ script.
+- Improved code's VAXC and new DECC compilers compatibility
+- changed quickfix parameters:
+ - errormessage format to suite DECC
+ - search, make and other commands to suite VMS system
+- updated and renamed MMS make files for Vim and CTAGS.
+- CTAGS has been removed from source distribution of Vim but it will remain
+ in OpenVMS binary distributions.
+- simplified build/configuration procedure
+- created INSTALLvms.txt - detailed compiling instructions under VMS.
+- updated test scripts.
+
+Version 5.8 (2001 Jun 1)
+- OS_VMS.TXT updated with new features.
+- other minor fixes.
+- documentation updated
+- this version had been tested much more than any other OpenVMS version
+ earlier
+
+Version 5.7 (2000 Jun 24)
+- New CTAGS v5.0 in distribution
+- Documentation updated
+
+Version 5.6 (2000 Jan 17)
+- VMS filename related changes:
+ - version handling (open everything, save to new version)
+ - correct file extension matching for syntax (version problem)
+ - handle <,> characters and passwords in directory definition
+ - handle internode/remote invocation and editing with passwords
+ - OpenVMS files will be treated case insensitive from now
+ - corrected response of expand("%:.") etc path related functions
+ (in one word: VMS directory handling internally)
+- version command
+ - corrected (+,-) information data
+ - added compiler and OS version
+ - added user and host information
+ - resolving $VIM and $VIMRUNTIME logicals
+- VMS port is in MAX_FEAT (maximum features) club with Unix, Win32 and OS/2.
+ - enabled farsi, rightleft etc. features
+ - undo level raised up to 1000
+- Updated OS_VMS.MMS file.
+ - maximum features ON is default
+ - Vim is compilable with +perl, +python and +tcl features.
+ - improved MMK compatibility
+- Created MAKEFILE_VMS.MMS, makefile for testing Vim during development.
+- Defined DEC terminal VT320
+ - compatibility for VT3*0, VT2*0 and VT1*0 - ANSI terminals
+ backwards, but not VT340 and newer with colour capability.
+ - VT320 is default terminal for OpenVMS
+ - these new terminals are also fast ttys (default for OpenVMS).
+ - allowed dec_mouse ttym
+- Updated files vimrc and gvimrc with VMS specific suggestions.
+- OS_VMS.TXT updated with new features.
+
+Version 5.5 (1999 Dec 3)
+- Popup menu line crash corrected.
+- Handle full file names with version numbers.
+- Directory handling (CD command etc.)
+- Corrected file name conversion VMS to Unix and v.v.
+- Correct response of expand wildcards
+- Recovery is working from this version under VMS as well.
+- Improved terminal and signal handing.
+- Improved OS_VMS.TXT
+
+Version 5.4 (1999 Sep 9)
+- Cut and paste mismatch corrected.
+- Motif directories during open and save are corrected.
+
+Version 5.3 (1998 Oct 12)
+- Minor changes in the code
+- Standard distribution with +GUI option
+
+Version 5.1 (1998 Apr 21)
+- Syntax and DEC C changes in the code
+- Fixing problems with the /doc subdirectory
+- Improve OS_VMS.MMS
+
+Version 4.5 (1996 Dec 16)
+- First VMS port by Henk Elbers <henk@xs4all.nl>
+
+==============================================================================
+
+10. Authors *vms-authors*
+
+OpenVMS documentation and executables are maintained by:
+Zoltan Arpadffy <arpadffy@polarhome.com>
+
+This document uses parts and remarks from earlier authors and contributors
+of OS_VMS.TXT:
+ Charles E. Campbell, Jr. <cec@gryphon.gsfc.nasa.gov>
+ Bruce Hunsaker <BNHunsaker@chq.byu.edu>
+ Sandor Kopanyi <sandor.kopanyi@mailbox.hu>
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt
new file mode 100644
index 000000000..29d7096bf
--- /dev/null
+++ b/runtime/doc/os_win32.txt
@@ -0,0 +1,319 @@
+*os_win32.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by George Reilly
+
+
+ *win32* *Win32* *MS-Windows*
+This file documents the idiosyncrasies of the Win32 version of Vim.
+
+The Win32 version of Vim works on both Windows NT and Windows 95. There are
+both console and GUI versions. There is GUI version for use in the Win32s
+subsystem in Windows 3.1[1]. You can also use the 32-bit DOS version of Vim
+instead. See |os_msdos.txt|.
+
+1. Known problems |win32-problems|
+2. Startup |win32-startup|
+3. Restore screen contents |win32-restore|
+4. Using the mouse |win32-mouse|
+5. Running under Windows 3.1 |win32-win3.1|
+6. Win32 mini FAQ |win32-faq|
+
+Additionally, there are a number of common Win32 and DOS items:
+File locations |dos-locations|
+Using backslashes |dos-backslash|
+Standard mappings |dos-standard-mappings|
+Screen output and colors |dos-colors|
+File formats |dos-file-formats|
+:cd command |dos-:cd|
+Interrupting |dos-CTRL-Break|
+Temp files |dos-temp-files|
+Shell option default |dos-shell|
+
+Win32 GUI |gui-w32|
+
+Credits:
+The Win32 version was written by George V. Reilly <george@reilly.org>.
+The original Windows NT port was done by Roger Knobbe <RogerK@wonderware.com>.
+The GUI version was made by George V. Reilly and Robert Webb.
+
+For compiling see "src/INSTALL.pc". *win32-compiling*
+
+==============================================================================
+1. Known problems *windows95* *win32-problems*
+
+There are a few known problems with running in a console on Windows 95. As
+far as we know, this is the same in Windows 98 and Windows ME.
+
+Comments from somebody working at Microsoft: "Win95 console support has always
+been and will always be flaky".
+1. Dead key support doesn't work.
+2. Resizing the window with ":set columns=nn lines=nn" works, but executing
+ external commands MAY CAUSE THE SYSTEM TO HANG OR CRASH.
+3. Screen updating is slow, unless you change 'columns' or 'lines' to a
+ non-DOS value. But then the second problem applies!
+
+If this bothers you, use the 32 bit MS-DOS version or the Win32 GUI version.
+
+When doing file name completion, Vim also finds matches for the short file
+name. But Vim will still find and use the corresponding long file name. For
+example, if you have the long file name "this_is_a_test" with the short file
+name "this_i~1", the command ":e *1" will start editing "this_is_a_test".
+
+==============================================================================
+2. Startup *win32-startup*
+
+Current directory *win32-curdir*
+
+If Vim is started with a single file name argument, and it has a full path
+(starts with "x:\"), Vim assumes it was started from the file explorer and
+will set the current directory to where that file is. To avoid this when
+typing a command to start Vim, use a forward slash instead of a backslash.
+Example: >
+
+ vim c:\text\files\foo.txt
+
+Will change to the "C:\text\files" directory. >
+
+ vim c:/text\files\foo.txt
+
+Will use the current directory.
+
+
+Term option *win32-term*
+
+The only kind of terminal type that the Win32 version of Vim understands is
+"win32", which is built-in. If you set 'term' to anything else, you will
+probably get very strange behavior from Vim. Therefore Vim does not obtain
+the default value of 'term' from the environment variable "TERM".
+
+==============================================================================
+3. Restore screen contents *win32-restore*
+
+When 'restorescreen' is set (which is the default), Vim will restore the
+original contents of the console when exiting or when executing external
+commands. If you don't want this, use ":set nors". |'restorescreen'|
+
+==============================================================================
+4. Using the mouse *win32-mouse*
+
+The Win32 version of Vim supports using the mouse. If you have a two-button
+mouse, the middle button can be emulated by pressing both left and right
+buttons simultaneously - but note that in the Win32 GUI, if you have the right
+mouse button pop-up menu enabled (see 'mouse'), you should err on the side of
+pressing the left button first. |mouse-using|
+
+When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of
+the console.
+
+==============================================================================
+5. Running under Windows 3.1 *win32-win3.1*
+
+ *win32s* *windows-3.1*
+There is a special version of Gvim that runs under Windows 3.1 and 3.11. You
+need the gvim.exe that was compiled with Visual C++ 4.1.
+
+To run the Win32 version under Windows 3.1, you need to install Win32s. You
+might have it already from another Win32 application which you have installed.
+If Vim doesn't seem to be running properly, get the latest version: 1.30c.
+You can find it at:
+
+ http://support.microsoft.com/download/support/mslfiles/pw1118.exe
+
+(Microsoft moved it again, we don't know where it is now :-( ).
+
+The reason for having two versions of gvim.exe is that the Win32s version was
+compiled with VC++ 4.1. This is the last version of VC++ that supports Win32s
+programs. VC++ 5.0 is better, so that one was used for the Win32 version.
+Apart from that, there is no difference between the programs. If you are in a
+mixed environment, you can use the gvim.exe for Win32s on both.
+
+The Win32s version works the same way as the Win32 version under 95/NT. When
+running under Win32s the following differences apply:
+- You cannot use long file names, because Windows 3.1 doesn't support them!
+- When executing an external command, it doesn't return an exit code. After
+ doing ":make" you have to do ":cn" yourself.
+
+==============================================================================
+6. Win32 mini FAQ *win32-faq*
+
+Q. Why does the Win32 version of Vim update the screen so slowly on Windows 95?
+A. The support for Win32 console mode applications is very buggy in Win95.
+ For some unknown reason, the screen updates very slowly when Vim is run at
+ one of the standard resolutions (80x25, 80x43, or 80x50) and the 16-bit DOS
+ version updates the screen much more quickly than the Win32 version.
+ However, if the screen is set to some other resolution, such as by ":set
+ columns=100" or ":set lines=40", screen updating becomes about as fast as
+ it is with the 16-bit version.
+
+ WARNING: Changing 'columns' may make Windows 95 crash while updating the
+ window (complaints --> Microsoft). Since this mostly works, this has not
+ been disabled, but be careful with changing 'columns'.
+
+ Changing the screen resolution makes updates faster, but it brings
+ additional problems. External commands (e.g., ":!dir") can cause Vim to
+ freeze when the screen is set to a non-standard resolution, particularly
+ when 'columns' is not equal to 80. It is not possible for Vim to reliably
+ set the screen resolution back to the value it had upon startup before
+ running external commands, so if you change the number of 'lines' or
+ 'columns', be very, very careful. In fact, Vim will not allow you to
+ execute external commands when 'columns' is not equal to 80, because it is
+ so likely to freeze up afterwards.
+
+ None of the above applies on Windows NT. Screen updates are fast, no
+ matter how many 'lines' or 'columns' the window has, and external commands
+ do not cause Vim to freeze.
+
+Q. So if the Win32 version updates the screen so slowly on Windows 95 and the
+ 16-bit DOS version updates the screen quickly, why would I want to run the
+ Win32 version?
+A. Firstly, the Win32 version isn't that slow, especially when the screen is
+ set to some non-standard number of 'lines' or 'columns'. Secondly, the
+ 16-bit DOS version has some severe limitations: It can't do big changes and
+ it doesn't know about long file names. The Win32 version doesn't have these
+ limitations and it's faster overall (the same is true for the 32-bit DJGPP
+ DOS version of Vim). The Win32 version is smarter about handling the
+ screen, the mouse, and the keyboard than the DJGPP version is.
+
+Q. And what about the 16-bit DOS version versus the Win32 version on NT?
+A. There are no good reasons to run the 16-bit DOS version on NT. The Win32
+ version updates the screen just as fast as the 16-bit version does when
+ running on NT. All of the above disadvantages apply. Finally, DOS
+ applications can take a long time to start up and will run more slowly. On
+ non-Intel NT platforms, the DOS version is almost unusably slow, because it
+ runs on top of an 80x86 emulator.
+
+Q. How do I change the font?
+A. In the GUI version, you can use the 'guifont' option.
+ In the console version, you need to set the font of the console itself.
+ You cannot do this from within Vim.
+
+Q. When I change the size of the console window with ':set lines=xx' or
+ similar, the font changes! (Win95)
+A. You have the console font set to 'Auto' in Vim's (or your MS-DOS prompt's)
+ properties. This makes W95 guess (badly!) what font is best. Set an explicit
+ font instead.
+
+Q. Why can't I paste into Vim when running Windows 95?
+A. In the properties dialog box for the MS-DOS window, go to "MS-DOS
+ Prompt/Misc/Fast pasting" and make sure that it is NOT checked. You should
+ also do ":set paste" in Vim to avoid unexpected effects. |'paste'|
+
+Q. How do I type dead keys on Windows 95, in the console version?
+ (A dead key is an accent key, such as acute, grave, or umlaut, that doesn't
+ produce a character by itself, but when followed by another key, produces
+ an accented character, such as a-acute, e-grave, u-umlaut, n-tilde, and so
+ on. Very useful for most European languages. English-language keyboard
+ layouts don't use dead keys, as far as we know.)
+A. You don't. The console mode input routines simply do not work correctly in
+ Windows 95, and I have not been able to work around them. In the words
+ of a senior developer at Microsoft:
+ Win95 console support has always been and will always be flaky.
+
+ The flakiness is unavoidable because we are stuck between the world of
+ MS-DOS keyboard TSRs like KEYB (which wants to cook the data;
+ important for international) and the world of Win32.
+
+ So keys that don't "exist" in MS-DOS land (like dead keys) have a
+ very tenuous existence in Win32 console land. Keys that act
+ differently between MS-DOS land and Win32 console land (like
+ capslock) will act flaky.
+
+ Don't even _mention_ the problems with multiple language keyboard
+ layouts...
+
+ You may be able to fashion some sort of workaround with the digraphs
+ mechanism. |digraphs|
+
+ The best solution is to use the Win32 GUI version gvim.exe. Alternatively,
+ you can try one of the DOS versions of Vim where dead keys reportedly do
+ work.
+
+Q. How do I type dead keys on Windows NT?
+A. Dead keys work on NT 3.51. Just type them as you would in any other
+ application.
+ On NT 4.0, you need to make sure that the default locale (set in the
+ Keyboard part of the Control Panel) is the same as the currently active
+ locale. Otherwise the NT code will get confused and crash! This is a NT
+ 4.0 problem, not really a Vim problem.
+
+Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server.
+ When I write the file, Vim does not "write through" the symlink. Instead,
+ it deletes the symbolic link and creates a new file in its place. Why?
+A. On Unix, Vim is prepared for links (symbolic or hard). A backup copy of
+ the original file is made and then the original file is overwritten. This
+ assures that all properties of the file remain the same. On non-Unix
+ systems, the original file is renamed and a new file is written. Only the
+ protection bits are set like the original file. However, this doesn't work
+ properly when working on an NFS-mounted file system where links and other
+ things exist. The only way to fix this in the current version is not
+ making a backup file, by ":set nobackup nowritebackup" |'writebackup'|
+
+Q. How do I get to see the output of ":make" while it's running?
+A. Basically what you need is to put a tee program that will copy its input
+ (the output from make) to both stdout and to the errorfile. You can find a
+ copy of tee (and a number of other GNU tools tools) at
+ http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net
+ Alternatively, try the more recent Cygnus version of the GNU tools at
+ http://www.cygwin.com Other Unix-style tools for Win32 are listed at
+ http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
+ When you do get a copy of tee, you'll need to add >
+ :set shellpipe=\|\ tee
+< to your _vimrc.
+
+Q. I'm storing files on a remote machine that works with VisionFS, and files
+ disappear!
+A. VisionFS can't handle certain dot (.) three letter extension file names.
+ SCO declares this behavior required for backwards compatibility with 16bit
+ DOS/Windows environments. The two commands below demonstrate the behavior:
+>
+ echo Hello > file.bat~
+ dir > file.bat
+<
+ The result is that the "dir" command updates the "file.bat~" file, instead
+ of creating a new "file.bat" file. This same behavior is exhibited in Vim
+ when editing an existing file named "foo.bat" because the default behavior
+ of Vim is to create a temporary file with a '~' character appended to the
+ name. When the file is written, it winds up being deleted.
+
+ Solution: Add this command to your _vimrc file: >
+ :set backupext=.temporary
+
+Q. How do I change the blink rate of the cursor?
+A. You can't! This is a limitation of the NT console. NT 5.0 is reported to
+ be able to set the blink rate for all console windows at the same time.
+
+ *:!start*
+Q. How can I run an external command or program asynchronously?
+A. When using :! to run an external command, you can run it with "start": >
+ :!start winfile.exe<CR>
+< Using "start" stops Vim switching to another screen, opening a new console,
+ or waiting for the program to complete; it indicates that you are running a
+ program that does not effect the files you are editing. Programs begun
+ 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".
+
+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!
+A. The problem is that a 32-bit application (Vim) can't get notification from
+ Windows that a 16-bit application (your DOS session) has finished. Vim
+ includes a work-around for this, but you must set up your DOS commands to
+ run in a window, not full-screen. Unfortunately the default when you
+ install Windows is full-screen. To change this:
+ 1) Start PIF editor (in the Main program group)
+ 2) Open the file "_DEFAULT.PIF" in your Windows directory.
+ 3) Changes the display option from "Full Screen" to "Windowed".
+ 4) Save and exit.
+
+ To test, start Vim and type >
+ :!dir C:\<CR>".
+< You should see a DOS box window appear briefly with the directory listing.
+
+Q. I use Vim under Win32s and NT. In NT, I can define the console to default to
+ 50 lines, so that I get a 80x50 shell when I ':sh'. Can I do the same in
+ W3.1x, or am I stuck with 80x25?
+A. Edit SYSTEM.INI and add 'ScreenLines=50' to the [NonWindowsApp] section. DOS
+ prompts and external DOS commands will now run in a 50-line window.
+
+ vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
new file mode 100644
index 000000000..caa5a00d7
--- /dev/null
+++ b/runtime/doc/pattern.txt
@@ -0,0 +1,1146 @@
+*pattern.txt* For Vim version 7.0aa. Last change: 2004 May 09
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Patterns and search commands *pattern-searches*
+
+The very basics can be found in section |03.9| of the user manual. A few more
+explanations are in chapter 27 |usr_27.txt|.
+
+1. Search commands |search-commands|
+2. The definition of a pattern |search-pattern|
+3. Magic |/magic|
+4. Overview of pattern items |pattern-overview|
+5. Multi items |pattern-multi-items|
+6. Ordinary atoms |pattern-atoms|
+7. Ignoring case in a pattern |/ignorecase|
+8. Compare with Perl patterns |perl-patterns|
+9. Highlighting matches |match-highlight|
+
+==============================================================================
+1. Search commands *search-commands* *E486*
+
+ */*
+/{pattern}[/]<CR> Search forward for the [count]'th occurrence of
+ {pattern} |exclusive|.
+
+/{pattern}/{offset}<CR> Search forward for the [count]'th occurrence of
+ {pattern} and go |{offset}| lines up or down.
+ |linewise|.
+
+ */<CR>*
+/<CR> Search forward for the [count]'th latest used
+ pattern |last-pattern| with latest used |{offset}|.
+
+//{offset}<CR> Search forward for the [count]'th latest used
+ pattern |last-pattern| with new |{offset}|. If
+ {offset} is empty no offset is used.
+
+ *?*
+?{pattern}[?]<CR> Search backward for the [count]'th previous
+ occurrence of {pattern} |exclusive|.
+
+?{pattern}?{offset}<CR> Search backward for the [count]'th previous
+ occurrence of {pattern} and go |{offset}| lines up or
+ down |linewise|.
+
+ *?<CR>*
+?<CR> Search backward for the [count]'th latest used
+ pattern |last-pattern| with latest used |{offset}|.
+
+??{offset}<CR> Search backward for the [count]'th latest used
+ pattern |last-pattern| with new |{offset}|. If
+ {offset} is empty no offset is used.
+
+ *n*
+n Repeat the latest "/" or "?" [count] times.
+ |last-pattern| {Vi: no count}
+
+ *N*
+N Repeat the latest "/" or "?" [count] times in
+ opposite direction. |last-pattern| {Vi: no count}
+
+ *star* *E348* *E349*
+* Search forward for the [count]'th occurrence of the
+ word nearest to the cursor. The word used for the
+ search is the first of:
+ 1. the keyword under the cursor |'iskeyword'|
+ 2. the first keyword after the cursor, in the
+ current line
+ 3. the non-blank word under the cursor
+ 4. the first non-blank word after the cursor,
+ in the current line
+ Only whole keywords are searched for, like with the
+ command "/\<keyword\>". |exclusive| {not in Vi}
+ 'ignorecase' is used, 'smartcase' is not.
+
+ *#*
+# Same as "*", but search backward. The pound sign
+ (character 163) also works. If the "#" key works as
+ backspace, try using "stty erase <BS>" before starting
+ Vim (<BS> is CTRL-H or a real backspace). {not in Vi}
+
+ *gstar*
+g* Like "*", but don't put "\<" and "\>" around the word.
+ This makes the search also find matches that are not a
+ whole word. {not in Vi}
+
+ *g#*
+g# Like "#", but don't put "\<" and "\>" around the word.
+ This makes the search also find matches that are not a
+ whole word. {not in Vi}
+
+ *gd*
+gd Goto local Declaration. When the cursor is on a local
+ variable, this command will jump to its declaration.
+ First Vim searches for the start of the current
+ function, just like "[[". If it is not found the
+ search stops in line 1. If it is found, Vim goes back
+ until a blank line is found. From this position Vim
+ searches for the keyword under the cursor, like with
+ "*", but lines that look like a comment are ignored
+ (see 'comments' option).
+ Note that this is not guaranteed to work, Vim does not
+ really check the syntax, it only searches for a match
+ with the keyword. If included files also need to be
+ searched use the commands listed in |include-search|.
+ After this command |n| searches forward for the next
+ match (not backward).
+ {not in Vi}
+
+ *gD*
+gD Goto global Declaration. When the cursor is on a
+ global variable that is defined in the file, this
+ command will jump to its declaration. This works just
+ like "gd", except that the search for the keyword
+ always starts in line 1. {not in Vi}
+
+ *CTRL-C*
+CTRL-C Interrupt current (search) command. Use CTRL-Break on
+ MS-DOS |dos-CTRL-Break|.
+ In Normal mode, any pending command is aborted.
+
+ *:noh* *:nohlsearch*
+:noh[lsearch] Stop the highlighting for the 'hlsearch' option. It
+ is automatically turned back on when using a search
+ command, or setting the 'hlsearch' option.
+ This command doesn't work in an autocommand, because
+ the highlighting state is saved and restored when
+ executing autocommands |autocmd-searchpat|.
+
+While typing the search pattern the current match will be shown if the
+'incsearch' option is on. Remember that you still have to finish the search
+command with <CR> to actually position the cursor at the displayed match. Or
+use <Esc> to abandon the search.
+
+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.
+
+ *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
+and character offsets. {the character offsets are not in Vi}
+
+The offset gives the cursor position relative to the found match:
+ [num] [num] lines downwards, in column 1
+ +[num] [num] lines downwards, in column 1
+ -[num] [num] lines upwards, in column 1
+ e[+num] [num] characters to the right of the end of the match
+ e[-num] [num] characters to the left of the end of the match
+ s[+num] [num] characters to the right of the start of the match
+ s[-num] [num] characters to the left of the start of the match
+ b[+num] [num] identical to s[+num] above (mnemonic: begin)
+ b[-num] [num] identical to s[-num] above (mnemonic: begin)
+
+If a '-' or '+' is given but [num] is omitted, a count of one will be used.
+When including an offset with 'e', the search becomes inclusive (the
+character the cursor lands on is included in operations).
+
+Examples:
+
+pattern cursor position ~
+/test/+1 one line below "test", in column 1
+/test/e on the last t of "test"
+/test/s+2 on the 's' of "test"
+/test/b-3 three characters before "test"
+
+If one of these commands is used after an operator, the characters between
+the cursor position before and after the search is affected. However, if a
+line offset is given, the whole lines between the two cursor positions are
+affected.
+
+An example of how to search for matches with a pattern and change the match
+with another word: >
+ /foo<CR> find "foo"
+ c//e change until end of match
+ bar<Esc> type replacement
+ //<CR> go to start of next match
+ c//e change until end of match
+ beep<Esc> type another replacement
+ etc.
+<
+ *//;* *E386*
+A very special offset is ';' followed by another search command. For example: >
+
+ /test 1/;/test
+ /test.*/+1;?ing?
+
+The first one first finds the next occurrence of "test 1", and then the first
+occurrence of "test" after that.
+
+This is like executing two search commands after each other, except that:
+- It can be used as a single motion command after an operator.
+- The direction for a following "n" or "N" command comes from the first
+ search command.
+- When an error occurs the cursor is not moved at all.
+
+ *last-pattern*
+The last used pattern and offset are remembered. They can be used to repeat
+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.
+
+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.
+The 'ignorecase' option does not do this. When 'ignorecase' is changed, it
+will result in the pattern to match other text.
+
+All matches for the last used search pattern will be highlighted if you set
+the 'hlsearch' option.
+
+To clear the last used search pattern: >
+ :let @/ = ""
+This will not set the pattern to an empty string, because that would match
+everywhere. The pattern is really cleared, like when starting Vim.
+
+The search usual skips matches that don't move the cursor. Whether the next
+match is found at the next character or after the skipped match depends on the
+'c' flag in 'cpoptions'. See |cpo-c|.
+ with 'c' flag: "/..." advances 1 to 3 characters
+ without 'c' flag: "/..." advances 1 character
+The unpredictability with the 'c' flag is caused by starting the search in the
+first column, skipping matches until one is found past the cursor position.
+
+In Vi the ":tag" command sets the last search pattern when the tag is searched
+for. In Vim this is not done, the previous search pattern is still remembered,
+unless the 't' flag is present in 'cpoptions'. The search pattern is always
+put in the search history.
+
+If the 'wrapscan' option is on (which is the default), searches wrap around
+the end of the buffer. If 'wrapscan' is not set, the backward search stops
+at the beginning and the forward search stops at the end of the buffer. If
+'wrapscan' is set and the pattern was not found the error message "pattern
+not found" is given, and the cursor will not be moved. If 'wrapscan' is not
+set the message becomes "search hit BOTTOM without match" when searching
+forward, or "search hit TOP without match" when searching backward. If
+wrapscan is set and the search wraps around the end of the file the message
+"search hit TOP, continuing at BOTTOM" or "search hit BOTTOM, continuing at
+TOP" is given when searching backwards or forwards respectively. This can be
+switched off by setting the 's' flag in the 'shortmess' option. The highlight
+method 'w' is used for this message (default: standout).
+
+ *search-range*
+You cannot limit the search command "/" to a certain range of lines. A trick
+to do this anyway is to use the ":substitute" command with the 'c' flag.
+Example: >
+ :.,300s/Pattern//gc
+This command will search from the cursor position until line 300 for
+"Pattern". At the match, you will be asked to type a character. Type 'q' to
+stop at this match, type 'n' to find the next match.
+
+The "*", "#", "g*" and "g#" commands look for a word near the cursor in this
+order, the first one that is found is used:
+- The keyword currently under the cursor.
+- The first keyword to the right of the cursor, in the same line.
+- The WORD currently under the cursor.
+- The first WORD to the right of the cursor, in the same line.
+The keyword may only contain letters and characters in 'iskeyword'.
+The WORD may contain any non-blanks (<Tab>s and/or <Space>s).
+Note that if you type with ten fingers, the characters are easy to remember:
+the "#" is under your left hand middle finger (search to the left and up) and
+the "*" is under your right hand middle finger (search to the right and down).
+(this depends on your keyboard layout though).
+
+==============================================================================
+2. The definition of a pattern *search-pattern* *pattern* *[pattern]*
+ *regular-expression* *regexp* *Pattern*
+ *E76* *E361* *E363* *E383* *E476*
+
+For starters, read chapter 27 of the user manual |usr_27.txt|.
+
+ */bar* */\bar* */pattern*
+1. A pattern is 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.
+
+ */branch* */\&*
+2. A branch is 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.
+
+ */concat*
+3. A concat is 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.
+
+ */piece*
+4. 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. See |/multi|.
+
+ piece ::= atom
+ or atom multi
+
+ */atom*
+5. 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 |/ordinary-atom|
+ or \( pattern \) |/\(|
+ or \%( pattern \) |/\%(|
+ or \z( pattern \) |/\z(|
+
+
+==============================================================================
+4. Overview of pattern items *pattern-overview*
+
+Overview of multi items. */multi* *E61* *E62*
+More explanation and examples below, follow the links. *E64*
+
+ multi ~
+ 'magic' 'nomagic' matches of the preceding atom ~
+|/star| * \* 0 or more as many as possible
+|/\+| \+ \+ 1 or more as many as possible (*)
+|/\=| \= \= 0 or 1 as many as possible (*)
+|/\?| \? \? 0 or 1 as many as possible (*)
+
+|/\{| \{n,m} \{n,m} n to m as many as possible (*)
+ \{n} \{n} n exactly (*)
+ \{n,} \{n,} at least n as many as possible (*)
+ \{,m} \{,m} 0 to m as many as possible (*)
+ \{} \{} 0 or more as many as possible (same as *) (*)
+
+|/\{-| \{-n,m} \{-n,m} n to m as few as possible (*)
+ \{-n} \{-n} n exactly (*)
+ \{-n,} \{-n,} at least n as few as possible (*)
+ \{-,m} \{-,m} 0 to m as few as possible (*)
+ \{-} \{-} 0 or more as few as possible (*)
+
+ *E59*
+|/\@>| \@> \@> 1, like matching a whole pattern (*)
+|/\@=| \@= \@= nothing, requires a match |/zero-width| (*)
+|/\@!| \@! \@! nothing, requires NO match |/zero-width| (*)
+|/\@<=| \@<= \@<= nothing, requires a match behind |/zero-width| (*)
+|/\@<!| \@<! \@<! nothing, requires NO match behind |/zero-width| (*)
+
+(*) {not in Vi}
+
+
+Overview of ordinary atoms. */ordinary-atom*
+More explanation and examples below, follow the links.
+
+ ordinary atom ~
+ magic nomagic matches ~
+|/^| ^ ^ start-of-line (at start of pattern) |/zero-width|
+|/\^| \^ \^ literal '^'
+|/\_^| \_^ \_^ start-of-line (used anywhere) |/zero-width|
+|/$| $ $ end-of-line (at end of pattern) |/zero-width|
+|/\$| \$ \$ literal '$'
+|/\_$| \_$ \_$ end-of-line (used anywhere) |/zero-width|
+|/.| . \. any single character (not an end-of-line)
+|/\_.| \_. \_. any single character or end-of-line
+|/\<| \< \< beginning of a word |/zero-width|
+|/\>| \> \> end of a word |/zero-width|
+|/\zs| \zs \zs anything, sets start of match
+|/\ze| \ze \ze anything, sets end of match
+|/\%^| \%^ \%^ beginning of file |/zero-width| *E71*
+|/\%$| \%$ \%$ end of file |/zero-width|
+|/\%#| \%# \%# cursor position |/zero-width|
+|/\%l| \%23l \%23l in line 23 |/zero-width|
+|/\%c| \%23c \%23c in column 23 |/zero-width|
+|/\%v| \%23v \%23v in virtual column 23 |/zero-width|
+
+Character classes {not in Vi}:
+|/\i| \i \i identifier character (see 'isident' option)
+|/\I| \I \I like "\i", but excluding digits
+|/\k| \k \k keyword character (see 'iskeyword' option)
+|/\K| \K \K like "\k", but excluding digits
+|/\f| \f \f file name character (see 'isfname' option)
+|/\F| \F \F like "\f", but excluding digits
+|/\p| \p \p printable character (see 'isprint' option)
+|/\P| \P \P like "\p", but excluding digits
+|/\s| \s \s whitespace character: <Space> and <Tab>
+|/\S| \S \S non-whitespace character; opposite of \s
+|/\d| \d \d digit: [0-9]
+|/\D| \D \D non-digit: [^0-9]
+|/\x| \x \x hex digit: [0-9A-Fa-f]
+|/\X| \X \X non-hex digit: [^0-9A-Fa-f]
+|/\o| \o \o octal digit: [0-7]
+|/\O| \O \O non-octal digit: [^0-7]
+|/\w| \w \w word character: [0-9A-Za-z_]
+|/\W| \W \W non-word character: [^0-9A-Za-z_]
+|/\h| \h \h head of word character: [A-Za-z_]
+|/\H| \H \H non-head of word character: [^A-Za-z_]
+|/\a| \a \a alphabetic character: [A-Za-z]
+|/\A| \A \A non-alphabetic character: [^A-Za-z]
+|/\l| \l \l lowercase character: [a-z]
+|/\L| \L \L non-lowercase character: [^a-z]
+|/\u| \u \u uppercase character: [A-Z]
+|/\U| \U \U non-uppercase character [^A-Z]
+|/\_| \_x \_x where x is any of the characters above: character
+ class with end-of-line included
+(end of character classes)
+
+|/\e| \e \e <Esc>
+|/\t| \t \t <Tab>
+|/\r| \r \r <CR>
+|/\b| \b \b <BS>
+|/\n| \n \n end-of-line
+|/~| ~ \~ last given substitute string
+|/\1| \1 \1 same string as matched by first \(\) {not in Vi}
+|/\2| \2 \2 Like "\1", but uses second \(\)
+ ...
+|/\9| \9 \9 Like "\1", but uses ninth \(\)
+ *E68*
+|/\z1| \z1 \z1 only for syntax highlighting, see |:syn-ext-match|
+ ...
+|/\z1| \z9 \z9 only for syntax highlighting, see |:syn-ext-match|
+
+ x x a character with no special meaning matches itself
+
+|/[]| [] \[] any character specified inside the []
+|/\%[]| \%[] \%[] a list of optionally matched atoms
+
+|/\c| \c \c ignore case
+|/\C| \C \C match case
+|/\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.
+
+
+Example matches ~
+\<\I\i* or
+\<\h\w*
+\<[a-zA-Z_][a-zA-Z0-9_]*
+ An identifier (e.g., in a C program).
+
+\(\.$\|\. \) A period followed by <EOL> or a space.
+
+[.!?][])"']*\($\|[ ]\) A search pattern that finds the end of a sentence,
+ with almost the same definition as the ")" command.
+
+cat\Z Both "cat" and "càt" ("a" followed by 0x0300)
+ Does not match "càt" (character 0x00e0), even
+ though it may look the same.
+
+
+==============================================================================
+3. Magic */magic*
+
+Some characters in the pattern are taken literally. They match with the same
+character in the text. When preceded with a backslash however, these
+characters get a special meaning.
+
+Other characters have a special meaning without a backslash. They need to be
+preceded with a backslash to match literally.
+
+If a character is taken literally or not depends on the 'magic' option and the
+items mentioned next.
+ */\m* */\M*
+Use of "\m" makes the pattern after it be interpreted as if 'magic' is set,
+ignoring the actual value of the 'magic' option.
+Use of "\M" makes the pattern after it be interpreted as if 'nomagic' is used.
+ */\v* */\V*
+Use of "\v" means that in the pattern after it all ASCII characters except
+'0'-'9', 'a'-'z', 'A'-'Z' and '_' have a special meaning. "very magic"
+
+Use of "\V" means that in the pattern after it only the backslash has a
+special meaning. "very nomagic"
+
+Examples:
+after: \v \m \M \V matches ~
+ 'magic' 'nomagic'
+ $ $ $ \$ matches end-of-line
+ . . \. \. matches any character
+ * * \* \* any number of the previous atom
+ () \(\) \(\) \(\) grouping into an atom
+ | \| \| \| separating alternatives
+ \a \a \a \a alphabetic character
+ \\ \\ \\ \\ literal backslash
+ \. \. . . literal dot
+ \{ { { { literal '{'
+ a a a a literal 'a'
+
+{only Vim supports \m, \M, \v and \V}
+
+It is recommended to always keep the 'magic' option at the default setting,
+which is 'magic'. This avoids portability problems. To make a pattern immune
+to the 'magic' option being set or not, put "\m" or "\M" at the start of the
+pattern.
+
+
+==============================================================================
+5. Multi items *pattern-multi-items*
+
+An atom can be followed by an indication of how many times the atom can be
+matched and in what way. This is called a multi. See |/multi| for an
+overview.
+
+It is not possible to use a multi that can match more than one time after an
+atom that can match an empty string. That's because this could result in an
+endless loop. If you try it, you will get this error message: >
+ *, \+ or \{ operand could be empty
+<
+ */star* */\star* *E56*
+* (use \* when 'magic' is not set)
+ Matches 0 or more of the preceding atom, as many as possible.
+ Example 'nomagic' matches ~
+ a* a\* "", "a", "aa", "aaa", etc.
+ .* \.\* anything, also an empty string, no end-of-line
+ \_.* \_.\* everything up to the end of the buffer
+ \_.*END \_.\*END everything up to and including the last "END"
+ in the buffer
+
+ Exception: When "*" is used at the start of the pattern or just after
+ "^" it matches the star character.
+
+ Be aware that repeating "\_." can match a lot of text and take a long
+ time. For example, "\_.*END" matches all text from the current
+ position to the last occurrence of "END" in the file. Since the "*"
+ will match as many as possible, this first skips over all lines until
+ the end of the file and then tries matching "END", backing up one
+ character at a time.
+
+ */\+* *E57*
+\+ Matches 1 or more of the preceding atom, as many as possible. {not in
+ Vi}
+ Example matches ~
+ ^.\+$ any non-empty line
+ \s\+ white space of at least one character
+
+ */\=*
+\= Matches 0 or 1 of the preceding atom, as many as possible. {not in Vi}
+ Example matches ~
+ foo\= "fo" and "foo"
+
+ */\?*
+\? Just like \=. Cannot be used when searching backwards with the "?"
+ command. {not in Vi}
+
+ */\{* *E58* *E60* *E554*
+\{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
+\{,m} Matches 0 to m of the preceding atom, as many as possible
+\{} Matches 0 or more of the preceding atom, as many as possible (like *)
+ */\{-*
+\{-n,m} matches n to m of the preceding atom, as few as possible
+\{-n} matches n of the preceding atom
+\{-n,} matches at least n of the preceding atom, as few as possible
+\{-,m} matches 0 to m of the preceding atom, as few as possible
+\{-} matches 0 or more of the preceding atom, as few as possible
+ {Vi does not have any of these}
+
+ n and m are positive decimal numbers
+
+ If a "-" appears immediately after the "{", then a shortest match
+ first algorithm is used (see example below). In particular, "\{-}" is
+ the same as "*" but uses the shortest match first algorithm. BUT: A
+ match that starts earlier is preferred over a shorter match: "a\{-}b"
+ matches "aaab" in "xaaab".
+
+ Example matches ~
+ ab\{2,3}c "abbc" or "abbbc"
+ a\{5} "aaaaa".
+ ab\{2,}c "abbc", "abbbc", "abbbbc", etc
+ ab\{,3}c "ac", "abc", "abbc" or "abbbc".
+ a[bc]\{3}d "abbbd", "abbcd", "acbcd", "acccd", etc.
+ a\(bc\)\{1,2}d "abcd" or "abcbcd"
+ a[bc]\{-}[cd] "abc" in "abcd"
+ a[bc]*[cd] "abcd" in "abcd"
+
+ The } may optionally be preceded with a backslash: \{n,m\}.
+
+ */\@=*
+\@= Matches the preceding atom with zero width. {not in Vi}
+ Like "(?=pattern)" in Perl.
+ Example matches ~
+ foo\(bar\)\@= "foo" in "foobar"
+ foo\(bar\)\@=foo nothing
+ */zero-width*
+ When using "\@=" (or "^", "$", "\<", "\>") no characters are included
+ in the match. These items are only used to check if a match can be
+ made. This can be tricky, because a match with following items will
+ be done in the same position. The last example above will not match
+ "foobarfoo", because it tries match "foo" in the same position where
+ "bar" matched.
+
+ Note that using "\&" works the same as using "\@=": "foo\&.." is the
+ same as "\(foo\)\@=..". But using "\&" is easier, you don't need the
+ braces.
+
+
+ */\@!*
+\@! Matches with zero width if the preceding atom does NOT match at the
+ current position. |/zero-width| {not in Vi}
+ 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"
+ 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 "."
+ can match a "p" and "p\@!" doesn't match after that.
+
+ You can't use "\@!" to look for a non-match before the matching
+ position: "\(foo\)\@!bar" will match "bar" in "foobar", because at the
+ position where "bar" matches, "foo" does not match. To avoid matching
+ "foobar" you could use "\(foo\)\@!...bar", but that doesn't match a
+ bar at the start of a line. Use "\(foo\)\@<!bar".
+
+ */\@<=*
+\@<= 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.
+ 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
+
+ "\@<=" and "\@<!" check for matches just before what follows.
+ Theoretically these matches could start anywhere before this position.
+ But to limit the time needed, only the line where what follows matches
+ is searched, and one line before that (if there is one). This should
+ be sufficient to match most things and not be too slow.
+ The part of the pattern after "\@<=" and "\@<!" are checked for a
+ match first, thus things like "\1" don't work to reference \(\) inside
+ the preceding atom. It does work the other way around:
+ Example matches ~
+ \1\@<=,\([a-z]\+\) ",abc" in "abc,abc"
+
+ */\@<!*
+\@<! 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.
+ 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).
+ Example matches ~
+ \(foo\)\@<!bar any "bar" that's not in "foobar"
+ \(\/\/.*\)\@\<!in "in" which is not after "//"
+
+ */\@>*
+\@> Matches the preceding atom like matching a whole pattern. {not in Vi}
+ Like '(?>pattern)" in Perl.
+ Example matches ~
+ \(a*\)\@>a nothing (the "a*" takes all the "a"'s, there can't be
+ another one following)
+
+ This matches the preceding atom as if it was a pattern by itself. If
+ it doesn't match, there is no retry with shorter sub-matches or
+ anything. Observe this difference: "a*b" and "a*ab" both match
+ "aaab", but in the second case the "a*" matches only the first two
+ "a"s. "\(a*\)\@>ab" will not match "aaab", because the "a*" matches
+ the "aaa" (as many "a"s as possible), thus the "ab" can't match.
+
+
+==============================================================================
+6. Ordinary atoms *pattern-atoms*
+
+An ordinary atom can be:
+
+ */^*
+^ At beginning of pattern or after "\|", "\(", "\%(" or "\n": matches
+ start-of-line; at other positions, matches literal '^'. |/zero-width|
+ Example matches ~
+ ^beep( the start of the C function "beep" (probably).
+
+ */\^*
+\^ Matches literal '^'. Can be used at any position in the pattern.
+
+ */\_^*
+\_^ Matches start-of-line. |/zero-width| Can be used at any position in
+ the pattern.
+ Example matches ~
+ \_s*\_^foo white space and blank lines and then "foo" at
+ start-of-line
+
+ */$*
+$ At end of pattern or in front of "\|" or "\)" ("|" or ")" after "\v"):
+ matches end-of-line <EOL>; at other positions, matches literal '$'.
+ |/zero-width|
+
+ */\$*
+\$ Matches literal '$'. Can be used at any position in the pattern.
+
+ */\_$*
+\_$ Matches end-of-line. |/zero-width| Can be used at any position in the
+ pattern. Note that "a\_$b" never matches, since "b" cannot match an
+ end-of-line. Use "a\nb" instead |/\n|.
+ Example matches ~
+ foo\_$\_s* "foo" at end-of-line and following white space and
+ blank lines
+
+. (with 'nomagic': \.) */.* */\.*
+ Matches any single character, but not an end-of-line.
+
+ */\_.*
+\_. Matches any single character or end-of-line.
+ Careful: "\_.*" matches all text to the end of the buffer!
+
+ */\<*
+\< Matches the beginning of a word: The next char is the first char of a
+ word. The 'iskeyword' option specifies what is a word character.
+ |/zero-width|
+
+ */\>*
+\> Matches the end of a word: The previous char is the last char of a
+ word. The 'iskeyword' option specifies what is a word character.
+ |/zero-width|
+
+ */\zs*
+\zs Matches at any position, and sets the start of the match there: The
+ next char is the first char of the whole match. |/zero-width|
+ Example: >
+ /^\s*\zsif
+< matches an "if" at the start of a line, ignoring white space.
+ Can be used multiple times, the last one encountered in a matching
+ branch is used. Example: >
+ /\(.\{-}\zsFab\)\{3}
+< Finds the third occurrence of "Fab".
+ {not in Vi} {not available when compiled without the +syntax feature}
+ */\ze*
+\ze Matches at any position, and sets the end of the match there: The
+ previous char is the last char of the whole match. |/zero-width|
+ Can be used multiple times, the last one encountered in a matching
+ branch is used.
+ Example: "end\ze\(if\|for\)" matches the "end" in "endif" and
+ "endfor".
+ {not in Vi} {not available when compiled without the +syntax feature}
+
+ */\%^* *start-of-file*
+\%^ Matches start of the file. When matching with a string, matches the
+ start of the string. {not in Vi}
+ For example, to find the first "VIM" in a file: >
+ /\%^\_.\{-}\zsVIM
+<
+ */\%$* *end-of-file*
+\%$ Matches end of the file. When matching with a string, matches the
+ end of the string. {not in Vi}
+ Note that this does NOT find the last "VIM" in a file: >
+ /VIM\_.\{-}\%$
+< It will find the next VIM, because the part after it will always
+ match. This one will find the last "VIM" in the file: >
+ /VIM\ze\(\(VIM\)\@!\_.\)*\%$
+< This uses |/\@!| to ascertain that "VIM" does NOT match in any
+ position after the first "VIM".
+ Searching from the end of the file backwards is easier!
+
+ */\%#* *cursor-position*
+\%# Matches with the cursor position. Only works when matching in a
+ buffer displayed in a window. {not in Vi}
+ WARNING: When the cursor is moved after the pattern was used, the
+ result becomes invalid. Vim doesn't automatically update the matches.
+ This is especially relevant for syntax highlighting and 'hlsearch'.
+ In other words: When the cursor moves the display isn't updated for
+ this change. An update is done for lines which are changed (the whole
+ line is updated) or when using the |CTRL-L| command (the whole screen
+ is updated). Example, to highlight the word under the cursor: >
+ /\k*\%#\k*
+< When 'hlsearch' is set and you move the cursor around and make changes
+ this will clearly show when the match is updated or not.
+
+ */\%l* */\%>l* */\%<l*
+\%23l Matches in a specific line.
+\%<23l Matches above a specific line.
+\%>23l Matches below a specific line.
+ These three can be used to match specific lines in a buffer. The "23"
+ can be any line number. The first line is 1. {not in Vi}
+ WARNING: When inserting or deleting lines Vim does not automatically
+ update the matches. This means Syntax highlighting quickly becomes
+ wrong.
+ Example, to highlight the line where the cursor currently is: >
+ :exe '/\%' . line(".") . 'l.*'
+< When 'hlsearch' is set and you move the cursor around and make changes
+ this will clearly show when the match is updated or not.
+
+ */\%c* */\%>c* */\%<c*
+\%23c Matches in a specific column.
+\%<23c Matches before a specific column.
+\%>23c Matches after a specific column.
+ These three can be used to match specific columns in a buffer or
+ string. The "23" can be any column number. The first column is 1.
+ Actually, the column is the byte number (thus it's not exactly right
+ for multi-byte characters). {not in Vi}
+ WARNING: When inserting or deleting text Vim does not automatically
+ update the matches. This means Syntax highlighting quickly becomes
+ wrong.
+ Example, to highlight the column where the cursor currently is: >
+ :exe '/\%' . col(".") . 'c'
+< When 'hlsearch' is set and you move the cursor around and make changes
+ this will clearly show when the match is updated or not.
+ Example for matching a single byte in column 44: >
+ /\%>43c.\%<46c
+< Note that "\%<46c" matches in column 45 when the "." matches a byte in
+ column 44.
+ */\%v* */\%>v* */\%<v*
+\%23v Matches in a specific virtual column.
+\%<23v Matches before a specific virtual column.
+\%>23v Matches after a specific virtual column.
+ These three can be used to match specific virtual columns in a buffer
+ or string. When not matching with a buffer in a window, the option
+ values of the current window are used (e.g., 'tabstop').
+ The "23" can be any column number. The first column is 1.
+ Note that some virtual column positions will never match, because they
+ are halfway a Tab or other character that occupies more than one
+ screen character. {not in Vi}
+ WARNING: When inserting or deleting text Vim does not automatically
+ update the matches. This means Syntax highlighting quickly becomes
+ wrong.
+ Example, to highlight the all characters after virtual column 72: >
+ /\%>72v.*
+< When 'hlsearch' is set and you move the cursor around and make changes
+ this will clearly show when the match is updated or not.
+ To match the text up to column 17: >
+ /.*\%17v
+< Column 17 is not included, because that's where the "\%17v" matches,
+ and since this is a |/zero-width| match, column 17 isn't included in
+ the match. This does the same: >
+ /.*\%<18v
+<
+
+Character classes: {not in Vi}
+\i identifier character (see 'isident' option) */\i*
+\I like "\i", but excluding digits */\I*
+\k keyword character (see 'iskeyword' option) */\k*
+\K like "\k", but excluding digits */\K*
+\f file name character (see 'isfname' option) */\f*
+\F like "\f", but excluding digits */\F*
+\p printable character (see 'isprint' option) */\p*
+\P like "\p", but excluding digits */\P*
+
+NOTE: the above also work for multi-byte characters. The ones below only
+match ASCII characters, as indicated by the range.
+
+ *whitespace* *white-space*
+\s whitespace character: <Space> and <Tab> */\s*
+\S non-whitespace character; opposite of \s */\S*
+\d digit: [0-9] */\d*
+\D non-digit: [^0-9] */\D*
+\x hex digit: [0-9A-Fa-f] */\x*
+\X non-hex digit: [^0-9A-Fa-f] */\X*
+\o octal digit: [0-7] */\o*
+\O non-octal digit: [^0-7] */\O*
+\w word character: [0-9A-Za-z_] */\w*
+\W non-word character: [^0-9A-Za-z_] */\W*
+\h head of word character: [A-Za-z_] */\h*
+\H non-head of word character: [^A-Za-z_] */\H*
+\a alphabetic character: [A-Za-z] */\a*
+\A non-alphabetic character: [^A-Za-z] */\A*
+\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*
+
+ NOTE: Using the atom is faster than the [] form.
+
+ NOTE: 'ignorecase', "\c" and "\C" are not used by character classes.
+
+ */\_* *E63* */\_i* */\_I* */\_k* */\_K* */\_f* */\_F*
+ */\_p* */\_P* */\_s* */\_S* */\_d* */\_D* */\_x* */\_X*
+ */\_o* */\_O* */\_w* */\_W* */\_h* */\_H* */\_a* */\_A*
+ */\_l* */\_L* */\_u* */\_U*
+\_x Where "x" is any of the characters above: The character class with
+ end-of-line added
+(end of character classes)
+
+\e matches <Esc> */\e*
+\t matches <Tab> */\t*
+\r matches <CR> */\r*
+\b matches <BS> */\b*
+\n matches an end-of-line */\n*
+ When matching in a string instead of buffer text a literal newline
+ character is matched.
+
+~ 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*
+
+\1 Matches the same string that was matched by */\1* *E65*
+ the first sub-expression in \( and \). {not in Vi}
+ Example: "\([a-z]\).\1" matches "ata", "ehe", "tot", etc.
+\2 Like "\1", but uses second sub-expression, */\2*
+ ... */\3*
+\9 Like "\1", but uses ninth sub-expression. */\9*
+ Note: The numbering of groups is done based on which "\(" comes first
+ in the pattern (going left to right), NOT based on what is matched
+ first.
+
+\%(\) A pattern enclosed by escaped parentheses. */\%(\)* */\%(* *E53*
+ Just like \(\), but without counting it as a sub-expression. This
+ allows using more groups and it's a little bit faster.
+ {not in Vi}
+
+x A single character, with no special meaning, matches itself
+
+ */\* */\\*
+\x A backslash followed by a single character, with no special meaning,
+ is reserved for future expansions
+
+[] (with 'nomagic': \[]) */[]* */\[]* */\_[]* */collection*
+\_[]
+ A collection. This is a sequence of characters enclosed in brackets.
+ It matches any single character in the collection.
+ Example matches ~
+ [xyz] any 'x', 'y' or 'z'
+ [a-zA-Z]$ any alphabetic character at the end of a line
+ \c[a-z]$ same
+
+ With "\_" prepended the collection also includes the end-of-line.
+ The same can be done by including "\n" in the collection. The
+ end-of-line is also matched when the collection starts with "^"! Thus
+ "\_[^ab]" matches the end-of-line and any character but "a" and "b".
+ This makes it Vi compatible: Without the "\_" or "\n" the collection
+ does not match an end-of-line.
+
+ If the sequence begins with "^", it matches any single character NOT
+ in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'.
+ - If two characters in the sequence are separated by '-', this is
+ shorthand for the full list of ASCII characters between them. E.g.,
+ "[0-9]" matches any decimal digit.
+ - A character class expression is evaluated to the set of characters
+ belonging to that character class. The following character classes
+ are supported:
+ Name Contents ~
+*[:alnum:]* [:alnum:] letters and digits
+*[:alpha:]* [:alpha:] letters
+*[:blank:]* [:blank:] space and tab characters
+*[:cntrl:]* [:cntrl:] control characters
+*[:digit:]* [:digit:] decimal digits
+*[:graph:]* [:graph:] printable characters excluding space
+*[:lower:]* [:lower:] lowercase letters (all letters when
+ 'ignorecase' is used)
+*[:print:]* [:print:] printable characters including space
+*[:punct:]* [:punct:] punctuation characters
+*[:space:]* [:space:] whitespace characters
+*[:upper:]* [:upper:] uppercase letters (all letters when
+ 'ignorecase' is used)
+*[:xdigit:]* [:xdigit:] hexadecimal digits
+*[:return:]* [:return:] the <CR> character
+*[:tab:]* [:tab:] the <Tab> character
+*[:escape:]* [:escape:] the <Esc> character
+*[:backspace:]* [:backspace:] the <BS> character
+ The brackets in character class expressions are additional to the
+ brackets delimiting a collection. For example, the following is a
+ plausible pattern for a UNIX filename: "[-./[:alnum:]_~]\+" That is,
+ a list of at least one character, each of which is either '-', '.',
+ '/', alphabetic, numeric, '_' or '~'.
+ These items only work for 8-bit characters.
+ */\]*
+ - To include a literal ']', '^', '-' or '\' in the collection, put a
+ backslash before it: "[xyz\]]", "[\^xyz]", "[xy\-z]" and "[xyz\\]".
+ (Note: POSIX does not support the use of a backslash this way). For
+ ']' you can also make it the first character (following a possible
+ "^"): "[]xyz]" or "[^]xyz]" {not in Vi}.
+ For '-' you can also make it the first or last character: "[-xyz]",
+ "[^-xyz]" or "[xyz-]". For '\' you can also let it be followed by
+ any character that's not in "^]-\bertn". "[\xyz]" matches '\', 'x',
+ 'y' and 'z'. It's better to use "\\" though, future expansions may
+ use other characters after '\'.
+ - The following translations are accepted when the 'l' flag is not
+ included in 'cpoptions' {not in Vi}:
+ \e <Esc>
+ \t <Tab>
+ \r <CR> (NOT end-of-line!)
+ \b <BS>
+ NOTE: The other backslash codes mentioned above do not work inside
+ []!
+ - Matching with a collection can be slow, because each character in
+ the text has to be compared with each character in the collection.
+ Use one of the other atoms above when possible. Example: "\d" is
+ much faster than "[0-9]" and matches the same characters.
+
+ */\%[]* *E69* *E70* *E369*
+\%[] A list of optionally matched atoms. This always matches.
+ It matches as much of the list of atoms it contains as possible. Thus
+ it stops at the first atom that doesn't match. For example: >
+ /r\%[ead]
+< matches "r", "re", "rea" or "read". The longest that matches is used.
+ To match the Ex command "function", where "fu" is required and
+ "nction" is optional, this would work: >
+ /\<fu\%[nction]\>
+< The end-of-word atom "\>" is used to avoid matching "fu" in "full".
+ It gets more complicated when the atoms are not ordinary characters.
+ You don't often have to use it, but it is possible. Example: >
+ /\<r\%[[eo]ad]\>
+< Matches the words "r", "re", "ro", "rea", "roa", "read" and "road".
+ {not available when compiled without the +syntax feature}
+
+
+==============================================================================
+7. Ignoring case in a pattern */ignorecase*
+
+If the 'ignorecase' option is on, the case of normal letters is ignored.
+'smartcase' can be set to ignore case when the pattern contains lowercase
+letters only.
+ */\c* */\C*
+When "\c" appears anywhere in the pattern, the whole pattern is handled like
+'ignorecase' is on. The actual value of 'ignorecase' and 'smartcase' is
+ignored. "\C" does the opposite: Force matching case for the whole pattern.
+{only Vim supports \c and \C}
+Note that 'ignorecase', "\c" and "\C" are not used for the character classes.
+
+Examples:
+ pattern 'ignorecase' 'smartcase' matches ~
+ foo off - foo
+ foo on - foo Foo FOO
+ Foo on off foo Foo FOO
+ Foo on on Foo
+ \cfoo - - foo Foo FOO
+ foo\C - - foo
+
+ */\Z*
+When "\Z" appears anywhere in the pattern, composing characters are ignored.
+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".
+
+Technical detail: *NL-used-for-Nul*
+<Nul> characters in the file are stored as <NL> in memory. In the display
+they are shown as "^@". The translation is done when reading and writing
+files. To match a <Nul> with a search pattern you can just enter CTRL-@ or
+"CTRL-V 000". This is probably just what you expect. Internally the
+character is replaced with a <NL> in the search pattern. What is unusual is
+that typing CTRL-V CTRL-J also inserts a <NL>, thus also searches for a <Nul>
+in the file. {Vi cannot handle <Nul> characters in the file at all}
+
+ *CR-used-for-NL*
+When 'fileformat' is "mac", <NL> characters in the file are stored as <CR>
+characters internally. In the display they are shown as "^M". Otherwise this
+works similar to the usage of <NL> for a <Nul>.
+
+When working with expression evaluation, a <NL> character in the pattern
+matches a <NL> in the string. The use of "\n" (backslash n) to match a <NL>
+doesn't work there, it only works to match text in the buffer.
+
+ *pattern-multi-byte*
+Patterns will also work with multi-byte characters, mostly as you would
+expect. But invalid bytes may cause trouble, a pattern with an invalid byte
+will probably never match.
+
+==============================================================================
+8. Compare with Perl patterns *perl-patterns*
+
+Vim's regexes are most similar to Perl's, in terms of what you can do. The
+difference between them is mostly just notation; here's a summary of where
+they differ:
+
+Capability in Vimspeak in Perlspeak ~
+----------------------------------------------------------------
+force case insensitivity \c (?i)
+force case sensitivity \C (?-i)
+backref-less grouping \%(atom) (?:atom)
+conservative quantifiers \{-n,m} *?, +?, ??, {}?
+0-width match atom\@= (?=atom)
+0-width non-match atom\@! (?!atom)
+0-width preceding match atom\@<= (?<=atom)
+0-width preceding non-match atom\@<! (?<!atom)
+match without retry atom\@> (?>atom)
+
+Vim and Perl handle newline characters inside a string a bit differently:
+
+In Perl, ^ and $ only match at the very beginning and end of the text,
+by default, but you can set the 'm' flag, which lets them match at
+embedded newlines as well. You can also set the 's' flag, which causes
+a . to match newlines as well. (Both these flags can be changed inside
+a pattern using the same syntax used for the i flag above, BTW.)
+
+On the other hand, Vim's ^ and $ always match at embedded newlines, and
+you get two separate atoms, \%^ and \%$, which only match at the very
+start and end of the text, respectively. Vim solves the second problem
+by giving you the \_ "modifier": put it in front of a . or a character
+class, and they will match newlines as well.
+
+Finally, these constructs are unique to Perl:
+- execution of arbitrary code in the regex: (?{perl code})
+- conditional expressions: (?(condition)true-expr|false-expr)
+
+...and these are unique to Vim:
+- changing the magic-ness of a pattern: \v \V \m \M
+ (very useful for avoiding backslashitis)
+- sequence of optionally matching atoms: \%[atoms]
+- \& (which is to \| what "and" is to "or"; it forces several branches
+ to match at one spot)
+- matching lines/columns by number: \%5l \%5c \%5v
+- limiting the "return value" of a regex: \zs \ze
+
+==============================================================================
+9. Highlighting matches *match-highlight*
+
+ *:mat* *:match*
+:mat[ch] {group} /{pattern}/
+ Define a pattern to highlight in the current window. It will
+ be highlighted with {group}. Example: >
+ :highlight MyGroup ctermbg=green guibg=green
+ :match MyGroup /TODO/
+< Instead of // any character can be used to mark the start and
+ end of the {pattern}. Watch out for using special characters,
+ such as '"' and '|'.
+ {group} must exist at the moment this command is executed.
+ The match overrides the 'hlsearch' highlighting.
+ 'ignorecase' does not apply, use |/\c| in the pattern to
+ ignore case. Otherwise case is not ignored.
+ Note that highlighting the last used search pattern with
+ 'hlsearch' is used in all windows, while the pattern defined
+ with ":match" only exists in the current window. It is kept
+ when switching to another buffer.
+ Another example, which highlights all characters in virtual
+ column 72 and more: >
+ :highlight rightMargin term=bold ctermfg=blue guifg=blue
+ :match rightMargin /.\%>72v/
+< To highlight all character that are in virtual column 7: >
+ :highlight col8 ctermbg=grey guibg=grey
+ :match col8 /\%<8v.\%>7v/
+< Note the use of two items to also match a character that
+ occupies more than one virtual column, such as a TAB.
+
+:mat[ch]
+:mat[ch] none
+ Clear a previously defined match pattern.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/pi_expl.txt b/runtime/doc/pi_expl.txt
new file mode 100644
index 000000000..4c962ffc8
--- /dev/null
+++ b/runtime/doc/pi_expl.txt
@@ -0,0 +1,215 @@
+*pi_expl.txt* For Vim version 7.0aa. Last change: 2002 Nov 08
+
+
+ VIM REFERENCE MANUAL by M A Aziz Ahmed
+ updated by Mark Waggoner
+
+
+ *file-explorer* *file-browser*
+Plugin for exploring (or browsing) directories and files
+
+1. Starting the file explorer |expl-starting|
+
+The functionality mentioned here is a |standard-plugin|.
+This plugin is only available if 'compatible' is not set.
+You can avoid loading this plugin by setting the "loaded_explorer" variable: >
+ :let loaded_explorer = 1
+
+{Vi does not have any of this}
+
+==============================================================================
+1. Starting the file explorer *expl-starting*
+
+This plugin is used to explore directories inside Vim. The file explorer is
+launched whenever the user tries to edit a directory.
+ *:Explore* *:Sexplore*
+To launch the explorer in the directory of the file currently edited: >
+ :Explore
+If the file has changes the window is split. To always split the window: >
+ :Sexplore
+To launch the explorer in a specific directory: >
+ :Explore dirname
+ :Sexplore dirname
+
+From inside the explorer move your cursor to a line containing a file or
+directory name. The following command keys are available:
+
+ <enter> will open the file in the window the explorer is currently
+ occupying.
+ 'o' will split a new window and open the file in the new window.
+ 'O' will open the file chosen using the window that the cursor was in just
+ before you started or entered the explorer window. If the explorer is
+ the only window, it will first split a new window to use for the file to
+ be opened.
+ 'p' will open (or use) the preview window showing the file
+ 'x' will execute the file with the system tools. Only when supported
+ (currently MS-Windows and KDE).
+
+When splitting off a new window, you can control where the split window will
+go relative to the explorer window using the variables g:explVertical,
+g:explSplitBelow and g:explSplitRight.
+
+ *g:explVertical*
+ *g:explSplitBelow*
+ *g:explSplitRight*
+ *g:explStartBelow*
+ *g:explStartRight*
+To control whether the split is made horizontally or vertically, use: >
+ let g:explVertical=1 " Split vertically
+ let g:explVertical=0 " Split horizontally (default)
+
+To control where the window goes relative to the explorer window when
+splitting horizontally, use the variable: >
+ let g:explSplitBelow=1 " Put new window below explorer window
+ let g:explSplitBelow=0 " Put new window above explorer window
+The default for this is the setting of splitbelow at the time the plugin is
+loaded.
+
+To control where the windows goes relative to the explorer window when
+splitting vertically, use the variable: >
+ let g:explSplitRight=1 " Put new window to the right of the explorer
+ let g:explSplitRight=0 " Put new window to the left of the explorer
+The default for this is the setting of splitright at the time the plugin is
+loaded.
+
+To use a different split method for the explorer window, use: >
+ let g:explStartRight=1 " Put new explorer window to the right of the
+ " current window
+ let g:explStartRight=0 " Put new explorer window to the left of the
+ " current window
+The default for this set to g:explSplitRight at the time the plugin is loaded.
+
+To use a different split method for the explorer window, use: >
+ let g:explStartBelow=1 " Put new explorer window below the
+ " current window
+ let g:explStartBelow=0 " Put new explorer window above the
+ " current window
+The default for this set to g:explSplitBelow at the time the plugin is loaded.
+
+The start splits allow for the explorer window to be placed in a file browser
+type arrangement, where the directories are shown on the left and the contents
+opened on the right. The start split settings are only used when issuing
+the Sexplore command.
+
+Note that the window split is done a little bit differently than window splits
+are usually done. Ordinarily, when splitting a window, the space occupied by
+the current window will be split to give space for the new window. The
+explorer attempts to instead split from a window adjacent to the explorer
+window so that the explorer window will not change sizes. If there is not an
+adjacent window in the direction you are splitting, the explorer window is
+split.
+
+ *g:explWinSize*
+After opening a file with the 'o' command, you might want to resize the
+explorer window. This can be done by setting the variable >
+ let g:explWinSize=N
+N is the number of rows (when the window is split horizontally) or the number
+of columns (when the window is split vertically). If g:explWinSize is set to
+an empty string (""), resizing will not be done. g:explWinSize defaults to
+15.
+
+ *g:explDetailedList*
+The file size (in bytes) and modification time can be displayed inside the
+file explorer window. By pressing 'i', you can toggle between the name only
+display and the more lengthy display. If you want the size and date to show
+by default, use >
+ let g:explDetailedList=1
+Doing this may slightly slow down explorer. The difference may or may not be
+noticeable depending on your system and whether the directory is local or on
+the network and on the size of the directory.
+
+ *g:explDateFormat*
+The format of date displayed is configurable using the variable
+g:explDateFormat. explorer uses this variable to pass to strftime() to fetch
+the date information. |strftime()| The default is >
+ let g:explDateFormat="%d %b %Y %H:%M"
+
+Note that for sorting purposes, the date is always placed at the end of the
+line in its 'raw' form. If you have syntax highlighting turned on, this raw
+date should be invisible.
+
+ *g:explHideFiles*
+You can hide some files by filling the variable g:explHidFiles with regular
+expressions. A filename that matches any of these regular expressions will not
+be shown. For example, >
+
+ let g:explHideFiles='^\.,\.gz$,\.exe$,\.zip$'
+
+will not show files that begin with "." and those that end in .gz, .exe or
+.zip. However, all directory names will always be shown. If while exploring,
+you'd like to see the hidden files as well, use the command "a".
+The explorer header will indicate if filtering is being done.
+
+ *g:explDetailedHelp*
+The help information spanning a few lines can be turned off (and just a single
+help message enabled) using the option >
+ let g:explDetailedHelp=0
+You can anytime switch to the detailed help format by pressing ?.
+
+ *explorer-delete*
+Pressing 'D' inside explorer deletes the file under the cursor. You can delete
+many files by visually selecting them and using 'D'. The deletion is
+interactive in the form y/n/a/q. Directory deletion is not supported (mainly
+because there is no way to delete a directory using a vim built-in function).
+
+ *explorer-rename*
+Pressing 'R' inside explorer will allow you to rename the file under the
+cursor.
+
+ *g:explSortBy*
+The display in the file explorer can be sorted in forward or reverse order by
+name, size, or modification date. You can set the default sorting direction
+with the option >
+ let g:explSortBy='name' " alphabetically
+ let g:explSortBy='reverse name' " reverse alphabetically
+ let g:explSortBy='date' " newest first
+ let g:explSortBy='reverse date' " oldest first
+ let g:explSortBy='size' " largest first
+ let g:explSortBy='reverse size' " smallest first
+While in the explorer, you can rotate through the sort fields by pressing the
+'s' key and you can reverse the current sort order by pressing the 'r' key.
+Sorting on fields other than the name will be faster if the size and date are
+displayed (using 'i' or g:explDetailedList).
+The explorer heading will indicate the current sort order.
+
+ *g:explDirsFirst*
+To control the segregation of directories and files, you can set this option >
+ let g:explDirsFirst=1 " Directories at the top of the list (default)
+ let g:explDirsFirst=0 " Directories mixed in with files
+ let g:explDirsFirst=-1 " Directories at the bottom of the list
+
+ *g:explSuffixesLast*
+To control the segregation of files matching the suffixes option, you can set
+this option >
+ let g:explSuffixesLast=1 " Files matching suffixes sorted at the bottom
+ " of the list (default)
+ let g:explSuffixesLast=0 " Files matching suffixes sorted normally
+ let g:explSuffixesLast=-1 " Files matching suffixes sorted at the top of
+ " the list
+The heading will indicate if suffixes have been moved to the end (or start) of
+the list.
+
+ *g:explUseSeparators*
+Directories and files matching the suffixes list will be highlighted. If you
+have the directories, files, and suffixes separated, and you would like a
+separator line between the groups, you can set the option >
+ let g:explUseSeparators=1 " Use separator lines
+ let g:explUseSeparators=0 " Don't use separator lines
+<
+ *g:explFileHandler*
+If you set the "g:explFileHandler" variable to the name of a function, typing
+'x' will call this function. The file or directory under the cursor will be
+passed as an argument to the function. Suppose you have KDE, you could use
+this: >
+
+ function MyFileHandler(fn)
+ exec "silent! !kfmclient exec " . escape(a:fn,' \%#')
+ endfunction
+ let g:explFileHandler = 'MyFileHandler'
+
+For Win32 the variable is set by default to invoke the execute action. If you
+type 'x' on a HTML file, Microsoft Internet Explorer will start (or whatever
+application you have associated with HTML files).
+
+==============================================================================
+ vim:tw=78:noet:ts=8:ft=help:norl:
diff --git a/runtime/doc/pi_gzip.txt b/runtime/doc/pi_gzip.txt
new file mode 100644
index 000000000..19ecdc430
--- /dev/null
+++ b/runtime/doc/pi_gzip.txt
@@ -0,0 +1,39 @@
+*pi_gzip.txt* For Vim version 7.0aa. Last change: 2002 Oct 29
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Editing compressed files with Vim *gzip* *bzip2* *compress*
+
+1. Autocommands |gzip-autocmd|
+
+The functionality mentioned here is a |standard-plugin|.
+This plugin is only available if 'compatible' is not set.
+You can avoid loading this plugin by setting the "loaded_gzip" variable: >
+ :let loaded_gzip = 1
+
+{Vi does not have any of this}
+
+==============================================================================
+1. Autocommands *gzip-autocmd*
+
+The plugin installs autocommands to intercept reading and writing of files
+with these extensions:
+
+ extension compression ~
+ *.Z compress (Lempel-Ziv)
+ *.gz gzip
+ *.bz2 bzip2
+
+That's actually the only thing you need to know. There are no options.
+
+After decompressing a file, the filetype will be detected again. This will
+make a file like "foo.c.gz" get the "c" filetype.
+
+If you have 'patchmode' set, it will be appended after the extension for
+compression. Thus editing the patchmode file will not give you the automatic
+decompression. You have to rename the file if you want this.
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
new file mode 100644
index 000000000..abfa8ce2f
--- /dev/null
+++ b/runtime/doc/pi_netrw.txt
@@ -0,0 +1,543 @@
+*pi_netrw.txt* For Vim version 7.0aa. Last change: Apr 21, 2004
+
+
+ VIM REFERENCE MANUAL by Charles E. Campbell, Jr.
+
+*dav* *http* *network* *rcp* *scp*
+*fetch* *netrw* *Nread* *rsync* *sftp*
+*ftp* *netrw.vim* *Nwrite* *netrw-file*
+
+==============================================================================
+0. Contents *netrw-contents*
+
+1. Netrw Reference.....................................|netrw-ref|
+2. Network-Oriented File Transfer......................|netrw-xfer|
+3. Activation..........................................|netrw-activate|
+4. Transparent File Transfer...........................|netrw-transparent|
+5. Ex Commands.........................................|netrw-ex|
+6. Variables and Options...............................|netrw-var|
+7. Debugging...........................................|netrw-debug|
+8. New Stuff...........................................|netrw-new|
+9. Credits.............................................|netrw-credits|
+
+The functionality mentioned here is done via using |standard-plugin|
+techniques. This plugin is only available if
+
+ set nocp " 'compatible' is not set
+ filetype plugin on " plugins are enabled
+
+You can avoid loading this plugin by setting the "loaded_netrw" variable
+in your <.vimrc> file: >
+
+ :let loaded_netrw = 1
+
+{Vi does not have any of this}
+
+==============================================================================
+1. Netrw Reference *netrw-ref*
+
+ OPTIONS
+ let g:netrw_ftp =0 use ftp (default) (uid password)
+ =1 use alternate ftp method (user uid password)
+ If you're having trouble with ftp, try changing the value
+ of this variable in your <.vimrc> to change methods
+
+ let g:netrw_ignorenetrc= 1
+ If you have a <.netrc> file but it doesn't work and you
+ want it ignored, then set this variable as shown. Its mere
+ existence is enough to cause <.netrc> to be ignored.
+
+ Controlling External Applications
+
+ Protocol Variable Default Value
+ -------- ---------------- -------------
+ dav: g:netrw_dav_cmd = "cadaver"
+ fetch: g:netrw_fetch_cmd = "fetch -o"
+ ftp: g:netrw_ftp_cmd = "ftp"
+ http: g:netrw_http_cmd = "fetch -o" else if fetch is available
+ http: g:netrw_http_cmd = "wget -q -O" If wget 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"
+
+ READING
+ :Nread ? give help
+ :Nread "machine:file" uses rcp
+ :Nread "machine file" uses ftp with <.netrc>
+ :Nread "machine id password file" uses ftp
+ :Nread "dav://machine[:port]/file" uses cadaver
+ :Nread "fetch://[user@]machine/file" uses fetch
+ :Nread "ftp://[user@]machine[[:#]port]/file" uses ftp autodetects <.netrc>
+ :Nread "http://[user@]machine/file" uses http uses wget
+ :Nread "rcp://[user@]machine/file" uses rcp
+ :Nread "rsync://[user@]machine[:port]/file" uses rsync
+ :Nread "scp://[user@]machine[[:#]port]/file" uses scp
+ :Nread "sftp://[user@]machine/file" uses sftp
+
+ WRITING
+ :Nwrite ? give help
+ :Nwrite "machine:file" uses rcp
+ :Nwrite "machine file" uses ftp with <.netrc>
+ :Nwrite "machine id password file" uses ftp
+ :Nwrite "dav://machine[:port]/file" uses cadaver
+ :Nwrite "ftp://[user@]machine[[:#]port]/file" uses ftp autodetects <.netrc>
+ :Nwrite "rcp://[user@]machine/file" uses rcp
+ :Nwrite "rsync://[user@]machine[:port]/file" uses rsync
+ :Nwrite "scp://[user@]machine[[:#]port]/file" uses scp
+ :Nwrite "sftp://[user@]machine/file" uses sftp
+ http: not supported!
+
+ USER AND PASSWORD CHANGING
+ Attempts to use ftp will prompt you for a user-id and a password.
+ These will be saved in g:netrw_uid and g:netrw_passwd Subsequent uses
+ of ftp will re-use those. If you need to use a different user id
+ and/or password, you'll want to call NetUserPass() first.
+
+ :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
+
+ VARIABLES
+ b:netrw_lastfile last file Network-read/written retained on
+ a per-buffer basis (supports plain :Nw )
+ s:netrw_line during Nw/NetWrite, holds current line number
+ s:netrw_col during Nw/NetWrite, holds current column number
+ s:netrw_line and s:netrw_col are used to
+ restore the cursor position on writes
+ 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)
+ g:netrw_ftpmode ="binary" (default)
+ ="ascii" (or your choice)
+ g:netrw_uid (ftp) user-id, retained on a per-session basis
+ g:netrw_passwd (ftp) password, retained on a per-session basis
+ g:netrw_win95ftp =0 use unix-style ftp even if win95/win98/winME
+ =1 use default method to do ftp
+ g:netrw_cygwin =1 assume scp under windows is from cygwin
+ (default if windows)
+ =0 assume scp under windows accepts
+ windows-style paths (default otherwise)
+ g:netrw_use_nt_rcp=0 don't use the rcp of WinNT, Win2000 and WinXP (default)
+ =1 use the rcp of WinNT,... in binary mode
+
+
+==============================================================================
+2. Network-Oriented File Transfer *netrw-xfer*
+
+Network-oriented file transfer under Vim is implemented by a VimL-based script
+(<netrw.vim>) using plugin techniques. It currently supports both reading
+and writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
+dav/cadaver, rsync, or sftp.
+
+http is currently supported read-only via use of wget or fetch.
+
+<netrw.vim> is a standard plugin which acts as glue between Vim and the
+various file transfer programs. It uses autocommand events (BufReadCmd,
+FileReadCmd, BufWriteCmd) to intercept reads/writes with url-like filenames. >
+
+ ex. vim ftp://hostname/path/to/file
+<
+The characters preceding the colon specify the protocol to use;
+in the example, its ftp. The <netrw.vim> script then formulates
+a command or a series of commands (typically ftp) which it issues
+to an external program (ftp, scp, etc) which does the actual file
+transfer/protocol. Files are read from/written to a temporary file
+(under Unix/Linux, /tmp/...) which the <netrw.vim> script will
+clean up.
+
+One may modify any protocol's implementing external application
+by setting a variable (ex. scp uses the variable g:netrw_scp_cmd,
+which is defaulted to "scp -q").
+
+Ftp, an old protocol, seems to be blessed by numerous implementations.
+Unfortunately, some implementations are noisy (ie., add junk to the end
+of the file). Thus, concerned users may decide to write a NetReadFixup()
+function that will clean up after reading with their ftp. Some Unix systems
+(ie., FreeBSD) provide a utility called "fetch" which uses the ftp protocol
+but is not noisy and more convenient, actually, for <netrw.vim> to use.
+Consequently, if "fetch" is executable, it will be used to do reads for
+ftp://... (and http://...) . See |netrw-var| for more about this.
+
+For rcp, scp, sftp, and http, one may use network-oriented file transfers
+transparently; ie.
+>
+ vim rcp://[user@]machine/path
+ vim scp://[user@]machine/path
+<
+If your ftp supports <.netrc>, then it too can be just as transparently used
+if the needed triad of machine name, user id, and password are present in
+that file. Your ftp must be able to use the <.netrc> file on its own, however.
+>
+ vim ftp://[user@]machine[[:#]portnumber]/path
+<
+However, ftp will often 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
+transfers (read/write) to or from that machine will take place without
+additional prompting.
+
+ *netrw-urls*
+ +=================================+============================+============+
+ | Reading | Writing | Uses |
+ +=================================+============================+============+
+ | DAV: | | |
+ | dav://host/path | | cadaver |
+ | :Nread dav://host/path | :Nwrite dav://host/path | cadaver |
+ +---------------------------------+----------------------------+------------+
+ | FETCH: | | |
+ | fetch://[user@]host/path | | |
+ | fetch://[user@]host:http/path | Not Available | fetch |
+ | :Nread fetch://[user@]host/path| | |
+ +---------------------------------+----------------------------+------------+
+ | FILE: | | |
+ | file:///* | file:///* | |
+ | file://localhost/* | file://localhost/* | |
+ +---------------------------------+----------------------------+------------+
+ | FTP: (*3) | (*3) | |
+ | ftp://[user@]host/path | ftp://[user@]host/path | ftp (*2) |
+ | :Nread ftp://host/path | :Nwrite ftp://host/path | ftp+.netrc |
+ | :Nread host path | :Nwrite host path | ftp+.netrc |
+ | :Nread host uid pass path | :Nwrite host uid pass path | ftp |
+ +---------------------------------+----------------------------+------------+
+ | HTTP: wget is executable: (*4) | | |
+ | http://[user@]host/path | Not Available | wget |
+ +---------------------------------+----------------------------+------------+
+ | HTTP: fetch is executable (*4) | | |
+ | http://[user@]host/path | Not Available | fetch |
+ +---------------------------------+----------------------------+------------+
+ | RCP: | | |
+ | rcp://[user@]host/path | rcp://[user@]host/path | rcp |
+ +---------------------------------+----------------------------+------------+
+ | RSYNC: | | |
+ | rsync://[user@]host/path | rsync://[user@]host/path | rsync |
+ | :Nread rsync://host/path | :Nwrite rsync://host/path | rsync |
+ | :Nread rcp://host/path | :Nwrite rcp://host/path | rcp |
+ +---------------------------------+----------------------------+------------+
+ | SCP: | | |
+ | scp://[user@]host/path | scp://[user@]host/path | scp |
+ | :Nread scp://host/path | :Nwrite scp://host/path | scp (*1) |
+ +---------------------------------+----------------------------+------------+
+ | SFTP: | | |
+ | sftp://[user@]host/path | sftp://[user@]host/path | sftp |
+ | :Nread sftp://host/path | :Nwrite sftp://host/path | sftp (*1) |
+ +=================================+============================+============+
+
+ (*1) For an absolute path use scp://machine//path.
+
+ (*2) if <.netrc> is present, it is assumed that it will
+ work with your ftp client. Otherwise the script will
+ prompt for user-id and password.
+
+ (*3) for ftp, "machine" may be machine#port or machine:port
+ if a different port is needed than the standard ftp port
+
+ (*4) for http:..., if wget is available it will be used. Otherwise,
+ if fetch is available it will be used.
+
+Both the :Nread and the :Nwrite ex-commands can accept multiple filenames.
+
+
+NETRC *netrw-netrc*
+
+The typical syntax for lines in a <.netrc> file is given as shown below.
+Ftp under Unix usually support <.netrc>; Windows' ftp usually doesn't.
+>
+ machine {full machine name} login {user-id} password "{password}"
+ default login {user-id} password "{password}"
+
+Your ftp client must handle the use of <.netrc> on its own, but if the
+<.netrc> file exists, an ftp transfer will not ask for the user-id or
+password.
+
+ Note:
+ Since this file contains passwords, make very sure nobody else can
+ read this file! Most programs will refuse to use a .netrc that is
+ readable for others. Don't forget that the system administrator can
+ still read the file!
+
+
+PASSWORD *netrw-passwd*
+
+The script attempts to get passwords for ftp invisibly using |inputsecret()|,
+a built-in Vim function. See |netrw-uidpass| for how to change the password
+after one has set it.
+
+Unfortunately there doesn't appear to be a way for netrw to feed a password
+to scp. Thus every transfer via scp will require re-entry of the password.
+
+
+==============================================================================
+3. Activation *netrw-activate*
+
+Network-oriented file transfers are available by default whenever
+|'nocompatible'| mode is enabled. The <netrw.vim> file resides in your
+system's vim-plugin directory and is sourced automatically whenever you
+bring up vim.
+
+
+==============================================================================
+4. Transparent File Transfer *netrw-transparent*
+
+Transparent file transfers occur whenever a regular file read or write
+(invoked via an |:autocmd| for |BufReadCmd| or |BufWriteCmd| events) is made.
+Thus one may use files across networks as if they were local. >
+
+ vim ftp://[user@]machine/path
+ ...
+ :wq
+
+
+==============================================================================
+5. Ex Commands *netrw-ex*
+
+The usual read/write commands are supported. There are also a couple of
+additional commands available.
+
+:[range]Nw Write the specified lines to the current
+ file as specified in b:netrw_lastfile.
+
+:[range]Nw {netfile} [{netfile}]...
+ Write the specified lines to the {netfile}.
+
+:Nread
+ Read the specified lines into the current
+ buffer from the file specified in
+ b:netrw_lastfile.
+
+:Nread {netfile} {netfile}...
+ Read the {netfile} after the current line.
+
+ *netrw-uidpass*
+:call NetUserPass()
+ If b:netrw_uid and b:netrw_passwd don't exist,
+ this function query the user for them.
+
+:call NetUserPass("userid")
+ This call will set the b:netrw_uid and, if
+ the password doesn't exist, will query the user for it.
+
+:call NetUserPass("userid","passwd")
+ This call will set both the b:netrw_uid and b:netrw_passwd.
+ The user-id and password are used by ftp transfers. One may
+ effectively remove the user-id and password by using ""
+ strings.
+
+
+==============================================================================
+6. Variables and Options *netrw-options* *netrw-var*
+
+The script <netrw.vim> uses several variables which can affect <netrw.vim>'s
+behavior. These variables typically may be set in the user's <.vimrc> file:
+
+ g:netrw_uid Holds current user-id for ftp.
+ g:netrw_passwd Holds current password for ftp.
+ b:netrw_lastfile Holds latest method/machine/path.
+ b:netrw_line Holds current line number (during NetWrite)
+ b:netrw_col Holds current cursor position (during NetWrite)
+ g:netrw_ftp =0 use default ftp (uid password)
+ =1 use alternate ftp (user uid password)
+ (see |netrw-options|)
+ g:netrw_ftpmode ="binary" (default)
+ ="ascii" (your choice)
+ g:netrw_ignorenetrc =1 (default)
+ if you have a <.netrc> file but you don't
+ want it used, then set this variable. Its
+ mere existence is enough to cause <.netrc>
+ to be ignored.
+ g:netrw_win95ftp =0 use unix-style ftp even if win95/98/ME/etc
+ =1 use default method to do ftp
+ g:netrw_cygwin =1 assume scp under windows is from cygwin
+ (default/windows)
+ =0 assume scp under windows accepts windows
+ style paths (default/else)
+ g:netrw_use_nt_rcp =0 don't use WinNT/2K/XP's rcp (default)
+ =1 use WinNT/2K/XP's rcp, binary mode
+
+
+The script will also make use of the following variables internally, albeit
+temporarily.
+
+ g:netrw_method Index indicating rcp/ftp+.netrc/ftp
+ g:netrw_machine Holds machine name parsed from input
+ g:netrw_fname Holds filename being accessed
+
+ *netrw-protocol*
+>
+ ------------------------
+ Protocol Control Options
+ ------------------------
+ Option Type Setting Meaning ~
+ --------- -------- -------------- --------------------------- >
+ netrw_ftp variable =doesn't exist userid set by "user userid"
+ =0 userid set by "user userid"
+ =1 userid set by "userid"
+ NetReadFixup function =doesn't exist no change
+ =exists Allows user to have files
+ read via ftp automatically
+ transformed however they wish
+ by NetReadFixup()
+ g:netrw_dav_cmd variable ="cadaver"
+ g:netrw_fetch_cmd variable ="fetch -o"
+ g:netrw_ftp_cmd variable ="ftp"
+ g:netrw_http_cmd variable ="fetch -o" else if fetch is executable
+ g:netrw_http_cmd variable ="wget -O" if wget is executable
+ g:netrw_rcp_cmd variable ="rcp"
+ g:netrw_rsync_cmd variable ="rsync -a"
+ g:netrw_scp_cmd variable ="scp -q"
+ g:netrw_sftp_cmd variable ="sftp"
+<
+The first two options both help with certain ftp's that give trouble otherwise.
+In order to best understand how to use these options if ftp is giving you
+troubles, a bit of discussion follows on how netrw does ftp reads.
+
+The g:netrw_..._cmd variables specify the external program to use handle
+the associated protocol (rcp, ftp, etc), plus any options.
+
+Netrw typically builds up lines of one of the following formats in a
+temporary file:
+>
+ IF g:netrw_ftp !exists or is not 1 IF g:netrw_ftp exists and is 1
+ ---------------------------------- ------------------------------
+ open machine [port] open machine [port]
+ user userid password userid password
+ [g:netrw_ftpmode] password
+ get filename tempfile [g:netrw_ftpmode]
+ get filename tempfile
+<
+Netrw then executes the lines above by use of a filter:
+>
+ :%! {g:netrw_ftp_cmd} -i [-n]
+<
+
+where
+ g:netrw_ftp_cmd is usually "ftp",
+ -i tells ftp not to be interactive
+ -n means don't use netrc and is used for Method #3 (ftp w/o <.netrc>)
+
+If <.netrc> exists it will be used to avoid having to query the user for
+userid and password). The transferred file is put into a temporary file.
+The temporary file is then read into the main editing session window that
+requested it and the temporary file deleted.
+
+If your ftp doesn't accept the "user" command and immediately just demands
+a userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
+
+ *netrw-fixup*
+If your ftp for whatever reason generates unwanted lines (such as AUTH
+messages) you may write a NetReadFixup(tmpfile) function:
+>
+ function! NetReadFixup(method,line1,line2)
+ " a:line1: first new line in current file
+ " a:line2: last new line in current file
+ if a:method == 1 "rcp
+ elseif a:method == 2 "ftp + <.netrc>
+ elseif a:method == 3 "ftp + machine,uid,password,filename
+ elseif a:method == 4 "scp
+ elseif a:method == 5 "http/wget
+ elseif a:method == 6 "dav/cadaver
+ elseif a:method == 7 "rsync
+ elseif a:method == 8 "fetch
+ elseif a:method == 9 "sftp
+ else " complain
+ endif
+ endfunction
+>
+The NetReadFixup() function will be called if it exists and thus allows
+you to customize your reading process. As a further example, <netrw.vim>
+contains just such a function to handle Windows 95 ftp. For whatever
+reason, Windows 95's ftp dumps four blank lines at the end of a transfer,
+and so it is desirable to automate their removal. Here's some code taken
+from <netrw.vim> itself:
+>
+ if has("win95") && g:netrw_win95ftp
+ fu! NetReadFixup(method, line1, line2)
+ if method == 3 " ftp (no <.netrc>)
+ let fourblanklines= line2 - 3
+ silent fourblanklines.",".line2."g/^\s*/d"
+ endif
+ endfunction
+ endif
+>
+
+==============================================================================
+7. Debugging *netrw-debug*
+
+The <netrw.vim> script is typically available as:
+
+ /usr/local/share/vim/vim6x/plugin/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#vimlinks_scripts
+ as "Decho, a vimL debugging aid"
+ or
+ http://vim.sourceforge.net/scripts/script.php?script_id=120
+
+ and put it into your local plugin directory
+
+ 2. Edit the <netrw.vim> file as follows:
+
+ :DechoOn
+
+ (to restore to normal, use :DechoOff )
+
+ 3. Then bring up vim and attempt a transfer. A set of messages
+ should appear concerning the steps that <netrw.vim> took in
+ attempting to read/write your file over the network. Please
+ send that information to <netrw.vim>'s maintainer,
+
+ drchipNOSPAM at campbellfamily.biz - NOSPAM
+
+==============================================================================
+8. New Stuff *netrw-new* *netrw-newstuff*
+
+ 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
+
+
+==============================================================================
+9. Credits *netrw-credits*
+
+ Vim editor by Bram Moolenaar (Thanks, Bram!)
+ dav support by C Campbell
+ fetch support by Bram Moolenaar and C Campbell
+ ftp support by C Campbell <NdrOchip@ScampbellPfamily.AbizM> - NOSPAM
+ http support by Bram Moolenaar <bram@moolenaar.net>
+ rcp
+ rsync support by C Campbell (suggested by Erik Warendorph)
+ scp support by raf <raf@comdyn.com.au>
+ sftp support by C Campbell
+
+ inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
+
+ Jérôme Augé -- also using new buffer method with ftp+.netrc
+ Bram Moolenaar -- obviously vim itself, :e and v:cmdarg use, fetch,...
+ Yasuhiro Matsumoto -- pointing out undo+0r problem and a solution
+ Erik Warendorph -- for several suggestions (g:netrw_..._cmd
+ variables, rsync etc)
+ Doug Claar -- modifications to test for success with ftp operation
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/pi_spec.txt b/runtime/doc/pi_spec.txt
new file mode 100644
index 000000000..a52984a58
--- /dev/null
+++ b/runtime/doc/pi_spec.txt
@@ -0,0 +1,111 @@
+*pi_spec.txt* For Vim version 7.0aa. Last change: 2002 Oct 29
+
+by Gustavo Niemeyer ~
+
+This is a filetype plugin to work with rpm spec files.
+
+Currently, this Vim plugin allows you to easily update the %changelog
+section in RPM spec files. It will even create a section for you if it
+doesn't exist yet. If you've already inserted an entry today, it will
+give you the opportunity to just add a new item in today's entry. If you
+don't provide a format string (|spec_chglog_format|), it'll ask you an
+email address and build a format string by itself.
+
+1. How to use it |spec-how-to-use-it|
+2. Customizing |spec-customizing|
+
+==============================================================================
+1. How to use it *spec-how-to-use-it*
+
+The spec_chglog plugin provides a map like the following:
+
+ :map <buffer> <LocalLeader>c <Plug>SpecChangelog
+
+It means that you may run the plugin inside a spec file by pressing
+your maplocalleader key (default is '\') plus 'c'. If you do not have
+|spec_chglog_format| set, the plugin will ask you for an email address
+to use in this edit session.
+
+Everytime you run the plugin, it will check to see if the last entry
+in the changelog has been written today and by you. If it's the entry
+mathes, it will just insert a new changelog item, otherwise it will
+create a new changelog entry. If you are running with
+|spec_chglog_release_info| enabled, it will also check if the name, version
+and release matches. The plugin is smart enough to ask you if it should
+update the package release, if you have not done so.
+
+Setting a map *spec-setting-a-map*
+-------------
+
+As you should know, you can easily set a map to access any Vim command (or
+anything, for that matter). If you don't like the default map of
+<LocalLeader>c, you may just set up your own key. The following line
+shows you how you could do this in your .vimrc file, mapping the plugin to
+the <F5> key:
+
+ au FileType spec map <buffer> <F5> <Plug>SpecChangelog
+
+Note: the plugin will respect your desire to change the default mapping
+ and won't set it.
+
+This command will add a map only in the spec file buffers.
+
+
+==============================================================================
+2. Customizing *spec-customizing*
+
+The format string *spec_chglog_format*
+-----------------
+
+You can easily customize how your spec file entry will look like. To do
+this just set the variable "spec_chglog_format" in your .vimrc file like
+this: >
+
+ let spec_chglog_format = "%a %b %d %Y My Name <my@email.com>"
+
+Note that "%a %b %d %Y" is the most used time format. If you don't provide
+a format string, when you run the SpecChangelog command for the first
+time, it will ask you an email address and build the |spec_chglog_format|
+variable for you. This way, you will only need to provide your email
+address once.
+
+To discover which format options you can use, take a look at the strftime()
+function man page.
+
+Where to insert new items *spec_chglog_prepend*
+-------------------------
+
+The plugin will usually insert new %changelog entry items (note that it's
+not the entry itself) after the existing ones. If you set the
+spec_chglog_prepend variable >
+
+ let spec_chglog_prepend = 1
+
+it will insert new items before the existing ones.
+
+Inserting release info *spec_chglog_release_info*
+----------------------
+
+If you want, the plugin may automatically insert release information
+on each changelog entry. One advantage of turning this feature on is
+that it may control if the release has been updated after the last
+change in the package or not. If you have not updated the package
+version or release, it will ask you if it should update the package
+release for you. To turn this feature on, just insert the following
+code in your .vimrc: >
+
+ let spec_chglog_release_info = 1
+
+Then, the first item in your changelog entry will be something like: >
+
+ + name-1.0-1cl
+
+If you don't like the release updating feature and don't want to answer
+"No" each time it detects an old release, you may disable it with >
+
+ let spec_chglog_never_increase_release = 1
+
+
+Good luck!!
+
+vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
new file mode 100644
index 000000000..1c35d685a
--- /dev/null
+++ b/runtime/doc/quickfix.txt
@@ -0,0 +1,1010 @@
+*quickfix.txt* For Vim version 7.0aa. Last change: 2004 May 20
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+This subject is introduced in section |30.1| of the user manual.
+
+1. Using QuickFix commands |quickfix|
+2. The error window |quickfix-window|
+3. Using more than one list of errors |quickfix-error-lists|
+4. Using :make |:make_makeprg|
+5. Using :grep |grep|
+6. Selecting a compiler |compiler-select|
+7. The error format |error-file-format|
+8. The directory stack |quickfix-directory-stack|
+9. Specific error file formats |errorformats|
+
+{Vi does not have any of these commands}
+
+The quickfix commands are not available when the |+quickfix| feature was
+disabled at compile time.
+
+=============================================================================
+1. Using QuickFix commands *quickfix* *Quickfix* *E42*
+
+Vim has a special mode to speedup the edit-compile-edit cycle. This is
+inspired by the quickfix option of the Manx's Aztec C compiler on the Amiga.
+The idea is to save the error messages from the compiler in a file and use Vim
+to jump to the errors one by one. You can examine each problem and fix it,
+without having to remember all the error messages.
+
+If you are using Manx's Aztec C compiler on the Amiga look here for how to use
+it with Vim: |quickfix-manx|. If you are using another compiler you should
+save the error messages in a file and start Vim with "vim -q filename". An
+easy way to do this is with the |:make| command (see below). The
+'errorformat' option should be set to match the error messages from your
+compiler (see |errorformat| below).
+
+The following quickfix commands can be used:
+
+ *:cc*
+:cc[!] [nr] Display error [nr]. If [nr] is omitted, the same
+ error is displayed again. Without [!] this doesn't
+ work when jumping to another buffer, the current buffer
+ has been changed, there is the only window for the
+ buffer and both 'hidden' and 'autowrite' are off.
+ When jumping to another buffer with [!] any changes to
+ the current buffer are lost, unless 'hidden' is set or
+ there is another window for this buffer.
+ The 'switchbuf' settings are respected when jumping
+ to a buffer.
+
+ *:cn* *:cnext* *E553*
+:[count]cn[ext][!] Display the [count] next error in the list that
+ includes a file name. If there are no file names at
+ all, go to the [count] next error. See |:cc| for
+ [!] and 'switchbuf'.
+
+:[count]cN[ext][!] *:cp* *:cprevious* *:cN* *:cNext*
+:[count]cp[revious][!] Display the [count] previous error in the list that
+ includes a file name. If there are no file names at
+ all, go to the [count] previous error. See |:cc| for
+ [!] and 'switchbuf'.
+
+ *:cnf* *:cnfile*
+:[count]cnf[ile][!] Display the first error in the [count] next file in
+ the list that includes a file name. If there are no
+ file names at all or if there is no next file, go to
+ the [count] next error. See |:cc| for [!] and
+ 'switchbuf'.
+
+:[count]cNf[ile][!] *:cpf* *:cpfile* *:cNf* *:cNfile*
+:[count]cpf[ile][!] Display the last error in the [count] previous file in
+ the list that includes a file name. If there are no
+ file names at all or if there is no next file, go to
+ the [count] previous error. See |:cc| for [!] and
+ 'switchbuf'.
+
+ *:crewind* *:cr*
+:cr[ewind][!] [nr] Display error [nr]. If [nr] is omitted, the FIRST
+ error is displayed. See |:cc|.
+
+ *:cfirst* *:cfir*
+:cfir[st][!] [nr] Same as ":crewind".
+
+ *:clast* *:cla*
+:cla[st][!] [nr] Display error [nr]. If [nr] is omitted, the LAST
+ error is displayed. See |:cc|.
+
+ *:cq* *:cquit*
+:cq[uit] Quit Vim with an error code, so that the compiler
+ will not compile the same file again.
+
+ *:cf* *:cfile*
+:cf[ile][!] [errorfile] Read the error file and jump to the first error.
+ This is done automatically when Vim is started with
+ the -q option. You can use this command when you
+ keep Vim running while compiling. If you give the
+ name of the errorfile, the 'errorfile' option will
+ be set to [errorfile]. See |:cc| for [!].
+
+ *:cg* *:cgetfile*
+:cg[etfile][!] [errorfile]
+ Read the error file. Just like ":cfile" but don't
+ jump to the first error.
+
+ *:cl* *:clist*
+:cl[ist] [from] [, [to]]
+ List all errors that are valid |quickfix-valid|.
+ If numbers [from] and/or [to] are given, the respective
+ range of errors is listed. A negative number counts
+ from the last error backwards, -1 being the last error.
+ The 'switchbuf' settings are respected when jumping
+ to a buffer.
+
+:cl[ist]! [from] [, [to]]
+ List all errors.
+
+If you insert or delete lines, mostly the correct error location is still
+found because hidden marks are used. Sometimes, when the mark has been
+deleted for some reason, the message "line changed" is shown to warn you that
+the error location may not be correct. If you quit Vim and start again the
+marks are lost and the error locations may not be correct anymore.
+
+=============================================================================
+2. The error window *quickfix-window*
+
+ *:cope* *:copen*
+:cope[n] [height] Open a window to show the current list of errors.
+ When [height] is given, the window becomes that high
+ (if there is room). Otherwise the window is made ten
+ lines high.
+ The window will contain a special buffer, with
+ 'buftype' equal to "quickfix". Don't change this!
+ If there already is a quickfix window, it will be made
+ the current window. It is not possible to open a
+ second quickfix window.
+
+ *:ccl* *:cclose*
+:ccl[ose] Close the quickfix window.
+
+ *:cw* *:cwindow*
+:cw[indow] [height] Open the quickfix window when there are recognized
+ errors. If the window is already open and there are
+ no recognized errors, close the window.
+
+
+Normally the quickfix window is at the bottom of the screen. If there are
+vertical splits, it's at the bottom of the rightmost column of windows. To
+make it always occupy the full width: >
+ :botright cwindow
+You can move the window around with |window-moving| commands.
+For example, to move it to the top: CTRL-W K
+The 'winfixheight' option will be set, which means that the window will mostly
+keep its height, ignoring 'winheight' and 'equalalways'. You can change the
+height manually (e.g., by dragging the status line above it with the mouse).
+
+In the quickfix window, each line is one error. The line number is equal to
+the error number. You can use ":.cc" to jump to the error under the cursor.
+Hitting the <CR> key or double-clicking the mouse on a line has the same
+effect. The file containing the error is opened in the window above the
+quickfix window. If there already is a window for that file, it is used
+instead. If the buffer in the used window has changed, and the error is in
+another file, jumping to the error will fail. You will first have to make
+sure the window contains a buffer which can be abandoned.
+
+When the quickfix window has been filled, two autocommand events are
+triggered. First the 'filetype' option is set to "qf", which triggers the
+FileType event. Then the BufReadPost event is triggered. This can be used to
+perform some action on the listed errors. Example: >
+ au BufReadPost quickfix setlocal nomodifiable
+ \ | silent g/^/s//\=line(".")." "/
+ \ | setlocal modifiable
+This prepends the line number to each line. Note the use of "\=" in the
+substitute string of the ":s" command, which is used to evaluate an
+expression.
+
+Note: Making changes in the quickfix window has no effect on the list of
+errors. 'modifiable' is off to avoid making changes. If you delete or insert
+lines anyway, the relation between the text and the error number is messed up.
+If you really want to do this, you could write the contents of the quickfix
+window to a file and use ":cfile" to have it parsed and used as the new error
+list.
+
+=============================================================================
+3. Using more than one list of errors *quickfix-error-lists*
+
+So far has been assumed that there is only one list of errors. Actually the
+ten last used lists are remembered. When starting a new list, the previous
+ones are automatically kept. Two commands can be used to access older error
+lists. They set one of the existing error lists as the current one.
+
+ *:colder* *:col* *E380*
+:col[der] [count] Go to older error list. When [count] is given, do
+ this [count] times. When already at the oldest error
+ list, an error message is given.
+
+ *:cnewer* *:cnew* *E381*
+:cnew[er] [count] Go to newer error list. When [count] is given, do
+ this [count] times. When already at the newest error
+ list, an error message is given.
+
+When adding a new error list, it becomes the current list.
+
+When ":colder" has been used and ":make" or ":grep" is used to add a new error
+list, one newer list is overwritten. This is especially useful if you are
+browsing with ":grep" |grep|. If you want to keep the more recent error
+lists, use ":cnewer 99" first.
+
+=============================================================================
+4. Using :make *:make_makeprg*
+
+ *:mak* *:make*
+:mak[e][!] [arguments] 1. If the 'autowrite' option is on, write any changed
+ buffers
+ 2. An errorfile name is made from 'makeef'. If
+ 'makeef' doesn't contain "##", and a file with this
+ name already exists, it is deleted.
+ 3. The program given with the 'makeprg' option is
+ started (default "make") with the optional
+ [arguments] and the output is saved in the
+ errorfile (for Unix it is also echoed on the
+ screen).
+ 4. The errorfile is read using 'errorformat'.
+ 5. If [!] is not given the first error is jumped to.
+ 6. The errorfile is deleted.
+ 7. You can now move through the errors with commands
+ like |:cnext| and |:cprevious|, see above.
+ This command does not accept a comment, any "
+ characters are considered part of the arguments.
+
+The ":make" command executes the command given with the 'makeprg' option.
+This is done by passing the command to the shell given with the 'shell'
+option. This works almost like typing
+
+ ":!{makeprg} [arguments] {shellpipe} {errorfile}".
+
+{makeprg} is the string given with the 'makeprg' option. Any command can be
+used, not just "make". Characters '%' and '#' are expanded as usual on a
+command-line. You can use "%<" to insert the current file name without
+extension, or "#<" to insert the alternate file name without extension, for
+example: >
+ :set makeprg=make\ #<.o
+
+[arguments] is anything that is typed after ":make".
+{shellpipe} is the 'shellpipe' option.
+{errorfile} is the 'makeef' option, with ## replaced to make it unique.
+
+The placeholder "$*" can be used for the argument list in {makeprog} if the
+command needs some additional characters after its arguments. The $* is
+replaced then by all arguments. Example: >
+ :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
+or simpler >
+ :let &mp = 'latex \\nonstopmode \\input\{$*}'
+"$*" can be given multiple times, for example: >
+ :set makeprg=gcc\ -o\ $*\ $*
+
+The 'shellpipe' option defaults to ">" for the Amiga, MS-DOS and Win32. This
+means that the output of the compiler is saved in a file and not shown on the
+screen directly. For Unix "| tee" is used. The compiler output is shown on
+the screen and saved in a file the same time. Depending on the shell used
+"|& tee" or "2>&1| tee" is the default, so stderr output will be included.
+
+If 'shellpipe' is empty, the {errorfile} part will be omitted. This is useful
+for compilers that write to an errorfile themselves (e.g., Manx's Amiga C).
+
+==============================================================================
+5. Using :grep *grep* *lid*
+
+Vim can interface with "grep" and grep-like programs (such as the GNU
+id-utils) in a similar way to its compiler integration (see |:make| above).
+
+[Unix trivia: The name for the Unix "grep" command comes from ":g/re/p", where
+"re" stands for Regular Expression.]
+
+ *:gr* *:grep*
+:gr[ep][!] [arguments] Just like ":make", but use 'grepprg' instead of
+ 'makeprg' and 'grepformat' instead of 'errorformat'.
+ *:grepa* *:grepadd*
+:grepa[dd][!] [arguments]
+ Just like ":grep", but instead of making a new list of
+ errors the matches are appended to the current list.
+ Example: >
+ :grep nothing %
+ :bufdo grepadd! something %
+< The first command makes a new error list which is
+ empty. The second command executes "grepadd" for each
+ listed buffer. Note the use of ! to avoid that
+ ":grepadd" jumps to the first error, which is not
+ allowed with |:bufdo|.
+
+5.1 Setting up grep
+
+If you have a standard "grep" program installed, the :grep command may work
+well with the defaults. The syntax is very similar to the standard command: >
+
+ :grep foo *.c
+
+Will search all files with the .c extension for the substring "foo". The
+arguments to :grep are passed straight to the "grep" program, so you can use
+whatever options your "grep" supports.
+
+By default, :grep invokes grep with the -n option (show file and line
+numbers). You can change this with the 'grepprg' option. You will need to set
+'grepprg' if:
+
+a) You are using a program that isn't called "grep"
+b) You have to call grep with a full path
+c) You want to pass other options automatically (e.g. case insensitive
+ search.)
+
+Once "grep" has executed, Vim parses the results using the 'grepformat'
+option. This option works in the same way as the 'errorformat' option - see
+that for details. You may need to change 'grepformat' from the default if
+your grep outputs in a non-standard format, or you are using some other
+program with a special format.
+
+Once the results are parsed, Vim loads the first file containing a match and
+jumps to the appropriate line, in the same way that it jumps to a compiler
+error in |quickfix| mode. You can then use the |:cnext|, |:clist|, etc.
+commands to see the other matches.
+
+
+5.2 Using :grep with id-utils
+
+You can set up :grep to work with the GNU id-utils like this: >
+
+ :set grepprg=lid\ -Rgrep\ -s
+ :set grepformat=%f:%l:%m
+
+then >
+ :grep (regexp)
+
+works just as you'd expect.
+(provided you remembered to mkid first :)
+
+
+5.3 Browsing source code with :grep
+
+Using the stack of error lists that Vim keeps, you can browse your files to
+look for functions and the functions they call. For example, suppose that you
+have to add an argument to the read_file() function. You enter this command: >
+
+ :grep read_file *.c
+
+You use ":cn" to go along the list of matches and add the argument. At one
+place you have to get the new argument from a higher level function msg(), and
+need to change that one too. Thus you use: >
+
+ :grep msg *.c
+
+While changing the msg() functions, you find another function that needs to
+get the argument from a higher level. You can again use ":grep" to find these
+functions. Once you are finished with one function, you can use >
+
+ :colder
+
+to go back to the previous one.
+
+This works like browsing a tree: ":grep" goes one level deeper, creating a
+list of branches. ":colder" goes back to the previous level. You can mix
+this use of ":grep" and "colder" to browse all the locations in a tree-like
+way. If you do this consistently, you will find all locations without the
+need to write down a "todo" list.
+
+=============================================================================
+6. Selecting a compiler *compiler-select*
+
+ *:comp* *:compiler* *E666*
+:comp[iler][!] {name} Set options to work with compiler {name}.
+ Without the "!" options are set for the
+ current buffer. With "!" global options are
+ set.
+ If you use ":compiler foo" in "file.foo" and
+ then ":compiler! bar" in another buffer, Vim
+ will keep on using "foo" in "file.foo".
+ {not available when compiled without the
+ |+eval| feature}
+
+
+The Vim plugins in the "compiler" directory will set options to use the
+selected compiler. For ":compiler" local options are set, for ":compiler!"
+global options.
+ *current_compiler*
+To support older Vim versions, the plugins always use "current_compiler" and
+not "b:current_compiler". What the command actually does is the following:
+
+- Delete the "current_compiler" and "b:current_compiler" variables.
+- Define the "CompilerSet" user command. With "!" it does ":set", without "!"
+ it does ":setlocal".
+- Execute ":runtime! compiler/{name}.vim". The plugins are expected to set
+ options with "CompilerSet" and set the "current_compiler" variable to the
+ name of the compiler.
+- Delete the "CompilerSet user command.
+- Set "b:current_compiler" to the value of "current_compiler".
+- Without "!" the old value of "current_compiler" is restored.
+
+
+For writing a compiler plugin, see |write-compiler-plugin|.
+
+
+MANX AZTEC C *quickfix-manx* *compiler-manx*
+
+To use Vim with Manx's Aztec C compiler on the Amiga you should do the
+following:
+- Set the CCEDIT environment variable with the command: >
+ mset "CCEDIT=vim -q"
+- Compile with the -qf option. If the compiler finds any errors, Vim is
+ started and the cursor is positioned on the first error. The error message
+ will be displayed on the last line. You can go to other errors with the
+ commands mentioned above. You can fix the errors and write the file(s).
+- If you exit Vim normally the compiler will re-compile the same file. If you
+ exit with the :cq command, the compiler will terminate. Do this if you
+ cannot fix the error, or if another file needs to be compiled first.
+
+There are some restrictions to the Quickfix mode on the Amiga. The
+compiler only writes the first 25 errors to the errorfile (Manx's
+documentation does not say how to get more). If you want to find the others,
+you will have to fix a few errors and exit the editor. After recompiling,
+up to 25 remaining errors will be found.
+
+If Vim was started from the compiler, the :sh and some :! commands will not
+work, because Vim is then running in the same process as the compiler and
+stdin (standard input) will not be interactive.
+
+
+PYUNIT COMPILER *compiler-pyunit*
+
+This is not actually a compiler, but a unit testing framework for the
+Python language. It is included into standard Python distribution
+starting from version 2.0. For older versions, you can get it from
+http://pyunit.sourceforge.net.
+
+When you run your tests with the help of the framework, possible errors
+are parsed by Vim and presented for you in quick-fix mode.
+
+Unfortunately, there is no standard way to run the tests.
+The alltests.py script seems to be used quite often, that's all.
+Useful values for the 'makeprg' options therefore are:
+ setlocal makeprg=./alltests.py " Run a testsuite
+ setlocal makeprg=python % " Run a single testcase
+
+Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
+
+
+TEX COMPILER *compiler-tex*
+
+Included in the distribution compiler for TeX ($VIMRUNTIME/compiler/tex.vim)
+uses make command if possible. If the compiler finds a file named "Makefile"
+or "makefile" in the current directory, it supposes that you want to process
+your *TeX files with make, and the makefile does the right work. In this case
+compiler sets 'errorformat' for *TeX output and leaves 'makeprg' untouched. If
+neither "Makefile" nor "makefile" is found, the compiler will not use make.
+You can force the compiler to ignore makefiles by defining
+b:tex_ignore_makefile or g:tex_ignore_makefile variable (they are checked for
+existence only).
+
+If the compiler chose not to use make, it need to choose a right program for
+processing your input. If b:tex_flavor or g:tex_flavor (in this precedence)
+variable exists, it defines TeX flavor for :make (actually, this is the name
+of executed command), and if both variables do not exist, it defaults to
+"latex". For example, while editing chapter2.tex \input-ed from mypaper.tex
+written in AMS-TeX: >
+
+ :let b:tex_flavor = 'amstex'
+ :compiler tex
+< [editing...] >
+ :make mypaper
+
+Note that you must specify a name of the file to process as an argument (to
+process the right file when editing \input-ed or \include-ed file; portable
+solution for substituting % for no arguments is welcome). This is not in the
+semantics of make, where you specify a target, not source, but you may specify
+filename without extension ".tex" and mean this as "make filename.dvi or
+filename.pdf or filename.some_result_extension according to compiler".
+
+Note: tex command line syntax is set to usable both for MikTeX (suggestion
+by Srinath Avadhanula) and teTeX (checked by Artem Chuprina). Suggestion
+from |errorformat-LaTeX| is too complex to keep it working for different
+shells and OSes and also does not allow to use other available TeX options,
+if any. If your TeX doesn't support "-interaction=nonstopmode", please
+report it with different means to express \nonstopmode from the command line.
+
+=============================================================================
+7. The error format *error-file-format*
+
+ *errorformat* *E372* *E373* *E374*
+ *E375* *E376* *E377* *E378*
+The 'errorformat' option specifies a list of formats that are recognized. The
+first format that matches with an error message is used. You can add several
+formats for different messages your compiler produces, or even entries for
+multiple compilers. See |efm-entries|.
+
+Each entry in 'errorformat' is a scanf-like string that describes the format.
+First, you need to know how scanf works. Look in the documentation of your
+C compiler. Below you find the % items that Vim understands. Others are
+invalid.
+
+Special characters in 'errorformat' are comma and backslash. See
+|efm-entries| for how to deal with them. Note that a literal "%" is matched
+by "%%", thus it is not escaped with a backslash.
+
+Note: By default the difference between upper and lowercase is ignored. If
+you want to match case, add "\C" to the pattern |/\C|.
+
+
+Basic items
+
+ %f file name (finds a string)
+ %l line number (finds a number)
+ %c column number (finds a number representing character
+ column of the error, (1 <tab> == 1 character column))
+ %v virtual column number (finds a number representing
+ screen column of the error (1 <tab> == 8 screen
+ columns)
+ %t error type (finds a single character)
+ %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)
+ %*{conv} any scanf non-assignable conversion
+ %% the single '%' character
+
+The "%f" conversion depends on the current 'isfname' setting.
+
+The "%f" and "%m" conversions have to detect the end of the string. They
+should be followed by a character that cannot be in the string. Everything
+up to that character is included in the string. But when the next character
+is a '%' or a backslash, "%f" will look for any 'isfname' character and "%m"
+finds anything. If the "%f" or "%m" is at the end, everything up to the end
+of the line is included.
+
+On MS-DOS, MS-Windows and OS/2 a leading "C:" will be included in "%f", even
+when using "%f:". This means that a file name which is a single alphabetical
+letter will not be detected.
+
+The "%p" conversion is normally followed by a "^". It's used for compilers
+that output a line like: >
+ ^
+or >
+ ---------^
+to indicate the column of the error. This is to be used in a multi-line error
+message. See |errorformat-javac| for a useful example.
+
+
+Changing directory
+
+The following uppercase conversion characters specify the type of special
+format strings. At most one of them may be given as a prefix at the begin
+of a single comma-separated format pattern.
+Some compilers produce messages that consist of directory names that have to
+be prepended to each file name read by %f (example: GNU make). The following
+codes can be used to scan these directory names; they will be stored in an
+internal directory stack. *E379*
+ %D "enter directory" format string; expects a following
+ %f that finds the directory name
+ %X "leave directory" format string; expects following %f
+
+When defining an "enter directory" or "leave directory" format, the "%D" or
+"%X" has to be given at the start of that substring. Vim tracks the directory
+changes and prepends the current directory to each erroneous file found with a
+relative path. See |quickfix-directory-stack| for details, tips and
+limitations.
+
+
+Multi-line messages *errorformat-multi-line*
+
+It is possible to read the output of programs that produce multi-line
+messages, ie. error strings that consume more than one line. Possible
+prefixes are:
+ %E start of a multi-line error message
+ %W start of a multi-line warning message
+ %I start of a multi-line informational message
+ %A start of a multi-line message (unspecified type)
+ %C continuation of a multi-line message
+ %Z end of a multi-line message
+These can be used with '+' and '-', see |efm-ignore| below.
+
+Example: Your compiler happens to write out errors in the following format
+(leading line numbers not being part of the actual output):
+
+ 1 Error 275
+ 2 line 42
+ 3 column 3
+ 4 ' ' expected after '--'
+
+The appropriate error format string has to look like this: >
+ :set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m
+
+And the |:clist| error message generated for this error is:
+
+ 1:42 col 3 error 275: ' ' expected after '--'
+
+Another example: Think of a Python interpreter that produces the following
+error message (line numbers are not part of the actual output):
+
+ 1 ==============================================================
+ 2 FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)
+ 3 --------------------------------------------------------------
+ 4 Traceback (most recent call last):
+ 5 File "unittests/dbfacadeTest.py", line 89, in testFoo
+ 6 self.assertEquals(34, dtid)
+ 7 File "/usr/lib/python2.2/unittest.py", line 286, in
+ 8 failUnlessEqual
+ 9 raise self.failureException, \
+ 10 AssertionError: 34 != 33
+ 11
+ 12 --------------------------------------------------------------
+ 13 Ran 27 tests in 0.063s
+
+Say you want |:clist| write the relevant information of this message only,
+namely:
+ 5 unittests/dbfacadeTest.py:89: AssertionError: 34 != 33
+
+Then the error format string could be defined as follows: >
+ :set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
+
+Note that the %C string is given before the %A here: since the expression
+' %.%#' (which stands for the regular expression ' .*') matches every line
+starting with a space, followed by any characters to the end of the line,
+it also hides line 7 which would trigger a separate error message otherwise.
+Error format strings are always parsed pattern by pattern until the first
+match occurs.
+
+
+Separate file name *errorformat-separate-filename*
+
+These prefixes are useful if the file name is given once and multiple messages
+follow that refer to this file name.
+ %O single-line file message: overread the matched part
+ %P single-line file message: push file %f onto the stack
+ %Q single-line file message: pop the last file from stack
+
+Example: Given a compiler that produces the following error logfile (without
+leading line numbers):
+
+ 1 [a1.tt]
+ 2 (1,17) error: ';' missing
+ 3 (21,2) warning: variable 'z' not defined
+ 4 (67,3) error: end of file found before string ended
+ 5
+ 6 [a2.tt]
+ 7
+ 8 [a3.tt]
+ 9 NEW compiler v1.1
+ 10 (2,2) warning: variable 'x' not defined
+ 11 (67,3) warning: 's' already defined
+
+This logfile lists several messages for each file enclosed in [...] which are
+properly parsed by an error format like this: >
+ :set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q
+
+A call of |:clist| writes them accordingly with their correct filenames:
+
+ 2 a1.tt:1 col 17 error: ';' missing
+ 3 a1.tt:21 col 2 warning: variable 'z' not defined
+ 4 a1.tt:67 col 3 error: end of file found before string ended
+ 8 a3.tt:2 col 2 warning: variable 'x' not defined
+ 9 a3.tt:67 col 3 warning: 's' already defined
+
+Unlike the other prefixes that all match against whole lines, %P, %Q and %O
+can be used to match several patterns in the same line. Thus it is possible
+to parse even nested files like in the following line:
+ {"file1" {"file2" error1} error2 {"file3" error3 {"file4" error4 error5}}}
+The %O then parses over strings that do not contain any push/pop file name
+information. See |errorformat-LaTeX| for an extended example.
+
+
+Ignoring and using whole messages *efm-ignore*
+
+The codes '+' or '-' can be combined with the uppercase codes above; in that
+case they have to precede the letter, eg. '%+A' or '%-G':
+ %- do not include the matching multi-line in any output
+ %+ include the whole matching line in the %m error string
+
+One prefix is only useful in combination with '+' or '-', namely %G. It parses
+over lines containing general information like compiler version strings or
+other headers that can be skipped.
+ %-G ignore this message
+ %+G general message
+
+
+Pattern matching
+
+The scanf()-like "%*[]" notation is supported for backward-compatibility
+with previous versions of Vim. However, it is also possible to specify
+(nearly) any Vim supported regular expression in format strings.
+Since meta characters of the regular expression language can be part of
+ordinary matching strings or file names (and therefore internally have to
+be escaped), meta symbols have to be written with leading '%':
+ %\ the single '\' character. Note that this has to be
+ escaped ("%\\") in ":set errorformat=" definitions.
+ %. the single '.' character.
+ %# the single '*'(!) character.
+ %^ the single '^' character.
+ %$ the single '$' character.
+ %[ the single '[' character for a [] character range.
+ %~ the single '~' character.
+When using character classes in expressions (see |/\i| for an overview),
+terms containing the "\+" quantifier can be written in the scanf() "%*"
+notation. Example: "%\\d%\\+" ("\d\+", "any number") is equivalent to "%*\\d".
+Important note: The \(...\) grouping of sub-matches can not be used in format
+specifications because it is reserved for internal conversions.
+
+
+Multiple entries in 'errorformat' *efm-entries*
+
+To be able to detect output from several compilers, several format patterns
+may be put in 'errorformat', separated by commas (note: blanks after the comma
+are ignored). The first pattern that has a complete match is used. If no
+match is found, matching parts from the last one will be used, although the
+file name is removed and the error message is set to the whole message. If
+there is a pattern that may match output from several compilers (but not in a
+right way), put it after one that is more restrictive.
+
+To include a comma in a pattern precede it with a backslash (you have to type
+two in a ":set" command). To include a backslash itself give two backslashes
+(you have to type four in a ":set" command). You also need to put a backslash
+before a space for ":set".
+
+
+Valid matches *quickfix-valid*
+
+If a line does not completely match one of the entries in 'errorformat', the
+whole line is put in the error message and the entry is marked "not valid"
+These lines are skipped with the ":cn" and ":cp" commands (unless there is
+no valid line at all). You can use ":cl!" to display all the error messages.
+
+If the error format does not contain a file name Vim cannot switch to the
+correct file. You will have to do this by hand.
+
+
+Examples
+
+The format of the file from the Amiga Aztec compiler is:
+
+ filename>linenumber:columnnumber:errortype:errornumber:errormessage
+
+ filename name of the file in which the error was detected
+ linenumber line number where the error was detected
+ columnnumber column number where the error was detected
+ errortype type of the error, normally a single 'E' or 'W'
+ errornumber number of the error (for lookup in the manual)
+ errormessage description of the error
+
+This can be matched with this 'errorformat' entry:
+ %f>%l:%c:%t:%n:%m
+
+Some examples for C compilers that produce single-line error outputs:
+%f:%l:\ %t%*[^0123456789]%n:\ %m for Manx/Aztec C error messages
+ (scanf() doesn't understand [0-9])
+%f\ %l\ %t%*[^0-9]%n:\ %m for SAS C
+\"%f\"\\,%*[^0-9]%l:\ %m for generic C compilers
+%f:%l:\ %m for GCC
+%f:%l:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',
+%Dgmake[%*\\d]:\ Leaving\ directory\ `%f'
+ for GCC with gmake (concat the lines!)
+%f(%l)\ :\ %*[^:]:\ %m old SCO C compiler (pre-OS5)
+%f(%l)\ :\ %t%*[^0-9]%n:\ %m idem, with error type and number
+%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m
+ for GCC, with some extras
+
+Extended examples for the handling of multi-line messages are given below,
+see |errorformat-Jikes| and |errorformat-LaTeX|.
+
+Note the backslash in front of a space and double quote. It is required for
+the :set command. There are two backslashes in front of a comma, one for the
+:set command and one to avoid recognizing the comma as a separator of error
+formats.
+
+
+Filtering messages
+
+If you have a compiler that produces error messages that do not fit in the
+format string, you could write a program that translates the error messages
+into this format. You can use this program with the ":make" command by
+changing the 'makeprg' option. For example: >
+ :set mp=make\ \\\|&\ error_filter
+The backslashes before the pipe character are required to avoid it to be
+recognized as a command separator. The backslash before each space is
+required for the set command.
+
+=============================================================================
+8. The directory stack *quickfix-directory-stack*
+
+Quickfix maintains a stack for saving all used directories parsed from the
+make output. For GNU-make this is rather simple, as it always prints the
+absolute path of all directories it enters and leaves. Regardless if this is
+done via a 'cd' command in the makefile or with the parameter "-C dir" (change
+to directory before reading the makefile). It may be useful to use the switch
+"-w" to force GNU-make to print out the working directory before and after
+processing.
+
+Maintaining the correct directory is more complicated if you don't use
+GNU-make. AIX-make for example doesn't print any information about its working
+directory. Then you need to enhance the makefile. In the makefile of lesstiff
+there is a command which echoes "Making {target} in {dir}". The special
+problem here is that it doesn't print informations on leaving the directory
+and that it doesn't print the absolute path.
+
+To solve the problem with relative paths and missing "leave directory"
+messages Vim uses following algorithm:
+
+1) Check if the given directory is a subdirectory of the current directory.
+ If this is true, store it as the current directory.
+2) If it is not a subdir of the current directory, try if this is a
+ subdirectory of one of the upper directories.
+3) If the directory still isn't found, it is assumed to be a subdirectory
+ of Vim's current directory.
+
+Additionally it is checked for every file, if it really exists in the
+identified directory. If not, it is searched in all other directories of the
+directory stack (NOT the directory subtree!). If it is still not found, it is
+assumed that it is in Vim's current directory.
+
+There are limitation in this algorithm. This examples assume that make just
+prints information about entering a directory in the form "Making all in dir".
+
+1) Assume you have following directories and files:
+ ./dir1
+ ./dir1/file1.c
+ ./file1.c
+
+ If make processes the directory "./dir1" before the current directory and
+ there is an error in the file "./file1.c", you will end up with the file
+ "./dir1/file.c" loaded by Vim.
+
+ This can only be solved with a "leave directory" message.
+
+2) Assume you have following directories and files:
+ ./dir1
+ ./dir1/dir2
+ ./dir2
+
+ You get the following:
+
+ Make output Directory interpreted by Vim
+ ------------------------ ----------------------------
+ Making all in dir1 ./dir1
+ Making all in dir2 ./dir1/dir2
+ Making all in dir2 ./dir1/dir2
+
+ This can be solved by printing absolute directories in the "enter directory"
+ message or by printing "leave directory" messages..
+
+To avoid this problems, ensure to print absolute directory names and "leave
+directory" messages.
+
+Examples for Makefiles:
+
+Unix:
+ libs:
+ for dn in $(LIBDIRS); do \
+ (cd $$dn; echo "Entering dir '$$(pwd)'"; make); \
+ echo "Leaving dir"; \
+ done
+
+Add
+ %DEntering\ dir\ '%f',%XLeaving\ dir
+to your 'errorformat' to handle the above output.
+
+Note that Vim doesn't check if the directory name in a "leave directory"
+messages is the current directory. This is why you could just use the message
+"Leaving dir".
+
+=============================================================================
+9. Specific error file formats *errorformats*
+
+ *errorformat-Jikes*
+Jikes(TM), a source-to-bytecode Java compiler published by IBM Research,
+produces simple multi-line error messages.
+
+An 'errorformat' string matching the produced messages is shown below.
+The following lines can be placed in the user's |vimrc| to overwrite Vim's
+recognized default formats, or see |:set+=| how to install this format
+additionally to the default. >
+
+ :set efm=%A%f:%l:%c:%*\\d:%*\\d:,
+ \%C%*\\s%trror:%m,
+ \%+C%*[^:]%trror:%m,
+ \%C%*\\s%tarning:%m,
+ \%C%m
+<
+Jikes(TM) produces a single-line error message when invoked with the option
+"+E", and can be matched with the following: >
+
+ :set efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
+<
+ *errorformat-javac*
+This 'errorformat' has been reported to work well for javac, which outputs a
+line with "^" to indicate the column of the error: >
+ :set efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
+or: >
+ :set efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
+<
+ *errorformat-ant*
+For ant (http://jakarta.apache.org/) the above errorformat has to be modified
+to honour the leading [javac] in front of each javac output line: >
+ :set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
+
+The 'errorformat' can also be configured to handle ant together with either
+javac or jikes. If you're using jikes, you should tell ant to use jikes' +E
+command line switch which forces jikes to generate one-line error messages.
+This is what the second line (of a build.xml file) below does: >
+ <property name = "build.compiler" value = "jikes"/>
+ <property name = "build.compiler.emacs" value = "true"/>
+
+The 'errorformat' which handles ant with both javac and jikes is: >
+ :set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m,
+ \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#
+<
+ *errorformat-jade*
+parsing jade (see http://www.jclark.com/) errors is simple: >
+ :set efm=jade:%f:%l:%c:%t:%m
+<
+ *errorformat-LaTeX*
+The following is an example how an 'errorformat' string can be specified
+for the (La)TeX typesetting system which displays error messages over
+multiple lines. The output of ":clist" and ":cc" etc. commands displays
+multi-lines in a single line, leading white space is removed.
+It should be easy to adopt the above LaTeX errorformat to any compiler output
+consisting of multi-line errors.
+
+The commands can be placed in a |vimrc| file or some other Vim script file,
+eg. a script containing LaTeX related stuff which is loaded only when editing
+LaTeX sources.
+Make sure to copy all lines of the example (in the given order), afterwards
+remove the comment lines. For the '\' notation at the start of some lines see
+|line-continuation|.
+
+ First prepare 'makeprg' such that LaTeX will report multiple
+ errors; do not stop when the first error has occurred: >
+ :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
+<
+ Start of multi-line error messages: >
+ :set efm=%E!\ LaTeX\ %trror:\ %m,
+ \%E!\ %m,
+< Start of multi-line warning messages; the first two also
+ include the line number. Meaning of some regular expressions:
+ - "%.%#" (".*") matches a (possibly empty) string
+ - "%*\\d" ("\d\+") matches a number >
+ \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,
+ \%+W%.%#\ at\ lines\ %l--%*\\d,
+ \%WLaTeX\ %.%#Warning:\ %m,
+< Possible continuations of error/warning messages; the first
+ one also includes the line number: >
+ \%Cl.%l\ %m,
+ \%+C\ \ %m.,
+ \%+C%.%#-%.%#,
+ \%+C%.%#[]%.%#,
+ \%+C[]%.%#,
+ \%+C%.%#%[{}\\]%.%#,
+ \%+C<%.%#>%.%#,
+ \%C\ \ %m,
+< Lines that match the following patterns do not contain any
+ important information; do not include them in messages: >
+ \%-GSee\ the\ LaTeX%m,
+ \%-GType\ \ H\ <return>%m,
+ \%-G\ ...%.%#,
+ \%-G%.%#\ (C)\ %.%#,
+ \%-G(see\ the\ transcript%.%#),
+< Generally exclude any empty or whitespace-only line from
+ being displayed: >
+ \%-G\\s%#,
+< The LaTeX output log does not specify the names of erroneous
+ source files per line; rather they are given globally,
+ enclosed in parentheses.
+ The following patterns try to match these names and store
+ them in an internal stack. The patterns possibly scan over
+ the same input line (one after another), the trailing "%r"
+ conversion indicates the "rest" of the line that will be
+ parsed in the next go until the end of line is reached.
+
+ Overread a file name enclosed in '('...')'; do not push it
+ on a stack since the file apparently does not contain any
+ error: >
+ \%+O(%f)%r,
+< Push a file name onto the stack. The name is given after '(': >
+ \%+P(%f%r,
+ \%+P\ %\\=(%f%r,
+ \%+P%*[^()](%f%r,
+ \%+P[%\\d%[^()]%#(%f%r,
+< Pop the last stored file name when a ')' is scanned: >
+ \%+Q)%r,
+ \%+Q%*[^()])%r,
+ \%+Q[%\\d%*[^()])%r
+
+Note that in some cases file names in the LaTeX output log cannot be parsed
+properly. The parser might have been messed up by unbalanced parentheses
+then. The above example tries to catch the most relevant cases only.
+You can customize the given setting to suit your own purposes, for example,
+all the annoying "Overfull ..." warnings could be excluded from being
+recognized as an error.
+Alternatively to filtering the LaTeX compiler output, it is also possible
+to directly read the *.log file that is produced by the [La]TeX compiler.
+This contains even more useful information about possible error causes.
+However, to properly parse such a complex file, an external filter should
+be used. See the description further above how to make such a filter known
+by Vim.
+
+ *errorformat-Perl*
+In $VIMRUNTIME/tools you can find the efm_perl.pl script, which filters Perl
+error messages into a format that quickfix mode will understand. See the
+start of the file about how to use it.
+
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
new file mode 100644
index 000000000..e18827f2d
--- /dev/null
+++ b/runtime/doc/quickref.txt
@@ -0,0 +1,1325 @@
+*quickref.txt* For Vim version 7.0aa. Last change: 2004 May 05
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+ Quick reference guide
+
+ *quickref* *Contents*
+ tag subject tag subject ~
+|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
+|Q_pa| motion: Pattern searches |Q_ur| Undo/Redo commands
+|Q_ma| motion: Marks |Q_et| External commands
+|Q_vm| motion: Various |Q_qf| Quickfix commands
+|Q_ta| motion: Using tags |Q_vc| Various commands
+|Q_sc| Scrolling |Q_ce| Ex: Command-line editing
+|Q_in| insert: Inserting text |Q_ra| Ex: Ranges
+|Q_ai| insert: Keys |Q_ex| Ex: Special characters
+|Q_ss| insert: Special keys |Q_ed| Editing a file
+|Q_di| insert: Digraphs |Q_fl| Using the argument list
+|Q_si| insert: Special inserts |Q_wq| Writing and quitting
+|Q_de| change: Deleting text |Q_st| Starting VIM
+|Q_cm| change: Copying and moving |Q_ac| Automatic commands
+|Q_ch| change: Changing text |Q_wi| Multi-window commands
+|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
+
+------------------------------------------------------------------------------
+N is used to indicate an optional count that can be given before the command.
+------------------------------------------------------------------------------
+*Q_lr* Left-right motions
+
+|h| N h left (also: CTRL-H, <BS>, or <Left> key)
+|l| N l right (also: <Space> or <Right> key)
+|0| 0 to first character in the line (also: <Home> key)
+|^| ^ to first non-blank character in the line
+|$| N $ to the last character in the line (N-1 lines lower)
+ (also: <End> key)
+|g0| N g0 to first character in screen line (differs from "0"
+ when lines wrap)
+|g^| N g^ to first non-blank character in screen line (differs
+ from "^" when lines wrap)
+|g$| N g$ to last character in screen line (differs from "$"
+ when lines wrap)
+|gm| N gm to middle of the screen line
+|bar| N | to column N (default: 1)
+|f| N f{char} to the Nth occurrence of {char} to the right
+|F| N F{char} to the Nth occurrence of {char} to the left
+|t| N t{char} till before the Nth occurrence of {char} to the right
+|T| N T{char} till before the Nth occurrence of {char} to the left
+|;| N ; repeat the last "f", "F", "t", or "T" N times
+|,| N , repeat the last "f", "F", "t", or "T" N times in
+ opposite direction
+------------------------------------------------------------------------------
+*Q_ud* Up-down motions
+
+|k| N k up N lines (also: CTRL-P and <Up>)
+|j| N j down N lines (also: CTRL-J, CTRL-N, <NL>, and <Down>)
+|-| N - up N lines, on the first non-blank character
+|+| N + down N lines, on the first non-blank character (also:
+ CTRL-M and <CR>)
+|_| N _ down N-1 lines, on the first non-blank character
+|G| N G goto line N (default: last line), on the first
+ non-blank character
+|gg| N gg goto line N (default: first line), on the first
+ non-blank character
+|N%| N % goto line N percentage down in the file. N must be
+ given, otherwise it is the |%| command.
+|gk| N gk up N screen lines (differs from "k" when line wraps)
+|gj| N gj down N screen lines (differs from "j" when line wraps)
+------------------------------------------------------------------------------
+*Q_tm* Text object motions
+
+|w| N w N words forward
+|W| N W N blank-separated |WORD|s forward
+|e| N e forward to the end of the Nth word
+|E| N E forward to the end of the Nth blank-separated |WORD|
+|b| N b N words backward
+|B| N B N blank-separated |WORD|s backward
+|ge| N ge backward to the end of the Nth word
+|gE| N gE backward to the end of the Nth blank-separated |WORD|
+
+|)| N ) N sentences forward
+|(| N ( N sentences backward
+|}| N } N paragraphs forward
+|{| N { N paragraphs backward
+|]]| N ]] N sections forward, at start of section
+|[[| N [[ N sections backward, at start of section
+|][| N ][ N sections forward, at end of section
+|[]| N [] N sections backward, at end of section
+|[(| N [( N times back to unclosed '('
+|[{| N [{ N times back to unclosed '{'
+|[m| N [m N times back to start of method (for Java)
+|[M| N [M N times back to end of method (for Java)
+|])| N ]) N times forward to unclosed ')'
+|]}| N ]} N times forward to unclosed '}'
+|]m| N ]m N times forward to start of method (for Java)
+|]M| N ]M N times forward to end of method (for Java)
+|[#| N [# N times back to unclosed "#if" or "#else"
+|]#| N ]# N times forward to unclosed "#else" or "#endif"
+|[star| N [* N times back to start of comment "/*"
+|]star| N ]* N times forward to end of comment "*/"
+------------------------------------------------------------------------------
+*Q_pa* Pattern searches
+
+|/| N /{pattern}[/[offset]]<CR>
+ search forward for the Nth occurrence of {pattern}
+|?| N ?{pattern}[?[offset]]<CR>
+ search backward for the Nth occurrence of {pattern}
+|/<CR>| N /<CR> repeat last search, in the forward direction
+|?<CR>| N ?<CR> repeat last search, in the backward direction
+|n| N n repeat last search
+|N| N N repeat last search, in opposite direction
+|star| N * search forward for the identifier under the cursor
+|#| N # search backward for the identifier under the cursor
+|gstar| N g* like "*", but also find partial matches
+|g#| N g# like "#", but also find partial matches
+|gd| gd goto local declaration of identifier under the cursor
+|gD| gD goto global declaration of identifier under the cursor
+
+|pattern| Special characters in search patterns
+
+ meaning magic nomagic ~
+ matches any single character . \.
+ matches start of line ^ ^
+ matches <EOL> $ $
+ matches start of word \< \<
+ matches end of word \> \>
+ matches a single char from the range [a-z] \[a-z]
+ matches a single char not in the range [^a-z] \[^a-z]
+ matches an identifier char \i \i
+ idem but excluding digits \I \I
+ matches a keyword character \k \k
+ idem but excluding digits \K \K
+ matches a file name character \f \f
+ idem but excluding digits \F \F
+ matches a printable character \p \p
+ idem but excluding digits \P \P
+ matches a white space character \s \s
+ matches a non-white space character \S \S
+
+ matches <Esc> \e \e
+ matches <Tab> \t \t
+ matches <CR> \r \r
+ matches <BS> \b \b
+
+ matches 0 or more of the preceding atom * \*
+ matches 1 or more of the preceding atom \+ \+
+ matches 0 or 1 of the preceding atom \= \=
+ matches 2 to 5 of the preceding atom \{2,5} \{2,5}
+ separates two alternatives \| \|
+ group a pattern into an atom \(\) \(\)
+
+|search-offset| Offsets allowed after search command
+
+ [num] [num] lines downwards, in column 1
+ +[num] [num] lines downwards, in column 1
+ -[num] [num] lines upwards, in column 1
+ e[+num] [num] characters to the right of the end of the match
+ e[-num] [num] characters to the left of the end of the match
+ s[+num] [num] characters to the right of the start of the match
+ s[-num] [num] characters to the left of the start of the match
+ b[+num] [num] identical to s[+num] above (mnemonic: begin)
+ b[-num] [num] identical to s[-num] above (mnemonic: begin)
+ ;{search-command} execute {search-command} next
+------------------------------------------------------------------------------
+*Q_ma* Marks and motions
+
+|m| m{a-zA-Z} mark current position with mark {a-zA-Z}
+|`a| `{a-z} go to mark {a-z} within current file
+|`A| `{A-Z} go to mark {A-Z} in any file
+|`0| `{0-9} go to the position where Vim was previously exited
+|``| `` go to the position before the last jump
+|`quote| `" go to the position when last editing this file
+|`[| `[ go to the start of the previously operated or put text
+|`]| `] go to the end of the previously operated or put text
+|`<| `< go to the start of the (previous) Visual area
+|`>| `> go to the end of the (previous) Visual area
+|`.| `. go to the position of the last change in this file
+|'| '{a-zA-Z0-9[]'"<>.}
+ same as `, but on the first non-blank in the line
+|: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
+------------------------------------------------------------------------------
+*Q_vm* Various motions
+
+|%| % find the next brace, bracket, comment, or "#if"/
+ "#else"/"#endif" in this line and go to its match
+|H| N H go to the Nth line in the window, on the first
+ non-blank
+|M| M go to the middle line in the window, on the first
+ non-blank
+|L| N L go to the Nth line from the bottom, on the first
+ non-blank
+
+|go| N go go to Nth byte in the buffer
+|:go| :[range]go[to] [off] go to [off] byte in the buffer
+------------------------------------------------------------------------------
+*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
+|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
+|:tjump| :tj[ump][!] [tag] Jump to tag [tag] or select from list when
+ there are multiple matches
+
+|: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
+|: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
+
+|: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
+------------------------------------------------------------------------------
+*Q_sc* Scrolling
+
+|CTRL-E| N CTRL-E window N lines downwards (default: 1)
+|CTRL-D| N CTRL-D window N lines Downwards (default: 1/2 window)
+|CTRL-F| N CTRL-F window N pages Forwards (downwards)
+|CTRL-Y| N CTRL-Y window N lines upwards (default: 1)
+|CTRL-U| N CTRL-U window N lines Upwards (default: 1/2 window)
+|CTRL-B| N CTRL-B window N pages Backwards (upwards)
+|z<CR>| z<CR> or zt redraw, current line at top of window
+|z.| z. or zz redraw, current line at center of window
+|z-| z- or zb redraw, current line at bottom of window
+
+These only work when 'wrap' is off:
+|zh| N zh scroll screen N characters to the right
+|zl| N zl scroll screen N characters to the left
+|zH| N zH scroll screen half a screenwidth to the right
+|zL| N zL scroll screen half a screenwidth to the left
+------------------------------------------------------------------------------
+*Q_in* Inserting text
+
+|a| N a append text after the cursor (N times)
+|A| N A append text at the end of the line (N times)
+|i| N i insert text before the cursor (N times) (also: <Insert>)
+|I| N I insert text before the first non-blank in the line (N times)
+|gI| N gI insert text in column 1 (N times)
+|o| N o open a new line below the current line, append text (N times)
+|O| N O open a new line above the current line, append text (N times)
+|:startinsert| :star[tinsert][!] start Insert mode, append when [!] used
+
+in Visual block mode:
+|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
+
+|insert-index| alphabetical index of Insert mode commands
+
+leaving Insert mode:
+|i_<Esc>| <Esc> end Insert mode, back to Normal mode
+|i_CTRL-C| CTRL-C like <Esc>, but do not use an abbreviation
+|i_CTRL-O| CTRL-O {command} execute {command} and return to Insert mode
+
+moving around:
+|i_<Up>| cursor keys move cursor left/right/up/down
+|i_<S-Left>| shift-left/right one word left/right
+|i_<S-Up>| shift-up/down one screenful backward/forward
+|i_<End>| <End> cursor after last character in the line
+|i_<Home>| <Home> cursor to first character in the line
+------------------------------------------------------------------------------
+*Q_ss* Special keys in Insert mode
+
+|i_CTRL-V| CTRL-V {char}.. insert character literally, or enter decimal
+ byte value
+|i_<NL>| <NL> or <CR> or CTRL-M or CTRL-J
+ begin new line
+|i_CTRL-E| CTRL-E insert the character from below the cursor
+|i_CTRL-Y| CTRL-Y insert the character from above the cursor
+
+|i_CTRL-A| CTRL-A insert previously inserted text
+|i_CTRL-@| CTRL-@ insert previously inserted text and stop
+ Insert mode
+|i_CTRL-R| CTRL-R {0-9a-z%#:.-="} insert the contents of a register
+
+|i_CTRL-N| CTRL-N insert next match of identifier before the
+ cursor
+|i_CTRL-P| CTRL-P insert previous match of identifier before
+ the cursor
+|i_CTRL-X| CTRL-X ... complete the word before the cursor in
+ various ways
+
+|i_<BS>| <BS> or CTRL-H delete the character before the cursor
+|i_<Del>| <Del> delete the character under the cursor
+|i_CTRL-W| CTRL-W delete word before the cursor
+|i_CTRL-U| CTRL-U delete all entered characters in the current
+ line
+|i_CTRL-T| CTRL-T insert one shiftwidth of indent in front of
+ the current line
+|i_CTRL-D| CTRL-D delete one shiftwidth of indent in front of
+ the current line
+|i_0_CTRL-D| 0 CTRL-D delete all indent in the current line
+|i_^_CTRL-D| ^ CTRL-D delete all indent in the current line,
+ restore indent in next line
+------------------------------------------------------------------------------
+*Q_di* Digraphs
+
+|:dig| :dig[raphs] show current list of digraphs
+|:dig| :dig[raphs] {char1}{char2} {number} ...
+ add digraph(s) to the list
+
+In Insert or Command-line mode:
+|i_CTRL-K| CTRL-K {char1} {char2}
+ enter digraph
+|i_digraph| {char1} <BS> {char2}
+ enter digraph if 'digraph' option set
+------------------------------------------------------------------------------
+*Q_si* Special inserts
+
+|:r| :r [file] insert the contents of [file] below the cursor
+|:r!| :r! {command} insert the standard output of {command} below the
+ cursor
+------------------------------------------------------------------------------
+*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
+|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
+|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
+|gJ| N gJ like "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
+
+|quote| "{char} use register {char} for the next delete, yank, or put
+|:reg| :reg show the contents of all registers
+|:reg| :reg {arg} show the contents of registers mentioned in {arg}
+|y| N y{motion} yank the text moved over with {motion} into a register
+|v_y| {visual}y yank the highlighted text into a register
+|yy| N yy yank N lines into a register
+|Y| N Y yank N lines into a register
+|p| N p put a register after the cursor position (N times)
+|P| N P put a register before the cursor position (N times)
+|]p| N ]p like p, but adjust indent to current line
+|[p| N [p like P, but adjust indent to current line
+|gp| N gp like p, but leave cursor after the new text
+|gP| N gP like P, but leave cursor after the new text
+------------------------------------------------------------------------------
+*Q_ch* Changing text
+
+|r| N r{char} replace N characters with {char}
+|gr| N gr{char} replace N characters without affecting layout
+|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}
+ in Visual block mode: Replace each char of the
+ selected text with {char}
+
+ (change = delete text and enter Insert mode)
+|c| N c{motion} change the text that is moved over with {motion}
+|v_c| {visual}c change the highlighted text
+|cc| N cc change N lines
+|S| N S change N lines
+|C| N C change to the end of the line (and N-1 more lines)
+|s| N s change N characters
+|v_b_c| {visual}c in Visual block mode: Change each of the selected
+ lines with the entered text
+|v_b_C| {visual}C in Visual block mode: Change each of the selected
+ lines until end-of-line with the entered text
+
+|~| N ~ switch case for N characters and advance cursor
+|v_~| {visual}~ switch case for highlighted text
+|v_u| {visual}u make highlighted text lowercase
+|v_U| {visual}U make highlighted text uppercase
+|g~| g~{motion} switch case for the text that is moved over with
+ {motion}
+|gu| gu{motion} make the text that is moved over with {motion}
+ lowercase
+|gU| gU{motion} make the text that is moved over with {motion}
+ uppercase
+|v_g?| {visual}g? perform rot13 encoding on highlighted text
+|g?| g?{motion} perform rot13 encoding on the text that is moved over
+ with {motion}
+
+|CTRL-A| N CTRL-A add N to the number at or after the cursor
+|CTRL-X| N CTRL-X subtract N from the number at or after the cursor
+
+|<| N <{motion} move the lines that are moved over with {motion} one
+ shiftwidth left
+|<<| N << move N lines one shiftwidth left
+|>| N >{motion} move the lines that are moved over with {motion} one
+ shiftwidth right
+|>>| N >> move N lines one shiftwidth right
+|gq| N gq{motion} format the lines that are moved over with {motion} to
+ 'textwidth' length
+|:ce| :[range]ce[nter] [width]
+ center the lines in [range]
+|:le| :[range]le[ft] [indent]
+ left-align the lines in [range] (with [indent])
+|:ri| :[range]ri[ght] [width]
+ right-align the lines in [range]
+------------------------------------------------------------------------------
+*Q_co* Complex changes
+
+|!| N !{motion}{command}<CR>
+ filter the lines that are moved over through {command}
+|!!| N !!{command}<CR>
+ filter N lines through {command}
+|v_!| {visual}!{command}<CR>
+ filter the highlighted lines through {command}
+|:range!| :[range]! {command}<CR>
+ filter [range] lines through {command}
+|=| N ={motion}
+ filter the lines that are moved over through 'equalprg'
+|==| N == filter N lines through 'equalprg'
+|v_=| {visual}=
+ filter the highlighted lines through 'equalprg'
+|:s| :[range]s[ubstitute]/{pattern}/{string}/[g][c]
+ substitute {pattern} by {string} in [range] lines;
+ with [g], replace all occurrences of {pattern};
+ with [c], confirm each replacement
+|:s| :[range]s[ubstitute] [g][c]
+ repeat previous ":s" with new range and options
+|&| & Repeat previous ":s" on current line without options
+|:ret| :[range]ret[ab][!] [tabstop]
+ set 'tabstop' to new value and adjust white space
+ accordingly
+------------------------------------------------------------------------------
+*Q_vi* Visual mode
+
+|visual-index| list of Visual mode commands.
+
+|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_CTRL-V| CTRL-V highlight blockwise or stop highlighting
+------------------------------------------------------------------------------
+*Q_to* Text objects (only in Visual mode or after an operator)
+
+|v_aw| N aw Select "a word"
+|v_iw| N iw Select "inner word"
+|v_aW| N aW Select "a |WORD|"
+|v_iW| N iW Select "inner |WORD|"
+|v_as| N as Select "a sentence"
+|v_is| N is Select "inner sentence"
+|v_ap| N ap Select "a paragraph"
+|v_ip| N ip Select "inner paragraph"
+|v_ab| N ab Select "a block" (from "[(" to "])")
+|v_ib| N ib Select "inner block" (from "[(" to "])")
+|v_aB| N aB Select "a Block" (from "[{" to "]}")
+|v_iB| N iB Select "inner Block" (from "[{" to "]}")
+------------------------------------------------------------------------------
+*Q_re* Repeating commands
+
+|.| N . repeat last change (with count replaced with N)
+|q| q{a-z} record typed characters into register {a-z}
+|q| q{A-Z} record typed characters, appended to register {a-z}
+|q| q stop recording
+|@| N @{a-z} execute the contents of register {a-z} (N times)
+|@@| N @@ repeat previous @{a-z} (N times)
+|:@| :@{a-z} execute the contents of register {a-z} as an Ex
+ command
+|:@@| :@@ repeat previous :@{a-z}
+|:g| :[range]g[lobal]/{pattern}/[cmd]
+ Execute Ex command [cmd] (default: ":p") on the lines
+ within [range] where {pattern} matches.
+|:g| :[range]g[lobal]!/{pattern}/[cmd]
+ Execute Ex command [cmd] (default: ":p") on the lines
+ within [range] where {pattern} does NOT match.
+|:so| :so[urce] {file}
+ Read Ex commands from {file}.
+|:so| :so[urce]! {file}
+ Read Vim commands from {file}.
+|:sl| :sl[eep] [sec]
+ don't do anything for [sec] seconds
+|gs| N gs Goto Sleep for N seconds
+------------------------------------------------------------------------------
+*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
+ mode.
+|:noremap| :no[remap][!] {lhs} {rhs}
+ Same as ":map", no remapping for this {rhs}
+|:unmap| :unm[ap] {lhs} Remove the mapping of {lhs} for Normal and
+ Visual mode.
+|:unmap!| :unm[ap]! {lhs} Remove the mapping of {lhs} for Insert and
+ Command-line mode.
+|:map_l| :ma[p] [lhs] List mappings (starting with [lhs]) for
+ Normal and Visual mode.
+|:map_l!| :ma[p]! [lhs] List mappings (starting with [lhs]) for
+ Insert and Command-line mode.
+|:cmap| :cmap/:cunmap/:cnoremap
+ like ":map!"/":unmap!"/":noremap!" but for
+ Command-line mode only
+|:imap| :imap/:iunmap/:inoremap
+ like ":map!"/":unmap!"/":noremap!" but for
+ Insert mode only
+|:nmap| :nmap/:nunmap/:nnoremap
+ like ":map"/":unmap"/":noremap" but for
+ Normal mode only
+|:vmap| :vmap/:vunmap/:vnoremap
+ like ":map"/":unmap"/":noremap" but for
+ Visual mode only
+|: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
+|:mapc| :mapc[lear]! remove mappings for Insert and Cmdline mode
+|:imapc| :imapc[lear] remove mappings for Insert mode
+|:vmapc| :vmapc[lear] remove mappings for Visual mode
+|:omapc| :omapc[lear] remove mappings for Operator-pending mode
+|:nmapc| :nmapc[lear] remove mappings for Normal mode
+|:cmapc| :cmapc[lear] remove mappings for Cmdline mode
+|:mkexrc| :mk[exrc][!] [file] write current mappings, abbreviations, and
+ settings to [file] (default: ".exrc";
+ use ! to overwrite)
+|:mkvimrc| :mkv[imrc][!] [file]
+ same as ":mkexrc", but with default ".vimrc"
+|:mksession| :mks[ession][!] [file]
+ like ":mkvimrc", but store current files,
+ windows, etc. too, to be able to continue
+ this session later.
+------------------------------------------------------------------------------
+*Q_ab* Abbreviations
+
+|:abbreviate| :ab[breviate] {lhs} {rhs} add abbreviation for {lhs} to {rhs}
+|:abbreviate| :ab[breviate] {lhs} show abbr's that start with {lhs}
+|:abbreviate| :ab[breviate] show all abbreviations
+|:unabbreviate| :una[bbreviate] {lhs} remove abbreviation for {lhs}
+|:noreabbrev| :norea[bbrev] [lhs] [rhs] like ":ab", but don't remap [rhs]
+|:iabbrev| :iab/:iunab/:inoreab like ":ab", but only for Insert mode
+|:cabbrev| :cab/:cunab/:cnoreab like ":ab", but only for
+ Command-line mode
+|:abclear| :abc[lear] remove all abbreviations
+|:cabclear| :cabc[lear] remove all abbr's for Cmdline mode
+|:iabclear| :iabc[lear] remove all abbr's for Insert mode
+------------------------------------------------------------------------------
+*Q_op* Options
+
+|:set| :se[t] Show all modified options.
+|:set| :se[t] all Show all non-termcap options.
+|:set| :se[t] termcap Show all termcap options.
+|:set| :se[t] {option} Set boolean option (switch it on),
+ show string or number option.
+|:set| :se[t] no{option} Reset boolean option (switch it off).
+|:set| :se[t] inv{option} invert boolean option.
+|:set| :se[t] {option}={value} Set string/number option to {value}.
+|:set| :se[t] {option}+={value} append {value} to string option, add
+ {value} to number option
+|:set| :se[t] {option}-={value} remove {value} to string option,
+ subtract {value} from number option
+|:set| :se[t] {option}? Show value of {option}.
+|:set| :se[t] {option}& Reset {option} to its default value.
+
+|:setlocal| :setl[ocal] like ":set" but set the local value
+ for options that have one
+|:setglobal| :setg[lobal] like ":set" but set the global value
+ of a local option
+
+|:fix| :fix[del] Set value of 't_kD' according to
+ value of 't_kb'.
+|:options| :opt[ions] Open a new window to view and set
+ options, grouped by functionality,
+ a one line explanation and links to
+ the help.
+
+Short explanation of each option: *option-list*
+|'aleph'| |'al'| ASCII code of the letter Aleph (Hebrew)
+|'allowrevins'| |'ari'| allow CTRL-_ in Insert and Command-line mode
+|'altkeymap'| |'akm'| for default second language (Farsi/Hebrew)
+|'ambiwidth'| |'ambw'| what to do with Unicode chars of ambiguous width
+|'antialias'| |'anti'| Mac OS X: use smooth, antialiased fonts
+|'autochdir'| |'acd'| change directory to the file in the current window
+|'arabic'| |'arab'| for Arabic as a default second language
+|'arabicshape'| |'arshape'| do shaping for Arabic characters
+|'autoindent'| |'ai'| take indent for new line from previous line
+|'autoread'| |'ar'| autom. read file when changed outside of Vim
+|'autowrite'| |'aw'| automatically write file if changed
+|'autowriteall'| |'awa'| as 'autowrite', but works with more commands
+|'background'| |'bg'| "dark" or "light", used for highlight colors
+|'backspace'| |'bs'| how backspace works at start of line
+|'backup'| |'bk'| keep backup file after overwriting a file
+|'backupcopy'| |'bkc'| make backup as a copy, don't rename the file
+|'backupdir'| |'bdir'| list of directories for the backup file
+|'backupext'| |'bex'| extension used for the backup file
+|'backupskip'| |'bsk'| no backup for files that match these patterns
+|'balloondelay'| |'bdlay'| delay in mS before a balloon may pop up
+|'ballooneval'| |'beval'| switch on balloon evaluation
+|'binary'| |'bin'| read/write/edit file in binary mode
+|'bioskey'| |'biosk'| MS-DOS: use bios calls for input characters
+|'bomb'| prepend a Byte Order Mark to the file
+|'breakat'| |'brk'| characters that may cause a line break
+|'browsedir'| |'bsdir'| which directory to start browsing in
+|'bufhidden'| |'bh'| what to do when buffer is no longer in window
+|'buflisted'| |'bl'| whether the buffer shows up in the buffer list
+|'buftype'| |'bt'| special type of buffer
+|'casemap'| |'cmp'| specifies how case of letters is changed
+|'cdpath'| |'cd'| list of directories searched with ":cd"
+|'cedit'| key used to open the command-line window
+|'charconvert'| |'ccv'| expression for character encoding conversion
+|'cindent'| |'cin'| do C program indenting
+|'cinkeys'| |'cink'| keys that trigger indent when 'cindent' is set
+|'cinoptions'| |'cino'| how to do indenting when 'cindent' is set
+|'cinwords'| |'cinw'| words where 'si' and 'cin' add an indent
+|'clipboard'| |'cb'| use the clipboard as the unnamed register
+|'cmdheight'| |'ch'| number of lines to use for the command-line
+|'cmdwinheight'| |'cwh'| height of the command-line window
+|'columns'| |'co'| number of columns in the display
+|'comments'| |'com'| patterns that can start a comment line
+|'commentstring'| |'cms'| template for comments; used for fold marker
+|'compatible'| |'cp'| behave Vi-compatible as much as possible
+|'complete'| |'cpt'| specify how Insert mode completion works
+|'confirm'| |'cf'| ask what to do about unsaved/read-only files
+|'conskey'| |'consk'| get keys directly from console (MS-DOS only)
+|'copyindent'| |'ci'| make 'autoindent' use existing indent structure
+|'cpoptions'| |'cpo'| flags for Vi-compatible behavior
+|'cscopepathcomp'| |'cspc'| how many components of the path to show
+|'cscopeprg'| |'csprg'| command to execute cscope
+|'cscopequickfix'| |'csqf'| use quickfix window for cscope results
+|'cscopetag'| |'cst'| use cscope for tag commands
+|'cscopetagorder'| |'csto'| determines ":cstag" search order
+|'cscopeverbose'| |'csverb'| give messages when adding a cscope database
+|'debug'| set to "msg" to see all error messages
+|'define'| |'def'| pattern to be used to find a macro definition
+|'delcombine'| |'deco'| delete combining characters on their own
+|'dictionary'| |'dict'| list of file names used for keyword completion
+|'diff'| use diff mode for the current window
+|'diffexpr'| |'dex'| expression used to obtain a diff file
+|'diffopt'| |'dip'| options for using diff mode
+|'digraph'| |'dg'| enable the entering of digraphs in Insert mode
+|'directory'| |'dir'| list of directory names for the swap file
+|'display'| |'dy'| list of flags for how to display text
+|'eadirection'| |'ead'| in which direction 'equalalways' works
+|'edcompatible'| |'ed'| toggle flags of ":substitute" command
+|'encoding'| |'enc'| encoding used internally
+|'endofline'| |'eol'| write <EOL> for last line in file
+|'equalalways'| |'ea'| windows are automatically made the same size
+|'equalprg'| |'ep'| external program to use for "=" command
+|'errorbells'| |'eb'| ring the bell for error messages
+|'errorfile'| |'ef'| name of the errorfile for the QuickFix mode
+|'errorformat'| |'efm'| description of the lines in the error file
+|'esckeys'| |'ek'| recognize function keys in Insert mode
+|'eventignore'| |'ei'| autocommand events that are ignored
+|'expandtab'| |'et'| use spaces when <Tab> is inserted
+|'exrc'| |'ex'| read .vimrc and .exrc in the current directory
+|'fileencoding'| |'fenc'| file encoding for multi-byte text
+|'fileencodings'| |'fencs'| automatically detected character encodings
+|'fileformat'| |'ff'| file format used for file I/O
+|'fileformats'| |'ffs'| automatically detected values for 'fileformat'
+|'filetype'| |'ft'| type of file, used for autocommands
+|'fillchars'| |'fcs'| characters to use for displaying special items
+|'fkmap'| |'fk'| Farsi keyboard mapping
+|'foldclose'| |'fcl'| close a fold when the cursor leaves it
+|'foldcolumn'| |'fdc'| width of the column used to indicate folds
+|'foldenable'| |'fen'| set to display all folds open
+|'foldexpr'| |'fde'| expression used when 'foldmethod' is "expr"
+|'foldignore'| |'fdi'| ignore lines when 'foldmethod' is "indent"
+|'foldlevel'| |'fdl'| close folds with a level higher than this
+|'foldlevelstart'| |'fdls'| 'foldlevel' when starting to edit a file
+|'foldmarker'| |'fmr'| markers used when 'foldmethod' is "marker"
+|'foldmethod'| |'fdm'| folding type
+|'foldminlines'| |'fml'| minimum number of lines for a fold to be closed
+|'foldnestmax'| |'fdn'| maximum fold depth
+|'foldopen'| |'fdo'| for which commands a fold will be opened
+|'foldtext'| |'fdt'| expression used to display for a closed fold
+|'formatoptions'| |'fo'| how automatic formatting is to be done
+|'formatprg'| |'fp'| name of external program used with "gq" command
+|'gdefault'| |'gd'| the ":substitute" flag 'g' is default on
+|'grepformat'| |'gfm'| format of 'grepprg' output
+|'grepprg'| |'gp'| program to use for ":grep"
+|'guicursor'| |'gcr'| GUI: settings for cursor shape and blinking
+|'guifont'| |'gfn'| GUI: Name(s) of font(s) to be used
+|'guifontset'| |'gfs'| GUI: Names of multi-byte fonts to be used
+|'guifontwide'| |'gfw'| list of font names for double-wide characters
+|'guiheadroom'| |'ghr'| GUI: pixels room for window decorations
+|'guioptions'| |'go'| GUI: Which components and options are used
+|'guipty'| GUI: try to use a pseudo-tty for ":!" commands
+|'helpfile'| |'hf'| full path name of the main help file
+|'helpheight'| |'hh'| minimum height of a new help window
+|'helplang'| |'hlg'| preferred help languages
+|'hidden'| |'hid'| don't unload buffer when it is |abandon|ed
+|'highlight'| |'hl'| sets highlighting mode for various occasions
+|'hlsearch'| |'hls'| highlight matches with last search pattern
+|'history'| |'hi'| number of command-lines that are remembered
+|'hkmap'| |'hk'| Hebrew keyboard mapping
+|'hkmapp'| |'hkp'| phonetic Hebrew keyboard mapping
+|'icon'| let Vim set the text of the window icon
+|'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
+|'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
+|'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
+|'indentexpr'| |'inde'| expression used to obtain the indent of a line
+|'indentkeys'| |'indk'| keys that trigger indenting with 'indentexpr'
+|'infercase'| |'inf'| adjust case of match for keyword completion
+|'insertmode'| |'im'| start the edit of a file in Insert mode
+|'isfname'| |'isf'| characters included in file names and pathnames
+|'isident'| |'isi'| characters included in identifiers
+|'iskeyword'| |'isk'| characters included in keywords
+|'isprint'| |'isp'| printable characters
+|'joinspaces'| |'js'| two spaces after a period with a join command
+|'key'| encryption key
+|'keymap'| |'kmp'| name of a keyboard mapping
+|'keymodel'| |'km'| enable starting/stopping selection with keys
+|'keywordprg'| |'kp'| program to use for the "K" command
+|'langmap'| |'lmap'| alphabetic characters for other language mode
+|'langmenu'| |'lm'| language to be used for the menus
+|'laststatus'| |'ls'| tells when last window has status lines
+|'lazyredraw'| |'lz'| don't redraw while executing macros
+|'linebreak'| |'lbr'| wrap long lines at a blank
+|'lines'| number of lines in the display
+|'linespace'| |'lsp'| number of pixel lines to use between characters
+|'lisp'| automatic indenting for Lisp
+|'lispwords'| |'lw'| words that change how lisp indenting works
+|'list'| show <Tab> and <EOL>
+|'listchars'| |'lcs'| characters for displaying in list mode
+|'loadplugins'| |'lpl'| load plugin scripts when starting up
+|'magic'| changes special characters in search patterns
+|'makeef'| |'mef'| name of the errorfile for ":make"
+|'makeprg'| |'mp'| program to use for the ":make" command
+|'matchpairs'| |'mps'| pairs of characters that "%" can match
+|'matchtime'| |'mat'| tenths of a second to show matching paren
+|'maxfuncdepth'| |'mfd'| maximum recursive depth for user functions
+|'maxmapdepth'| |'mmd'| maximum recursive depth for mapping
+|'maxmem'| |'mm'| maximum memory (in Kbyte) used for one buffer
+|'maxmemtot'| |'mmt'| maximum memory (in Kbyte) used for all buffers
+|'menuitems'| |'mis'| maximum number of items in a menu
+|'modeline'| |'ml'| recognize modelines at start or end of file
+|'modelines'| |'mls'| number of lines checked for modelines
+|'modifiable'| |'ma'| changes to the text are not possible
+|'modified'| |'mod'| buffer has been modified
+|'more'| pause listings when the whole screen is filled
+|'mouse'| enable the use of mouse clicks
+|'mousefocus'| |'mousef'| keyboard focus follows the mouse
+|'mousehide'| |'mh'| hide mouse pointer while typing
+|'mousemodel'| |'mousem'| changes meaning of mouse buttons
+|'mouseshape'| |'mouses'| shape of the mouse pointer in different modes
+|'mousetime'| |'mouset'| max time between mouse double-click
+|'nrformats'| |'nf'| number formats recognized for CTRL-A command
+|'number'| |'nu'| print the line number in front of each line
+|'osfiletype'| |'oft'| operating system-specific filetype information
+|'paragraphs'| |'para'| nroff macros that separate paragraphs
+|'paste'| allow pasting text
+|'pastetoggle'| |'pt'| key code that causes 'paste' to toggle
+|'patchexpr'| |'pex'| expression used to patch a file
+|'patchmode'| |'pm'| keep the oldest version of a file
+|'path'| |'pa'| list of directories searched with "gf" et.al.
+|'preserveindent'| |'pi'| preserve the indent structure when reindenting
+|'previewheight'| |'pvh'| height of the preview window
+|'previewwindow'| |'pvw'| identifies the preview window
+|'printdevice'| |'pdev'| name of the printer to be used for :hardcopy
+|'printencoding'| |'penc'| encoding to be used for printing
+|'printexpr'| |'pexpr'| expression used to print PostScript for :hardcopy
+|'printfont'| |'pfn'| name of the font to be used for :hardcopy
+|'printheader'| |'pheader'| format of the header used for :hardcopy
+|'printoptions'| |'popt'| controls the format of :hardcopy output
+|'readonly'| |'ro'| disallow writing the buffer
+|'remap'| allow mappings to work recursively
+|'report'| threshold for reporting nr. of lines changed
+|'restorescreen'| |'rs'| Win32: restore screen when exiting
+|'revins'| |'ri'| inserting characters will work backwards
+|'rightleft'| |'rl'| window is right-to-left oriented
+|'rightleftcmd'| |'rlc'| commands for which editing works right-to-left
+|'ruler'| |'ru'| show cursor line and column in the status line
+|'rulerformat'| |'ruf'| custom format for the ruler
+|'runtimepath'| |'rtp'| list of directories used for runtime files
+|'scroll'| |'scr'| lines to scroll with CTRL-U and CTRL-D
+|'scrollbind'| |'scb'| scroll in window as other windows scroll
+|'scrolljump'| |'sj'| minimum number of lines to scroll
+|'scrolloff'| |'so'| minimum nr. of lines above and below cursor
+|'scrollopt'| |'sbo'| how 'scrollbind' should behave
+|'sections'| |'sect'| nroff macros that separate sections
+|'secure'| secure mode for reading .vimrc in current dir
+|'selection'| |'sel'| what type of selection to use
+|'selectmode'| |'slm'| when to use Select mode instead of Visual mode
+|'sessionoptions'| |'ssop'| options for |:mksession|
+|'shell'| |'sh'| name of shell to use for external commands
+|'shellcmdflag'| |'shcf'| flag to shell to execute one command
+|'shellpipe'| |'sp'| string to put output of ":make" in error file
+|'shellquote'| |'shq'| quote character(s) for around shell command
+|'shellredir'| |'srr'| string to put output of filter in a temp file
+|'shellslash'| |'ssl'| use forward slash for shell file names
+|'shelltype'| |'st'| Amiga: influences how to use a shell
+|'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
+|'shortmess'| |'shm'| list of flags, reduce length of messages
+|'shortname'| |'sn'| non-MS-DOS: Filenames assumed to be 8.3 chars
+|'showbreak'| |'sbr'| string to use at the start of wrapped lines
+|'showcmd'| |'sc'| show (partial) command in status line
+|'showfulltag'| |'sft'| show full tag pattern when completing tag
+|'showmatch'| |'sm'| briefly jump to matching bracket if insert one
+|'showmode'| |'smd'| message on status line to show current mode
+|'sidescroll'| |'ss'| minimum number of columns to scroll horizontal
+|'sidescrolloff'| |'siso'| min. nr. of columns to left and right of cursor
+|'smartcase'| |'scs'| no ignore case when pattern has uppercase
+|'smartindent'| |'si'| smart autoindenting for C programs
+|'smarttab'| |'sta'| use 'shiftwidth' when inserting <Tab>
+|'softtabstop'| |'sts'| number of spaces that <Tab> uses while editing
+|'splitbelow'| |'sb'| new window from split is below the current one
+|'splitright'| |'spr'| new window is put right of the current one
+|'startofline'| |'sol'| commands move cursor to first blank in line
+|'statusline'| |'stl'| custom format for the status line
+|'suffixes'| |'su'| suffixes that are ignored with multiple match
+|'suffixesadd'| |'sua'| suffixes added when searching for a file
+|'swapfile'| |'swf'| whether to use a swapfile for a buffer
+|'swapsync'| |'sws'| how to sync the swap file
+|'switchbuf'| |'swb'| sets behavior when switching to another buffer
+|'syntax'| |'syn'| syntax to be loaded for current buffer
+|'tabstop'| |'ts'| number of spaces that <Tab> in file uses
+|'tagbsearch'| |'tbs'| use binary searching in tags files
+|'taglength'| |'tl'| number of significant characters for a tag
+|'tagrelative'| |'tr'| file names in tag file are relative
+|'tags'| |'tag'| list of file names used by the tag command
+|'tagstack'| |'tgst'| push tags onto the tag stack
+|'term'| name of the terminal
+|'termbidi'| |'tbidi'| terminal takes care of bi-directionality
+|'termencoding'| |'tenc'| character encoding used by the terminal
+|'terse'| shorten some messages
+|'textauto'| |'ta'| obsolete, use 'fileformats'
+|'textmode'| |'tx'| obsolete, use 'fileformat'
+|'textwidth'| |'tw'| maximum width of text that is being inserted
+|'thesaurus'| |'tsr'| list of thesaurus files for keyword completion
+|'tildeop'| |'top'| tilde command "~" behaves like an operator
+|'timeout'| |'to'| time out on mappings and key codes
+|'timeoutlen'| |'tm'| time out time in milliseconds
+|'title'| let Vim set the title of the window
+|'titlelen'| percentage of 'columns' used for window title
+|'titleold'| old title, restored when exiting
+|'titlestring'| string to use for the Vim window title
+|'toolbar'| |'tb'| GUI: which items to show in the toolbar
+|'toolbariconsize'| |'tbis'| size of the toolbar icons (for GTK 2 only)
+|'ttimeout'| time out on mappings
+|'ttimeoutlen'| |'ttm'| time out time for key codes in milliseconds
+|'ttybuiltin'| |'tbi'| use built-in termcap before external termcap
+|'ttyfast'| |'tf'| indicates a fast terminal connection
+|'ttymouse'| |'ttym'| type of mouse codes generated
+|'ttyscroll'| |'tsl'| maximum number of lines for a scroll
+|'ttytype'| |'tty'| alias for 'term'
+|'undolevels'| |'ul'| maximum number of changes that can be undone
+|'updatecount'| |'uc'| after this many characters flush swap file
+|'updatetime'| |'ut'| after this many milliseconds flush swap file
+|'verbose'| |'vbs'| give informative messages
+|'viewdir'| |'vdir'| directory where to store files with :mkview
+|'viewoptions'| |'vop'| specifies what to save for :mkview
+|'viminfo'| |'vi'| use .viminfo file upon startup and exiting
+|'virtualedit'| |'ve'| when to use virtual editing
+|'visualbell'| |'vb'| use visual bell instead of beeping
+|'warn'| warn for shell command when buffer was changed
+|'weirdinvert'| |'wi'| for terminals that have weird inversion method
+|'whichwrap'| |'ww'| allow specified keys to cross line boundaries
+|'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
+|'wildmenu'| |'wmnu'| use menu for command line completion
+|'wildmode'| |'wim'| mode for 'wildchar' command-line expansion
+|'winaltkeys'| |'wak'| when the windows system handles ALT keys
+|'winheight'| |'wh'| minimum number of lines for the current window
+|'winfixheight'| |'wfh'| keep window height when opening/closing windows
+|'winminheight'| |'wmh'| minimum number of lines for any window
+|'winminwidth'| |'wmw'| minimal number of columns for any window
+|'winwidth'| |'wiw'| minimal number of columns for current window
+|'wrap'| long lines wrap and continue on the next line
+|'wrapmargin'| |'wm'| chars from the right where wrapping starts
+|'wrapscan'| |'ws'| searches wrap around the end of the file
+|'write'| writing to a file is allowed
+|'writeany'| |'wa'| write to file with no need for "!" override
+|'writebackup'| |'wb'| make a backup before overwriting a file
+|'writedelay'| |'wd'| delay this many msec for each char (for debug)
+------------------------------------------------------------------------------
+*Q_ur* Undo/Redo commands
+
+|u| N u undo last N changes
+|CTRL-R| N CTRL-R redo last N undone changes
+|U| U restore last changed line
+------------------------------------------------------------------------------
+*Q_et* External commands
+
+|:shell| :sh[ell] start a shell
+|:!| :!{command} execute {command} with a shell
+|K| K lookup keyword under the cursor with
+ 'keywordprg' program (default: "man")
+------------------------------------------------------------------------------
+*Q_qf* Quickfix commands
+
+|:cc| :cc [nr] display error [nr] (default is the same again)
+|:cnext| :cn display the next error
+|:cprevious| :cp display the previous error
+|:clist| :cl list all errors
+|:cfile| :cf read errors from the file 'errorfile'
+|:cquit| :cq quit without writing and return error code (to
+ the compiler)
+|:make| :make [args] start make, read errors, and jump to first
+ error
+|:grep| :gr[ep] [args] execute 'grepprg' to find matches and jump to
+ the first one.
+------------------------------------------------------------------------------
+*Q_vc* Various commands
+
+|CTRL-L| CTRL-L Clear and redraw the screen.
+|CTRL-G| CTRL-G show current file name (with path) and cursor
+ position
+|ga| ga show ascii value of character under cursor in
+ decimal, hex, and octal
+|g_CTRL-G| g CTRL-G show cursor column, line, and character
+ position
+|CTRL-C| CTRL-C during searches: Interrupt the search
+|dos-CTRL-Break| CTRL-Break MS-DOS: during searches: Interrupt the search
+|<Del>| <Del> while entering a count: delete last character
+|:version| :ve[rsion] show version information
+|:mode| :mode N MS-DOS: set screen mode to N (number, C80,
+ C4350, etc.)
+|:normal| :norm[al][!] {commands}
+ Execute Normal mode commands.
+|Q| Q switch to "Ex" mode
+
+|:redir| :redir >{file} redirect messages to {file}
+|:silent| :silent[!] {command} execute {command} silently
+|:confirm| :confirm {command} quit, write, etc., asking about
+ unsaved changes or read-only files.
+|:browse| :browse {command} open/read/write file, using a
+ file selection dialog
+------------------------------------------------------------------------------
+*Q_ce* Command-line editing
+
+|c_<Esc>| <Esc> abandon command-line (if 'wildchar' is
+ <Esc>, type it twice)
+
+|c_CTRL-V| CTRL-V {char} insert {char} literally
+|c_CTRL-V| CTRL-V {number} enter decimal value of character (up to
+ three digits)
+|c_CTRL-K| CTRL-K {char1} {char2}
+ enter digraph (See |Q_di|)
+|c_CTRL-R| CTRL-R {0-9a-z"%#:-=}
+ insert the contents of a register
+
+|c_<Left>| <Left>/<Right> cursor left/right
+|c_<S-Left>| <S-Left>/<S-Right> cursor one word left/right
+|c_CTRL-B| CTRL-B/CTRL-E cursor to beginning/end of command-line
+
+|c_<BS>| <BS> delete the character in front of the cursor
+|c_<Del>| <Del> delete the character under the cursor
+|c_CTRL-W| CTRL-W delete the word in front of the cursor
+|c_CTRL-U| CTRL-U remove all characters
+
+|c_<Up>| <Up>/<Down> recall older/newer command-line that starts
+ with current command
+|c_<S-Up>| <S-Up>/<S-Down> recall older/newer command-line from history
+|:history| :his[tory] show older command-lines
+
+Context-sensitive completion on the command-line:
+
+|c_wildchar| 'wildchar' (default: <Tab>)
+ do completion on the pattern in front of the
+ cursor. If there are multiple matches,
+ beep and show the first one; further
+ 'wildchar' will show the next ones.
+|c_CTRL-D| CTRL-D list all names that match the pattern in
+ front of the cursor
+|c_CTRL-A| CTRL-A insert all names that match pattern in front
+ of cursor
+|c_CTRL-L| CTRL-L insert longest common part of names that
+ match pattern
+|c_CTRL-N| CTRL-N after 'wildchar' with multiple matches: go
+ to next match
+|c_CTRL-P| CTRL-P after 'wildchar' with multiple matches: go
+ to previous match
+------------------------------------------------------------------------------
+*Q_ra* Ex ranges
+
+|:range| , separates two line numbers
+|:range| ; idem, set cursor to the first line number
+ before interpreting the second one
+
+|:range| {number} an absolute line number
+|:range| . the current line
+|:range| $ the last line in the file
+|:range| % equal to 1,$ (the entire file)
+|:range| * equal to '<,'> (visual area)
+|:range| 't position of mark t
+|:range| /{pattern}[/] the next line where {pattern} matches
+|:range| ?{pattern}[?] the previous line where {pattern} matches
+
+|:range| +[num] add [num] to the preceding line number
+ (default: 1)
+|:range| -[num] subtract [num] from the preceding line
+ number (default: 1)
+------------------------------------------------------------------------------
+*Q_ex* Special Ex characters
+
+|: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
+ expected)
+ Note: The next four are typed literally; these are not special keys!
+|:<cword>| <cword> word under the cursor (only where a file name is
+ expected)
+|:<cWORD>| <cWORD> WORD under the cursor (only where a file name is
+ expected) (see |WORD|)
+|:<cfile>| <cfile> file name under the cursor (only where a file name is
+ expected)
+|:<afile>| <afile> file name for autocommand (only where a file name is
+ expected)
+|:<sfile>| <sfile> file name of a ":source"d file, within that file (only
+ where a file name is expected)
+
+ After "%", "#", "<cfile>", "<sfile>" or "<afile>"
+ |::p| :p full path
+ |::h| :h head (file name removed)
+ |::t| :t tail (file name only)
+ |::r| :r root (extension removed)
+ |::e| :e extension
+ |::s| :s/{pat}/{repl}/ substitute {pat} with {repl}
+------------------------------------------------------------------------------
+*Q_ed* Editing a file
+
+ Without !: Fail if changes has 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.
+|: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
+ position.
+|: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|
+
+|:args| :ar[gs] Print the argument list, with the current file
+ in "[]".
+|:all| :all or :sall Open a window for every file in the arg list.
+|:wn| :wn[ext][!] Write file and edit next file.
+|:wn| :wn[ext][!] {file} Write to {file} and edit next file, unless
+ {file} exists. With !, overwrite existing
+ file.
+|:wN| :wN[ext][!] [file] Write file and edit previous file.
+
+ 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_f| :n[ext] {arglist} :sn[ext] {arglist} define new arg list
+ and edit first 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
+------------------------------------------------------------------------------
+*Q_wq* Writing and quitting
+
+|:w| :[range]w[rite][!] Write to the current file.
+|:w_f| :[range]w[rite] {file} Write to {file}, unless it already
+ exists.
+|:w_f| :[range]w[rite]! {file} Write to {file}. Overwrite an existing
+ file.
+|:w_a| :[range]w[rite][!] >> Append to the current file.
+|:w_a| :[range]w[rite][!] >> {file} Append to {file}.
+|:w_c| :[range]w[rite] !{cmd} Execute {cmd} with [range] lines as
+ standard input.
+|:up| :[range]up[date][!] write to current file if modified
+|:wall| :wa[ll][!] write all changed buffers
+
+|:q| :q[uit] Quit current buffer, unless changes have been
+ made. Exit Vim when there are no other
+ non-help buffers
+|:q| :q[uit]! Quit current buffer always, discard any
+ changes. Exit Vim when there are no other
+ non-help buffers
+|:qa| :qa[ll] Exit Vim, unless changes have been made.
+|:qa| :qa[ll]! Exit Vim always, discard any changes.
+|:cq| :cq Quit without writing and return error code.
+
+|:wq| :wq[!] Write the current file and exit.
+|:wq| :wq[!] {file} Write to {file} and exit.
+|:xit| :x[it][!] [file] Like ":wq" but write only when changes have
+ been made
+|ZZ| ZZ Same as ":x".
+|ZQ| ZQ Same as ":q!".
+|:xall| :xa[ll][!] or :wqall[!]
+ Write all changed buffers and exit
+
+|:stop| :st[op][!] Suspend VIM or start new shell. If 'aw' option
+ is set and [!] not given write the buffer.
+|CTRL-Z| CTRL-Z Same as ":stop"
+------------------------------------------------------------------------------
+*Q_st* Starting VIM
+
+|-vim| vim [options] start editing with an empty buffer
+|-file| vim [options] {file} .. start editing one or more files
+|--| vim [options] - read file from stdin
+|-tag| vim [options] -t {tag} edit the file associated with {tag}
+|-qf| vim [options] -q [fname] start editing in QuickFix mode,
+ display the first error
+
+ Vim arguments:
+
+|-gui| -g start GUI (also allows other options)
+
+|-+| +[num] put the cursor at line [num] (default: last line)
+|-+c| +{command} execute {command} after loading the file
+|-+/| +/{pat} {file} .. put the cursor at the first occurrence of {pat}
+|-v| -v Vi mode, start ex in Normal mode
+|-e| -e Ex mode, start vim in Ex mode
+|-R| -R Read-only mode, implies -n
+|-m| -m modifications not allowed (resets 'write' option)
+|-b| -b binary mode
+|-l| -l lisp mode
+|-A| -A Arabic mode ('arabic' is set)
+|-F| -F Farsi mode ('fkmap' and 'rightleft' are set)
+|-H| -H Hebrew mode ('hkmap' and 'rightleft' are set)
+|-V| -V Verbose, give informative messages
+|-C| -C Compatible, set the 'compatible' option
+|-N| -N Nocompatible, reset the 'compatible' option
+|-r| -r give list of swap files
+|-r| -r {file} .. recover aborted edit session
+|-n| -n do not create a swap file
+|-o| -o [num] open [num] windows (default: one for each file)
+|-f| -f GUI: foreground process, don't fork
+ Amiga: do not restart VIM to open a window (for
+ e.g., mail)
+|-s| -s {scriptin} first read commands from the file {scriptin}
+|-w| -w {scriptout} write typed chars to file {scriptout} (append)
+|-W| -W {scriptout} write typed chars to file {scriptout} (overwrite)
+|-T| -T {terminal} set terminal name
+|-d| -d {device} Amiga: open {device} to be used as a console
+|-u| -u {vimrc} read inits from {vimrc} instead of other inits
+|-U| -U {gvimrc} idem, for when starting the GUI
+|-i| -i {viminfo} read info from {viminfo} instead of other files
+|---| -- end of options, other arguments are file names
+|--help| --help show list of arguments and exit
+|--version| --version show version info and exit
+|--| - Read file from stdin.
+------------------------------------------------------------------------------
+*Q_ac* Automatic Commands
+
+|viminfo-file| Read registers, marks, history at startup, save when exiting.
+
+|:rviminfo| :rv[iminfo] [file] Read info from viminfo file [file]
+|:rviminfo| :rv[iminfo]! [file] idem, overwrite existing info
+|:wviminfo| :wv[iminfo] [file] Add info to viminfo file [file]
+|:wviminfo| :wv[iminfo]! [file] Write info to viminfo file [file]
+
+|modeline| Automatic option setting when editing a file
+
+|modeline| vim:{set-arg}: .. In the first and last lines of the
+ file (see 'ml' option), {set-arg} is
+ given as an argument to ":set"
+
+|autocommand| Automatic execution of commands on certain events.
+
+|:autocmd| :au List all autocommands
+|:autocmd| :au {event} List all autocommands for {event}
+|:autocmd| :au {event} {pat} List all autocommands for {event} with
+ {pat}
+|:autocmd| :au {event} {pat} {cmd} Enter new autocommands for {event}
+ with {pat}
+|:autocmd| :au! Remove all autocommands
+|:autocmd| :au! {event} Remove all autocommands for {event}
+|:autocmd| :au! * {pat} Remove all autocommands for {pat}
+|:autocmd| :au! {event} {pat} Remove all autocommands for {event}
+ with {pat}
+|:autocmd| :au! {event} {pat} {cmd} Remove all autocommands for {event}
+ with {pat} and enter new one
+------------------------------------------------------------------------------
+*Q_wi* Multi-window commands
+
+|CTRL-W_s| CTRL-W s or :split Split window into two parts
+|:split_f| :split {file} Split window and edit {file} in one of
+ them
+|:vsplit| :vsplit {file} Same, but split vertically
+|:vertical| :vertical {cmd} Make {cmd} split vertically
+
+|:sfind| :sf[ind] {file} Split window, find {file} in 'path'
+ and edit it.
+|CTRL-W_]| CTRL-W ] Split window and jump to tag under
+ cursor
+|CTRL-W_f| CTRL-W f Split window and edit file name under
+ the cursor
+|CTRL-W_^| CTRL-W ^ Split window and edit alternate file
+|CTRL-W_n| CTRL-W n or :new Create new empty window
+|CTRL-W_q| CTRL-W q or :q[uit] Quit editing and close window
+|CTRL-W_c| CTRL-W c or :cl[ose] Make buffer hidden and close window
+|CTRL-W_o| CTRL-W o or :on[ly] Make current window only one on the
+ screen
+
+|CTRL-W_j| CTRL-W j Move cursor to window below
+|CTRL-W_k| CTRL-W k Move cursor to window above
+|CTRL-W_CTRL-W| CTRL-W CTRL-W Move cursor to window below (wrap)
+|CTRL-W_W| CTRL-W W Move cursor to window above (wrap)
+|CTRL-W_t| CTRL-W t Move cursor to top window
+|CTRL-W_b| CTRL-W b Move cursor to bottom window
+|CTRL-W_p| CTRL-W p Move cursor to previous active window
+
+|CTRL-W_r| CTRL-W r Rotate windows downwards
+|CTRL-W_R| CTRL-W R Rotate windows upwards
+|CTRL-W_x| CTRL-W x Exchange current window with next one
+
+|CTRL-W_=| CTRL-W = Make all windows equal height
+|CTRL-W_-| CTRL-W - Decrease current window height
+|CTRL-W_+| CTRL-W + Increase current window height
+|CTRL-W__| CTRL-W _ Set current window height (default:
+ very high)
+------------------------------------------------------------------------------
+*Q_bu* Buffer list commands
+
+|:buffers| :buffers or :files list all known buffer and file names
+
+|:ball| :ball or :sball edit all args/buffers
+|:unhide| :unhide or :sunhide edit all loaded buffers
+
+|:badd| :badd {fname} add file name {fname} to the list
+|:bunload| :bunload[!] [N] unload buffer [N] from memory
+|:bdelete| :bdelete[!] [N] unload buffer [N] and delete it from
+ the buffer list
+
+ in current window in new window ~
+|:buffer| :[N]buffer [N] :[N]sbuffer [N] to arg/buf N
+|:bnext| :[N]bnext [N] :[N]sbnext [N] to Nth next arg/buf
+|:bNext| :[N]bNext [N] :[N]sbNext [N] to Nth previous arg/buf
+|:bprevious| :[N]bprevious [N] :[N]sbprevious [N] to Nth previous arg/buf
+|:bfirst| :bfirst :sbfirst to first arg/buf
+|:blast| :blast :sblast to last arg/buf
+|:bmodified| :[N]bmod [N] :[N]sbmod [N] to Nth modified buf
+------------------------------------------------------------------------------
+*Q_sy* Syntax Highlighting
+
+|:syn-on| :syntax on start using syntax highlighting
+|:syn-off| :syntax off stop using syntax highlighting
+
+|:syn-keyword| :syntax keyword {group-name} {keyword} ..
+ add a syntax keyword item
+|:syn-match| :syntax match {group-name} {pattern} ...
+ add syntax match item
+|:syn-region| :syntax region {group-name} {pattern} ...
+ add syntax region item
+|:syn-sync| :syntax sync [ccomment | lines {N} | ...]
+ tell syntax how to sync
+|:syntax| :syntax [list] list current syntax items
+|:syn-clear| :syntax clear clear all syntax info
+
+|:highlight| :highlight clear clear all highlight info
+|:highlight| :highlight {group-name} {key}={arg} ..
+ set highlighting for {group-name}
+
+|:filetype| :filetype on switch on file type detection, without
+ syntax highlighting
+|:filetype| :filetype plugin indent on
+ switch on file type detection, with
+ automatic indenting and settings
+------------------------------------------------------------------------------
+*Q_gu* GUI commands
+
+|:gui| :gui UNIX: start the GUI
+|:gui| :gui {fname} .. idem, and edit {fname} ..
+
+|:menu| :menu list all menus
+|:menu| :menu {mpath} list menus starting with {mpath}
+|:menu| :menu {mpath} {rhs} add menu {mpath}, giving {lhs}
+|:menu| :menu {pri} {mpath} {rhs}
+ idem, with priorities {pri}
+|:menu| :menu ToolBar.{name} {rhs}
+ add toolbar item, giving {lhs}
+|:tmenu| :tmenu {mpath} {text} add tooltip to menu {mpath}
+|:unmenu| :unmenu {mpath} remove menu {mpath}
+------------------------------------------------------------------------------
+*Q_fo* Folding
+
+|'foldmethod'| set foldmethod=manual manual folding
+ 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'
+
+|zf| zf{motion} operator: Define a fold manually
+|:fold| :{range}fold define a fold for {range} lines
+|zd| zd delete one fold under the cursor
+|zD| zD delete all folds under the cursor
+
+|zo| zo open one fold under the cursor
+|zO| zO open all folds under the cursor
+|zc| zc close one fold under the cursor
+|zC| zC close all folds under the cursor
+
+|zm| zm fold more: decrease 'foldlevel'
+|zM| zM close all folds: make 'foldlevel' zero
+|zr| zr reduce folding: increase 'foldlevel'
+|zR| zR open all folds: make 'foldlevel' max.
+
+|zn| zn fold none: reset 'foldenable'
+|zN| zN fold normal set 'foldenable'
+|zi| zi invert 'foldenable'
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/quotes.txt b/runtime/doc/quotes.txt
new file mode 100644
index 000000000..3c5c3a3e6
--- /dev/null
+++ b/runtime/doc/quotes.txt
@@ -0,0 +1,274 @@
+*quotes.txt* For Vim version 7.0aa. Last change: 2004 May 06
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *quotes*
+Here are some nice quotes about Vim that I collected from news and mail.
+
+
+vim (vim) noun - Ebullient vitality and energy. [Latin, accusative of vis,
+strength] (Dictionary)
+
+Vim is so much better than vi that a great many of my old vi :map's became
+immediately obsolete! (Tony Nugent, Australia)
+
+Coming with a very GUI mindset from Windows, I always thought of people using
+Vi as some kind of outer space alien in human clothes. Once I tried I really
+got addicted by its power and now I found myself typing Vim keypresses in the
+oddest places! That's why I would like to see Vim embedded in every
+application which deals with text editing. (José Fonseca)
+
+I was a 12-year emacs user who switched to Vim about a year ago after finally
+giving up on the multiple incompatible versions, flaky contributed packages,
+disorganized keystrokes, etc. And it was one of the best moves I ever made.
+(Joel Burton)
+
+Although all of the programs were used during the preparation of the new and
+revised material, most of the editing was done with Vim versions 4.5 and 5.0
+under GNU-Linux (Redhat 4.2). (Arnold Robbins, Israel, author of "Learning
+the Vi editor")
+
+Out of all the open software i've ever seen and used, and i've seen a lot, Vim
+is the best, most useful and highest quality to work with, second only to the
+linux kernel itself. (Peter Jay Salzman)
+
+It's well worth noting that the _entirety_ of SourceForge was written using
+Vim and its nifty PHP syntax highlighting. I think the entire SF.net tech
+staff uses Vim and we're all excited to have you aboard! (Tim Perdue)
+
+Vim is one of a select bunch of tools for which I have no substitute. It is
+a brilliant piece of work! (Biju Chacko)
+
+A previous girlfriend of mine switched to emacs. Needless to say, the
+relationship went nowhere. (Geoffrey Mann)
+
+I rarely think about Vim, in the same way that I guess a fish rarely thinks
+about water. It's the environment in which everything else happens. I'm a
+fairly busy system administrator working on a lot of different platforms. Vim
+is the only thing that's consistent across all my systems, and it's just about
+the only thing that doesn't break from time to time. When a new system comes
+in the door without Vim, I install it right away. Great to have a tool that's
+the same everywhere, that's completely reliable, so I can ignore it and think
+about other things. (Pete Schaeffer)
+
+Having recently succeeded in running Vim via telnet through a Nokia
+Communicator, I can now report that it works nicely on a Palm Pilot too.
+(Allan Kelly, Scotland)
+
+You've done a tremendous job with 'VIM', Bram! The more I use it, the more
+impressed I get (I am an old 'vi' die hard who once started out with early
+versions of 'emacs' in the late 1970's and was relieved by finding 'vi' in the
+first UNIX I came across in 1983). In my opinion, it's about time 'VIM'
+replace 'emacs' as the standard for top editors. (Bo Thide', Sweden)
+
+I love and use VIM heavily too. (Larry Wall)
+
+Vi is like a Ferrari, if you're a beginner, it handles like a bitch, but once
+you get the hang of it, its small, powerful and FAST! (Unknown)
+VIM is like a new model Ferrari, and sounds like one too - "VIIIIIIMMM!"
+(Stephen Riehm, Germany)
+
+Schon bei Nutzung eines Bruchteils der VIM-Funktionen wird der Benutzer recht
+schnell die Vorzuege dieses Editors kennen- und schaetzenlernen.
+Translated: Even when only using a fraction of VIM-functions, the user will
+quickly get used to and appreciate the advantages of this editor. (Garry
+Glendown, conclusion of an article on VIM in iX magazine 9/1998)
+
+I've recently acquired the O'Reilly book on VI (it also discusses VIM
+in-depth), and I'm amazed at just how powerful this application is. (Jeffrey
+Rankin)
+
+This guide was written using the Windows 9.x distribution of GVIM, which is
+quite possibly the greatest thing to come along since God created the naked
+girl. (Michael DiBernardo)
+
+Boy, I thought I knew almost everything about VIM, but every time I browse the
+online documentation, I hit upon a minor but cool aspect of a VIM feature that
+I didn't know before! I must say the documentation is one the finest I've
+ever seen in a product -- even better than most commercial products.
+(Gautam Mudunuri)
+
+VIM 4.5 is really a fantastic editor. It has sooooo many features and more
+importantly, the defaults are so well thought out that you really don't have
+to change anything!! Words cannot express my amazement and gratitude to the
+creators of VIM. Keep it up. (Vikas, USA)
+
+I wonder how long it will be before people will refer to other Vi editors as
+VIM clones? (Darren Hiebert)
+
+I read about [auto-positioning-in-file-based-on-the-errors-from-make] in one
+of those "Perfect Programmer's Editor" threads and was delighted to discover
+that VIM already supports it. (Brendan Macmillan, Australia)
+
+I just discovered VIM (5.0) and I'm telling everyone I know about it!
+I tell them VIM stands for VI for the new (M)illenium. Thanks so much!
+(Matt F. Valentine)
+
+I think from now on "vi" should be called "Vim Imitation", not the other way
+around. (Rungun Ramanathan)
+
+The Law of VIM:
+For each member b of the possible behaviour space B of program P, there exists
+a finite time t before which at least one user u in the total user space U of
+program P will request b becomes a member of the allowed behaviour space B'
+(B' <= B).
+In other words: Sooner or later everyone wants everything as an option.
+(Negri)
+
+Whenever I move to a new computing platform, the first thing I do is to port
+VIM. Lately, I am simply stunned by its ease of compilation using the
+configure facility. (A.M. Sabuncu, Turkey)
+
+The options are really excellent and very powerful. (Anish Maharaj)
+
+The Spring user-interface designs are in, and word from the boutiques is that
+80x24 text-only mode is back with a *vengeance! Vi editor clone VIM burst onto
+March desk-tops with a dazzling show of pastel syntax highlights for its 5.0
+look. Strident and customizable, VIM raises eyebrows with its interpretation
+of the classic Vi single-key macro collection.
+http://www.ntk.net/index.cgi?back=archive98/now0327.txt&line=179#l
+
+I just wanted to take this opportunity to let you know that VIM 5 ROCKS!
+Syntax highlighting: how did I survive without it?! Thank you for creating
+mankind's best editor! (Mun Johl, USA)
+
+Thanks again for VIM. I use it every day on Linux. (Eric Foster-Johnson,
+author of the book "UNIX Programming Tools")
+
+The BEST EDITOR EVER (Stuart Woolford)
+
+I have used most of VIM's fancy features at least once, many frequently, and I
+can honestly say that I couldn't live with anything less anymore. My
+productivity has easily doubled compared to what it was when I used vi.
+(Sitaram Chamarty)
+
+I luv VIM. It is incredible. I'm naming my first-born Vimberly. (Jose
+Unpingco, USA)
+
+Hint: "VIM" is "vi improved" - much better! (Sven Guckes, Germany)
+
+I use VIM every day. I spend more time in VIM than in any other program...
+It's the best vi clone there is. I think it's great. (Craig Sanders,
+Australia)
+
+I strongly advise using VIM--its infinite undo/redo saved me much grief.
+(Terry Brown)
+
+Thanks very much for writing what in my opinion is the finest text editor on
+the planet. If I were to get another cat, I would name it "Vim".
+(Bob Sheehan, USA)
+
+I typed :set all and the screen FILLED up with options. A whole screen of
+things to be set and unset. I saw some of my old friends like wrapmargin,
+modelines and showmode, but the screen was FILLED with new friends! I love
+them all! I love VIM! I'm so happy that I've found this editor! I feel
+like how I once felt when I started using vi after a couple of years of using
+ed. I never thought I'd forsake my beloved ed, but vi ... oh god, vi was
+great. And now, VIM. (Peter Jay Salzman, USA)
+
+I am really happy with such a wonderful software package. Much better than
+almost any expensive, off the shelf program. (Jeff Walker)
+
+Whenever I reread the VIM documentation I'm overcome with excitement at the
+power of the editor. (William Edward Webber, Australia)
+
+Hurrah for VIM!! It is "at your fingertips" like vi, and has the extensions
+that vi sorely needs: highlighting for executing commands on blocks, an easily
+navigable and digestible help screen, and more. (Paul Pax)
+
+The reason WHY I don't have this amazingly useful macro any more, is that I
+now use VIM - and this is built in!! (Stephen Riehm, Germany)
+
+I am a user of VIM and I love it. I use it to do all my programming, C,
+C++, HTML what ever. (Tim Allwine)
+
+I discovered VIM after years of struggling with the original vi, and I just
+can't live without it any more. (Emmanuel Mogenet, USA)
+
+Emacs has not a bit of chance to survive so long as VIM is around. Besides,
+it also has the most detailed software documentation I have ever seen---much
+better than most commercial software! (Leiming Qian)
+
+This version of VIM will just blow people apart when they discover just how
+fantastic it is! (Tony Nugent, Australia)
+
+I took your advice & finally got VIM & I'm really impressed. Instant convert.
+(Patrick Killelea, USA)
+
+VIM is by far my favorite piece of shareware and I have been particularly
+pleased with version 3.0. This is really a solid piece of work. (Robert
+Colon, USA)
+
+VIM is a joy to use, it is so well thought and practical that I wonder why
+anybody would use visual development tools. VIM is powerful and elegant, it
+looks deceptively simple but is almost as complex as a 747 (especially when I
+look at my growing .vimrc), keep up that wonderful job, VIM is a centerpiece
+of the free software world. (Louis-David Mitterand, USA)
+
+I cannot believe how great it is to use VIM. I think the guys at work are
+getting tired of hearing me bragging about it. Others eyes are lighting up.
+(Rick Croote)
+
+Emacs takes way to much time to start up and run, it is to big and bulky for
+effective use and the interface is more confusing than it is of any help. VIM
+however is short, it is fast, it is powerful, it has a good interface and it
+is all purpose. (Paal Ditlefsen Ekran)
+
+From the first time I got VIM3.0, I was very enthusiastic. It has almost no
+problems. The swapfile handling and the backup possibilities are robust, also
+the protection against editing one file twice. It is very compatible to the
+real VI (and that is a MUST, because my brain is trained over years in using
+it). (Gert van Antwerpen, Holland)
+
+Visual mode in VIM is a very powerful thing! (Tony Nugent, Australia)
+
+I have to say that VIM is =THE= single greatest piece of source code to ever
+come across the net (Jim Battle, USA).
+
+In fact, if you do want to get a new vi I'd suggest VIM-3.0. This is, by
+far, the best version of vi I've ever seen (Albert W. Schueller).
+
+I should mention that VIM is a very good editor and can compete with anything
+(Ilya Beloozerov).
+
+To tell the truth sometimes I used elvis, vile, xvi, calvin, etc. And this is
+the reason that I can state that VIM is the best! (Ferenc Deak, Hungary)
+
+VIM is by far the best editor that I have used in a long time, and I have
+looked at just about every thing that is available for every platform that I
+use. VIM is the best on all of them. (Guy L. Oliver)
+
+VIM is the greatest editor since the stone chisel. (Jose Unpingco, USA)
+
+I would like to say that with VIM I am finally making the 'emacs to vi'
+transition - as an Editor it is so much better in many ways: keyboard layout,
+memory usage, text alteration to name 3. (Mark Adam)
+
+In fact, now if I want to know what a particular setting does in vi, I fire up
+VIM and check out it's help! (Nikhil Patel, USA)
+
+As a vi user, VIM has made working with text a far more pleasant task than
+before I encountered this program. (Steinar Knutsen, Norway)
+
+I use VIM since version 3.0. Since that time, it is the ONLY editor I use,
+with Solaris, Linux and OS/2 Warp. I suggest all my friends to use VIM, they
+try, and they continue using it. VIM is really the best software I have ever
+downloaded from the Internet, and the best editor I know of. (Marco
+Eccettuato, Italy)
+
+
+In summary:
+ __ ___ _ _ _ ___ _____
+ \ \ / (_)_ __ ___ (_)___ | | | |/ _ \_ _|
+ \ \ / /| | '_ ` _ \ | / __| | |_| | | | || |
+ \ V / | | | | | | | | \__ \ | _ | |_| || |
+ \_/ |_|_| |_| |_| |_|___/ |_| |_|\___/ |_|
+ ____ _____ _ _ _____ _____ _ _
+ / ___|_ _| | | | ___| ___| | |
+ \___ \ | | | | | | |_ | |_ | | |
+ ___) || | | |_| | _| | _| |_|_|
+ |____/ |_| \___/|_| |_| (_|_) (Tony Nugent, Australia)
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
new file mode 100644
index 000000000..19cbe0130
--- /dev/null
+++ b/runtime/doc/recover.txt
@@ -0,0 +1,165 @@
+*recover.txt* For Vim version 7.0aa. Last change: 2004 Apr 16
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Recovery after a crash *crash-recovery*
+
+You have spent several hours typing in that text that has to be finished
+next morning, and then disaster strikes: Your computer crashes.
+
+ DON'T PANIC!
+
+You can recover most of your changes from the files that Vim uses to store
+the contents of the file. Mostly you can recover your work with one command:
+ vim -r filename
+
+1. The swap file |swap-file|
+2. Recovery |recovery|
+
+==============================================================================
+1. The swap file *swap-file*
+
+Vim stores the things you changed in a swap file. Using the original file
+you started from plus the swap file you can mostly recover your work.
+
+You can see the name of the current swap file being used with the command:
+
+ :sw[apname] *:sw* *:swapname*
+
+The name of the swap file is normally the same as the file you are editing,
+with the extension ".swp".
+- On Unix, a '.' is prepended to swap file names in the same directory as the
+ edited file. This avoids that the swap file shows up in a directory
+ listing.
+- On MS-DOS machines and when the 'shortname' option is on, any '.' in the
+ original file name is replaced with '_'.
+- If this file already exists (e.g., when you are recovering from a crash) a
+ warning is given and another extension is used, ".swo", ".swn", etc.
+- An existing file will never be overwritten.
+- The swap file is deleted as soon as Vim stops editing the file.
+
+Technical: The replacement of '.' with '_' is done to avoid problems with
+ MS-DOS compatible filesystems (e.g., crossdos, multidos). If Vim
+ is able to detect that the file is on an MS-DOS-like filesystem, a
+ flag is set that has the same effect as the 'shortname' option.
+ This flag is reset when you start editing another file.
+ *E326*
+ If the ".swp" file name already exists, the last character is
+ decremented until there is no file with that name or ".saa" is
+ reached. In the last case, no swap file is created.
+
+By setting the 'directory' option you can place the swap file in another place
+than where the edited file is.
+Advantages:
+- You will not pollute the directories with ".swp" files.
+- When the 'directory' is on another partition, reduce the risk of damaging
+ the file system where the file is (in a crash).
+Disadvantages:
+- You can get name collisions from files with the same name but in different
+ directories (although Vim tries to avoid that by comparing the path name).
+ This will result in bogus ATTENTION warning messages.
+- When you use your home directory, and somebody else tries to edit the same
+ file, he will not see your swap file and will not get the ATTENTION waring
+ message.
+On the Amiga you can also use a recoverable ram disk, but there is no 100%
+guarantee that this works. Putting swap files in a normal ram disk (like RAM:
+on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix)
+makes no sense, you will lose the swap file in a crash.
+
+If you want to put swap files in a fixed place, put a command resembling the
+following ones in your .vimrc:
+ :set dir=dh2:tmp (for Amiga)
+ :set dir=~/tmp (for Unix)
+ :set dir=c:\\tmp (for MS-DOS and Win32)
+This is also very handy when editing files on floppy. Of course you will have
+to create that "tmp" directory for this to work!
+
+For read-only files, a swap file is not used. Unless the file is big, causing
+the amount of memory used to be higher than given with 'maxmem' or
+'maxmemtot'. And when making a change to a read-only file, the swap file is
+created anyway.
+
+The 'swapfile' option can be reset to avoid creating a swapfile.
+
+
+Detecting an existing swap file ~
+
+You can find this in the user manual, section |11.3|.
+
+
+Updating the swapfile ~
+
+The swap file is updated after typing 200 characters or when you have not
+typed anything for four seconds. This only happens if the buffer was
+changed, not when you only moved around. The reason why it is not kept up to
+date all the time is that this would slow down normal work too much. You can
+change the 200 character count with the 'updatecount' option. You can set
+the time with the 'updatetime' option. The time is given in milliseconds.
+After writing to the swap file Vim syncs the file to disk. This takes some
+time, especially on busy Unix systems. If you don't want this you can set the
+'swapsync' option to an empty string. The risk of losing work becomes bigger
+though. On some non-Unix systems (MS-DOS, Amiga) the swap file won't be
+written at all.
+
+If the writing to the swap file is not wanted, it can be switched off by
+setting the 'updatecount' option to 0. The same is done when starting Vim
+with the "-n" option. Writing can be switched back on by setting the
+'updatecount' option to non-zero. Swap files will be created for all buffers
+when doing this. But when setting 'updatecount' to zero, the existing swap
+files will not be removed, it will only affect files that will be opened
+after this.
+
+If you want to make sure that your changes are in the swap file use this
+command:
+
+ *:pre* *:preserve* *E313* *E314*
+:pre[serve] Write all text for all buffers into swap file. The
+ original file is no longer needed for recovery. {Vi:
+ emergency exit}
+
+A Vim swap file can be recognized by the first six characters: "b0VIM ".
+After that comes the version number, e.g., "3.0".
+
+==============================================================================
+2. Recovery *recovery* *E308* *E311*
+
+Basic file recovery is explained in the user manual: |usr_11.txt|.
+
+Another way to do recovery is to start Vim and use the ":recover" command.
+This is easy when you start Vim to edit a file and you get the "ATTENTION:
+Found a swap file ..." message. In this case the single command ":recover"
+will do the work. You can also give the name of the file or the swap file to
+the recover command:
+ *:rec* *:recover* *E305* *E306* *E307*
+:rec[over] [file] Try to recover [file] from the swap file. If [file]
+ is not given use the file name for the current
+ buffer. The current contents of the buffer are lost.
+ This command fails if the buffer was modified.
+
+:rec[over]! [file] Like ":recover", but any changes in the current
+ buffer are lost.
+
+ *E312* *E309* *E310*
+Vim has some intelligence about what to do if the swap file is corrupt in
+some way. If Vim has doubt about what it found, it will give an error
+message and insert lines with "???" in the text. If you see an error message
+while recovering, search in the file for "???" to see what is wrong. You may
+want to cut and paste to get the text you need.
+
+The most common remark is "???LINES MISSING". This means that Vim cannot read
+the text from the original file. This can happen if the system crashed and
+parts of the original file were not written to disk.
+
+Be sure that the recovery was successful before overwriting the original
+file or deleting the swap file. It is good practice to write the recovered
+file elsewhere and run 'diff' to find out if the changes you want are in the
+recovered file.
+
+Once you are sure the recovery is ok delete the swap file. Otherwise, you
+will continue to get warning messages that the ".swp" file already exists.
+
+{Vi: recovers in another way and sends mail if there is something to recover}
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/remote.txt b/runtime/doc/remote.txt
new file mode 100644
index 000000000..e3d3224e7
--- /dev/null
+++ b/runtime/doc/remote.txt
@@ -0,0 +1,188 @@
+*remote.txt* For Vim version 7.0aa. Last change: 2003 Nov 10
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Vim client-server communication *client-server*
+
+1. Common functionality |clientserver|
+2. X11 specific items |x11-clientserver|
+3. MS-Windows specific items |w32-clientserver|
+
+{Vi does not have any of these commands}
+
+==============================================================================
+1. Common functionality *clientserver*
+
+When compiled with the |+clientserver| option, Vim can act as a command
+server. It accepts messages from a client and executes them. At the same
+time, Vim can function as a client and send commands to a Vim server.
+
+The following command line arguments are available:
+
+ argument meaning ~
+
+ --remote [+{cmd}] {file} ... *--remote*
+ Open the file list in a remote Vim. When
+ there is no Vim server, execute locally.
+ There is one optional init command: +{cmd}.
+ This must be an Ex command that can be
+ followed by "|".
+ The rest of the command line is taken as the
+ file list. Thus any non-file arguments must
+ come before this.
+ You cannot edit stdin this way |--|.
+ The remote Vim is raised. If you don't want
+ this use >
+ vim --remote-send "<C-\><C-N>:n filename<CR>"
+< --remote-silent [+{cmd}] {file} ... *--remote-silent*
+ As above, but don't complain if there is no
+ server and the file is edited locally.
+ --remote-wait [+{cmd}] {file} ... *--remote-wait*
+ As --remote, but wait for files to complete
+ (unload) in remote Vim.
+ --remote-wait-silent [+{cmd}] {file} ... *--remote-wait-silent*
+ As --remote-wait, but don't complain if there
+ is no server.
+ *--servername*
+ --servername {name} Become the server {name}. When used together
+ with one of the --remote commands: connect to
+ server {name} instead of the default (see
+ below).
+ *--remote-send*
+ --remote-send {keys} Send {keys} to server and exit.
+ *--remote-expr*
+ --remote-expr {expr} Evaluate {expr} in server and
+ print the result on stdout.
+ *--serverlist*
+ --serverlist Output a list of server names.
+
+
+Examples ~
+
+Edit "file.txt" in an already running GVIM server: >
+ gvim --remote file.txt
+
+Edit "file.txt" in an already running server called FOOBAR: >
+ gvim --servername FOOBAR --remote file.txt
+
+Edit "file.txt" in server "FILES" if it exists, become server "FILES"
+otherwise: >
+ gvim --servername FILES --remote-silent file.txt
+
+This doesn't work, all arguments after --remote will be used as file names: >
+ gvim --remote --servername FOOBAR file.txt
+
+Edit file "+foo" in a remote server (note the use of "./" to avoid the special
+meaning of the leading plus): >
+ vim --remote ./+foo
+
+Tell the remote server "BLA" to write all files and exit: >
+ vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'
+
+
+SERVER NAME
+
+By default Vim will try to register the name under which it was invoked (gvim,
+egvim ...). This can be overridden with the --servername argument. If the
+specified name is not available, a postfix is applied until a free name is
+encountered, ie. "gvim1" for the second invocation of gvim on a particular
+X-server. The resulting name is available in the servername builtin variable
+|v:servername|. The case of the server name is ignored, thus "gvim" and
+"GVIM" are considered equal.
+
+When Vim is invoked with --remote, --remote-wait or --remote-send it will try
+to locate the server name determined by the invocation name and --servername
+argument as described above. If an exact match is not available, the first
+server with the number postfix will be used. If a name with the number
+postfix is specified with the --servername argument, it must match exactly.
+
+If no server can be located and --remote or --remote-wait was used, Vim will
+start up according to the rest of the command line and do the editing by
+itself. This way it is not necessary to know whether gvim is already started
+when sending command to it.
+
+The --serverlist argument will cause Vim to print a list of registered command
+servers on the standard output (stdout) and exit.
+
+Win32 Note: Making the Vim server go to the foreground doesn't always work,
+because MS-Windows doesn't allow it. The client will move the server to the
+foreground when using the --remote or --remote-wait argument and the server
+name starts with "g".
+
+
+REMOTE EDITING
+
+The --remote argument will cause a |:drop| command to be constructed from the
+rest of the command line and sent as described above.
+The --remote-wait argument does the same thing and additionally sets up to
+wait for each of the files to have been edited. This uses the BufUnload
+event, thus as soon as a file has been unloaded, Vim assumes you are done
+editing it.
+Note that the --remote and --remote-wait arguments will consume the rest of
+the command line. Ie. all remaining arguments will be regarded as filenames.
+You can not put options there!
+
+
+FUNCTIONS
+ *E240* *E573*
+There are a number of Vim functions for scripting the command server. See
+the description in |eval.txt| or use CTRL-] on the function name to jump to
+the full explanation.
+
+ synopsis explanation ~
+ remote_expr( server, string, idvar) send expression
+ remote_send( server, string, idvar) send key sequence
+ serverlist() get a list of available servers
+ remote_peek( serverid, retvar) check for reply string
+ remote_read( serverid) read reply string
+ server2client( serverid, string) send reply string
+ remote_foreground( server) bring server to the front
+
+See also the explanation of |CTRL-\_CTRL-N|. Very useful as a leading key
+sequence.
+The {serverid} for server2client() can be obtained with expand("<client>")
+
+==============================================================================
+2. X11 specific items *x11-clientserver*
+ *E247* *E248* *E251* *E258* *E277*
+
+The communication between client and server goes through the X server. The
+display of the Vim server must be specified. The usual protection of the X
+server is used, you must be able to open a window on the X server for the
+communication to work. It is possible to communicate between different
+systems.
+
+By default, a GUI Vim will register a name on the X-server by which it can be
+addressed for subsequent execution of injected strings. Vim can also act as
+a client and send strings to other instances of Vim on the same X11 display.
+
+When an X11 GUI Vim (gvim) is started, it will try to register a send-server
+name on the 'VimRegistry' property on the root window.
+
+A non GUI Vim with access to the X11 display (|xterm-clipboard| enabled), can
+also act as a command server if a server name is explicitly given with the
+--servername argument.
+
+An empty --servername argument will cause the command server to be disabled.
+
+To send commands to a Vim server from another application, read the source
+file src/if_xcmdsrv.c, it contains some hints about the protocol used.
+
+==============================================================================
+3. Win32 specific items *w32-clientserver*
+
+Every Win32 Vim can work as a server, also in the console. You do not need a
+version compiled with OLE. Windows messages are used, this works on any
+version of MS-Windows. But only communication within one system is possible.
+
+Since MS-Windows messages are used, any other application should be able to
+communicate with a Vim server. An alternative is using the OLE functionality
+|ole-interface|.
+
+When using gvim, the --remote-wait only works properly this way: >
+
+ start /w gvim --remote-wait file.txt
+<
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
new file mode 100644
index 000000000..5aee40187
--- /dev/null
+++ b/runtime/doc/repeat.txt
@@ -0,0 +1,529 @@
+*repeat.txt* For Vim version 7.0aa. Last change: 2004 Apr 02
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Repeating commands, Vim scripts and debugging *repeating*
+
+Chapter 26 of the user manual introduces repeating |usr_26.txt|.
+
+1. Single repeats |single-repeat|
+2. Multiple repeats |multi-repeat|
+3. Complex repeats |complex-repeat|
+4. Using Vim scripts |using-scripts|
+5. Debugging scripts |debug-scripts|
+
+==============================================================================
+1. Single repeats *single-repeat*
+
+ *.*
+. Repeat last change, with count replaced with [count].
+ Also repeat a yank command, when the 'y' flag is
+ included in 'cpoptions'.
+
+Simple changes can be repeated with the "." command. Without a count, the
+count of the last change is used. If you enter a count, it will replace the
+last one. If the last change included a specification of a numbered register,
+the register number will be incremented. See |redo-register| for an example
+how to use this. Note that when repeating a command that used a Visual
+selection, the same SIZE of area is used, see |visual-repeat|.
+
+ *@:*
+@: Repeat last command-line [count] times.
+ {not available when compiled without the
+ |+cmdline_hist| feature}
+
+
+==============================================================================
+2. Multiple repeats *multi-repeat*
+
+ *:g* *:global* *E147* *E148*
+:[range]g[lobal]/{pattern}/[cmd]
+ Execute the Ex command [cmd] (default ":p") on the
+ lines within [range] where {pattern} matches.
+
+:[range]g[lobal]!/{pattern}/[cmd]
+ Execute the Ex command [cmd] (default ":p") on the
+ lines within [range] where {pattern} does NOT match.
+
+ *:v* *:vglobal*
+:[range]v[global]/{pattern}/[cmd]
+ Same as :g!.
+
+The global commands work by first scanning through the [range] lines and
+marking each line where a match occurs (for a multi-line pattern, only the
+start of the match matters).
+In a second scan the [cmd] is executed for each marked line with its line
+number prepended. For ":v" and ":g!" the command is executed for each not
+marked line. If a line is deleted its mark disappears.
+The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt
+the command. If an error message is given for a line, the command for that
+line is aborted and the global command continues with the next marked or
+unmarked line.
+
+To repeat a non-Ex command, you can use the ":normal" command: >
+ :g/pat/normal {commands}
+Make sure that {commands} ends with a whole command, otherwise Vim will wait
+for you to type the rest of the command for each match. The screen will not
+have been updated, so you don't know what you are doing. See |:normal|.
+
+The undo/redo command will undo/redo the whole global command at once.
+The previous context mark will only be set once (with "''" you go back to
+where the cursor was before the global command).
+
+The global command sets both the last used search pattern and the last used
+substitute pattern (this is vi compatible). This makes it easy to globally
+replace a string:
+ :g/pat/s//PAT/g
+This replaces all occurrences of "pat" with "PAT". The same can be done with:
+ :%s/pat/PAT/g
+Which is two characters shorter!
+
+==============================================================================
+3. Complex repeats *complex-repeat*
+
+ *q* *recording*
+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}
+
+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]
+ 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}
+
+ *@@*
+@@ 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
+ 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
+ the 'e' flag is present in 'cpoptions'.
+ Note that the ":*" command is only recognized when the
+ '*' flag is present in 'cpoptions'. This is NOT the
+ default when 'nocompatible' is used.
+ For ":@=" the last used expression is used. The
+ result of evaluating the expression is executed as an
+ Ex command.
+ Mappings are not recognized in these commands.
+ {Vi: only in some versions} Future: Will execute the
+ register for each line in the address range.
+
+ *:@:*
+:[addr]@: Repeat last command-line. First set cursor at line
+ [addr] (default is current line). {not in Vi}
+
+ *:@@*
+:[addr]@@ Repeat the previous :@{0-9a-z"}. First set cursor at
+ line [addr] (default is current line). {Vi: only in
+ some versions}
+
+==============================================================================
+4. Using Vim scripts *using-scripts*
+
+For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
+
+ *:so* *:source* *load-vim-script*
+:so[urce] {file} Read Ex commands from {file}. These are commands that
+ start with a ":".
+
+:so[urce]! {file} Read Vim commands from {file}. These are commands
+ that are executed from Normal mode, like you type
+ them.
+ When used after |:global|, |:argdo|, |:windo|,
+ |:bufdo|, in a loop or when another command follows
+ the display won't be updated while executing the
+ commands.
+ {not in Vi}
+
+ *:ru* *:runtime*
+:ru[ntime][!] {file} ..
+ Read Ex commands from {file} in each directory given
+ by 'runtimepath'. There is no error for non-existing
+ files. Example: >
+ :runtime syntax/c.vim
+
+< There can be multiple {file} arguments, separated by
+ spaces. Each {file} is searched for in the first
+ directory from 'runtimepath', then in the second
+ directory, etc. Use a backslash to include a space
+ inside {file} (although it's better not to use spaces
+ in file names, it causes trouble).
+
+ When [!] is included, all found files are sourced.
+ When it is not included only the first found file is
+ sourced.
+
+ When {file} contains wildcards it is expanded to all
+ matching files. Example: >
+ :runtime! plugin/*.vim
+< This is what Vim uses to load the plugin files when
+ starting up. This similar command: >
+ :runtime plugin/*.vim
+< would source the first file only.
+
+ When 'verbose' is one or higher, there is a message
+ when no file could be found.
+ When 'verbose' is two or higher, there is a message
+ about each searched file.
+ {not in Vi}
+
+:scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167*
+ Specify the character encoding used in the script.
+ The following lines will be converted from [encoding]
+ to the value of the 'encoding' option, if they are
+ different. Examples: >
+ scriptencoding iso-8859-5
+ scriptencoding cp932
+<
+ When [encoding] is empty, no conversion is done. This
+ can be used to restrict conversion to a sequence of
+ lines: >
+ scriptencoding euc-jp
+ ... lines to be converted ...
+ scriptencoding
+ ... not converted ...
+
+< When conversion isn't supported by the system, there
+ is no error message and no conversion is done.
+
+ Don't use "ucs-2" or "ucs-4", scripts cannot be in
+ these encodings (they would contain NUL bytes).
+ When a sourced script starts with a BOM (Byte Order
+ Mark) in utf-8 format Vim will recognized it, no need
+ to use ":scriptencoding utf-8" then.
+
+ When compiled without the |+multi_byte| feature this
+ command is ignored.
+ {not in Vi}
+
+ *:scrip* *:scriptnames*
+:scrip[tnames] List all sourced script names, in the order they were
+ first sourced. The number is used for the script ID
+ |<SID>|.
+ {not in Vi} {not available when compiled without the
+ |+eval| feature}
+
+ *:fini* *:finish* *E168*
+:fini[sh] Stop sourcing a script. Can only be used in a Vim
+ script file. This is a quick way to skip the rest of
+ the file. If it is used after a |:try| but before the
+ matching |:finally| (if present), the commands
+ following the ":finally" up to the matching |:endtry|
+ are executed first. This process applies to all
+ nested ":try"s in the script. The outermost ":endtry"
+ then stops sourcing the script. {not in Vi}
+
+All commands and command sequences can be repeated by putting them in a named
+register and then executing it. There are two ways to get the commands in the
+register:
+- Use the record command "q". You type the commands once, and while they are
+ being executed they are stored in a register. Easy, because you can see
+ what you are doing. If you make a mistake, "p"ut the register into the
+ file, edit the command sequence, and then delete it into the register
+ again. You can continue recording by appending to the register (use an
+ uppercase letter).
+- Delete or yank the command sequence into the register.
+
+Often used command sequences can be put under a function key with the ':map'
+command.
+
+An alternative is to put the commands in a file, and execute them with the
+':source!' command. Useful for long command sequences. Can be combined with
+the ':map' command to put complicated commands under a function key.
+
+The ':source' command reads Ex commands from a file line by line. You will
+have to type any needed keyboard input. The ':source!' command reads from a
+script file character by character, interpreting each character as if you
+typed it.
+
+Example: When you give the ":!ls" command you get the |hit-enter| prompt. If
+you ':source' a file with the line "!ls" in it, you will have to type the
+<Enter> yourself. But if you ':source!' a file with the line ":!ls" in it,
+the next characters from that file are read until a <CR> is found. You will
+not have to type <CR> yourself, unless ":!ls" was the last line in the file.
+
+It is possible to put ':source[!]' commands in the script file, so you can
+make a top-down hierarchy of script files. The ':source' command can be
+nested as deep as the number of files that can be opened at one time (about
+15). The ':source!' command can be nested up to 15 levels deep.
+
+You can use the "<sfile>" string (literally, this is not a special key) inside
+of the sourced file, in places where a file name is expected. It will be
+replaced by the file name of the sourced file. For example, if you have a
+"other.vimrc" file in the same directory as your ".vimrc" file, you can source
+it from your ".vimrc" file with this command: >
+ :source <sfile>:h/other.vimrc
+
+In script files terminal-dependent key codes are represented by
+terminal-independent two character codes. This means that they can be used
+in the same way on different kinds of terminals. The first character of a
+key code is 0x80 or 128, shown on the screen as "~@". The second one can be
+found in the list |key-notation|. Any of these codes can also be entered
+with CTRL-V followed by the three digit decimal code. This does NOT work for
+the <t_xx> termcap codes, these can only be used in mappings.
+
+ *:source_crnl* *W15*
+MS-DOS, Win32 and OS/2: Files that are read with ":source" normally have
+<CR><NL> <EOL>s. These always work. If you are using a file with <NL> <EOL>s
+(for example, a file made on Unix), this will be recognized if 'fileformats'
+is not empty and the first line does not end in a <CR>. This fails if the
+first line has something like ":map <F1> :help^M", where "^M" is a <CR>. If
+the first line ends in a <CR>, but following ones don't, you will get an error
+message, because the <CR> from the first lines will be lost.
+
+Macintosh: Files that are read with ":source" normally have <CR> <EOL>s.
+These always work. If you are using a file with <NL> <EOL>s (for example, a
+file made on Unix), this will be recognized if 'fileformats' is not empty and
+the first line does not end in a <CR>. Be careful not to use a file with <NL>
+linebreaks which has a <CR> in first line.
+
+On other systems, Vim expects ":source"ed files to end in a <NL>. These
+always work. If you are using a file with <CR><NL> <EOL>s (for example, a
+file made on MS-DOS), all lines will have a trailing <CR>. This may cause
+problems for some commands (e.g., mappings). There is no automatic <EOL>
+detection, because it's common to start with a line that defines a mapping
+that ends in a <CR>, which will confuse the automaton.
+
+ *line-continuation*
+Long lines in a ":source"d Ex command script file can be split by inserting
+a line continuation symbol "\" (backslash) at the start of the next line.
+There can be white space before the backslash, which is ignored.
+
+Example: the lines >
+ :set comments=sr:/*,mb:*,el:*/,
+ \://,
+ \b:#,
+ \:%,
+ \n:>,
+ \fb:-
+are interpreted as if they were given in one line:
+ :set comments=sr:/*,mb:*,el:*/,://,b:#,:%,n:>,fb:-
+
+All leading whitespace characters in the line before a backslash are ignored.
+Note however that trailing whitespace in the line before it cannot be
+inserted freely; it depends on the position where a command is split up
+whether additional whitespace is allowed or not.
+
+There is a problem with the ":append" and ":insert" commands: >
+ :1append
+ \asdf
+ .
+The backslash is seen as a line-continuation symbol, thus this results in the
+command: >
+ :1appendasdf
+ .
+To avoid this, add the 'C' flag to the 'cpoptions' option: >
+ :set cpo+=C
+ :1append
+ \asdf
+ .
+ :set cpo-=C
+
+Note that when the commands are inside a function, you need to add the 'C'
+flag when defining the function, it is not relevant when executing it. >
+ :set cpo+=C
+ :function Foo()
+ :1append
+ \asdf
+ .
+ :endfunction
+ :set cpo-=C
+
+Rationale:
+ Most programs work with a trailing backslash to indicate line
+ continuation. Using this in Vim would cause incompatibility with Vi.
+ For example for this Vi mapping: >
+ :map xx asdf\
+< Therefore the unusual leading backslash is used.
+
+==============================================================================
+5. Debugging scripts *debug-scripts*
+
+Besides the obvious messages that you can add to your scripts to find out what
+they are doing, Vim offers a debug mode. This allows you to step through a
+sourced file or user function and set breakpoints.
+
+NOTE: The debugging mode is far from perfect. Debugging will have side
+effects on how Vim works. You cannot use it to debug everything. For
+example, the display is messed up by the debugging messages.
+{Vi does not have a debug mode}
+
+An alternative to debug mode is setting the 'verbose' option. With a bigger
+number it will give more verbose messages about what Vim is doing.
+
+
+STARTING DEBUG MODE *debug-mode*
+
+To enter debugging mode use one of these methods:
+1. Start Vim with the |-D| argument: >
+ vim -D file.txt
+< Debugging will start as soon as the first vimrc file is sourced. This is
+ useful to find out what is happening when Vim is starting up. A side
+ effect is that Vim will switch the terminal mode before initialisations
+ have finished, with unpredictable results.
+ For a GUI-only version (Windows, Macintosh) the debugging will start as
+ soon as the GUI window has been opened. To make this happen early, add a
+ ":gui" command in the vimrc file.
+ *:debug*
+2. Run a command with ":debug" prepended. Debugging will only be done while
+ this command executes. Useful for debugging a specific script or user
+ function. And for scripts and functions used by autocommands. Example: >
+ :debug edit test.txt.gz
+
+3. Set a breakpoint in a sourced file or user function. You could do this in
+ the command line: >
+ vim -c "breakadd file */explorer.vim" .
+< This will run Vim and stop in the first line of the "explorer.vim" script.
+ Breakpoints can also be set while in debugging mode.
+
+In debugging mode every executed command is displayed before it is executed.
+Comment lines, empty lines and lines that are not executed are skipped. When
+a line contains two commands, separated by "|", each command will be displayed
+separately.
+
+
+DEBUG MODE
+
+Once in debugging mode, the usual Ex commands can be used. For example, to
+inspect the value of a variable: >
+ echo idx
+When inside a user function, this will print the value of the local variable
+"idx". Prepend "g:" to get the value of a global variable: >
+ echo g:idx
+All commands are executed in the context of the current function or script.
+You can also set options, for example setting or resetting 'verbose' will show
+what happens, but you might want to set it just before executing the lines you
+are interested in: >
+ :set verbose=20
+
+Commands that require updating the screen should be avoided, because their
+effect won't be noticed until after leaving debug mode. For example: >
+ :help
+won't be very helpful.
+
+There is a separate command-line history for debug mode.
+
+The line number for a function line is relative to the start of the function.
+If you have trouble figuring out where you are, edit the file that defines
+the function in another Vim, search for the start of the function and do
+"99j". Replace "99" with the line number.
+
+Additionally, these commands can be used:
+ *>cont*
+ cont Continue execution until the next breakpoint is hit.
+ *>quit*
+ quit Abort execution. This is like using CTRL-C, some
+ things might still be executed, doesn't abort
+ everything. Still stops at the next breakpoint.
+ *>next*
+ next Execute the command and come back to debug mode when
+ it's finished. This steps over user function calls
+ and sourced files.
+ *>step*
+ step Execute the command and come back to debug mode for
+ the next command. This steps into called user
+ functions and sourced files.
+ *>interrupt*
+ interrupt This is like using CTRL-C, but unlike ">quit" comes
+ back to debug mode for the next command that is
+ executed. Useful for testing |:finally| and |:catch|
+ on interrupt exceptions.
+ *>finish*
+ finish Finish the current script or user function and come
+ back to debug mode for the command after the one that
+ sourced or called it.
+
+About the additional commands in debug mode:
+- There is no command-line completion for them, you get the completion for the
+ normal Ex commands only.
+- You can shorten them, up to a single character: "c", "n", "s" and "f".
+- Hitting <CR> will repeat the previous one. When doing another command, this
+ is reset (because it's not clear what you want to repeat).
+- When you want to use the Ex command with the same name, prepend a colon:
+ ":cont", ":next", ":finish" (or shorter).
+
+
+DEFINING BREAKPOINTS
+ *:breaka* *:breakadd*
+:breaka[dd] func [lnum] {name}
+ Set a breakpoint in a function. Example: >
+ :breakadd func Explore
+< Doesn't check for a valid function name, thus the breakpoint
+ can be set before the function is defined.
+
+:breaka[dd] file [lnum] {name}
+ Set a breakpoint in a sourced file. Example: >
+ :breakadd file 43 .vimrc
+
+The [lnum] is the line number of the breakpoint. Vim will stop at or after
+this line. When omitted line 1 is used.
+
+{name} is a pattern that is matched with the file or function name. The
+pattern is like what is used for autocommands. There must be a full match (as
+if the pattern starts with "^" and ends in "$"). A "*" matches any sequence
+of characters. 'ignorecase' is not used, but "\c" can be used in the pattern
+to ignore case |/\c|. Don't include the () for the function name!
+
+The match for sourced scripts is done against the full file name. Examples: >
+ breakadd file explorer
+won't match, the path is missing. >
+ breakadd file *explorer.vim
+matches ".../plugin/explorer.vim" and ".../plugin/iexplorer.vim". >
+ breakadd file */explorer.vim
+matches ".../plugin/explorer.vim" only.
+
+The match for functions is done against the name as it's shown in the output
+of ":function". For local functions this means that something like "<SNR>99_"
+is prepended.
+
+
+DELETING BREAKPOINTS
+ *:breakd* *:breakdel* *E161*
+:breakd[el] {nr}
+ Delete breakpoint {nr}. Use |:breaklist| to see the number of
+ each breakpoint.
+
+:breakd[el] func [lnum] {name}
+ Delete a breakpoint in a function.
+
+:breakd[el] file [lnum] {name}
+ Delete a breakpoint in a sourced file.
+
+When [lnum] is omitted, the first breakpoint in the function or file is
+deleted.
+The {name} must be exactly the same as what was typed for the ":breakadd"
+command. "explorer", "*explorer.vim" and "*explorer*" are different.
+
+
+LISTING BREAKPOINTS
+ *:breakl* *:breaklist*
+:breakl[ist]
+ List all breakpoints.
+
+
+OBSCURE
+
+ *:debugg* *:debuggreedy*
+:debugg[reedy]
+ Read debug mode commands from the normal input stream, instead
+ of getting them directly from the user. Only useful for test
+ scripts. Example: >
+ echo 'q^Mq' | vim -e -s -c debuggreedy -c 'breakadd file script.vim' -S script.vim
+
+:0debugg[reedy]
+ Undo ":debuggreedy": get debug mode commands directly from the
+ user, don't use typeahead for debug commands.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/rileft.txt b/runtime/doc/rileft.txt
new file mode 100644
index 000000000..c7c53aaf0
--- /dev/null
+++ b/runtime/doc/rileft.txt
@@ -0,0 +1,125 @@
+*rileft.txt* For Vim version 7.0aa. Last change: 2003 May 07
+
+
+ VIM REFERENCE MANUAL by Avner Lottem
+ updated by Nadim Shaikli
+
+
+Right to Left display mode for Vim *rileft*
+
+
+These functions were originally created by Avner Lottem:
+ E-mail: alottem@iil.intel.com
+ Phone: +972-4-8307322
+
+{Vi does not have any of these commands}
+
+ *E26*
+This feature is only available when the |+rightleft| feature was enabled
+at compile time.
+
+
+Introduction
+------------
+Some languages such as Arabic, Farsi, Hebrew (among others) require the
+ability to display their text from right-to-left. Files in those languages
+are stored conventionally and the right-to-left requirement is only a
+function of the display engine (per the Unicode specification). In
+right-to-left oriented files the characters appear on the screen from
+right to left.
+
+Bidirectionality (or bidi for short) is what Unicode offers as a full
+solution to these languages. Bidi offers the user the ability to view
+both right-to-left as well as left-to-right text properly at the same time
+within the same window. Vim currently, due to simplicity, does not offer
+bidi and is merely opting to present a functional means to display/enter/use
+right-to-left languages. An older hybrid solution in which direction is
+encoded for every character (or group of characters) are not supported either
+as this kind of support is out of the scope of a simple addition to an
+existing editor (and its not sanctioned by Unicode either).
+
+
+Highlights
+----------
+o Editing left-to-right files as in the original Vim, no change.
+
+o Viewing and editing files in right-to-left windows. File orientation
+ is per window, so it is possible to view the same file in right-to-left
+ and left-to-right modes, simultaneously. (Useful for editing mixed files
+ in which both right-to-left and left-to-right text exist).
+
+o Compatibility to the original Vim. Almost all features work in
+ right-to-left mode (see Bugs below).
+
+o Backing from reverse insert mode to the correct place in the file
+ (if possible).
+
+o No special terminal with right-to-left capabilities is required. The
+ right-to-left changes are completely hardware independent.
+
+o Many languages use and require right-to-left support. These languages
+ can quite easily be supported given the inclusion of their required
+ keyboard mappings and some possible minor code change. Some of the
+ current supported languages include - |arabic.txt|, |farsi.txt| and
+ |hebrew.txt|.
+
+
+Of Interest...
+--------------
+
+o Invocations
+ -----------
+ + 'rightleft' ('rl') sets window orientation to right-to-left.
+ + 'delcombine' ('deco'), boolean, if editing UTF-8 encoded languages,
+ allows one to remove a composing character which gets superimposed
+ on those that proceeded them (some languages require this).
+ + 'rightleftcmd' ('rlc') sets the command-line within certain modes
+ (such as search) to be utilized in right-to-left orientation as well.
+
+o Typing backwards *ins-reverse*
+ ----------------
+ In lieu of using full-fledged the 'rightleft' option, one can opt for
+ reverse insertion. When the 'revins' (reverse insert) option is set,
+ inserting happens backwards. This can be used to type right-to-left
+ text. When inserting characters the cursor is not moved and the text
+ moves rightwards. A <BS> deletes the character under the cursor.
+ CTRL-W and CTRL-U also work in the opposite direction. <BS>, CTRL-W
+ and CTRL-U do not stop at the start of insert or end of line, no matter
+ how the 'backspace' option is set.
+
+ There is no reverse replace mode (yet).
+
+ If the 'showmode' option is set, "-- REVERSE INSERT --" will be shown
+ in the status line when reverse Insert mode is active.
+
+o Pasting when in a rightleft window
+ ----------------------------------
+ When cutting text with the mouse and pasting it in a rightleft window
+ the text will be reversed, because the characters come from the cut buffer
+ from the left to the right, while inserted in the file from the right to
+ the left. In order to avoid it, toggle 'revins' before pasting.
+
+
+Bugs
+----
+o Does not handle CTRL-A and CTRL-X commands (add and subtract) correctly
+ when in rightleft window.
+
+o Does not support reverse insert and rightleft modes on the command-line.
+ However, functionality of the editor is not reduced, because it is
+ possible to enter mappings, abbreviations and searches typed from the
+ left to the right on the command-line.
+
+o Somewhat slower in right-to-left mode, because right-to-left motion is
+ emulated inside Vim, not by the controlling terminal.
+
+o When the Athena GUI is used, the bottom scrollbar works in the wrong
+ direction. This is difficult to fix.
+
+o When both 'rightleft' and 'revins' are on: 'textwidth' does not work.
+ Lines do not wrap at all; you just get a single, long line.
+
+o There is no full bidirectionality (bidi) support.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/russian.txt b/runtime/doc/russian.txt
new file mode 100644
index 000000000..868f5c876
--- /dev/null
+++ b/runtime/doc/russian.txt
@@ -0,0 +1,83 @@
+*russian.txt* For Vim version 7.0aa. Last change: 2004 Jun 09
+
+
+ VIM REFERENCE MANUAL by Vassily Ragosin
+
+
+Russian language localization and support in Vim *russian* *Russian*
+
+1. Introduction |russian-intro|
+2. Russian keymaps |russian-keymap|
+3. Localization |russian-l18n|
+4. Known issues |russian-issues|
+
+===============================================================================
+1. Introduction *russian-intro*
+
+Russian language is supported perfectly well in Vim. You can type and view
+Russian text just as any other, without the need to tweak the settings.
+
+===============================================================================
+2. Russian keymaps *russian-keymap*
+
+To switch between languages you can use your system native keyboard switcher,
+or use one of the Russian keymaps, included in the Vim distribution. For
+example,
+>
+ :set keymap=russian-jcukenwin
+<
+In the latter case, you can switch between languages even if you do not have
+system Russian keyboard or independently from a system-wide keyboard settings.
+See 'keymap'. You can also map a key to switch between keyboards, if you
+choose the latter option. See |:map|.
+
+For your convenience, to avoid switching between keyboards, when you need to
+enter Normal mode command, you can also set 'langmap' option:
+>
+ :set langmap=ФИСВУÐПРШОЛДЬТЩЗЙКЫЕГМЦЧÐЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,
+ фиÑвуапршолдьтщзйкыегмцчнÑ;abcdefghijklmnopqrstuvwxyz
+
+This is in utf-8, you cannot read this if your 'encoding' is not utf-8.
+You have to type this command in one line, it is wrapped for the sake of
+readability.
+
+===============================================================================
+3. Localization *russian-l18n*
+
+If you wish to use messages, help files, menus and other items translated to
+Russian, you will need to install the RuVim Language Pack, available in
+different codepages from
+
+ http://www.sourceforge.net/projects/ruvim/
+
+Make sure that your Vim is at least 6.2.506 and use ruvim 0.5 or later for
+automatic installs. Vim also needs to be compiled with |+gettext| feature for
+user interface items translations to work.
+
+After downloading an archive from RuVim project, unpack it into your
+$VIMRUNTIME directory. We recommend using UTF-8 archive, if your version of
+Vim is compiled with |+multi_byte| feature enabled.
+
+In order to use the Russian documentation, make sure you have set the
+'helplang' option to "ru".
+
+===============================================================================
+4. Known issues *russian-issues*
+
+-- If you are using Russian message translations in Win32 console, then
+ you may see the output produced by "vim --help", "vim --version" commands
+ and Win32 console window title appearing in a wrong codepage. This problem
+ is related to a bug in GNU gettext library and may be fixed in the future
+ releases of gettext.
+
+-- When using the Win32 console version of Vim you may experience a problem
+ with many Cyrillic glyphs being replaced by whitespaces for some unknown
+ reason. Sergey Khorev suggested a registry hack to avoid this:
+
+ REGEDIT4
+
+ [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
+ "1252"="c_1251.nls"
+
+===============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt
new file mode 100644
index 000000000..288552d5c
--- /dev/null
+++ b/runtime/doc/scroll.txt
@@ -0,0 +1,303 @@
+*scroll.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Scrolling *scrolling*
+
+These commands move the contents of the window. If the cursor position is
+moved off of the window, the cursor is moved onto the window (with
+'scrolloff' screen lines around it). A page is the number of lines in the
+window minus two. The mnemonics for these commands may be a bit confusing.
+Remember that the commands refer to moving the window (the part of the buffer
+that you see) upwards or downwards in the buffer. When the window moves
+upwards in the buffer, the text in the window moves downwards on your screen.
+
+See section |03.7| of the user manual for an introduction.
+
+1. Scrolling downwards |scroll-down|
+2. Scrolling upwards |scroll-up|
+3. Scrolling relative to cursor |scroll-cursor|
+4. Scrolling horizontally |scroll-horizontal|
+5. Scrolling synchronously |scroll-binding|
+6. Scrolling with a mouse wheel |scroll-mouse-wheel|
+
+==============================================================================
+1. Scrolling downwards *scroll-down*
+
+The following commands move the edit window (the part of the buffer that you
+see) downwards (this means that more lines downwards in the text buffer can be
+seen):
+
+ *CTRL-E*
+CTRL-E Scroll window [count] lines downwards in the buffer.
+ Mnemonic: Extra lines.
+
+ *CTRL-D*
+CTRL-D Scroll window Downwards in the buffer. The number of
+ lines comes from the 'scroll' option (default: half a
+ screen). If [count] given, first set 'scroll' option
+ to [count]. The cursor is moved the same number of
+ lines down in the file (if possible; when lines wrap
+ and when hitting the end of the file there may be a
+ difference). When the cursor is on the last line of
+ the buffer nothing happens and a beep is produced.
+ See also 'startofline' option.
+ {difference from vi: Vim scrolls 'scroll' screen
+ lines, instead of file lines; makes a difference when
+ lines wrap}
+
+<S-Down> or *<S-Down>* *<kPageDown>*
+<PageDown> or *<PageDown>* *CTRL-F*
+CTRL-F Scroll window [count] pages Forwards (downwards) in
+ the buffer. See also 'startofline' option.
+
+ *z+*
+z+ Without [count]: Redraw with the line just below the
+ window at the top of the window. Put the cursor in
+ that line, at the first non-blank in the line.
+ With [count]: just like "z<CR>".
+
+==============================================================================
+2. Scrolling upwards *scroll-up*
+
+The following commands move the edit window (the part of the buffer that you
+see) upwards (this means that more lines upwards in the text buffer can be
+seen):
+
+ *CTRL-Y*
+CTRL-Y Scroll window [count] lines upwards in the buffer.
+ Note: When using the MS-Windows key bindings CTRL-Y is
+ remapped to redo.
+
+ *CTRL-U*
+CTRL-U Scroll window Upwards in the buffer. The number of
+ lines comes from the 'scroll' option (default: half a
+ screen). If [count] given, first set the 'scroll'
+ option to [count]. The cursor is moved the same
+ number of lines up in the file (if possible; when
+ lines wrap and when hitting the end of the file there
+ may be a difference). When the cursor is on the first
+ line of the buffer nothing happens and a beep is
+ produced. See also 'startofline' option.
+ {difference from vi: Vim scrolls 'scroll' screen
+ lines, instead of file lines; makes a difference when
+ lines wrap}
+
+<S-Up> or *<S-Up>* *<kPageUp>*
+<PageUp> or *<PageUp>* *CTRL-B*
+CTRL-B Scroll window [count] pages Backwards (upwards) in the
+ buffer. See also 'startofline' option.
+
+ *z^*
+z^ Without [count]: Redraw with the line just above the
+ window at the bottom of the window. Put the cursor in
+ that line, at the first non-blank in the line.
+ With [count]: First scroll the text to put the [count]
+ line at the bottom of the window, then redraw with the
+ line which is now at the top of the window at the
+ bottom of the window. Put the cursor in that line, at
+ the first non-blank in the line.
+
+==============================================================================
+3. Scrolling relative to cursor *scroll-cursor*
+
+The following commands reposition the edit window (the part of the buffer that
+you see) while keeping the cursor on the same line:
+
+ *z<CR>*
+z<CR> Redraw, line [count] at top of window (default
+ cursor line). Put cursor at first non-blank in the
+ line.
+
+ *zt*
+zt Like "z<CR>", but leave the cursor in the same
+ column. {not in Vi}
+
+ *zN<CR>*
+z{height}<CR> Redraw, make window {height} lines tall. This is
+ useful to make the number of lines small when screen
+ updating is very slow. Cannot make the height more
+ than the physical screen height.
+
+ *z.*
+z. Redraw, line [count] at center of window (default
+ cursor line). Put cursor at first non-blank in the
+ line.
+
+ *zz*
+zz Like "z.", but leave the cursor in the same column.
+ Careful: If caps-lock is on, this commands becomes
+ "ZZ": write buffer and exit! {not in Vi}
+
+ *z-*
+z- Redraw, line [count] at bottom of window (default
+ cursor line). Put cursor at first non-blank in the
+ line.
+
+ *zb*
+zb Like "z-", but leave the cursor in the same column.
+ {not in Vi}
+
+==============================================================================
+4. Scrolling horizontally *scroll-horizontal*
+
+For the following four commands the cursor follows the screen. If the
+character that the cursor is on is moved off the screen, the cursor is moved
+to the closest character that is on the screen. The value of 'sidescroll' is
+not used.
+
+z<Right> or *zl* *z<Right>*
+zl Scroll the screen [count] characters to the left.
+ This only works when 'wrap' is off. {not in Vi}
+
+z<Left> or *zh* *z<Left>*
+zh Scroll the screen [count] characters to the right.
+ This only works when 'wrap' is off. {not in Vi}
+
+ *zL*
+zL Scroll the screen half a screenwidth to the left.
+ This only works when 'wrap' is off. {not in Vi}
+
+ *zH*
+zH Scroll the screen half a screenwidth to the right.
+ This only works when 'wrap' is off. {not in Vi}
+
+For the following two commands the cursor is not moved in the text, only the
+text scrolls on the screen.
+
+ *zs*
+zs Scroll the screen horizontally to position the cursor
+ at the start (left side) of the screen. This only
+ works when 'wrap' is off. {not in Vi}
+
+ *ze*
+ze Scroll the screen horizontally to position the cursor
+ at the end (right side) of the screen. This only
+ works when 'wrap' is off. {not in Vi}
+
+==============================================================================
+5. Scrolling synchronously *scroll-binding*
+
+Occasionally, it is desirable to bind two or more windows together such that
+when one window is scrolled, the other windows are scrolled also. In Vim,
+windows can be given this behavior by setting the (window-specific)
+'scrollbind' option. When a window that has 'scrollbind' set is scrolled, all
+other 'scrollbind' windows are scrolled the same amount, if possible. The
+behavior of 'scrollbind' can be modified by the 'scrollopt' option.
+
+When using the scrollbars, the binding only happens when scrolling the window
+with focus (where the cursor is). You can use this to avoid scroll-binding
+for a moment without resetting options.
+
+When a window also has the 'diff' option set, the scroll-binding uses the
+differences between the two buffers to synchronize the position precisely.
+Otherwise the following method is used.
+
+ *scrollbind-relative*
+Each 'scrollbind' window keeps track of its "relative offset," which can be
+thought of as the difference between the current window's vertical scroll
+position and the other window's vertical scroll position. When one of the
+'scrollbind' windows is asked to vertically scroll past the beginning or end
+limit of its text, the window no longer scrolls, but remembers how far past
+the limit it wishes to be. The window keeps this information so that it can
+maintain the same relative offset, regardless of its being asked to scroll
+past its buffer's limits.
+
+However, if a 'scrollbind' window that has a relative offset that is past its
+buffer's limits is given the cursor focus, the other 'scrollbind' windows must
+jump to a location where the current window's relative offset is valid. This
+behavior can be changed by clearing the 'jump' flag from the 'scrollopt'
+option.
+
+ *syncbind* *:syncbind*
+:syncbind Force all 'scrollbind' windows to have the same
+ relative offset. I.e., when any of the 'scrollbind'
+ windows is scrolled to the top of its buffer, all of
+ the 'scrollbind' windows will also be at the top of
+ their buffers.
+
+ *scrollbind-quickadj*
+The 'scrollbind' flag is meaningful when using keyboard commands to vertically
+scroll a window, and also meaningful when using the vertical scrollbar of the
+window which has the cursor focus. However, when using the vertical scrollbar
+of a window which doesn't have the cursor focus, 'scrollbind' is ignored.
+This allows quick adjustment of the relative offset of 'scrollbind' windows.
+
+==============================================================================
+6. Scrolling with a mouse wheel *scroll-mouse-wheel*
+
+When your mouse has a scroll wheel, it should work with Vim in the GUI. How
+it works depends on your system. It might also work in an xterm
+|xterm-mouse-wheel|.
+
+For the Win32 GUI the scroll action is hard coded. It works just like
+dragging the scrollbar of the current window. How many lines are scrolled
+depends on your mouse driver. If the scroll action causes input focus
+problems, see |intellimouse-wheel-problems|.
+
+For the X11 GUIs (Motif, Athena and GTK) scrolling the wheel generates key
+presses <MouseDown> and <MouseUp>. The default action for these keys are:
+ <MouseDown> scroll three lines down. *<MouseDown>*
+ <S-MouseDown> scroll a full page down. *<S-MouseDown>*
+ <C-MouseDown> scroll a full page down. *<C-MouseDown>*
+ <MouseUp> scroll three lines up. *<MouseUp>*
+ <S-MouseUp> scroll a full page up. *<S-MouseUp>*
+ <C-MouseUp> scroll a full page up. *<C-MouseUp>*
+This should work in all modes, except when editing the command line.
+
+Note that <MouseDown> is used for scrolling the text down, this happens when
+you turn the mouse wheel up!
+
+You can modify this behavior by mapping the keys. For example, to make the
+scroll wheel move one line or half a page in Normal mode: >
+ :map <MouseDown> <C-Y>
+ :map <S-MouseDown> <C-U>
+ :map <MouseUp> <C-E>
+ :map <S-MouseUp> <C-D>
+You can also use Alt and Ctrl modifiers.
+
+This only works when Vim gets the scroll wheel events, of course. You can
+check if this works with the "xev" program.
+
+When using Xfree86, the /etc/XF86Config file should have the correct entry for
+your mouse. For FreeBSD, this entry works for a Logitech scrollmouse: >
+ Protocol "MouseMan"
+ Device "/dev/psm0"
+ ZAxisMapping 4 5
+See the Xfree86 documentation for information.
+
+ *xterm-mouse-wheel*
+To use the mouse wheel in a new xterm you only have to make the scroll wheel
+work in your Xserver, as mentioned above.
+
+To use the mouse wheel in an older xterm you must do this:
+1. Make it work in your Xserver, as mentioned above.
+2. Add translations for the xterm, so that the xterm will pass a scroll event
+ to Vim as an escape sequence.
+3. Add mappings in Vim, to interpret the escape sequences as <MouseUp> or
+ <MouseDown> keys.
+
+You can do the translations by adding this to your ~.Xdefaults file (or other
+file where your X resources are kept): >
+
+ XTerm*VT100.Translations: #override \n\
+ s<Btn4Down>: string("0x9b") string("[64~") \n\
+ s<Btn5Down>: string("0x9b") string("[65~") \n\
+ <Btn4Down>: string("0x9b") string("[62~") \n\
+ <Btn5Down>: string("0x9b") string("[63~") \n\
+ <Btn4Up>: \n\
+ <Btn5Up>:
+
+Add these mappings to your vimrc file: >
+ :map <M-Esc>[62~ <MouseDown>
+ :map! <M-Esc>[62~ <MouseDown>
+ :map <M-Esc>[63~ <MouseUp>
+ :map! <M-Esc>[63~ <MouseUp>
+ :map <M-Esc>[64~ <S-MouseDown>
+ :map! <M-Esc>[64~ <S-MouseDown>
+ :map <M-Esc>[65~ <S-MouseUp>
+ :map! <M-Esc>[65~ <S-MouseUp>
+<
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
new file mode 100644
index 000000000..b65b4e195
--- /dev/null
+++ b/runtime/doc/sign.txt
@@ -0,0 +1,191 @@
+*sign.txt* For Vim version 7.0aa. Last change: 2004 May 22
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+ and Bram Moolenaar
+
+
+Sign Support Features *sign-support*
+
+1. Introduction |sign-intro|
+2. Commands |sign-commands|
+
+{Vi does not have any of these features}
+{only available when compiled with the |+signs| feature}
+
+==============================================================================
+1. Introduction *sign-intro* *signs*
+
+When a debugger or other IDE tool is driving an editor it needs to be able
+to give specific highlights which quickly tell the user useful information
+about the file. One example of this would be a debugger which had an icon
+in the left-hand column denoting a breakpoint. Another example might be an
+arrow representing the Program Counter (PC). The sign features allow both
+placement of a sign, or icon, in the left-hand side of the window and
+definition of a highlight which will be applied to that line. Displaying the
+sign as an image is most likely only feasible in gvim (although Sun
+Microsystem's dtterm does support this its the only terminal emulator I know
+of which does). A text sign and the highlight should be feasible in any color
+terminal emulator.
+
+Signs and highlights are not useful just for debuggers. Sun's Visual
+WorkShop uses signs and highlights to mark build errors and SourceBrowser
+hits. Additionally, the debugger supports 8 to 10 different signs and
+highlight colors. |workshop| Same for Netbeans |netbeans|.
+
+There are two steps in using signs:
+
+1. Define the sign. This specifies the image, text and highlighting. For
+ example, you can define a "break" sign with an image of a stop roadsign and
+ text "!!".
+
+2. Place the sign. This specifies the file and line number where the sign is
+ displayed. A defined sign can be placed several times in different lines
+ and files.
+
+When signs are defined for a file, Vim will automatically add a column of two
+characters to display them in. When the last sign is unplaced the column
+disappears again. The color of the column is set with the SignColumn group
+|hl-SignColumn|. Example to set the color: >
+
+ :highlight SignColumn guibg=darkgrey
+
+==============================================================================
+2. Commands *sign-commands* *:sig* *:sign*
+
+Here is an example that places a sign piet, displayed with the text ">>", in
+line 23 of the current file: >
+ :sign define piet text=>> texthl=Search
+ :exe ":sign place 2 line=23 name=piet file=" . expand("%:p")
+
+And here is the command to delete it again: >
+ :sign unplace 2
+
+Note that the ":sign" command cannot be followed by another command or a
+comment. If you do need that, use the |:execute| command.
+
+
+DEFINING A SIGN. *:sign-define* *E255* *E160* *E612*
+
+: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.
+ About 120 different signs can be defined.
+
+ Accepted arguments:
+
+ icon={pixmap}
+ 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
+ will cause redraw problems. Only GTK 2 can scale the bitmap
+ to fit the space available.
+ toolkit supports ~
+ GTK 1 pixmap (.xpm)
+ GTK 2 many
+ Motif pixmap (.xpm)
+
+ linehl={group}
+ Highlighting group used for the whole line the sign is placed
+ in. Most useful is defining a background color.
+
+ text={text} *E239*
+ Define the text that is displayed when there is no icon or the
+ GUI is not being used. Only printable characters are allowed
+ and they must occupy one or two display cells.
+
+ texthl={group}
+ Highlighting group used for the text item.
+
+
+DELETING A SIGN *:sign-undefine* *E155*
+
+:sign undefine {name}
+ Deletes a previously defined sign. If signs with this {name}
+ are still placed this will cause trouble.
+
+
+LISTING SIGNS *:sign-list* *E156*
+
+:sign list Lists all defined signs and their attributes.
+
+:sign list {name}
+ Lists one defined sign and its attributes.
+
+
+PLACING SIGNS *:sign-place* *E158*
+
+:sign place {id} line={lnum} name={name} file={fname}
+ Place sign defined as {name} at line {lnum} in file {fname}.
+ *:sign-fname*
+ The file {fname} must already be loaded in a buffer. The
+ exact file name must be used, wildcards, $ENV and ~ are not
+ expanded, white space must not be escaped. Trailing white
+ space is ignored.
+
+ The sign is remembered under {id}, this can be used for
+ further manipulation. {id} must be a number.
+ It's up to the user to make sure the {id} is used only once in
+ each file (if it's used several times unplacing will also have
+ to be done several times and making changes may not work as
+ expected).
+
+:sign place {id} line={lnum} name={name} buffer={nr}
+ Same, but use buffer {nr}.
+
+:sign place {id} name={name} file={fname}
+ Change the placed sign {id} in file {fname} to use the defined
+ sign {name}. See remark above about {fname} |:sign-fname|.
+ This can be used to change the displayed sign without moving
+ it (e.g., when the debugger has stopped at a breakpoint).
+
+:sign place {id} name={name} buffer={nr}
+ Same, but use buffer {nr}.
+
+
+REMOVING SIGNS *:sign-unplace* *E159*
+
+:sign unplace {id} file={fname}
+ Remove the previously placed sign {id} from file {fname}.
+ See remark above about {fname} |:sign-fname|.
+
+:sign unplace {id} buffer={nr}
+ Same, but use buffer {nr}.
+
+:sign unplace {id}
+ Remove the previously placed sign {id} from all files it
+ appears in.
+
+:sign unplace *
+ Remove all placed signs.
+
+:sign unplace
+ Remove the placed sign at the cursor position.
+
+
+LISTING PLACED SIGNS
+
+:sign place file={fname}
+ List signs placed in file {fname}.
+ See remark above about {fname} |:sign-fname|.
+
+:sign place buffer={nr}
+ List signs placed in buffer {nr}.
+
+:sign place List placed signs in all files.
+
+
+JUMPING TO A SIGN *:sign-jump* *E157*
+
+:sign jump {id} file={fname}
+ Open the file {fname} or jump to the window that contains
+ {fname} and position the cursor at sign {id}.
+ See remark above about {fname} |:sign-fname|.
+ If the file isn't displayed in window and the current file can
+ not be |abandon|ed this fails.
+
+:sign jump {id} buffer={nr}
+ Same, but use buffer {nr}.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/sponsor.txt b/runtime/doc/sponsor.txt
new file mode 100644
index 000000000..34abc46d4
--- /dev/null
+++ b/runtime/doc/sponsor.txt
@@ -0,0 +1,229 @@
+*sponsor.txt* For Vim version 7.0aa. Last change: 2004 Apr 23
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+
+SPONSOR VIM DEVELOPMENT *sponsor*
+
+Fixing bugs and adding new features takes a lot of effort. For a few years
+Bram has attempted to do this next to a full-time job. During that time the
+todo list kept getting longer and longer.
+
+In order for Bram to support Vim properly he needs your support. Through your
+donations Bram will be able to have a part-time job and spend more time on
+fixing bugs and adding new features.
+
+For the most recent information about sponsoring look on the Vim web site:
+
+ http://www.vim.org/sponsor/
+
+More explanations can be found in the |sponsor-faq|.
+
+
+REGISTERED VIM USER *register*
+
+You can become a registered Vim user by sending at least 10 euro. This works
+similar to sponsoring Vim, see |sponsor| above. Registration was made
+possible for the situation where your boss or bookkeeper may be willing to
+register software, but does not like the terms "sponsoring" and "donation".
+
+More explanations can be found in the |register-faq|.
+
+
+VOTE FOR FEATURES *vote-for-features*
+
+To give registered Vim users and sponsors an advantage over lurkers they can
+vote for the items Bram should work on. How does this voting work?
+
+1. You send at least 10 euro. See below for ways to transfer money
+ |send-money|.
+
+2. You will be e-mailed a registration key. Enter this key on your account
+ page on the Vim website. You can easily create an account if you don't
+ have one yet.
+
+3. You can enter your votes on the voting page. There is a link to that page
+ on your account page after entering a registration key. Your votes will
+ be counted for two years.
+
+4. The voting results appear on the results page, which is visible for
+ everybody: http://www.vim.org/sponsor/vote_results.php
+
+Additionally, once you have send 100 euro or more in total, your name appears
+in the "Vim hall of honour": http://www.vim.org/sponsor/hall_of_honour.php
+But only if you enable this on your account page.
+
+
+HOW TO SEND MONEY *send-money*
+
+Creditcard Through PayPal, see the PayPal site for information:
+ https://www.paypal.com
+ The e-mail address for sending sponsorship money is:
+ donate@vim.org
+ The e-mail address for Vim registration is:
+ register@vim.org
+ Using Euro is preferred, other currencies are also accepted.
+ In Euro countries a bank transfer is preferred, this has lower
+ costs.
+
+Bank transfer Transfer to Bram's account at the Postbank: 1644503. For
+ international transfers you can use these numbers:
+ IBAN: NL79 PSTB 0001 6445 03
+ SWIFT/BIC: PSTBNL21
+ This is the address of the bank:
+ ING Bank Amsterdam, Foreign Operations
+ PO Box 1800
+ 1000 BV Amsterdam
+ The Netherlands
+ Include "Vim sponsor" or "Vim registration" in the comment of
+ your money transfer. Send me an e-mail that mentions the
+ amount you transferred if you want to vote for features and
+ show others you are a registered Vim user or sponsor.
+
+Cash Small amounts can be send with ordinary mail. Put something
+ around the money, so that it's not noticable from the outside.
+ Mention your e-mail address if you want to vote for features
+ and show others you are a registered Vim user or sponsor.
+
+This is Bram's address: Bram Moolenaar
+ Clematisstraat 30
+ 5925 BE Venlo
+ The Netherlands
+
+
+ALTERNATIVE
+
+If you don't care about sponsoring Vim Development or becoming a registered
+Vim user, but do care about helping needy children, consider giving to the
+ICCF Holland foundation. This is the charity recommended by Vim's author.
+The money is used for a children centre in the south of Uganda, where AIDS has
+caused many victims. See |uganda|.
+
+
+QUESTIONS AND ANSWERS *sponsor-faq* *register-faq*
+
+Why should I give money?
+
+Bram has tried to work on Vim next to a full-time job. The list of known bugs
+and ideas for new features has constantly been growing during this time. Bram
+simply can't spend enough time on Vim development when he has a full-time job.
+Your contribution will make it possible for Bram to have a part-time job and
+spend much more time on Vim development. Bugs will be fixed quicker and new
+Vim releases will become available more often.
+
+
+How much money should I send?
+
+That is up to you. The more you give, the more time Bram can work on Vim. An
+indication for individuals that use Vim at home: 10 Euro per year. For
+professional use: 30 Euro per year per person. Send at least 10 euro to be
+able to vote for features.
+
+
+What do I get in return?
+
+Each registered Vim user and sponsor who donates at least 10 euro will be able
+to vote for new features. These votes will give priority to the work on Vim.
+The votes are valid for two years. The more money you send the more your
+votes count |votes-counted|.
+
+If you send 100 Euro or more in total you will be mentioned on the "Vim hall
+of honour" page on the Vim web site. But only if you enable this on your
+account page. You can also select whether the amount will be visible.
+
+
+How do I become a Vim sponsor or registered Vim user?
+
+Send money, as explained above |send-money| and include your e-mail address.
+When the money has been received you will receive a unique registration key.
+This key can be used on the Vim website to activate voting on your Vim
+account. You will then get an extra page where you can vote for features and
+choose whether others will be able to see that you donated. There is a link
+to this page on your "My Account" page.
+
+
+What is the difference between sponsoring and registering?
+
+It has a different name. Use the term "registration" if your boss doesn't
+like "sponsoring" or "donation". The benefits are the same.
+
+
+How can I send money?
+
+See |send-money|. Check the web site for the most recent information:
+http://www.vim.org/sponsor/
+
+
+Why don't you use the SourceForge donation system?
+
+SourceForge takes 5% of the donations for themselves. If you want to support
+SourceForge you can send money to them directly.
+
+
+I cannot afford to send money, may I still use Vim?
+
+Yes.
+
+
+I did not register Vim, can I use all available features?
+
+Yes.
+
+
+I noticed a bug, do I need to register before I can report it?
+
+No, suggestions for improving Vim can always be given. For improvements use
+the developer |maillist|, for reporting bugs see |bugs|.
+
+
+How are my votes counted? *votes-counted*
+
+You may vote when you send 10 euro or more. You can enter up to ten votes.
+You can select the same item several times to give it more points. You can
+also enter three counter votes, these count as negative points.
+
+When you send 30 euro or more the points are doubled. Above 100 euro they
+count four times, above 300 euro they count six times, above 1000 euro ten
+times.
+
+
+Can I change my votes?
+
+You can change your votes any time you like, up to two years after you
+sent money. The points will be counted right away.
+
+
+How about Charityware?
+
+You have to decide yourself whether you want to sponsor Vim development, help
+the poor children in Uganda (see |uganda|) or both. Bram will certainly keep
+on supporting the project in Uganda. In the (unlikely) situation that Bram
+gets more donations for Vim development than he needs, he will send the money
+to Uganda.
+
+
+I donated $$$, now please add feature XYZ!
+
+There is no direct relation between your donation and the work Bram does.
+Otherwise you would be paying for work and Bram has to pay income tax over the
+donation. If you want to hire Bram for specific work, contact him directly,
+don't use the donation system.
+
+
+Are the donations tax deductable?
+
+No. Setting up a system for this is complex and imposes too many restrictions.
+The donations to help the children in |Uganda| are tax deductable in Holland,
+Germany, Canada and probably also in the USA.
+
+
+Can you send me a bill?
+
+Sending a bill would mean Bram does something in return for your contribution.
+That is work and would mean Bram has to pay income tax over the amount. It is
+possible, but the net amount will be lower.
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
new file mode 100644
index 000000000..160bcb914
--- /dev/null
+++ b/runtime/doc/starting.txt
@@ -0,0 +1,1418 @@
+*starting.txt* For Vim version 7.0aa. Last change: 2004 May 28
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Starting Vim *starting*
+
+1. Vim arguments |vim-arguments|
+2. Vim on the Amiga |starting-amiga|
+3. Running eVim |evim-keys|
+4. Initialization |initialization|
+5. $VIM and $VIMRUNTIME |$VIM|
+6. Suspending |suspend|
+7. Saving settings |save-settings|
+8. Views and Sessions |views-sessions|
+9. The viminfo file |viminfo-file|
+
+==============================================================================
+1. Vim arguments *vim-arguments*
+
+Most often, Vim is started to edit a single file with the command
+
+ vim filename *-vim*
+
+More generally, Vim is started with:
+
+ vim [option | filename] ..
+
+Option arguments and file name arguments can be mixed, and any number of them
+can be given. However, watch out for options that take an argument.
+
+For compatibility with various Vi versions, see |cmdline-arguments|.
+
+Exactly one out of the following five items may be used to choose how to
+start editing:
+
+ *-file* *---*
+filename One or more file names. The first one will be the current
+ file and read into the buffer. The cursor will be positioned
+ on the first line of the buffer.
+ To avoid a file name starting with a '-' being interpreted as
+ an option, precede the arglist with "--", e.g.: >
+ vim -- -filename
+< All arguments after the "--" will be interpreted as file names,
+ no other options or "+command" argument can follow.
+
+ *--*
+- This argument can mean two things, depending on whether Ex
+ mode is to be used.
+
+ Starting in Normal mode: >
+ vim -
+ ex -v -
+< Start editing a new buffer, which is filled with text
+ that is read from stdin. The commands that would normally be
+ read from stdin will now be read from stderr. Example: >
+ find . -name "*.c" -print | vim -
+< The buffer will be marked modified, because it contains text
+ that needs to be saved. Except when in readonly mode, then
+ the buffer is not marked modified. Example: >
+ ls | view -
+<
+ Starting in Ex mode: >
+ ex -
+ vim -e -
+ exim -
+ vim -E
+< Start editing in silent mode. See |-s-ex|.
+
+ *-t* *-tag*
+-t {tag} A tag. "tag" is looked up in the tags file, the associated
+ file becomes the current file, and the associated command is
+ executed. Mostly this is used for C programs, in which case
+ "tag" often is a function name. The effect is that the file
+ containing that function becomes the current file and the
+ cursor is positioned on the start of the function (see
+ |tags|).
+
+ *-q* *-qf*
+-q [errorfile] QuickFix mode. The file with the name [errorfile] is read
+ and the first error is displayed. See |quickfix|.
+ If [errorfile] is not given, the 'errorfile' option is used
+ for the file name. See 'errorfile' for the default value.
+ {not in Vi}
+
+(nothing) Without one of the four items above, Vim will start editing a
+ new buffer. It's empty and doesn't have a file name.
+
+
+The startup mode can be changed by using another name instead of "vim", which
+is equal to giving options:
+ex vim -e Start in Ex mode (see |Ex-mode|). *ex*
+exim vim -E Start in improved Ex mode (see |Ex-mode|). *exim*
+ (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*
+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*
+evim vim -y Easy Vim: set 'insertmode' (see |-y|) *evim*
+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|
+
+Additional characters may follow, they are ignored. For example, you can have
+"gvim-5" to start the GUI. You must have an executable by that name then, of
+course.
+
+On Unix, you would normally have one executable called Vim, and links from the
+different startup-names to that executable. If your system does not support
+links and you do not want to have several copies of the executable, you could
+use an alias instead. For example: >
+ alias view vim -R
+ alias gvim vim -g
+<
+ *startup-options*
+The option arguments may be given in any order. Single-letter options can be
+combined after one dash. There can be no option arguments after the "--"
+argument.
+
+On VMS all option arguments are assumed to be lowercase, unless preceded with
+a slash. Thus "-R" means recovery and "-/R" readonly.
+
+--help *-h* *--help*
+-h Give usage (help) message and exit. {not in Vi}
+ See |info-message| about capturing the text.
+
+ *--version*
+--version Print version information and exit. Same output as for
+ |:version| command. {not in Vi}
+ See |info-message| about capturing the text.
+
+ *--noplugin*
+--noplugin Skip loading plugins. Resets the 'loadplugins' option.
+ {not in Vi}
+ Note that the |-u| argument may also disable loading plugins:
+ argument load vimrc files load plugins ~
+ (nothing) yes yes
+ -u NONE no no
+ -u NORC no yes
+ --noplugin yes no
+
+ *--literal*
+--literal Take file names literally, don't expand wildcards. Not needed
+ for Unix, because Vim always takes file names literally (the
+ shell expands wildcards).
+ Applies to all the names, also the ones that come before this
+ argument.
+
+ *-+*
++[num] The cursor will be positioned on line "num" for the first
+ file being edited. If "num" is missing, the cursor will be
+ positioned on the last line.
+
+ *-+/*
++/{pat} The cursor will be positioned on the first line containing
+ "pat" in the first file being edited (see |pattern| for the
+ available search patterns).
+
++{command} *-+c* *-c*
+-c {command} {command} will be executed after the first file has been
+ read (and after autocommands and modelines for that file have
+ been processed). "command" is interpreted as an Ex command.
+ If the "command" contains spaces, it must be enclosed in
+ double quotes (this depends on the shell that is used).
+ Example: >
+ vim "+set si" main.c
+ vim "+find stdio.h"
+ vim -c "set ff=dos" -c wq mine.mak
+<
+ Note: You can use up to 10 "+" or "-c" arguments in a Vim
+ command. They are executed in the order given. A "-S"
+ argument counts as a "-c" argument as well.
+ {Vi only allows one command}
+
+--cmd {command} *--cmd*
+ {command} will be executed before processing any vimrc file.
+ Otherwise it acts like -c {command}. You can use up to 10 of
+ these commands, independently from "-c" commands.
+ {not in Vi}
+
+ *-S*
+-S {file} The {file} will be sourced after the first file has been read.
+ This is an easy way to do the equivalent of: >
+ -c "source {file}"
+< It can be mixed with "-c" arguments and repeated like "-c".
+ The limit of 10 "-c" arguments applies here as well.
+ {file} cannot start with a "-".
+ {not in Vi}
+
+-S Works like "-S Session.vim". Only when used as the last
+ argument or when another "-" option follows.
+
+ *-r*
+-r Recovery mode. Without a file name argument, a list of
+ existing swap files is given. With a file name, a swap file
+ is read to recover a crashed editing session. See
+ |crash-recovery|.
+
+ *-L*
+-L Same as -r. {only in some versions of Vi: "List recoverable
+ edit sessions"}
+
+ *-R*
+-R Readonly mode. The 'readonly' option will be set for all the
+ files being edited. You can still edit the buffer, but will
+ be prevented from accidentally overwriting a file. If you
+ forgot that you are in View mode and did make some changes,
+ you can overwrite a file by adding an exclamation mark to
+ the Ex command, as in ":w!". The 'readonly' option can be
+ reset with ":set noro" (see the options chapter, |options|).
+ Subsequent edits will not be done in readonly mode. Calling
+ the executable "view" has the same effect as the -R argument.
+ The 'updatecount' option will be set to 10000, meaning that
+ the swap file will not be updated automatically very often.
+
+ *-m*
+-m Modifications not allowed to be written. The 'write' option
+ will be reset, so that writing files is disabled. However,
+ the 'write' option can be set to enable writing again.
+ {not in Vi}
+
+ *-M*
+-M Modifications not allowed. The 'modifiable' option will be
+ reset, so that changes are not allowed. The 'write' option
+ will be reset, so that writing files is disabled. However,
+ the 'modifiable' and 'write' options can be set to enable
+ changes and writing.
+ {not in Vi}
+
+ *-Z* *restricted-mode* *E145*
+-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.
+ {not in Vi}
+
+ *-g*
+-g Start Vim in GUI mode. See |gui|. {not in Vi}
+
+ *-v*
+-v Start Ex in Vi mode. Only makes a difference when the
+ executable is called "ex" or "gvim". For gvim the GUI is not
+ started if possible.
+
+ *-e*
+-e Start Vim in Ex mode |Q|. Only makes a difference when the
+ executable is not called "ex".
+
+ *-E*
+-E Start Vim in improved Ex mode |gQ|. Only makes a difference
+ when the executable is not called "exim".
+ {not in Vi}
+
+ *-s-ex*
+-s Silent or batch mode. Only when Vim was started as "ex" or
+ when preceded with the "-e" argument. Otherwise see |-s|,
+ which does take an argument while this use of "-s" doesn't.
+ To be used when Vim is used to execute Ex commands from a file
+ instead of a terminal. Switches off most prompts and
+ informative messages. Also warnings and error messages.
+ But ":print" output is displayed. And when 'verbose' is
+ non-zero messages are printed (for debugging).
+ If Vim appears to be stuck try typing "qa!<Enter>". You don't
+ get a prompt thus you can't see Vim is waiting for you to type
+ something.
+ Initializations are skipped (except the ones given with the
+ "-u" argument).
+ Example: >
+ vim -e -s < thefilter thefile
+<
+ *-b*
+-b Binary mode. File I/O will only recognize <NL> to separate
+ lines. The 'expandtab' option will be reset. The 'textwidth'
+ option is set to 0. 'modeline' is reset. The 'binary' option
+ is set. This is done after reading the vimrc/exrc files but
+ before reading any file in the arglist. See also
+ |edit-binary|. {not in Vi}
+
+ *-l*
+-l Lisp mode. Sets the 'lisp' and 'showmatch' options on.
+
+ *-A*
+-A Arabic mode. Sets the 'arabic' option on. (Only when
+ compiled with the |+arabic| features (which include
+ |+rightleft|), otherwise Vim gives an error message
+ and exits. {not in Vi}
+
+ *-F*
+-F Farsi mode. Sets the 'fkmap' and 'rightleft' options on.
+ (Only when compiled with |+rightleft| and |+farsi| features,
+ otherwise Vim gives an error message and exits). {not in Vi}
+
+ *-H*
+-H Hebrew mode. Sets the 'hkmap' and 'rightleft' options on.
+ (Only when compiled with the |+rightleft| feature, otherwise
+ Vim gives an error message and exits). {not in Vi}
+
+ *-V* *verbose*
+-V[N] Verbose. Sets the 'verbose' option to [N] (default: 10).
+ Messages will be given for each file that is ":source"d and
+ for reading or writing a viminfo file. Can be used to find
+ out what is happening upon startup and exit. {not in Vi}
+
+ *-D*
+-D Debugging. Go to debugging mode when executing the first
+ command from a script. |debug-mode|
+ {not available when compiled without the |+eval| feature}
+ {not in Vi}
+
+ *-C*
+-C Compatible mode. Sets the 'compatible' option. You can use
+ this to get 'compatible', even though a .vimrc file exists.
+ But the command ":set nocompatible" overrules it anyway.
+ Also see |compatible-default|. {not in Vi}
+
+ *-N*
+-N Not compatible mode. Resets the 'compatible' option. You can
+ use this to get 'nocompatible', when there is no .vimrc file.
+ Also see |compatible-default|. {not in Vi}
+
+ *-y* *easy*
+-y Easy mode. Implied for |evim| and |eview|. Starts with
+ 'insertmode' set and behaves like a click-and-type editor.
+ This sources the script $VIMRUNTIME/evim.vim. Mappings are
+ set up to work like most click-and-type editors, see
+ |evim-keys|. The GUI is started when available.
+ {not in Vi}
+
+ *-n*
+-n No swap file will be used. Recovery after a crash will be
+ impossible. Handy if you want to view or edit a file on a
+ very slow medium (e.g., a floppy).
+ Can also be done with ":set updatecount=0". You can switch it
+ on again by setting the 'updatecount' option to some value,
+ e.g., ":set uc=100".
+ 'updatecount' is set to 0 AFTER executing commands from a
+ vimrc file, but before the GUI initializations. Thus it
+ overrides a setting for 'updatecount' in a vimrc file, but not
+ in a gvimrc file. See |startup|.
+ When you want to reduce accesses to the disk (e.g., for a
+ laptop), don't use "-n", but set 'updatetime' and
+ 'updatecount' to very big numbers, and type ":preserve" when
+ you want to save your work. This way you keep the possibility
+ for crash recovery.
+ {not in Vi}
+
+ *-o*
+-o[N] Open N windows, split horizontally. If [N] is not given,
+ one window is opened for every file given as argument. If
+ there is not enough room, only the first few files get a
+ window. If there are more windows than arguments, the last
+ few windows will be editing an empty file.
+ {not in Vi}
+
+ *-O*
+-O[N] Open N windows, split vertically. Otherwise it's like -o.
+ If both the -o and the -O option are given, the last one on
+ the command line determines how the windows will be split.
+ {not in Vi}
+
+ *-T*
+-T {terminal} Set the terminal type to "terminal". This influences the
+ codes that Vim will send to your terminal. This is normally
+ not needed, because Vim will be able to find out what type
+ of terminal you are using (See |terminal-info|). {not in Vi}
+
+ *-d*
+-d Start in diff mode, like |vimdiff|.
+ {not in Vi} {not available when compiled without the |+diff|
+ feature}
+
+-d {device} Only on the Amiga and when not compiled with the |+diff|
+ feature. Works like "-dev".
+ *-dev*
+-dev {device} Only on the Amiga: The {device} is opened to be used for
+ editing.
+ Normally you would use this to set the window position and
+ size: "-d con:x/y/width/height", e.g.,
+ "-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' 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
+ session to finish (e.g., mail or readnews). If you want gvim
+ 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|
+ {not in Vi}
+
+ *--nofork*
+--nofork GUI: Do not fork. Same as |-f|.
+ *-u* *E282*
+-u {vimrc} The file {vimrc} is read for initializations. Most other
+ initializations are skipped; see |initialization|. This can
+ be used to start Vim in a special mode, with special
+ mappings and settings. A shell alias can be used to make
+ this easy to use. For example: >
+ alias vimc vim -u ~/.c_vimrc !*
+< Also consider using autocommands; see |autocommand|.
+ When {vimrc} is equal to "NONE" (all uppercase), all
+ initializations from files and environment variables are
+ skipped, including reading the .gvimrc file when the GUI
+ starts. Loading plugins is also skipped.
+ When {vimrc} is equal to "NORC" (all uppercase), this has the
+ same effect as "NONE", but loading plugins is not skipped.
+ Using the "-u" argument has the side effect that the
+ 'compatible' option will be on by default. This can have
+ unexpected effects. See |'compatible'|.
+ {not in Vi}
+
+ *-U* *E230*
+-U {gvimrc} The file "gvimrc" is read for initializations when the GUI
+ starts. Other GUI initializations are skipped. When {gvimrc}
+ is equal to "NONE", no file is read for initializations at
+ all.
+ Exception: Reading the system-wide menu file is always done.
+ {not in Vi}
+
+ *-i*
+-i {viminfo} The file "viminfo" is used instead of the default viminfo
+ file. If the name "NONE" is used (all uppercase), no viminfo
+ file is read or written, even if 'viminfo' is set or when
+ ":rv" or ":wv" are used. See also |viminfo-file|.
+ {not in Vi}
+
+ *-x*
+-x Use encryption to read/write files. Will prompt for a key,
+ which is then stored in the 'key' option. All writes will
+ then use this key to encrypt the text. The '-x' argument is
+ not needed when reading a file, because there is a check if
+ the file that is being read has been encrypted, and Vim asks
+ for a key automatically. |encryption|
+
+ *-X*
+-X Do not try connecting to the X server to get the current
+ window title and copy/paste using the X clipboard. This
+ avoids a long startup time when running Vim in a terminal
+ emulator and the connection to the X server is slow.
+ Only makes a difference on Unix or VMS, when compiled with the
+ |+X11| feature. Otherwise it's ignored.
+ To disable the connection only for specific terminals, see the
+ 'clipboard' option.
+ When the X11 Session Management Protocol (XSMP) handler has
+ been built in, the -X option also disables that connection as
+ it, too, may have undesirable delays.
+ When the connection is desired later anyway (e.g., for
+ client-server messages), call the |serverlist()| function.
+ This does not enable the XSMP handler though.
+ {not in Vi}
+
+ *-s*
+-s {scriptin} The script file "scriptin" is read. The characters in the
+ file are interpreted as if you had typed them. The same can
+ be done with the command ":source! {scriptin}". If the end
+ of the file is reached before the editor exits, further
+ characters are read from the keyboard. Only works when not
+ started in Ex mode, see |-s-ex|. See also |complex-repeat|.
+ {not in Vi}
+
+ *-w*
+-w {scriptout} All the characters that you type are recorded in the file
+ "scriptout", until you exit Vim. This is useful if you want
+ to create a script file to be used with "vim -s" or
+ ":source!". When the "scriptout" file already exists, new
+ characters are appended. See also |complex-repeat|.
+ {not in Vi}
+
+ *-W*
+-W {scriptout} Like -w, but do not append, overwrite an existing file.
+ {not in Vi}
+
+ *-w_nr*
+-w{number} Does nothing. This was included for Vi-compatibility. In Vi
+ it sets the 'window' option, which is not implemented in Vim.
+
+--remote [+{cmd}] {file} ...
+ Open the {file} in another Vim that functions as a server.
+ Any non-file arguments must come before this.
+ See |--remote|. {not in Vi}
+
+--remote-silent [+{cmd}] {file} ...
+ Like --remote, but don't complain if there is no server.
+ See |--remote-silent|. {not in Vi}
+
+--remote-wait [+{cmd}] {file} ...
+ Like --remote, but wait for the server to finish editing the
+ file(s).
+ See |--remote-wait|. {not in Vi}
+
+--remote-wait-silent [+{cmd}] {file} ...
+ Like --remote-wait, but don't complain if there is no server.
+ See |--remote-wait-silent|. {not in Vi}
+
+--servername {name}
+ Specify the name of the Vim server to send to or to become.
+ See |--servername|. {not in Vi}
+
+--remote-send {keys}
+ Send {keys} to a Vim server and exit.
+ See |--remote-send|. {not in Vi}
+
+--remote-expr {expr}
+ Evaluate {expr} in another Vim that functions as a server.
+ The result is printed on stdout.
+ See |--remote-expr|. {not in Vi}
+
+--serverlist Output a list of Vim server names and exit. See
+ See |--serverlist|. {not in Vi}
+
+--socketid {id} *--socketid*
+ GTK+ GUI Vim only. Make gvim try to use GtkPlug mechanism, so
+ that it runs inside another window. See |gui-gtk-socketid|
+ for details. {not in Vi}
+
+--echo-wid *--echo-wid*
+ GTK+ GUI Vim only. Make gvim echo the Window ID on stdout,
+ which can be used to run gvim in a kpart widget. The format
+ of the output is: >
+ WID: 12345\n
+< {not in Vi}
+
+--role {role} *--role*
+ GTK+ 2 GUI only. Set the role of the main window to {role}.
+ The window role can be used by a window manager to uniquely
+ identify a window, in order to restore window placement and
+ such. The --role argument is passed automatically when
+ restoring the session on login. See |gui-gnome-session|
+ {not in Vi}
+
+-P {parent-title} *-P* *MDI* *E671* *E672*
+ Win32 only: Specify the title of the parent application. When
+ possible, Vim will run in an MDI window inside the
+ application.
+ {parent-title} must appear in the window title of the parent
+ application. Make sure that it is specific enough.
+ Note that the implementation is still primitive. It won't
+ work with all applications and the menu doesn't work.
+
+-nb *-nb*
+-nb={fname}
+-nb:{hostname}:{addr}:{password}
+ Attempt connecting to Netbeans and become an editor server for
+ it. The second form specifies a file to read connection info
+ from. The third form specifies the hostname, address and
+ password for connecting to Netbeans. |netbeans-run|
+
+Example for using a script file to change a name in several files:
+ Create a file "subs.vi" containing substitute commands and a :wq
+ command: >
+ :%s/Jones/Smith/g
+ :%s/Allen/Peter/g
+ :wq
+<
+ Execute Vim on all files you want to change: >
+
+ foreach i ( *.let ) vim -s subs.vi $i
+
+If the executable is called "view", Vim will start in Readonly mode. This is
+useful if you can make a hard or symbolic link from "view" to "vim".
+Starting in Readonly mode can also be done with "vim -R".
+
+If the executable is called "ex", Vim will start in "Ex" mode. This means it
+will accept only ":" commands. But when the "-v" argument is given, Vim will
+start in Normal mode anyway.
+
+Additional arguments are available on unix like systems when compiled with
+X11 GUI support. See |gui-resources|.
+
+==============================================================================
+2. Vim on the Amiga *starting-amiga*
+
+Starting Vim from the Workbench *workbench*
+-------------------------------
+
+Vim can be started from the Workbench by clicking on its icon twice. It will
+then start with an empty buffer.
+
+Vim can be started to edit one or more files by using a "Project" icon. The
+"Default Tool" of the icon must be the full pathname of the Vim executable.
+The name of the ".info" file must be the same as the name of the text file.
+By clicking on this icon twice, Vim will be started with the file name as
+current file name, which will be read into the buffer (if it exists). You can
+edit multiple files by pressing the shift key while clicking on icons, and
+clicking twice on the last one. The "Default Tool" for all these icons must
+be the same.
+
+It is not possible to give arguments to Vim, other than file names, from the
+workbench.
+
+Vim window *amiga-window*
+----------
+
+Vim will run in the CLI window where it was started. If Vim was started with
+the "run" or "runback" command, or if Vim was started from the workbench, it
+will open a window of its own.
+
+Technical detail:
+ To open the new window a little trick is used. As soon as Vim
+ recognizes that it does not run in a normal CLI window, it will
+ create a script file in "t:". This script file contains the same
+ command as the one Vim was started with, and an "endcli" command.
+ This script file is then executed with a "newcli" command (the "c:run"
+ and "c:newcli" commands are required for this to work). The script
+ file will hang around until reboot, or until you delete it. This
+ method is required to get the ":sh" and ":!" commands to work
+ correctly. But when Vim was started with the -f option (foreground
+ mode), this method is not used. The reason for this is that
+ when a program starts Vim with the -f option it will wait for Vim to
+ exit. With the script trick, the calling program does not know when
+ Vim exits. The -f option can be used when Vim is started by a mail
+ program which also waits for the edit session to finish. As a
+ consequence, the ":sh" and ":!" commands are not available when the
+ -f option is used.
+
+Vim will automatically recognize the window size and react to window
+resizing. Under Amiga DOS 1.3, it is advised to use the fastfonts program,
+"FF", to speed up display redrawing.
+
+==============================================================================
+3. Running eVim *evim-keys*
+
+EVim runs Vim as click-and-type editor. This is very unlike the original Vi
+idea. But it helps for people that don't use Vim often enough to learn the
+commands. Hopefully they will find out that learning to use Normal mode
+commands will make their editing much more effective.
+
+In Evim these options are changed from their default value:
+
+ :set nocompatible Use Vim improvements
+ :set insertmode Remain in Insert mode most of the time
+ :set hidden Keep invisible buffers loaded
+ :set backup Keep backup files (not for VMS)
+ :set backspace=2 Backspace over everything
+ :set autoindent auto-indent new lines
+ :set history=50 keep 50 lines of Ex commands
+ :set ruler show the cursor position
+ :set incsearch show matches halfway typing a pattern
+ :set mouse=a use the mouse in all modes
+ :set hlsearch highlight all matches for a search pattern
+ :set whichwrap+=<,>,[,] <Left> and <Right> wrap around line breaks
+ :set guioptions-=a non-Unix only: don't do auto-select
+
+Key mappings:
+ <Down> moves by screen lines rather than file lines
+ <Up> idem
+ Q does "gq", formatting, instead of Ex mode
+ <BS> in Visual mode: deletes the selection
+ CTRL-X in Visual mode: Cut to clipboard
+ <S-Del> idem
+ CTRL-C in Visual mode: Copy to clipboard
+ <C-Insert> idem
+ CTRL-V Pastes from the clipboard (in any mode)
+ <S-Insert> idem
+ CTRL-Q do what CTRL-V used to do
+ CTRL-Z undo
+ CTRL-Y redo
+ <M-Space> system menu
+ CTRL-A select all
+ <C-Tab> next window, CTRL-W w
+ <C-F4> close window, CTRL-W c
+
+Additionally:
+- ":behave mswin" is used |:behave|
+- syntax highlighting is enabled
+- filetype detection is enabled, filetype plugins and indenting is enabled
+- in a text file 'textwidth' is set to 78
+
+One hint: If you want to go to Normal mode to be able to type a sequence of
+commands, use CTRL-L. |i_CTRL-L|
+
+==============================================================================
+4. Initialization *initialization* *startup*
+
+This section is about the non-GUI version of Vim. See |gui-fork| for
+additional initialization when starting the GUI.
+
+At startup, Vim checks environment variables and files and sets values
+accordingly. Vim proceeds in this order:
+
+1. Set the 'shell' and 'term' option *SHELL* *COMSPEC* *TERM*
+ The environment variable SHELL, if it exists, is used to set the
+ 'shell' option. On MS-DOS and Win32, the COMSPEC variable is used
+ if SHELL is not set.
+ The environment variable TERM, if it exists, is used to set the 'term'
+ option.
+
+2. Process the arguments
+ The options and file names from the command that start Vim are
+ inspected. Buffers are created for all files (but not loaded yet).
+
+3. Execute Ex commands, from environment variables and/or files
+ An environment variable is read as one Ex command line, where multiple
+ commands must be separated with '|' or "<NL>".
+ *vimrc* *exrc*
+ A file that contains initialization commands is called a "vimrc" file.
+ Each line in a vimrc file is executed as an Ex command line. It is
+ sometimes also referred to as "exrc" file. They are the same type of
+ 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
+
+ If Vim was started with "-u filename", the file "filename" is used.
+ All following initializations until 4. are skipped.
+ "vim -u NORC" can be used to skip these initializations without
+ reading a file. "vim -u NONE" also skips loading plugins. |-u|
+
+ If Vim was started in Ex mode with the "-s" argument, all following
+ initializations until 4. are skipped. Only the "-u" option is
+ interpreted.
+ *evim.vim*
+ a. If vim was started as |evim| or |eview| or with the |-y| argument, the
+ script $VIMRUNTIME/evim.vim will be loaded.
+ *system-vimrc*
+ b. For Unix, MS-DOS, MS-Windows, OS/2, VMS, Macintosh, RISC-OS and Amiga
+ the system vimrc file is read for initializations. The path of this
+ file is shown with the ":version" command. Mostly it's "$VIM/vimrc".
+ Note that this file is ALWAYS read in 'compatible' mode, since the
+ automatic resetting of 'compatible' is only done later. Add a ":set
+ nocp" command if you like.
+
+ *VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc*
+ c. Four places are searched for initializations. The first that exists
+ is used, the others are ignored.
+ - 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) (*)
+ 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
+ after "_vimrc", in case long file names are used.
+ Note: For MS-DOS and Win32, "$HOME" is checked first. If no
+ "_vimrc" or ".vimrc" is found there, "$VIM" is tried.
+ See |$VIM| for when $VIM is not set.
+ - The environment variable EXINIT.
+ The value of $EXINIT is used as an Ex command line.
+ - The user exrc file(s). Same as for the user vimrc file, but with
+ "vimrc" replaced by "exrc". But without the (*)!
+
+ d. If the 'exrc' option is on (which is not the default), the current
+ directory is searched for four files. The first that exists is used,
+ the others are ignored.
+ - The file ".vimrc" (for Unix, Amiga and OS/2) (*)
+ "_vimrc" (for MS-DOS and Win32) (*)
+ - The file "_vimrc" (for Unix, Amiga and OS/2) (*)
+ ".vimrc" (for MS-DOS and Win32) (*)
+ - The file ".exrc" (for Unix, Amiga and OS/2)
+ "_exrc" (for MS-DOS and Win32)
+ - The file "_exrc" (for Unix, Amiga and OS/2)
+ ".exrc" (for MS-DOS and Win32)
+
+ (*) Using this file or environment variable will cause 'compatible' to be
+ off by default. See |compatible-default|.
+
+4. Load the plugin scripts. *load-plugins*
+ This does the same as the command: >
+ :runtime! plugin/*.vim
+< The result is that all directories in the 'runtimepath' option will be
+ searched for the "plugin" sub-directory and all files ending in ".vim"
+ will be sourced (in alphabetical order per directory).
+ Loading plugins won't be done when:
+ - The 'loadplugins' option was reset in a vimrc file.
+ - The |--noplugin| command line argument is used.
+ - The "-u NONE" command line argument is used |-u|.
+ - When Vim was compiled without the |+eval| feature.
+ Note that using "-c set noloadplugins" doesn't work, because the
+ commands from the command line have not been executed yet.
+
+5. Set 'shellpipe' and 'shellredir'
+ The 'shellpipe' and 'shellredir' options are set according to the
+ value of the 'shell' option, unless they have been set before.
+ This means that Vim will figure out the values of 'shellpipe' and
+ 'shellredir' for you, unless you have set them yourself.
+
+6. Set 'updatecount' to zero, if "-n" command argument used
+
+7. Set binary options
+ If the "-b" flag was given to Vim, the options for binary editing will
+ be set now. See |-b|.
+
+8. Perform GUI initializations
+ Only when starting "gvim", the GUI initializations will be done. See
+ |gui-init|.
+
+9. Read the viminfo file
+ If the 'viminfo' option is not empty, the viminfo file is read. See
+ |viminfo-file|.
+
+10. Read the quickfix file
+ If the "-q" flag was given to Vim, the quickfix file is read. If this
+ fails, Vim exits.
+
+11. Open all windows
+ When the |-o| flag was given, windows will be opened (but not
+ displayed yet).
+ When switching screens, it happens now. Redrawing starts.
+ If the "-q" flag was given to Vim, the first error is jumped to.
+ Buffers for all windows will be loaded.
+
+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.
+ If the 'insertmode' option is set, Insert mode is entered.
+ The |VimEnter| autocommands are executed.
+
+Some hints on using initializations:
+
+Standard setup:
+Create a vimrc file to set the default settings and mappings for all your edit
+sessions. Put it in a place so that it will be found by 3b:
+ ~/.vimrc (Unix and OS/2)
+ s:.vimrc (Amiga)
+ $VIM\_vimrc (MS-DOS and Win32)
+Note that creating a vimrc file will cause the 'compatible' option to be off
+by default. See |compatible-default|.
+
+Local setup:
+Put all commands that you need for editing a specific directory only into a
+vimrc file and place it in that directory under the name ".vimrc" ("_vimrc"
+for MS-DOS and Win32). NOTE: To make Vim look for these special files you
+have to turn on the option 'exrc'. See |trojan-horse| too.
+
+System setup:
+This only applies if you are managing a Unix system with several users and
+want to set the defaults for all users. Create a vimrc file with commands
+for default settings and mappings and put it in the place that is given with
+the ":version" command.
+
+Saving the current state of Vim to a file:
+Whenever you have changed values of options or when you have created a
+mapping, then you may want to save them in a vimrc file for later use. See
+|save-settings| about saving the current state of settings to a file.
+
+Avoiding setup problems for Vi users:
+Vi uses the variable EXINIT and the file "~/.exrc". So if you do not want to
+interfere with Vi, then use the variable VIMINIT and the file "vimrc" instead.
+
+Amiga environment variables:
+On the Amiga, two types of environment variables exist. The ones set with the
+DOS 1.3 (or later) setenv command are recognized. See the AmigaDos 1.3
+manual. The environment variables set with the old Manx Set command (before
+version 5.0) are not recognized.
+
+MS-DOS line separators:
+On MS-DOS-like systems (MS-DOS itself, Win32, and OS/2), Vim assumes that all
+the vimrc files have <CR> <NL> pairs as line separators. This will give
+problems if you have a file with only <NL>s and have a line like
+":map xx yy^M". The trailing ^M will be ignored.
+
+ *compatible-default*
+When Vim starts, the 'compatible' option is on. This will be used when Vim
+starts its initializations. But as soon as a user vimrc file is found, or a
+vimrc file in the current directory, or the "VIMINIT" environment variable is
+set, it will be set to 'nocompatible'. This has the side effect of setting or
+resetting other options (see 'compatible'). But only the options that have
+not been set or reset will be changed. This has the same effect like the
+value of 'compatible' had this value when starting Vim. Note that this
+doesn't happen for the system-wide vimrc file.
+
+But there is a side effect of setting or resetting 'compatible' at the moment
+a .vimrc file is found: Mappings are interpreted the moment they are
+encountered. This makes a difference when using things like "<CR>". If the
+mappings depend on a certain value of 'compatible', set or reset it before
+giving the mapping.
+
+The above behavior can be overridden in these ways:
+- If the "-N" command line argument is given, 'nocompatible' will be used,
+ even when no vimrc file exists.
+- If the "-C" command line argument is given, 'compatible' will be used, even
+ when a vimrc file exists.
+- If the "-u {vimrc}" argument is used, 'compatible' will be used.
+- When the name of the executable ends in "ex", then this works like the "-C"
+ argument was given: 'compatible' will be used, even when a vimrc file
+ exists. This has been done to make Vim behave like "ex", when it is started
+ as "ex".
+
+Avoiding trojan horses: *trojan-horse*
+While reading the "vimrc" or the "exrc" file in the current directory, some
+commands can be disabled for security reasons by setting the 'secure' option.
+This is always done when executing the command from a tags file. Otherwise it
+would be possible that you accidentally use a vimrc or tags file that somebody
+else created and contains nasty commands. The disabled commands are the ones
+that start a shell, the ones that write to a file, and ":autocmd". The ":map"
+commands are echoed, so you can see which keys are being mapped.
+ If you want Vim to execute all commands in a local vimrc file, you
+can reset the 'secure' option in the EXINIT or VIMINIT environment variable or
+in the global "exrc" or "vimrc" file. This is not possible in "vimrc" or
+"exrc" in the current directory, for obvious reasons.
+ On Unix systems, this only happens if you are not the owner of the
+vimrc file. Warning: If you unpack an archive that contains a vimrc or exrc
+file, it will be owned by you. You won't have the security protection. Check
+the vimrc file before you start Vim in that directory, or reset the 'exrc'
+option. Some Unix systems allow a user to do "chown" on a file. This makes
+it possible for another user to create a nasty vimrc and make you the owner.
+Be careful!
+ When using tag search commands, executing the search command (the last
+part of the line in the tags file) is always done in secure mode. This works
+just like executing a command from a vimrc/exrc in the current directory.
+
+ *slow-start*
+If Vim takes a long time to start up, there may be a few causes:
+- If the Unix version was compiled with the GUI and/or X11 (check the output
+ of ":version" for "+GUI" and "+X11"), it may need to load shared libraries
+ and connect to the X11 server. Try compiling a version with GUI and X11
+ disabled. This also should make the executable smaller.
+ Use the |-X| command line argument to avoid connecting to the X server when
+ running in a terminal.
+- If you have "viminfo" enabled, the loading of the viminfo file may take a
+ while. You can find out if this is the problem by disabling viminfo for a
+ moment (use the Vim argument "-i NONE", |-i|). Try reducing the number of
+ lines stored in a register with ":set viminfo='20,<50,s10". |viminfo-file|.
+
+ *:intro*
+When Vim starts without a file name, an introductory message is displayed (for
+those who don't know what Vim is). It is removed as soon as the display is
+redrawn in any way. To see the message again, use the ":intro" command (if
+there is not enough room, you will see only part of it).
+ To avoid the intro message on startup, add the 'I' flag to 'shortmess'.
+
+ *info-message*
+The |--help| and |--version| arguments cause Vim to print a message and then
+exit. Normally the message is send to stdout, thus can be redirected to a
+file with: >
+
+ vim --help >file
+
+From inside Vim: >
+
+ :read !vim --help
+
+When using gvim, it detects that it might have been started from the desktop,
+without a terminal to show messages on. This is detected when both stdout and
+stderr are not a tty. This breaks the ":read" command, as used in the example
+above. To make it work again, set 'shellredir' to ">" instead of the default
+">&": >
+
+ :set shellredir=>
+ :read !gvim --help
+
+This still won't work for systems where gvim does not use stdout at all
+though.
+
+==============================================================================
+5. $VIM and $VIMRUNTIME
+ *$VIM*
+The environment variable "$VIM" is used to locate various user files for Vim,
+such as the user startup script ".vimrc". This depends on the system, see
+|startup|.
+
+To avoid the need for every user to set the $VIM environment variable, Vim
+will try to get the value for $VIM in this order:
+1. The value defined by the $VIM environment variable. You can use this to
+ make Vim look in a specific directory for its support files. Example: >
+ setenv VIM /home/paul/vim
+2. The path from 'helpfile' is used, unless it contains some environment
+ variable too (the default is "$VIMRUNTIME/doc/help.txt": chicken-egg
+ problem). The file name ("help.txt" or any other) is removed. Then
+ trailing directory names are removed, in this order: "doc", "runtime" and
+ "vim{version}" (e.g., "vim54").
+3. For MSDOS, Win32 and OS/2 Vim tries to use the directory name of the
+ executable. If it ends in "/src", this is removed. This is useful if you
+ unpacked the .zip file in some directory, and adjusted the search path to
+ find the vim executable. Trailing directory names are removed, in this
+ order: "runtime" and "vim{version}" (e.g., "vim54").
+4. For Unix the compile-time defined installation directory is used (see the
+ output of ":version").
+
+Once Vim has done this once, it will set the $VIM environment variable. To
+change it later, use a ":let" command like this: >
+ :let $VIM = "/home/paul/vim/"
+<
+ *$VIMRUNTIME*
+The environment variable "$VIMRUNTIME" is used to locate various support
+files, such as the on-line documentation and files used for syntax
+highlighting. For example, the main help file is normally
+"$VIMRUNTIME/doc/help.txt".
+You don't normally set $VIMRUNTIME yourself, but let Vim figure it out. This
+is the order used to find the value of $VIMRUNTIME:
+1. If the environment variable $VIMRUNTIME is set, it is used. You can use
+ this when the runtime files are in an unusual location.
+2. If "$VIM/vim{version}" exists, it is used. {version} is the version
+ number of Vim, without any '-' or '.'. For example: "$VIM/vim54". This is
+ the normal value for $VIMRUNTIME.
+3. If "$VIM/runtime" exists, it is used.
+4. The value of $VIM is used. This is for backwards compatibility with older
+ versions.
+5. When the 'helpfile' option is set and doesn't contain a '$', its value is
+ used, with "doc/help.txt" removed from the end.
+
+For Unix, when there is a compiled-in default for $VIMRUNTIME (check the
+output of ":version"), steps 2, 3 and 4 are skipped, and the compiled-in
+default is used after step 5. This means that the compiled-in default
+overrules the value of $VIM. This is useful if $VIM is "/etc" and the runtime
+files are in "/usr/share/vim/vim54".
+
+Once Vim has done this once, it will set the $VIMRUNTIME environment variable.
+To change it later, use a ":let" command like this: >
+ :let $VIMRUNTIME = "/home/piet/vim/vim54"
+
+==============================================================================
+6. Suspending *suspend*
+
+ *iconize* *iconise* *CTRL-Z* *v_CTRL-Z*
+CTRL-Z Suspend Vim, like ":stop".
+ Works in Normal and in Visual mode. In Insert and
+ Command-line mode, the CTRL-Z is inserted as a normal
+ character. In Visual mode Vim goes back to Normal
+ mode.
+
+
+:sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
+:st[op][!] Suspend Vim.
+ If the '!' is not given and 'autowrite' is set, every
+ buffer with changes and a file name is written out.
+ If the '!' is given or 'autowrite' is not set, changed
+ buffers are not written, don't forget to bring Vim
+ back to the foreground later!
+
+In the GUI, suspending is implemented as iconising gvim. In Windows 95/NT,
+gvim is minimized.
+
+On many Unix systems, it is possible to suspend Vim with CTRL-Z. This is only
+possible in Normal and Visual mode (see next chapter, |vim-modes|). Vim will
+continue if you make it the foreground job again. On other systems, CTRL-Z
+will start a new shell. This is the same as the ":sh" command. Vim will
+continue if you exit from the shell.
+
+In X-windows the selection is disowned when Vim suspends. this means you
+can't paste it in another application (since Vim is going to sleep an attempt
+to get the selection would make the program hang).
+
+==============================================================================
+7. Saving settings *save-settings*
+
+Mostly you will edit your vimrc files manually. This gives you the greatest
+flexibility. There are a few commands to generate a vimrc file automatically.
+You can use these files as they are, or copy/paste lines to include in another
+vimrc file.
+
+ *:mk* *:mkexrc*
+:mk[exrc] [file] Write current key mappings and changed options to
+ [file] (default ".exrc" in the current directory),
+ unless it already exists. {not in Vi}
+
+:mk[exrc]! [file] Always write current key mappings and changed
+ options to [file] (default ".exrc" in the current
+ directory). {not in Vi}
+
+ *:mkv* *:mkvimrc*
+:mkv[imrc][!] [file] Like ":mkexrc", but the default is ".vimrc" in the
+ current directory. The ":version" command is also
+ written to the file. {not in Vi}
+
+These commands will write ":map" and ":set" commands to a file, in such a way
+that when these commands are executed, the current key mappings and options
+will be set to the same values. The options 'columns', 'endofline',
+'fileformat', 'key', 'lines', 'modified', 'scroll', 'term', 'textmode',
+'ttyfast' and 'ttymouse' are not included, because these are terminal or file
+dependent. Note that the options 'binary', 'paste' and 'readonly' are
+included, this might not always be what you want.
+
+When special keys are used in mappings, The 'cpoptions' option will be
+temporarily set to its Vim default, to avoid the mappings to be
+misinterpreted. This makes the file incompatible with Vi, but makes sure it
+can be used with different terminals.
+
+Only global mappings are stored, not mappings local to a buffer.
+
+A common method is to use a default ".vimrc" file, make some modifications
+with ":map" and ":set" commands and write the modified file. First read the
+default ".vimrc" in with a command like ":source ~piet/.vimrc.Cprogs", change
+the settings and then save them in the current directory with ":mkvimrc!". If
+you want to make this file your default .vimrc, move it to your home directory
+(on Unix), s: (Amiga) or $VIM directory (MS-DOS). You could also use
+autocommands |autocommand| and/or modelines |modeline|.
+
+If you only want to add a single option setting to your vimrc, you can use
+these steps:
+1. Edit your vimrc file with Vim.
+2. Play with the option until it's right. E.g., try out different values for
+ 'guifont'.
+3. Append a line to set the value of the option, using the expression register
+ '=' to enter the value. E.g., for the 'guifont' option: >
+ o:set guifont=<C-R>=&guifont<CR><Esc>
+< [<C-R> is a CTRL-R, <CR> is a return, <Esc> is the escape key]
+
+Note that when you create a .vimrc file, this can influence the 'compatible'
+option, which has several side effects. See |'compatible'|.
+":mkvimrc", ":mkexrc" and ":mksession" write the command to set or reset the
+'compatible' option to the output file first, because of these side effects.
+
+==============================================================================
+8. Views and Sessions *views-sessions*
+
+This is introduced in sections |21.4| and |21.5| of the user manual.
+
+ *View* *view-file*
+A View is a collection of settings that apply to one window. You can save a
+View and when you restore it later, the text is displayed in the same way.
+The options and mappings in this window will also be restored, so that you can
+continue editing like when the View was saved.
+
+ *Session* *session-file*
+A Session keeps the Views for all windows, plus the global settings. You can
+save a Session and when you restore it later the window layout looks the same.
+You can use a Session to quickly switch between different projects,
+automatically loading the files you were last working on in that project.
+
+Views and Sessions are a nice addition to viminfo-files, which are used to
+remember information for all Views and Sessions together |viminfo-file|.
+
+You can quickly start editing with a previously saved View or Session with the
+|-S| argument: >
+ vim -S Session.vim
+<
+All this is {not in Vi} and {not available when compiled without the
+|+mksession| feature}.
+
+ *:mks* *:mksession*
+:mks[ession][!] [file] Write a Vim script that restores the current editing
+ session.
+ When [!] is included an existing file is overwritten.
+ When [file] is omitted "Session.vim" is used.
+
+The output of ":mksession" is like ":mkvimrc", but additional commands are
+added to the file. Which ones depends on the 'sessionoptions' option. The
+resulting file, when executed with a ":source" command:
+1. Restores global mappings and options, if 'sessionoptions' contains
+ "options". Script-local mappings will not be written.
+2. Restores global variables that start with an uppercase letter and contain
+ at least one lowercase letter, if 'sessionoptions' contains "globals".
+3. Unloads all currently loaded buffers.
+4. Restores the current directory if 'sessionoptions' contains "curdir", or
+ sets the current directory to where the Session file is if 'sessionoptions'
+ contains "sesdir".
+5. Restores GUI Vim window position, if 'sessionoptions' contains "winpos".
+6. Restores screen size, if 'sessionoptions' contains "resize".
+7. Reloads the buffer list, with the last cursor positions. If
+ 'sessionoptions' contains "buffers" then all buffers are restored,
+ including hidden and unloaded buffers. Otherwise only buffers in windows
+ are restored.
+8. Restores all windows with the same layout. If 'sessionoptions' contains
+ contains "help", help windows are restored. If 'sessionoptions' contains
+ "blank", windows editing a buffer without a name will be restored.
+ If 'sessionoptions' contains "winsize" and no (help/blank) windows were
+ left out, the window sizes are restored (relative to the screen size).
+ Otherwise, the windows are just given sensible sizes.
+9. Restores the Views for all the windows, as with |:mkview|. But
+ 'sessionoptions' is used instead of 'viewoptions'.
+10. If a file exists with the same name as the Session file, but ending in
+ "x.vim" (for eXtra), executes that as well. You can use *x.vim files to
+ specify additional settings and actions associated with a given Session,
+ such as creating menu items in the GUI version.
+
+After restoring the Session, the full filename of your current Session is
+available in the internal variable "v:this_session" |this_session-variable|.
+An example mapping: >
+ :nmap <F2> :wa<Bar>exe "mksession! " . v:this_session<CR>:so ~/sessions/
+This saves the current Session, and starts off the command to load another.
+
+ *:mkvie* *:mkview*
+:mkvie[w][!] [file] Write a Vim script that restores the contents of the
+ current window.
+ When [!] is included an existing file is overwritten.
+ When [file] is omitted or is a number from 1 to 9, a
+ name is generated and 'viewdir' prepended. When last
+ directory name in 'viewdir' does not exist, this
+ directory is created.
+ An existing file is always overwritten then. Use
+ |:loadview| to load this view again.
+ When [file] is the name of a file ('viewdir' is not
+ used), a command to edit the file is added to the
+ generated file.
+
+The output of ":mkview" contains these items:
+1. The argument list used in the window. When the global argument list is
+ used it is reset to the global list.
+ The index in the argument list is also restored.
+2. The file being edited in the window. If there is no file, the window is
+ made empty.
+3. Restore mappings, abbreviations and options local to the window if
+ 'viewoptions' contains "options" or "localoptions". For the options it
+ restores only values that are local to the current buffer and values local
+ to the window.
+ When storing the view as part of a session and "options" is in
+ 'sessionoptions', global values for local options will be stored too.
+4. Restore folds when using manual folding and 'viewoptions' contains
+ "folds". Restore manually opened and closed folds.
+5. The scroll position and the cursor position in the file. Doesn't work very
+ well when there are closed folds.
+6. The local current directory, if it is different from the global current
+ directory.
+
+Note that Views and Sessions are not perfect:
+- They don't restore everything. For example, defined functions, autocommands
+ and ":syntax on" are not included. Things like register contents and
+ command line history are in viminfo, not in Sessions or Views.
+- Global option values are only set when the differ from the default value.
+ When the current value is not the default value, loading a Session will not
+ set it back to the default value. Local options will be set back to the
+ default value though.
+- Existing mappings will be overwritten without warning. An existing mapping
+ may cause an error for ambiguity.
+- When storing manual folds and when storing manually opened/closed folds,
+ changes in the file between saving and loading the view will mess it up.
+- The Vim script is not very efficient. But still faster than typing the
+ commands yourself!
+
+ *:lo* *:loadview*
+:lo[adview] [nr] Load the view for the current file. When [nr] is
+ omitted, the view stored with ":mkview" is loaded.
+ When [nr] is specified, the view stored with ":mkview
+ [nr]" is loaded.
+
+The combination of ":mkview" and ":loadview" can be used to store up to ten
+different views of a file. These are remembered in the directory specified
+with the 'viewdir' option. The views are stored using the file name. If a
+file is renamed or accessed through a (symbolic) link the view will not be
+found.
+
+You might want to clean up your 'viewdir' directory now and then.
+
+To automatically save and restore views for *.c files: >
+ au BufWinLeave *.c mkview
+ au BufWinEnter *.c silent loadview
+
+==============================================================================
+9. The viminfo file *viminfo* *viminfo-file* *E136*
+ *E575* *E576* *E577*
+If you exit Vim and later start it again, you would normally lose a lot of
+information. The viminfo file can be used to remember that information, which
+enables you to continue where you left off.
+
+This is introduced in section |21.3| of the user manual.
+
+The viminfo file is used to store:
+- The command line history.
+- The search string history.
+- The input-line history.
+- Contents of registers.
+- Marks for several files.
+- File marks, pointing to locations in files.
+- Last search/substitute pattern (for 'n' and '&').
+- The buffer list.
+- Global variables.
+
+The viminfo file is not supported when the |+viminfo| feature has been
+disabled at compile time.
+
+You could also use a Session file. The difference is that the viminfo file
+does not depend on what you are working on. There normally is only one
+viminfo file. Session files are used to save the state of a specific editing
+Session. You could have several Session files, one for each project you are
+working on. Viminfo and Session files together can be used to effectively
+enter Vim and directly start working in your desired setup. |session-file|
+
+ *viminfo-read*
+When Vim is started and the 'viminfo' option is non-empty, the contents of
+the viminfo file are read and the info can be used in the appropriate places.
+The marks are not read in at startup (but file marks are). See
+|initialization| for how to set the 'viminfo' option upon startup.
+
+ *viminfo-write*
+When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
+file (it's actually merged with the existing one, if one exists). The
+'viminfo' option is a string containing information about what info should be
+stored, and contains limits on how much should be stored (see 'viminfo').
+
+Notes for Unix:
+- The file protection for the viminfo file will be set to prevent other users
+ from being able to read it, because it may contain any text or commands that
+ you have worked with.
+- If you want to share the viminfo file with other users (e.g. when you "su"
+ to another user), you can make the file writable for the group or everybody.
+ Vim will preserve this when writing new viminfo files. Be careful, don't
+ allow just anybody to read and write your viminfo file!
+- Vim will not overwrite a viminfo file that is not writable by the current
+ "real" user. This helps for when you did "su" to become root, but your
+ $HOME is still set to a normal user's home directory. Otherwise Vim would
+ create a viminfo file owned by root that nobody else can read.
+
+Marks are stored for each file separately. When a file is read and 'viminfo'
+is non-empty, the marks for that file are read from the viminfo file. NOTE:
+The marks are only written when exiting Vim, which is fine because marks are
+remembered for all the files you have opened in the current editing session,
+unless ":bdel" is used. If you want to save the marks for a file that you are
+about to abandon with ":bdel", use ":wv". The '[' and ']' marks are not
+stored, but the '"' mark is. The '"' mark is very useful for jumping to the
+cursor position when the file was last exited. No marks are saved for files
+that start with any string given with the "r" flag in 'viminfo'. This can be
+used to avoid saving marks for files on removable media (for MS-DOS you would
+use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
+
+ *viminfo-file-marks*
+Uppercase marks ('A to 'Z) are stored when writing the viminfo file. The
+numbered marks ('0 to '9) are a bit special. When the viminfo file is written
+(when exiting or with the ":wviminfo" command), '0 is set to the current cursor
+position and file. The old '0 is moved to '1, '1 to '2, etc. This
+resembles what happens with the "1 to "9 delete registers. If the current
+cursor position is already present in '0 to '9, it is moved to '0, to avoid
+having the same position twice. The result is that with "'0", you can jump
+back to the file and line where you exited Vim. To do that right away, try
+using this command: >
+
+ vim -c "normal '0"
+
+In a shell you could make an alias for it: >
+
+ alias lvim vim -c '"'normal "'"0'"'
+
+Use the "r" flag in 'viminfo' to specify for which files no marks should be
+remembered.
+
+
+VIMINFO FILE NAME *viminfo-file-name*
+
+- The default name of the viminfo file is "$HOME/.viminfo" for Unix and OS/2,
+ "s:.viminfo" for Amiga, "$HOME\_viminfo" for MS-DOS and Win32. For the last
+ two, when $HOME is not set, "$VIM\_viminfo" is used. When $VIM is also not
+ set, "c:\_viminfo" is used. For OS/2 "$VIM/.viminfo" is used when $HOME is
+ not set and $VIM is set.
+- The 'n' flag in the 'viminfo' option can be used to specify another viminfo
+ file name |'viminfo'|.
+- The "-i" Vim argument can be used to set another file name, |-i|. When the
+ file name given is "NONE" (all uppercase), no viminfo file is ever read or
+ written. Also not for the commands below!
+- For the commands below, another file name can be given, overriding the
+ default and the name given with 'viminfo' or "-i" (unless it's NONE).
+
+
+CHARACTER ENCODING *viminfo-encoding*
+
+The text in the viminfo file is encoded as specified with the 'encoding'
+option. Normally you will always work with the same 'encoding' value, and
+this works just fine. However, if you read the viminfo file with another
+value for 'encoding' than what it was written with, some of the text
+(non-ASCII characters) may be invalid. If this is unacceptable, add the 'c'
+flag to the 'viminfo' option: >
+ :set viminfo+=c
+Vim will then attempt to convert the text in the viminfo file from the
+'encoding' value it was written with to the current 'encoding' value. This
+requires Vim to be compiled with the |+iconv| feature. Filenames are not
+converted.
+
+
+MANUALLY READING AND WRITING
+
+Two commands can be used to read and write the viminfo file manually. This
+can be used to exchange registers between two running Vim programs: First
+type ":wv" in one and then ":rv" in the other. Note that if the register
+already contained something, then ":rv!" would be required. Also note
+however that this means everything will be overwritten with information from
+the first Vim, including the command line history, etc.
+
+The viminfo file itself can be edited by hand too, although we suggest you
+start with an existing one to get the format right. It is reasonably
+self-explanatory once you're in there. This can be useful in order to
+create a second file, say "~/.my_viminfo" which could contain certain
+settings that you always want when you first start Vim. For example, you
+can preload registers with particular data, or put certain commands in the
+command line history. A line in your .vimrc file like >
+ :rviminfo! ~/.my_viminfo
+can be used to load this information. You could even have different viminfos
+for different types of files (e.g., C code) and load them based on the file
+name, using the ":autocmd" command (see |:autocmd|).
+
+ *viminfo-errors*
+When Vim detects an error while reading a viminfo file, it will not overwrite
+that file. If there are more than 10 errors, Vim stops reading the viminfo
+file. This was done to avoid accidentally destroying a file when the file
+name of the viminfo file is wrong. This could happen when accidentally typing
+"vim -i file" when you wanted "vim -R file" (yes, somebody accidentally did
+that!). If you want to overwrite a viminfo file with an error in it, you will
+either have to fix the error, or delete the file (while Vim is running, so
+most of the information will be restored).
+
+ *:rv* *:rviminfo* *E195*
+:rv[iminfo][!] [file] Read from viminfo file [file] (default: see above).
+ If [!] is given, then any information that is
+ already set (registers, marks, etc.) will be
+ overwritten. {not in Vi}
+
+ *:wv* *:wviminfo* *E137* *E138* *E574*
+:wv[iminfo][!] [file] Write to viminfo file [file] (default: see above).
+ The information in the file is first read in to make
+ a merge between old and new info. When [!] is used,
+ the old information is not read first, only the
+ internal info is written. If 'viminfo' is empty, marks
+ for up to 100 files will be written.
+ When you get error "E138: Can't write viminfo file"
+ check that no old temp files were left behind (e.g.
+ ~/.viminf*) and that you can write in the directory of
+ the .viminfo file.
+ {not in Vi}
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
new file mode 100644
index 000000000..db322355b
--- /dev/null
+++ b/runtime/doc/syntax.txt
@@ -0,0 +1,4161 @@
+*syntax.txt* For Vim version 7.0aa. Last change: 2004 Jun 09
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Syntax highlighting *syntax* *syntax-highlighting* *coloring*
+
+Syntax highlighting enables Vim to show parts of the text in another font or
+color. Those parts can be specific keywords or text matching a pattern. Vim
+doesn't parse the whole file (to keep it fast), so the highlighting has its
+limitations. Lexical highlighting might be a better name, but since everybody
+calls it syntax highlighting we'll stick with that.
+
+Vim supports syntax highlighting on all terminals. But since most ordinary
+terminals have very limited highlighting possibilities, it works best in the
+GUI version, gvim.
+
+In the User Manual:
+|usr_06.txt| introduces syntax highlighting.
+|usr_44.txt| introduces writing a syntax file.
+
+1. Quick start |:syn-qstart|
+2. Syntax files |:syn-files|
+3. Syntax loading procedure |syntax-loading|
+4. Syntax file remarks |:syn-file-remarks|
+5. Defining a syntax |:syn-define|
+6. :syntax arguments |:syn-arguments|
+7. Syntax patterns |:syn-pattern|
+8. Syntax clusters |:syn-cluster|
+9. Including syntax files |:syn-include|
+10. Synchronizing |:syn-sync|
+11. Listing syntax items |:syntax|
+12. Highlight command |:highlight|
+13. Linking groups |:highlight-link|
+14. Cleaning up |:syn-clear|
+15. Highlighting tags |tag-highlight|
+16. Color xterms |xterm-color|
+
+{Vi does not have any of these commands}
+
+Syntax highlighting is not available when the |+syntax| feature has been
+disabled at compile time.
+
+==============================================================================
+1. Quick start *:syn-qstart*
+
+ *:syn-enable* *:syntax-enable*
+This command switches on syntax highlighting: >
+
+ :syntax enable
+
+What this command actually does is to execute the command >
+ :source $VIMRUNTIME/syntax/syntax.vim
+
+If the VIM environment variable is not set, Vim will try to find
+the path in another way (see |$VIMRUNTIME|). Usually this works just
+fine. If it doesn't, try setting the VIM environment variable to the
+directory where the Vim stuff is located. For example, if your syntax files
+are in the "/usr/vim/vim50/syntax" directory, set $VIMRUNTIME to
+"/usr/vim/vim50". You must do this in the shell, before starting Vim.
+
+ *:syn-on* *:syntax-on*
+The ":syntax enable" command will keep your current color settings. This
+allows using ":highlight" commands to set your preferred colors before or
+after using this command. If you want Vim to overrule your settings with the
+defaults, use: >
+ :syntax on
+<
+ *:hi-normal* *:highlight-normal*
+If you are running in the GUI, you can get white text on a black background
+with: >
+ :highlight Normal guibg=Black guifg=White
+For a color terminal see |:hi-normal-cterm|.
+For setting up your own colors syntax highlighting see |syncolor|.
+
+NOTE: The syntax files on MS-DOS and Windows have lines that end in <CR><NL>.
+The files for Unix end in <NL>. This means you should use the right type of
+file for your system. Although on MS-DOS and Windows the right format is
+automatically selected if the 'fileformats' option is not empty.
+
+NOTE: When using reverse video ("gvim -fg white -bg black"), the default value
+of 'background' will not be set until the GUI window is opened, which is after
+reading the .gvimrc. This will cause the wrong default highlighting to be
+used. To set the default value of 'background' before switching on
+highlighting, include the ":gui" command in the .gvimrc: >
+
+ :gui " open window and set default for 'background'
+ :syntax on " start highlighting, use 'background' to set colors
+
+NOTE: Using ":gui" in the .gvimrc means that "gvim -f" won't start in the
+foreground! Use ":gui -f" then.
+
+
+You can toggle the syntax on/off with this command >
+ :if exists("syntax_on") | syntax off | else | syntax enable | endif
+
+To put this into a mapping, you can use: >
+ :map <F7> :if exists("syntax_on") <Bar>
+ \ syntax off <Bar>
+ \ else <Bar>
+ \ syntax enable <Bar>
+ \ endif <CR>
+[using the |<>| notation, type this literally]
+
+Details
+The ":syntax" commands are implemented by sourcing a file. To see exactly how
+this works, look in the file:
+ command file ~
+ :syntax enable $VIMRUNTIME/syntax/syntax.vim
+ :syntax on $VIMRUNTIME/syntax/syntax.vim
+ :syntax manual $VIMRUNTIME/syntax/manual.vim
+ :syntax off $VIMRUNTIME/syntax/nosyntax.vim
+Also see |syntax-loading|.
+
+==============================================================================
+2. Syntax files *:syn-files*
+
+The syntax and highlighting commands for one language are normally stored in
+a syntax file. The name convention is: "{name}.vim". Where {name} is the
+name of the language, or an abbreviation (to fit the name in 8.3 characters,
+a requirement in case the file is used on a DOS filesystem).
+Examples:
+ c.vim perl.vim java.vim html.vim
+ cpp.vim sh.vim csh.vim
+
+The syntax file can contain any Ex commands, just like a vimrc file. But
+the idea is that only commands for a specific language are included. When a
+language is a superset of another language, it may include the other one,
+for example, the cpp.vim file could include the c.vim file: >
+ :so $VIMRUNTIME/syntax/c.vim
+
+The .vim files are normally loaded with an autocommand. For example: >
+ :au Syntax c runtime! syntax/c.vim
+ :au Syntax cpp runtime! syntax/cpp.vim
+These commands are normally in the file $VIMRUNTIME/syntax/synload.vim.
+
+
+MAKING YOUR OWN SYNTAX FILES *mysyntaxfile*
+
+When you create your own syntax files, and you want to have Vim use these
+automatically with ":syntax enable", do this:
+
+1. Create your user runtime directory. You would normally use the first item
+ of the 'runtimepath' option. Example for Unix: >
+ mkdir ~/.vim
+
+2. Create a directory in there called "syntax". For Unix: >
+ mkdir ~/.vim/syntax
+
+3. Write the Vim syntax file. Or download one from the internet. Then write
+ it in your syntax directory. For example, for the "mine" syntax: >
+ :w ~/.vim/syntax/mine.vim
+
+Now you can start using your syntax file manually: >
+ :set syntax=mine
+You don't have to exit Vim to use this.
+
+If you also want Vim to detect the type of file, see |new-filetype|.
+
+If you are setting up a system with many users and you don't want each user
+to add the same syntax file, you can use another directory from 'runtimepath'.
+
+
+ADDING TO AN EXISTING SYNTAX FILE *mysyntaxfile-add*
+
+If you are mostly satisfied with an existing syntax file, but would like to
+add a few items or change the highlighting, follow these steps:
+
+1. Create your user directory from 'runtimepath', see above.
+
+2. Create a directory in there called "after/syntax". For Unix: >
+ mkdir ~/.vim/after
+ mkdir ~/.vim/after/syntax
+
+3. Write a Vim script that contains the commands you want to use. For
+ example, to change the colors for the C syntax: >
+ highlight cComment ctermfg=Green guifg=Green
+
+4. Write that file in the "after/syntax" directory. Use the name of the
+ syntax, with ".vim" added. For our C syntax: >
+ :w ~/.vim/after/syntax/c.vim
+
+That's it. The next time you edit a C file the Comment color will be
+different. You don't even have to restart Vim.
+
+
+REPLACING AN EXISTING SYNTAX FILE *mysyntaxfile-replace*
+
+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.
+
+
+NAMING CONVENTIONS
+ *group-name* *{group-name}* *E669* *W18*
+The name for a highlight or syntax group must consist of ASCII letters, digits
+and the underscore. As a regexp: "[a-zA-Z0-9_]*"
+
+To be able to allow each user to pick his favorite set of colors, there must
+be preferred names for highlight groups that are common for many languages.
+These are the suggested group names (if syntax highlighting works properly
+you can see the actual color, except for "Ignore"):
+
+ *Comment any comment
+
+ *Constant any constant
+ String a string constant: "this is a string"
+ Character a character constant: 'c', '\n'
+ Number a number constant: 234, 0xff
+ Boolean a boolean constant: TRUE, false
+ Float a floating point constant: 2.3e10
+
+ *Identifier any variable name
+ Function function name (also: methods for classes)
+
+ *Statement any statement
+ Conditional if, then, else, endif, switch, etc.
+ Repeat for, do, while, etc.
+ Label case, default, etc.
+ Operator "sizeof", "+", "*", etc.
+ Keyword any other keyword
+ Exception try, catch, throw
+
+ *PreProc generic Preprocessor
+ Include preprocessor #include
+ Define preprocessor #define
+ Macro same as Define
+ PreCondit preprocessor #if, #else, #endif, etc.
+
+ *Type int, long, char, etc.
+ StorageClass static, register, volatile, etc.
+ Structure struct, union, enum, etc.
+ Typedef A typedef
+
+ *Special any special symbol
+ SpecialChar special character in a constant
+ Tag you can use CTRL-] on this
+ Delimiter character that needs attention
+ SpecialComment special things inside a comment
+ Debug debugging statements
+
+ *Underlined text that stands out, HTML links
+
+ *Ignore left blank, hidden
+
+ *Error any erroneous construct
+
+ *Todo anything that needs extra attention; mostly the
+ keywords TODO FIXME and XXX
+
+The names marked with * are the preferred groups; the others are minor groups.
+For the preferred groups, the "syntax.vim" file contains default highlighting.
+The minor groups are linked to the preferred groups, so they get the same
+highlighting. You can override these defaults by using ":highlight" commands
+after sourcing the "syntax.vim" file.
+
+Note that highlight group names are not case sensitive. "String" and "string"
+can be used for the same group.
+
+The following names are reserved and cannot be used as a group name:
+ NONE ALL ALLBUT contains contained
+
+==============================================================================
+3. Syntax loading procedure *syntax-loading*
+
+This explains the details that happen when the command ":syntax enable" is
+issued. When Vim initializes itself, it finds out where the runtime files are
+located. This is used here as the variable |$VIMRUNTIME|.
+
+":syntax enable" and ":syntax on" do the following:
+
+ Source $VIMRUNTIME/syntax/syntax.vim
+ |
+ +- Clear out any old syntax by sourcing $VIMRUNTIME/syntax/nosyntax.vim
+ |
+ +- Source first syntax/synload.vim in 'runtimepath'
+ | |
+ | +- Setup the colors for syntax highlighting. If a color scheme is
+ | | defined it is loaded again with ":colors {name}". Otherwise
+ | | ":runtime! syntax/syncolor.vim" is used. ":syntax on" overrules
+ | | existing colors, ":syntax enable" only sets groups that weren't
+ | | set yet.
+ | |
+ | +- Set up syntax autocmds to load the appropriate syntax file when
+ | | the 'syntax' option is set. *synload-1*
+ | |
+ | +- Source the user's optional file, from the |mysyntaxfile| variable.
+ | This is for backwards compatibility with Vim 5.x only. *synload-2*
+ |
+ +- Do ":filetype on", which does ":runtime! filetype.vim". It loads any
+ | filetype.vim files found. It should always Source
+ | $VIMRUNTIME/filetype.vim, which does the following.
+ | |
+ | +- Install autocmds based on suffix to set the 'filetype' option
+ | | This is where the connection between file name and file type is
+ | | made for known file types. *synload-3*
+ | |
+ | +- Source the user's optional file, from the *myfiletypefile*
+ | | variable. This is for backwards compatibility with Vim 5.x only.
+ | | *synload-4*
+ | |
+ | +- Install one autocommand which sources scripts.vim when no file
+ | | type was detected yet. *synload-5*
+ | |
+ | +- Source $VIMRUNTIME/menu.vim, to setup the Syntax menu. |menu.vim|
+ |
+ +- Install a FileType autocommand to set the 'syntax' option when a file
+ | type has been detected. *synload-6*
+ |
+ +- Execute syntax autocommands to start syntax highlighting for each
+ already loaded buffer.
+
+
+Upon loading a file, Vim finds the relevant syntax file as follows:
+
+ Loading the file triggers the BufReadPost autocommands.
+ |
+ +- If there is a match with one of the autocommands from |synload-3|
+ | (known file types) or |synload-4| (user's file types), the 'filetype'
+ | option is set to the file type.
+ |
+ +- The autocommand at |synload-5| is triggered. If the file type was not
+ | found yet, then scripts.vim is searched for in 'runtimepath'. This
+ | should always load $VIMRUNTIME/scripts.vim, which does the following.
+ | |
+ | +- Source the user's optional file, from the *myscriptsfile*
+ | | variable. This is for backwards compatibility with Vim 5.x only.
+ | |
+ | +- If the file type is still unknown, check the contents of the file,
+ | again with checks like "getline(1) =~ pattern" as to whether the
+ | file type can be recognized, and set 'filetype'.
+ |
+ +- When the file type was determined and 'filetype' was set, this
+ | triggers the FileType autocommand |synload-6| above. It sets
+ | 'syntax' to the determined file type.
+ |
+ +- When the 'syntax' option was set above, this triggers an autocommand
+ | from |synload-1| (and |synload-2|). This find the main syntax file in
+ | 'runtimepath', with this command:
+ | runtime! syntax/<name>.vim
+ |
+ +- Any other user installed FileType or Syntax autocommands are
+ triggered. This can be used to change the highlighting for a specific
+ syntax.
+
+==============================================================================
+4. Syntax file remarks *:syn-file-remarks*
+
+ *b:current_syntax-variable*
+Vim stores the name of the syntax that has been loaded in the
+"b:current_syntax" variable. You can use this if you want to load other
+settings, depending on which syntax is active. Example: >
+ :au BufReadPost * if b:current_syntax == "csh"
+ :au BufReadPost * do-some-things
+ :au BufReadPost * endif
+
+
+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.
+
+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
+<
+Warning: This is slow!
+ *: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
+
+After you save the resulting file, you can view it with any HTML viewer, such
+as Netscape. The colors should be exactly the same as you see them in Vim.
+
+To restrict the conversion to a range of lines set "html_start_line" and
+"html_end_line" to the first and last line to be converted. Example, using
+the last set Visual area: >
+
+ :let html_start_line = line("'<")
+ :let html_end_line = line("'>")
+
+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 html_number_lines = 1
+Force to omit the line numbers by using a zero value: >
+ :let html_number_lines = 0
+Go back to the default to use 'number' by deleting the variable: >
+ :unlet html_number_lines
+
+By default, HTML optimized for old browsers is generated. If you prefer using
+cascading style sheets (CSS1) for the attributes (resulting in considerably
+shorter and valid HTML 4 file), use: >
+ :let html_use_css = 1
+
+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: >
+ :let 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 html_use_encoding = "foobar"
+To omit the line that specifies the charset, set g:html_use_encoding to an
+empty string: >
+ :let html_use_encoding = ""
+To go back to the automatic mechanism, delete the g:html_use_encoding
+variable: >
+ :unlet html_use_encoding
+<
+ *convert-to-XML* *convert-to-XHTML*
+An alternative is to have the script generate XHTML (XML compliant HTML). To
+do this set the "use_xhtml" variable: >
+ :let use_xhtml = 1
+To disable it again delete the variable: >
+ :unlet use_xhtml
+The generated XHTML file can be used in DocBook XML documents. See:
+ http://people.mech.kuleuven.ac.be/~pissaris/howto/src2db.html
+
+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).
+- Older browsers will 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* *abel-syntax*
+
+ABEL highlighting provides some user-defined options. To enable them, assign
+any value to the respective variable. Example: >
+ :let abel_obsolete_ok=1
+To disable them use ":unlet". Example: >
+ :unlet abel_obsolete_ok
+
+Variable Highlight ~
+abel_obsolete_ok obsolete keywords are statements, not errors
+abel_cpp_comments_illegal do not interpret '//' as inline comment leader
+
+
+ADA *ada.vim* *ada-syntax*
+
+This mode is designed for the 1995 edition of Ada ("Ada95"), which
+includes support for objected-programming, protected types, and so on.
+It handles code written for the original Ada language
+("Ada83" or "Ada87") as well, though Ada83 code which uses Ada95-only
+keywords will be wrongly colored (such code should be fixed anyway).
+For more information about Ada, see http://www.adapower.com.
+
+The Ada mode handles a number of situations cleanly.
+For example, it knows that the "-" in "-5" is a number, but the same
+character in "A-5" is an operator. Normally, a "with" or "use" clause
+referencing another compilation unit is colored the same way as C's
+"#include" is colored. If you have "Conditional" or "Repeat"
+groups colored differently, then "end if" and "end loop" will be
+colored as part of those respective groups.
+You can set these to different colors using vim's "highlight" command
+(e.g., to change how loops are displayed, enter the command
+":hi Repeat" followed by the color specification; on simple terminals
+the color specification ctermfg=White often shows well).
+
+There are several options you can select in this Ada mode.
+To enable them, assign a value to the option. For example, to turn one on:
+ let ada_standard_types = 1
+To disable them use ":unlet". Example:
+ unlet ada_standard_types = 1
+You can just use ":" and type these into the command line to set these
+temporarily before loading an Ada file. You can make these option settings
+permanent by adding the "let" command(s), without a colon,
+to your "~/.vimrc" file.
+
+Here are the Ada mode options:
+
+Variable Action ~
+ada_standard_types Highlight types in package Standard (e.g., "Float")
+ada_space_errors Highlight extraneous errors in spaces...
+ada_no_trail_space_error but ignore trailing spaces at the end of a line
+ada_no_tab_space_error but ignore tabs after spaces
+ada_withuse_ordinary Show "with" and "use" as ordinary keywords
+ (when used to reference other compilation units
+ they're normally highlighted specially).
+ada_begin_preproc Show all begin-like keywords using the coloring
+ of C preprocessor commands.
+
+Even on a slow (90Mhz) PC this mode works quickly, but if you find
+the performance unacceptable, turn on ada_withuse_ordinary.
+
+
+ANT *ant.vim* *ant-syntax*
+
+The ant syntax file provides syntax highlighting for javascript and python
+by default. Syntax highlighting for other script languages can be installed
+by the function AntSyntaxScript(), which takes the tag name as first argument
+and the script syntax file name as second argument. Example: >
+
+ :call AntSyntaxScript('perl', 'perl.vim')
+
+will install syntax perl highlighting for the following ant code >
+
+ <script language = 'perl'><![CDATA[
+ # everything inside is highlighted as perl
+ ]]></script>
+
+See |mysyntaxfile-add| for installing script languages permanently.
+
+
+APACHE *apache.vim* *apache-syntax*
+
+The apache syntax file provides syntax highlighting depending on Apache HTTP
+server version, by default for 1.3.x. Set "apache_version" to Apache version
+(as a string) to get highlighting for another version. Example: >
+
+ :let apache_version = "2.0"
+<
+
+ *asm.vim* *asmh8300.vim* *nasm.vim* *masm.vim* *asm68k*
+ASSEMBLY *asm-syntax* *asmh8300-syntax* *nasm-syntax* *masm-syntax*
+ *asm68k-syntax* *fasm.vim*
+
+Files matching "*.i" could be Progress or Assembly. If the automatic detection
+doesn't work for you, or you don't edit Progress at all, use this in your
+startup vimrc: >
+ :let filetype_i = "asm"
+Replace "asm" with the type of assembly you use.
+
+There are many types of assembly languages that all use the same file name
+extensions. Therefore you will have to select the type yourself, or add a
+line in the assembly file that Vim will recognize. Currently these syntax
+files are included:
+ asm GNU assembly (the default)
+ asm68k Motorola 680x0 assembly
+ asmh8300 Hitachi H-8300 version of GNU assembly
+ ia64 Intel Itanium 64
+ fasm Flat assembly (http://flatassembler.net)
+ masm Microsoft assembly (probably works for any 80x86)
+ nasm Netwide assembly
+ tasm Turbo Assembly (with opcodes 80x86 up to Pentium, and
+ MMX)
+ pic PIC assembly (currently for PIC16F84)
+
+The most flexible is to add a line in your assembly file containing: >
+ :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.
+
+The syntax type can always be overruled for a specific buffer by setting the
+b:asmsyntax variable: >
+ :let b:asmsyntax=nasm
+
+If b:asmsyntax is not set, either automatically or by hand, then the value of
+the global variable asmsyntax is used. This can be seen as a default assembly
+language: >
+ :let asmsyntax=nasm
+
+As a last resort, if nothing is defined, the "asm" syntax is used.
+
+
+Netwide assembler (nasm.vim) optional highlighting ~
+
+To enable a feature: >
+ :let {variable}=1|set syntax=nasm
+To disable a feature: >
+ :unlet {variable} |set syntax=nasm
+
+Variable Highlight ~
+nasm_loose_syntax unofficial parser allowed syntax not as Error
+ (parser dependent; not recommended)
+nasm_ctx_outside_macro contexts outside macro not as Error
+nasm_no_warn potentially risky syntax not as ToDo
+
+
+ASPPERL and ASPVBS *aspperl-syntax* *aspvbs-syntax*
+
+*.asp and *.asa files could be either Perl or Visual Basic script. Since it's
+hard to detect this you can set two global variables to tell Vim what you are
+using. For Perl script use: >
+ :let g:filetype_asa = "aspperl"
+ :let g:filetype_asp = "aspperl"
+For Visual Basic use: >
+ :let g:filetype_asa = "aspvbs"
+ :let g:filetype_asp = "aspvbs"
+
+
+BASIC *basic.vim* *vb.vim* *basic-syntax* *vb-syntax*
+
+Both Visual Basic and "normal" basic use the extension ".bas". To detect
+which one should be used, Vim checks for the string "VB_Name" in the first
+five lines of the file. If it is not found, filetype will be "basic",
+otherwise "vb". Files with the ".frm" extension will always be seen as Visual
+Basic.
+
+
+C *c.vim* *c-syntax*
+
+A few things in C highlighting are optional. To enable them assign any value
+to the respective variable. Example: >
+ :let c_comment_strings=1
+To disable them use ":unlet". Example: >
+ :unlet c_comment_strings
+
+Variable Highlight ~
+c_gnu GNU gcc specific items
+c_comment_strings strings and numbers inside a comment
+c_space_errors trailing white space and spaces before a <Tab>
+c_no_trail_space_error ... but no trailing spaces
+c_no_tab_space_error ... but no spaces before a <Tab>
+c_no_bracket_error don't highlight {}; inside [] as errors
+c_no_ansi don't do standard ANSI types and constants
+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_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
+
+If you notice highlighting errors while scrolling backwards, which are fixed
+when redrawing with CTRL-L, try setting the "c_minlines" internal variable
+to a larger number: >
+ :let c_minlines = 100
+This will make the syntax synchronization start 100 lines before the first
+displayed line. The default value is 50 (15 when c_no_if0 is set). The
+disadvantage of using a larger number is that redrawing can become slow.
+
+When using the "#if 0" / "#endif" comment highlighting, notice that this only
+works when the "#if 0" is within "c_minlines" from the top of the window. If
+you have a long "#if 0" construct it will not be highlighted correctly.
+
+To match extra items in comments, use the cCommentGroup cluster.
+Example: >
+ :au Syntax c call MyCadd()
+ :function MyCadd()
+ : syn keyword cMyItem contained Ni
+ : syn cluster cCommentGroup add=cMyItem
+ : hi link cMyItem Title
+ :endfun
+
+ANSI constants will be highlighted with the "cConstant" group. This includes
+"NULL", "SIG_IGN" and others. But not "TRUE", for example, because this is
+not in the ANSI standard. If you find this confusing, remove the cConstant
+highlighting: >
+ :hi link cConstant NONE
+
+If you see '{' and '}' highlighted as an error where they are OK, reset the
+highlighting for cErrInParen and cErrInBracket.
+
+If you want to use folding in your C files, you can add these lines in a file
+an the "after" directory in 'runtimepath'. For Unix this would be
+~/.vim/after/syntax/c.vim. >
+ syn region myFold start="{" end="}" transparent fold
+ syn sync fromstart
+ set foldmethod=syntax
+
+
+CHILL *chill.vim* *chill-syntax*
+
+Chill syntax highlighting is similar to C. See |c.vim| for all the settings
+that are available. Additionally there is:
+
+chill_syntax_for_h use Ch syntax for *.h files, instead of C or C++
+chill_space_errors like c_space_errors
+chill_comment_string like c_comment_strings
+chill_minlines like c_minlines
+
+
+CHANGELOG *changelog.vim* *changelog-syntax*
+
+ChangeLog supports highlighting spaces at the start of a line.
+If you do not like this, add following line to your .vimrc: >
+ let g:changelog_spacing_errors = 0
+This works the next time you edit a changelog file. You can also use
+"b:changelog_spacing_errors" to set this per buffer (before loading the syntax
+file).
+
+You can change the highlighting used, e.g., to flag the spaces as an error: >
+ :hi link ChangelogError Error
+Or to avoid the highlighting: >
+ :hi link ChangelogError NONE
+This works immediately.
+
+
+COBOL *cobol.vim* *cobol-syntax*
+
+COBOL highlighting has different needs for legacy code than it does for fresh
+development. This is due to differences in what is being done (maintenance
+versus development) and other factors. To enable legacy code highlighting,
+add this line to your .vimrc: >
+ :let cobol_legacy_code = 1
+To disable it again, use this: >
+ :unlet cobol_legacy_code
+
+
+COLD FUSION *coldfusion.vim* *coldfusion-syntax*
+
+The ColdFusion has its own version of HTML comments. To turn on ColdFusion
+comment highlighting, add the following line to your startup file: >
+
+ :let html_wrong_comments = 1
+
+The ColdFusion syntax file is based on the HTML syntax file.
+
+
+CSH *csh.vim* *csh-syntax*
+
+This covers the shell named "csh". Note that on some systems tcsh is actually
+used.
+
+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"
+
+For using tcsh: >
+
+ :let 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
+will be classified as tcsh, UNLESS the "filetype_csh" variable exists. If the
+"filetype_csh" variable exists, the filetype will be set to the value of the
+variable.
+
+
+CYNLIB *cynlib.vim* *cynlib-syntax*
+
+Cynlib files are C++ files that use the Cynlib class library to enable
+hardware modeling and simulation using C++. Typically Cynlib files have a .cc
+or a .cpp extension, which makes it very difficult to distinguish them from a
+normal C++ file. Thus, to enable Cynlib highlighting for .cc files, add this
+line to your .vimrc file: >
+
+ :let cynlib_cyntax_for_cc=1
+
+Similarly for cpp files (this extension is only usually used in Windows) >
+
+ :let cynlib_cyntax_for_cpp=1
+
+To disable these again, use this: >
+
+ :unlet cynlib_cyntax_for_cc
+ :unlet cynlib_cyntax_for_cpp
+<
+
+CWEB *cweb.vim* *cweb-syntax*
+
+Files matching "*.w" could be Progress or cweb. If the automatic detection
+doesn't work for you, or you don't edit Progress at all, use this in your
+startup vimrc: >
+ :let filetype_w = "cweb"
+
+
+DESKTOP *desktop.vim* *desktop-syntax*
+
+Primary goal of this syntax file is to highlight .desktop and .directory files
+according to freedesktop.org standard: http://pdx.freedesktop.org/Standards/
+But actually almost none implements this standard fully. Thus it will
+highlight all Unix ini files. But you can force strict highlighting according
+to standard by placing this in your vimrc file: >
+ :let enforce_freedesktop_standard = 1
+
+
+DIRCOLORS *dircolors.vim* *dircolors-syntax*
+
+The dircolors utility highlighting definition has one option. It exists to
+provide compatibility with the Slackware GNU/Linux distributions version of
+the command. It adds a few keywords that are generally ignored by most
+versions. On Slackware systems, however, the utility accepts the keywords and
+uses them for processing. To enable the Slackware keywords add the following
+line to your startup file: >
+ let dircolors_is_slackware = 1
+
+
+DOCBOOK *docbk.vim* *docbk-syntax* *docbook*
+DOCBOOK XML *docbkxml.vim* *docbkxml-syntax*
+DOCBOOK SGML *docbksgml.vim* *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
+automatically if it can recognize the type. When Vim can't guess it the type
+defaults to XML.
+You can set the type manually: >
+ :let docbk_type = "sgml"
+or: >
+ :let docbk_type = "xml"
+You need to do this before loading the syntax file, which is complicated.
+Simpler is setting the filetype to "docbkxml" or "docbksgml": >
+ :set filetype=docbksgml
+or: >
+ :set filetype=docbkxml
+
+
+DOSBATCH *dosbatch.vim* *dosbatch-syntax*
+
+There is one option with highlighting DOS batch files. This covers new
+extensions to the Command Interpreter introduced with Windows 2000 and
+is controlled by the variable dosbatch_cmdextversion. For Windows NT
+this should have the value 1, and for Windows 2000 it should be 2.
+Select the version you want with the following line: >
+
+ :let dosbatch_cmdextversion = 1
+
+If this variable is not defined it defaults to a value of 2 to support
+Windows 2000.
+
+
+DTD *dtd.vim* *dtd-syntax*
+
+The DTD syntax highlighting is case sensitive by default. To disable
+case-sensitive highlighting, add the following line to your startup file: >
+
+ :let dtd_ignore_case=1
+
+The DTD syntax file will highlight unknown tags as errors. If
+this is annoying, it can be turned off by setting: >
+
+ :let dtd_no_tag_errors=1
+
+before sourcing the dtd.vim syntax file.
+Parameter entity names are highlighted in the definition using the
+'Type' highlighting group and 'Comment' for punctuation and '%'.
+Parameter entity instances are highlighted using the 'Constant'
+highlighting group and the 'Type' highlighting group for the
+delimiters % and ;. This can be turned off by setting: >
+
+ :let dtd_no_param_entities=1
+
+The DTD syntax file is also included by xml.vim to highlight included dtd's.
+
+
+EIFFEL *eiffel.vim* *eiffel-syntax*
+
+While Eiffel is not case-sensitive, its style guidelines are, and the
+syntax highlighting file encourages their use. This also allows to
+highlight class names differently. If you want to disable case-sensitive
+highlighting, add the following line to your startup file: >
+
+ :let eiffel_ignore_case=1
+
+Case still matters for class names and TODO marks in comments.
+
+Conversely, for even stricter checks, add one of the following lines: >
+
+ :let eiffel_strict=1
+ :let eiffel_pedantic=1
+
+Setting eiffel_strict will only catch improper capitalization for the
+five predefined words "Current", "Void", "Result", "Precursor", and
+"NONE", to warn against their accidental use as feature or class names.
+
+Setting eiffel_pedantic will enforce adherence to the Eiffel style
+guidelines fairly rigorously (like arbitrary mixes of upper- and
+lowercase letters as well as outdated ways to capitalize keywords).
+
+If you want to use the lower-case version of "Current", "Void",
+"Result", and "Precursor", you can use >
+
+ :let eiffel_lower_case_predef=1
+
+instead of completely turning case-sensitive highlighting off.
+
+Support for ISE's proposed new creation syntax that is already
+experimentally handled by some compilers can be enabled by: >
+
+ :let eiffel_ise=1
+
+Finally, some vendors support hexadecimal constants. To handle them, add >
+
+ :let eiffel_hex_constants=1
+
+to your startup file.
+
+
+ERLANG *erlang.vim* *erlang-syntax*
+
+The erlang highlighting supports Erlang (ERicsson LANGuage).
+Erlang is case sensitive and default extension is ".erl".
+
+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
+
+
+FORM *form.vim* *form-syntax*
+
+The coloring scheme for syntax elements in the FORM file uses the default
+modes Conditional, Number, Statement, Comment, PreProc, Type, and String,
+following the language specifications in 'Symbolic Manipulation with FORM'' by
+J.A.M. Vermaseren, CAN, Netherlands, 1991.
+
+If you want include your own changes to the default colors, you have to
+redefine the following syntax groups:
+
+ - formConditional
+ - formNumber
+ - formStatement
+ - formHeaderStatement
+ - formComment
+ - formPreProc
+ - formDirective
+ - formType
+ - formString
+
+Note that the form.vim syntax file implements FORM preprocessor commands and
+directives per default in the same syntax group.
+
+A predefined enhanced color mode for FORM is available to distinguish between
+header statements and statements in the body of a FORM program. To activate
+this mode define the following variable in your vimrc file >
+
+ :let form_enhanced_color=1
+
+The enhanced mode also takes advantage of additional color features for a dark
+gvim display. Here, statements are colored LightYellow instead of Yellow, and
+conditionals are LightBlue for better distinction.
+
+
+FORTRAN *fortran.vim* *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.
+
+Fortran source code form ~
+Fortran 9x 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
+form. If you always use free source form, then >
+ :let fortran_free_source=1
+in your .vimrc prior to the :syntax on command. If you always use fixed source
+form, then >
+ :let fortran_fixed_source=1
+in your .vimrc prior to the :syntax on command.
+
+If the form of the source code depends upon the file extension, then it is
+most convenient to set fortran_free_source 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 free source form and the
+rest in fixed source form, add the following code to your ftplugin file >
+ let s:extfname = expand("%:e")
+ if s:extfname ==? "f90"
+ let fortran_free_source=1
+ unlet! fortran_fixed_source
+ else
+ let fortran_fixed_source=1
+ unlet! fortran_free_source
+ endif
+Note that this will work only if the "filetype plugin indent on" command
+precedes the "syntax on" command in your .vimrc file.
+
+When you edit an existing fortran file, the syntax script will assume free
+source form if the fortran_free_source variable has been set, and assumes
+fixed source form if the fortran_fixed_source variable has been set. If
+neither of these variables have been set, the syntax script attempts to
+determine which source form has been used by examining the first five columns
+of the first 25 lines of your file. If no signs of free source form are
+detected, then the file is assumed to be in fixed source form. The algorithm
+should work in the vast majority of cases. In some cases, such as a file that
+begins with 25 or more full-line comments, the script may incorrectly decide
+that the fortran code is in fixed form. If that happens, just add a
+non-comment statement beginning anywhere in the first five columns of the
+first twenty five lines, save (:w) and then reload (:e!) the file.
+
+Tabs in fortran files ~
+Tabs are not recognized by the Fortran standards. Tabs are not a good idea in
+fixed format fortran source code which requires fixed column boundaries.
+Therefore, tabs are marked as errors. Nevertheless, some programmers like
+using tabs. If your fortran files contain tabs, then you should set the
+variable fortran_have_tabs in your .vimrc with a command such as >
+ :let fortran_have_tabs=1
+placed prior to the :syntax on command. Unfortunately, the use of tabs will
+mean that the syntax file will not be able to detect incorrect margins.
+
+Syntax folding of fortran files ~
+If you wish to use foldmethod=syntax, then you must first set the variable
+fortran_fold with a command such as >
+ :let fortran_fold=1
+to instruct the syntax script to define fold regions for program units, that
+is main programs starting with a program statement, subroutines, function
+subprograms, block data subprograms, interface blocks, and modules. If you
+also set the variable fortran_fold_conditionals with a command such as >
+ :let fortran_fold_conditionals=1
+then fold regions will also be defined for do loops, if blocks, and select
+case constructs. If you also set the variable
+fortran_fold_multilinecomments with a command such as >
+ :let fortran_fold_multilinecomments=1
+then fold regions will also be defined for three or more consecutive comment
+lines. Note that defining fold regions can be slow for large files.
+
+If fortran_fold, and possibly fortran_fold_conditionals and/or
+fortran_fold_multilinecomments, have been set, then vim will fold your file if
+you set foldmethod=syntax. Comments or blank lines placed between two program
+units are not folded because they are seen as not belonging to any program
+unit.
+
+More precise fortran syntax ~
+If you set the variable fortran_more_precise with a command such as >
+ :let fortran_more_precise=1
+then the syntax coloring will be more precise but slower. In particular,
+statement labels used in do, goto and arithmetic if statements will be
+recognized, as will construct names at the end of a do, if, select or forall
+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 >
+ let s:extfname = expand("%:e")
+ if s:extfname ==? "f90"
+ let fortran_dialect="elf"
+ else
+ unlet! 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 >
+ ! fortran_dialect=F
+F overrides elf if both directives are present.
+
+Limitations ~
+Parenthesis checking does not catch too few closing parentheses. Hollerith
+strings are not recognized. Some keywords may be highlighted incorrectly
+because Fortran90 has no reserved words.
+
+For further information related to fortran, see |fortran-indent| and
+|fortran-plugin|.
+
+
+FVWM CONFIGURATION FILES *fvwm.vim* *fvwm-syntax*
+
+In order for Vim to recognize Fvwm configuration files that do not match
+the patterns *fvwmrc* or *fvwm2rc* , you must put additional patterns
+appropriate to your system in your myfiletypes.vim file. For these
+patterns, you must set the variable "b:fvwm_version" to the major version
+number of Fvwm, and the 'filetype' option to fvwm.
+
+For example, to make Vim identify all files in /etc/X11/fvwm2/
+as Fvwm2 configuration files, add the following: >
+
+ :au! BufNewFile,BufRead /etc/X11/fvwm2/* let b:fvwm_version = 2 |
+ \ set filetype=fvwm
+
+If you'd like Vim to highlight all valid color names, tell it where to
+find the color database (rgb.txt) on your system. Do this by setting
+"rgb_file" to its location. Assuming your color database is located
+in /usr/X11/lib/X11/, you should add the line >
+
+ :let rgb_file = "/usr/X11/lib/X11/rgb.txt"
+
+to your .vimrc file.
+
+
+GSP *gsp.vim*
+
+The default coloring style for GSP pages is defined by |html.vim|, and
+the coloring for java code (within java tags or inline between backticks)
+is defined by |java.vim|. The following HTML groups defined in |html.vim|
+are redefined to incorporate and highlight inline java code:
+
+ htmlString
+ htmlValue
+ htmlEndTag
+ htmlTag
+ htmlTagN
+
+Highlighting should look fine most of the places where you'd see inline
+java code, but in some special cases it may not. To add another HTML
+group where you will have inline java code where it does not highlight
+correctly, just copy the line you want from |html.vim| and add gspJava
+to the contains clause.
+
+The backticks for inline java are highlighted according to the htmlError
+group to make them easier to see.
+
+
+GROFF *groff.vim* *groff-syntax*
+
+The groff syntax file is a wrapper for |nroff.vim|, see the notes
+under that heading for examples of use and configuration. The purpose
+of this wrapper is to set up groff syntax extensions by setting the
+filetype from a |modeline| or in a personal filetype definitions file
+(see |filetype.txt|).
+
+
+HASKELL *haskell.vim* *lhaskell.vim* *haskell-syntax*
+
+The Haskell syntax files support plain Haskell code as well as literate
+Haskell code, the latter in both Bird style and TeX style. The Haskell
+syntax highlighting will also highlight C preprocessor directives.
+
+If you want to highlight delimiter characters (useful if you have a
+light-coloured background), add to your .vimrc: >
+ :let hs_highlight_delimiters = 1
+To treat True and False as keywords as opposed to ordinary identifiers,
+add: >
+ :let hs_highlight_boolean = 1
+To also treat the names of primitive types as keywords: >
+ :let hs_highlight_types = 1
+And to treat the names of even more relatively common types as keywords: >
+ :let hs_highlight_more_types = 1
+If you want to highlight the names of debugging functions, put in
+your .vimrc: >
+ :let hs_highlight_debug = 1
+
+The Haskell syntax highlighting also highlights C preprocessor
+directives, and flags lines that start with # but are not valid
+directives as erroneous. This interferes with Haskell's syntax for
+operators, as they may start with #. If you want to highlight those
+as operators as opposed to errors, put in your .vimrc: >
+ :let hs_allow_hash_operator = 1
+
+The syntax highlighting for literate Haskell code will try to
+automatically guess whether your literate Haskell code contains
+TeX markup or not, and correspondingly highlight TeX constructs
+or nothing at all. You can override this globally by putting
+in your .vimrc >
+ :let lhs_markup = none
+for no highlighting at all, or >
+ :let lhs_markup = tex
+to force the highlighting to always try to highlight TeX markup.
+For more flexibility, you may also use buffer local versions of
+this variable, so e.g. >
+ :let b:lhs_markup = tex
+will force TeX highlighting for a particular buffer. It has to be
+set before turning syntax highlighting on for the buffer or
+loading a file.
+
+
+HTML *html.vim* *html-syntax*
+
+The coloring scheme for tags in the HTML file works as follows.
+
+The <> of opening tags are colored differently than the </> of a closing tag.
+This is on purpose! For opening tags the 'Function' color is used, while for
+closing tags the 'Type' color is used (See syntax.vim to check how those are
+defined for you)
+
+Known tag names are colored the same way as statements in C. Unknown tag
+names are colored with the same color as the <> or </> respectively which
+makes it easy to spot errors
+
+Note that the same is true for argument (or attribute) names. Known attribute
+names are colored differently than unknown ones.
+
+Some HTML tags are used to change the rendering of text. The following tags
+are recognized by the html.vim syntax coloring file and change the way normal
+text is shown: <B> <I> <U> <EM> <STRONG> (<EM> is used as an alias for <I>,
+while <STRONG> as an alias for <B>), <H1> - <H6>, <HEAD>, <TITLE> and <A>, but
+only if used as a link that is, it must include a href as in
+<A href="somfile.html">).
+
+If you want to change how such text is rendered, you must redefine the
+following syntax groups:
+
+ - htmlBold
+ - htmlBoldUnderline
+ - htmlBoldUnderlineItalic
+ - htmlUnderline
+ - htmlUnderlineItalic
+ - htmlItalic
+ - htmlTitle for titles
+ - htmlH1 - htmlH6 for headings
+
+To make this redefinition work you must redefine them all with the exception
+of the last two (htmlTitle and htmlH[1-6], which are optional) and define the
+following variable in your vimrc (this is due to the order in which the files
+are read during initialization) >
+ :let html_my_rendering=1
+
+If you'd like to see an example download mysyntax.vim at
+http://www.fleiner.com/vim/download.html
+
+You can also disable this rendering by adding the following line to your
+vimrc file: >
+ :let html_no_rendering=1
+
+HTML comments are rather special (see an HTML reference document for the
+details), and the syntax coloring scheme will highlight all errors.
+However, if you prefer to use the wrong style (starts with <!-- and
+ends with --!>) you can define >
+ :let html_wrong_comments=1
+
+JavaScript and Visual Basic embedded inside HTML documents are highlighted as
+'Special' with statements, comments, strings and so on colored as in standard
+programming languages. Note that only JavaScript and Visual Basic are currently
+supported, no other scripting language has been added yet.
+
+Embedded and inlined cascading style sheets (CSS) are highlighted too.
+
+There are several html preprocessor languages out there. html.vim has been
+written such that it should be trivial to include it. To do so add the
+following two lines to the syntax coloring file for that language
+(the example comes from the asp.vim file):
+
+ runtime! syntax/html.vim
+ syn cluster htmlPreproc add=asp
+
+Now you just need to make sure that you add all regions that contain
+the preprocessor language to the cluster htmlPreproc.
+
+
+HTML/OS (by Aestiva) *htmlos.vim* *htmlos-syntax*
+
+The coloring scheme for HTML/OS works as follows:
+
+Functions and variable names are the same color by default, because VIM
+doesn't specify different colors for Functions and Identifiers. To change
+this (which is recommended if you want function names to be recognizable in a
+different color) you need to add the following line to either your ~/.vimrc: >
+ :hi Function term=underline cterm=bold ctermfg=LightGray
+
+Of course, the ctermfg can be a different color if you choose.
+
+Another issues that HTML/OS runs into is that there is no special filetype to
+signify that it is a file with HTML/OS coding. You can change this by opening
+a file and turning on HTML/OS syntax by doing the following: >
+ :set syntax=htmlos
+
+Lastly, it should be noted that the opening and closing characters to begin a
+block of HTML/OS code can either be << or [[ and >> or ]], respectively.
+
+
+IA64 *ia64.vim* *intel-itanium* *ia64-syntax*
+
+Highlighting for the Intel Itanium 64 assembly language. See |asm.vim| for
+how to recognize this filetype.
+
+To have *.inc files be recognized as IA64, add this to your .vimrc file: >
+ :let g:filetype_inc = "ia64"
+
+
+INFORM *inform.vim* *inform-syntax*
+
+Inform highlighting includes symbols provided by the Inform Library, as
+most programs make extensive use of it. If do not wish Library symbols
+to be highlighted add this to your vim startup: >
+ :let inform_highlight_simple=1
+
+By default it is assumed that Inform programs are Z-machine targeted,
+and highlights Z-machine assembly language symbols appropriately. If
+you intend your program to be targeted to a Glulx/Glk environment you
+need to add this to your startup sequence: >
+ :let inform_highlight_glulx=1
+
+This will highlight Glulx opcodes instead, and also adds glk() to the
+set of highlighted system functions.
+
+The Inform compiler will flag certain obsolete keywords as errors when
+it encounters them. These keywords are normally highlighted as errors
+by Vim. To prevent such error highlighting, you must add this to your
+startup sequence: >
+ :let inform_suppress_obsolete=1
+
+By default, the language features highlighted conform to Compiler
+version 6.30 and Library version 6.11. If you are using an older
+Inform development environment, you may with to add this to your
+startup sequence: >
+ :let inform_highlight_old=1
+
+
+JAVA *java.vim* *java-syntax*
+
+The java.vim syntax highlighting file offers several options:
+
+In Java 1.0.2 it was never possible to have braces inside parens, so this was
+flagged as an error. Since Java 1.1 this is possible (with anonymous
+classes), and therefore is no longer marked as an error. If you prefer the old
+way, put the following line into your vim startup file: >
+ :let java_mark_braces_in_parens_as_errors=1
+
+All identifiers in java.lang.* are always visible in all classes. To
+highlight them use: >
+ :let java_highlight_java_lang_ids=1
+
+You can also highlight identifiers of most standard java packages if you
+download the javaid.vim script at http://www.fleiner.com/vim/download.html.
+If you prefer to only highlight identifiers of a certain package, say java.io
+use the following: >
+ :let java_highlight_java_io=1
+Check the javaid.vim file for a list of all the packages that are supported.
+
+Function names are not highlighted, as the way to find functions depends on
+how you write java code. The syntax file knows two possible ways to highlight
+functions:
+
+If you write function declarations that are always indented by either
+a tab, 8 spaces or 2 spaces you may want to set >
+ :let java_highlight_functions="indent"
+However, if you follow the Java guidelines about how functions and classes are
+supposed to be named (with respect to upper and lowercase), use >
+ :let java_highlight_functions="style"
+If both options do not work for you, but you would still want function
+declarations to be highlighted create your own definitions by changing the
+definitions in java.vim or by creating your own java.vim which includes the
+original one and then adds the code to highlight functions.
+
+In java 1.1 the functions System.out.println() and System.err.println() should
+only be used for debugging. Therefor it is possible to highlight debugging
+statements differently. To do this you must add the following definition in
+your startup file: >
+ :let java_highlight_debug=1
+The result will be that those statements are highlighted as 'Special'
+characters. If you prefer to have them highlighted differently you must define
+new highlightings for the following groups.:
+ Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
+which are used for the statement itself, special characters used in debug
+strings, strings, boolean constants and types (this, super) respectively. I
+have opted to chose another background for those statements.
+
+In order to help you to write code that can be easily ported between
+java and C++, all C++ keywords are marked as error in a java program.
+However, if you use them regularly, you may want to define the following
+variable in your .vimrc file: >
+ :let java_allow_cpp_keywords=1
+
+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
+and CSS inside this code (see below). There are four differences however:
+ 1. The title (all characters up to the first '.' which is followed by
+ some white space or up to the first '@') is colored differently (to change
+ the color change the group CommentTitle).
+ 2. The text is colored as 'Comment'.
+ 3. HTML comments are colored as 'Special'
+ 4. The special javadoc tags (@see, @param, ...) are highlighted as specials
+ and the argument (for @see, @param, @exception) as Function.
+To turn this feature off add the following line to your startup file: >
+ :let java_ignore_javadoc=1
+
+If you use the special javadoc comment highlighting described above you
+can also turn on special highlighting for javascript, visual basic
+scripts and embedded CSS (stylesheets). This makes only sense if you
+actually have javadoc comments that include either javascript or embedded
+CSS. The options to use are >
+ :let java_javascript=1
+ :let java_css=1
+ :let java_vb=1
+
+In order to highlight nested parens with different colors define colors
+for javaParen, javaParen1 and javaParen2, for example with >
+ :hi link javaParen Comment
+or >
+ :hi javaParen ctermfg=blue guifg=#0000ff
+
+If you notice highlighting errors while scrolling backwards, which are fixed
+when redrawing with CTRL-L, try setting the "java_minlines" internal variable
+to a larger number: >
+ :let java_minlines = 50
+This will make the syntax synchronization start 50 lines before the first
+displayed line. The default value is 10. The disadvantage of using a larger
+number is that redrawing can become slow.
+
+
+LACE *lace.vim* *lace-syntax*
+
+Lace (Language for Assembly of Classes in Eiffel) is case insensitive, but the
+style guide lines are not. If you prefer case insensitive highlighting, just
+define the vim variable 'lace_case_insensitive' in your startup file: >
+ :let lace_case_insensitive=1
+
+
+LEX *lex.vim* *lex-syntax*
+
+Lex uses brute-force synchronizing as the "^%%$" section delimiter
+gives no clue as to what section follows. Consequently, the value for >
+ :syn sync minlines=300
+may be changed by the user if s/he is experiencing synchronization
+difficulties (such as may happen with large lex files).
+
+
+LITE *lite.vim* *lite-syntax*
+
+There are two options for the lite syntax highlighting.
+
+If you like SQL syntax highlighting inside Strings, use this: >
+
+ :let lite_sql_query = 1
+
+For syncing, minlines defaults to 100. If you prefer another value, you can
+set "lite_minlines" to the value you desire. Example: >
+
+ :let lite_minlines = 200
+
+
+LPC *lpc.vim* *lpc-syntax*
+
+LPC stands for a simple, memory-efficient language: Lars Pensj| C. The
+file name of LPC is usually *.c. Recognizing these files as LPC would bother
+users writing only C programs. If you want to use LPC syntax in Vim, you
+should set a variable in your .vimrc file: >
+
+ :let lpc_syntax_for_c = 1
+
+If it doesn't work properly for some particular C or LPC files, use a
+modeline. For a LPC file:
+
+ // vim:set ft=lpc:
+
+For a C file that is recognized as LPC:
+
+ // vim:set ft=c:
+
+If you don't want to set the variable, use the modeline in EVERY LPC file.
+
+There are several implementations for LPC, we intend to support most widely
+used ones. Here the default LPC syntax is for MudOS series, for MudOS v22
+and before, you should turn off the sensible modifiers, and this will also
+asserts the new efuns after v22 to be invalid, don't set this variable when
+you are using the latest version of MudOS: >
+
+ :let lpc_pre_v22 = 1
+
+For LpMud 3.2 series of LPC: >
+
+ :let lpc_compat_32 = 1
+
+For LPC4 series of LPC: >
+
+ :let lpc_use_lpc4_syntax = 1
+
+For uLPC series of LPC:
+uLPC has been developed to Pike, so you should use Pike syntax
+instead, and the name of your source file should be *.pike
+
+
+LUA *lua.vim* *lua-syntax*
+
+This syntax file may be used for Lua 4.0 and Lua 5.0 (default). If you are
+programming in Lua 4.0, use this: >
+
+ :let lua_version = 4
+
+If lua_version variable doesn't exist, it is set to 5.
+
+
+MAIL *mail.vim*
+
+Vim highlights all the standard elements of an email (headers, signatures,
+quoted text and URLs / email addresses). In keeping with standard conventions,
+signatures begin in a line containing only "--" followed optionally by
+whitespaces and end with a newline.
+
+Vim treats lines beginning with ']', '}', '|', '>' or a word followed by '>'
+as quoted text. However Vim highlights headers and signatures in quoted text
+only if the text is quoted with '>' (optionally followed by one space).
+
+By default mail.vim synchronises syntax to 100 lines before the first
+displayed line. If you have a slow machine, and generally deal with emails
+with short headers, you can change this to a smaller value: >
+
+ :let mail_minlines = 30
+
+
+MAKE *make.vim* *make-syntax*
+
+In makefiles, commands are usually highlighted to make it easy for you to spot
+errors. However, this may be too much coloring for you. You can turn this
+feature off by using: >
+
+ :let make_no_commands = 1
+
+
+MAPLE *maple.vim* *maple-syntax*
+
+Maple V, by Waterloo Maple Inc, supports symbolic algebra. The language
+supports many packages of functions which are selectively loaded by the user.
+The standard set of packages' functions as supplied in Maple V release 4 may be
+highlighted at the user's discretion. Users may place in their .vimrc file: >
+
+ :let mvpkg_all= 1
+
+to get all package functions highlighted, or users may select any subset by
+choosing a variable/package from the table below and setting that variable to
+1, also in their .vimrc file (prior to sourcing
+$VIMRUNTIME/syntax/syntax.vim).
+
+ Table of Maple V Package Function Selectors >
+ mv_DEtools mv_genfunc mv_networks mv_process
+ mv_Galois mv_geometry mv_numapprox mv_simplex
+ mv_GaussInt mv_grobner mv_numtheory mv_stats
+ mv_LREtools mv_group mv_orthopoly mv_student
+ mv_combinat mv_inttrans mv_padic mv_sumtools
+ mv_combstruct mv_liesymm mv_plots mv_tensor
+ mv_difforms mv_linalg mv_plottools mv_totorder
+ mv_finance mv_logic mv_powseries
+
+
+MOO *moo.vim* *moo-syntax*
+
+If you use C-style comments inside expressions and find it mangles your
+highlighting, you may want to use extended (slow!) matches for C-style
+comments: >
+
+ :let moo_extended_cstyle_comments = 1
+
+To disable highlighting of pronoun substitution patterns inside strings: >
+
+ :let moo_no_pronoun_sub = 1
+
+To disable highlighting of the regular expression operator '%|', and matching
+'%(' and '%)' inside strings: >
+
+ :let moo_no_regexp = 1
+
+Unmatched double quotes can be recognized and highlighted as errors: >
+
+ :let moo_unmatched_quotes = 1
+
+To highlight builtin properties (.name, .location, .programmer etc.): >
+
+ :let moo_builtin_properties = 1
+
+Unknown builtin functions can be recognized and highlighted as errors. If you
+use this option, add your own extensions to the mooKnownBuiltinFunction group.
+To enable this option: >
+
+ :let moo_unknown_builtin_functions = 1
+
+An example of adding sprintf() to the list of known builtin functions: >
+
+ :syn keyword mooKnownBuiltinFunction sprintf contained
+
+
+MSQL *msql.vim* *msql-syntax*
+
+There are two options for the msql syntax highlighting.
+
+If you like SQL syntax highlighting inside Strings, use this: >
+
+ :let msql_sql_query = 1
+
+For syncing, minlines defaults to 100. If you prefer another value, you can
+set "msql_minlines" to the value you desire. Example: >
+
+ :let msql_minlines = 200
+
+
+NCF *ncf.vim* *ncf-syntax*
+
+There is one option for NCF syntax highlighting.
+
+If you want to have unrecognized (by ncf.vim) statements highlighted as
+errors, use this: >
+
+ :let ncf_highlight_unknowns = 1
+
+If you don't want to highlight these errors, leave it unset.
+
+
+NROFF *nroff.vim* *nroff-syntax*
+
+The nroff syntax file works with AT&T n/troff out of the box. You need to
+activate the GNU groff extra features included in the syntax file before you
+can use them.
+
+For example, Linux and BSD distributions use groff as their default text
+processing package. In order to activate the extra syntax highlighting
+features for groff, add the following option to your start-up files: >
+
+ :let b:nroff_is_groff = 1
+
+Groff is different from the old AT&T n/troff that you may still find in
+Solaris. Groff macro and request names can be longer than 2 characters and
+there are extensions to the language primitives. For example, in AT&T troff
+you access the year as a 2-digit number with the request \(yr. In groff you
+can use the same request, recognized for compatibility, or you can use groff's
+native syntax, \[yr]. Furthermore, you can use a 4-digit year directly:
+\[year]. Macro requests can be longer than 2 characters, for example, GNU mm
+accepts the requests ".VERBON" and ".VERBOFF" for creating verbatim
+environments.
+
+In order to obtain the best formatted output g/troff can give you, you should
+follow a few simple rules about spacing and punctuation.
+
+1. Do not leave empty spaces at the end of lines.
+
+2. Leave one space and one space only after an end-of-sentence period,
+ exclamation mark, etc.
+
+3. For reasons stated below, it is best to follow all period marks with a
+ carriage return.
+
+The reason behind these unusual tips is that g/n/troff have a line breaking
+algorithm that can be easily upset if you don't follow the rules given above.
+
+Unlike TeX, troff fills text line-by-line, not paragraph-by-paragraph and,
+furthermore, it does not have a concept of glue or stretch, all horizontal and
+vertical space input will be output as is.
+
+Therefore, you should be careful about not using more space between sentences
+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
+spaces and two or more spaces after a punctuation as an error, use: >
+
+ :let nroff_space_errors = 1
+
+Another technique to detect extra spacing and other errors that will interfere
+with the correct typesetting of your file, is to define an eye-catching
+highlighting definition for the syntax groups "nroffDefinition" and
+"nroffDefSpecial" in your configuration files. For example: >
+
+ hi def nroffDefinition term=italic cterm=italic gui=reverse
+ hi def nroffDefSpecial term=italic,bold cterm=italic,bold
+ \ gui=reverse,bold
+
+If you want to navigate preprocessor entries in your source file as easily as
+with section markers, you can activate the following option in your .vimrc
+file: >
+
+ let b:preprocs_as_sections = 1
+
+As well, the syntax file adds an extra paragraph marker for the exdented
+paragraph macro (.XP) in the ms package.
+
+Finally, there is a |groff.vim| syntax file that can be used for enabling
+groff syntax highlighting either on a file basis or globally by default.
+
+
+OCAML *ocaml.vim* *ocaml-syntax*
+
+The OCaml syntax file handles files having the following prefixes: .ml,
+.mli, .mll and .mly. By setting the following variable >
+
+ :let ocaml_revised = 1
+
+you can switch from standard OCaml-syntax to revised syntax as supported
+by the camlp4 preprocessor. Setting the variable >
+
+ :let ocaml_noend_error = 1
+
+prevents highlighting of "end" as error, which is useful when sources
+contain very long structures that Vim does not synchronize anymore.
+
+
+PAPP *papp.vim* *papp-syntax*
+
+The PApp syntax file handles .papp files and, to a lesser extend, .pxml
+and .pxsl files which are all a mixture of perl/xml/html/other using xml
+as the top-level file format. By default everything inside phtml or pxml
+sections is treated as a string with embedded preprocessor commands. If
+you set the variable: >
+
+ :let papp_include_html=1
+
+in your startup file it will try to syntax-hilight html code inside phtml
+sections, but this is relatively slow and much too colourful to be able to
+edit sensibly ;)
+
+The newest version of the papp.vim syntax file can usually be found at
+http://papp.plan9.de.
+
+
+PASCAL *pascal.vim* *pascal-syntax*
+
+Files matching "*.p" could be Progress or Pascal. If the automatic detection
+doesn't work for you, or you don't edit Progress at all, use this in your
+startup vimrc: >
+
+ :let filetype_p = "pascal"
+
+The Pascal syntax file has been extended to take into account some extensions
+provided by Turbo Pascal, Free Pascal Compiler and GNU Pascal Compiler.
+Delphi keywords are also supported. By default, Turbo Pascal 7.0 features are
+enabled. If you prefer to stick with the standard Pascal keywords, add the
+following line to your startup file: >
+
+ :let pascal_traditional=1
+
+To switch on Delphi specific constructions (such as one-line comments,
+keywords, etc): >
+
+ :let pascal_delphi=1
+
+
+The option pascal_symbol_operator controls whether symbol operators such as +,
+*, .., etc. are displayed using the Operator color or not. To colorize symbol
+operators, add the following line to your startup file: >
+
+ :let pascal_symbol_operator=1
+
+Some functions are highlighted by default. To switch it off: >
+
+ :let pascal_no_functions=1
+
+Furthermore, there are specific variable for some compiler. Besides
+pascal_delphi, there are pascal_gpc and pascal_fpc. Default extensions try to
+match Turbo Pascal. >
+
+ :let pascal_gpc=1
+
+or >
+
+ :let pascal_fpc=1
+
+To ensure that strings are defined on a single line, you can define the
+pascal_one_line_string variable. >
+
+ :let pascal_one_line_string=1
+
+If you dislike <Tab> chars, you can set the pascal_no_tabs variable. Tabs
+will be highlighted as Error. >
+
+ :let pascal_no_tabs=1
+
+
+
+PERL *perl.vim* *perl-syntax*
+
+There are a number of possible options to the perl syntax highlighting.
+
+If you use POD files or POD segments, you might: >
+
+ :let perl_include_pod = 1
+
+To handle package references in variable and function names differently from
+the rest of the name (like 'PkgName::' in '$PkgName::VarName'): >
+
+ :let perl_want_scope_in_variables = 1
+
+If you want complex things like '@{${"foo"}}' to be parsed: >
+
+ :let perl_extended_vars = 1
+
+The coloring strings can be changed. By default strings and qq friends will be
+highlighted like the first line. If you set the variable
+perl_string_as_statement, it will be highlighted as in the second line.
+
+ "hello world!"; qq|hello world|;
+ ^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N (unlet perl_string_as_statement)
+ S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN (let perl_string_as_statement)
+
+(^ = perlString, S = perlStatement, N = None at all)
+
+The syncing has 3 options. The first two switch off some triggering of
+synchronization and should only be needed in case it fails to work properly.
+If while scrolling all of a sudden the whole screen changes color completely
+then you should try and switch off one of those. Let me know if you can figure
+out the line that causes the mistake.
+
+One triggers on "^\s*sub\s*" and the other on "^[$@%]" more or less. >
+
+ :let perl_no_sync_on_sub
+ :let perl_no_sync_on_global_var
+
+Below you can set the maximum distance VIM should look for starting points for
+its attempts in syntax highlighting. >
+
+ :let perl_sync_dist = 100
+
+If you want to use folding with perl, set perl_fold: >
+
+ :let perl_fold = 1
+
+
+PHP3 and PHP4 *php.vim* *php3.vim* *php-syntax* *php3-syntax*
+
+[note: previously this was called "php3", but since it now also supports php4
+it has been renamed to "php"]
+
+There are the following options for the php syntax highlighting.
+
+If you like SQL syntax highlighting inside Strings: >
+
+ let php_sql_query = 1
+
+For highlighting the Baselib methods: >
+
+ let php_baselib = 1
+
+Enable HTML syntax highlighting inside strings: >
+
+ let php_htmlInStrings = 1
+
+Using the old colorstyle: >
+
+ let php_oldStyle = 1
+
+Enable highlighting ASP-style short tags: >
+
+ let php_asp_tags = 1
+
+Disable short tags: >
+
+ let php_noShortTags = 1
+
+For highlighting parent error ] or ): >
+
+ let php_parent_error_close = 1
+
+For skipping an php end tag, if there exists an open ( or [ without a closing
+one: >
+
+ let php_parent_error_open = 1
+
+Enable folding for classes and functions: >
+
+ let php_folding = 1
+
+Selecting syncing method: >
+
+ let php_sync_method = x
+
+x = -1 to sync by search (default),
+x > 0 to sync at least x lines backwards,
+x = 0 to sync from start.
+
+
+PPWIZARD *ppwiz.vim* *ppwiz-syntax*
+
+PPWizard is a preprocessor for HTML and OS/2 INF files
+
+This syntax file has the options:
+
+- ppwiz_highlight_defs : determines highlighting mode for PPWizard's
+ definitions. Possible values are
+
+ ppwiz_highlight_defs = 1 : PPWizard #define statements retain the
+ colors of their contents (e. g. PPWizard macros and variables)
+
+ ppwiz_highlight_defs = 2 : preprocessor #define and #evaluate
+ statements are shown in a single color with the exception of line
+ continuation symbols
+
+ The default setting for ppwiz_highlight_defs is 1.
+
+- ppwiz_with_html : If the value is 1 (the default), highlight literal
+ HTML code; if 0, treat HTML code like ordinary text.
+
+
+PHTML *phtml.vim* *phtml-syntax*
+
+There are two options for the phtml syntax highlighting.
+
+If you like SQL syntax highlighting inside Strings, use this: >
+
+ :let phtml_sql_query = 1
+
+For syncing, minlines defaults to 100. If you prefer another value, you can
+set "phtml_minlines" to the value you desire. Example: >
+
+ :let phtml_minlines = 200
+
+
+POSTSCRIPT *postscr.vim* *postscr-syntax*
+
+There are several options when it comes to highlighting PostScript.
+
+First which version of the PostScript language to highlight. There are
+currently three defined language versions, or levels. Level 1 is the original
+and base version, and includes all extensions prior to the release of level 2.
+Level 2 is the most common version around, and includes its own set of
+extensions prior to the release of level 3. Level 3 is currently the highest
+level supported. You select which level of the PostScript language you want
+highlighted by defining the postscr_level variable as follows: >
+
+ :let postscr_level=2
+
+If this variable is not defined it defaults to 2 (level 2) since this is
+the most prevalent version currently.
+
+Note, not all PS interpreters will support all language features for a
+particular language level. In particular the %!PS-Adobe-3.0 at the start of
+PS files does NOT mean the PostScript present is level 3 PostScript!
+
+If you are working with Display PostScript, you can include highlighting of
+Display PS language features by defining the postscr_display variable as
+follows: >
+
+ :let postscr_display=1
+
+If you are working with Ghostscript, you can include highlighting of
+Ghostscript specific language features by defining the variable
+postscr_ghostscript as follows: >
+
+ :let postscr_ghostscript=1
+
+PostScript is a large language, with many predefined elements. While it
+useful to have all these elements highlighted, on slower machines this can
+cause Vim to slow down. In an attempt to be machine friendly font names and
+character encodings are not highlighted by default. Unless you are working
+explicitly with either of these this should be ok. If you want them to be
+highlighted you should set one or both of the following variables: >
+
+ :let postscr_fonts=1
+ :let postscr_encodings=1
+
+There is a stylistic option to the highlighting of and, or, and not. In
+PostScript the function of these operators depends on the types of their
+operands - if the operands are booleans then they are the logical operators,
+if they are integers then they are binary operators. As binary and logical
+operators can be highlighted differently they have to be highlighted one way
+or the other. By default they are treated as logical operators. They can be
+highlighted as binary operators by defining the variable
+postscr_andornot_binary as follows: >
+
+ :let postscr_andornot_binary=1
+<
+
+ *ptcap.vim*
+PRINTCAP + TERMCAP *ptcap-syntax* *termcap-syntax* *printcap-syntax*
+
+This syntax file applies to the printcap and termcap databases.
+
+In order for Vim to recognize printcap/termcap files that do not match
+the patterns *printcap*, or *termcap*, you must put additional patterns
+appropriate to your system in your |myfiletypefile| file. For these
+patterns, you must set the variable "b:ptcap_type" to either "print" or
+"term", and then the 'filetype' option to ptcap.
+
+For example, to make Vim identify all files in /etc/termcaps/ as termcap
+files, add the following: >
+
+ :au BufNewFile,BufRead /etc/termcaps/* let b:ptcap_type = "term" |
+ \ set filetype=ptcap
+
+If you notice highlighting errors while scrolling backwards, which
+are fixed when redrawing with CTRL-L, try setting the "ptcap_minlines"
+internal variable to a larger number: >
+
+ :let ptcap_minlines = 50
+
+(The default is 20 lines.)
+
+
+PROGRESS *progress.vim* *progress-syntax*
+
+Files matching "*.w" could be Progress or cweb. If the automatic detection
+doesn't work for you, or you don't edit cweb at all, use this in your
+startup vimrc: >
+ :let filetype_w = "progress"
+The same happens for "*.i", which could be assembly, and "*.p", which could be
+Pascal. Use this if you don't use assembly and Pascal: >
+ :let filetype_i = "progress"
+ :let filetype_p = "progress"
+
+
+PYTHON *python.vim* *python-syntax*
+
+There are four options to control Python syntax highlighting.
+
+For highlighted numbers: >
+ :let python_highlight_numbers = 1
+
+For highlighted builtin functions: >
+ :let python_highlight_builtins = 1
+
+For highlighted standard exceptions: >
+ :let python_highlight_exceptions = 1
+
+For highlighted trailing whitespace and mix of spaces and tabs:
+ :let python_highlight_space_errors = 1
+
+If you want all possible Python highlighting (the same as setting the
+preceding three options): >
+ :let python_highlight_all = 1
+
+
+QUAKE *quake.vim* *quake-syntax*
+
+The Quake syntax definition should work for most any FPS (First Person
+Shooter) based on one of the Quake engines. However, the command names vary
+a bit between the three games (Quake, Quake 2, and Quake 3 Arena) so the
+syntax definition checks for the existence of three global variables to allow
+users to specify what commands are legal in their files. The three variables
+can be set for the following effects:
+
+set to highlight commands only available in Quake: >
+ :let quake_is_quake1 = 1
+
+set to highlight commands only available in Quake 2: >
+ :let quake_is_quake2 = 1
+
+set to highlight commands only available in Quake 3 Arena: >
+ :let quake_is_quake3 = 1
+
+Any combination of these three variables is legal, but might highlight more
+commands than are actually available to you by the game.
+
+
+READLINE *readline.vim* *readline-syntax*
+
+The readline library is primarily used by the BASH shell, which adds quite a
+few commands and options to the ones already available. To highlight these
+items as well you can add the following to your |vimrc| or just type it in the
+command line before loading a file with the readline syntax: >
+ let readline_has_bash = 1
+
+This will add highlighting for the commands that BASH (version 2.05a and
+later, and part earlier) adds.
+
+
+REXX *rexx.vim* *rexx-syntax*
+
+If you notice highlighting errors while scrolling backwards, which are fixed
+when redrawing with CTRL-L, try setting the "rexx_minlines" internal variable
+to a larger number: >
+ :let rexx_minlines = 50
+This will make the syntax synchronization start 50 lines before the first
+displayed line. The default value is 10. The disadvantage of using a larger
+number is that redrawing can become slow.
+
+
+RUBY *ruby.vim* *ruby-syntax*
+
+There are a few options to the Ruby syntax highlighting.
+
+By default, the "end" keyword is colorized according to the opening statement
+of the block it closes. While useful, this feature can be expensive: if you
+experience slow redrawing (or you are on a terminal with poor color support)
+you may want to turn it off by defining the "ruby_no_expensive" variable: >
+ :let ruby_no_expensive = 1
+In this case the same color will be used for all control keywords.
+
+If you do want this feature enabled, but notice highlighting errors while
+scrolling backwards, which are fixed when redrawing with CTRL-L, try setting
+the "ruby_minlines" variable to a value larger than 50: >
+ :let ruby_minlines = 100
+Ideally, this value should be a number of lines large enough to embrace your
+largest class or module.
+
+Finally, if you do not like to see too many color items around, you can define
+"ruby_no_identifiers": >
+ :let ruby_no_identifiers = 1
+This will prevent highlighting of special identifiers like "ConstantName",
+"$global_var", "@instance_var", "| iterator |", and ":symbol".
+
+
+SDL *sdl.vim* *sdl-syntax*
+
+The SDL highlighting probably misses a few keywords, but SDL has so many
+of them it's almost impossibly to cope.
+
+The new standard, SDL-2000, specifies that all identifiers are
+case-sensitive (which was not so before), and that all keywords can be
+used either completely lowercase or completely uppercase. To have the
+highlighting reflect this, you can set the following variable: >
+ :let sdl_2000=1
+
+This also sets many new keywords. If you want to disable the old
+keywords, which is probably a good idea, use: >
+ :let SDL_no_96=1
+
+
+The indentation is probably also incomplete, but right now I am very
+satisfied with it for my own projects.
+
+
+SED *sed.vim* *sed-syntax*
+
+To make tabs stand out from regular blanks (accomplished by using Todo
+highlighting on the tabs), define "highlight_sedtabs" by putting >
+
+ :let highlight_sedtabs = 1
+
+in the vimrc file. (This special highlighting only applies for tabs
+inside search patterns, replacement texts, addresses or text included
+by an Append/Change/Insert command.) If you enable this option, it is
+also a good idea to set the tab width to one character; by doing that,
+you can easily count the number of tabs in a string.
+
+Bugs:
+
+ The transform command (y) is treated exactly like the substitute
+ command. This means that, as far as this syntax file is concerned,
+ transform accepts the same flags as substitute, which is wrong.
+ (Transform accepts no flags.) I tolerate this bug because the
+ involved commands need very complex treatment (95 patterns, one for
+ each plausible pattern delimiter).
+
+
+SGML *sgml.vim* *sgml-syntax*
+
+The coloring scheme for tags in the SGML file works as follows.
+
+The <> of opening tags are colored differently than the </> of a closing tag.
+This is on purpose! For opening tags the 'Function' color is used, while for
+closing tags the 'Type' color is used (See syntax.vim to check how those are
+defined for you)
+
+Known tag names are colored the same way as statements in C. Unknown tag
+names are not colored which makes it easy to spot errors.
+
+Note that the same is true for argument (or attribute) names. Known attribute
+names are colored differently than unknown ones.
+
+Some SGML tags are used to change the rendering of text. The following tags
+are recognized by the sgml.vim syntax coloring file and change the way normal
+text is shown: <varname> <emphasis> <command> <function> <literal>
+<replaceable> <ulink> and <link>.
+
+If you want to change how such text is rendered, you must redefine the
+following syntax groups:
+
+ - sgmlBold
+ - sgmlBoldItalic
+ - sgmlUnderline
+ - sgmlItalic
+ - sgmlLink for links
+
+To make this redefinition work you must redefine them all and define the
+following variable in your vimrc (this is due to the order in which the files
+are read during initialization) >
+ let sgml_my_rendering=1
+
+You can also disable this rendering by adding the following line to your
+vimrc file: >
+ let sgml_no_rendering=1
+
+(Adapted from the html.vim help text by Claudio Fleiner <claudio@fleiner.com>)
+
+
+SH *sh.vim* *sh-syntax*
+
+This covers the "normal" Unix (Bourne) sh, bash and the Korn shell.
+
+Vim attempts to determine which shell type is in use by specifying that
+various filenames are of specific types: >
+
+ ksh : .kshrc* *.ksh
+ bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
+<
+If none of these cases pertain, then the first line of the file is examined
+(ex. /bin/sh /bin/ksh /bin/bash). If the first line specifies a shelltype,
+then that shelltype is used. However some files (ex. .profile) are known to
+be shell files but the type is not apparent. Furthermore, on many systems
+sh is symbolically linked to "bash" (linux) or "ksh" (posix).
+
+One may specify a global default by instantiating one of the following three
+variables in your <.vimrc>:
+
+ ksh: >
+ let is_kornshell = 1
+< bash: >
+ let is_bash = 1
+< sh: >
+ let is_sh = 1
+
+If, in your <.vimrc>, you set >
+ let g:sh_fold_enabled= 1
+>
+then various syntax items (HereDocuments and function bodies) become
+syntax-foldable (see |:syn-fold|).
+
+If you notice highlighting errors while scrolling backwards, which are fixed
+when redrawing with CTRL-L, try setting the "sh_minlines" internal variable
+to a larger number. Example: >
+
+ let sh_minlines = 500
+
+This will make syntax synchronization start 500 lines before the first
+displayed line. The default value is 200. The disadvantage of using a larger
+number is that redrawing can become slow.
+
+If you don't have much to synchronize on, displaying can be very slow. To
+reduce this, the "sh_maxlines" internal variable can be set. Example: >
+
+ let sh_maxlines = 100
+<
+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.
+
+
+SPEEDUP (AspenTech plant simulator) *spup.vim* *spup-syntax*
+
+The Speedup syntax file has some options:
+
+- strict_subsections : If this variable is defined, only keywords for
+ sections and subsections will be highlighted as statements but not
+ other keywords (like WITHIN in the OPERATION section).
+
+- highlight_types : Definition of this variable causes stream types
+ like temperature or pressure to be highlighted as Type, not as a
+ plain Identifier. Included are the types that are usually found in
+ the DECLARE section; if you defined own types, you have to include
+ them in the syntax file.
+
+- oneline_comments : this value ranges from 1 to 3 and determines the
+ highlighting of # style comments.
+
+ oneline_comments = 1 : allow normal Speedup code after an even
+ number of #s.
+
+ oneline_comments = 2 : show code starting with the second # as
+ error. This is the default setting.
+
+ oneline_comments = 3 : show the whole line as error if it contains
+ more than one #.
+
+Since especially OPERATION sections tend to become very large due to
+PRESETting variables, syncing may be critical. If your computer is
+fast enough, you can increase minlines and/or maxlines near the end of
+the syntax file.
+
+
+TCSH *tcsh.vim* *tcsh-syntax*
+
+This covers the shell named "tcsh". It is a superset of csh. See |csh.vim|
+for how the filetype is detected.
+
+Tcsh does not allow \" in strings unless the "backslash_quote" shell variable
+is set. If you want VIM to assume that no backslash quote constructs exist add
+this line to your .vimrc: >
+
+ :let tcsh_backslash_quote = 0
+
+If you notice highlighting errors while scrolling backwards, which are fixed
+when redrawing with CTRL-L, try setting the "tcsh_minlines" internal variable
+to a larger number: >
+
+ :let tcsh_minlines = 100
+
+This will make the syntax synchronization start 100 lines before the first
+displayed line. The default value is 15. The disadvantage of using a larger
+number is that redrawing can become slow.
+
+
+TEX *tex.vim* *tex-syntax*
+
+Run-on Comments/Math? ~
+
+The tex highlighting supports TeX, LaTeX, and some AmsTeX. The
+highlighting supports three primary zones: normal, texZone, and texMathZone.
+Although a considerable effort has been made to have these zones terminate
+properly, zones delineated by $..$ and $$..$$ cannot be synchronized as
+there's no difference between start and end patterns. Consequently, a
+special "TeX comment" has been provided >
+ %stopzone
+which will forcibly terminate the highlighting of either a texZone or a
+texMathZone.
+
+Slow Syntax Highlighting? ~
+
+If you have a slow computer, you may wish to reduce the values for >
+ :syn sync maxlines=200
+ :syn sync minlines=50
+(especially the latter). If your computer is fast, you may wish to
+increase them. This primarily affects synchronizing (ie. just what group,
+if any, is the text at the top of the screen supposed to be in?).
+
+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
+and all error checking by <tex.vim> will be suppressed.
+
+Need a new Math Group? ~
+
+If you want to include a new math group in your LaTeX, the following
+code shows you an example as to how you might do so: >
+
+ syn cluster texMathZones add=texMathZoneLOCAL
+ syn region texMathZoneLOCAL start="\\begin\s*{\s*LOCALMATH\s*}"
+ \ end="\\end\s*{\s*LOCALMATH\s*}" keepend
+ \ contains=@texMathZoneGroup
+ if !exists("tex_no_math")
+ syn sync match texSyncMathZoneLOCAL grouphere texMathZoneLOCAL
+ \ "\\begin\s*{\s*LOCALMATH\*\s*}"
+ syn sync match texSyncMathZoneLOCAL groupthere NONE
+ \ "\\end\s*{\s*LOCALMATH\*\s*}"
+ endif
+ hi link texMathZoneLOCAL texMath
+<
+You'll need to change LOCALMATH to the name of your new math group,
+and then to put it into .vim/after/syntax/tex.vim.
+
+Starting a New Style? ~
+
+One may use "\makeatletter" in *.tex files, thereby making the use of "@" in
+commands available. However, since the *.tex file doesn't have one of the
+following suffices: sty cls clo dtx ltx, the syntax highlighting will flag
+such use of @ as an error. To solve this: >
+
+ :let b:tex_stylish = 1
+ :set ft=tex
+
+Putting "let g:tex_stylish=1" into your <.vimrc> will make <syntax/tex.vim>
+always accept such use of @.
+
+
+TF *tf.vim* *tf-syntax*
+
+There is one option for the tf syntax highlighting.
+
+For syncing, minlines defaults to 100. If you prefer another value, you can
+set "tf_minlines" to the value you desire. Example: >
+
+ :let tf_minlines = your choice
+
+
+VIM *vim.vim* *vim-syntax*
+
+There is a tradeoff between more accurate syntax highlighting versus
+screen updating speed. To improve accuracy, you may wish to increase
+the g:vim_minlines variable. The g:vim_maxlines variable may be used
+to improve screen updating rates (see |:syn-sync| for more on this).
+
+ g:vim_minlines : used to set synchronization minlines
+ g:vim_maxlines : used to set synchronization maxlines
+
+The g:vimembedscript option allows for somewhat faster loading of syntax
+highlighting for vim scripts at the expense of supporting syntax highlighting
+for external scripting languages (currently perl, python, ruby, and tcl).
+
+ g:vimembedscript == 1 (default) <vim.vim> will allow highlighting
+ g:vimembedscript doesn't exist of supported embedded scripting
+ languages: perl, python, ruby and
+ tcl.
+
+ g:vimembedscript == 0 Syntax highlighting for embedded
+ scripting languages will not be
+ loaded.
+
+
+XF86CONFIG *xf86conf.vim* *xf86conf-syntax*
+
+The syntax of XF86Config file differs in XFree86 v3.x and v4.x. Both
+variants are supported. Automatic detection is used, but is far from perfect.
+You may need to specify the version manually. Set the variable
+xf86conf_xfree86_version to 3 or 4 according to your XFree86 version in
+your .vimrc. Example: >
+ :let xf86conf_xfree86_version=3
+When using a mix of versions, set the b:xf86conf_xfree86_version variable.
+
+Note that spaces and underscores in option names are not supported. Use
+"SyncOnGreen" instead of "__s yn con gr_e_e_n" if you want the option name
+highlighted.
+
+
+XML *xml.vim* *xml-syntax*
+
+Xml namespaces are highlighted by default. This can be inhibited by
+setting a global variable: >
+
+ :let g:xml_namespace_transparent=1
+<
+ *xml-folding*
+The xml syntax file provides syntax |folding| (see |:syn-fold|) between
+start and end tags. This can be turned on by >
+
+ :let g:xml_syntax_folding = 1
+ :set foldmethod=syntax
+
+Note: syntax folding might slow down syntax highlighting significantly,
+especially for large files.
+
+
+X Pixmaps (XPM) *xpm.vim* *xpm-syntax*
+
+xpm.vim creates its syntax items dynamically based upon the contents of the
+XPM file. Thus if you make changes e.g. in the color specification strings,
+you have to source it again e.g. with ":set syn=xpm".
+
+To copy a pixel with one of the colors, yank a "pixel" with "yl" and insert it
+somewhere else with "P".
+
+Do you want to draw with the mouse? Try the following: >
+ :function! GetPixel()
+ : let c = getline(line("."))[col(".") - 1]
+ : echo c
+ : exe "noremap <LeftMouse> <LeftMouse>r".c
+ : exe "noremap <LeftDrag> <LeftMouse>r".c
+ :endfunction
+ :noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
+ :set guicursor=n:hor20 " to see the color beneath the cursor
+This turns the right button into a pipette and the left button into a pen.
+It will work with XPM files that have one character per pixel only and you
+must not click outside of the pixel strings, but feel free to improve it.
+
+It will look much better with a font in a quadratic cell size, e.g. for X: >
+ :set guifont=-*-clean-medium-r-*-*-8-*-*-*-*-80-*
+
+==============================================================================
+5. Defining a syntax *:syn-define* *E410*
+
+Vim understands three types of syntax items:
+
+1. Keyword.
+ It can only contain keyword characters, according to the 'iskeyword'
+ option. It cannot contain other syntax items. It will only match with a
+ complete word (there are no keyword characters before or after the match).
+ The keyword "if" would match in "if(a=b)", but not in "ifdef x", because
+ "(" is not a keyword character and "d" is.
+
+2. Match.
+ This is a match with a single regexp pattern.
+
+3. Region.
+ This starts at a match of the "start" regexp pattern and ends with a match
+ with the "end" regexp pattern. Any other text can appear in between. A
+ "skip" regexp pattern can be used to avoid matching the "end" pattern.
+
+Several syntax ITEMs can be put into one syntax GROUP. For a syntax group
+you can give highlighting attributes. For example, you could have an item
+to define a "/* .. */" comment and another one that defines a "// .." comment,
+and put them both in the "Comment" group. You can then specify that a
+"Comment" will be in bold font and have a blue color. You are free to make
+one highlight group for one syntax item, or put all items into one group.
+This depends on how you want to specify your highlighting attributes. Putting
+each item in its own group results in having to specify the highlighting
+for a lot of groups.
+
+Note that a syntax group and a highlight group are similar. For a highlight
+group you will have given highlight attributes. These attributes will be used
+for the syntax group with the same name.
+
+In case more than one item matches at the same position, the one that was
+defined LAST wins. Thus you can override previously defined syntax items by
+using an item that matches the same text. But a keyword always goes before a
+match or region. And a keyword with matching case always goes before a
+keyword with ignoring case.
+
+
+PRIORITY *:syn-priority*
+
+When several syntax items may match, these rules are used:
+
+1. When multiple Match or Region items start in the same position, the item
+ defined last has priority.
+2. A Keyword has priority over Match and Region items.
+3. An item that starts in an earlier position has priority over items that
+ start in later positions.
+
+
+DEFINING CASE *:syn-case* *E390*
+
+:sy[ntax] case [match|ignore]
+ This defines if the following ":syntax" commands will work with
+ matching case, when using "match", or with ignoring case, when using
+ "ignore". Note that any items before this are not affected, and all
+ items until the next ":syntax case" command are affected.
+
+
+DEFINING KEYWORDS *:syn-keyword*
+
+:sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
+
+ This defines a number of keywords.
+
+ {group-name} Is a syntax group name such as "Comment".
+ [{options}] See |:syn-arguments| below.
+ {keyword} .. Is a list of keywords which are part of this group.
+
+ Example: >
+ :syntax keyword Type int long char
+<
+ The {options} can be given anywhere in the line. They will apply to
+ all keywords given, also for options that come after a keyword.
+ These examples do exactly the same: >
+ :syntax keyword Type contained int long char
+ :syntax keyword Type int long contained char
+ :syntax keyword Type int long char contained
+<
+ When you have a keyword with an optional tail, like Ex commands in
+ Vim, you can put the optional characters inside [], to define all the
+ variations at once: >
+ :syntax keyword vimCommand ab[breviate] n[ext]
+<
+ Don't forget that a keyword can only be recognized if all the
+ characters are included in the 'iskeyword' option. If one character
+ isn't, the keyword will never be recognized.
+ Multi-byte characters can also be used. These do not have to be in
+ 'iskeyword'.
+
+ A keyword always has higher priority than a match or region, the
+ keyword is used if more than one item matches. Keywords do not nest
+ and a keyword can't contain anything else.
+
+ Note that when you have a keyword that is the same as an option (even
+ one that isn't allowed here), you can not use it. Use a match
+ instead.
+
+ The maximum length of a keyword is 80 characters.
+
+ The same keyword can be defined multiple times, when its containment
+ differs. For example, you can define the keyword once not contained
+ and use one highlight group, and once contained, and use a different
+ highlight group. Example: >
+ :syn keyword vimCommand tag
+ :syn keyword vimSetting contained tag
+< When finding "tag" outside of any syntax item, the "vimCommand"
+ highlight group is used. When finding "tag" in a syntax item that
+ contains "vimSetting", the "vimSetting" group is used.
+
+
+DEFINING MATCHES *:syn-match*
+
+:sy[ntax] match {group-name} [{options}] [excludenl] {pattern} [{options}]
+
+ This defines one match.
+
+ {group-name} A syntax group name such as "Comment".
+ [{options}] See |:syn-arguments| below.
+ [excludenl] Don't make a pattern with the end-of-line "$"
+ extend a containing match or region. Must be
+ given before the pattern. |:syn-excludenl|
+ {pattern} The search pattern that defines the match.
+ See |:syn-pattern| below.
+ Note that the pattern may match more than one
+ line, which makes the match depend on where
+ Vim starts searching for the pattern. You
+ need to make sure syncing takes care of this.
+
+ Example (match a character constant): >
+ :syntax match Character /'.'/hs=s+1,he=e-1
+<
+
+DEFINING REGIONS *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
+ *E398* *E399*
+:sy[ntax] region {group-name} [{options}]
+ [matchgroup={group-name}]
+ [keepend]
+ [extend]
+ [excludenl]
+ start={start_pattern} ..
+ [skip={skip_pattern}]
+ end={end_pattern} ..
+ [{options}]
+
+ This defines one region. It may span several lines.
+
+ {group-name} A syntax group name such as "Comment".
+ [{options}] See |:syn-arguments| below.
+ [matchgroup={group-name}] The syntax group to use for the following
+ start or end pattern matches only. Not used
+ for the text in between the matched start and
+ end patterns. Use NONE to reset to not using
+ a different group for the start or end match.
+ See |:syn-matchgroup|.
+ keepend Don't allow contained matches to go past a
+ match with the end pattern. See
+ |:syn-keepend|.
+ extend Override a "keepend" for an item this region
+ is contained in. See |:syn-extend|.
+ excludenl Don't make a pattern with the end-of-line "$"
+ extend a containing match or item. Only
+ useful for end patterns. Must be given before
+ the patterns it applies to. |:syn-excludenl|
+ start={start_pattern} The search pattern that defines the start of
+ the region. See |:syn-pattern| below.
+ skip={skip_pattern} The search pattern that defines text inside
+ the region where not to look for the end
+ pattern. See |:syn-pattern| below.
+ end={end_pattern} The search pattern that defines the end of
+ the region. See |:syn-pattern| below.
+
+ Example: >
+ :syntax region String start=+"+ skip=+\\"+ end=+"+
+<
+ The start/skip/end patterns and the options can be given in any order.
+ There can be zero or one skip pattern. There must be one or more
+ start and end patterns. This means that you can omit the skip
+ pattern, but you must give at least one start and one end pattern. It
+ is allowed to have white space before and after the equal sign
+ (although it mostly looks better without white space).
+
+ When more than one start pattern is given, a match with one of these
+ is sufficient. This means there is an OR relation between the start
+ patterns. The last one that matches is used. The same is true for
+ the end patterns.
+
+ The search for the end pattern starts right after the start pattern.
+ Offsets are not used for this. This implies that the match for the
+ end pattern will never overlap with the start pattern.
+
+ The skip and end pattern can match across line breaks, but since the
+ search for the pattern can start in any line it often does not do what
+ you want. The skip pattern doesn't avoid a match of an end pattern in
+ the next line. Use single-line patterns to avoid trouble.
+
+ Note: The decision to start a region is only based on a matching start
+ pattern. There is no check for a matching end pattern. This does NOT
+ work: >
+ :syn region First start="(" end=":"
+ :syn region Second start="(" end=";"
+< The Second always matches before the First (last defined pattern has
+ higher priority). The Second region then continues until the next
+ ';', no matter if there is a ':' before it. Using a match does work: >
+ :syn match First "(\_.\{-}:"
+ :syn match Second "(\_.\{-};"
+< This pattern matches any character or line break with "\_." and
+ repeats that with "\{-}" (repeat as few as possible).
+
+ *:syn-keepend*
+ By default, a contained match can obscure a match for the end pattern.
+ This is useful for nesting. For example, a region that starts with
+ "{" and ends with "}", can contain another region. An encountered "}"
+ will then end the contained region, but not the outer region:
+ { starts outer "{}" region
+ { starts contained "{}" region
+ } ends contained "{}" region
+ } ends outer "{} region
+ If you don't want this, the "keepend" argument will make the matching
+ of an end pattern of the outer region also end any contained item.
+ This makes it impossible to nest the same region, but allows for
+ contained items to highlight parts of the end pattern, without causing
+ that to skip the match with the end pattern. Example: >
+ :syn match vimComment +"[^"]\+$+
+ :syn region vimCommand start="set" end="$" contains=vimComment keepend
+< The "keepend" makes the vimCommand always end at the end of the line,
+ even though the contained vimComment includes a match with the <EOL>.
+
+ When "keepend" is not used, a match with an end pattern is retried
+ after each contained match. When "keepend" is included, the first
+ encountered match with an end pattern is used, truncating any
+ contained matches.
+ *:syn-extend*
+ The "keepend" behavior can be changed by using the "extend" argument.
+ When an item with "extend" is contained in an item that uses
+ "keepend", the "keepend" is ignored and the containing region will be
+ extended.
+ This can be used to have some contained items extend a region while
+ others don't. Example: >
+
+ :syn region htmlRef start=+<a>+ end=+</a>+ keepend contains=htmlItem,htmlScript
+ :syn match htmlItem +<[^>]*>+ contained
+ :syn region htmlScript start=+<script+ end=+</script[^>]*>+ contained extend
+
+< Here the htmlItem item does not make the htmlRef item continue
+ further, it is only used to highlight the <> items. The htmlScript
+ item does extend the htmlRef item.
+
+ Another example: >
+ :syn region xmlFold start="<a>" end="</a>" fold transparent keepend extend
+< This defines a region with "keepend", so that its end cannot be
+ changed by contained items, like when the "</a>" is matched to
+ highlight it differently. But when the xmlFold region is nested (it
+ includes itself), the "extend" applies, so that the "</a>" of a nested
+ region only ends that region, and not the one it is contained in.
+
+ *:syn-excludenl*
+ When a pattern for a match or end pattern of a region includes a '$'
+ to match the end-of-line, it will make a region item that it is
+ contained in continue on the next line. For example, a match with
+ "\\$" (backslash at the end of the line) can make a region continue
+ that would normally stop at the end of the line. This is the default
+ behavior. If this is not wanted, there are two ways to avoid it:
+ 1. Use "keepend" for the containing item. This will keep all
+ contained matches from extending the match or region. It can be
+ used when all contained items must not extend the containing item.
+ 2. Use "excludenl" in the contained item. This will keep that match
+ from extending the containing match or region. It can be used if
+ only some contained items must not extend the containing item.
+ "excludenl" must be given before the pattern it applies to.
+
+ *:syn-matchgroup*
+ "matchgroup" can be used to highlight the start and/or end pattern
+ differently than the body of the region. Example: >
+ :syntax region String matchgroup=Quote start=+"+ skip=+\\"+ end=+"+
+< This will highlight the quotes with the "Quote" group, and the text in
+ between with the "String" group.
+ The "matchgroup" is used for all start and end patterns that follow,
+ until the next "matchgroup". Use "matchgroup=NONE" to go back to not
+ using a matchgroup.
+
+ In a start or end pattern that is highlighted with "matchgroup" the
+ contained items of the region are not used. This can be used to avoid
+ that a contained item matches in the start or end pattern match. When
+ using "transparent", this does not apply to a start or end pattern
+ match that is highlighted with "matchgroup".
+
+ Here is an example, which highlights three levels of parentheses in
+ different colors: >
+ :sy region par1 matchgroup=par1 start=/(/ end=/)/ contains=par2
+ :sy region par2 matchgroup=par2 start=/(/ end=/)/ contains=par3 contained
+ :sy region par3 matchgroup=par3 start=/(/ end=/)/ contains=par1 contained
+ :hi par1 ctermfg=red guifg=red
+ :hi par2 ctermfg=blue guifg=blue
+ :hi par3 ctermfg=darkgreen guifg=darkgreen
+
+==============================================================================
+6. :syntax arguments *:syn-arguments*
+
+The :syntax commands that define syntax items take a number of arguments.
+The common ones are explained here. The arguments may be given in any order
+and may be mixed with patterns.
+
+Not all commands accept all arguments. This table shows which arguments
+can not be used for all commands:
+ *E395* *E396*
+ contains oneline fold display extend ~
+:syntax keyword - - - - -
+:syntax match yes - yes yes yes
+:syntax region yes yes yes yes yes
+
+These arguments can be used for all three commands:
+ contained
+ containedin
+ nextgroup
+ transparent
+ skipwhite
+ skipnl
+ skipempty
+
+
+contained *:syn-contained*
+
+When the "contained" argument is given, this item will not be recognized at
+the top level, but only when it is mentioned in the "contains" field of
+another match. Example: >
+ :syntax keyword Todo TODO contained
+ :syntax match Comment "//.*" contains=Todo
+
+
+display *:syn-display*
+
+If the "display" argument is given, this item will be skipped when the
+detected highlighting will not be displayed. This will speed up highlighting,
+by skipping this item when only finding the syntax state for the text that is
+to be displayed.
+
+Generally, you can use "display" for match and region items that meet these
+conditions:
+- The item does not continue past the end of a line. Example for C: A region
+ for a "/*" comment can't contain "display", because it continues on the next
+ line.
+- The item does not contain items that continue past the end of the line or
+ make it continue on the next line.
+- The item does not change the size of any item it is contained in. Example
+ for C: A match with "\\$" in a preprocessor match can't have "display",
+ because it may make that preprocessor match shorter.
+- The item does not allow other items to match that didn't match otherwise,
+ and that item may extend the match too far. Example for C: A match for a
+ "//" comment can't use "display", because a "/*" inside that comment would
+ match then and start a comment which extends past the end of the line.
+
+Examples, for the C language, where "display" can be used:
+- match with a number
+- match with a label
+
+
+transparent *:syn-transparent*
+
+If the "transparent" argument is given, this item will not be highlighted
+itself, but will take the highlighting of the item it is contained in. This
+is useful for syntax items that don't need any highlighting but are used
+only to skip over a part of the text.
+
+The "contains=" argument is also inherited from the item it is contained in,
+unless a "contains" argument is given for the transparent item itself. To
+avoid that unwanted items are contained, use "contains=NONE". Example, which
+highlights words in strings, but makes an exception for "vim": >
+ :syn match myString /'[^']*'/ contains=myWord,myVim
+ :syn match myWord /\<[a-z]*\>/ contained
+ :syn match myVim /\<vim\>/ transparent contained contains=NONE
+ :hi link myString String
+ :hi link myWord Comment
+Since the "myVim" match comes after "myWord" it is the preferred match (last
+match in the same position overrules an earlier one). The "transparent"
+argument makes the "myVim" match use the same highlighting as "myString". But
+it does not contain anything. If the "contains=NONE" argument would be left
+out, then "myVim" would use the contains argument from myString and allow
+"myWord" to be contained, which will be highlighted as a Constant. This
+happens because a contained match doesn't match inside itself in the same
+position, thus the "myVim" match doesn't overrule the "myWord" match here.
+
+When you look at the colored text, it is like looking at layers of contained
+items. The contained item is on top of the item it is contained in, thus you
+see the contained item. When a contained item is transparent, you can look
+through, thus you see the item it is contained in. In a picture:
+
+ look from here
+
+ | | | | | |
+ V V V V V V
+
+ xxxx yyy more contained items
+ .................... contained item (transparent)
+ ============================= first item
+
+The 'x', 'y' and '=' represent a highlighted syntax item. The '.' represent a
+transparent group.
+
+What you see is:
+
+ =======xxxx=======yyy========
+
+Thus you look through the transparent "....".
+
+
+oneline *:syn-oneline*
+
+The "oneline" argument indicates that the region does not cross a line
+boundary. It must match completely in the current line. However, when the
+region has a contained item that does cross a line boundary, it continues on
+the next line anyway. A contained item can be used to recognize a line
+continuation pattern. But the "end" pattern must still match in the first
+line, otherwise the region doesn't even start.
+
+When the start pattern includes a "\n" to match an end-of-line, the end
+pattern must be found in the same line as where the start pattern ends. The
+end pattern may also include an end-of-line. Thus the "oneline" argument
+means that the end of the start pattern and the start of the end pattern must
+be within one line. This can't be changed by a skip pattern that matches a
+line break.
+
+
+fold *:syn-fold*
+
+The "fold" argument makes the fold level increased by one for this item.
+Example: >
+ :syn region myFold start="{" end="}" transparent fold
+ :syn sync fromstart
+ :set foldmethod=syntax
+This will make each {} block form one fold.
+
+The fold will start on the line where the item starts, and end where the item
+ends. If the start and end are within the same line, there is no fold.
+The 'foldnestmax' option limits the nesting of syntax folds.
+{not available when Vim was compiled without |+folding| feature}
+
+
+ *:syn-contains* *E405* *E406* *E407* *E408* *E409*
+contains={groupname},..
+
+The "contains" argument is followed by a list of syntax group names. These
+groups will be allowed to begin inside the item (they may extend past the
+containing group's end). This allows for recursive nesting of matches and
+regions. If there is no "contains" argument, no groups will be contained in
+this item. The group names do not need to be defined before they can be used
+here.
+
+contains=ALL
+ If the only item in the contains list is "ALL", then all
+ groups will be accepted inside the item.
+
+contains=ALLBUT,{group-name},..
+ If the first item in the contains list is "ALLBUT", then all
+ groups will be accepted inside the item, except the ones that
+ are listed. Example: >
+ :syntax region Block start="{" end="}" ... contains=ALLBUT,Function
+
+contains=TOP
+ If the first item in the contains list is "TOP", then all
+ groups will be accepted that don't have the "contained"
+ argument.
+contains=TOP,{group-name},..
+ Like "TOP", but excluding the groups that are listed.
+
+contains=CONTAINED
+ If the first item in the contains list is "CONTAINED", then
+ all groups will be accepted that have the "contained"
+ argument.
+contains=CONTAINED,{group-name},..
+ Like "CONTAINED", but excluding the groups that are
+ listed.
+
+
+The {group-name} in the "contains" list can be a pattern. All group names
+that match the pattern will be included (or excluded, if "ALLBUT" is used).
+The pattern cannot contain white space or a ','. Example: >
+ ... contains=Comment.*,Keyw[0-3]
+The matching will be done at moment the syntax command is executed. Groups
+that are defined later will not be matched. Also, if the current syntax
+command defines a new group, it is not matched. Be careful: When putting
+syntax commands in a file you can't rely on groups NOT being defined, because
+the file may have been sourced before, and ":syn clear" doesn't remove the
+group names.
+
+The contained groups will also match in the start and end patterns of a
+region. If this is not wanted, the "matchgroup" argument can be used
+|:syn-matchgroup|. The "ms=" and "me=" offsets can be used to change the
+region where contained items do match. Note that this may also limit the
+area that is highlighted
+
+
+containedin={groupname}... *:syn-containedin*
+
+The "containedin" argument is followed by a list of syntax group names. The
+item will be allowed to begin inside these groups. This works as if the
+containing item has a "contains=" argument that includes this item.
+
+The {groupname}... can be used just like for "contains", as explained above.
+
+This is useful when adding a syntax item afterwards. An item can be told to
+be included inside an already existing item, without changing the definition
+of that item. For example, to highlight a word in a C comment after loading
+the C syntax: >
+ :syn keyword myword HELP containedin=cComment contained
+Note that "contained" is also used, to avoid that the item matches at the top
+level.
+
+Matches for "containedin" are added to the other places where the item can
+appear. A "contains" argument may also be added as usual. Don't forget that
+keywords never contain another item, thus adding them to "containedin" won't
+work.
+
+
+nextgroup={groupname},.. *:syn-nextgroup*
+
+The "nextgroup" argument is followed by a list of syntax group names,
+separated by commas (just like with "contains", so you can also use patterns).
+
+If the "nextgroup" argument is given, the mentioned syntax groups will be
+tried for a match, after the match or region ends. If none of the groups have
+a match, highlighting continues normally. If there is a match, this group
+will be used, even when it is not mentioned in the "contains" field of the
+current group. This is like giving the mentioned group priority over all
+other groups. Example: >
+ :syntax match ccFoobar "Foo.\{-}Bar" contains=ccFoo
+ :syntax match ccFoo "Foo" contained nextgroup=ccFiller
+ :syntax region ccFiller start="." matchgroup=ccBar end="Bar" contained
+
+This will highlight "Foo" and "Bar" differently, and only when there is a
+"Bar" after "Foo". In the text line below, "f" shows where ccFoo is used for
+highlighting, and "bbb" where ccBar is used. >
+
+ Foo asdfasd Bar asdf Foo asdf Bar asdf
+ fff bbb fff bbb
+
+Note the use of ".\{-}" to skip as little as possible until the next Bar.
+when ".*" would be used, the "asdf" in between "Bar" and "Foo" would be
+highlighted according to the "ccFoobar" group, because the ccFooBar match
+would include the first "Foo" and the last "Bar" in the line (see |pattern|).
+
+
+skipwhite *:syn-skipwhite*
+skipnl *:syn-skipnl*
+skipempty *:syn-skipempty*
+
+These arguments are only used in combination with "nextgroup". They can be
+used to allow the next group to match after skipping some text:
+ skipwhite skip over space and Tab characters
+ skipnl skip over the end of a line
+ skipempty skip over empty lines (implies a "skipnl")
+
+When "skipwhite" is present, the white space is only skipped if there is no
+next group that matches the white space.
+
+When "skipnl" is present, the match with nextgroup may be found in the next
+line. This only happens when the current item ends at the end of the current
+line! When "skipnl" is not present, the nextgroup will only be found after
+the current item in the same line.
+
+When skipping text while looking for a next group, the matches for other
+groups are ignored. Only when no next group matches, other items are tried
+for a match again. This means that matching a next group and skipping white
+space and <EOL>s has a higher priority than other items.
+
+Example: >
+ :syn match ifstart "\<if.*" nextgroup=ifline skipwhite skipempty
+ :syn match ifline "[^ \t].*" nextgroup=ifline skipwhite skipempty contained
+ :syn match ifline "endif" contained
+Note that the "[^ \t].*" match matches all non-white text. Thus it would also
+match "endif". Therefore the "endif" match is put last, so that it takes
+precedence.
+Note that this example doesn't work for nested "if"s. You need to add
+"contains" arguments to make that work (omitted for simplicity of the
+example).
+
+==============================================================================
+7. Syntax patterns *:syn-pattern* *E401* *E402*
+
+In the syntax commands, a pattern must be surrounded by two identical
+characters. This is like it works for the ":s" command. The most common to
+use is the double quote. But if the pattern contains a double quote, you can
+use another character that is not used in the pattern. Examples: >
+ :syntax region Comment start="/\*" end="\*/"
+ :syntax region String start=+"+ end=+"+ skip=+\\"+
+
+See |pattern| for the explanation of what a pattern is. Syntax patterns are
+always interpreted like the 'magic' options is set, no matter what the actual
+value of 'magic' is. And the patterns are interpreted like the 'l' flag is
+not included in 'cpoptions'. This was done to make syntax files portable and
+independent of 'compatible' and 'magic' settings.
+
+Try to avoid patterns that can match an empty string, such as "[a-z]*".
+This slows down the highlighting a lot, because it matches everywhere.
+
+ *:syn-pattern-offset*
+The pattern can be followed by a character offset. This can be used to
+change the highlighted part, and to change the text area included in the
+match or region (which only matters when trying to match other items). Both
+are relative to the matched pattern. The character offset for a skip
+pattern can be used to tell where to continue looking for an end pattern.
+
+The offset takes the form of "{what}={offset}"
+The {what} can be one of seven strings:
+
+ms Match Start offset for the start of the matched text
+me Match End offset for the end of the matched text
+hs Highlight Start offset for where the highlighting starts
+he Highlight End offset for where the highlighting ends
+rs Region Start offset for where the body of a region starts
+re Region End offset for where the body of a region ends
+lc Leading Context offset past "leading context" of pattern
+
+The {offset} can be:
+
+s start of the matched pattern
+s+{nr} start of the matched pattern plus {nr} chars to the right
+s-{nr} start of the matched pattern plus {nr} chars to the left
+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
+
+Examples: "ms=s+1", "hs=e-2", "lc=3".
+
+Although all offsets are accepted after any pattern, they are not always
+meaningful. This table shows which offsets are actually used:
+
+ ms me hs he rs re lc ~
+match item yes yes yes yes - - yes
+region item start yes - yes - yes - yes
+region item skip - yes - - - - yes
+region item end - yes - yes - yes yes
+
+Offsets can be concatenated, with a ',' in between. Example: >
+ :syn match String /"[^"]*"/hs=s+1,he=e-1
+<
+ some "string" text
+ ^^^^^^ highlighted
+
+Notes:
+- There must be no white space between the pattern and the character
+ offset(s).
+- The highlighted area will never be outside of the matched text.
+- A negative offset for an end pattern may not always work, because the end
+ pattern may be detected when the highlighting should already have stopped.
+- The start of a match cannot be in a line other than where the pattern
+ matched. This doesn't work: "a\nb"ms=e. You can make the highlighting
+ start in another line, this does work: "a\nb"hs=e.
+
+Example (match a comment but don't highlight the /* and */): >
+ :syntax region Comment start="/\*"hs=e+1 end="\*/"he=s-1
+<
+ /* this is a comment */
+ ^^^^^^^^^^^^^^^^^^^ highlighted
+
+A more complicated Example: >
+ :syn region Exa matchgroup=Foo start="foo"hs=s+2,rs=e+2 matchgroup=Bar end="bar"me=e-1,he=e-1,re=s-1
+<
+ abcfoostringbarabc
+ mmmmmmmmmmm match
+ ssrrrreee highlight start/region/end ("Foo", "Exa" and "Bar")
+
+Leading context *:syn-lc* *:syn-leading* *:syn-context*
+
+Note: This is an obsolete feature, only included for backwards compatibility
+with previous Vim versions. It's now recommended to use the |/\@<=| construct
+in the pattern.
+
+The "lc" offset specifies leading context -- a part of the pattern that must
+be present, but is not considered part of the match. An offset of "lc=n" will
+cause Vim to step back n columns before attempting the pattern match, allowing
+characters which have already been matched in previous patterns to also be
+used as leading context for this match. This can be used, for instance, to
+specify that an "escaping" character must not precede the match: >
+
+ :syn match ZNoBackslash "[^\\]z"ms=s+1
+ :syn match WNoBackslash "[^\\]w"lc=1
+ :syn match Underline "_\+"
+<
+ ___zzzz ___wwww
+ ^^^ ^^^ matches Underline
+ ^ ^ matches ZNoBackslash
+ ^^^^ matches WNoBackslash
+
+The "ms" offset is automatically set to the same value as the "lc" offset,
+unless you set "ms" explicitly.
+
+
+Multi-line patterns *:syn-multi-line*
+
+The patterns can include "\n" to match an end-of-line. Mostly this works as
+expected, but there are a few exceptions.
+
+When using a start pattern with an offset, the start of the match is not
+allowed to start in a following line. The highlighting can start in a
+following line though.
+
+The skip pattern can include the "\n", but the search for an end pattern will
+continue in the first character of the next line, also when that character is
+matched by the skip pattern. This is because redrawing may start in any line
+halfway a region and there is no check if the skip pattern started in a
+previous line. For example, if the skip pattern is "a\nb" and an end pattern
+is "b", the end pattern does match in the second line of this: >
+ x x a
+ b x x
+Generally this means that the skip pattern should not match any characters
+after the "\n".
+
+
+External matches *:syn-ext-match*
+
+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.
+
+ */\z1* */\z2* */\z3* */\z4* */\z5*
+ \z1 ... \z9 */\z6* */\z7* */\z8* */\z9* *E66* *E67*
+ Matches the same string that was matched by the corresponding
+ sub-expression in a previous start pattern match.
+
+Sometimes the start and end patterns of a region need to share a common
+sub-expression. A common example is the "here" document in Perl and many Unix
+shells. This effect can be achieved with the "\z" special regular expression
+items, which marks a sub-expression as "external", in the sense that it can be
+referenced from outside the pattern in which it is defined. The here-document
+example, for instance, can be done like this: >
+ :syn region hereDoc start="<<\z(\I\i*\)" end="^\z1$"
+
+As can be seen here, the \z actually does double duty. In the start pattern,
+it marks the "\(\I\i*\)" sub-expression as external; in the end pattern, it
+changes the \1 back-reference into an external reference referring to the
+first external sub-expression in the start pattern. External references can
+also be used in skip patterns: >
+ :syn region foo start="start \(\I\i*\)" skip="not end \z1" end="end \z1"
+
+Note that normal and external sub-expressions are completely orthogonal and
+indexed separately; for instance, if the pattern "\z(..\)\(..\)" is applied
+to the string "aabb", then \1 will refer to "bb" and \z1 will refer to "aa".
+Note also that external sub-expressions cannot be accessed as back-references
+within the same pattern like normal sub-expressions. If you want to use one
+sub-expression as both a normal and an external sub-expression, you can nest
+the two, as in "\(\z(...\)\)".
+
+Note that only matches within a single line can be used. Multi-line matches
+cannot be referred to.
+
+==============================================================================
+8. Syntax clusters *:syn-cluster* *E400*
+
+:sy[ntax] cluster {cluster-name} [contains={group-name}..]
+ [add={group-name}..]
+ [remove={group-name}..]
+
+This command allows you to cluster a list of syntax groups together under a
+single name.
+
+ contains={group-name}..
+ The cluster is set to the specified list of groups.
+ add={group-name}..
+ The specified groups are added to the cluster.
+ remove={group-name}..
+ The specified groups are removed from the cluster.
+
+A cluster so defined may be referred to in a contains=.., nextgroup=.., add=..
+or remove=.. list with a "@" prefix. You can also use this notation to
+implicitly declare a cluster before specifying its contents.
+
+Example: >
+ :syntax match Thing "# [^#]\+ #" contains=@ThingMembers
+ :syntax cluster ThingMembers contains=ThingMember1,ThingMember2
+
+As the previous example suggests, modifications to a cluster are effectively
+retroactive; the membership of the cluster is checked at the last minute, so
+to speak: >
+ :syntax keyword A aaa
+ :syntax keyword B bbb
+ :syntax cluster AandB contains=A
+ :syntax match Stuff "( aaa bbb )" contains=@AandB
+ :syntax cluster AandB add=B " now both keywords are matched in Stuff
+
+This also has implications for nested clusters: >
+ :syntax keyword A aaa
+ :syntax keyword B bbb
+ :syntax cluster SmallGroup contains=B
+ :syntax cluster BigGroup contains=A,@SmallGroup
+ :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
+
+==============================================================================
+9. Including syntax files *:syn-include* *E397*
+
+It is often useful for one language's syntax file to include a syntax file for
+a related language. Depending on the exact relationship, this can be done in
+two different ways:
+
+ - If top-level syntax items in the included syntax file are to be
+ allowed at the top level in the including syntax, you can simply use
+ the |:runtime| command: >
+
+ " In cpp.vim:
+ :runtime! syntax/c.vim
+ :unlet b:current_syntax
+
+< - If top-level syntax items in the included syntax file are to be
+ contained within a region in the including syntax, you can use the
+ ":syntax include" command:
+
+:sy[ntax] include [@{grouplist-name}] {file-name}
+
+ All syntax items declared in the included file will have the
+ "contained" flag added. In addition, if a group list is specified,
+ all top-level syntax items in the included file will be added to
+ that list. >
+
+ " In perl.vim:
+ :syntax include @Pod <sfile>:p:h/pod.vim
+ :syntax region perlPOD start="^=head" end="^=cut" contains=@Pod
+<
+ When {file-name} is an absolute path (starts with "/", "c:", "$VAR"
+ or "<sfile>") that file is sourced. When it is a relative path
+ (e.g., "syntax/pod.vim") the file is searched for in 'runtimepath'.
+ All matching files are loaded. Using a relative path is
+ recommended, because it allows a user to replace the included file
+ with his own version, without replacing the file that does the ":syn
+ include".
+
+==============================================================================
+10. Synchronizing *:syn-sync* *E403* *E404*
+
+Vim wants to be able to start redrawing in any position in the document. To
+make this possible it needs to know the syntax state at the position where
+redrawing starts.
+
+:sy[ntax] sync [ccomment [group-name] | minlines={N} | ...]
+
+There are four ways to synchronize:
+1. Always parse from the start of the file.
+ |:syn-sync-first|
+2. Based on C-style comments. Vim understands how C-comments work and can
+ figure out if the current line starts inside or outside a comment.
+ |:syn-sync-second|
+3. Jumping back a certain number of lines and start parsing there.
+ |:syn-sync-third|
+4. Searching backwards in the text for a pattern to sync on.
+ |:syn-sync-fourth|
+
+ *:syn-sync-maxlines* *:syn-sync-minlines*
+For the last three methods, the line range where the parsing can start is
+limited by "minlines" and "maxlines".
+
+If the "minlines={N}" argument is given, the parsing always starts at least
+that many lines backwards. This can be used if the parsing may take a few
+lines before it's correct, or when it's not possible to use syncing.
+
+If the "maxlines={N}" argument is given, the number of lines that are searched
+for a comment or syncing pattern is restricted to N lines backwards (after
+adding "minlines"). This is useful if you have few things to sync on and a
+slow machine. Example: >
+ :syntax sync ccomment maxlines=500
+<
+ *:syn-sync-linebreaks*
+When using a pattern that matches multiple lines, a change in one line may
+cause a pattern to no longer match in a previous line. This means has to
+start above where the change was made. How many lines can be specified with
+the "linebreaks" argument. For example, when a pattern may include one line
+break use this: >
+ :syntax sync linebreaks=1
+The result is that redrawing always starts at least one line before where a
+change was made. The default value for "linebreaks" is zero. Usually the
+value for "minlines" is bigger than "linebreaks".
+
+
+First syncing method: *:syn-sync-first*
+>
+ :syntax sync fromstart
+
+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
+case: to the end of the file).
+
+Using "fromstart" is equivalent to using "minlines" with a very large number.
+
+
+Second syncing method: *:syn-sync-second* *:syn-sync-ccomment*
+
+For the second method, only the "ccomment" argument needs to be given.
+Example: >
+ :syntax sync ccomment
+
+When Vim finds that the line where displaying starts is inside a C-style
+comment, the last region syntax item with the group-name "Comment" will be
+used. This requires that there is a region with the group-name "Comment"!
+An alternate group name can be specified, for example: >
+ :syntax sync ccomment javaComment
+This means that the last item specified with "syn region javaComment" will be
+used for the detected C comment region. This only works properly if that
+region does have a start pattern "\/*" and an end pattern "*\/".
+
+The "maxlines" argument can be used to restrict the search to a number of
+lines. The "minlines" argument can be used to at least start a number of
+lines back (e.g., for when there is some construct that only takes a few
+lines, but it hard to sync on).
+
+Note: Syncing on a C comment doesn't work properly when strings are used
+that cross a line and contain a "*/". Since letting strings cross a line
+is a bad programming habit (many compilers give a warning message), and the
+chance of a "*/" appearing inside a comment is very small, this restriction
+is hardly ever noticed.
+
+
+Third syncing method: *:syn-sync-third*
+
+For the third method, only the "minlines={N}" argument needs to be given.
+Vim will subtract {N} from the line number and start parsing there. This
+means {N} extra lines need to be parsed, which makes this method a bit slower.
+Example: >
+ :syntax sync minlines=50
+
+"lines" is equivalent to "minlines" (used by older versions).
+
+
+Fourth syncing method: *:syn-sync-fourth*
+
+The idea is to synchronize on the end of a few specific regions, called a
+sync pattern. Only regions can cross lines, so when we find the end of some
+region, we might be able to know in which syntax item we are. The search
+starts in the line just above the one where redrawing starts. From there
+the search continues backwards in the file.
+
+This works just like the non-syncing syntax items. You can use contained
+matches, nextgroup, etc. But there are a few differences:
+- Keywords cannot be used.
+- The syntax items with the "sync" keyword form a completely separated group
+ of syntax items. You can't mix syncing groups and non-syncing groups.
+- The matching works backwards in the buffer (line by line), instead of
+ forwards.
+- A line continuation pattern can be given. It is used to decide which group
+ of lines need to be searched like they were one line. This means that the
+ search for a match with the specified items starts in the first of the
+ consecutive that contain the continuation pattern.
+- When using "nextgroup" or "contains", this only works within one line (or
+ group of continued lines).
+- When using a region, it must start and end in the same line (or group of
+ continued lines). Otherwise the end is assumed to be at the end of the
+ line (or group of continued lines).
+- When a match with a sync pattern is found, the rest of the line (or group of
+ continued lines) is searched for another match. The last match is used.
+ This is used when a line can contain both the start end the end of a region
+ (e.g., in a C-comment like /* this */, the last "*/" is used).
+
+There are two ways how a match with a sync pattern can be used:
+1. Parsing for highlighting starts where redrawing starts (and where the
+ search for the sync pattern started). The syntax group that is expected
+ to be valid there must be specified. This works well when the regions
+ that cross lines cannot contain other regions.
+2. Parsing for highlighting continues just after the match. The syntax group
+ that is expected to be present just after the match must be specified.
+ This can be used when the previous method doesn't work well. It's much
+ slower, because more text needs to be parsed.
+Both types of sync patterns can be used at the same time.
+
+Besides the sync patterns, other matches and regions can be specified, to
+avoid finding unwanted matches.
+
+[The reason that the sync patterns are given separately, is that mostly the
+search for the sync point can be much simpler than figuring out the
+highlighting. The reduced number of patterns means it will go (much)
+faster.]
+
+ *syn-sync-grouphere* *E393* *E394*
+ :syntax sync match {sync-group-name} grouphere {group-name} "pattern" ..
+
+ Define a match that is used for syncing. {group-name} is the
+ name of a syntax group that follows just after the match. Parsing
+ of the text for highlighting starts just after the match. A region
+ must exist for this {group-name}. The first one defined will be used.
+ "NONE" can be used for when there is no syntax group after the match.
+
+ *syn-sync-groupthere*
+ :syntax sync match {sync-group-name} groupthere {group-name} "pattern" ..
+
+ Like "grouphere", but {group-name} is the name of a syntax group that
+ is to be used at the start of the line where searching for the sync
+ point started. The text between the match and the start of the sync
+ pattern searching is assumed not to change the syntax highlighting.
+ For example, in C you could search backwards for "/*" and "*/". If
+ "/*" is found first, you know that you are inside a comment, so the
+ "groupthere" is "cComment". If "*/" is found first, you know that you
+ are not in a comment, so the "groupthere" is "NONE". (in practice
+ it's a bit more complicated, because the "/*" and "*/" could appear
+ inside a string. That's left as an exercise to the reader...).
+
+ :syntax sync match ..
+ :syntax sync region ..
+
+ Without a "groupthere" argument. Define a region or match that is
+ skipped while searching for a sync point.
+
+ :syntax sync linecont {pattern}
+
+ When {pattern} matches in a line, it is considered to continue in
+ the next line. This means that the search for a sync point will
+ consider the lines to be concatenated.
+
+If the "maxlines={N}" argument is given too, the number of lines that are
+searched for a match is restricted to N. This is useful if you have very
+few things to sync on and a slow machine. Example: >
+ :syntax sync maxlines=100
+
+You can clear all sync settings with: >
+ :syntax sync clear
+
+You can clear specific sync patterns with: >
+ :syntax sync clear {sync-group-name} ..
+
+==============================================================================
+11. Listing syntax items *:syntax* *:sy* *:syn* *:syn-list*
+
+This commands lists all the syntax items: >
+
+ :sy[ntax] [list]
+
+To show the syntax items for one syntax group: >
+
+ :sy[ntax] list {group-name}
+
+To list the syntax groups in one cluster: *E392* >
+
+ :sy[ntax] list @{cluster-name}
+
+See above for other arguments for the ":syntax" command.
+
+Note that the ":syntax" command can be abbreviated to ":sy", although ":syn"
+is mostly used, because it looks better.
+
+==============================================================================
+12. Highlight command *:highlight* *:hi* *E28* *E411* *E415*
+
+There are three types of highlight groups:
+- The ones used for specific languages. For these the name starts with the
+ name of the language. Many of these don't have any attributes, but are
+ linked to a group of the second type.
+- The ones used for all syntax languages.
+- The ones used for the 'highlight' option.
+ *hitest.vim*
+You can see all the groups currently active with this command: >
+ :so $VIMRUNTIME/syntax/hitest.vim
+This will open a new window containing all highlight group names, displayed
+in their own color.
+
+ *:colo* *:colorscheme* *E185*
+:colo[rscheme] {name} Load color scheme {name}. This searches 'runtimepath'
+ for the file "colors/{name}.vim. The first one that
+ is found is loaded.
+ To see the name of the currently active color scheme
+ (if there is one): >
+ :echo g:colors_name
+< Doesn't work recursively, thus you can't use
+ ":colorscheme" in a color scheme script.
+
+:hi[ghlight] List all the current highlight groups that have
+ attributes set.
+
+:hi[ghlight] {group-name}
+ List one highlight group.
+
+:hi[ghlight] clear Reset all highlighting to the defaults. Removes all
+ highlighting for groups added by the user!
+ Uses the current value of 'background' to decide which
+ default colors to use.
+
+:hi[ghlight] clear {group-name}
+:hi[ghlight] {group-name} NONE
+ Disable the highlighting for one highlight group. It
+ is _not_ set back to the default colors.
+
+:hi[ghlight] [default] {group-name} {key}={arg} ..
+ Add a highlight group, or change the highlighting for
+ an existing group.
+ See |highlight-args| for the {key}={arg} arguments.
+ See |:highlight-default| for the optional [default]
+ argument.
+
+Normally a highlight group is added once when starting up. This sets the
+default values for the highlighting. After that, you can use additional
+highlight commands to change the arguments that you want to set to non-default
+values. The value "NONE" can be used to switch the value off or go back to
+the default value.
+
+A simple way to change colors is with the |:colorscheme| command. This loads
+a file with ":highlight" commands such as this: >
+
+ :hi Comment gui=bold
+
+Note that all settings that are not included remain the same, only the
+specified field is used, and settings are merged with previous ones. So, the
+result is like this single command has been used: >
+ :hi Comment term=bold ctermfg=Cyan guifg=#80a0ff gui=bold
+<
+ *highlight-args* *E416* *E417* *E423*
+There are three types of terminals for highlighting:
+term a normal terminal (vt100, xterm)
+cterm a color terminal (MS-DOS console, color-xterm, these have the "Co"
+ termcap entry)
+gui the GUI
+
+For each type the highlighting can be given. This makes it possible to use
+the same syntax file on all terminals, and use the optimal highlighting.
+
+1. highlight arguments for normal terminals
+
+term={attr-list} *attr-list* *highlight-term* *E418*
+ attr-list is a comma separated list (without spaces) of the
+ following items (in any order):
+ bold
+ underline
+ reverse
+ inverse same as reverse
+ italic
+ standout
+ NONE no attributes used (used to reset it)
+
+ Note that "bold" can be used here and by using a bold font. They
+ have the same effect.
+
+start={term-list} *highlight-start* *E422*
+stop={term-list} *term-list* *highlight-stop*
+ These lists of terminal codes can be used to get
+ non-standard attributes on a terminal.
+
+ The escape sequence specified with the "start" argument
+ is written before the characters in the highlighted
+ area. It can be anything that you want to send to the
+ terminal to highlight this area. The escape sequence
+ specified with the "stop" argument is written after the
+ highlighted area. This should undo the "start" argument.
+ Otherwise the screen will look messed up.
+
+ The {term-list} can have two forms:
+
+ 1. A string with escape sequences.
+ This is any string of characters, except that it can't start with
+ "t_" and blanks are not allowed. The <> notation is recognized
+ here, so you can use things like "<Esc>" and "<Space>". Example:
+ start=<Esc>[27h;<Esc>[<Space>r;
+
+ 2. A list of terminal codes.
+ Each terminal code has the form "t_xx", where "xx" is the name of
+ the termcap entry. The codes have to be separated with commas.
+ White space is not allowed. Example:
+ start=t_C1,t_BL
+ The terminal codes must exist for this to work.
+
+
+2. highlight arguments for color terminals
+
+cterm={attr-list} *highlight-cterm*
+ See above for the description of {attr-list} |attr-list|.
+ The "cterm" argument is likely to be different from "term", when
+ colors are used. For example, in a normal terminal comments could
+ be underlined, in a color terminal they can be made Blue.
+ Note: Many terminals (e.g., DOS console) can't mix these attributes
+ with coloring. Use only one of "cterm=" OR "ctermfg=" OR "ctermbg=".
+
+ctermfg={color-nr} *highlight-ctermfg* *E421*
+ctermbg={color-nr} *highlight-ctermbg*
+ The {color-nr} argument is a color number. Its range is zero to
+ (not including) the number given by the termcap entry "Co".
+ The actual color with this number depends on the type of terminal
+ and its settings. Sometimes the color also depends on the settings of
+ "cterm". For example, on some systems "cterm=bold ctermfg=3" gives
+ another color, on others you just get color 3.
+
+ For an xterm this depends on your resources, and is a bit
+ unpredictable. See your xterm documentation for the defaults. The
+ colors for a color-xterm can be changed from the .Xdefaults file.
+ Unfortunately this means that it's not possible to get the same colors
+ for each user. See |xterm-color| for info about color xterms.
+
+ The MSDOS standard colors are fixed (in a console window), so these
+ have been used for the names. But the meaning of color names in X11
+ are fixed, so these color settings have been used, to make the
+ highlighting settings portable (complicated, isn't it?). The
+ following names are recognized, with the color number used:
+
+ *cterm-colors*
+ NR-16 NR-8 COLOR NAME ~
+ 0 0 Black
+ 1 4 DarkBlue
+ 2 2 DarkGreen
+ 3 6 DarkCyan
+ 4 1 DarkRed
+ 5 5 DarkMagenta
+ 6 3 Brown, DarkYellow
+ 7 7 LightGray, LightGrey, Gray, Grey
+ 8 0* DarkGray, DarkGrey
+ 9 4* Blue, LightBlue
+ 10 2* Green, LightGreen
+ 11 6* Cyan, LightCyan
+ 12 1* Red, LightRed
+ 13 5* Magenta, LightMagenta
+ 14 3* Yellow, LightYellow
+ 15 7* White
+
+ The number under "NR-16" is used for 16-color terminals ('t_Co'
+ greater than or equal to 16). The number under "NR-8" is used for
+ 8-color terminals ('t_Co' less than 16). The '*' indicates that the
+ bold attribute is set for ctermfg. In many 8-color terminals (e.g.,
+ "linux"), this causes the bright colors to appear. This doesn't work
+ for background colors! Without the '*' the bold attribute is removed.
+ If you want to set the bold attribute in a different way, put a
+ "cterm=" argument AFTER the "ctermfg=" or "ctermbg=" argument. Or use
+ a number instead of a color name.
+
+ The case of the color names is ignored.
+ Note that for 16 color ansi style terminals (including xterms), the
+ numbers in the NR-8 column is used. Here '*' means 'add 8' so that Blue
+ is 12, DarkGray is 8 etc.
+
+ Note that for some color terminals these names may result in the wrong
+ colors!
+
+ *:hi-normal-cterm*
+ When setting the "ctermfg" or "ctermbg" colors for the Normal group,
+ these will become the colors used for the non-highlighted text.
+ Example: >
+ :highlight Normal ctermfg=grey ctermbg=darkblue
+< When setting the "ctermbg" color for the Normal group, the
+ 'background' option will be adjusted automatically. This causes the
+ highlight groups that depend on 'background' to change! This means
+ you should set the colors for Normal first, before setting other
+ colors.
+ When a colorscheme is being used, changing 'background' causes it to
+ be reloaded, which may reset all colors (including Normal). First
+ delete the "colors_name" variable when you don't want this.
+
+ When you have set "ctermfg" or "ctermbg" for the Normal group, Vim
+ needs to reset the color when exiting. This is done with the "op"
+ termcap entry |t_op|. If this doesn't work correctly, try setting the
+ 't_op' option in your .vimrc.
+ *E419* *E420*
+ When Vim knows the normal foreground and background colors, "fg" and
+ "bg" can be used as color names. This only works after setting the
+ colors for the Normal group and for the MS-DOS console. Example, for
+ reverse video: >
+ :highlight Visual ctermfg=bg ctermbg=fg
+< Note that the colors are used that are valid at the moment this
+ command are given. If the Normal group colors are changed later, the
+ "fg" and "bg" colors will not be adjusted.
+
+
+3. highlight arguments for the GUI
+
+gui={attr-list} *highlight-gui*
+ These give the attributes to use in the GUI mode.
+ See |attr-list| for a description.
+ Note that "bold" can be used here and by using a bold font. They
+ have the same effect.
+ Note that the attributes are ignored for the "Normal" group.
+
+font={font-name} *highlight-font*
+ font-name is the name of a font, as it is used on the system Vim
+ runs on. For X11 this is a complicated name, for example: >
+ font=-misc-fixed-bold-r-normal--14-130-75-75-c-70-iso8859-1
+<
+ The font-name "NONE" can be used to revert to the default font.
+ When setting the font for the "Normal" group, this becomes the default
+ font (until the 'guifont' option is changed; the last one set is
+ used).
+ The following only works with Motif and Athena, not with other GUIs:
+ When setting the font for the "Menu" group, the menus will be changed.
+ When setting the font for the "Tooltip" group, the tooltips will be
+ changed.
+ All fonts used, except for Menu and Tooltip, should be of the same
+ character size as the default font! Otherwise redrawing problems will
+ occur.
+
+guifg={color-name} *highlight-guifg*
+guibg={color-name} *highlight-guibg*
+ These give the foreground (guifg) and background (guibg) color to
+ use in the GUI. There are a few special names:
+ NONE no color (transparent)
+ bg use normal background color
+ background use normal background color
+ fg use normal foreground color
+ foreground use normal foreground color
+ To use a color name with an embedded space or other special character,
+ put it in single quotes. The single quote cannot be used then.
+ Example: >
+ :hi comment guifg='salmon pink'
+<
+ *gui-colors*
+ Suggested color names (these are available on most systems):
+ Red LightRed DarkRed
+ Green LightGreen DarkGreen SeaGreen
+ Blue LightBlue DarkBlue SlateBlue
+ Cyan LightCyan DarkCyan
+ Magenta LightMagenta DarkMagenta
+ Yellow LightYellow Brown DarkYellow
+ Gray LightGray DarkGray
+ Black White
+ Orange Purple Violet
+
+ In the Win32 GUI version, additional system colors are available. See
+ |win32-colors|.
+
+ You can also specify a color by its Red, Green and Blue values.
+ The format is "#rrggbb", where
+ "rr" is the Red value
+ "bb" is the Blue value
+ "gg" is the Green value
+ All values are hexadecimal, range from "00" to "ff". Examples: >
+ :highlight Comment guifg=#11f0c3 guibg=#ff00ff
+<
+ *highlight-groups* *highlight-default*
+These are the default highlighting groups. These groups are used by the
+'highlight' option default. Note that the highlighting depends on the value
+of 'background'. You can see the current settings with the ":highlight"
+command.
+ *hl-Cursor*
+Cursor the character under the cursor
+ *hl-CursorIM*
+CursorIM like Cursor, but used when in IME mode |CursorIM|
+ *hl-Directory*
+Directory directory names (and other special names in listings)
+ *hl-DiffAdd*
+DiffAdd diff mode: Added line |diff.txt|
+ *hl-DiffChange*
+DiffChange diff mode: Changed line |diff.txt|
+ *hl-DiffDelete*
+DiffDelete diff mode: Deleted line |diff.txt|
+ *hl-DiffText*
+DiffText diff mode: Changed text within a changed line |diff.txt|
+ *hl-ErrorMsg*
+ErrorMsg error messages on the command line
+ *hl-VertSplit*
+VertSplit the column separating vertically split windows
+ *hl-Folded*
+Folded line used for closed folds
+ *hl-FoldColumn*
+FoldColumn 'foldcolumn'
+ *hl-SignColumn*
+SignColumn column where |signs| are displayed
+ *hl-IncSearch*
+IncSearch 'incsearch' highlighting; also used for the text replaced with
+ ":s///c"
+ *hl-LineNr*
+LineNr line number for ":number" and ":#" commands, and when 'number'
+ option is set.
+ *hl-ModeMsg*
+ModeMsg 'showmode' message (e.g., "-- INSERT --")
+ *hl-MoreMsg*
+MoreMsg |more-prompt|
+ *hl-NonText*
+NonText '~' and '@' at the end of the window, characters from
+ 'showbreak' and other characters that do not really exist in
+ the text (e.g., ">" displayed when a double-wide character
+ doesn't fit at the end of the line).
+ *hl-Normal*
+Normal normal text
+ *hl-Question*
+Question |hit-enter| prompt and yes/no questions
+ *hl-Search*
+Search Last search pattern highlighting (see 'hlsearch').
+ Also used for highlighting the current line in the quickfix
+ window and similar items that need to stand out.
+ *hl-SpecialKey*
+SpecialKey Meta and special keys listed with ":map", also for text used
+ to show unprintable characters in the text, 'listchars'.
+ Generally: text that is displayed differently from what it
+ really is.
+ *hl-StatusLine*
+StatusLine status line of current window
+ *hl-StatusLineNC*
+StatusLineNC status lines of not-current windows
+ Note: if this is equal to "StatusLine" Vim will use "^^^" in
+ the status line of the current window.
+ *hl-Title*
+Title titles for output from ":set all", ":autocmd" etc.
+ *hl-Visual*
+Visual Visual mode selection
+ *hl-VisualNOS*
+VisualNOS Visual mode selection when vim is "Not Owning the Selection".
+ Only X11 Gui's |gui-x11| and |xterm-clipboard| supports this.
+ *hl-WarningMsg*
+WarningMsg warning messages
+ *hl-WildMenu*
+WildMenu current match in 'wildmenu' completion
+
+ *hl-User1* *hl-User1..9*
+The 'statusline' syntax allows the use of 9 different highlights in the
+statusline and ruler (via 'rulerformat'). The names are User1 to User9.
+
+For the GUI you can use these groups to set the colors for the menu,
+scrollbars and tooltips. They don't have defaults. This doesn't work for the
+Win32 GUI. Only three highlight arguments have any effect here: font, guibg,
+and guifg.
+
+ *hl-Menu*
+Menu Current font, background and foreground colors of the menus.
+ Also used for the toolbar.
+ Applicable highlight arguments: font, guibg, guifg.
+
+ NOTE: For Motif and Athena the font argument actually
+ specifies a fontset at all times, no matter if 'guifontset' is
+ empty, and as such it is tied to the current |:language| when
+ set.
+
+ *hl-Scrollbar*
+Scrollbar Current background and foreground of the main window's
+ scrollbars.
+ Applicable highlight arguments: guibg, guifg.
+
+ *hl-Tooltip*
+Tooltip Current font, background and foreground of the tooltips.
+ Applicable highlight arguments: font, guibg, guifg.
+
+ NOTE: For Motif and Athena the font argument actually
+ specifies a fontset at all times, no matter if 'guifontset' is
+ empty, and as such it is tied to the current |:language| when
+ set.
+
+==============================================================================
+13. Linking groups *:hi-link* *:highlight-link* *E412* *E413*
+
+When you want to use the same highlighting for several syntax groups, you
+can do this more easily by linking the groups into one common highlight
+group, and give the color attributes only for that group.
+
+To set a link:
+
+ :hi[ghlight][!] [default] link {from-group} {to-group}
+
+To remove a link:
+
+ :hi[ghlight][!] [default] link {from-group} NONE
+
+Notes: *E414*
+- If the {from-group} and/or {to-group} doesn't exist, it is created. You
+ don't get an error message for a non-existing group.
+- As soon as you use a ":highlight" command for a linked group, the link is
+ removed.
+- If there are already highlight settings for the {from-group}, the link is
+ not made, unless the '!' is given. For a ":highlight link" command in a
+ sourced file, you don't get an error message. This can be used to skip
+ links for groups that already have settings.
+
+ *:hi-default* *:highlight-default*
+The [default] argument is used for setting the default highlighting for a
+group. If highlighting has already been specified for the group the command
+will be ignored. Also when there is an existing link.
+
+Using [default] is especially useful to overrule the highlighting of a
+specific syntax file. For example, the C syntax file contains: >
+ :highlight default link cComment Comment
+If you like Question highlighting for C comments, put this in your vimrc file: >
+ :highlight link cComment Question
+Without the "default" in the C syntax file, the highlighting would be
+overruled when the syntax file is loaded.
+
+==============================================================================
+14. Cleaning up *:syn-clear* *E391*
+
+If you want to clear the syntax stuff for the current buffer, you can use this
+command: >
+ :syntax clear
+
+This command should be used when you want to switch off syntax highlighting,
+or when you want to switch to using another syntax. It's normally not needed
+in a syntax file itself, because syntax is cleared by the autocommands that
+load the syntax file.
+The command also deletes the "b:current_syntax" variable, since no syntax is
+loaded after this command.
+
+If you want to disable syntax highlighting for all buffers, you need to remove
+the autocommands that load the syntax files: >
+ :syntax off
+
+What this command actually does, is executing the command >
+ :source $VIMRUNTIME/syntax/nosyntax.vim
+See the "nosyntax.vim" file for details. Note that for this to work
+$VIMRUNTIME must be valid. See |$VIMRUNTIME|.
+
+To clean up specific syntax groups for the current buffer: >
+ :syntax clear {group-name} ..
+This removes all patterns and keywords for {group-name}.
+
+To clean up specific syntax group lists for the current buffer: >
+ :syntax clear @{grouplist-name} ..
+This sets {grouplist-name}'s contents to an empty list.
+
+ *:syntax-reset* *:syn-reset*
+If you have changed the colors and messed them up, use this command to get the
+defaults back: >
+
+ :syntax reset
+
+This doesn't change the colors for the 'highlight' option.
+
+Note that the syntax colors that you set in your vimrc file will also be reset
+back to their Vim default.
+Note that if you are using a color scheme, the colors defined by the color
+scheme for syntax highlighting will be lost.
+
+What this actually does is: >
+
+ let g:syntax_cmd = "reset"
+ runtime! syntax/syncolor.vim
+
+Note that this uses the 'runtimepath' option.
+
+ *syncolor*
+If you want to use different colors for syntax highlighting, you can add a Vim
+script file to set these colors. Put this file in a directory in
+'runtimepath' which comes after $VIMRUNTIME, so that your settings overrule
+the default colors. This way these colors will be used after the ":syntax
+reset" command.
+
+For Unix you can use the file ~/.vim/after/syntax/syncolor.vim. Example: >
+
+ if &background == "light"
+ highlight comment ctermfg=darkgreen guifg=darkgreen
+ else
+ highlight comment ctermfg=green guifg=green
+ endif
+
+Note that when a color scheme is used, there might be some confusion whether
+your defined colors are to be used or the colors from the scheme. This
+depends on the color scheme file. See |:colorscheme|.
+
+ *syntax_cmd*
+The "syntax_cmd" variable is set to one of these values when the
+syntax/syncolor.vim files are loaded:
+ "on" ":syntax on" command. Highlight colors are overruled but
+ links are kept
+ "enable" ":syntax enable" command. Only define colors for groups that
+ don't have highlighting yet. Use ":syntax default".
+ "reset" ":syntax reset" command or loading a color scheme. Define all
+ the colors.
+ "skip" Don't define colors. Used to skip the default settings when a
+ syncolor.vim file earlier in 'runtimepath' has already set
+ them.
+
+==============================================================================
+15. Highlighting tags *tag-highlight*
+
+If you want to highlight all the tags in your file, you can use the following
+mappings.
+
+ <F11> -- Generate tags.vim file, and highlight tags.
+ <F12> -- Just highlight tags based on existing tags.vim file.
+>
+ :map <F11> :sp tags<CR>:%s/^\([^ :]*:\)\=\([^ ]*\).*/syntax keyword Tag \2/<CR>:wq! tags.vim<CR>/^<CR><F12>
+ :map <F12> :so tags.vim<CR>
+
+WARNING: The longer the tags file, the slower this will be, and the more
+memory Vim will consume.
+
+Only highlighting typedefs, unions and structs can be done too. For this you
+must use Exuberant ctags (found at http://ctags.sf.net).
+
+Put these lines in your Makefile:
+
+# Make a highlight file for types. Requires Exuberant ctags and awk
+types: types.vim
+types.vim: *.[ch]
+ ctags -i=gstuS -o- *.[ch] |\
+ awk 'BEGIN{printf("syntax keyword Type\t")}\
+ {printf("%s ", $$1)}END{print ""}' > $@
+
+And put these lines in your .vimrc: >
+
+ " load the types.vim highlighting file, if it exists
+ autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim'
+ autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
+ autocmd BufRead,BufNewFile *.[ch] exe 'so ' . fname
+ autocmd BufRead,BufNewFile *.[ch] endif
+
+==============================================================================
+16. 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: >
+ :if &term =~ "xterm"
+ : if has("terminfo")
+ : set t_Co=8
+ : set t_Sf=<Esc>[3%p1%dm
+ : set t_Sb=<Esc>[4%p1%dm
+ : else
+ : set t_Co=8
+ : set t_Sf=<Esc>[3%dm
+ : set t_Sb=<Esc>[4%dm
+ : endif
+ :endif
+< [<Esc> is a real escape, type CTRL-V <Esc>]
+
+You might want to change the first "if" to match the name of your terminal,
+e.g. "dtterm" instead of "xterm".
+
+Note: Do these settings BEFORE doing ":syntax on". Otherwise the colors may
+be wrong.
+ *xiterm* *rxvt*
+The above settings have been mentioned to work for xiterm and rxvt too.
+But for using 16 colors in an rxvt these should work with terminfo: >
+ :set t_AB=<Esc>[%?%p1%{8}%<%t25;%p1%{40}%+%e5;%p1%{32}%+%;%dm
+ :set t_AF=<Esc>[%?%p1%{8}%<%t22;%p1%{30}%+%e1;%p1%{22}%+%;%dm
+<
+ *colortest.vim*
+To test your color setup, a file has been included in the Vim distribution.
+To use it, execute these commands: >
+ :e $VIMRUNTIME/syntax/colortest.vim
+ :so %
+
+Some versions of xterm (and other terminals, like the linux console) can
+output lighter foreground colors, even though the number of colors is defined
+at 8. Therefore Vim sets the "cterm=bold" attribute for light foreground
+colors, when 't_Co' is 8.
+
+ *xfree-xterm*
+To get 16 colors or more, get the newest xterm version (which should be
+included with Xfree86 3.3 and later). You can also find the latest version
+at: >
+ http://invisible-island.net/xterm/xterm.html
+Here is a good way to configure it. This uses 88 colors and enables the
+termcap-query feature, which allows Vim to ask the xterm how many colors it
+supports. >
+ ./configure --disable-bold-color --enable-88-color --enable-tcap-query
+If you only get 8 colors, check the xterm compilation settings.
+(Also see |UTF8-xterm| for using this xterm with UTF-8 character encoding).
+
+This xterm should work with these lines in your .vimrc (for 16 colors): >
+ :if has("terminfo")
+ : set t_Co=16
+ : set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm
+ : set t_AF=<Esc>[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm
+ :else
+ : set t_Co=16
+ : set t_Sf=<Esc>[3%dm
+ : set t_Sb=<Esc>[4%dm
+ :endif
+< [<Esc> is a real escape, type CTRL-V <Esc>]
+
+Without |+terminfo|, Vim will recognize these settings, and automatically
+translate cterm colors of 8 and above to "<Esc>[9%dm" and "<Esc>[10%dm".
+Colors above 16 are also translated automatically.
+
+For 256 colors this has been reported to work: >
+
+ :set t_AB=<Esc>[48;5;%dm
+ :set t_AF=<Esc>[38;5;%dm
+
+Or just set the TERM environment variable to "xterm-color" or "xterm-16color"
+and try if that works.
+
+You probably want to use these X resources (in your ~/.Xdefaults file):
+ XTerm*color0: #000000
+ XTerm*color1: #c00000
+ XTerm*color2: #008000
+ XTerm*color3: #808000
+ XTerm*color4: #0000c0
+ XTerm*color5: #c000c0
+ XTerm*color6: #008080
+ XTerm*color7: #c0c0c0
+ XTerm*color8: #808080
+ XTerm*color9: #ff6060
+ XTerm*color10: #00ff00
+ XTerm*color11: #ffff00
+ XTerm*color12: #8080ff
+ XTerm*color13: #ff40ff
+ XTerm*color14: #00ffff
+ XTerm*color15: #ffffff
+ Xterm*cursorColor: Black
+
+[Note: The cursorColor is required to work around a bug, which changes the
+cursor color to the color of the last drawn text. This has been fixed by a
+newer version of xterm, but not everybody is it using yet.]
+
+To get these right away, reload the .Xdefaults file to the X Option database
+Manager (you only need to do this when you just changed the .Xdefaults file): >
+ xrdb -merge ~/.Xdefaults
+<
+ *xterm-blink* *xterm-blinking-cursor*
+To make the cursor blink in an xterm, see tools/blink.c. Or use Thomas
+Dickey's xterm above patchlevel 107 (see above for where to get it), with
+these resources:
+ XTerm*cursorBlink: on
+ XTerm*cursorOnTime: 400
+ XTerm*cursorOffTime: 250
+ XTerm*cursorColor: White
+
+ *hpterm-color*
+These settings work (more or less) for a hpterm, which only supports 8
+foreground colors: >
+ :if has("terminfo")
+ : set t_Co=8
+ : set t_Sf=<Esc>[&v%p1%dS
+ : set t_Sb=<Esc>[&v7S
+ :else
+ : set t_Co=8
+ : set t_Sf=<Esc>[&v%dS
+ : set t_Sb=<Esc>[&v7S
+ :endif
+< [<Esc> is a real escape, type CTRL-V <Esc>]
+
+ *Eterm* *enlightened-terminal*
+These settings have been reported to work for the Enlightened terminal
+emulator, or Eterm. They might work for all xterm-like terminals that use the
+bold attribute to get bright colors. Add an ":if" like above when needed. >
+ :set t_Co=16
+ :set t_AF=^[[%?%p1%{8}%<%t3%p1%d%e%p1%{22}%+%d;1%;m
+ :set t_AB=^[[%?%p1%{8}%<%t4%p1%d%e%p1%{32}%+%d;1%;m
+<
+ *TTpro-telnet*
+These settings should work for TTpro telnet. Tera Term Pro is a freeware /
+open-source program for MS-Windows. >
+ set t_Co=16
+ set t_AB=^[[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{32}%+5;%;%dm
+ set t_AF=^[[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{22}%+1;%;%dm
+Also make sure TTpro's Setup / Window / Full Color is enabled, and make sure
+that Setup / Font / Enable Bold is NOT enabled.
+(info provided by John Love-Jensen <eljay@Adobe.COM>)
+
+ vim:tw=78:sw=4:ts=8:ft=help:norl:
diff --git a/runtime/doc/tags b/runtime/doc/tags
new file mode 100644
index 000000000..9a77ade8a
--- /dev/null
+++ b/runtime/doc/tags
@@ -0,0 +1,6649 @@
+! change.txt /*!*
+!! change.txt /*!!*
+# pattern.txt /*#*
+$ motion.txt /*$*
+$HOME options.txt /*$HOME*
+$HOME-use version5.txt /*$HOME-use*
+$VIM starting.txt /*$VIM*
+$VIM-use version5.txt /*$VIM-use*
+$VIMRUNTIME starting.txt /*$VIMRUNTIME*
+% motion.txt /*%*
+& change.txt /*&*
+' motion.txt /*'*
+'' motion.txt /*''*
+'( motion.txt /*'(*
+') motion.txt /*')*
+'. motion.txt /*'.*
+'0 motion.txt /*'0*
+'< motion.txt /*'<*
+'> motion.txt /*'>*
+'A motion.txt /*'A*
+'[ motion.txt /*'[*
+'] motion.txt /*']*
+'^ motion.txt /*'^*
+'a motion.txt /*'a*
+'acd' options.txt /*'acd'*
+'ai' options.txt /*'ai'*
+'akm' options.txt /*'akm'*
+'al' options.txt /*'al'*
+'aleph' options.txt /*'aleph'*
+'allowrevins' options.txt /*'allowrevins'*
+'altkeymap' options.txt /*'altkeymap'*
+'ambiwidth' options.txt /*'ambiwidth'*
+'ambw' options.txt /*'ambw'*
+'anti' options.txt /*'anti'*
+'antialias' options.txt /*'antialias'*
+'ap' vi_diff.txt /*'ap'*
+'ar' options.txt /*'ar'*
+'arab' options.txt /*'arab'*
+'arabic' options.txt /*'arabic'*
+'arabicshape' options.txt /*'arabicshape'*
+'ari' options.txt /*'ari'*
+'arshape' options.txt /*'arshape'*
+'as' todo.txt /*'as'*
+'autochdir' options.txt /*'autochdir'*
+'autoindent' options.txt /*'autoindent'*
+'autoprint' vi_diff.txt /*'autoprint'*
+'autoread' options.txt /*'autoread'*
+'autosave' todo.txt /*'autosave'*
+'autowrite' options.txt /*'autowrite'*
+'autowriteall' options.txt /*'autowriteall'*
+'aw' options.txt /*'aw'*
+'awa' options.txt /*'awa'*
+'background' options.txt /*'background'*
+'backspace' options.txt /*'backspace'*
+'backup' options.txt /*'backup'*
+'backupcopy' options.txt /*'backupcopy'*
+'backupdir' options.txt /*'backupdir'*
+'backupext' options.txt /*'backupext'*
+'backupskip' options.txt /*'backupskip'*
+'balloondelay' options.txt /*'balloondelay'*
+'ballooneval' options.txt /*'ballooneval'*
+'bdir' options.txt /*'bdir'*
+'bdlay' options.txt /*'bdlay'*
+'beautify' vi_diff.txt /*'beautify'*
+'beval' options.txt /*'beval'*
+'bex' options.txt /*'bex'*
+'bf' vi_diff.txt /*'bf'*
+'bg' options.txt /*'bg'*
+'bh' options.txt /*'bh'*
+'bin' options.txt /*'bin'*
+'binary' options.txt /*'binary'*
+'biosk' options.txt /*'biosk'*
+'bioskey' options.txt /*'bioskey'*
+'bk' options.txt /*'bk'*
+'bkc' options.txt /*'bkc'*
+'bl' options.txt /*'bl'*
+'bomb' options.txt /*'bomb'*
+'breakat' options.txt /*'breakat'*
+'brk' options.txt /*'brk'*
+'browsedir' options.txt /*'browsedir'*
+'bs' options.txt /*'bs'*
+'bsdir' options.txt /*'bsdir'*
+'bsk' options.txt /*'bsk'*
+'bt' options.txt /*'bt'*
+'bufhidden' options.txt /*'bufhidden'*
+'buflisted' options.txt /*'buflisted'*
+'buftype' options.txt /*'buftype'*
+'casemap' options.txt /*'casemap'*
+'cb' options.txt /*'cb'*
+'ccv' options.txt /*'ccv'*
+'cd' options.txt /*'cd'*
+'cdpath' options.txt /*'cdpath'*
+'cedit' options.txt /*'cedit'*
+'cf' options.txt /*'cf'*
+'ch' options.txt /*'ch'*
+'character' intro.txt /*'character'*
+'charconvert' options.txt /*'charconvert'*
+'ci' options.txt /*'ci'*
+'cin' options.txt /*'cin'*
+'cindent' options.txt /*'cindent'*
+'cink' options.txt /*'cink'*
+'cinkeys' options.txt /*'cinkeys'*
+'cino' options.txt /*'cino'*
+'cinoptions' options.txt /*'cinoptions'*
+'cinw' options.txt /*'cinw'*
+'cinwords' options.txt /*'cinwords'*
+'clipboard' options.txt /*'clipboard'*
+'cmdheight' options.txt /*'cmdheight'*
+'cmdwinheight' options.txt /*'cmdwinheight'*
+'cmp' options.txt /*'cmp'*
+'cms' options.txt /*'cms'*
+'co' options.txt /*'co'*
+'columns' options.txt /*'columns'*
+'com' options.txt /*'com'*
+'comments' options.txt /*'comments'*
+'commentstring' options.txt /*'commentstring'*
+'compatible' options.txt /*'compatible'*
+'complete' options.txt /*'complete'*
+'confirm' options.txt /*'confirm'*
+'consk' options.txt /*'consk'*
+'conskey' options.txt /*'conskey'*
+'copyindent' options.txt /*'copyindent'*
+'cp' options.txt /*'cp'*
+'cpo' options.txt /*'cpo'*
+'cpoptions' options.txt /*'cpoptions'*
+'cpt' options.txt /*'cpt'*
+'cscopepathcomp' options.txt /*'cscopepathcomp'*
+'cscopeprg' options.txt /*'cscopeprg'*
+'cscopequickfix' options.txt /*'cscopequickfix'*
+'cscopetag' options.txt /*'cscopetag'*
+'cscopetagorder' options.txt /*'cscopetagorder'*
+'cscopeverbose' options.txt /*'cscopeverbose'*
+'cspc' options.txt /*'cspc'*
+'csprg' options.txt /*'csprg'*
+'csqf' options.txt /*'csqf'*
+'cst' options.txt /*'cst'*
+'csto' options.txt /*'csto'*
+'csverb' options.txt /*'csverb'*
+'cwh' options.txt /*'cwh'*
+'debug' options.txt /*'debug'*
+'deco' options.txt /*'deco'*
+'def' options.txt /*'def'*
+'define' options.txt /*'define'*
+'delcombine' options.txt /*'delcombine'*
+'dex' options.txt /*'dex'*
+'dg' options.txt /*'dg'*
+'dict' options.txt /*'dict'*
+'dictionary' options.txt /*'dictionary'*
+'diff' options.txt /*'diff'*
+'diffexpr' options.txt /*'diffexpr'*
+'diffopt' options.txt /*'diffopt'*
+'digraph' options.txt /*'digraph'*
+'dip' options.txt /*'dip'*
+'dir' options.txt /*'dir'*
+'directory' options.txt /*'directory'*
+'display' options.txt /*'display'*
+'dy' options.txt /*'dy'*
+'ea' options.txt /*'ea'*
+'ead' options.txt /*'ead'*
+'eadirection' options.txt /*'eadirection'*
+'eb' options.txt /*'eb'*
+'ed' options.txt /*'ed'*
+'edcompatible' options.txt /*'edcompatible'*
+'ef' options.txt /*'ef'*
+'efm' options.txt /*'efm'*
+'ei' options.txt /*'ei'*
+'ek' options.txt /*'ek'*
+'enc' options.txt /*'enc'*
+'encoding' options.txt /*'encoding'*
+'endofline' options.txt /*'endofline'*
+'eol' options.txt /*'eol'*
+'ep' options.txt /*'ep'*
+'equalalways' options.txt /*'equalalways'*
+'equalprg' options.txt /*'equalprg'*
+'errorbells' options.txt /*'errorbells'*
+'errorfile' options.txt /*'errorfile'*
+'errorformat' options.txt /*'errorformat'*
+'esckeys' options.txt /*'esckeys'*
+'et' options.txt /*'et'*
+'eventignore' options.txt /*'eventignore'*
+'ex' options.txt /*'ex'*
+'expandtab' options.txt /*'expandtab'*
+'exrc' options.txt /*'exrc'*
+'fcl' options.txt /*'fcl'*
+'fcs' options.txt /*'fcs'*
+'fdc' options.txt /*'fdc'*
+'fde' options.txt /*'fde'*
+'fdi' options.txt /*'fdi'*
+'fdl' options.txt /*'fdl'*
+'fdls' options.txt /*'fdls'*
+'fdm' options.txt /*'fdm'*
+'fdn' options.txt /*'fdn'*
+'fdo' options.txt /*'fdo'*
+'fdt' options.txt /*'fdt'*
+'fe' options.txt /*'fe'*
+'fen' options.txt /*'fen'*
+'fenc' options.txt /*'fenc'*
+'fencs' options.txt /*'fencs'*
+'ff' options.txt /*'ff'*
+'ffs' options.txt /*'ffs'*
+'fileencoding' options.txt /*'fileencoding'*
+'fileencodings' options.txt /*'fileencodings'*
+'fileformat' options.txt /*'fileformat'*
+'fileformats' options.txt /*'fileformats'*
+'filetype' options.txt /*'filetype'*
+'fillchars' options.txt /*'fillchars'*
+'fk' options.txt /*'fk'*
+'fkmap' options.txt /*'fkmap'*
+'fl' vi_diff.txt /*'fl'*
+'flash' vi_diff.txt /*'flash'*
+'fml' options.txt /*'fml'*
+'fmr' options.txt /*'fmr'*
+'fo' options.txt /*'fo'*
+'foldclose' options.txt /*'foldclose'*
+'foldcolumn' options.txt /*'foldcolumn'*
+'foldenable' options.txt /*'foldenable'*
+'foldexpr' options.txt /*'foldexpr'*
+'foldignore' options.txt /*'foldignore'*
+'foldlevel' options.txt /*'foldlevel'*
+'foldlevelstart' options.txt /*'foldlevelstart'*
+'foldmarker' options.txt /*'foldmarker'*
+'foldmethod' options.txt /*'foldmethod'*
+'foldminlines' options.txt /*'foldminlines'*
+'foldnestmax' options.txt /*'foldnestmax'*
+'foldopen' options.txt /*'foldopen'*
+'foldtext' options.txt /*'foldtext'*
+'formatoptions' options.txt /*'formatoptions'*
+'formatprg' options.txt /*'formatprg'*
+'fp' options.txt /*'fp'*
+'ft' options.txt /*'ft'*
+'gcr' options.txt /*'gcr'*
+'gd' options.txt /*'gd'*
+'gdefault' options.txt /*'gdefault'*
+'gfm' options.txt /*'gfm'*
+'gfn' options.txt /*'gfn'*
+'gfs' options.txt /*'gfs'*
+'gfw' options.txt /*'gfw'*
+'ghr' options.txt /*'ghr'*
+'go' options.txt /*'go'*
+'gp' options.txt /*'gp'*
+'gr' vi_diff.txt /*'gr'*
+'graphic' vi_diff.txt /*'graphic'*
+'grepformat' options.txt /*'grepformat'*
+'grepprg' options.txt /*'grepprg'*
+'guicursor' options.txt /*'guicursor'*
+'guifont' options.txt /*'guifont'*
+'guifontset' options.txt /*'guifontset'*
+'guifontwide' options.txt /*'guifontwide'*
+'guiheadroom' options.txt /*'guiheadroom'*
+'guioptions' options.txt /*'guioptions'*
+'guipty' options.txt /*'guipty'*
+'hardtabs' vi_diff.txt /*'hardtabs'*
+'helpfile' options.txt /*'helpfile'*
+'helpheight' options.txt /*'helpheight'*
+'helplang' options.txt /*'helplang'*
+'hf' options.txt /*'hf'*
+'hh' options.txt /*'hh'*
+'hi' options.txt /*'hi'*
+'hid' options.txt /*'hid'*
+'hidden' options.txt /*'hidden'*
+'highlight' options.txt /*'highlight'*
+'history' options.txt /*'history'*
+'hk' options.txt /*'hk'*
+'hkmap' options.txt /*'hkmap'*
+'hkmapp' options.txt /*'hkmapp'*
+'hkp' options.txt /*'hkp'*
+'hl' options.txt /*'hl'*
+'hlg' options.txt /*'hlg'*
+'hls' options.txt /*'hls'*
+'hlsearch' options.txt /*'hlsearch'*
+'ht' vi_diff.txt /*'ht'*
+'ic' options.txt /*'ic'*
+'icon' options.txt /*'icon'*
+'iconstring' options.txt /*'iconstring'*
+'ignorecase' options.txt /*'ignorecase'*
+'im' options.txt /*'im'*
+'imactivatekey' options.txt /*'imactivatekey'*
+'imak' options.txt /*'imak'*
+'imc' options.txt /*'imc'*
+'imcmdline' options.txt /*'imcmdline'*
+'imd' options.txt /*'imd'*
+'imdisable' options.txt /*'imdisable'*
+'imi' options.txt /*'imi'*
+'iminsert' options.txt /*'iminsert'*
+'ims' options.txt /*'ims'*
+'imsearch' options.txt /*'imsearch'*
+'inc' options.txt /*'inc'*
+'include' options.txt /*'include'*
+'includeexpr' options.txt /*'includeexpr'*
+'incsearch' options.txt /*'incsearch'*
+'inde' options.txt /*'inde'*
+'indentexpr' options.txt /*'indentexpr'*
+'indentkeys' options.txt /*'indentkeys'*
+'indk' options.txt /*'indk'*
+'inex' options.txt /*'inex'*
+'inf' options.txt /*'inf'*
+'infercase' options.txt /*'infercase'*
+'insertmode' options.txt /*'insertmode'*
+'is' options.txt /*'is'*
+'isf' options.txt /*'isf'*
+'isfname' options.txt /*'isfname'*
+'isi' options.txt /*'isi'*
+'isident' options.txt /*'isident'*
+'isk' options.txt /*'isk'*
+'iskeyword' options.txt /*'iskeyword'*
+'isp' options.txt /*'isp'*
+'isprint' options.txt /*'isprint'*
+'joinspaces' options.txt /*'joinspaces'*
+'js' options.txt /*'js'*
+'key' options.txt /*'key'*
+'keymap' options.txt /*'keymap'*
+'keymodel' options.txt /*'keymodel'*
+'keywordprg' options.txt /*'keywordprg'*
+'km' options.txt /*'km'*
+'kmp' options.txt /*'kmp'*
+'kp' options.txt /*'kp'*
+'langmap' options.txt /*'langmap'*
+'langmenu' options.txt /*'langmenu'*
+'laststatus' options.txt /*'laststatus'*
+'lazyredraw' options.txt /*'lazyredraw'*
+'lbr' options.txt /*'lbr'*
+'lcs' options.txt /*'lcs'*
+'linebreak' options.txt /*'linebreak'*
+'lines' options.txt /*'lines'*
+'linespace' options.txt /*'linespace'*
+'lisp' options.txt /*'lisp'*
+'lispwords' options.txt /*'lispwords'*
+'list' options.txt /*'list'*
+'listchars' options.txt /*'listchars'*
+'lm' options.txt /*'lm'*
+'lmap' options.txt /*'lmap'*
+'loadplugins' options.txt /*'loadplugins'*
+'lpl' options.txt /*'lpl'*
+'ls' options.txt /*'ls'*
+'lsp' options.txt /*'lsp'*
+'lw' options.txt /*'lw'*
+'lz' options.txt /*'lz'*
+'ma' options.txt /*'ma'*
+'magic' options.txt /*'magic'*
+'makeef' options.txt /*'makeef'*
+'makeprg' options.txt /*'makeprg'*
+'mat' options.txt /*'mat'*
+'matchpairs' options.txt /*'matchpairs'*
+'matchtime' options.txt /*'matchtime'*
+'maxfuncdepth' options.txt /*'maxfuncdepth'*
+'maxmapdepth' options.txt /*'maxmapdepth'*
+'maxmem' options.txt /*'maxmem'*
+'maxmemtot' options.txt /*'maxmemtot'*
+'mef' options.txt /*'mef'*
+'menuitems' options.txt /*'menuitems'*
+'mesg' vi_diff.txt /*'mesg'*
+'mfd' options.txt /*'mfd'*
+'mh' options.txt /*'mh'*
+'mis' options.txt /*'mis'*
+'ml' options.txt /*'ml'*
+'mls' options.txt /*'mls'*
+'mm' options.txt /*'mm'*
+'mmd' options.txt /*'mmd'*
+'mmt' options.txt /*'mmt'*
+'mod' options.txt /*'mod'*
+'modeline' options.txt /*'modeline'*
+'modelines' options.txt /*'modelines'*
+'modifiable' options.txt /*'modifiable'*
+'modified' options.txt /*'modified'*
+'more' options.txt /*'more'*
+'mouse' options.txt /*'mouse'*
+'mousef' options.txt /*'mousef'*
+'mousefocus' options.txt /*'mousefocus'*
+'mousehide' options.txt /*'mousehide'*
+'mousem' options.txt /*'mousem'*
+'mousemodel' options.txt /*'mousemodel'*
+'mouses' options.txt /*'mouses'*
+'mouseshape' options.txt /*'mouseshape'*
+'mouset' options.txt /*'mouset'*
+'mousetime' options.txt /*'mousetime'*
+'mp' options.txt /*'mp'*
+'mps' options.txt /*'mps'*
+'nf' options.txt /*'nf'*
+'noacd' options.txt /*'noacd'*
+'noai' options.txt /*'noai'*
+'noakm' options.txt /*'noakm'*
+'noallowrevins' options.txt /*'noallowrevins'*
+'noaltkeymap' options.txt /*'noaltkeymap'*
+'noanti' options.txt /*'noanti'*
+'noantialias' options.txt /*'noantialias'*
+'noar' options.txt /*'noar'*
+'noarab' options.txt /*'noarab'*
+'noarabic' options.txt /*'noarabic'*
+'noarabicshape' options.txt /*'noarabicshape'*
+'noari' options.txt /*'noari'*
+'noarshape' options.txt /*'noarshape'*
+'noas' todo.txt /*'noas'*
+'noautochdir' options.txt /*'noautochdir'*
+'noautoindent' options.txt /*'noautoindent'*
+'noautoread' options.txt /*'noautoread'*
+'noautosave' todo.txt /*'noautosave'*
+'noautowrite' options.txt /*'noautowrite'*
+'noautowriteall' options.txt /*'noautowriteall'*
+'noaw' options.txt /*'noaw'*
+'noawa' options.txt /*'noawa'*
+'nobackup' options.txt /*'nobackup'*
+'noballooneval' options.txt /*'noballooneval'*
+'nobeval' options.txt /*'nobeval'*
+'nobin' options.txt /*'nobin'*
+'nobinary' options.txt /*'nobinary'*
+'nobiosk' options.txt /*'nobiosk'*
+'nobioskey' options.txt /*'nobioskey'*
+'nobk' options.txt /*'nobk'*
+'nobl' options.txt /*'nobl'*
+'nobomb' options.txt /*'nobomb'*
+'nobuflisted' options.txt /*'nobuflisted'*
+'nocf' options.txt /*'nocf'*
+'noci' options.txt /*'noci'*
+'nocin' options.txt /*'nocin'*
+'nocindent' options.txt /*'nocindent'*
+'nocompatible' options.txt /*'nocompatible'*
+'noconfirm' options.txt /*'noconfirm'*
+'noconsk' options.txt /*'noconsk'*
+'noconskey' options.txt /*'noconskey'*
+'nocopyindent' options.txt /*'nocopyindent'*
+'nocp' options.txt /*'nocp'*
+'nocscopetag' options.txt /*'nocscopetag'*
+'nocscopeverbose' options.txt /*'nocscopeverbose'*
+'nocst' options.txt /*'nocst'*
+'nocsverb' options.txt /*'nocsverb'*
+'nodeco' options.txt /*'nodeco'*
+'nodelcombine' options.txt /*'nodelcombine'*
+'nodg' options.txt /*'nodg'*
+'nodiff' options.txt /*'nodiff'*
+'nodigraph' options.txt /*'nodigraph'*
+'nodisable' options.txt /*'nodisable'*
+'noea' options.txt /*'noea'*
+'noeb' options.txt /*'noeb'*
+'noed' options.txt /*'noed'*
+'noedcompatible' options.txt /*'noedcompatible'*
+'noek' options.txt /*'noek'*
+'noendofline' options.txt /*'noendofline'*
+'noeol' options.txt /*'noeol'*
+'noequalalways' options.txt /*'noequalalways'*
+'noerrorbells' options.txt /*'noerrorbells'*
+'noesckeys' options.txt /*'noesckeys'*
+'noet' options.txt /*'noet'*
+'noex' options.txt /*'noex'*
+'noexpandtab' options.txt /*'noexpandtab'*
+'noexrc' options.txt /*'noexrc'*
+'nofen' options.txt /*'nofen'*
+'nofk' options.txt /*'nofk'*
+'nofkmap' options.txt /*'nofkmap'*
+'nofoldenable' options.txt /*'nofoldenable'*
+'nogd' options.txt /*'nogd'*
+'nogdefault' options.txt /*'nogdefault'*
+'noguipty' options.txt /*'noguipty'*
+'nohid' options.txt /*'nohid'*
+'nohidden' options.txt /*'nohidden'*
+'nohk' options.txt /*'nohk'*
+'nohkmap' options.txt /*'nohkmap'*
+'nohkmapp' options.txt /*'nohkmapp'*
+'nohkp' options.txt /*'nohkp'*
+'nohls' options.txt /*'nohls'*
+'nohlsearch' options.txt /*'nohlsearch'*
+'noic' options.txt /*'noic'*
+'noicon' options.txt /*'noicon'*
+'noignorecase' options.txt /*'noignorecase'*
+'noim' options.txt /*'noim'*
+'noimc' options.txt /*'noimc'*
+'noimcmdline' options.txt /*'noimcmdline'*
+'noimd' options.txt /*'noimd'*
+'noincsearch' options.txt /*'noincsearch'*
+'noinf' options.txt /*'noinf'*
+'noinfercase' options.txt /*'noinfercase'*
+'noinsertmode' options.txt /*'noinsertmode'*
+'nois' options.txt /*'nois'*
+'nojoinspaces' options.txt /*'nojoinspaces'*
+'nojs' options.txt /*'nojs'*
+'nolazyredraw' options.txt /*'nolazyredraw'*
+'nolbr' options.txt /*'nolbr'*
+'nolinebreak' options.txt /*'nolinebreak'*
+'nolisp' options.txt /*'nolisp'*
+'nolist' options.txt /*'nolist'*
+'noloadplugins' options.txt /*'noloadplugins'*
+'nolpl' options.txt /*'nolpl'*
+'nolz' options.txt /*'nolz'*
+'noma' options.txt /*'noma'*
+'nomagic' options.txt /*'nomagic'*
+'nomh' options.txt /*'nomh'*
+'noml' options.txt /*'noml'*
+'nomod' options.txt /*'nomod'*
+'nomodeline' options.txt /*'nomodeline'*
+'nomodifiable' options.txt /*'nomodifiable'*
+'nomodified' options.txt /*'nomodified'*
+'nomore' options.txt /*'nomore'*
+'nomousef' options.txt /*'nomousef'*
+'nomousefocus' options.txt /*'nomousefocus'*
+'nomousehide' options.txt /*'nomousehide'*
+'nonu' options.txt /*'nonu'*
+'nonumber' options.txt /*'nonumber'*
+'nopaste' options.txt /*'nopaste'*
+'nopi' options.txt /*'nopi'*
+'nopreserveindent' options.txt /*'nopreserveindent'*
+'nopreviewwindow' options.txt /*'nopreviewwindow'*
+'nopvw' options.txt /*'nopvw'*
+'noreadonly' options.txt /*'noreadonly'*
+'noremap' options.txt /*'noremap'*
+'norestorescreen' options.txt /*'norestorescreen'*
+'norevins' options.txt /*'norevins'*
+'nori' options.txt /*'nori'*
+'norightleft' options.txt /*'norightleft'*
+'norightleftcmd' options.txt /*'norightleftcmd'*
+'norl' options.txt /*'norl'*
+'norlc' options.txt /*'norlc'*
+'noro' options.txt /*'noro'*
+'nors' options.txt /*'nors'*
+'noru' options.txt /*'noru'*
+'noruler' options.txt /*'noruler'*
+'nosb' options.txt /*'nosb'*
+'nosc' options.txt /*'nosc'*
+'noscb' options.txt /*'noscb'*
+'noscrollbind' options.txt /*'noscrollbind'*
+'noscs' options.txt /*'noscs'*
+'nosecure' options.txt /*'nosecure'*
+'nosft' options.txt /*'nosft'*
+'noshellslash' options.txt /*'noshellslash'*
+'noshiftround' options.txt /*'noshiftround'*
+'noshortname' options.txt /*'noshortname'*
+'noshowcmd' options.txt /*'noshowcmd'*
+'noshowfulltag' options.txt /*'noshowfulltag'*
+'noshowmatch' options.txt /*'noshowmatch'*
+'noshowmode' options.txt /*'noshowmode'*
+'nosi' options.txt /*'nosi'*
+'nosm' options.txt /*'nosm'*
+'nosmartcase' options.txt /*'nosmartcase'*
+'nosmartindent' options.txt /*'nosmartindent'*
+'nosmarttab' options.txt /*'nosmarttab'*
+'nosmd' options.txt /*'nosmd'*
+'nosn' options.txt /*'nosn'*
+'nosol' options.txt /*'nosol'*
+'nosplitbelow' options.txt /*'nosplitbelow'*
+'nosplitright' options.txt /*'nosplitright'*
+'nospr' options.txt /*'nospr'*
+'nosr' options.txt /*'nosr'*
+'nossl' options.txt /*'nossl'*
+'nosta' options.txt /*'nosta'*
+'nostartofline' options.txt /*'nostartofline'*
+'noswapfile' options.txt /*'noswapfile'*
+'noswf' options.txt /*'noswf'*
+'nota' options.txt /*'nota'*
+'notagbsearch' options.txt /*'notagbsearch'*
+'notagrelative' options.txt /*'notagrelative'*
+'notagstack' options.txt /*'notagstack'*
+'notbi' options.txt /*'notbi'*
+'notbidi' options.txt /*'notbidi'*
+'notbs' options.txt /*'notbs'*
+'notermbidi' options.txt /*'notermbidi'*
+'noterse' options.txt /*'noterse'*
+'notextauto' options.txt /*'notextauto'*
+'notextmode' options.txt /*'notextmode'*
+'notf' options.txt /*'notf'*
+'notgst' options.txt /*'notgst'*
+'notildeop' options.txt /*'notildeop'*
+'notimeout' options.txt /*'notimeout'*
+'notitle' options.txt /*'notitle'*
+'noto' options.txt /*'noto'*
+'notop' options.txt /*'notop'*
+'notr' options.txt /*'notr'*
+'nottimeout' options.txt /*'nottimeout'*
+'nottybuiltin' options.txt /*'nottybuiltin'*
+'nottyfast' options.txt /*'nottyfast'*
+'notx' options.txt /*'notx'*
+'novb' options.txt /*'novb'*
+'novice' vi_diff.txt /*'novice'*
+'novisualbell' options.txt /*'novisualbell'*
+'nowa' options.txt /*'nowa'*
+'nowarn' options.txt /*'nowarn'*
+'nowb' options.txt /*'nowb'*
+'noweirdinvert' options.txt /*'noweirdinvert'*
+'nowfh' options.txt /*'nowfh'*
+'nowildmenu' options.txt /*'nowildmenu'*
+'nowinfixheight' options.txt /*'nowinfixheight'*
+'nowiv' options.txt /*'nowiv'*
+'nowmnu' options.txt /*'nowmnu'*
+'nowrap' options.txt /*'nowrap'*
+'nowrapscan' options.txt /*'nowrapscan'*
+'nowrite' options.txt /*'nowrite'*
+'nowriteany' options.txt /*'nowriteany'*
+'nowritebackup' options.txt /*'nowritebackup'*
+'nows' options.txt /*'nows'*
+'nrformats' options.txt /*'nrformats'*
+'nu' options.txt /*'nu'*
+'number' options.txt /*'number'*
+'oft' options.txt /*'oft'*
+'op' vi_diff.txt /*'op'*
+'open' vi_diff.txt /*'open'*
+'optimize' vi_diff.txt /*'optimize'*
+'option' intro.txt /*'option'*
+'osfiletype' options.txt /*'osfiletype'*
+'pa' options.txt /*'pa'*
+'para' options.txt /*'para'*
+'paragraphs' options.txt /*'paragraphs'*
+'paste' options.txt /*'paste'*
+'pastetoggle' options.txt /*'pastetoggle'*
+'patchexpr' options.txt /*'patchexpr'*
+'patchmode' options.txt /*'patchmode'*
+'path' options.txt /*'path'*
+'pdev' options.txt /*'pdev'*
+'penc' options.txt /*'penc'*
+'pex' options.txt /*'pex'*
+'pexpr' options.txt /*'pexpr'*
+'pfn' options.txt /*'pfn'*
+'pheader' options.txt /*'pheader'*
+'pi' options.txt /*'pi'*
+'pm' options.txt /*'pm'*
+'popt' options.txt /*'popt'*
+'preserveindent' options.txt /*'preserveindent'*
+'previewheight' options.txt /*'previewheight'*
+'previewwindow' options.txt /*'previewwindow'*
+'printdevice' options.txt /*'printdevice'*
+'printencoding' options.txt /*'printencoding'*
+'printexpr' options.txt /*'printexpr'*
+'printfont' options.txt /*'printfont'*
+'printheader' options.txt /*'printheader'*
+'printoptions' options.txt /*'printoptions'*
+'prompt' vi_diff.txt /*'prompt'*
+'pt' options.txt /*'pt'*
+'pvh' options.txt /*'pvh'*
+'pvw' options.txt /*'pvw'*
+'quote motion.txt /*'quote*
+'readonly' options.txt /*'readonly'*
+'redraw' vi_diff.txt /*'redraw'*
+'remap' options.txt /*'remap'*
+'report' options.txt /*'report'*
+'restorescreen' options.txt /*'restorescreen'*
+'revins' options.txt /*'revins'*
+'ri' options.txt /*'ri'*
+'rightleft' options.txt /*'rightleft'*
+'rightleftcmd' options.txt /*'rightleftcmd'*
+'rl' options.txt /*'rl'*
+'rlc' options.txt /*'rlc'*
+'ro' options.txt /*'ro'*
+'rs' options.txt /*'rs'*
+'rtp' options.txt /*'rtp'*
+'ru' options.txt /*'ru'*
+'ruf' options.txt /*'ruf'*
+'ruler' options.txt /*'ruler'*
+'rulerformat' options.txt /*'rulerformat'*
+'runtimepath' options.txt /*'runtimepath'*
+'sb' options.txt /*'sb'*
+'sbo' options.txt /*'sbo'*
+'sbr' options.txt /*'sbr'*
+'sc' options.txt /*'sc'*
+'scb' options.txt /*'scb'*
+'scr' options.txt /*'scr'*
+'scroll' options.txt /*'scroll'*
+'scrollbind' options.txt /*'scrollbind'*
+'scrolljump' options.txt /*'scrolljump'*
+'scrolloff' options.txt /*'scrolloff'*
+'scrollopt' options.txt /*'scrollopt'*
+'scs' options.txt /*'scs'*
+'sect' options.txt /*'sect'*
+'sections' options.txt /*'sections'*
+'secure' options.txt /*'secure'*
+'sel' options.txt /*'sel'*
+'selection' options.txt /*'selection'*
+'selectmode' options.txt /*'selectmode'*
+'sessionoptions' options.txt /*'sessionoptions'*
+'sft' options.txt /*'sft'*
+'sh' options.txt /*'sh'*
+'shcf' options.txt /*'shcf'*
+'shell' options.txt /*'shell'*
+'shellcmdflag' options.txt /*'shellcmdflag'*
+'shellpipe' options.txt /*'shellpipe'*
+'shellquote' options.txt /*'shellquote'*
+'shellredir' options.txt /*'shellredir'*
+'shellslash' options.txt /*'shellslash'*
+'shelltype' options.txt /*'shelltype'*
+'shellxquote' options.txt /*'shellxquote'*
+'shiftround' options.txt /*'shiftround'*
+'shiftwidth' options.txt /*'shiftwidth'*
+'shm' options.txt /*'shm'*
+'shortmess' options.txt /*'shortmess'*
+'shortname' options.txt /*'shortname'*
+'showbreak' options.txt /*'showbreak'*
+'showcmd' options.txt /*'showcmd'*
+'showfulltag' options.txt /*'showfulltag'*
+'showmatch' options.txt /*'showmatch'*
+'showmode' options.txt /*'showmode'*
+'shq' options.txt /*'shq'*
+'si' options.txt /*'si'*
+'sidescroll' options.txt /*'sidescroll'*
+'sidescrolloff' options.txt /*'sidescrolloff'*
+'siso' options.txt /*'siso'*
+'sj' options.txt /*'sj'*
+'slm' options.txt /*'slm'*
+'slow' vi_diff.txt /*'slow'*
+'slowopen' vi_diff.txt /*'slowopen'*
+'sm' options.txt /*'sm'*
+'smartcase' options.txt /*'smartcase'*
+'smartindent' options.txt /*'smartindent'*
+'smarttab' options.txt /*'smarttab'*
+'smd' options.txt /*'smd'*
+'sn' options.txt /*'sn'*
+'so' options.txt /*'so'*
+'softtabstop' options.txt /*'softtabstop'*
+'sol' options.txt /*'sol'*
+'sourceany' vi_diff.txt /*'sourceany'*
+'sp' options.txt /*'sp'*
+'splitbelow' options.txt /*'splitbelow'*
+'splitright' options.txt /*'splitright'*
+'spr' options.txt /*'spr'*
+'sr' options.txt /*'sr'*
+'srr' options.txt /*'srr'*
+'ss' options.txt /*'ss'*
+'ssl' options.txt /*'ssl'*
+'ssop' options.txt /*'ssop'*
+'st' options.txt /*'st'*
+'sta' options.txt /*'sta'*
+'startofline' options.txt /*'startofline'*
+'statusline' options.txt /*'statusline'*
+'stl' options.txt /*'stl'*
+'sts' options.txt /*'sts'*
+'su' options.txt /*'su'*
+'sua' options.txt /*'sua'*
+'suffixes' options.txt /*'suffixes'*
+'suffixesadd' options.txt /*'suffixesadd'*
+'sw' options.txt /*'sw'*
+'swapfile' options.txt /*'swapfile'*
+'swapsync' options.txt /*'swapsync'*
+'swb' options.txt /*'swb'*
+'swf' options.txt /*'swf'*
+'switchbuf' options.txt /*'switchbuf'*
+'sws' options.txt /*'sws'*
+'sxq' options.txt /*'sxq'*
+'syn' options.txt /*'syn'*
+'syntax' options.txt /*'syntax'*
+'t_#2' term.txt /*'t_#2'*
+'t_#4' term.txt /*'t_#4'*
+'t_%1' term.txt /*'t_%1'*
+'t_%i' term.txt /*'t_%i'*
+'t_&8' term.txt /*'t_&8'*
+'t_@7' term.txt /*'t_@7'*
+'t_AB' term.txt /*'t_AB'*
+'t_AF' term.txt /*'t_AF'*
+'t_AL' term.txt /*'t_AL'*
+'t_CS' term.txt /*'t_CS'*
+'t_CV' term.txt /*'t_CV'*
+'t_Co' term.txt /*'t_Co'*
+'t_DL' term.txt /*'t_DL'*
+'t_F1' term.txt /*'t_F1'*
+'t_F2' term.txt /*'t_F2'*
+'t_F3' term.txt /*'t_F3'*
+'t_F4' term.txt /*'t_F4'*
+'t_F5' term.txt /*'t_F5'*
+'t_F6' term.txt /*'t_F6'*
+'t_F7' term.txt /*'t_F7'*
+'t_F8' term.txt /*'t_F8'*
+'t_F9' term.txt /*'t_F9'*
+'t_IE' term.txt /*'t_IE'*
+'t_IS' term.txt /*'t_IS'*
+'t_K1' term.txt /*'t_K1'*
+'t_K3' term.txt /*'t_K3'*
+'t_K4' term.txt /*'t_K4'*
+'t_K5' term.txt /*'t_K5'*
+'t_K6' term.txt /*'t_K6'*
+'t_K7' term.txt /*'t_K7'*
+'t_K8' term.txt /*'t_K8'*
+'t_K9' term.txt /*'t_K9'*
+'t_KA' term.txt /*'t_KA'*
+'t_KB' term.txt /*'t_KB'*
+'t_KC' term.txt /*'t_KC'*
+'t_KD' term.txt /*'t_KD'*
+'t_KE' term.txt /*'t_KE'*
+'t_KF' term.txt /*'t_KF'*
+'t_KG' term.txt /*'t_KG'*
+'t_KH' term.txt /*'t_KH'*
+'t_KI' term.txt /*'t_KI'*
+'t_KJ' term.txt /*'t_KJ'*
+'t_KK' term.txt /*'t_KK'*
+'t_KL' term.txt /*'t_KL'*
+'t_RI' term.txt /*'t_RI'*
+'t_RV' term.txt /*'t_RV'*
+'t_Sb' term.txt /*'t_Sb'*
+'t_Sf' term.txt /*'t_Sf'*
+'t_WP' term.txt /*'t_WP'*
+'t_WS' term.txt /*'t_WS'*
+'t_ZH' term.txt /*'t_ZH'*
+'t_ZR' term.txt /*'t_ZR'*
+'t_al' term.txt /*'t_al'*
+'t_bc' term.txt /*'t_bc'*
+'t_cd' term.txt /*'t_cd'*
+'t_ce' term.txt /*'t_ce'*
+'t_cl' term.txt /*'t_cl'*
+'t_cm' term.txt /*'t_cm'*
+'t_cs' term.txt /*'t_cs'*
+'t_da' term.txt /*'t_da'*
+'t_db' term.txt /*'t_db'*
+'t_dl' term.txt /*'t_dl'*
+'t_fs' term.txt /*'t_fs'*
+'t_k1' term.txt /*'t_k1'*
+'t_k2' term.txt /*'t_k2'*
+'t_k3' term.txt /*'t_k3'*
+'t_k4' term.txt /*'t_k4'*
+'t_k5' term.txt /*'t_k5'*
+'t_k6' term.txt /*'t_k6'*
+'t_k7' term.txt /*'t_k7'*
+'t_k8' term.txt /*'t_k8'*
+'t_k9' term.txt /*'t_k9'*
+'t_k;' term.txt /*'t_k;'*
+'t_kB' term.txt /*'t_kB'*
+'t_kD' term.txt /*'t_kD'*
+'t_kI' term.txt /*'t_kI'*
+'t_kN' term.txt /*'t_kN'*
+'t_kP' term.txt /*'t_kP'*
+'t_kb' term.txt /*'t_kb'*
+'t_kd' term.txt /*'t_kd'*
+'t_ke' term.txt /*'t_ke'*
+'t_kh' term.txt /*'t_kh'*
+'t_kl' term.txt /*'t_kl'*
+'t_kr' term.txt /*'t_kr'*
+'t_ks' term.txt /*'t_ks'*
+'t_ku' term.txt /*'t_ku'*
+'t_le' term.txt /*'t_le'*
+'t_mb' term.txt /*'t_mb'*
+'t_md' term.txt /*'t_md'*
+'t_me' term.txt /*'t_me'*
+'t_mr' term.txt /*'t_mr'*
+'t_ms' term.txt /*'t_ms'*
+'t_nd' term.txt /*'t_nd'*
+'t_op' term.txt /*'t_op'*
+'t_se' term.txt /*'t_se'*
+'t_so' term.txt /*'t_so'*
+'t_sr' term.txt /*'t_sr'*
+'t_star7' term.txt /*'t_star7'*
+'t_te' term.txt /*'t_te'*
+'t_ti' term.txt /*'t_ti'*
+'t_ts' term.txt /*'t_ts'*
+'t_ue' term.txt /*'t_ue'*
+'t_us' term.txt /*'t_us'*
+'t_ut' term.txt /*'t_ut'*
+'t_vb' term.txt /*'t_vb'*
+'t_ve' term.txt /*'t_ve'*
+'t_vi' term.txt /*'t_vi'*
+'t_vs' term.txt /*'t_vs'*
+'t_xs' term.txt /*'t_xs'*
+'ta' options.txt /*'ta'*
+'tabstop' options.txt /*'tabstop'*
+'tag' options.txt /*'tag'*
+'tagbsearch' options.txt /*'tagbsearch'*
+'taglength' options.txt /*'taglength'*
+'tagrelative' options.txt /*'tagrelative'*
+'tags' options.txt /*'tags'*
+'tagstack' options.txt /*'tagstack'*
+'tb' options.txt /*'tb'*
+'tbi' options.txt /*'tbi'*
+'tbidi' options.txt /*'tbidi'*
+'tbis' options.txt /*'tbis'*
+'tbs' options.txt /*'tbs'*
+'tenc' options.txt /*'tenc'*
+'term' options.txt /*'term'*
+'termbidi' options.txt /*'termbidi'*
+'termencoding' options.txt /*'termencoding'*
+'terse' options.txt /*'terse'*
+'textauto' options.txt /*'textauto'*
+'textmode' options.txt /*'textmode'*
+'textwidth' options.txt /*'textwidth'*
+'tf' options.txt /*'tf'*
+'tgst' options.txt /*'tgst'*
+'thesaurus' options.txt /*'thesaurus'*
+'tildeop' options.txt /*'tildeop'*
+'timeout' options.txt /*'timeout'*
+'timeoutlen' options.txt /*'timeoutlen'*
+'title' options.txt /*'title'*
+'titlelen' options.txt /*'titlelen'*
+'titleold' options.txt /*'titleold'*
+'titlestring' options.txt /*'titlestring'*
+'tl' options.txt /*'tl'*
+'tm' options.txt /*'tm'*
+'to' options.txt /*'to'*
+'toolbar' options.txt /*'toolbar'*
+'toolbariconsize' options.txt /*'toolbariconsize'*
+'top' options.txt /*'top'*
+'tr' options.txt /*'tr'*
+'ts' options.txt /*'ts'*
+'tsl' options.txt /*'tsl'*
+'tsr' options.txt /*'tsr'*
+'ttimeout' options.txt /*'ttimeout'*
+'ttimeoutlen' options.txt /*'ttimeoutlen'*
+'ttm' options.txt /*'ttm'*
+'tty' options.txt /*'tty'*
+'ttybuiltin' options.txt /*'ttybuiltin'*
+'ttyfast' options.txt /*'ttyfast'*
+'ttym' options.txt /*'ttym'*
+'ttymouse' options.txt /*'ttymouse'*
+'ttyscroll' options.txt /*'ttyscroll'*
+'ttytype' options.txt /*'ttytype'*
+'tw' options.txt /*'tw'*
+'tx' options.txt /*'tx'*
+'uc' options.txt /*'uc'*
+'ul' options.txt /*'ul'*
+'undolevels' options.txt /*'undolevels'*
+'updatecount' options.txt /*'updatecount'*
+'updatetime' options.txt /*'updatetime'*
+'ut' options.txt /*'ut'*
+'vb' options.txt /*'vb'*
+'vbs' options.txt /*'vbs'*
+'vdir' options.txt /*'vdir'*
+'ve' options.txt /*'ve'*
+'verbose' options.txt /*'verbose'*
+'vi' options.txt /*'vi'*
+'viewdir' options.txt /*'viewdir'*
+'viewoptions' options.txt /*'viewoptions'*
+'viminfo' options.txt /*'viminfo'*
+'virtualedit' options.txt /*'virtualedit'*
+'visualbell' options.txt /*'visualbell'*
+'vop' options.txt /*'vop'*
+'w1200' vi_diff.txt /*'w1200'*
+'w300' vi_diff.txt /*'w300'*
+'w9600' vi_diff.txt /*'w9600'*
+'wa' options.txt /*'wa'*
+'wak' options.txt /*'wak'*
+'warn' options.txt /*'warn'*
+'wb' options.txt /*'wb'*
+'wc' options.txt /*'wc'*
+'wcm' options.txt /*'wcm'*
+'wd' options.txt /*'wd'*
+'weirdinvert' options.txt /*'weirdinvert'*
+'wfh' options.txt /*'wfh'*
+'wh' options.txt /*'wh'*
+'whichwrap' options.txt /*'whichwrap'*
+'wi' vi_diff.txt /*'wi'*
+'wig' options.txt /*'wig'*
+'wildchar' options.txt /*'wildchar'*
+'wildcharm' options.txt /*'wildcharm'*
+'wildignore' options.txt /*'wildignore'*
+'wildmenu' options.txt /*'wildmenu'*
+'wildmode' options.txt /*'wildmode'*
+'wim' options.txt /*'wim'*
+'winaltkeys' options.txt /*'winaltkeys'*
+'window' vi_diff.txt /*'window'*
+'winfixheight' options.txt /*'winfixheight'*
+'winheight' options.txt /*'winheight'*
+'winminheight' options.txt /*'winminheight'*
+'winminwidth' options.txt /*'winminwidth'*
+'winwidth' options.txt /*'winwidth'*
+'wiv' options.txt /*'wiv'*
+'wiw' options.txt /*'wiw'*
+'wm' options.txt /*'wm'*
+'wmh' options.txt /*'wmh'*
+'wmnu' options.txt /*'wmnu'*
+'wmw' options.txt /*'wmw'*
+'wrap' options.txt /*'wrap'*
+'wrapmargin' options.txt /*'wrapmargin'*
+'wrapscan' options.txt /*'wrapscan'*
+'write' options.txt /*'write'*
+'writeany' options.txt /*'writeany'*
+'writebackup' options.txt /*'writebackup'*
+'writedelay' options.txt /*'writedelay'*
+'ws' options.txt /*'ws'*
+'ww' options.txt /*'ww'*
+'{ motion.txt /*'{*
+'} motion.txt /*'}*
+( motion.txt /*(*
+) motion.txt /*)*
++ motion.txt /*+*
+++bin editing.txt /*++bin*
+++builtin_terms various.txt /*++builtin_terms*
+++enc editing.txt /*++enc*
+++ff editing.txt /*++ff*
+++nobin editing.txt /*++nobin*
+++opt editing.txt /*++opt*
++ARP various.txt /*+ARP*
++GUI_Athena various.txt /*+GUI_Athena*
++GUI_BeOS various.txt /*+GUI_BeOS*
++GUI_GTK various.txt /*+GUI_GTK*
++GUI_Motif various.txt /*+GUI_Motif*
++GUI_Photon various.txt /*+GUI_Photon*
++GUI_neXtaw various.txt /*+GUI_neXtaw*
++X11 various.txt /*+X11*
++arabic various.txt /*+arabic*
++autocmd various.txt /*+autocmd*
++balloon_eval various.txt /*+balloon_eval*
++browse various.txt /*+browse*
++builtin_terms various.txt /*+builtin_terms*
++byte_offset various.txt /*+byte_offset*
++cindent various.txt /*+cindent*
++clientserver various.txt /*+clientserver*
++clipboard various.txt /*+clipboard*
++cmd editing.txt /*+cmd*
++cmdline_compl various.txt /*+cmdline_compl*
++cmdline_hist various.txt /*+cmdline_hist*
++cmdline_info various.txt /*+cmdline_info*
++comments various.txt /*+comments*
++cryptv various.txt /*+cryptv*
++cscope various.txt /*+cscope*
++dialog_con various.txt /*+dialog_con*
++dialog_con_gui various.txt /*+dialog_con_gui*
++dialog_gui various.txt /*+dialog_gui*
++diff various.txt /*+diff*
++digraphs various.txt /*+digraphs*
++dnd various.txt /*+dnd*
++emacs_tags various.txt /*+emacs_tags*
++eval various.txt /*+eval*
++ex_extra various.txt /*+ex_extra*
++extra_search various.txt /*+extra_search*
++farsi various.txt /*+farsi*
++feature-list various.txt /*+feature-list*
++file_in_path various.txt /*+file_in_path*
++find_in_path various.txt /*+find_in_path*
++folding various.txt /*+folding*
++footer various.txt /*+footer*
++fork various.txt /*+fork*
++gettext various.txt /*+gettext*
++hangul_input various.txt /*+hangul_input*
++iconv various.txt /*+iconv*
++insert_expand various.txt /*+insert_expand*
++jumplist various.txt /*+jumplist*
++keymap various.txt /*+keymap*
++langmap various.txt /*+langmap*
++libcall various.txt /*+libcall*
++linebreak various.txt /*+linebreak*
++lispindent various.txt /*+lispindent*
++listcmds various.txt /*+listcmds*
++localmap various.txt /*+localmap*
++menu various.txt /*+menu*
++mksession various.txt /*+mksession*
++modify_fname various.txt /*+modify_fname*
++mouse various.txt /*+mouse*
++mouse_dec various.txt /*+mouse_dec*
++mouse_gpm various.txt /*+mouse_gpm*
++mouse_netterm various.txt /*+mouse_netterm*
++mouse_pterm various.txt /*+mouse_pterm*
++mouse_xterm various.txt /*+mouse_xterm*
++mouseshape various.txt /*+mouseshape*
++multi_byte various.txt /*+multi_byte*
++multi_byte_ime various.txt /*+multi_byte_ime*
++multi_lang various.txt /*+multi_lang*
++netbeans_intg various.txt /*+netbeans_intg*
++ole various.txt /*+ole*
++osfiletype various.txt /*+osfiletype*
++path_extra various.txt /*+path_extra*
++perl various.txt /*+perl*
++postscript various.txt /*+postscript*
++printer various.txt /*+printer*
++python various.txt /*+python*
++quickfix various.txt /*+quickfix*
++rightleft various.txt /*+rightleft*
++ruby various.txt /*+ruby*
++scrollbind various.txt /*+scrollbind*
++signs various.txt /*+signs*
++smartindent various.txt /*+smartindent*
++sniff various.txt /*+sniff*
++statusline various.txt /*+statusline*
++sun_workshop various.txt /*+sun_workshop*
++syntax various.txt /*+syntax*
++system() various.txt /*+system()*
++tag_any_white various.txt /*+tag_any_white*
++tag_binary various.txt /*+tag_binary*
++tag_old_static various.txt /*+tag_old_static*
++tcl various.txt /*+tcl*
++terminfo various.txt /*+terminfo*
++termresponse various.txt /*+termresponse*
++textobjects various.txt /*+textobjects*
++tgetent various.txt /*+tgetent*
++title various.txt /*+title*
++toolbar various.txt /*+toolbar*
++user_commands various.txt /*+user_commands*
++vertsplit various.txt /*+vertsplit*
++viminfo various.txt /*+viminfo*
++virtualedit various.txt /*+virtualedit*
++visual various.txt /*+visual*
++visualextra various.txt /*+visualextra*
++vreplace various.txt /*+vreplace*
++wildignore various.txt /*+wildignore*
++wildmenu various.txt /*+wildmenu*
++windows various.txt /*+windows*
++writebackup various.txt /*+writebackup*
++xfontset various.txt /*+xfontset*
++xim various.txt /*+xim*
++xsmp various.txt /*+xsmp*
++xsmp_interact various.txt /*+xsmp_interact*
++xterm_clipboard various.txt /*+xterm_clipboard*
++xterm_save various.txt /*+xterm_save*
+, motion.txt /*,*
+- motion.txt /*-*
+-+ starting.txt /*-+*
+-+/ starting.txt /*-+\/*
+-+c starting.txt /*-+c*
+-+reverse gui_x11.txt /*-+reverse*
+-+rv gui_x11.txt /*-+rv*
+-- starting.txt /*--*
+--- starting.txt /*---*
+--cmd starting.txt /*--cmd*
+--echo-wid starting.txt /*--echo-wid*
+--help starting.txt /*--help*
+--literal starting.txt /*--literal*
+--nofork starting.txt /*--nofork*
+--noplugin starting.txt /*--noplugin*
+--remote remote.txt /*--remote*
+--remote-expr remote.txt /*--remote-expr*
+--remote-send remote.txt /*--remote-send*
+--remote-silent remote.txt /*--remote-silent*
+--remote-wait remote.txt /*--remote-wait*
+--remote-wait-silent remote.txt /*--remote-wait-silent*
+--role starting.txt /*--role*
+--serverlist remote.txt /*--serverlist*
+--servername remote.txt /*--servername*
+--socketid starting.txt /*--socketid*
+--version starting.txt /*--version*
+-A starting.txt /*-A*
+-C starting.txt /*-C*
+-D starting.txt /*-D*
+-E starting.txt /*-E*
+-F starting.txt /*-F*
+-H starting.txt /*-H*
+-L starting.txt /*-L*
+-M starting.txt /*-M*
+-N starting.txt /*-N*
+-O starting.txt /*-O*
+-P starting.txt /*-P*
+-R starting.txt /*-R*
+-S starting.txt /*-S*
+-T starting.txt /*-T*
+-U starting.txt /*-U*
+-V starting.txt /*-V*
+-W starting.txt /*-W*
+-X starting.txt /*-X*
+-Z starting.txt /*-Z*
+-b starting.txt /*-b*
+-background gui_x11.txt /*-background*
+-bg gui_x11.txt /*-bg*
+-boldfont gui_x11.txt /*-boldfont*
+-borderwidth gui_x11.txt /*-borderwidth*
+-bw gui_x11.txt /*-bw*
+-c starting.txt /*-c*
+-d starting.txt /*-d*
+-dev starting.txt /*-dev*
+-display gui_x11.txt /*-display*
+-e starting.txt /*-e*
+-f starting.txt /*-f*
+-fg gui_x11.txt /*-fg*
+-file starting.txt /*-file*
+-fn gui_x11.txt /*-fn*
+-font gui_x11.txt /*-font*
+-foreground gui_x11.txt /*-foreground*
+-g starting.txt /*-g*
+-geom gui_x11.txt /*-geom*
+-geometry gui_x11.txt /*-geometry*
+-geometry-example gui_x11.txt /*-geometry-example*
+-gui gui_x11.txt /*-gui*
+-h starting.txt /*-h*
+-i starting.txt /*-i*
+-iconic gui_x11.txt /*-iconic*
+-italicfont gui_x11.txt /*-italicfont*
+-l starting.txt /*-l*
+-m starting.txt /*-m*
+-menufont gui_x11.txt /*-menufont*
+-menufontset gui_x11.txt /*-menufontset*
+-menuheight gui_x11.txt /*-menuheight*
+-mf gui_x11.txt /*-mf*
+-mh gui_x11.txt /*-mh*
+-n starting.txt /*-n*
+-nb starting.txt /*-nb*
+-o starting.txt /*-o*
+-q starting.txt /*-q*
+-qf starting.txt /*-qf*
+-r starting.txt /*-r*
+-register if_ole.txt /*-register*
+-reverse gui_x11.txt /*-reverse*
+-rv gui_x11.txt /*-rv*
+-s starting.txt /*-s*
+-s-ex starting.txt /*-s-ex*
+-scrollbarwidth gui_x11.txt /*-scrollbarwidth*
+-silent if_ole.txt /*-silent*
+-sw gui_x11.txt /*-sw*
+-t starting.txt /*-t*
+-tag starting.txt /*-tag*
+-u starting.txt /*-u*
+-ul gui_x11.txt /*-ul*
+-unregister if_ole.txt /*-unregister*
+-v starting.txt /*-v*
+-vim starting.txt /*-vim*
+-w starting.txt /*-w*
+-w_nr starting.txt /*-w_nr*
+-x starting.txt /*-x*
+-xrm gui_x11.txt /*-xrm*
+-y starting.txt /*-y*
+. repeat.txt /*.*
+.Xdefaults gui_x11.txt /*.Xdefaults*
+.exrc starting.txt /*.exrc*
+.gvimrc gui.txt /*.gvimrc*
+.vimrc starting.txt /*.vimrc*
+/ pattern.txt /*\/*
+/$ pattern.txt /*\/$*
+/. pattern.txt /*\/.*
+//; pattern.txt /*\/\/;*
+/<CR> pattern.txt /*\/<CR>*
+/[] pattern.txt /*\/[]*
+/\ pattern.txt /*\/\\*
+/\$ pattern.txt /*\/\\$*
+/\%# pattern.txt /*\/\\%#*
+/\%$ pattern.txt /*\/\\%$*
+/\%( pattern.txt /*\/\\%(*
+/\%(\) pattern.txt /*\/\\%(\\)*
+/\%<c pattern.txt /*\/\\%<c*
+/\%<l pattern.txt /*\/\\%<l*
+/\%<v pattern.txt /*\/\\%<v*
+/\%>c pattern.txt /*\/\\%>c*
+/\%>l pattern.txt /*\/\\%>l*
+/\%>v pattern.txt /*\/\\%>v*
+/\%[] pattern.txt /*\/\\%[]*
+/\%^ pattern.txt /*\/\\%^*
+/\%c pattern.txt /*\/\\%c*
+/\%l pattern.txt /*\/\\%l*
+/\%v pattern.txt /*\/\\%v*
+/\& pattern.txt /*\/\\&*
+/\( pattern.txt /*\/\\(*
+/\(\) pattern.txt /*\/\\(\\)*
+/\) pattern.txt /*\/\\)*
+/\+ pattern.txt /*\/\\+*
+/\. pattern.txt /*\/\\.*
+/\1 pattern.txt /*\/\\1*
+/\2 pattern.txt /*\/\\2*
+/\3 pattern.txt /*\/\\3*
+/\9 pattern.txt /*\/\\9*
+/\< pattern.txt /*\/\\<*
+/\= pattern.txt /*\/\\=*
+/\> pattern.txt /*\/\\>*
+/\? pattern.txt /*\/\\?*
+/\@! pattern.txt /*\/\\@!*
+/\@<! pattern.txt /*\/\\@<!*
+/\@<= pattern.txt /*\/\\@<=*
+/\@= pattern.txt /*\/\\@=*
+/\@> pattern.txt /*\/\\@>*
+/\A pattern.txt /*\/\\A*
+/\C pattern.txt /*\/\\C*
+/\D pattern.txt /*\/\\D*
+/\F pattern.txt /*\/\\F*
+/\H pattern.txt /*\/\\H*
+/\I pattern.txt /*\/\\I*
+/\K pattern.txt /*\/\\K*
+/\L pattern.txt /*\/\\L*
+/\M pattern.txt /*\/\\M*
+/\O pattern.txt /*\/\\O*
+/\P pattern.txt /*\/\\P*
+/\S pattern.txt /*\/\\S*
+/\U pattern.txt /*\/\\U*
+/\V pattern.txt /*\/\\V*
+/\W pattern.txt /*\/\\W*
+/\X pattern.txt /*\/\\X*
+/\Z pattern.txt /*\/\\Z*
+/\[] pattern.txt /*\/\\[]*
+/\\ pattern.txt /*\/\\\\*
+/\] pattern.txt /*\/\\]*
+/\^ pattern.txt /*\/\\^*
+/\_ pattern.txt /*\/\\_*
+/\_$ pattern.txt /*\/\\_$*
+/\_. pattern.txt /*\/\\_.*
+/\_A pattern.txt /*\/\\_A*
+/\_D pattern.txt /*\/\\_D*
+/\_F pattern.txt /*\/\\_F*
+/\_H pattern.txt /*\/\\_H*
+/\_I pattern.txt /*\/\\_I*
+/\_K pattern.txt /*\/\\_K*
+/\_L pattern.txt /*\/\\_L*
+/\_O pattern.txt /*\/\\_O*
+/\_P pattern.txt /*\/\\_P*
+/\_S pattern.txt /*\/\\_S*
+/\_U pattern.txt /*\/\\_U*
+/\_W pattern.txt /*\/\\_W*
+/\_X pattern.txt /*\/\\_X*
+/\_[] pattern.txt /*\/\\_[]*
+/\_^ pattern.txt /*\/\\_^*
+/\_a pattern.txt /*\/\\_a*
+/\_d pattern.txt /*\/\\_d*
+/\_f pattern.txt /*\/\\_f*
+/\_h pattern.txt /*\/\\_h*
+/\_i pattern.txt /*\/\\_i*
+/\_k pattern.txt /*\/\\_k*
+/\_l pattern.txt /*\/\\_l*
+/\_o pattern.txt /*\/\\_o*
+/\_p pattern.txt /*\/\\_p*
+/\_s pattern.txt /*\/\\_s*
+/\_u pattern.txt /*\/\\_u*
+/\_w pattern.txt /*\/\\_w*
+/\_x pattern.txt /*\/\\_x*
+/\a pattern.txt /*\/\\a*
+/\b pattern.txt /*\/\\b*
+/\bar pattern.txt /*\/\\bar*
+/\c pattern.txt /*\/\\c*
+/\d pattern.txt /*\/\\d*
+/\e pattern.txt /*\/\\e*
+/\f pattern.txt /*\/\\f*
+/\h pattern.txt /*\/\\h*
+/\i pattern.txt /*\/\\i*
+/\k pattern.txt /*\/\\k*
+/\l pattern.txt /*\/\\l*
+/\m pattern.txt /*\/\\m*
+/\n pattern.txt /*\/\\n*
+/\o pattern.txt /*\/\\o*
+/\p pattern.txt /*\/\\p*
+/\r pattern.txt /*\/\\r*
+/\s pattern.txt /*\/\\s*
+/\star pattern.txt /*\/\\star*
+/\t pattern.txt /*\/\\t*
+/\u pattern.txt /*\/\\u*
+/\v pattern.txt /*\/\\v*
+/\w pattern.txt /*\/\\w*
+/\x pattern.txt /*\/\\x*
+/\z( syntax.txt /*\/\\z(*
+/\z(\) syntax.txt /*\/\\z(\\)*
+/\z1 syntax.txt /*\/\\z1*
+/\z2 syntax.txt /*\/\\z2*
+/\z3 syntax.txt /*\/\\z3*
+/\z4 syntax.txt /*\/\\z4*
+/\z5 syntax.txt /*\/\\z5*
+/\z6 syntax.txt /*\/\\z6*
+/\z7 syntax.txt /*\/\\z7*
+/\z8 syntax.txt /*\/\\z8*
+/\z9 syntax.txt /*\/\\z9*
+/\ze pattern.txt /*\/\\ze*
+/\zs pattern.txt /*\/\\zs*
+/\{ pattern.txt /*\/\\{*
+/\{- pattern.txt /*\/\\{-*
+/\~ pattern.txt /*\/\\~*
+/^ pattern.txt /*\/^*
+/atom pattern.txt /*\/atom*
+/bar pattern.txt /*\/bar*
+/branch pattern.txt /*\/branch*
+/collection pattern.txt /*\/collection*
+/concat pattern.txt /*\/concat*
+/dyn various.txt /*\/dyn*
+/ignorecase pattern.txt /*\/ignorecase*
+/magic pattern.txt /*\/magic*
+/multi pattern.txt /*\/multi*
+/ordinary-atom pattern.txt /*\/ordinary-atom*
+/pattern pattern.txt /*\/pattern*
+/piece pattern.txt /*\/piece*
+/star pattern.txt /*\/star*
+/zero-width pattern.txt /*\/zero-width*
+/~ pattern.txt /*\/~*
+0 motion.txt /*0*
+01.1 usr_01.txt /*01.1*
+01.2 usr_01.txt /*01.2*
+01.3 usr_01.txt /*01.3*
+01.4 usr_01.txt /*01.4*
+02.1 usr_02.txt /*02.1*
+02.2 usr_02.txt /*02.2*
+02.3 usr_02.txt /*02.3*
+02.4 usr_02.txt /*02.4*
+02.5 usr_02.txt /*02.5*
+02.6 usr_02.txt /*02.6*
+02.7 usr_02.txt /*02.7*
+02.8 usr_02.txt /*02.8*
+03.1 usr_03.txt /*03.1*
+03.10 usr_03.txt /*03.10*
+03.2 usr_03.txt /*03.2*
+03.3 usr_03.txt /*03.3*
+03.4 usr_03.txt /*03.4*
+03.5 usr_03.txt /*03.5*
+03.6 usr_03.txt /*03.6*
+03.7 usr_03.txt /*03.7*
+03.8 usr_03.txt /*03.8*
+03.9 usr_03.txt /*03.9*
+04.1 usr_04.txt /*04.1*
+04.10 usr_04.txt /*04.10*
+04.2 usr_04.txt /*04.2*
+04.3 usr_04.txt /*04.3*
+04.4 usr_04.txt /*04.4*
+04.5 usr_04.txt /*04.5*
+04.6 usr_04.txt /*04.6*
+04.7 usr_04.txt /*04.7*
+04.8 usr_04.txt /*04.8*
+04.9 usr_04.txt /*04.9*
+05.1 usr_05.txt /*05.1*
+05.2 usr_05.txt /*05.2*
+05.3 usr_05.txt /*05.3*
+05.4 usr_05.txt /*05.4*
+05.5 usr_05.txt /*05.5*
+05.6 usr_05.txt /*05.6*
+05.7 usr_05.txt /*05.7*
+06.1 usr_06.txt /*06.1*
+06.2 usr_06.txt /*06.2*
+06.3 usr_06.txt /*06.3*
+06.4 usr_06.txt /*06.4*
+06.5 usr_06.txt /*06.5*
+06.6 usr_06.txt /*06.6*
+07.1 usr_07.txt /*07.1*
+07.2 usr_07.txt /*07.2*
+07.3 usr_07.txt /*07.3*
+07.4 usr_07.txt /*07.4*
+07.5 usr_07.txt /*07.5*
+07.6 usr_07.txt /*07.6*
+07.7 usr_07.txt /*07.7*
+08.1 usr_08.txt /*08.1*
+08.2 usr_08.txt /*08.2*
+08.3 usr_08.txt /*08.3*
+08.4 usr_08.txt /*08.4*
+08.5 usr_08.txt /*08.5*
+08.6 usr_08.txt /*08.6*
+08.7 usr_08.txt /*08.7*
+08.8 usr_08.txt /*08.8*
+09.1 usr_09.txt /*09.1*
+09.2 usr_09.txt /*09.2*
+09.3 usr_09.txt /*09.3*
+09.4 usr_09.txt /*09.4*
+10.1 usr_10.txt /*10.1*
+10.2 usr_10.txt /*10.2*
+10.3 usr_10.txt /*10.3*
+10.4 usr_10.txt /*10.4*
+10.5 usr_10.txt /*10.5*
+10.6 usr_10.txt /*10.6*
+10.7 usr_10.txt /*10.7*
+10.8 usr_10.txt /*10.8*
+10.9 usr_10.txt /*10.9*
+11.1 usr_11.txt /*11.1*
+11.2 usr_11.txt /*11.2*
+11.3 usr_11.txt /*11.3*
+11.4 usr_11.txt /*11.4*
+12.1 usr_12.txt /*12.1*
+12.2 usr_12.txt /*12.2*
+12.3 usr_12.txt /*12.3*
+12.4 usr_12.txt /*12.4*
+12.5 usr_12.txt /*12.5*
+12.6 usr_12.txt /*12.6*
+12.7 usr_12.txt /*12.7*
+12.8 usr_12.txt /*12.8*
+20.1 usr_20.txt /*20.1*
+20.2 usr_20.txt /*20.2*
+20.3 usr_20.txt /*20.3*
+20.4 usr_20.txt /*20.4*
+20.5 usr_20.txt /*20.5*
+21.1 usr_21.txt /*21.1*
+21.2 usr_21.txt /*21.2*
+21.3 usr_21.txt /*21.3*
+21.4 usr_21.txt /*21.4*
+21.5 usr_21.txt /*21.5*
+21.6 usr_21.txt /*21.6*
+22.1 usr_22.txt /*22.1*
+22.2 usr_22.txt /*22.2*
+22.3 usr_22.txt /*22.3*
+22.4 usr_22.txt /*22.4*
+23.1 usr_23.txt /*23.1*
+23.2 usr_23.txt /*23.2*
+23.3 usr_23.txt /*23.3*
+23.4 usr_23.txt /*23.4*
+23.5 usr_23.txt /*23.5*
+24.1 usr_24.txt /*24.1*
+24.10 usr_24.txt /*24.10*
+24.2 usr_24.txt /*24.2*
+24.3 usr_24.txt /*24.3*
+24.4 usr_24.txt /*24.4*
+24.5 usr_24.txt /*24.5*
+24.6 usr_24.txt /*24.6*
+24.7 usr_24.txt /*24.7*
+24.8 usr_24.txt /*24.8*
+24.9 usr_24.txt /*24.9*
+25.1 usr_25.txt /*25.1*
+25.2 usr_25.txt /*25.2*
+25.3 usr_25.txt /*25.3*
+25.4 usr_25.txt /*25.4*
+25.5 usr_25.txt /*25.5*
+26.1 usr_26.txt /*26.1*
+26.2 usr_26.txt /*26.2*
+26.3 usr_26.txt /*26.3*
+26.4 usr_26.txt /*26.4*
+27.1 usr_27.txt /*27.1*
+27.2 usr_27.txt /*27.2*
+27.3 usr_27.txt /*27.3*
+27.4 usr_27.txt /*27.4*
+27.5 usr_27.txt /*27.5*
+27.6 usr_27.txt /*27.6*
+27.7 usr_27.txt /*27.7*
+27.8 usr_27.txt /*27.8*
+27.9 usr_27.txt /*27.9*
+28.1 usr_28.txt /*28.1*
+28.10 usr_28.txt /*28.10*
+28.2 usr_28.txt /*28.2*
+28.3 usr_28.txt /*28.3*
+28.4 usr_28.txt /*28.4*
+28.5 usr_28.txt /*28.5*
+28.6 usr_28.txt /*28.6*
+28.7 usr_28.txt /*28.7*
+28.8 usr_28.txt /*28.8*
+28.9 usr_28.txt /*28.9*
+29.1 usr_29.txt /*29.1*
+29.2 usr_29.txt /*29.2*
+29.3 usr_29.txt /*29.3*
+29.4 usr_29.txt /*29.4*
+29.5 usr_29.txt /*29.5*
+2html.vim syntax.txt /*2html.vim*
+30.1 usr_30.txt /*30.1*
+30.2 usr_30.txt /*30.2*
+30.3 usr_30.txt /*30.3*
+30.4 usr_30.txt /*30.4*
+30.5 usr_30.txt /*30.5*
+30.6 usr_30.txt /*30.6*
+31.1 usr_31.txt /*31.1*
+31.2 usr_31.txt /*31.2*
+31.3 usr_31.txt /*31.3*
+31.4 usr_31.txt /*31.4*
+31.5 usr_31.txt /*31.5*
+40.1 usr_40.txt /*40.1*
+40.2 usr_40.txt /*40.2*
+40.3 usr_40.txt /*40.3*
+41.1 usr_41.txt /*41.1*
+41.10 usr_41.txt /*41.10*
+41.11 usr_41.txt /*41.11*
+41.12 usr_41.txt /*41.12*
+41.2 usr_41.txt /*41.2*
+41.3 usr_41.txt /*41.3*
+41.4 usr_41.txt /*41.4*
+41.5 usr_41.txt /*41.5*
+41.6 usr_41.txt /*41.6*
+41.7 usr_41.txt /*41.7*
+41.8 usr_41.txt /*41.8*
+41.9 usr_41.txt /*41.9*
+42 usr_42.txt /*42*
+42.1 usr_42.txt /*42.1*
+42.2 usr_42.txt /*42.2*
+42.3 usr_42.txt /*42.3*
+42.4 usr_42.txt /*42.4*
+43.1 usr_43.txt /*43.1*
+43.2 usr_43.txt /*43.2*
+44.1 usr_44.txt /*44.1*
+44.10 usr_44.txt /*44.10*
+44.11 usr_44.txt /*44.11*
+44.12 usr_44.txt /*44.12*
+44.2 usr_44.txt /*44.2*
+44.3 usr_44.txt /*44.3*
+44.4 usr_44.txt /*44.4*
+44.5 usr_44.txt /*44.5*
+44.6 usr_44.txt /*44.6*
+44.7 usr_44.txt /*44.7*
+44.8 usr_44.txt /*44.8*
+44.9 usr_44.txt /*44.9*
+45.1 usr_45.txt /*45.1*
+45.2 usr_45.txt /*45.2*
+45.3 usr_45.txt /*45.3*
+45.4 usr_45.txt /*45.4*
+45.5 usr_45.txt /*45.5*
+90.1 usr_90.txt /*90.1*
+90.2 usr_90.txt /*90.2*
+90.3 usr_90.txt /*90.3*
+90.4 usr_90.txt /*90.4*
+90.5 usr_90.txt /*90.5*
+: cmdline.txt /*:*
+:! various.txt /*:!*
+:!! various.txt /*:!!*
+:!cmd various.txt /*:!cmd*
+:!start os_win32.txt /*:!start*
+:# various.txt /*:#*
+:$ cmdline.txt /*:$*
+:% cmdline.txt /*:%*
+:& change.txt /*:&*
+:' cmdline.txt /*:'*
+:, cmdline.txt /*:,*
+:. cmdline.txt /*:.*
+:/ cmdline.txt /*:\/*
+::. cmdline.txt /*::.*
+::8 cmdline.txt /*::8*
+::e cmdline.txt /*::e*
+::gs cmdline.txt /*::gs*
+::h cmdline.txt /*::h*
+::p cmdline.txt /*::p*
+::r cmdline.txt /*::r*
+::s cmdline.txt /*::s*
+::t cmdline.txt /*::t*
+::~ cmdline.txt /*::~*
+:; cmdline.txt /*:;*
+:< change.txt /*:<*
+:<abuf> cmdline.txt /*:<abuf>*
+:<afile> cmdline.txt /*:<afile>*
+:<amatch> cmdline.txt /*:<amatch>*
+:<cWORD> cmdline.txt /*:<cWORD>*
+:<cfile> cmdline.txt /*:<cfile>*
+:<cword> cmdline.txt /*:<cword>*
+:<sfile> cmdline.txt /*:<sfile>*
+:= various.txt /*:=*
+:> change.txt /*:>*
+:? cmdline.txt /*:?*
+:@ repeat.txt /*:@*
+:@: repeat.txt /*:@:*
+:@@ repeat.txt /*:@@*
+:Explore pi_expl.txt /*:Explore*
+:Man filetype.txt /*:Man*
+:N editing.txt /*:N*
+:Next editing.txt /*:Next*
+:P various.txt /*:P*
+:Print various.txt /*:Print*
+:Sexplore pi_expl.txt /*:Sexplore*
+:TOhtml syntax.txt /*:TOhtml*
+:X editing.txt /*:X*
+:\bar cmdline.txt /*:\\bar*
+:_! cmdline.txt /*:_!*
+:_# cmdline.txt /*:_#*
+:_## cmdline.txt /*:_##*
+:_% cmdline.txt /*:_%*
+:_%: cmdline.txt /*:_%:*
+:_%< cmdline.txt /*:_%<*
+:a insert.txt /*:a*
+:ab map.txt /*:ab*
+:abbreviate map.txt /*:abbreviate*
+:abbreviate-<buffer> map.txt /*:abbreviate-<buffer>*
+:abbreviate-local map.txt /*:abbreviate-local*
+:abc map.txt /*:abc*
+:abclear map.txt /*:abclear*
+:abo windows.txt /*:abo*
+:aboveleft windows.txt /*:aboveleft*
+:al windows.txt /*:al*
+:all windows.txt /*:all*
+:am gui.txt /*:am*
+:amenu gui.txt /*:amenu*
+:an gui.txt /*:an*
+:anoremenu gui.txt /*:anoremenu*
+:append insert.txt /*:append*
+:ar editing.txt /*:ar*
+:arga editing.txt /*:arga*
+:argadd editing.txt /*:argadd*
+:argd editing.txt /*:argd*
+:argdelete editing.txt /*:argdelete*
+:argdo editing.txt /*:argdo*
+:arge editing.txt /*:arge*
+:argedit editing.txt /*:argedit*
+:argglobal editing.txt /*:argglobal*
+:arglocal editing.txt /*:arglocal*
+:args editing.txt /*:args*
+:args_f editing.txt /*:args_f*
+:args_f! editing.txt /*:args_f!*
+:argu editing.txt /*:argu*
+:argument editing.txt /*:argument*
+:as various.txt /*:as*
+:ascii various.txt /*:ascii*
+:au autocmd.txt /*:au*
+:aug autocmd.txt /*:aug*
+:augroup autocmd.txt /*:augroup*
+:augroup-delete autocmd.txt /*:augroup-delete*
+:aun gui.txt /*:aun*
+:aunmenu gui.txt /*:aunmenu*
+:autocmd autocmd.txt /*:autocmd*
+:b windows.txt /*:b*
+:bN windows.txt /*:bN*
+:bNext windows.txt /*:bNext*
+:ba windows.txt /*:ba*
+:bad windows.txt /*:bad*
+:badd windows.txt /*:badd*
+:ball windows.txt /*:ball*
+:bar cmdline.txt /*:bar*
+:bd windows.txt /*:bd*
+:bdel windows.txt /*:bdel*
+:bdelete windows.txt /*:bdelete*
+:be gui.txt /*:be*
+:behave gui.txt /*:behave*
+:bel windows.txt /*:bel*
+:belowright windows.txt /*:belowright*
+:bf windows.txt /*:bf*
+:bfirst windows.txt /*:bfirst*
+:bl windows.txt /*:bl*
+:blast windows.txt /*:blast*
+:bm windows.txt /*:bm*
+:bmodified windows.txt /*:bmodified*
+:bn windows.txt /*:bn*
+:bnext windows.txt /*:bnext*
+:botright windows.txt /*:botright*
+:bp windows.txt /*:bp*
+:bprevious windows.txt /*:bprevious*
+:br windows.txt /*:br*
+:brea eval.txt /*:brea*
+:break eval.txt /*:break*
+:breaka repeat.txt /*:breaka*
+:breakadd repeat.txt /*:breakadd*
+:breakd repeat.txt /*:breakd*
+:breakdel repeat.txt /*:breakdel*
+:breakl repeat.txt /*:breakl*
+:breaklist repeat.txt /*:breaklist*
+:brewind windows.txt /*:brewind*
+:bro editing.txt /*:bro*
+:browse editing.txt /*:browse*
+:browse-set options.txt /*:browse-set*
+:bu windows.txt /*:bu*
+:buf windows.txt /*:buf*
+:bufdo windows.txt /*:bufdo*
+:buffer windows.txt /*:buffer*
+:buffer-! windows.txt /*:buffer-!*
+:buffers windows.txt /*:buffers*
+:bun windows.txt /*:bun*
+:bunload windows.txt /*:bunload*
+:bw windows.txt /*:bw*
+:bwipe windows.txt /*:bwipe*
+:bwipeout windows.txt /*:bwipeout*
+:c change.txt /*:c*
+:cN quickfix.txt /*:cN*
+:cNext quickfix.txt /*:cNext*
+:cNf quickfix.txt /*:cNf*
+:cNfile quickfix.txt /*:cNfile*
+:ca map.txt /*:ca*
+:cabbrev map.txt /*:cabbrev*
+:cabc map.txt /*:cabc*
+:cabclear map.txt /*:cabclear*
+:cal eval.txt /*:cal*
+:call eval.txt /*:call*
+:cat eval.txt /*:cat*
+:catch eval.txt /*:catch*
+:cc quickfix.txt /*:cc*
+:ccl quickfix.txt /*:ccl*
+:cclose quickfix.txt /*:cclose*
+:cd editing.txt /*:cd*
+:cd- editing.txt /*:cd-*
+:ce change.txt /*:ce*
+:center change.txt /*:center*
+:cf quickfix.txt /*:cf*
+:cfile quickfix.txt /*:cfile*
+:cfir quickfix.txt /*:cfir*
+:cfirst quickfix.txt /*:cfirst*
+:cg quickfix.txt /*:cg*
+:cgetfile quickfix.txt /*:cgetfile*
+:ch change.txt /*:ch*
+:change change.txt /*:change*
+:changes motion.txt /*:changes*
+:chd editing.txt /*:chd*
+:chdir editing.txt /*:chdir*
+:che tagsrch.txt /*:che*
+:checkpath tagsrch.txt /*:checkpath*
+:checkt editing.txt /*:checkt*
+:checktime editing.txt /*:checktime*
+:cl quickfix.txt /*:cl*
+:cla quickfix.txt /*:cla*
+:clast quickfix.txt /*:clast*
+:clist quickfix.txt /*:clist*
+:clo windows.txt /*:clo*
+:close windows.txt /*:close*
+:cm map.txt /*:cm*
+:cmap map.txt /*:cmap*
+:cmap_l map.txt /*:cmap_l*
+:cmapc map.txt /*:cmapc*
+:cmapclear map.txt /*:cmapclear*
+:cme gui.txt /*:cme*
+:cmenu gui.txt /*:cmenu*
+:cn quickfix.txt /*:cn*
+:cnew quickfix.txt /*:cnew*
+:cnewer quickfix.txt /*:cnewer*
+:cnext quickfix.txt /*:cnext*
+:cnf quickfix.txt /*:cnf*
+:cnfile quickfix.txt /*:cnfile*
+:cno map.txt /*:cno*
+:cnorea map.txt /*:cnorea*
+:cnoreabbrev map.txt /*:cnoreabbrev*
+:cnoremap map.txt /*:cnoremap*
+:cnoreme gui.txt /*:cnoreme*
+:cnoremenu gui.txt /*:cnoremenu*
+:co change.txt /*:co*
+:col quickfix.txt /*:col*
+:colder quickfix.txt /*:colder*
+:colo syntax.txt /*:colo*
+:colorscheme syntax.txt /*:colorscheme*
+:com map.txt /*:com*
+:comc map.txt /*:comc*
+:comclear map.txt /*:comclear*
+:command map.txt /*:command*
+:command-completion map.txt /*:command-completion*
+:command-completion-custom map.txt /*:command-completion-custom*
+:comment eval.txt /*:comment*
+:comp quickfix.txt /*:comp*
+:compiler quickfix.txt /*:compiler*
+:con eval.txt /*:con*
+:conf editing.txt /*:conf*
+:confirm editing.txt /*:confirm*
+:continue eval.txt /*:continue*
+:cope quickfix.txt /*:cope*
+:copen quickfix.txt /*:copen*
+:copy change.txt /*:copy*
+:cp quickfix.txt /*:cp*
+:cpf quickfix.txt /*:cpf*
+:cpfile quickfix.txt /*:cpfile*
+:cprevious quickfix.txt /*:cprevious*
+:cq quickfix.txt /*:cq*
+:cquit quickfix.txt /*:cquit*
+:cr quickfix.txt /*:cr*
+:crewind quickfix.txt /*:crewind*
+:cs if_cscop.txt /*:cs*
+:cscope if_cscop.txt /*:cscope*
+:cstag if_cscop.txt /*:cstag*
+:cu map.txt /*:cu*
+:cuna map.txt /*:cuna*
+:cunabbrev map.txt /*:cunabbrev*
+:cunmap map.txt /*:cunmap*
+:cunme gui.txt /*:cunme*
+:cunmenu gui.txt /*:cunmenu*
+:cw quickfix.txt /*:cw*
+:cwindow quickfix.txt /*:cwindow*
+:d change.txt /*:d*
+:de change.txt /*:de*
+:debug repeat.txt /*:debug*
+:debugg repeat.txt /*:debugg*
+:debuggreedy repeat.txt /*:debuggreedy*
+:del change.txt /*:del*
+:delc map.txt /*:delc*
+:delcommand map.txt /*:delcommand*
+:delcr todo.txt /*:delcr*
+:delete change.txt /*:delete*
+:delf eval.txt /*:delf*
+:delfunction eval.txt /*:delfunction*
+:di change.txt /*:di*
+:diffg diff.txt /*:diffg*
+:diffget diff.txt /*:diffget*
+:diffp diff.txt /*:diffp*
+:diffpatch diff.txt /*:diffpatch*
+:diffpu diff.txt /*:diffpu*
+:diffput diff.txt /*:diffput*
+:diffs diff.txt /*:diffs*
+:diffsplit diff.txt /*:diffsplit*
+:difft diff.txt /*:difft*
+:diffthis diff.txt /*:diffthis*
+:diffu diff.txt /*:diffu*
+:diffupdate diff.txt /*:diffupdate*
+:dig digraph.txt /*:dig*
+:digraphs digraph.txt /*:digraphs*
+:display change.txt /*:display*
+:dj tagsrch.txt /*:dj*
+:djump tagsrch.txt /*:djump*
+:dl tagsrch.txt /*:dl*
+:dlist tagsrch.txt /*:dlist*
+:do autocmd.txt /*:do*
+:doau autocmd.txt /*:doau*
+:doautoa autocmd.txt /*:doautoa*
+:doautoall autocmd.txt /*:doautoall*
+:doautocmd autocmd.txt /*:doautocmd*
+:dr windows.txt /*:dr*
+:drop windows.txt /*:drop*
+:ds tagsrch.txt /*:ds*
+:dsearch tagsrch.txt /*:dsearch*
+:dsp tagsrch.txt /*:dsp*
+:dsplit tagsrch.txt /*:dsplit*
+:e editing.txt /*:e*
+:ec eval.txt /*:ec*
+:echo eval.txt /*:echo*
+:echoe eval.txt /*:echoe*
+:echoerr eval.txt /*:echoerr*
+:echoh eval.txt /*:echoh*
+:echohl eval.txt /*:echohl*
+:echom eval.txt /*:echom*
+:echomsg eval.txt /*:echomsg*
+:echon eval.txt /*:echon*
+:edit editing.txt /*:edit*
+:edit! editing.txt /*:edit!*
+:edit!_f editing.txt /*:edit!_f*
+:edit_f editing.txt /*:edit_f*
+:el eval.txt /*:el*
+:else eval.txt /*:else*
+:elsei eval.txt /*:elsei*
+:elseif eval.txt /*:elseif*
+:em gui.txt /*:em*
+:emenu gui.txt /*:emenu*
+:en eval.txt /*:en*
+:endf eval.txt /*:endf*
+:endfunction eval.txt /*:endfunction*
+:endif eval.txt /*:endif*
+:endt eval.txt /*:endt*
+:endtry eval.txt /*:endtry*
+:endw eval.txt /*:endw*
+:endwhile eval.txt /*:endwhile*
+:ene editing.txt /*:ene*
+:ene! editing.txt /*:ene!*
+:enew editing.txt /*:enew*
+:enew! editing.txt /*:enew!*
+:ex editing.txt /*:ex*
+:exe eval.txt /*:exe*
+:execute eval.txt /*:execute*
+:exi editing.txt /*:exi*
+:exit editing.txt /*:exit*
+:f editing.txt /*:f*
+:fi editing.txt /*:fi*
+:file editing.txt /*:file*
+:file_f editing.txt /*:file_f*
+:filename editing.txt /*:filename*
+:files windows.txt /*:files*
+:filet filetype.txt /*:filet*
+:filetype filetype.txt /*:filetype*
+:filetype-indent-off filetype.txt /*:filetype-indent-off*
+:filetype-indent-on filetype.txt /*:filetype-indent-on*
+:filetype-off filetype.txt /*:filetype-off*
+:filetype-overview filetype.txt /*:filetype-overview*
+:filetype-plugin-off filetype.txt /*:filetype-plugin-off*
+:filetype-plugin-on filetype.txt /*:filetype-plugin-on*
+:fin editing.txt /*:fin*
+:fina eval.txt /*:fina*
+:finally eval.txt /*:finally*
+:find editing.txt /*:find*
+:fini repeat.txt /*:fini*
+:finish repeat.txt /*:finish*
+:fir editing.txt /*:fir*
+:first editing.txt /*:first*
+:fix options.txt /*:fix*
+:fixdel options.txt /*:fixdel*
+:fo fold.txt /*:fo*
+:fold fold.txt /*:fold*
+:foldc fold.txt /*:foldc*
+:foldclose fold.txt /*:foldclose*
+:foldd fold.txt /*:foldd*
+:folddoc fold.txt /*:folddoc*
+:folddoclosed fold.txt /*:folddoclosed*
+:folddoopen fold.txt /*:folddoopen*
+:foldo fold.txt /*:foldo*
+:foldopen fold.txt /*:foldopen*
+:fu eval.txt /*:fu*
+:function eval.txt /*:function*
+:g repeat.txt /*:g*
+:global repeat.txt /*:global*
+:go motion.txt /*:go*
+:goto motion.txt /*:goto*
+:gr quickfix.txt /*:gr*
+:grep quickfix.txt /*:grep*
+:grepa quickfix.txt /*:grepa*
+:grepadd quickfix.txt /*:grepadd*
+:gu gui_x11.txt /*:gu*
+:gui gui_x11.txt /*:gui*
+:gv gui_x11.txt /*:gv*
+:gvim gui_x11.txt /*:gvim*
+:h various.txt /*:h*
+:ha various.txt /*:ha*
+:hardcopy various.txt /*:hardcopy*
+:help various.txt /*:help*
+:helpf various.txt /*:helpf*
+:helpfind various.txt /*:helpfind*
+:helpg various.txt /*:helpg*
+:helpgrep various.txt /*:helpgrep*
+:helpt various.txt /*:helpt*
+:helptags various.txt /*:helptags*
+:hi syntax.txt /*:hi*
+:hi-default syntax.txt /*:hi-default*
+:hi-link syntax.txt /*:hi-link*
+:hi-normal syntax.txt /*:hi-normal*
+:hi-normal-cterm syntax.txt /*:hi-normal-cterm*
+:hide windows.txt /*:hide*
+:highlight syntax.txt /*:highlight*
+:highlight-default syntax.txt /*:highlight-default*
+:highlight-link syntax.txt /*:highlight-link*
+:highlight-normal syntax.txt /*:highlight-normal*
+:history cmdline.txt /*:history*
+:history-indexing cmdline.txt /*:history-indexing*
+:i insert.txt /*:i*
+:ia map.txt /*:ia*
+:iabbrev map.txt /*:iabbrev*
+:iabc map.txt /*:iabc*
+:iabclear map.txt /*:iabclear*
+:if eval.txt /*:if*
+:ij tagsrch.txt /*:ij*
+:ijump tagsrch.txt /*:ijump*
+:il tagsrch.txt /*:il*
+:ilist tagsrch.txt /*:ilist*
+:im map.txt /*:im*
+:imap map.txt /*:imap*
+:imap_l map.txt /*:imap_l*
+:imapc map.txt /*:imapc*
+:imapclear map.txt /*:imapclear*
+:ime gui.txt /*:ime*
+:imenu gui.txt /*:imenu*
+:in insert.txt /*:in*
+:index index.txt /*:index*
+:ino map.txt /*:ino*
+:inorea map.txt /*:inorea*
+:inoreabbrev map.txt /*:inoreabbrev*
+:inoremap map.txt /*:inoremap*
+:inoreme gui.txt /*:inoreme*
+:inoremenu gui.txt /*:inoremenu*
+:insert insert.txt /*:insert*
+:intro starting.txt /*:intro*
+:is tagsrch.txt /*:is*
+:isearch tagsrch.txt /*:isearch*
+:isp tagsrch.txt /*:isp*
+:isplit tagsrch.txt /*:isplit*
+:iu map.txt /*:iu*
+:iuna map.txt /*:iuna*
+:iunabbrev map.txt /*:iunabbrev*
+:iunmap map.txt /*:iunmap*
+:iunme gui.txt /*:iunme*
+:iunmenu gui.txt /*:iunmenu*
+:j change.txt /*:j*
+:join change.txt /*:join*
+:ju motion.txt /*:ju*
+:jumps motion.txt /*:jumps*
+:k motion.txt /*:k*
+:kee motion.txt /*:kee*
+:keepj motion.txt /*:keepj*
+:keepjumps motion.txt /*:keepjumps*
+:keepmarks motion.txt /*:keepmarks*
+:l various.txt /*:l*
+:la editing.txt /*:la*
+:lan mlang.txt /*:lan*
+:lang mlang.txt /*:lang*
+:language mlang.txt /*:language*
+:last editing.txt /*:last*
+:lc editing.txt /*:lc*
+:lcd editing.txt /*:lcd*
+:lch editing.txt /*:lch*
+:lchdir editing.txt /*:lchdir*
+:le change.txt /*:le*
+:left change.txt /*:left*
+:lefta windows.txt /*:lefta*
+:leftabove windows.txt /*:leftabove*
+:let eval.txt /*:let*
+:let-$ eval.txt /*:let-$*
+:let-@ eval.txt /*:let-@*
+:let-environment eval.txt /*:let-environment*
+:let-option eval.txt /*:let-option*
+:let-register eval.txt /*:let-register*
+:let-star eval.txt /*:let-star*
+:list various.txt /*:list*
+:lm map.txt /*:lm*
+:lmap map.txt /*:lmap*
+:lmap_l map.txt /*:lmap_l*
+:lmapc map.txt /*:lmapc*
+:lmapclear map.txt /*:lmapclear*
+:ln map.txt /*:ln*
+:lnoremap map.txt /*:lnoremap*
+:lo starting.txt /*:lo*
+:loadk mbyte.txt /*:loadk*
+:loadkeymap mbyte.txt /*:loadkeymap*
+:loadview starting.txt /*:loadview*
+:loc motion.txt /*:loc*
+:lockmarks motion.txt /*:lockmarks*
+:ls windows.txt /*:ls*
+:lu map.txt /*:lu*
+:lunmap map.txt /*:lunmap*
+:m change.txt /*:m*
+:ma motion.txt /*:ma*
+:mak quickfix.txt /*:mak*
+:make quickfix.txt /*:make*
+:make_makeprg quickfix.txt /*:make_makeprg*
+:map map.txt /*:map*
+:map! map.txt /*:map!*
+:map-<buffer> map.txt /*:map-<buffer>*
+:map-<script> map.txt /*:map-<script>*
+:map-<silent> map.txt /*:map-<silent>*
+:map-<unique> map.txt /*:map-<unique>*
+:map-local map.txt /*:map-local*
+:map-script map.txt /*:map-script*
+:map-silent map.txt /*:map-silent*
+:map-special-keys map.txt /*:map-special-keys*
+:map-undo map.txt /*:map-undo*
+:map_l map.txt /*:map_l*
+:map_l! map.txt /*:map_l!*
+:mapc map.txt /*:mapc*
+:mapc! map.txt /*:mapc!*
+:mapclear map.txt /*:mapclear*
+:mapclear! map.txt /*:mapclear!*
+:mark motion.txt /*:mark*
+:marks motion.txt /*:marks*
+:mat pattern.txt /*:mat*
+:match pattern.txt /*:match*
+:me gui.txt /*:me*
+:menu gui.txt /*:menu*
+:menu-<script> gui.txt /*:menu-<script>*
+:menu-<silent> gui.txt /*:menu-<silent>*
+:menu-disable gui.txt /*:menu-disable*
+:menu-enable gui.txt /*:menu-enable*
+:menu-script gui.txt /*:menu-script*
+:menu-silent gui.txt /*:menu-silent*
+:menut mlang.txt /*:menut*
+:menutrans mlang.txt /*:menutrans*
+:menutranslate mlang.txt /*:menutranslate*
+:mes message.txt /*:mes*
+:messages message.txt /*:messages*
+:mk starting.txt /*:mk*
+:mkexrc starting.txt /*:mkexrc*
+:mks starting.txt /*:mks*
+:mksession starting.txt /*:mksession*
+:mkv starting.txt /*:mkv*
+:mkvie starting.txt /*:mkvie*
+:mkview starting.txt /*:mkview*
+:mkvimrc starting.txt /*:mkvimrc*
+:mo change.txt /*:mo*
+:mod term.txt /*:mod*
+:mode term.txt /*:mode*
+:move change.txt /*:move*
+:n editing.txt /*:n*
+:ne editing.txt /*:ne*
+:new windows.txt /*:new*
+:next editing.txt /*:next*
+:next_f editing.txt /*:next_f*
+:nm map.txt /*:nm*
+:nmap map.txt /*:nmap*
+:nmap_l map.txt /*:nmap_l*
+:nmapc map.txt /*:nmapc*
+:nmapclear map.txt /*:nmapclear*
+:nme gui.txt /*:nme*
+:nmenu gui.txt /*:nmenu*
+:nn map.txt /*:nn*
+:nnoremap map.txt /*:nnoremap*
+:nnoreme gui.txt /*:nnoreme*
+:nnoremenu gui.txt /*:nnoremenu*
+:no map.txt /*:no*
+:no! map.txt /*:no!*
+:noh pattern.txt /*:noh*
+:nohlsearch pattern.txt /*:nohlsearch*
+:norea map.txt /*:norea*
+:noreabbrev map.txt /*:noreabbrev*
+:noremap map.txt /*:noremap*
+:noremap! map.txt /*:noremap!*
+:noreme gui.txt /*:noreme*
+:noremenu gui.txt /*:noremenu*
+:norm various.txt /*:norm*
+:normal various.txt /*:normal*
+:normal-range various.txt /*:normal-range*
+:nu various.txt /*:nu*
+:number various.txt /*:number*
+:nun map.txt /*:nun*
+:nunmap map.txt /*:nunmap*
+:nunme gui.txt /*:nunme*
+:nunmenu gui.txt /*:nunmenu*
+:o vi_diff.txt /*:o*
+:om map.txt /*:om*
+:omap map.txt /*:omap*
+:omap_l map.txt /*:omap_l*
+:omapc map.txt /*:omapc*
+:omapclear map.txt /*:omapclear*
+:ome gui.txt /*:ome*
+:omenu gui.txt /*:omenu*
+:on windows.txt /*:on*
+:only windows.txt /*:only*
+:ono map.txt /*:ono*
+:onoremap map.txt /*:onoremap*
+:onoreme gui.txt /*:onoreme*
+:onoremenu gui.txt /*:onoremenu*
+:op vi_diff.txt /*:op*
+:open vi_diff.txt /*:open*
+:opt options.txt /*:opt*
+:options options.txt /*:options*
+:ou map.txt /*:ou*
+:ounmap map.txt /*:ounmap*
+:ounme gui.txt /*:ounme*
+:ounmenu gui.txt /*:ounmenu*
+:p various.txt /*:p*
+:pc windows.txt /*:pc*
+:pclose windows.txt /*:pclose*
+:pe if_perl.txt /*:pe*
+:ped windows.txt /*:ped*
+:pedit windows.txt /*:pedit*
+:perl if_perl.txt /*:perl*
+:perld if_perl.txt /*:perld*
+:perldo if_perl.txt /*:perldo*
+:po tagsrch.txt /*:po*
+:pop tagsrch.txt /*:pop*
+:popu gui.txt /*:popu*
+:popup gui.txt /*:popup*
+:pp windows.txt /*:pp*
+:ppop windows.txt /*:ppop*
+:pr various.txt /*:pr*
+:pre recover.txt /*:pre*
+:preserve recover.txt /*:preserve*
+:prev editing.txt /*:prev*
+:previous editing.txt /*:previous*
+:print various.txt /*:print*
+:pro change.txt /*:pro*
+:promptfind change.txt /*:promptfind*
+:promptr change.txt /*:promptr*
+:promptrepl change.txt /*:promptrepl*
+:ps windows.txt /*:ps*
+:psearch windows.txt /*:psearch*
+:ptN tagsrch.txt /*:ptN*
+:ptNext tagsrch.txt /*:ptNext*
+:pta windows.txt /*:pta*
+:ptag windows.txt /*:ptag*
+:ptf tagsrch.txt /*:ptf*
+:ptfirst tagsrch.txt /*:ptfirst*
+:ptj tagsrch.txt /*:ptj*
+:ptjump tagsrch.txt /*:ptjump*
+:ptl tagsrch.txt /*:ptl*
+:ptlast tagsrch.txt /*:ptlast*
+:ptn tagsrch.txt /*:ptn*
+:ptnext tagsrch.txt /*:ptnext*
+:ptp tagsrch.txt /*:ptp*
+:ptprevious tagsrch.txt /*:ptprevious*
+:ptr tagsrch.txt /*:ptr*
+:ptrewind tagsrch.txt /*:ptrewind*
+:pts tagsrch.txt /*:pts*
+:ptselect tagsrch.txt /*:ptselect*
+:pu change.txt /*:pu*
+:put change.txt /*:put*
+:pw editing.txt /*:pw*
+:pwd editing.txt /*:pwd*
+:py if_pyth.txt /*:py*
+:pyf if_pyth.txt /*:pyf*
+:pyfile if_pyth.txt /*:pyfile*
+:python if_pyth.txt /*:python*
+:q editing.txt /*:q*
+:qa editing.txt /*:qa*
+:qall editing.txt /*:qall*
+:quit editing.txt /*:quit*
+:quita editing.txt /*:quita*
+:quitall editing.txt /*:quitall*
+:quote cmdline.txt /*:quote*
+:r insert.txt /*:r*
+:r! insert.txt /*:r!*
+:range cmdline.txt /*:range*
+:range! change.txt /*:range!*
+:re insert.txt /*:re*
+:read insert.txt /*:read*
+:read! insert.txt /*:read!*
+:rec recover.txt /*:rec*
+:recover recover.txt /*:recover*
+:red undo.txt /*:red*
+:redi various.txt /*:redi*
+:redir various.txt /*:redir*
+:redo undo.txt /*:redo*
+:redr various.txt /*:redr*
+:redraw various.txt /*:redraw*
+:redraws various.txt /*:redraws*
+:redrawstatus various.txt /*:redrawstatus*
+:reg change.txt /*:reg*
+:registers change.txt /*:registers*
+:res windows.txt /*:res*
+:resize windows.txt /*:resize*
+:ret change.txt /*:ret*
+:retab change.txt /*:retab*
+:retu eval.txt /*:retu*
+:return eval.txt /*:return*
+:rew editing.txt /*:rew*
+:rewind editing.txt /*:rewind*
+:ri change.txt /*:ri*
+:right change.txt /*:right*
+:rightb windows.txt /*:rightb*
+:rightbelow windows.txt /*:rightbelow*
+:ru repeat.txt /*:ru*
+:rub if_ruby.txt /*:rub*
+:ruby if_ruby.txt /*:ruby*
+:rubyd if_ruby.txt /*:rubyd*
+:rubydo if_ruby.txt /*:rubydo*
+:rubyf if_ruby.txt /*:rubyf*
+:rubyfile if_ruby.txt /*:rubyfile*
+:runtime repeat.txt /*:runtime*
+:rv starting.txt /*:rv*
+:rviminfo starting.txt /*:rviminfo*
+:s change.txt /*:s*
+:sN windows.txt /*:sN*
+:sNext windows.txt /*:sNext*
+:s\= change.txt /*:s\\=*
+:s_c change.txt /*:s_c*
+:s_flags change.txt /*:s_flags*
+:sa windows.txt /*:sa*
+:sal windows.txt /*:sal*
+:sall windows.txt /*:sall*
+:sargument windows.txt /*:sargument*
+:sav editing.txt /*:sav*
+:saveas editing.txt /*:saveas*
+:sb windows.txt /*:sb*
+:sbN windows.txt /*:sbN*
+:sbNext windows.txt /*:sbNext*
+:sba windows.txt /*:sba*
+:sball windows.txt /*:sball*
+:sbf windows.txt /*:sbf*
+:sbfirst windows.txt /*:sbfirst*
+:sbl windows.txt /*:sbl*
+:sblast windows.txt /*:sblast*
+:sbm windows.txt /*:sbm*
+:sbmodified windows.txt /*:sbmodified*
+:sbn windows.txt /*:sbn*
+:sbnext windows.txt /*:sbnext*
+:sbp windows.txt /*:sbp*
+:sbprevious windows.txt /*:sbprevious*
+:sbr windows.txt /*:sbr*
+:sbrewind windows.txt /*:sbrewind*
+:sbuffer windows.txt /*:sbuffer*
+:scrip repeat.txt /*:scrip*
+:scripte repeat.txt /*:scripte*
+:scriptencoding repeat.txt /*:scriptencoding*
+:scriptnames repeat.txt /*:scriptnames*
+:scs if_cscop.txt /*:scs*
+:scscope if_cscop.txt /*:scscope*
+:se options.txt /*:se*
+:search-args tagsrch.txt /*:search-args*
+:set options.txt /*:set*
+:set+= options.txt /*:set+=*
+:set-& options.txt /*:set-&*
+:set-&vi options.txt /*:set-&vi*
+:set-&vim options.txt /*:set-&vim*
+:set-= options.txt /*:set-=*
+:set-args options.txt /*:set-args*
+:set-browse options.txt /*:set-browse*
+:set-default options.txt /*:set-default*
+:set-termcap options.txt /*:set-termcap*
+:set-verbose options.txt /*:set-verbose*
+:set^= options.txt /*:set^=*
+:set_env options.txt /*:set_env*
+:setf options.txt /*:setf*
+:setfiletype options.txt /*:setfiletype*
+:setg options.txt /*:setg*
+:setglobal options.txt /*:setglobal*
+:setl options.txt /*:setl*
+:setlocal options.txt /*:setlocal*
+:sf windows.txt /*:sf*
+:sfind windows.txt /*:sfind*
+:sfir windows.txt /*:sfir*
+:sfirst windows.txt /*:sfirst*
+:sh various.txt /*:sh*
+:shell various.txt /*:shell*
+:si gui_w32.txt /*:si*
+:sig sign.txt /*:sig*
+:sign sign.txt /*:sign*
+:sign-define sign.txt /*:sign-define*
+:sign-fname sign.txt /*:sign-fname*
+:sign-jump sign.txt /*:sign-jump*
+:sign-list sign.txt /*:sign-list*
+:sign-place sign.txt /*:sign-place*
+:sign-undefine sign.txt /*:sign-undefine*
+:sign-unplace sign.txt /*:sign-unplace*
+:sil various.txt /*:sil*
+:silent various.txt /*:silent*
+:simalt gui_w32.txt /*:simalt*
+:sl various.txt /*:sl*
+:sla windows.txt /*:sla*
+:slast windows.txt /*:slast*
+:sleep various.txt /*:sleep*
+:sm change.txt /*:sm*
+:smagic change.txt /*:smagic*
+:sn windows.txt /*:sn*
+:snext windows.txt /*:snext*
+:sni if_sniff.txt /*:sni*
+:sniff if_sniff.txt /*:sniff*
+:sno change.txt /*:sno*
+:snomagic change.txt /*:snomagic*
+:so repeat.txt /*:so*
+:source repeat.txt /*:source*
+:source_crnl repeat.txt /*:source_crnl*
+:sp windows.txt /*:sp*
+:split windows.txt /*:split*
+:split_f windows.txt /*:split_f*
+:spr windows.txt /*:spr*
+:sprevious windows.txt /*:sprevious*
+:sre windows.txt /*:sre*
+:srewind windows.txt /*:srewind*
+:st starting.txt /*:st*
+:sta windows.txt /*:sta*
+:stag windows.txt /*:stag*
+:star repeat.txt /*:star*
+:start insert.txt /*:start*
+:startinsert insert.txt /*:startinsert*
+:stj tagsrch.txt /*:stj*
+:stjump tagsrch.txt /*:stjump*
+:stop starting.txt /*:stop*
+:stopi insert.txt /*:stopi*
+:stopinsert insert.txt /*:stopinsert*
+:sts tagsrch.txt /*:sts*
+:stselect tagsrch.txt /*:stselect*
+:su change.txt /*:su*
+:substitute change.txt /*:substitute*
+:sun windows.txt /*:sun*
+:sunhide windows.txt /*:sunhide*
+:sus starting.txt /*:sus*
+:suspend starting.txt /*:suspend*
+:sv windows.txt /*:sv*
+:sview windows.txt /*:sview*
+:sw recover.txt /*:sw*
+:swapname recover.txt /*:swapname*
+:sy syntax.txt /*:sy*
+:syn syntax.txt /*:syn*
+:syn-arguments syntax.txt /*:syn-arguments*
+:syn-case syntax.txt /*:syn-case*
+:syn-clear syntax.txt /*:syn-clear*
+:syn-cluster syntax.txt /*:syn-cluster*
+:syn-contained syntax.txt /*:syn-contained*
+:syn-containedin syntax.txt /*:syn-containedin*
+:syn-contains syntax.txt /*:syn-contains*
+:syn-context syntax.txt /*:syn-context*
+:syn-default-override usr_06.txt /*:syn-default-override*
+:syn-define syntax.txt /*:syn-define*
+:syn-display syntax.txt /*:syn-display*
+:syn-enable syntax.txt /*:syn-enable*
+:syn-end syntax.txt /*:syn-end*
+:syn-excludenl syntax.txt /*:syn-excludenl*
+:syn-ext-match syntax.txt /*:syn-ext-match*
+:syn-extend syntax.txt /*:syn-extend*
+:syn-file-remarks syntax.txt /*:syn-file-remarks*
+:syn-files syntax.txt /*:syn-files*
+:syn-fold syntax.txt /*:syn-fold*
+:syn-include syntax.txt /*:syn-include*
+:syn-keepend syntax.txt /*:syn-keepend*
+:syn-keyword syntax.txt /*:syn-keyword*
+:syn-lc syntax.txt /*:syn-lc*
+:syn-leading syntax.txt /*:syn-leading*
+:syn-list syntax.txt /*:syn-list*
+:syn-manual usr_06.txt /*:syn-manual*
+:syn-match syntax.txt /*:syn-match*
+:syn-matchgroup syntax.txt /*:syn-matchgroup*
+:syn-multi-line syntax.txt /*:syn-multi-line*
+:syn-nextgroup syntax.txt /*:syn-nextgroup*
+:syn-off usr_06.txt /*:syn-off*
+:syn-on syntax.txt /*:syn-on*
+:syn-oneline syntax.txt /*:syn-oneline*
+:syn-pattern syntax.txt /*:syn-pattern*
+:syn-pattern-offset syntax.txt /*:syn-pattern-offset*
+:syn-priority syntax.txt /*:syn-priority*
+:syn-qstart syntax.txt /*:syn-qstart*
+:syn-region syntax.txt /*:syn-region*
+:syn-reset syntax.txt /*:syn-reset*
+:syn-skip syntax.txt /*:syn-skip*
+:syn-skipempty syntax.txt /*:syn-skipempty*
+:syn-skipnl syntax.txt /*:syn-skipnl*
+:syn-skipwhite syntax.txt /*:syn-skipwhite*
+:syn-start syntax.txt /*:syn-start*
+:syn-sync syntax.txt /*:syn-sync*
+:syn-sync-ccomment syntax.txt /*:syn-sync-ccomment*
+:syn-sync-first syntax.txt /*:syn-sync-first*
+:syn-sync-fourth syntax.txt /*:syn-sync-fourth*
+:syn-sync-linebreaks syntax.txt /*:syn-sync-linebreaks*
+:syn-sync-maxlines syntax.txt /*:syn-sync-maxlines*
+:syn-sync-minlines syntax.txt /*:syn-sync-minlines*
+:syn-sync-second syntax.txt /*:syn-sync-second*
+:syn-sync-third syntax.txt /*:syn-sync-third*
+:syn-transparent syntax.txt /*:syn-transparent*
+:syncbind scroll.txt /*:syncbind*
+:syntax syntax.txt /*:syntax*
+:syntax-enable syntax.txt /*:syntax-enable*
+:syntax-on syntax.txt /*:syntax-on*
+:syntax-reset syntax.txt /*:syntax-reset*
+:t change.txt /*:t*
+:tN tagsrch.txt /*:tN*
+:tNext tagsrch.txt /*:tNext*
+:ta tagsrch.txt /*:ta*
+:tag tagsrch.txt /*:tag*
+:tags tagsrch.txt /*:tags*
+:tc if_tcl.txt /*:tc*
+:tcl if_tcl.txt /*:tcl*
+:tcld if_tcl.txt /*:tcld*
+:tcldo if_tcl.txt /*:tcldo*
+:tclf if_tcl.txt /*:tclf*
+:tclfile if_tcl.txt /*:tclfile*
+:te gui_w32.txt /*:te*
+:tearoff gui_w32.txt /*:tearoff*
+:tf tagsrch.txt /*:tf*
+:tfirst tagsrch.txt /*:tfirst*
+:th eval.txt /*:th*
+:throw eval.txt /*:throw*
+:tj tagsrch.txt /*:tj*
+:tjump tagsrch.txt /*:tjump*
+:tl tagsrch.txt /*:tl*
+:tlast tagsrch.txt /*:tlast*
+:tm gui.txt /*:tm*
+:tmenu gui.txt /*:tmenu*
+:tn tagsrch.txt /*:tn*
+:tnext tagsrch.txt /*:tnext*
+:topleft windows.txt /*:topleft*
+:tp tagsrch.txt /*:tp*
+:tprevious tagsrch.txt /*:tprevious*
+:tr tagsrch.txt /*:tr*
+:trewind tagsrch.txt /*:trewind*
+:try eval.txt /*:try*
+:ts tagsrch.txt /*:ts*
+:tselect tagsrch.txt /*:tselect*
+:tu gui.txt /*:tu*
+:tunmenu gui.txt /*:tunmenu*
+:u undo.txt /*:u*
+:un undo.txt /*:un*
+:una map.txt /*:una*
+:unabbreviate map.txt /*:unabbreviate*
+:undo undo.txt /*:undo*
+:unh windows.txt /*:unh*
+:unhide windows.txt /*:unhide*
+:unl eval.txt /*:unl*
+:unlet eval.txt /*:unlet*
+:unm map.txt /*:unm*
+:unm! map.txt /*:unm!*
+:unmap map.txt /*:unmap*
+:unmap! map.txt /*:unmap!*
+:unme gui.txt /*:unme*
+:unmenu gui.txt /*:unmenu*
+:unmenu-all gui.txt /*:unmenu-all*
+:up editing.txt /*:up*
+:update editing.txt /*:update*
+:v repeat.txt /*:v*
+:ve various.txt /*:ve*
+:verb various.txt /*:verb*
+:verbose various.txt /*:verbose*
+:version various.txt /*:version*
+:vert windows.txt /*:vert*
+:vertical windows.txt /*:vertical*
+:vertical-resize windows.txt /*:vertical-resize*
+:vglobal repeat.txt /*:vglobal*
+:vi editing.txt /*:vi*
+:vie editing.txt /*:vie*
+:view editing.txt /*:view*
+:visual editing.txt /*:visual*
+:visual_example visual.txt /*:visual_example*
+:vm map.txt /*:vm*
+:vmap map.txt /*:vmap*
+:vmap_l map.txt /*:vmap_l*
+:vmapc map.txt /*:vmapc*
+:vmapclear map.txt /*:vmapclear*
+:vme gui.txt /*:vme*
+:vmenu gui.txt /*:vmenu*
+:vn map.txt /*:vn*
+:vne windows.txt /*:vne*
+:vnew windows.txt /*:vnew*
+:vnoremap map.txt /*:vnoremap*
+:vnoreme gui.txt /*:vnoreme*
+:vnoremenu gui.txt /*:vnoremenu*
+:vs windows.txt /*:vs*
+:vsplit windows.txt /*:vsplit*
+:vu map.txt /*:vu*
+:vunmap map.txt /*:vunmap*
+:vunme gui.txt /*:vunme*
+:vunmenu gui.txt /*:vunmenu*
+:w editing.txt /*:w*
+:w! editing.txt /*:w!*
+:wN editing.txt /*:wN*
+:wNext editing.txt /*:wNext*
+:w_a editing.txt /*:w_a*
+:w_c editing.txt /*:w_c*
+:w_f editing.txt /*:w_f*
+:wa editing.txt /*:wa*
+:wall editing.txt /*:wall*
+:wh eval.txt /*:wh*
+:while eval.txt /*:while*
+:win gui.txt /*:win*
+:winc windows.txt /*:winc*
+:wincmd windows.txt /*:wincmd*
+:windo windows.txt /*:windo*
+:winp gui.txt /*:winp*
+:winpos gui.txt /*:winpos*
+:winsize gui.txt /*:winsize*
+:wn editing.txt /*:wn*
+:wnext editing.txt /*:wnext*
+:wp editing.txt /*:wp*
+:wprevious editing.txt /*:wprevious*
+:wq editing.txt /*:wq*
+:wqa editing.txt /*:wqa*
+:wqall editing.txt /*:wqall*
+:write editing.txt /*:write*
+:write_a editing.txt /*:write_a*
+:write_c editing.txt /*:write_c*
+:write_f editing.txt /*:write_f*
+:ws workshop.txt /*:ws*
+:wsverb workshop.txt /*:wsverb*
+:wv starting.txt /*:wv*
+:wviminfo starting.txt /*:wviminfo*
+:x editing.txt /*:x*
+:xa editing.txt /*:xa*
+:xall editing.txt /*:xall*
+:xit editing.txt /*:xit*
+:y change.txt /*:y*
+:yank change.txt /*:yank*
+:z various.txt /*:z*
+:z# various.txt /*:z#*
+:~ change.txt /*:~*
+; motion.txt /*;*
+< change.txt /*<*
+<2-LeftMouse> term.txt /*<2-LeftMouse>*
+<3-LeftMouse> term.txt /*<3-LeftMouse>*
+<4-LeftMouse> term.txt /*<4-LeftMouse>*
+<< change.txt /*<<*
+<> intro.txt /*<>*
+<A- intro.txt /*<A-*
+<BS> motion.txt /*<BS>*
+<Bar> intro.txt /*<Bar>*
+<Bslash> intro.txt /*<Bslash>*
+<C- intro.txt /*<C-*
+<C-Del> os_dos.txt /*<C-Del>*
+<C-End> motion.txt /*<C-End>*
+<C-Home> motion.txt /*<C-Home>*
+<C-Insert> os_dos.txt /*<C-Insert>*
+<C-Left> motion.txt /*<C-Left>*
+<C-LeftMouse> tagsrch.txt /*<C-LeftMouse>*
+<C-MouseDown> scroll.txt /*<C-MouseDown>*
+<C-MouseUp> scroll.txt /*<C-MouseUp>*
+<C-PageDown> os_dos.txt /*<C-PageDown>*
+<C-PageUp> os_dos.txt /*<C-PageUp>*
+<C-Right> motion.txt /*<C-Right>*
+<C-RightMouse> tagsrch.txt /*<C-RightMouse>*
+<CR> motion.txt /*<CR>*
+<CSI> intro.txt /*<CSI>*
+<Char-> map.txt /*<Char->*
+<Char> map.txt /*<Char>*
+<D- intro.txt /*<D-*
+<Del> change.txt /*<Del>*
+<Down> motion.txt /*<Down>*
+<Drop> change.txt /*<Drop>*
+<EOL> intro.txt /*<EOL>*
+<End> motion.txt /*<End>*
+<Enter> intro.txt /*<Enter>*
+<Esc> intro.txt /*<Esc>*
+<F10> term.txt /*<F10>*
+<F11> term.txt /*<F11>*
+<F12> term.txt /*<F12>*
+<F13> term.txt /*<F13>*
+<F14> term.txt /*<F14>*
+<F15> term.txt /*<F15>*
+<F16> term.txt /*<F16>*
+<F17> term.txt /*<F17>*
+<F18> term.txt /*<F18>*
+<F19> term.txt /*<F19>*
+<F1> various.txt /*<F1>*
+<F2> term.txt /*<F2>*
+<F3> term.txt /*<F3>*
+<F4> term.txt /*<F4>*
+<F5> term.txt /*<F5>*
+<F6> term.txt /*<F6>*
+<F7> term.txt /*<F7>*
+<F8> term.txt /*<F8>*
+<F9> term.txt /*<F9>*
+<Help> various.txt /*<Help>*
+<Home> motion.txt /*<Home>*
+<Insert> insert.txt /*<Insert>*
+<Leader> map.txt /*<Leader>*
+<Left> motion.txt /*<Left>*
+<LeftDrag> term.txt /*<LeftDrag>*
+<LeftMouse> visual.txt /*<LeftMouse>*
+<LeftRelease> visual.txt /*<LeftRelease>*
+<LocalLeader> map.txt /*<LocalLeader>*
+<M- intro.txt /*<M-*
+<MiddleDrag> term.txt /*<MiddleDrag>*
+<MiddleMouse> change.txt /*<MiddleMouse>*
+<MiddleRelease> term.txt /*<MiddleRelease>*
+<Mouse> term.txt /*<Mouse>*
+<MouseDown> scroll.txt /*<MouseDown>*
+<MouseUp> scroll.txt /*<MouseUp>*
+<NL> motion.txt /*<NL>*
+<Nop> map.txt /*<Nop>*
+<Nul> intro.txt /*<Nul>*
+<PageDown> scroll.txt /*<PageDown>*
+<PageUp> scroll.txt /*<PageUp>*
+<Plug> map.txt /*<Plug>*
+<Return> intro.txt /*<Return>*
+<Right> motion.txt /*<Right>*
+<RightDrag> term.txt /*<RightDrag>*
+<RightMouse> visual.txt /*<RightMouse>*
+<RightRelease> term.txt /*<RightRelease>*
+<S- intro.txt /*<S-*
+<S-Del> os_dos.txt /*<S-Del>*
+<S-Down> scroll.txt /*<S-Down>*
+<S-End> term.txt /*<S-End>*
+<S-F10> term.txt /*<S-F10>*
+<S-F11> term.txt /*<S-F11>*
+<S-F12> term.txt /*<S-F12>*
+<S-F1> intro.txt /*<S-F1>*
+<S-F2> term.txt /*<S-F2>*
+<S-F3> term.txt /*<S-F3>*
+<S-F4> term.txt /*<S-F4>*
+<S-F5> term.txt /*<S-F5>*
+<S-F6> term.txt /*<S-F6>*
+<S-F7> term.txt /*<S-F7>*
+<S-F8> term.txt /*<S-F8>*
+<S-F9> term.txt /*<S-F9>*
+<S-Home> term.txt /*<S-Home>*
+<S-Insert> os_dos.txt /*<S-Insert>*
+<S-Left> motion.txt /*<S-Left>*
+<S-LeftMouse> term.txt /*<S-LeftMouse>*
+<S-MouseDown> scroll.txt /*<S-MouseDown>*
+<S-MouseUp> scroll.txt /*<S-MouseUp>*
+<S-Right> motion.txt /*<S-Right>*
+<S-RightMouse> term.txt /*<S-RightMouse>*
+<S-Tab> term.txt /*<S-Tab>*
+<S-Up> scroll.txt /*<S-Up>*
+<S-xF1> term.txt /*<S-xF1>*
+<S-xF2> term.txt /*<S-xF2>*
+<S-xF3> term.txt /*<S-xF3>*
+<S-xF4> term.txt /*<S-xF4>*
+<SID> map.txt /*<SID>*
+<SNR> map.txt /*<SNR>*
+<Space> motion.txt /*<Space>*
+<Tab> motion.txt /*<Tab>*
+<Undo> undo.txt /*<Undo>*
+<Up> motion.txt /*<Up>*
+<abuf> cmdline.txt /*<abuf>*
+<afile> cmdline.txt /*<afile>*
+<amatch> cmdline.txt /*<amatch>*
+<args> map.txt /*<args>*
+<bang> map.txt /*<bang>*
+<cfile> cmdline.txt /*<cfile>*
+<character> intro.txt /*<character>*
+<count> map.txt /*<count>*
+<k0> term.txt /*<k0>*
+<k1> term.txt /*<k1>*
+<k2> term.txt /*<k2>*
+<k3> term.txt /*<k3>*
+<k4> term.txt /*<k4>*
+<k5> term.txt /*<k5>*
+<k6> term.txt /*<k6>*
+<k7> term.txt /*<k7>*
+<k8> term.txt /*<k8>*
+<k9> term.txt /*<k9>*
+<kDivide> term.txt /*<kDivide>*
+<kEnd> motion.txt /*<kEnd>*
+<kEnter> term.txt /*<kEnter>*
+<kHome> motion.txt /*<kHome>*
+<kMinus> term.txt /*<kMinus>*
+<kMultiply> term.txt /*<kMultiply>*
+<kPageDown> scroll.txt /*<kPageDown>*
+<kPageUp> scroll.txt /*<kPageUp>*
+<kPlus> term.txt /*<kPlus>*
+<kPoint> term.txt /*<kPoint>*
+<line1> map.txt /*<line1>*
+<line2> map.txt /*<line2>*
+<lt> intro.txt /*<lt>*
+<q-args> map.txt /*<q-args>*
+<reg> map.txt /*<reg>*
+<register> map.txt /*<register>*
+<sfile> cmdline.txt /*<sfile>*
+<xCSI> intro.txt /*<xCSI>*
+<xEnd> term.txt /*<xEnd>*
+<xEnd>-xterm term.txt /*<xEnd>-xterm*
+<xF1> term.txt /*<xF1>*
+<xF1>-xterm term.txt /*<xF1>-xterm*
+<xF2> term.txt /*<xF2>*
+<xF2>-xterm term.txt /*<xF2>-xterm*
+<xF3> term.txt /*<xF3>*
+<xF3>-xterm term.txt /*<xF3>-xterm*
+<xF4> term.txt /*<xF4>*
+<xF4>-xterm term.txt /*<xF4>-xterm*
+<xHome> term.txt /*<xHome>*
+<xHome>-xterm term.txt /*<xHome>-xterm*
+= change.txt /*=*
+== change.txt /*==*
+> change.txt /*>*
+>> change.txt /*>>*
+>cont repeat.txt /*>cont*
+>finish repeat.txt /*>finish*
+>interrupt repeat.txt /*>interrupt*
+>next repeat.txt /*>next*
+>quit repeat.txt /*>quit*
+>step repeat.txt /*>step*
+? pattern.txt /*?*
+?<CR> pattern.txt /*?<CR>*
+@ repeat.txt /*@*
+@/ change.txt /*@\/*
+@: repeat.txt /*@:*
+@@ repeat.txt /*@@*
+A insert.txt /*A*
+ACL editing.txt /*ACL*
+ATTENTION usr_11.txt /*ATTENTION*
+Abbreviations map.txt /*Abbreviations*
+Aleph options.txt /*Aleph*
+Amiga os_amiga.txt /*Amiga*
+Arabic arabic.txt /*Arabic*
+Atari os_mint.txt /*Atari*
+Athena gui_x11.txt /*Athena*
+B motion.txt /*B*
+BeBox os_beos.txt /*BeBox*
+BeOS os_beos.txt /*BeOS*
+BufAdd autocmd.txt /*BufAdd*
+BufCreate autocmd.txt /*BufCreate*
+BufDelete autocmd.txt /*BufDelete*
+BufEnter autocmd.txt /*BufEnter*
+BufFilePost autocmd.txt /*BufFilePost*
+BufFilePre autocmd.txt /*BufFilePre*
+BufHidden autocmd.txt /*BufHidden*
+BufLeave autocmd.txt /*BufLeave*
+BufNew autocmd.txt /*BufNew*
+BufNewFile autocmd.txt /*BufNewFile*
+BufRead autocmd.txt /*BufRead*
+BufReadCmd autocmd.txt /*BufReadCmd*
+BufReadPost autocmd.txt /*BufReadPost*
+BufReadPre autocmd.txt /*BufReadPre*
+BufUnload autocmd.txt /*BufUnload*
+BufWinEnter autocmd.txt /*BufWinEnter*
+BufWinLeave autocmd.txt /*BufWinLeave*
+BufWipeout autocmd.txt /*BufWipeout*
+BufWrite autocmd.txt /*BufWrite*
+BufWriteCmd autocmd.txt /*BufWriteCmd*
+BufWritePost autocmd.txt /*BufWritePost*
+BufWritePre autocmd.txt /*BufWritePre*
+C change.txt /*C*
+C-editing tips.txt /*C-editing*
+C-indenting indent.txt /*C-indenting*
+COMSPEC starting.txt /*COMSPEC*
+CR-used-for-NL pattern.txt /*CR-used-for-NL*
+CTRL-6 editing.txt /*CTRL-6*
+CTRL-A change.txt /*CTRL-A*
+CTRL-B scroll.txt /*CTRL-B*
+CTRL-C pattern.txt /*CTRL-C*
+CTRL-D scroll.txt /*CTRL-D*
+CTRL-E scroll.txt /*CTRL-E*
+CTRL-F scroll.txt /*CTRL-F*
+CTRL-G editing.txt /*CTRL-G*
+CTRL-H motion.txt /*CTRL-H*
+CTRL-I motion.txt /*CTRL-I*
+CTRL-J motion.txt /*CTRL-J*
+CTRL-L various.txt /*CTRL-L*
+CTRL-M motion.txt /*CTRL-M*
+CTRL-N motion.txt /*CTRL-N*
+CTRL-O motion.txt /*CTRL-O*
+CTRL-P motion.txt /*CTRL-P*
+CTRL-R undo.txt /*CTRL-R*
+CTRL-T tagsrch.txt /*CTRL-T*
+CTRL-U scroll.txt /*CTRL-U*
+CTRL-U-changed version6.txt /*CTRL-U-changed*
+CTRL-V visual.txt /*CTRL-V*
+CTRL-V-alternative gui_w32.txt /*CTRL-V-alternative*
+CTRL-W index.txt /*CTRL-W*
+CTRL-W_+ windows.txt /*CTRL-W_+*
+CTRL-W_- windows.txt /*CTRL-W_-*
+CTRL-W_< windows.txt /*CTRL-W_<*
+CTRL-W_<BS> windows.txt /*CTRL-W_<BS>*
+CTRL-W_<Down> windows.txt /*CTRL-W_<Down>*
+CTRL-W_<Left> windows.txt /*CTRL-W_<Left>*
+CTRL-W_<Right> windows.txt /*CTRL-W_<Right>*
+CTRL-W_<Up> windows.txt /*CTRL-W_<Up>*
+CTRL-W_= windows.txt /*CTRL-W_=*
+CTRL-W_> windows.txt /*CTRL-W_>*
+CTRL-W_CTRL-B windows.txt /*CTRL-W_CTRL-B*
+CTRL-W_CTRL-C windows.txt /*CTRL-W_CTRL-C*
+CTRL-W_CTRL-D tagsrch.txt /*CTRL-W_CTRL-D*
+CTRL-W_CTRL-F windows.txt /*CTRL-W_CTRL-F*
+CTRL-W_CTRL-H windows.txt /*CTRL-W_CTRL-H*
+CTRL-W_CTRL-I tagsrch.txt /*CTRL-W_CTRL-I*
+CTRL-W_CTRL-J windows.txt /*CTRL-W_CTRL-J*
+CTRL-W_CTRL-K windows.txt /*CTRL-W_CTRL-K*
+CTRL-W_CTRL-L windows.txt /*CTRL-W_CTRL-L*
+CTRL-W_CTRL-N windows.txt /*CTRL-W_CTRL-N*
+CTRL-W_CTRL-O windows.txt /*CTRL-W_CTRL-O*
+CTRL-W_CTRL-P windows.txt /*CTRL-W_CTRL-P*
+CTRL-W_CTRL-Q windows.txt /*CTRL-W_CTRL-Q*
+CTRL-W_CTRL-R windows.txt /*CTRL-W_CTRL-R*
+CTRL-W_CTRL-S windows.txt /*CTRL-W_CTRL-S*
+CTRL-W_CTRL-T windows.txt /*CTRL-W_CTRL-T*
+CTRL-W_CTRL-V windows.txt /*CTRL-W_CTRL-V*
+CTRL-W_CTRL-W windows.txt /*CTRL-W_CTRL-W*
+CTRL-W_CTRL-X windows.txt /*CTRL-W_CTRL-X*
+CTRL-W_CTRL-Z windows.txt /*CTRL-W_CTRL-Z*
+CTRL-W_CTRL-] windows.txt /*CTRL-W_CTRL-]*
+CTRL-W_CTRL-^ windows.txt /*CTRL-W_CTRL-^*
+CTRL-W_CTRL-_ windows.txt /*CTRL-W_CTRL-_*
+CTRL-W_H windows.txt /*CTRL-W_H*
+CTRL-W_J windows.txt /*CTRL-W_J*
+CTRL-W_K windows.txt /*CTRL-W_K*
+CTRL-W_L windows.txt /*CTRL-W_L*
+CTRL-W_P windows.txt /*CTRL-W_P*
+CTRL-W_R windows.txt /*CTRL-W_R*
+CTRL-W_S windows.txt /*CTRL-W_S*
+CTRL-W_W windows.txt /*CTRL-W_W*
+CTRL-W_] windows.txt /*CTRL-W_]*
+CTRL-W_^ windows.txt /*CTRL-W_^*
+CTRL-W__ windows.txt /*CTRL-W__*
+CTRL-W_b windows.txt /*CTRL-W_b*
+CTRL-W_bar windows.txt /*CTRL-W_bar*
+CTRL-W_c windows.txt /*CTRL-W_c*
+CTRL-W_d tagsrch.txt /*CTRL-W_d*
+CTRL-W_f windows.txt /*CTRL-W_f*
+CTRL-W_g] windows.txt /*CTRL-W_g]*
+CTRL-W_g_CTRL-] windows.txt /*CTRL-W_g_CTRL-]*
+CTRL-W_g} windows.txt /*CTRL-W_g}*
+CTRL-W_h windows.txt /*CTRL-W_h*
+CTRL-W_i tagsrch.txt /*CTRL-W_i*
+CTRL-W_j windows.txt /*CTRL-W_j*
+CTRL-W_k windows.txt /*CTRL-W_k*
+CTRL-W_l windows.txt /*CTRL-W_l*
+CTRL-W_n windows.txt /*CTRL-W_n*
+CTRL-W_o windows.txt /*CTRL-W_o*
+CTRL-W_p windows.txt /*CTRL-W_p*
+CTRL-W_q windows.txt /*CTRL-W_q*
+CTRL-W_r windows.txt /*CTRL-W_r*
+CTRL-W_s windows.txt /*CTRL-W_s*
+CTRL-W_t windows.txt /*CTRL-W_t*
+CTRL-W_v windows.txt /*CTRL-W_v*
+CTRL-W_w windows.txt /*CTRL-W_w*
+CTRL-W_x windows.txt /*CTRL-W_x*
+CTRL-W_z windows.txt /*CTRL-W_z*
+CTRL-W_} windows.txt /*CTRL-W_}*
+CTRL-X change.txt /*CTRL-X*
+CTRL-Y scroll.txt /*CTRL-Y*
+CTRL-Z starting.txt /*CTRL-Z*
+CTRL-\_CTRL-G intro.txt /*CTRL-\\_CTRL-G*
+CTRL-\_CTRL-N intro.txt /*CTRL-\\_CTRL-N*
+CTRL-] tagsrch.txt /*CTRL-]*
+CTRL-^ editing.txt /*CTRL-^*
+CTRL-{char} intro.txt /*CTRL-{char}*
+Chinese mbyte.txt /*Chinese*
+Cmd-event autocmd.txt /*Cmd-event*
+Cmdline cmdline.txt /*Cmdline*
+Cmdline-mode cmdline.txt /*Cmdline-mode*
+CmdwinEnter autocmd.txt /*CmdwinEnter*
+CmdwinLeave autocmd.txt /*CmdwinLeave*
+Command-line cmdline.txt /*Command-line*
+Command-line-mode cmdline.txt /*Command-line-mode*
+Contents quickref.txt /*Contents*
+Cscope if_cscop.txt /*Cscope*
+CursorHold autocmd.txt /*CursorHold*
+CursorHold-example windows.txt /*CursorHold-example*
+CursorIM mbyte.txt /*CursorIM*
+D change.txt /*D*
+DOS os_dos.txt /*DOS*
+DOS-format editing.txt /*DOS-format*
+DOS-format-write editing.txt /*DOS-format-write*
+DPMI os_msdos.txt /*DPMI*
+Digraphs digraph.txt /*Digraphs*
+E motion.txt /*E*
+E10 message.txt /*E10*
+E100 diff.txt /*E100*
+E101 diff.txt /*E101*
+E102 diff.txt /*E102*
+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*
+E11 cmdline.txt /*E11*
+E110 eval.txt /*E110*
+E111 eval.txt /*E111*
+E112 eval.txt /*E112*
+E113 eval.txt /*E113*
+E114 eval.txt /*E114*
+E115 eval.txt /*E115*
+E116 eval.txt /*E116*
+E117 eval.txt /*E117*
+E118 eval.txt /*E118*
+E119 eval.txt /*E119*
+E12 message.txt /*E12*
+E120 eval.txt /*E120*
+E121 eval.txt /*E121*
+E122 eval.txt /*E122*
+E123 eval.txt /*E123*
+E124 eval.txt /*E124*
+E125 eval.txt /*E125*
+E126 eval.txt /*E126*
+E127 eval.txt /*E127*
+E128 eval.txt /*E128*
+E129 eval.txt /*E129*
+E13 message.txt /*E13*
+E130 eval.txt /*E130*
+E131 eval.txt /*E131*
+E132 eval.txt /*E132*
+E133 eval.txt /*E133*
+E134 change.txt /*E134*
+E135 autocmd.txt /*E135*
+E136 starting.txt /*E136*
+E137 starting.txt /*E137*
+E138 starting.txt /*E138*
+E139 message.txt /*E139*
+E14 cmdline.txt /*E14*
+E140 message.txt /*E140*
+E141 message.txt /*E141*
+E142 message.txt /*E142*
+E143 autocmd.txt /*E143*
+E144 various.txt /*E144*
+E145 starting.txt /*E145*
+E146 change.txt /*E146*
+E147 repeat.txt /*E147*
+E148 repeat.txt /*E148*
+E149 various.txt /*E149*
+E15 eval.txt /*E15*
+E150 various.txt /*E150*
+E151 various.txt /*E151*
+E152 various.txt /*E152*
+E153 various.txt /*E153*
+E154 various.txt /*E154*
+E155 sign.txt /*E155*
+E156 sign.txt /*E156*
+E157 sign.txt /*E157*
+E158 sign.txt /*E158*
+E159 sign.txt /*E159*
+E16 cmdline.txt /*E16*
+E160 sign.txt /*E160*
+E161 repeat.txt /*E161*
+E162 message.txt /*E162*
+E163 editing.txt /*E163*
+E164 editing.txt /*E164*
+E165 editing.txt /*E165*
+E166 message.txt /*E166*
+E167 repeat.txt /*E167*
+E168 repeat.txt /*E168*
+E169 message.txt /*E169*
+E17 message.txt /*E17*
+E170 eval.txt /*E170*
+E171 eval.txt /*E171*
+E172 message.txt /*E172*
+E173 message.txt /*E173*
+E174 map.txt /*E174*
+E175 map.txt /*E175*
+E176 map.txt /*E176*
+E177 map.txt /*E177*
+E178 map.txt /*E178*
+E179 map.txt /*E179*
+E18 eval.txt /*E18*
+E180 map.txt /*E180*
+E181 map.txt /*E181*
+E182 map.txt /*E182*
+E183 map.txt /*E183*
+E184 map.txt /*E184*
+E185 syntax.txt /*E185*
+E186 editing.txt /*E186*
+E187 editing.txt /*E187*
+E188 gui.txt /*E188*
+E189 message.txt /*E189*
+E19 message.txt /*E19*
+E190 message.txt /*E190*
+E191 motion.txt /*E191*
+E192 message.txt /*E192*
+E193 eval.txt /*E193*
+E194 message.txt /*E194*
+E195 starting.txt /*E195*
+E196 various.txt /*E196*
+E197 mlang.txt /*E197*
+E198 options.txt /*E198*
+E199 cmdline.txt /*E199*
+E20 motion.txt /*E20*
+E200 autocmd.txt /*E200*
+E201 autocmd.txt /*E201*
+E202 options.txt /*E202*
+E203 autocmd.txt /*E203*
+E204 autocmd.txt /*E204*
+E205 if_pyth.txt /*E205*
+E206 options.txt /*E206*
+E207 editing.txt /*E207*
+E208 message.txt /*E208*
+E209 message.txt /*E209*
+E21 options.txt /*E21*
+E210 message.txt /*E210*
+E211 message.txt /*E211*
+E212 message.txt /*E212*
+E213 options.txt /*E213*
+E214 options.txt /*E214*
+E215 autocmd.txt /*E215*
+E216 autocmd.txt /*E216*
+E217 autocmd.txt /*E217*
+E218 autocmd.txt /*E218*
+E219 message.txt /*E219*
+E22 message.txt /*E22*
+E220 message.txt /*E220*
+E222 message.txt /*E222*
+E223 options.txt /*E223*
+E224 map.txt /*E224*
+E225 map.txt /*E225*
+E226 map.txt /*E226*
+E227 map.txt /*E227*
+E228 message.txt /*E228*
+E229 gui.txt /*E229*
+E23 message.txt /*E23*
+E230 starting.txt /*E230*
+E231 options.txt /*E231*
+E232 message.txt /*E232*
+E233 gui.txt /*E233*
+E234 options.txt /*E234*
+E235 options.txt /*E235*
+E236 options.txt /*E236*
+E237 various.txt /*E237*
+E238 various.txt /*E238*
+E239 sign.txt /*E239*
+E24 message.txt /*E24*
+E240 remote.txt /*E240*
+E241 eval.txt /*E241*
+E243 if_ole.txt /*E243*
+E244 options.txt /*E244*
+E245 options.txt /*E245*
+E246 autocmd.txt /*E246*
+E247 remote.txt /*E247*
+E248 remote.txt /*E248*
+E25 message.txt /*E25*
+E250 options.txt /*E250*
+E251 remote.txt /*E251*
+E252 options.txt /*E252*
+E253 mbyte.txt /*E253*
+E254 message.txt /*E254*
+E255 sign.txt /*E255*
+E256 message.txt /*E256*
+E257 if_cscop.txt /*E257*
+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*
+E264 if_pyth.txt /*E264*
+E265 if_ruby.txt /*E265*
+E266 if_ruby.txt /*E266*
+E267 if_ruby.txt /*E267*
+E268 if_ruby.txt /*E268*
+E269 if_ruby.txt /*E269*
+E27 farsi.txt /*E27*
+E270 if_ruby.txt /*E270*
+E271 if_ruby.txt /*E271*
+E272 if_ruby.txt /*E272*
+E273 if_ruby.txt /*E273*
+E274 if_sniff.txt /*E274*
+E275 if_sniff.txt /*E275*
+E276 if_sniff.txt /*E276*
+E277 remote.txt /*E277*
+E278 if_sniff.txt /*E278*
+E279 if_sniff.txt /*E279*
+E28 syntax.txt /*E28*
+E280 if_tcl.txt /*E280*
+E281 if_tcl.txt /*E281*
+E282 starting.txt /*E282*
+E283 motion.txt /*E283*
+E284 mbyte.txt /*E284*
+E285 mbyte.txt /*E285*
+E286 mbyte.txt /*E286*
+E287 mbyte.txt /*E287*
+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*
+E296 message.txt /*E296*
+E297 message.txt /*E297*
+E298 message.txt /*E298*
+E299 if_perl.txt /*E299*
+E30 change.txt /*E30*
+E300 message.txt /*E300*
+E301 message.txt /*E301*
+E302 message.txt /*E302*
+E303 message.txt /*E303*
+E304 message.txt /*E304*
+E305 recover.txt /*E305*
+E306 recover.txt /*E306*
+E307 recover.txt /*E307*
+E308 recover.txt /*E308*
+E309 recover.txt /*E309*
+E31 message.txt /*E31*
+E310 recover.txt /*E310*
+E311 recover.txt /*E311*
+E312 recover.txt /*E312*
+E313 recover.txt /*E313*
+E314 recover.txt /*E314*
+E315 message.txt /*E315*
+E316 message.txt /*E316*
+E317 message.txt /*E317*
+E318 message.txt /*E318*
+E319 message.txt /*E319*
+E32 message.txt /*E32*
+E320 message.txt /*E320*
+E321 editing.txt /*E321*
+E322 message.txt /*E322*
+E323 message.txt /*E323*
+E324 various.txt /*E324*
+E325 usr_11.txt /*E325*
+E326 recover.txt /*E326*
+E327 gui.txt /*E327*
+E328 gui.txt /*E328*
+E329 gui.txt /*E329*
+E33 message.txt /*E33*
+E330 gui.txt /*E330*
+E331 gui.txt /*E331*
+E332 gui.txt /*E332*
+E333 gui.txt /*E333*
+E334 gui.txt /*E334*
+E335 gui.txt /*E335*
+E336 gui.txt /*E336*
+E337 gui.txt /*E337*
+E338 editing.txt /*E338*
+E339 message.txt /*E339*
+E34 various.txt /*E34*
+E340 vi_diff.txt /*E340*
+E341 message.txt /*E341*
+E342 message.txt /*E342*
+E343 options.txt /*E343*
+E344 options.txt /*E344*
+E345 options.txt /*E345*
+E346 options.txt /*E346*
+E347 options.txt /*E347*
+E348 pattern.txt /*E348*
+E349 pattern.txt /*E349*
+E35 message.txt /*E35*
+E350 fold.txt /*E350*
+E351 fold.txt /*E351*
+E352 fold.txt /*E352*
+E353 change.txt /*E353*
+E354 change.txt /*E354*
+E355 options.txt /*E355*
+E356 message.txt /*E356*
+E357 options.txt /*E357*
+E358 options.txt /*E358*
+E359 term.txt /*E359*
+E36 windows.txt /*E36*
+E360 various.txt /*E360*
+E361 pattern.txt /*E361*
+E362 term.txt /*E362*
+E363 pattern.txt /*E363*
+E364 eval.txt /*E364*
+E365 options.txt /*E365*
+E366 options.txt /*E366*
+E367 autocmd.txt /*E367*
+E368 eval.txt /*E368*
+E369 pattern.txt /*E369*
+E37 message.txt /*E37*
+E370 various.txt /*E370*
+E371 various.txt /*E371*
+E372 quickfix.txt /*E372*
+E373 quickfix.txt /*E373*
+E374 quickfix.txt /*E374*
+E375 quickfix.txt /*E375*
+E376 quickfix.txt /*E376*
+E377 quickfix.txt /*E377*
+E378 quickfix.txt /*E378*
+E379 quickfix.txt /*E379*
+E38 message.txt /*E38*
+E380 quickfix.txt /*E380*
+E381 quickfix.txt /*E381*
+E382 options.txt /*E382*
+E383 pattern.txt /*E383*
+E384 options.txt /*E384*
+E385 options.txt /*E385*
+E386 pattern.txt /*E386*
+E387 tagsrch.txt /*E387*
+E388 tagsrch.txt /*E388*
+E389 tagsrch.txt /*E389*
+E39 digraph.txt /*E39*
+E390 syntax.txt /*E390*
+E391 syntax.txt /*E391*
+E392 syntax.txt /*E392*
+E393 syntax.txt /*E393*
+E394 syntax.txt /*E394*
+E395 syntax.txt /*E395*
+E396 syntax.txt /*E396*
+E397 syntax.txt /*E397*
+E398 syntax.txt /*E398*
+E399 syntax.txt /*E399*
+E40 message.txt /*E40*
+E400 syntax.txt /*E400*
+E401 syntax.txt /*E401*
+E402 syntax.txt /*E402*
+E403 syntax.txt /*E403*
+E404 syntax.txt /*E404*
+E405 syntax.txt /*E405*
+E406 syntax.txt /*E406*
+E407 syntax.txt /*E407*
+E408 syntax.txt /*E408*
+E409 syntax.txt /*E409*
+E41 message.txt /*E41*
+E410 syntax.txt /*E410*
+E411 syntax.txt /*E411*
+E412 syntax.txt /*E412*
+E413 syntax.txt /*E413*
+E414 syntax.txt /*E414*
+E415 syntax.txt /*E415*
+E416 syntax.txt /*E416*
+E417 syntax.txt /*E417*
+E418 syntax.txt /*E418*
+E419 syntax.txt /*E419*
+E42 quickfix.txt /*E42*
+E420 syntax.txt /*E420*
+E421 syntax.txt /*E421*
+E422 syntax.txt /*E422*
+E423 syntax.txt /*E423*
+E424 message.txt /*E424*
+E425 tagsrch.txt /*E425*
+E426 tagsrch.txt /*E426*
+E427 tagsrch.txt /*E427*
+E428 tagsrch.txt /*E428*
+E429 tagsrch.txt /*E429*
+E43 message.txt /*E43*
+E430 tagsrch.txt /*E430*
+E431 tagsrch.txt /*E431*
+E432 message.txt /*E432*
+E433 options.txt /*E433*
+E434 tagsrch.txt /*E434*
+E435 tagsrch.txt /*E435*
+E436 term.txt /*E436*
+E437 term.txt /*E437*
+E438 message.txt /*E438*
+E439 message.txt /*E439*
+E44 message.txt /*E44*
+E440 message.txt /*E440*
+E441 windows.txt /*E441*
+E442 windows.txt /*E442*
+E443 windows.txt /*E443*
+E444 windows.txt /*E444*
+E445 windows.txt /*E445*
+E446 editing.txt /*E446*
+E447 editing.txt /*E447*
+E448 various.txt /*E448*
+E449 eval.txt /*E449*
+E45 message.txt /*E45*
+E450 os_msdos.txt /*E450*
+E451 os_msdos.txt /*E451*
+E452 os_msdos.txt /*E452*
+E453 os_msdos.txt /*E453*
+E454 os_msdos.txt /*E454*
+E455 various.txt /*E455*
+E456 various.txt /*E456*
+E457 various.txt /*E457*
+E458 message.txt /*E458*
+E459 message.txt /*E459*
+E46 message.txt /*E46*
+E460 message.txt /*E460*
+E461 eval.txt /*E461*
+E462 editing.txt /*E462*
+E463 netbeans.txt /*E463*
+E464 message.txt /*E464*
+E465 gui.txt /*E465*
+E466 gui.txt /*E466*
+E467 map.txt /*E467*
+E468 map.txt /*E468*
+E469 if_cscop.txt /*E469*
+E47 message.txt /*E47*
+E470 change.txt /*E470*
+E471 message.txt /*E471*
+E472 editing.txt /*E472*
+E473 message.txt /*E473*
+E474 message.txt /*E474*
+E475 message.txt /*E475*
+E476 pattern.txt /*E476*
+E477 message.txt /*E477*
+E478 message.txt /*E478*
+E479 editing.txt /*E479*
+E48 eval.txt /*E48*
+E480 editing.txt /*E480*
+E481 message.txt /*E481*
+E482 message.txt /*E482*
+E483 message.txt /*E483*
+E484 message.txt /*E484*
+E485 message.txt /*E485*
+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*
+E493 cmdline.txt /*E493*
+E494 editing.txt /*E494*
+E495 cmdline.txt /*E495*
+E496 cmdline.txt /*E496*
+E497 cmdline.txt /*E497*
+E498 cmdline.txt /*E498*
+E499 cmdline.txt /*E499*
+E50 syntax.txt /*E50*
+E500 cmdline.txt /*E500*
+E501 intro.txt /*E501*
+E502 editing.txt /*E502*
+E503 editing.txt /*E503*
+E504 editing.txt /*E504*
+E505 editing.txt /*E505*
+E506 editing.txt /*E506*
+E507 editing.txt /*E507*
+E508 editing.txt /*E508*
+E509 editing.txt /*E509*
+E51 pattern.txt /*E51*
+E510 editing.txt /*E510*
+E512 editing.txt /*E512*
+E513 options.txt /*E513*
+E514 editing.txt /*E514*
+E515 windows.txt /*E515*
+E516 windows.txt /*E516*
+E517 windows.txt /*E517*
+E518 options.txt /*E518*
+E519 options.txt /*E519*
+E52 syntax.txt /*E52*
+E520 options.txt /*E520*
+E521 options.txt /*E521*
+E522 options.txt /*E522*
+E523 options.txt /*E523*
+E524 options.txt /*E524*
+E525 options.txt /*E525*
+E526 options.txt /*E526*
+E527 options.txt /*E527*
+E528 options.txt /*E528*
+E529 options.txt /*E529*
+E53 pattern.txt /*E53*
+E530 options.txt /*E530*
+E531 options.txt /*E531*
+E533 options.txt /*E533*
+E534 options.txt /*E534*
+E535 options.txt /*E535*
+E536 options.txt /*E536*
+E537 options.txt /*E537*
+E538 options.txt /*E538*
+E539 options.txt /*E539*
+E54 pattern.txt /*E54*
+E540 options.txt /*E540*
+E541 options.txt /*E541*
+E542 options.txt /*E542*
+E543 options.txt /*E543*
+E544 options.txt /*E544*
+E545 options.txt /*E545*
+E546 options.txt /*E546*
+E547 options.txt /*E547*
+E548 options.txt /*E548*
+E549 options.txt /*E549*
+E55 pattern.txt /*E55*
+E550 options.txt /*E550*
+E551 options.txt /*E551*
+E552 options.txt /*E552*
+E553 quickfix.txt /*E553*
+E554 pattern.txt /*E554*
+E555 tagsrch.txt /*E555*
+E556 tagsrch.txt /*E556*
+E557 term.txt /*E557*
+E558 term.txt /*E558*
+E559 term.txt /*E559*
+E56 pattern.txt /*E56*
+E560 if_cscop.txt /*E560*
+E561 if_cscop.txt /*E561*
+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*
+E569 if_cscop.txt /*E569*
+E57 pattern.txt /*E57*
+E570 message.txt /*E570*
+E571 if_tcl.txt /*E571*
+E572 if_tcl.txt /*E572*
+E573 remote.txt /*E573*
+E574 starting.txt /*E574*
+E575 starting.txt /*E575*
+E576 starting.txt /*E576*
+E577 starting.txt /*E577*
+E578 editing.txt /*E578*
+E579 eval.txt /*E579*
+E58 pattern.txt /*E58*
+E580 eval.txt /*E580*
+E581 eval.txt /*E581*
+E582 eval.txt /*E582*
+E583 eval.txt /*E583*
+E584 eval.txt /*E584*
+E585 eval.txt /*E585*
+E586 eval.txt /*E586*
+E587 eval.txt /*E587*
+E588 eval.txt /*E588*
+E589 options.txt /*E589*
+E59 pattern.txt /*E59*
+E590 options.txt /*E590*
+E591 options.txt /*E591*
+E592 options.txt /*E592*
+E593 options.txt /*E593*
+E594 options.txt /*E594*
+E595 options.txt /*E595*
+E596 options.txt /*E596*
+E597 options.txt /*E597*
+E598 options.txt /*E598*
+E60 pattern.txt /*E60*
+E600 eval.txt /*E600*
+E601 eval.txt /*E601*
+E602 eval.txt /*E602*
+E603 eval.txt /*E603*
+E604 eval.txt /*E604*
+E605 eval.txt /*E605*
+E606 eval.txt /*E606*
+E607 eval.txt /*E607*
+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 options.txt /*E613*
+E614 editing.txt /*E614*
+E615 editing.txt /*E615*
+E616 editing.txt /*E616*
+E617 options.txt /*E617*
+E618 various.txt /*E618*
+E619 various.txt /*E619*
+E62 pattern.txt /*E62*
+E620 options.txt /*E620*
+E621 various.txt /*E621*
+E622 if_cscop.txt /*E622*
+E623 if_cscop.txt /*E623*
+E624 various.txt /*E624*
+E625 if_cscop.txt /*E625*
+E626 if_cscop.txt /*E626*
+E627 netbeans.txt /*E627*
+E628 netbeans.txt /*E628*
+E629 netbeans.txt /*E629*
+E63 pattern.txt /*E63*
+E630 netbeans.txt /*E630*
+E631 netbeans.txt /*E631*
+E632 netbeans.txt /*E632*
+E633 netbeans.txt /*E633*
+E634 netbeans.txt /*E634*
+E635 netbeans.txt /*E635*
+E636 netbeans.txt /*E636*
+E637 netbeans.txt /*E637*
+E638 netbeans.txt /*E638*
+E639 netbeans.txt /*E639*
+E64 pattern.txt /*E64*
+E640 netbeans.txt /*E640*
+E641 netbeans.txt /*E641*
+E642 netbeans.txt /*E642*
+E643 netbeans.txt /*E643*
+E644 netbeans.txt /*E644*
+E645 netbeans.txt /*E645*
+E646 netbeans.txt /*E646*
+E647 netbeans.txt /*E647*
+E648 netbeans.txt /*E648*
+E649 netbeans.txt /*E649*
+E65 pattern.txt /*E65*
+E650 netbeans.txt /*E650*
+E651 netbeans.txt /*E651*
+E652 netbeans.txt /*E652*
+E653 netbeans.txt /*E653*
+E654 netbeans.txt /*E654*
+E655 eval.txt /*E655*
+E656 netbeans.txt /*E656*
+E657 netbeans.txt /*E657*
+E658 netbeans.txt /*E658*
+E659 if_pyth.txt /*E659*
+E66 syntax.txt /*E66*
+E660 netbeans.txt /*E660*
+E661 various.txt /*E661*
+E662 motion.txt /*E662*
+E663 motion.txt /*E663*
+E664 motion.txt /*E664*
+E665 gui_x11.txt /*E665*
+E666 quickfix.txt /*E666*
+E667 editing.txt /*E667*
+E668 netbeans.txt /*E668*
+E669 syntax.txt /*E669*
+E67 syntax.txt /*E67*
+E670 various.txt /*E670*
+E671 starting.txt /*E671*
+E672 starting.txt /*E672*
+E68 pattern.txt /*E68*
+E69 pattern.txt /*E69*
+E70 pattern.txt /*E70*
+E71 pattern.txt /*E71*
+E72 message.txt /*E72*
+E73 tagsrch.txt /*E73*
+E74 message.txt /*E74*
+E75 vi_diff.txt /*E75*
+E76 pattern.txt /*E76*
+E77 message.txt /*E77*
+E78 motion.txt /*E78*
+E79 message.txt /*E79*
+E80 message.txt /*E80*
+E800 arabic.txt /*E800*
+E81 map.txt /*E81*
+E82 message.txt /*E82*
+E83 message.txt /*E83*
+E84 windows.txt /*E84*
+E85 options.txt /*E85*
+E86 windows.txt /*E86*
+E87 windows.txt /*E87*
+E88 windows.txt /*E88*
+E89 message.txt /*E89*
+E90 message.txt /*E90*
+E91 options.txt /*E91*
+E92 message.txt /*E92*
+E93 windows.txt /*E93*
+E94 windows.txt /*E94*
+E95 message.txt /*E95*
+E96 diff.txt /*E96*
+E97 diff.txt /*E97*
+E98 diff.txt /*E98*
+E99 diff.txt /*E99*
+EX intro.txt /*EX*
+EXINIT starting.txt /*EXINIT*
+Elvis intro.txt /*Elvis*
+EncodingChanged autocmd.txt /*EncodingChanged*
+Eterm syntax.txt /*Eterm*
+Ex intro.txt /*Ex*
+Ex-mode intro.txt /*Ex-mode*
+F motion.txt /*F*
+FAQ intro.txt /*FAQ*
+Farsi farsi.txt /*Farsi*
+FileAppendCmd autocmd.txt /*FileAppendCmd*
+FileAppendPost autocmd.txt /*FileAppendPost*
+FileAppendPre autocmd.txt /*FileAppendPre*
+FileChangedRO autocmd.txt /*FileChangedRO*
+FileChangedShell autocmd.txt /*FileChangedShell*
+FileEncoding autocmd.txt /*FileEncoding*
+FileReadCmd autocmd.txt /*FileReadCmd*
+FileReadPost autocmd.txt /*FileReadPost*
+FileReadPre autocmd.txt /*FileReadPre*
+FileType autocmd.txt /*FileType*
+FileWriteCmd autocmd.txt /*FileWriteCmd*
+FileWritePost autocmd.txt /*FileWritePost*
+FileWritePre autocmd.txt /*FileWritePre*
+FilterReadPost autocmd.txt /*FilterReadPost*
+FilterReadPre autocmd.txt /*FilterReadPre*
+FilterWritePost autocmd.txt /*FilterWritePost*
+FilterWritePre autocmd.txt /*FilterWritePre*
+FocusGained autocmd.txt /*FocusGained*
+FocusLost autocmd.txt /*FocusLost*
+Folding fold.txt /*Folding*
+FuncUndefined autocmd.txt /*FuncUndefined*
+G motion.txt /*G*
+GNOME gui_x11.txt /*GNOME*
+GTK gui_x11.txt /*GTK*
+GTK+ gui_x11.txt /*GTK+*
+GUI gui.txt /*GUI*
+GUI-X11 gui_x11.txt /*GUI-X11*
+GUIEnter autocmd.txt /*GUIEnter*
+Gnome gui_x11.txt /*Gnome*
+H motion.txt /*H*
+I insert.txt /*I*
+ICCF uganda.txt /*ICCF*
+IM-server mbyte.txt /*IM-server*
+IME mbyte.txt /*IME*
+Insert insert.txt /*Insert*
+Insert-mode insert.txt /*Insert-mode*
+J change.txt /*J*
+Japanese mbyte.txt /*Japanese*
+K various.txt /*K*
+Korean mbyte.txt /*Korean*
+L motion.txt /*L*
+Linux-backspace options.txt /*Linux-backspace*
+M motion.txt /*M*
+MDI starting.txt /*MDI*
+MS-DOS os_msdos.txt /*MS-DOS*
+MS-Windows os_win32.txt /*MS-Windows*
+MSDOS os_msdos.txt /*MSDOS*
+MSVisualStudio if_ole.txt /*MSVisualStudio*
+MVS os_390.txt /*MVS*
+Mac os_mac.txt /*Mac*
+Mac-format editing.txt /*Mac-format*
+Mac-format-write editing.txt /*Mac-format-write*
+Macintosh os_mac.txt /*Macintosh*
+Mark motion.txt /*Mark*
+MiNT os_mint.txt /*MiNT*
+MorphOS os_amiga.txt /*MorphOS*
+Motif gui_x11.txt /*Motif*
+N pattern.txt /*N*
+N% motion.txt /*N%*
+N: cmdline.txt /*N:*
+N<Del> various.txt /*N<Del>*
+NL-used-for-Nul pattern.txt /*NL-used-for-Nul*
+NetBSD-backspace options.txt /*NetBSD-backspace*
+Normal intro.txt /*Normal*
+Normal-mode intro.txt /*Normal-mode*
+Nread pi_netrw.txt /*Nread*
+Nvi intro.txt /*Nvi*
+Nwrite pi_netrw.txt /*Nwrite*
+O insert.txt /*O*
+OS/2 os_os2.txt /*OS\/2*
+OS2 os_os2.txt /*OS2*
+OS390 os_390.txt /*OS390*
+OS390-Motif os_390.txt /*OS390-Motif*
+OS390-bugs os_390.txt /*OS390-bugs*
+OS390-building os_390.txt /*OS390-building*
+OS390-changes os_390.txt /*OS390-changes*
+OS390-feedback os_390.txt /*OS390-feedback*
+OS390-has-ebcdic os_390.txt /*OS390-has-ebcdic*
+OS390-open-source os_390.txt /*OS390-open-source*
+OS390-weaknesses os_390.txt /*OS390-weaknesses*
+OS390-xterm os_390.txt /*OS390-xterm*
+OffTheSpot mbyte.txt /*OffTheSpot*
+OnTheSpot mbyte.txt /*OnTheSpot*
+Operator-pending intro.txt /*Operator-pending*
+Operator-pending-mode intro.txt /*Operator-pending-mode*
+OverTheSpot mbyte.txt /*OverTheSpot*
+P change.txt /*P*
+Pattern pattern.txt /*Pattern*
+Perl if_perl.txt /*Perl*
+Posix intro.txt /*Posix*
+Python if_pyth.txt /*Python*
+Q intro.txt /*Q*
+Q-command-changed version5.txt /*Q-command-changed*
+QNX os_qnx.txt /*QNX*
+Q_ab quickref.txt /*Q_ab*
+Q_ac quickref.txt /*Q_ac*
+Q_ai quickref.txt /*Q_ai*
+Q_bu quickref.txt /*Q_bu*
+Q_ce quickref.txt /*Q_ce*
+Q_ch quickref.txt /*Q_ch*
+Q_cm quickref.txt /*Q_cm*
+Q_co quickref.txt /*Q_co*
+Q_ct help.txt /*Q_ct*
+Q_de quickref.txt /*Q_de*
+Q_di quickref.txt /*Q_di*
+Q_ed quickref.txt /*Q_ed*
+Q_et quickref.txt /*Q_et*
+Q_ex quickref.txt /*Q_ex*
+Q_fl quickref.txt /*Q_fl*
+Q_fo quickref.txt /*Q_fo*
+Q_gu quickref.txt /*Q_gu*
+Q_in quickref.txt /*Q_in*
+Q_km quickref.txt /*Q_km*
+Q_lr quickref.txt /*Q_lr*
+Q_ma quickref.txt /*Q_ma*
+Q_op quickref.txt /*Q_op*
+Q_pa quickref.txt /*Q_pa*
+Q_qf quickref.txt /*Q_qf*
+Q_ra quickref.txt /*Q_ra*
+Q_re quickref.txt /*Q_re*
+Q_sc quickref.txt /*Q_sc*
+Q_si quickref.txt /*Q_si*
+Q_ss quickref.txt /*Q_ss*
+Q_st quickref.txt /*Q_st*
+Q_sy quickref.txt /*Q_sy*
+Q_ta quickref.txt /*Q_ta*
+Q_tm quickref.txt /*Q_tm*
+Q_to quickref.txt /*Q_to*
+Q_ud quickref.txt /*Q_ud*
+Q_ur quickref.txt /*Q_ur*
+Q_vc quickref.txt /*Q_vc*
+Q_vi quickref.txt /*Q_vi*
+Q_vm quickref.txt /*Q_vm*
+Q_wi quickref.txt /*Q_wi*
+Q_wq quickref.txt /*Q_wq*
+Quickfix quickfix.txt /*Quickfix*
+R change.txt /*R*
+RISC-OS os_risc.txt /*RISC-OS*
+RISCOS os_risc.txt /*RISCOS*
+RemoteReply autocmd.txt /*RemoteReply*
+Replace insert.txt /*Replace*
+Replace-mode insert.txt /*Replace-mode*
+Root mbyte.txt /*Root*
+Ruby if_ruby.txt /*Ruby*
+Russian russian.txt /*Russian*
+S change.txt /*S*
+SHELL starting.txt /*SHELL*
+Select visual.txt /*Select*
+Select-mode visual.txt /*Select-mode*
+Select-mode-mapping visual.txt /*Select-mode-mapping*
+Session starting.txt /*Session*
+StdinReadPost autocmd.txt /*StdinReadPost*
+StdinReadPre autocmd.txt /*StdinReadPre*
+Syntax autocmd.txt /*Syntax*
+T motion.txt /*T*
+TCL if_tcl.txt /*TCL*
+TERM starting.txt /*TERM*
+TTpro-telnet syntax.txt /*TTpro-telnet*
+Tab intro.txt /*Tab*
+Tcl if_tcl.txt /*Tcl*
+TermChanged autocmd.txt /*TermChanged*
+TermResponse autocmd.txt /*TermResponse*
+U undo.txt /*U*
+UTF-8 mbyte.txt /*UTF-8*
+UTF8-xterm mbyte.txt /*UTF8-xterm*
+Uganda uganda.txt /*Uganda*
+Unicode mbyte.txt /*Unicode*
+Unix os_unix.txt /*Unix*
+Unix-format editing.txt /*Unix-format*
+Unix-format-write editing.txt /*Unix-format-write*
+User autocmd.txt /*User*
+UserGettingBored autocmd.txt /*UserGettingBored*
+V visual.txt /*V*
+VIMINIT starting.txt /*VIMINIT*
+VMS os_vms.txt /*VMS*
+Vi intro.txt /*Vi*
+View starting.txt /*View*
+VimEnter autocmd.txt /*VimEnter*
+VimLeave autocmd.txt /*VimLeave*
+VimLeavePre autocmd.txt /*VimLeavePre*
+Virtual-Replace-mode insert.txt /*Virtual-Replace-mode*
+VisVim if_ole.txt /*VisVim*
+Visual visual.txt /*Visual*
+Visual-mode visual.txt /*Visual-mode*
+W motion.txt /*W*
+W10 message.txt /*W10*
+W11 message.txt /*W11*
+W12 message.txt /*W12*
+W13 message.txt /*W13*
+W14 message.txt /*W14*
+W15 repeat.txt /*W15*
+W16 message.txt /*W16*
+W17 arabic.txt /*W17*
+W18 syntax.txt /*W18*
+WORD motion.txt /*WORD*
+Win32 os_win32.txt /*Win32*
+WinEnter autocmd.txt /*WinEnter*
+WinLeave autocmd.txt /*WinLeave*
+X change.txt /*X*
+X11 options.txt /*X11*
+X11-icon gui_x11.txt /*X11-icon*
+X11_mouse_shapes gui_x11.txt /*X11_mouse_shapes*
+X1Drag term.txt /*X1Drag*
+X1Mouse term.txt /*X1Mouse*
+X1Release term.txt /*X1Release*
+X2Drag term.txt /*X2Drag*
+X2Mouse term.txt /*X2Mouse*
+X2Release term.txt /*X2Release*
+XIM mbyte.txt /*XIM*
+XLFD mbyte.txt /*XLFD*
+Y change.txt /*Y*
+Y2K intro.txt /*Y2K*
+ZQ editing.txt /*ZQ*
+ZZ editing.txt /*ZZ*
+[ index.txt /*[*
+[# motion.txt /*[#*
+[' motion.txt /*['*
+[( motion.txt /*[(*
+[++opt] editing.txt /*[++opt]*
+[+cmd] editing.txt /*[+cmd]*
+[/ motion.txt /*[\/*
+[:alnum:] pattern.txt /*[:alnum:]*
+[:alpha:] pattern.txt /*[:alpha:]*
+[:backspace:] pattern.txt /*[:backspace:]*
+[:blank:] pattern.txt /*[:blank:]*
+[:cntrl:] pattern.txt /*[:cntrl:]*
+[:digit:] pattern.txt /*[:digit:]*
+[:escape:] pattern.txt /*[:escape:]*
+[:graph:] pattern.txt /*[:graph:]*
+[:lower:] pattern.txt /*[:lower:]*
+[:print:] pattern.txt /*[:print:]*
+[:punct:] pattern.txt /*[:punct:]*
+[:return:] pattern.txt /*[:return:]*
+[:space:] pattern.txt /*[:space:]*
+[:tab:] pattern.txt /*[:tab:]*
+[:upper:] pattern.txt /*[:upper:]*
+[:xdigit:] pattern.txt /*[:xdigit:]*
+[<MiddleMouse> change.txt /*[<MiddleMouse>*
+[D tagsrch.txt /*[D*
+[I tagsrch.txt /*[I*
+[M motion.txt /*[M*
+[P change.txt /*[P*
+[[ motion.txt /*[[*
+[] motion.txt /*[]*
+[_CTRL-D tagsrch.txt /*[_CTRL-D*
+[_CTRL-I tagsrch.txt /*[_CTRL-I*
+[` motion.txt /*[`*
+[c diff.txt /*[c*
+[count] intro.txt /*[count]*
+[d tagsrch.txt /*[d*
+[f editing.txt /*[f*
+[i tagsrch.txt /*[i*
+[m motion.txt /*[m*
+[p change.txt /*[p*
+[pattern] pattern.txt /*[pattern]*
+[quotex] intro.txt /*[quotex]*
+[range] cmdline.txt /*[range]*
+[star motion.txt /*[star*
+[z fold.txt /*[z*
+[{ motion.txt /*[{*
+\0 change.txt /*\\0*
+] index.txt /*]*
+]# motion.txt /*]#*
+]' motion.txt /*]'*
+]) motion.txt /*])*
+]/ motion.txt /*]\/*
+]<MiddleMouse> change.txt /*]<MiddleMouse>*
+]D tagsrch.txt /*]D*
+]I tagsrch.txt /*]I*
+]M motion.txt /*]M*
+]P change.txt /*]P*
+][ motion.txt /*][*
+]] motion.txt /*]]*
+]_CTRL-D tagsrch.txt /*]_CTRL-D*
+]_CTRL-I tagsrch.txt /*]_CTRL-I*
+]` motion.txt /*]`*
+]c diff.txt /*]c*
+]d tagsrch.txt /*]d*
+]f editing.txt /*]f*
+]i tagsrch.txt /*]i*
+]m motion.txt /*]m*
+]p change.txt /*]p*
+]star motion.txt /*]star*
+]z fold.txt /*]z*
+]} motion.txt /*]}*
+^ motion.txt /*^*
+_ motion.txt /*_*
+_exrc starting.txt /*_exrc*
+_gvimrc gui.txt /*_gvimrc*
+_vimrc starting.txt /*_vimrc*
+` motion.txt /*`*
+`( motion.txt /*`(*
+`) motion.txt /*`)*
+`-expansion editing.txt /*`-expansion*
+`. motion.txt /*`.*
+`0 motion.txt /*`0*
+`< motion.txt /*`<*
+`> motion.txt /*`>*
+`A motion.txt /*`A*
+`[ motion.txt /*`[*
+`] motion.txt /*`]*
+`^ motion.txt /*`^*
+`` motion.txt /*``*
+`a motion.txt /*`a*
+`quote motion.txt /*`quote*
+`{ motion.txt /*`{*
+`} motion.txt /*`}*
+a insert.txt /*a*
+a( motion.txt /*a(*
+a) motion.txt /*a)*
+a4 options.txt /*a4*
+a:firstline eval.txt /*a:firstline*
+a:lastline eval.txt /*a:lastline*
+a:var eval.txt /*a:var*
+a< motion.txt /*a<*
+a> motion.txt /*a>*
+aB motion.txt /*aB*
+aW motion.txt /*aW*
+a[ motion.txt /*a[*
+a] motion.txt /*a]*
+ab motion.txt /*ab*
+abandon editing.txt /*abandon*
+abbreviations map.txt /*abbreviations*
+abel-syntax syntax.txt /*abel-syntax*
+abel.vim syntax.txt /*abel.vim*
+active-buffer windows.txt /*active-buffer*
+ada-syntax syntax.txt /*ada-syntax*
+ada.vim syntax.txt /*ada.vim*
+add-filetype-plugin usr_05.txt /*add-filetype-plugin*
+add-global-plugin usr_05.txt /*add-global-plugin*
+add-local-help usr_05.txt /*add-local-help*
+add-option-flags options.txt /*add-option-flags*
+add-plugin usr_05.txt /*add-plugin*
+added-5.1 version5.txt /*added-5.1*
+added-5.2 version5.txt /*added-5.2*
+added-5.3 version5.txt /*added-5.3*
+added-5.4 version5.txt /*added-5.4*
+added-5.5 version5.txt /*added-5.5*
+added-5.6 version5.txt /*added-5.6*
+added-5.7 version5.txt /*added-5.7*
+added-5.8 version5.txt /*added-5.8*
+added-6.1 version6.txt /*added-6.1*
+added-6.2 version6.txt /*added-6.2*
+added-6.3 version6.txt /*added-6.3*
+added-BeOS version5.txt /*added-BeOS*
+added-Mac version5.txt /*added-Mac*
+added-VMS version5.txt /*added-VMS*
+added-cmdline-args version5.txt /*added-cmdline-args*
+added-options version5.txt /*added-options*
+added-regexp version5.txt /*added-regexp*
+added-various version5.txt /*added-various*
+added-win32-GUI version5.txt /*added-win32-GUI*
+after-directory options.txt /*after-directory*
+aleph options.txt /*aleph*
+alt intro.txt /*alt*
+alt-input debugger.txt /*alt-input*
+alternate-file editing.txt /*alternate-file*
+amiga-window starting.txt /*amiga-window*
+ant-syntax syntax.txt /*ant-syntax*
+ant.vim syntax.txt /*ant.vim*
+ap motion.txt /*ap*
+apache-syntax syntax.txt /*apache-syntax*
+apache.vim syntax.txt /*apache.vim*
+append() eval.txt /*append()*
+arabic.txt arabic.txt /*arabic.txt*
+arabicfonts arabic.txt /*arabicfonts*
+arabickeymap arabic.txt /*arabickeymap*
+argc() eval.txt /*argc()*
+argidx() eval.txt /*argidx()*
+arglist editing.txt /*arglist*
+arglist-position editing.txt /*arglist-position*
+arglist-quit usr_07.txt /*arglist-quit*
+argument-list editing.txt /*argument-list*
+argv() eval.txt /*argv()*
+as motion.txt /*as*
+asm-syntax syntax.txt /*asm-syntax*
+asm.vim syntax.txt /*asm.vim*
+asm68k syntax.txt /*asm68k*
+asm68k-syntax syntax.txt /*asm68k-syntax*
+asmh8300-syntax syntax.txt /*asmh8300-syntax*
+asmh8300.vim syntax.txt /*asmh8300.vim*
+aspperl-syntax syntax.txt /*aspperl-syntax*
+aspvbs-syntax syntax.txt /*aspvbs-syntax*
+athena-intellimouse gui.txt /*athena-intellimouse*
+attr-list syntax.txt /*attr-list*
+author intro.txt /*author*
+auto-format change.txt /*auto-format*
+auto-setting options.txt /*auto-setting*
+auto-shortname editing.txt /*auto-shortname*
+autocmd-<> tips.txt /*autocmd-<>*
+autocmd-define autocmd.txt /*autocmd-define*
+autocmd-events autocmd.txt /*autocmd-events*
+autocmd-execute autocmd.txt /*autocmd-execute*
+autocmd-groups autocmd.txt /*autocmd-groups*
+autocmd-intro autocmd.txt /*autocmd-intro*
+autocmd-list autocmd.txt /*autocmd-list*
+autocmd-nested autocmd.txt /*autocmd-nested*
+autocmd-osfiletypes filetype.txt /*autocmd-osfiletypes*
+autocmd-patterns autocmd.txt /*autocmd-patterns*
+autocmd-remove autocmd.txt /*autocmd-remove*
+autocmd-searchpat autocmd.txt /*autocmd-searchpat*
+autocmd-use autocmd.txt /*autocmd-use*
+autocmd.txt autocmd.txt /*autocmd.txt*
+autocmds-kept version5.txt /*autocmds-kept*
+autocommand autocmd.txt /*autocommand*
+autocommand-events autocmd.txt /*autocommand-events*
+autocommand-pattern autocmd.txt /*autocommand-pattern*
+autoload-functions eval.txt /*autoload-functions*
+avoid-hit-enter version5.txt /*avoid-hit-enter*
+aw motion.txt /*aw*
+a{ motion.txt /*a{*
+a} motion.txt /*a}*
+b motion.txt /*b*
+b:changedtick-variable eval.txt /*b:changedtick-variable*
+b:current_syntax-variable syntax.txt /*b:current_syntax-variable*
+b:var eval.txt /*b:var*
+backslash intro.txt /*backslash*
+backspace intro.txt /*backspace*
+backspace-delete version4.txt /*backspace-delete*
+backtick-expansion editing.txt /*backtick-expansion*
+backup editing.txt /*backup*
+backup-changed version4.txt /*backup-changed*
+backup-extension version4.txt /*backup-extension*
+backup-table editing.txt /*backup-table*
+balloon-eval debugger.txt /*balloon-eval*
+bar motion.txt /*bar*
+bars help.txt /*bars*
+base_font_name_list mbyte.txt /*base_font_name_list*
+basic-syntax syntax.txt /*basic-syntax*
+basic.vim syntax.txt /*basic.vim*
+beep options.txt /*beep*
+beos-colors os_beos.txt /*beos-colors*
+beos-compiling os_beos.txt /*beos-compiling*
+beos-dragndrop os_beos.txt /*beos-dragndrop*
+beos-fonts os_beos.txt /*beos-fonts*
+beos-general os_beos.txt /*beos-general*
+beos-gui os_beos.txt /*beos-gui*
+beos-launch os_beos.txt /*beos-launch*
+beos-meta os_beos.txt /*beos-meta*
+beos-mouse os_beos.txt /*beos-mouse*
+beos-perl os_beos.txt /*beos-perl*
+beos-timeout os_beos.txt /*beos-timeout*
+beos-unicode os_beos.txt /*beos-unicode*
+beos-utf8 os_beos.txt /*beos-utf8*
+beos-vimdir os_beos.txt /*beos-vimdir*
+blockwise-examples visual.txt /*blockwise-examples*
+blockwise-operators visual.txt /*blockwise-operators*
+blockwise-register change.txt /*blockwise-register*
+blockwise-visual visual.txt /*blockwise-visual*
+book intro.txt /*book*
+boolean options.txt /*boolean*
+break-finally eval.txt /*break-finally*
+browse() eval.txt /*browse()*
+browsefilter editing.txt /*browsefilter*
+bufexists() eval.txt /*bufexists()*
+buffer-hidden windows.txt /*buffer-hidden*
+buffer-list windows.txt /*buffer-list*
+buffer-variable eval.txt /*buffer-variable*
+buffer-write editing.txt /*buffer-write*
+buffer_exists() eval.txt /*buffer_exists()*
+buffer_name() eval.txt /*buffer_name()*
+buffer_number() eval.txt /*buffer_number()*
+buffers windows.txt /*buffers*
+buffers-menu gui.txt /*buffers-menu*
+buflisted() eval.txt /*buflisted()*
+bufloaded() eval.txt /*bufloaded()*
+bufname() eval.txt /*bufname()*
+bufnr() eval.txt /*bufnr()*
+bufwinnr() eval.txt /*bufwinnr()*
+bug-fixes-5 version5.txt /*bug-fixes-5*
+bug-fixes-6 version6.txt /*bug-fixes-6*
+bug-reports intro.txt /*bug-reports*
+bugreport.vim intro.txt /*bugreport.vim*
+bugs intro.txt /*bugs*
+builtin-terms term.txt /*builtin-terms*
+builtin-tools gui.txt /*builtin-tools*
+builtin_terms term.txt /*builtin_terms*
+byte-count editing.txt /*byte-count*
+byte2line() eval.txt /*byte2line()*
+bzip2 pi_gzip.txt /*bzip2*
+c change.txt /*c*
+c-syntax syntax.txt /*c-syntax*
+c.vim syntax.txt /*c.vim*
+cW change.txt /*cW*
+c_<BS> cmdline.txt /*c_<BS>*
+c_<C-Left> cmdline.txt /*c_<C-Left>*
+c_<C-R> cmdline.txt /*c_<C-R>*
+c_<C-R>_<C-A> cmdline.txt /*c_<C-R>_<C-A>*
+c_<C-R>_<C-F> cmdline.txt /*c_<C-R>_<C-F>*
+c_<C-R>_<C-O> cmdline.txt /*c_<C-R>_<C-O>*
+c_<C-R>_<C-P> cmdline.txt /*c_<C-R>_<C-P>*
+c_<C-R>_<C-R> cmdline.txt /*c_<C-R>_<C-R>*
+c_<C-R>_<C-W> cmdline.txt /*c_<C-R>_<C-W>*
+c_<C-Right> cmdline.txt /*c_<C-Right>*
+c_<CR> cmdline.txt /*c_<CR>*
+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_<LeftMouse> cmdline.txt /*c_<LeftMouse>*
+c_<NL> cmdline.txt /*c_<NL>*
+c_<PageDown> cmdline.txt /*c_<PageDown>*
+c_<PageUp> cmdline.txt /*c_<PageUp>*
+c_<Right> cmdline.txt /*c_<Right>*
+c_<S-Down> cmdline.txt /*c_<S-Down>*
+c_<S-Left> cmdline.txt /*c_<S-Left>*
+c_<S-Right> cmdline.txt /*c_<S-Right>*
+c_<S-Tab> cmdline.txt /*c_<S-Tab>*
+c_<S-Up> cmdline.txt /*c_<S-Up>*
+c_<Tab> cmdline.txt /*c_<Tab>*
+c_<Up> cmdline.txt /*c_<Up>*
+c_CTRL-A cmdline.txt /*c_CTRL-A*
+c_CTRL-B cmdline.txt /*c_CTRL-B*
+c_CTRL-C cmdline.txt /*c_CTRL-C*
+c_CTRL-D cmdline.txt /*c_CTRL-D*
+c_CTRL-E cmdline.txt /*c_CTRL-E*
+c_CTRL-H cmdline.txt /*c_CTRL-H*
+c_CTRL-I cmdline.txt /*c_CTRL-I*
+c_CTRL-J cmdline.txt /*c_CTRL-J*
+c_CTRL-K cmdline.txt /*c_CTRL-K*
+c_CTRL-L cmdline.txt /*c_CTRL-L*
+c_CTRL-N cmdline.txt /*c_CTRL-N*
+c_CTRL-P cmdline.txt /*c_CTRL-P*
+c_CTRL-Q cmdline.txt /*c_CTRL-Q*
+c_CTRL-R cmdline.txt /*c_CTRL-R*
+c_CTRL-R_= cmdline.txt /*c_CTRL-R_=*
+c_CTRL-R_CTRL-A cmdline.txt /*c_CTRL-R_CTRL-A*
+c_CTRL-R_CTRL-F cmdline.txt /*c_CTRL-R_CTRL-F*
+c_CTRL-R_CTRL-O cmdline.txt /*c_CTRL-R_CTRL-O*
+c_CTRL-R_CTRL-P cmdline.txt /*c_CTRL-R_CTRL-P*
+c_CTRL-R_CTRL-R cmdline.txt /*c_CTRL-R_CTRL-R*
+c_CTRL-R_CTRL-W cmdline.txt /*c_CTRL-R_CTRL-W*
+c_CTRL-U cmdline.txt /*c_CTRL-U*
+c_CTRL-V cmdline.txt /*c_CTRL-V*
+c_CTRL-W cmdline.txt /*c_CTRL-W*
+c_CTRL-Y cmdline.txt /*c_CTRL-Y*
+c_CTRL-\_CTRL-G intro.txt /*c_CTRL-\\_CTRL-G*
+c_CTRL-\_CTRL-N intro.txt /*c_CTRL-\\_CTRL-N*
+c_CTRL-\_e cmdline.txt /*c_CTRL-\\_e*
+c_CTRL-^ cmdline.txt /*c_CTRL-^*
+c_CTRL-_ cmdline.txt /*c_CTRL-_*
+c_digraph cmdline.txt /*c_digraph*
+c_wildchar cmdline.txt /*c_wildchar*
+carriage-return intro.txt /*carriage-return*
+case change.txt /*case*
+catch-all eval.txt /*catch-all*
+catch-errors eval.txt /*catch-errors*
+catch-interrupt eval.txt /*catch-interrupt*
+catch-order eval.txt /*catch-order*
+catch-text eval.txt /*catch-text*
+cc change.txt /*cc*
+change-list-jumps motion.txt /*change-list-jumps*
+change.txt change.txt /*change.txt*
+changed-5.1 version5.txt /*changed-5.1*
+changed-5.2 version5.txt /*changed-5.2*
+changed-5.3 version5.txt /*changed-5.3*
+changed-5.4 version5.txt /*changed-5.4*
+changed-5.5 version5.txt /*changed-5.5*
+changed-5.6 version5.txt /*changed-5.6*
+changed-5.7 version5.txt /*changed-5.7*
+changed-5.8 version5.txt /*changed-5.8*
+changed-6.1 version6.txt /*changed-6.1*
+changed-6.2 version6.txt /*changed-6.2*
+changed-6.3 version6.txt /*changed-6.3*
+changelist motion.txt /*changelist*
+changelog-plugin filetype.txt /*changelog-plugin*
+changelog-syntax syntax.txt /*changelog-syntax*
+changelog.vim syntax.txt /*changelog.vim*
+changetick eval.txt /*changetick*
+changing change.txt /*changing*
+char2nr() eval.txt /*char2nr()*
+characterwise motion.txt /*characterwise*
+characterwise-register change.txt /*characterwise-register*
+characterwise-visual visual.txt /*characterwise-visual*
+charconvert_from-variable eval.txt /*charconvert_from-variable*
+charconvert_to-variable eval.txt /*charconvert_to-variable*
+charset mbyte.txt /*charset*
+charset-conversion mbyte.txt /*charset-conversion*
+chill-syntax syntax.txt /*chill-syntax*
+chill.vim syntax.txt /*chill.vim*
+cindent() eval.txt /*cindent()*
+cinkeys-format indent.txt /*cinkeys-format*
+cinoptions-values indent.txt /*cinoptions-values*
+client-server remote.txt /*client-server*
+clientserver remote.txt /*clientserver*
+clipboard gui.txt /*clipboard*
+cmdarg-variable eval.txt /*cmdarg-variable*
+cmdbang-variable eval.txt /*cmdbang-variable*
+cmdline-arguments vi_diff.txt /*cmdline-arguments*
+cmdline-changed version5.txt /*cmdline-changed*
+cmdline-completion cmdline.txt /*cmdline-completion*
+cmdline-editing cmdline.txt /*cmdline-editing*
+cmdline-history cmdline.txt /*cmdline-history*
+cmdline-lines cmdline.txt /*cmdline-lines*
+cmdline-ranges cmdline.txt /*cmdline-ranges*
+cmdline-special cmdline.txt /*cmdline-special*
+cmdline-too-long cmdline.txt /*cmdline-too-long*
+cmdline-window cmdline.txt /*cmdline-window*
+cmdline.txt cmdline.txt /*cmdline.txt*
+cmdwin cmdline.txt /*cmdwin*
+cmdwin-char cmdline.txt /*cmdwin-char*
+cobol-syntax syntax.txt /*cobol-syntax*
+cobol.vim syntax.txt /*cobol.vim*
+codeset mbyte.txt /*codeset*
+coding-style develop.txt /*coding-style*
+col() eval.txt /*col()*
+coldfusion-syntax syntax.txt /*coldfusion-syntax*
+coldfusion.vim syntax.txt /*coldfusion.vim*
+collapse tips.txt /*collapse*
+color-xterm syntax.txt /*color-xterm*
+coloring syntax.txt /*coloring*
+colortest.vim syntax.txt /*colortest.vim*
+command-mode intro.txt /*command-mode*
+compatible-default starting.txt /*compatible-default*
+compile-changes-5 version5.txt /*compile-changes-5*
+compile-changes-6 version6.txt /*compile-changes-6*
+compiler-manx quickfix.txt /*compiler-manx*
+compiler-pyunit quickfix.txt /*compiler-pyunit*
+compiler-select quickfix.txt /*compiler-select*
+compiler-tex quickfix.txt /*compiler-tex*
+compl-current insert.txt /*compl-current*
+compl-define insert.txt /*compl-define*
+compl-dictionary insert.txt /*compl-dictionary*
+compl-filename insert.txt /*compl-filename*
+compl-generic insert.txt /*compl-generic*
+compl-keyword insert.txt /*compl-keyword*
+compl-tag insert.txt /*compl-tag*
+compl-vim insert.txt /*compl-vim*
+compl-whole-line insert.txt /*compl-whole-line*
+complex-change change.txt /*complex-change*
+complex-repeat repeat.txt /*complex-repeat*
+compress pi_gzip.txt /*compress*
+confirm() eval.txt /*confirm()*
+connection-refused message.txt /*connection-refused*
+console-menus gui.txt /*console-menus*
+control intro.txt /*control*
+conversion-server mbyte.txt /*conversion-server*
+convert-to-HTML syntax.txt /*convert-to-HTML*
+convert-to-XHTML syntax.txt /*convert-to-XHTML*
+convert-to-XML syntax.txt /*convert-to-XML*
+copy-diffs diff.txt /*copy-diffs*
+copy-move change.txt /*copy-move*
+copying uganda.txt /*copying*
+copyright uganda.txt /*copyright*
+count intro.txt /*count*
+count-bytes tips.txt /*count-bytes*
+count-items tips.txt /*count-items*
+count-variable eval.txt /*count-variable*
+count1-variable eval.txt /*count1-variable*
+cp-default version5.txt /*cp-default*
+cpo-! options.txt /*cpo-!*
+cpo-$ options.txt /*cpo-$*
+cpo-% options.txt /*cpo-%*
+cpo-< options.txt /*cpo-<*
+cpo-A options.txt /*cpo-A*
+cpo-B options.txt /*cpo-B*
+cpo-C options.txt /*cpo-C*
+cpo-D options.txt /*cpo-D*
+cpo-E options.txt /*cpo-E*
+cpo-F options.txt /*cpo-F*
+cpo-J options.txt /*cpo-J*
+cpo-K options.txt /*cpo-K*
+cpo-L options.txt /*cpo-L*
+cpo-M options.txt /*cpo-M*
+cpo-O options.txt /*cpo-O*
+cpo-R options.txt /*cpo-R*
+cpo-S options.txt /*cpo-S*
+cpo-W options.txt /*cpo-W*
+cpo-a options.txt /*cpo-a*
+cpo-b options.txt /*cpo-b*
+cpo-c options.txt /*cpo-c*
+cpo-d options.txt /*cpo-d*
+cpo-e options.txt /*cpo-e*
+cpo-f options.txt /*cpo-f*
+cpo-g options.txt /*cpo-g*
+cpo-i options.txt /*cpo-i*
+cpo-j options.txt /*cpo-j*
+cpo-k options.txt /*cpo-k*
+cpo-l options.txt /*cpo-l*
+cpo-m options.txt /*cpo-m*
+cpo-n options.txt /*cpo-n*
+cpo-o options.txt /*cpo-o*
+cpo-p options.txt /*cpo-p*
+cpo-r options.txt /*cpo-r*
+cpo-s options.txt /*cpo-s*
+cpo-star options.txt /*cpo-star*
+cpo-t options.txt /*cpo-t*
+cpo-u options.txt /*cpo-u*
+cpo-v options.txt /*cpo-v*
+cpo-w options.txt /*cpo-w*
+cpo-x options.txt /*cpo-x*
+cpo-y options.txt /*cpo-y*
+crash-recovery recover.txt /*crash-recovery*
+creating-menus gui.txt /*creating-menus*
+credits intro.txt /*credits*
+crontab options.txt /*crontab*
+cs-find if_cscop.txt /*cs-find*
+cs7-problem term.txt /*cs7-problem*
+cscope if_cscop.txt /*cscope*
+cscope-commands if_cscop.txt /*cscope-commands*
+cscope-find if_cscop.txt /*cscope-find*
+cscope-howtouse if_cscop.txt /*cscope-howtouse*
+cscope-info if_cscop.txt /*cscope-info*
+cscope-intro if_cscop.txt /*cscope-intro*
+cscope-limitations if_cscop.txt /*cscope-limitations*
+cscope-options if_cscop.txt /*cscope-options*
+cscope-suggestions if_cscop.txt /*cscope-suggestions*
+cscope-win32 if_cscop.txt /*cscope-win32*
+cscope_connection() eval.txt /*cscope_connection()*
+cscopepathcomp if_cscop.txt /*cscopepathcomp*
+cscopeprg if_cscop.txt /*cscopeprg*
+cscopequickfix if_cscop.txt /*cscopequickfix*
+cscopetag if_cscop.txt /*cscopetag*
+cscopetagorder if_cscop.txt /*cscopetagorder*
+cscopeverbose if_cscop.txt /*cscopeverbose*
+csh-syntax syntax.txt /*csh-syntax*
+csh.vim syntax.txt /*csh.vim*
+cspc if_cscop.txt /*cspc*
+csprg if_cscop.txt /*csprg*
+csqf if_cscop.txt /*csqf*
+cst if_cscop.txt /*cst*
+csto if_cscop.txt /*csto*
+csverb if_cscop.txt /*csverb*
+ctags tagsrch.txt /*ctags*
+ctags-gone version6.txt /*ctags-gone*
+cterm-colors syntax.txt /*cterm-colors*
+ctrl intro.txt /*ctrl*
+ctype-variable eval.txt /*ctype-variable*
+curly-braces-function-names eval.txt /*curly-braces-function-names*
+curly-braces-names eval.txt /*curly-braces-names*
+curpos-visual version6.txt /*curpos-visual*
+current-directory editing.txt /*current-directory*
+current-file editing.txt /*current-file*
+current_compiler quickfix.txt /*current_compiler*
+cursor() eval.txt /*cursor()*
+cursor-blinking options.txt /*cursor-blinking*
+cursor-down intro.txt /*cursor-down*
+cursor-left intro.txt /*cursor-left*
+cursor-motions motion.txt /*cursor-motions*
+cursor-position pattern.txt /*cursor-position*
+cursor-right intro.txt /*cursor-right*
+cursor-up intro.txt /*cursor-up*
+cursor_down intro.txt /*cursor_down*
+cursor_left intro.txt /*cursor_left*
+cursor_right intro.txt /*cursor_right*
+cursor_up intro.txt /*cursor_up*
+cw change.txt /*cw*
+cweb-syntax syntax.txt /*cweb-syntax*
+cweb.vim syntax.txt /*cweb.vim*
+cynlib-syntax syntax.txt /*cynlib-syntax*
+cynlib.vim syntax.txt /*cynlib.vim*
+d change.txt /*d*
+daB motion.txt /*daB*
+daW motion.txt /*daW*
+dab motion.txt /*dab*
+dap motion.txt /*dap*
+das motion.txt /*das*
+dav pi_netrw.txt /*dav*
+daw motion.txt /*daw*
+dd change.txt /*dd*
+debug-highlight debugger.txt /*debug-highlight*
+debug-mode repeat.txt /*debug-mode*
+debug-scripts repeat.txt /*debug-scripts*
+debug-signs debugger.txt /*debug-signs*
+debug-vim intro.txt /*debug-vim*
+debugger-compilation debugger.txt /*debugger-compilation*
+debugger-features debugger.txt /*debugger-features*
+debugger-integration debugger.txt /*debugger-integration*
+debugger-support debugger.txt /*debugger-support*
+debugger.txt debugger.txt /*debugger.txt*
+dec-mouse options.txt /*dec-mouse*
+definition-search tagsrch.txt /*definition-search*
+definitions intro.txt /*definitions*
+delete() eval.txt /*delete()*
+delete-insert change.txt /*delete-insert*
+delete-menus gui.txt /*delete-menus*
+deleting change.txt /*deleting*
+design-assumptions develop.txt /*design-assumptions*
+design-compatible develop.txt /*design-compatible*
+design-decisions develop.txt /*design-decisions*
+design-documented develop.txt /*design-documented*
+design-flexible develop.txt /*design-flexible*
+design-goals develop.txt /*design-goals*
+design-improved develop.txt /*design-improved*
+design-maintain develop.txt /*design-maintain*
+design-multi-platform develop.txt /*design-multi-platform*
+design-not develop.txt /*design-not*
+design-speed-size develop.txt /*design-speed-size*
+desktop-syntax syntax.txt /*desktop-syntax*
+desktop.vim syntax.txt /*desktop.vim*
+develop.txt develop.txt /*develop.txt*
+development develop.txt /*development*
+dh change.txt /*dh*
+diB motion.txt /*diB*
+diW motion.txt /*diW*
+dialog gui_w32.txt /*dialog*
+dialogs-added version5.txt /*dialogs-added*
+dib motion.txt /*dib*
+did_filetype() eval.txt /*did_filetype()*
+diff diff.txt /*diff*
+diff-diffexpr diff.txt /*diff-diffexpr*
+diff-mode diff.txt /*diff-mode*
+diff-options diff.txt /*diff-options*
+diff-patchexpr diff.txt /*diff-patchexpr*
+diff.txt diff.txt /*diff.txt*
+digraph-arg change.txt /*digraph-arg*
+digraph-table digraph.txt /*digraph-table*
+digraph.txt digraph.txt /*digraph.txt*
+digraphs digraph.txt /*digraphs*
+digraphs-changed version6.txt /*digraphs-changed*
+digraphs-default digraph.txt /*digraphs-default*
+digraphs-define digraph.txt /*digraphs-define*
+digraphs-use digraph.txt /*digraphs-use*
+dip motion.txt /*dip*
+dircolors-syntax syntax.txt /*dircolors-syntax*
+dircolors.vim syntax.txt /*dircolors.vim*
+dis motion.txt /*dis*
+disable-menus gui.txt /*disable-menus*
+distribution intro.txt /*distribution*
+diw motion.txt /*diw*
+dl change.txt /*dl*
+do diff.txt /*do*
+doc-file-list help.txt /*doc-file-list*
+docbk-syntax syntax.txt /*docbk-syntax*
+docbk.vim syntax.txt /*docbk.vim*
+docbksgml-syntax syntax.txt /*docbksgml-syntax*
+docbksgml.vim syntax.txt /*docbksgml.vim*
+docbkxml-syntax syntax.txt /*docbkxml-syntax*
+docbkxml.vim syntax.txt /*docbkxml.vim*
+docbook syntax.txt /*docbook*
+documentation-6 version6.txt /*documentation-6*
+dos os_dos.txt /*dos*
+dos-:cd os_dos.txt /*dos-:cd*
+dos-CTRL-Break os_dos.txt /*dos-CTRL-Break*
+dos-backslash os_dos.txt /*dos-backslash*
+dos-colors os_dos.txt /*dos-colors*
+dos-file-formats os_dos.txt /*dos-file-formats*
+dos-locations os_dos.txt /*dos-locations*
+dos-shell os_dos.txt /*dos-shell*
+dos-standard-mappings os_dos.txt /*dos-standard-mappings*
+dos-temp-files os_dos.txt /*dos-temp-files*
+dos16 os_msdos.txt /*dos16*
+dos32 os_msdos.txt /*dos32*
+dosbatch-syntax syntax.txt /*dosbatch-syntax*
+dosbatch.vim syntax.txt /*dosbatch.vim*
+double-click term.txt /*double-click*
+download intro.txt /*download*
+dp diff.txt /*dp*
+drag-n-drop gui.txt /*drag-n-drop*
+drag-n-drop-win32 gui_w32.txt /*drag-n-drop-win32*
+drag-status-line term.txt /*drag-status-line*
+dtd-syntax syntax.txt /*dtd-syntax*
+dtd.vim syntax.txt /*dtd.vim*
+dying-variable eval.txt /*dying-variable*
+e motion.txt /*e*
+easy starting.txt /*easy*
+edit-a-file editing.txt /*edit-a-file*
+edit-binary editing.txt /*edit-binary*
+edit-dialogs editing.txt /*edit-dialogs*
+edit-files editing.txt /*edit-files*
+edit-intro editing.txt /*edit-intro*
+edit-no-break usr_25.txt /*edit-no-break*
+editing.txt editing.txt /*editing.txt*
+efm-entries quickfix.txt /*efm-entries*
+efm-ignore quickfix.txt /*efm-ignore*
+eiffel-syntax syntax.txt /*eiffel-syntax*
+eiffel.vim syntax.txt /*eiffel.vim*
+emacs-keys tips.txt /*emacs-keys*
+emacs-tags tagsrch.txt /*emacs-tags*
+emacs_tags tagsrch.txt /*emacs_tags*
+encoding-names mbyte.txt /*encoding-names*
+encoding-table mbyte.txt /*encoding-table*
+encoding-values mbyte.txt /*encoding-values*
+encryption editing.txt /*encryption*
+end intro.txt /*end*
+end-of-file pattern.txt /*end-of-file*
+enlightened-terminal syntax.txt /*enlightened-terminal*
+erlang-syntax syntax.txt /*erlang-syntax*
+erlang.vim syntax.txt /*erlang.vim*
+errmsg-variable eval.txt /*errmsg-variable*
+error-file-format quickfix.txt /*error-file-format*
+error-messages message.txt /*error-messages*
+errorformat quickfix.txt /*errorformat*
+errorformat-Jikes quickfix.txt /*errorformat-Jikes*
+errorformat-LaTeX quickfix.txt /*errorformat-LaTeX*
+errorformat-Perl quickfix.txt /*errorformat-Perl*
+errorformat-ant quickfix.txt /*errorformat-ant*
+errorformat-changed version4.txt /*errorformat-changed*
+errorformat-jade quickfix.txt /*errorformat-jade*
+errorformat-javac quickfix.txt /*errorformat-javac*
+errorformat-multi-line quickfix.txt /*errorformat-multi-line*
+errorformat-separate-filename quickfix.txt /*errorformat-separate-filename*
+errorformats quickfix.txt /*errorformats*
+escape intro.txt /*escape*
+escape() eval.txt /*escape()*
+escape-bar version4.txt /*escape-bar*
+eval eval.txt /*eval*
+eval-examples eval.txt /*eval-examples*
+eval-sandbox eval.txt /*eval-sandbox*
+eval.txt eval.txt /*eval.txt*
+eventhandler() eval.txt /*eventhandler()*
+eview starting.txt /*eview*
+evim starting.txt /*evim*
+evim-keys starting.txt /*evim-keys*
+evim.vim starting.txt /*evim.vim*
+ex starting.txt /*ex*
+ex-cmd-index index.txt /*ex-cmd-index*
+ex-edit-index index.txt /*ex-edit-index*
+ex: options.txt /*ex:*
+except-autocmd eval.txt /*except-autocmd*
+except-autocmd-Cmd eval.txt /*except-autocmd-Cmd*
+except-autocmd-Post eval.txt /*except-autocmd-Post*
+except-autocmd-Pre eval.txt /*except-autocmd-Pre*
+except-autocmd-ill eval.txt /*except-autocmd-ill*
+except-compat eval.txt /*except-compat*
+except-examine eval.txt /*except-examine*
+except-from-finally eval.txt /*except-from-finally*
+except-hier-param eval.txt /*except-hier-param*
+except-several-errors eval.txt /*except-several-errors*
+except-single-line eval.txt /*except-single-line*
+except-syntax-err eval.txt /*except-syntax-err*
+except-syntax-error eval.txt /*except-syntax-error*
+exception-handling eval.txt /*exception-handling*
+exception-variable eval.txt /*exception-variable*
+exclusive motion.txt /*exclusive*
+executable() eval.txt /*executable()*
+execute-menus gui.txt /*execute-menus*
+exim starting.txt /*exim*
+exists() eval.txt /*exists()*
+expand() eval.txt /*expand()*
+expand-env options.txt /*expand-env*
+expand-environment-var options.txt /*expand-environment-var*
+expl-starting pi_expl.txt /*expl-starting*
+explorer-delete pi_expl.txt /*explorer-delete*
+explorer-rename pi_expl.txt /*explorer-rename*
+expr eval.txt /*expr*
+expr-! eval.txt /*expr-!*
+expr-!= eval.txt /*expr-!=*
+expr-!=# eval.txt /*expr-!=#*
+expr-!=? eval.txt /*expr-!=?*
+expr-!~ eval.txt /*expr-!~*
+expr-!~# eval.txt /*expr-!~#*
+expr-!~? eval.txt /*expr-!~?*
+expr-% eval.txt /*expr-%*
+expr-&& eval.txt /*expr-&&*
+expr-' eval.txt /*expr-'*
+expr-+ eval.txt /*expr-+*
+expr-- eval.txt /*expr--*
+expr-. eval.txt /*expr-.*
+expr-/ eval.txt /*expr-\/*
+expr-< eval.txt /*expr-<*
+expr-<# eval.txt /*expr-<#*
+expr-<= eval.txt /*expr-<=*
+expr-<=# eval.txt /*expr-<=#*
+expr-<=? eval.txt /*expr-<=?*
+expr-<? eval.txt /*expr-<?*
+expr-== eval.txt /*expr-==*
+expr-==# eval.txt /*expr-==#*
+expr-==? eval.txt /*expr-==?*
+expr-=~ eval.txt /*expr-=~*
+expr-=~# eval.txt /*expr-=~#*
+expr-=~? eval.txt /*expr-=~?*
+expr-> eval.txt /*expr->*
+expr-># eval.txt /*expr->#*
+expr->= eval.txt /*expr->=*
+expr->=# eval.txt /*expr->=#*
+expr->=? eval.txt /*expr->=?*
+expr->? eval.txt /*expr->?*
+expr-[] eval.txt /*expr-[]*
+expr-barbar eval.txt /*expr-barbar*
+expr-env eval.txt /*expr-env*
+expr-env-expand eval.txt /*expr-env-expand*
+expr-function eval.txt /*expr-function*
+expr-nesting eval.txt /*expr-nesting*
+expr-number eval.txt /*expr-number*
+expr-option eval.txt /*expr-option*
+expr-quote eval.txt /*expr-quote*
+expr-register eval.txt /*expr-register*
+expr-star eval.txt /*expr-star*
+expr-string eval.txt /*expr-string*
+expr-unary-+ eval.txt /*expr-unary-+*
+expr-unary-- eval.txt /*expr-unary--*
+expr-variable eval.txt /*expr-variable*
+expr1 eval.txt /*expr1*
+expr2 eval.txt /*expr2*
+expr3 eval.txt /*expr3*
+expr4 eval.txt /*expr4*
+expr5 eval.txt /*expr5*
+expr6 eval.txt /*expr6*
+expr7 eval.txt /*expr7*
+expr8 eval.txt /*expr8*
+expr9 eval.txt /*expr9*
+expression eval.txt /*expression*
+expression-commands eval.txt /*expression-commands*
+expression-syntax eval.txt /*expression-syntax*
+exrc starting.txt /*exrc*
+extension-removal cmdline.txt /*extension-removal*
+extensions-improvements todo.txt /*extensions-improvements*
+f motion.txt /*f*
+faq intro.txt /*faq*
+farsi farsi.txt /*farsi*
+farsi.txt farsi.txt /*farsi.txt*
+fasm.vim syntax.txt /*fasm.vim*
+feature-list eval.txt /*feature-list*
+fetch pi_netrw.txt /*fetch*
+file-browser pi_expl.txt /*file-browser*
+file-browser-5.2 version5.txt /*file-browser-5.2*
+file-explorer pi_expl.txt /*file-explorer*
+file-formats editing.txt /*file-formats*
+file-pattern autocmd.txt /*file-pattern*
+file-read insert.txt /*file-read*
+file-searching editing.txt /*file-searching*
+file-type filetype.txt /*file-type*
+file-types filetype.txt /*file-types*
+file_readable() eval.txt /*file_readable()*
+fileencoding-changed version6.txt /*fileencoding-changed*
+filename-backslash cmdline.txt /*filename-backslash*
+filename-modifiers cmdline.txt /*filename-modifiers*
+filereadable() eval.txt /*filereadable()*
+filetype filetype.txt /*filetype*
+filetype-detect filetype.txt /*filetype-detect*
+filetype-ignore filetype.txt /*filetype-ignore*
+filetype-overrule filetype.txt /*filetype-overrule*
+filetype-plugin usr_43.txt /*filetype-plugin*
+filetype-plugins filetype.txt /*filetype-plugins*
+filetype.txt filetype.txt /*filetype.txt*
+filetypedetect-changed version6.txt /*filetypedetect-changed*
+filetypes filetype.txt /*filetypes*
+filewritable() eval.txt /*filewritable()*
+filter change.txt /*filter*
+find-manpage usr_12.txt /*find-manpage*
+find-replace usr_10.txt /*find-replace*
+fixed-5.1 version5.txt /*fixed-5.1*
+fixed-5.2 version5.txt /*fixed-5.2*
+fixed-5.3 version5.txt /*fixed-5.3*
+fixed-5.4 version5.txt /*fixed-5.4*
+fixed-5.5 version5.txt /*fixed-5.5*
+fixed-5.6 version5.txt /*fixed-5.6*
+fixed-5.7 version5.txt /*fixed-5.7*
+fixed-5.8 version5.txt /*fixed-5.8*
+fixed-6.1 version6.txt /*fixed-6.1*
+fixed-6.2 version6.txt /*fixed-6.2*
+fixed-6.3 version6.txt /*fixed-6.3*
+fname_diff-variable eval.txt /*fname_diff-variable*
+fname_in-variable eval.txt /*fname_in-variable*
+fname_new-variable eval.txt /*fname_new-variable*
+fname_out-variable eval.txt /*fname_out-variable*
+fnamemodify() eval.txt /*fnamemodify()*
+fo-table change.txt /*fo-table*
+fold-behavior fold.txt /*fold-behavior*
+fold-colors fold.txt /*fold-colors*
+fold-commands fold.txt /*fold-commands*
+fold-create-marker fold.txt /*fold-create-marker*
+fold-delete-marker fold.txt /*fold-delete-marker*
+fold-diff fold.txt /*fold-diff*
+fold-expr fold.txt /*fold-expr*
+fold-foldcolumn fold.txt /*fold-foldcolumn*
+fold-foldlevel fold.txt /*fold-foldlevel*
+fold-foldtext fold.txt /*fold-foldtext*
+fold-indent fold.txt /*fold-indent*
+fold-manual fold.txt /*fold-manual*
+fold-marker fold.txt /*fold-marker*
+fold-methods fold.txt /*fold-methods*
+fold-options fold.txt /*fold-options*
+fold-syntax fold.txt /*fold-syntax*
+fold.txt fold.txt /*fold.txt*
+foldclosed() eval.txt /*foldclosed()*
+foldclosedend() eval.txt /*foldclosedend()*
+folddashes-variable eval.txt /*folddashes-variable*
+foldend-variable eval.txt /*foldend-variable*
+folding fold.txt /*folding*
+foldlevel() eval.txt /*foldlevel()*
+foldlevel-variable eval.txt /*foldlevel-variable*
+foldstart-variable eval.txt /*foldstart-variable*
+foldtext() eval.txt /*foldtext()*
+font-sizes gui_x11.txt /*font-sizes*
+fontset mbyte.txt /*fontset*
+foreground() eval.txt /*foreground()*
+fork os_unix.txt /*fork*
+form-syntax syntax.txt /*form-syntax*
+form.vim syntax.txt /*form.vim*
+format-bullet-list tips.txt /*format-bullet-list*
+format-comments change.txt /*format-comments*
+formatting change.txt /*formatting*
+formfeed intro.txt /*formfeed*
+fortran-indent indent.txt /*fortran-indent*
+fortran-plugin filetype.txt /*fortran-plugin*
+fortran-syntax syntax.txt /*fortran-syntax*
+fortran.vim syntax.txt /*fortran.vim*
+french-maillist intro.txt /*french-maillist*
+frombook usr_01.txt /*frombook*
+ftp pi_netrw.txt /*ftp*
+ftplugin usr_41.txt /*ftplugin*
+ftplugin-docs filetype.txt /*ftplugin-docs*
+ftplugin-name usr_05.txt /*ftplugin-name*
+ftplugin-overrule filetype.txt /*ftplugin-overrule*
+ftplugin-special usr_41.txt /*ftplugin-special*
+ftplugins usr_05.txt /*ftplugins*
+function-argument eval.txt /*function-argument*
+function-key intro.txt /*function-key*
+function-list usr_41.txt /*function-list*
+function-range-example eval.txt /*function-range-example*
+function_key intro.txt /*function_key*
+functions eval.txt /*functions*
+fvwm-syntax syntax.txt /*fvwm-syntax*
+fvwm.vim syntax.txt /*fvwm.vim*
+fvwm2rc syntax.txt /*fvwm2rc*
+fvwmrc syntax.txt /*fvwmrc*
+g index.txt /*g*
+g# pattern.txt /*g#*
+g$ motion.txt /*g$*
+g& change.txt /*g&*
+g' motion.txt /*g'*
+g'a motion.txt /*g'a*
+g, motion.txt /*g,*
+g0 motion.txt /*g0*
+g8 various.txt /*g8*
+g:explDateFormat pi_expl.txt /*g:explDateFormat*
+g:explDetailedHelp pi_expl.txt /*g:explDetailedHelp*
+g:explDetailedList pi_expl.txt /*g:explDetailedList*
+g:explDirsFirst pi_expl.txt /*g:explDirsFirst*
+g:explFileHandler pi_expl.txt /*g:explFileHandler*
+g:explHideFiles pi_expl.txt /*g:explHideFiles*
+g:explSortBy pi_expl.txt /*g:explSortBy*
+g:explSplitBelow pi_expl.txt /*g:explSplitBelow*
+g:explSplitRight pi_expl.txt /*g:explSplitRight*
+g:explStartBelow pi_expl.txt /*g:explStartBelow*
+g:explStartRight pi_expl.txt /*g:explStartRight*
+g:explSuffixesLast pi_expl.txt /*g:explSuffixesLast*
+g:explUseSeparators pi_expl.txt /*g:explUseSeparators*
+g:explVertical pi_expl.txt /*g:explVertical*
+g:explWinSize pi_expl.txt /*g:explWinSize*
+g:var eval.txt /*g:var*
+g; motion.txt /*g;*
+g<Down> motion.txt /*g<Down>*
+g<End> motion.txt /*g<End>*
+g<Home> motion.txt /*g<Home>*
+g<LeftMouse> tagsrch.txt /*g<LeftMouse>*
+g<RightMouse> tagsrch.txt /*g<RightMouse>*
+g<Up> motion.txt /*g<Up>*
+g? change.txt /*g?*
+g?? change.txt /*g??*
+g?g? change.txt /*g?g?*
+gD pattern.txt /*gD*
+gE motion.txt /*gE*
+gH visual.txt /*gH*
+gI insert.txt /*gI*
+gJ change.txt /*gJ*
+gP change.txt /*gP*
+gQ intro.txt /*gQ*
+gR change.txt /*gR*
+gU change.txt /*gU*
+gUU change.txt /*gUU*
+gUgU change.txt /*gUgU*
+gV visual.txt /*gV*
+g] tagsrch.txt /*g]*
+g^ motion.txt /*g^*
+g_ motion.txt /*g_*
+g_CTRL-A various.txt /*g_CTRL-A*
+g_CTRL-G editing.txt /*g_CTRL-G*
+g_CTRL-H visual.txt /*g_CTRL-H*
+g_CTRL-] tagsrch.txt /*g_CTRL-]*
+g` motion.txt /*g`*
+g`a motion.txt /*g`a*
+ga various.txt /*ga*
+gd pattern.txt /*gd*
+ge motion.txt /*ge*
+getbufvar() eval.txt /*getbufvar()*
+getchar() eval.txt /*getchar()*
+getcharmod() eval.txt /*getcharmod()*
+getcmdline() eval.txt /*getcmdline()*
+getcmdpos() eval.txt /*getcmdpos()*
+getcwd() eval.txt /*getcwd()*
+getfsize() eval.txt /*getfsize()*
+getftime() eval.txt /*getftime()*
+getline() eval.txt /*getline()*
+getreg() eval.txt /*getreg()*
+getregtype() eval.txt /*getregtype()*
+getwinposx() eval.txt /*getwinposx()*
+getwinposy() eval.txt /*getwinposy()*
+getwinvar() eval.txt /*getwinvar()*
+gex starting.txt /*gex*
+gf editing.txt /*gf*
+gg motion.txt /*gg*
+gh visual.txt /*gh*
+gi insert.txt /*gi*
+gj motion.txt /*gj*
+gk motion.txt /*gk*
+glob() eval.txt /*glob()*
+global-ime mbyte.txt /*global-ime*
+global-local options.txt /*global-local*
+global-variable eval.txt /*global-variable*
+globpath() eval.txt /*globpath()*
+gm motion.txt /*gm*
+gnome-session gui_x11.txt /*gnome-session*
+go motion.txt /*go*
+gp change.txt /*gp*
+gpm-mouse term.txt /*gpm-mouse*
+gq change.txt /*gq*
+gqap change.txt /*gqap*
+gqgq change.txt /*gqgq*
+gqq change.txt /*gqq*
+gr change.txt /*gr*
+graphic-option-gone version4.txt /*graphic-option-gone*
+greek options.txt /*greek*
+grep quickfix.txt /*grep*
+groff-syntax syntax.txt /*groff-syntax*
+groff.vim syntax.txt /*groff.vim*
+group-name syntax.txt /*group-name*
+gs various.txt /*gs*
+gsp.vim syntax.txt /*gsp.vim*
+gstar pattern.txt /*gstar*
+gtk-tooltip-colors gui_x11.txt /*gtk-tooltip-colors*
+gu change.txt /*gu*
+gugu change.txt /*gugu*
+gui gui.txt /*gui*
+gui-clipboard gui_w32.txt /*gui-clipboard*
+gui-colors syntax.txt /*gui-colors*
+gui-extras gui.txt /*gui-extras*
+gui-footer debugger.txt /*gui-footer*
+gui-fork gui_x11.txt /*gui-fork*
+gui-gnome gui_x11.txt /*gui-gnome*
+gui-gnome-session gui_x11.txt /*gui-gnome-session*
+gui-gtk gui_x11.txt /*gui-gtk*
+gui-gtk-socketid gui_x11.txt /*gui-gtk-socketid*
+gui-horiz-scroll gui.txt /*gui-horiz-scroll*
+gui-init gui.txt /*gui-init*
+gui-mouse gui.txt /*gui-mouse*
+gui-mouse-focus gui.txt /*gui-mouse-focus*
+gui-mouse-mapping gui.txt /*gui-mouse-mapping*
+gui-mouse-modeless gui.txt /*gui-mouse-modeless*
+gui-mouse-move gui.txt /*gui-mouse-move*
+gui-mouse-select gui.txt /*gui-mouse-select*
+gui-mouse-status gui.txt /*gui-mouse-status*
+gui-mouse-various gui.txt /*gui-mouse-various*
+gui-pty gui_x11.txt /*gui-pty*
+gui-pty-erase gui_x11.txt /*gui-pty-erase*
+gui-resources gui_x11.txt /*gui-resources*
+gui-scrollbars gui.txt /*gui-scrollbars*
+gui-selections gui.txt /*gui-selections*
+gui-shell gui.txt /*gui-shell*
+gui-shell-win32 gui_w32.txt /*gui-shell-win32*
+gui-start gui.txt /*gui-start*
+gui-toolbar gui.txt /*gui-toolbar*
+gui-vert-scroll gui.txt /*gui-vert-scroll*
+gui-w16 gui_w16.txt /*gui-w16*
+gui-w32 gui_w32.txt /*gui-w32*
+gui-w32-cmdargs gui_w32.txt /*gui-w32-cmdargs*
+gui-w32-dialogs gui_w32.txt /*gui-w32-dialogs*
+gui-w32-printing gui_w32.txt /*gui-w32-printing*
+gui-w32-start gui_w32.txt /*gui-w32-start*
+gui-w32-various gui_w32.txt /*gui-w32-various*
+gui-w32s gui_w32.txt /*gui-w32s*
+gui-win32-maximized gui_w32.txt /*gui-win32-maximized*
+gui-x11 gui_x11.txt /*gui-x11*
+gui-x11-athena gui_x11.txt /*gui-x11-athena*
+gui-x11-compiling gui_x11.txt /*gui-x11-compiling*
+gui-x11-gtk gui_x11.txt /*gui-x11-gtk*
+gui-x11-misc gui_x11.txt /*gui-x11-misc*
+gui-x11-motif gui_x11.txt /*gui-x11-motif*
+gui-x11-neXtaw gui_x11.txt /*gui-x11-neXtaw*
+gui-x11-printing gui_x11.txt /*gui-x11-printing*
+gui-x11-start gui_x11.txt /*gui-x11-start*
+gui-x11-various gui_x11.txt /*gui-x11-various*
+gui.txt gui.txt /*gui.txt*
+gui_w16.txt gui_w16.txt /*gui_w16.txt*
+gui_w32.txt gui_w32.txt /*gui_w32.txt*
+gui_x11.txt gui_x11.txt /*gui_x11.txt*
+guifontwide_gtk2 options.txt /*guifontwide_gtk2*
+guioptions_a options.txt /*guioptions_a*
+guu change.txt /*guu*
+gv visual.txt /*gv*
+gview starting.txt /*gview*
+gvim starting.txt /*gvim*
+gvimdiff diff.txt /*gvimdiff*
+gvimrc gui.txt /*gvimrc*
+gw change.txt /*gw*
+gzip pi_gzip.txt /*gzip*
+gzip-autocmd pi_gzip.txt /*gzip-autocmd*
+gzip-example autocmd.txt /*gzip-example*
+gzip-helpfile tips.txt /*gzip-helpfile*
+g~ change.txt /*g~*
+g~g~ change.txt /*g~g~*
+g~~ change.txt /*g~~*
+h motion.txt /*h*
+hangul hangulin.txt /*hangul*
+hangulin.txt hangulin.txt /*hangulin.txt*
+has() eval.txt /*has()*
+has-patch eval.txt /*has-patch*
+haskell-syntax syntax.txt /*haskell-syntax*
+haskell.vim syntax.txt /*haskell.vim*
+hasmapto() eval.txt /*hasmapto()*
+hebrew hebrew.txt /*hebrew*
+hebrew.txt hebrew.txt /*hebrew.txt*
+help various.txt /*help*
+help-context help.txt /*help-context*
+help-tags tags 1
+help-translated various.txt /*help-translated*
+help-xterm-window various.txt /*help-xterm-window*
+help.txt help.txt /*help.txt*
+hex-editing tips.txt /*hex-editing*
+hidden-buffer windows.txt /*hidden-buffer*
+hidden-changed version5.txt /*hidden-changed*
+hidden-menus gui.txt /*hidden-menus*
+hidden-quit windows.txt /*hidden-quit*
+highlight-args syntax.txt /*highlight-args*
+highlight-changed version4.txt /*highlight-changed*
+highlight-cterm syntax.txt /*highlight-cterm*
+highlight-ctermbg syntax.txt /*highlight-ctermbg*
+highlight-ctermfg syntax.txt /*highlight-ctermfg*
+highlight-default syntax.txt /*highlight-default*
+highlight-font syntax.txt /*highlight-font*
+highlight-groups syntax.txt /*highlight-groups*
+highlight-gui syntax.txt /*highlight-gui*
+highlight-guibg syntax.txt /*highlight-guibg*
+highlight-guifg syntax.txt /*highlight-guifg*
+highlight-start syntax.txt /*highlight-start*
+highlight-stop syntax.txt /*highlight-stop*
+highlight-term syntax.txt /*highlight-term*
+highlightID() eval.txt /*highlightID()*
+highlight_exists() eval.txt /*highlight_exists()*
+his cmdline.txt /*his*
+hist-names eval.txt /*hist-names*
+histadd() eval.txt /*histadd()*
+histdel() eval.txt /*histdel()*
+histget() eval.txt /*histget()*
+histnr() eval.txt /*histnr()*
+history cmdline.txt /*history*
+hit-enter message.txt /*hit-enter*
+hit-return message.txt /*hit-return*
+hitest.vim syntax.txt /*hitest.vim*
+hjkl usr_02.txt /*hjkl*
+hl-Cursor syntax.txt /*hl-Cursor*
+hl-CursorIM syntax.txt /*hl-CursorIM*
+hl-DiffAdd syntax.txt /*hl-DiffAdd*
+hl-DiffChange syntax.txt /*hl-DiffChange*
+hl-DiffDelete syntax.txt /*hl-DiffDelete*
+hl-DiffText syntax.txt /*hl-DiffText*
+hl-Directory syntax.txt /*hl-Directory*
+hl-ErrorMsg syntax.txt /*hl-ErrorMsg*
+hl-FoldColumn syntax.txt /*hl-FoldColumn*
+hl-Folded syntax.txt /*hl-Folded*
+hl-IncSearch syntax.txt /*hl-IncSearch*
+hl-LineNr syntax.txt /*hl-LineNr*
+hl-Menu syntax.txt /*hl-Menu*
+hl-ModeMsg syntax.txt /*hl-ModeMsg*
+hl-MoreMsg syntax.txt /*hl-MoreMsg*
+hl-NonText syntax.txt /*hl-NonText*
+hl-Normal syntax.txt /*hl-Normal*
+hl-Question syntax.txt /*hl-Question*
+hl-Scrollbar syntax.txt /*hl-Scrollbar*
+hl-Search syntax.txt /*hl-Search*
+hl-SignColumn syntax.txt /*hl-SignColumn*
+hl-SpecialKey syntax.txt /*hl-SpecialKey*
+hl-StatusLine syntax.txt /*hl-StatusLine*
+hl-StatusLineNC syntax.txt /*hl-StatusLineNC*
+hl-Title syntax.txt /*hl-Title*
+hl-Tooltip syntax.txt /*hl-Tooltip*
+hl-User1 syntax.txt /*hl-User1*
+hl-User1..9 syntax.txt /*hl-User1..9*
+hl-VertSplit syntax.txt /*hl-VertSplit*
+hl-Visual syntax.txt /*hl-Visual*
+hl-VisualNOS syntax.txt /*hl-VisualNOS*
+hl-WarningMsg syntax.txt /*hl-WarningMsg*
+hl-WildMenu syntax.txt /*hl-WildMenu*
+hlID() eval.txt /*hlID()*
+hlexists() eval.txt /*hlexists()*
+holy-grail index.txt /*holy-grail*
+home intro.txt /*home*
+home-replace editing.txt /*home-replace*
+hostname() eval.txt /*hostname()*
+how-do-i howto.txt /*how-do-i*
+how-to howto.txt /*how-to*
+howdoi howto.txt /*howdoi*
+howto howto.txt /*howto*
+howto.txt howto.txt /*howto.txt*
+hpterm term.txt /*hpterm*
+hpterm-color syntax.txt /*hpterm-color*
+html-syntax syntax.txt /*html-syntax*
+html.vim syntax.txt /*html.vim*
+htmlos-syntax syntax.txt /*htmlos-syntax*
+htmlos.vim syntax.txt /*htmlos.vim*
+http pi_netrw.txt /*http*
+i insert.txt /*i*
+i( motion.txt /*i(*
+i) motion.txt /*i)*
+i< motion.txt /*i<*
+i> motion.txt /*i>*
+iB motion.txt /*iB*
+iW motion.txt /*iW*
+i[ motion.txt /*i[*
+i] motion.txt /*i]*
+i_0_CTRL-D insert.txt /*i_0_CTRL-D*
+i_<BS> insert.txt /*i_<BS>*
+i_<C-End> insert.txt /*i_<C-End>*
+i_<C-Home> insert.txt /*i_<C-Home>*
+i_<C-Left> insert.txt /*i_<C-Left>*
+i_<C-Right> insert.txt /*i_<C-Right>*
+i_<CR> insert.txt /*i_<CR>*
+i_<Del> insert.txt /*i_<Del>*
+i_<Down> insert.txt /*i_<Down>*
+i_<End> insert.txt /*i_<End>*
+i_<Esc> insert.txt /*i_<Esc>*
+i_<F1> various.txt /*i_<F1>*
+i_<Help> various.txt /*i_<Help>*
+i_<Home> insert.txt /*i_<Home>*
+i_<Insert> insert.txt /*i_<Insert>*
+i_<Left> insert.txt /*i_<Left>*
+i_<LeftMouse> insert.txt /*i_<LeftMouse>*
+i_<MouseDown> insert.txt /*i_<MouseDown>*
+i_<MouseUp> insert.txt /*i_<MouseUp>*
+i_<NL> insert.txt /*i_<NL>*
+i_<PageDown> insert.txt /*i_<PageDown>*
+i_<PageUp> insert.txt /*i_<PageUp>*
+i_<Right> insert.txt /*i_<Right>*
+i_<S-Down> insert.txt /*i_<S-Down>*
+i_<S-Left> insert.txt /*i_<S-Left>*
+i_<S-MouseDown> insert.txt /*i_<S-MouseDown>*
+i_<S-MouseUp> insert.txt /*i_<S-MouseUp>*
+i_<S-Right> insert.txt /*i_<S-Right>*
+i_<S-Up> insert.txt /*i_<S-Up>*
+i_<Tab> insert.txt /*i_<Tab>*
+i_<Up> insert.txt /*i_<Up>*
+i_BS insert.txt /*i_BS*
+i_CTRL-@ insert.txt /*i_CTRL-@*
+i_CTRL-A insert.txt /*i_CTRL-A*
+i_CTRL-B-gone version5.txt /*i_CTRL-B-gone*
+i_CTRL-C insert.txt /*i_CTRL-C*
+i_CTRL-D insert.txt /*i_CTRL-D*
+i_CTRL-E insert.txt /*i_CTRL-E*
+i_CTRL-G_<Down> insert.txt /*i_CTRL-G_<Down>*
+i_CTRL-G_<Up> insert.txt /*i_CTRL-G_<Up>*
+i_CTRL-G_CTRL-J insert.txt /*i_CTRL-G_CTRL-J*
+i_CTRL-G_CTRL-K insert.txt /*i_CTRL-G_CTRL-K*
+i_CTRL-G_j insert.txt /*i_CTRL-G_j*
+i_CTRL-G_k insert.txt /*i_CTRL-G_k*
+i_CTRL-G_u insert.txt /*i_CTRL-G_u*
+i_CTRL-H insert.txt /*i_CTRL-H*
+i_CTRL-I insert.txt /*i_CTRL-I*
+i_CTRL-J insert.txt /*i_CTRL-J*
+i_CTRL-K insert.txt /*i_CTRL-K*
+i_CTRL-L options.txt /*i_CTRL-L*
+i_CTRL-M insert.txt /*i_CTRL-M*
+i_CTRL-N insert.txt /*i_CTRL-N*
+i_CTRL-O insert.txt /*i_CTRL-O*
+i_CTRL-P insert.txt /*i_CTRL-P*
+i_CTRL-Q insert.txt /*i_CTRL-Q*
+i_CTRL-R insert.txt /*i_CTRL-R*
+i_CTRL-R_CTRL-O insert.txt /*i_CTRL-R_CTRL-O*
+i_CTRL-R_CTRL-P insert.txt /*i_CTRL-R_CTRL-P*
+i_CTRL-R_CTRL-R insert.txt /*i_CTRL-R_CTRL-R*
+i_CTRL-T insert.txt /*i_CTRL-T*
+i_CTRL-U insert.txt /*i_CTRL-U*
+i_CTRL-V insert.txt /*i_CTRL-V*
+i_CTRL-V_digit insert.txt /*i_CTRL-V_digit*
+i_CTRL-W insert.txt /*i_CTRL-W*
+i_CTRL-X insert.txt /*i_CTRL-X*
+i_CTRL-X_CTRL-D insert.txt /*i_CTRL-X_CTRL-D*
+i_CTRL-X_CTRL-E insert.txt /*i_CTRL-X_CTRL-E*
+i_CTRL-X_CTRL-F insert.txt /*i_CTRL-X_CTRL-F*
+i_CTRL-X_CTRL-I insert.txt /*i_CTRL-X_CTRL-I*
+i_CTRL-X_CTRL-K insert.txt /*i_CTRL-X_CTRL-K*
+i_CTRL-X_CTRL-L insert.txt /*i_CTRL-X_CTRL-L*
+i_CTRL-X_CTRL-N insert.txt /*i_CTRL-X_CTRL-N*
+i_CTRL-X_CTRL-P insert.txt /*i_CTRL-X_CTRL-P*
+i_CTRL-X_CTRL-T insert.txt /*i_CTRL-X_CTRL-T*
+i_CTRL-X_CTRL-V insert.txt /*i_CTRL-X_CTRL-V*
+i_CTRL-X_CTRL-Y insert.txt /*i_CTRL-X_CTRL-Y*
+i_CTRL-X_CTRL-] insert.txt /*i_CTRL-X_CTRL-]*
+i_CTRL-Y insert.txt /*i_CTRL-Y*
+i_CTRL-Z options.txt /*i_CTRL-Z*
+i_CTRL-[ insert.txt /*i_CTRL-[*
+i_CTRL-\_CTRL-G intro.txt /*i_CTRL-\\_CTRL-G*
+i_CTRL-\_CTRL-N intro.txt /*i_CTRL-\\_CTRL-N*
+i_CTRL-] insert.txt /*i_CTRL-]*
+i_CTRL-^ insert.txt /*i_CTRL-^*
+i_CTRL-_ insert.txt /*i_CTRL-_*
+i_DEL insert.txt /*i_DEL*
+i_Tab insert.txt /*i_Tab*
+i_^_CTRL-D insert.txt /*i_^_CTRL-D*
+i_backspacing insert.txt /*i_backspacing*
+i_digraph digraph.txt /*i_digraph*
+i_esc intro.txt /*i_esc*
+ia64-syntax syntax.txt /*ia64-syntax*
+ia64.vim syntax.txt /*ia64.vim*
+ib motion.txt /*ib*
+iccf uganda.txt /*iccf*
+icon-changed version4.txt /*icon-changed*
+iconise starting.txt /*iconise*
+iconize starting.txt /*iconize*
+iconv() eval.txt /*iconv()*
+ident-search tips.txt /*ident-search*
+if_cscop.txt if_cscop.txt /*if_cscop.txt*
+if_ole.txt if_ole.txt /*if_ole.txt*
+if_perl.txt if_perl.txt /*if_perl.txt*
+if_pyth.txt if_pyth.txt /*if_pyth.txt*
+if_ruby.txt if_ruby.txt /*if_ruby.txt*
+if_sniff.txt if_sniff.txt /*if_sniff.txt*
+if_tcl.txt if_tcl.txt /*if_tcl.txt*
+ignore-errors eval.txt /*ignore-errors*
+improved-autocmds-5.4 version5.txt /*improved-autocmds-5.4*
+improved-quickfix version5.txt /*improved-quickfix*
+improved-sessions version5.txt /*improved-sessions*
+improved-viminfo version5.txt /*improved-viminfo*
+improvements-5 version5.txt /*improvements-5*
+improvements-6 version6.txt /*improvements-6*
+inactive-buffer windows.txt /*inactive-buffer*
+include-search tagsrch.txt /*include-search*
+inclusive motion.txt /*inclusive*
+incomp-small-6 version6.txt /*incomp-small-6*
+incompatible-5 version5.txt /*incompatible-5*
+incompatible-6 version6.txt /*incompatible-6*
+indent() eval.txt /*indent()*
+indent-expression indent.txt /*indent-expression*
+indent.txt indent.txt /*indent.txt*
+indentkeys-format indent.txt /*indentkeys-format*
+index index.txt /*index*
+index.txt index.txt /*index.txt*
+info-message starting.txt /*info-message*
+inform-syntax syntax.txt /*inform-syntax*
+inform.vim syntax.txt /*inform.vim*
+initialization starting.txt /*initialization*
+input() eval.txt /*input()*
+inputdialog() eval.txt /*inputdialog()*
+inputrestore() eval.txt /*inputrestore()*
+inputsave() eval.txt /*inputsave()*
+inputsecret() eval.txt /*inputsecret()*
+ins-completion insert.txt /*ins-completion*
+ins-expandtab insert.txt /*ins-expandtab*
+ins-reverse rileft.txt /*ins-reverse*
+ins-smarttab insert.txt /*ins-smarttab*
+ins-softtabstop insert.txt /*ins-softtabstop*
+ins-special-keys insert.txt /*ins-special-keys*
+ins-special-special insert.txt /*ins-special-special*
+ins-textwidth insert.txt /*ins-textwidth*
+insert insert.txt /*insert*
+insert-index index.txt /*insert-index*
+insert.txt insert.txt /*insert.txt*
+insert_expand insert.txt /*insert_expand*
+inserting insert.txt /*inserting*
+inserting-ex insert.txt /*inserting-ex*
+inserting-file insert.txt /*inserting-file*
+install usr_90.txt /*install*
+install-home usr_90.txt /*install-home*
+install-registry gui_w32.txt /*install-registry*
+intel-itanium syntax.txt /*intel-itanium*
+intellimouse-wheel-problems gui_w32.txt /*intellimouse-wheel-problems*
+interfaces-5.2 version5.txt /*interfaces-5.2*
+internal-variables eval.txt /*internal-variables*
+internet intro.txt /*internet*
+intro intro.txt /*intro*
+intro.txt intro.txt /*intro.txt*
+ip motion.txt /*ip*
+is motion.txt /*is*
+isdirectory() eval.txt /*isdirectory()*
+iw motion.txt /*iw*
+i{ motion.txt /*i{*
+i} motion.txt /*i}*
+j motion.txt /*j*
+java-cinoptions indent.txt /*java-cinoptions*
+java-indenting indent.txt /*java-indenting*
+java-syntax syntax.txt /*java-syntax*
+java.vim syntax.txt /*java.vim*
+jsbterm-mouse options.txt /*jsbterm-mouse*
+jtags tagsrch.txt /*jtags*
+jump-motions motion.txt /*jump-motions*
+jumplist motion.txt /*jumplist*
+jumpto-diffs diff.txt /*jumpto-diffs*
+k motion.txt /*k*
+kcc uganda.txt /*kcc*
+key-codes intro.txt /*key-codes*
+key-codes-changed version4.txt /*key-codes-changed*
+key-mapping map.txt /*key-mapping*
+key-notation intro.txt /*key-notation*
+keycodes intro.txt /*keycodes*
+keymap-file-format mbyte.txt /*keymap-file-format*
+keymap-hebrew mbyte.txt /*keymap-hebrew*
+keypad-0 intro.txt /*keypad-0*
+keypad-9 intro.txt /*keypad-9*
+keypad-divide intro.txt /*keypad-divide*
+keypad-end intro.txt /*keypad-end*
+keypad-enter intro.txt /*keypad-enter*
+keypad-home intro.txt /*keypad-home*
+keypad-minus intro.txt /*keypad-minus*
+keypad-multiply intro.txt /*keypad-multiply*
+keypad-page-down intro.txt /*keypad-page-down*
+keypad-page-up intro.txt /*keypad-page-up*
+keypad-plus intro.txt /*keypad-plus*
+keypad-point intro.txt /*keypad-point*
+known-bugs todo.txt /*known-bugs*
+l motion.txt /*l*
+l:var eval.txt /*l:var*
+lace-syntax syntax.txt /*lace-syntax*
+lace.vim syntax.txt /*lace.vim*
+lang-variable eval.txt /*lang-variable*
+language-mapping map.txt /*language-mapping*
+last-pattern pattern.txt /*last-pattern*
+last-position-jump eval.txt /*last-position-jump*
+last_buffer_nr() eval.txt /*last_buffer_nr()*
+lc_time-variable eval.txt /*lc_time-variable*
+left-right-motions motion.txt /*left-right-motions*
+less various.txt /*less*
+letter options.txt /*letter*
+lex-syntax syntax.txt /*lex-syntax*
+lex.vim syntax.txt /*lex.vim*
+lhaskell.vim syntax.txt /*lhaskell.vim*
+libcall() eval.txt /*libcall()*
+libcallnr() eval.txt /*libcallnr()*
+license uganda.txt /*license*
+lid quickfix.txt /*lid*
+limits vi_diff.txt /*limits*
+line() eval.txt /*line()*
+line-continuation repeat.txt /*line-continuation*
+line2byte() eval.txt /*line2byte()*
+linefeed intro.txt /*linefeed*
+linewise motion.txt /*linewise*
+linewise-register change.txt /*linewise-register*
+linewise-visual visual.txt /*linewise-visual*
+lispindent() eval.txt /*lispindent()*
+list-repeat windows.txt /*list-repeat*
+lite-syntax syntax.txt /*lite-syntax*
+lite.vim syntax.txt /*lite.vim*
+literal-string eval.txt /*literal-string*
+lnum-variable eval.txt /*lnum-variable*
+load-plugins starting.txt /*load-plugins*
+load-vim-script repeat.txt /*load-vim-script*
+local-additions help.txt /*local-additions*
+local-function eval.txt /*local-function*
+local-options options.txt /*local-options*
+local-variable eval.txt /*local-variable*
+locale mbyte.txt /*locale*
+locale-name mbyte.txt /*locale-name*
+localtime() eval.txt /*localtime()*
+long-lines version5.txt /*long-lines*
+lowercase change.txt /*lowercase*
+lpc-syntax syntax.txt /*lpc-syntax*
+lpc.vim syntax.txt /*lpc.vim*
+lua-syntax syntax.txt /*lua-syntax*
+lua.vim syntax.txt /*lua.vim*
+m motion.txt /*m*
+m' motion.txt /*m'*
+m[ motion.txt /*m[*
+m] motion.txt /*m]*
+m` motion.txt /*m`*
+mac os_mac.txt /*mac*
+mac-bug os_mac.txt /*mac-bug*
+mac-compile os_mac.txt /*mac-compile*
+mac-faq os_mac.txt /*mac-faq*
+mac-filename os_mac.txt /*mac-filename*
+mac-lack os_mac.txt /*mac-lack*
+mac-vimfile os_mac.txt /*mac-vimfile*
+macintosh os_mac.txt /*macintosh*
+macro map.txt /*macro*
+mail-list intro.txt /*mail-list*
+mail-plugin filetype.txt /*mail-plugin*
+mail.vim syntax.txt /*mail.vim*
+maillist intro.txt /*maillist*
+maillist-archive intro.txt /*maillist-archive*
+make-syntax syntax.txt /*make-syntax*
+make.vim syntax.txt /*make.vim*
+man-plugin filetype.txt /*man-plugin*
+manual-copyright usr_01.txt /*manual-copyright*
+map-<SID> map.txt /*map-<SID>*
+map-ambiguous map.txt /*map-ambiguous*
+map-backtick tips.txt /*map-backtick*
+map-comments map.txt /*map-comments*
+map-examples map.txt /*map-examples*
+map-keys-fails map.txt /*map-keys-fails*
+map-listing map.txt /*map-listing*
+map-modes map.txt /*map-modes*
+map-multibyte map.txt /*map-multibyte*
+map-overview map.txt /*map-overview*
+map-self-destroy tips.txt /*map-self-destroy*
+map-typing map.txt /*map-typing*
+map-which-keys map.txt /*map-which-keys*
+map.txt map.txt /*map.txt*
+map_CTRL_C map.txt /*map_CTRL_C*
+map_backslash map.txt /*map_backslash*
+map_bar map.txt /*map_bar*
+map_empty_rhs map.txt /*map_empty_rhs*
+map_return map.txt /*map_return*
+map_space_in_lhs map.txt /*map_space_in_lhs*
+map_space_in_rhs map.txt /*map_space_in_rhs*
+maparg() eval.txt /*maparg()*
+mapcheck() eval.txt /*mapcheck()*
+maple-syntax syntax.txt /*maple-syntax*
+maple.vim syntax.txt /*maple.vim*
+mapleader map.txt /*mapleader*
+maplocalleader map.txt /*maplocalleader*
+mapping map.txt /*mapping*
+mark motion.txt /*mark*
+mark-motions motion.txt /*mark-motions*
+masm-syntax syntax.txt /*masm-syntax*
+masm.vim syntax.txt /*masm.vim*
+match() eval.txt /*match()*
+match-highlight pattern.txt /*match-highlight*
+matchend() eval.txt /*matchend()*
+matchit-install usr_05.txt /*matchit-install*
+matchstr() eval.txt /*matchstr()*
+mbyte-IME mbyte.txt /*mbyte-IME*
+mbyte-XIM mbyte.txt /*mbyte-XIM*
+mbyte-conversion mbyte.txt /*mbyte-conversion*
+mbyte-encoding mbyte.txt /*mbyte-encoding*
+mbyte-first mbyte.txt /*mbyte-first*
+mbyte-fonts-MSwin mbyte.txt /*mbyte-fonts-MSwin*
+mbyte-fonts-X11 mbyte.txt /*mbyte-fonts-X11*
+mbyte-keymap mbyte.txt /*mbyte-keymap*
+mbyte-locale mbyte.txt /*mbyte-locale*
+mbyte-options mbyte.txt /*mbyte-options*
+mbyte-terminal mbyte.txt /*mbyte-terminal*
+mbyte-utf8 mbyte.txt /*mbyte-utf8*
+mbyte.txt mbyte.txt /*mbyte.txt*
+menu-changes-5.4 version5.txt /*menu-changes-5.4*
+menu-examples gui.txt /*menu-examples*
+menu-priority gui.txt /*menu-priority*
+menu-separator gui.txt /*menu-separator*
+menu.vim gui.txt /*menu.vim*
+menus gui.txt /*menus*
+message-history message.txt /*message-history*
+message.txt message.txt /*message.txt*
+messages message.txt /*messages*
+meta intro.txt /*meta*
+minimal-features os_msdos.txt /*minimal-features*
+missing-commands vi_diff.txt /*missing-commands*
+missing-options vi_diff.txt /*missing-options*
+mlang.txt mlang.txt /*mlang.txt*
+mode() eval.txt /*mode()*
+mode-Ex intro.txt /*mode-Ex*
+mode-cmdline cmdline.txt /*mode-cmdline*
+mode-ins-repl insert.txt /*mode-ins-repl*
+mode-replace insert.txt /*mode-replace*
+mode-switching intro.txt /*mode-switching*
+modeless-and-clipboard version6.txt /*modeless-and-clipboard*
+modeless-selection gui.txt /*modeless-selection*
+modeline options.txt /*modeline*
+modeline-local options.txt /*modeline-local*
+modeline-version options.txt /*modeline-version*
+moo-syntax syntax.txt /*moo-syntax*
+moo.vim syntax.txt /*moo.vim*
+more-compatible version5.txt /*more-compatible*
+more-prompt message.txt /*more-prompt*
+motion.txt motion.txt /*motion.txt*
+mouse-mode-table term.txt /*mouse-mode-table*
+mouse-overview term.txt /*mouse-overview*
+mouse-swap-buttons term.txt /*mouse-swap-buttons*
+mouse-using term.txt /*mouse-using*
+ms-dos os_msdos.txt /*ms-dos*
+msdos os_msdos.txt /*msdos*
+msdos-arrows os_msdos.txt /*msdos-arrows*
+msdos-clipboard-limits os_msdos.txt /*msdos-clipboard-limits*
+msdos-compiling os_msdos.txt /*msdos-compiling*
+msdos-copy-paste os_msdos.txt /*msdos-copy-paste*
+msdos-fname-extensions os_msdos.txt /*msdos-fname-extensions*
+msdos-limitations os_msdos.txt /*msdos-limitations*
+msdos-linked-files os_msdos.txt /*msdos-linked-files*
+msdos-longfname os_msdos.txt /*msdos-longfname*
+msdos-mode gui_w32.txt /*msdos-mode*
+msdos-problems os_msdos.txt /*msdos-problems*
+msdos-termcap os_msdos.txt /*msdos-termcap*
+msdos-versions os_msdos.txt /*msdos-versions*
+msql-syntax syntax.txt /*msql-syntax*
+msql.vim syntax.txt /*msql.vim*
+mswin.vim gui_w32.txt /*mswin.vim*
+multi-byte mbyte.txt /*multi-byte*
+multi-lang mlang.txt /*multi-lang*
+multi-repeat repeat.txt /*multi-repeat*
+multibyte mbyte.txt /*multibyte*
+multibyte-ime mbyte.txt /*multibyte-ime*
+multibyte-input mbyte.txt /*multibyte-input*
+multilang mlang.txt /*multilang*
+multilang-menus mlang.txt /*multilang-menus*
+multilang-messages mlang.txt /*multilang-messages*
+multilang-scripts mlang.txt /*multilang-scripts*
+myfiletypefile syntax.txt /*myfiletypefile*
+myscriptsfile syntax.txt /*myscriptsfile*
+mysyntaxfile syntax.txt /*mysyntaxfile*
+mysyntaxfile-add syntax.txt /*mysyntaxfile-add*
+mysyntaxfile-replace syntax.txt /*mysyntaxfile-replace*
+n pattern.txt /*n*
+nasm-syntax syntax.txt /*nasm-syntax*
+nasm.vim syntax.txt /*nasm.vim*
+navigation motion.txt /*navigation*
+nb-commands netbeans.txt /*nb-commands*
+nb-events netbeans.txt /*nb-events*
+nb-functions netbeans.txt /*nb-functions*
+nb-messages netbeans.txt /*nb-messages*
+nb-special netbeans.txt /*nb-special*
+nb-terms netbeans.txt /*nb-terms*
+ncf-syntax syntax.txt /*ncf-syntax*
+ncf.vim syntax.txt /*ncf.vim*
+netbeans netbeans.txt /*netbeans*
+netbeans-configure netbeans.txt /*netbeans-configure*
+netbeans-download netbeans.txt /*netbeans-download*
+netbeans-intro netbeans.txt /*netbeans-intro*
+netbeans-keybindings netbeans.txt /*netbeans-keybindings*
+netbeans-messages netbeans.txt /*netbeans-messages*
+netbeans-preparation netbeans.txt /*netbeans-preparation*
+netbeans-problems netbeans.txt /*netbeans-problems*
+netbeans-protocol netbeans.txt /*netbeans-protocol*
+netbeans-run netbeans.txt /*netbeans-run*
+netbeans-setup netbeans.txt /*netbeans-setup*
+netbeans-support netbeans.txt /*netbeans-support*
+netbeans.txt netbeans.txt /*netbeans.txt*
+netrw pi_netrw.txt /*netrw*
+netrw-activate pi_netrw.txt /*netrw-activate*
+netrw-contents pi_netrw.txt /*netrw-contents*
+netrw-credits pi_netrw.txt /*netrw-credits*
+netrw-debug pi_netrw.txt /*netrw-debug*
+netrw-ex pi_netrw.txt /*netrw-ex*
+netrw-file pi_netrw.txt /*netrw-file*
+netrw-fixup pi_netrw.txt /*netrw-fixup*
+netrw-netrc pi_netrw.txt /*netrw-netrc*
+netrw-new pi_netrw.txt /*netrw-new*
+netrw-newstuff pi_netrw.txt /*netrw-newstuff*
+netrw-options pi_netrw.txt /*netrw-options*
+netrw-passwd pi_netrw.txt /*netrw-passwd*
+netrw-protocol pi_netrw.txt /*netrw-protocol*
+netrw-ref pi_netrw.txt /*netrw-ref*
+netrw-transparent pi_netrw.txt /*netrw-transparent*
+netrw-uidpass pi_netrw.txt /*netrw-uidpass*
+netrw-urls pi_netrw.txt /*netrw-urls*
+netrw-var pi_netrw.txt /*netrw-var*
+netrw-xfer pi_netrw.txt /*netrw-xfer*
+netrw.vim pi_netrw.txt /*netrw.vim*
+netterm-mouse options.txt /*netterm-mouse*
+network pi_netrw.txt /*network*
+new-5 version5.txt /*new-5*
+new-6 version6.txt /*new-6*
+new-GTK-GUI version5.txt /*new-GTK-GUI*
+new-Select-mode version5.txt /*new-Select-mode*
+new-View version6.txt /*new-View*
+new-argument-list version6.txt /*new-argument-list*
+new-buftype version6.txt /*new-buftype*
+new-cmdwin version6.txt /*new-cmdwin*
+new-color-schemes version6.txt /*new-color-schemes*
+new-commands version5.txt /*new-commands*
+new-commands-5.4 version5.txt /*new-commands-5.4*
+new-debug-itf version6.txt /*new-debug-itf*
+new-debug-mode version6.txt /*new-debug-mode*
+new-diff-mode version6.txt /*new-diff-mode*
+new-encryption version5.txt /*new-encryption*
+new-evim version6.txt /*new-evim*
+new-ex-commands-5.2 version5.txt /*new-ex-commands-5.2*
+new-file-browser version6.txt /*new-file-browser*
+new-file-writing version6.txt /*new-file-writing*
+new-filetype filetype.txt /*new-filetype*
+new-filetype-5.4 version5.txt /*new-filetype-5.4*
+new-filetype-plugins version6.txt /*new-filetype-plugins*
+new-filetype-scripts filetype.txt /*new-filetype-scripts*
+new-folding version6.txt /*new-folding*
+new-functions-5.2 version5.txt /*new-functions-5.2*
+new-global-values version6.txt /*new-global-values*
+new-highlighting version5.txt /*new-highlighting*
+new-indent-flex version6.txt /*new-indent-flex*
+new-items-6 version6.txt /*new-items-6*
+new-line-continuation version5.txt /*new-line-continuation*
+new-multi-byte version5.txt /*new-multi-byte*
+new-multi-lang version6.txt /*new-multi-lang*
+new-network-files version6.txt /*new-network-files*
+new-operator-mod version6.txt /*new-operator-mod*
+new-options-5.2 version5.txt /*new-options-5.2*
+new-options-5.4 version5.txt /*new-options-5.4*
+new-perl-python version5.txt /*new-perl-python*
+new-plugins version6.txt /*new-plugins*
+new-printing version6.txt /*new-printing*
+new-runtime-dir version5.txt /*new-runtime-dir*
+new-script version5.txt /*new-script*
+new-script-5.4 version5.txt /*new-script-5.4*
+new-search-path version6.txt /*new-search-path*
+new-searchpat version6.txt /*new-searchpat*
+new-session-files version5.txt /*new-session-files*
+new-unlisted-buffers version6.txt /*new-unlisted-buffers*
+new-user-defined version5.txt /*new-user-defined*
+new-user-manual version6.txt /*new-user-manual*
+new-utf-8 version6.txt /*new-utf-8*
+new-vertsplit version6.txt /*new-vertsplit*
+new-vim-server version6.txt /*new-vim-server*
+new-virtedit version6.txt /*new-virtedit*
+news intro.txt /*news*
+nextnonblank() eval.txt /*nextnonblank()*
+no-eval-feature eval.txt /*no-eval-feature*
+no_buffers_menu gui.txt /*no_buffers_menu*
+normal-index index.txt /*normal-index*
+not-compatible usr_01.txt /*not-compatible*
+not-edited editing.txt /*not-edited*
+notation intro.txt /*notation*
+notepad gui_w32.txt /*notepad*
+nr2char() eval.txt /*nr2char()*
+nroff-syntax syntax.txt /*nroff-syntax*
+nroff.vim syntax.txt /*nroff.vim*
+o insert.txt /*o*
+o_CTRL-V motion.txt /*o_CTRL-V*
+o_V motion.txt /*o_V*
+o_v motion.txt /*o_v*
+object-motions motion.txt /*object-motions*
+object-select motion.txt /*object-select*
+objects index.txt /*objects*
+obtaining-exted netbeans.txt /*obtaining-exted*
+ocaml-syntax syntax.txt /*ocaml-syntax*
+ocaml.vim syntax.txt /*ocaml.vim*
+ole-activation if_ole.txt /*ole-activation*
+ole-eval if_ole.txt /*ole-eval*
+ole-gethwnd if_ole.txt /*ole-gethwnd*
+ole-interface if_ole.txt /*ole-interface*
+ole-methods if_ole.txt /*ole-methods*
+ole-normal if_ole.txt /*ole-normal*
+ole-registration if_ole.txt /*ole-registration*
+ole-sendkeys if_ole.txt /*ole-sendkeys*
+ole-setforeground if_ole.txt /*ole-setforeground*
+online-help various.txt /*online-help*
+opening-window windows.txt /*opening-window*
+operator motion.txt /*operator*
+option-backslash options.txt /*option-backslash*
+option-list quickref.txt /*option-list*
+option-summary options.txt /*option-summary*
+options options.txt /*options*
+options-changed version5.txt /*options-changed*
+options.txt options.txt /*options.txt*
+os2 os_os2.txt /*os2*
+os2ansi os_os2.txt /*os2ansi*
+os390 os_390.txt /*os390*
+os_390.txt os_390.txt /*os_390.txt*
+os_amiga.txt os_amiga.txt /*os_amiga.txt*
+os_beos.txt os_beos.txt /*os_beos.txt*
+os_dos.txt os_dos.txt /*os_dos.txt*
+os_mac.txt os_mac.txt /*os_mac.txt*
+os_mint.txt os_mint.txt /*os_mint.txt*
+os_msdos.txt os_msdos.txt /*os_msdos.txt*
+os_os2.txt os_os2.txt /*os_os2.txt*
+os_qnx.txt os_qnx.txt /*os_qnx.txt*
+os_risc.txt os_risc.txt /*os_risc.txt*
+os_unix.txt os_unix.txt /*os_unix.txt*
+os_vms.txt os_vms.txt /*os_vms.txt*
+os_win32.txt os_win32.txt /*os_win32.txt*
+other-features vi_diff.txt /*other-features*
+p change.txt /*p*
+page-down intro.txt /*page-down*
+page-up intro.txt /*page-up*
+page_down intro.txt /*page_down*
+page_up intro.txt /*page_up*
+pager message.txt /*pager*
+papp-syntax syntax.txt /*papp-syntax*
+papp.vim syntax.txt /*papp.vim*
+paragraph motion.txt /*paragraph*
+pascal-syntax syntax.txt /*pascal-syntax*
+pascal.vim syntax.txt /*pascal.vim*
+pattern pattern.txt /*pattern*
+pattern-atoms pattern.txt /*pattern-atoms*
+pattern-multi-byte pattern.txt /*pattern-multi-byte*
+pattern-multi-items pattern.txt /*pattern-multi-items*
+pattern-overview pattern.txt /*pattern-overview*
+pattern-searches pattern.txt /*pattern-searches*
+pattern.txt pattern.txt /*pattern.txt*
+perl if_perl.txt /*perl*
+perl-Append if_perl.txt /*perl-Append*
+perl-Buffer if_perl.txt /*perl-Buffer*
+perl-Buffers if_perl.txt /*perl-Buffers*
+perl-Count if_perl.txt /*perl-Count*
+perl-Delete if_perl.txt /*perl-Delete*
+perl-DoCommand if_perl.txt /*perl-DoCommand*
+perl-Eval if_perl.txt /*perl-Eval*
+perl-Get if_perl.txt /*perl-Get*
+perl-GetCursor if_perl.txt /*perl-GetCursor*
+perl-Msg if_perl.txt /*perl-Msg*
+perl-Name if_perl.txt /*perl-Name*
+perl-Number if_perl.txt /*perl-Number*
+perl-Set if_perl.txt /*perl-Set*
+perl-SetHeight if_perl.txt /*perl-SetHeight*
+perl-SetOption if_perl.txt /*perl-SetOption*
+perl-Windows if_perl.txt /*perl-Windows*
+perl-compiling if_perl.txt /*perl-compiling*
+perl-editing if_perl.txt /*perl-editing*
+perl-overview if_perl.txt /*perl-overview*
+perl-patterns pattern.txt /*perl-patterns*
+perl-syntax syntax.txt /*perl-syntax*
+perl-using if_perl.txt /*perl-using*
+perl.vim syntax.txt /*perl.vim*
+photon-fonts os_qnx.txt /*photon-fonts*
+photon-gui os_qnx.txt /*photon-gui*
+php-syntax syntax.txt /*php-syntax*
+php.vim syntax.txt /*php.vim*
+php3-syntax syntax.txt /*php3-syntax*
+php3.vim syntax.txt /*php3.vim*
+phtml-syntax syntax.txt /*phtml-syntax*
+phtml.vim syntax.txt /*phtml.vim*
+pi_expl.txt pi_expl.txt /*pi_expl.txt*
+pi_gzip.txt pi_gzip.txt /*pi_gzip.txt*
+pi_netrw.txt pi_netrw.txt /*pi_netrw.txt*
+pi_spec.txt pi_spec.txt /*pi_spec.txt*
+plugin usr_05.txt /*plugin*
+plugin-details filetype.txt /*plugin-details*
+plugin-filetype usr_41.txt /*plugin-filetype*
+plugin-special usr_41.txt /*plugin-special*
+popup-menu gui.txt /*popup-menu*
+popup-menu-added version5.txt /*popup-menu-added*
+ports-5.2 version5.txt /*ports-5.2*
+ports-6 version6.txt /*ports-6*
+postscr-syntax syntax.txt /*postscr-syntax*
+postscr.vim syntax.txt /*postscr.vim*
+postscript-print-encoding various.txt /*postscript-print-encoding*
+postscript-print-trouble various.txt /*postscript-print-trouble*
+postscript-print-util various.txt /*postscript-print-util*
+postscript-printing various.txt /*postscript-printing*
+ppwiz-syntax syntax.txt /*ppwiz-syntax*
+ppwiz.vim syntax.txt /*ppwiz.vim*
+press-enter message.txt /*press-enter*
+press-return message.txt /*press-return*
+prevcount-variable eval.txt /*prevcount-variable*
+preview-window windows.txt /*preview-window*
+prevnonblank() eval.txt /*prevnonblank()*
+printcap-syntax syntax.txt /*printcap-syntax*
+printing various.txt /*printing*
+printing-formfeed various.txt /*printing-formfeed*
+progname-variable eval.txt /*progname-variable*
+progress-syntax syntax.txt /*progress-syntax*
+progress.vim syntax.txt /*progress.vim*
+ptcap-syntax syntax.txt /*ptcap-syntax*
+ptcap.vim syntax.txt /*ptcap.vim*
+pterm-mouse options.txt /*pterm-mouse*
+put change.txt /*put*
+put-Visual-mode change.txt /*put-Visual-mode*
+python if_pyth.txt /*python*
+python-buffer if_pyth.txt /*python-buffer*
+python-buffers if_pyth.txt /*python-buffers*
+python-command if_pyth.txt /*python-command*
+python-commands if_pyth.txt /*python-commands*
+python-current if_pyth.txt /*python-current*
+python-error if_pyth.txt /*python-error*
+python-eval if_pyth.txt /*python-eval*
+python-examples if_pyth.txt /*python-examples*
+python-input if_pyth.txt /*python-input*
+python-output if_pyth.txt /*python-output*
+python-range if_pyth.txt /*python-range*
+python-syntax syntax.txt /*python-syntax*
+python-vim if_pyth.txt /*python-vim*
+python-window if_pyth.txt /*python-window*
+python-windows if_pyth.txt /*python-windows*
+python.vim syntax.txt /*python.vim*
+q repeat.txt /*q*
+q/ cmdline.txt /*q\/*
+q: cmdline.txt /*q:*
+q? cmdline.txt /*q?*
+qnx os_qnx.txt /*qnx*
+qnx-compiling os_qnx.txt /*qnx-compiling*
+qnx-general os_qnx.txt /*qnx-general*
+qnx-terminal os_qnx.txt /*qnx-terminal*
+quake-syntax syntax.txt /*quake-syntax*
+quake.vim syntax.txt /*quake.vim*
+quickfix quickfix.txt /*quickfix*
+quickfix-6 version6.txt /*quickfix-6*
+quickfix-directory-stack quickfix.txt /*quickfix-directory-stack*
+quickfix-error-lists quickfix.txt /*quickfix-error-lists*
+quickfix-manx quickfix.txt /*quickfix-manx*
+quickfix-valid quickfix.txt /*quickfix-valid*
+quickfix-window quickfix.txt /*quickfix-window*
+quickfix.txt quickfix.txt /*quickfix.txt*
+quickref quickref.txt /*quickref*
+quickref.txt quickref.txt /*quickref.txt*
+quote change.txt /*quote*
+quote# change.txt /*quote#*
+quote% change.txt /*quote%*
+quote+ gui_x11.txt /*quote+*
+quote- change.txt /*quote-*
+quote. change.txt /*quote.*
+quote/ change.txt /*quote\/*
+quote0 change.txt /*quote0*
+quote1 change.txt /*quote1*
+quote2 change.txt /*quote2*
+quote3 change.txt /*quote3*
+quote4 change.txt /*quote4*
+quote9 change.txt /*quote9*
+quote: change.txt /*quote:*
+quote= change.txt /*quote=*
+quote_ change.txt /*quote_*
+quote_# change.txt /*quote_#*
+quote_% change.txt /*quote_%*
+quote_- change.txt /*quote_-*
+quote_. change.txt /*quote_.*
+quote_/ change.txt /*quote_\/*
+quote_: change.txt /*quote_:*
+quote_= change.txt /*quote_=*
+quote_alpha change.txt /*quote_alpha*
+quote_number change.txt /*quote_number*
+quote_quote change.txt /*quote_quote*
+quote_~ change.txt /*quote_~*
+quotea change.txt /*quotea*
+quotecommandquote intro.txt /*quotecommandquote*
+quoteplus gui_x11.txt /*quoteplus*
+quotequote change.txt /*quotequote*
+quotes quotes.txt /*quotes*
+quotes.txt quotes.txt /*quotes.txt*
+quotestar gui.txt /*quotestar*
+quote~ change.txt /*quote~*
+r change.txt /*r*
+raw-terminal-mode term.txt /*raw-terminal-mode*
+rcp pi_netrw.txt /*rcp*
+read-messages insert.txt /*read-messages*
+read-only-share editing.txt /*read-only-share*
+read-stdin version5.txt /*read-stdin*
+readline-syntax syntax.txt /*readline-syntax*
+readline.vim syntax.txt /*readline.vim*
+recording repeat.txt /*recording*
+recover.txt recover.txt /*recover.txt*
+recovery recover.txt /*recovery*
+recursive_mapping map.txt /*recursive_mapping*
+redo undo.txt /*redo*
+redo-register undo.txt /*redo-register*
+ref intro.txt /*ref*
+reference intro.txt /*reference*
+regexp pattern.txt /*regexp*
+regexp-changes-5.4 version5.txt /*regexp-changes-5.4*
+register sponsor.txt /*register*
+register-faq sponsor.txt /*register-faq*
+register-variable eval.txt /*register-variable*
+registers change.txt /*registers*
+regular-expression pattern.txt /*regular-expression*
+remote.txt remote.txt /*remote.txt*
+remote_expr() eval.txt /*remote_expr()*
+remote_foreground() eval.txt /*remote_foreground()*
+remote_peek() eval.txt /*remote_peek()*
+remote_read() eval.txt /*remote_read()*
+remote_send() eval.txt /*remote_send()*
+remove-filetype filetype.txt /*remove-filetype*
+remove-option-flags options.txt /*remove-option-flags*
+rename() eval.txt /*rename()*
+rename-files tips.txt /*rename-files*
+repeat.txt repeat.txt /*repeat.txt*
+repeating repeat.txt /*repeating*
+replacing change.txt /*replacing*
+resolve() eval.txt /*resolve()*
+restore-position tips.txt /*restore-position*
+restricted-mode starting.txt /*restricted-mode*
+retab-example change.txt /*retab-example*
+rethrow eval.txt /*rethrow*
+rexx-syntax syntax.txt /*rexx-syntax*
+rexx.vim syntax.txt /*rexx.vim*
+rgb.txt gui_w32.txt /*rgb.txt*
+rgview starting.txt /*rgview*
+rgvim starting.txt /*rgvim*
+right-justify change.txt /*right-justify*
+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*
+rsync pi_netrw.txt /*rsync*
+ruby if_ruby.txt /*ruby*
+ruby-buffer if_ruby.txt /*ruby-buffer*
+ruby-command if_ruby.txt /*ruby-command*
+ruby-commands if_ruby.txt /*ruby-commands*
+ruby-evaluate if_ruby.txt /*ruby-evaluate*
+ruby-globals if_ruby.txt /*ruby-globals*
+ruby-message if_ruby.txt /*ruby-message*
+ruby-set_option if_ruby.txt /*ruby-set_option*
+ruby-syntax syntax.txt /*ruby-syntax*
+ruby-vim if_ruby.txt /*ruby-vim*
+ruby-window if_ruby.txt /*ruby-window*
+ruby.vim syntax.txt /*ruby.vim*
+russian russian.txt /*russian*
+russian-intro russian.txt /*russian-intro*
+russian-issues russian.txt /*russian-issues*
+russian-keymap russian.txt /*russian-keymap*
+russian-l18n russian.txt /*russian-l18n*
+russian.txt russian.txt /*russian.txt*
+rview starting.txt /*rview*
+rvim starting.txt /*rvim*
+rxvt syntax.txt /*rxvt*
+s change.txt /*s*
+s/\& change.txt /*s\/\\&*
+s/\0 change.txt /*s\/\\0*
+s/\1 change.txt /*s\/\\1*
+s/\2 change.txt /*s\/\\2*
+s/\3 change.txt /*s\/\\3*
+s/\9 change.txt /*s\/\\9*
+s/\<CR> change.txt /*s\/\\<CR>*
+s/\E change.txt /*s\/\\E*
+s/\L change.txt /*s\/\\L*
+s/\U change.txt /*s\/\\U*
+s/\\ change.txt /*s\/\\\\*
+s/\b change.txt /*s\/\\b*
+s/\e change.txt /*s\/\\e*
+s/\l change.txt /*s\/\\l*
+s/\n change.txt /*s\/\\n*
+s/\r change.txt /*s\/\\r*
+s/\t change.txt /*s\/\\t*
+s/\u change.txt /*s\/\\u*
+s/\~ change.txt /*s\/\\~*
+s:var eval.txt /*s:var*
+s<CR> change.txt /*s<CR>*
+sandbox eval.txt /*sandbox*
+save-file editing.txt /*save-file*
+save-settings starting.txt /*save-settings*
+scp pi_netrw.txt /*scp*
+script-here if_perl.txt /*script-here*
+script-local map.txt /*script-local*
+script-variable eval.txt /*script-variable*
+scriptout-changed version4.txt /*scriptout-changed*
+scroll-binding scroll.txt /*scroll-binding*
+scroll-cursor scroll.txt /*scroll-cursor*
+scroll-down scroll.txt /*scroll-down*
+scroll-horizontal scroll.txt /*scroll-horizontal*
+scroll-insert tips.txt /*scroll-insert*
+scroll-mouse-wheel scroll.txt /*scroll-mouse-wheel*
+scroll-region term.txt /*scroll-region*
+scroll-smooth tips.txt /*scroll-smooth*
+scroll-up scroll.txt /*scroll-up*
+scroll.txt scroll.txt /*scroll.txt*
+scrollbind-quickadj scroll.txt /*scrollbind-quickadj*
+scrollbind-relative scroll.txt /*scrollbind-relative*
+scrolling scroll.txt /*scrolling*
+sdl-syntax syntax.txt /*sdl-syntax*
+sdl.vim syntax.txt /*sdl.vim*
+search() eval.txt /*search()*
+search-commands pattern.txt /*search-commands*
+search-offset pattern.txt /*search-offset*
+search-pattern pattern.txt /*search-pattern*
+search-range pattern.txt /*search-range*
+searchpair() eval.txt /*searchpair()*
+section motion.txt /*section*
+sed-syntax syntax.txt /*sed-syntax*
+sed.vim syntax.txt /*sed.vim*
+send-money sponsor.txt /*send-money*
+send-to-menu gui_w32.txt /*send-to-menu*
+sendto gui_w32.txt /*sendto*
+sentence motion.txt /*sentence*
+server2client() eval.txt /*server2client()*
+serverlist() eval.txt /*serverlist()*
+servername-variable eval.txt /*servername-variable*
+session-file starting.txt /*session-file*
+set-option options.txt /*set-option*
+setbufvar() eval.txt /*setbufvar()*
+setcmdpos() eval.txt /*setcmdpos()*
+setline() eval.txt /*setline()*
+setreg() eval.txt /*setreg()*
+setwinvar() eval.txt /*setwinvar()*
+sftp pi_netrw.txt /*sftp*
+sgml-syntax syntax.txt /*sgml-syntax*
+sgml.vim syntax.txt /*sgml.vim*
+sh-syntax syntax.txt /*sh-syntax*
+sh.vim syntax.txt /*sh.vim*
+shell-window tips.txt /*shell-window*
+shell_error-variable eval.txt /*shell_error-variable*
+shift intro.txt /*shift*
+shift-left-right change.txt /*shift-left-right*
+short-name-changed version4.txt /*short-name-changed*
+showing-menus gui.txt /*showing-menus*
+sign-commands sign.txt /*sign-commands*
+sign-intro sign.txt /*sign-intro*
+sign-support sign.txt /*sign-support*
+sign.txt sign.txt /*sign.txt*
+signs sign.txt /*signs*
+simple-change change.txt /*simple-change*
+simplify() eval.txt /*simplify()*
+single-repeat repeat.txt /*single-repeat*
+skeleton autocmd.txt /*skeleton*
+slow-fast-terminal term.txt /*slow-fast-terminal*
+slow-start starting.txt /*slow-start*
+slow-terminal term.txt /*slow-terminal*
+sniff if_sniff.txt /*sniff*
+sniff-commands if_sniff.txt /*sniff-commands*
+sniff-compiling if_sniff.txt /*sniff-compiling*
+sniff-intro if_sniff.txt /*sniff-intro*
+space intro.txt /*space*
+spec-customizing pi_spec.txt /*spec-customizing*
+spec-how-to-use-it pi_spec.txt /*spec-how-to-use-it*
+spec-plugin filetype.txt /*spec-plugin*
+spec-setting-a-map pi_spec.txt /*spec-setting-a-map*
+spec_chglog_format pi_spec.txt /*spec_chglog_format*
+spec_chglog_prepend pi_spec.txt /*spec_chglog_prepend*
+spec_chglog_release_info pi_spec.txt /*spec_chglog_release_info*
+special-buffers windows.txt /*special-buffers*
+speed-up tips.txt /*speed-up*
+splitfind windows.txt /*splitfind*
+splitview windows.txt /*splitview*
+sponsor sponsor.txt /*sponsor*
+sponsor-faq sponsor.txt /*sponsor-faq*
+sponsor.txt sponsor.txt /*sponsor.txt*
+spoon os_unix.txt /*spoon*
+spup-syntax syntax.txt /*spup-syntax*
+spup.vim syntax.txt /*spup.vim*
+sscanf eval.txt /*sscanf*
+standard-plugin usr_05.txt /*standard-plugin*
+standard-plugin-list help.txt /*standard-plugin-list*
+star pattern.txt /*star*
+start-of-file pattern.txt /*start-of-file*
+starting starting.txt /*starting*
+starting-amiga starting.txt /*starting-amiga*
+starting.txt starting.txt /*starting.txt*
+startup starting.txt /*startup*
+startup-options starting.txt /*startup-options*
+startup-terminal term.txt /*startup-terminal*
+static-tag tagsrch.txt /*static-tag*
+status-line windows.txt /*status-line*
+statusmsg-variable eval.txt /*statusmsg-variable*
+strftime() eval.txt /*strftime()*
+stridx() eval.txt /*stridx()*
+string-match eval.txt /*string-match*
+strlen() eval.txt /*strlen()*
+strpart() eval.txt /*strpart()*
+strridx() eval.txt /*strridx()*
+strtrans() eval.txt /*strtrans()*
+style-changes develop.txt /*style-changes*
+style-examples develop.txt /*style-examples*
+style-functions develop.txt /*style-functions*
+style-names develop.txt /*style-names*
+style-spaces develop.txt /*style-spaces*
+style-various develop.txt /*style-various*
+sub-menu-priority gui.txt /*sub-menu-priority*
+sub-replace-expression change.txt /*sub-replace-expression*
+sub-replace-special change.txt /*sub-replace-special*
+submatch() eval.txt /*submatch()*
+subscribe-maillist intro.txt /*subscribe-maillist*
+substitute() eval.txt /*substitute()*
+substitute-CR version6.txt /*substitute-CR*
+suffixes cmdline.txt /*suffixes*
+suspend starting.txt /*suspend*
+swap-file recover.txt /*swap-file*
+swapfile-changed version4.txt /*swapfile-changed*
+syn-sync-grouphere syntax.txt /*syn-sync-grouphere*
+syn-sync-groupthere syntax.txt /*syn-sync-groupthere*
+synID() eval.txt /*synID()*
+synIDattr() eval.txt /*synIDattr()*
+synIDtrans() eval.txt /*synIDtrans()*
+syncbind scroll.txt /*syncbind*
+syncolor syntax.txt /*syncolor*
+synload-1 syntax.txt /*synload-1*
+synload-2 syntax.txt /*synload-2*
+synload-3 syntax.txt /*synload-3*
+synload-4 syntax.txt /*synload-4*
+synload-5 syntax.txt /*synload-5*
+synload-6 syntax.txt /*synload-6*
+syntax syntax.txt /*syntax*
+syntax-highlighting syntax.txt /*syntax-highlighting*
+syntax-loading syntax.txt /*syntax-loading*
+syntax-printing usr_06.txt /*syntax-printing*
+syntax.txt syntax.txt /*syntax.txt*
+syntax_cmd syntax.txt /*syntax_cmd*
+sys-file-list help.txt /*sys-file-list*
+system() eval.txt /*system()*
+system-vimrc starting.txt /*system-vimrc*
+s~ change.txt /*s~*
+t motion.txt /*t*
+t_#2 term.txt /*t_#2*
+t_#4 term.txt /*t_#4*
+t_%1 term.txt /*t_%1*
+t_%i term.txt /*t_%i*
+t_&8 term.txt /*t_&8*
+t_@7 term.txt /*t_@7*
+t_AB term.txt /*t_AB*
+t_AF term.txt /*t_AF*
+t_AL term.txt /*t_AL*
+t_CS term.txt /*t_CS*
+t_CV term.txt /*t_CV*
+t_Co term.txt /*t_Co*
+t_DL term.txt /*t_DL*
+t_F1 term.txt /*t_F1*
+t_F2 term.txt /*t_F2*
+t_F3 term.txt /*t_F3*
+t_F4 term.txt /*t_F4*
+t_F5 term.txt /*t_F5*
+t_F6 term.txt /*t_F6*
+t_F7 term.txt /*t_F7*
+t_F8 term.txt /*t_F8*
+t_F9 term.txt /*t_F9*
+t_IE term.txt /*t_IE*
+t_IS term.txt /*t_IS*
+t_K1 term.txt /*t_K1*
+t_K3 term.txt /*t_K3*
+t_K4 term.txt /*t_K4*
+t_K5 term.txt /*t_K5*
+t_K6 term.txt /*t_K6*
+t_K7 term.txt /*t_K7*
+t_K8 term.txt /*t_K8*
+t_K9 term.txt /*t_K9*
+t_KA term.txt /*t_KA*
+t_KB term.txt /*t_KB*
+t_KC term.txt /*t_KC*
+t_KD term.txt /*t_KD*
+t_KE term.txt /*t_KE*
+t_KF term.txt /*t_KF*
+t_KG term.txt /*t_KG*
+t_KH term.txt /*t_KH*
+t_KI term.txt /*t_KI*
+t_KJ term.txt /*t_KJ*
+t_KK term.txt /*t_KK*
+t_KL term.txt /*t_KL*
+t_RI term.txt /*t_RI*
+t_RV term.txt /*t_RV*
+t_Sb term.txt /*t_Sb*
+t_Sf term.txt /*t_Sf*
+t_WP term.txt /*t_WP*
+t_WS term.txt /*t_WS*
+t_ZH term.txt /*t_ZH*
+t_ZR term.txt /*t_ZR*
+t_al term.txt /*t_al*
+t_bc term.txt /*t_bc*
+t_cd term.txt /*t_cd*
+t_cdl version4.txt /*t_cdl*
+t_ce term.txt /*t_ce*
+t_ci version4.txt /*t_ci*
+t_cil version4.txt /*t_cil*
+t_cl term.txt /*t_cl*
+t_cm term.txt /*t_cm*
+t_cri version4.txt /*t_cri*
+t_cs term.txt /*t_cs*
+t_csc version4.txt /*t_csc*
+t_cv version4.txt /*t_cv*
+t_cvv version4.txt /*t_cvv*
+t_da term.txt /*t_da*
+t_db term.txt /*t_db*
+t_dl term.txt /*t_dl*
+t_ed version4.txt /*t_ed*
+t_el version4.txt /*t_el*
+t_f1 version4.txt /*t_f1*
+t_f10 version4.txt /*t_f10*
+t_f2 version4.txt /*t_f2*
+t_f3 version4.txt /*t_f3*
+t_f4 version4.txt /*t_f4*
+t_f5 version4.txt /*t_f5*
+t_f6 version4.txt /*t_f6*
+t_f7 version4.txt /*t_f7*
+t_f8 version4.txt /*t_f8*
+t_f9 version4.txt /*t_f9*
+t_fs term.txt /*t_fs*
+t_help version4.txt /*t_help*
+t_il version4.txt /*t_il*
+t_k1 term.txt /*t_k1*
+t_k2 term.txt /*t_k2*
+t_k3 term.txt /*t_k3*
+t_k4 term.txt /*t_k4*
+t_k5 term.txt /*t_k5*
+t_k6 term.txt /*t_k6*
+t_k7 term.txt /*t_k7*
+t_k8 term.txt /*t_k8*
+t_k9 term.txt /*t_k9*
+t_k; term.txt /*t_k;*
+t_kB term.txt /*t_kB*
+t_kD term.txt /*t_kD*
+t_kI term.txt /*t_kI*
+t_kN term.txt /*t_kN*
+t_kP term.txt /*t_kP*
+t_kb term.txt /*t_kb*
+t_kd term.txt /*t_kd*
+t_ke term.txt /*t_ke*
+t_kh term.txt /*t_kh*
+t_kl term.txt /*t_kl*
+t_kr term.txt /*t_kr*
+t_ks term.txt /*t_ks*
+t_ku term.txt /*t_ku*
+t_le term.txt /*t_le*
+t_mb term.txt /*t_mb*
+t_md term.txt /*t_md*
+t_me term.txt /*t_me*
+t_mr term.txt /*t_mr*
+t_ms term.txt /*t_ms*
+t_nd term.txt /*t_nd*
+t_op term.txt /*t_op*
+t_se term.txt /*t_se*
+t_sf1 version4.txt /*t_sf1*
+t_sf10 version4.txt /*t_sf10*
+t_sf2 version4.txt /*t_sf2*
+t_sf3 version4.txt /*t_sf3*
+t_sf4 version4.txt /*t_sf4*
+t_sf5 version4.txt /*t_sf5*
+t_sf6 version4.txt /*t_sf6*
+t_sf7 version4.txt /*t_sf7*
+t_sf8 version4.txt /*t_sf8*
+t_sf9 version4.txt /*t_sf9*
+t_skd version4.txt /*t_skd*
+t_skl version4.txt /*t_skl*
+t_skr version4.txt /*t_skr*
+t_sku version4.txt /*t_sku*
+t_so term.txt /*t_so*
+t_sr term.txt /*t_sr*
+t_star7 term.txt /*t_star7*
+t_tb version4.txt /*t_tb*
+t_te term.txt /*t_te*
+t_ti term.txt /*t_ti*
+t_tp version4.txt /*t_tp*
+t_ts term.txt /*t_ts*
+t_ts_old version4.txt /*t_ts_old*
+t_ue term.txt /*t_ue*
+t_undo version4.txt /*t_undo*
+t_us term.txt /*t_us*
+t_ut term.txt /*t_ut*
+t_vb term.txt /*t_vb*
+t_ve term.txt /*t_ve*
+t_vi term.txt /*t_vi*
+t_vs term.txt /*t_vs*
+t_xs term.txt /*t_xs*
+tab intro.txt /*tab*
+tag tagsrch.txt /*tag*
+tag-! tagsrch.txt /*tag-!*
+tag-any-white tagsrch.txt /*tag-any-white*
+tag-binary-search tagsrch.txt /*tag-binary-search*
+tag-commands tagsrch.txt /*tag-commands*
+tag-details tagsrch.txt /*tag-details*
+tag-highlight syntax.txt /*tag-highlight*
+tag-matchlist tagsrch.txt /*tag-matchlist*
+tag-old-static tagsrch.txt /*tag-old-static*
+tag-overloaded version5.txt /*tag-overloaded*
+tag-priority tagsrch.txt /*tag-priority*
+tag-regexp tagsrch.txt /*tag-regexp*
+tag-search tagsrch.txt /*tag-search*
+tag-security tagsrch.txt /*tag-security*
+tag-skip-file tagsrch.txt /*tag-skip-file*
+tag-stack tagsrch.txt /*tag-stack*
+tags tagsrch.txt /*tags*
+tags-and-searches tagsrch.txt /*tags-and-searches*
+tags-file-changed version5.txt /*tags-file-changed*
+tags-file-format tagsrch.txt /*tags-file-format*
+tags-option tagsrch.txt /*tags-option*
+tagsrch.txt tagsrch.txt /*tagsrch.txt*
+tagstack tagsrch.txt /*tagstack*
+tcl if_tcl.txt /*tcl*
+tcl-beep if_tcl.txt /*tcl-beep*
+tcl-buffer if_tcl.txt /*tcl-buffer*
+tcl-buffer-append if_tcl.txt /*tcl-buffer-append*
+tcl-buffer-cmds if_tcl.txt /*tcl-buffer-cmds*
+tcl-buffer-command if_tcl.txt /*tcl-buffer-command*
+tcl-buffer-count if_tcl.txt /*tcl-buffer-count*
+tcl-buffer-delcmd if_tcl.txt /*tcl-buffer-delcmd*
+tcl-buffer-delete if_tcl.txt /*tcl-buffer-delete*
+tcl-buffer-expr if_tcl.txt /*tcl-buffer-expr*
+tcl-buffer-get if_tcl.txt /*tcl-buffer-get*
+tcl-buffer-insert if_tcl.txt /*tcl-buffer-insert*
+tcl-buffer-last if_tcl.txt /*tcl-buffer-last*
+tcl-buffer-mark if_tcl.txt /*tcl-buffer-mark*
+tcl-buffer-option if_tcl.txt /*tcl-buffer-option*
+tcl-buffer-set if_tcl.txt /*tcl-buffer-set*
+tcl-buffer-windows if_tcl.txt /*tcl-buffer-windows*
+tcl-bugs if_tcl.txt /*tcl-bugs*
+tcl-command if_tcl.txt /*tcl-command*
+tcl-commands if_tcl.txt /*tcl-commands*
+tcl-ex-commands if_tcl.txt /*tcl-ex-commands*
+tcl-examples if_tcl.txt /*tcl-examples*
+tcl-expr if_tcl.txt /*tcl-expr*
+tcl-linenumbers if_tcl.txt /*tcl-linenumbers*
+tcl-misc if_tcl.txt /*tcl-misc*
+tcl-option if_tcl.txt /*tcl-option*
+tcl-output if_tcl.txt /*tcl-output*
+tcl-var-current if_tcl.txt /*tcl-var-current*
+tcl-var-lbase if_tcl.txt /*tcl-var-lbase*
+tcl-var-line if_tcl.txt /*tcl-var-line*
+tcl-var-lnum if_tcl.txt /*tcl-var-lnum*
+tcl-var-range if_tcl.txt /*tcl-var-range*
+tcl-variables if_tcl.txt /*tcl-variables*
+tcl-window if_tcl.txt /*tcl-window*
+tcl-window-buffer if_tcl.txt /*tcl-window-buffer*
+tcl-window-cmds if_tcl.txt /*tcl-window-cmds*
+tcl-window-command if_tcl.txt /*tcl-window-command*
+tcl-window-cursor if_tcl.txt /*tcl-window-cursor*
+tcl-window-delcmd if_tcl.txt /*tcl-window-delcmd*
+tcl-window-expr if_tcl.txt /*tcl-window-expr*
+tcl-window-height if_tcl.txt /*tcl-window-height*
+tcl-window-option if_tcl.txt /*tcl-window-option*
+tcsh-style cmdline.txt /*tcsh-style*
+tcsh-syntax syntax.txt /*tcsh-syntax*
+tcsh.vim syntax.txt /*tcsh.vim*
+tear-off-menus gui.txt /*tear-off-menus*
+telnet-CTRL-] tagsrch.txt /*telnet-CTRL-]*
+temp-file-name eval.txt /*temp-file-name*
+template autocmd.txt /*template*
+tempname() eval.txt /*tempname()*
+term-dependent-settings term.txt /*term-dependent-settings*
+term-list syntax.txt /*term-list*
+term.txt term.txt /*term.txt*
+termcap term.txt /*termcap*
+termcap-changed version4.txt /*termcap-changed*
+termcap-colors term.txt /*termcap-colors*
+termcap-syntax syntax.txt /*termcap-syntax*
+termcap-title term.txt /*termcap-title*
+terminal-colors os_unix.txt /*terminal-colors*
+terminal-info term.txt /*terminal-info*
+terminal-options term.txt /*terminal-options*
+terminfo term.txt /*terminfo*
+termresponse-variable eval.txt /*termresponse-variable*
+tex-syntax syntax.txt /*tex-syntax*
+tex.vim syntax.txt /*tex.vim*
+text-objects motion.txt /*text-objects*
+text-objects-changed version5.txt /*text-objects-changed*
+tf-syntax syntax.txt /*tf-syntax*
+tf.vim syntax.txt /*tf.vim*
+this_session-variable eval.txt /*this_session-variable*
+throw-catch eval.txt /*throw-catch*
+throw-expression eval.txt /*throw-expression*
+throw-from-catch eval.txt /*throw-from-catch*
+throw-variables eval.txt /*throw-variables*
+throwpoint-variable eval.txt /*throwpoint-variable*
+timestamp editing.txt /*timestamp*
+timestamps editing.txt /*timestamps*
+tips tips.txt /*tips*
+tips.txt tips.txt /*tips.txt*
+todo todo.txt /*todo*
+todo.txt todo.txt /*todo.txt*
+toggle options.txt /*toggle*
+toggle-revins version4.txt /*toggle-revins*
+tolower() eval.txt /*tolower()*
+toolbar-icon gui.txt /*toolbar-icon*
+toupper() eval.txt /*toupper()*
+trojan-horse starting.txt /*trojan-horse*
+try-conditionals eval.txt /*try-conditionals*
+try-echoerr eval.txt /*try-echoerr*
+try-finally eval.txt /*try-finally*
+try-nested eval.txt /*try-nested*
+try-nesting eval.txt /*try-nesting*
+tutor usr_01.txt /*tutor*
+twice if_cscop.txt /*twice*
+type() eval.txt /*type()*
+type-mistakes tips.txt /*type-mistakes*
+typecorr-settings usr_41.txt /*typecorr-settings*
+typecorr.txt usr_41.txt /*typecorr.txt*
+u undo.txt /*u*
+uganda uganda.txt /*uganda*
+uganda.txt uganda.txt /*uganda.txt*
+undo undo.txt /*undo*
+undo-commands undo.txt /*undo-commands*
+undo-redo undo.txt /*undo-redo*
+undo-remarks undo.txt /*undo-remarks*
+undo-two-ways undo.txt /*undo-two-ways*
+undo.txt undo.txt /*undo.txt*
+undo_ftplugin usr_41.txt /*undo_ftplugin*
+unicode mbyte.txt /*unicode*
+unix os_unix.txt /*unix*
+unlisted-buffer windows.txt /*unlisted-buffer*
+up-down-motions motion.txt /*up-down-motions*
+uppercase change.txt /*uppercase*
+use-cpo-save usr_41.txt /*use-cpo-save*
+use-visual-cmds version4.txt /*use-visual-cmds*
+useful-mappings tips.txt /*useful-mappings*
+usenet intro.txt /*usenet*
+user-cmd-ambiguous map.txt /*user-cmd-ambiguous*
+user-commands map.txt /*user-commands*
+user-functions eval.txt /*user-functions*
+user-manual usr_toc.txt /*user-manual*
+using-<Plug> usr_41.txt /*using-<Plug>*
+using-menus gui.txt /*using-menus*
+using-scripts repeat.txt /*using-scripts*
+using-xxd tips.txt /*using-xxd*
+using_CTRL-V map.txt /*using_CTRL-V*
+usr_01.txt usr_01.txt /*usr_01.txt*
+usr_02.txt usr_02.txt /*usr_02.txt*
+usr_03.txt usr_03.txt /*usr_03.txt*
+usr_04.txt usr_04.txt /*usr_04.txt*
+usr_05.txt usr_05.txt /*usr_05.txt*
+usr_06.txt usr_06.txt /*usr_06.txt*
+usr_07.txt usr_07.txt /*usr_07.txt*
+usr_08.txt usr_08.txt /*usr_08.txt*
+usr_09.txt usr_09.txt /*usr_09.txt*
+usr_10.txt usr_10.txt /*usr_10.txt*
+usr_11.txt usr_11.txt /*usr_11.txt*
+usr_12.txt usr_12.txt /*usr_12.txt*
+usr_20.txt usr_20.txt /*usr_20.txt*
+usr_21.txt usr_21.txt /*usr_21.txt*
+usr_22.txt usr_22.txt /*usr_22.txt*
+usr_23.txt usr_23.txt /*usr_23.txt*
+usr_24.txt usr_24.txt /*usr_24.txt*
+usr_25.txt usr_25.txt /*usr_25.txt*
+usr_26.txt usr_26.txt /*usr_26.txt*
+usr_27.txt usr_27.txt /*usr_27.txt*
+usr_28.txt usr_28.txt /*usr_28.txt*
+usr_29.txt usr_29.txt /*usr_29.txt*
+usr_30.txt usr_30.txt /*usr_30.txt*
+usr_31.txt usr_31.txt /*usr_31.txt*
+usr_40.txt usr_40.txt /*usr_40.txt*
+usr_41.txt usr_41.txt /*usr_41.txt*
+usr_42.txt usr_42.txt /*usr_42.txt*
+usr_43.txt usr_43.txt /*usr_43.txt*
+usr_44.txt usr_44.txt /*usr_44.txt*
+usr_45.txt usr_45.txt /*usr_45.txt*
+usr_90.txt usr_90.txt /*usr_90.txt*
+usr_toc.txt usr_toc.txt /*usr_toc.txt*
+utf-8 mbyte.txt /*utf-8*
+utf-8-char-arg mbyte.txt /*utf-8-char-arg*
+utf-8-in-xwindows mbyte.txt /*utf-8-in-xwindows*
+utf-8-typing mbyte.txt /*utf-8-typing*
+utf8 mbyte.txt /*utf8*
+v visual.txt /*v*
+v:charconvert_from eval.txt /*v:charconvert_from*
+v:charconvert_to eval.txt /*v:charconvert_to*
+v:cmdarg eval.txt /*v:cmdarg*
+v:cmdbang eval.txt /*v:cmdbang*
+v:count eval.txt /*v:count*
+v:count1 eval.txt /*v:count1*
+v:ctype eval.txt /*v:ctype*
+v:dying eval.txt /*v:dying*
+v:errmsg eval.txt /*v:errmsg*
+v:exception eval.txt /*v:exception*
+v:fname_diff eval.txt /*v:fname_diff*
+v:fname_in eval.txt /*v:fname_in*
+v:fname_new eval.txt /*v:fname_new*
+v:fname_out eval.txt /*v:fname_out*
+v:folddashes eval.txt /*v:folddashes*
+v:foldend eval.txt /*v:foldend*
+v:foldlevel eval.txt /*v:foldlevel*
+v:foldstart eval.txt /*v:foldstart*
+v:lang eval.txt /*v:lang*
+v:lc_time eval.txt /*v:lc_time*
+v:lnum eval.txt /*v:lnum*
+v:prevcount eval.txt /*v:prevcount*
+v:progname eval.txt /*v:progname*
+v:register eval.txt /*v:register*
+v:servername eval.txt /*v:servername*
+v:shell_error eval.txt /*v:shell_error*
+v:statusmsg eval.txt /*v:statusmsg*
+v:termresponse eval.txt /*v:termresponse*
+v:this_session eval.txt /*v:this_session*
+v:throwpoint eval.txt /*v:throwpoint*
+v:var eval.txt /*v:var*
+v:version eval.txt /*v:version*
+v:warningmsg eval.txt /*v:warningmsg*
+v_! change.txt /*v_!*
+v_$ visual.txt /*v_$*
+v_: cmdline.txt /*v_:*
+v_< change.txt /*v_<*
+v_<BS> change.txt /*v_<BS>*
+v_<Del> change.txt /*v_<Del>*
+v_= change.txt /*v_=*
+v_> change.txt /*v_>*
+v_C change.txt /*v_C*
+v_CTRL-C visual.txt /*v_CTRL-C*
+v_CTRL-G visual.txt /*v_CTRL-G*
+v_CTRL-H change.txt /*v_CTRL-H*
+v_CTRL-O visual.txt /*v_CTRL-O*
+v_CTRL-V visual.txt /*v_CTRL-V*
+v_CTRL-Z starting.txt /*v_CTRL-Z*
+v_CTRL-\_CTRL-G intro.txt /*v_CTRL-\\_CTRL-G*
+v_CTRL-\_CTRL-N intro.txt /*v_CTRL-\\_CTRL-N*
+v_CTRL-] tagsrch.txt /*v_CTRL-]*
+v_D change.txt /*v_D*
+v_J change.txt /*v_J*
+v_K various.txt /*v_K*
+v_O visual.txt /*v_O*
+v_P change.txt /*v_P*
+v_R change.txt /*v_R*
+v_S change.txt /*v_S*
+v_U change.txt /*v_U*
+v_V visual.txt /*v_V*
+v_X change.txt /*v_X*
+v_Y change.txt /*v_Y*
+v_a motion.txt /*v_a*
+v_a( motion.txt /*v_a(*
+v_a) motion.txt /*v_a)*
+v_a< motion.txt /*v_a<*
+v_a> motion.txt /*v_a>*
+v_aB motion.txt /*v_aB*
+v_aW motion.txt /*v_aW*
+v_a[ motion.txt /*v_a[*
+v_a] motion.txt /*v_a]*
+v_ab motion.txt /*v_ab*
+v_ap motion.txt /*v_ap*
+v_as motion.txt /*v_as*
+v_aw motion.txt /*v_aw*
+v_a{ motion.txt /*v_a{*
+v_a} motion.txt /*v_a}*
+v_b_< visual.txt /*v_b_<*
+v_b_<_example visual.txt /*v_b_<_example*
+v_b_> visual.txt /*v_b_>*
+v_b_>_example visual.txt /*v_b_>_example*
+v_b_A visual.txt /*v_b_A*
+v_b_A_example visual.txt /*v_b_A_example*
+v_b_C visual.txt /*v_b_C*
+v_b_D change.txt /*v_b_D*
+v_b_I visual.txt /*v_b_I*
+v_b_I_example visual.txt /*v_b_I_example*
+v_b_c visual.txt /*v_b_c*
+v_b_r visual.txt /*v_b_r*
+v_b_r_example visual.txt /*v_b_r_example*
+v_c change.txt /*v_c*
+v_d change.txt /*v_d*
+v_g? change.txt /*v_g?*
+v_gJ change.txt /*v_gJ*
+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_gq change.txt /*v_gq*
+v_gv visual.txt /*v_gv*
+v_i motion.txt /*v_i*
+v_i( motion.txt /*v_i(*
+v_i) motion.txt /*v_i)*
+v_i< motion.txt /*v_i<*
+v_i> motion.txt /*v_i>*
+v_iB motion.txt /*v_iB*
+v_iW motion.txt /*v_iW*
+v_i[ motion.txt /*v_i[*
+v_i] motion.txt /*v_i]*
+v_ib motion.txt /*v_ib*
+v_ip motion.txt /*v_ip*
+v_is motion.txt /*v_is*
+v_iw motion.txt /*v_iw*
+v_i{ motion.txt /*v_i{*
+v_i} motion.txt /*v_i}*
+v_o visual.txt /*v_o*
+v_p change.txt /*v_p*
+v_r change.txt /*v_r*
+v_s change.txt /*v_s*
+v_u change.txt /*v_u*
+v_v visual.txt /*v_v*
+v_x change.txt /*v_x*
+v_y change.txt /*v_y*
+v_~ change.txt /*v_~*
+variables eval.txt /*variables*
+various various.txt /*various*
+various-cmds various.txt /*various-cmds*
+various-motions motion.txt /*various-motions*
+various.txt various.txt /*various.txt*
+vb-syntax syntax.txt /*vb-syntax*
+vb.vim syntax.txt /*vb.vim*
+verbose starting.txt /*verbose*
+verilog-indent indent.txt /*verilog-indent*
+version-5.1 version5.txt /*version-5.1*
+version-5.2 version5.txt /*version-5.2*
+version-5.3 version5.txt /*version-5.3*
+version-5.4 version5.txt /*version-5.4*
+version-5.5 version5.txt /*version-5.5*
+version-5.6 version5.txt /*version-5.6*
+version-5.7 version5.txt /*version-5.7*
+version-5.8 version5.txt /*version-5.8*
+version-6.1 version6.txt /*version-6.1*
+version-6.2 version6.txt /*version-6.2*
+version-6.3 version6.txt /*version-6.3*
+version-variable eval.txt /*version-variable*
+version4.txt version4.txt /*version4.txt*
+version5.txt version5.txt /*version5.txt*
+version6.txt version6.txt /*version6.txt*
+vi-differences vi_diff.txt /*vi-differences*
+vi: options.txt /*vi:*
+vi_diff.txt vi_diff.txt /*vi_diff.txt*
+view starting.txt /*view*
+view-diffs diff.txt /*view-diffs*
+view-file starting.txt /*view-file*
+views-sessions starting.txt /*views-sessions*
+vim-additions vi_diff.txt /*vim-additions*
+vim-announce intro.txt /*vim-announce*
+vim-arguments starting.txt /*vim-arguments*
+vim-default-editor gui_w32.txt /*vim-default-editor*
+vim-dev intro.txt /*vim-dev*
+vim-mac intro.txt /*vim-mac*
+vim-modes intro.txt /*vim-modes*
+vim-modes-intro intro.txt /*vim-modes-intro*
+vim-multibyte intro.txt /*vim-multibyte*
+vim-script-intro usr_41.txt /*vim-script-intro*
+vim-syntax syntax.txt /*vim-syntax*
+vim-variable eval.txt /*vim-variable*
+vim.vim syntax.txt /*vim.vim*
+vim: options.txt /*vim:*
+vimdev intro.txt /*vimdev*
+vimdiff diff.txt /*vimdiff*
+vimfiles options.txt /*vimfiles*
+viminfo starting.txt /*viminfo*
+viminfo-encoding starting.txt /*viminfo-encoding*
+viminfo-errors starting.txt /*viminfo-errors*
+viminfo-file starting.txt /*viminfo-file*
+viminfo-file-marks starting.txt /*viminfo-file-marks*
+viminfo-file-name starting.txt /*viminfo-file-name*
+viminfo-read starting.txt /*viminfo-read*
+viminfo-write starting.txt /*viminfo-write*
+vimrc starting.txt /*vimrc*
+vimrc-filetype usr_05.txt /*vimrc-filetype*
+vimrc-intro usr_05.txt /*vimrc-intro*
+vimrc_example.vim usr_05.txt /*vimrc_example.vim*
+vimtutor usr_01.txt /*vimtutor*
+virtcol() eval.txt /*virtcol()*
+visual-block visual.txt /*visual-block*
+visual-change visual.txt /*visual-change*
+visual-examples visual.txt /*visual-examples*
+visual-index index.txt /*visual-index*
+visual-mode visual.txt /*visual-mode*
+visual-operators visual.txt /*visual-operators*
+visual-repeat visual.txt /*visual-repeat*
+visual-search visual.txt /*visual-search*
+visual-start visual.txt /*visual-start*
+visual-use visual.txt /*visual-use*
+visual.txt visual.txt /*visual.txt*
+visualmode() eval.txt /*visualmode()*
+vms os_vms.txt /*vms*
+vms-authors os_vms.txt /*vms-authors*
+vms-changes os_vms.txt /*vms-changes*
+vms-compiling os_vms.txt /*vms-compiling*
+vms-deploy os_vms.txt /*vms-deploy*
+vms-download os_vms.txt /*vms-download*
+vms-gui os_vms.txt /*vms-gui*
+vms-notes os_vms.txt /*vms-notes*
+vms-problems os_vms.txt /*vms-problems*
+vms-started os_vms.txt /*vms-started*
+vms-usage os_vms.txt /*vms-usage*
+vote-for-features sponsor.txt /*vote-for-features*
+votes-counted sponsor.txt /*votes-counted*
+votes-for-changes todo.txt /*votes-for-changes*
+vreplace-mode insert.txt /*vreplace-mode*
+vt100-cursor-keys term.txt /*vt100-cursor-keys*
+vt100-function-keys term.txt /*vt100-function-keys*
+w motion.txt /*w*
+w32-clientserver remote.txt /*w32-clientserver*
+w:var eval.txt /*w:var*
+warningmsg-variable eval.txt /*warningmsg-variable*
+white-space pattern.txt /*white-space*
+whitespace pattern.txt /*whitespace*
+win16-!start gui_w16.txt /*win16-!start*
+win16-clipboard gui_w16.txt /*win16-clipboard*
+win16-colors gui_w16.txt /*win16-colors*
+win16-default-editor gui_w16.txt /*win16-default-editor*
+win16-dialogs gui_w16.txt /*win16-dialogs*
+win16-drag-n-drop gui_w16.txt /*win16-drag-n-drop*
+win16-gui gui_w16.txt /*win16-gui*
+win16-maximized gui_w16.txt /*win16-maximized*
+win16-printing gui_w16.txt /*win16-printing*
+win16-shell gui_w16.txt /*win16-shell*
+win16-start gui_w16.txt /*win16-start*
+win16-truetype gui_w16.txt /*win16-truetype*
+win16-various gui_w16.txt /*win16-various*
+win32 os_win32.txt /*win32*
+win32-!start gui_w32.txt /*win32-!start*
+win32-colors gui_w32.txt /*win32-colors*
+win32-compiling os_win32.txt /*win32-compiling*
+win32-curdir os_win32.txt /*win32-curdir*
+win32-faq os_win32.txt /*win32-faq*
+win32-gettext mlang.txt /*win32-gettext*
+win32-gui gui_w32.txt /*win32-gui*
+win32-hidden-menus gui.txt /*win32-hidden-menus*
+win32-mouse os_win32.txt /*win32-mouse*
+win32-open-with-menu gui_w32.txt /*win32-open-with-menu*
+win32-popup-menu gui_w32.txt /*win32-popup-menu*
+win32-problems os_win32.txt /*win32-problems*
+win32-restore os_win32.txt /*win32-restore*
+win32-startup os_win32.txt /*win32-startup*
+win32-term os_win32.txt /*win32-term*
+win32-vimrun gui_w32.txt /*win32-vimrun*
+win32-win3.1 os_win32.txt /*win32-win3.1*
+win32s os_win32.txt /*win32s*
+winbufnr() eval.txt /*winbufnr()*
+wincol() eval.txt /*wincol()*
+window-contents intro.txt /*window-contents*
+window-exit editing.txt /*window-exit*
+window-move-cursor windows.txt /*window-move-cursor*
+window-moving windows.txt /*window-moving*
+window-resize windows.txt /*window-resize*
+window-size term.txt /*window-size*
+window-tag windows.txt /*window-tag*
+window-variable eval.txt /*window-variable*
+windows windows.txt /*windows*
+windows-3.1 os_win32.txt /*windows-3.1*
+windows-intro windows.txt /*windows-intro*
+windows-starting windows.txt /*windows-starting*
+windows.txt windows.txt /*windows.txt*
+windows95 os_win32.txt /*windows95*
+winheight() eval.txt /*winheight()*
+winline() eval.txt /*winline()*
+winnr() eval.txt /*winnr()*
+winrestcmd() eval.txt /*winrestcmd()*
+winwidth() eval.txt /*winwidth()*
+word motion.txt /*word*
+word-count editing.txt /*word-count*
+word-motions motion.txt /*word-motions*
+workbench starting.txt /*workbench*
+workshop workshop.txt /*workshop*
+workshop-commands workshop.txt /*workshop-commands*
+workshop-compiling workshop.txt /*workshop-compiling*
+workshop-configure workshop.txt /*workshop-configure*
+workshop-intro workshop.txt /*workshop-intro*
+workshop-support workshop.txt /*workshop-support*
+workshop-xpm workshop.txt /*workshop-xpm*
+workshop.txt workshop.txt /*workshop.txt*
+wrap-off intro.txt /*wrap-off*
+write-compiler-plugin usr_41.txt /*write-compiler-plugin*
+write-device editing.txt /*write-device*
+write-fail editing.txt /*write-fail*
+write-filetype-plugin usr_41.txt /*write-filetype-plugin*
+write-local-help usr_41.txt /*write-local-help*
+write-plugin usr_41.txt /*write-plugin*
+write-quit editing.txt /*write-quit*
+write-readonly editing.txt /*write-readonly*
+writing editing.txt /*writing*
+www intro.txt /*www*
+x change.txt /*x*
+x-input-method mbyte.txt /*x-input-method*
+x-resources version5.txt /*x-resources*
+x11-clientserver remote.txt /*x11-clientserver*
+x11-cut-buffer gui_x11.txt /*x11-cut-buffer*
+x11-selection gui_x11.txt /*x11-selection*
+xf86conf-syntax syntax.txt /*xf86conf-syntax*
+xf86conf.vim syntax.txt /*xf86conf.vim*
+xfontset mbyte.txt /*xfontset*
+xfree-xterm syntax.txt /*xfree-xterm*
+xim mbyte.txt /*xim*
+xim-input-style mbyte.txt /*xim-input-style*
+xiterm syntax.txt /*xiterm*
+xml-folding syntax.txt /*xml-folding*
+xml-syntax syntax.txt /*xml-syntax*
+xml.vim syntax.txt /*xml.vim*
+xpm-syntax syntax.txt /*xpm-syntax*
+xpm.vim syntax.txt /*xpm.vim*
+xterm-8-bit term.txt /*xterm-8-bit*
+xterm-8bit term.txt /*xterm-8bit*
+xterm-blink syntax.txt /*xterm-blink*
+xterm-blinking-cursor syntax.txt /*xterm-blinking-cursor*
+xterm-clipboard term.txt /*xterm-clipboard*
+xterm-codes term.txt /*xterm-codes*
+xterm-color syntax.txt /*xterm-color*
+xterm-command-server term.txt /*xterm-command-server*
+xterm-copy-paste term.txt /*xterm-copy-paste*
+xterm-cursor-keys term.txt /*xterm-cursor-keys*
+xterm-end-home-keys term.txt /*xterm-end-home-keys*
+xterm-function-keys term.txt /*xterm-function-keys*
+xterm-mouse options.txt /*xterm-mouse*
+xterm-mouse-wheel scroll.txt /*xterm-mouse-wheel*
+xterm-save-screen tips.txt /*xterm-save-screen*
+xterm-screens tips.txt /*xterm-screens*
+xterm-scroll-region term.txt /*xterm-scroll-region*
+xterm-shifted-keys term.txt /*xterm-shifted-keys*
+y change.txt /*y*
+yank change.txt /*yank*
+ye-option-gone version4.txt /*ye-option-gone*
+year-2000 intro.txt /*year-2000*
+your-runtime-dir usr_43.txt /*your-runtime-dir*
+yy change.txt /*yy*
+z index.txt /*z*
+z+ scroll.txt /*z+*
+z- scroll.txt /*z-*
+z. scroll.txt /*z.*
+z/OS os_390.txt /*z\/OS*
+z<CR> scroll.txt /*z<CR>*
+z<Left> scroll.txt /*z<Left>*
+z<Right> scroll.txt /*z<Right>*
+zA fold.txt /*zA*
+zC fold.txt /*zC*
+zD fold.txt /*zD*
+zE fold.txt /*zE*
+zF fold.txt /*zF*
+zH scroll.txt /*zH*
+zL scroll.txt /*zL*
+zM fold.txt /*zM*
+zN fold.txt /*zN*
+zN<CR> scroll.txt /*zN<CR>*
+zO fold.txt /*zO*
+zOS os_390.txt /*zOS*
+zOS-Bugs os_390.txt /*zOS-Bugs*
+zOS-Motif os_390.txt /*zOS-Motif*
+zOS-building os_390.txt /*zOS-building*
+zOS-changes os_390.txt /*zOS-changes*
+zOS-feedback os_390.txt /*zOS-feedback*
+zOS-has-ebcdic os_390.txt /*zOS-has-ebcdic*
+zOS-open-source os_390.txt /*zOS-open-source*
+zOS-weaknesses os_390.txt /*zOS-weaknesses*
+zOS-xterm os_390.txt /*zOS-xterm*
+zR fold.txt /*zR*
+zX fold.txt /*zX*
+z^ scroll.txt /*z^*
+za fold.txt /*za*
+zb scroll.txt /*zb*
+zc fold.txt /*zc*
+zd fold.txt /*zd*
+ze scroll.txt /*ze*
+zf fold.txt /*zf*
+zh scroll.txt /*zh*
+zi fold.txt /*zi*
+zj fold.txt /*zj*
+zk fold.txt /*zk*
+zl scroll.txt /*zl*
+zm fold.txt /*zm*
+zn fold.txt /*zn*
+zo fold.txt /*zo*
+zr fold.txt /*zr*
+zs scroll.txt /*zs*
+zt scroll.txt /*zt*
+zv fold.txt /*zv*
+zx fold.txt /*zx*
+zz scroll.txt /*zz*
+{ motion.txt /*{*
+{Visual} intro.txt /*{Visual}*
+{address} cmdline.txt /*{address}*
+{char1-char2} intro.txt /*{char1-char2}*
+{event} autocmd.txt /*{event}*
+{file} editing.txt /*{file}*
+{group-name} syntax.txt /*{group-name}*
+{lhs} map.txt /*{lhs}*
+{motion} intro.txt /*{motion}*
+{move-around} visual.txt /*{move-around}*
+{offset} pattern.txt /*{offset}*
+{pat} autocmd.txt /*{pat}*
+{rhs} map.txt /*{rhs}*
+{subject} various.txt /*{subject}*
+{} intro.txt /*{}*
+} motion.txt /*}*
+~ change.txt /*~*
diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt
new file mode 100644
index 000000000..7787e0e2a
--- /dev/null
+++ b/runtime/doc/tagsrch.txt
@@ -0,0 +1,809 @@
+*tagsrch.txt* For Vim version 7.0aa. Last change: 2004 Apr 29
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Tags and special searches *tags-and-searches*
+
+See section |29.1| of the user manual for an introduction.
+
+1. Jump to a tag |tag-commands|
+2. Tag stack |tag-stack|
+3. Tag match list |tag-matchlist|
+4. Tags details |tag-details|
+5. Tags file format |tags-file-format|
+6. Include file searches |include-search|
+
+==============================================================================
+1. Jump to a tag *tag-commands*
+
+ *tag* *tags*
+A tag is an identifier that appears in a "tags" file. It is a sort of label
+that can be jumped to. For example: In C programs each function name can be
+used as a tag. The "tags" file has to be generated by a program like ctags,
+before the tag commands can be used.
+
+With the ":tag" command the cursor will be positioned on the tag. With the
+CTRL-] command, the keyword on which the cursor is standing is used as the
+tag. If the cursor is not on a keyword, the first keyword to the right of the
+cursor is used.
+
+The ":tag" command works very well for C programs. If you see a call to a
+function and wonder what that function does, position the cursor inside of the
+function name and hit CTRL-]. This will bring you to the function definition.
+An easy way back is with the CTRL-T command. Also read about the tag stack
+below.
+
+ *:ta* *:tag* *E426* *E429*
+:ta[g][!] {ident} Jump to the definition of {ident}, using the
+ information in the tags file(s). Put {ident} in the
+ tag stack. See |tag-!| for [!].
+ {ident} can be a regexp pattern, see |tag-regexp|.
+ When there are several matching tags for {ident}, the
+ first one is jumped to. |:tnext|.
+
+g<LeftMouse> *g<LeftMouse>*
+<C-LeftMouse> *<C-LeftMouse>* *CTRL-]*
+CTRL-] Jump to the definition of the keyword under the
+ cursor. Same as ":tag {ident}", where {ident} is the
+ keyword under or after cursor. {Vi: identifier after
+ the cursor}
+
+ *v_CTRL-]*
+{Visual}CTRL-] Same as ":tag {ident}", where {ident} is the text that
+ is highlighted. {not in Vi}
+
+ *telnet-CTRL-]*
+CTRL-] is the default telnet escape key. When you type CTRL-] to jump to a
+tag, you will get the telnet prompt instead. Most versions of telnet allow
+changing or disabling the default escape key. See the telnet man page. You
+can 'telnet -E {Hostname}' to disable the escape character, or 'telnet -e
+{EscapeCharacter} {Hostname}' to specify another escape character. If
+possible, try to use "rsh" instead of "telnet" to avoid this problem.
+
+ *tag-priority*
+When there are multiple matches for a tag, this priority is used:
+1. "FSC" A full matching static tag for the current file.
+2. "F C" A full matching global tag for the current file.
+3. "F " A full matching global tag for another file.
+4. "FS " A full matching static tag for another file.
+5. " SC" An ignore-case matching static tag for the current file.
+6. " C" An ignore-case matching global tag for the current file.
+7. " " An ignore-case matching global tag for another file.
+8. " S " An ignore-case matching static tag for another file.
+
+Note that when the current file changes, the priority list is mostly not
+changed, to avoid confusion when using ":tnext". It is changed when using
+":tag {ident}".
+
+The ignore-case matches are not found for a ":tag" command when the
+'ignorecase' option is off. They are found when a pattern is used (starting
+with a "/") and for ":tselect", also when 'ignorecase' is off. Note that
+using ignore-case tag searching disables binary searching in the tags file,
+which causes a slowdown. This can be avoided by fold-case sorting the tag
+file. See the 'tagbsearch' option for an explanation.
+
+==============================================================================
+2. Tag stack *tag-stack* *tagstack* *E425*
+
+On the tag stack is remembered which tags you jumped to, and from where.
+Tags are only pushed onto the stack when the 'tagstack' option is set.
+
+g<RightMouse> *g<RightMouse>*
+<C-RightMouse> *<C-RightMouse>* *CTRL-T*
+CTRL-T Jump to [count] older entry in the tag stack
+ (default 1). {not in Vi}
+
+ *:po* *:pop* *E555* *E556*
+:[count]po[p][!] Jump to [count] older entry in tag stack (default 1).
+ See |tag-!| for [!]. {not in Vi}
+
+:[count]ta[g][!] Jump to [count] newer entry in tag stack (default 1).
+ See |tag-!| for [!]. {not in Vi}
+
+ *:tags*
+:tags Show the contents of the tag stack. The active
+ entry is marked with a '>'. {not in Vi}
+
+The output of ":tags" looks like this:
+
+ # TO tag FROM line in file/line
+ 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
+
+This list shows the tags that you jumped to and the cursor position before
+that jump. The older tags are at the top, the newer at the bottom.
+
+The '>' points to the active entry. This is the tag that will be used by the
+next ":tag" command. The CTRL-T and ":pop" command will use the position
+above the active entry.
+
+Below the "TO" is the number of the current match in the match list. Note
+that this doesn't change when using ":pop" or ":tag".
+
+The line number and file name are remembered to be able to get back to where
+you were before the tag command. The line number will be correct, also when
+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.
+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:
+
+ ":pop" or CTRL-T to position before previous tag
+ {count}CTRL-T to position before {count} older tag
+ ":tag" to newer tag
+ ":0tag" to last used tag
+
+The most obvious way to use this is while browsing through the call graph of
+a program. Consider the following call graph:
+
+ main ---> FuncA ---> FuncC
+ ---> FuncB
+
+(Explanation: main calls FuncA and FuncB; FuncA calls FuncC).
+You can get from main to FuncA by using CTRL-] on the call to FuncA. Then
+you can CTRL-] to get to FuncC. If you now want to go back to main you can
+use CTRL-T twice. Then you can CTRL-] to FuncB.
+
+If you issue a ":ta {ident}" or CTRL-] command, this tag is inserted at the
+current position in the stack. If the stack was full (it can hold up to 20
+entries), the oldest entry is deleted and the older entries shift one
+position up (their index number is decremented by one). If the last used
+entry was not at the bottom, the entries below the last used one are
+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
+
+ *E73*
+When you try to use the tag stack while it doesn't contain anything you will
+get an error message.
+
+==============================================================================
+3. Tag match list *tag-matchlist* *E427* *E428*
+
+When there are several matching tags, these commands can be used to jump
+between them. Note that these command don't change the tag stack, they keep
+the same entry.
+
+ *:ts* *:tselect*
+:ts[elect][!] [ident] List the tags that match [ident], using the
+ information in the tags file(s).
+ When [ident] is not given, the last tag name from the
+ tag stack is used.
+ With a '>' in the first column is indicated which is
+ the current position in the list (if there is one).
+ [ident] can be a regexp pattern, see |tag-regexp|.
+ See |tag-priority| for the priorities used in the
+ listing. {not in Vi}
+ Example output:
+
+>
+ nr pri kind tag file
+ 1 F f mch_delay os_amiga.c
+ mch_delay(msec, ignoreinput)
+ > 2 F f mch_delay os_msdos.c
+ mch_delay(msec, ignoreinput)
+ 3 F f mch_delay os_unix.c
+ mch_delay(msec, ignoreinput)
+ Enter nr of choice (<CR> to abort):
+<
+ See |tag-priority| for the "pri" column. Note that
+ this depends on the current file, thus using
+ ":tselect xxx" can produce different results.
+ The "kind" column gives the kind of tag, if this was
+ included in the tags file.
+ The "info" column shows information that could be
+ found in the tags file. It depends on the program
+ that produced the tags file.
+ When the list is long, you may get the |more-prompt|.
+ If you already see the tag you want to use, you can
+ type 'q' and enter the number.
+
+ *:sts* *:stselect*
+:sts[elect][!] [ident] Does ":tselect[!] [ident]" and splits the window for
+ the selected tag. {not in Vi}
+
+ *g]*
+g] Like CTRL-], but use ":tselect" instead of ":tag".
+ {not in Vi}
+
+ *v_g]*
+{Visual}g] Same as "g]", but use the highlighted text as the
+ identifier. {not in Vi}
+
+ *:tj* *:tjump*
+:tj[ump][!] [ident] Like ":tselect", but jump to the tag directly when
+ there is only one match. {not in Vi}
+
+ *:stj* *:stjump*
+:stj[ump][!] [ident] Does ":tjump[!] [ident]" and splits the window for the
+ selected tag. {not in Vi}
+
+ *g_CTRL-]*
+g CTRL-] Like CTRL-], but use ":tjump" instead of ":tag".
+ {not in Vi}
+
+ *v_g_CTRL-]*
+{Visual}g CTRL-] Same as "g CTRL-]", but use the highlighted text as
+ the identifier. {not in Vi}
+
+ *:tn* *:tnext*
+:[count]tn[ext][!] Jump to [count] next matching tag (default 1). See
+ |tag-!| for [!]. {not in Vi}
+
+ *:tp* *:tprevious*
+:[count]tp[revious][!] Jump to [count] previous matching tag (default 1).
+ See |tag-!| for [!]. {not in Vi}
+
+ *:tN* *:tNext*
+:[count]tN[ext][!] Same as ":tprevious". {not in Vi}
+
+ *:tr* *:trewind*
+:[count]tr[ewind][!] Jump to first matching tag. If [count] is given, jump
+ to [count]th matching tag. See |tag-!| for [!]. {not
+ in Vi}
+
+ *:tf* *:tfirst*
+:[count]tf[irst][!] Same as ":trewind". {not in Vi}
+
+ *:tl* *:tlast*
+:tl[ast][!] Jump to last matching tag. See |tag-!| for [!]. {not
+ in Vi}
+
+
+When there is no other message, Vim shows which matching tag has been jumped
+to, and the number of matching tags: >
+ tag 1 of 3 or more
+The " or more" is used to indicate that Vim didn't try all the tags files yet.
+When using ":tnext" a few times, or with ":tlast", more matches may be found.
+
+When you didn't see this message because of some other message, or you just
+want to know where you are, this command will show it again (and jump to the
+same tag as last time): >
+ :0tn
+<
+ *tag-skip-file*
+When a matching tag is found for which the file doesn't exist, this match is
+skipped and the next matching tag is used. Vim reports this, to notify you of
+missing files. When the end of the list of matches has been reached, an error
+message is given.
+
+The tag match list can also be used in the preview window. The commands are
+the same as above, with a "p" prepended.
+{not available when compiled without the |+quickfix| feature}
+
+ *:pts* *:ptselect*
+:pts[elect][!] [ident] Does ":tselect[!] [ident]" and shows the new tag in a
+ "Preview" window. See |:ptag| for more info.
+ {not in Vi}
+
+ *:ptj* *:ptjump*
+:ptj[ump][!] [ident] Does ":tjump[!] [ident]" and shows the new tag in a
+ "Preview" window. See |:ptag| for more info.
+ {not in Vi}
+
+ *:ptn* *:ptnext*
+:[count]ptn[ext][!] ":tnext" in the preview window. See |:ptag|.
+ {not in Vi}
+
+ *:ptp* *:ptprevious*
+:[count]ptp[revious][!] ":tprevious" in the preview window. See |:ptag|.
+ {not in Vi}
+
+ *:ptN* *:ptNext*
+:[count]ptN[ext][!] Same as ":ptprevious". {not in Vi}
+
+ *:ptr* *:ptrewind*
+:[count]ptr[ewind][!] ":trewind" in the preview window. See |:ptag|.
+ {not in Vi}
+
+ *:ptf* *:ptfirst*
+:[count]ptf[irst][!] Same as ":ptrewind". {not in Vi}
+
+ *:ptl* *:ptlast*
+:ptl[ast][!] ":tlast" in the preview window. See |:ptag|.
+ {not in Vi}
+
+==============================================================================
+4. Tags details *tag-details*
+
+ *static-tag*
+A static tag is a tag that is defined for a specific file. In a C program
+this could be a static function.
+
+In Vi jumping to a tag sets the current search pattern. This means that
+the "n" command after jumping to a tag does not search for the same pattern
+that it did before jumping to the tag. Vim does not do this as we consider it
+to be a bug. You can still find the tag search pattern in the search history.
+If you really want the old Vi behavior, set the 't' flag in 'cpoptions'.
+
+ *tag-binary-search*
+Vim uses binary searching in the tags file to find the desired tag quickly
+(when enabled at compile time |+tag_binary|). But this only works if the
+tags file was sorted on ASCII byte value. Therefore, if no match was found,
+another try is done with a linear search. If you only want the linear search,
+reset the 'tagbsearch' option. Or better: Sort the tags file!
+
+Note that the binary searching is disabled when not looking for a tag with a
+specific name. This happens when ignoring case and when a regular expression
+is used that doesn't start with a fixed string. Tag searching can be a lot
+slower then. The former can be avoided by case-fold sorting the tags file.
+See 'tagbsearch' for details.
+
+ *tag-regexp*
+The ":tag" and "tselect" commands accept a regular expression argument. See
+|pattern| for the special characters that can be used.
+When the argument starts with '/', it is used as a pattern. If the argument
+does not start with '/', it is taken literally, as a full tag name.
+Examples: >
+ :tag main
+< jumps to the tag "main" that has the highest priority. >
+ :tag /^get
+< jumps to the tag that starts with "get" and has the highest priority. >
+ :tag /norm
+< lists all the tags that contain "norm", including "id_norm".
+When the argument both exists literally, and match when used as a regexp, a
+literal match has a higher priority. For example, ":tag /open" matches "open"
+before "open_file" and "file_open".
+
+ *tag-!*
+If the tag is in the current file this will always work. Otherwise the
+performed actions depend on whether the current file was changed, whether a !
+is added to the command and on the 'autowrite' option:
+
+ tag in file autowrite ~
+current file changed ! option action ~
+-----------------------------------------------------------------------------
+ yes x x x goto tag
+ no no x x read other file, goto tag
+ no yes yes x abandon current file, read other file, goto
+ tag
+ no yes no on write current file, read other file, goto
+ tag
+ no yes no off fail
+-----------------------------------------------------------------------------
+
+- If the tag is in the current file, the command will always work.
+- If the tag is in another file and the current file was not changed, the
+ other file will be made the current file and read into the buffer.
+- If the tag is in another file, the current file was changed and a ! is
+ added to the command, the changes to the current file are lost, the other
+ file will be made the current file and read into the buffer.
+- If the tag is in another file, the current file was changed and the
+ 'autowrite' option is on, the current file will be written, the other
+ file will be made the current file and read into the buffer.
+- If the tag is in another file, the current file was changed and the
+ 'autowrite' option is off, the command will fail. If you want to save
+ the changes, use the ":w" command and then use ":tag" without an argument.
+ This works because the tag is put on the stack anyway. If you want to lose
+ the changes you can use the ":tag!" command.
+
+ *tag-security*
+Note that Vim forbids some commands, for security reasons. This works like
+using the 'secure' option for exrc/vimrc files in the current directory. See
+|trojan-horse| and |sandbox|.
+When the {tagaddress} changes a buffer, you will get a warning message:
+ "WARNING: tag command changed a buffer!!!"
+In a future version changing the buffer will be impossible. All this for
+security reasons: Somebody might hide a nasty command in the tags file, which
+would otherwise go unnoticed. Example: >
+ :$d|/tag-function-name/
+{this security prevention is not present in Vi}.
+
+In Vi the ":tag" command sets the last search pattern when the tag is searched
+for. In Vim this is not done, the previous search pattern is still remembered,
+unless the 't' flag is present in 'cpoptions'. The search pattern is always
+put in the search history, so you can modify it if searching fails.
+
+ *emacs-tags* *emacs_tags* *E430*
+Emacs style tag files are only supported if Vim was compiled with the
+|+emacs_tags| feature enabled. Sorry, there is no explanation about Emacs tag
+files here, it is only supported for backwards compatibility :-).
+
+ *tags-option*
+The 'tags' option is a list of file names. Each of these files is searched
+for the tag. This can be used to use a different tags file than the default
+file "tags". It can also be used to access a common tags file.
+
+The next file in the list is not used when:
+- A matching static tag for the current buffer has been found.
+- A matching global tag has been found.
+This also depends on the 'ignorecase' option. If it is off, and the tags file
+only has a match without matching case, the next tags file is searched for a
+match with matching case. If no tag with matching case is found, the first
+match without matching case is used. If 'ignorecase' is on, and a matching
+global tag with or without matching case is found, this one is used, no
+further tags files are searched.
+
+When a tag file name starts with "./", the '.' is replaced with the path of
+the current file. This makes it possible to use a tags file in the directory
+where the current file is (no matter what the current directory is). The idea
+of using "./" is that you can define which tag file is searched first: In the
+current directory ("tags,./tags") or in the directory of the current file
+("./tags,tags").
+
+For example: >
+ :set tags=./tags,tags,/home/user/commontags
+
+In this example the tag will first be searched for in the file "tags" in the
+directory where the current file is. Next the "tags" file in the current
+directory. If it is not found there, then the file "/home/user/commontags"
+will be searched for the tag.
+
+This can be switched off by including the 'd' flag in 'cpoptions', to make
+it Vi compatible. "./tags" will than be the tags file in the current
+directory, instead of the tags file in the directory where the current file
+is.
+
+Instead of the comma a space may be used. Then a backslash is required for
+the space to be included in the string option: >
+ :set tags=tags\ /home/user/commontags
+
+To include a space in a file name use three backslashes. To include a comma
+in a file name use two backslashes. For example, use: >
+ :set tags=tag\\\ file,/home/user/common\\,tags
+
+for the files "tag file" and "/home/user/common,tags". The 'tags' option will
+have the value "tag\ file,/home/user/common\,tags".
+
+If the 'tagrelative' option is on (which is the default) and using a tag file
+in another directory, file names in that tag file are relative to the
+directory where the tag file is.
+
+==============================================================================
+5. Tags file format *tags-file-format* *E431*
+
+ *ctags* *jtags*
+A tags file can be created with an external command, for example "ctags". It
+will contain a tag for each function. Some versions of "ctags" will also make
+a tag for each "#defined" macro, typedefs, enums, etc.
+
+Some programs that generate tags files:
+ctags As found on most Unix systems. Only supports C. Only
+ does the basic work.
+exuberant ctags This a very good one. It works for C, C++, Java,
+ Fortran, Eiffel and others. It can generate tags for
+ many items. See http://ctags.sourceforge.net.
+etags Connected to Emacs. Supports many languages.
+JTags For Java, in Java. It can be found at
+ http://www.fleiner.com/jtags/.
+ptags.py For Python, in Python. Found in your Python source
+ directory at Tools/scripts/ptags.py.
+ptags For Perl, in Perl. It can be found at
+ http://www.eleves.ens.fr:8080/home/nthiery/Tags/.
+gnatxref For Ada. See http://www.gnuada.org/. gnatxref is
+ part of the gnat package.
+
+
+The lines in the tags file must have one of these three formats:
+
+1. {tagname} {TAB} {tagfile} {TAB} {tagaddress}
+2. {tagfile}:{tagname} {TAB} {tagfile} {TAB} {tagaddress}
+3. {tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..
+
+The first is a normal tag, which is completely compatible with Vi. It is the
+only format produced by traditional ctags implementations. This is often used
+for functions that are global, also referenced in other files.
+
+The lines in the tags file can end in <LF> or <CR><LF>. On the Macintosh <CR>
+also works. The <CR> and <NL> characters can never appear inside a line.
+
+ *tag-old-static*
+The second format is for a static tag only. It is obsolete now, replaced by
+the third format. It is only supported by Elvis 1.x and Vim and a few
+versions of ctags. A static tag is often used for functions that are local,
+only referenced in the file {tagfile}. Note that for the static tag, the two
+occurrences of {tagfile} must be exactly the same. Also see |tags-option|
+below, for how static tags are used.
+
+The third format is new. It includes additional information in optional
+fields at the end of each line. It is backwards compatible with Vi. It is
+only supported by new versions of ctags (such as Exuberant ctags).
+
+{tagname} The identifier. Normally the name of a function, but it can
+ be any identifier. It cannot contain a <Tab>.
+{TAB} One <Tab> character. Note: previous versions allowed any
+ white space here. This has been abandoned to allow spaces in
+ {tagfile}. It can be re-enabled by including the
+ |+tag_any_white| feature at compile time. *tag-any-white*
+{tagfile} The file that contains the definition of {tagname}. It can
+ have an absolute or relative path. It may contain environment
+ variables and wildcards (although the use of wildcards is
+ doubtful). It cannot contain a <Tab>.
+{tagaddress} The Ex command that positions the cursor on the tag. It can
+ be any Ex command, although restrictions apply (see
+ |tag-security|). Posix only allows line numbers and search
+ commands, which are mostly used.
+{term} ;" The two characters semicolon and double quote. This is
+ interpreted by Vi as the start of a comment, which makes the
+ following be ignored. This is for backwards compatibility
+ with Vi, it ignores the following fields.
+{field} .. A list of optional fields. Each field has the form:
+
+ <Tab>{fieldname}:{value}
+
+ The {fieldname} identifies the field, and can only contain
+ alphabetical characters [a-zA-Z].
+ The {value} is any string, but cannot contain a <Tab>.
+ These characters are special:
+ "\t" stands for a <Tab>
+ "\r" stands for a <CR>
+ "\n" stands for a <NL>
+ "\\" stands for a single '\' character
+
+ There is one field that doesn't have a ':'. This is the kind
+ of the tag. It is handled like it was preceded with "kind:".
+ See the documentation of ctags for the kinds it produces.
+
+ The only other field currently recognized by Vim is "file:"
+ (with an empty value). It is used for a static tag.
+
+The first lines in the tags file can contain lines that start with
+ !_TAG_
+These are sorted to the first lines, only rare tags that start with "!" can
+sort to before them. Vim recognizes two items. The first one is the line
+that indicates if the file was sorted. When this line is found, Vim uses
+binary searching for the tags file:
+ !_TAG_FILE_SORTED<Tab>1<Tab>{anything} ~
+
+A tag file may be case-fold sorted to avoid a linear search when 'ignorecase'
+is on. See 'tagbsearch' for details. The value '2' should be used then:
+ !_TAG_FILE_SORTED<Tab>2<Tab>{anything} ~
+
+The other tag that Vim recognizes, but only when compiled with the
+|+multi_byte| feature, is the encoding of the tags file:
+ !_TAG_FILE_ENCODING<Tab>utf-8<Tab>{anything} ~
+Here "utf-8" is the encoding used for the tags. Vim will then convert the tag
+being searched for from 'encoding' to the encoding of the tags file. And when
+listing tags the reverse happens. When the conversion fails the unconverted
+tag is used.
+
+ *tag-search*
+The command can be any Ex command, but often it is a search command.
+Examples:
+ tag1 file1 /^main(argc, argv)/ ~
+ tag2 file2 108 ~
+
+The command is always executed with 'magic' not set. The only special
+characters in a search pattern are "^" (begin-of-line) and "$" (<EOL>).
+See |pattern|. Note that you must put a backslash before each backslash in
+the search text. This is for backwards compatibility with Vi.
+
+ *E434* *E435*
+If the command is a normal search command (it starts and ends with "/" or
+"?"), some special handling is done:
+- Searching starts on line 1 of the file.
+ The direction of the search is forward for "/", backward for "?".
+ Note that 'wrapscan' does not matter, the whole file is always searched. {Vi
+ does use 'wrapscan', which caused tags sometimes not be found). {Vi starts
+ searching in line 2 of another file. It does not find a tag in line 1 of
+ another file when 'wrapscan' is not set}
+- If the search fails, another try is done ignoring case. If that fails too,
+ a search is done for:
+ "^tagname[ \t]*("
+ (the tag with '^' prepended and "[ \t]*(" appended). When using function
+ names, this will find the function name when it is in column 0. This will
+ help when the arguments to the function have changed since the tags file was
+ made. If this search also fails another search is done with:
+ "^[#a-zA-Z_].*\<tagname[ \t]*("
+ This means: A line starting with '#' or an identifier and containing the tag
+ followed by white space and a '('. This will find macro names and function
+ names with a type prepended. {the extra searches are not in Vi}.
+
+==============================================================================
+6. Include file searches *include-search* *definition-search*
+ *E387* *E388* *E389*
+
+These commands look for a string in the current file and in all encountered
+included files (recursively). This can be used to find the definition of a
+variable, function or macro. If you only want to search in the current
+buffer, use the commands listed at |pattern-searches|.
+
+These commands are not available when the |+find_in_path| feature was disabled
+at compile time.
+
+When a line is encountered that includes another file, that file is searched
+before continuing in the current buffer. Files included by included files are
+also searched. When an include file could not be found it is silently
+ignored. Use the |:checkpath| command to discover which files could not be
+found, possibly your 'path' option is not set up correctly. Note: the
+included file is searched, not a buffer that may be editing that file. Only
+for the current file the lines in the buffer are used.
+
+The string can be any keyword or a defined macro. For the keyword any match
+will be found. For defined macros only lines that match with the 'define'
+option will be found. The default is "^#\s*define", which is for C programs.
+For other languages you probably want to change this. See 'define' for an
+example for C++. The string cannot contain an end-of-line, only matches
+within a line are found.
+
+When a match is found for a defined macro, the displaying of lines continues
+with the next line when a line ends in a backslash.
+
+The commands that start with "[" start searching from the start of the current
+file. The commands that start with "]" start at the current cursor position.
+
+The 'include' option is used to define a line that includes another file. The
+default is "\^#\s*include", which is for C programs. Note: Vim does not
+recognize C syntax, if the 'include' option matches a line inside
+"#ifdef/#endif" or inside a comment, it is searched anyway. The 'isfname'
+option is used to recognize the file name that comes after the matched
+pattern.
+
+The 'path' option is used to find the directory for the include files that
+do not have an absolute path.
+
+The 'comments' option is used for the commands that display a single line or
+jump to a line. It defines patterns that may start a comment. Those lines
+are ignored for the search, unless [!] is used. One exception: When the line
+matches the pattern "^# *define" it is not considered to be a comment.
+
+If you want to list matches, and then select one to jump to, you could use a
+mapping to do that for you. Here is an example: >
+
+ :map <F4> [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
+<
+ *[i*
+[i Display the first line that contains the keyword
+ under the cursor. The search starts at the beginning
+ of the file. Lines that look like a comment are
+ ignored (see 'comments' option). If a count is given,
+ the count'th matching line is displayed, and comment
+ lines are not ignored. {not in Vi}
+
+ *]i*
+]i like "[i", but start at the current cursor position.
+ {not in Vi}
+
+ *:is* *:isearch*
+:[range]is[earch][!] [count] [/]pattern[/]
+ Like "[i" and "]i", but search in [range] lines
+ (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *[I*
+[I Display all lines that contain the keyword under the
+ cursor. Filenames and line numbers are displayed
+ for the found lines. The search starts at the
+ beginning of the file. {not in Vi}
+
+ *]I*
+]I like "[I", but start at the current cursor position.
+ {not in Vi}
+
+ *:il* *:ilist*
+:[range]il[ist][!] [/]pattern[/]
+ Like "[I" and "]I", but search in [range] lines
+ (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *[_CTRL-I*
+[ CTRL-I Jump to the first line that contains the keyword
+ under the cursor. The search starts at the beginning
+ of the file. Lines that look like a comment are
+ ignored (see 'comments' option). If a count is given,
+ the count'th matching line is jumped to, and comment
+ lines are not ignored. {not in Vi}
+
+ *]_CTRL-I*
+] CTRL-I like "[ CTRL-I", but start at the current cursor
+ position. {not in Vi}
+
+ *:ij* *:ijump*
+:[range]ij[ump][!] [count] [/]pattern[/]
+ Like "[ CTRL-I" and "] CTRL-I", but search in
+ [range] lines (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+CTRL-W CTRL-I *CTRL-W_CTRL-I* *CTRL-W_i*
+CTRL-W i Open a new window, with the cursor on the first line
+ that contains the keyword under the cursor. The
+ search starts at the beginning of the file. Lines
+ that look like a comment line are ignored (see
+ 'comments' option). If a count is given, the count'th
+ matching line is jumped to, and comment lines are not
+ ignored. {not in Vi}
+
+ *:isp* *:isplit*
+:[range]isp[lit][!] [count] [/]pattern[/]
+ Like "CTRL-W i" and "CTRL-W i", but search in
+ [range] lines (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *[d*
+[d Display the first macro definition that contains the
+ macro under the cursor. The search starts from the
+ beginning of the file. If a count is given, the
+ count'th matching line is displayed. {not in Vi}
+
+ *]d*
+]d like "[d", but start at the current cursor position.
+ {not in Vi}
+
+ *:ds* *:dsearch*
+:[range]ds[earch][!] [count] [/]string[/]
+ Like "[d" and "]d", but search in [range] lines
+ (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *[D*
+[D Display all macro definitions that contain the macro
+ under the cursor. Filenames and line numbers are
+ displayed for the found lines. The search starts
+ from the beginning of the file. {not in Vi}
+
+ *]D*
+]D like "[D", but start at the current cursor position.
+ {not in Vi}
+
+ *:dl* *:dlist*
+:[range]dl[ist][!] [/]string[/]
+ Like "[D" and "]D", but search in [range] lines
+ (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *[_CTRL-D*
+[ CTRL-D Jump to the first macro definition that contains the
+ keyword under the cursor. The search starts from
+ the beginning of the file. If a count is given, the
+ count'th matching line is jumped to. {not in Vi}
+
+ *]_CTRL-D*
+] CTRL-D like "[ CTRL-D", but start at the current cursor
+ position. {not in Vi}
+
+ *:dj* *:djump*
+:[range]dj[ump][!] [count] [/]string[/]
+ Like "[ CTRL-D" and "] CTRL-D", but search in
+ [range] lines (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+CTRL-W CTRL-D *CTRL-W_CTRL-D* *CTRL-W_d*
+CTRL-W d Open a new window, with the cursor on the first
+ macro definition line that contains the keyword
+ under the cursor. The search starts from the
+ beginning of the file. If a count is given, the
+ count'th matching line is jumped to. {not in Vi}
+
+ *:dsp* *:dsplit*
+:[range]dsp[lit][!] [count] [/]string[/]
+ Like "CTRL-W d", but search in [range] lines
+ (default: whole file).
+ See |:search-args| for [/] and [!]. {not in Vi}
+
+ *:che* *:checkpath*
+:che[ckpath] List all the included files that could not be found.
+ {not in Vi}
+
+:che[ckpath]! List all the included files. {not in Vi}
+
+ *:search-args*
+Common arguments for the commands above:
+[!] When included, find matches in lines that are recognized as comments.
+ When excluded, a match is ignored when the line is recognized as a
+ comment (according to 'comments'), or the match is in a C comment (after
+ "//" or inside /* */). Note that a match may be missed if a line is
+ recognized as a comment, but the comment ends halfway the line.
+ And if the line is a comment, but it is not recognized (according to
+ 'comments') a match may be found in it anyway. Example: >
+ /* comment
+ foobar */
+< A match for "foobar" is found, because this line is not recognized as a
+ comment (even though syntax highlighting does recognize it).
+ Note: Since a macro definition mostly doesn't look like a comment, the
+ [!] makes no difference for ":dlist", ":dsearch" and ":djump".
+[/] A pattern can be surrounded by '/'. Without '/' only whole words are
+ matched, using the pattern "\<pattern\>". Only after the second '/' a
+ next command can be appended with '|'. Example: >
+ :isearch /string/ | echo "the last one"
+< For a ":djump", ":dsplit", ":dlist" and ":dsearch" command the pattern
+ is used as a literal string, not as a search pattern.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
new file mode 100644
index 000000000..4ddd63e42
--- /dev/null
+++ b/runtime/doc/term.txt
@@ -0,0 +1,808 @@
+*term.txt* For Vim version 7.0aa. Last change: 2004 Jan 09
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Terminal information *terminal-info*
+
+Vim uses information about the terminal you are using to fill the screen and
+recognize what keys you hit. If this information is not correct, the screen
+may be messed up or keys may not be recognized. The actions which have to be
+performed on the screen are accomplished by outputting a string of
+characters. Special keys produce a string of characters. These strings are
+stored in the terminal options, see |terminal-options|.
+
+NOTE: Most of this is not used when running the |GUI|.
+
+1. Startup |startup-terminal|
+2. Terminal options |terminal-options|
+3. Window size |window-size|
+4. Slow and fast terminals |slow-fast-terminal|
+5. Using the mouse |mouse-using|
+
+==============================================================================
+1. Startup *startup-terminal*
+
+When Vim is started a default terminal type is assumed. For the Amiga this is
+a standard CLI window, for MS-DOS the pc terminal, for Unix an ansi terminal.
+A few other terminal types are always available, see below |builtin-terms|.
+
+You can give the terminal name with the '-T' Vim argument. If it is not given
+Vim will try to get the name from the TERM environment variable.
+
+ *termcap* *terminfo* *E557* *E558* *E559*
+On Unix the terminfo database or termcap file is used. This is referred to as
+"termcap" in all the documentation. At compile time, when running configure,
+the choice whether to use terminfo or termcap is done automatically. When
+running Vim the output of ":version" will show |+terminfo| if terminfo is
+used. Also see |xterm-screens|.
+
+On non-Unix systems a termcap is only available if Vim was compiled with
+TERMCAP defined.
+
+ *builtin-terms* *builtin_terms*
+Which builtin terminals are available depends on a few defines in feature.h,
+which need to be set at compile time:
+ define output of ":version" terminals builtin ~
+NO_BUILTIN_TCAPS -builtin_terms none
+SOME_BUILTIN_TCAPS +builtin_terms most common ones (default)
+ALL_BUILTIN_TCAPS ++builtin_terms all available
+
+You can see a list of available builtin terminals with ":set term=xxx" (when
+not running the GUI). Also see |+builtin_terms|.
+
+If the termcap code is included Vim will try to get the strings for the
+terminal you are using from the termcap file and the builtin termcaps. Both
+are always used, if an entry for the terminal you are using is present. Which
+one is used first depends on the 'ttybuiltin' option:
+
+'ttybuiltin' on 1: builtin termcap 2: external termcap
+'ttybuiltin' off 1: external termcap 2: builtin termcap
+
+If an option is missing in one of them, it will be obtained from the other
+one. If an option is present in both, the one first encountered is used.
+
+Which external termcap file is used varies from system to system and may
+depend on the environment variables "TERMCAP" and "TERMPATH". See "man
+tgetent".
+
+Settings depending on terminal *term-dependent-settings*
+
+If you want to set options or mappings, depending on the terminal name, you
+can do this best in your .vimrc. Example: >
+
+ if &term == "xterm"
+ ... xterm maps and settings ...
+ elseif &term =~ "vt10."
+ ... vt100, vt102 maps and settings ...
+ endif
+<
+ *raw-terminal-mode*
+For normal editing the terminal will be put into "raw" mode. The strings
+defined with 't_ti' and 't_ks' will be sent to the terminal. Normally this
+puts the terminal in a state where the termcap codes are valid and activates
+the cursor and function keys. When Vim exits the terminal will be put back
+into the mode it was before Vim started. The strings defined with 't_te' and
+'t_ke' will be sent to the terminal. On the Amiga, with commands that execute
+an external command (e.g., "!!"), the terminal will be put into Normal mode
+for a moment. This means that you can stop the output to the screen by
+hitting a printing key. Output resumes when you hit <BS>.
+
+ *cs7-problem*
+Note: If the terminal settings are changed after running Vim, you might have
+an illegal combination of settings. This has been reported on Solaris 2.5
+with "stty cs8 parenb", which is restored as "stty cs7 parenb". Use
+"stty cs8 -parenb -istrip" instead, this is restored correctly.
+
+Some termcap entries are wrong in the sense that after sending 't_ks' the
+cursor keys send codes different from the codes defined in the termcap. To
+avoid this you can set 't_ks' (and 't_ke') to empty strings. This must be
+done during initialization (see |initialization|), otherwise it's too late.
+
+Some termcap entries assume that the highest bit is always reset. For
+example: The cursor-up entry for the Amiga could be ":ku=\E[A:". But the
+Amiga really sends "\233A". This works fine if the highest bit is reset,
+e.g., when using an Amiga over a serial line. If the cursor keys don't work,
+try the entry ":ku=\233A:".
+
+Some termcap entries have the entry ":ku=\E[A:". But the Amiga really sends
+"\233A". On output "\E[" and "\233" are often equivalent, on input they
+aren't. You will have to change the termcap entry, or change the key code with
+the :set command to fix this.
+
+Many cursor key codes start with an <Esc>. Vim must find out if this is a
+single hit of the <Esc> key or the start of a cursor key sequence. It waits
+for a next character to arrive. If it does not arrive within one second a
+single <Esc> is assumed. On very slow systems this may fail, causing cursor
+keys not to work sometimes. If you discover this problem reset the 'timeout'
+option. Vim will wait for the next character to arrive after an <Esc>. If
+you want to enter a single <Esc> you must type it twice. Resetting the
+'esckeys' option avoids this problem in Insert mode, but you lose the
+possibility to use cursor and function keys in Insert mode.
+
+On the Amiga the recognition of window resizing is activated only when the
+terminal name is "amiga" or "builtin_amiga".
+
+Some terminals have confusing codes for the cursor keys. The televideo 925 is
+such a terminal. It sends a CTRL-H for cursor-left. This would make it
+impossible to distinguish a backspace and cursor-left. To avoid this problem
+CTRL-H is never recognized as cursor-left.
+
+ *vt100-cursor-keys* *xterm-cursor-keys*
+Other terminals (e.g., vt100 and xterm) have cursor keys that send <Esc>OA,
+<Esc>OB, etc. Unfortunately these are valid commands in insert mode: Stop
+insert, Open a new line above the new one, start inserting 'A', 'B', etc.
+Instead of performing these commands Vim will erroneously recognize this typed
+key sequence as a cursor key movement. To avoid this and make Vim do what you
+want in either case you could use these settings: >
+ :set notimeout " don't timeout on mappings
+ :set ttimeout " do timeout on terminal key codes
+ :set timeoutlen=100 " timeout after 100 msec
+This requires the key-codes to be sent within 100msec in order to recognize
+them as a cursor key. When you type you normally are not that fast, so they
+are recognized as individual typed commands, even though Vim receives the same
+sequence of bytes.
+
+ *vt100-function-keys* *xterm-function-keys*
+An xterm can send function keys F1 to F4 in two modes: vt100 compatible or
+not. Because Vim cannot know what the xterm is sending, both types of keys
+are recognized. The same happens for the <Home> and <End> keys.
+ normal vt100 ~
+ <F1> t_k1 <Esc>[11~ <xF1> <Esc>OP *<xF1>-xterm*
+ <F2> t_k2 <Esc>[12~ <xF2> <Esc>OQ *<xF2>-xterm*
+ <F3> t_k3 <Esc>[13~ <xF3> <Esc>OR *<xF3>-xterm*
+ <F4> t_k4 <Esc>[14~ <xF4> <Esc>OS *<xF4>-xterm*
+ <Home> t_kh <Esc>[7~ <xHome> <Esc>OH *<xHome>-xterm*
+ <End> t_@7 <Esc>[4~ <xEnd> <Esc>OF *<xEnd>-xterm*
+
+When Vim starts, <xF1> is mapped to <F1>, <xF2> to <F2> etc. This means that
+by default both codes do the same thing. If you make a mapping for <xF2>,
+because your terminal does have two keys, the default mapping is overwritten,
+thus you can use the <F2> and <xF2> keys for something different.
+
+ *xterm-shifted-keys*
+Newer versions of xterm support shifted function keys and special keys. Vim
+recognizes most of them. Use ":set termcap" to check which are supported and
+what the codes are. Mostly these are not in a termcap, they are only
+supported by the builtin_xterm termcap.
+
+ *xterm-scroll-region*
+The default termcap entry for xterm on Sun and other platforms does not
+contain the entry for scroll regions. Add ":cs=\E[%i%d;%dr:" to the xterm
+entry in /etc/termcap and everything should work.
+
+ *xterm-end-home-keys*
+On some systems (at least on FreeBSD with XFree86 3.1.2) the codes that the
+<End> and <Home> keys send contain a <Nul> character. To make these keys send
+the proper key code, add these lines to your ~/.Xdefaults file:
+
+*VT100.Translations: #override \n\
+ <Key>Home: string("0x1b") string("[7~") \n\
+ <Key>End: string("0x1b") string("[8~")
+
+ *xterm-8bit* *xterm-8-bit*
+Xterm can be run in a mode where it uses 8-bit escape sequences. The CSI code
+is used instead of <Esc>[. The advantage is that an <Esc> can quickly be
+recognized in Insert mode, because it can't be confused with the start of a
+special key.
+For the builtin termcap entries, Vim checks if the 'term' option contains
+"8bit" anywhere. It then uses 8-bit characters for the termcap entries, the
+mouse and a few other things. You would normally set $TERM in your shell to
+"xterm-8bit" and Vim picks this up and adjusts to the 8-bit setting
+automatically.
+When Vim receives a response to the |t_RV| (request version) sequence and it
+starts with CSI, it assumes that the terminal is in 8-bit mode and will
+convert all key sequences to their 8-bit variants.
+
+==============================================================================
+2. Terminal options *terminal-options* *E436*
+
+The terminal options can be set just like normal options. But they are not
+shown with the ":set all" command. Instead use ":set termcap".
+
+It is always possible to change individual strings by setting the
+appropriate option. For example: >
+ :set t_ce=^V^[[K (CTRL-V, <Esc>, [, K)
+
+{Vi: no terminal options. You have to exit Vi, edit the termcap entry and
+try again}
+
+The options are listed below. The associated termcap code is always equal to
+the last two characters of the option name. Only one termcap code is
+required: Cursor motion, 't_cm'.
+
+The options 't_da', 't_db', 't_ms', 't_xs' represent flags in the termcap.
+When the termcap flag is present, the option will be set to "y". But any
+non-empty string means that the flag is set. An empty string means that the
+flag is not set. 't_CS' works like this too, but it isn't a termcap flag.
+
+OUTPUT CODES
+ option meaning ~
+
+ t_AB set background color (ANSI) *t_AB* *'t_AB'*
+ t_AF set foreground color (ANSI) *t_AF* *'t_AF'*
+ t_AL add number of blank lines *t_AL* *'t_AL'*
+ t_al add new blank line *t_al* *'t_al'*
+ t_bc backspace character *t_bc* *'t_bc'*
+ t_cd clear to end of screen *t_cd* *'t_cd'*
+ t_ce clear to end of line *t_ce* *'t_ce'*
+ t_cl clear screen *t_cl* *'t_cl'*
+ t_cm cursor motion (required!) *E437* *t_cm* *'t_cm'*
+ t_Co number of colors *t_Co* *'t_Co'*
+ t_CS if non-empty, cursor relative to scroll region *t_CS* *'t_CS'*
+ t_cs define scrolling region *t_cs* *'t_cs'*
+ t_CV define vertical scrolling region *t_CV* *'t_CV'*
+ t_da if non-empty, lines from above scroll down *t_da* *'t_da'*
+ t_db if non-empty, lines from below scroll up *t_db* *'t_db'*
+ t_DL delete number of lines *t_DL* *'t_DL'*
+ t_dl delete line *t_dl* *'t_dl'*
+ t_fs set window title end (from status line) *t_fs* *'t_fs'*
+ t_ke exit "keypad transmit" mode *t_ke* *'t_ke'*
+ t_ks start "keypad transmit" mode *t_ks* *'t_ks'*
+ t_le move cursor one char left *t_le* *'t_le'*
+ t_mb blinking mode *t_mb* *'t_mb'*
+ t_md bold mode *t_md* *'t_md'*
+ t_me Normal mode (undoes t_mr, t_mb, t_md and color) *t_me* *'t_me'*
+ t_mr reverse (invert) mode *t_mr* *'t_mr'*
+ *t_ms* *'t_ms'*
+ t_ms if non-empty, cursor can be moved in standout/inverse mode
+ t_nd non destructive space character *t_nd* *'t_nd'*
+ t_op reset to original color pair *t_op* *'t_op'*
+ t_RI cursor number of chars right *t_RI* *'t_RI'*
+ t_Sb set background color *t_Sb* *'t_Sb'*
+ t_Sf set foreground color *t_Sf* *'t_Sf'*
+ t_se standout end *t_se* *'t_se'*
+ t_so standout mode *t_so* *'t_so'*
+ t_sr scroll reverse (backward) *t_sr* *'t_sr'*
+ t_te out of "termcap" mode *t_te* *'t_te'*
+ t_ti put terminal in "termcap" mode *t_ti* *'t_ti'*
+ t_ts set window title start (to status line) *t_ts* *'t_ts'*
+ t_ue underline end *t_ue* *'t_ue'*
+ t_us underline mode *t_us* *'t_us'*
+ t_ut clearing uses the current background color *t_ut* *'t_ut'*
+ t_vb visual bell *t_vb* *'t_vb'*
+ t_ve cursor visible *t_ve* *'t_ve'*
+ t_vi cursor invisible *t_vi* *'t_vi'*
+ t_vs cursor very visible *t_vs* *'t_vs'*
+ *t_xs* *'t_xs'*
+ t_xs if non-empty, standout not erased by overwriting (hpterm)
+ t_ZH italics mode *t_ZH* *'t_ZH'*
+ t_ZR italics end *t_ZR* *'t_ZR'*
+
+Added by Vim (there are no standard codes for these):
+ t_IS set icon text start *t_IS* *'t_IS'*
+ t_IE set icon text end *t_IE* *'t_IE'*
+ t_WP set window position (Y, X) in pixels *t_WP* *'t_WP'*
+ t_WS set window size (height, width) in characters *t_WS* *'t_WS'*
+ t_RV request terminal version string (for xterm) *t_RV* *'t_RV'*
+ |xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
+
+KEY CODES
+Note: Use the <> form if possible
+
+ option name meaning ~
+
+ t_ku <Up> arrow up *t_ku* *'t_ku'*
+ t_kd <Down> arrow down *t_kd* *'t_kd'*
+ t_kr <Right> arrow right *t_kr* *'t_kr'*
+ t_kl <Left> arrow left *t_kl* *'t_kl'*
+ <S-Up> shift arrow up
+ <S-Down> shift arrow down
+ t_%i <S-Right> shift arrow right *t_%i* *'t_%i'*
+ t_#4 <S-Left> shift arrow left *t_#4* *'t_#4'*
+ t_k1 <F1> function key 1 *t_k1* *'t_k1'*
+ <xF1> alternate F1 *<xF1>*
+ t_k2 <F2> function key 2 *<F2>* *t_k2* *'t_k2'*
+ <xF2> alternate F2 *<xF2>*
+ t_k3 <F3> function key 3 *<F3>* *t_k3* *'t_k3'*
+ <xF3> alternate F3 *<xF3>*
+ t_k4 <F4> function key 4 *<F4>* *t_k4* *'t_k4'*
+ <xF4> alternate F4 *<xF4>*
+ t_k5 <F5> function key 5 *<F5>* *t_k5* *'t_k5'*
+ t_k6 <F6> function key 6 *<F6>* *t_k6* *'t_k6'*
+ t_k7 <F7> function key 7 *<F7>* *t_k7* *'t_k7'*
+ 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_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'*
+ t_F5 <F15> function key 15 *<F15>* *t_F5* *'t_F5'*
+ t_F6 <F16> function key 16 *<F16>* *t_F6* *'t_F6'*
+ t_F7 <F17> function key 17 *<F17>* *t_F7* *'t_F7'*
+ t_F8 <F18> function key 18 *<F18>* *t_F8* *'t_F8'*
+ t_F9 <F19> function key 19 *<F19>* *t_F9* *'t_F9'*
+ <S-F1> shifted function key 1
+ <S-xF1> alternate <S-F1> *<S-xF1>*
+ <S-F2> shifted function key 2 *<S-F2>*
+ <S-xF2> alternate <S-F2> *<S-xF2>*
+ <S-F3> shifted function key 3 *<S-F3>*
+ <S-xF3> alternate <S-F3> *<S-xF3>*
+ <S-F4> shifted function key 4 *<S-F4>*
+ <S-xF4> alternate <S-F4> *<S-xF4>*
+ <S-F5> shifted function key 5 *<S-F5>*
+ <S-F6> shifted function key 6 *<S-F6>*
+ <S-F7> shifted function key 7 *<S-F7>*
+ <S-F8> shifted function key 8 *<S-F8>*
+ <S-F9> shifted function key 9 *<S-F9>*
+ <S-F10> shifted function key 10 *<S-F10>*
+ <S-F11> shifted function key 11 *<S-F11>*
+ <S-F12> shifted function key 12 *<S-F12>*
+ t_%1 <Help> help key *t_%1* *'t_%1'*
+ t_&8 <Undo> undo key *t_&8* *'t_&8'*
+ 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_kh <Home> home key *t_kh* *'t_kh'*
+ 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'*
+ <xEnd> alternate end key *<xEnd>*
+ t_kP <PageUp> page-up key *t_kP* *'t_kP'*
+ t_kN <PageDown> page-down key *t_kN* *'t_kN'*
+ t_K1 <kHome> keypad home key *t_K1* *'t_K1'*
+ t_K4 <kEnd> keypad end key *t_K4* *'t_K4'*
+ t_K3 <kPageUp> keypad page-up key *t_K3* *'t_K3'*
+ 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_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'*
+ t_KD <k1> keypad 1 *<k1>* *t_KD* *'t_KD'*
+ t_KE <k2> keypad 2 *<k2>* *t_KE* *'t_KE'*
+ t_KF <k3> keypad 3 *<k3>* *t_KF* *'t_KF'*
+ t_KG <k4> keypad 4 *<k4>* *t_KG* *'t_KG'*
+ t_KH <k5> keypad 5 *<k5>* *t_KH* *'t_KH'*
+ t_KI <k6> keypad 6 *<k6>* *t_KI* *'t_KI'*
+ t_KJ <k7> keypad 7 *<k7>* *t_KJ* *'t_KJ'*
+ t_KK <k8> keypad 8 *<k8>* *t_KK* *'t_KK'*
+ t_KL <k9> keypad 9 *<k9>* *t_KL* *'t_KL'*
+ <Mouse> leader of mouse code *<Mouse>*
+
+Note about t_so and t_mr: When the termcap entry "so" is not present the
+entry for "mr" is used. And vice versa. The same is done for "se" and "me".
+If your terminal supports both inversion and standout mode, you can see two
+different modes. If your terminal supports only one of the modes, both will
+look the same.
+
+The keypad keys, when they are not mapped, behave like the equivalent normal
+key.
+ *xterm-codes*
+There is a special trick to obtain the key codes which currently only works
+for xterm. When |t_RV| is defined and a response is received which indicates
+an xterm with patchlevel 141 or higher, Vim uses special escape sequences to
+request the key codes directly from the xterm. The responses are used to
+adjust the various t_ codes. This avoids the problem that the xterm can
+produce different codes, depending on the mode it is in (8-bit, VT102,
+VT220, etc.). The result is that codes like <xF1> are no longer needed.
+Note: This is only done on startup. If the xterm options are changed after
+Vim has started, the escape sequences may not be recognized any more.
+
+ *termcap-colors*
+Note about colors: The 't_Co' option tells Vim the number of colors available.
+When it is non-zero, the 't_AB' and 't_AF' options are used to set the color.
+If one of these is not available, 't_Sb' and 't_Sf' are used. 't_me' is used
+to reset to the default colors.
+
+ *termcap-title*
+The 't_ts' and 't_fs' options are used to set the window title if the terminal
+allows title setting via sending strings. They are sent before and after the
+title string, respectively. Similar 't_IS' and 't_IE' are used to set the
+icon text. These are Vim-internal extensions of the Unix termcap, so they
+cannot be obtained from an external termcap. However, the builtin termcap
+contains suitable entries for xterm and iris-ansi, so you don't need to set
+them here.
+ *hpterm*
+If inversion or other highlighting does not work correctly, try setting the
+'t_xs' option to a non-empty string. This makes the 't_ce' code be used to
+remove highlighting from a line. This is required for "hpterm". Setting the
+'weirdinvert' option has the same effect as making 't_xs' non-empty, and vice
+versa.
+
+ *scroll-region*
+Some termcaps do not include an entry for 'cs' (scroll region), although the
+terminal does support it. For example: xterm on a Sun. You can use the
+builtin_xterm or define t_cs yourself. For example: >
+ :set t_cs=^V^[[%i%d;%dr
+Where ^V is CTRL-V and ^[ is <Esc>.
+
+The vertical scroll region t_CV is not a standard termcap code. Vim uses it
+internally in the GUI. But it can also be defined for a terminal, if you can
+find one that supports it. The two arguments are the left and right column of
+the region which to restrict the scrolling to. Just like t_cs defines the top
+and bottom lines. Defining t_CV will make scrolling in vertically split
+windows a lot faster. Don't set t_CV when t_da or t_db is set (text isn't
+cleared when scrolling).
+
+Unfortunately it is not possible to deduce from the termcap how cursor
+positioning should be done when using a scrolling region: Relative to the
+beginning of the screen or relative to the beginning of the scrolling region.
+Most terminals use the first method. A known exception is the MS-DOS console
+(pcterm). The 't_CS' option should be set to any string when cursor
+positioning is relative to the start of the scrolling region. It should be
+set to an empty string otherwise. It defaults to "yes" when 'term' is
+"pcterm".
+
+Note for xterm users: The shifted cursor keys normally don't work. You can
+ make them work with the xmodmap command and some mappings in Vim.
+
+ Give these commands in the xterm:
+ xmodmap -e "keysym Up = Up F13"
+ xmodmap -e "keysym Down = Down F16"
+ xmodmap -e "keysym Left = Left F18"
+ xmodmap -e "keysym Right = Right F19"
+
+ And use these mappings in Vim:
+ :map <t_F3> <S-Up>
+ :map! <t_F3> <S-Up>
+ :map <t_F6> <S-Down>
+ :map! <t_F6> <S-Down>
+ :map <t_F8> <S-Left>
+ :map! <t_F8> <S-Left>
+ :map <t_F9> <S-Right>
+ :map! <t_F9> <S-Right>
+
+Instead of, say, <S-Up> you can use any other command that you want to use the
+shift-cursor-up key for. (Note: To help people that have a Sun keyboard with
+left side keys F14 is not used because it is confused with the undo key; F15
+is not used, because it does a window-to-front; F17 is not used, because it
+closes the window. On other systems you can probably use them.)
+
+==============================================================================
+3. Window size *window-size*
+
+[This is about the size of the whole window Vim is using, not a window that is
+created with the ":split" command.]
+
+If you are running Vim on an Amiga and the terminal name is "amiga" or
+"builtin_amiga", the amiga-specific window resizing will be enabled. On Unix
+systems three methods are tried to get the window size:
+
+- an ioctl call (TIOCGSIZE or TIOCGWINSZ, depends on your system)
+- the environment variables "LINES" and "COLUMNS"
+- from the termcap entries "li" and "co"
+
+If everything fails a default size of 24 lines and 80 columns is assumed. If
+a window-resize signal is received the size will be set again. If the window
+size is wrong you can use the 'lines' and 'columns' options to set the
+correct values.
+
+One command can be used to set the screen size:
+
+ *:mod* *:mode* *E359* *E362*
+:mod[e] [mode]
+
+Without argument this only detects the screen size and redraws the screen.
+With MS-DOS it is possible to switch screen mode. [mode] can be one of these
+values:
+ "bw40" 40 columns black&white
+ "c40" 40 columns color
+ "bw80" 80 columns black&white
+ "c80" 80 columns color (most people use this)
+ "mono" 80 columns monochrome
+ "c4350" 43 or 50 lines EGA/VGA mode
+ number mode number to use, depends on your video card
+
+==============================================================================
+4. Slow and fast terminals *slow-fast-terminal*
+ *slow-terminal*
+
+If you have a fast terminal you may like to set the 'ruler' option. The
+cursor position is shown in the status line. If you are using horizontal
+scrolling ('wrap' option off) consider setting 'sidescroll' to a small
+number.
+
+If you have a slow terminal you may want to reset the 'showcmd' option.
+The command characters will not be shown in the status line. If the terminal
+scrolls very slowly, set the 'scrolljump' to 5 or so. If the cursor is moved
+off the screen (e.g., with "j") Vim will scroll 5 lines at a time. Another
+possibility is to reduce the number of lines that Vim uses with the command
+"z{height}<CR>".
+
+If the characters from the terminal are arriving with more than 1 second
+between them you might want to set the 'timeout' and/or 'ttimeout' option.
+See the "Options" chapter |options|.
+
+If your terminal does not support a scrolling region, but it does support
+insert/delete line commands, scrolling with multiple windows may make the
+lines jump up and down. If you don't want this set the 'ttyfast' option.
+This will redraw the window instead of scroll it.
+
+If your terminal scrolls very slowly, but redrawing is not slow, set the
+'ttyscroll' option to a small number, e.g., 3. This will make Vim redraw the
+screen instead of scrolling, when there are more than 3 lines to be scrolled.
+
+If you are using a color terminal that is slow, use this command: >
+ hi NonText cterm=NONE ctermfg=NONE
+This avoids that spaces are sent when they have different attributes. On most
+terminals you can't see this anyway.
+
+If you are using Vim over a slow serial line, you might want to try running
+Vim inside the "screen" program. Screen will optimize the terminal I/O quite
+a bit.
+
+If you are testing termcap options, but you cannot see what is happening,
+you might want to set the 'writedelay' option. When non-zero, one character
+is sent to the terminal at a time (does not work for MS-DOS). This makes the
+screen updating a lot slower, making it possible to see what is happening.
+
+==============================================================================
+5. Using the mouse *mouse-using*
+
+This section is about using the mouse on a terminal or a terminal window. How
+to use the mouse in a GUI window is explained in |gui-mouse|. For scrolling
+with a mouse wheel see |scroll-mouse-wheel|.
+
+Don't forget to enable the mouse with this commands: >
+ :set mouse=a
+Otherwise Vim won't recognize the mouse in all modes (See 'mouse').
+
+Currently the mouse is supported for Unix in an xterm window, in a Linux
+console (with GPM |gpm-mouse|), for MS-DOS and in a Windows console.
+Mouse clicks can be used to position the cursor, select an area and paste.
+
+These characters in the 'mouse' option tell in which situations the mouse will
+be used by Vim:
+ n Normal mode
+ v Visual mode
+ i Insert mode
+ c Command-line mode
+ h all previous modes when in a help file
+ a all previous modes
+ r for |hit-enter| prompt
+ A auto-select in Visual mode
+
+The default for 'mouse' is empty, the mouse is not used. Normally you would
+do: >
+ :set mouse=a
+to start using the mouse (this is equivalent to setting 'mouse' to "nvich").
+If you only want to use the mouse in a few modes or also want to use it for
+the two questions you will have to concatenate the letters for those modes.
+For example: >
+ :set mouse=nv
+Will make the mouse work in Normal mode and Visual mode. >
+ :set mouse=h
+Will make the mouse work in help files only (so you can use "g<LeftMouse>" to
+jump to tags).
+
+Whether the selection that is started with the mouse is in Visual mode or
+Select mode depends on whether "mouse" is included in the 'selectmode'
+option.
+
+In an xterm, with the currently active mode included in the 'mouse' option,
+normal mouse clicks are used by Vim, mouse clicks with the shift or ctrl key
+pressed go to the xterm. With the currently active mode not included in
+'mouse' all mouse clicks go to the xterm.
+
+ *xterm-clipboard*
+In the Athena and Motif GUI versions, when running in a terminal and there is
+access to the X-server (DISPLAY is set), the copy and paste will behave like
+in the GUI. If not, the middle mouse button will insert the unnamed register.
+In that case, here is how you copy and paste a piece of text:
+
+Copy/paste with the mouse and Visual mode ('mouse' option must be set, see
+above):
+1. Press left mouse button on first letter of text, move mouse pointer to last
+ letter of the text and release the button. This will start Visual mode and
+ highlight the selected area.
+2. Press "y" to yank the Visual text in the unnamed register.
+3. Click the left mouse button at the insert position.
+4. Click the middle mouse button.
+
+Shortcut: If the insert position is on the screen at the same time as the
+Visual text, you can do 2, 3 and 4 all in one: Click the middle mouse button
+at the insert position.
+
+Note: When the |-X| command line argument is used, Vim will not connect to the
+X server and copy/paste to the X clipboard (selection) will not work. Use the
+shift key with the mouse buttons to let the xterm do the selection.
+
+ *xterm-command-server*
+When the X-server clipboard is available, the command server described in
+|x11-clientserver| can be enabled with the --servername command line argument.
+
+ *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|.
+
+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
+ letter of the text and release the button.
+2. Use normal Vim commands to put the cursor at the insert position.
+3. Press "a" to start Insert mode.
+4. Click the middle mouse button.
+5. Press ESC to end Insert mode.
+(The same can be done with anything in 'mouse' if you keep the shift key
+pressed while using the mouse.)
+
+Note: if you lose the 8th bit when pasting (special characters are translated
+into other characters), you may have to do "stty cs8 -istrip -parenb" in your
+shell before starting Vim.
+
+Thus in an xterm the shift and ctrl keys cannot be used with the mouse. Mouse
+commands requiring the CTRL modifier can be simulated by typing the "g" key
+before using the mouse:
+ "g<LeftMouse>" is "<C-LeftMouse> (jump to tag under mouse click)
+ "g<RightMouse>" is "<C-RightMouse> ("CTRL-T")
+
+ *mouse-mode-table* *mouse-overview*
+A short overview of what the mouse buttons do, when 'mousemodel' is "extend":
+
+Normal Mode:
+event position selection change action ~
+ cursor window ~
+<LeftMouse> yes end yes
+<C-LeftMouse> yes end yes "CTRL-]" (2)
+<S-LeftMouse> yes no change yes "*" (2) *<S-LeftMouse>*
+<LeftDrag> yes start or extend (1) no *<LeftDrag>*
+<LeftRelease> yes start or extend (1) no
+<MiddleMouse> yes if not active no put
+<MiddleMouse> yes if active no yank and put
+<RightMouse> yes start or extend yes
+<S-RightMouse> yes no change yes "#" (2) *<S-RightMouse>*
+<C-RightMouse> no no change no "CTRL-T"
+<RightDrag> yes extend no *<RightDrag>*
+<RightRelease> yes extend no *<RightRelease>*
+
+Insert or Replace Mode:
+event position selection change action ~
+ cursor window ~
+<LeftMouse> yes (cannot be active) yes
+<C-LeftMouse> yes (cannot be active) yes "CTRL-O^]" (2)
+<S-LeftMouse> yes (cannot be active) yes "CTRL-O*" (2)
+<LeftDrag> yes start or extend (1) no like CTRL-O (1)
+<LeftRelease> yes start or extend (1) no like CTRL-O (1)
+<MiddleMouse> no (cannot be active) no put register
+<RightMouse> yes start or extend yes like CTRL-O
+<S-RightMouse> yes (cannot be active) yes "CTRL-O#" (2)
+<C-RightMouse> no (cannot be active) no "CTRL-O CTRL-T"
+
+In a help window:
+event position selection change action ~
+ cursor window ~
+<2-LeftMouse> yes (cannot be active) no "^]" (jump to help tag)
+
+When 'mousemodel' is "popup", these are different:
+
+Normal Mode:
+event position selection change action ~
+ cursor window ~
+<S-LeftMouse> yes start or extend (1) no
+<RightMouse> no popup menu no
+
+Insert or Replace Mode:
+event position selection change action ~
+ cursor window ~
+<S-LeftMouse> yes start or extend (1) no like CTRL-O (1)
+<RightMouse> no popup menu no
+
+(1) only if mouse pointer moved since press
+(2) only if click is in same buffer
+
+Clicking the left mouse button causes the cursor to be positioned. If the
+click is in another window that window is made the active window. When
+editing the command-line the cursor can only be positioned on the
+command-line. When in Insert mode Vim remains in Insert mode. If 'scrolloff'
+is set, and the cursor is positioned within 'scrolloff' lines from the window
+border, the text is scrolled.
+
+A selection can be started by pressing the left mouse button on the first
+character, moving the mouse to the last character, then releasing the mouse
+button. You will not always see the selection until you release the button,
+only in some versions (GUI, MS-DOS, WIN32) will the dragging be shown
+immediately. Note that you can make the text scroll by moving the mouse at
+least one character in the first/last line in the window when 'scrolloff' is
+non-zero.
+
+In Normal, Visual and Select mode clicking the right mouse button causes the
+Visual area to be extended. When 'mousemodel' is "popup", the left button has
+to be used while keeping the shift key pressed. When clicking in a window
+which is editing another buffer, the Visual or Select mode is stopped.
+
+ *double-click*
+Double, triple and quadruple clicks are supported when the GUI is active,
+for MS-DOS and Win32, and for an xterm (if the gettimeofday() function is
+available). For selecting text, extra clicks extend the selection:
+ click select ~
+ double word or % match *<2-LeftMouse>*
+ triple line *<3-LeftMouse>*
+ quadruple rectangular block *<4-LeftMouse>*
+Exception: In a Help window a double click jumps to help for the word that is
+clicked on.
+A double click on a word selects that word. 'iskeyword' is used to specify
+which characters are included in a word. A double click on a character
+that has a match selects until that match (like using "v%"). If the match is
+an #if/#else/#endif block, the selection becomes linewise.
+For MS-DOS and xterm the time for double clicking can be set with the
+'mousetime' option. For the other systems this time is defined outside of
+Vim.
+An example, for using a double click to jump to the tag under the cursor: >
+ :map <2-LeftMouse> :exe "tag ". expand("<cword>")<CR>
+
+Dragging the mouse with a double click (button-down, button-up, button-down
+and then drag) will result in whole words to be selected. This continues
+until the button is released, at which point the selection is per character
+again.
+
+ *gpm-mouse*
+The GPM mouse is only supported when the |+mouse_gpm| feature was enabled at
+compile time. The GPM mouse driver (Linux console) does not support quadruple
+clicks.
+
+In Insert mode, when a selection is started, Vim goes into Normal mode
+temporarily. When Visual or Select mode ends, it returns to Insert mode.
+This is like using CTRL-O in Insert mode. Select mode is used when the
+'selectmode' option contains "mouse".
+
+ *drag-status-line*
+When working with several windows, the size of the windows can be changed by
+dragging the status line with the mouse. Point the mouse at a status line,
+press the left button, move the mouse to the new position of the status line,
+release the button. Just clicking the mouse in a status line makes that window
+the current window, without moving the cursor. If by selecting a window it
+will change position or size, the dragging of the status line will look
+confusing, but it will work (just try it).
+
+ *<MiddleRelease>* *<MiddleDrag>*
+Mouse clicks can be mapped. The codes for mouse clicks are:
+ code mouse button normal action ~
+ <LeftMouse> left pressed set cursor position
+ <LeftDrag> left moved while pressed extend selection
+ <LeftRelease> left released set selection end
+ <MiddleMouse> middle pressed paste text at cursor position
+ <MiddleDrag> middle moved while pressed -
+ <MiddleRelease> middle released -
+ <RightMouse> right pressed extend selection
+ <RightDrag> right moved while pressed extend selection
+ <RightRelease> right released set selection end
+ <X1Mouse> X1 button pressed - *X1Mouse*
+ <X1Drag> X1 moved while pressed - *X1Drag*
+ <X1Release> X1 button release - *X1Release*
+ <X2Mouse> X2 button pressed - *X2Mouse*
+ <X2Drag> X2 moved while pressed - *X2Drag*
+ <X2Release> X2 button release - *X2Release*
+
+The X1 and X2 buttons refer to the extra buttons found on some mice. The
+'Microsoft Explorer' mouse has these buttons available to the right thumb.
+Currently X1 and X2 only work on Win32 environments.
+
+Examples: >
+ :noremap <MiddleMouse> <LeftMouse><MiddleMouse>
+Paste at the position of the middle mouse button click (otherwise the paste
+would be done at the cursor position). >
+
+ :noremap <LeftRelease> <LeftRelease>y
+Immediately yank the selection, when using Visual mode.
+
+Note the use of ":noremap" instead of "map" to avoid a recursive mapping.
+>
+ :map <X1Mouse> <C-O>
+ :map <X2Mouse> <C-I>
+Map the X1 and X2 buttons to go forwards and backwards in the jump list, see
+|CTRL-O| and |CTRL-I|.
+
+ *mouse-swap-buttons*
+To swap the meaning of the left and right mouse buttons: >
+ :noremap <LeftMouse> <RightMouse>
+ :noremap <LeftDrag> <RightDrag>
+ :noremap <LeftRelease> <RightRelease>
+ :noremap <RightMouse> <LeftMouse>
+ :noremap <RightDrag> <LeftDrag>
+ :noremap <RightRelease> <LeftRelease>
+ :noremap g<LeftMouse> <C-RightMouse>
+ :noremap g<RightMouse> <C-LeftMouse>
+ :noremap! <LeftMouse> <RightMouse>
+ :noremap! <LeftDrag> <RightDrag>
+ :noremap! <LeftRelease> <RightRelease>
+ :noremap! <RightMouse> <LeftMouse>
+ :noremap! <RightDrag> <LeftDrag>
+ :noremap! <RightRelease> <LeftRelease>
+<
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt
new file mode 100644
index 000000000..70747797e
--- /dev/null
+++ b/runtime/doc/tips.txt
@@ -0,0 +1,445 @@
+*tips.txt* For Vim version 7.0aa. Last change: 2004 Feb 17
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Tips and ideas for using Vim *tips*
+
+Don't forget to browse the user manual, it also contains lots of useful tips
+|usr_toc.txt|.
+
+Editing C programs |C-editing|
+Finding where identifiers are used |ident-search|
+Switching screens in an xterm |xterm-screens|
+Scrolling in Insert mode |scroll-insert|
+Smooth scrolling |scroll-smooth|
+Correcting common typing mistakes |type-mistakes|
+Counting words, lines, etc. |count-items|
+Restoring the cursor position |restore-position|
+Renaming files |rename-files|
+Speeding up external commands |speed-up|
+Useful mappings |useful-mappings|
+Compressing the help files |gzip-helpfile|
+Hex editing |hex-editing|
+Executing shell commands in a window |shell-window|
+Using <> notation in autocommands |autocmd-<>|
+
+==============================================================================
+Editing C programs *C-editing*
+
+There are quite a few features in Vim to help you edit C program files. Here
+is an overview with tags to jump to:
+
+|usr_29.txt| Moving through programs chapter in the user manual.
+|usr_30.txt| Editing programs chapter in the user manual.
+|C-indenting| Automatically set the indent of a line while typing
+ text.
+|=| Re-indent a few lines.
+|format-comments| Format comments.
+
+|:checkpath| Show all recursively included files.
+|[i| Search for identifier under cursor in current and
+ included files.
+|[_CTRL-I| Jump to match for "[i"
+|[I| List all lines in current and included files where
+ identifier under the cursor matches.
+|[d| Search for define under cursor in current and included
+ files.
+
+|CTRL-]| Jump to tag under cursor (e.g., definition of a
+ function).
+|CTRL-T| Jump back to before a CTRL-] command.
+|:tselect| Select one tag out of a list of matching tags.
+
+|gd| Go to Declaration of local variable under cursor.
+|gD| Go to Declaration of global variable under cursor.
+
+|gf| Go to file name under the cursor.
+
+|%| Go to matching (), {}, [], /* */, #if, #else, #endif.
+|[/| Go to previous start of comment.
+|]/| Go to next end of comment.
+|[#| Go back to unclosed #if, #ifdef, or #else.
+|]#| Go forward to unclosed #else or #endif.
+|[(| Go back to unclosed '('
+|])| Go forward to unclosed ')'
+|[{| Go back to unclosed '{'
+|]}| Go forward to unclosed '}'
+
+|v_ab| Select "a block" from "[(" to "])", including braces
+|v_ib| Select "inner block" from "[(" to "])"
+|v_aB| Select "a block" from "[{" to "]}", including brackets
+|v_iB| Select "inner block" from "[{" to "]}"
+
+==============================================================================
+Finding where identifiers are used *ident-search*
+
+You probably already know that |tags| can be used to jump to the place where a
+function or variable is defined. But sometimes you wish you could jump to all
+the places where a function or variable is being used. This is possible in
+two ways:
+1. Using the |:grep| command. This should work on most Unix systems,
+ but can be slow (it reads all files) and only searches in one directory.
+2. Using ID utils. This is fast and works in multiple directories. It uses a
+ database to store locations. You will need some additional programs for
+ this to work. And you need to keep the database up to date.
+
+Using the GNU id-tools:
+
+What you need:
+- The GNU id-tools installed (mkid is needed to create ID and lid is needed to
+ use the macros).
+- An identifier database file called "ID" in the current directory. You can
+ create it with the shell command "mkid file1 file2 ..".
+
+Put this in your .vimrc: >
+ map _u :call ID_search()<Bar>execute "/\\<" . g:word . "\\>"<CR>
+ map _n :n<Bar>execute "/\\<" . g:word . "\\>"<CR>
+
+ function! ID_search()
+ let g:word = expand("<cword>")
+ let x = system("lid --key=none ". g:word)
+ let x = substitute(x, "\n", " ", "g")
+ execute "next " . x
+ endfun
+
+To use it, place the cursor on a word, type "_u" and vim will load the file
+that contains the word. Search for the next occurrence of the word in the
+same file with "n". Go to the next file with "_n".
+
+This has been tested with id-utils-3.2 (which is the name of the id-tools
+archive file on your closest gnu-ftp-mirror).
+
+[the idea for this comes from Andreas Kutschera]
+
+==============================================================================
+Switching screens in an xterm *xterm-screens* *xterm-save-screen*
+
+(From comp.editors, by Juergen Weigert, in reply to a question)
+
+:> Another question is that after exiting vim, the screen is left as it
+:> was, i.e. the contents of the file I was viewing (editing) was left on
+:> the screen. The output from my previous like "ls" were lost,
+:> ie. no longer in the scrolling buffer. I know that there is a way to
+:> restore the screen after exiting vim or other vi like editors,
+:> I just don't know how. Helps are appreciated. Thanks.
+:
+:I imagine someone else can answer this. I assume though that vim and vi do
+:the same thing as each other for a given xterm setup.
+
+They not necessarily do the same thing, as this may be a termcap vs.
+terminfo problem. You should be aware that there are two databases for
+describing attributes of a particular type of terminal: termcap and
+terminfo. This can cause differences when the entries differ AND when of
+the programs in question one uses terminfo and the other uses termcap
+(also see |+terminfo|).
+
+In your particular problem, you are looking for the control sequences
+^[[?47h and ^[[?47l. These switch between xterms alternate and main screen
+buffer. As a quick workaround a command sequence like >
+ echo -n "^[[?47h"; vim ... ; echo -n "^[[?47l"
+may do what you want. (My notation ^[ means the ESC character, further down
+you'll see that the databases use \E instead).
+
+On startup, vim echoes the value of the termcap variable ti (terminfo:
+smcup) to the terminal. When exiting, it echoes te (terminfo: rmcup). Thus
+these two variables are the correct place where the above mentioned control
+sequences should go.
+
+Compare your xterm termcap entry (found in /etc/termcap) with your xterm
+terminfo entry (retrieved with /usr/5bin/infocmp -C xterm). Both should
+contain entries similar to: >
+ :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:
+
+PS: If you find any difference, someone (your sysadmin?) should better check
+ the complete termcap and terminfo database for consistency.
+
+NOTE 1: If you recompile Vim with FEAT_XTERM_SAVE defined in feature.h, the
+builtin xterm will include the mentioned "te" and "ti" entries.
+
+NOTE 2: If you want to disable the screen switching, and you don't want to
+change your termcap, you can add these lines to your .vimrc: >
+ :set t_ti= t_te=
+
+==============================================================================
+Scrolling in Insert mode *scroll-insert*
+
+If you are in insert mode and you want to see something that is just off the
+screen, you can use CTRL-X CTRL-E and CTRL-X CTRL-Y to scroll the screen.
+ |i_CTRL-X_CTRL-E|
+
+To make this easier, you could use these mappings: >
+ :inoremap <C-E> <C-X><C-E>
+ :inoremap <C-Y> <C-X><C-Y>
+(Type this literally, make sure the '<' flag is not in 'cpoptions').
+You then lose the ability to copy text from the line above/below the cursor
+|i_CTRL-E|.
+
+Also consider setting 'scrolloff' to a larger value, so that you can always see
+some context around the cursor. If 'scrolloff' is bigger than half the window
+height, the cursor will always be in the middle and the text is scrolled when
+the cursor is moved up/down.
+
+==============================================================================
+Smooth scrolling *scroll-smooth*
+
+If you like the scrolling to go a bit smoother, you can use these mappings: >
+ :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
+ :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
+
+(Type this literally, make sure the '<' flag is not in 'cpoptions').
+
+==============================================================================
+Correcting common typing mistakes *type-mistakes*
+
+When there are a few words that you keep on typing in the wrong way, make
+abbreviations that correct them. For example: >
+ :ab teh the
+ :ab fro for
+
+==============================================================================
+Counting words, lines, etc. *count-items*
+
+To count how often any pattern occurs in a buffer, set 'report' to 0, and use
+the substitute command to replace the pattern with itself. The reported
+number of substitutions is the number of items. Examples: >
+
+ :set report=0
+ :%s/./&/g characters
+ :%s/\i\+/&/g words
+ :%s/^ lines
+ :%s/the/&/g "the" anywhere
+ :%s/\<the\>/&/g "the" as a word
+
+You might want to reset 'hlsearch' or do ":nohlsearch".
+
+This does not work if the 'modifiable' option is off. An alternative is using
+|v_g_CTRL-G| in Visual mode.
+
+ *count-bytes*
+If you want to count bytes, you can use this:
+
+ Visually select the characters (block is also possible)
+ Use "y" to yank the characters
+ Use the strlen() function: >
+ :echo strlen(@")
+A line break is counted for one byte.
+
+==============================================================================
+Restoring the cursor position *restore-position*
+
+Sometimes you want to write a mapping that makes a change somewhere in the
+file and restores the cursor position, without scrolling the text. For
+example, to change the date mark in a file: >
+ :map <F2> msHmtgg/Last [cC]hange:\s*/e+1<CR>"_D"=strftime("%Y %b %d")<CR>p'tzt`s
+
+Breaking up saving the position:
+ ms store cursor position in the 's' mark
+ H go to the first line in the window
+ mt store this position in the 't' mark
+
+Breaking up restoring the position:
+ 't go to the line previously at the top of the window
+ zt scroll to move this line to the top of the window
+ `s jump to the original position of the cursor
+
+==============================================================================
+Renaming files *rename-files*
+
+Say I have a directory with the following files in them (directory picked at
+random :-):
+
+buffer.c
+charset.c
+digraph.c
+...
+
+and I want to rename *.c *.bla. I'd do it like this: >
+
+ $ vim
+ :r! ls *.c
+ :%s/\(.*\).c/mv & \1.bla
+ :w !sh
+ :q!
+
+==============================================================================
+Speeding up external commands *speed-up*
+
+In some situations, execution of an external command can be very slow. This
+can also slow down wildcard expansion on Unix. Here are a few suggestions to
+increase the speed.
+
+If your .cshrc (or other file, depending on the shell used) is very long, you
+should separate it into a section for interactive use and a section for
+non-interactive use (often called secondary shells). When you execute a
+command from Vim like ":!ls", you do not need the interactive things (for
+example, setting the prompt). Put the stuff that is not needed after these
+lines: >
+
+ if ($?prompt == 0) then
+ exit 0
+ endif
+
+Another way is to include the "-f" flag in the 'shell' option, e.g.: >
+
+ :set shell=csh\ -f
+
+(the backslash is needed to include the space in the option).
+This will make csh completely skip the use of the .cshrc file. This may cause
+some things to stop working though.
+
+==============================================================================
+Useful mappings *useful-mappings*
+
+Here are a few mappings that some people like to use.
+
+ *map-backtick* >
+ :map ' `
+Make the single quote work like a backtick. Puts the cursor on the column of
+a mark, instead of going to the first non-blank character in the line.
+
+ *emacs-keys*
+For Emacs-style editing on the command-line: >
+ " start of line
+ :cnoremap <C-A> <Home>
+ " back one character
+ :cnoremap <C-B> <Left>
+ " delete character under cursor
+ :cnoremap <C-D> <Del>
+ " end of line
+ :cnoremap <C-E> <End>
+ " forward one character
+ :cnoremap <C-F> <Right>
+ " recall newer command-line
+ :cnoremap <C-N> <Down>
+ " recall previous (older) command-line
+ :cnoremap <C-P> <Up>
+ " back one word
+ :cnoremap <Esc><C-B> <S-Left>
+ " forward one word
+ :cnoremap <Esc><C-F> <S-Right>
+
+NOTE: This requires that the '<' flag is excluded from 'cpoptions'. |<>|
+
+ *format-bullet-list*
+This mapping will format any bullet list. It requires that there is an empty
+line above and below each list entry. The expression commands are used to
+be able to give comments to the parts of the mapping. >
+
+ :let m = ":map _f :set ai<CR>" " need 'autoindent' set
+ :let m = m . "{O<Esc>" " add empty line above item
+ :let m = m . "}{)^W" " move to text after bullet
+ :let m = m . "i <CR> <Esc>" " add space for indent
+ :let m = m . "gq}" " format text after the bullet
+ :let m = m . "{dd" " remove the empty line
+ :let m = m . "5lDJ" " put text after bullet
+ :execute m |" define the mapping
+
+(<> notation |<>|. Note that this is all typed literally. ^W is "^" "W", not
+CTRL-W. You can copy/paste this into Vim if '<' is not included in
+'cpoptions')
+
+Note that the last comment starts with |", because the ":execute" command
+doesn't accept a comment directly.
+
+You also need to set 'textwidth' to a non-zero value, e.g., >
+ :set tw=70
+
+A mapping that does about the same, but takes the indent for the list from the
+first line (Note: this mapping is a single long line with a lot of spaces): >
+ :map _f :set ai<CR>}{a <Esc>WWmmkD`mi<CR><Esc>kkddpJgq}'mJO<Esc>j
+<
+ *collapse*
+These two mappings reduce a sequence of empty (;b) or blank (;n) lines into a
+single line >
+ :map ;b GoZ<Esc>:g/^$/.,/./-j<CR>Gdd
+ :map ;n GoZ<Esc>:g/^[ <Tab>]*$/.,/[^ <Tab>]/-j<CR>Gdd
+
+==============================================================================
+Compressing the help files *gzip-helpfile*
+
+For those of you who are really short on disk space, you can compress the help
+files and still be able to view them with Vim. This makes accessing the help
+files a bit slower and requires the "gzip" program.
+
+(1) Compress all the help files: "gzip doc/*.txt".
+
+(2) Edit "doc/tags" and change the ".txt" to ".txt.gz": >
+ :%s=\(\t.*\.txt\)\t=\1.gz\t=
+
+(3) Add this line to your vimrc: >
+ set helpfile={dirname}/help.txt.gz
+
+Where {dirname} is the directory where the help files are. The |gzip| plugin
+will take care of decompressing the files.
+You must make sure that $VIMRUNTIME is set to where the other Vim files are,
+when they are not in the same location as the compressed "doc" directory. See
+|$VIMRUNTIME|.
+
+==============================================================================
+Executing shell commands in a window *shell-window*
+
+There have been questions for the possibility to execute a shell in a window
+inside Vim. The answer: you can't! Including this would add a lot of code to
+Vim, which is a good reason not to do this. After all, Vim is an editor, it
+is not supposed to do non-editing tasks. However, to get something like this,
+you might try splitting your terminal screen or display window with the
+"splitvt" program. You can probably find it on some ftp server. The person
+that knows more about this is Sam Lantinga <slouken@cs.ucdavis.edu>.
+An alternative is the "window" command, found on BSD Unix systems, which
+supports multiple overlapped windows. Or the "screen" program, found at
+www.uni-erlangen.de, which supports a stack of windows.
+
+==============================================================================
+Hex editing *hex-editing* *using-xxd*
+
+See section |23.4| of the user manual.
+
+If one has a particular extension that one uses for binary files (such as exe,
+bin, etc), you may find it helpful to automate the process with the following
+bit of autocmds for your <.vimrc>. Change that "*.bin" to whatever
+comma-separated list of extension(s) you find yourself wanting to edit: >
+
+ " vim -b : edit binary using xxd-format!
+ augroup Binary
+ au!
+ au BufReadPre *.bin let &bin=1
+ au BufReadPost *.bin if &bin | %!xxd
+ au BufReadPost *.bin set ft=xxd | endif
+ au BufWritePre *.bin if &bin | %!xxd -r
+ au BufWritePre *.bin endif
+ au BufWritePost *.bin if &bin | %!xxd
+ au BufWritePost *.bin set nomod | endif
+ augroup END
+
+==============================================================================
+Using <> notation in autocommands *autocmd-<>*
+
+The <> notation is not recognized in the argument of an :autocmd. To avoid
+having to use special characters, you could use a self-destroying mapping to
+get the <> notation and then call the mapping from the autocmd. Example:
+
+ *map-self-destroy* >
+ " This is for automatically adding the name of the file to the menu list.
+ " It uses a self-destroying mapping!
+ " 1. use a line in the buffer to convert the 'dots' in the file name to \.
+ " 2. store that in register '"'
+ " 3. add that name to the Buffers menu list
+ " WARNING: this does have some side effects, like overwriting the
+ " current register contents and removing any mapping for the "i" command.
+ "
+ autocmd BufNewFile,BufReadPre * nmap i :nunmap i<CR>O<C-R>%<Esc>:.g/\./s/\./\\./g<CR>0"9y$u:menu Buffers.<C-R>9 :buffer <C-R>%<C-V><CR><CR>
+ autocmd BufNewFile,BufReadPre * normal i
+
+Another method, perhaps better, is to use the ":execute" command. In the
+string you can use the <> notation by preceding it with a backslash. Don't
+forget to double the number of existing backslashes and put a backslash before
+'"'.
+>
+ autocmd BufNewFile,BufReadPre * exe "normal O\<C-R>%\<Esc>:.g/\\./s/\\./\\\\./g\<CR>0\"9y$u:menu Buffers.\<C-R>9 :buffer \<C-R>%\<C-V>\<CR>\<CR>"
+
+For a real buffer menu, user functions should be used (see |:function|), but
+then the <> notation isn't used, which defeats using it as an example here.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
new file mode 100644
index 000000000..c8b9576f6
--- /dev/null
+++ b/runtime/doc/todo.txt
@@ -0,0 +1,3441 @@
+*todo.txt* For Vim version 7.0aa. Last change: 2004 Jun 13
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ TODO list for Vim *todo*
+
+This is a veeeery long list of known bugs, current work and desired
+improvements. To make it a little bit accessible, the items are grouped by
+subject. In the first column of the line a classification is used to be able
+to look for "the next thing to do":
+
+Priority classification:
+9 next point release
+8 next release
+7 as soon as possible
+6 soon
+5 should be included
+4 nice to have
+3 consider including
+2 maybe not
+1 probably not
+- unclassified
+
+ *votes-for-changes*
+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|.
+
+ *known-bugs*
+-------------------- Known bugs and current work -----------------------
+
+GTK2: font dialog uses font size zero when 'guifont' is "Courier". Patch from
+Yasuhiro Matsumoto, 2004 June 8.
+
+Python indent: # aser: still adds extra indent.
+
+
+For version 7.0:
+- Include many PATCHES:
+ - Include the kvim patch. http://freenux.org/vim/ (Mickael Marchand)
+ Do not add Qtopia yet, it doesn't work very well.
+- new DATA TYPES: lists, dictionaries and function references.
+ Add type checking? See ~/vim/ideas.txt.
+- Add SPELLCHECKER, with easy to add support for many languages.
+- REFACTORING: The main() function is very long. Move parts to separate
+ functions, especially loops. Ideas from Walter Briscoe (2003 Apr 3, 2004
+ Feb 9).
+- Store messages to allow SCROLLING BACK for all commands. And other "less"
+ like commands.
+- "INTELLISENSE". First cleanup the Insert-mode completion.
+ http://www.vim.org/scripts/script.php?script_id=747
+ http://sourceforge.net/projects/insenvim
+- PERSISTENT UNDO: store undo in a file.
+ Support multiple threads. Show the list of changes in a window to be able
+ to select a version.
+7 SWAP FILE CHANGE: When a dos format file was edited with ":e ++ff=unix",
+ Vim is killed and trying to recover the file, 'ff' will be dos. Same for
+ non-default fileencoding. (Miroslaw Dobrzanski-Neumann, Jul 17)
+ Should store the values in block 0 of the swap file, but that is an
+ incompatible change.
+7 Support WINDOW TABS. Works like several pages, each with their own
+ split windows. Patch for GTK 1.2 from Christian Michon, 2004 Jan 6.
+ Also for the console!
+- EMBEDDING: Make it possible to run Vim inside a window of another program.
+ For Xwindows this can be done with XReparentWindow().
+ For GTK Neil Bird has a patch to use Vim like a widget.
+- Add COLUMN NUMBERS to ":" commands ":line1,line2[col1,col2]cmd". Block
+ can be selected with CTRL-V. Allow '$' (end of line) for col2.
+- Add DEBUGGER INTERFACE. Implementation for gdb by Xavier de Gaye,
+ assisted by Mikolaj Machowski. Should work like an IDE. Try to keep it
+ generic. Also found here: http://skawina.eu.org/mikolaj/vimgdb
+ To be able to start the debugger from inside Vim: For GUI run a program
+ with a netbeans connection; for console: start a program that splits the
+ terminal, runs the debugger in one window and reconnect Vim I/O to the
+ other window.
+ Wishes for NetBeans commands:
+ - make it possible to have 'defineAnnoType' also handle terminal colors.
+ - send 'balloonText' events for the cursor position (using CursorHold ?)
+ in terminal mode.
+- STICKY CURSOR: Add a way of scrolling that leaves the cursor where it is.
+ Especially when using the scrollbar. Typing a cursor-movement command
+ scrolls back to where the cursor is.
+
+
+Vi incompatibility:
+8 With undo/redo only marks in the changed lines should be changed. Other
+ marks should be kept. Vi keeps each mark at the same text, even when it
+ is deleted or restored. (Webb)
+ Also: A mark is lost after: make change, undo, redo and undo.
+ Example: "{d''" then "u" then "d''": deletes an extra line, because the ''
+ position is one line down. (Veselinovic)
+8 ":change" in a single-line file adds an empty line. When the file used to
+ be longer a "~" line is displayed, but there really is an empty line.
+ (Haakon Riiser, 2003 Dec 3 and Dec 16)
+8 ":append" and ":insert" in an empty file add an extra empty line. (Haakon
+ Riiser, 2003 Dec 3) Test for ML_EMPTY.
+8 When stdin is not a tty, and Vim reads commands from it, an error should
+ make Vim exit.
+7 Unix Vim (not gvim): Typing CTRL-C in Ex mode should finish the line
+ (currently you can continue typing, but it's truncated later anyway).
+ Requires a way to make CTRL-C interrupt select() when in cooked input.
+8 When loading a file in the .exrc, Vi loads the argument anyway. Vim skips
+ loading the argument if there is a file already. When no file argument
+ given, Vi starts with an empty buffer, Vim keeps the loaded file. (Bearded)
+6 In Insert mode, when using <BS> or <Del>, don't wipe out the text, but
+ only move back the cursor. Behaves like '$' in 'cpoptions'. Use a flag
+ in 'cpoptions' to switch this on/off.
+8 When editing a file which is a symbolic link, and then opening another
+ symbolic link on the same file, Vim uses the name of the first one.
+ Adjust the file name in the buffer to the last one used? Use several file
+ names in one buffer???
+ Also: When first editing file "test", which is symlink to "test2", and
+ then editing "test2", you end up editing buffer "test" again. It's not
+ logical that the name that was first used sticks with the buffer.
+7 The ":undo" command works differently in Ex mode. Edit a file, make some
+ changes, "Q", "undo" and _all_ changes are undone, like the ":visual"
+ command was one command.
+7 The ":map" command output overwrites the command. Perhaps it should keep
+ the ":map" when it's used without arguments?
+7 CTRL-L is not the end of a section? It is for Posix! Make it an option.
+7 Implement 'prompt' option. Init to off when stdin is not a tty.
+7 CTRL-T in Insert mode inserts 'shiftwidth' of spaces at the cursor. Add a
+ flag in 'cpoptions' for this.
+7 Add a way to send an email for a crashed edit session. Create a file when
+ making changes (containing name of the swap file), delete it when writing
+ the file. Supply a program that can check for crashed sessions (either
+ all, for a system startup, or for one user, for in a .login file).
+7 Vi doesn't do autoindenting when input is not from a tty (in Ex mode).
+7 "z3<CR>" should still use the whole window, but only redisplay 3 lines.
+7 ":tag xx" should move the cursor to the first non-blank. Or should it go
+ to the match with the tag? Option?
+7 Implement 'autoprint'/'ap' option.
+7 Add flag in 'cpoptions' that makes <BS> after a count work like <Del>
+ (Sayre).
+7 Add flag in 'cpoptions' that makes operator (yank, filter) not move the
+ cursor, at least when cancelled. (default Vi compatible).
+7 Make "5dd" on last-but-one-line not delete anything (Vi compatible).
+ Add flag in 'cpoptions' for this. When not present, "2dd" in the last
+ line should delete the last line. Patch from greenx 2002 Apr 11.
+7 This Vi-trick doesn't work: "Q" to go to Ex mode, then "g/pattern/visual".
+ In Vi you can edit in visual mode, and when doing "Q" you jump to the next
+ match. Nvi can do it too.
+7 Support '\' for line continuation in Ex mode for these commands: (Luebking)
+ g/./a\ g/pattern1/ s/pattern2/rep1\\
+ line 1\ line 2\\
+ line 2\ line 3\\
+ . line4/
+6 ":e /tmp/$tty" doesn't work. ":e $uid" does. Is $tty not set because of
+ the way the shell is started?
+6 Vi compatibility (optional): make "ia<CR><ESC>10." do the same strange
+ thing. (only repeat insert for the first line).
+
+
+GTK+ 1 (OK in GTK 2):
+8 When menus are disabled, 'm' removed from 'guioptions', Alt-F still pops
+ up the File menu. Cannot reproduce this: gives a warning for a NULL
+ pointer if the menu was never displayed.
+8 When using "gvim -geom 40x30" or setting 'columns' in .gvimrc or with a
+ GUIEnter autocommand, the width is still set to fit the toolbar. Also
+ happens when changing the font. How to avoid that the toolbar specifies
+ the minimal window width?
+8 When using a theme with different scrollbars (gtkstep), the scrollbars can
+ be too narrow. (Drazen Kacar)
+8 Font "7x14" has a bold version "7x14bold". Try to find the bold font by
+ appending "bold" when there are not 14 dashes.
+
+GTK+ GUI known bugs:
+8 GTK 2: Combining UTF-8 characters not displayed properly in menus (Mikolaj
+ Machowski) They are displayed as separate characters. Problem in
+ creating a label?
+9 Can't paste a Visual selection from GTK-gvim to vim in xterm or Motif gvim
+ when it is longer than 4000 characters. Works OK from gvim to gvim and
+ vim to vim. Pasting through xterm (using the shift key) also works.
+ It starts working after GTK gvim loses the selection and gains it again.
+7 DND doesn't work with KDE (also with GTK 1).
+
+
+Win32 GUI known bugs:
+8 On Windows 98 the unicows library is needed to support functions with UCS2
+ file names. Can we load unicows.dll dynamically?
+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
+8 In eval.c, io.h is included when MSWIN32 is defined. Shouldn't this be
+ WIN32? Or can including io.h be moved to vim.h? (Dan Sharp)
+7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
+ pixels remains when typing spaces in front of a "D" ('guifont' set to
+ "lucida_console:h8").
+6 Win32 GUI: With "-u NONE -U NONE" and doing "CTRL-W v" "CTRL-W o", the ":"
+ of ":only" is highlighted like the cursor. (Lipelis)
+7 When font smoothing is enabled, redrawing can become very slow. The reason
+ appears to be drawing with a transparent background. Would it be possible
+ to use an opaque background in most places?
+8 Use another default for 'termencoding': the active codepage. Means that
+ when 'encoding' is changed typing characters still works properly.
+ Alternative: use the Unicode functions to obtain typed characters.
+8 Win32: Multi-byte characters are not displayed, even though the same font
+ in Notepad can display them. (Srinath Avadhanula) Try with the
+ UTF-8-demo.txt page with Andale Mono.
+7 The cursor color indicating IME mode doesn't work properly. (Shizhu Pan,
+ 2004 May 9)
+8 Win32: When clicking on the gvim title bar, which gives it focus, produces
+ a file-changed dialog, after clicking on a button in that dialog the gvim
+ window follows the mouse. The button-up event is lost. Only with
+ MS-Windows 98?
+ Try this: ":set sw ts", get enter-prompt, then change the file in a
+ console, go back to Vim and click "reload" in the dialog for the changed
+ file: Window moves with the cursor!
+ Put focus event in input buffer and let generic Vim code handle it?
+8 When activating the Vim window with mouse click, don't move cursor to
+ mouse position. Catch WM_MOUSEACTIVATE. (Luevelsmeyer)
+9 The print dialog uses a font which doesn't display multi-byte messages.
+ Include patch from Vipin Aravind? Update from Yasuhiro Matsumoto.
+8 Win32: When mouse is hidden and in the toolbar, moving it won't make it
+ appear. (Sami Salonen)
+8 Windows NT: writing to aux.* makes Vim hang. (Acevedo)
+8 Win32 GUI: With maximized window, ":set go-=r" doesn't use the space that
+ comes available. (Poucet) It works OK on Win 98 but doesn't work on Win
+ NT 4.0. Leaves a grey area where the scrollbar was. ":set go+=r" also
+ doesn't work properly.
+8 When Vim is minimized and when maximizing it a file-changed dialog pops
+ up, Vim isn't maximized. It should be done before the dialog, so that it
+ appears in the right position. (Webb)
+9 When selecting at the more-prompt or hit-enter-prompt, the right mouse
+ button doesn't give popup menu.
+ At the hit-enter prompt CTRL-Y doesn't work to copy the modeless
+ selection.
+ On the command line, don't get a popup menu for the right mouse button.
+ Let the middle button paste selected text (not the clipboard but the
+ non-Visual selection)? Otherwise CTRL-Y has to be used to copy the text.
+8 When 'grepprg' doesn't execute, the error only flashes by, the
+ user can hardly see what is wrong. (Moore)
+ Could use vimrun with an "-nowait" argument to only wait when an error
+ occurs, but "command.com" doesn't return an error code.
+8 When the 'shell' cannot be executed, should give an appropriate error msg.
+ Esp. for a filter command, currently it only complains the file could not
+ be read.
+8 MessageBox used for error messages can be too big. There is no way to
+ scroll it, or even hit the OK button (but you can hit return).
+ Use a scrollable window.
+7 Add an option to add one pixel column to the character width? Lucida
+ Console italic is wider than the normal font ("d" overlaps with next char).
+ Opposite of 'linespace': 'columnspace'.
+7 At the hit-enter prompt scrolling now no longer works. Need to use the
+ keyboard to get around this. Pretend <CR> was hit when the user tries to
+ scroll? Need to be able to get out of hit-enter prompt with the mouse
+ anyway.
+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
+ CTRL-ALT is used by Windows as AltGr?
+8 CTRL-- doesn't work for AZERTY, because it's CTRL-[ for QWERTY. How do we
+ know which keyboard is being used?
+7 When scrolling, and a background color is dithered, the dither pattern
+ doesn't always join correctly between the scrolled area and the new drawn
+ area (Koloseike).
+8 When gui_init_font() is called with "*", p_guifont is freed while it might
+ still be used somewhere. This is too tricky, do the font selection first,
+ then set the new font by name (requires putting all logfont parameters in
+ the font name).
+
+
+Athena and Motif:
+9 Can configure be changed to disable netbeans if the Xpm library is
+ required and it's missing?
+8 When using the resource "Vim*borderwidth 2" the widgets are positioned
+ wrong.
+9 XIM is disabled by default for SGI/IRIX. Fix XIM so that 'imdisable' can
+ be off by default.
+9 XIM doesn't work properly for Athena/Motif. (Yasuhiro Matsumoto) For now,
+ keep XIM active at all times when the input method has the preediting
+ flag.
+8 X11: A menu that contains an umlaut is truncated at that character.
+ Happens when the locale is "C", which uses ASCII instead of IS0-8859-1.
+ Is there a way to use latin1 by default? Gnome_init() seems to do this.
+8 Perhaps use fontsets for everything?
+6 When starting in English and switching the language to Japanese, setting
+ the locale with ":lang", 'guifontset' and "hi menu font=", deleting all
+ menus and setting them again, the menus don't use the new font. Most of
+ the tooltips work though...
+7 Motif: when using a file selection dialog, the specified file name is not
+ always used (when specifying a filter or another directory).
+8 When 'encoding' is different from the current locale (e.g., utf-8) the
+ menu strings don't work. Requires conversion from 'encoding' to the
+ current locale. Workaround: set 'langmenu'.
+
+
+Athena GUI:
+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.
+7 The file selector is not resizable. With a big font it is difficult to
+ read long file names. (Schroeder)
+4 Re-write the widget attachments and code so that we will not have to go
+ through and calculate the absolute position of every widget every time the
+ window is refreshed/changes size. This will help the "flashing-widgets"
+ problem during a refresh.
+5 When starting gvim with all the default colors and then typing
+ ":hi Menu guibg=cyan", the menus change color but the background of the
+ pullright pixmap doesn't change colors.
+ If you type ":hi Menu guibg=cyan font=anyfont", then the pixmap changes
+ colors as it should.
+ Allocating a new pixmap and setting the resource doesn't change the
+ pullright pixmap's colors. Why? Possible Athena bug?
+
+
+Motif GUI:
+8 Popup menu ordering is wrong.
+8 Accelerators don't work in a dialog. Include patch from Martin Dalecki
+ (Jan 3, tested by David Harrison). Should work with Alt-o then.
+7 Use accelerators for the Motif file selection dialog. Patch from Martin
+ Dalecki 2002 Jan 11.
+7 Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
+ David Harrison says it's OK (it exists in Motif 1.2).
+8 The texts in the find/replace dialog don't use the right font.
+8 Lesstif: When deleting a menu that's torn off, the torn off menu becomes
+ very small instead of disappearing. When closing it, Vim crashes.
+ (Phillipps)
+
+
+GUI:
+9 On Solaris, creating the popup menu causes the right mouse button no
+ longer to work for extending the selection. (Halevy)
+9 When running an external program, it can't always be killed with CTRL-C.
+ e.g. on Solaris 5.5, when using "K" (Keech). Other 'guipty' problems on
+ Solaris 2.6. (Marley)
+9 On Solaris: Using a "-geometry" argument, bigger than the window where Vim
+ is started from, causes empty lines below the cmdline. (raf)
+8 X11 GUI: When menu is disabled by excluding 'm' from 'guioptions', ALT key
+ should not be used to trigger a menu (like the Win32 version).
+8 When setting 'langmenu', it should be effective immediately. Store both
+ the English and the translated text in the menu structure. Re-generate
+ the translation when 'langmenu' has changed.
+8 Basic flaw in the GUI code: NextScreen is updated before calling
+ gui_write(), but the GUI code relies on NextScreen to represent the state
+ of where it is processing the output.
+ Need better separation of Vim core and GUI code.
+8 When fontset support is enabled, setting 'guifont' to a single font
+ doesn't work.
+8 Menu priority for sub-menus for: Amiga, BeOS.
+8 Add menu separators for Amiga, RISCOS.
+8 Add a few more command names. Patch from Jiri Brezina (28 feb 2002).
+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,
+ use that code? Or use console dialog.
+8 When selecting a font with the font dialog and the font is invalid, the
+ error message disappears too quick.
+8 gui_check_colors() is not called at the right moment. Do it much later,
+ to avoid problems.
+8 gui_update_cursor() is called for a cursor shape change, even when there
+ are mappings to be processed. Only do something when going to wait for
+ input. Or maybe every 100 ms?
+8 X11: When the window size is reduced to fit on screen, there are blank
+ lines below the text and bottom scrollbar. "gvim -geometry 80x78+0+0".
+ When the "+0+0" is omitted it works.
+8 When starting an external command, and 'guipty' set, BS and DEL are mixed
+ up. Set erase character somehow?
+8 A dead circumflex followed by a space should give the '^' character
+ (Rommel). Look how xterm does this.
+ Also: Bednar has some code for dead key handling.
+ Also: Nedit 5.0.2 with USE_XMIM does it right. (Gaya)
+8 The compose key doesn't work properly (Cepas). Both for Win32 and X11.
+7 The cursor in an inactive window should be hollow. Currently it's not
+ visible.
+7 GUI on Solaris 2.5.1, using /usr/dt/..: When gvim starts, cursor is
+ hollow, after window lowered/raised it's OK. (Godfrey)
+7 When starting GUI with ":gui", and window is made smaller because it
+ doesn't fit on the screen, there is an extra redraw.
+8 When setting font with .Xdefaults, there is an extra empty line at the
+ bottom, which disappears when using ":set guifont=<Tab>". (Chadzelek)
+8 When font shape changes, but not the size, doing ":set font=" does not
+ redraw the screen with the new font. Also for Win32.
+ When the size changes, on Solaris 2.5 there isn't a redraw for the
+ remaining part of the window (Phillipps).
+- Flashes really badly in certain cases when running remotely from a Sun.
+4 Re-write the code so that the highlighting isn't changed multiple times
+ when doing a ":hi clear". The color changes happen three or more times
+ currently. This is very obvious on a 66Mhz 486.
+
+
+MSDOS/DJGPP:
+9 Pressing CTRL-C often crashes the console Vim runs in. (Ken Liao)
+ When 'bioskey' isn't set it doesn't happen. Could be a problem with the
+ BIOS emulation of the console. Version 5.6 already had this problem.
+8 DJGPP: "cd c:" can take us to a directory that no longer exists.
+ change_drive() doesn't check this. How to check for this error?
+9 The 16 bit version runs out of memory very quickly. Should find unused
+ code and reduce static data.
+9 Crash when running on Windows 98 in a console window and pressing CTRL-C.
+ Happens now and then. When debugging Vim in gdb this also happens. Since
+ the console crashes, might be a bug in the DOS console. Resetting
+ 'bioskey' avoids it, but then CTRL-C doesn't work.
+9 DOS: Make CTRL-Fx and ALT-Fx work.
+ CTRL-F1 = CE-5E, CTRL-F2 = CE-5F, .., CTRL-F10 = CE-67
+ ALT-F1 = CE-68, ALT-F2 = CE-69, .., ALT-F10 = CE-71
+ Shifted cursor keys produce same codes as unshifted keys. Use bioskey(2)
+ to get modifier mask for <S-C-M-Fx>.
+ Use K_SPECIAL/KS_MODIFIER codes to insert modifier mask in input stream?
+ Make this work like in Win32 console.
+ Mapping things like <M-A> doesn't work, because it generates an extended
+ key code. Use a translation table?
+9 Can't read an opened swap file when the "share" command has not been used.
+ At least ignore the swap files that Vim has opened itself.
+8 Use DJGPP 2.03.
+8 The Dos32 version (DJGPP) can't use long file names on Windows NT.
+ Check if new package can be used (v2misc/ntlfn08[bs].zip).
+8 setlocale() is bogus.
+8 Vim busy waits for new characters or mouse clicks. Should put in some
+ sort of sleep, to avoid eating 50% of the CPU time. Test on an unpatched
+ Windows 95 system!
+8 DJGPP: when shell is bash, make fails. (Donahoe)
+7 Hitting CTRL-P twice quickly (e.g. in keyword completion) on a 8088
+ machine, starts printer echo! (John Mullin).
+7 MSDOS 16 bit version can't work with COMSPEC that has an argument, e.g.:
+ COMSPEC=C:\WINDOWS\COMMAND.COM /E:4096 (Bradley)
+ Caused by BCC system() function (Borland "make" has the same problem).
+8 Mouse: handle left&right button pressed as middle button pressed. Add
+ modifier keys shift, ctrl and alt.
+7 When too many files are open (depends on FILES), strange things happen.
+ The Dos16 version runs out of memory, in the Dos32 version "!ls" causes a
+ crash. Another symptom: .swp files are not deleted, existing files are
+ "[New file]".
+7 DJGPP version doesn't work with graphics display mode. Switch to a mode
+ that is supported?
+8 DJGPP: ":mode" doesn't work for many modes. Disable them.
+8 DJGPP: When starting in Ex mode, shouldn't clear the screen. (Walter
+ Briscoe)
+
+
+MSDOS, OS/2 and Win32:
+8 OS/2: Add backtick expansion. Undefine NO_EXPANDPATH and use
+ gen_expand_wildcards().
+8 OS/2: Add clipboard support? See example clipbrd.exe from Alexander
+ Wagner.
+8 OS/2: Add Extended Attributes support and define HAVE_ACL.
+8 OS/2: When editing a file name "foo.txt" that is actually called FOO.txt,
+ writing uses "foo.txt". Should obtain the real file name.
+8 Should $USERPROFILE be used instead of $HOMEDRIVE/$HOMEPATH?
+8 Win32 console: <M-Up> and <M-Down> don't work. (Geddes) We don't have
+ special keys for these. Should use modifier + key.
+8 Win32 console: caps-lock makes non-alpha keys work like with shift.
+ Should work like in the GUI version.
+8 Environment variables in DOS are not case sensitive. Make a define for
+ STRCMP_ENV(), and use it when comparing environment var names.
+8 Setting 'shellslash' has no immediate effect. Change all file names when
+ it is set/reset? Or only use it when actually executing a shell command?
+8 When editing a file on a Samba server, case might matter. ":e file"
+ followed by ":e FILE" will edit "file" again, even though "FILE" might be
+ another one. Set last used name in buflist_new()? Fix do_ecmd(), etc.
+8 ":mksession" generates a "cd" command where "aa\#bb" means directory "#bb"
+ in "aa", but it's used as "aa#bb". (Ronald Hoellwarth)
+8 When a buffer is editing a file like "ftp://mach/file", which is not going
+ to be used like a normal file name, don't change the slashes to
+ backslashes. (Ronald Hoellwarth)
+
+
+Windows 95:
+8 Editing a file by it's short file name and writing it, makes the long file
+ name disappear. Setting 'backupcopy' helps.
+ Use FindFirstFile()->cAlternateFileName in fname_case() (George Reilly).
+8 Doing wildcard expansion, will match the short filename, but result in the
+ long filename (both DJGPP and Win32).
+
+
+Win32 console:
+9 When editing a file by its short file name, it should be expanded into its
+ long file name, to avoid problems like these: (Mccollister)
+ 1) Create a file called ".bashrc" using some other editor.
+ 2) Drag that file onto a shortcut or the actual executable.
+ 3) Note that the file name is something like BASHRC~1
+ 4) Go to File->Save As menu item and type ".bashrc" as the file name.
+ 5) Press "Yes" to indicate that I want to overwrite the file.
+ 6) Note that the message "File exists (add ! to override)" is displayed
+ and the file is not saved.
+ Use FindFirstFile() to expand a file name and directory in the path to its
+ long name.
+8 Also implement 'conskey' option for the Win32 console version? Look at
+ how Xvi does console I/O under Windows NT.
+7 Re-install the use of $TERM and support the use of different terminals,
+ besides the console.
+8 Use of <altgr> modifier doesn't work? 5.3 was OK. (Garcia-Suarez/Guckes)
+9 Mapping <C-S-Tab> doesn't work correctly. How to see the difference with
+ <C-S-i>?
+9 tmpnam() uses file in root of file system: "\asdf". That doesn't work on
+ a Netware network drive. Use same function as for Win32 GUI?
+8 In os_win32.h, HAVE_STRICMP and HAVE_STRNICMP are defined only if __GNUC__
+ is not defined. Shouldn't that be the other way around?
+8 ":winpos" doesn't work. Patch from Vipin Aravind.
+7 Use SetConsoleCP() and SetConsoleOutputCP() to implement 'termencoding'?
+ Avoids that input and output work differently. Need to be restored when
+ exiting.
+
+
+Amiga:
+8 In mch_inchar() should use convert_input_safe() to handle incomplete byte
+ sequences.
+9 In mch_expandpath() a "*" is to be expanded, but "\*" isn't. Remove
+ backslashes in result.
+8 Executing a shell, only one option for 'shell' is separated. Should do
+ all options, using white space separation.
+
+
+Macintosh:
+9 Mac: The motion type is not stored on the clipboard. Using ":set
+ clipboard=unnamed" makes "yyp" work characterwise. (Michael DeMoney)
+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 Patch to add 'transparency' option. Disadvantage: it's slow. (Eckehard
+ Berns, 2004 May 9) http://ecki.to/vim-icns/TransBack.diff
+8 Patches from "Rain Dog" Cucka:
+ - guifont selector (2002 Dec 15)
+ - scrollbar (2002 Dec 8)
+ - Quartz fonts (2002 Dec 8)
+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:
+8 When an ":edit" is inside a try command and the ATTENTION prompt is used,
+ 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.
+9 When using ":e ++enc=foo file" and the file is already loaded with
+ 'fileencoding' set to "bar", then do_ecmd() uses that buffer, even though
+ the fileencoding differs. Reload the buffer in this situation? Need to
+ check for the buffer to be unmodified.
+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
+ redirection can be different. Use a separate variable to hold the column
+ for redirection.
+7 There is no way to change directory and go back without changing the local
+ and/or global directory. Add a way to find out if the current window uses
+ a local directory. Add cdcmd() that returns ":cd" or ":lcd"?
+7 After running "make test" the window title is sometimes not restored.
+ Mostly sticks at "test3.in", but not always. Appears to happen more often
+ when compiled with Python (threading).
+7 The messages for "vim --help" and "vim --version" don't use
+ 'termencoding'.
+7 ATTENTION dialog choices are more logical when "Delete it' appears before
+ "Quit". Patch by Robert Webb, 2004 May 3.
+8 When 'scrollbind' is set, a window won't scroll horizontally if the cursor
+ line is too short. Add a word in 'scrollopt' to allow moving the cursor
+ to longer line that is visible. A similar thing is done for the GUI when
+ using the horizontal scrollbar.
+7 VisVim can only open one file. Hard to solve: each opened file is passed
+ with a separate invocation, would need to use timestamps to know the
+ invocations belong together.
+8 When giving a ":bwipeout" command a file-changed dialog may popup for this
+ buffer, which is pointless. (Mike Williams)
+8 On MS-Windows ":make" doesn't show output while it is working. Use the
+ tee.exe from http://unxutils.sourceforge.net/ ? About 16 Kbyte in the
+ UnxUtils.zip archive.
+ Alternate one: http://www.pramodx.20m.com/tee_for_win32.htm, but Walter
+ Briscoe says it's not as good.
+8 'fillchars' doesn't work for multi-byte characters.
+9 Editing a XML file with a long line is extremely slow. Example file from
+ Randy Parker (Dec 13). Editing the dictionaries for engspchk plugin with
+ syntax highlighting is also very slow.
+ Limit the searching for items to a few hundred characters?
+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.
+8 After using diff mode, ":set nodiff" doesn't restore the old foldmethod.
+ (Thomas S. Urban)
+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[]
+ (like for DBCS_JPNU) and put a zero in the second byte (like for UTF-8).
+8 'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when
+ defined.
+7 Inside a function with "perl <<EOF" a line with "$i++" is recognized as an
+ ":insert" command, causing the following "endfunction" not to be found.
+ Add skipping this perl construction inside function definitions.
+7 When 'ttimeoutlen' is 10 and 'timeoutlen' is 1000, there is a keycode
+ "<Esc>a" and a mapping <Esc>x", when typing "<Esc>a" with half a second
+ delay should not be interpreted as a keycode. (Hans Ginzel)
+7 ":botright 1 new" twice causes all window heights to be changed. Make the
+ bottom window only bigger as much as needed.
+7 "[p" doesn't work in Visual mode. (David Brown)
+7 The Cygwin and MingW makefiles define "PC", but it's not used anywhere.
+ Remove? (Dan Sharp)
+9 The argument <f-args> of a user command doesn't handle backslashes
+ properly. "Cmd \ e" is one argument, "Cmd \\ e" still is one argument.
+ "Cmd \ e" is two arguments, first one ending in space. (Kontra Gergely)
+9 User commands use the context of the script they were defined in. This
+ causes a "s:var" argument to unexpectedly use a variable in the defining
+ script, not the calling script. Add an argument to ":command":
+ "-keepcontext". Do replace <SID>, so that a function in the defining
+ script can be called.
+8 The Japanese message translations for MS-Windows are called ja.sjis.po,
+ but they use encoding cp932. Rename the file and check that it still
+ works.
+9 When a syntax region does not use "keepend" and a contained item does use
+ "extend", this makes the outer region stop at the end of the contained
+ region. (Lutz Eymers) Another example Nov 14 2002.
+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?
+8 'hkmap' should probably be global-local.
+9 When "$" is in 'cpoptions' and folding is active, a "C" command changes
+ the folds and resets w_lines_valid. The display updating doesn't work
+ then. (Pritesh Mistry)
+8 ":s!from!to!" works, but ":smagic!from!to!" doesn't. It sees the "!" as a
+ flag to to the command. Same for ":snomagic". (Johan Spetz)
+8 Using ":s" in a function changes the previous replacement string. Save
+ "old_sub" in save_search_patterns()?
+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.
+9 The "Error detected while processing modelines" message should have an
+ error number.
+7 The message in bt_dontwrite_msg() could be clearer.
+8 Unix: When libcall() fails there is no clear error message. Johannes
+ Zellner has a patch for this.
+8 The script ID that is stored with an option and displayed with ":verbose
+ set" isn't reset when the option is set internally. For example when
+ 'foldlevel' is set from 'foldlevelstart'.
+8 In the fileformat dialog, "Cancel" isn't translated. Add a global
+ variable for this. (Eduardo Fernandez)
+9 When editing a file with 'readonly' set, there is no check for an existing
+ swap file. Then using ":write" (without making any changes) doesn't give
+ a warning either. Should check for an existing swap file without creating
+ one.
+7 On MS-DOS or MS-Windows, when editing the same file over a network, the
+ drive letter is different, thus an existing swap file doesn't generate a
+ warning. Use some flag to indicate the swap file is in the same directory
+ as the original file? Could make b0_fname[] start with a special
+ character like ">".
+7 When 'showbreak' is set, the amount of space a Tab occupies changes.
+ Should work like 'showbreak' is inserted without changing the Tabs.
+7 When there is a "help.txt" window in a session file, restoring that
+ session will not get the "LOCAL ADDITIONS" back.
+7 When 'mousefocus' is set and switching to another window with a typed
+ command, the mouse pointer may be moved to a part of the window that's
+ covered by another window and we lose focus. Only move in the y
+ direction, not horizontally?
+8 When using CTRL-D after ":help", restrict the number of matches to a
+ thousand, otherwise using CTRL-D without an argument takes too long.
+8 ":hardcopy":
+ - Patch to append CTRL-D to PostScript output (Mike Williams, 2004 Jun 11)
+ - Using the cterm_color[] table is wrong when t_colors is > 16.
+ - Need to handle unprintable characters.
+ - Win32: On a B&W printer syntax highlighting isn't visible. Perform
+ dithering to make grey text?
+ - support printing multi-byte characters. Patch from Motonobu Ichimura.
+ New (better) patch from Mike Williams (2004 Jan 20)
+ - Add a flag in 'printoptions' to add an empty page to make the total
+ number even. "addempty"? (Mike Williams)
+ - Should interpreted CTRL-L as a page break.
+ - Grey line numbers are not always readable. Add field in 'printoptions'.
+ Default to black when no syntax highlighting.
+ - Be able to print a window in diff mode.
+ - Be able to specify a colorscheme to use for printing. And a separate
+ one for B&W printing (if that can be detected).
+8 In Visual block mode with 'lbr' set, a change command doesn't insert the
+ text in following lines where the linebreak changes.
+9 dosinst.c: The DJGPP version can't uninstall the Uninstall registry key on
+ Windows NT. How to install a .inf file on Windows NT and how to detect
+ that Windows NT is being used?
+8 When opening the same file on Unix and on MS-Windows, there is no
+ ATTENTION message, because the path in the swap file is different. Using
+ a relative path name will cause no ATTENTION for Vim 5.8.
+ Somehow add a flag that the swap file is in the same dir as the file?
+8 When 'virtualedit' is "block,insert" and encoding is "utf-8", selecting a
+ block of one double-wide character, then "d" deletes only half of it.
+8 When 'virtualedit' is set, should "I" in blockwise visual mode also insert
+ in lines that don't extend into the block?
+8 With 'virtualedit' set, in Insert mode just after the end of line, CTRL-O
+ yh does not yank the last character of the line. (Pavel Papushev)
+ Doing "hl" first appears to make it work.
+8 With 'virtualedit' set it's possible to move into the blank area from
+ 'linebreak'.
+8 With 'virtualedit' set and 'selection' "exclusive", a Visual selection
+ that ends in or after a tab, "d" doesn't delete (part of) the tab.
+ (Helmut Stiegler)
+8 With 'virtualedit' set, a blockwise Visual selection that starts and ends
+ in a tab, "<" shifts too much. (Helmut Stiegler)
+9 When jumping to a tag, the search pattern is put in the history. When
+ 'magic' is on, the pattern may not work. Translate the pattern depending
+ on p_magic when putting it in the history? Alternative: Store value of
+ 'magic' in history. (Margo)
+9 optwin.vim: Restoring a mapping for <Space> or <CR> is not correct for
+ ":noremap". Add "mapcmd({string}, {mode})? Use code from ":mkexrc".
+9 incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
+ isn't updated).
+9 term_console is used before it is set (msdos, Amiga).
+9 Get out-of-memory for ":g/^/,$s//@/" on 1000 lines, this is not handled
+ correctly. Get many error messages while redrawing the screen, which
+ cause another redraw, etc.
+8 [<C-I> doesn't work when '*' is in 'iskeyword'. find_pattern_in_path()
+ must escape special characters in the pattern.
+8 Vim can overwrite a read-only file with ":w!". ":w" can't overwrite an
+ existing file, "w!" can, but perhaps not a read-only file? Then use
+ ":w!!" for that.
+ Or ask for permission to overwrite it (if file can be made writable) and
+ restore file to readonly afterwards.
+7 When compiled with "xterm_clipboard", startup can be slower and might get
+ error message for invalid $DISPLAY. Try connecting to the X server in the
+ background (forked), so that Vim starts up quicker? Connect as soon as
+ the clipboard is to be used (Visual select mode starts, paste from
+ clipboard)
+7 X11: Some people prefer to use CLIPBOARD instead of PRIMARY for the normal
+ selection. Add an "xclipboard" argument to the 'clipboard' option? (Mark
+ Waggoner)
+8 For xterm need to open a connection to the X server to get the window
+ title, which can be slow. Can also get the title with "<Esc>[21t", no
+ need to use X11 calls. This returns "<Esc>]l{title}<Esc>\".
+8 When the builtin xterm termcap contains codes that are not wanted, need a
+ way to avoid using the builtin termcap.
+8 Xterm sends ^[[H for <Home> and ^[[F for <End> in some mode. Also
+ recognize these keys? Mostly useful for xterm simulators, like gnometerm.
+ See http://dickey.his.com/xterm/xterm.faq.html#xterm_pc_style.
+8 '[ and '] should be set to start/end of line when using a linewise operator
+ (e.g., ":w").
+8 CTRL-A can't handle big "long" numbers, they become negative. Check for
+ "-" character, if not present, use unsigned long.
+8 Make it possible to disable the special meaning of "#" in the first column
+ for ">>".
+8 Add suspending with CTRL-Z at the "more" prompt, and when executing a long
+ script in do_cmdline().
+8 When using 'hidden', many swap files will be open. When Vim runs into the
+ maximum number of open files, error messages will appear. Detect that
+ this problem is present, and close any hidden files that don't have
+ changes.
+8 With 'viminfo' set such that the ".viminfo" file is written on a FAT
+ filesystem, an illegal file name may be created: ".vim".
+8 For each buffer that is opened, the viminfo file is opened and read to
+ check for file marks. This can be slow.
+7 In xterm, recognize both vt100 and vt220 cursor keys. Change
+ add_termcode() to not remove an existing entry for a name, when it's
+ needed.
+ Need a generic solution to recognize different codes for the same key.
+8 Core dump within signal function: gdb doesn't show stack backtrace! Option
+ to skip catch_signals()?
+9 Repeating a "cw" with "." doesn't work if the text was pasted from the
+ clipboard. (Thomas Jones) It's because the menu/toolbar item exits Insert
+ mode and uses "gP". How to fix this without breaking inserting a block of
+ text?
+8 In Replace mode pasting from the clipboard (using menu or toolbar) inserts
+ all the text. Add ":rmenu"?
+8 Pasting with the mouse in Replace mode inserts the text, instead of
+ overwriting, when it is more than one line. Same for using <C-R>.
+9 CTRL-E and CTRL-Y don't work in small window when 'so' is 4 and lines are
+ wrapping (Acevedo/in.226). E.g., when using CTRL-E, window height 7,
+ window might actually scroll down when last line of buffer is displayed.
+ --> Remember if the previous command was "cursor follows screen" or
+ "screen follow cursor" and use this in cursupdate().
+7 tilde_replace() can only handle "~/", should also do "~user/".
+ Get the list of home directories (from /etc/passwd? Use getpwent()) and
+ use some clever algorithm to match a path with that. Find common strings
+ in the list?
+8 When dragging status line with mouse, sometimes a jump when first clicking
+ on the status line (caused by 'winheight'). Select window on button up,
+ instead of on button down.
+8 Dragging the status line doesn't scroll but redraw.
+9 Evaluating 'statusline' in build_stl_str_hl() does not properly check for
+ reaching the end of the available buffer.
+8 When performing incremental search, should abort searching as soon as a
+ character is typed.
+8 When the value of $MAKE contains a path, configure can't handle this.
+ It's an autoconf bug. Remove the path from $MAKE to work around it.
+8 How to set VIMRC_FILE to \"something\" for configure? Why does this not
+ work: CFLAGS='-DVIMRC_FILE=\"/mydir/myfile\"' ./configure
+8 The temporary file is sometimes not writable. Check for this, and use an
+ alternate name when it isn't. Or add the 'temptemplate' option: template
+ for the temp file name ":set temptemplate=/usr/tmp/?????.tmp".
+ Also: Win32 version uses Windows temp directory, which might not work for
+ cygwin bash.
+7 Get error "*, \+ or \( operand could be empty" for pattern "\(.\)\1\{3}".
+ Remember flags for backreferences.
+7 When switching to Daylight Saving Time, Vim complains that a file has been
+ changed since last read. Can we use a function that uses GMT?
+7 When completing an environment variable after a '$', check for file names
+ that contain a '$' after all have been found.
+8 When "cm" termcap entry is missing, starting gvim shouldn't complain about
+ it. (Lohner) Try out with "vt100" entry, cm replaced with cX.
+7 When an include file starts with "../", the check for already visiting
+ this file doesn't work. Need to simplify the file name.
+8 On Sinix SYS_NMLN isn't defined. Include patch from Cristiano De Michele.
+7 The names and comments for the arguments of do_browse() are confusing.
+ "dflt" isn't the default file name when "initdir" is not NULL and
+ "initdir" is the default path to be used.
+7 When 'scrolloff' is exactly half the window height, "j" causes a scroll of
+ two lines at a time. "k" doesn't do this. (Cory T. Echols)
+8 When write_viminfo() is used while there are many orphaned viminfo
+ tempfiles writing the viminfo file fails. Give a clear error message so
+ that the user knows he has to delete the files.
+7 It's possible to redefine a script-local function with ":func
+ <SNR>123_Test()". (Krishna) Disallow this.
+7 After ":%d" an undo reports the number of lines added as if there still
+ was one line.
+
+
+I can't reproduce these (if you can, let me know how!):
+9 NT 4.0 on NTFS file system: Editing ".bashrc" (drag and drop), file
+ disappears. Editing ".xyz" is OK. Also, drag&drop only works for three
+ files. (McCollister)
+8 Motif: Tear-off menu item crashes Vim on some machines. (Netherton) It
+ works fine for me, maybe it's a Motif problem.
+
+
+Problems that will (probably) not be solved:
+- In a terminal with 'mouse' set such that the mouse is active when entering
+ a command line, after executing a shell command that scrolls up the
+ display and then pressing ":": Selecting text with the mouse works like
+ the display wasn't scrolled. Vim doesn't know how much the external
+ command scrolled up the display. Use Shift to select text.
+- X windows: When $DISPLAY points to a X server where there is no access
+ permission, trying to connect to the X server causes an error message.
+ XtOpenDisplay() prints this directly, there is no way to avoid it.
+- X windows: Setting 'guifontset' to an illegal value sometimes crashes Vim.
+ This is caused by a fault in a X library function, can't be solved in Vim.
+- Motif: When adding a menu item "Find this &Symbol", the "s" in "this" will
+ be underlined, instead of in "Symbol". Motif doesn't let us specify which
+ character gets the highlighting.
+- Moving the cursor removes color in color-xterm. This is a color-xterm
+ problem! color-xterm ver. 6.1 beta 3 and later work properly.
+- In zsh, "gvim&" changes the terminal settings. This is a zsh problem.
+ (Jennings)
+- Problem with HPterm under X: old contents of window is lost (Cosentino).
+- Amiga: When using quickfix with the Manx compiler we only get the first 25
+ errors. How do we get the rest?
+- Amiga: The ":cq" command does not always abort the Manx compiler. Why?
+- Linux: A file with protection r--rw-rw- is seen readonly for others. The
+ access() function in GNU libc is probably wrong.
+- MSDOS: When using smartdrive with write-back buffering, writing to a
+ readonly floppy will cause problems. How to test for a writable floppy
+ first?
+- MSDOS: Both 16 and 32 bit versions: File name expansion doesn't work for
+ names that start with a dot. These used to be illegal file names.
+- When doing a CTRL-Z and typing a command for the shell, while Vim is busy
+ (e.g. writing a file), the command for the shell is sometimes eaten by Vim,
+ because the terminal mode is changed from RAW to CBREAK.
+- An old version of GNU tgoto can't handle the terminfo code for "AF". The
+ "%p1" is interpreted as "%p" and "1", causing color not to be working.
+ Fix: Change the "%p1" in the "AF" and "AB" terminfo entries to "%p".
+ (Benzinger).
+- When running an external command from the GUI, typeahead is going to that
+ program, not to Vim. It looks like the shell eats the characters, Vim
+ can't get back what the external command didn't use.
+- Win32 GUI: Error code from external command not returned in shell_error.
+ It appears that cmd.exe and command.com don't return an error code.
+- Win32 GUI: The Toolbar is a bit too high when the flat style is being
+ used. We don't have control over the height of the Toolbar.
+- Win32: All files created on the day of switching from winter to summer
+ time cause "changed since editing started" messages. It goes away when
+ the file is written again the next day, or the timezone is adjusted.
+ DJGPP version is OK. (Zaimi) Looks like a problem with the Win32 library.
+ Rebooting doesn't help. Time stamps look OK in directory. (Penn)
+ Is this on FAT (stores wall clock time) or NTFS (stores UTS)?
+- 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.
+- 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.
+- Solaris 2.6 with GTK and Perl: gvim crashes when started. Problem with X
+ input method called from GDK code. Without Perl it doesn't crash.
+- VMS: Vimdiff doesn't work with the VMS diff, because the output looks
+ different. This makes test 47 fail. Install a Unix-compatible diff.
+- VMS v7.1 and older: Tests 21 and 32 fail. From VMS v7.1-2 and newer Vim
+ does not have this behavior. (Zoltan Arpadffy)
+- Win32 GUI: mouse wheel always scrolls rightmost window. The events arrive
+ in Vim as if the rightmost scrollbar was used.
+- GTK with Gnome: Produces an error message when starting up:
+ Gdk-WARNING **: locale not supported by C library
+ This is caused by the gnome library gnome_init() setting $LC_CTYPE to
+ "en_US". Not all systems support this locale name, thus causing the
+ error. Hopefully a newer version of GTK/Gnome fixes this problem.
+- GTK 2: With this mapping the hit-enter prompt is _sometimes_ below the
+ screen, at other times there is a grey area below the command line:
+ :nmap <F11> :if &guioptions=~'m' \| set guioptions-=m \| else \| set guioptions+=m \| endif<cr>
+- GTK: When pasting a selection from Vim to xclipboard gvim crashes with a
+ ABRT signal. Probably an error in the file gdkselection.c, the assert
+ always fails when XmbTextListToTextProperty() fails. (Tom Allard)
+- When using an xterm that supports the termresponse feature, and the 't_Co'
+ termcap option was wrong when Vim started, it will be corrected when the
+ termresponse is received. Since the number of colors changes, the
+ highlighting needs to be initialized again. This may cause colors defined
+ in the vimrc file to be lost.
+- On Windows NT 4.0 the number of files passed to Vim with drag&drop and
+ "Edit with Vim" is limited. The maximum command line length is 255 chars.
+
+--------------------- extensions and improvements ----------------------
+ *extensions-improvements*
+
+Documentation:
+8 Extend usr_27.txt a bit. (Adam Seyfarth)
+9 Merge in ideas from ~/vim/patches/tutor.txt (Gabriel Zachmann)
+7 Add a section on debugging scripts in the user manual.
+9 Make the Reference Manual more precise. For each command mention:
+ - change to cursor position and curswant
+ - if it can be undone (u/CTRL-R) and redone (.)
+ - how it works for folded lines
+ - how it works with multi-byte characters
+9 In change.txt, remark about Javadoc isn't right. Right alignment would
+ work too.
+8 Spread the windows commands over the other files. For example, ":stag"
+ should be with ":tag". Cross-link with tags to avoid too much double
+ text.
+8 Add tags for all features, e.g. "gui_running".
+7 MS-Windows: When a wrong command is typed with an ALT key, give a hint to
+ look at the help for 'winaltkeys'.
+7 Add a help.vim plugin that maps <Tab> to jump to the next tag in || and
+ <C-Tab> (and <S-Tab>) to the previous tag.
+- Check text editor compendium for vi and Vim remarks.
+
+
+Help:
+- First try using the ":help" argument literally, before using it as a
+ pattern. And then match it as part of a tag.
+- When a help item has multiple matches make it possible to use ":tn" to go
+ to the other matches.
+- Support a way to view (and edit) .info files.
+- Default mapping for help files: <Tab> to position cursor on next |:tag|.
+- Implement a "sticky" help window, some help text lines that are always
+ displayed in a window with fixed height. (Guckes) Use "~/.vimhelp" file,
+ user can edit it to insert his favorite commands, new account can contain a
+ default contents.
+- Make 'winminheight' a local option, so that the user can set a minimal
+ height for the help window (and other windows).
+- ":help :s^I" should expand to ":help :substitute".
+- Make the help key (<F1>) context sensitive?
+- Learn mode: show short help while typing commands.
+
+
+User Friendlier:
+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)
+8 Windows install: Be able to associate Vim with a selection of file types?
+8 Windows uninstall: Have uninstal.c delete the vimfiles directories that
+ dosinst.c creates. List the contents of the directory (recursively) if
+ the user asks for it. Requires an implementation of "rm -rf".
+8 Remember the name of the vimrc file that was used (~/.vimrc, $VIM/_vimrc,
+ $HOME/_vimrc, etc.) and add "edit vimrc" to the File menu.
+- Add a way to save local settings and mappings into a new plugin file.
+ ":mkplugin <file>"?
+8 Add ":plugininstall" command. Can be used to install a plugin file that
+ includes documentation. Let the user select a directory from
+ 'runtimepath'.
+ " Vim plugin
+ <main plugin code>
+ " >>> plugin help start <<<
+ <plugin docs>
+- Add mappings local to a window: ":map <window> ..."?
+9 Add buffer-local menu. Should offer a choice between removing the menu or
+ disabling it. Be careful that tear-offs don't disappear (keep one empty
+ item?).
+ Alternative: use BufEnter and BufLeave autocommands.
+8 Add file locking. Lock a file when starting to edit it with flock() or
+ fcntl(). This patch has advisory file locking while reading/writing the
+ file: ~/vim/patches/kahn_file_locking .
+8 make a vimtutor script for Amiga and other systems.
+7 Add the arguments for configure to the ":version" output?
+
+
+Diff mode:
+8 Add a command to stop diff mode: ":set nodiff fdc = 0 noscrollbind"
+8 Use diff mode to show the changes made in a buffer (compared to the file).
+ Use an unnamed buffer, like doing:
+ new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
+7 Add cursor-binding: when moving the cursor in one diff'ed buffer, also
+ move it in other diff'ed buffers, so that CTRL-W commands go to the same
+ location.
+
+
+Folding:
+ (commands still available: zg zG zI zJ zK zp zP zq zQ zV zw zW zy zY;
+ secondary: zB zS zT zZ)
+8 Add different highlighting for a fold line depending on the fold level.
+ (Noel Henson)
+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?
+8 Add an option 'foldskip' with values like 'foldopen' that specifies which
+ commands skip over a closed fold.
+8 "H" and "L" count buffer lines instead of window lines. (Servatius Brandt)
+8 Add a way to add fold-plugins. Johannes Zellner has one for VB.
+7 When using 2html.vim, also reproduce folds as you can see them. When
+ someone doesn't want the folds he can disable them before converting.
+ First attempt by Carl Osterwisch, 2004 May 10.
+7 When using manual folding, the undo command should also restore folds.
+- Allow completely hiding a closed fold. Require showing a character in
+ 'foldcolumn' to avoid the missing line goes unnoticed.
+- When pressing the down arrow of a scrollbar, a closed fold doesn't scroll
+ until after a long time. How to make scrolling with closed folds
+ smoother?
+- When creating a session, also store folds for buffers in the buffer list,
+ using the wininfo in wi_folds.
+- 'foldmethod' "textobject": fold on sections and paragraph text objects.
+- Add 'hidecomment' option: don't display comments in /* */ and after //.
+- "zu": undo change in manual fold. "zU" redo change in manual fold. How to
+ implement this?
+- "zJ" command: add the line or fold below the fold in the fold under the
+ cursor.
+- 'foldmethod' "syntax": "fold=3": set fold level for a region.
+- Can set 'foldtext' to empty string: don't display any line. How to
+ implement this?
+- Apply a new foldlevel to a range of lines. (Steve Litt)
+- Have some way to restrict commands to not folded text. Also commands like
+ searches.
+
+
+Multi-byte characters:
+9 When the tail byte of a double-byte character is illegal (e.g., a CR), the
+ display is messed up (Yasuhiro Matsumoto). Should check for illegal
+ double-byte characters and display them differently (display each single
+ byte).
+8 Add an item in 'fileencodings' to check the first lines of a file for
+ the encoding. See Python PEP: http://www.python.org/peps/pep-0263.html.
+ To avoid getting a wrong encoding only accept something Emacs-like:
+ "-*- coding: enc-na_me.foo -*-" and "-*- coding= enc-na_me.foo -*-"
+ Match with "-\*-\s*coding[:=]\s*\([::word::-_.]\+\)\s*-\*-" and use first
+ item.
+8 Add an item in 'fileencodings' to check the first line of an XML file for
+ the encoding. <?xml version="1.0" encoding="UTF-8"?> Or "charset=UTF-8"?
+8 The quickfix file is read without conversion, thus in 'encoding'. Add an
+ option to specify the encoding of the errorfile and convert it. Also for
+ ":grep".
+8 When a file was converted from 'fileencoding' to 'encoding', a tag search
+ should also do this on the search pattern. (Andrzej M. Ostruszka)
+7 When converting a file fails, mention which byte could not be converted,
+ so that the user can fix the problem.
+8 Add configure option to be able to disable using the iconv library. (Udo
+ Schweigert)
+8 Add patch from Muraoka Taro (Mar 16) to support input method on Mac?
+9 'aleph' should be set to 1488 for Unicode. (Zvi Har'El)
+8 Should add test for using various commands with multi-byte characters.
+- Include flipcase patch: ~/vim/patches/wall.flipcase2 ? Make it work for
+ multi-byte characters.
+8 'infercase' doesn't work with multi-byte characters.
+8 toupper() function doesn't handle byte count changes.
+8 Support four composing characters, needed for Hebrew. (Ron Aaron)
+8 "ga" should show all composing characters, also if there are more than 2.
+7 When searching, should order of composing characters be ignored?
+8 Should implement 'delcombine' for command line editing.
+8 Detect overlong UTF-8 sequences and handle them like illegal bytes.
+8 ":s/x/\u\1/" doesn't work, making uppercase isn't done for multi-byte
+ characters.
+8 UTF-8: "r" in Visual mode doesn't take composing characters.
+8 UTF-8: When there is a precomposed character in the font, use it instead
+ of a character and a composing character. See xterm for an example.
+7 When a character can't be displayed, display its digraph instead.
+ 'display' option to specify this.
+7 Use ideas for nl_langinfo() from Markus Kuhn in enc_default():
+ (www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c)
+- GTK and Win32: Allow selecting fonts for 'guifontset' with the
+ fontselector somehow.
+- GTK and Win32: make it possible to set the font for the menu to make it
+ possible to have 'encoding' different from the current locale.
+- dbcs_class() only works for Japanese and Korean. Implement this for
+ other encodings. The "euc-jp" and "euc-kr" choices might be wrong.
+- Find some way to automatically select the right GUI font or fontset,
+ depending on the default value of 'encoding'.
+ Irrelevant in the GTK+ 2 GUI so long as UTF-8 is used.
+ 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, RiscOS GUI, BeOS 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
+ "lang". (Ilya Dogolazky)
+- Make 'langmap' accept multi-byte characters.
+- Do we need the reverse of 'keymap', like 'langmap' but with files and
+ multi-byte characters? E.g., when using a Russian keyboard.
+- Add the possibility to enter mappings which are used whenever normal text
+ could be entered. E.g., for "f" command. But not in Normal mode. Sort
+ of opposite of 'langmap'. Use ":tmap" command?
+- When breaking a line, take properties of multi-byte characters into
+ account. The "linebreak" program from Bruno Haible can do it:
+ ftp://ftp.ilog.fr/pub/Users/haible/gnu/linebreak-0.1.tar.gz
+ But it's very complicated...
+
+
+Printing:
+- Add "page width" to wrap long lines.
+- Win32: use a font dialog for setting 'printfont'. Can reuse the code for
+ the 'guifont' dialog, put the common code in a separate function.
+- Win32: when 'printfont' is empty use 'guifont'.
+- Unix: Use some dialog box to do the obvious settings (paper size, printer
+ name, portrait/landscape, etc).
+- Win32: add options to print dialog. Patch from Vipin Aravind.
+- PostScript: only works for 7-bit ASCII and EBCDIC. Should support
+ different 'encoding' values somehow.
+- Allow specifying the paper size, instead of using a standard size. Same
+ units as for the margins.
+- Support right-to-left text?
+8 Make the foreground color darkening function preserve the hue of the
+ color.
+
+
+Syntax highlighting:
+- Patch to add highlighting for whitespace. (Tom Schumm, 2003 Jul 5)
+ use the patch that keeps using HLF_8 if HLF_WS has not
+ been given values.
+ Add section in help files for these highlight groups?
+8 Make ":syn off" use 'runtimepath' instead of $VIMRUNTIME. (Gary Johnson)
+ Should do the same for ":syn on" and ":syn manual".
+8 Support "containedin" argument for ":syn include", so that the defined
+ cluster can be added to existing syntax items.
+8 C syntax: Don't highlight {} as errors inside () when used like this:
+ "({ something })", often used in GCC code.
+8 When editing a new file without a name and giving it a name (by writing
+ it) and 'filetype' is not set, detect the filetype. Avoid doing it for
+ ":wq file".
+8 Make conversion to HTML faster (Write it in C or pre-compile the script).
+9 There is still a redraw bug somewhere. Probably because a cached state is
+ used in a wrong way. I can't reproduce it...
+7 Make syntax keyword table configurable. Set number of bits used with
+ ":syn clear [hashbits]", so that we don't need to reallocate the table.
+ minimal 4 bits, maximal 16. (Campbell)
+7 Be able to change only the background highlighting. Useful for Diff* and
+ Search highlighting.
+8 Allow the user to add items to the Syntax menu sorted, without having to
+ change this for each release.
+8 Add a "matchcontains" for regions: items contained in the start or end
+ pattern, but not in the body.
+8 Add a "keepend-contained" argument: Don't change the end of an item this
+ one is contained in. Like "keepend" but specified on the contained item,
+ instead of the containing item.
+8 For keywords, allow to define the size of the hash table with ":syn
+ clear". Change KHASH_ defines into variables stored in buffer struct.
+ Use something else than linear linked list from the hash table. (Campbell)
+8 cpp.vim: In C++ it's allowed to use {} inside ().
+8 Some syntax files set 'iskeyword'. When switching to another filetype
+ 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.
+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.
+ Or highlight the matching paren when the cursor is on one.
+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.
+8 Add @spell cluster to String and Comment groups for many languages. Will
+ allow spell checking. (Fleiner)
+8 When listing syntax items, try to sort the keywords alphabetically. And
+ re-insert the [] if possible.
+8 Make it possible to use color of text for Visual highlight group (like for
+ the Cursor).
+8 "fg" and "bg" don't work in an xterm. Get default colors from xterm with
+ an ESC sequence. Ideas in: ~/vim/patches/vikas.xtermcolors .
+8 Make it possible to only highlight a sub-expression of a match. Like
+ using "\1" in a ":s" command.
+8 Support for deleting syntax items:
+ :syn keyword cTodo remove this
+ :syn match cTodo remove "pattern"
+ :syn region cString remove start="this" end="that"
+8 Add possibility to sync on something else, when the syncing in one way
+ doesn't find match. For HTML: When no {script} is found, try looking for
+ a '<'. (Fleiner)
+7 Replace the synchronizing method with a state machine specification?
+ Should be able to start at any line in the file, search forwards or
+ backwards, and use the result of matching a pattern.
+7 Use parsing like awk, so that e.g., a ( without a matching ) can be
+ detected.
+8 Make it possible to use "inverted" highlighting, invert the original
+ character. For Visual mode. (xterm-selection already does this).
+8 Highlight non-printable characters with "SpecialChar", linked to
+ "Special". Display them with the digraph characters, if possible.
+7 Add "DefaultFG" and "DefaultBG" for the colors of the menu. (Martin
+ Dalecki has a patch for Motif)
+8 Highlight the clipboard-selection with a highlight group.
+8 Be able to reset highlighting to its original (default) values.
+7 Be able to write current highlighting to a file as commands, similar to
+ ":mkvimrc".
+8 Improve c.vim:
+ - Add check for unterminated strings, with a variable to switch it on:
+ "c_strict_ansi".
+ - Detect unbalanced "#endif". Requires looking back a long way...
+8 Add an option to restrict the updating of syntax highlighting to the
+ current line while in Insert mode.
+8 When guessing value of 'background', the syntax file has already been
+ loaded (from the .gvimrc). After changing 'background', load it again?
+8 Add ":syn resync" command, to re-parse the whole file until the current
+ display position.
+8 Should support "me" offset for a region start pattern. To be used to
+ allow searching for the end pattern inside the match of the end pattern.
+ Example: syn region pikeXX start="([^{]" end=")" should work on "()".
+8 When using a regexp for "contains=", should delay matching with it until
+ redrawing happens. Set a flag when a group is added, check this flag when
+ highlighting starts.
+7 Add "semitrans": Add highlighting. E.g., make the text bold, but keep the
+ 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.
+8 Add spell checking. Use "ispell -a" somehow.
+ ~/vim/patches/wm_vim-5_4d.zip can be used as an example (includes ispell
+ inside Vim). Gautam Iyer has an example with "aspell". "engspchk" from
+ Charles Campbell is a good way. Support for approximate-regexps will help
+ (agrep http://www.tgries.de/agrep/).
+7 Command line completion for ":find" should search in 'path'.
+8 Add more command line completion for :syntax.
+8 Add more command line completion for :highlight.
+8 Add more command line completion for :sign.
+7 Should find a better way to parse the :syntax and :highlight commands.
+ Use tables or lists that can be shared by parsing for execution and
+ completion?
+8 Add ColorSchemePost autocommand event, so that scripts can set up their
+ highlighting. (Salman Halim)
+7 Add a few sets of colors (e.g. Borland Turbo C one). With a menu to
+ select one of the sets.
+8 Add offsets to sub-matches: "\(a*\) *"he=e1-1
+ 'e' is end of match 'e1' is end of sub-match 1, 's2' is start of submatch
+ 2, etc.
+8 In Insert mode, when there are typeahead characters, postpone the
+ highlighting (for "." command).
+8 Syncing on comments isn't 100% correct when / / lines mix with / * and * /.
+ For example: What about a line that starts with / / and contains * /?
+8 Ignore / * and * / inside strings, when syncing.
+7 Build a few more syntax files from the file "/usr/share/misc/vgrindefs":
+ ISP, LDL, Icon, ratfor. And check "nedit/source/highlight.c".
+6 Add possibility to have background color continue until the right edge of
+ the window. Useful for comment blocks and function headings. (Rogall)
+- Make it possible to add "contains" items for all items in a group. Useful
+ when extending an already existing syntax file.
+- Add line-continuation pattern for non-syncing items too?
+- Add possibility to highlight specific columns (for Fortran). Or put a
+ line in between columns (e.g. for 'textwidth').
+ Patch to add 'hlcolumn' from Vit Stradal, 2004 May 20.
+- Add possibility to highlight the whole line, including the right margin
+ (for comment blocks).
+- Add 'hlmatch' option: List of flags:
+ 'c': highlight match for character under the cursor.
+ 'b': highlight the previous (, and its match.
+ 'a': highlight all text from the previous ( until its match.
+ Also for {}, <>, etc.?
+ 'e': highlight all braces without a match (slow?)
+ OR: add an argument "cursor" to the syntax command, which means that the
+ region/match/keyword is only highlighted when the cursor is on it.
+ (Campbell)
+ Or do it like Elvis: define text objects and how to highlight them around
+ the cursor. (Iain Truskett)
+7 Make it possible to use all words in the tags files as Keyword.
+ Can also be done with a script (but it's slow).
+7 Make it possible to call a ":" command when a match is found. Should
+ allow for adding keywords from the text (e.g. variables that are set).
+ And allows for sections with different highlighting.
+7 Add highlight group for commandline: "Commandline". Make sure it
+ highlights the command line while typing a command, and any output from
+ messages. And external commands?
+8 Make a version that works like less, but with highlighting: read stdin for
+ text, exit at end of file, don't allow editing, etc. moreim? lessim?
+7 SpecialKey highlighting overrules syntax highlighting. Can't give an
+ unprintable char another color. Would be useful for ^M at end of line.
+
+
+Built-in script language:
+8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and
+ ":let &t_xx =". Useful for making portable mappings.
+8 Allow range for ":exec". Pass it on to the executed command. (Webb)
+8 exists("&&option") tests if 'option' is actually implemented. Useful for
+ 'shellslash', for example.
+7 Be able to call a function while passing on a variable number of
+ arguments:
+ :function Foo(abc, ...)
+ : call Bar(a:abc, a:*)
+ Charles Campbell has a patch for this
+8 Have a look at VSEL. Would it be useful to include? (Bigham)
+8 Add ":fungroup" command, to group function definitions together. When
+ encountered, all functions in the group are removed. Suggest using an
+ obscure name to avoid name clashes. Require a ":fungroup END" in the same
+ sourced file? Assume the group ends at the end of the file. Handle
+ nested packages?
+ Alternative: Support packages. {package-name}:{function-name}().
+ Packages are loaded automatically when first used, from
+ $VIMRUNTIME/packages (or use a search path).
+7 Make globpath() also work with "**" and upwards search. (Brian Medley)
+7 Pre-parse or compile Vim scripts into a bytecode.
+ 1. Put the bytecode with the original script, with an ":if
+ has('bytecode')" around it, so that it's only used with a Vim that
+ supports it. Update the code with a command, can be used in an
+ autocommand.
+ 2. Use a ".vic" file (like Python use .pyc). Create it when writing a
+ .vim file. Problem: distribution.
+ 3. Use a cache directory for each user. How to recognize which cached
+ file belongs to a sourced script?
+7 Add "n" flag to search() function, just like searchpair(). (Alexey
+ Marinichev)
+8 Add ":n" to fnamemodify(): normalize path, remove "../" when possible.
+ Aric Blumer has a patch for this.
+7 Add argument to winwidth() to subtract the space taken by 'foldcolumn',
+ signs and/or 'number'.
+8 Add functions:
+ multibyteidx(string, idx) Byte index in multi-byte character.
+ Patch by Ilya Sher, 2004 Feb 25
+ menuprop({name}, {idx}, {what})
+ Get menu property of menu {name} item {idx}.
+ menuprop("", 1, "name") returns "File".
+ menuprop("File", 1, "n") returns "nmenu
+ File.Open..." argument.
+ Patch by Ilya Sher, 2004 Apr 22
+ mapname({idx}, mode) return the name of the idx'th mapping.
+ Patch by Ilya Sher, 2004 Mar 4.
+ match({pat}, {string} [,start] [,count]) get index of count'th match
+ Patch by Ilya Sher, 2004 Mar 31
+ sprintf(format, arg, ..) How to prevent a crash???
+ mousex() mousey() get position of mouse pointer (patch by Ross
+ Presser)
+ attributes() return file protection flags "drwxrwxrwx"
+ mkdir(dir) Create directory
+ copy(from, to) Copy a file
+ perl(cmd) call Perl and return string
+ shorten(fname) shorten a file name, like home_replace()
+ input(prompt, complete) like input() but do specified completion
+ inputrl() like input() but right-to-left
+ virtualmode() add argument to obtain whether "$" was used in
+ Visual block mode.
+ tagtype(tag) get type of tag (also checks if it exists)
+ getacp() Win32: get codepage (Glenn Maynard)
+ tr(expr, from, to) translate chars (Patch from Ron Aaron, Apr 8
+ 2004)
+ find() find file in 'path' (patch from Johannes
+ Zellner 2001 Dec 20)
+ realname() Get user name (first, last, full)
+ user_fullname() patch by Nikolai Weibull, Nov
+ 3 2002)
+ getfperm() file permissions, in form "rwxrwxrwx"
+ (patch from Nikolai Weibull 2003 Jan 13)
+ getftype() "file", "dir", "link", "other"?
+ (patch from Nikolai Weibull 2003 Jan 13)
+ setbufline() set line in any buffer (patch from Yegappan
+ Lakshmanan, 2003 Jan 21)
+ getbufline() get line from any buffer
+ deletebufline() delete line in any buffer
+ appendbufline() append line in any buffer
+ winnr("$") Get number of windows. (patch from Nikolai
+ Weibull 2003 Jan 13) (another patch from
+ Yegappan Lakshmanan, 2003 Aug 31)
+ search() Add optional offset argument.
+ Add 'n' flag. (patch from Nikolai Weibull
+ 2003 Jan 13)
+ sort() Sort a newline-separated string. Also:
+ ":sort".
+ libcall() Allow more than one argument.
+ libcallext() Like libcall(), but using a callback function
+ to allow the library to execute a command or
+ evaluate an expression.
+ confirm() add "flags" argument, with 'v' for vertical
+ layout and 'c' for console dialog. (Haegg)
+ Flemming Madsen has a patch for the 'c' flag
+ (2003 May 13)
+ system({cmd}, {expr}) Filter {expr} through the shell command
+ {cmd} and return the result.
+ (Patch from Yegappan Lakshmanan)
+ raisewin() raise gvim window (see HierAssist patch for
+ Tcl implementation ~/vim/HierAssist/ )
+ gettext() Translate a message. (Patch from Yasuhiro
+ Matsumoto) How to get the messages into the
+ .po files?
+ strrep() Repeat a string (patch from Christophe Poucet,
+ 2003 Sep 12, also contains XX)
+ char2hex() convert char string to hex string. XX
+ hex2char() convert hex string to char string. XX
+7 Make bufname("'0") return the buffer name from mark '0. How to get the
+ column and line number? col("'0") currently returns zero.
+8 argc() returns 0 when using "vim -t tag". How to detect that no file was
+ specified in any way? To be able to jump to the last edited file.
+8 Pass the executable name to the Vim scripts in some way. As v:argv0?
+8 Add command arguments with three dashes, passed on to Vim scripts.
+8 When starting to source a vim script, delete all functions that it has
+ previously defined? Avoids using ":fun!" all the time.
+7 Add optional arguments to user functions:
+ :func myFunc(arg1, arg2, arg3 = "blah", arg4 = 17)
+6 User functions: Functions local to buffer "b:func()"?
+8 Add ":let var[{expr}] = {expr}". When past the end of "var" just ignore.
+8 The "= register should be writable, if followed by the name of a variable,
+ option or environment variable.
+8 ":let &option" should list the value of the option.
+7 Add synIDlist(), making the whole list of syntax items on the
+ stack available (separated with '\n').
+8 Add autocommand-event for when a variable is changed:
+ :au VarChanged {varname} {commands}
+8 Add "has("gui_capable")", to check if the GUI can be started.
+8 Add possibility to use variables like registers: characterwise (default),
+ linewise (when ending in '\n'), blockwise (when ending in '\001'). reg0,
+ rega, reg%, etc. Add functions linewise({expr}), blockwise({expr}) and
+ charwise({expr}).
+7 Make it possible to do any command on a string variable (make a buffer
+ with one line, containing the string). Maybe add an (invisible) scratch
+ buffer for this?
+ result = scratch(string, command)
+ result = apply(string, command)
+ result = execute(string, command)
+ "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)
+7 Persistent variables: "p:var"; stored in viminfo file and sessions files.
+7 Include support for arrays? Patch from Robert Webb.
+ This is restricted to fixed-size arrays indexed by number. Better: Use
+ associative arrays: a[5] = 3, a["some"] = 'x'. Implement by translating
+ into ordinary variables: a[5] is "-a-5", a["some"] is "a-some", a[5][6] is
+ "a-5-6". But how to do array assignment and concatenation?
+ Alternative: use dictionaries, like Python.
+
+
+Robustness:
+8 This pattern in syntax/java.vim causes a recursive call of regmatch():
+ syn match javaStringError +"\([^"\\]\|\\.\)*$+
+ A long line with a " in it can cause a crash when it runs out of stack
+ space (on systems where this isn't caught). How can we catch this for
+ more systems?
+
+
+Performance:
+8 Loading plugins takes startup time. Only load the part that is used to
+ trigger the rest, and load the rest when it's needed?
+8 Turn b_syn_ic and b_syn_containedin into b_syn_flags.
+9 Loading menu.vim still takes quite a bit of time. How to make it faster?
+8 in_id_list() takes much time for syntax highlighting. Cache the result?
+7 setpcmark() shifts the jumplist, this takes quite a bit of time when
+ jumping around. Instead use an index for the start?
+8 When displaying a space with only foreground highlighting, it's the same
+ as a space without attributes. Avoid displaying spaces for the "~" lines
+ when starting up in a color terminal.
+8 Avoid alloc() for scratch buffer use, esp. in syntax.c. It's very slow on
+ Win16.
+9 Setting GUI options in the console (e.g., 'guifont') should not cause a
+ redraw.
+8 Profiling shows that in_id_list() is used very often for C code. Can this
+ function be improved?
+8 For an existing file, the page size of the swap file is always the
+ default, instead of using the block size of the device, because the swap
+ file is created only after setting the block size in mf_open(). How can
+ this be improved?
+8 Set default for 'ttyscroll' to half a screen height? Should speed up
+ MS-DOS version. (Negri)
+7 C syntax highlighting gets a lot slower when adding a region for folding
+ from { to }. (Charles Campbell) Inserting a "{" is very slow. (dman)
+7 HTML syntax highlighting is slow for long lines. Try displaying
+ 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 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>.
+ Only used compiled code when timestamp matches the file stat.
+ 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?
+7 Include turbo_loader patches, speeding up reading a file?
+ Speed up reading a file by reading it into a fixed-size buffer, creating
+ the list of indexes in another buffer, and then copying the result into a
+ memfile block with two copies. Then read the next block into another
+ fixed-size buffer, create the second list of indexes and copy text from
+ the two blocks to the memfile block.
+7 do_cmdline(): Avoid that the command line is copied to allocated memory
+ and freed again later all the time. For while loops, and for when called
+ with an argument that can be messed with.
+ Generic solution: Make a struct that contains a pointer and a flag that
+ indicates if the pointer should be freed when replaced.
+7 Check that the file size is not more than "sizeof(long)".
+- Further improve finding mappings in maphash[] in vgetorpeek()
+8 Syntax highlighting is slow when deleting lines. Try in
+ $VIMRUNTIME/filetype.vim.
+- "out of memory" after deleting (1,$d) and changing (:%s/^/> /) a lot of
+ lines (27000) a few times. Memory fragmentation?
+- Have a look at how pdksh does memory allocation (alloc.c). (Dalecki)
+- Do profiling on:
+ - :g/pat/normal cmd
+ - 1000ii<Esc>
+ - deleting 10Mbyte worth of lines (netscape binary)
+ - "[i" and "[d" (Yegappan Lakshmanan)
+ - ":g/^/m0" on a 450Kbyte file. And the "u".
+ - highlighting "~/vim/test/longline.tex", "~/vim/test/scwoop.tcl" and
+ "~/vim/test/lockup.pl".
+ - loading a syntax file to highlight all words not from a dictionary.
+ - editing a vim script with syntax highlighting on (loading vim.vim).
+7 Screen updating can be further improved by only redrawing lines that were
+ changed (and lines after them, when syntax highlighting was used, and it
+ changed).
+ - On each change, remember start and end of the change.
+ - When inserting/deleting lines, remember begin, end, and line count.
+- Use macros/duarte/capicua for profiling. Nvi 1.71 is the fastest!
+- When using a file with one long line (1Mbyte), then do "$hhhh", is still
+ very slow. Avoid calling getvcol() for each "h"?
+- Executing a register, e.g. "10000@@" is slow, because ins_typebuf has to
+ move the previous commands forward each time. Pass count from
+ normal_cmd() down to do_execreg().
+- Repeating insert "1000i-<Esc>" displays --INSERT-- all the time, because of
+ the <Esc> at the end. Make this work faster (disable redrawing).
+- Avoid calls to plines() for cursor line, use w_cline_height.
+- After ":set nowrap" remove superfluous redraw with wrong hor. offset if
+ cursor is right of the screen.
+8 Make CTRL-C on Unix generate a signal, avoid using select() to check for a
+ CTRL-C (it's slow).
+
+
+Code size:
+8 GUI: When NO_CONSOLE is defined, more code can be excluded.
+- Put getline() and cookie in a struct, so only one argument has to be
+ passed to do_cmdline() and other functions.
+8 Make a GUI-only version for Unix?
+8 In buf_write _() isn't needed when setting errmsg, do it once when using
+ it.
+7 When compiling with a GUI-only version, the code for cterm colors can be
+ left out.
+8 When compiled with a GUI-only version, the termcap entries for terminals
+ can be removed.
+8 Can the check for libelf in configure.in be removed?
+
+
+Messages:
+8 When using ":q" in a changed file, the error says to "add !". Add the
+ command so that beginners understand it: "use :q!".
+8 For 'verbose' level 12 prints commands from source'ed files. How to skip
+ lines that aren't executed? Perhaps move the echoing to do_cmdline()?
+8 Use 'report' for ":bdel"? (Krishna) To avoid these messages when using a
+ script.
+8 "vim --version" output goes to stderr, should be stdout. Can all output
+ from messages using printf() go to stdout?
+- Delete message after new command has been entered and have waited for key.
+ Perhaps after ten seconds?
+- Make message history available in "msg" variables: msg1, msg2, .. msg9.
+9 Check handling of overwriting of messages and delays:
+ Very wrong: errors while redrawing cause endless loop.
+ When switching to another file and screen scrolls because of the long
+ message and return must be typed, don't scroll the screen back before
+ redrawing.
+7 Add an option, which is a regexp, that disables warning messages which
+ match that regexp (Tsirkin).
+8 When address range is wrong you only get "Invalid range". Be a bit more
+ specific: Negative, beyond last line, reverse range? Include the text.
+8 Make it possible to ignore errors for a moment ('errorignore'?). Another
+ option to switch off giving error messages ('errorquiet'?). Also an option
+ not to give any messages ('quiet')? Or ":quiet on", ":quiet off".
+ Careful: For a severe error (out of memory), and when the user starts
+ typing, error messages must be switched back on.
+ Also a flag to ignore error messages for shell commands (for mappings).
+- Option to set time for emsg() sleep. Interrupt sleep when key is typed?
+ sleep before second message?
+8 In Ex silent mode or when reading commands from a file, what exactly is
+ not printed and what is? Check ":print", ":set all", ":args", ":vers",
+ etc. At least there should be no prompt. (Smulders) And don't clear the
+ screen when reading commands from stdin. (Kendall)
+ --> Make a difference between informative messages, prompts, etc. and
+ error messages, printing text, etc.
+8 Window should be redrawn when resizing at the hit-enter prompt.
+ Also at the ":tselect" prompt. Find a generic solution for redrawing when
+ a prompt is present (with a callback function?).
+
+
+Screen updating:
+7 Add a string to the 'display' option to make CTRL-E and CTRL-Y scroll one
+ screen line, also if this means the first line doesn't start with the
+ first character (like what happens with a single line that doesn't fit).
+- screen_line():
+ - insert/delete character stuff.
+ - improve delete rest of line (spaces at end of line).
+- When moving or resizing window, try to avoid a complete redraw (esp. when
+ dragging the status line with the mouse).
+- When 'lazyredraw' set, don't echo :ex commands? Need a flag to redraw when
+ waiting for a character.
+8 Add a ":refresh [winnr]" command, to force updating a window. Useful from
+ an event handler where ":normal" can't be used. Also useful when
+ 'lazyredraw' is set in a mapping.
+7 Make 'list' and 'linebreak' work together.
+7 Add "nbsp" in 'listchars'? Patch from David Blanchet, 2003 Jul 28.
+
+
+Scrolling:
+8 Add "zm" 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
+ windows.
+7 Add 'scrollbind' feature to make the offset of one window with the next
+ one equal to the window height. When editing one file in both windows it
+ looks like each window displays a page of the buffer.
+- Allow scrolling by dragging with the mouse (grab a character and move it
+ up/down). Like the "hand" in Acrobat reader. Use Alt-LeftMouse for this?
+ (Goldfarb)
+- Add command to execute some commands (search, vertical movements) in all
+ bound windows.
+- Add 'search' option to 'scrollopt' to allow 'scrollbind' windows to
+ be bound by regexp searches
+- Add "z>" and "z<": scroll sideways one screenfull. (Campbell)
+- Add option to set the number of lines when not to scroll, instead of the
+ fixed number used now (for terminals that scroll slow with a large number
+ of lines but not with a single line).
+
+
+Autoconf:
+8 Should use acconfig.h to define prototypes that are used by autoheader.
+8 Some compilers don't give an error for "-OPT:Olimit" but a warning. (Webb)
+ Add a check for the warning, so that "Olimit" can be added automatically?
+- Autoconf: Use @datadir@ for the system independent files. Make sure the
+ system dependent and system independent files are separated. (Leitner).
+- Add autoconf check for waitpid()/wait4().
+- Remove fcntl() from autoconf, all systems have it?
+- Set default for 'dictionary', add search for dictionary to autoconf.
+
+
+Perl interface:
+8 Rename typemap file to something else?
+7 Add patch from Benoit Cerrina to integrate Vim and Perl functions better.
+ Now also works for Ruby (2001 Nov 10)
+7 Make buffers accessed as Perl arrays. (Clark)
+7 Make it possible to compile with non-ANSI C?
+6 Tcl/Tk has the "load" command: load a shared library (.so or .dll).
+
+
+Shared libraries:
+6 Add support for loading shared libraries, and calling functions in it.
+ :libload internal-name libname
+ :libunload internal-name
+ :liblist
+ :libcall internal-name function(arg1, arg2, ...)
+ :libcall function(arg1, arg2, ...)
+ libcall() can have only one integer or String argument at the moment.
+6 Have a look on how Perl handles loading dynamic libraries.
+
+
+Tags:
+8 Add a command to jump to a certain kind of tag. Allow the user to specify
+ values for the optional fields. E.g., ":tag size type=m".
+8 Add a function that returns the line in the tags file for a matching tag.
+ Can be used to extract more info (class name, inheritance, etc.) (Rico
+ Hendriks)
+7 Count before CTRL-]: jump to N'th match
+8 Scope arguments for ":tag", e.g.: ":tag class:cPage open", like Elvis.
+8 When output of ":tselect" is long, getting the more-prompt, should be able
+ to type the tag number directly.
+7 Add a tag-select window. Works like ":cwindow". (Michal Malecki)
+7 Add the possibility to use the "-t {tag}" argument multiple times. Open a
+ window for each tag.
+7 Make output of ":tselect" a bit nicer. Use highlighting?
+7 Highlight the "tag 1 of >2" message. New highlight group, or same as "hit
+ bottom" search message.
+7 When using ":tag" at the top of the tag stack, should add another entry,
+ so CTRL-T can bring you back to where you are now AND to where you were
+ before the previous ":tag" command. (Webb)
+7 When using CTRL-] on someClass::someMethod, separate class from method and
+ use ":ta class:someClass someMethod".
+ Include C++ tags changes (Bertin). Change "class::func" tag into "func"
+ with "class=class"? Docs in oldmail/bertin/in.xxx.
+7 Add ":tagargs", to set values for fields:
+ :tagargs class:someclass file:version.c
+ :tagargs clear
+ These are then the default values (changes the order of priority in tag
+ matching).
+7 Support for "gtags" and "global"? With ":rtag" command?
+ There is an example for how to do this in Nvi.
+ Or do it like Elvis: 'tagprg' and 'tagprgonce' options. (Yamaguchi)
+ The Elvis method is far more flexible, do it that way.
+7 Support "col:99" extra field, to position the cursor in that column. With
+ a flag in 'cpoptions' to switch it off again.
+7 Better support for jumping to where a function or variable is used. Use
+ the id-utils, with a connection to "gid" (Emacs can do it too). Add
+ ":idselect", which uses an "ID" database (made by "mkid") like "tselect".
+7 Add 'taglistfiles' option, show file name and type when listing matching
+ tags name with CTRL-D completion. Patch from Yegappan Lakshmanan.
+
+
+Security:
+- nothing at the moment
+
+
+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
+ files are selected and using "Edit with single Vim" the directory isn't
+ changed. At least change directory when the path is the same for all
+ files. Perhaps just use the path of the first file or use the longest
+ common part of the path.
+8 Add font argument to set the lfCharSet. (Bobcik)
+8 Somehow automatically detect the system language and set $LANG, so that
+ gettext and menus work.
+8 Could keep console open to run multiple commands, to avoid the need to hit
+ return in every console.
+ Also: Look at how Emacs does runs external commands:
+ http://www.cs.washington.edu/homes/voelker/ntemacs.html.
+8 Need a separate PopUp menu for modeless selection. Need two new commands:
+ Copy selection to clipboard, Paste selection (as typed text).
+8 Support copy/paste for other file formats. At least HTML, perhaps RTF.
+ Add "copy special" and "paste special" commands?
+7 Use different default colors, to match the current Windows color scheme.
+ Sys_WindowText, Sys_Window, etc. (Lionel Schaffhauser)
+7 Use <C-Tab> to cycle through open windows (e.g., the find dialog).
+7 <Esc> should close a dialog.
+7 Keep the console for external commands open. Don't wait for a key to be
+ hit. Re-open it when the user has closed it anyway. Or use a prepended
+ command: ":nowait {cmd}", or ":quiet", which executes {cmd} without any
+ prompts.
+7 Should be able to set an option so that when you double click a file that
+ is associated with Vim, you can either get a new instance of Vim, or have
+ the file added into an already running Vim.
+7 The "-P" argument only works for the current codepage. Use wide
+ functions to find the window title.
+
+
+GUI:
+8 Add GTK 2.3 file dialog support. Patch by Grahame Bowland, 2004 Mar 15,
+ but it doesn't use "initdir" or "dflt".
+8 Make inputdialog() work for Photon, Amiga, RiscOS.
+- <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.
+8 Implement ":tearoff" for other systems than Win32 GUI.
+6 Implement ":untearoff": hide a torn-off menu.
+8 When using the scrollbar to scroll, don't move the cursor position. When
+ moving the cursor: scroll to the cursor position.
+9 Make <S-Insert> paste from the clipboard by default. (Kunze)
+7 Menu local to a buffer, like mappings. Or local to a filetype?
+8 In Buffers menu, add a choice whether selecting a buffer opens it in the
+ current window, splits the window or uses ":hide".
+8 Dragging the mouse pointer outside of a Vim Window should make the text
+ scroll. Return a value from gui_send_mouse_event() to the machine
+ specific code to indicate the time in which the event should be repeated.
+8 Make it possible to ignore a mouse click when it's used to give Vim (gvim)
+ window focus. Also when a mouse click is used to bring a window to front.
+8 Make the split into system independent code and system specific code more
+ explicit. There are too many #ifdefs in gui.c.
+ If possible, separate the Vim code completely from the GUI code, to allow
+ running them in separate processes.
+8 Support a background bitmap. Useful for marking a column. Patch from
+ Heather Downs (GTK) and Vince Negri (Win32).
+7 X11: Support cursorColor resource and "-cr" argument.
+8 X11 (and others): CTRL-; is not different from ';'. Set the modifier mask
+ to include CTRL for keys where CTRL produces the same ASCII code.
+7 Add some code to handle proportional fonts? Need to draw each character
+ separately (like xterm). Also for when a double-width font is not exactly
+ double-width. (Maeda)
+8 Should take font from xterm where gvim was started (if no other default).
+8 Selecting font names in X11 is difficult, make a script or something to
+ select one. Martin Dalecki has a font selector for Motif, but it needs a
+ bit more work.
+7 Motif: use the menu font consistently. Patch from Martin Dalecki 2002 Jan
+ 11.
+8 Visual highlighting should keep the same font (bold, italic, etc.).
+8 Add flag to 'guioptions' to not put anything in the clipboard at all?
+8 Should support a way to use keys that we don't recognize yet. Add a
+ command that adds entries to special_keys somehow. How do we make this
+ portable (X11, Win32, ..)?
+7 Add a flag to 'guioptions' that tells not to remove inactive menu items.
+ For systems where greying-out or removing menu items is very slow. The
+ menu items would remain visibly normally, but not do anything.
+7 Add ":minimize" and ":maximize", which iconize the window and back.
+ Useful when using gvim to run a script (e.g. 2html.vim).
+7 X11: Is it possible to free allocated colors, so that other programs can
+ use them again? Otherwise, allow disabling allocating the default colors.
+ Or allocate an own colormap (check UAE). With an option to use it. For
+ the commandline, "-install" is mostly used for X11 programs.
+7 Add command line argument for "gvim" not to start the GUI. Sort of the
+ inverse of "vim -g". (Vikas)
+7 Should support multi-column menus.
+- Should add option for where to put the "Help" menu: like Motif at the far
+ right, or with the other menus (but still at the right).
+- Add menu item to "Keep Insert mode".
+8 ":mkgvimrc" command, that includes menus.
+6 Big change: Move GUI to separate program "vimgui", to make startup of vim a
+ lot faster, but still be able to do "vim -g" or ":gui".
+7 More explicit mouse button binding instead of 'mousemodel'?
+7 Add option to set the position of the window on the screen. 'windowpos',
+ which has a value of "123,456": <x>,<y>.
+ Or add a command, like ":winsize"?
+7 Add toolbar for more GUIs.
+8 Make it possible to use "amenu icon=BuiltIn##", so that the toolbar item
+ name can be chosen free.
+7 Make it possible to put the toolbar on top, left, right and/or bottom of
+ the window? Allows for softkey-like use.
+6 Separate the part of Vim that does the editing from the part that runs the
+ GUI. Communicate through a pseudo-tty. Vim starts up, creates a
+ pty that is connected to the terminal. When the GUI starts, the pty is
+ reconnected to the GUI process. When the GUI stops, it is connected to
+ the terminal again. Also use the pty for external processes, it looks
+ like a vt100 terminal to them. Vim uses extra commands to communicate GUI
+ things.
+7 Motif: For a confirm() dialog <Enter> should be ignored when no default
+ button selected, <Esc> should close the dialog.
+- Motif steals <F10> from us, to pop up menus with the keyboard. How do we
+ get it back if we want it?
+- Motif: add 3D shading for the menu entries? Patch from Martin Dalecki.
+- Paste in Insert mode should not do autowrap etc. Or maybe this should be
+ changeable with an option?
+- Put a nice picture in the icon (but how do we do that?).
+7 When using a pseudo-tty Vim should behave like some terminal (vt52 looks
+ simple enough). Terminal codes to/from shell should be translated.
+- Would it be useful to be able to quit the GUI and go back to the terminal
+ where it was started from?
+7 Support "-visual <type>" command line argument.
+
+
+VMS:
+- Improvement: rewrite term/TTY handling.
+- Improvement: create VMS GTK runtime libraries on OpenVMS 7.1-2 (today GTK
+ works just on 7.3).
+
+
+Autocommands:
+9 Make sure that side effects of autocommands are handled correctly. Don't
+ execute autocommands when a buffer or window is halfway some changes.
+ Move all apply_autocmds() calls to a higher level where needed.
+8 Add ScriptReadCmd event: used to load remote Vim scripts, e.g.
+ "vim -u http://mach/path/vimrc".
+8 Use another option than 'updatetime' for the CursorHold event. The two
+ things are unrelated for the user (but the implementation is more
+ difficult).
+8 Also trigger CursorHold in Insert mode?
+7 Add autocommand event for when a buffer cannot be abandoned. So that user
+ can define the action taking (autowrite, dialog, fail) based on the kind
+ of file. (Yakov Lerner) Or is BufLeave sufficient?
+8 Can't use ":normal" in CursorHold autocommands. Make the CursorHold event
+ insert a special key code, and call the autocommand functions from a
+ higher level, so that vgetc() isn't used recursively.
+8 Autocommands should not change registers. And marks? And the jumplist?
+ And anything else?
+8 Autocommand for when modified files have been found, when getting input
+ focus again (e.g., FileChangedFocus).
+ Check when: getting focus, jumping to another buffer, ...
+8 Add autocommands, user functions and user commands to ":mkvimrc".
+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.
+6 Add KeymapChanged event, so that the effects of a different keymap can be
+ handled (e.g., other font) (Ron Aaron)
+7 Add a way to skip an autocommand if going from one *.c file to another *.c
+ file.
+7 When trying to open a directory, don't load the file but trigger an
+ autocommand event OpenDirectory.
+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)
+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)
+7 Add something to break the autocommands for the current event, and for
+ what follows. Useful for a "BufWritePre" that wants to avoid writing the
+ file.
+8 When editing "tt.gz", which is in DOS format, 'fileformat' stays at
+ "unix", thus writing the file changes it. Somehow detect that the read
+ command used dos fileformat. Same for 'fileencoding'.
+8 Add buffer-local autocommands? Reduces overhead for autocommands that
+ trigger often (inserting a character, switching mode).
+ :au Event <buffer> do-something
+ E.g.:
+ :au BufEnter <buffer> menu enable ...
+ :au BufLeave <buffer> menu disable ...
+ Patch from Yakov Lerner, including test (2004 Jan 7).
+- Add events to autocommands:
+ Error - When an error happens
+ NormalEnter - Entering Normal mode
+ InsertEnter - Entering Insert mode
+ ReplaceEnter - Entering Replace mode
+ CmdEnter - Entering Cmdline mode
+ VisualEnter - Entering Visual mode
+ CmdUndefined - Like FuncUndefined but for user commands.
+ *Leave - Leaving the mode
+ SearchPost - After doing a search command (e.g. to do "M")
+ 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
+ putting a [+] in the window title or checking out the
+ file from CVS).
+ BufFirstChange - When making a change, when 'modified' is set. Can be
+ used to do a :preserve for remote files.
+ BufChange - after a change was made. Set some variables to indicate
+ the position and number of inserted/deleted lines, so
+ that marks can be updated. HierAssist has patch to add
+ BufChangePre, BufChangePost and RevertBuf. (Shah)
+ WinResized - When a window has been resized
+ VimResized - When the Vim window has been resized (SIGWINCH)
+ patch from Yakov Lerner, 2003 July 24.
+- Add autocommand to be executed every so many seconds? For writing the
+ file now and then ('autosave').
+ *'autosave'* *'as'* *'noautosave'* *'noas'*
+ 'autosave' 'aw' number (default 0)
+ Automatically write the current buffer to file N seconds after the
+ last change has been made and when |'modified'| is still set.
+ Default: 0 = do not autosave the buffer.
+ Alternative: have 'autosave' use 'updatetime' and 'updatecount' but make
+ them save the file itself besides the swapfile.
+
+
+Insert mode completion/expansion:
+8 When there is no word before the cursor but something like "sys." complete
+ with "sys.". Works well for C and similar languages.
+9 ^X^L completion doesn't repeat correctly. It uses the first match with
+ the last added line, instead of continuing where the last match ended.
+ (Webb)
+8 The code has become too complex. Redesign it, or at least add proper
+ comments.
+8 Add option to set different behavior for Insert mode completion:
+ - ignore/match case
+ - different characters than 'iskeyword'
+8 Add expression-expansion, so that the user can define his own kind of
+ completion. Patch from Taro Muraoka, 2003 Aug 26.
+8 Add a command to undo the completion, go back to the original text.
+8 Use the class information in the tags file to do context-sensitive
+ completion. After "foo." complete all member functions/variables of
+ "foo". Need to search backwards for the class definition of foo.
+ Should work for C++ and Java.
+ Even more context would be nice: "import java.^N" -> "io", "lang", etc.
+7 When expanding $HOME/dir with ^X^F keep the $HOME (with an option?).
+7 Add CTRL-X command in Insert mode like CTRL-X CTRL-N, that completes WORDS
+ instead of words.
+8 Add CTRL-X CTRL-R: complete words from register contents.
+8 Add completion of previously inserted texts (like what CTRL-A does).
+ Requires remembering a number of insertions.
+8 Add 'f' flag to 'complete': Expand file names.
+ Also apply 'complete' to whole line completion.
+- Make it possible to search include files in several places. Use the
+ 'path' option? Can this be done with the dictionary completion (use
+ wildcards in the file name)?
+- Make CTRL-X CTRL-K do a binary search in the dictionary (if it's sorted).
+- Speed up CTRL-X CTRL-K dictionary searching (don't use a regexp?).
+- Set a mark at the position where the match was found (file mark, could
+ be in another file).
+- Add CTRL-A command in CTRL-X mode: show all matches.
+- Make CTRL-X CTRL-L use the 'complete' option?
+- Add command in CTRL-X mode to add following words to the completed string
+ (e.g. to complete "Pointer->element" with CTRL-X CTRL-P CTRL-W CTRL-W)
+- CTRL-X CTRL-F: Use 'path' to find completions.
+- CTRL-X CTRL-F: Option to use forward slashes on MS-Windows?
+- CTRL-X CTRL-F: Don't replace "$VIM" with the actual value. (Kelly)
+8 Add option 'isexpand', containing characters when doing expansion (so that
+ "." and "\" can be included, without changing 'iskeyword'). (Goldfarb)
+ Also: 'istagword': characters used for CTRL-].
+ When 'isexpand' or 'istagword' are empty, use 'iskeyword'.
+- Allow listing all matches in some way (and picking one from the list).
+
+
+Command line editing:
+7 Add commands (keys) to delete from the cursor to the end of the command
+ line.
+8 Custom completion of user commands can't use the standard completion
+ functions. Add a hook to invoke a user function that returns the type of
+ completion to be done: "file", "tag", "custom", etc.
+- Add flags to 'whichwrap' for command line editing (cursor right at end of
+ lines wraps to start of line).
+- Make editing the command line work like Insert mode in a single-line view
+ on a buffer that contains the command line history. But this has many
+ disadvantages, only implement it when these can be solved. Elvis has run
+ into these, see remarks from Steve (~/Mail/oldmail/kirkendall/in.00012).
+ - Going back in history and editing a line there would change the history.
+ Would still need to keep a copy of the history elsewhere. Like the
+ cmdwin does now already.
+ - Use CTRL-O to execute one Normal mode command. How to switch to normal
+ mode for more commands? <Esc> should cancel the command line. CTRL-T?
+ - To allow "/" and "= need to recursively call getcmdline(), overwrite the
+ cmdline. But then we are editing a command-line again. How to avoid
+ that the user gets confused by the stack of command lines?
+ - Use edit() for normal cmdline editing? Would have to integrate
+ getcmdline() into edit(). Need to solve conflicts between Insert mode
+ and Command-line mode commands. Make it work like Korn shell and tcsh.
+ Problems:
+ - Insert: completion with 'wildchar'
+ - Insert: use cmdline abbreviations
+ - Insert: CTRL-D deletes indent instead of listing matches
+ - Normal: no CTRL-W commands
+ - Normal: no ":" commands?
+ - Normal: allow Visual mode only within one line.
+ - where to show insert/normal mode message? Change highlighting of
+ character in first column?
+ - Implementation ideas:
+ - Set "curwin" and "curbuf" to the command line window and buffer.
+ - curwin->w_topline is always equal to curwin->w_cursor.lnum.
+ - never set 'number', no folding, etc. No status line.
+ - sync undo after entering a command line?
+ - use NV_NOCL flag for commands that are not allowed in Command-line
+ Mode.
+
+
+Command line completion:
+8 Change expand_interactively into a flag that is passed as an argument.
+8 With command line completion after '%' and '#', expand current/alternate
+ file name, so it can be edited. Also with modifiers, such as "%:h".
+8 When completing command names, either sort them on the long name, or list
+ them with the optional part inside [].
+7 Completion of network shares, patch by Yasuhiro Matsumoto.
+7 Completion of ":map x ": fill in the current mapping, so that it can be
+ edited. (Sven Guckes)
+7 Add completion for when entering an expression after CTRL-R= and "=.
+ (Servatius Brandt)
+- For 'wildmenu': Simplify "../bar" when possible.
+- When using <Up> in wildmenu mode for a submenu, should go back to the
+ current menu, not the first one. E.g., ":emenu File.Save<Up>".
+8 For ":find" and ":sfind" expand files found in 'path'.
+8 Add cmdline completion for the ":debug" command.
+8 When using backtick expansion, the external command may write a greeting
+ message. Add an option or commands to remove lines that match a regexp?
+7 When listing matches of files, display the common path separately from the
+ file names, if this makes the listing shorter. (Webb)
+- Add command line completion for ":ilist" and friends, show matching
+ identifiers (Webb).
+8 Add command line completion for "old value" of a command. ":args <key>"
+ would result in the current list of arguments, which you can then edit.
+7 Add command line completion with CTRL-X, just like Insert mode completion.
+ Useful for ":s/word/xx/".
+- Add command to go back to the text as it was before completion started.
+ Also to be used for <Up> in the command line.
+- Add 'wildlongest' option: Key to use to find longest common match for
+ command line completion (default CTRL-L), like 'wildchar'. (Cregut)
+ Also: when there are several matches, show them line a CTRL-D.
+- Add completion for Environment variables: ":echo $SH<Tab>" -> "$SHELL".
+
+
+Command line history:
+- 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
+ completely resulted from one mapping.
+- When using ":browse", also put the resulting edit command in the history,
+ so that it can be repeated. (Demirel)
+
+
+Insert mode:
+9 When 'autoindent' is set, hitting <CR> twice, while there is text after
+ the cursor, doesn't delete the autoindent in the resulting blank line.
+ (Rich Wales) This is Vi compatible, but it looks like a bug. Rich has a
+ suggestion for a patch to fix this.
+8 When using CTRL-O in Insert mode, then executing an insert command
+ "a" or "i", should we return to Insert mode after <Esc>? (Eggink)
+ Perhaps it can be allowed a single time, to be able to do
+ "<C-O>10axyz<Esc>". Nesting this further is confusing.
+ ":map <F2> 5aabc<Esc>" works only once from Insert mode.
+7 Use CTRL-G <count> to repeat what follows. Useful for inserting a
+ character multiple times or repeating CTRL-Y.
+7 Make ":startinsert" command work directly for functions and scripts?
+ Also make it possible to append (it's difficult at end of line).
+ And add ":startreplace" (patch by Charles Campbell, 2004 Jan 9,
+ http://www.erols.com/astronaut/vim/index.html#Patch)
+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
+ character. This is useful for CTRL-U, CTRL-W, delete and backspace, and
+ also for characters that wrap to the next line.
+ Also: be able to undo CTRL-R (insert register).
+ Possibly use 'backspace'="whole" for a mode where at least a <CR> that
+ inserts autoindent is undone by a single <BS>.
+- Use CTRL-G in Insert mode for an extra range of commands, like "g" in
+ Normal mode.
+- Make 'paste' work without resetting other options, but override their
+ value. Avoids problems when changing files and modelines or autocommands
+ are used.
+- When typing CTRL-V and a digit higher than 2, only expect two digits.
+- Insert binary numbers with CTRL-V b.
+- Make it possible to undo <BS>, <C-W> and <C-U>. Bash uses CTRL-Y.
+
+
+'cindent', 'smartindent':
+8 Wrong indent for ":" after a method with line break in arguments:
+ Foo::Foo (int one,
+ int two)
+ : something(4)
+ {}
+8 Wrong indent for ":" after a method with multiple lines:
+ Foo::Foo (int one, int two)
+ : something(4),
+ somethingelse(3)
+ {}
+9 Too much indent for "lulu": (Uwe Zeisberger)
+ int main ()
+ {
+ if (lala)
+ do
+ ++(*lolo);
+ while (lili
+ && lele);
+ lulu;
+ }
+9 Function gets extra indent: (Jamax)
+ void function(int param) {
+ if (false)
+ return;
+ }
+9 brace not indented correctly:
+ case 'c': if (cond)
+ {
+ Should align with "if" in case statement.
+7 Allow aligning a closing ")" with the line above, instead of the matching
+ "(": (Riehm) if (asdfasdf &&
+ asdf
+ )
+8 Java: Inside an anonymous class, after an "else" or "try" the indent is
+ too small. (Vincent Bergbauer)
+8 In C++ it's possible to have {} inside (): (Kirshna)
+ func(
+ new String[] {
+ "asdf",
+ "asdf"
+ }
+ );
+7 Separate "(0" option into inside/outside a function (Zellner):
+ func(
+ int x) // indent like "(4"
+ {
+ if (a
+ && b) // indent like "(0"
+8 Strange problem with this code, "hello" is indented wrong: (Gary Holloway)
+ main() { char foo[] = "/*";
+ /* This is a comment; the indentation of C
+ * source below this comment gets messed up due to the string above.
+ */
+ hello
+9 Using "{" in a comment: (Helmut Stiegler)
+ if (a)
+ {
+ if (b)
+ {
+ // {
+ }
+ } <-- this is indented incorrect
+9 Wrong indent for cino=(4, removing the (void) fixes it: (Zellner)
+ (void) MyFancyFunction(
+ argument);
+- Make smartindenting configurable. Add 'sioptions', e.g. '#' setting the
+ indent to 0 should be switched on/off.
+7 Support ANSI style function header, with each argument on its own line.
+- "[p" and "]p" should use 'cindent' code if it's on (only for the first
+ line).
+- 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
+ code), unless the line starts with "*".
+- Don't use 'cindent' when doing formatting with "gq"?
+- When formatting a comment after some text, insert the '*' for the new line
+ (indent is correct if 'cindent' is set, but '*' doesn't get inserted).
+8 When 'comments' has both "s1:/*,mb:*,ex:*/" and "s1:(*,mb:*,ex:*)", the
+ 'x' flag always uses the first match. Need to continue looking for more
+ matches of "*" and remember all characters that could end the comment.
+- For smartindent: When typing 'else' line it up with matching 'if'.
+- 'smartindent': allow patterns in 'cinwords', for e.g. TeX files, where
+ lines start with "\item".
+- Support this style of comments (with an option): (Brown)
+ /* here is a comment that
+ is just autoindented, and
+ nothing else */
+- Add words to 'cinwords' to reduce the indent, e.g., "end" or "fi".
+7 Use Tabs for the indent of starting lines, pad with spaces for
+ continuation lines. Allows changing 'tabstop' without messing up the
+ indents.
+ And/or: Add option to copy indent as-is, without changing spaces to tabs.
+ also for 'autoindent'. 'keeptabs': when set don't change the tabs and
+ spaces used for indent, when the indent remains the same or increases.
+
+
+Java:
+8 Can have {} constructs inside parens. Include changes from Steve
+ Odendahl?
+8 Recognize "import java.util.Vector" and use $CLASSPATH to find files for
+ "[i" commands and friends.
+- For files found with 'include': handle "*" in included name, for Java.
+ (Jason)
+- How to make a "package java.util" cause all classes in the package to be
+ searched? Also for "import java.util.*". (Mark Brophy)
+
+
+'comments':
+8 When formatting C comments that are after code, the "*" isn't repeated
+ like it's done when there is no code. And there is no automatic wrapping.
+ Recognize comments that come after code. Should insert the comment leader
+ when it's "#" or "//".
+7 When using "comments=fg:--", Vim inserts three spaces for a new line.
+ When hitting a TAB, these spaces could be removed.
+7 The 'n'esting flag doesn't do the indenting of the last (rightmost) item.
+6 Make strings in 'comments' option a RE, to be able to match more
+ complicated things. (Phillipps) Use a special flag to indicate that a
+ regexp is used.
+8 Make the 'comments' option with "/* * */" lines only repeat the "*" line
+ when there is a "/*" before it? Or include this in 'cindent'?
+
+
+Virtual edit:
+8 Make the horizontal scrollbar work to move the text further left.
+7 Add a mode where the cursor is only allowed to go one character after the
+ end of the line?
+7 Allow specifying it separately for Tabs and beyond end-of-line?
+
+
+Text objects:
+8 Add test script for text object commands "aw", "iW", etc.
+7 Add text object for current search pattern: "a/" and "i/". Makes it
+ possible to turn text highlighted for 'hlsearch' into a Visual area.
+8 Add "gp" and "gP" commands: insert text and make sure there is a single
+ space before it, unless at the start of the line, and after it, unless at
+ the end of the line or before a ".".
+7 Add objects with backwards extension? Use "I" and "A". Thus "2dAs"
+ deletes the current and previous sentence. (Jens Paulus)
+7 Add "g{" and "g}" to move to the first/last character of a paragraph
+ (instead of the line just before/after a paragraph as with "{" and "}").
+8 Add "a'" and 'a"': a single or double quoted string. (Tim Chase)
+ Patch from Taro Muraoka (2003 Dec 16).
+6 Ignore comment leaders for objects. Make "das" work in reply-email.
+5 Make it possible to use syntax group matches as a text object. For
+ example, define a "ccItem" group, then do "da<ccItem>" to delete one.
+ Or, maybe just define "dai", delete-an-item, to delete the syntax item the
+ cursor is on.
+
+
+Select mode:
+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
+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'.
+ - Catch mouse events in ex_getln.c. Also shift-cursor, etc., like in
+ normal_cmd().
+ - remember start and end of selection in cmdline_info.
+ - Typing text replaces the selection.
+
+
+Visual mode:
+- When dragging the Visual selection with the mouse and 'scrolloff' is zero,
+ behave like 'scrolloff' is one, so that the text scrolls when the pointer
+ is in the top line.
+8 When using "I" or "A" in Visual block mode, short lines do not get the new
+ text. make it possible to add the text to short lines too, with padding
+ where needed.
+7 With a Visual block selected, "2x" deletes a block of double the width,
+ "3y" yanks a block of triple width, etc.
+7 When selecting linewise, using "itext" should insert "text" at the start
+ of each selected line.
+8 What is "R" supposed to do in Visual mode?
+8 Make Visual mode local to the buffer. Allow changing to another buffer.
+ When starting a new Visual selection, remove the Visual selection in any
+ other buffer. (Ron Aaron)
+8 Support dragging the Visual area to drop it somewhere else. (Ron Aaron,
+ Ben Godfrey)
+7 Support dragging the Visual area to drop it in another program, and
+ receive dropped text from another program. (Ben Godfrey)
+7 With blockwise Visual mode and "c", "C", "I", "A", etc., allow the use of
+ a <CR>. The entered lines are repeated over the Visual area.
+7 CTRL-V :s should substitute only in the block, not to whole lines. (David
+ Young is working on this)
+7 Filtering a block should only apply to the block, not to the whole lines.
+ When the number of lines is increased, add lines. When decreased, padd with
+ spaces or delete? Use ":`<,`>" on the command line.
+8 After filtering the Visual area, make "gv" select the filtered text?
+ Currently "gv" only selects a single line, not useful.
+7 Don't move the cursor when scrolling? Needed when the selection should
+ stay the same. Scroll to the cursor at any movement command. With an
+ option!
+7 In Visual block mode, need to be able to define a corner on a position
+ that doesn't have text? Also: when using the mouse, be able to select
+ part of a TAB. Even more: Add a mode where the cursor can be on a screen
+ position where there is no text. When typing, add spaces to fill the gap.
+ Other solution: Always use curswant, so that you can move the cursor to
+ the right column, and then use up/down movements to select the line,
+ without changing the column.
+6 ":left" and ":right" should work in Visual block mode.
+7 For Visual mode: Command to do a search for the string in the marked area.
+ Only when fewer than two lines. Use "g/" and "gb". Patch from Yegappan
+ Lakshmanan.
+7 CTRL-I and CTRL-O should work in Visual mode, but only jump to marks in the
+ current buffer.
+7 CTRL-A and CTRL-X should increase/decrease all numbers in the Visual area.
+6 In non-Block mode, "I" should insert the same text in front of each line,
+ before the first non-blank, "gI" in column 1.
+6 In non-Block mode, "A" should append the same text after each line.
+6 ":'<,'>source" should read the selected lines and ":source" them.
+6 When in blockwise visual selection (CTRL-V), allow cursor to be placed
+ right of the line. Could also allow cursor to be placed anywhere on a TAB
+ or other special character.
+6 Add commands to move selected text, without deselecting.
+
+
+More advanced repeating commands:
+- 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 "." 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.
+ "c2." will repeat the last but one change?
+ Also: keep history of Normal mode commands, add command to list the history
+ and/or pick an older command.
+- History stack for . command? Use "g." command.
+
+
+Mappings and Abbreviations:
+8 Let ":verbose map xx" report where the mapping was set, just like with
+ ":verbose set".
+8 When "0" is mapped (it is a movement command) this mapping should not be
+ used after typing another number, e.g. "20l". (Charles Campbell)
+ Is this possible without disabling the mapping of the following command?
+8 Should mapping <C-A> and <C-S-A> both work?
+7 ":abbr b byte", append "b " to an existing word still expands to "byte".
+ This is Vi compatible, but can we avoid it anyway?
+8 ":verbose map" could show the script where the mapping was defined.
+ m_script_ID can be used.
+8 To make a mapping work with a prepended "x to select a register, store the
+ last _typed_ register name and access it with "&.
+8 Add ":amap", like ":amenu".
+8 Add ":cab!", abbreviations that only apply to Command-line mode and not to
+ entering search strings.
+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.
+7 ":verbose map" should display where a mapping was defined, like ":verbose
+ set".
+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.
+7 Add a mapping that works always, for remapping the keyboard.
+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
+ example, for a mouse escape sequence:
+ :mapexp <Esc>{\([0-9]*\),\([0-9]*\); H\1j\2l
+- 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?
+- Make it possible to undo all the commands from a mapping, including a
+ trailing unfinished command, e.g. for ":map K iX^[r".
+- 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
+ mappings off for :unab and :unmap.
+6 When using mappings in Insert mode, insert characters for incomplete
+ mappings first, then remove them again when a mapping matches. Avoids
+ that characters that are the start of some mapping are not shown until you
+ hit another character.
+- Add optional <Number> argument for mappings:
+ :map <Number>q ^W^W<Number>G
+ :map <Number>q<Number>t ^W^W<Number1-1>G<Number2>l
+ :map q<Char> :s/<Char>/\u\0/g
+ Or implicit:
+ :map q <Register>d<Number>$
+- Add mappings for replace mode: ":rmap". How do we then enter mappings for
+ non-replace Insert mode?
+- Add separate mappings for Visual-character/block/line mode?
+6 Alias for Normal mode commands, works like :substitute? Would allow
+ mappings with arguments.
+- Add 'mapstop' command, to stop recursive mappings.
+- List mappings that have a raw escape sequence both with the name of the key
+ for that escape sequence (if there is one) and the sequence itself.
+- List mappings: Once with special keys listed as <>, once with meta chars as
+ <M-a>, once with the byte values (octal?). Sort of "spell mapping" command?
+- When entering mappings: Add the possibility to enter meta keys like they
+ are displayed, within <>: <M-a>, <~@> or <|a>.
+- Allow multiple arguments to :unmap.
+- Command to show keys that are not used and available for mapping
+ ":freekeys".
+- Allow any character except white space in abbreviations lhs (Riehm).
+
+
+Incsearch:
+- Add a limit to the number of lines that are searched for 'incsearch'?
+- When no match is found and the user types more, the screen is redrawn
+ anyway. Could skip that. Esp. if the line wraps and the text is scrolled
+ up every time.
+- Temporarily open folds to show where the search ends up. Restore the
+ folds when going to another line.
+- When incsearch used and hitting return, no need to search again in many
+ cases, saves a lot of time in big files. (Slootman wants to work on this?)
+ When not using special characters, can continue search from the last match
+ (or not at all, when there was no match). See oldmail/webb/in.872.
+- With incsearch, use CTRL-N/CTRL-P to go to next/previous match, some other
+ key to copy matched word to search pattern (Alexander Schmid).
+
+
+Searching:
+8 Add a mechanism for recursiveness: "\(([^()]*\@@[^()]*)\)\@r". \@@ stands
+ for "go recursive here" and \@r marks the recursive atom.
+item stack to allow matching (). One side is "push X on
+ the stack if previous atom matched". Other side is "match with top of
+ stack, pop it when it matches". Use "\@pX" and "\@m"?
+ Example: \((\@p).\{-}\@m\)*
+7 Add an option to accept a match at the cursor position. Also for
+ search(). (Brett)
+7 Add pattern item to use properties of Unicode characters. In Perl it's
+ "\p{L}" for a letter. See Regular Expression Pocket Reference.
+7 When 'rightleft' is set, the search pattern should be displayed right to
+ left as well? See patch of Dec 26. (Nadim Shaikli)
+8 Would it be possible to allow ":23,45/pat/flags" to search for "pat" in
+ lines 23 to 45? Or does this conflict with Ex range syntax?
+8 Allow identical pairs in 'matchpairs'. Restrict the search to the current
+ line.
+7 Allow longer pairs in 'matchpairs'. Use ~/vim/macros/matchit.vim as an
+ example.
+8 Make it possible to define the character that "%" checks for in
+ #if/#endif. For nmake it's !if/!endif.
+- For "%" command: set hierarchy for which things include other things that
+ should be ignored (like "*/" or "#endif" inside /* */).
+ Also: use "%" to jump from start to end of syntax region and back.
+ Alternative: use matchit.vim
+8 "/:/e+1" gets stuck on a match at the end of the line. Do we care?
+8 A pattern like "\([^a]\+\)\+" takes an awful long time. Recognize that
+ the recursive "\+" is meaningless and optimize for it.
+ This one is also very slow on "/* some comment */": "^\/\*\(.*[^/]\)*$".
+7 Recognize "[a-z]", "[0-9]", etc. and replace them with the faster "\l" and
+ "\d".
+7 Add a way to specify characters as hex, octal or <C-M> form. Could be
+ \%1ax, \%200o and \%<C-M>. Also \%1234u for multi-byte chars.
+8 Flags that apply to the whole pattern.
+ This works for all places where a regexp is used.
+ Add "\q" to not store this pattern as the last search pattern?
+8 Add an argument after ":s/pat/str/" for a range of matches. For example,
+ ":s/pat/str/#3-4" to replace only the third and fourth "pat" in a line.
+8 Add an option not to use 'hlsearch' highlighting for ":s" and ":g"
+ commands. (Kahn) It would work like ":noh" is used after that command.
+ Also: An extra flag to do this once, and a flag to keep the existing
+ search pattern.
+- Add \%h{group-name}; to search for a specific highlight group.
+ Add \%s{syntax-group}; to search for a specific syntax group.
+- Support Perl regexp. Use PCRE (Perl Compatible RE) package. (Shade)
+ Or translate the pattern to a Vim one.
+ Don't switch on with an option for typed commands/mappings/functions, it's
+ too confusing. Use "\@@" in the pattern, to avoid incompatibilities.
+7 Add POSIX regexp, like Nvi, with 'extended' option? It's like very-magic.
+- Remember flags for backreferenced items, so that "*" can be used after it.
+ Check with "\(\S\)\1\{3}". (Hemmerling)
+- Add flags to search command (also for ":s"?):
+ i ignore case
+ I use case
+ p use Perl regexp syntax (or POSIX?)
+ v use Vi regexp syntax
+ f forget pattern, don't keep it for "n" command
+ F remember pattern, keep it for "n" command
+ Perl uses these too:
+ e evaluate the right side as an expression (Perl only)
+ m multiple line expression (we don't need it)
+ o compile only once (Perl only)
+ s single line expression (we don't need it)
+ x extended regexp (we don't need it)
+ When used after ":g" command, backslash needed to avoid confusion with the
+ following command.
+ Add 'searchflags' for default flags (replaces 'gdefault').
+- Add command to display the last used substitute pattern and last used
+ pattern. (Margo) Maybe make it accessible through a register (like "/
+ for search string)?
+7 Use T-search algorithm, to speed up searching for strings without special
+ characters. See C't article, August 1997.
+- Add 'fuzzycase' option, so that case doesn't matter, and '-' and '_' are
+ equivalent (for Unix filenames).
+- Add 'v' flag to search command: enter Visual mode, with the matching text
+ as Visual area. (variation on idea from Bertin)
+- Searching: "/this//that/" should find "that" after "this".
+- Add global search commands: Instead of wrapping at the end of the buffer,
+ they continue in another buffer. Use flag after search pattern:
+ a for the next file in the argument list
+ f for file in the buffer list
+ w for file edited in a window.
+ e.g. "/pat/f". Then "n" and "N" work through files too. "f" flag also for
+ ":s/pat/foo/f"??? Then when 'autowrite' and 'hidden' are both not set, ask
+ before saving files: "Save modified buffer "/path/file"? (Yes/Hide/No
+ Save-all/hide-All/Quit) ".
+- ":s/pat/foo/3": find 3rd match of "pat", like sed. (Thomas Koehler)
+- Special characters in patterns:
+ Inside []:
+ \012 octal character
+ \0x1a hex character
+ \0<BS> \0<Esc>: special character
+7 When searching with 'n' give message when getting back where the search
+ first started. Remember start of search in '/ mark.
+7 Add option that scrolls screen to put cursor in middle of screen after
+ search always/when off-screen/never. And after a ":tag" command. Maybe
+ specify how many lines below the screen causes a redraw with the cursor in
+ the middle (default would be half a screen, zero means always).
+6 Support multiple search buffers, so macros can be made without side
+ effects.
+7 From xvim: Allow a newline in search patterns (also for :s, can delete
+ newline). Add BOW, EOW, NEWL, NLORANY, NLBUTANY, magic 'n' and 'r', etc.
+ [not in xvim:] Add option to switch on matches crossing ONE line boundary.
+7 Add ":iselect", a combination of ":ilist" and ":tselect". (Aaron)
+ Also ":dselect".
+
+
+Undo:
+- When accidentally hitting "R" instead of Ctrl-R, further Ctrl-R is not
+ possible, even when typing <Esc> immediately. (Grahn) Also for "i", "a",
+ etc. Postpone saving for undo until something is really inserted?
+8 When Inserting a lot of text, it can only be undone as a whole. Make undo
+ sync points at every line or word. Could recognize the start of a new
+ word (white space and then non-white space) and backspacing.
+ Can already use CTRL-G u, but that requires remapping a lot of things.
+8 Make undo more memory-efficient: Compare text before and after change,
+ only remember the lines that really changed.
+7 Add undo for a range of lines. Can change these back to a previous
+ version without changing the rest of the file. Stop doing this when a
+ change includes only some of these lines and changes the line count. Need
+ to store these undo actions as a separate change that can be undone.
+7 Add an undo tree: When making a change, instead of clearing any future
+ undo (thus redo) info, make a new branch. How to navigate through the
+ undo tree?
+- For u_save() include the column number. This can be used to set '[ and '].
+ And in the future the undo can be made more efficient (Webb).
+- In out-of-memory situations: Free allocated space in undo, and reduce the
+ number of undo levels (with confirmation).
+- Instead of [+], give the number of changes since the last write: [+123].
+ When undoing to before the last write, change this to a negative number:
+ [-99].
+- With undo with simple line delete/insert: optimize screen updating.
+- When executing macro's: Save each line for undo only once.
+- Store undo info in a file that survives until the next edit. Then it's
+ possible to undo to before the current editing session. Combined with
+ viminfo?
+- When doing a global substitute, causing almost all lines to be changed,
+ undo info becomes very big. Put undo info in swap file??
+
+
+Buffer list:
+8 Add patch from Charles Campbell to have ":0file!" remove the name of the
+ current buffer. (2003 June 17)
+7 Command to execute a command in another buffer: ":inbuf {bufname} {cmd}".
+ Also for other windows: ":inwin {winnr} {cmd}". How to make sure that
+ this works properly for all commands, and still be able to return to the
+ current buffer/window? E.g.: ":inbuf xxx only".
+8 Add File.{recent_files} menu entries: Recently edited files.
+ Ron Aaron has a plugin for this: mru.vim.
+8 Unix: Check all uses of fnamecmp() and fnamencmp() if they should check
+ inode too.
+7 Add another number for a buffer, which is visible for the user. When
+ creating a new buffer, use the lowest number not in use. (or the highest
+ number in use plus one?)
+7 Offer some buffer selection from the command line? Like using ":ls" and
+ asking for a buffer number. (Zachmann)
+- When starting to edit a file that is already in the buffer list, use the
+ file name argument for the new short file name. (Webb)
+- Add an option to make ":bnext" and ":bprev" wrap around the end of the
+ buffer list. Also for ":next" and ":prev"?
+7 Add argument to ":ls" which is a pattern for buffers to list.
+ E.g. ":ls *.c". (Thompson)
+7 Add expansion of buffer names, so that "*.c" is expanded to all buffer
+ names. Needed for ":bdel *.c", ":bunload *.c", etc.
+8 Support for <afile> where a buffer name is expected.
+8 Some commands don't use line numbers, but buffer numbers. '$'
+ 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?
+
+
+Swap (.swp) files:
+8 If writing to the swap file fails, should try to open one in another
+ directory from 'dir'. Useful in case the file system is full and when
+ there are short file name problems.
+8 Also use the code to try using a short file name for the backup and swap
+ file for the Win32 and Dos 32 bit versions.
+8 When a file is edited by root, add $LOGNAME to know who did su.
+8 When the edited file is a symlink, try to put the swap file in the same
+ dir as the actual file. Adjust FullName(). Avoids editing the same file
+ twice (e.g. when using quickfix). Also try to make the name of the backup
+ file the same as the actual file?
+ Use the code for resolve()?
+7 Store the options 'fileencoding', 'fileformat', etc. in the swapfile,
+ because they change what will be written to the file. Requires adding
+ another block to the swapfile.
+7 When using 64 bit inode numbers, also store the top 32 bits. Add another
+ field for this, using part of bo_fname[], to keep it compatible.
+7 When editing a file on removable media, should put swap file somewhere
+ else. Use something like 'r' flag in 'viminfo'. 'diravoid'?
+ Also: Be able to specify minimum disk space, skip directory when not
+ enough room.
+7 Add a configure check for which directory should be used: /tmp, /var/tmp
+ or /var/preserve.
+- Add an option to create a swap file only when making the first change to
+ the buffer. (Liang) Or only when the buffer is not read-only.
+- Add option to set "umask" for backup files and swap files (Antwerpen).
+ 'backupumask' and 'swapumask'? Or 'umaskback' and 'umaskswap'?
+- When editing a readonly file, don't use a swap file but read parts from the
+ original file. Also do this when the file is huge (>'maxmem'). We do
+ need to load the file once to count the number of lines? Perhaps keep a
+ cached list of which line is where.
+
+
+Viminfo:
+7 Can probably remove the code that checks for a writable viminfo file,
+ because we now do the chown() for root, and others can't overwrite someone
+ else's viminfo file.
+8 Add argument to keep the list of buffers when Vim is started with a file
+ name. (Schild)
+8 Keep the last used directory of the file browser (File/Open menu).
+8 Remember the last used register for "@@".
+8 Remember a list of last accessed files. To be used in the
+ "File.Open Recent" menu. Default is to remember 10 files or so.
+ Also remember which files have been read and written. How to display
+ this?
+7 Also store the ". register (last inserted text).
+7 Make it possible to store buffer names in viminfo file relative to some
+ directory, to make them portable over a network. (Aaron)
+6 Store a snapshot of the currently opened windows. So that when quitting
+ Vim, and then starting again (without a file name argument), you see the
+ same files in the windows. Use ":mksession" code?
+- Make marks present in .viminfo usable as file marks: Display a list of
+ "last visited files" and select one to jump to.
+
+
+Modelines:
+8 Before trying to execute a modeline, check that it looks like one (valid
+ option names). If it's very wrong, silently ignore it.
+ Ignore a line that starts with "Subject: ".
+- When an option value is coming from a modeline, do not carry it over to
+ another edited file? Would need to remember the value from before the
+ modeline setting.
+- Allow setting a variable from a modeline? Only allow using fixed strings,
+ no function calls, to avoid a security problem.
+- Allow ":doauto BufRead x.cpp" in modelines, to execute autocommands for
+ .cpp files.
+- Support the "abbreviate" command in modelines (Kearns). Careful for
+ characters after <Esc>, that is a security leak.
+- Add option setting to ask user if he wants to have the modelines executed
+ or not. Same for .exrc in local dir.
+
+
+Options:
+8 Make ":mksession" store buffer-specific options for the specific buffer.
+8 With ":mksession" always store the 'sessionoptions' option, even when
+ "options" isn't in it. (St-Amant)
+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 When using ":mksession", also store a command to reset all options to
+ their default value, before setting the options that are not at their
+ default value.
+8 Should ":mksession" restore the current directory when writing the
+ session, or the directory where the session file is? Probably need a word
+ in 'sessionoptions' to make a choice:
+ "curdir" (cd to current directory when session file was generated)
+ "sessiondir" (cd to directory of session file)
+ "nodir" (don't cd at all)
+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.
+8 Add commands to save and restore an option, which also preserves the flag
+ that marks if the option was set. Useful to keep the effect of setting
+ 'compatible' after ":syntax on" has been used.
+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)
+7 Add plugins for formatting. Should be able to make a choice depending on
+ the language of a file (English/Korean/Japanese/etc.).
+
+
+External commands:
+8 When filtering text, redirect stderr so that it can't mess up the screen
+ and Vim doesn't need to redraw it. Also for ":r !cmd".
+4 Set separate shell for ":sh", piping "range!filter", reading text "r !ls"
+ and writing text "w !wc". (Deutsche) Allow arguments for fast start (e.g.
+ -f).
+4 Allow direct execution, without using a shell.
+4 Run an external command in the background. But how about I/O in the GUI?
+ Careful: don't turn Vim into a shell!
+4 Add feature to disable using a shell or external commands.
+
+
+Multiple Windows:
+7 "vim -oO file ..." use both horizontal and vertical splits.
+8 Add CTRL-W T: go to the top window in the column of the current window.
+ And CTRL-W B: go to bottom window.
+7 Use CTRL-W <Tab>, like alt-tab, to switch between buffers. Repeat <Tab>
+ to select another buffer (only loaded ones?), <BS> to go back, <Enter> to
+ select buffer, <Esc> to go back to original buffer.
+7 Add a 'winfixwidth' option, similar to 'winfixheight'.
+6 Add an option to resize the shell when splitting and/or closing a window.
+ ":vsp" would make the shell wider by as many columns as needed for the new
+ window. Specify a maximum size (or use the screen size). ":close" would
+ shrink the shell by as many columns as come available. (Demirel)
+7 When starting Vim several times, instantiate a Vim server, that allows
+ communication between the different Vims. Feels like one Vim running with
+ multiple top-level windows. Esp. useful when Vim is started from an IDE
+ too. Requires some form of inter process communication.
+- Support a connection to an external viewer. Could call the viewer
+ automatically after some seconds of non-activity, or with a command.
+ Allow some way of reporting scrolling and cursor positioning in the viewer
+ to Vim, so that the link between the viewed and edited text can be made.
+
+
+Marks:
+8 When cursor is first moved because of scrolling, set a mark at this
+ position. (Rimon Barr) Use '-.
+8 Add a command to jump to a mark and make the motion inclusive. g'm and g`m?
+8 The '" mark is set to the first line, even when doing ":next" a few times.
+ Only set the '" mark when the cursor was really moved in a file.
+8 Make `` and '', which would position the new cursor position in the middle
+ of the window, restore the old topline (or relative position) from when
+ the mark was set.
+7 Make a list of file marks in a separate window. For listing all buffers,
+ matching tags, errors, etc. Normal commands to move around. Add commands
+ to jump to the mark (in current window or new window). Start it with
+ ":browse marks"?
+6 Add a menu that lists the Marks like ":marks". (Amerige)
+8 Make it possible to delete marks. Charles Campbell has a patch that does
+ this with the markclear() function (2004 Jan 9). And the ":delmark"
+ command (2004 Feb 9)
+7 For ":jumps", ":tags" and ":marks", for not loaded buffers, remember the
+ text at the mark. Highlight the column with the mark.
+7 Highlight each mark in some way (With "Mark" highlight group).
+ Or display marks in a separate column, like 'number' does.
+7 Use d"m to delete rectangular area from cursor to mark m (like Vile's \m
+ command).
+7 Try to keep marks in the same position when:
+ - replacing with a line break, like in ":s/pat/^M/", move marks after the
+ line break column to the next line. (Acevedo)
+ - inserting/deleting characters in a line.
+5 Include marks for start/end of the current word and section. Useful in
+ mappings.
+6 Add "unnamed mark" feature: Like marks for the ":g" command, but place and
+ unplace them with commands before doing something with the lines.
+ Highlight the marked lines somehow.
+
+
+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).
+- Use digraph table to tell Vim about the collating sequence of special
+ characters?
+8 Add command to remove (all) digraphs. (Brown)
+7 Support different sets of digraphs (depending on the character set?). At
+ least Latin1/Unicode, Latin-2, MS-DOS (esp. for Win32).
+
+
+Writing files:
+- In vim_rename(), should lock "from" file when deleting "to" file for
+ systems other than Amiga. Avoids problems with unexpected longname to
+ shortname conversion.
+8 write mch_isdevice() for Amiga, Mac, VMS, etc.
+8 When appending to a file, Vim should also make a backup and a 'patchmode'
+ file.
+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.
+ E.g., ":set patchmode=~/backups/*.orig". (Thomas)
+6 Add an option to prepend something to the backup file name. E.g., "#".
+ Or maybe allow a function to modify the backup file name?
+8 Only make a backup when overwriting a file for the first time. Avoids
+ losing the original when writing twice. (Slootman)
+7 On non-Unix machines, also overwrite the original file in some situations
+ (file system full, it's a link on an NFS partition).
+7 When editing a file, check that it has been change outside of Vim more
+ often, not only when writing over it. E.g., at the time the swap file is
+ flushed. Or every ten seconds or so (use the time of day, check it before
+ waiting for a character to be typed).
+8 When a file was changed since editing started, show this in the status
+ line of the window, like "[time]".
+ Make it easier to reload all outdated files that don't have changes.
+ Automatic and/or with a command.
+
+
+Substitute:
+8 Make it easier to replace in all files in the argument list. E.g.:
+ ":argsub/oldword/newword/". Works like ":argdo %s/oldword/newword/g|w".
+- :s///p prints the line after a substitution.
+- With :s///c replace \&, ~, etc. when showing the replacement pattern.
+8 With :s///c allow scrolling horizontally when 'nowrap' is effective.
+ Also allow a count before the scrolling keys.
+- Add number option to ":s//2": replace second occurrence of string? Or:
+ :s///N substitutes N times.
+- Add answers to ":substitute" with 'c' flag, used in a ":global", e.g.:
+ ":g/pat1/s/pat2/pat3/cg": 'A' do all remaining replacements, 'Q' don't do
+ any replacements, 'u' undo last substitution.
+7 Substitute in a block of text. Use {line}.{column} notation in an Ex
+ range, e.g.: ":1.3,$.5s" means to substitute from line 1 column 3 to the
+ last line column 5.
+5 Add commands to bookmark lines, display bookmarks, remove bookmarks,
+ operate on lines with bookmarks, etc. Like ":global" but with the
+ possibility to keep the bookmarks and use them with several commands.
+ (Stanislav Sitar)
+
+
+Mouse support:
+7 Win32: Add patch for 5-button mouse. (Michael Geddes 2001 Nov 26)
+8 Add 'o' flag to 'mouse'?
+7 Be able to set a 'mouseshape' for the popup menu.
+8 Add 'mouse' flag, which sets a behavior like Visual mode, but automatic
+ yanking at the button-up event. Or like Select mode, but typing gets you
+ out of Select mode, instead of replacing the text. (Bhaskar)
+7 Checkout sysmouse() for FreeBSD console mouse support.
+- Implement mouse support for the Amiga console.
+- Using right mouse button to extend a blockwise selection should attach to
+ the nearest corner of the rectangle (four possible corners).
+- Precede mouse click by a number to simulate double clicks?!?
+- When mouse click after 'r' command, get character that was pointed to.
+
+
+Crypt and security:
+8 Also crypt the swapfile, each block separately. Change mf_write() and
+ mf_read(). How to get b_p_key to these functions?
+7 Support a stronger encryption. Jason Holt implemented AES (May 6 2003).
+8 Lock all used memory so that it doesn't get swapped to disk (uncrypted).
+ Patch by Jason Holt, 2003 May 23.
+
+
+Argument list:
+6 Add command to put all filenames from the tag files in the argument list.
+ When given an argument, only use the files where that argument matches
+ (like `grep -l ident`) and jump to the first match.
+6 Add command to form an args list from all the buffers?
+
+
+Registers:
+8 Don't display empty registers with ":display". (Etienne)
+8 Make the # register writable, so that it can be restored after jumping
+ around in windows.
+8 Add put command that overwrites existing text. Should also work for
+ blocks. Useful to move text around in a table. Works like using "R ^R r"
+ for every line.
+6 When yanking into the unnamed registers several times, somehow make the
+ previous contents also available (like it's done for deleting). What
+ register names to use? g"1, g"2, etc.?
+- When appending to a register, also report the total resulting number of
+ lines. Or just say "99 more lines yanked", add the "more".
+- When inserting a register in Insert mode with CTRL-R, don't insert comment
+ leader when line wraps?
+- The ":@r" commands should take a range and execute the register for each
+ line in the range.
+- Add "P" command to insert contents of unnamed register, move selected text
+ to position of previous deleted (to swap foo and bar in " + foo")
+8 Should be able to yank and delete into the "/ register.
+ How to take care of the flags (offset, magic)?
+7 Add ! register, for shell commands. (patch from Grenie)
+
+Debug mode:
+7 Add something to enable debugging when a remote message is received.
+8 Add breakpoints for setting an option
+8 Add breakpoits for assigning to a variable.
+7 Add a watchpoint in the debug mode: An expression that breaks execution
+ when evaluating to non-zero.
+7 Store the history from debug mode in viminfo.
+7 Make the debug mode history available with histget() et al.
+
+
+Various improvements:
+8 Add ":rename" command: rename the file of the current buffer and rename
+ the buffer. Buffer may be modified.
+7 Add the MzScheme interface. Patch on http://iamphet.nm.ru/scheme/
+ (Sergey Khorev)
+6 In the quickfix window statusline add the command used to get the list of
+ errors, e.g. ":make foo", ":grep something *.c".
+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.
+7 Allow a window not to have a statusline. Makes it possible to use a
+ window as a buffer-tab selection.
+7 Add an invisible buffer which can be edited. For use in scripts that want
+ to manipulate text without changing the window layout.
+8 Add a command to revert to the saved version of file; undo or redo until
+ all changes are gone.
+8 Make 'statusline' local, so that each window can have a different value.
+ But should it also be local to a buffer? (Yegappan Lakshmanan has a patch,
+ 2002 feb 15)
+7 Add a ":cpfile", go in the other direction as ":cnfile".
+6 "vim -q -" should read the list of errors from stdin. (Gautam Mudunuri)
+8 In the gzip plugin, also recognize *.gz.orig, *.gz.bak, etc. Like it's
+ done for filetype detection. Patch from Walter Briscoe, 2003 Jul 1.
+8 Add "--remote-fail": When contacting the server fails, exit Vim.
+ Add "--remote-self": When contacting the server fails, do it in this Vim.
+ Overrules the default of "--remote-send" to fail and "--remote" to do it
+ in this Vim.
+8 When Vim was started without a server, make it possible to start one, as
+ if the "--servername" argument was given. ":startserver <name>"?
+8 No address range can be used before the command modifiers. This makes
+ them difficult to use in a menu for Visual mode. Accept the range and
+ have it apply to the following command.
+8 Add the possibility to set 'fileformats' to force a format and strip other
+ CR characters. For example, for "dos" files remove CR characters at the
+ end of the line, so that a file with mixed line endings is cleaned up.
+ To just not display the CR characters: Add a flag to 'display'?
+7 Add a "-@ filelist" argument: read file names from a file. (David Kotchan
+ has a patch for it)
+7 Some compilers give error messages in which the file name does not have a
+ path. Be able to specify that 'path' is used for these files.
+8 Add term entries for function keys on xterm with alt and ctrl (new in pl
+ 94). E.g., Control adds ";5" in "<Esc>[20;5~". Find a generic way to
+ prepend a modifier in console mode, to avoid having to specify each
+ individual modified key.
+ Steve Wall has a patch (2002 Mar 12) for adding function keys up to 37,
+ with modifiers.
+7 Xterm sends <Esc>O3F for <M-End>. Similarly for other <M-Home>, <M-Left>,
+ etc. Combinations of Alt, Ctrl and Shift are also possible. Recognize
+ these to avoid inserting the raw byte sequence, handle like the key
+ without modifier (unless mapped).
+8 Add ":breakdel *": delete all breakpoints.
+7 Support ":browse edit" in console, using explorer.vim?
+6 Add "gG": like what "gj" is to "j": go to the N'th window line.
+8 Add command like ":normal" that accepts <Key> notation like ":map".
+9 Support ACLs on more systems.
+7 Add ModeMsgVisual, ModeMsgInsert, etc. so that each mode message can be
+ highlighted differently.
+8 Allow using "**" as a wildcard in commands like ":next" and ":args".
+8 Provide a way to avoid wildcard expansion. Use double quotes, like in the
+ shell? :edit "my[file].txt" (currently works if there is no "myf.txt")
+7 Add a message area for the user. Set some option to reserve space (above
+ the command line?). Use an ":echouser" command to display the message
+ (truncated to fit in the space).
+7 Add %s to 'keywordprg': replace with word under the cursor. (Zellner)
+8 Support printing on Unix. Can use "lpansi.c" as an example. (Bookout)
+8 Add put command that replaces the text under it. Esp. for blockwise
+ Visual mode.
+7 Enhance termreponse stuff: Add t_CV(?): pattern of term response, use
+ regexp: "\e\[[>?][0-9;]*c", but only check just after sending t_RV.
+7 Add "g|" command: move to N'th column from the left margin (after wrapping
+ and applying 'leftcol'). Works as "|" like what "g0" is to "0".
+7 Add patch from Wall for this one ( ~/Mail/oldmail/wall/in.00019 ):
+ 'flipcase' variable: upper/lowercase pairs.
+ Insert comma's between pairs and allow a range, make it look like
+ 'isfname'. E.g. ":set flipcase=a-zA-Z,xX,23-33:143-153". The colon to
+ separate the from and to part is optional.
+7 Support setting 'equalprg' to a user function name.
+9 Add cursor-column highlighting. Enable it with 'cursorcolumn' option, set
+ highlighting with "CursorColumn" group. Useful for aligning text.
+ Also cursor-row highlighting.
+ Patch from Yasuhiro Matsumoto for underlining the cursor line, 2004 Mar 24.
+ Alternatie: when 'number' is set highlight the number of the current line.
+7 Highlight the characters after the end-of-line differently.
+7 When 'whichwrap' contains "l", "$dl" should join lines?
+8 Include a connection to an external program through a pipe? See patches
+ from Felbinger for a mathematica interface.
+ Or use emacs server kind of thing?
+8 Add an argument to configure to use $CFLAGS and not modify it? (Mooney)
+8 Enabling features is a mix of configure arguments and defines in
+ feature.h. How to make this consistent? Feature.h is required for
+ non-unix systems. Perhaps let configure define CONF_XXX, and use #ifdef
+ CONF_XXX in feature.h? Then what should min-features and max-features do?
+8 Add "g^E" and "g^Y", to scroll a screen-full line up and down.
+6 Add ":timer" command, to set a command to be executed at a certain
+ interval, or once after some time has elapsed. (Aaron)
+8 Add ":confirm" handling in open_exfile(), for when file already exists.
+8 Use confirm/dialog stuff to ask the user, when a file has changed outside
+ of Vim, if he wants to reload it. Triggered when focus gained, after
+ shell command, when entering another buffer, etc..
+ Also do this when editing a new file, and another application creates
+ the file before doing ":w" in Vim.
+ Also check if the file protection has changed. When checking a file into
+ RCS it is made read-only, when checking out it is made read-write.
+8 When quitting with changed files, make the dialog list the changed file
+ and allow "write all", "discard all", "write some". The last one would
+ then ask "write" or "discard" for each changed file. Patch in HierAssist
+ does something like this. (Shah)
+7 Use growarray for replace stack.
+7 Have a look at viH (Hellenic or Greek version of Vim). But a solution
+ outside of Vim might be satisfactory (Haritsis).
+3 Make "2d%" work like "d%d%" instead of "d2%"?
+8 Make "more" prompt accept command characters, like "hit-enter" prompt?
+ Or extend it with more commands, like "less": 'b' for back, 'j' for one
+ line down, etc.
+8 For the "--more--" prompt, support the 'b'ack command for more commands.
+ Possible implementation: Do it at a very low level, caching the lines that
+ are on the screen (with highlight attributes). Avoids that changes have
+ to be made for all functions that list something.
+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?
+- Keep a list of most recently used files for each window, use "[o" to go
+ back (older file) and "]n" to go forward (newer file) (like ^O and ^I for
+ jumps) (Webb). Use ":files" and ":ls" to list the files in history order.
+7 Add a history of recently accessed buffer. Maybe make "2 CTRL-^" jump to
+ the 2nd previously visited buffer, "3 CTRL-^" to the third, etc. Or use
+ "3 g CTRL-^" for this?
+7 Add an option to set the width of the 'number' column. Eight positions is
+ often more than needed. Or adjust the width to the length of the file?
+ Add patch that adds 'numberlen' option. (James Harvey)
+ Other patch with min and max from Emmanuel Renieris (2002 Jul 24)
+ Other patch without an option by Gilles Roy (2002 Jul 25)
+- 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
+- Add <window-99>, like <cword> but use filename of 99'th window.
+7 Add a way to change an operator to always work characterwise-inclusive
+ (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.
+- 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
+ call "play newbeep.au").
+- Add option to show the current function name in the status line. More or
+ less what you find with "[[k", like how 'cindent' recognizes a function.
+ (Bhatt).
+- "[r" and "]r": like "p" and "P", but replace instead of insert (esp. for
+ blockwise registers).
+- Add 'timecheck' option, on by default. Makes it possible to switch off the
+ timestamp warning and question. (Dodt).
+- Add an option to set the time after which Vim should check the timestamps
+ of the files. Only check when an event occurs (e.g., character typed,
+ mouse moved). Useful for non-GUI versions where keyboard focus isn't
+ noticeable.
+9 When using ":w <fname>" it's possible that this file is loaded in another
+ buffer. Give a warning right away, don't wait for a shell command.
+- Make 'smartcase' work even though 'ic' isn't set (Webb).
+7 Add ":justify" command. Patch from Vit Stradal 2002 Nov 25.
+7 When formatting text, allow to break the line at a number of characters.
+ Use an option for this: 'breakchars'? Useful for formatting Fortran code.
+- Add flag to 'formatoptions' to be able to format book-style paragraphs
+ (first line of paragraph has larger indent, no empty lines between
+ paragraphs). Complements the '2' flag. Use '>' flag when larger indent
+ starts a new paragraph, use '<' flag when smaller indent starts a new
+ paragraph. Both start a new paragraph on any indent change.
+8 Add 'formatexpr' option: Used for formatting operator "gq" instead of the
+ builtin formatting or 'formatprg'.
+8 Allow using a trailing space to signal a paragraph that continues on the
+ next line (MIME text/plain; format=flowed, RFC 2646). Can be used for
+ continuous formatting. Could use 'autoformat' option, which specifies a
+ regexp which triggers auto-formatting (for one line).
+ ":set autoformat=\\s$".
+- Be able to redefine where a sentence stops. Use a regexp pattern?
+7 Add command "g)" to go to the end of a sentence, "g(" to go back to the
+ end of a sentence. (Servatius Brandt)
+- Be able to redefine where a paragraph starts. For "[[" where the '{' is
+ not in column 1.
+6 Add ":cdprev": go back to the previous directory. Need to remember a
+ stack of previous directories. We also need ":cdnext".
+7 Should ":cd" for MS-DOS go to $HOME, when it's defined?
+- Make "gq<CR>" work on the last line in the file. Maybe for every operator?
+8 findmatchlimit() should be able to skip comments. Solves problem of
+ matching the '{' in /* if (foo) { */ (Fiveash)
+- findmatch() should be adjusted for Lisp. See remark at get_lisp_indent().
+ Esp. \( and \) should be skipped. (Dorai Sitaram, incomplete patch Mar 18)
+- Add more redirecting of Ex commands:
+ :redir @> register (append)
+ :redir # bufname
+ :redir #> bufname (append)
+ :redir = variable
+ :redir => variable (append)
+- Setting of options, specifically for a buffer or window, with
+ ":set window.option" or ":set buffer.option=val". Or use ":buffer.set".
+ Also: "buffer.map <F1> quit".
+6 Would it be possible to change the color of the cursor in the Win32
+ console? (Klaus Hast)
+- Add :delcr command:
+ *:delcr*
+ :[range]delcr[!] Check [range] lines (default: whole buffer) for lines
+ ending in <CR>. If all lines end in <CR>, or [!] is
+ used, remove the <CR> at the end of lines in [range].
+ A CTRL-Z at the end of the file is removed. If
+ [range] is omitted, or it is the whole file, and all
+ lines end in <CR> 'textmode' is set. {not in Vi}
+- Should integrate addstar() and file_pat_to_reg_pat().
+- When working over a serial line with 7 bit characters, remove meta
+ characters from 'isprint'.
+- Use fchdir() in init_homedir(), like in FullName().
+- In win_update(), when the GUI is active, always use the scrolling area.
+ Avoid that the last status line is deleted and needs to be redrawn.
+- That "cTx" fails when the cursor is just after 'x' is Vi compatible, but
+ may not be what you expect. Add a flag in 'cpoptions' for this? More
+ general: Add an option to allow "c" to work with a null motion.
+- Give better error messages by using errno (strerror()).
+- Give "Usage:" error message when command used with wrong arguments (like
+ Nvi).
+- Make 'restorescreen' option also work for xterm (and others), replaces the
+ SAVE_XTERM_SCREEN define.
+7 Support for ":winpos" In xterm: report the current window position.
+- Give warning message when using ":set t_xx=asdf" for a termcap code that
+ Vim doesn't know about. Add flag in 'shortmess'?
+6 Add ":che <file>", list all the include paths which lead to this file.
+- For a commandline that has several commands (:s, :d, etc.) summarize the
+ changes all together instead of for each command (e.g. for the rot13
+ macro).
+- Add command like "[I" that also shows the tree of included files.
+- Add command like ":ts" that shows the output of "[I" and asks for a match
+ to jump to. (Zellner)
+- ":set sm^L" results in ":set s", because short names of options are also
+ 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
+ if it is not the first or last window.
+- Include-file-search commands should look in the loaded buffer of a file (if
+ there is one) instead of the file itself.
+7 Change 'nrformats' to include the leader for each format. Example:
+ nrformats=hex:$,binary:b,octal:0
+ Add setting of 'nrformats' to syntax files.
+- 'path' can become very long, don't use NameBuff for expansion.
+- When unhiding a hidden buffer, put the same line at top of the window as
+ the one before hiding it. Or: keep the same relative cursor position (so
+ many percent down the windows).
+- 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'.
+- 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
+ change it for specific machines (e.g. when a long is 64 bit).
+- Add option for <Insert> in replace mode going to normal mode. (Nugent)
+- Add a next/previous possibility to "[^I" and friends.
+- Add possibility to change the HOME directory. Use the directory from the
+ passwd file? (Antwerpen)
+- When doing "[^I" or "[^D" add position to tag stack.
+- Add command to put current position to tag stack: ":tpush".
+8 Add commands to push and pop all or individual options. ":setpush tw",
+ ":setpop tw", ":setpush all". Maybe pushing/popping all options is
+ sufficient. ":setflush" resets the option stack?
+ How to handle an aborted mapping? Remember position in tag stack when
+ mapping starts, restore it when an error aborts the mapping?
+- Use a builtin grep command for ":grep"? Makes it possible to add the
+ column number. Can use the code of ":helpgrep".
+ Also support using "**" in filename, so that a directory tree can be
+ searched.
+- Change ":fixdel" into option 'fixdel', t_del will be adjusted each time
+ t_bs is set? (Webb)
+- "gc": goto character, move absolute character positions forward, also
+ counting newlines. "gC" goes backwards (Weigert).
+- When doing CTRL-^, redraw buffer with the same topline (Demirel). Store
+ cursor row and window height to redraw cursor at same percentage of window
+ (Webb).
+- Besides remembering the last used line number of a file, also remember the
+ column. Use it with CTRL-^ et. al.
+- Check for non-digits when setting a number option (careful when entering
+ hex codes like 0xff).
+- Add option to make "." redo the "@r" command, instead of the last command
+ executed by it. Also to make "." redo the whole mapping. Basically: redo
+ the last TYPED command.
+- Support URL links for ^X^F in Insert mode, like for "gf".
+- Support %name% expansion for "gf" on Windows.
+- Make "gf" work on "file://c:/path/name". "file:/c:/" and "file:///c:/"
+ should also work?
+- Add 'urlpath', used like 'path' for when "gf" used on an URL?
+8 When using "gf" on an absolute file name, while editing a remote file
+ (starts with scp:// or http://) should prepend the method and machine
+ name.
+- When finding an URL or file name, and it doesn't exist, try removing a
+ trailing '.'.
+- Add ":path" command modifier. Should work for every command that takes a
+ file name argument, to search for the file name in 'path'. Use
+ find_file_in_path().
+- Highlight control characters on the screen: Shows the difference between
+ CTRL-X and "^" followed by "X" (Colon).
+- Integrate parsing of cmdline command and parsing for expansion.
+- Create a program that can translate a .swp file from any machine into a
+ form usable by Vim on the current machine.
+- Add ":noro" command: Reset 'ro' flag for all buffers, except ones that have
+ a readonly file. ":noro!" will reset all 'ro' flags.
+- 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
+ to the minimal size.
+- Add "]>" and "[<", shift comment at end of line (command; /* comment */).
+- Should not call cursorcmd() for each vgetc() in getcmdline().
+- ":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
+ as an output filter.
+- In dosub() regexec is called twice for the same line. Try to avoid this.
+- Window updating from memline.c: insert/delete/replace line.
+- Optimize ml_append() for speed, esp. for reading a file.
+- V..c should keep indent when 'ai' is set, just like [count]cc.
+- Updatescript() can be done faster with a string instead of a char.
+- Screen updating is inefficient with CTRL-F and CTRL-B when there are long
+ lines.
+- Uppercase characters in ex commands can be made lowercase?
+8 Add option to show characters in text not as "|A" but as decimal ("^129"),
+ hex ("\x81") or octal ("\201") or meta (M-x). Nvi has the 'octal' option
+ to switch from hex to octal. Vile can show unprintable characters in hex
+ or in octal.
+7 Tighter integration with xxd to edit binary files. Make it more
+ easy/obvious to use. Command line argument?
+- How does vi detect whether a filter has messed up the screen? Check source.
+ After ":w !command" a wait_return?
+- Improve screen updating code for doput() (use s_ins()).
+- With 'p' command on last line: scroll screen up (also for terminals without
+ insert line command).
+- Use insert/delete char when terminal supports it.
+- Optimize screen redraw for slow terminals.
+- Optimize "dw" for long row of spaces (say, 30000).
+- Add "-d null" for editing from a script file without displaying.
+- In Insert mode: Remember the characters that were removed with backspace
+ and re-insert them one at a time with <key1>, all together with <key2>.
+- Amiga: Add possibility to set a keymap. The code in amiga.c does not work
+ yet.
+- Implement 'redraw' option.
+- Add special code to 'sections' option to define something else but '{' or
+ '}' as the start of a section (e.g. one shiftwidth to the right).
+- Add 'indent' option: Always use this amount of indent when starting a new
+ line and when formatting text.
+- Use pipes for filtering on Unix. Requires using fork() to be able to read
+ and write at the same time, or some select() mechanism.
+7 Allow using Vim in a pipe: "ls | vim -u xxx.vim - | yyy". Only needs
+ implementing ":w" to stdout in the buffer that was read from stdin.
+8 Allow opening an unnamed buffer with ":e !cmd" and ":sp !cmd". Vile can
+ do it.
+- Add commands like ]] and [[ that do not include the line jumped to.
+- When :unab without matching "from" part and several matching "to" parts,
+ delete the entry that was used last, instead of the first in the list.
+- Add text justification option.
+- Set boolean options on/off with ":set paste=off", ":set paste=on".
+- After "inv"ing an option show the value: ":set invpaste" gives "paste is
+ off".
+- Check handling of CTRL-V and '\' for ":" commands that do not have TRLBAR.
+- When a file cannot be opened but does exist, give error message.
+- Amiga: When 'r' protection bit is not set, file can still be opened but
+ gives read errors. Check protection before opening.
+- When writing check for file exists but no permission, "Permission denied".
+- If file does not exists, check if directory exists.
+- MSDOS: although t_cv and t_ci are not set, do invert char under cursor.
+- Settings edit mode: make file with ":set opt=xx", edit it, parse it as ex
+ commands.
+- ":set -w all": list one option per line.
+- Amiga: test for 'w' flag when reading a file.
+- :table command (Webb)
+- Add new operator: clear, make area white (replace with spaces): "g ".
+- Make it possible for a user to define a new operator. Implementation with
+ internal scripting language or Perl?
+- Add command to ":read" a file at a certain column (blockwise read?).
+- Add sort of replace mode where case is taken from the old text (Goldfarb).
+- Allow multiple arguments for ":read", read all the files.
+- Support for tabs in specific columns: ":set tabcol=8,20,34,56" (Demirel).
+- Add 'searchdir' option: Directories to search for file name being edited
+ (Demirel).
+- Modifier for the put command: Change to linewise, charwise, blockwise, etc.
+- Add commands for saving and restoring options ":set save" "set restore",
+ for use in macro's and the like.
+- Keep output from listings in a window, so you can have a look at it while
+ 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).
+- When resizing the whole Vim window, the windows inside should be resized
+ proportionally (Webb).
+- Include options directly in option table, no indirect pointers. Use
+ mkopttab to make option table?
+- When doing ":w dir", where "dir" is a directory name, write the current
+ file into that directory, with the current file name (without the path)?
+- Support for 'dictionary's that are sorted, makes access a lot faster
+ (Haritsis).
+- Add "^Vrx" on the command line, replace with contents of register x. Used
+ instead of CTRL-R to make repeating possible. (Marinichev)
+- Add "^Vb" on the command line, replace with word before or under the
+ cursor?
+- Option to make a .swp file only when a change is made (Templeton).
+- Support mapping for replace mode and "r" command (Vi doesn't do this)?
+5 Add 'ignorefilecase' option: Ignore case when expanding file names.
+ ":e ma<Tab>" would also find "Makefile" on Unix.
+8 Sorting of filenames for completion is wrong on systems that ignore case
+ of filenames. Add 'ignorefncase' option. When set, case in filenames is
+ ignored for sorting them. Patch by Mike Williams:
+ ~/vim/patches/ignorefncase. Also change what matches? Or use another
+ option name.
+8 Should be able to compile Vim in another directory, with $(srcdir) set to
+ where the sources are. Add $(srcdir) in the Makefile in a lot of places.
+ (Netherton)
+6 Make it configurable when "J" inserts a space or not. Should not add a
+ space after "(", for example.
+5 When inserting spaces after the end-of-line for 'virtualedit', use tabs
+ when the user wants this (e.g., add a "tab" field to 'virtualedit').
+ (Servatius Brandt)
+
+
+From Elvis:
+- Use "instman.sh" to install manpages?
+- Add ":alias" command.
+- fontchanges recognized "\\fB" etc.
+- Search patterns:
+ \@ match word under cursor.
+ but do:
+ \@w match the word under the cursor?
+ \@W match the WORD under the cursor?
+8 ":window" command:
+ :win + next window (up)
+ :win ++ idem, wrapping
+ :win - previous window (down)
+ :win -- idem, wrapping
+ :win nr to window number "nr"
+ :win name to window editing buffer "name"
+7 ":cc" compiles a single file (default: current one). 'ccprg' option is
+ program to use with ":cc". Use ":compile" instead of ":cc"?
+
+
+From Nvi:
+- 'searchincr' option, alias for 'incsearch'?
+- 'leftright' option, alias for 'nowrap'?
+- Have a look at "vi/doc/vi.chart", for Nvi specialties.
+8 Add 'keytime', time in 1/10 sec for mapping timeout?
+- Add 'filec' option as an alternative for 'wildchar'.
+6 Support Nvi command names as an alias:
+ :bg :hide
+ :fg fname :buf fname (with 'hidden' set?)
+ :dis b :ls
+ :Edit fname :split fname
+ :Fg fname :sbuf fname (with 'hidden' set?)
+ :Next :snext (can't do this, already use :Next)
+ :Previous :sprevious
+ :Tag :stag
+
+
+From xvi:
+- CTRL-_ : swap 8th bit of character.
+- Add egrep-like regex type, like xvi (Ned Konz) or Perl (Emmanuel Mogenet)
+
+
+From vile:
+- When horizontal scrolling, use '>' for lines continuing right of a window.
+- Support putting .swp files in /tmp: Command in rc.local to move .swp files
+ from /tmp to some directory before deleting files.
+
+
+Far future and "big" extensions:
+- Make it easy to setup Vim for groups of users: novice vi users, novice
+ Vim users, C programmers, xterm users, GUI users,...
+- Change layout of blocks in swap file: Text at the start, with '\n' in
+ between lines (just load the file without changes, except for Mac).
+ Indexes for lines are from the end of the block backwards. It's the
+ current layout mirrored.
+- Make it possible to edit a register, in a window, like a buffer.
+- Add stuff to syntax highlighting to change the text (upper-case keywords,
+ set indent, define other highlighting, etc.).
+- Mode to keep C-code formatted all the time (sort of on-line indent).
+- Several top-level windows in one Vim session. Be able to use a different
+ font in each top-level window.
+- Allow editing above start and below end of buffer (flag in 'virtualedit').
+- Smart cut/paste: recognize words and adjust spaces before/after them.
+- Add open mode, use it when terminal has no cursor positioning.
+- Special "drawing mode": a line is drawn where the cursor is moved to.
+ Backspace deletes along the line (from jvim).
+- Implement ":Bset", set option in all buffers. Also ":Wset", set in all
+ windows, ":Aset, set in all arguments and ":Tset", set in all files
+ mentioned in the tags file.
+ Add buffer/arg range, like in ":2,5B%s/..." (do we really need this???)
+ Add search string: "B/*.c/%s/.."? Or ":F/*.c/%s/.."?
+- Support for underlining (underscore-BS-char), bold (char-BS-char) and other
+ standout modes switched on/off with , 'overstrike' option (Reiter).
+- Add vertical mode (Paul Jury, Demirel): "5vdw" deletes a word in five
+ lines, "3vitextESC" will insert "text" in three lines, etc..
+4 Recognize l, #, p as 'flags' to EX commands:
+ :g/RE/#l shall print lines with line numbers and in list format.
+ :g/RE/dp shall print lines that are deleted.
+ POSIX: Commands where flags shall apply to all lines written: list,
+ number, open, print, substitute, visual, &, z. For other commands, flags
+ shall apply to the current line after the command completes. Examples:
+ :7,10j #l Join the lines 7-10 and print the result in list
+- Allow two or more users to edit the same file at the same time. Changes
+ are reflected in each Vim immediately. Could work with local files but
+ also over the internet. See http://www.codingmonkeys.de/subethaedit/.
+
+
+vim:tw=78:sw=4:sts=4:ts=8:ft=help:norl:
+vim: set fo+=n :
diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt
new file mode 100644
index 000000000..ebdf7c7c0
--- /dev/null
+++ b/runtime/doc/uganda.txt
@@ -0,0 +1,277 @@
+*uganda.txt* For Vim version 7.0aa. Last change: 2004 May 12
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+ *uganda* *Uganda* *copying* *copyright* *license*
+SUMMARY
+ *iccf* *ICCF*
+Vim is Charityware. You can use and copy it as much as you like, but you are
+encouraged to make a donation for needy children in Uganda. Please see |kcc|
+below or visit the ICCF web site, available at these URLs:
+
+ http://iccf-holland.org/
+ http://www.vim.org/iccf/
+
+You can also sponsor the development of Vim. Vim sponsors can vote for
+features. See |sponsor|.
+
+The Open Publication License applies to the Vim documentation, see
+|manual-copyright|.
+
+=== begin of license ===
+
+VIM LICENSE
+
+I) There are no restrictions on distributing unmodified copies of Vim except
+ that they must include this license text. You can also distribute
+ unmodified parts of Vim, likewise unrestricted except that they must
+ include this license text. You are also allowed to include executables
+ that you made from the unmodified Vim sources, plus your own usage
+ examples and Vim scripts.
+
+II) It is allowed to distribute a modified (or extended) version of Vim,
+ including executables and/or source code, when the following four
+ conditions are met:
+ 1) This license text must be included unmodified.
+ 2) The modified Vim must be distributed in one of the following five ways:
+ a) If you make changes to Vim yourself, you must clearly describe in
+ the distribution how to contact you. When the maintainer asks you
+ (in any way) for a copy of the modified Vim you distributed, you
+ must make your changes, including source code, available to the
+ maintainer without fee. The maintainer reserves the right to
+ include your changes in the official version of Vim. What the
+ maintainer will do with your changes and under what license they
+ will be distributed is negotiable. If there has been no negotiation
+ then this license, or a later version, also applies to your changes.
+ The current maintainer is Bram Moolenaar <Bram@vim.org>. If this
+ changes it will be announced in appropriate places (most likely
+ vim.sf.net, www.vim.org and/or comp.editors). When it is completely
+ impossible to contact the maintainer, the obligation to send him
+ your changes ceases. Once the maintainer has confirmed that he has
+ received your changes they will not have to be sent again.
+ b) If you have received a modified Vim that was distributed as
+ mentioned under a) you are allowed to further distribute it
+ unmodified, as mentioned at I). If you make additional changes the
+ text under a) applies to those changes.
+ c) Provide all the changes, including source code, with every copy of
+ the modified Vim you distribute. This may be done in the form of a
+ context diff. You can choose what license to use for new code you
+ add. The changes and their license must not restrict others from
+ making their own changes to the official version of Vim.
+ d) When you have a modified Vim which includes changes as mentioned
+ under c), you can distribute it without the source code for the
+ changes if the following three conditions are met:
+ - The license that applies to the changes permits you to distribute
+ the changes to the Vim maintainer without fee or restriction, and
+ permits the Vim maintainer to include the changes in the official
+ version of Vim without fee or restriction.
+ - You keep the changes for at least three years after last
+ distributing the corresponding modified Vim. When the maintainer
+ or someone who you distributed the modified Vim to asks you (in
+ any way) for the changes within this period, you must make them
+ available to him.
+ - You clearly describe in the distribution how to contact you. This
+ contact information must remain valid for at least three years
+ after last distributing the corresponding modified Vim, or as long
+ as possible.
+ e) When the GNU General Public License (GPL) applies to the changes,
+ you can distribute the modified Vim under the GNU GPL version 2 or
+ any later version.
+ 3) A message must be added, at least in the output of the ":version"
+ command and in the intro screen, such that the user of the modified Vim
+ is able to see that it was modified. When distributing as mentioned
+ under 2)e) adding the message is only required for as far as this does
+ not conflict with the license used for the changes.
+ 4) The contact information as required under 2)a) and 2)d) must not be
+ removed or changed, except that the person himself can make
+ corrections.
+
+III) If you distribute a modified version of Vim, you are encouraged to use
+ the Vim license for your changes and make them available to the
+ maintainer, including the source code. The preferred way to do this is
+ by e-mail or by uploading the files to a server and e-mailing the URL.
+ If the number of changes is small (e.g., a modified Makefile) e-mailing a
+ context diff will do. The e-mail address to be used is
+ <maintainer@vim.org>
+
+IV) It is not allowed to remove this license from the distribution of the Vim
+ sources, parts of it or from a modified version. You may use this
+ license for previous Vim releases instead of the license that they came
+ with, at your option.
+
+=== end of license ===
+
+Note:
+
+- If you are happy with Vim, please express that by reading the rest of this
+ file and consider helping needy children in Uganda.
+
+- If you want to support further Vim development consider becoming a
+ |sponsor|.
+
+- According to Richard Stallman the Vim license is GNU GPL compatible.
+ A few minor changes have been made since he checked it, but that should not
+ make a difference.
+
+- If you link Vim with a library that goes under the GNU GPL, this limits
+ further distribution to the GNU GPL. Also when you didn't actually change
+ anything in Vim.
+
+- Once a change is included that goes under the GNU GPL, this forces all
+ further changes to also be made under the GNU GPL or a compatible license.
+
+- If you distribute a modified version of Vim, you can include your name and
+ contact information with the "--with-modified-by" configure argument or the
+ MODIFIED_BY define.
+
+==============================================================================
+Kibaale Children's Centre *kcc*
+
+Kibaale Children's Centre (KCC) is located in Kibaale, a small town in the
+south of Uganda, near Tanzania, in East Africa. The area is known as Rakai
+District. The population is mostly farmers. Although people are poor, there
+is enough food. But this district is suffering from AIDS more than any other
+part of the world. Some say that it started there. Estimations are that 10
+to 30% of the Ugandans are infected with HIV. Because parents die, there are
+many orphans. In this district about 60,000 children have lost one or both
+parents, out of a population of 350,000. And this is still continuing.
+
+The children need a lot of help. The KCC is working hard to provide the needy
+with food, medical care and education. Food and medical care to keep them
+healthy now, and education so that they can take care of themselves in the
+future. KCC works on a Christian base, but help is given to children of any
+religion.
+
+The key to solving the problems in this area is education. This has been
+neglected in the past years with president Idi Amin and the following civil
+wars. Now that the government is stable again, the children and parents have
+to learn how to take care of themselves and how to avoid infections. There is
+also help for people who are ill and hungry, but the primary goal is to
+prevent people from getting ill and to teach them how to grow healthy food.
+
+Most of the orphans are living in an extended family. An uncle or older
+sister is taking care of them. Because these families are big and the income
+(if any) is low, a child is lucky if it gets healthy food. Clothes, medical
+care and schooling is beyond its reach. To help these needy children, a
+sponsorship program was put into place. A child can be financially adopted.
+For a few dollars a month KCC sees to it that the child gets indispensable
+items, is healthy, goes to school and KCC takes care of anything else that
+needs to be done for the child and the family that supports it.
+
+Besides helping the child directly, the environment where the child grows up
+needs to be improved. KCC helps schools to improve their teaching methods.
+There is a demonstration school at the centre and teacher trainings are given.
+Health workers are being trained, hygiene education is carried out and
+households are stimulated to build a proper latrine. I helped setting up a
+production site for cement slabs. These are used to build a good latrine.
+They are sold below cost price.
+
+There is a small clinic at the project, which provides children and their
+family with medical help. When needed, transport to a hospital is offered.
+Immunization programs are carried out and help is provided when an epidemic is
+breaking out (measles and cholera have been a problem).
+
+Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
+volunteer. I have helped to expand the centre and worked in the area of water
+and sanitation. I learned that the help that the KCC provides really helps.
+Now that I'm back in Holland, I would like to continue supporting KCC. To do
+this I'm raising funds and organizing the sponsorship program. Please
+consider one of these possibilities:
+
+1. Sponsor a child in primary school: 17 euro a month (or more).
+2. Sponsor a child in secondary school: 25 euro a month (or more).
+3. Sponsor the clinic: Any amount a month or quarter
+4. A one-time donation
+
+Compared with other organizations that do child sponsorship the amounts are
+very low. This is because the money goes directly to the centre. Less than
+5% is used for administration. This is possible because this is a small
+organization that works with volunteers. If you would like to sponsor a
+child, you should have the intention to do this for at least one year.
+
+How do you know that the money will be spent right? First of all you have my
+personal guarantee as the author of Vim. I trust the people that are working
+at the centre, I know them personally. Further more, the centre is
+co-sponsored and inspected by World Vision, Save the Children Fund and
+International Child Care Fund. The centre is visited about once a year to
+check the progress (at our own cost). I have visited the centre myself in
+1996, 1998, 2000, 2001 and 2003. The visit reports are on the ICCF web site.
+
+If you have any further questions, send me e-mail: <Bram@vim.org>.
+
+The address of the centre is:
+ Kibaale Children's Centre
+ p.o. box 1658
+ Masaka, Uganda, East Africa
+
+Sending money:
+
+Check the ICCF web site for the latest information! See |iccf| for the URL.
+
+
+USA and Canada: Contact Kibaale Children's Fund (KCF) in Surrey, Canada. They
+ take care of the Canadian sponsors for the children in
+ Kibaale. You can send them a one time donation directly.
+ Please send me a note so that know what has been donated
+ because of Vim. Ask KCF for information about sponsorship.
+ Kibaale Children's Fund c/o Pacific Academy
+ 10238-168 Street
+ Surrey, B.C. V4N 1Z4
+ Canada
+ Phone: 604-581-5353
+ If you make a donation to Kibaale Children's Fund (KCF) you
+ will receive a tax receipt which can be submitted with your
+ tax return (under the Free Trade Agreement tax receipts issued
+ by an organization registered in Canada are fully accepted by
+ the IRS in the USA, with a few conditions).
+
+Holland: Transfer to the account of "Stichting ICCF Holland" in Venlo.
+ This will allow for tax deduction (if you live in Holland)!
+ Postbank, nr. 4548774
+
+Germany: It is possible to make donations that allow for a tax return.
+ Check the ICCF web site for the latest information:
+ http://iccf-holland.org/germany.html
+
+World: Use a postal money order. That should be possible from any
+ country, mostly from the post office. Use this name (which is
+ in my passport): "Abraham Moolenaar". Use Euro for the
+ currency if possible.
+
+Europe: Use a bank transfer if possible. Your bank should have a form
+ that you can use for this. See "Others" below for the swift
+ code and IBAN number.
+ Any other method should work. Ask for information about
+ sponsorship.
+
+Credit Card: You can use PayPal to send money with a Credit card. This is
+ the most widely used Internet based payment system. It's
+ really simple to use. Use this link to find more info:
+ https://www.paypal.com/affil/pal=Bram%40moolenaar.net
+ The e-mail address for sending the money to is:
+ Bram@iccf-holland.org
+ For amounts above $150 sending a cheque is preferred.
+
+Others: Transfer to one of these accounts if possible:
+ Postbank, account 4548774
+ Swift code: INGB NL 2A
+ IBAN: NL47 PSTB 0004 5487 74
+ under the name "stichting ICCF Holland", Venlo
+ If that doesn't work:
+ Rabobank Venlo, account 3765.05.117
+ Swift code: RABO NL 2U
+ under the name "Bram Moolenaar", Venlo
+ Otherwise, send a cheque in euro or US dollars to the address
+ below. Minimal amount: $70 (my bank does not accept smaller
+ amounts for foreign cheques, sorry)
+
+Address to send cheques to:
+ stichting ICCF Holland
+ Bram Moolenaar
+ Clematisstraat 30
+ 5925 BE Venlo
+ The Netherlands
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt
new file mode 100644
index 000000000..433fc759a
--- /dev/null
+++ b/runtime/doc/undo.txt
@@ -0,0 +1,117 @@
+*undo.txt* For Vim version 7.0aa. Last change: 2003 Oct 21
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Undo and redo *undo-redo*
+
+The basics are explained in section |02.5| of the user manual.
+
+1. Undo and redo commands |undo-commands|
+2. Two ways of undo |undo-two-ways|
+3. Remarks about undo |undo-remarks|
+
+==============================================================================
+1. Undo and redo commands *undo-commands*
+
+<Undo> or *undo* *<Undo>* *u*
+u Undo [count] changes. {Vi: only one level}
+
+ *:u* *:un* *:undo*
+:u[ndo] Undo one change. {Vi: only one level}
+
+ *CTRL-R*
+CTRL-R Redo [count] changes which were undone. {Vi: redraw
+ screen}
+
+ *:red* *:redo* *redo*
+: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}
+
+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
+changes again, getting back the text before the undo.
+
+The "U" command is treated by undo/redo just like any other command. Thus a
+"u" command undoes a "U" command and a 'CTRL-R' command redoes it again. When
+mixing "U", "u" and 'CTRL-R' you will notice that the "U" command will
+restore the situation of a line to before the previous "U" command. This may
+be confusing. Try it out to get used to it.
+The "U" command will always mark the buffer as changed. When "U" changes the
+buffer back to how it was without changes, it is still considered changed.
+Use "u" to undo changes until the buffer becomes unchanged.
+
+==============================================================================
+2. Two ways of undo *undo-two-ways*
+
+How undo and redo commands work depends on the 'u' flag in 'cpoptions'.
+There is the Vim way ('u' excluded) and the vi-compatible way ('u' included).
+In the Vim way, "uu" undoes two changes. In the Vi-compatible way, "uu" does
+nothing (undoes an undo).
+
+'u' excluded, the Vim way:
+You can go back in time with the undo command. You can then go forward again
+with the redo command. If you make a new change after the undo command,
+the redo will not be possible anymore.
+
+'u' included, the Vi-compatible way:
+The undo command undoes the previous change, and also the previous undo command.
+The redo command repeats the previous undo command. It does NOT repeat a
+change command, use "." for that.
+
+Examples Vim way Vi-compatible way ~
+"uu" two times undo no-op
+"u CTRL-R" no-op two times undo
+
+Rationale: Nvi uses the "." command instead of CTRL-R. Unfortunately, this
+ is not Vi compatible. For example "dwdwu." in Vi deletes two
+ words, in Nvi it does nothing.
+
+==============================================================================
+3. Remarks about undo *undo-remarks*
+
+The number of changes that are remembered is set with the 'undolevels' option.
+If it is zero, the Vi-compatible way is always used. If it is negative no
+undo is possible. Use this if you are running out of memory.
+
+Marks for the buffer ('a to 'z) are also saved and restored, together with the
+text. {Vi does this a little bit different}
+
+When all changes have been undone, the buffer is not considered to be changed.
+It is then possible to exit Vim with ":q" instead of ":q!" {not in Vi}. Note
+that this is relative to the last write of the file. Typing "u" after ":w"
+actually changes the buffer, compared to what was written, so the buffer is
+considered changed then.
+
+When manual |folding| is being used, the folds are not saved and restored.
+Only changes completely within a fold will keep the fold as it was, because
+the first and last line of the fold don't change.
+
+The numbered registers can also be used for undoing deletes. Each time you
+delete text, it is put into register "1. The contents of register "1 are
+shifted to "2, etc. The contents of register "9 are lost. You can now get
+back the most recent deleted text with the put command: '"1P'. (also, if the
+deleted text was the result of the last delete or copy operation, 'P' or 'p'
+also works as this puts the contents of the unnamed register). You can get
+back the text of three deletes ago with '"3P'.
+
+ *redo-register*
+If you want to get back more than one part of deleted text, you can use a
+special feature of the repeat command ".". It will increase the number of the
+register used. So if you first do ""1P", the following "." will result in a
+'"2P'. Repeating this will result in all numbered registers being inserted.
+
+Example: If you deleted text with 'dd....' it can be restored with
+ '"1P....'.
+
+If you don't know in which register the deleted text is, you can use the
+:display command. An alternative is to try the first register with '"1P', and
+if it is not what you want do 'u.'. This will remove the contents of the
+first put, and repeat the put command for the second register. Repeat the
+'u.' until you got what you want.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt
new file mode 100644
index 000000000..39a603ac1
--- /dev/null
+++ b/runtime/doc/usr_01.txt
@@ -0,0 +1,180 @@
+*usr_01.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ About the manuals
+
+
+This chapter introduces the manuals available with Vim. Read this to know the
+conditions under which the commands are explained.
+
+|01.1| Two manuals
+|01.2| Vim installed
+|01.3| Using the Vim tutor
+|01.4| Copyright
+
+ Next chapter: |usr_02.txt| The first steps in Vim
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*01.1* Two manuals
+
+The Vim documentation consists of two parts:
+
+1. The User manual
+ Task oriented explanations, from simple to complex. Reads from start to
+ end like a book.
+
+2. The Reference manual
+ Precise description of how everything in Vim works.
+
+The notation used in these manuals is explained here: |notation|
+
+
+JUMPING AROUND
+
+The text contains hyperlinks between the two parts, allowing you to quickly
+jump between the description of an editing task and a precise explanation of
+the commands and options used for it. Use these two commands:
+
+ 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.
+
+Other subjects can be found with the ":help" command, see |help.txt|.
+
+==============================================================================
+*01.2* Vim installed
+
+Most of the manuals assume that Vim has been properly installed. If you
+didn't do that yet, or if Vim doesn't run properly (e.g., files can't be found
+or in the GUI the menus do not show up) first read the chapter on
+installation: |usr_90.txt|.
+ *not-compatible*
+The manuals often assume you are using Vim with Vi-compatibility switched
+off. For most commands this doesn't matter, but sometimes it is important,
+e.g., for multi-level undo. An easy way to make sure you are using the right
+setup, copy the example vimrc file. By doing this inside Vim you don't have
+to check out where it is located. How to do this depends on the system you
+are using:
+
+Unix: >
+ :!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc
+MS-DOS, MS-Windows, OS/2: >
+ :!copy $VIMRUNTIME/vimrc_example.vim $VIM/_vimrc
+Amiga: >
+ :!copy $VIMRUNTIME/vimrc_example.vim $VIM/.vimrc
+
+If the file already exists you probably want to keep it.
+
+If you start Vim now, the 'compatible' option should be off. You can check it
+with this command: >
+
+ :set compatible?
+
+If it responds with "nocompatible" you are doing well. If the response is
+"compatible" you are in trouble. You will have to find out why the option is
+still set. Perhaps the file you wrote above is not found. Use this command
+to find out: >
+
+ :scriptnames
+
+If your file is not in the list, check its location and name. If it is in the
+list, there must be some other place where the 'compatible' option is switched
+back on.
+
+For more info see |vimrc| and |compatible-default|.
+
+ Note:
+ This manual is about using Vim in the normal way. There is an
+ alternative called "evim" (easy Vim). This is still Vim, but used in
+ a way that resembles a click-and-type editor like Notepad. It always
+ stays in Insert mode, thus it feels very different. It is not
+ explained in the user manual, since it should be mostly self
+ explanatory. See |evim-keys| for details.
+
+==============================================================================
+*01.3* Using the Vim tutor *tutor* *vimtutor*
+
+Instead of reading the text (boring!) you can use the vimtutor to learn your
+first Vim commands. This is a 30 minute tutorial that teaches the most basic
+Vim functionality hands-on.
+
+On Unix and MS-Windows, if Vim has been properly installed, you can start it
+from the shell:
+>
+ vimtutor
+
+This will make a copy of the tutor file, so that you can edit it without
+the risk of damaging the original.
+ There are a few translated versions of the tutor. To find out if yours is
+available, use the two-letter language code. For French: >
+
+ vimtutor fr
+
+For OpenVMS, if Vim has been properly installed, you can start vimtutor from a
+VMS prompt with: >
+
+ @VIM:vimtutor
+
+Optionally add the two-letter language code as above.
+
+
+On other systems, you have to do a little work:
+
+1. Copy the tutor file. You can do this with Vim (it knows where to find it):
+>
+ vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor' -c 'w! TUTORCOPY' -c 'q'
+<
+ This will write the file "TUTORCOPY" in the current directory. To use a
+translated version of the tutor, append the two-letter language code to the
+filename. For French:
+>
+ vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor.fr' -c 'w! TUTORCOPY' -c 'q'
+<
+2. Edit the copied file with Vim:
+>
+ vim -u NONE -c "set nocp" TUTORCOPY
+<
+ The extra arguments make sure Vim is started in a good mood.
+
+3. Delete the copied file when you are finished with it:
+>
+ del TUTORCOPY
+<
+==============================================================================
+*01.4* Copyright *manual-copyright*
+
+The Vim user manual and reference manual are Copyright (c) 1988-2003 by Bram
+Moolenaar. This material may be distributed only subject to the terms and
+conditions set forth in the Open Publication License, v1.0 or later. The
+latest version is presently available at:
+ http://www.opencontent.org/opl.shtml
+
+People who contribute to the manuals must agree with the above copyright
+notice.
+ *frombook*
+Parts of the user manual come from the book "Vi IMproved - Vim" by Steve
+Oualline (published by New Riders Publishing, ISBN: 0735710015). The Open
+Publication License applies to this book. Only selected parts are included
+and these have been modified (e.g., by removing the pictures, updating the
+text for Vim 6.0 and fixing mistakes). The omission of the |frombook| tag
+does not mean that the text does not come from the book.
+
+Many thanks to Steve Oualline and New Riders for creating this book and
+publishing it under the OPL! It has been a great help while writing the user
+manual. Not only by providing literal text, but also by setting the tone and
+style.
+
+If you make money through selling the manuals, you are strongly encouraged to
+donate part of the profit to help AIDS victims in Uganda. See |iccf|.
+
+==============================================================================
+
+Next chapter: |usr_02.txt| The first steps in Vim
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_02.txt b/runtime/doc/usr_02.txt
new file mode 100644
index 000000000..7d3206b66
--- /dev/null
+++ b/runtime/doc/usr_02.txt
@@ -0,0 +1,504 @@
+*usr_02.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ The first steps in Vim
+
+
+This chapter provides just enough information to edit a file with Vim. Not
+well or fast, but you can edit. Take some time to practice with these
+commands, they form the base for what follows.
+
+|02.1| Running Vim for the First Time
+|02.2| Inserting text
+|02.3| Moving around
+|02.4| Deleting characters
+|02.5| Undo and Redo
+|02.6| Other editing commands
+|02.7| Getting out
+|02.8| Finding help
+
+ Next chapter: |usr_03.txt| Moving around
+ Previous chapter: |usr_01.txt| About the manuals
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*02.1* Running Vim for the First Time
+
+To start Vim, enter this command: >
+
+ gvim file.txt
+
+In UNIX you can type this at any command prompt. If you are running Microsoft
+Windows, open an MS-DOS prompt window and enter the command.
+ In either case, Vim starts editing a file called file.txt. Because this
+is a new file, you get a blank window. This is what your screen will look
+like:
+
+ +---------------------------------------+
+ |# |
+ |~ |
+ |~ |
+ |~ |
+ |~ |
+ |"file.txt" [New file] |
+ +---------------------------------------+
+ ('#" is the cursor position.)
+
+The tilde (~) lines indicate lines not in the file. In other words, when Vim
+runs out of file to display, it displays tilde lines. At the bottom of the
+screen, a message line indicates the file is named file.txt and shows that you
+are creating a new file. The message information is temporary and other
+information overwrites it.
+
+
+THE VIM COMMAND
+
+The gvim command causes the editor to create a new window for editing. If you
+use this command: >
+
+ vim file.txt
+
+the editing occurs inside your command window. In other words, if you are
+running inside an xterm, the editor uses your xterm window. If you are using
+an MS-DOS command prompt window under Microsoft Windows, the editing occurs
+inside this window. The text in the window will look the same for both
+versions, but with gvim you have extra features, like a menu bar. More about
+that later.
+
+==============================================================================
+*02.2* Inserting text
+
+The Vim editor is a modal editor. That means that the editor behaves
+differently, depending on which mode you are in. The two basic modes are
+called Normal mode and Insert mode. In Normal mode the characters you type
+are commands. In Insert mode the characters are inserted as text.
+ Since you have just started Vim it will be in Normal mode. To start Insert
+mode you type the "i" command (i for Insert). Then you can enter
+the text. It will be inserted into the file. Do not worry if you make
+mistakes; you can correct them later. To enter the following programmer's
+limerick, this is what you type: >
+
+ iA very intelligent turtle
+ Found programming UNIX a hurdle
+
+After typing "turtle" you press the <Enter> key to start a new line. Finally
+you press the <Esc> key to stop Insert mode and go back to Normal mode. You
+now have two lines of text in your Vim window:
+
+ +---------------------------------------+
+ |A very intelligent turtle |
+ |Found programming UNIX a hurdle |
+ |~ |
+ |~ |
+ | |
+ +---------------------------------------+
+
+
+WHAT IS THE MODE?
+
+To be able to see what mode you are in, type this command: >
+
+ :set showmode
+
+You will notice that when typing the colon Vim moves the cursor to the last
+line of the window. That's where you type colon commands (commands that start
+with a colon). Finish this command by pressing the <Enter> key (all commands
+that start with a colon are finished this way).
+ Now, if you type the "i" command Vim will display --INSERT-- at the bottom
+of the window. This indicates you are in Insert mode.
+
+ +---------------------------------------+
+ |A very intelligent turtle |
+ |Found programming UNIX a hurdle |
+ |~ |
+ |~ |
+ |-- INSERT -- |
+ +---------------------------------------+
+
+If you press <Esc> to go back to Normal mode the last line will be made blank.
+
+
+GETTING OUT OF TROUBLE
+
+One of the problems for Vim novices is mode confusion, which is caused by
+forgetting which mode you are in or by accidentally typing a command that
+switches modes. To get back to Normal mode, no matter what mode you are in,
+press the <Esc> key. Sometimes you have to press it twice. If Vim beeps back
+at you, you already are in Normal mode.
+
+==============================================================================
+*02.3* Moving around
+
+After you return to Normal mode, you can move around by using these keys:
+
+ h left *hjkl*
+ j down
+ k up
+ l right
+
+At first, it may appear that these commands were chosen at random. After all,
+who ever heard of using l for right? But actually, there is a very good
+reason for these choices: Moving the cursor is the most common thing you do in
+an editor, and these keys are on the home row of your right hand. In other
+words, these commands are placed where you can type them the fastest
+(especially when you type with ten fingers).
+
+ Note:
+ You can also move the cursor by using the arrow keys. If you do,
+ however, you greatly slow down your editing because to press the arrow
+ keys, you must move your hand from the text keys to the arrow keys.
+ Considering that you might be doing it hundreds of times an hour, this
+ can take a significant amount of time.
+ Also, there are keyboards which do not have arrow keys, or which
+ locate them in unusual places; therefore, knowing the use of the hjkl
+ keys helps in those situations.
+
+One way to remember these commands is that h is on the left, l is on the
+right and j points down. In a picture: >
+
+ k
+ h l
+ j
+
+The best way to learn these commands is by using them. Use the "i" command to
+insert some more lines of text. Then use the hjkl keys to move around and
+insert a word somewhere. Don't forget to press <Esc> to go back to Normal
+mode. The |vimtutor| is also a nice way to learn by doing.
+
+For Japanese users, Hiroshi Iwatani suggested using this:
+
+ Komsomolsk
+ ^
+ |
+ Huan Ho <--- ---> Los Angeles
+ (Yellow river) |
+ v
+ Java (the island, not the programming language)
+
+==============================================================================
+*02.4* Deleting characters
+
+To delete a character, move the cursor over it and type "x". (This is a
+throwback to the old days of the typewriter, when you deleted things by typing
+xxxx over them.) Move the cursor to the beginning of the first line, for
+example, and type xxxxxxx (seven x's) to delete "A very ". The result should
+look like this:
+
+ +---------------------------------------+
+ |intelligent turtle |
+ |Found programming UNIX a hurdle |
+ |~ |
+ |~ |
+ | |
+ +---------------------------------------+
+
+Now you can insert new text, for example by typing: >
+
+ iA young <Esc>
+
+This begins an insert (the i), inserts the words "A young", and then exits
+insert mode (the final <Esc>). The result:
+
+ +---------------------------------------+
+ |A young intelligent turtle |
+ |Found programming UNIX a hurdle |
+ |~ |
+ |~ |
+ | |
+ +---------------------------------------+
+
+
+DELETING A LINE
+
+To delete a whole line use the "dd" command. The following line will
+then move up to fill the gap:
+
+ +---------------------------------------+
+ |Found programming UNIX a hurdle |
+ |~ |
+ |~ |
+ |~ |
+ | |
+ +---------------------------------------+
+
+
+DELETING A LINE BREAK
+
+In Vim you can join two lines together, which means that the line break
+between them is deleted. The "J" command does this.
+ Take these two lines:
+
+ A young intelligent ~
+ turtle ~
+
+Move the cursor to the first line and press "J":
+
+ A young intelligent turtle ~
+
+==============================================================================
+*02.5* Undo and Redo
+
+Suppose you delete too much. Well, you can type it in again, but an easier
+way exists. The "u" command undoes the last edit. Take a look at this in
+action: After using "dd" to delete the first line, "u" brings it back.
+ Another one: Move the cursor to the A in the first line:
+
+ A young intelligent turtle ~
+
+Now type xxxxxxx to delete "A young". The result is as follows:
+
+ intelligent turtle ~
+
+Type "u" to undo the last delete. That delete removed the g, so the undo
+restores the character.
+
+ g intelligent turtle ~
+
+The next u command restores the next-to-last character deleted:
+
+ ng intelligent turtle ~
+
+The next u command gives you the u, and so on:
+
+ ung intelligent turtle ~
+ oung intelligent turtle ~
+ young intelligent turtle ~
+ young intelligent turtle ~
+ A young intelligent turtle ~
+
+ Note:
+ If you type "u" twice, and the result is that you get the same text
+ back, you have Vim configured to work Vi compatible. Look here to fix
+ this: |not-compatible|.
+ This text assumes you work "The Vim Way". You might prefer to use
+ the good old Vi way, but you will have to watch out for small
+ differences in the text then.
+
+
+REDO
+
+If you undo too many times, you can press CTRL-R (redo) to reverse the
+preceding command. In other words, it undoes the undo. To see this in
+action, press CTRL-R twice. The character A and the space after it disappear:
+
+ young intelligent turtle ~
+
+There's a special version of the undo command, the "U" (undo line) command.
+The undo line command undoes all the changes made on the last line that was
+edited. Typing this command twice cancels the preceding "U".
+
+ A very intelligent turtle ~
+ xxxx Delete very
+
+ A intelligent turtle ~
+ xxxxxx Delete turtle
+
+ A intelligent ~
+ Restore line with "U"
+ A very intelligent turtle ~
+ Undo "U" with "u"
+ A intelligent ~
+
+The "U" command is a change by itself, which the "u" command undoes and CTRL-R
+redoes. This might be a bit confusing. Don't worry, with "u" and CTRL-R you
+can go to any of the situations you had.
+
+==============================================================================
+*02.6* Other editing commands
+
+Vim has a large number of commands to change the text. See |Q_in| and below.
+Here are a few often used ones.
+
+
+APPENDING
+
+The "i" command inserts a character before the character under the cursor.
+That works fine; but what happens if you want to add stuff to the end of the
+line? For that you need to insert text after the cursor. This is done with
+the "a" (append) command.
+ For example, to change the line
+
+ and that's not saying much for the turtle. ~
+to
+ and that's not saying much for the turtle!!! ~
+
+move the cursor over to the dot at the end of the line. Then type "x" to
+delete the period. The cursor is now positioned at the end of the line on the
+e in turtle. Now type >
+
+ a!!!<Esc>
+
+to append three exclamation points after the e in turtle:
+
+ and that's not saying much for the turtle!!! ~
+
+
+OPENING UP A NEW LINE
+
+The "o" command creates a new, empty line below the cursor and puts Vim in
+Insert mode. Then you can type the text for the new line.
+ Suppose the cursor is somewhere in the first of these two lines:
+
+ A very intelligent turtle ~
+ Found programming UNIX a hurdle ~
+
+If you now use the "o" command and type new text: >
+
+ oThat liked using Vim<Esc>
+
+The result is:
+
+ A very intelligent turtle ~
+ That liked using Vim ~
+ Found programming UNIX a hurdle ~
+
+The "O" command (uppercase) opens a line above the cursor.
+
+
+USING A COUNT
+
+Suppose you want to move up nine lines. You can type "kkkkkkkkk" or you can
+enter the command "9k". In fact, you can precede many commands with a number.
+Earlier in this chapter, for instance, you added three exclamation points to
+the end of a line by typing "a!!!<Esc>". Another way to do this is to use the
+command "3a!<Esc>". The count of 3 tells the command that follows to triple
+its effect. Similarly, to delete three characters, use the command "3x". The
+count always comes before the command it applies to.
+
+==============================================================================
+*02.7* Getting out
+
+To exit, use the "ZZ" command. This command writes the file and exits.
+
+ Note:
+ Unlike many other editors, Vim does not automatically make a backup
+ file. If you type "ZZ", your changes are committed and there's no
+ turning back. You can configure the Vim editor to produce backup
+ files, see |07.4|.
+
+
+DISCARDING CHANGES
+
+Sometimes you will make a sequence of changes and suddenly realize you were
+better off before you started. Not to worry; Vim has a
+quit-and-throw-things-away command. It is: >
+
+ :q!
+
+Don't forget to press <Enter> to finish the command.
+
+For those of you interested in the details, the three parts of this command
+are the colon (:), which enters Command-line mode; the q command, which tells
+the editor to quit; and the override command modifier (!).
+ The override command modifier is needed because Vim is reluctant to throw
+away changes. If you were to just type ":q", Vim would display an error
+message and refuse to exit:
+
+ E37: No write since last change (use ! to override) ~
+
+By specifying the override, you are in effect telling Vim, "I know that what
+I'm doing looks stupid, but I'm a big boy and really want to do this."
+
+If you want to continue editing with Vim: The ":e!" command reloads the
+original version of the file.
+
+==============================================================================
+*02.8* Finding help
+
+Everything you always wanted to know can be found in the Vim help files.
+Don't be afraid to ask!
+ To get generic help use this command: >
+
+ :help
+
+You could also use the first function key <F1>. If your keyboard has a <Help>
+key it might work as well.
+ If you don't supply a subject, ":help" displays the general help window.
+The creators of Vim did something very clever (or very lazy) with the help
+system: They made the help window a normal editing window. You can use all
+the normal Vim commands to move through the help information. Therefore h, j,
+k, and l move left, down, up and right.
+ To get out of the help window, use the same command you use to get out of
+the editor: "ZZ". This will only close the help window, not exit Vim.
+
+As you read the help text, you will notice some text enclosed in vertical bars
+(for example, |help|). This indicates a hyperlink. If you position the
+cursor anywhere between the bars and press CTRL-] (jump to tag), the help
+system takes you to the indicated subject. (For reasons not discussed here,
+the Vim terminology for a hyperlink is tag. So CTRL-] jumps to the location
+of the tag given by the word under the cursor.)
+ After a few jumps, you might want to go back. CTRL-T (pop tag) takes you
+back to the preceding position. CTRL-O (jump to older position) also works
+nicely here.
+ At the top of the help screen, there is the notation *help.txt*. This name
+between "*" characters is used by the help system to define a tag (hyperlink
+destination).
+ See |29.1| for details about using tags.
+
+To get help on a given subject, use the following command: >
+
+ :help {subject}
+
+To get help on the "x" command, for example, enter the following: >
+
+ :help x
+
+To find out how to delete text, use this command: >
+
+ :help deleting
+
+To get a complete index of all Vim commands, use the following command: >
+
+ :help index
+
+When you need to get help for a control character command (for example,
+CTRL-A), you need to spell it with the prefix "CTRL-". >
+
+ :help CTRL-A
+
+The Vim editor has many different modes. By default, the help system displays
+the normal-mode commands. For example, the following command displays help
+for the normal-mode CTRL-H command: >
+
+ :help CTRL-H
+
+To identify other modes, use a mode prefix. If you want the help for the
+insert-mode version of a command, use "i_". For CTRL-H this gives you the
+following command: >
+
+ :help i_CTRL-H
+
+When you start the Vim editor, you can use several command-line arguments.
+These all begin with a dash (-). To find what the -t argument does, for
+example, use the command: >
+
+ :help -t
+
+The Vim editor has a number of options that enable you to configure and
+customize the editor. If you want help for an option, you need to enclose it
+in single quotation marks. To find out what the 'number' option does, for
+example, use the following command: >
+
+ :help 'number'
+
+The table with all mode prefixes can be found here: |help-context|.
+
+Special keys are enclosed in angle brackets. To find help on the up-arrow key
+in Insert mode, for instance, use this command: >
+
+ :help i_<Up>
+
+If you see an error message that you don't understand, for example:
+
+ E37: No write since last change (use ! to override) ~
+
+You can use the error ID at the start to find help about it: >
+
+ :help E37
+
+==============================================================================
+
+Next chapter: |usr_03.txt| Moving around
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
new file mode 100644
index 000000000..f2ef2af02
--- /dev/null
+++ b/runtime/doc/usr_03.txt
@@ -0,0 +1,654 @@
+*usr_03.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Moving around
+
+
+Before you can insert or delete text the cursor has to be moved to the right
+place. Vim has a large number of commands to position the cursor. This
+chapter shows you how to use the most important ones. You can find a list of
+these commands below |Q_lr|.
+
+|03.1| Word movement
+|03.2| Moving to the start or end of a line
+|03.3| Moving to a character
+|03.4| Matching a paren
+|03.5| Moving to a specific line
+|03.6| Telling where you are
+|03.7| Scrolling around
+|03.8| Simple searches
+|03.9| Simple search patterns
+|03.10| Using marks
+
+ Next chapter: |usr_04.txt| Making small changes
+ Previous chapter: |usr_02.txt| The first steps in Vim
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*03.1* Word movement
+
+To move the cursor forward one word, use the "w" command. Like most Vim
+commands, you can use a numeric prefix to move past multiple words. For
+example, "3w" moves three words. This figure shows how it works:
+
+ This is a line with example text ~
+ --->-->->----------------->
+ w w w 3w
+
+Notice that "w" moves to the start of the next word if it already is at the
+start of a word.
+ The "b" command moves backward to the start of the previous word:
+
+ This is a line with example text ~
+ <----<--<-<---------<---
+ b b b 2b b
+
+There is also the "e" command that moves to the next end of a word and "ge",
+which moves to the previous end of a word:
+
+ This is a line with example text ~
+ <- <--- -----> ---->
+ ge ge e e
+
+If you are at the last word of a line, the "w" command will take you to the
+first word in the next line. Thus you can use this to move through a
+paragraph, much faster than using "l". "b" does the same in the other
+direction.
+
+A word ends at a non-word character, such as a ".", "-" or ")". To change
+what Vim considers to be a word, see the 'iskeyword' option.
+ It is also possible to move by white-space separated WORDs. This is not a
+word in the normal sense, that's why the uppercase is used. The commands for
+moving by WORDs are also uppercase, as this figure shows:
+
+ ge b w e
+ <- <- ---> --->
+ This is-a line, with special/separated/words (and some more). ~
+ <----- <----- --------------------> ----->
+ gE B W E
+
+With this mix of lowercase and uppercase commands, you can quickly move
+forward and backward through a paragraph.
+
+==============================================================================
+*03.2* Moving to the start or end of a line
+
+The "$" command moves the cursor to the end of a line. If your keyboard has
+an <End> key it will do the same thing.
+
+The "^" command moves to the first non-blank character of the line. The "0"
+command (zero) moves to the very first character of the line. The <Home> key
+does the same thing. In a picture:
+
+ ^
+ <------------
+ .....This is a line with example text ~
+ <----------------- --------------->
+ 0 $
+
+(the "....." indicates blanks here)
+
+ The "$" command takes a count, like most movement commands. But moving to
+the end of the line several times doesn't make sense. Therefore it causes the
+editor to move to the end of another line. For example, "1$" moves you to
+the end of the first line (the one you're on), "2$" to the end of the next
+line, and so on.
+ The "0" command doesn't take a count argument, because the "0" would be
+part of the count. Unexpectedly, using a count with "^" doesn't have any
+effect.
+
+==============================================================================
+*03.3* Moving to a character
+
+One of the most useful movement commands is the single-character search
+command. The command "fx" searches forward in the line for the single
+character x. Hint: "f" stands for "Find".
+ For example, you are at the beginning of the following line. Suppose you
+want to go to the h of human. Just execute the command "fh" and the cursor
+will be positioned over the h:
+
+ To err is human. To really foul up you need a computer. ~
+ ---------->--------------->
+ fh fy
+
+This also shows that the command "fy" moves to the end of the word really.
+ You can specify a count; therefore, you can go to the "l" of "foul" with
+"3fl":
+
+ To err is human. To really foul up you need a computer. ~
+ --------------------->
+ 3fl
+
+The "F" command searches to the left:
+
+ To err is human. To really foul up you need a computer. ~
+ <---------------------
+ Fh
+
+The "tx" command works like the "fx" command, except it stops one character
+before the searched character. Hint: "t" stands for "To". The backward
+version of this command is "Tx".
+
+ To err is human. To really foul up you need a computer. ~
+ <------------ ------------->
+ Th tn
+
+These four commands can be repeated with ";". "," repeats in the other
+direction. The cursor is never moved to another line. Not even when the
+sentence continues.
+
+Sometimes you will start a search, only to realize that you have typed the
+wrong command. You type "f" to search backward, for example, only to realize
+that you really meant "F". To abort a search, press <Esc>. So "f<Esc>" is an
+aborted forward search and doesn't do anything. Note: <Esc> cancels most
+operations, not just searches.
+
+==============================================================================
+*03.4* Matching a paren
+
+When writing a program you often end up with nested () constructs. Then the
+"%" command is very handy: It moves to the matching paren. If the cursor is
+on a "(" it will move to the matching ")". If it's on a ")" it will move to
+the matching "(".
+
+ %
+ <----->
+ if (a == (b * c) / d) ~
+ <---------------->
+ %
+
+This also works for [] and {} pairs. (This can be defined with the
+'matchpairs' option.)
+
+When the cursor is not on a useful character, "%" will search forward to find
+one. Thus if the cursor is at the start of the line of the previous example,
+"%" will search forward and find the first "(". Then it moves to its match:
+
+ if (a == (b * c) / d) ~
+ ---+---------------->
+ %
+
+==============================================================================
+*03.5* Moving to a specific line
+
+If you are a C or C++ programmer, you are familiar with error messages such as
+the following:
+
+ prog.c:33: j undeclared (first use in this function) ~
+
+This tells you that you might want to fix something on line 33. So how do you
+find line 33? One way is to do "9999k" to go to the top of the file and "32j"
+to go down thirty two lines. It is not a good way, but it works. A much
+better way of doing things is to use the "G" command. With a count, this
+command positions you at the given line number. For example, "33G" puts you
+on line 33. (For a better way of going through a compiler's error list, see
+|usr_30.txt|, for information on the :make command.)
+ With no argument, "G" positions you at the end of the file. A quick way to
+go to the start of a file use "gg". "1G" will do the same, but is a tiny bit
+more typing.
+
+ | first line of a file ^
+ | text text text text |
+ | text text text text | gg
+ 7G | text text text text |
+ | text text text text
+ | text text text text
+ V text text text text |
+ text text text text | G
+ text text text text |
+ last line of a file V
+
+Another way to move to a line is using the "%" command with a count. For
+example "50%" moves you to halfway the file. "90%" goes to near the end.
+
+The previous assumes that you want to move to a line in the file, no matter if
+it's currently visible or not. What if you want to move to one of the lines
+you can see? This figure shows the three commands you can use:
+
+ +---------------------------+
+ H --> | text sample text |
+ | sample text |
+ | text sample text |
+ | sample text |
+ M --> | text sample text |
+ | sample text |
+ | text sample text |
+ | sample text |
+ L --> | text sample text |
+ +---------------------------+
+
+Hints: "H" stands for Home, "M" for Middle and "L" for Last.
+
+==============================================================================
+*03.6* Telling where you are
+
+To see where you are in a file, there are three ways:
+
+1. Use the CTRL-G command. You get a message like this (assuming the 'ruler'
+ option is off):
+
+ "usr_03.txt" line 233 of 650 --35%-- col 45-52 ~
+
+ This shows the name of the file you are editing, the line number where the
+ cursor is, the total number of lines, the percentage of the way through
+ the file and the column of the cursor.
+ Sometimes you will see a split column number. For example, "col 2-9".
+ This indicates that the cursor is positioned on the second character, but
+ because character one is a tab, occupying eight spaces worth of columns,
+ the screen column is 9.
+
+2. Set the 'number' option. This will display a line number in front of
+ every line: >
+
+ :set number
+<
+ To switch this off again: >
+
+ :set nonumber
+<
+ Since 'number' is a boolean option, prepending "no" to its name has the
+ effect of switching it off. A boolean option has only these two values,
+ it is either on or off.
+ Vim has many options. Besides the boolean ones there are options with
+ a numerical value and string options. You will see examples of this where
+ they are used.
+
+3. Set the 'ruler' option. This will display the cursor position in the
+ lower right corner of the Vim window: >
+
+ :set ruler
+
+Using the 'ruler' option has the advantage that it doesn't take much room,
+thus there is more space for your text.
+
+==============================================================================
+*03.7* Scrolling around
+
+The CTRL-U command scrolls down half a screen of text. Think of looking
+through a viewing window at the text and moving this window up by half the
+height of the window. Thus the window moves up over the text, which is
+backward in the file. Don't worry if you have a little trouble remembering
+which end is up. Most users have the same problem.
+ The CTRL-D command moves the viewing window down half a screen in the file,
+thus scrolls the text up half a screen.
+
+ +----------------+
+ | some text |
+ | some text |
+ | some text |
+ +---------------+ | some text |
+ | some text | CTRL-U --> | |
+ | | | 123456 |
+ | 123456 | +----------------+
+ | 7890 |
+ | | +----------------+
+ | example | CTRL-D --> | 7890 |
+ +---------------+ | |
+ | example |
+ | example |
+ | example |
+ | example |
+ +----------------+
+
+To scroll one line at a time use CTRL-E (scroll up) and CTRL-Y (scroll down).
+Think of CTRL-E to give you one line Extra. (If you use MS-Windows compatible
+key mappings CTRL-Y will redo a change instead of scroll.)
+
+To scroll forward by a whole screen (except for two lines) use CTRL-F. The
+other way is backward, CTRL-B is the command to use. Fortunately CTRL-F is
+Forward and CTRL-B is Backward, that's easy to remember.
+
+A common issue is that after moving down many lines with "j" your cursor is at
+the bottom of the screen. You would like to see the context of the line with
+the cursor. That's done with the "zz" command.
+
+ +------------------+ +------------------+
+ | some text | | some text |
+ | some text | | some text |
+ | some text | | some text |
+ | some text | zz --> | line with cursor |
+ | some text | | some text |
+ | some text | | some text |
+ | line with cursor | | some text |
+ +------------------+ +------------------+
+
+The "zt" command puts the cursor line at the top, "zb" at the bottom. There
+are a few more scrolling commands, see |Q_sc|. To always keep a few lines of
+context around the cursor, use the 'scrolloff' option.
+
+==============================================================================
+*03.8* Simple searches
+
+To search for a string, use the "/string" command. To find the word include,
+for example, use the command: >
+
+ /include
+
+You will notice that when you type the "/" the cursor jumps to the last line
+of the Vim window, like with colon commands. That is where you type the word.
+You can press the backspace key (backarrow or <BS>) to make corrections. Use
+the <Left> and <Right> cursor keys when necessary.
+ Pressing <Enter> executes the command.
+
+ Note:
+ The characters .*[]^%/\?~$ have special meaning. If you want to use
+ them in a search you must put a \ in front of them. See below.
+
+To find the next occurrence of the same string use the "n" command. Use this
+to find the first #include after the cursor: >
+
+ /#include
+
+And then type "n" several times. You will move to each #include in the text.
+You can also use a count if you know which match you want. Thus "3n" finds
+the third match. Using a count with "/" doesn't work.
+
+The "?" command works like "/" but searches backwards: >
+
+ ?word
+
+The "N" command repeats the last search the opposite direction. Thus using
+"N" after a "/" command search backwards, using "N" after "?" searches
+forward.
+
+
+IGNORING CASE
+
+Normally you have to type exactly what you want to find. If you don't care
+about upper or lowercase in a word, set the 'ignorecase' option: >
+
+ :set ignorecase
+
+If you now search for "word", it will also match "Word" and "WORD". To match
+case again: >
+
+ :set noignorecase
+
+
+HISTORY
+
+Suppose you do three searches: >
+
+ /one
+ /two
+ /three
+
+Now let's start searching by typing a simple "/" without pressing <Enter>. If
+you press <Up> (the cursor key), Vim puts "/three" on the command line.
+Pressing <Enter> at this point searches for three. If you do not press
+<Enter>, but press <Up> instead, Vim changes the prompt to "/two". Another
+press of <Up> moves you to "/one".
+ You can also use the <Down> cursor key to move through the history of
+search commands in the other direction.
+
+If you know what a previously used pattern starts with, and you want to use it
+again, type that character before pressing <Up>. With the previous example,
+you can type "/o<Up>" and Vim will put "/one" on the command line.
+
+The commands starting with ":" also have a history. That allows you to recall
+a previous command and execute it again. These two histories are separate.
+
+
+SEARCHING FOR A WORD IN THE TEXT
+
+Suppose you see the word "TheLongFunctionName" in the text and you want to
+find the next occurrence of it. You could type "/TheLongFunctionName", but
+that's a lot of typing. And when you make a mistake Vim won't find it.
+ There is an easier way: Position the cursor on the word and use the "*"
+command. Vim will grab the word under the cursor and use it as the search
+string.
+ The "#" command does the same in the other direction. You can prepend a
+count: "3*" searches for the third occurrence of the word under the cursor.
+
+
+SEARCHING FOR WHOLE WORDS
+
+If you type "/the" it will also match "there". To only find words that end
+in "the" use: >
+
+ /the\>
+
+The "\>" item is a special marker that only matches at the end of a word.
+Similarly "\<" only matches at the begin of a word. Thus to search for the
+word "the" only: >
+
+ /\<the\>
+
+This does not match "there" or "soothe". Notice that the "*" and "#" commands
+use these start-of-word and end-of-word markers to only find whole words (you
+can use "g*" and "g#" to match partial words).
+
+
+HIGHLIGHTING MATCHES
+
+While editing a program you see a variable called "nr". You want to check
+where it's used. You could move the cursor to "nr" and use the "*" command
+and press "n" to go along all the matches.
+ There is another way. Type this command: >
+
+ :set hlsearch
+
+If you now search for "nr", Vim will highlight all matches. That is a very
+good way to see where the variable is used, without the need to type commands.
+ To switch this off: >
+
+ :set nohlsearch
+
+Then you need to switch it on again if you want to use it for the next search
+command. If you only want to remove the highlighting, use this command: >
+
+ :nohlsearch
+
+This doesn't reset the option. Instead, it disables the highlighting. As
+soon as you execute a search command, the highlighting will be used again.
+Also for the "n" and "N" commands.
+
+
+TUNING SEARCHES
+
+There are a few options that change how searching works. These are the
+essential ones:
+>
+ :set incsearch
+
+This makes Vim display the match for the string while you are still typing it.
+Use this to check if the right match will be found. Then press <Enter> to
+really jump to that location. Or type more to change the search string.
+>
+ :set nowrapscan
+
+This stops the search at the end of the file. Or, when you are searching
+backwards, at the start of the file. The 'wrapscan' option is on by default,
+thus searching wraps around the end of the file.
+
+
+INTERMEZZO
+
+If you like one of the options mentioned before, and set it each time you use
+Vim, you can put the command in your Vim startup file.
+ Edit the file, as mentioned at |not-compatible|. Or use this command to
+find out where it is: >
+
+ :scriptnames
+
+Edit the file, for example with: >
+
+ :edit ~/.vimrc
+
+Then add a line with the command to set the option, just like you typed it in
+Vim. Example: >
+
+ Go:set hlsearch<Esc>
+
+"G" moves to the end of the file. "o" starts a new line, where you type the
+":set" command. You end insert mode with <Esc>. Then write the file: >
+
+ ZZ
+
+If you now start Vim again, the 'hlsearch' option will already be set.
+
+==============================================================================
+*03.9* Simple search patterns
+
+The Vim editor uses regular expressions to specify what to search for.
+Regular expressions are an extremely powerful and compact way to specify a
+search pattern. Unfortunately, this power comes at a price, because regular
+expressions are a bit tricky to specify.
+ In this section we mention only a few essential ones. More about search
+patterns and commands in chapter 27 |usr_27.txt|. You can find the full
+explanation here: |pattern|.
+
+
+BEGINNING AND END OF A LINE
+
+The ^ character matches the beginning of a line. On an English-US keyboard
+you find it above the 6. The pattern "include" matches the word include
+anywhere on the line. But the pattern "^include" matches the word include
+only if it is at the beginning of a line.
+ The $ character matches the end of a line. Therefore, "was$" matches the
+word was only if it is at the end of a line.
+
+Let's mark the places where "the" matches in this example line with "x"s:
+
+ the solder holding one of the chips melted and the ~
+ xxx xxx xxx
+
+Using "/the$" we find this match:
+
+ the solder holding one of the chips melted and the ~
+ xxx
+
+And with "/^the" we find this one:
+ the solder holding one of the chips melted and the ~
+ xxx
+
+You can try searching with "/^the$", it will only match a single line
+consisting of "the". White space does matter here, thus if a line contains a
+space after the word, like "the ", the pattern will not match.
+
+
+MATCHING ANY SINGLE CHARACTER
+
+The . (dot) character matches any existing character. For example, the
+pattern "c.m" matches a string whose first character is a c, whose second
+character is anything, and whose the third character is m. Example:
+
+ We use a computer that became the cummin winter. ~
+ xxx xxx xxx
+
+
+MATCHING SPECIAL CHARACTERS
+
+If you really want to match a dot, you must avoid its special meaning by
+putting a backslash before it.
+ If you search for "ter.", you will find these matches:
+
+ We use a computer that became the cummin winter. ~
+ xxxx xxxx
+
+Searching for "ter\." only finds the second match.
+
+==============================================================================
+*03.10* Using marks
+
+When you make a jump to a position with the "G" command, Vim remembers the
+position from before this jump. This position is called a mark. To go back
+where you came from, use this command: >
+
+ ``
+
+This ` is a backtick or open single-quote character.
+ If you use the same command a second time you will jump back again. That's
+because the ` command is a jump itself, and the position from before this jump
+is remembered.
+
+Generally, every time you do a command that can move the cursor further than
+within the same line, this is called a jump. This includes the search
+commands "/" and "n" (it doesn't matter how far away the match is). But not
+the character searches with "fx" and "tx" or the word movements "w" and "e".
+ Also, "j" and "k" are not considered to be a jump. Even when you use a
+count to make them move the cursor quite a long way away.
+
+The `` command jumps back and forth, between two points. The CTRL-O command
+jumps to older positions (Hint: O for older). CTRL-I then jumps back to newer
+positions (Hint: I is just next to O on the keyboard). Consider this sequence
+of commands: >
+
+ 33G
+ /^The
+ CTRL-O
+
+You first jump to line 33, then search for a line that starts with "The".
+Then with CTRL-O you jump back to line 33. Another CTRL-O takes you back to
+where you started. If you now use CTRL-I you jump to line 33 again. And
+to the match for "The" with another CTRL-I.
+
+
+ | example text ^ |
+ 33G | example text | CTRL-O | CTRL-I
+ | example text | |
+ V line 33 text ^ V
+ | example text | |
+ /^The | example text | CTRL-O | CTRL-I
+ V There you are | V
+ example text
+
+ Note:
+ CTRL-I is the same as <Tab>.
+
+The ":jumps" command gives a list of positions you jumped to. The entry which
+you used last is marked with a ">".
+
+
+NAMED MARKS
+
+Vim enables you to place your own marks in the text. The command "ma" marks
+the place under the cursor as mark a. You can place 26 marks (a through z) in
+your text. You can't see them, it's just a position that Vim remembers.
+ To go to a mark, use the command `{mark}, where "{mark} is the mark letter.
+Thus to move to the a mark:
+>
+ `a
+
+The command 'mark (single quotation mark, or apostrophe) moves you to the
+beginning of the line containing the mark. This differs from the `mark
+command, which moves you to marked column.
+
+The marks can be very useful when working on two related parts in a file.
+Suppose you have some text near the start of the file you need to look at,
+while working on some text near the end of the file.
+ Move to the text at the start and place the s (start) mark there: >
+
+ ms
+
+The move to the text you want to work on and put the e (end) mark there: >
+
+ me
+
+Now you can move around, and when you want to look at the start of the file,
+you use this to jump there: >
+
+ 's
+
+Then you can use '' to jump back to where you were, or 'e to jump to the text
+you were working on at the end.
+ There is nothing special about using s for start and e for end, they are
+just easy to remember.
+
+You can use this command to get a list of marks: >
+
+ :marks
+
+You will notice a few special marks. These include:
+
+ ' The cursor position before doing a jump
+ " The cursor position when last editing the file
+ [ Start of the last change
+ ] End of the last change
+
+==============================================================================
+
+Next chapter: |usr_04.txt| Making small changes
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_04.txt b/runtime/doc/usr_04.txt
new file mode 100644
index 000000000..619e27813
--- /dev/null
+++ b/runtime/doc/usr_04.txt
@@ -0,0 +1,514 @@
+*usr_04.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Making small changes
+
+
+This chapter shows you several ways of making corrections and moving text
+around. It teaches you the three basic ways to change text: operator-motion,
+Visual mode and text objects.
+
+|04.1| Operators and motions
+|04.2| Changing text
+|04.3| Repeating a change
+|04.4| Visual mode
+|04.5| Moving text
+|04.6| Copying text
+|04.7| Using the clipboard
+|04.8| Text objects
+|04.9| Replace mode
+|04.10| Conclusion
+
+ Next chapter: |usr_05.txt| Set your settings
+ Previous chapter: |usr_03.txt| Moving around
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*04.1* Operators and motions
+
+In chapter 2 you learned the "x" command to delete a single character. And
+using a count: "4x" deletes four characters.
+ The "dw" command deletes a word. You may recognize the "w" command as the
+move word command. In fact, the "d" command may be followed by any motion
+command, and it deletes from the current location to the place where the
+cursor winds up.
+ The "4w" command, for example, moves the cursor over four words. The d4w
+command deletes four words.
+
+ To err is human. To really foul up you need a computer. ~
+ ------------------>
+ d4w
+
+ To err is human. you need a computer. ~
+
+Vim only deletes up to the position where the motion takes the cursor. That's
+because Vim knows that you probably don't want to delete the first character
+of a word. If you use the "e" command to move to the end of a word, Vim
+guesses that you do want to include that last character:
+
+ To err is human. you need a computer. ~
+ -------->
+ d2e
+
+ To err is human. a computer. ~
+
+Whether the character under the cursor is included depends on the command you
+used to move to that character. The reference manual calls this "exclusive"
+when the character isn't included and "inclusive" when it is.
+
+The "$" command moves to the end of a line. The "d$" command deletes from the
+cursor to the end of the line. This is an inclusive motion, thus the last
+character of the line is included in the delete operation:
+
+ To err is human. a computer. ~
+ ------------>
+ d$
+
+ To err is human ~
+
+There is a pattern here: operator-motion. You first type an operator command.
+For example, "d" is the delete operator. Then you type a motion command like
+"4l" or "w". This way you can operate on any text you can move over.
+
+==============================================================================
+*04.2* Changing text
+
+Another operator is "c", change. It acts just like the "d" operator, except
+it leaves you in Insert mode. For example, "cw" changes a word. Or more
+specifically, it deletes a word and then puts you in Insert mode.
+
+ To err is human ~
+ ------->
+ c2wbe<Esc>
+
+ To be human ~
+
+This "c2wbe<Esc>" contains these bits:
+
+ c the change operator
+ 2w move two words (they are deleted and Insert mode started)
+ be insert this text
+ <Esc> back to Normal mode
+
+If you have paid attention, you will have noticed something strange: The space
+before "human" isn't deleted. There is a saying that for every problem there
+is an answer that is simple, clear, and wrong. That is the case with the
+example used here for the "cw" command. The c operator works just like the
+d operator, with one exception: "cw". It actually works like "ce", change to
+end of word. Thus the space after the word isn't included. This is an
+exception that dates back to the old Vi. Since many people are used to it
+now, the inconsistency has remained in Vim.
+
+
+MORE CHANGES
+
+Like "dd" deletes a whole line, "cc" changes a whole line. It keeps the
+existing indent (leading white space) though.
+
+Just like "d$" deletes until the end of the line, "c$" changes until the end
+of the line. It's like doing "d$" to delete the text and then "a" to start
+Insert mode and append new text.
+
+
+SHORTCUTS
+
+Some operator-motion commands are used so often that they have been given a
+single letter command:
+
+ x stands for dl (delete character under the cursor)
+ X stands for dh (delete character left of the cursor)
+ D stands for d$ (delete to end of the line)
+ C stands for c$ (change to end of the line)
+ s stands for cl (change one character)
+ S stands for cc (change a whole line)
+
+
+WHERE TO PUT THE COUNT
+
+The commands "3dw" and "d3w" delete three words. If you want to get really
+picky about things, the first command, "3dw", deletes one word three times;
+the command "d3w" deletes three words once. This is a difference without a
+distinction. You can actually put in two counts, however. For example,
+"3d2w" deletes two words, repeated three times, for a total of six words.
+
+
+REPLACING WITH ONE CHARACTER
+
+The "r" command is not an operator. It waits for you to type a character, and
+will replace the character under the cursor with it. You could do the same
+with "cl" or with the "s" command, but with "r" you don't have to press <Esc>
+
+ there is somerhing grong here ~
+ rT rt rw
+
+ There is something wrong here ~
+
+Using a count with "r" causes that many characters to be replaced with the
+same character. Example:
+
+ There is something wrong here ~
+ 5rx
+
+ There is something xxxxx here ~
+
+To replace a character with a line break use "r<Enter>". This deletes one
+character and inserts a line break. Using a count here only applies to the
+number of characters deleted: "4r<Enter>" replaces four characters with one
+line break.
+
+==============================================================================
+*04.3* Repeating a change
+
+The "." command is one of the most simple yet powerful commands in Vim. It
+repeats the last change. For instance, suppose you are editing an HTML file
+and want to delete all the <B> tags. You position the cursor on the first <
+and delete the <B> with the command "df>". You then go to the < of the next
+</B> and kill it using the "." command. The "." command executes the last
+change command (in this case, "df>"). To delete another tag, position the
+cursor on the < and use the "." command.
+
+ To <B>generate</B> a table of <B>contents ~
+ f< find first < --->
+ df> delete to > -->
+ f< find next < --------->
+ . repeat df> --->
+ f< find next < ------------->
+ . repeat df> -->
+
+The "." command works for all changes you make, except for the "u" (undo),
+CTRL-R (redo) and commands that start with a colon (:).
+
+Another example: You want to change the word "four" to "five". It appears
+several times in your text. You can do this quickly with this sequence of
+commands:
+
+ /four<Enter> find the first string "four"
+ cwfive<Esc> change the word to "five"
+ n find the next "four"
+ . repeat the change to "five'
+ n find the next "four"
+ . repeat the change
+ etc.
+
+==============================================================================
+*04.4* Visual mode
+
+To delete simple items the operator-motion changes work quite well. But often
+it's not so easy to decide which command will move over the text you want to
+change. Then you can use Visual mode.
+
+You start Visual mode by pressing "v". You move the cursor over the text you
+want to work on. While you do this, the text is highlighted. Finally type
+the operator command.
+ For example, to delete from halfway one word to halfway another word:
+
+ This is an examination sample of visual mode ~
+ ---------->
+ velllld
+
+ This is an example of visual mode ~
+
+When doing this you don't really have to count how many times you have to
+press "l" to end up in the right position. You can immediately see what text
+will be deleted when you press "d".
+
+If at any time you decide you don't want to do anything with the highlighted
+text, just press <Esc> and Visual mode will stop without doing anything.
+
+
+SELECTING LINES
+
+If you want to work on whole lines, use "V" to start Visual mode. You will
+see right away that the whole line is highlighted, without moving around.
+When you move left or right nothing changes. When you move up or down the
+selection is extended whole lines at a time.
+ For example, select three lines with "Vjj":
+
+ +------------------------+
+ | text more text |
+ >> | more text more text | |
+ selected lines >> | text text text | | Vjj
+ >> | text more | V
+ | more text more |
+ +------------------------+
+
+
+SELECTING BLOCKS
+
+If you want to work on a rectangular block of characters, use CTRL-V to start
+Visual mode. This is very useful when working on tables.
+
+ name Q1 Q2 Q3
+ pierre 123 455 234
+ john 0 90 39
+ steve 392 63 334
+
+To delete the middle "Q2" column, move the cursor to the "Q" of "Q2". Press
+CTRL-V to start blockwise Visual mode. Now move the cursor three lines down
+with "3j" and to the next word with "w". You can see the first character of
+the last column is included. To exclude it, use "h". Now press "d" and the
+middle column is gone.
+
+
+GOING TO THE OTHER SIDE
+
+If you have selected some text in Visual mode, and discover that you need to
+change the other end of the selection, use the "o" command (Hint: o for other
+end). The cursor will go to the other end, and you can move the cursor to
+change where the selection starts. Pressing "o" again brings you back to the
+other end.
+
+When using blockwise selection, you have four corners. "o" only takes you to
+one of the other corners, diagonally. Use "O" to move to the other corner in
+the same line.
+
+Note that "o" and "O" in Visual mode work very different from Normal mode,
+where they open a new line below or above the cursor.
+
+==============================================================================
+*04.5* Moving text
+
+When you delete something with the "d", "x", or another command, the text is
+saved. You can paste it back by using the p command. (The Vim name for
+this is put).
+ Take a look at how this works. First you will delete an entire line, by
+putting the cursor on the line you want to delete and typing "dd". Now you
+move the cursor to where you want to put the line and use the "p" (put)
+command. The line is inserted on the line below the cursor.
+
+ a line a line a line
+ line 2 dd line 3 p line 3
+ line 3 line 2
+
+Because you deleted an entire line, the "p" command placed the text line below
+the cursor. If you delete part of a line (a word, for instance), the "p"
+command puts it just after the cursor.
+
+ Some more boring try text to out commands. ~
+ ---->
+ dw
+
+ Some more boring text to out commands. ~
+ ------->
+ welp
+
+ Some more boring text to try out commands. ~
+
+
+MORE ON PUTTING
+
+The "P" command puts text like "p", but before the cursor. When you deleted a
+whole line with "dd", "P" will put it back above the cursor. When you deleted
+a word with "dw", "P" will put it back just before the cursor.
+
+You can repeat putting as many times as you like. The same text will be used.
+
+You can use a count with "p" and "P". The text will be repeated as many times
+as specified with the count. Thus "dd" and then "3p" puts three copies of the
+same deleted line.
+
+
+SWAPPING TWO CHARACTERS
+
+Frequently when you are typing, your fingers get ahead of your brain (or the
+other way around?). The result is a typo such as "teh" for "the". Vim
+makes it easy to correct such problems. Just put the cursor on the e of "teh"
+and execute the command "xp". This works as follows: "x" deletes the
+character e and places it in a register. "p" puts the text after the cursor,
+which is after the h.
+
+ teh th the ~
+ x p
+
+==============================================================================
+*04.6* Copying text
+
+To copy text from one place to another, you could delete it, use "u" to undo
+the deletion and then "p" to put it somewhere else. There is an easier way:
+yanking. The "y" operator copies text into a register. Then a "p" command
+can be used to put it.
+ Yanking is just a Vim name for copying. The "c" letter was already used
+for the change operator, and "y" was still available. Calling this
+operator "yank" made it easier to remember to use the "y" key.
+
+Since "y" is an operator, you use "yw" to yank a word. A count is possible as
+usual. To yank two words use "y2w". Example:
+
+ let sqr = LongVariable * ~
+ -------------->
+ y2w
+
+ let sqr = LongVariable * ~
+ p
+
+ let sqr = LongVariable * LongVariable ~
+
+Notice that "yw" includes the white space after a word. If you don't want
+this, use "ye".
+
+The "yy" command yanks a whole line, just like "dd" deletes a whole line.
+Unexpectedly, while "D" deletes from the cursor to the end of the line, "Y"
+works like "yy", it yanks the whole line. Watch out for this inconsistency!
+Use "y$" to yank to the end of the line.
+
+ a text line yy a text line a text line
+ line 2 line 2 p line 2
+ last line last line a text line
+ last line
+
+==============================================================================
+*04.7* Using the clipboard
+
+If you are using the GUI version of Vim (gvim), you can find the "Copy" item
+in the "Edit" menu. First select some text with Visual mode, then use the
+Edit/Copy menu. The selected text is now copied to the clipboard. You can
+paste the text in other programs. In Vim itself too.
+
+If you have copied text to the clipboard in another application, you can paste
+it in Vim with the Edit/Paste menu. This works in Normal mode and Insert
+mode. In Visual mode the selected text is replaced with the pasted text.
+
+The "Cut" menu item deletes the text before it's put on the clipboard. The
+"Copy", "Cut" and "Paste" items are also available in the popup menu (only
+when there is a popup menu, of course). If your Vim has a toolbar, you can
+also find these items there.
+
+If you are not using the GUI, or if you don't like using a menu, you have to
+use another way. You use the normal "y" (yank) and "p" (put) commands, but
+prepend "* (double-quote star) before it. To copy a line to the clipboard: >
+
+ "*yy
+
+To put text from the clipboard back into the text: >
+
+ "*p
+
+This only works on versions of Vim that include clipboard support. More about
+the clipboard in section |09.3| and here: |clipboard|.
+
+==============================================================================
+*04.8* Text objects
+
+If the cursor is in the middle of a word and want to delete that word, you
+need to move back to its start before you can do "dw". There is a simpler way
+to do this: "daw".
+
+ this is some example text. ~
+ daw
+
+ this is some text. ~
+
+The "d" of "daw" is the delete operator. "aw" is a text object. Hint: "aw"
+stands for "A Word". Thus "daw" is "Delete A Word". To be precise, the white
+space after the word is also deleted (the white space before the word at the
+end of the line).
+
+Using text objects is the third way to make changes in Vim. We already had
+operator-motion and Visual mode. Now we add operator-text object.
+ It is very similar to operator-motion, but instead of operating on the text
+between the cursor position before and after a movement command, the text
+object is used as a whole. It doesn't matter where in the object the cursor
+was.
+
+To change a whole sentence use "cis". Take this text:
+
+ Hello there. This ~
+ is an example. Just ~
+ some text. ~
+
+Move to the start of the second line, on "is an". Now use "cis":
+
+ Hello there. Just ~
+ some text. ~
+
+The cursor is in between the blanks in the first line. Now you type the new
+sentence "Another line.":
+
+ Hello there. Another line. Just ~
+ some text. ~
+
+"cis" consists of the "c" (change) operator and the "is" text object. This
+stands for "Inner Sentence". There is also the "as" (a sentence) object. The
+difference is that "as" includes the white space after the sentence and "is"
+doesn't. If you would delete a sentence, you want to delete the white space
+at the same time, thus use "das". If you want to type new text the white
+space can remain, thus you use "cis".
+
+You can also use text objects in Visual mode. It will include the text object
+in the Visual selection. Visual mode continues, thus you can do this several
+times. For example, start Visual mode with "v" and select a sentence with
+"as". Now you can repeat "as" to include more sentences. Finally you use an
+operator to do something with the selected sentences.
+
+You can find a long list of text objects here: |text-objects|.
+
+==============================================================================
+*04.9* Replace mode
+
+The "R" command causes Vim to enter replace mode. In this mode, each
+character you type replaces the one under the cursor. This continues until
+you type <Esc>.
+ In this example you start Replace mode on the first "t" of "text":
+
+ This is text. ~
+ Rinteresting.<Esc>
+
+ This is interesting. ~
+
+You may have noticed that this command replaced 5 characters in the line with
+twelve others. The "R" command automatically extends the line if it runs out
+of characters to replace. It will not continue on the next line.
+
+You can switch between Insert mode and Replace mode with the <Insert> key.
+
+When you use <BS> (backspace) to make correction, you will notice that the
+old text is put back. Thus it works like an undo command for the last typed
+character.
+
+==============================================================================
+*04.10* Conclusion
+
+The operators, movement commands and text objects give you the possibility to
+make lots of combinations. Now that you know how it works, you can use N
+operators with M movement commands to make N * M commands!
+
+You can find a list of operators here: |operator|
+
+For example, there are many other ways to delete pieces of text. Here are a
+few often used ones:
+
+x delete character under the cursor (short for "dl")
+X delete character before the cursor (short for "dh")
+D delete from cursor to end of line (short for "d$")
+dw delete from cursor to next start of word
+db delete from cursor to previous start of word
+diw delete word under the cursor (excluding white space)
+daw delete word under the cursor (including white space)
+dG delete until the end of the file
+dgg delete until the start of the file
+
+If you use "c" instead of "d" they become change commands. And with "y" you
+yank the text. And so forth.
+
+
+There are a few often used commands to make changes that didn't fit somewhere
+else:
+
+ ~ change case of the character under the cursor, and move the
+ cursor to the next character. This is not an operator (unless
+ 'tildeop' is set), thus you can't use it with a motion
+ command. It does works in Visual mode and changes case for
+ all the selected text then.
+
+ I Start Insert mode after moving the cursor to the first
+ non-blank in the line.
+
+ A Start Insert mode after moving the cursor to the end of the
+ line.
+
+==============================================================================
+
+Next chapter: |usr_05.txt| Set your settings
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
new file mode 100644
index 000000000..ee9eba43a
--- /dev/null
+++ b/runtime/doc/usr_05.txt
@@ -0,0 +1,616 @@
+*usr_05.txt* For Vim version 7.0aa. Last change: 2004 Mar 12
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Set your settings
+
+
+Vim can be tuned to work like you want it to. This chapter shows you how to
+make Vim start with options set to different values. Add plugins to extend
+Vims capabilities. Or define your own macros.
+
+|05.1| The vimrc file
+|05.2| The example vimrc file explained
+|05.3| Simple mappings
+|05.4| Adding a plugin
+|05.5| Adding a help file
+|05.6| The option window
+|05.7| Often used options
+
+ Next chapter: |usr_06.txt| Using syntax highlighting
+ Previous chapter: |usr_04.txt| Making small changes
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*05.1* The vimrc file *vimrc-intro*
+
+You probably got tired of typing commands that you use very often. To start
+with all your favorite option settings and mappings, you write them in what is
+called the vimrc file. Vim reads this file when it starts up.
+
+If you have trouble finding your vimrc file, use this command: >
+
+ :scriptnames
+
+One of the first files in the list should be called ".vimrc" or "_vimrc" and
+is located in your home directory.
+ If you don't have a vimrc file yet, see |vimrc| to find out where you can
+create a vimrc file. Also, the ":version" command mentions the name of the
+"user vimrc file" Vim looks for.
+
+For Unix this file is always used: >
+
+ ~/.vimrc
+
+For MS-DOS and MS-Windows it is mostly one of these: >
+
+ $HOME/_vimrc
+ $VIM/_vimrc
+
+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: >
+
+ set incsearch
+
+For this new line to take effect you need to exit Vim and start it again.
+Later you will learn how to do this without exiting Vim.
+
+This chapter only explains the most basic items. For more information on how
+to write a Vim script file: |usr_41.txt|.
+
+==============================================================================
+*05.2* The example vimrc file explained *vimrc_example.vim*
+
+In the first chapter was explained how the example vimrc (included in the
+Vim distribution) file can be used to make Vim startup in not-compatible mode
+(see |not-compatible|). The file can be found here:
+
+ $VIMRUNTIME/vimrc_example.vim ~
+
+In this section we will explain the various commands used in this file. This
+will give you hints about how to set up your own preferences. Not everything
+will be explained though. Use the ":help" command to find out more.
+
+>
+ set nocompatible
+
+As mentioned in the first chapter, these manuals explain Vim working in an
+improved way, thus not completely Vi compatible. Setting the 'compatible'
+option off, thus 'nocompatible' takes care of this.
+
+>
+ set backspace=indent,eol,start
+
+This specifies where in Insert mode the <BS> is allowed to delete the
+character in front of the cursor. The three items, separated by commas, tell
+Vim to delete the white space at the start of the line, a line break and the
+character before where Insert mode started.
+>
+
+ set autoindent
+
+This makes Vim use the indent of the previous line for a newly created line.
+Thus there is the same amount of white space before the new line. For example
+when pressing <Enter> in Insert mode, and when using the "o" command to open a
+new line.
+>
+
+ if has("vms")
+ set nobackup
+ else
+ set backup
+ endif
+
+This tells Vim to keep a backup copy of a file when overwriting it. But not
+on the VMS system, since it keeps old versions of files already. The backup
+file will have the same name as the original file with "~" added. See |07.4|
+>
+
+ set history=50
+
+Keep 50 commands and 50 search patterns in the history. Use another number if
+you want to remember fewer or more lines.
+>
+
+ set ruler
+
+Always display the current cursor position in the lower right corner of the
+Vim window.
+
+>
+ set showcmd
+
+Display an incomplete command in the lower right corner of the Vim window,
+left of the ruler. For example, when you type "2f", Vim is waiting for you to
+type the character to find and "2f" is displayed. When you press "w" next,
+the "2fw" command is executed and the displayed "2f" is removed.
+
+ +-------------------------------------------------+
+ |text in the Vim window |
+ |~ |
+ |~ |
+ |-- VISUAL -- 2f 43,8 17% |
+ +-------------------------------------------------+
+ ^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^
+ 'showmode' 'showcmd' 'ruler'
+
+>
+ set incsearch
+
+Display the match for a search pattern when halfway typing it.
+
+>
+ map Q gq
+
+This defines a key mapping. More about that in the next section. This
+defines the "Q" command to do formatting with the "gq" operator. This is how
+it worked before Vim 5.0. Otherwise the "Q" command starts Ex mode, but you
+will not need it.
+
+>
+ vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>
+
+This is a complicated mapping. It will not be explained how it works here.
+What it does is to make "p" in Visual mode overwrite the selected text with
+the previously yanked text. You can see that mappings can be used to do quite
+complicated things. Still, it is just a sequence of commands that are
+executed like you typed them.
+
+>
+ if &t_Co > 2 || has("gui_running")
+ syntax on
+ set hlsearch
+ endif
+
+This switches on syntax highlighting, but only if colors are available. And
+the 'hlsearch' option tells Vim to highlight matches with the last used search
+pattern. The "if" command is very useful to set options only when some
+condition is met. More about that in |usr_41.txt|.
+
+ *vimrc-filetype* >
+ filetype plugin indent on
+
+This switches on three very clever mechanisms:
+1. Filetype detection.
+ Whenever you start editing a file, Vim will try to figure out what kind of
+ file this is. When you edit "main.c", Vim will see the ".c" extension and
+ recognize this as a "c" filetype. When you edit a file that starts with
+ "#!/bin/sh", Vim will recognize it as a "sh" filetype.
+ The filetype detection is used for syntax highlighting and the other two
+ items below.
+ See |filetypes|.
+
+2. Using filetype plugin files
+ Many different filetypes are edited with different options. For example,
+ when you edit a "c" file, it's very useful to set the 'cindent' option to
+ automatically indent the lines. These commonly useful option settings are
+ included with Vim in filetype plugins. You can also add your own, see
+ |write-filetype-plugin|.
+
+3. Using indent files
+ When editing programs, the indent of a line can often be computed
+ automatically. Vim comes with these indent rules for a number of
+ filetypes. See |:filetype-indent-on| and 'indentexpr'.
+
+>
+ autocmd FileType text setlocal textwidth=78
+
+This makes Vim break text to avoid lines getting longer than 78 characters.
+But only for files that have been detected to be plain text. There are
+actually two parts here. "autocmd FileType text" is an autocommand. This
+defines that when the file type is set to "text" the following command is
+automatically executed. "setlocal textwidth=78" sets the 'textwidth' option
+to 78, but only locally in one file.
+>
+
+ autocmd BufReadPost *
+ \ if line("'\"") > 0 && line("'\"") <= line("$") |
+ \ exe "normal g`\"" |
+ \ endif
+
+Another autocommand. This time it is used after reading any file. The
+complicated stuff after it checks if the '" mark is defined, and jumps to it
+if so. The backslash at the start of a line is used to continue the command
+from the previous line. That avoids a line getting very long.
+See |line-continuation|. This only works in a Vim script file, not when
+typing commands at the command-line.
+
+==============================================================================
+*05.3* Simple mappings
+
+A mapping enables you to bind a set of Vim commands to a single key. Suppose,
+for example, that you need to surround certain words with curly braces. In
+other words, you need to change a word such as "amount" into "{amount}". With
+the :map command, you can tell Vim that the F5 key does this job. The command
+is as follows: >
+
+ :map <F5> i{<Esc>ea}<Esc>
+<
+ Note:
+ When entering this command, you must enter <F5> by typing four
+ characters. Similarly, <Esc> is not entered by pressing the <Esc>
+ key, but by typing five characters. Watch out for this difference
+ when reading the manual!
+
+Let's break this down:
+ <F5> The F5 function key. This is the trigger key that causes the
+ command to be executed as the key is pressed.
+
+ i{<Esc> Insert the { character. The <Esc> key ends Insert mode.
+
+ e Move to the end of the word.
+
+ a}<Esc> Append the } to the word.
+
+After you execute the ":map" command, all you have to do to put {} around a
+word is to put the cursor on the first character and press F5.
+
+In this example, the trigger is a single key; it can be any string. But when
+you use an existing Vim command, that command will no longer be available.
+You better avoid that.
+ One key that can be used with mappings is the backslash. Since you
+probably want to define more than one mapping, add another character. You
+could map "\p" to add parens around a word, and "\c" to add curly braces, for
+example: >
+
+ :map \p i(<Esc>ea)<Esc>
+ :map \c i{<Esc>ea}<Esc>
+
+You need to type the \ and the p quickly after another, so that Vim knows they
+belong together.
+
+The ":map" command (with no arguments) lists your current mappings. At
+least the ones for Normal mode. More about mappings in section |40.1|.
+
+==============================================================================
+*05.4* Adding a plugin *add-plugin* *plugin*
+
+Vim's functionality can be extended by adding plugins. A plugin is nothing
+more than a Vim script file that is loaded automatically when Vim starts. You
+can add a plugin very easily by dropping it in your plugin directory.
+{not available when Vim was compiled without the |+eval| feature}
+
+There are two types of plugins:
+
+ global plugin: Used for all kinds of files
+ filetype plugin: Only used for a specific type of file
+
+The global plugins will be discussed first, then the filetype ones
+|add-filetype-plugin|.
+
+
+GLOBAL PLUGINS *standard-plugin*
+
+When you start Vim, it will automatically load a number of global plugins.
+You don't have to do anything for this. They add functionality that most
+people will want to use, but which was implemented as a Vim script instead of
+being compiled into Vim. You can find them listed in the help index
+|standard-plugin-list|. Also see |load-plugins|.
+
+ *add-global-plugin*
+You can add a global plugin to add functionality that will always be present
+when you use Vim. There are only two steps for adding a global plugin:
+1. Get a copy of the plugin.
+2. Drop it in the right directory.
+
+
+GETTING A GLOBAL PLUGIN
+
+Where can you find plugins?
+- Some come with Vim. You can find them in the directory $VIMRUNTIME/macros
+ and its sub-directories.
+- Download from the net, check out http://vim.sf.net.
+- They are sometimes posted in a Vim |maillist|.
+- You could write one yourself, see |write-plugin|.
+
+
+USING A GLOBAL PLUGIN
+
+First read the text in the plugin itself to check for any special conditions.
+Then copy the file to your plugin directory:
+
+ system plugin directory ~
+ Unix ~/.vim/plugin/
+ PC and OS/2 $HOME/vimfiles/plugin or $VIM/vimfiles/plugin
+ Amiga s:vimfiles/plugin
+ Macintosh $VIM:vimfiles:plugin
+ Mac OS X ~/.vim/plugin/
+ RISC-OS Choices:vimfiles.plugin
+
+Example for Unix (assuming you didn't have a plugin directory yet): >
+
+ mkdir ~/.vim
+ mkdir ~/.vim/plugin
+ cp /usr/local/share/vim/vim60/macros/justify.vim ~/.vim/plugin
+
+That's all! Now you can use the commands defined in this plugin to justify
+text.
+
+
+FILETYPE PLUGINS *add-filetype-plugin* *ftplugins*
+
+The Vim distribution comes with a set of plugins for different filetypes that
+you can start using with this command: >
+
+ :filetype plugin on
+
+That's all! See |vimrc-filetype|.
+
+If you are missing a plugin for a filetype you are using, or you found a
+better one, you can add it. There are two steps for adding a filetype plugin:
+1. Get a copy of the plugin.
+2. Drop it in the right directory.
+
+
+GETTING A FILETYPE PLUGIN
+
+You can find them in the same places as the global plugins. Watch out if the
+type of file is mentioned, then you know if the plugin is a global or a
+filetype one. The scripts in $VIMRUNTIME/macros are global ones, the filetype
+plugins are in $VIMRUNTIME/ftplugin.
+
+
+USING A FILETYPE PLUGIN *ftplugin-name*
+
+You can add a filetype plugin by dropping it in the right directory. The
+name of this directory is in the same directory mentioned above for global
+plugins, but the last part is "ftplugin". Suppose you have found a plugin for
+the "stuff" filetype, and you are on Unix. Then you can move this file to the
+ftplugin directory: >
+
+ mv thefile ~/.vim/ftplugin/stuff.vim
+
+If that file already exists you already have a plugin for "stuff". You might
+want to check if the existing plugin doesn't conflict with the one you are
+adding. If it's OK, you can give the new one another name: >
+
+ mv thefile ~/.vim/ftplugin/stuff_too.vim
+
+The underscore is used to separate the name of the filetype from the rest,
+which can be anything. If you would use "otherstuff.vim" it wouldn't work, it
+would be loaded for the "otherstuff" filetype.
+
+On MS-DOS you cannot use long filenames. You would run into trouble if you
+add a second plugin and the filetype has more than six characters. You can
+use an extra directory to get around this: >
+
+ mkdir $VIM/vimfiles/ftplugin/fortran
+ copy thefile $VIM/vimfiles/ftplugin/fortran/too.vim
+
+The generic names for the filetype plugins are: >
+
+ ftplugin/<filetype>.vim
+ ftplugin/<filetype>_<name>.vim
+ ftplugin/<filetype>/<name>.vim
+
+Here "<name>" can be any name that you prefer.
+Examples for the "stuff" filetype on Unix: >
+
+ ~/.vim/ftplugin/stuff.vim
+ ~/.vim/ftplugin/stuff_def.vim
+ ~/.vim/ftplugin/stuff/header.vim
+
+The <filetype> part is the name of the filetype the plugin is to be used for.
+Only files of this filetype will use the settings from the plugin. The <name>
+part of the plugin file doesn't matter, you can use it to have several plugins
+for the same filetype. Note that it must end in ".vim".
+
+
+Further reading:
+|filetype-plugins| Documentation for the filetype plugins and information
+ about how to avoid that mappings cause problems.
+|load-plugins| When the global plugins are loaded during startup.
+|ftplugin-overrule| Overruling the settings from a global plugin.
+|write-plugin| How to write a plugin script.
+|plugin-details| For more information about using plugins or when your
+ plugin doesn't work.
+|new-filetype| How to detect a new file type.
+
+==============================================================================
+*05.5* Adding a help file *add-local-help* *matchit-install*
+
+If you are lucky, the plugin you installed also comes with a help file. We
+will explain how to install the help file, so that you can easily find help
+for your new plugin.
+ Let us use the "matchit.vim" plugin as an example (it is included with
+Vim). This plugin makes the "%" command jump to matching HTML tags,
+if/else/endif in Vim scripts, etc. Very useful, although it's not backwards
+compatible (that's why it is not enabled by default).
+ This plugin comes with documentation: "matchit.txt". Let's first copy the
+plugin to the right directory. This time we will do it from inside Vim, so
+that we can use $VIMRUNTIME. (You may skip some of the "mkdir" commands if
+you already have the directory.) >
+
+ :!mkdir ~/.vim
+ :!mkdir ~/.vim/plugin
+ :!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin
+
+Now create a "doc" directory in one of the directories in 'runtimepath'. >
+
+ :!mkdir ~/.vim/doc
+
+Copy the help file to the "doc" directory. >
+
+ :!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc
+
+Now comes the trick, which allows you to jump to the subjects in the new help
+file: Generate the local tags file with the |:helptags| command. >
+
+ :helptags ~/.vim/doc
+
+Now you can use the >
+
+ :help g%
+
+command to find help for "g%" in the help file you just added. You can see an
+entry for the local help file when you do: >
+
+ :help local-additions
+
+The title lines from the local help files are automagically added to this
+section. There you can see which local help files have been added and jump to
+them through the tag.
+
+For writing a local help file, see |write-local-help|.
+
+==============================================================================
+*05.6* The option window
+
+If you are looking for an option that does what you want, you can search in
+the help files here: |options|. Another way is by using this command: >
+
+ :options
+
+This opens a new window, with a list of options with a one-line explanation.
+The options are grouped by subject. Move the cursor to a subject and press
+<Enter> to jump there. Press <Enter> again to jump back. Or use CTRL-O.
+
+You can change the value of an option. For example, move to the "displaying
+text" subject. Then move the cursor down to this line:
+
+ set wrap nowrap ~
+
+When you hit <Enter>, the line will change to:
+
+ set nowrap wrap ~
+
+The option has now been switched off.
+
+Just above this line is a short description of the 'wrap' option. Move the
+cursor one line up to place it in this line. Now hit <Enter> and you jump to
+the full help on the 'wrap' option.
+
+For options that take a number or string argument you can edit the value.
+Then press <Enter> to apply the new value. For example, move the cursor a few
+lines up to this line:
+
+ set so=0 ~
+
+Position the cursor on the zero with "$". Change it into a five with "r5".
+Then press <Enter> to apply the new value. When you now move the cursor
+around you will notice that the text starts scrolling before you reach the
+border. This is what the 'scrolloff' option does, it specifies an offset
+from the window border where scrolling starts.
+
+==============================================================================
+*05.7* Often used options
+
+There are an awful lot of options. Most of them you will hardly ever use.
+Some of the more useful ones will be mentioned here. Don't forget you can
+find more help on these options with the ":help" command, with single quotes
+before and after the option name. For example: >
+
+ :help 'wrap'
+
+In case you have messed up an option value, you can set it back to the
+default by putting a ampersand (&) after the option name. Example: >
+
+ :set iskeyword&
+
+
+NOT WRAPPING LINES
+
+Vim normally wraps long lines, so that you can see all of the text. Sometimes
+it's better to let the text continue right of the window. Then you need to
+scroll the text left-right to see all of a long line. Switch wrapping of with
+this command: >
+
+ :set nowrap
+
+Vim will automatically scroll the text when you move to text that is not
+displayed. To see a context of ten characters, do this: >
+
+ :set sidescroll=10
+
+This doesn't change the text in the file, only the way it is displayed.
+
+
+WRAPPING MOVEMENT COMMANDS
+
+Most commands for moving around will stop moving at the start and end of a
+line. You can change that with the 'whichwrap' option. This sets it to the
+default value: >
+
+ :set whichwrap=b,s
+
+This allows the <BS> key, when used in the first position of a line, to move
+the cursor to the end of the previous line. And the <Space> key moves from
+the end of a line to the start of the next one.
+
+To allow the cursor keys <Left> and <Right> to also wrap, use this command: >
+
+ :set whichwrap=b,s,<,>
+
+This is still only for Normal mode. To let <Left> and <Right> do this in
+Insert mode as well: >
+
+ :set whichwrap=b,s,<,>,[,]
+
+There are a few other flags that can be added, see 'whichwrap'.
+
+
+VIEWING TABS
+
+When there are tabs in a file, you cannot see where they are. To make them
+visible: >
+
+ :set list
+
+Now every Tab is displayed as ^I. And a $ is displayed at the end of each
+line, so that you can spot trailing spaces that would otherwise go unnoticed.
+ A disadvantage is that this looks ugly when there are many Tabs in a file.
+If you have a color terminal, or are using the GUI, Vim can show the spaces
+and tabs as highlighted characters. Use the 'listchars' option: >
+
+ :set listchars=tab:>-,trail:-
+
+Now every tab will be displayed as ">---" (with more or less "-") and trailing
+white space as "-". Looks a lot better, doesn't it?
+
+
+KEYWORDS
+
+The 'iskeyword' option specifies which characters can appear in a word: >
+
+ :set iskeyword
+< iskeyword=@,48-57,_,192-255 ~
+
+The "@" stands for all alphabetic letters. "48-57" stands for ASCII
+characters 48 to 57, which are the numbers 0 to 9. "192-255" are the
+printable latin characters.
+ Sometimes you will want to include a dash in keywords, so that commands
+like "w" consider "upper-case" to be one word. You can do it like this: >
+
+ :set iskeyword+=-
+ :set iskeyword
+< iskeyword=@,48-57,_,192-255,- ~
+
+If you look at the new value, you will see that Vim has added a comma for you.
+ To remove a character use "-=". For example, to remove the underscore: >
+
+ :set iskeyword-=_
+ :set iskeyword
+< iskeyword=@,48-57,192-255,- ~
+
+This time a comma is automatically deleted.
+
+
+ROOM FOR MESSAGES
+
+When Vim starts there is one line at the bottom that is used for messages.
+When a message is long, it is either truncated, thus you can only see part of
+it, or the text scrolls and you have to press <Enter> to continue.
+ You can set the 'cmdheight' option to the number of lines used for
+messages. Example: >
+
+ :set cmdheight=3
+
+This does mean there is less room to edit text, thus it's a compromise.
+
+==============================================================================
+
+Next chapter: |usr_06.txt| Using syntax highlighting
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_06.txt b/runtime/doc/usr_06.txt
new file mode 100644
index 000000000..4731762d7
--- /dev/null
+++ b/runtime/doc/usr_06.txt
@@ -0,0 +1,277 @@
+*usr_06.txt* For Vim version 7.0aa. Last change: 2002 Jul 14
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Using syntax highlighting
+
+
+Black and white text is boring. With colors your file comes to life. This
+not only looks nice, it also speeds up your work. Change the colors used for
+the different sorts of text. Print your text, with the colors you see on the
+screen.
+
+|06.1| Switching it on
+|06.2| No or wrong colors?
+|06.3| Different colors
+|06.4| With colors or without colors
+|06.5| Printing with colors
+|06.6| Further reading
+
+ Next chapter: |usr_07.txt| Editing more than one file
+ Previous chapter: |usr_05.txt| Set your settings
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*06.1* Switching it on
+
+It all starts with one simple command: >
+
+ :syntax enable
+
+That should work in most situations to get color in your files. Vim will
+automagically detect the type of file and load the right syntax highlighting.
+Suddenly comments are blue, keywords brown and strings red. This makes it
+easy to overview the file. After a while you will find that black&white text
+slows you down!
+
+If you always want to use syntax highlighting, put the ":syntax enable"
+command in your |vimrc| file.
+
+If you want syntax highlighting only when the terminal supports colors, you
+can put this in your |vimrc| file: >
+
+ if &t_Co > 1
+ syntax enable
+ endif
+
+If you want syntax highlighting only in the GUI version, put the ":syntax
+enable" command in your |gvimrc| file.
+
+==============================================================================
+*06.2* No or wrong colors?
+
+There can be a number of reasons why you don't see colors:
+
+- Your terminal does not support colors.
+ Vim will use bold, italic and underlined text, but this doesn't look
+ very nice. You probably will want to try to get a terminal with
+ colors. For Unix, I recommend the xterm from the XFree86 project:
+ |xfree-xterm|.
+
+- Your terminal does support colors, but Vim doesn't know this.
+ Make sure your $TERM setting is correct. For example, when using an
+ xterm that supports colors: >
+
+ setenv TERM xterm-color
+<
+ or (depending on your shell): >
+
+ TERM=xterm-color; export TERM
+
+< The terminal name must match the terminal you are using. If it
+ still doesn't work, have a look at |xterm-color|, which shows a few
+ ways to make Vim display colors (not only for an xterm).
+
+- The file type is not recognized.
+ Vim doesn't know all file types, and sometimes it's near to impossible
+ to tell what language a file uses. Try this command: >
+
+ :set filetype
+<
+ If the result is "filetype=" then the problem is indeed that Vim
+ doesn't know what type of file this is. You can set the type
+ manually: >
+
+ :set filetype=fortran
+
+< To see which types are available, look in the directory
+ $VIMRUNTIME/syntax. For the GUI you can use the Syntax menu.
+ Setting the filetype can also be done with a |modeline|, so that the
+ file will be highlighted each time you edit it. For example, this
+ line can be used in a Makefile (put it near the start or end of the
+ file): >
+
+ # vim: syntax=make
+
+< You might know how to detect the file type yourself. Often the file
+ name extension (after the dot) can be used.
+ See |new-filetype| for how to tell Vim to detect that file type.
+
+- There is no highlighting for your file type.
+ You could try using a similar file type by manually setting it as
+ mentioned above. If that isn't good enough, you can write your own
+ syntax file, see |mysyntaxfile|.
+
+
+Or the colors could be wrong:
+
+- The colored text is very hard to read.
+ Vim guesses the background color that you are using. If it is black
+ (or another dark color) it will use light colors for text. If it is
+ white (or another light color) it will use dark colors for text. If
+ Vim guessed wrong the text will be hard to read. To solve this, set
+ the 'background' option. For a dark background: >
+
+ :set background=dark
+
+< And for a light background: >
+
+ :set background=light
+
+< Make sure you put this _before_ the ":syntax enable" command,
+ otherwise the colors will already have been set. You could do
+ ":syntax reset" after setting 'background' to make Vim set the default
+ colors again.
+
+- The colors are wrong when scrolling bottom to top.
+ Vim doesn't read the whole file to parse the text. It starts parsing
+ wherever you are viewing the file. That saves a lot of time, but
+ sometimes the colors are wrong. A simple fix is hitting CTRL-L. Or
+ scroll back a bit and then forward again.
+ For a real fix, see |:syn-sync|. Some syntax files have a way to make
+ it look further back, see the help for the specific syntax file. For
+ example, |tex.vim| for the TeX syntax.
+
+==============================================================================
+*06.3* Different colors *:syn-default-override*
+
+If you don't like the default colors, you can select another color scheme. In
+the GUI use the Edit/Color Scheme menu. You can also type the command: >
+
+ :colorscheme evening
+
+"evening" is the name of the color scheme. There are several others you might
+want to try out. Look in the directory $VIMRUNTIME/colors.
+
+When you found the color scheme that you like, add the ":colorscheme" command
+to your |vimrc| file.
+
+You could also write your own color scheme. This is how you do it:
+
+1. Select a color scheme that comes close. Copy this file to your own Vim
+ directory. For Unix, this should work: >
+
+ !mkdir ~/.vim/colors
+ !cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim
+<
+ This is done from Vim, because it knows the value of $VIMRUNTIME.
+
+2. Edit the color scheme file. These entries are useful:
+
+ term attributes in a B&W terminal
+ cterm attributes in a color terminal
+ ctermfg foreground color in a color terminal
+ ctermbg background color in a color terminal
+ gui attributes in the GUI
+ guifg foreground color in the GUI
+ guibg background color in the GUI
+
+ For example, to make comments green: >
+
+ :highlight Comment ctermfg=green guifg=green
+<
+ Attributes you can use for "cterm" and "gui" are "bold" and "underline".
+ If you want both, use "bold,underline". For details see the |:highlight|
+ command.
+
+3. Tell Vim to always use your color scheme. Put this line in your |vimrc|: >
+
+ colorscheme mine
+
+If you want to see what the most often used color combinations look like, use
+these commands: >
+
+ :edit $VIMRUNTIME/syntax/colortest.vim
+ :source %
+
+You will see text in various color combinations. You can check which ones are
+readable and look nice.
+
+==============================================================================
+*06.4* With colors or without colors
+
+Displaying text in color takes a lot of effort. If you find the displaying
+too slow, you might want to disable syntax highlighting for a moment: >
+
+ :syntax clear
+
+When editing another file (or the same one) the colors will come back.
+
+ *:syn-off*
+If you want to stop highlighting completely use: >
+
+ :syntax off
+
+This will completely disable syntax highlighting and remove it immediately for
+all buffers.
+
+ *:syn-manual*
+If you want syntax highlighting only for specific files, use this: >
+
+ :syntax manual
+
+This will enable the syntax highlighting, but not switch it on automatically
+when starting to edit a buffer. To switch highlighting on for the current
+buffer, set the 'syntax' option: >
+
+ :set syntax=ON
+<
+==============================================================================
+*06.5* Printing with colors *syntax-printing*
+
+In the MS-Windows version you can print the current file with this command: >
+
+ :hardcopy
+
+You will get the usual printer dialog, where you can select the printer and a
+few settings. If you have a color printer, the paper output should look the
+same as what you see inside Vim. But when you use a dark background the
+colors will be adjusted to look good on white paper.
+
+There are several options that change the way Vim prints:
+ 'printdevice'
+ 'printheader'
+ 'printfont'
+ 'printoptions'
+
+To print only a range of lines, use Visual mode to select the lines and then
+type the command: >
+
+ v100j:hardcopy
+
+"v" starts Visual mode. "100j" moves a hundred lines down, they will be
+highlighted. Then ":hardcopy" will print those lines. You can use other
+commands to move in Visual mode, of course.
+
+This also works on Unix, if you have a PostScript printer. Otherwise, you
+will have to do a bit more work. You need to convert the text to HTML first,
+and then print it from a web browser such as Netscape.
+
+Convert the current file to HTML with this command: >
+
+ :source $VIMRUNTIME/syntax/2html.vim
+
+You will see it crunching away, this can take quite a while for a large file.
+Some time later another window shows the HTML code. Now write this somewhere
+(doesn't matter where, you throw it away later):
+>
+ :write main.c.html
+
+Open this file in your favorite browser and print it from there. If all goes
+well, the output should look exactly as it does in Vim. See |2html.vim| for
+details. Don't forget to delete the HTML file when you are done with it.
+
+Instead of printing, you could also put the HTML file on a web server, and let
+others look at the colored text.
+
+==============================================================================
+*06.6* Further reading
+
+|usr_44.txt| Your own syntax highlighted.
+|syntax| All the details.
+
+==============================================================================
+
+Next chapter: |usr_07.txt| Editing more than one file
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_07.txt b/runtime/doc/usr_07.txt
new file mode 100644
index 000000000..b41977699
--- /dev/null
+++ b/runtime/doc/usr_07.txt
@@ -0,0 +1,479 @@
+*usr_07.txt* For Vim version 7.0aa. Last change: 2004 Mar 12
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Editing more than one file
+
+
+No matter how many files you have, you can edit them without leaving Vim.
+Define a list of files to work on and jump from one to the other. Copy text
+from one file and put it in another one.
+
+|07.1| Edit another file
+|07.2| A list of files
+|07.3| Jumping from file to file
+|07.4| Backup files
+|07.5| Copy text between files
+|07.6| Viewing a file
+|07.7| Changing the file name
+
+ Next chapter: |usr_08.txt| Splitting windows
+ Previous chapter: |usr_06.txt| Using syntax highlighting
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*07.1* Edit another file
+
+So far you had to start Vim for every file you wanted to edit. There is a
+simpler way. To start editing another file, use this command: >
+
+ :edit foo.txt
+
+You can use any file name instead of "foo.txt". Vim will close the current
+file and open the new one. If the current file has unsaved changes, however,
+Vim displays an error message and does not open the new file:
+
+ E37: No write since last change (use ! to override) ~
+
+ Note:
+ Vim puts an error ID at the start of each error message. If you do
+ not understand the message or what caused it, look in the help system
+ for this ID. In this case: >
+
+ :help E37
+
+At this point, you have a number of alternatives. You can write the file
+using this command: >
+
+ :write
+
+Or you can force Vim to discard your changes and edit the new file, using the
+force (!) character: >
+
+ :edit! foo.txt
+
+If you want to edit another file, but not write the changes in the current
+file yet, you can make it hidden: >
+
+ :hide edit foo.txt
+
+The text with changes is still there, but you can't see it. This is further
+explained in section |22.4|: The buffer list.
+
+==============================================================================
+*07.2* A list of files
+
+You can start Vim to edit a sequence of files. For example: >
+
+ vim one.c two.c three.c
+
+This command starts Vim and tells it that you will be editing three files.
+Vim displays just the first file. After you have done your thing in this
+file, to edit the next file you use this command: >
+
+ :next
+
+If you have unsaved changes in the current file, you will get an error
+message and the ":next" will not work. This is the same problem as with
+":edit" mentioned in the previous section. To abandon the changes: >
+
+ :next!
+
+But mostly you want to save the changes and move on to the next file. There
+is a special command for this: >
+
+ :wnext
+
+This does the same as using two separate commands: >
+
+ :write
+ :next
+
+
+WHERE AM I?
+
+To see which file in the argument list you are editing, look in the window
+title. It should show something like "(2 of 3)". This means you are editing
+the second file out of three files.
+ If you want to see the list of files, use this command: >
+
+ :args
+
+This is short for "arguments". The output might look like this:
+
+ one.c [two.c] three.c ~
+
+These are the files you started Vim with. The one you are currently editing,
+"two.c", is in square brackets.
+
+
+MOVING TO OTHER ARGUMENTS
+
+To go back one file: >
+
+ :previous
+
+This is just like the ":next" command, except that it moves in the other
+direction. Again, there is a shortcut command for when you want to write the
+file first: >
+
+ :wprevious
+
+To move to the very last file in the list: >
+
+ :last
+
+And to move back to the first one again: >
+
+ :first
+
+There is no ":wlast" or ":wfirst" command though!
+
+You can use a count for ":next" and ":previous". To skip two files forward: >
+
+ :2next
+
+
+AUTOMATIC WRITING
+
+When moving around the files and making changes, you have to remember to use
+":write". Otherwise you will get an error message. If you are sure you
+always want to write modified files, you can tell Vim to automatically write
+them: >
+
+ :set autowrite
+
+When you are editing a file which you may not want to write, switch it off
+again: >
+
+ :set noautowrite
+
+
+EDITING ANOTHER LIST OF FILES
+
+You can redefine the list of files without the need to exit Vim and start it
+again. Use this command to edit three other files: >
+
+ :args five.c six.c seven.h
+
+Or use a wildcard, like it's used in the shell: >
+
+ :args *.txt
+
+Vim will take you to the first file in the list. Again, if the current file
+has changes, you can either write the file first, or use ":args!" (with !
+added) to abandon the changes.
+
+
+DID YOU EDIT THE LAST FILE?
+ *arglist-quit*
+When you use a list of files, Vim assumes you want to edit them all. To
+protect you from exiting too early, you will get this error when you didn't
+edit the last file in the list yet:
+
+ E173: 46 more files to edit ~
+
+If you really want to exit, just do it again. Then it will work (but not when
+you did other commands in between).
+
+==============================================================================
+*07.3* Jumping from file to file
+
+To quickly jump between two files, press CTRL-^ (on English-US keyboards the ^
+is above the 6 key). Example: >
+
+ :args one.c two.c three.c
+
+You are now in one.c. >
+
+ :next
+
+Now you are in two.c. Now use CTRL-^ to go back to one.c. Another CTRL-^ and
+you are back in two.c. Another CTRL-^ and you are in one.c again. If you now
+do: >
+
+ :next
+
+You are in three.c. Notice that the CTRL-^ command does not change the idea
+of where you are in the list of files. Only commands like ":next" and
+":previous" do that.
+
+The file you were previously editing is called the "alternate" file. When you
+just started Vim CTRL-^ will not work, since there isn't a previous file.
+
+
+PREDEFINED MARKS
+
+After jumping to another file, you can use two predefined marks which are very
+useful: >
+
+ `"
+
+This takes you to the position where the cursor was when you left the file.
+Another mark that is remembered is the position where you made the last
+change: >
+
+ `.
+
+Suppose you are editing the file "one.txt". Somewhere halfway the file you
+use "x" to delete a character. Then you go to the last line with "G" and
+write the file with ":w". You edit several other files, and then use ":edit
+one.txt" to come back to "one.txt". If you now use `" Vim jumps to the last
+line of the file. Using `. takes you to the position where you deleted the
+character. Even when you move around in the file `" and `. will take you to
+the remembered position. At least until you make another change or leave the
+file.
+
+
+FILE MARKS
+
+In chapter 4 was explained how you can place a mark in a file with "mx" and
+jump to that position with "`x". That works within one file. If you edit
+another file and place marks there, these are specific for that file. Thus
+each file has its own set of marks, they are local to the file.
+ So far we were using marks with a lowercase letter. There are also marks
+with an uppercase letter. These are global, they can be used from any file.
+For example suppose that we are editing the file "foo.txt". Go to halfway the
+file ("50%") and place the F mark there (F for foo): >
+
+ 50%mF
+
+Now edit the file "bar.txt" and place the B mark (B for bar) at its last line:
+>
+ GmB
+
+Now you can use the "'F" command to jump back to halfway foo.txt. Or edit yet
+another file, type "'B" and you are at the end of bar.txt again.
+
+The file marks are remembered until they are placed somewhere else. Thus you
+can place the mark, do hours of editing and still be able to jump back to that
+mark.
+ It's often useful to think of a simple connection between the mark letter
+and where it is placed. For example, use the H mark in a header file, M in
+a Makefile and C in a C code file.
+
+To see where a specific mark is, give an argument to the ":marks" command: >
+
+ :marks M
+
+You can also give several arguments: >
+
+ :marks MCP
+
+Don't forget that you can use CTRL-O and CTRL-I to jump to older and newer
+positions without placing marks there.
+
+==============================================================================
+*07.4* Backup files
+
+Usually Vim does not produce a backup file. If you want to have one, all you
+need to do is execute the following command: >
+
+ :set backup
+
+The name of the backup file is the original file with a ~ added to the end.
+If your file is named data.txt, for example, the backup file name is
+data.txt~.
+ If you do not like the fact that the backup files end with ~, you can
+change the extension: >
+
+ :set backupext=.bak
+
+This will use data.txt.bak instead of data.txt~.
+ Another option that matters here is 'backupdir'. It specifies where the
+backup file is written. The default, to write the backup in the same
+directory as the original file, will mostly be the right thing.
+
+ Note:
+ When the 'backup' option isn't set but the 'writebackup' is, Vim will
+ still create a backup file. However, it is deleted as soon as writing
+ the file was completed successfully. This functions as a safety
+ against losing your original file when writing fails in some way (disk
+ full is the most common cause; being hit by lightning might be
+ another, although less common).
+
+
+KEEPING THE ORIGINAL FILE
+
+If you are editing source files, you might want to keep the file before you
+make any changes. But the backup file will be overwritten each time you write
+the file. Thus it only contains the previous version, not the first one.
+ To make Vim keep the original file, set the 'patchmode' option. This
+specifies the extension used for the first backup of a changed file. Usually
+you would do this: >
+
+ :set patchmode=.orig
+
+When you now edit the file data.txt for the first time, make changes and write
+the file, Vim will keep a copy of the unchanged file under the name
+"data.txt.orig".
+ If you make further changes to the file, Vim will notice that
+"data.txt.orig" already exists and leave it alone. Further backup files will
+then be called "data.txt~" (or whatever you specified with 'backupext').
+ If you leave 'patchmode' empty (that is the default), the original file
+will not be kept.
+
+==============================================================================
+*07.5* Copy text between files
+
+This explains how to copy text from one file to another. Let's start with a
+simple example. Edit the file that contains the text you want to copy. Move
+the cursor to the start of the text and press "v". This starts Visual mode.
+Now move the cursor to the end of the text and press "y". This yanks (copies)
+the selected text.
+ To copy the above paragraph, you would do: >
+
+ :edit thisfile
+ /This
+ vjjjj$y
+
+Now edit the file you want to put the text in. Move the cursor to the
+character where you want the text to appear after. Use "p" to put the text
+there. >
+ :edit otherfile
+ /There
+ p
+
+Of course you can use many other commands to yank the text. For example, to
+select whole lines start Visual mode with "V". Or use CTRL-V to select a
+rectangular block. Or use "Y" to yank a single line, "yaw" to yank-a-word,
+etc.
+ The "p" command puts the text after the cursor. Use "P" to put the text
+before the cursor. Notice that Vim remembers if you yanked a whole line or a
+block, and puts it back that way.
+
+
+USING REGISTERS
+
+When you want to copy several pieces of text from one file to another, having
+to switch between the files and writing the target file takes a lot of time.
+To avoid this, copy each piece of text to its own register.
+ A register is a place where Vim stores text. Here we will use the
+registers named a to z (later you will find out there are others). Let's copy
+a sentence to the f register (f for First): >
+
+ "fyas
+
+The "yas" command yanks a sentence like before. It's the "f that tells Vim
+the text should be place in the f register. This must come just before the
+yank command.
+ Now yank three whole lines to the l register (l for line): >
+
+ "l3Y
+
+The count could be before the "l just as well. To yank a block of text to the
+b (for block) register: >
+
+ CTRL-Vjjww"by
+
+Notice that the register specification "b is just before the "y" command.
+This is required. If you would have put it before the "w" command, it would
+not have worked.
+ Now you have three pieces of text in the f, l and b registers. Edit
+another file, move around and place the text where you want it: >
+
+ "fp
+
+Again, the register specification "f comes before the "p" command.
+ You can put the registers in any order. And the text stays in the register
+until you yank something else into it. Thus you can put it as many times as
+you like.
+
+When you delete text, you can also specify a register. Use this to move
+several pieces of text around. For example, to delete-a-word and write it in
+the w register: >
+
+ "wdaw
+
+Again, the register specification comes before the delete command "d".
+
+
+APPENDING TO A FILE
+
+When collecting lines of text into one file, you can use this command: >
+
+ :write >> logfile
+
+This will write the text of the current file to the end of "logfile". Thus it
+is appended. This avoids that you have to copy the lines, edit the log file
+and put them there. Thus you save two steps. But you can only append to the
+end of a file.
+ To append only a few lines, select them in Visual mode before typing
+":write". In chapter 10 you will learn other ways to select a range of lines.
+
+==============================================================================
+*07.6* Viewing a file
+
+Sometimes you only want to see what a file contains, without the intention to
+ever write it back. There is the risk that you type ":w" without thinking and
+overwrite the original file anyway. To avoid this, edit the file read-only.
+ To start Vim in readonly mode, use this command: >
+
+ vim -R file
+
+On Unix this command should do the same thing: >
+
+ view file
+
+You are now editing "file" in read-only mode. When you try using ":w" you
+will get an error message and the file won't be written.
+ When you try to make a change to the file Vim will give you a warning:
+
+ W10: Warning: Changing a readonly file ~
+
+The change will be done though. This allows for formatting the file, for
+example, to be able to read it easily.
+ If you make changes to a file and forgot that it was read-only, you can
+still write it. Add the ! to the write command to force writing.
+
+If you really want to forbid making changes in a file, do this: >
+
+ vim -M file
+
+Now every attempt to change the text will fail. The help files are like this,
+for example. If you try to make a change you get this error message:
+
+ E21: Cannot make changes, 'modifiable' is off ~
+
+You could use the -M argument to setup Vim to work in a viewer mode. This is
+only voluntary though, since these commands will remove the protection: >
+
+ :set modifiable
+ :set write
+
+==============================================================================
+*07.7* Changing the file name
+
+A clever way to start editing a new file is by using an existing file that
+contains most of what you need. For example, you start writing a new program
+to move a file. You know that you already have a program that copies a file,
+thus you start with: >
+
+ :edit copy.c
+
+You can delete the stuff you don't need. Now you need to save the file under
+a new name. The ":saveas" command can be used for this: >
+
+ :saveas move.c
+
+Vim will write the file under the given name, and edit that file. Thus the
+next time you do ":write", it will write "move.c". "copy.c" remains
+unmodified.
+ When you want to change the name of the file you are editing, but don't
+want to write the file, you can use this command: >
+
+ :file move.c
+
+Vim will mark the file as "not edited". This means that Vim knows this is not
+the file you started editing. When you try to write the file, you might get
+this message:
+
+ E13: File exists (use ! to override) ~
+
+This protects you from accidentally overwriting another file.
+
+==============================================================================
+
+Next chapter: |usr_08.txt| Splitting windows
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_08.txt b/runtime/doc/usr_08.txt
new file mode 100644
index 000000000..fef83987e
--- /dev/null
+++ b/runtime/doc/usr_08.txt
@@ -0,0 +1,511 @@
+*usr_08.txt* For Vim version 7.0aa. Last change: 2004 Jun 04
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Splitting windows
+
+
+Display two different files above each other. Or view two locations in the
+file at the same time. See the difference between two files by putting them
+side by side. All this is possible with split windows.
+
+|08.1| Split a window
+|08.2| Split a window on another file
+|08.3| Window size
+|08.4| Vertical splits
+|08.5| Moving windows
+|08.6| Commands for all windows
+|08.7| Viewing differences with vimdiff
+|08.8| Various
+
+ Next chapter: |usr_09.txt| Using the GUI
+ Previous chapter: |usr_07.txt| Editing more than one file
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*08.1* Split a window
+
+The easiest way to open a new window is to use the following command: >
+
+ :split
+
+This command splits the screen into two windows and leaves the cursor in the
+top one:
+
+ +----------------------------------+
+ |/* file one.c */ |
+ |~ |
+ |~ |
+ |one.c=============================|
+ |/* file one.c */ |
+ |~ |
+ |one.c=============================|
+ | |
+ +----------------------------------+
+
+What you see here is two windows on the same file. The line with "====" is
+that status line. It displays information about the window above it. (In
+practice the status line will be in reverse video.)
+ The two windows allow you to view two parts of the same file. For example,
+you could make the top window show the variable declarations of a program, and
+the bottom one the code that uses these variables.
+
+The CTRL-W w command can be used to jump between the windows. If you are in
+the top window, CTRL-W w jumps to the window below it. If you are in the
+bottom window it will jump to the first window. (CTRL-W CTRL-W does the same
+thing, in case you let go of the CTRL key a bit later.)
+
+
+CLOSE THE WINDOW
+
+To close a window, use the command: >
+
+ :close
+
+Actually, any command that quits editing a file works, like ":quit" and "ZZ".
+But ":close" prevents you from accidentally exiting Vim when you close the
+last window.
+
+
+CLOSING ALL OTHER WINDOWS
+
+If you have opened a whole bunch of windows, but now want to concentrate on
+one of them, this command will be useful: >
+
+ :only
+
+This closes all windows, except for the current one. If any of the other
+windows has changes, you will get an error message and that window won't be
+closed.
+
+==============================================================================
+*08.2* Split a window on another file
+
+The following command opens a second window and starts editing the given file:
+>
+ :split two.c
+
+If you were editing one.c, then the result looks like this:
+
+ +----------------------------------+
+ |/* file two.c */ |
+ |~ |
+ |~ |
+ |two.c=============================|
+ |/* file one.c */ |
+ |~ |
+ |one.c=============================|
+ | |
+ +----------------------------------+
+
+To open a window on a new, empty file, use this: >
+
+ :new
+
+You can repeat the ":split" and ":new" commands to create as many windows as
+you like.
+
+==============================================================================
+*08.3* Window size
+
+The ":split" command can take a number argument. If specified, this will be
+the height of the new window. For example, the following opens a new window
+three lines high and starts editing the file alpha.c: >
+
+ :3split alpha.c
+
+For existing windows you can change the size in several ways. When you have a
+working mouse, it is easy: Move the mouse pointer to the status line that
+separates two windows, and drag it up or down.
+
+To increase the size of a window: >
+
+ CTRL-W +
+
+To decrease it: >
+
+ CTRL-W -
+
+Both of these commands take a count and increase or decrease the window size
+by that many lines. Thus "4 CTRL-W +" make the window four lines higher.
+
+To set the window height to a specified number of lines: >
+
+ {height}CTRL-W _
+
+That's: a number {height}, CTRL-W and then an underscore (the - key with Shift
+on English-US keyboards).
+ To make a window as high as it can be, use the CTRL-W _ command without a
+count.
+
+
+USING THE MOUSE
+
+In Vim you can do many things very quickly from the keyboard. Unfortunately,
+the window resizing commands require quite a bit of typing. In this case,
+using the mouse is faster. Position the mouse pointer on a status line. Now
+press the left mouse button and drag. The status line will move, thus making
+the window on one side higher and the other smaller.
+
+
+OPTIONS
+
+The 'winheight' option can be set to a minimal desired height of a window and
+'winminheight' to a hard minimum height.
+ Likewise, there is 'winwidth' for the minimal desired width and
+'winminwidth' for the hard minimum width.
+ The 'equalalways' option, when set, makes Vim equalize the windows sizes
+when a window is closed or opened.
+
+==============================================================================
+*08.4* Vertical splits
+
+The ":split" command creates the new window above the current one. To make
+the window appear at the left side, use: >
+
+ :vsplit
+
+or: >
+ :vsplit two.c
+
+The result looks something like this:
+
+ +--------------------------------------+
+ |/* file two.c */ |/* file one.c */ |
+ |~ |~ |
+ |~ |~ |
+ |~ |~ |
+ |two.c===============one.c=============|
+ | |
+ +--------------------------------------+
+
+Actually, the | lines in the middle will be in reverse video. This is called
+the vertical separator. It separates the two windows left and right of it.
+
+There is also the ":vnew" command, to open a vertically split window on a new,
+empty file. Another way to do this: >
+
+ :vertical new
+
+The ":vertical" command can be inserted before another command that splits a
+window. This will cause that command to split the window vertically instead
+of horizontally. (If the command doesn't split a window, it works
+unmodified.)
+
+
+MOVING BETWEEN WINDOWS
+
+Since you can split windows horizontally and vertically as much as you like,
+you can create any layout of windows. Then you can use these commands to move
+between them:
+
+ CTRL-W h move to the window on the left
+ CTRL-W j move to the window below
+ CTRL-W k move to the window above
+ CTRL-W l move to the window on the right
+
+ CTRL-W t move to the TOP window
+ CTRL-W b move to the BOTTOM window
+
+You will notice the same letters as used for moving the cursor. And the
+cursor keys can also be used, if you like.
+ More commands to move to other windows: |Q_wi|.
+
+==============================================================================
+*08.5* Moving windows
+
+You have split a few windows, but now they are in the wrong place. Then you
+need a command to move the window somewhere else. For example, you have three
+windows like this:
+
+ +----------------------------------+
+ |/* file two.c */ |
+ |~ |
+ |~ |
+ |two.c=============================|
+ |/* file three.c */ |
+ |~ |
+ |~ |
+ |three.c===========================|
+ |/* file one.c */ |
+ |~ |
+ |one.c=============================|
+ | |
+ +----------------------------------+
+
+Clearly the last one should be at the top. Go to that window (using CTRL-W w)
+and the type this command: >
+
+ CTRL-W K
+
+This uses the uppercase letter K. What happens is that the window is moved to
+the very top. You will notice that K is again used for moving upwards.
+ When you have vertical splits, CTRL-W K will move the current window to the
+top and make it occupy the full with of the Vim window. If this is your
+layout:
+
+ +-------------------------------------------+
+ |/* two.c */ |/* three.c */ |/* one.c */ |
+ |~ |~ |~ |
+ |~ |~ |~ |
+ |~ |~ |~ |
+ |~ |~ |~ |
+ |~ |~ |~ |
+ |two.c=========three.c=========one.c========|
+ | |
+ +-------------------------------------------+
+
+Then using CTRL-W K in the middle window (three.c) will result in:
+
+ +-------------------------------------------+
+ |/* three.c */ |
+ |~ |
+ |~ |
+ |three.c====================================|
+ |/* two.c */ |/* one.c */ |
+ |~ |~ |
+ |two.c==================one.c===============|
+ | |
+ +-------------------------------------------+
+
+The other three similar commands (you can probably guess these now):
+
+ CTRL-W H move window to the far left
+ CTRL-W J move window to the bottom
+ CTRL-W L move window to the far right
+
+==============================================================================
+*08.6* Commands for all windows
+
+When you have several windows open and you want to quit Vim, you can close
+each window separately. A quicker way is using this command: >
+
+ :qall
+
+This stands for "quit all". If any of the windows contain changes, Vim will
+not exit. The cursor will automatically be positioned in a window with
+changes. You can then either use ":write" to save the changes, or ":quit!" to
+throw them away.
+
+If you know there are windows with changes, and you want to save all these
+changes, use this command: >
+
+ :wall
+
+This stands for "write all". But actually, it only writes files with
+changes. Vim knows it doesn't make sense to write files that were not
+changed.
+ And then there is the combination of ":qall" and ":wall": the "write and
+quit all" command: >
+
+ :wqall
+
+This writes all modified files and quits Vim.
+ Finally, there is a command that quits Vim and throws away all changes: >
+
+ :qall!
+
+Be careful, there is no way to undo this command!
+
+
+OPENING A WINDOW FOR ALL ARGUMENTS
+
+To make Vim open a window for each file, start it with the "-o" argument: >
+
+ vim -o one.txt two.txt three.txt
+
+This results in:
+
+ +-------------------------------+
+ |file one.txt |
+ |~ |
+ |one.txt========================|
+ |file two.txt |
+ |~ |
+ |two.txt========================|
+ |file three.txt |
+ |~ |
+ |three.txt======================|
+ | |
+ +-------------------------------+
+
+The "-O" argument is used to get vertically split windows.
+ When Vim is already running, the ":all" command opens a window for each
+file in the argument list. ":vertical all" does it with vertical splits.
+
+==============================================================================
+*08.7* Viewing differences with vimdiff
+
+There is a special way to start Vim, which shows the differences between two
+files. Let's take a file "main.c" and insert a few characters in one line.
+Write this file with the 'backup' option set, so that the backup file
+"main.c~" will contain the previous version of the file.
+ Type this command in a shell (not in Vim): >
+
+ vimdiff main.c~ main.c
+
+Vim will start, with two windows side by side. You will only see the line
+in which you added characters, and a few lines above and below it.
+
+ VV VV
+ +-----------------------------------------+
+ |+ +--123 lines: /* a|+ +--123 lines: /* a| <- fold
+ | text | text |
+ | text | text |
+ | text | text |
+ | text | changed text | <- changed line
+ | text | text |
+ | text | ------------------| <- deleted line
+ | text | text |
+ | text | text |
+ | text | text |
+ |+ +--432 lines: text|+ +--432 lines: text| <- fold
+ | ~ | ~ |
+ | ~ | ~ |
+ |main.c~==============main.c==============|
+ | |
+ +-----------------------------------------+
+
+(This picture doesn't show the highlighting, use the vimdiff command for a
+better look.)
+
+The lines that were not modified have been collapsed into one line. This is
+called a closed fold. They are indicated in the picture with "<- fold". Thus
+the single fold line at the top stands for 123 text lines. These lines are
+equal in both files.
+ The line marked with "<- changed line" is highlighted, and the inserted
+text is displayed with another color. This clearly shows what the difference
+is between the two files.
+ The line that was deleted is displayed with "---" in the main.c window.
+See the "<- deleted line" marker in the picture. These characters are not
+really there. They just fill up main.c, so that it displays the same number
+of lines as the other window.
+
+
+THE FOLD COLUMN
+
+Each window has a column on the left with a slightly different background. In
+the picture above these are indicated with "VV". You notice there is a plus
+character there, in front of each closed fold. Move the mouse pointer to that
+plus and click the left button. The fold will open, and you can see the text
+that it contains.
+ The fold column contains a minus sign for an open fold. If you click on
+this -, the fold will close.
+ Obviously, this only works when you have a working mouse. You can also use
+"zo" to open a fold and "zc" to close it.
+
+
+DIFFING IN VIM
+
+Another way to start in diff mode can be done from inside Vim. Edit the
+"main.c" file, then make a split and show the differences: >
+
+ :edit main.c
+ :vertical diffsplit main.c~
+
+The ":vertical" command is used to make the window split vertically. If you
+omit this, you will get a horizontal split.
+
+If you have a patch or diff file, you can use the third way to start diff
+mode. First edit the file to which the patch applies. Then tell Vim the name
+of the patch file: >
+
+ :edit main.c
+ :vertical diffpatch main.c.diff
+
+WARNING: The patch file must contain only one patch, for the file you are
+editing. Otherwise you will get a lot of error messages, and some files might
+be patched unexpectedly.
+ The patching will only be done to the copy of the file in Vim. The file on
+your harddisk will remain unmodified (until you decide to write the file).
+
+
+SCROLL BINDING
+
+When the files have more changes, you can scroll in the usual way. Vim will
+try to keep both the windows start at the same position, so you can easily see
+the differences side by side.
+ When you don't want this for a moment, use this command: >
+
+ :set noscrollbind
+
+
+JUMPING TO CHANGES
+
+When you have disabled folding in some way, it may be difficult to find the
+changes. Use this command to jump forward to the next change: >
+
+ ]c
+
+To go the other way use: >
+
+ [c
+
+Prepended a count to jump further away.
+
+
+REMOVING CHANGES
+
+You can move text from one window to the other. This either removes
+differences or adds new ones. Vim doesn't keep the highlighting updated in
+all situations. To update it use this command: >
+
+ :diffupdate
+
+To remove a difference, you can move the text in a highlighted block from one
+window to another. Take the "main.c" and "main.c~" example above. Move the
+cursor to the left window, on the line that was deleted in the other window.
+Now type this command: >
+
+ dp
+
+The change will be removed by putting the text of the current window in the
+other window. "dp" stands for "diff put".
+ You can also do it the other way around. Move the cursor to the right
+window, to the line where "changed" was inserted. Now type this command: >
+
+ do
+
+The change will now be removed by getting the text from the other window.
+Since there are no changes left now, Vim puts all text in a closed fold.
+"do" stands for "diff obtain". "dg" would have been better, but that already
+has a different meaning ("dgg" deletes from the cursor until the first line).
+
+For details about diff mode, see |vimdiff|.
+
+==============================================================================
+*08.8* Various
+
+The 'laststatus' option can be used to specify when the last window has a
+statusline:
+
+ 0 never
+ 1 only when there are split windows (the default)
+ 2 always
+
+Many commands that edit another file have a variant that splits the window.
+For Command-line commands this is done by prepending an "s". For example:
+":tag" jumps to a tag, ":stag" splits the window and jumps to a
+tag.
+ For Normal mode commands a CTRL-W is prepended. CTRL-^ jumps to the
+alternate file, CTRL-W CTRL-^ splits the window and edits the alternate file.
+
+The 'splitbelow' option can be set to make a new window appear below the
+current window. The 'splitright' option can be set to make a vertically split
+window appear right of the current window.
+
+When splitting a window you can prepend a modifier command to tell where the
+window is to appear:
+
+ :leftabove {cmd} left or above the current window
+ :aboveleft {cmd} idem
+ :rightbelow {cmd} right or below the current window
+ :belowright {cmd} idem
+ :topleft {cmd} at the top or left of the Vim window
+ :botright {cmd} at the bottom or right of the Vim window
+
+==============================================================================
+
+Next chapter: |usr_09.txt| Using the GUI
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_09.txt b/runtime/doc/usr_09.txt
new file mode 100644
index 000000000..8d97b186a
--- /dev/null
+++ b/runtime/doc/usr_09.txt
@@ -0,0 +1,289 @@
+*usr_09.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Using the GUI
+
+
+Vim works in an ordinary terminal. GVim can do the same things and a few
+more. The GUI offers menus, a toolbar, scrollbars and other items. This
+chapter is about these extra things that the GUI offers.
+
+|09.1| Parts of the GUI
+|09.2| Using the mouse
+|09.3| The clipboard
+|09.4| Select mode
+
+ Next chapter: |usr_10.txt| Making big changes
+ Previous chapter: |usr_08.txt| Splitting windows
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*09.1* Parts of the GUI
+
+You might have an icon on your desktop that starts gVim. Otherwise, one of
+these commands should do it: >
+
+ gvim file.txt
+ vim -g file.txt
+
+If this doesn't work you don't have a version of Vim with GUI support. You
+will have to install one first.
+ Vim will open a window and display "file.txt" in it. What the window looks
+like depends on the version of Vim. It should resemble the following picture
+(for as far as this can be shown in ASCII!).
+
+ +----------------------------------------------------+
+ | file.txt + (~/dir) - VIM X | <- window title
+ +----------------------------------------------------+
+ | File Edit Tools Syntax Buffers Window Help | <- menubar
+ +----------------------------------------------------+
+ | aaa bbb ccc ddd eee fff ggg hhh iii jjj | <- toolbar
+ | aaa bbb ccc ddd eee fff ggg hhh iii jjj |
+ +----------------------------------------------------+
+ | file text | ^ |
+ | ~ | # |
+ | ~ | # | <- scrollbar
+ | ~ | # |
+ | ~ | # |
+ | ~ | # |
+ | | V |
+ +----------------------------------------------------+
+
+The largest space is occupied by the file text. This shows the file in the
+same way as in a terminal. With some different colors and another font
+perhaps.
+
+
+THE WINDOW TITLE
+
+At the very top is the window title. This is drawn by your window system.
+Vim will set the title to show the name of the current file. First comes the
+name of the file. Then some special characters and the directory of the file
+in parens. These special character can be present:
+
+ - The file cannot be modified (e.g., a help file)
+ + The file contains changes
+ = The file is read-only
+ =+ The file is read-only, contains changes anyway
+
+If nothing is shown you have an ordinary, unchanged file.
+
+
+THE MENUBAR
+
+You know how menus work, right? Vim has the usual items, plus a few more.
+Browse them to get an idea of what you can use them for. A relevant submenu
+is Edit/Global Settings. You will find these entries:
+
+ Toggle Toolbar make the toolbar appear/disappear
+ Toggle Bottom Scrollbar make a scrollbar appear/disappear at the bottom
+ Toggle Left Scrollbar make a scrollbar appear/disappear at the left
+ Toggle Right Scrollbar make a scrollbar appear/disappear at the right
+
+On most systems you can tear-off the menus. Select the top item of the menu,
+the one that looks like a dashed line. You will get a separate window with
+the items of the menu. It will hang around until you close the window.
+
+
+THE TOOLBAR
+
+This contains icons for the most often used actions. Hopefully the icons are
+self-explanatory. There are tooltips to get an extra hint (move the mouse
+pointer to the icon without clicking and don't move it for a second).
+
+The "Edit/Global Settings/Toggle Toolbar" menu item can be used to make the
+toolbar disappear. If you never want a toolbar, use this command in your
+vimrc file: >
+
+ :set guioptions-=T
+
+This removes the 'T' flag from the 'guioptions' option. Other parts of the
+GUI can also be enabled or disabled with this option. See the help for it.
+
+
+THE SCROLLBARS
+
+By default there is one scrollbar on the right. It does the obvious thing.
+When you split the window, each window will get its own scrollbar.
+ You can make a horizontal scrollbar appear with the menu item
+Edit/Global Settings/Toggle Bottom Scrollbar. This is useful in diff mode, or
+when the 'wrap' option has been reset (more about that later).
+
+When there are vertically split windows, only the windows on the right side
+will have a scrollbar. However, when you move the cursor to a window on the
+left, it will be this one the that scrollbar controls. This takes a bit of
+time to get used to.
+ When you work with vertically split windows, consider adding a scrollbar on
+the left. This can be done with a menu item, or with the 'guioptions' option:
+>
+ :set guioptions+=l
+
+This adds the 'l' flag to 'guioptions'.
+
+==============================================================================
+*09.2* Using the mouse
+
+Standards are wonderful. In Microsoft Windows, you can use the mouse to
+select text in a standard manner. The X Window system also has a standard
+system for using the mouse. Unfortunately, these two standards are not the
+same.
+ Fortunately, you can customize Vim. You can make the behavior of the mouse
+work like an X Window system mouse or a Microsoft Windows mouse. The following
+command makes the mouse behave like an X Window mouse: >
+
+ :behave xterm
+
+The following command makes the mouse work like a Microsoft Windows mouse: >
+
+ :behave mswin
+
+The default behavior of the mouse on UNIX systems is xterm. The default
+behavior on a Microsoft Windows system is selected during the installation
+process. For details about what the two behaviors are, see |:behave|. Here
+follows a summary.
+
+
+XTERM MOUSE BEHAVIOR
+
+Left mouse click position the cursor
+Left mouse drag select text in Visual mode
+Middle mouse click paste text from the clipboard
+Right mouse click extend the selected text until the mouse
+ pointer
+
+
+MSWIN MOUSE BEHAVIOR
+
+Left mouse click position the cursor
+Left mouse drag select text in Select mode (see |09.4|)
+Left mouse click, with Shift extend the selected text until the mouse
+ pointer
+Middle mouse click paste text from the clipboard
+Right mouse click display a pop-up menu
+
+
+The mouse can be further tuned. Check out these options if you want to change
+the way how the mouse works:
+
+ 'mouse' in which mode the mouse is used by Vim
+ 'mousemodel' what effect a mouse click has
+ 'mousetime' time between clicks for a double-click
+ 'mousehide' hide the mouse while typing
+ 'selectmode' whether the mouse starts Visual or Select mode
+
+==============================================================================
+*09.3* The clipboard
+
+In section |04.7| the basic use of the clipboard was explained. There is one
+essential thing to explain about X-windows: There are actually two places to
+exchange text between programs. MS-Windows doesn't have this.
+
+In X-Windows there is the "current selection". This is the text that is
+currently highlighted. In Vim this is the Visual area (this assumes you are
+using the default option settings). You can paste this selection in another
+application without any further action.
+ For example, in this text select a few words with the mouse. Vim will
+switch to Visual mode and highlight the text. Now start another gVim, without
+a file name argument, so that it displays an empty window. Click the middle
+mouse button. The selected text will be inserted.
+
+The "current selection" will only remain valid until some other text is
+selected. After doing the paste in the other gVim, now select some characters
+in that window. You will notice that the words that were previously selected
+in the other gVim window are displayed differently. This means that it no
+longer is the current selection.
+
+You don't need to select text with the mouse, using the keyboard commands for
+Visual mode works just as well.
+
+
+THE REAL CLIPBOARD
+
+Now for the other place with which text can be exchanged. We call this the
+"real clipboard", to avoid confusion. Often both the "current selection" and
+the "real clipboard" are called clipboard, you'll have to get used to that.
+ To put text on the real clipboard, select a few different words in one of
+the gVims you have running. Then use the Edit/Copy menu entry. Now the text
+has been copied to the real clipboard. You can't see this, unless you have
+some application that shows the clipboard contents (e.g., KDE's klipper).
+ Now select the other gVim, position the cursor somewhere and use the
+Edit/Paste menu. You will see the text from the real clipboard is inserted.
+
+
+USING BOTH
+
+This use of both the "current selection" and the "real clipboard" might sound
+a bit confusing. But it is very useful. Let's show this with an example.
+Use one gVim with a text file and perform these actions:
+
+- Select two words in Visual mode.
+- Use the Edit/Copy menu to get these words onto the clipboard.
+- Select one other word in Visual mode.
+- Use the Edit/Paste menu item. What will happen is that the single selected
+ word is replaced with the two words from the clipboard.
+- Move the mouse pointer somewhere else and click the middle button. You
+ will see that the word you just overwrote with the clipboard is inserted
+ here.
+
+If you use the "current selection" and the "real clipboard" with care, you can
+do a lot of useful editing with them.
+
+
+USING THE KEYBOARD
+
+If you don't like using the mouse, you can access the current selection and
+the real clipboard with two registers. The "* register is for the current
+selection.
+ To make text become the current selection, use Visual mode. For example,
+to select a whole line just press "V".
+ To insert the current selection before the cursor: >
+
+ "*P
+
+Notice the uppercase "P". The lowercase "p" puts the text after the cursor.
+
+The "+ register is used for the real clipboard. For example, to copy the text
+from the cursor position until the end of the line to the clipboard: >
+
+ "+y$
+
+Remember, "y" is yank, which is Vim's copy command.
+ To insert the contents of the real clipboard before the cursor: >
+
+ "+P
+
+It's the same as for the current selection, but uses the plus (+) register
+instead of the star (*) register.
+
+==============================================================================
+*09.4* Select mode
+
+And now something that is used more often on MS-Windows than on X-Windows.
+But both can do it. You already know about Visual mode. Select mode is like
+Visual mode, because it is also used to select text. But there is an obvious
+difference: When typing text, the selected text is deleted and the typed text
+replaces it.
+
+To start working with Select mode, you must first enable it (for MS-Windows
+it is probably already enabled, but you can do this anyway): >
+
+ :set selectmode+=mouse
+
+Now use the mouse to select some text. It is highlighted like in Visual mode.
+Now press a letter. The selected text is deleted, and the single letter
+replaces it. You are in Insert mode now, thus you can continue typing.
+
+Since typing normal text causes the selected text to be deleted, you can not
+use the normal movement commands "hjkl", "w", etc. Instead, use the shifted
+function keys. <S-Left> (shifted cursor left key) moves the cursor left. The
+selected text is changed like in Visual mode. The other shifted cursor keys
+do what you expect. <S-End> and <S-Home> also work.
+
+You can tune the way Select mode works with the 'selectmode' option.
+
+==============================================================================
+
+Next chapter: |usr_10.txt| Making big changes
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_10.txt b/runtime/doc/usr_10.txt
new file mode 100644
index 000000000..807d2f99a
--- /dev/null
+++ b/runtime/doc/usr_10.txt
@@ -0,0 +1,822 @@
+*usr_10.txt* For Vim version 7.0aa. Last change: 2004 Mar 12
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Making big changes
+
+
+In chapter 4 several ways to make small changes were explained. This chapter
+goes into making changes that are repeated or can affect a large amount of
+text. The Visual mode allows doing various things with blocks of text. Use
+an external program to do really complicated things.
+
+|10.1| Record and playback commands
+|10.2| Substitution
+|10.3| Command ranges
+|10.4| The global command
+|10.5| Visual block mode
+|10.6| Reading and writing part of a file
+|10.7| Formatting text
+|10.8| Changing case
+|10.9| Using an external program
+
+ Next chapter: |usr_11.txt| Recovering from a crash
+ Previous chapter: |usr_09.txt| Using the GUI
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*10.1* Record and playback commands
+
+The "." command repeats the preceding change. But what if you want to do
+something more complex than a single change? That's where command recording
+comes in. There are three steps:
+
+1. The "q{register}" command starts recording keystrokes into the register
+ named {register}. The register name must be between a and z.
+2. Type your commands.
+3. To finish recording, press q (without any extra character).
+
+You can now execute the macro by typing the command "@{register}".
+
+Take a look at how to use these commands in practice. You have a list of
+filenames that look like this:
+
+ stdio.h ~
+ fcntl.h ~
+ unistd.h ~
+ stdlib.h ~
+
+And what you want is the following:
+
+ #include "stdio.h" ~
+ #include "fcntl.h" ~
+ #include "unistd.h" ~
+ #include "stdlib.h" ~
+
+You start by moving to the first character of the first line. Next you
+execute the following commands:
+
+ qa Start recording a macro in register a.
+ ^ Move to the beginning of the line.
+ i#include "<Esc> Insert the string #include " at the beginning
+ of the line.
+ $ Move to the end of the line.
+ a"<Esc> Append the character double quotation mark (")
+ to the end of the line.
+ j Go to the next line.
+ q Stop recording the macro.
+
+Now that you have done the work once, you can repeat the change by typing the
+command "@a" three times.
+ The "@a" command can be preceded by a count, which will cause the macro to
+be executed that number of times. In this case you would type: >
+
+ 3@a
+
+
+MOVE AND EXECUTE
+
+You might have the lines you want to change in various places. Just move the
+cursor to each location and use the "@a" command. If you have done that once,
+you can do it again with "@@". That's a bit easier to type. If you now
+execute register b with "@b", the next "@@" will use register b.
+ If you compare the playback method with using ".", there are several
+differences. First of all, "." can only repeat one change. As seen in the
+example above, "@a" can do several changes, and move around as well.
+Secondly, "." can only remember the last change. Executing a register allows
+you to make any changes and then still use "@a" to replay the recorded
+commands. Finally, you can use 26 different registers. Thus you can remember
+26 different command sequences to execute.
+
+
+USING REGISTERS
+
+The registers used for recording are the same ones you used for yank and
+delete commands. This allows you to mix recording with other commands to
+manipulate the registers.
+ Suppose you have recorded a few commands in register n. When you execute
+this with "@n" you notice you did something wrong. You could try recording
+again, but perhaps you will make another mistake. Instead, use this trick:
+
+ G Go to the end of the file.
+ o<Esc> Create an empty line.
+ "np Put the text from the n register. You now see
+ the commands you typed as text in the file.
+ {edits} Change the commands that were wrong. This is
+ just like editing text.
+ 0 Go to the start of the line.
+ "ny$ Yank the corrected commands into the n
+ register.
+ dd Delete the scratch line.
+
+Now you can execute the corrected commands with "@n". (If your recorded
+commands include line breaks, adjust the last two items in the example to
+include all the lines.)
+
+
+APPENDING TO A REGISTER
+
+So far we have used a lowercase letter for the register name. To append to a
+register, use an uppercase letter.
+ Suppose you have recorded a command to change a word to register c. It
+works properly, but you would like to add a search for the next word to
+change. This can be done with: >
+
+ qC/word<Enter>q
+
+You start with "qC", which records to the c register and appends. Thus
+writing to an uppercase register name means to append to the register with
+the same letter, but lowercase.
+
+This works both with recording and with yank and delete commands. For
+example, you want to collect a sequence of lines into the a register. Yank
+the first line with: >
+
+ "aY
+
+Now move to the second line, and type: >
+
+ "AY
+
+Repeat this command for all lines. The a register now contains all those
+lines, in the order you yanked them.
+
+==============================================================================
+*10.2* Substitution *find-replace*
+
+The ":substitute" command enables you to perform string replacements on a
+whole range of lines. The general form of this command is as follows: >
+
+ :[range]substitute/from/to/[flags]
+
+This command changes the "from" string to the "to" string in the lines
+specified with [range]. For example, you can change "Professor" to "Teacher"
+in all lines with the following command: >
+
+ :%substitute/Professor/Teacher/
+<
+ Note:
+ The ":substitute" command is almost never spelled out completely.
+ Most of the time, people use the abbreviated version ":s". From here
+ on the abbreviation will be used.
+
+The "%" before the command specifies the command works on all lines. Without
+a range, ":s" only works on the current line. More about ranges in the next
+section |10.3|.
+
+By default, the ":substitute" command changes only the first occurrence on
+each line. For example, the preceding command changes the line:
+
+ Professor Smith criticized Professor Johnson today. ~
+
+to:
+
+ Teacher Smith criticized Professor Johnson today. ~
+
+To change every occurrence on the line, you need to add the g (global) flag.
+The command: >
+
+ :%s/Professor/Teacher/g
+
+results in (starting with the original line):
+
+ Teacher Smith criticized Teacher Johnson today. ~
+
+Other flags include p (print), which causes the ":substitute" command to print
+out each line it changes. The c (confirm) flag tells ":substitute" to ask you
+for confirmation before it performs each substitution. Enter the following: >
+
+ :%s/Professor/Teacher/c
+
+Vim finds the first occurrence of "Professor" and displays the text it is
+about to change. You get the following prompt: >
+
+ replace with Teacher (y/n/a/q/l/^E/^Y)?
+
+At this point, you must enter one of the following answers:
+
+ y Yes; make this change.
+ n No; skip this match.
+ a All; make this change and all remaining ones without
+ further confirmation.
+ q Quit; don't make any more changes.
+ l Last; make this change and then quit.
+ CTRL-E Scroll the text one line up.
+ CTRL-Y Scroll the text one line down.
+
+
+The "from" part of the substitute command is actually a pattern. The same
+kind as used for the search command. For example, this command only
+substitutes "the" when it appears at the start of a line: >
+
+ :s/^the/these/
+
+If you are substituting with a "from" or "to" part that includes a slash, you
+need to put a backslash before it. A simpler way is to use another character
+instead of the slash. A plus, for example: >
+
+ :s+one/two+one or two+
+
+==============================================================================
+*10.3* Command ranges
+
+The ":substitute" command, and many other : commands, can be applied to a
+selection of lines. This is called a range.
+ The simple form of a range is {number},{number}. For example: >
+
+ :1,5s/this/that/g
+
+Executes the substitute command on the lines 1 to 5. Line 5 is included.
+The range is always placed before the command.
+
+A single number can be used to address one specific line: >
+
+ :54s/President/Fool/
+
+Some commands work on the whole file when you do not specify a range. To make
+them work on the current line the "." address is used. The ":write" command
+works like that. Without a range, it writes the whole file. To make it write
+only the current line into a file: >
+
+ :.write otherfile
+
+The first line always has number one. How about the last line? The "$"
+character is used for this. For example, to substitute in the lines from the
+cursor to the end: >
+
+ :.,$s/yes/no/
+
+The "%" range that we used before, is actually a short way to say "1,$", from
+the first to the last line.
+
+
+USING A PATTERN IN A RANGE
+
+Suppose you are editing a chapter in a book, and want to replace all
+occurrences of "grey" with "gray". But only in this chapter, not in the next
+one. You know that only chapter boundaries have the word "Chapter" in the
+first column. This command will work then: >
+
+ :?^Chapter?,/^Chapter/s=grey=gray=g
+
+You can see a search pattern is used twice. The first "?^Chapter?" finds the
+line above the current position that matches this pattern. Thus the ?pattern?
+range is used to search backwards. Similarly, "/^Chapter/" is used to search
+forward for the start of the next chapter.
+ To avoid confusion with the slashes, the "=" character was used in the
+substitute command here. A slash or another character would have worked as
+well.
+
+
+ADD AND SUBTRACT
+
+There is a slight error in the above command: If the title of the next chapter
+had included "grey" it would be replaced as well. Maybe that's what you
+wanted, but what if you didn't? Then you can specify an offset.
+ To search for a pattern and then use the line above it: >
+
+ /Chapter/-1
+
+You can use any number instead of the 1. To address the second line below the
+match: >
+
+ /Chapter/+2
+
+The offsets can also be used with the other items in a range. Look at this
+one: >
+
+ :.+3,$-5
+
+This specifies the range that starts three lines below the cursor and ends
+five lines before the last line in the file.
+
+
+USING MARKS
+
+Instead of figuring out the line numbers of certain positions, remembering them
+and typing them in a range, you can use marks.
+ Place the marks as mentioned in chapter 3. For example, use "mt" to mark
+the top of an area and "mb" to mark the bottom. Then you can use this range
+to specify the lines between the marks (including the lines with the marks): >
+
+ :'t,'b
+
+
+VISUAL MODE AND RANGES
+
+You can select text with Visual mode. If you then press ":" to start a colon
+command, you will see this: >
+
+ :'<,'>
+
+Now you can type the command and it will be applied to the range of lines that
+was visually selected.
+
+ Note:
+ When using Visual mode to select part of a line, or using CTRL-V to
+ select a block of text, the colon commands will still apply to whole
+ lines. This might change in a future version of Vim.
+
+The '< and '> are actually marks, placed at the start and end of the Visual
+selection. The marks remain at their position until another Visual selection
+is made. Thus you can use the "'<" command to jump to position where the
+Visual area started. And you can mix the marks with other items: >
+
+ :'>,$
+
+This addresses the lines from the end of the Visual area to the end of the
+file.
+
+
+A NUMBER OF LINES
+
+When you know how many lines you want to change, you can type the number and
+then ":". For example, when you type "5:", you will get: >
+
+ :.,.+4
+
+Now you can type the command you want to use. It will use the range "."
+(current line) until ".+4" (four lines down). Thus it spans five lines.
+
+==============================================================================
+*10.4* The global command
+
+The ":global" command is one of the more powerful features of Vim. It allows
+you to find a match for a pattern and execute a command there. The general
+form is: >
+
+ :[range]global/{pattern}/{command}
+
+This is similar to the ":substitute" command. But, instead of replacing the
+matched text with other text, the command {command} is executed.
+
+ Note:
+ The command executed for ":global" must be one that starts with a
+ colon. Normal mode commands can not be used directly. The |:normal|
+ command can do this for you.
+
+Suppose you want to change "foobar" to "barfoo", but only in C++ style
+comments. These comments start with "//". Use this command: >
+
+ :g+//+s/foobar/barfoo/g
+
+This starts with ":g". That is short for ":global", just like ":s" is short
+for ":substitute". Then the pattern, enclosed in plus characters. Since the
+pattern we are looking for contains a slash, this uses the plus character to
+separate the pattern. Next comes the substitute command that changes "foobar"
+into "barfoo".
+ The default range for the global command is the whole file. Thus no range
+was specified in this example. This is different from ":substitute", which
+works on one line without a range.
+ The command isn't perfect, since it also matches lines where "//" appears
+halfway a line, and the substitution will also take place before the "//".
+
+Just like with ":substitute", any pattern can be used. When you learn more
+complicated patterns later, you can use them here.
+
+==============================================================================
+*10.5* Visual block mode
+
+With CTRL-V you can start selection of a rectangular area of text. There are
+a few commands that do something special with the text block.
+
+There is something special about using the "$" command in Visual block mode.
+When the last motion command used was "$", all lines in the Visual selection
+will extend until the end of the line, also when the line with the cursor is
+shorter. This remains effective until you use a motion command that moves the
+cursor horizontally. Thus using "j" keeps it, "h" stops it.
+
+
+INSERTING TEXT
+
+The command "I{string}<Esc>" inserts the text {string} in each line, just
+left of the visual block. You start by pressing CTRL-V to enter visual block
+mode. Now you move the cursor to define your block. Next you type I to enter
+Insert mode, followed by the text to insert. As you type, the text appears on
+the first line only.
+ After you press <Esc> to end the insert, the text will magically be
+inserted in the rest of the lines contained in the visual selection. Example:
+
+ include one ~
+ include two ~
+ include three ~
+ include four ~
+
+Move the cursor to the "o" of "one" and press CTRL-V. Move it down with "3j"
+to "four". You now have a block selection that spans four lines. Now type: >
+
+ Imain.<Esc>
+
+The result:
+
+ include main.one ~
+ include main.two ~
+ include main.three ~
+ include main.four ~
+
+If the block spans short lines that do not extend into the block, the text is
+not inserted in that line. For example, make a Visual block selection that
+includes the word "long" in the first and last line of this text, and thus has
+no text selected in the second line:
+
+ This is a long line ~
+ short ~
+ Any other long line ~
+
+ ^^^^ selected block
+
+Now use the command "Ivery <Esc>". The result is:
+
+ This is a very long line ~
+ short ~
+ Any other very long line ~
+
+In the short line no text was inserted.
+
+If the string you insert contains a newline, the "I" acts just like a Normal
+insert command and affects only the first line of the block.
+
+The "A" command works the same way, except that it appends after the right
+side of the block.
+ There is one special case for "A": Select a Visual block and then use "$"
+to make the block extend to the end of each line. Using "A" now will append
+the text to the end of each line.
+ Using the same example from above, and then typing "$A XXX<Esc>, you get
+this result:
+
+ This is a long line XXX ~
+ short XXX ~
+ Any other long line XXX ~
+
+This really requires using the "$" command. Vim remembers that it was used.
+Making the same selection by moving the cursor to the end of the longest line
+with other movement commands will not have the same result.
+
+
+CHANGING TEXT
+
+The Visual block "c" command deletes the block and then throws you into Insert
+mode to enable you to type in a string. The string will be inserted in each
+line in the block.
+ Starting with the same selection of the "long" words as above, then typing
+"c_LONG_<Esc>", you get this:
+
+ This is a _LONG_ line ~
+ short ~
+ Any other _LONG_ line ~
+
+Just like with "I" the short line is not changed. Also, you can't enter a
+newline in the new text.
+
+The "C" command deletes text from the left edge of the block to the end of
+line. It then puts you in Insert mode so that you can type in a string,
+which is added to the end of each line.
+ Starting with the same text again, and typing "Cnew text<Esc>" you get:
+
+ This is a new text ~
+ short ~
+ Any other new text ~
+
+Notice that, even though only the "long" word was selected, the text after it
+is deleted as well. Thus only the location of the left edge of the visual
+block really matters.
+ Again, short lines that do not reach into the block are excluded.
+
+Other commands that change the characters in the block:
+
+ ~ swap case (a -> A and A -> a)
+ U make uppercase (a -> A and A -> A)
+ u make lowercase (a -> a and A -> a)
+
+
+FILLING WITH A CHARACTER
+
+To fill the whole block with one character, use the "r" command. Again,
+starting with the same example text from above, and then typing "rx":
+
+ This is a xxxx line ~
+ short ~
+ Any other xxxx line ~
+
+
+ Note:
+ If you want to include characters beyond the end of the line in the
+ block, check out the 'virtualedit' feature in chapter 25.
+
+
+SHIFTING
+
+The command ">" shifts the selected text to the right one shift amount,
+inserting whitespace. The starting point for this shift is the left edge of
+the visual block.
+ With the same example again, ">" gives this result:
+
+ This is a long line ~
+ short ~
+ Any other long line ~
+
+The shift amount is specified with the 'shiftwidth' option. To change it to
+use 4 spaces: >
+
+ :set shiftwidth=4
+
+The "<" command removes one shift amount of whitespace at the left
+edge of the block. This command is limited by the amount of text that is
+there; so if there is less than a shift amount of whitespace available, it
+removes what it can.
+
+
+JOINING LINES
+
+The "J" command joins all selected lines together into one line. Thus it
+removes the line breaks. Actually, the line break, leading white space and
+trailing white space is replaced by one space. Two spaces are used after a
+line ending (that can be changed with the 'joinspaces' option).
+ Let's use the example that we got so familiar with now. The result of
+using the "J" command:
+
+ This is a long line short Any other long line ~
+
+The "J" command doesn't require a blockwise selection. It works with "v" and
+"V" selection in exactly the same way.
+
+If you don't want the white space to be changed, use the "gJ" command.
+
+==============================================================================
+*10.6* Reading and writing part of a file
+
+When you are writing an e-mail message, you may want to include another file.
+This can be done with the ":read {filename}" command. The text of the file is
+put below the cursor line.
+ Starting with this text:
+
+ Hi John, ~
+ Here is the diff that fixes the bug: ~
+ Bye, Pierre. ~
+
+Move the cursor to the second line and type: >
+
+ :read patch
+
+The file named "patch" will be inserted, with this result:
+
+ Hi John, ~
+ Here is the diff that fixes the bug: ~
+ 2c2 ~
+ < for (i = 0; i <= length; ++i) ~
+ --- ~
+ > for (i = 0; i < length; ++i) ~
+ Bye, Pierre. ~
+
+The ":read" command accepts a range. The file will be put below the last line
+number of this range. Thus ":$r patch" appends the file "patch" at the end of
+the file.
+ What if you want to read the file above the first line? This can be done
+with the line number zero. This line doesn't really exist, you will get an
+error message when using it with most commands. But this command is allowed:
+>
+ :0read patch
+
+The file "patch" will be put above the first line of the file.
+
+
+WRITING A RANGE OF LINES
+
+To write a range of lines to a file, the ":write" command can be used.
+Without a range it writes the whole file. With a range only the specified
+lines are written: >
+
+ :.,$write tempo
+
+This writes the lines from the cursor until the end of the file into the file
+"tempo". If this file already exists you will get an error message. Vim
+protects you from accidentally overwriting an existing file. If you know what
+you are doing and want to overwrite the file, append !: >
+
+ :.,$write! tempo
+
+CAREFUL: The ! must follow the ":write" command immediately, without white
+space. Otherwise it becomes a filter command, which is explained later in
+this chapter.
+
+
+APPENDING TO A FILE
+
+In the first section of this chapter was explained how to collect a number of
+lines into a register. The same can be done to collect lines in a file.
+Write the first line with this command: >
+
+ :.write collection
+
+Now move the cursor to the second line you want to collect, and type this: >
+
+ :.write >>collection
+
+The ">>" tells Vim the "collection" file is not to be written as a new file,
+but the line must be appended at the end. You can repeat this as many times
+as you like.
+
+==============================================================================
+*10.7* Formatting text
+
+When you are typing plain text, it's nice if the length of each line is
+automatically trimmed to fit in the window. To make this happen while
+inserting text, set the 'textwidth' option: >
+
+ :set textwidth=72
+
+You might remember that in the example vimrc file this command was used for
+every text file. Thus if you are using that vimrc file, you were already
+using it. To check the current value of 'textwidth': >
+
+ :set textwidth
+
+Now lines will be broken to take only up to 72 characters. But when you
+insert text halfway a line, or when you delete a few words, the lines will get
+too long or too short. Vim doesn't automatically reformat the text.
+ To tell Vim to format the current paragraph: >
+
+ gqap
+
+This starts with the "gq" command, which is an operator. Following is "ap",
+the text object that stands for "a paragraph". A paragraph is separated from
+the next paragraph by an empty line.
+
+ Note:
+ A blank line, which contains white space, does NOT separate
+ paragraphs. This is hard to notice!
+
+Instead of "ap" you could use any motion or text object. If your paragraphs
+are properly separated, you can use this command to format the whole file: >
+
+ gggqG
+
+"gg" takes you to the first line, "gq" is the format operator and "G" the
+motion that jumps to the last line.
+
+In case your paragraphs aren't clearly defined, you can format just the lines
+you manually select. Move the cursor to the first line you want to format.
+Start with the command "gqj". This formats the current line and the one below
+it. If the first line was short, words from the next line will be appended.
+If it was too long, words will be moved to the next line. The cursor moves to
+the second line. Now you can use "." to repeat the command. Keep doing this
+until you are at the end of the text you want to format.
+
+==============================================================================
+*10.8* Changing case
+
+You have text with section headers in lowercase. You want to make the word
+"section" all uppercase. Do this with the "gU" operator. Start with the
+cursor in the first column: >
+
+ gUw
+< section header ----> SECTION header
+
+The "gu" operator does exactly the opposite: >
+
+ guw
+< SECTION header ----> section header
+
+You can also use "g~" to swap case. All these are operators, thus they work
+with any motion command, with text objects and in Visual mode.
+ To make an operator work on lines you double it. The delete operator is
+"d", thus to delete a line you use "dd". Similarly, "gugu" makes a whole line
+lowercase. This can be shortened to "guu". "gUgU" is shortened to "gUU" and
+"g~g~" to "g~~". Example: >
+
+ g~~
+< Some GIRLS have Fun ----> sOME girls HAVE fUN ~
+
+==============================================================================
+*10.9* Using an external program
+
+Vim has a very powerful set of commands, it can do anything. But there may
+still be something that an external command can do better or faster.
+ The command "!{motion}{program}" takes a block of text and filters it
+through an external program. In other words, it runs the system command
+represented by {program}, giving it the block of text represented by {motion}
+as input. The output of this command then replaces the selected block.
+ Because this summarizes badly if you are unfamiliar with UNIX filters, take
+a look at an example. The sort command sorts a file. If you execute the
+following command, the unsorted file input.txt will be sorted and written to
+output.txt. (This works on both UNIX and Microsoft Windows.) >
+
+ sort <input.txt >output.txt
+
+Now do the same thing in Vim. You want to sort lines 1 through 5 of a file.
+You start by putting the cursor on line 1. Next you execute the following
+command: >
+
+ !5G
+
+The "!" tells Vim that you are performing a filter operation. The Vim editor
+expects a motion command to follow, indicating which part of the file to
+filter. The "5G" command tells Vim to go to line 5, so it now knows that it
+is to filter lines 1 (the current line) through 5.
+ In anticipation of the filtering, the cursor drops to the bottom of the
+screen and a ! prompt displays. You can now type in the name of the filter
+program, in this case "sort". Therefore, your full command is as follows: >
+
+ !5Gsort<Enter>
+
+The result is that the sort program is run on the first 5 lines. The output
+of the program replaces these lines.
+
+ line 55 line 11
+ line 33 line 22
+ line 11 --> line 33
+ line 22 line 44
+ line 44 line 55
+ last line last line
+
+The "!!" command filters the current line through a filter. In Unix the "date"
+command prints the current time and date. "!!date<Enter>" replaces the current
+line with the output of "date". This is useful to add a timestamp to a file.
+
+
+WHEN IT DOESN'T WORK
+
+Starting a shell, sending it text and capturing the output requires that Vim
+knows how the shell works exactly. When you have problems with filtering,
+check the values of these options:
+
+ 'shell' specifies the program that Vim uses to execute
+ external programs.
+ 'shellcmdflag' argument to pass a command to the shell
+ 'shellquote' quote to be used around the command
+ 'shellxquote' quote to be used around the command and redirection
+ 'shelltype' kind of shell (only for the Amiga)
+ 'shellslash' use forward slashes in the command (only for
+ MS-Windows and alikes)
+ 'shellredir' string used to write the command output into a file
+
+On Unix this is hardly ever a problem, because there are two kinds of shells:
+"sh" like and "csh" like. Vim checks the 'shell' option and sets related
+options automatically, depending on whether it sees "csh" somewhere in
+'shell'.
+ On MS-Windows, however, there are many different shells and you might have
+to tune the options to make filtering work. Check the help for the options
+for more information.
+
+
+READING COMMAND OUTPUT
+
+To read the contents of the current directory into the file, use this:
+
+on Unix: >
+ :read !ls
+on MS-Windows: >
+ :read !dir
+
+The output of the "ls" or "dir" command is captured and inserted in the text,
+below the cursor. This is similar to reading a file, except that the "!" is
+used to tell Vim that a command follows.
+ The command may have arguments. And a range can be used to tell where Vim
+should put the lines: >
+
+ :0read !date -u
+
+This inserts the current time and date in UTC format at the top of the file.
+(Well, if you have a date command that accepts the "-u" argument.) Note the
+difference with using "!!date": that replaced a line, while ":read !date" will
+insert a line.
+
+
+WRITING TEXT TO A COMMAND
+
+The Unix command "wc" counts words. To count the words in the current file: >
+
+ :write !wc
+
+This is the same write command as before, but instead of a file name the "!"
+character is used and the name of an external command. The written text will
+be passed to the specified command as its standard input. The output could
+look like this:
+
+ 4 47 249 ~
+
+The "wc" command isn't verbose. This means you have 4 lines, 47 words and 249
+characters.
+
+Watch out for this mistake: >
+
+ :write! wc
+
+This will write the file "wc" in the current directory, with force. White
+space is important here!
+
+
+REDRAWING THE SCREEN
+
+If the external command produced an error message, the display may have been
+messed up. Vim is very efficient and only redraws those parts of the screen
+that it knows need redrawing. But it can't know about what another program
+has written. To tell Vim to redraw the screen: >
+
+ CTRL-L
+
+==============================================================================
+
+Next chapter: |usr_11.txt| Recovering from a crash
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt
new file mode 100644
index 000000000..28ff3842e
--- /dev/null
+++ b/runtime/doc/usr_11.txt
@@ -0,0 +1,287 @@
+*usr_11.txt* For Vim version 7.0aa. Last change: 2004 Apr 23
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Recovering from a crash
+
+
+Did your computer crash? And you just spent hours editing? Don't panic! Vim
+keeps enough information on harddisk to be able to restore most of your work.
+This chapter shows you how to get your work back and explains how the swap
+file is used.
+
+|11.1| Basic recovery
+|11.2| Where is the swap file?
+|11.3| Crashed or not?
+|11.4| Further reading
+
+ Next chapter: |usr_12.txt| Clever tricks
+ Previous chapter: |usr_10.txt| Making big changes
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*11.1* Basic recovery
+
+In most cases recovering a file is quite simple, assuming you know which file
+you were editing (and the harddisk is still working). Start Vim on the file,
+with the "-r" argument added: >
+
+ vim -r help.txt
+
+Vim will read the swap file (used to store text you were editing) and may read
+bits and pieces of the original file. If all is well, you will see these
+messages (with different file names, of course):
+
+ Using swap file ".help.txt.swp" ~
+ Original file "~/vim/runtime/doc/help.txt" ~
+ Recovery completed. You should check if everything is OK. ~
+ (You might want to write out this file under another name ~
+ and run diff with the original file to check for changes) ~
+ Delete the .swp file afterwards. ~
+
+To be on the safe side, write this file under another name: >
+
+ :write help.txt.recovered
+
+Compare the file with the original file to check if you ended up with what you
+expected. Vimdiff is very useful for this |08.7|. Watch out for the original
+file to contain a more recent version (you saved the file just before the
+computer crashed). And check that no lines are missing (something went wrong
+that Vim could not recover).
+ If Vim produces warning messages when recovering, read them carefully.
+This is rare though.
+
+It's normal that the last few changes can not be recovered. Vim flushes the
+changes to disk when you don't type for about four seconds, or after typing
+about two hundred characters. This is set with the 'updatetime' and
+'updatecount' options. Thus when Vim didn't get a chance to save itself when
+the system went down, the changes after the last flush will be lost.
+
+If you were editing without a file name, give an empty string as argument: >
+
+ vim -r ""
+
+You must be in the right directory, otherwise Vim can't find the swap file.
+
+==============================================================================
+*11.2* Where is the swap file?
+
+Vim can store the swap file in several places. Normally it is in the same
+directory as the original file. To find it, change to the directory of the
+file, and use: >
+
+ vim -r
+
+Vim will list the swap files that it can find. It will also look in other
+directories where the swap file for files in the current directory may be
+located. It will not find swap files in any other directories though, it
+doesn't search the directory tree.
+ The output could look like this:
+
+ Swap files found: ~
+ In current directory: ~
+ 1. .main.c.swp ~
+ owned by: mool dated: Tue May 29 21:00:25 2001 ~
+ file name: ~mool/vim/vim6/src/main.c ~
+ modified: YES ~
+ user name: mool host name: masaka.moolenaar.net ~
+ process ID: 12525 ~
+ In directory ~/tmp: ~
+ -- none -- ~
+ In directory /var/tmp: ~
+ -- none -- ~
+ In directory /tmp: ~
+ -- none -- ~
+
+If there are several swap files that look like they may be the one you want to
+use, a list is given of these swap files and you are requested to enter the
+number of the one you want to use. Carefully look at the dates to decide
+which one you want to use.
+ In case you don't know which one to use, just try them one by one and check
+the resulting files if they are what you expected.
+
+
+USING A SPECIFIC SWAP FILE
+
+If you know which swap file needs to be used, you can recover by giving the
+swap file name. Vim will then finds out the name of the original file from
+the swap file.
+
+Example: >
+ vim -r .help.txt.swo
+
+This is also handy when the swap file is in another directory than expected.
+If this still does not work, see what file names Vim reports and rename the
+files accordingly. Check the 'directory' option to see where Vim may have
+put the swap file.
+
+ Note:
+ Vim tries to find the swap file by searching the directories in the
+ 'dir' option, looking for files that match "filename.sw?". If
+ wildcard expansion doesn't work (e.g., when the 'shell' option is
+ invalid), Vim does a desperate try to find the file "filename.swp".
+ If that fails too, you will have to give the name of the swapfile
+ itself to be able to recover the file.
+
+==============================================================================
+*11.3* Crashed or not? *ATTENTION* *E325*
+
+Vim tries to protect you from doing stupid things. Suppose you innocently
+start editing a file, expecting the contents of the file to show up. Instead,
+Vim produces a very long message:
+
+ E325: ATTENTION ~
+ Found a swap file by the name ".main.c.swp" ~
+ owned by: mool dated: Tue May 29 21:09:28 2001 ~
+ file name: ~mool/vim/vim6/src/main.c ~
+ modified: no ~
+ user name: mool host name: masaka.moolenaar.net ~
+ process ID: 12559 (still running) ~
+ While opening file "main.c" ~
+ dated: Tue May 29 19:46:12 2001 ~
+ ~
+ (1) Another program may be editing the same file. ~
+ If this is the case, be careful not to end up with two ~
+ different instances of the same file when making changes. ~
+ Quit, or continue with caution. ~
+ ~
+ (2) An edit session for this file crashed. ~
+ If this is the case, use ":recover" or "vim -r main.c" ~
+ to recover the changes (see ":help recovery"). ~
+ If you did this already, delete the swap file ".main.c.swp" ~
+ to avoid this message. ~
+
+You get this message, because, when starting to edit a file, Vim checks if a
+swap file already exists for that file. If there is one, there must be
+something wrong. It may be one of these two situations.
+
+1. Another edit session is active on this file. Look in the message for the
+ line with "process ID". It might look like this:
+
+ process ID: 12559 (still running) ~
+
+ The text "(still running)" indicates that the process editing this file
+ runs on the same computer. When working on a non-Unix system you will not
+ get this extra hint. When editing a file over a network, you may not see
+ the hint, because the process might be running on another computer. In
+ those two cases you must find out what the situation is yourself.
+ If there is another Vim editing the same file, continuing to edit will
+ result in two versions of the same file. The one that is written last will
+ overwrite the other one, resulting in loss of changes. You better quit
+ this Vim.
+
+2. The swap file might be the result from a previous crash of Vim or the
+ computer. Check the dates mentioned in the message. If the date of the
+ swap file is newer than the file you were editing, and this line appears:
+
+ modified: YES ~
+
+ Then you very likely have a crashed edit session that is worth recovering.
+ If the date of the file is newer than the date of the swap file, then
+ either it was changed after the crash (perhaps you recovered it earlier,
+ but didn't delete the swap file?), or else the file was saved before the
+ crash but after the last write of the swap file (then you're lucky: you
+ don't even need that old swap file). Vim will warn you for this with this
+ extra line:
+
+ NEWER than swap file! ~
+
+
+UNREADABLE SWAP FILE
+
+Sometimes the line
+
+ [cannot be read] ~
+
+will appear under the name of the swap file. This can be good or bad,
+depending on circumstances.
+
+It is good if a previous editing session crashed without having made any
+changes to the file. Then a directory listing of the swap file will show
+that it has zero bytes. You may delete it and proceed.
+
+It is slightly bad if you don't have read permission for the swap file. You
+may want to view the file read-only, or quit. On multi-user systems, if you
+yourself did the last changes under a different login name, a logout
+followed by a login under that other name might cure the "read error". Or
+else you might want to find out who last edited (or is editing) the file and
+have a talk with them.
+
+It is very bad if it means there is a physical read error on the disk
+containing the swap file. Fortunately, this almost never happens.
+You may want to view the file read-only at first (if you can), to see the
+extent of the changes that were "forgotten". If you are the one in charge of
+that file, be prepared to redo your last changes.
+
+
+WHAT TO DO?
+
+If dialogs are supported you will be asked to select one of five choices:
+
+ Swap file ".main.c.swp" already exists! ~
+ [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it: ~
+
+O Open the file readonly. Use this when you just want to view the file and
+ don't need to recover it. You might want to use this when you know someone
+ else is editing the file, but you just want to look in it and not make
+ changes.
+
+E Edit the file anyway. Use this with caution! If the file is being edited
+ in another Vim, you might end up with two versions of the file. Vim will
+ try to warn you when this happens, but better be safe then sorry.
+
+R Recover the file from the swap file. Use this if you know that the swap
+ file contains changes that you want to recover.
+
+Q Quit. This avoids starting to edit the file. Use this if there is another
+ Vim editing the same file.
+ When you just started Vim, this will exit Vim. When starting Vim with
+ files in several windows, Vim quits only if there is a swap file for the
+ first one. When using an edit command, the file will not be loaded and you
+ are taken back to the previously edited file.
+
+A Abort. Like Quit, but also abort further commands. This is useful when
+ loading a script that edits several files, such as a session with multiple
+ windows.
+
+D Delete the swap file. Use this when you are sure you no longer need it.
+ For example, when it doesn't contain changes, or when the file itself is
+ newer than the swap file.
+ On Unix this choice is only offered when the process that created the
+ swap file does not appear to be running.
+
+If you do not get the dialog (you are running a version of Vim that does not
+support it), you will have to do it manually. To recover the file, use this
+command: >
+
+ :recover
+
+
+Vim cannot always detect that a swap file already exists for a file. This is
+the case when the other edit session puts the swap files in another directory
+or when the path name for the file is different when editing it on different
+machines. Therefore, don't rely on Vim always warning you.
+
+If you really don't want to see this message, you can add the 'A' flag to the
+'shortmess' option. But it's very unusual that you need this.
+
+==============================================================================
+*11.4* Further reading
+
+|swap-file| An explanation about where the swap file will be created and
+ what its name is.
+|:preserve| Manually flushing the swap file to disk.
+|:swapname| See the name of the swap file for the current file.
+'updatecount' Number of key strokes after which the swap file is flushed to
+ disk.
+'updatetime' Timeout after which the swap file is flushed to disk.
+'swapsync' Whether the disk is synced when the swap file is flushed.
+'directory' List of directory names where to store the swap file.
+'maxmem' Limit for memory usage before writing text to the swap file.
+'maxmemtot' Same, but for all files in total.
+
+==============================================================================
+
+Next chapter: |usr_12.txt| Clever tricks
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_12.txt b/runtime/doc/usr_12.txt
new file mode 100644
index 000000000..6abf24659
--- /dev/null
+++ b/runtime/doc/usr_12.txt
@@ -0,0 +1,358 @@
+*usr_12.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Clever tricks
+
+
+By combining several commands you can make Vim do nearly everything. In this
+chapter a number of useful combinations will be presented. This uses the
+commands introduced in the previous chapters and a few more.
+
+|12.1| Replace a word
+|12.2| Change "Last, First" to "First Last"
+|12.3| Sort a list
+|12.4| Reverse line order
+|12.5| Count words
+|12.6| Find a man page
+|12.7| Trim blanks
+|12.8| Find where a word is used
+
+ Next chapter: |usr_20.txt| Typing command-line commands quickly
+ Previous chapter: |usr_11.txt| Recovering from a crash
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*12.1* Replace a word
+
+The substitute command can be used to replace all occurrences of a word with
+another word: >
+
+ :%s/four/4/g
+
+The "%" range means to replace in all lines. The "g" flag at the end causes
+all words in a line to be replaced.
+ This will not do the right thing if your file also contains "thirtyfour".
+It would be replaced with "thirty4". To avoid this, use the "\<" item to
+match the start of a word: >
+
+ :%s/\<four/4/g
+
+Obviously, this still goes wrong on "fourty". Use "\>" to match the end of a
+word: >
+
+ :%s/\<four\>/4/g
+
+If you are programming, you might want to replace "four" in comments, but not
+in the code. Since this is difficult to specify, add the "c" flag to have the
+substitute command prompt you for each replacement: >
+
+
+ :%s/\<four\>/4/gc
+
+
+REPLACING IN SEVERAL FILES
+
+Suppose you want to replace a word in more than one file. You could edit each
+file and type the command manually. It's a lot faster to use record and
+playback.
+ Let's assume you have a directory with C++ files, all ending in ".cpp".
+There is a function called "GetResp" that you want to rename to "GetAnswer".
+
+ vim *.cpp Start Vim, defining the argument list to
+ contain all the C++ files. You are now in the
+ first file.
+ qq Start recording into the q register
+ :%s/\<GetResp\>/GetAnswer/g
+ Do the replacements in the first file.
+ :wnext Write this file and move to the next one.
+ q Stop recording.
+ @q Execute the q register. This will replay the
+ substitution and ":wnext". You can verify
+ that this doesn't produce an error message.
+ 999@q Execute the q register on the remaining files.
+
+At the last file you will get an error message, because ":wnext" cannot move
+to the next file. This stops the execution, and everything is done.
+
+ Note:
+ When playing back a recorded sequence, an error stops the execution.
+ Therefore, make sure you don't get an error message when recording.
+
+There is one catch: If one of the .cpp files does not contain the word
+"GetResp", you will get an error and replacing will stop. To avoid this, add
+the "e" flag to the substitute command: >
+
+ :%s/\<GetResp\>/GetAnswer/ge
+
+The "e" flag tells ":substitute" that not finding a match is not an error.
+
+==============================================================================
+*12.2* Change "Last, First" to "First Last"
+
+You have a list of names in this form:
+
+ Doe, John ~
+ Smith, Peter ~
+
+You want to change that to:
+
+ John Doe ~
+ Peter Smith ~
+
+This can be done with just one command: >
+
+ :%s/\([^,]*\), \(.*\)/\2 \1/
+
+Let's break this down in parts. Obviously it starts with a substitute
+command. The "%" is the line range, which stands for the whole file. Thus
+the substitution is done in every line in the file.
+ The arguments for the substitute command are "/from/to/". The slashes
+separate the "from" pattern and the "to" string. This is what the "from"
+pattern contains:
+ \([^,]*\), \(.*\) ~
+
+ The first part between \( \) matches "Last" \( \)
+ match anything but a comma [^,]
+ any number of times *
+ matches ", " literally ,
+ The second part between \( \) matches "First" \( \)
+ any character .
+ any number of times *
+
+In the "to" part we have "\2" and "\1". These are called backreferences.
+They refer to the text matched by the "\( \)" parts in the pattern. "\2"
+refers to the text matched by the second "\( \)", which is the "First" name.
+"\1" refers to the first "\( \)", which is the "Last" name.
+ You can use up to nine backreferences in the "to" part of a substitute
+command. "\0" stands for the whole matched pattern. There are a few more
+special items in a substitute command, see |sub-replace-special|.
+
+==============================================================================
+*12.3* Sort a list
+
+In a Makefile you often have a list of files. For example:
+
+ OBJS = \ ~
+ version.o \ ~
+ pch.o \ ~
+ getopt.o \ ~
+ util.o \ ~
+ getopt1.o \ ~
+ inp.o \ ~
+ patch.o \ ~
+ backup.o ~
+
+To sort this list, filter the text through the external sort command: >
+
+ /^OBJS
+ j
+ :.,/^$/-1!sort
+
+This goes to the first line, where "OBJS" is the first thing in the line.
+Then it goes one line down and filters the lines until the next empty line.
+You could also select the lines in Visual mode and then use "!sort". That's
+easier to type, but more work when there are many lines.
+ The result is this:
+
+ OBJS = \ ~
+ backup.o ~
+ getopt.o \ ~
+ getopt1.o \ ~
+ inp.o \ ~
+ patch.o \ ~
+ pch.o \ ~
+ util.o \ ~
+ version.o \ ~
+
+
+Notice that a backslash at the end of each line is used to indicate the line
+continues. After sorting, this is wrong! The "backup.o" line that was at
+the end didn't have a backslash. Now that it sorts to another place, it
+must have a backslash.
+ The simplest solution is to add the backslash with "A \<Esc>". You can
+keep the backslash in the last line, if you make sure an empty line comes
+after it. That way you don't have this problem again.
+
+==============================================================================
+*12.4* Reverse line order
+
+The |:global| command can be combined with the |:move| command to move all the
+lines before the first line, resulting in a reversed file. The command is: >
+
+ :global/^/m 0
+
+Abbreviated: >
+
+ :g/^/m 0
+
+The "^" regular expression matches the beginning of the line (even if the line
+is blank). The |:move| command moves the matching line to after the mythical
+zeroth line, so the current matching line becomes the first line of the file.
+As the |:global| command is not confused by the changing line numbering,
+|:global| proceeds to match all remaining lines of the file and puts each as
+the first.
+
+This also works on a range of lines. First move to above the first line and
+mark it with "mt". Then move the cursor to the last line in the range and
+type: >
+
+ :'t+1,.g/^/m 't
+
+==============================================================================
+*12.5* Count words
+
+Sometimes you have to write a text with a maximum number of words. Vim can
+count the words for you.
+ When the whole file is what you want to count the words in, use this
+command: >
+
+ g CTRL-G
+
+Do not type a space after the g, this is just used here to make the command
+easy to read.
+ The output looks like this:
+
+ Col 1 of 0; Line 141 of 157; Word 748 of 774; Byte 4489 of 4976 ~
+
+You can see on which word you are (748), and the total number of words in the
+file (774).
+
+When the text is only part of a file, you could move to the start of the text,
+type "g CTRL-G", move to the end of the text, type "g CTRL-G" again, and then
+use your brain to compute the difference in the word position. That's a good
+exercise, but there is an easier way. With Visual mode, select the text you
+want to count words in. Then type g CTRL-G. The result:
+
+ Selected 5 of 293 Lines; 70 of 1884 Words; 359 of 10928 Bytes ~
+
+For other ways to count words, lines and other items, see |count-items|.
+
+==============================================================================
+*12.6* Find a man page *find-manpage*
+
+While editing a shell script or C program, you are using a command or function
+that you want to find the man page for (this is on Unix). Let's first use a
+simple way: Move the cursor to the word you want to find help on and press >
+
+ K
+
+Vim will run the external "man" program on the word. If the man page is
+found, it is displayed. This uses the normal pager to scroll through the text
+(mostly the "more" program). When you get to the end pressing <Enter> will
+get you back into Vim.
+
+A disadvantage is that you can't see the man page and the text you are working
+on at the same time. There is a trick to make the man page appear in a Vim
+window. First, load the man filetype plugin: >
+
+ :runtime! ftplugin/man.vim
+
+Put this command in your vimrc file if you intend to do this often. Now you
+can use the ":Man" command to open a window on a man page: >
+
+ :Man csh
+
+You can scroll around and the text is highlighted. This allows you to find
+the help you were looking for. Use CTRL-W w to jump to the window with the
+text you were working on.
+ To find a man page in a specific section, put the section number first.
+For example, to look in section 3 for "echo": >
+
+ :Man 3 echo
+
+To jump to another man page, which is in the text with the typical form
+"word(1)", press CTRL-] on it. Further ":Man" commands will use the same
+window.
+
+To display a man page for the word under the cursor, use this: >
+
+ \K
+
+(If you redefined the <Leader>, use it instead of the backslash).
+For example, you want to know the return value of "strstr()" while editing
+this line:
+
+ if (strstr(input, "aap") == ) ~
+
+Move the cursor to somewhere on "strstr" and type "\K". A window will open
+to display the man page for strstr().
+
+==============================================================================
+*12.7* Trim blanks
+
+Some people find spaces and tabs at the end of a line useless, wasteful, and
+ugly. To remove whitespace at the end of every line, execute the following
+command: >
+
+ :%s/\s\+$//
+
+The line range "%" is used, thus this works on the whole file. The pattern
+that the ":substitute" command matches with is "\s\+$". This finds white
+space characters (\s), 1 or more of them (\+), before the end-of-line ($).
+Later will be explained how you write patterns like this |usr_27.txt|.
+ The "to" part of the substitute command is empty: "//". Thus it replaces
+with nothing, effectively deleting the matched white space.
+
+Another wasteful use of spaces is placing them before a Tab. Often these can
+be deleted without changing the amount of white space. But not always!
+Therefore, you can best do this manually. Use this search command: >
+
+ /
+
+You cannot see it, but there is a space before a tab in this command. Thus
+it's "/<Space><Tab>". Now use "x" to delete the space and check that the
+amount of white space doesn't change. You might have to insert a Tab if it
+does change. Type "n" to find the next match. Repeat this until no more
+matches can be found.
+
+==============================================================================
+*12.8* Find where a word is used
+
+If you are a UNIX user, you can use a combination of Vim and the grep command
+to edit all the files that contain a given word. This is extremely useful if
+you are working on a program and want to view or edit all the files that
+contain a specific variable.
+ For example, suppose you want to edit all the C program files that contain
+the word "frame_counter". To do this you use the command: >
+
+ vim `grep -l frame_counter *.c`
+
+Let's look at this command in detail. The grep command searches through a set
+of files for a given word. Because the -l argument is specified, the command
+will only list the files containing the word and not print the matching lines.
+The word it is searching for is "frame_counter". Actually, this can be any
+regular expression. (Note: What grep uses for regular expressions is not
+exactly the same as what Vim uses.)
+ The entire command is enclosed in backticks (`). This tells the UNIX shell
+to run this command and pretend that the results were typed on the command
+line. So what happens is that the grep command is run and produces a list of
+files, these files are put on the Vim command line. This results in Vim
+editing the file list that is the output of grep. You can then use commands
+like ":next" and ":first" to browse through the files.
+
+
+FINDING EACH LINE
+
+The above command only finds the files in which the word is found. You still
+have to find the word within the files.
+ Vim has a built-in command that you can use to search a set of files for a
+given string. If you want to find all occurrences of "error_string" in all C
+program files, for example, enter the following command: >
+
+ :grep error_string *.c
+
+This causes Vim to search for the string "error_string" in all the specified
+files (*.c). The editor will now open the first file where a match is found
+and position the cursor on the first matching line. To go to the next
+matching line (no matter in what it is file), use the ":cnext" command. To go
+to the previous match, use the ":cprev" command. Use ":clist" to see all the
+matches and where they are.
+ The ":grep" command uses the external commands grep (on Unix) or findstr
+(on Windows). You can change this by setting the option 'grepprg'.
+
+==============================================================================
+
+Next chapter: |usr_20.txt| Typing command-line commands quickly
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_20.txt b/runtime/doc/usr_20.txt
new file mode 100644
index 000000000..a489a46e9
--- /dev/null
+++ b/runtime/doc/usr_20.txt
@@ -0,0 +1,384 @@
+*usr_20.txt* For Vim version 7.0aa. Last change: 2003 Apr 30
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Typing command-line commands quickly
+
+
+Vim has a few generic features that makes it easier to enter commands. Colon
+commands can be abbreviated, edited and repeated. Completion is available for
+nearly everything.
+
+|20.1| Command line editing
+|20.2| Command line abbreviations
+|20.3| Command line completion
+|20.4| Command line history
+|20.5| Command line window
+
+ Next chapter: |usr_21.txt| Go away and come back
+ Previous chapter: |usr_12.txt| Clever tricks
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*20.1* Command line editing
+
+When you use a colon (:) command or search for a string with / or ?, Vim puts
+the cursor on the bottom of the screen. There you type the command or search
+pattern. This is called the Command line. Also when it's used for entering a
+search command.
+
+The most obvious way to edit the command you type is by pressing the <BS> key.
+This erases the character before the cursor. To erase another character,
+typed earlier, first move the cursor with the cursor keys.
+ For example, you have typed this: >
+
+ :s/col/pig/
+
+Before you hit <Enter>, you notice that "col" should be "cow". To correct
+this, you type <Left> five times. The cursor is now just after "col". Type
+<BS> and "w" to correct: >
+
+ :s/cow/pig/
+
+Now you can press <Enter> directly. You don't have to move the cursor to the
+end of the line before executing the command.
+
+The most often used keys to move around in the command line:
+
+ <Left> one character left
+ <Right> one character right
+ <S-Left> or <C-Left> one word left
+ <S-Right> or <C-Right> one word right
+ CTRL-B or <Home> to begin of command line
+ CTRL-E or <End> to end of command line
+
+ Note:
+ <S-Left> (cursor left key with Shift key pressed) and <C-Left> (cursor
+ left key with Control pressed) will not work on all keyboards. Same
+ for the other Shift and Control combinations.
+
+You can also use the mouse to move the cursor.
+
+
+DELETING
+
+As mentioned, <BS> deletes the character before the cursor. To delete a whole
+word use CTRL-W.
+
+ /the fine pig ~
+
+ CTRL-W
+
+ /the fine ~
+
+CTRL-U removes all text, thus allows you to start all over again.
+
+
+OVERSTRIKE
+
+The <Insert> key toggles between inserting characters and replacing the
+existing ones. Start with this text:
+
+ /the fine pig ~
+
+Move the cursor to the start of "fine" with <S-Left> twice (or <Left> eight
+times, if <S-Left> doesn't work). Now press <Insert> to switch to overstrike
+and type "great":
+
+ /the greatpig ~
+
+Oops, we lost the space. Now, don't use <BS>, because it would delete the
+"t" (this is different from Replace mode). Instead, press <Insert> to switch
+from overstrike to inserting, and type the space:
+
+ /the great pig ~
+
+
+CANCELLING
+
+You thought of executing a : or / command, but changed your mind. To get rid
+of what you already typed, without executing it, press CTRL-C or <Esc>.
+
+ Note:
+ <Esc> is the universal "get out" key. Unfortunately, in the good old
+ Vi pressing <Esc> in a command line executed the command! Since that
+ might be considered to be a bug, Vim uses <Esc> to cancel the command.
+ But with the 'cpoptions' option it can be made Vi compatible. And
+ when using a mapping (which might be written for Vi) <Esc> also works
+ Vi compatible. Therefore, using CTRL-C is a method that always works.
+
+If you are at the start of the command line, pressing <BS> will cancel the
+command. It's like deleting the ":" or "/" that the line starts with.
+
+==============================================================================
+*20.2* Command line abbreviations
+
+Some of the ":" commands are really long. We already mentioned that
+":substitute" can be abbreviated to ":s". This is a generic mechanism, all
+":" commands can be abbreviated.
+
+How short can a command get? There are 26 letters, and many more commands.
+For example, ":set" also starts with ":s", but ":s" doesn't start a ":set"
+command. Instead ":set" can be abbreviated to ":se".
+ When the shorter form of a command could be used for two commands, it
+stands for only one of them. There is no logic behind which one, you have to
+learn them. In the help files the shortest form that works is mentioned. For
+example: >
+
+ :s[ubstitute]
+
+This means that the shortest form of ":substitute" is ":s". The following
+characters are optional. Thus ":su" and ":sub" also work.
+
+In the user manual we will either use the full name of command, or a short
+version that is still readable. For example, ":function" can be abbreviated
+to ":fu". But since most people don't understand what that stands for, we
+will use ":fun". (Vim doesn't have a ":funny" command, otherwise ":fun" would
+be confusing too.)
+
+It is recommended that in Vim scripts you write the full command name. That
+makes it easier to read back when you make later changes. Except for some
+often used commands like ":w" (":write") and ":r" (":read").
+ A particularly confusing one is ":end", which could stand for ":endif",
+":endwhile" or ":endfunction". Therefore, always use the full name.
+
+
+SHORT OPTION NAMES
+
+In the user manual the long version of the option names is used. Many options
+also have a short name. Unlike ":" commands, there is only one short name
+that works. For example, the short name of 'autoindent' is 'ai'. Thus these
+two commands do the same thing: >
+
+ :set autoindent
+ :set ai
+
+You can find the full list of long and short names here: |option-list|.
+
+==============================================================================
+*20.3* Command line completion
+
+This is one of those Vim features that, by itself, is a reason to switch from
+Vi to Vim. Once you have used this, you can't do without.
+
+Suppose you have a directory that contains these files:
+
+ info.txt
+ intro.txt
+ bodyofthepaper.txt
+
+To edit the last one, you use the command: >
+
+ :edit bodyofthepaper.txt
+
+It's easy to type this wrong. A much quicker way is: >
+
+ :edit b<Tab>
+
+Which will result in the same command. What happened? The <Tab> key does
+completion of the word before the cursor. In this case "b". Vim looks in the
+directory and finds only one file that starts with a "b". That must be the
+one you are looking for, thus Vim completes the file name for you.
+
+Now type: >
+
+ :edit i<Tab>
+
+Vim will beep, and give you: >
+
+ :edit info.txt
+
+The beep means that Vim has found more than one match. It then uses the first
+match it found (alphabetically). If you press <Tab> again, you get: >
+
+ :edit intro.txt
+
+Thus, if the first <Tab> doesn't give you the file you were looking for, press
+it again. If there are more matches, you will see them all, one at a time.
+ If you press <Tab> on the last matching entry, you will go back to what you
+first typed: >
+
+ :edit i
+
+Then it starts all over again. Thus Vim cycles through the list of matches.
+Use CTRL-P to go through the list in the other direction:
+
+ <------------------- <Tab> -------------------------+
+ |
+ <Tab> --> <Tab> -->
+ :edit i :edit info.txt :edit intro.txt
+ <-- CTRL-P <-- CTRL-P
+ |
+ +---------------------- CTRL-P ------------------------>
+
+
+CONTEXT
+
+When you type ":set i" instead of ":edit i" and press <Tab> you get: >
+
+ :set icon
+
+Hey, why didn't you get ":set info.txt"? That's because Vim has context
+sensitive completion. The kind of words Vim will look for depends on the
+command before it. Vim knows that you cannot use a file name just after a
+":set" command, but you can use an option name.
+ Again, if you repeat typing the <Tab>, Vim will cycle through all matches.
+There are quite a few, it's better to type more characters first: >
+
+ :set isk<Tab>
+
+Gives: >
+
+ :set iskeyword
+
+Now type "=" and press <Tab>: >
+
+ :set iskeyword=@,48-57,_,192-255
+
+What happens here is that Vim inserts the old value of the option. Now you
+can edit it.
+ What is completed with <Tab> is what Vim expects in that place. Just try
+it out to see how it works. In some situations you will not get what you
+want. That's either because Vim doesn't know what you want, or because
+completion was not implemented for that situation. In that case you will get
+a <Tab> inserted (displayed as ^I).
+
+
+LIST MATCHES
+
+When there are many matches, you would like to see an overview. Do this by
+pressing CTRL-D. For example, pressing CTRL-D after: >
+
+ :set is
+
+results in: >
+
+ :set is
+ incsearch isfname isident iskeyword isprint
+ :set is
+
+Vim lists the matches and then comes back with the text you typed. You can
+now check the list for the item you wanted. If it isn't there, you can use
+<BS> to correct the word. If there are many matches, type a few more
+characters before pressing <Tab> to complete the rest.
+ If you have watched carefully, you will have noticed that "incsearch"
+doesn't start with "is". In this case "is" stands for the short name of
+"incsearch". (Many options have a short and a long name.) Vim is clever
+enough to know that you might have wanted to expand the short name of the
+option into the long name.
+
+
+THERE IS MORE
+
+The CTRL-L command completes the word to the longest unambiguous string. If
+you type ":edit i" and there are files "info.txt" and "info_backup.txt" you
+will get ":edit info".
+
+The 'wildmode' option can be used to change the way completion works.
+The 'wildmenu' option can be used to get a menu-like list of matches.
+Use the 'suffixes' option to specify files that are less important and appear
+at the end of the list of files.
+The 'wildignore' option specifies files that are not listed at all.
+
+More about all of this here: |cmdline-completion|
+
+==============================================================================
+*20.4* Command line history
+
+In chapter 3 we briefly mentioned the history. The basics are that you can
+use the <Up> key to recall an older command line. <Down> then takes you back
+to newer commands.
+
+There are actually four histories. The ones we will mention here are for ":"
+commands and for "/" and "?" search commands. The "/" and "?" commands share
+the same history, because they are both search commands. The two other
+histories are for expressions and input lines for the input() function.
+|cmdline-history|
+
+Suppose you have done a ":set" command, typed ten more colon commands and then
+want to repeat that ":set" command again. You could press ":" and then ten
+times <Up>. There is a quicker way: >
+
+ :se<Up>
+
+Vim will now go back to the previous command that started with "se". You have
+a good chance that this is the ":set" command you were looking for. At least
+you should not have to press <Up> very often (unless ":set" commands is all
+you have done).
+
+The <Up> key will use the text typed so far and compare it with the lines in
+the history. Only matching lines will be used.
+ If you do not find the line you were looking for, use <Down> to go back to
+what you typed and correct that. Or use CTRL-U to start all over again.
+
+To see all the lines in the history: >
+
+ :history
+
+That's the history of ":" commands. The search history is displayed with this
+command: >
+
+ :history /
+
+CTRL-P will work like <Up>, except that it doesn't matter what you already
+typed. Similarly for CTRL-N and <Down>. CTRL-P stands for previous, CTRL-N
+for next.
+
+==============================================================================
+*20.5* Command line window
+
+Typing the text in the command line works different from typing text in Insert
+mode. It doesn't allow many commands to change the text. For most commands
+that's OK, but sometimes you have to type a complicated command. That's where
+the command line window is useful.
+
+Open the command line window with this command: >
+
+ q:
+
+Vim now opens a (small) window at the bottom. It contains the command line
+history, and an empty line at the end:
+
+ +-------------------------------------+
+ |other window |
+ |~ |
+ |file.txt=============================|
+ |:e c |
+ |:e config.h.in |
+ |:set path=.,/usr/include,, |
+ |:set iskeyword=@,48-57,_,192-255 |
+ |:set is |
+ |:q |
+ |: |
+ |command-line=========================|
+ | |
+ +-------------------------------------+
+
+You are now in Normal mode. You can use the "hjkl" keys to move around. For
+example, move up with "5k" to the ":e config.h.in" line. Type "$h" to go to
+the "i" of "in" and type "cwout". Now you have changed the line to:
+
+ :e config.h.out ~
+
+Now press <Enter> and this command will be executed. The command line window
+will close.
+ The <Enter> command will execute the line under the cursor. It doesn't
+matter whether Vim is in Insert mode or in Normal mode.
+ Changes in the command line window are lost. They do not result in the
+history to be changed. Except that the command you execute will be added to
+the end of the history, like with all executed commands.
+
+The command line window is very useful when you want to have overview of the
+history, lookup a similar command, change it a bit and execute it. A search
+command can be used to find something.
+ In the previous example the "?config" search command could have been used
+to find the previous command that contains "config". It's a bit strange,
+because you are using a command line to search in the command line window.
+While typing that search command you can't open another command line window,
+there can be only one.
+
+==============================================================================
+
+Next chapter: |usr_21.txt| Go away and come back
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_21.txt b/runtime/doc/usr_21.txt
new file mode 100644
index 000000000..a277b1375
--- /dev/null
+++ b/runtime/doc/usr_21.txt
@@ -0,0 +1,456 @@
+*usr_21.txt* For Vim version 7.0aa. Last change: 2004 Mar 29
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Go away and come back
+
+
+This chapter goes into mixing the use of other programs with Vim. Either by
+executing program from inside Vim or by leaving Vim and coming back later.
+Furthermore, this is about the ways to remember the state of Vim and restore
+it later.
+
+|21.1| Suspend and resume
+|21.2| Executing shell commands
+|21.3| Remembering information; viminfo
+|21.4| Sessions
+|21.5| Views
+|21.6| Modelines
+
+ Next chapter: |usr_22.txt| Finding the file to edit
+ Previous chapter: |usr_20.txt| Typing command-line commands quickly
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*21.1* Suspend and resume
+
+Like most Unix programs Vim can be suspended by pressing CTRL-Z. This stops
+Vim and takes you back to the shell it was started in. You can then do any
+other commands until you are bored with them. Then bring back Vim with the
+"fg" command. >
+
+ CTRL-Z
+ {any sequence of shell commands}
+ fg
+
+You are right back where you left Vim, nothing has changed.
+ In case pressing CTRL-Z doesn't work, you can also use ":suspend".
+Don't forget to bring Vim back to the foreground, you would lose any changes
+that you made!
+
+Only Unix has support for this. On other systems Vim will start a shell for
+you. This also has the functionality of being able to execute shell commands.
+But it's a new shell, not the one that you started Vim from.
+ When you are running the GUI you can't go back to the shell where Vim was
+started. CTRL-Z will minimize the Vim window instead.
+
+==============================================================================
+*21.2* Executing shell commands
+
+To execute a single shell command from Vim use ":!{command}". For example, to
+see a directory listing: >
+
+ :!ls
+ :!dir
+
+The first one is for Unix, the second one for MS-Windows.
+ Vim will execute the program. When it ends you will get a prompt to hit
+<Enter>. This allows you to have a look at the output from the command before
+returning to the text you were editing.
+ The "!" is also used in other places where a program is run. Let's take
+a look at an overview:
+
+ :!{program} execute {program}
+ :r !{program} execute {program} and read its output
+ :w !{program} execute {program} and send text to its input
+ :[range]!{program} filter text through {program}
+
+Notice that the precense of a range before "!{program}" makes a big
+difference. Without it executes the program normally, with the range a number
+of text lines is filtered through the program.
+
+Executing a whole row of programs this way is possible. But a shell is much
+better at it. You can start a new shell this way: >
+
+ :shell
+
+This is similar to using CTRL-Z to suspend Vim. The difference is that a new
+shell is started.
+
+When using the GUI the shell will be using the Vim window for its input and
+output. Since Vim is not a terminal emulator, this will not work perfectly.
+If you have trouble, try toggling the 'guipty' option. If this still doesn't
+work well enough, start a new terminal to run the shell in. For example with:
+>
+ :!xterm&
+
+==============================================================================
+*21.3* Remembering information; viminfo
+
+After editing for a while you will have text in registers, marks in various
+files, a command line history filled with carefully crafted commands. When
+you exit Vim all of this is lost. But you can get it back!
+
+The viminfo file is designed to store status information:
+
+ Command-line and Search pattern history
+ Text in registers
+ Marks for various files
+ The buffer list
+ Global variables
+
+Each time you exit Vim it will store this information in a file, the viminfo
+file. When Vim starts again, the viminfo file is read and the information
+restored.
+
+The 'viminfo' option is set by default to restore a limited number of items.
+You might want to set it to remember more information. This is done through
+the following command: >
+
+ :set viminfo=string
+
+The string specifies what to save. The syntax of this string is an option
+character followed by an argument. The option/argument pairs are separated by
+commas.
+ Take a look at how you can build up your own viminfo string. First, the '
+option is used to specify how many files for which you save marks (a-z). Pick
+a nice even number for this option (1000, for instance). Your command now
+looks like this: >
+
+ :set viminfo='1000
+
+The f option controls whether global marks (A-Z and 0-9) are stored. If this
+option is 0, none are stored. If it is 1 or you do not specify an f option,
+the marks are stored. You want this feature, so now you have this: >
+
+ :set viminfo='1000,f1
+
+The < option controls how many lines are saved for each of the registers. By
+default, all the lines are saved. If 0, nothing is saved. To avoid adding
+thousands of lines to your viminfo file (which might never get used and makes
+starting Vim slower) you use a maximum of 500 lines: >
+
+ :set viminfo='1000,f1,<500
+<
+Other options you might want to use:
+ : number of lines to save from the command line history
+ @ number of lines to save from the input line history
+ / number of lines to save from the search history
+ r removable media, for which no marks will be stored (can be
+ used several times)
+ ! global variables that start with an uppercase letter and
+ don't contain lowercase letters
+ h disable 'hlsearch' highlighting when starting
+ % the buffer list (only restored when starting Vim without file
+ arguments)
+ c convert the text using 'encoding'
+ n name used for the viminfo file (must be the last option)
+
+See the 'viminfo' option and |viminfo-file| for more information.
+
+When you run Vim multiple times, the last one exiting will store its
+information. This may cause information that previously exiting Vims stored
+to be lost. Each item can be remembered only once.
+
+
+GETTING BACK TO WHERE YOU WERE
+
+You are halfway editing a file and it's time to leave for holidays. You exit
+Vim and go enjoy yourselves, forgetting all about your work. After a couple
+of weeks you start Vim, and type:
+>
+ '0
+
+And you are right back where you left Vim. So you can get on with your work.
+ Vim creates a mark each time you exit Vim. The last one is '0. The
+position that '0 pointed to is made '1. And '1 is made to '2, and so forth.
+Mark '9 is lost.
+ The ":marks" command is useful to find out where '0 to '9 will take you.
+
+
+MOVE INFO FROM ONE VIM TO ANOTHER
+
+You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
+information while still running Vim. This is useful for exchanging register
+contents between two instances of Vim, for example. In the first Vim do: >
+
+ :wviminfo! ~/tmp/viminfo
+
+And in the second Vim do: >
+
+ :rviminfo! ~/tmp/viminfo
+
+Obviously, the "w" stands for "write" and the "r" for "read".
+ The ! character is used by ":wviminfo" to forcefully overwrite an existing
+file. When it is omitted, and the file exists, the information is merged into
+the file.
+ The ! character used for ":rviminfo" means that all the information is
+used, this may overwrite existing information. Without the ! only information
+that wasn't set is used.
+ These commands can also be used to store info and use it again later. You
+could make a directory full of viminfo files, each containing info for a
+different purpose.
+
+==============================================================================
+*21.4* Sessions
+
+Suppose you are editing along, and it is the end of the day. You want to quit
+work and pick up where you left off the next day. You can do this by saving
+your editing session and restoring it the next day.
+ A Vim session contains all the information about what you are editing.
+This includes things such as the file list, window layout, global variables,
+options and other information. (Exactly what is remembered is controlled by
+the 'sessionoptions' option, described below.)
+ The following command creates a session file: >
+
+ :mksession vimbook.vim
+
+Later if you want to restore this session, you can use this command: >
+
+ :source vimbook.vim
+
+If you want to start Vim and restore a specific session, you can use the
+following command: >
+
+ vim -S vimbook.vim
+
+This tells Vim to read a specific file on startup. The 'S' stands for
+session (actually, you can source any Vim script with -S, thus it might as
+well stand for "source").
+
+The windows that were open are restored, with the same position and size as
+before. Mappings and option values are like before.
+ What exactly is restored depends on the 'sessionoptions' option. The
+default value is "blank,buffers,curdir,folds,help,options,winsize".
+
+ blank keep empty windows
+ buffers all buffers, not only the ones in a window
+ curdir the current directory
+ folds folds, also manually created ones
+ help the help window
+ options all options and mappings
+ winsize window sizes
+
+Change this to your liking. To also restore the size of the Vim window, for
+example, use: >
+
+ :set sessionoptions+=resize
+
+
+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
+currently working on the "secret" project and have to switch to the "boring"
+project: >
+
+ :wall
+ :mksession! ~/.vim/secret.vim
+ :source ~/.vim/boring.vim
+
+This first uses ":wall" to write all modified files. Then the current session
+is saved, using ":mksession!". This overwrites the previous session. The
+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
+up the window layout, you can go back to the last saved session: >
+
+ :source ~/.vim/boring.vim
+
+Thus you have complete control over whether you want to continue next time
+where you are now, by saving the current setup in a session, or keep the
+session file as a starting point.
+ Another way of using sessions is to create a window layout that you like to
+use, and save this in a session. Then you can go back to this layout whenever
+you want.
+ For example, this is a nice layout to use:
+
+ +----------------------------------------+
+ | VIM - main help file |
+ | |
+ |Move around: Use the cursor keys, or "h|
+ |help.txt================================|
+ |explorer | |
+ |dir |~ |
+ |dir |~ |
+ |file |~ |
+ |file |~ |
+ |file |~ |
+ |file |~ |
+ |~/=========|[No File]===================|
+ | |
+ +----------------------------------------+
+
+This has a help window at the top, so that you can read this text. The narrow
+vertical window on the left contains a file explorer. This is a Vim plugin
+that lists the contents of a directory. You can select files to edit there.
+More about this in the next chapter.
+ Create this from a just started Vim with: >
+
+ :help
+ CTRL-W w
+ :vertical split ~/
+
+You can resize the windows a bit to your liking. Then save the session with:
+>
+ :mksession ~/.vim/mine.vim
+
+Now you can start Vim with this layout: >
+
+ vim -S ~/.vim/mine.vim
+
+Hint: To open a file you see listed in the explorer window in the empty
+window, move the cursor to the filename and press "O". Double clicking with
+the mouse will also do this.
+
+
+UNIX AND MS-WINDOWS
+
+Some people have to do work on MS-Windows systems one day and on Unix another
+day. If you are one of them, consider adding "slash" and "unix" to
+'sessionoptions'. The session files will then be written in a format that can
+be used on both systems. This is the command to put in your vimrc file: >
+
+ :set sessionoptions+=unix,slash
+
+Vim will use the Unix format then, because the MS-Windows Vim can read and
+write Unix files, but Unix Vim can't read MS-Windows format session files.
+Similarly, MS-Windows Vim understands file names with / to separate names, but
+Unix Vim doesn't understand \.
+
+
+SESSIONS AND VIMINFO
+
+Sessions store many things, but not the position of marks, contents of
+registers and the command line history. You need to use the viminfo feature
+for these things.
+ In most situations you will want to use sessions separately from viminfo.
+This can be used to switch to another session, but keep the command line
+history. And yank text into registers in one session, and paste it back in
+another session.
+ You might prefer to keep the info with the session. You will have to do
+this yourself then. Example: >
+
+ :mksession! ~/.vim/secret.vim
+ :wviminfo! ~/.vim/secret.viminfo
+
+And to restore this again: >
+
+ :source ~/.vim/secret.vim
+ :rviminfo! ~/.vim/secret.viminfo
+
+==============================================================================
+*21.5* Views
+
+A session stores the looks of the whole of Vim. When you want to store the
+properties for one window only, use a view.
+ The use of a view is for when you want to edit a file in a specific way.
+For example, you have line numbers enabled with the 'number' option and
+defined a few folds. Just like with sessions, you can remember this view on
+the file and restore it later. Actually, when you store a session, it stores
+the view of each window.
+ There are two basic ways to use views. The first is to let Vim pick a name
+for the view file. You can restore the view when you later edit the same
+file. To store the view for the current window: >
+
+ :mkview
+
+Vim will decide where to store the view. When you later edit the same file
+you get the view back with this command: >
+
+ :loadview
+
+That's easy, isn't it?
+ Now you want to view the file without the 'number' option on, or with all
+folds open, you can set the options to make the window look that way. Then
+store this view with: >
+
+ :mkview 1
+
+Obviously, you can get this back with: >
+
+ :loadview 1
+
+Now you can switch between the two views on the file by using ":loadview" with
+and without the "1" argument.
+ You can store up to ten views for the same file this way, one unnumbered
+and nine numbered 1 to 9.
+
+
+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.
+ For example, to save the view of the current file: >
+
+ :mkview ~/.vim/main.vim
+
+You can restore it with: >
+
+ :source ~/.vim/main.vim
+
+==============================================================================
+*21.6* Modelines
+
+When editing a specific file, you might set options specifically for that
+file. Typing these commands each time is boring. Using a session or view for
+editing a file doesn't work when sharing the file between several people.
+ The solution for this situation is adding a modeline to the file. This is
+a line of text that tells Vim the values of options, to be used in this file
+only.
+ A typical example is a C program where you make indents by a multiple of 4
+spaces. This requires setting the 'shiftwidth' option to 4. This modeline
+will do that:
+
+ /* vim:set shiftwidth=4: */ ~
+
+Put this line as one of the first or last five lines in the file. When
+editing the file, you will notice that 'shiftwidth' will have been set to
+four. When editing another file, it's set back to the default value of eight.
+ For some files the modeline fits well in the header, thus it can be put at
+the top of the file. For text files and other files where the modeline gets
+in the way of the normal contents, put it at the end of the file.
+
+The 'modelines' option specifies how many lines at the start and end of the
+file are inspected for containing a modeline. To inspect ten lines: >
+
+ :set modelines=10
+
+The 'modeline' option can be used to switch this off. Do this when you are
+working as root or don't trust the files you are editing: >
+
+ :set nomodeline
+
+Use this format for the modeline:
+
+ any-text vim:set {option}={value} ... : any-text ~
+
+The "any-text" indicates that you can put any text before and after the part
+that Vim will use. This allows making it look like a comment, like what was
+done above with /* and */.
+ The " vim:" part is what makes Vim recognize this line. The must be white
+space before "vim", or "vim" must be at the start of the line. Thus using
+something like "gvim:" will not work.
+ The part between the colons is a ":set" command. It works the same way as
+typing the ":set" command, except that you need to insert a backslash before a
+colon (otherwise it would be seen as the end of the modeline).
+
+Another example:
+
+ // vim:set textwidth=72 dir=c\:\tmp: use c:\tmp here ~
+
+There is an extra backslash before the first colon, so that it's included in
+the ":set" command. The text after the second colon is ignored, thus a remark
+can be placed there.
+
+For more details see |modeline|.
+
+==============================================================================
+
+Next chapter: |usr_22.txt| Finding the file to edit
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_22.txt b/runtime/doc/usr_22.txt
new file mode 100644
index 000000000..c355cb31d
--- /dev/null
+++ b/runtime/doc/usr_22.txt
@@ -0,0 +1,364 @@
+*usr_22.txt* For Vim version 7.0aa. Last change: 2003 Mar 17
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Finding the file to edit
+
+
+Files can be found everywhere. So how do you find them? Vim offers various
+ways to browse the directory tree. There are commands to jump to a file that
+is mentioned in another. And Vim remembers which files have been edited
+before.
+
+|22.1| The file explorer
+|22.2| The current directory
+|22.3| Finding a file
+|22.4| The buffer list
+
+ Next chapter: |usr_23.txt| Editing other files
+ Previous chapter: |usr_21.txt| Go away and come back
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*22.1* The file explorer
+
+Vim has a plugin that makes it possible to edit a directory. Try this: >
+
+ :edit .
+
+Through the magic of autocommands and Vim scripts, the window will be filled
+with the contents of the directory. It looks like this:
+
+ " Press ? for keyboard shortcuts ~
+ " Sorted by name (.bak,~,.o,.h,.info,.swp,.obj,.orig,.rej at end of list) ~
+ "= /home/mool/vim/vim6/runtime/doc/ ~
+ ../ ~
+ check/ ~
+ Makefile ~
+ autocmd.txt ~
+ change.txt ~
+ eval.txt~ ~
+ filetype.txt~ ~
+ help.txt.info ~
+
+You can see these items:
+1. A comment about using ? to get help for the functionality of the file
+ explorer.
+2. The second line mentions how the items in the directory are listed. They
+ can be sorted in several ways.
+3. The third line is the name of the current directory.
+4. The "../" directory item. This is the parent directory.
+5. The directory names.
+6. The ordinary file names. As mentioned in the second line, some are not
+ here but "at the end of the list".
+7. The less ordinary file names. You are expected to use these less often,
+ therefore they have been moved to the end.
+
+If you have syntax highlighting enabled, the different parts are highlighted
+to make it easier to spot them.
+
+You can use Normal mode Vim commands to move around in the text. For example,
+move to a file and press <Enter>. Now you are editing that file. To go back
+to the explorer use ":edit ." again. CTRL-O also works.
+ Try using <Enter> while the cursor is on a directory name. The result is
+that the explorer moves into that directory and displays the items found
+there. Pressing <Enter> on the first directory "../" moves you one level
+higher. Pressing "-" does the same thing, without the need to move to the
+"../" item first.
+
+You can press ? to get short help on the things you can do in the explorer.
+This is what you get:
+
+ " <enter> : open file or directory ~
+ " o : open new window for file/directory ~
+ " O : open file in previously visited window ~
+ " p : preview the file ~
+ " i : toggle size/date listing ~
+ " s : select sort field r : reverse sort ~
+ " - : go up one level c : cd to this dir ~
+ " R : rename file D : delete file ~
+ " :help file-explorer for detailed help ~
+
+The first few commands are for selecting a file to display. Depending on what
+command you use, the file appears somewhere:
+
+ <Enter> Uses the current window.
+ o Opens a new window.
+ O Uses the previously visited window.
+ p Uses the preview window, and moves the cursor back
+ into the explorer window. |preview-window|
+
+The following commands are used to display other information:
+
+ i Display the size and date for the file. Using i again
+ will hide the information.
+ s Use the field the cursor is in to sort on. First
+ display the size and date with i. Then Move the
+ cursor to the size of any file and press s. The files
+ will now be sorted on size. Press s wile the cursor
+ is on a date and the items will be sorted on date.
+ r reverse the sorting order (either size or date)
+
+There are a few extra commands:
+
+ c Change the current directory to the displayed
+ directory. You can then type an ":edit" command for
+ one of the files without prepending the path.
+ R Rename the file under the cursor. You will be
+ prompted for the new name.
+ D Delete the file under the cursor. You will get a
+ prompt to confirm this.
+
+==============================================================================
+*22.2* The current directory
+
+Just like the shell, Vim has the concept of a current directory. Suppose you
+are in your home directory and want to edit several files in a directory
+"VeryLongFileName". You could do: >
+
+ :edit VeryLongFileName/file1.txt
+ :edit VeryLongFileName/file2.txt
+ :edit VeryLongFileName/file3.txt
+
+To avoid much of the typing, do this: >
+
+ :cd VeryLongFileName
+ :edit file1.txt
+ :edit file2.txt
+ :edit file3.txt
+
+The ":cd" command changes the current directory. You can see what the current
+directory is with the ":pwd" command: >
+
+ :pwd
+ /home/Bram/VeryLongFileName
+
+Vim remembers the last directory that you used. Use "cd -" to go back to it.
+Example: >
+
+ :pwd
+ /home/Bram/VeryLongFileName
+ :cd /etc
+ :pwd
+ /etc
+ :cd -
+ :pwd
+ /home/Bram/VeryLongFileName
+ :cd -
+ :pwd
+ /etc
+
+
+WINDOW LOCAL DIRECTORY
+
+When you split a window, both windows use the same current directory. When
+you want to edit a number of files somewhere else in the new window, you can
+make it use a different directory, without changing the current directory in
+the other window. This is called a local directory. >
+
+ :pwd
+ /home/Bram/VeryLongFileName
+ :split
+ :lcd /etc
+ :pwd
+ /etc
+ CTRL-W w
+ :pwd
+ /home/Bram/VeryLongFileName
+
+So long as no ":lcd" command has been used, all windows share the same current
+directory. Doing a ":cd" command in one window will also change the current
+directory of the other window.
+ For a window where ":lcd" has been used a different current directory is
+remembered. Using ":cd" or ":lcd" in other windows will not change it.
+ When using a ":cd" command in a window that uses a different current
+directory, it will go back to using the shared directory.
+
+==============================================================================
+*22.3* Finding a file
+
+You are editing a C program that contains this line:
+
+ #include "inits.h" ~
+
+You want to see what is in that "inits.h" file. Move the cursor on the name
+of the file and type: >
+
+ gf
+
+Vim will find the file and edit it.
+ What if the file is not in the current directory? Vim will use the 'path'
+option to find the file. This option is a list of directory names where to
+look for your file.
+ Suppose you have your include files located in "c:/prog/include". This
+command will add it to the 'path' option: >
+
+ :set path+=c:/prog/include
+
+This directory is an absolute path. No matter where you are, it will be the
+same place. What if you have located files in a subdirectory, below where the
+file is? Then you can specify a relative path name. This starts with a dot:
+>
+ :set path+=./proto
+
+This tells Vim to look in the directory "proto", below the directory where the
+file in which you use "gf" is. Thus using "gf" on "inits.h" will make Vim
+look for "proto/inits.h", starting in the directory of the file.
+ Without the "./", thus "proto", Vim would look in the "proto" directory
+below the current directory. And the current directory might not be where the
+file that you are editing is located.
+
+The 'path' option allows specifying the directories where to search for files
+in many more ways. See the help on the 'path' option.
+ The 'isfname' option is used to decide which characters are included in the
+file name, and which ones are not (e.g., the " character in the example
+above).
+
+When you know the file name, but it's not to be found in the file, you can
+type it: >
+
+ :find inits.h
+
+Vim will then use the 'path' option to try and locate the file. This is the
+same as the ":edit" command, except for the use of 'path'.
+
+To open the found file in a new window use CTRL-W f instead of "gf", or use
+":sfind" instead of ":find".
+
+
+A nice way to directly start Vim to edit a file somewhere in the 'path': >
+
+ vim "+find stdio.h"
+
+This finds the file "stdio.h" in your value of 'path'. The quotes are
+necessary to have one argument |-+c|.
+
+==============================================================================
+*22.4* The buffer list
+
+The Vim editor uses the term buffer to describe a file being edited.
+Actually, a buffer is a copy of the file that you edit. When you finish
+changing the buffer, you write the contents of the buffer to the file.
+Buffers not only contain file contents, but also all the marks, settings, and
+other stuff that goes with it.
+
+
+HIDDEN BUFFERS
+
+Suppose you are editing the file one.txt and need to edit the file two.txt.
+You could simply use ":edit two.txt", but since you made changes to one.txt
+that won't work. You also don't want to write one.txt yet. Vim has a
+solution for you: >
+
+ :hide edit two.txt
+
+The buffer "one.txt" disappears from the screen, but Vim still knows that you
+are editing this buffer, so it keeps the modified text. This is called a
+hidden buffer: The buffer contains text, but you can't see it.
+ The ":hide" command argument is another command. It makes that command
+behave like the 'hidden' option was set. You could also set this option
+yourself. The effect is that when any buffer is abandoned, it becomes hidden.
+ Be careful! When you have hidden buffers with changes, don't exit Vim
+without making sure you have saved all the buffers.
+
+
+INACTIVE BUFFERS
+
+ When a buffer has been used once, Vim remembers some information about it.
+When it is not displayed in a window and it is not hidden, it is still in the
+buffer list. This is called an inactive buffer. Overview:
+
+ Active Appears in a window, text loaded.
+ Hidden Not in a window, text loaded.
+ Inactive Not in a window, no text loaded.
+
+The inactive buffers are remembered, because Vim keeps information about them,
+like marks. And remembering the file name is useful too, so that you can see
+which files you have edited. And edit them again.
+
+
+LISTING BUFFERS
+
+View the buffer list with this command: >
+
+ :buffers
+
+A command which does the same, is not so obvious to list buffers, but is much
+shorter to type: >
+
+ :ls
+
+The output could look like this:
+
+ 1 #h "help.txt" line 62 ~
+ 2 %l+ "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.
+ After the buffer number come the flags. Then the name of the file
+and the line number where the cursor was the last time.
+ The flags that can appear are these (from left to right):
+
+ u Buffer is unlisted |unlisted-buffer|.
+ % Current buffer.
+ # Alternate buffer.
+ l Buffer is loaded and displayed.
+ h Buffer is loaded but hidden.
+ = Buffer is read-only.
+ - Buffer is not modifiable, the 'modifiable' option is off.
+ + Buffer has been modified.
+
+
+EDITING A BUFFER
+
+You can edit a buffer by its number. That avoids having to type the file
+name: >
+
+ :buffer 2
+
+But the only way to know the number is by looking in the buffer list. You can
+use the name, or part of it, instead: >
+
+ :buffer help
+
+Vim will find a best match for the name you type. If there is only one
+buffer that matches the name, it will be used. In this case "help.txt".
+ To open a buffer in a new window: >
+
+ :sbuffer 3
+
+This works with a name as well.
+
+
+USING THE BUFFER LIST
+
+You can move around in the buffer list with these commands:
+
+ :bnext go to next buffer
+ :bprevious go to previous buffer
+ :bfirst go to the first buffer
+ :blast go to the last buffer
+
+To remove a buffer from the list, use this command: >
+
+ :bdelete 3
+
+Again, this also works with a name.
+ If you delete a buffer that was active (visible in a window), that window
+will be closed. If you delete the current buffer, the current window will be
+closed. If it was the last window, Vim will find another buffer to edit. You
+can't be editing nothing!
+
+ Note:
+ Even after removing the buffer with ":bdelete" Vim still remembers it.
+ It's actually made "unlisted", it no longer appears in the list from
+ ":buffers". The ":buffers!" command will list unlisted buffers (yes,
+ Vim can do the impossible). To really make Vim forget about a buffer,
+ use ":bwipe". Also see the 'buflisted' option.
+
+==============================================================================
+
+Next chapter: |usr_23.txt| Editing other files
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_23.txt b/runtime/doc/usr_23.txt
new file mode 100644
index 000000000..21e998060
--- /dev/null
+++ b/runtime/doc/usr_23.txt
@@ -0,0 +1,343 @@
+*usr_23.txt* For Vim version 7.0aa. Last change: 2001 Sep 03
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Editing other files
+
+
+This chapter is about editing files that are not ordinary files. With Vim you
+can edit files that are compressed or encrypted. Some files need to be
+accessed over the internet. With some restrictions, binary files can be
+edited as well.
+
+|23.1| DOS, Mac and Unix files
+|23.2| Files on the internet
+|23.3| Encryption
+|23.4| Binary files
+|23.5| Compressed files
+
+ Next chapter: |usr_24.txt| Inserting quickly
+ Previous chapter: |usr_22.txt| Finding the file to edit
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*23.1* DOS, Mac and Unix files
+
+Back in the early days, the old Teletype machines used two characters to
+start a new line. One to move the carriage back to the first position
+(carriage return, <CR>), another to move the paper up (line feed, <LF>).
+ When computers came out, storage was expensive. Some people decided that
+they did not need two characters for end-of-line. The UNIX people decided
+they could use <Line Feed> only for end-of-line. The Apple people
+standardized on <CR>. The MS-DOS (and Microsoft Windows) folks decided to
+keep the old <CR><LF>.
+ This means that if you try to move a file from one system to another, you
+have line-break problems. The Vim editor automatically recognizes the
+different file formats and handles things properly behind your back.
+ The option 'fileformats' contains the various formats that will be tried
+when a new file is edited. The following command, for example, tells Vim to
+try UNIX format first and MS-DOS format second: >
+
+ :set fileformats=unix,dos
+
+You will notice the format in the message you get when editing a file. You
+don't see anything if you edit a native file format. Thus editing a Unix file
+on Unix won't result in a remark. But when you edit a dos file, Vim will
+notify you of this:
+
+ "/tmp/test" [dos] 3L, 71C ~
+
+For a Mac file you would see "[mac]".
+ The detected file format is stored in the 'fileformat' option. To see
+which format you have, execute the following command: >
+
+ :set fileformat?
+
+The three names that Vim uses are:
+
+ unix <LF>
+ dos <CR><LF>
+ mac <CR>
+
+
+USING THE MAC FORMAT
+
+On Unix, <LF> is used to break a line. It's not unusual to have a <CR>
+character halfway a line. Incidentally, this happens quite often in Vi (and
+Vim) scripts.
+ On the Macintosh, where <CR> is the line break character, it's possible to
+have a <LF> character halfway a line.
+ The result is that it's not possible to be 100% sure whether a file
+containing both <CR> and <LF> characters is a Mac or a Unix file. Therefore,
+Vim assumes that on Unix you probably won't edit a Mac file, and doesn't check
+for this type of file. To check for this format anyway, add "mac" to
+'fileformats': >
+
+ :set fileformats+=mac
+
+Then Vim will take a guess at the file format. Watch out for situations where
+Vim guesses wrong.
+
+
+OVERRULING THE FORMAT
+
+If you use the good old Vi and try to edit an MS-DOS format file, you will
+find that each line ends with a ^M character. (^M is <CR>). The automatic
+detection avoids this. Suppose you do want to edit the file that way? Then
+you need to overrule the format: >
+
+ :edit ++ff=unix file.txt
+
+The "++" string is an item that tells Vim that an option name follows, which
+overrules the default for this single command. "++ff" is used for
+'fileformat'. You could also use "++ff=mac" or "++ff=dos".
+ This doesn't work for any option, only "++ff" and "++enc" are currently
+implemented. The full names "++fileformat" and "++encoding" also work.
+
+
+CONVERSION
+
+You can use the 'fileformat' option to convert from one file format to
+another. Suppose, for example, that you have an MS-DOS file named README.TXT
+that you want to convert to UNIX format. Start by editing the MS-DOS format
+file: >
+ vim README.TXT
+
+Vim will recognize this as a dos format file. Now change the file format to
+UNIX: >
+
+ :set fileformat=unix
+ :write
+
+The file is written in Unix format.
+
+==============================================================================
+*23.2* Files on the internet
+
+Someone sends you an e-mail message, which refers to a file by its URL. For
+example:
+
+ You can find the information here: ~
+ ftp://ftp.vim.org/pub/vim/README ~
+
+You could start a program to download the file, save it on your local disk and
+then start Vim to edit it.
+ There is a much simpler way. Move the cursor to any character of the URL.
+Then use this command: >
+
+ gf
+
+With a bit of luck, Vim will figure out which program to use for downloading
+the file, download it and edit the copy. To open the file in a new window use
+CTRL-W f.
+ If something goes wrong you will get an error message. It's possible that
+the URL is wrong, you don't have permission to read it, the network connection
+is down, etc. Unfortunately, it's hard to tell the cause of the error. You
+might want to try the manual way of downloading the file.
+
+Accessing files over the internet works with the netrw plugin. Currently URLs
+with these formats are recognized:
+
+ ftp:// uses ftp
+ rcp:// uses rcp
+ scp:// uses scp
+ http:// uses wget (reading only)
+
+Vim doesn't do the communication itself, it relies on the mentioned programs
+to be available on your computer. On most Unix systems "ftp" and "rcp" will
+be present. "scp" and "wget" might need to be installed.
+
+Vim detects these URLs for each command that starts editing a new file, also
+with ":edit" and ":split", for example. Write commands also work, except for
+http://.
+
+For more information, also about passwords, see |netrw|.
+
+==============================================================================
+*23.3* Encryption
+
+Some information you prefer to keep to yourself. For example, when writing
+a test on a computer that students also use. You don't want clever students
+to figure out a way to read the questions before the exam starts. Vim can
+encrypt the file for you, which gives you some protection.
+ To start editing a new file with encryption, use the "-x" argument to start
+Vim. Example: >
+
+ vim -x exam.txt
+
+Vim prompts you for a key used for encrypting and decrypting the file:
+
+ Enter encryption key: ~
+
+Carefully type the secret key now. You cannot see the characters you type,
+they will be replaced by stars. To avoid the situation that a typing mistake
+will cause trouble, Vim asks you to enter the key again:
+
+ Enter same key again: ~
+
+You can now edit this file normally and put in all your secrets. When you
+finish editing the file and tell Vim to exit, the file is encrypted and
+written.
+ When you edit the file with Vim, it will ask you to enter the same key
+again. You don't need to use the "-x" argument. You can also use the normal
+":edit" command. Vim adds a magic string to the file by which it recognizes
+that the file was encrypted.
+ If you try to view this file using another program, all you get is garbage.
+Also, if you edit the file with Vim and enter the wrong key, you get garbage.
+Vim does not have a mechanism to check if the key is the right one (this makes
+it much harder to break the key).
+
+
+SWITCHING ENCRYPTION ON AND OFF
+
+To disable the encryption of a file, set the 'key' option to an empty string:
+>
+ :set key=
+
+The next time you write the file this will be done without encryption.
+ Setting the 'key' option to enable encryption is not a good idea, because
+the password appears in the clear. Anyone shoulder-surfing can read your
+password.
+ To avoid this problem, the ":X" command was created. It asks you for an
+encryption key, just like the "-x" argument did: >
+
+ :X
+ Enter encryption key: ******
+ Enter same key again: ******
+
+
+LIMITS ON ENCRYPTION
+
+The encryption algorithm used by Vim is weak. It is good enough to keep out
+the casual prowler, but not good enough to keep out a cryptology expert with
+lots of time on his hands. Also you should be aware that the swap file is not
+encrypted; so while you are editing, people with superuser privileges can read
+the unencrypted text from this file.
+ One way to avoid letting people read your swap file is to avoid using one.
+If the -n argument is supplied on the command line, no swap file is used
+(instead, Vim puts everything in memory). For example, to edit the encrypted
+file "file.txt" without a swap file use the following command: >
+
+ vim -x -n file.txt
+
+When already editing a file, the swapfile can be disabled with: >
+
+ :setlocal noswapfile
+
+Since there is no swapfile, recovery will be impossible. Save the file a bit
+more often to avoid the risk of losing your changes.
+
+While the file is in memory, it is in plain text. Anyone with privilege can
+look in the editor's memory and discover the contents of the file.
+ If you use a viminfo file, be aware that the contents of text registers are
+written out in the clear as well.
+ If you really want to secure the contents of a file, edit it only on a
+portable computer not connected to a network, use good encryption tools, and
+keep the computer locked up in a big safe when not in use.
+
+==============================================================================
+*23.4* Binary files
+
+You can edit binary files with Vim. Vim wasn't really made for this, thus
+there are a few restrictions. But you can read a file, change a character and
+write it back, with the result that only that one character was changed and
+the file is identical otherwise.
+ To make sure that Vim does not use its clever tricks in the wrong way, add
+the "-b" argument when starting Vim: >
+
+ vim -b datafile
+
+This sets the 'binary' option. The effect of this is that unexpected side
+effects are turned off. For example, 'textwidth' is set to zero, to avoid
+automatic formatting of lines. And files are always read in Unix file format.
+
+Binary mode can be used to change a message in a program. Be careful not to
+insert or delete any characters, it would stop the program from working. Use
+"R" to enter replace mode.
+
+Many characters in the file will be unprintable. To see them in Hex format: >
+
+ :set display=uhex
+
+Otherwise, the "ga" command can be used to see the value of the character
+under the cursor. The output, when the cursor is on an <Esc>, looks like
+this:
+
+ <^[> 27, Hex 1b, Octal 033 ~
+
+There might not be many line breaks in the file. To get some overview switch
+the 'wrap' option off: >
+
+ :set nowrap
+
+
+BYTE POSITION
+
+To see on which byte you are in the file use this command: >
+
+ g CTRL-G
+
+The output is verbose:
+
+ Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 ~
+
+The last two numbers are the byte position in the file and the total number of
+bytes. This takes into account how 'fileformat' changes the number of bytes
+that a line break uses.
+ To move to a specific byte in the file, use the "go" command. For
+example, to move to byte 2345: >
+
+ 2345go
+
+
+USING XXD
+
+A real binary editor shows the text in two ways: as it is and in hex format.
+You can do this in Vim by first converting the file with the "xxd" program.
+This comes with Vim.
+ First edit the file in binary mode: >
+
+ vim -b datafile
+
+Now convert the file to a hex dump with xxd: >
+
+ :%!xxd
+
+The text will look like this:
+
+ 0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI ~
+ 0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0 ~
+ 0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59. ~
+
+You can now view and edit the text as you like. Vim treats the information as
+ordinary text. Changing the hex does not cause the printable character to be
+changed, or the other way around.
+ Finally convert it back with:
+>
+ :%!xxd -r
+
+Only changes in the hex part are used. Changes in the printable text part on
+the right are ignored.
+
+See the manual page of xxd for more information.
+
+==============================================================================
+*23.5* Compressed files
+
+This is easy: You can edit a compressed file just like any other file. The
+"gzip" plugin takes care of decompressing the file when you edit it. And
+compressing it again when you write it.
+ These compression methods are currently supported:
+
+ .Z compress
+ .gz gzip
+ .bz2 bzip2
+
+Vim uses the mentioned programs to do the actual compression and
+decompression. You might need to install the programs first.
+
+==============================================================================
+
+Next chapter: |usr_24.txt| Inserting quickly
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_24.txt b/runtime/doc/usr_24.txt
new file mode 100644
index 000000000..76274d1f5
--- /dev/null
+++ b/runtime/doc/usr_24.txt
@@ -0,0 +1,573 @@
+*usr_24.txt* For Vim version 7.0aa. Last change: 2003 Aug 18
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Inserting quickly
+
+
+When entering text, Vim offers various ways to reduce the number of keystrokes
+and avoid typing mistakes. Use Insert mode completion to repeat previously
+typed words. Abbreviate long words to short ones. Type characters that
+aren't on your keyboard.
+
+|24.1| Making corrections
+|24.2| Showing matches
+|24.3| Completion
+|24.4| Repeating an insert
+|24.5| Copying from another line
+|24.6| Inserting a register
+|24.7| Abbreviations
+|24.8| Entering special characters
+|24.9| Digraphs
+|24.10| Normal mode commands
+
+ Next chapter: |usr_25.txt| Editing formatted text
+ Previous chapter: |usr_23.txt| Editing other files
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*24.1* Making corrections
+
+The <BS> key was already mentioned. It deletes the character just before the
+cursor. The <Del> key does the same for the character under (after) the
+cursor.
+ When you typed a whole word wrong, use CTRL-W:
+
+ The horse had fallen to the sky ~
+ CTRL-W
+ The horse had fallen to the ~
+
+If you really messed up a line and want to start over, use CTRL-U to delete
+it. This keeps the text after the cursor and the indent. Only the text from
+the first non-blank to the cursor is deleted. With the cursor on the "f" of
+"fallen" in the next line pressing CTRL-U does this:
+
+ The horse had fallen to the ~
+ CTRL-U
+ fallen to the ~
+
+When you spot a mistake a few words back, you need to move the cursor there to
+correct it. For example, you typed this:
+
+ The horse had follen to the ground ~
+
+You need to change "follen" to "fallen". With the cursor at the end, you
+would type this to correct it: >
+
+ <Esc>4blraA
+
+< get out of Insert mode <Esc>
+ four words back 4b
+ move on top of the "o" l
+ replace with "a" ra
+ restart Insert mode A
+
+Another way to do this: >
+
+ <C-Left><C-Left><C-Left><C-Left><Right><Del>a<End>
+
+< four words back <C-Left><C-Left><C-Left><C-Left>
+ move on top of the "o" <Right>
+ delete the "o" <Del>
+ insert an "a" a
+ go to end of the line <End>
+
+This uses special keys to move around, while remaining in Insert mode. This
+resembles what you would do in a modeless editor. It's easier to remember,
+but takes more time (you have to move your hand from the letters to the cursor
+keys, and the <End> key is hard to press without looking at the keyboard).
+ These special keys are most useful when writing a mapping that doesn't
+leave Insert mode. The extra typing doesn't matter then.
+ An overview of the keys you can use in Insert mode:
+
+ <C-Home> to start of the file
+ <PageUp> a whole screenful up
+ <Home> to start of line
+ <S-Left> one word left
+ <C-Left> one word left
+ <S-Right> one word right
+ <C-Right> one word right
+ <End> to end of the line
+ <PageDown> a whole screenful down
+ <C-End> to end of the file
+
+There are a few more, see |ins-special-special|.
+
+==============================================================================
+*24.2* Showing matches
+
+When you type a ) it would be nice to see with which ( it matches. To make
+Vim do that use this command: >
+
+ :set showmatch
+
+When you now type a text like "(example)", as soon as you type the ) Vim will
+briefly move the cursor to the matching (, keep it there for half a second,
+and move back to where you were typing.
+ In case there is not matching (, Vim will beep. Then you know that you
+might have forgotten the ( somewhere, or typed a ) too many.
+ The match will also be shown for [] and {} pairs. You don't have to wait
+with typing the next character, as soon as Vim sees it the cursor will move
+back and inserting continues as before.
+ You can change the time Vim waits with the 'matchtime' option. For
+example, to make Vim wait one and a half second: >
+
+ :set matchtime=15
+
+The time is specified in tenths of a second.
+
+==============================================================================
+*24.3* Completion
+
+Vim can automatically complete words on insertion. You type the first part of
+a word, press CTRL-P, and Vim guesses the rest.
+ Suppose, for example, that you are creating a C program and want to type in
+the following:
+
+ total = ch_array[0] + ch_array[1] + ch_array[2]; ~
+
+You start by entering the following:
+
+ total = ch_array[0] + ch_ ~
+
+At this point, you tell Vim to complete the word using the command CTRL-P.
+Vim searches for a word that starts with what's in front of the cursor. In
+this case, it is "ch_", which matches with the word ch_array. So typing
+CTRL-P gives you the following:
+
+ total = ch_array[0] + ch_array ~
+
+After a little more typing, you get this (ending in a space):
+
+ total = ch_array[0] + ch_array[1] + ~
+
+If you now type CTRL-P Vim will search again for a word that completes the
+word before the cursor. Since there is nothing in front of the cursor, it
+finds the first word backwards, which is "ch_array". Typing CTRL-P again
+gives you the next word that matches, in this case "total". A third CTRL-P
+searches further back. If there is nothing else, it causes the editor to run
+out of words, so it returns to the original text, which is nothing. A fourth
+CTRL-P causes the editor to start over again with "ch_array".
+
+To search forward, use CTRL-N. Since the search wraps around the end of the
+file, CTRL-N and CTRL-P will find the same matches, but in a different
+sequence. Hint: CTRL-N is Next-match and CTRL-P is Previous-match.
+
+The Vim editor goes through a lot of effort to find words to complete. By
+default, it searches the following places:
+
+ 1. Current file
+ 2. Files in other windows
+ 3. Other loaded files (hidden buffers)
+ 4. Files which are not loaded (inactive buffers)
+ 5. Tag files
+ 6. All files #included by the current file
+
+
+OPTIONS
+
+You can customize the search order with the 'complete' option.
+
+The 'ignorecase' option is used. When it is set, case differences are ignored
+when searching for matches.
+
+A special option for completion is 'infercase'. This is useful to find
+matches while ignoring case ('ignorecase' must be set) but still using the
+case of the word typed so far. Thus if you type "For" and Vim finds a match
+"fortunately", it will result in "Fortunately".
+
+
+COMPLETING SPECIFIC ITEMS
+
+If you know what you are looking for, you can use these commands to complete
+with a certain type of item:
+
+ CTRL-X CTRL-F file names
+ CTRL-X CTRL-L whole lines
+ CTRL-X CTRL-D macro definitions (also in included files)
+ CTRL-X CTRL-I current and included files
+ CTRL-X CTRL-K words from a dictionary
+ CTRL-X CTRL-T words from a thesaurus
+ CTRL-X CTRL-] tags
+ CTRL-X CTRL-V Vim command line
+
+After each of them CTRL-N can be used to find the next match, CTRL-P to find
+the previous match.
+ More information for each of these commands here: |ins-completion|.
+
+
+COMPLETING FILE NAMES
+
+Let's take CTRL-X CTRL-F as an example. This will find file names. It scans
+the current directory for files and displays each one that matches the word in
+front of the cursor.
+ Suppose, for example, that you have the following files in the current
+directory:
+
+ main.c sub_count.c sub_done.c sub_exit.c
+
+Now enter Insert mode and start typing:
+
+ The exit code is in the file sub ~
+
+At this point, you enter the command CTRL-X CTRL-F. Vim now completes the
+current word "sub" by looking at the files in the current directory. The
+first match is sub_count.c. This is not the one you want, so you match the
+next file by typing CTRL-N. This match is sub_done.c. Typing CTRL-N again
+takes you to sub_exit.c. The results:
+
+ The exit code is in the file sub_exit.c ~
+
+If the file name starts with / (Unix) or C:\ (MS-Windows) you can find all
+files in the file system. For example, type "/u" and CTRL-X CTRL-F. This
+will match "/usr" (this is on Unix):
+
+ the file is found in /usr/ ~
+
+If you now press CTRL-N you go back to "/u". Instead, to accept the "/usr/"
+and go one directory level deeper, use CTRL-X CTRL-F again:
+
+ the file is found in /usr/X11R6/ ~
+
+The results depend on what is found in your file system, of course. The
+matches are sorted alphabetically.
+
+==============================================================================
+*24.4* Repeating an insert
+
+If you press CTRL-A, the editor inserts the text you typed the last time you
+were in Insert mode.
+ Assume, for example, that you have a file that begins with the following:
+
+ "file.h" ~
+ /* Main program begins */ ~
+
+You edit this file by inserting "#include " at the beginning of the first
+line:
+
+ #include "file.h" ~
+ /* Main program begins */ ~
+
+You go down to the beginning of the next line using the commands "j^". You
+now start to insert a new "#include" line. So you type: >
+
+ i CTRL-A
+
+The result is as follows:
+
+ #include "file.h" ~
+ #include /* Main program begins */ ~
+
+The "#include " was inserted because CTRL-A inserts the text of the previous
+insert. Now you type "main.h"<Enter> to finish the line:
+
+
+ #include "file.h" ~
+ #include "main.h" ~
+ /* Main program begins */ ~
+
+The CTRL-@ command does a CTRL-A and then exits Insert mode. That's a quick
+way of doing exactly the same insertion again.
+
+==============================================================================
+*24.5* Copying from another line
+
+The CTRL-Y command inserts the character above the cursor. This is useful
+when you are duplicating a previous line. For example, you have this line of
+C code:
+
+ b_array[i]->s_next = a_array[i]->s_next; ~
+
+Now you need to type the same line, but with "s_prev" instead of "s_next".
+Start the new line, and press CTRL-Y 14 times, until you are at the "n" of
+"next":
+
+ b_array[i]->s_next = a_array[i]->s_next; ~
+ b_array[i]->s_ ~
+
+Now you type "prev":
+
+ b_array[i]->s_next = a_array[i]->s_next; ~
+ b_array[i]->s_prev ~
+
+Continue pressing CTRL-Y until the following "next":
+
+ b_array[i]->s_next = a_array[i]->s_next; ~
+ b_array[i]->s_prev = a_array[i]->s_ ~
+
+Now type "prev;" to finish it off.
+
+The CTRL-E command acts like CTRL-Y except it inserts the character below the
+cursor.
+
+==============================================================================
+*24.6* Inserting a register
+
+The command CTRL-R {register} inserts the contents of the register. This is
+useful to avoid having to type a long word. For example, you need to type
+this:
+
+ r = VeryLongFunction(a) + VeryLongFunction(b) + VeryLongFunction(c) ~
+
+The function name is defined in a different file. Edit that file and move the
+cursor on top of the function name there, and yank it into register v: >
+
+ "vyiw
+
+"v is the register specification, "yiw" is yank-inner-word. Now edit the file
+where the new line is to be inserted, and type the first letters:
+
+ r = ~
+
+Now use CTRL-R v to insert the function name:
+
+ r = VeryLongFunction ~
+
+You continue to type the characters in between the function name, and use
+CTRL-R v two times more.
+ You could have done the same with completion. Using a register is useful
+when there are many words that start with the same characters.
+
+If the register contains characters such as <BS> or other special characters,
+they are interpreted as if they had been typed from the keyboard. If you do
+not want this to happen (you really want the <BS> to be inserted in the text),
+use the command CTRL-R CTRL-R {register}.
+
+==============================================================================
+*24.7* Abbreviations
+
+An abbreviation is a short word that takes the place of a long one. For
+example, "ad" stands for "advertisement". Vim enables you to type an
+abbreviation and then will automatically expand it for you.
+ To tell Vim to expand "ad" into "advertisement" every time you insert it,
+use the following command: >
+
+ :iabbrev ad advertisement
+
+Now, when you type "ad", the whole word "advertisement" will be inserted into
+the text. This is triggered by typing a character that can't be part of a
+word, for example a space:
+
+ What Is Entered What You See
+ I saw the a I saw the a ~
+ I saw the ad I saw the ad ~
+ I saw the ad<Space> I saw the advertisement<Space> ~
+
+The expansion doesn't happen when typing just "ad". That allows you to type a
+word like "add", which will not get expanded. Only whole words are checked
+for abbreviations.
+
+
+ABBREVIATING SEVERAL WORDS
+
+It is possible to define an abbreviation that results in multiple words. For
+example, to define "JB" as "Jack Benny", use the following command: >
+
+ :iabbrev JB Jack Benny
+
+As a programmer, I use two rather unusual abbreviations: >
+
+ :iabbrev #b /****************************************
+ :iabbrev #e <Space>****************************************/
+
+These are used for creating boxed comments. The comment starts with #b, which
+draws the top line. I then type the comment text and use #e to draw the
+bottom line.
+ Notice that the #e abbreviation begins with a space. In other words, the
+first two characters are space-star. Usually Vim ignores spaces between the
+abbreviation and the expansion. To avoid that problem, I spell space as seven
+characters: <, S, p, a, c, e, >.
+
+ Note:
+ ":iabbrev" is a long word to type. ":iab" works just as well.
+ That's abbreviating the abbreviate command!
+
+
+FIXING TYPING MISTAKES
+
+It's very common to make the same typing mistake every time. For example,
+typing "teh" instead of "the". You can fix this with an abbreviation: >
+
+ :abbreviate teh the
+
+You can add a whole list of these. Add one each time you discover a common
+mistake.
+
+
+LISTING ABBREVIATIONS
+
+The ":abbreviate" command lists the abbreviations:
+
+ :abbreviate
+ i #e ****************************************/
+ i #b /****************************************
+ i JB Jack Benny
+ i ad advertisement
+ ! teh the
+
+The "i" in the first column indicates Insert mode. These abbreviations are
+only active in Insert mode. Other possible characters are:
+
+ c Command-line mode :cabbrev
+ ! both Insert and Command-line mode :abbreviate
+
+Since abbreviations are not often useful in Command-line mode, you will mostly
+use the ":iabbrev" command. That avoids, for example, that "ad" gets expanded
+when typing a command like: >
+
+ :edit ad
+
+
+DELETING ABBREVIATIONS
+
+To get rid of an abbreviation, use the ":unabbreviate" command. Suppose you
+have the following abbreviation: >
+
+ :abbreviate @f fresh
+
+You can remove it with this command: >
+
+ :unabbreviate @f
+
+While you type this, you will notice that @f is expanded to "fresh". Don't
+worry about this, Vim understands it anyway (except when you have an
+abbreviation for "fresh", but that's very unlikely).
+ To remove all the abbreviations: >
+
+ :abclear
+
+":unabbreviate" and ":abclear" also come in the variants for Insert mode
+(":iunabbreviate and ":iabclear") and Command-line mode (":cunabbreviate" and
+":cabclear").
+
+
+REMAPPING ABBREVIATIONS
+
+There is one thing to watch out for when defining an abbreviation: The
+resulting string should not be mapped. For example: >
+
+ :abbreviate @a adder
+ :imap dd disk-door
+
+When you now type @a, you will get "adisk-doorer". That's not what you want.
+To avoid this, use the ":noreabbrev" command. It does the same as
+":abbreviate", but avoids that the resulting string is used for mappings: >
+
+ :noreabbrev @a adder
+
+Fortunately, it's unlikely that the result of an abbreviation is mapped.
+
+==============================================================================
+*24.8* Entering special characters
+
+The CTRL-V command is used to insert the next character literally. In other
+words, any special meaning the character has, it will be ignored. For
+example: >
+
+ CTRL-V <Esc>
+
+Inserts an escape character. Thus you don't leave Insert mode. (Don't type
+the space after CTRL-V, it's only to make this easier to read).
+
+ Note:
+ On MS-Windows CTRL-V is used to paste text. Use CTRL-Q instead of
+ CTRL-V. On Unix, on the other hand, CTRL-Q does not work on some
+ terminals, because it has a special meaning.
+
+You can also use the command CTRL-V {digits} to insert a character with the
+decimal number {digits}. For example, the character number 127 is the <Del>
+character (but not necessarily the <Del> key!). To insert <Del> type: >
+
+ CTRL-V 127
+
+You can enter characters up to 255 this way. When you type fewer than two
+digits, a non-digit will terminate the command. To avoid the need of typing a
+non-digit, prepend one or two zeros to make three digits.
+ All the next commands insert a <Tab> and then a dot:
+
+ CTRL-V 9.
+ CTRL-V 09.
+ CTRL-V 009.
+
+To enter a character in hexadecimal, use an "x" after the CTRL-V: >
+
+ CTRL-V x7f
+
+This also goes up to character 255 (CTRL-V xff). You can use "o" to type a
+character as an octal number and two more methods allow you to type up to
+a 16 bit and a 32 bit number (e.g., for a Unicode character): >
+
+ CTRL-V o123
+ CTRL-V u1234
+ CTRL-V U12345678
+
+==============================================================================
+*24.9* Digraphs
+
+Some characters are not on the keyboard. For example, the copyright character
+(©). To type these characters in Vim, you use digraphs, where two characters
+represent one. To enter a ©, for example, you press three keys: >
+
+ CTRL-K Co
+
+To find out what digraphs are available, use the following command: >
+
+ :digraphs
+
+Vim will display the digraph table. Here are three lines of it:
+
+ AC ~_ 159 NS | 160 !I ¡ 161 Ct ¢ 162 Pd £ 163 Cu ¤ 164 Ye ¥ 165 ~
+ BB ¦ 166 SE § 167 ': ¨ 168 Co © 169 -a ª 170 << « 171 NO ¬ 172 ~
+ -- ­ 173 Rg ® 174 'm ¯ 175 DG ° 176 +- ± 177 2S ² 178 3S ³ 179 ~
+
+This shows, for example, that the digraph you get by typing CTRL-K Pd is the
+character (£). This is character number 163 (decimal).
+ Pd is short for Pound. Most digraphs are selected to give you a hint about
+the character they will produce. If you look through the list you will
+understand the logic.
+ You can exchange the first and second character, if there is no digraph for
+that combination. Thus CTRL-K dP also works. Since there is no digraph for
+"dP" Vim will also search for a "Pd" digraph.
+
+ Note:
+ The digraphs depend on the character set that Vim assumes you are
+ using. On MS-DOS they are different from MS-Windows. Always use
+ ":digraphs" to find out which digraphs are currently available.
+
+You can define your own digraphs. Example: >
+
+ :digraph a" ä
+
+This defines that CTRL-K a" inserts an ä character. You can also specify the
+character with a decimal number. This defines the same digraph: >
+
+ :digraph a" 228
+
+More information about digraphs here: |digraphs|
+ Another way to insert special characters is with a keymap. More about that
+here: |45.5|
+
+==============================================================================
+*24.10* Normal mode commands
+
+Insert mode offers a limited number of commands. In Normal mode you have many
+more. When you want to use one, you usually leave Insert mode with <Esc>,
+execute the Normal mode command, and re-enter Insert mode with "i" or "a".
+ There is a quicker way. With CTRL-O {command} you can execute any Normal
+mode command from Insert mode. For example, to delete from the cursor to the
+end of the line: >
+
+ CTRL-O D
+
+You can execute only one Normal mode command this way. But you can specify a
+register or a count. A more complicated example: >
+
+ CTRL-O "g3dw
+
+This deletes up to the third word into register g.
+
+==============================================================================
+
+Next chapter: |usr_25.txt| Editing formatted text
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_25.txt b/runtime/doc/usr_25.txt
new file mode 100644
index 000000000..cce72faaf
--- /dev/null
+++ b/runtime/doc/usr_25.txt
@@ -0,0 +1,578 @@
+*usr_25.txt* For Vim version 7.0aa. Last change: 2003 Jun 21
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Editing formatted text
+
+
+Text hardly ever comes in one sentence per line. This chapter is about
+breaking sentences to make them fit on a page and other formatting.
+Vim also has useful features for editing single-line paragraphs and tables.
+
+|25.1| Breaking lines
+|25.2| Aligning text
+|25.3| Indents and tabs
+|25.4| Dealing with long lines
+|25.5| Editing tables
+
+ Next chapter: |usr_26.txt| Repeating
+ Previous chapter: |usr_24.txt| Inserting quickly
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*25.1* Breaking lines
+
+Vim has a number of functions that make dealing with text easier. By default,
+the editor does not perform automatic line breaks. In other words, you have
+to press <Enter> yourself. This is useful when you are writing programs where
+you want to decide where the line ends. It is not so good when you are
+creating documentation and want the text to be at most 70 character wide.
+ If you set the 'textwidth' option, Vim automatically inserts line breaks.
+Suppose, for example, that you want a very narrow column of only 30
+characters. You need to execute the following command: >
+
+ :set textwidth=30
+
+Now you start typing (ruler added):
+
+ 1 2 3
+ 12345678901234567890123456789012345
+ I taught programming for a whi ~
+
+If you type "l" next, this makes the line longer than the 30-character limit.
+When Vim sees this, it inserts a line break and you get the following:
+
+ 1 2 3
+ 12345678901234567890123456789012345
+ I taught programming for a ~
+ whil ~
+
+Continuing on, you can type in the rest of the paragraph:
+
+ 1 2 3
+ 12345678901234567890123456789012345
+ I taught programming for a ~
+ while. One time, I was stopped ~
+ by the Fort Worth police, ~
+ because my homework was too ~
+ hard. True story. ~
+
+You do not have to type newlines; Vim puts them in automatically.
+
+ Note:
+ The 'wrap' option makes Vim display lines with a line break, but this
+ doesn't insert a line break in the file.
+
+
+REFORMATTING
+
+The Vim editor is not a word processor. In a word processor, if you delete
+something at the beginning of the paragraph, the line breaks are reworked. In
+Vim they are not; so if you delete the word "programming" from the first line,
+all you get is a short line:
+
+ 1 2 3
+ 12345678901234567890123456789012345
+ I taught for a ~
+ while. One time, I was stopped ~
+ by the Fort Worth police, ~
+ because my homework was too ~
+ hard. True story. ~
+
+This does not look good. To get the paragraph into shape you use the "gq"
+operator.
+ Let's first use this with a Visual selection. Starting from the first
+line, type: >
+
+ v4jgq
+
+"v" to start Visual mode, "4j' to move to the end of the paragraph and then
+the "gq" operator. The result is:
+
+ 1 2 3
+ 12345678901234567890123456789012345
+ I taught for a while. One ~
+ time, I was stopped by the ~
+ Fort Worth police, because my ~
+ homework was too hard. True ~
+ story. ~
+
+Note: there is a way to do automatic formatting for specific types of text
+layouts, see |auto-format|.
+
+Since "gq" is an operator, you can use one of the three ways to select the
+text it works on: With Visual mode, with a movement and with a text object.
+ The example above could also be done with "gq4j". That's less typing, but
+you have to know the line count. A more useful motion command is "}". This
+moves to the end of a paragraph. Thus "gq}" formats from the cursor to the
+end of the current paragraph.
+ A very useful text object to use with "gq" is the paragraph. Try this: >
+
+ gqap
+
+"ap" stands for "a-paragraph". This formats the text of one paragraph
+(separated by empty lines). Also the part before the cursor.
+ If you have your paragraphs separated by empty lines, you can format the
+whole file by typing this: >
+
+ gggqG
+
+"gg" to move to the first line, "gqG" to format until the last line.
+ Warning: If your paragraphs are not properly separated, they will be joined
+together. A common mistake is to have a line with a space or Tab. That's a
+blank line, but not an empty line.
+
+Vim is able format more than just plain text. See |fo-table| for how to
+change this. See the 'joinspaces' option to change the number of spaces used
+after a full stop.
+ It is possible to use an external program for formatting. This is useful
+if your text can't be properly formatted with Vim's builtin command. See the
+'formatprg' option.
+
+==============================================================================
+*25.2* Aligning text
+
+To center a range of lines, use the following command: >
+
+ :{range}center [width]
+
+{range} is the usual command-line range. [width] is an optional line width to
+use for centering. If [width] is not specified, it defaults to the value of
+'textwidth'. (If 'textwidth' is 0, the default is 80.)
+ For example: >
+
+ :1,5center 40
+
+results in the following:
+
+ I taught for a while. One ~
+ time, I was stopped by the ~
+ Fort Worth police, because my ~
+ homework was too hard. True ~
+ story. ~
+
+
+RIGHT ALIGNMENT
+
+Similarly, the ":right" command right-justifies the text: >
+
+ :1,5right 37
+
+gives this result:
+
+ I taught for a while. One ~
+ time, I was stopped by the ~
+ Fort Worth police, because my ~
+ homework was too hard. True ~
+ story. ~
+
+LEFT ALIGNMENT
+
+Finally there is this command: >
+
+ :{range}left [margin]
+
+Unlike ":center" and ":right", however, the argument to ":left" is not the
+length of the line. Instead it is the left margin. If it is omitted, the
+text will be put against the left side of the screen (using a zero margin
+would do the same). If it is 5, the text will be indented 5 spaces. For
+example, use these commands: >
+
+ :1left 5
+ :2,5left
+
+This results in the following:
+
+ I taught for a while. One ~
+ time, I was stopped by the ~
+ Fort Worth police, because my ~
+ homework was too hard. True ~
+ story. ~
+
+
+JUSTIFYING TEXT
+
+Vim has no built-in way of justifying text. However, there is a neat macro
+package that does the job. To use this package, execute the following
+command: >
+
+ :runtime macros/justify.vim
+
+This Vim script file defines a new visual command "_j". To justify a block of
+text, highlight the text in Visual mode and then execute "_j".
+ Look in the file for more explanations. To go there, do "gf" on this name:
+$VIMRUNTIME/macros/justify.vim.
+
+An alternative is to filter the text through an external program. Example: >
+
+ :%!fmt
+
+==============================================================================
+*25.3* Indents and tabs
+
+Indents can be used to make text stand out from the rest. The example texts
+in this manual, for example, are indented by eight spaces or a tab. You would
+normally enter this by typing a tab at the start of each line. Take this
+text:
+ the first line ~
+ the second line ~
+
+This is entered by typing a tab, some text, <Enter>, tab and more text.
+ The 'autoindent' option inserts indents automatically: >
+
+ :set autoindent
+
+When a new line is started it gets the same indent as the previous line. In
+the above example, the tab after the <Enter> is not needed anymore.
+
+
+INCREASING INDENT
+
+To increase the amount of indent in a line, use the ">" operator. Often this
+is used as ">>", which adds indent to the current line.
+ The amount of indent added is specified with the 'shiftwidth' option. The
+default value is 8. To make ">>" insert four spaces worth of indent, for
+example, type this: >
+
+ :set shiftwidth=4
+
+When used on the second line of the example text, this is what you get:
+
+ the first line ~
+ the second line ~
+
+"4>>" will increase the indent of four lines.
+
+
+TABSTOP
+
+If you want to make indents a multiple of 4, you set 'shiftwidth' to 4. But
+when pressing a Tab you still get 8 spaces worth of indent. To change this,
+set the 'softtabstop' option: >
+
+ :set softtabstop=4
+
+This will make the <Tab> key insert 4 spaces worth of indent. If there are
+already four spaces, a <Tab> character is used (saving seven characters in the
+file). (If you always want spaces and no tab characters, set the 'expandtab'
+option.)
+
+ Note:
+ You could set the 'tabstop' option to 4. However, if you edit the
+ file another time, with 'tabstop' set to the default value of 8, it
+ will look wrong. In other programs and when printing the indent will
+ also be wrong. Therefore it is recommended to keep 'tabstop' at eight
+ all the time. That's the standard value everywhere.
+
+
+CHANGING TABS
+
+You edit a file which was written with a tabstop of 3. In Vim it looks ugly,
+because it uses the normal tabstop value of 8. You can fix this by setting
+'tabstop' to 3. But you have to do this every time you edit this file.
+ Vim can change the use of tabstops in your file. First, set 'tabstop' to
+make the indents look good, then use the ":retab" command: >
+
+ :set tabstop=3
+ :retab 8
+
+The ":retab" command will change 'tabstop' to 8, while changing the text such
+that it looks the same. It changes spans of white space into tabs and spaces
+for this. You can now write the file. Next time you edit it the indents will
+be right without setting an option.
+ Warning: When using ":retab" on a program, it may change white space inside
+a string constant. Therefore it's a good habit to use "\t" instead of a
+real tab.
+
+==============================================================================
+*25.4* Dealing with long lines
+
+Sometimes you will be editing a file that is wider than the number of columns
+in the window. When that occurs, Vim wraps the lines so that everything fits
+on the screen.
+ If you switch the 'wrap' option off, each line in the file shows up as one
+line on the screen. Then the ends of the long lines disappear off the screen
+to the right.
+ When you move the cursor to a character that can't be seen, Vim will scroll
+the text to show it. This is like moving a viewport over the text in the
+horizontal direction.
+ By default, Vim does not display a horizontal scrollbar in the GUI. If you
+want to enable one, use the following command: >
+
+ :set guioptions+=b
+
+One horizontal scrollbar will appear at the bottom of the Vim window.
+
+If you don't have a scrollbar or don't want to use it, use these commands to
+scroll the text. The cursor will stay in the same place, but it's move back
+into the visible text if necessary.
+
+ zh scroll right
+ 4zh scroll four characters right
+ zH scroll half a window width right
+ ze scroll right to put the cursor at the end
+ zl scroll left
+ 4zl scroll four characters left
+ zL scroll half a window width left
+ zs scroll left to put the cursor at the start
+
+Let's attempt to show this with one line of text. The cursor is on the "w" of
+"which". The "current window" above the line indicates the text that is
+currently visible. The "window"s below the text indicate the text that is
+visible after the command left of it.
+
+ |<-- current window -->|
+ some long text, part of which is visible in the window ~
+ ze |<-- window -->|
+ zH |<-- window -->|
+ 4zh |<-- window -->|
+ zh |<-- window -->|
+ zl |<-- window -->|
+ 4zl |<-- window -->|
+ zL |<-- window -->|
+ zs |<-- window -->|
+
+
+MOVING WITH WRAP OFF
+
+When 'wrap' is off and the text has scrolled horizontally, you can use the
+following commands to move the cursor to a character you can see. Thus text
+left and right of the window is ignored. These never cause the text to
+scroll:
+
+ g0 to first visible character in this line
+ g^ to first non-blank visible character in this line
+ gm to middle of this line
+ g$ to last visible character in this line
+
+ |<-- window -->|
+ some long text, part of which is visible ~
+ g0 g^ gm g$
+
+
+BREAKING AT WORDS *edit-no-break*
+
+When preparing text for use by another program, you might have to make
+paragraphs without a line break. A disadvantage of using 'nowrap' is that you
+can't see the whole sentence you are working on. When 'wrap' is on, words are
+broken halfway, which makes them hard to read.
+ A good solution for editing this kind of paragraph is setting the
+'linebreak' option. Vim then breaks lines at an appropriate place when
+displaying the line. The text in the file remains unchanged.
+ Without 'linebreak' text might look like this:
+
+ +---------------------------------+
+ |letter generation program for a b|
+ |ank. They wanted to send out a s|
+ |pecial, personalized letter to th|
+ |eir richest 1000 customers. Unfo|
+ |rtunately for the programmer, he |
+ +---------------------------------+
+After: >
+
+ :set linebreak
+
+it looks like this:
+
+ +---------------------------------+
+ |letter generation program for a |
+ |bank. They wanted to send out a |
+ |special, personalized letter to |
+ |their richest 1000 customers. |
+ |Unfortunately for the programmer,|
+ +---------------------------------+
+
+Related options:
+'breakat' specifies the characters where a break can be inserted.
+'showbreak' specifies a string to show at the start of broken line.
+Set 'textwidth' to zero to avoid a paragraph to be split.
+
+
+MOVING BY VISIBLE LINES
+
+The "j" and "k" commands move to the next and previous lines. When used on
+a long line, this means moving a lot of screen lines at once.
+ To move only one screen line, use the "gj" and "gk" commands. When a line
+doesn't wrap they do the same as "j" and "k". When the line does wrap, they
+move to a character displayed one line below or above.
+ You might like to use these mappings, which bind these movement commands to
+the cursor keys: >
+
+ :map <Up> gk
+ :map <Down> gj
+
+
+TURNING A PARAGRAPH INTO ONE LINE
+
+If you want to import text into a program like MS-Word, each paragraph should
+be a single line. If your paragraphs are currently separated with empty
+lines, this is how you turn each paragraph into a single line: >
+
+ :g/./,/^$/join
+
+That looks complicated. Let's break it up in pieces:
+
+ :g/./ A ":global" command that finds all lines that contain
+ at least one character.
+ ,/^$/ A range, starting from the current line (the non-empty
+ line) until an empty line.
+ join The ":join" command joins the range of lines together
+ into one line.
+
+Starting with this text, containing eight lines broken at column 30:
+
+ +----------------------------------+
+ |A letter generation program |
+ |for a bank. They wanted to |
+ |send out a special, |
+ |personalized letter. |
+ | |
+ |To their richest 1000 |
+ |customers. Unfortunately for |
+ |the programmer, |
+ +----------------------------------+
+
+You end up with two lines:
+
+ +----------------------------------+
+ |A letter generation program for a |
+ |bank. They wanted to send out a s|
+ |pecial, personalized letter. |
+ |To their richest 1000 customers. |
+ |Unfortunately for the programmer, |
+ +----------------------------------+
+
+Note that this doesn't work when the separating line is blank but not empty;
+when it contains spaces and/or tabs. This command does work with blank lines:
+>
+ :g/\S/,/^\s*$/join
+
+This still requires a blank or empty line at the end of the file for the last
+paragraph to be joined.
+
+==============================================================================
+*25.5* Editing tables
+
+Suppose you are editing a table with four columns:
+
+ nice table test 1 test 2 test 3 ~
+ input A 0.534 ~
+ input B 0.913 ~
+
+You need to enter numbers in the third column. You could move to the second
+line, use "A", enter a lot of spaces and type the text.
+ For this kind of editing there is a special option: >
+
+ set virtualedit=all
+
+Now you can move the cursor to positions where there isn't any text. This is
+called "virtual space". Editing a table is a lot easier this way.
+ Move the cursor by searching for the header of the last column: >
+
+ /test 3
+
+Now press "j" and you are right where you can enter the value for "input A".
+Typing "0.693" results in:
+
+ nice table test 1 test 2 test 3 ~
+ input A 0.534 0.693 ~
+ input B 0.913 ~
+
+Vim has automatically filled the gap in front of the new text for you. Now,
+to enter the next field in this column use "Bj". "B" moves back to the start
+of a white space separated word. Then "j" moves to the place where the next
+field can be entered.
+
+ Note:
+ You can move the cursor anywhere in the display, also beyond the end
+ of a line. But Vim will not insert spaces there, until you insert a
+ character in that position.
+
+
+COPYING A COLUMN
+
+You want to add a column, which should be a copy of the third column and
+placed before the "test 1" column. Do this in seven steps:
+1. Move the cursor to the left upper corner of this column, e.g., with
+ "/test 3".
+2. Press CTRL-V to start blockwise Visual mode.
+3. Move the cursor down two lines with "2j". You are now in "virtual space":
+ the "input B" line of the "test 3" column.
+4. Move the cursor right, to include the whole column in the selection, plus
+ the space that you want between the columns. "9l" should do it.
+5. Yank the selected rectangle with "y".
+6. Move the cursor to "test 1", where the new column must be placed.
+7. Press "P".
+
+The result should be:
+
+ nice table test 3 test 1 test 2 test 3 ~
+ input A 0.693 0.534 0.693 ~
+ input B 0.913 ~
+
+Notice that the whole "test 1" column was shifted right, also the line where
+the "test 3" column didn't have text.
+
+Go back to non-virtual cursor movements with: >
+
+ :set virtualedit=
+
+
+VIRTUAL REPLACE MODE
+
+The disadvantage of using 'virtualedit' is that it "feels" different. You
+can't recognize tabs or spaces beyond the end of line when moving the cursor
+around. Another method can be used: Virtual Replace mode.
+ Suppose you have a line in a table that contains both tabs and other
+characters. Use "rx" on the first tab:
+
+ inp 0.693 0.534 0.693 ~
+
+ |
+ rx |
+ V
+
+ inpx0.693 0.534 0.693 ~
+
+The layout is messed up. To avoid that, use the "gr" command:
+
+ inp 0.693 0.534 0.693 ~
+
+ |
+ grx |
+ V
+
+ inpx 0.693 0.534 0.693 ~
+
+What happens is that the "gr" command makes sure the new character takes the
+right amount of screen space. Extra spaces or tabs are inserted to fill the
+gap. Thus what actually happens is that a tab is replaced by "x" and then
+blanks added to make the text after it keep it's place. In this case a
+tab is inserted.
+ When you need to replace more than one character, you use the "R" command
+to go to Replace mode (see |04.9|). This messes up the layout and replaces
+the wrong characters:
+
+ inp 0 0.534 0.693 ~
+
+ |
+ R0.786 |
+ V
+
+ inp 0.78634 0.693 ~
+
+The "gR" command uses Virtual Replace mode. This preserves the layout:
+
+ inp 0 0.534 0.693 ~
+
+ |
+ gR0.786 |
+ V
+
+ inp 0.786 0.534 0.693 ~
+
+==============================================================================
+
+Next chapter: |usr_26.txt| Repeating
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_26.txt b/runtime/doc/usr_26.txt
new file mode 100644
index 000000000..018763f6e
--- /dev/null
+++ b/runtime/doc/usr_26.txt
@@ -0,0 +1,221 @@
+*usr_26.txt* For Vim version 7.0aa. Last change: 2002 Oct 29
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Repeating
+
+
+An editing task is hardly ever unstructured. A change often needs to be made
+several times. In this chapter a number of useful ways to repeat a change
+will be explained.
+
+|26.1| Repeating with Visual mode
+|26.2| Add and subtract
+|26.3| Making a change in many files
+|26.4| Using Vim from a shell script
+
+ Next chapter: |usr_27.txt| Search commands and patterns
+ Previous chapter: |usr_25.txt| Editing formatted text
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*26.1* Repeating with Visual mode
+
+Visual mode is very handy for making a change in any sequence of lines. You
+can see the highlighted text, thus you can check if the correct lines are
+changed. But making the selection takes some typing. The "gv" command
+selects the same area again. This allows you to do another operation on the
+same text.
+ Suppose you have some lines where you want to change "2001" to "2002" and
+"2000" to "2001":
+
+ The financial results for 2001 are better ~
+ than for 2000. The income increased by 50%, ~
+ even though 2001 had more rain than 2000. ~
+ 2000 2001 ~
+ income 45,403 66,234 ~
+
+First change "2001" to "2002". Select the lines in Visual mode, and use: >
+
+ :s/2001/2002/g
+
+Now use "gv" to reselect the same text. It doesn't matter where the cursor
+is. Then use ":s/2000/2001/g" to make the second change.
+ Obviously, you can repeat these changes several times.
+
+==============================================================================
+*26.2* Add and subtract
+
+When repeating the change of one number into another, you often have a fixed
+offset. In the example above, one was added to each year. Instead of typing
+a substitute command for each year that appears, the CTRL-A command can be
+used.
+ Using the same text as above, search for a year: >
+
+ /19[0-9][0-9]\|20[0-9][0-9]
+
+Now press CTRL-A. The year will be increased by one:
+
+ The financial results for 2002 are better ~
+ than for 2000. The income increased by 50%, ~
+ even though 2001 had more rain than 2000. ~
+ 2000 2001 ~
+ income 45,403 66,234 ~
+
+Use "n" to find the next year, and press "." to repeat the CTRL-A ("." is a
+bit quicker to type). Repeat "n" and "." for all years that appear.
+ Hint: set the 'hlsearch' option to see the matches you are going to change,
+then you can look ahead and do it faster.
+
+Adding more than one can be done by prepending the number to CTRL-A. Suppose
+you have this list:
+
+ 1. item four ~
+ 2. item five ~
+ 3. item six ~
+
+Move the cursor to "1." and type: >
+
+ 3 CTRL-A
+
+The "1." will change to "4.". Again, you can use "." to repeat this on the
+other numbers.
+
+Another example:
+
+ 006 foo bar ~
+ 007 foo bar ~
+
+Using CTRL-A on these numbers results in:
+
+ 007 foo bar ~
+ 010 foo bar ~
+
+7 plus one is 10? What happened here is that Vim recognized "007" as an octal
+number, because there is a leading zero. This notation is often used in C
+programs. If you do not want a number with leading zeros to be handled as
+octal, use this: >
+
+ :set nrformats-=octal
+
+The CTRL-X command does subtraction in a similar way.
+
+==============================================================================
+*26.3* Making a change in many files
+
+Suppose you have a variable called "x_cnt" and you want to change it to
+"x_counter". This variable is used in several of your C files. You need to
+change it in all files. This is how you do it.
+ Put all the relevant files in the argument list: >
+
+ :args *.c
+<
+This finds all C files and edits the first one. Now you can perform a
+substitution command on all these files: >
+
+ :argdo %s/\<x_cnt\>/x_counter/ge | update
+
+The ":argdo" command takes an argument that is another command. That command
+will be executed on all files in the argument list.
+ The "%s" substitute command that follows works on all lines. It finds the
+word "x_cnt" with "\<x_cnt\>". The "\<" and "\>" are used to match the whole
+word only, and not "px_cnt" or "x_cnt2".
+ The flags for the substitute command include "g" to replace all occurrences
+of "x_cnt" in the same line. The "e" flag is used to avoid an error message
+when "x_cnt" does not appear in the file. Otherwise ":argdo" would abort on
+the first file where "x_cnt" was not found.
+ The "|" separates two commands. The following "update" command writes the
+file only if it was changed. If no "x_cnt" was changed to "x_counter" nothing
+happens.
+
+There is also the ":windo" command, which executes its argument in all
+windows. And ":bufdo" executes its argument on all buffers. Be careful with
+this, because you might have more files in the buffer list than you think.
+Check this with the ":buffers" command (or ":ls").
+
+==============================================================================
+*26.4* Using Vim from a shell script
+
+Suppose you have a lot of files in which you need to change the string
+"-person-" to "Jones" and then print it. How do you do that? One way is to
+do a lot of typing. The other is to write a shell script to do the work.
+ The Vim editor does a superb job as a screen-oriented editor when using
+Normal mode commands. For batch processing, however, Normal mode commands do
+not result in clear, commented command files; so here you will use Ex mode
+instead. This mode gives you a nice command-line interface that makes it easy
+to put into a batch file. ("Ex command" is just another name for a
+command-line (:) command.)
+ The Ex mode commands you need are as follows: >
+
+ %s/-person-/Jones/g
+ write tempfile
+ quit
+
+You put these commands in the file "change.vim". Now to run the editor in
+batch mode, use this shell script: >
+
+ for file in *.txt; do
+ vim -e -s $file < change.vim
+ lpr -r tempfile
+ done
+
+The for-done loop is a shell construct to repeat the two lines in between,
+while the $file variable is set to a different file name each time.
+ The second line runs the Vim editor in Ex mode (-e argument) on the file
+$file and reads commands from the file "change.vim". The -s argument tells
+Vim to operate in silent mode. In other words, do not keep outputting the
+:prompt, or any other prompt for that matter.
+ The "lpr -r tempfile" command prints the resulting "tempfile" and deletes
+it (that's what the -r argument does).
+
+
+READING FROM STDIN
+
+Vim can read text on standard input. Since the normal way is to read commands
+there, you must tell Vim to read text instead. This is done by passing the
+"-" argument in place of a file. Example: >
+
+ ls | vim -
+
+This allows you to edit the output of the "ls" command, without first saving
+the text in a file.
+ If you use the standard input to read text from, you can use the "-S"
+argument to read a script: >
+
+ producer | vim -S change.vim -
+
+
+NORMAL MODE SCRIPTS
+
+If you really want to use Normal mode commands in a script, you can use it
+like this: >
+
+ vim -s script file.txt ...
+<
+ Note:
+ "-s" has a different meaning when it is used without "-e". Here it
+ means to source the "script" as Normal mode commands. When used with
+ "-e" it means to be silent, and doesn't use the next argument as a
+ file name.
+
+The commands in "script" are executed like you typed them. Don't forget that
+a line break is interpreted as pressing <Enter>. In Normal mode that moves
+the cursor to the next line.
+ To create the script you can edit the script file and type the commands.
+You need to imagine what the result would be, which can be a bit difficult.
+Another way is to record the commands while you perform them manually. This
+is how you do that: >
+
+ vim -w script file.txt ...
+
+All typed keys will be written to "script". If you make a small mistake you
+can just continue and remember to edit the script later.
+ The "-w" argument appends to an existing script. That is good when you
+want to record the script bit by bit. If you want to start from scratch and
+start all over, use the "-W" argument. It overwrites any existing file.
+
+==============================================================================
+
+Next chapter: |usr_27.txt| Search commands and patterns
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt
new file mode 100644
index 000000000..46fb19070
--- /dev/null
+++ b/runtime/doc/usr_27.txt
@@ -0,0 +1,563 @@
+*usr_27.txt* For Vim version 7.0aa. Last change: 2003 Oct 28
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Search commands and patterns
+
+
+In chapter 3 a few simple search patterns were mentioned |03.9|. Vim can do
+much more complex searches. This chapter explains the most often used ones.
+A detailed specification can be found here: |pattern|
+
+|27.1| Ignoring case
+|27.2| Wrapping around the file end
+|27.3| Offsets
+|27.4| Matching multiple times
+|27.5| Alternatives
+|27.6| Character ranges
+|27.7| Character classes
+|27.8| Matching a line break
+|27.9| Examples
+
+ Next chapter: |usr_28.txt| Folding
+ Previous chapter: |usr_26.txt| Repeating
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*27.1* Ignoring case
+
+By default, Vim's searches are case sensitive. Therefore, "include",
+"INCLUDE", and "Include" are three different words and a search will match
+only one of them.
+ Now switch on the 'ignorecase' option: >
+
+ :set ignorecase
+
+Search for "include" again, and now it will match "Include", "INCLUDE" and
+"InClUDe". (Set the 'hlsearch' option to quickly see where a pattern
+matches.)
+ You can switch this off again with: >
+
+ :set noignorecase
+
+But lets keep it set, and search for "INCLUDE". It will match exactly the
+same text as "include" did. Now set the 'smartcase' option: >
+
+ :set ignorecase smartcase
+
+If you have a pattern with at least one uppercase character, the search
+becomes case sensitive. The idea is that you didn't have to type that
+uppercase character, so you must have done it because you wanted case to
+match. That's smart!
+ With these two options set you find the following matches:
+
+ pattern matches ~
+ word word, Word, WORD, WoRd, etc.
+ Word Word
+ WORD WORD
+ WoRd WoRd
+
+
+CASE IN ONE PATTERN
+
+If you want to ignore case for one specific pattern, you can do this by
+prepending the "\c" string. Using "\C" will make the pattern to match case.
+This overrules the 'ignorecase' and 'smartcase' options, when "\c" or "\C" is
+used their value doesn't matter.
+
+ pattern matches ~
+ \Cword word
+ \CWord Word
+ \cword word, Word, WORD, WoRd, etc.
+ \cWord word, Word, WORD, WoRd, etc.
+
+A big advantage of using "\c" and "\C" is that it sticks with the pattern.
+Thus if you repeat a pattern from the search history, the same will happen, no
+matter if 'ignorecase' or 'smartcase' was changed.
+
+ Note:
+ The use of "\" items in search patterns depends on the 'magic' option.
+ In this chapters we will assume 'magic' is on, because that is the
+ standard and recommended setting. If you would change 'magic', many
+ search patterns would suddenly become invalid.
+
+ Note:
+ If your search takes much longer than you expected, you can interrupt
+ it with CTRL-C on Unix and CTRL-Break on MS-DOS and MS-Windows.
+
+==============================================================================
+*27.2* Wrapping around the file end
+
+By default, a forward search starts searching for the given string at the
+current cursor location. It then proceeds to the end of the file. If it has
+not found the string by that time, it starts from the beginning and searches
+from the start of the file to the cursor location.
+ Keep in mind that when repeating the "n" command to search for the next
+match, you eventually get back to the first match. If you don't notice this
+you keep searching forever! To give you a hint, Vim displays this message:
+
+ search hit BOTTOM, continuing at TOP ~
+
+If you use the "?" command, to search in the other direction, you get this
+message:
+
+ search hit TOP, continuing at BOTTOM ~
+
+Still, you don't know when you are back at the first match. One way to see
+this is by switching on the 'ruler' option: >
+
+ :set ruler
+
+Vim will display the cursor position in the lower righthand corner of the
+window (in the status line if there is one). It looks like this:
+
+ 101,29 84% ~
+
+The first number is the line number of the cursor. Remember the line number
+where you started, so that you can check if you passed this position again.
+
+
+NOT WRAPPING
+
+To turn off search wrapping, use the following command: >
+
+ :set nowrapscan
+
+Now when the search hits the end of the file, an error message displays:
+
+ E385: search hit BOTTOM without match for: forever ~
+
+Thus you can find all matches by going to the start of the file with "gg" and
+keep searching until you see this message.
+ If you search in the other direction, using "?", you get:
+
+ E384: search hit TOP without match for: forever ~
+
+==============================================================================
+*27.3* Offsets
+
+By default, the search command leaves the cursor positioned on the beginning
+of the pattern. You can tell Vim to leave it some other place by specifying
+an offset. For the forward search command "/", the offset is specified by
+appending a slash (/) and the offset: >
+
+ /default/2
+
+This command searches for the pattern "default" and then moves to the
+beginning of the second line past the pattern. Using this command on the
+paragraph above, Vim finds the word "default" in the first line. Then the
+cursor is moved two lines down and lands on "an offset".
+
+If the offset is a simple number, the cursor will be placed at the beginning
+of the line that many lines from the match. The offset number can be positive
+or negative. If it is positive, the cursor moves down that many lines; if
+negative, it moves up.
+
+
+CHARACTER OFFSETS
+
+The "e" offset indicates an offset from the end of the match. It moves the
+cursor onto the last character of the match. The command: >
+
+ /const/e
+
+puts the cursor on the "t" of "const".
+ From that position, adding a number moves forward that many characters.
+This command moves to the character just after the match: >
+
+ /const/e+1
+
+A positive number moves the cursor to the right, a negative number moves it to
+the left. For example: >
+
+ /const/e-1
+
+moves the cursor to the "s" of "const".
+
+If the offset begins with "b", the cursor moves to the beginning of the
+pattern. That's not very useful, since leaving out the "b" does the same
+thing. It does get useful when a number is added or subtracted. The cursor
+then goes forward or backward that many characters. For example: >
+
+ /const/b+2
+
+Moves the cursor to the beginning of the match and then two characters to the
+right. Thus it lands on the "n".
+
+
+REPEATING
+
+To repeat searching for the previously used search pattern, but with a
+different offset, leave out the pattern: >
+
+ /that
+ //e
+
+Is equal to: >
+
+ /that/e
+
+To repeat with the same offset: >
+
+ /
+
+"n" does the same thing. To repeat while removing a previously used offset: >
+
+ //
+
+
+SEARCHING BACKWARDS
+
+The "?" command uses offsets in the same way, but you must use "?" to separate
+the offset from the pattern, instead of "/": >
+
+ ?const?e-2
+
+The "b" and "e" keep their meaning, they don't change direction with the use
+of "?".
+
+
+START POSITION
+
+When starting a search, it normally starts at the cursor position. When you
+specify a line offset, this can cause trouble. For example: >
+
+ /const/-2
+
+This finds the next word "const" and then moves two lines up. If you
+use "n" to search again, Vim could start at the current position and find the same
+"const" match. Then using the offset again, you would be back where you started.
+You would be stuck!
+ It could be worse: Suppose there is another match with "const" in the next
+line. Then repeating the forward search would find this match and move two
+lines up. Thus you would actually move the cursor back!
+
+When you specify a character offset, Vim will compensate for this. Thus the
+search starts a few characters forward or backward, so that the same match
+isn't found again.
+
+==============================================================================
+*27.4* Matching multiple times
+
+The "*" item specifies that the item before it can match any number of times.
+Thus: >
+
+ /a*
+
+matches "a", "aa", "aaa", etc. But also "" (the empty string), because zero
+times is included.
+ The "*" only applies to the item directly before it. Thus "ab*" matches
+"a", "ab", "abb", "abbb", etc. To match a whole string multiple times, it
+must be grouped into one item. This is done by putting "\(" before it and
+"\)" after it. Thus this command: >
+
+ /\(ab\)*
+
+Matches: "ab", "abab", "ababab", etc. And also "".
+
+To avoid matching the empty string, use "\+". This makes the previous item
+match one or more times. >
+
+ /ab\+
+
+Matches "ab", "abb", "abbb", etc. It does not match "a" when no "b" follows.
+
+To match an optional item, use "\=". Example: >
+
+ /folders\=
+
+Matches "folder" and "folders".
+
+
+SPECIFIC COUNTS
+
+To match a specific number of items use the form "\{n,m}". "n" and "m" are
+numbers. The item before it will be matched "n" to "m" times |inclusive|.
+Example: >
+
+ /ab\{3,5}
+
+matches "abbb", "abbbb" and "abbbbb".
+ When "n" is omitted, it defaults to zero. When "m" is omitted it defaults
+to infinity. When ",m" is omitted, it matches exactly "n" times.
+Examples:
+
+ pattern match count ~
+ \{,4} 0, 1, 2, 3 or 4
+ \{3,} 3, 4, 5, etc.
+ \{0,1} 0 or 1, same as \=
+ \{0,} 0 or more, same as *
+ \{1,} 1 or more, same as \+
+ \{3} 3
+
+
+MATCHING AS LITTLE AS POSSIBLE
+
+The items so far match as many characters as they can find. To match as few
+as possible, use "\{-n,m}". It works the same as "\{n,m}", except that the
+minimal amount possible is used.
+ For example, use: >
+
+ /ab\{-1,3}
+
+Will match "ab" in "abbb". Actually, it will never match more than one b,
+because there is no reason to match more. It requires something else to force
+it to match more than the lower limit.
+ The same rules apply to removing "n" and "m". It's even possible to remove
+both of the, resulting in "\{-}". This matches the item before it zero or
+more times, as few as possible. The item by itself always match zero times.
+It is useful when combined with something else. Example: >
+
+ /a.\{-}b
+
+This matches "axb" in "axbxb". If this pattern would be used: >
+
+ /a.*b
+
+It would try to match as many characters as possible with ".*", thus it
+matches "axbxb" as a whole.
+
+==============================================================================
+*27.5* Alternatives
+
+The "or" operator in a pattern is "\|". Example: >
+
+ /foo\|bar
+
+This matches "foo" or "bar". More alternatives can be concatenated: >
+
+ /one\|two\|three
+
+Matches "one", "two" and "three".
+ To match multiple times, the whole thing must be placed in "\(" and "\)": >
+
+ /\(foo\|bar\)\+
+
+This matches "foo", "foobar", "foofoo", "barfoobar", etc.
+ Another example: >
+
+ /end\(if\|while\|for\)
+
+This matches "endif", "endwhile" and "endfor".
+
+A related item is "\&". This requires that both alternatives match in the
+same place. The resulting match uses the last alternative. Example: >
+
+ /forever\&...
+
+This matches "for" in "forever". It will not match "fortuin", for example.
+
+==============================================================================
+*27.6* Character ranges
+
+To match "a", "b" or "c" you could use "/a\|b\|c". When you want to match all
+letters from "a" to "z" this gets very long. There is a shorter method: >
+
+ /[a-z]
+
+The [] construct matches a single character. Inside you specify which
+characters to match. You can include a list of characters, like this: >
+
+ /[0123456789abcdef]
+
+This will match any of the characters included. For consecutive characters
+you can specify the range. "0-3" stands for "0123". "w-z" stands for "wxyz".
+Thus the same command as above can be shortened to: >
+
+ /[0-9a-f]
+
+To match the "-" character itself make it the first or last one in the range.
+These special characters are accepted to make it easier to use them inside a
+[] range (they can actually be used anywhere in the search pattern):
+
+ \e <Esc>
+ \t <Tab>
+ \r <CR>
+ \b <BS>
+
+There are a few more special cases for [] ranges, see |/[]| for the whole
+story.
+
+
+COMPLEMENTED RANGE
+
+To avoid matching a specific character, use "^" at the start of the range.
+The [] item then matches everything but the characters included. Example: >
+
+ /"[^"]*"
+<
+ " a double quote
+ [^"] any character that is not a double quote
+ * as many as possible
+ " a double quote again
+
+This matches "foo" and "3!x", including the double quotes.
+
+
+PREDEFINED RANGES
+
+A number of ranges are used very often. Vim provides a shortcut for these.
+For example: >
+
+ /\a
+
+Finds alphabetic characters. This is equal to using "/[a-zA-Z]". Here are a
+few more of these:
+
+ item matches equivalent ~
+ \d digit [0-9]
+ \D non-digit [^0-9]
+ \x hex digit [0-9a-fA-F]
+ \X non-hex digit [^0-9a-fA-F]
+ \s white space [ ] (<Tab> and <Space>)
+ \S non-white characters [^ ] (not <Tab> and <Space>)
+ \l lowercase alpha [a-z]
+ \L non-lowercase alpha [^a-z]
+ \u uppercase alpha [A-Z]
+ \U non-uppercase alpha [^A-Z]
+
+ Note:
+ Using these predefined ranges works a lot faster than the character
+ range it stands for.
+ These items can not be used inside []. Thus "[\d\l]" does NOT work to
+ match a digit or lowercase alpha. Use "\(\d\|\l\)" instead.
+
+See |/\s| for the whole list of these ranges.
+
+==============================================================================
+*27.7* Character classes
+
+The character range matches a fixed set of characters. A character class is
+similar, but with an essential difference: The set of characters can be
+redefined without changing the search pattern.
+ For example, search for this pattern: >
+
+ /\f\+
+
+The "\f" items stands for file name characters. Thus this matches a sequence
+of characters that can be a file name.
+ Which characters can be part of a file name depends on the system you are
+using. On MS-Windows, the backslash is included, on Unix it is not. This is
+specified with the 'isfname' option. The default value for Unix is: >
+
+ :set isfname
+ isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=
+
+For other systems the default value is different. Thus you can make a search
+pattern with "\f" to match a file name, and it will automatically adjust to
+the system you are using it on.
+
+ Note:
+ Actually, Unix allows using just about any character in a file name,
+ including white space. Including these characters in 'isfname' would
+ be theoretically correct. But it would make it impossible to find the
+ end of a file name in text. Thus the default value of 'isfname' is a
+ compromise.
+
+The character classes are:
+
+ item matches option ~
+ \i identifier characters 'isident'
+ \I like \i, excluding digits
+ \k keyword characters 'iskeyword'
+ \K like \k, excluding digits
+ \p printable characters 'isprint'
+ \P like \p, excluding digits
+ \f file name characters 'isfname'
+ \F like \f, excluding digits
+
+==============================================================================
+*27.8* Matching a line break
+
+Vim can find a pattern that includes a line break. You need to specify where
+the line break happens, because all items mentioned so far don't match a line
+break.
+ To check for a line break in a specific place, use the "\n" item: >
+
+ /the\nword
+
+This will match at a line that ends in "the" and the next line starts with
+"word". To match "the word" as well, you need to match a space or a line
+break. The item to use for it is "\_s": >
+
+ /the\_sword
+
+To allow any amount of white space: >
+
+ /the\_s\+word
+
+This also matches when "the " is at the end of a line and " word" at the
+start of the next one.
+
+"\s" matches white space, "\_s" matches white space or a line break.
+Similarly, "\a" matches an alphabetic character, and "\_a" matches an
+alphabetic character or a line break. The other character classes and ranges
+can be modified in the same way by inserting a "_".
+
+Many other items can be made to match a line break by prepending "\_". For
+example: "\_." matches any character or a line break.
+
+ Note:
+ "\_.*" matches everything until the end of the file. Be careful with
+ this, it can make a search command very slow.
+
+Another example is "\_[]", a character range that includes a line break: >
+
+ /"\_[^"]*"
+
+This finds a text in double quotes that may be split up in several lines.
+
+==============================================================================
+*27.9* Examples
+
+Here are a few search patterns you might find useful. This shows how the
+items mentioned above can be combined.
+
+
+FINDING A CALIFORNIA LICENSE PLATE
+
+A sample license place number is "1MGU103". It has one digit, three uppercase
+letters and three digits. Directly putting this into a search pattern: >
+
+ /\d\u\u\u\d\d\d
+
+Another way is to specify that there are three digits and letters with a
+count: >
+
+ /\d\u\{3}\d\{3}
+
+Using [] ranges instead: >
+
+ /[0-9][A-Z]\{3}[0-9]\{3}
+
+Which one of these you should use? Whichever one you can remember. The
+simple way you can remember is much faster than the fancy way that you can't.
+If you can remember them all, then avoid the last one, because it's both more
+typing and slower to execute.
+
+
+FINDING AN IDENTIFIER
+
+In C programs (and many other computer languages) an identifier starts with a
+letter and further consists of letters and digits. Underscores can be used
+too. This can be found with: >
+
+ /\<\h\w*\>
+
+"\<" and "\>" are used to find only whole words. "\h" stands for "[A-Za-z_]"
+and "\w" for "[0-9A-Za-z_]".
+
+ Note:
+ "\<" and "\>" depend on the 'iskeyword' option. If it includes "-",
+ for example, then "ident-" is not matched. In this situation use: >
+
+ /\w\@<!\h\w*\w\@!
+<
+ This checks if "\w" does not match before or after the identifier.
+ See |/\@<!| and |/\@!|.
+
+==============================================================================
+
+Next chapter: |usr_28.txt| Folding
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_28.txt b/runtime/doc/usr_28.txt
new file mode 100644
index 000000000..522dc3f9f
--- /dev/null
+++ b/runtime/doc/usr_28.txt
@@ -0,0 +1,426 @@
+*usr_28.txt* For Vim version 7.0aa. Last change: 2003 Dec 21
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Folding
+
+
+Structured text can be separated in sections. And sections in sub-sections.
+Folding allows you to display a section as one line, providing an overview.
+This chapter explains the different ways this can be done.
+
+|28.1| What is folding?
+|28.2| Manual folding
+|28.3| Working with folds
+|28.4| Saving and restoring folds
+|28.5| Folding by indent
+|28.6| Folding with markers
+|28.7| Folding by syntax
+|28.8| Folding by expression
+|28.9| Folding unchanged lines
+|28.10| Which fold method to use?
+
+ Next chapter: |usr_29.txt| Moving through programs
+ Previous chapter: |usr_27.txt| Search commands and patterns
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*28.1* What is folding?
+
+Folding is used to show a range of lines in the buffer as a single line on the
+screen. Like a piece of paper which is folded to make it shorter:
+
+ +------------------------+
+ | line 1 |
+ | line 2 |
+ | line 3 |
+ |_______________________ |
+ \ \
+ \________________________\
+ / folded lines /
+ /________________________/
+ | line 12 |
+ | line 13 |
+ | line 14 |
+ +------------------------+
+
+The text is still in the buffer, unchanged. Only the way lines are displayed
+is affected by folding.
+
+The advantage of folding is that you can get a better overview of the
+structure of text, by folding lines of a section and replacing it with a line
+that indicates that there is a section.
+
+==============================================================================
+*28.2* Manual folding
+
+Try it out: Position the cursor in a paragraph and type: >
+
+ zfap
+
+You will see that the paragraph is replaced by a highlighted line. You have
+created a fold. |zf| is an operator and |ap| a text object selection. You
+can use the |zf| operator with any movement command to create a fold for the
+text that it moved over. |zf| also works in Visual mode.
+
+To view the text again, open the fold by typing: >
+
+ zo
+
+And you can close the fold again with: >
+
+ zc
+
+All the folding commands start with "z". With some fantasy, this looks like a
+folded piece of paper, seen from the side. The letter after the "z" has a
+mnemonic meaning to make it easier to remember the commands:
+
+ zf F-old creation
+ zo O-pen a fold
+ zc C-lose a fold
+
+Folds can be nested: A region of text that contains folds can be folded
+again. For example, you can fold each paragraph in this section, and then
+fold all the sections in this chapter. Try it out. You will notice that
+opening the fold for the whole chapter will restore the nested folds as they
+were, some may be open and some may be closed.
+
+Suppose you have created several folds, and now want to view all the text.
+You could go to each fold and type "zo". To do this faster, use this command: >
+
+ zr
+
+This will R-educe the folding. The opposite is: >
+
+ zm
+
+This folds M-ore. You can repeat "zr" and "zm" to open and close nested folds
+of several levels.
+
+If you have nested several levels deep, you can open all of them with: >
+
+ zR
+
+This R-educes folds until there are none left. And you can close all folds
+with: >
+
+ zM
+
+This folds M-ore and M-ore.
+
+You can quickly disable the folding with the |zn| command. Then |zN| brings
+back the folding as it was. |zi| toggles between the two. This is a useful
+way of working:
+- create folds to get overview on your file
+- move around to where you want to do your work
+- do |zi| to look at the text and edit it
+- do |zi| again to go back to moving around
+
+More about manual folding in the reference manual: |fold-manual|
+
+==============================================================================
+*28.3* Working with folds
+
+When some folds are closed, movement commands like "j" and "k" move over a
+fold like it was a single, empty line. This allows you to quickly move around
+over folded text.
+
+You can yank, delete and put folds as if it was a single line. This is very
+useful if you want to reorder functions in a program. First make sure that
+each fold contains a whole function (or a bit less) by selecting the right
+'foldmethod'. Then delete the function with "dd", move the cursor and put it
+with "p". If some lines of the function are above or below the fold, you can
+use Visual selection:
+- put the cursor on the first line to be moved
+- hit "V" to start Visual mode
+- put the cursor on the last line to be moved
+- hit "d" to delete the selected lines.
+- move the cursor to the new position and "p"ut the lines there.
+
+It is sometimes difficult to see or remember where a fold is located, thus
+where a |zo| command would actually work. To see the defined folds: >
+
+ :set foldcolumn=4
+
+This will show a small column on the left of the window to indicate folds.
+A "+" is shown for a closed fold. A "-" is shown at the start of each open
+fold and "|" at following lines of the fold.
+
+You can use the mouse to open a fold by clicking on the "+" in the foldcolumn.
+Clicking on the "-" or a "|" below it will close an open fold.
+
+To open all folds at the cursor line use |zO|.
+To close all folds at the cursor line use |zC|.
+To delete a fold at the cursor line use |zd|.
+To delete all folds at the cursor line use |zD|.
+
+When in Insert mode, the fold at the cursor line is never closed. That allows
+you to see what you type!
+
+Folds are opened automatically when jumping around or moving the cursor left
+or right. For example, the "0" command opens the fold under the cursor
+(if 'foldopen' contains "hor", which is the default). The 'foldopen' option
+can be changed to open folds for specific commands. If you want the line
+under the cursor always to be open, do this: >
+
+ :set foldopen=all
+
+Warning: You won't be able to move onto a closed fold then. You might want to
+use this only temporarily and then set it back to the default: >
+
+ :set foldopen&
+
+You can make folds close automatically when you move out of it: >
+
+ :set foldclose=all
+
+This will re-apply 'foldlevel' to all folds that don't contain the cursor.
+You have to try it out if you like how this feels. Use |zm| to fold more and
+|zr| to fold less (reduce folds).
+
+The folding is local to the window. This allows you to open two windows on
+the same buffer, one with folds and one without folds. Or one with all folds
+closed and one with all folds open.
+
+==============================================================================
+*28.4* Saving and restoring folds
+
+When you abandon a file (starting to edit another one), the state of the folds
+is lost. If you come back to the same file later, all manually opened and
+closed folds are back to their default. When folds have been created
+manually, all folds are gone! To save the folds use the |:mkview| command: >
+
+ :mkview
+
+This will store the settings and other things that influence the view on the
+file. You can change what is stored with the 'viewoptions' option.
+When you come back to the same file later, you can load the view again: >
+
+ :loadview
+
+You can store up to ten views on one file. For example, to save the current
+setup as the third view and load the second view: >
+
+ :mkview 3
+ :loadview 2
+
+Note that when you insert or delete lines the views might become invalid.
+Also check out the 'viewdir' option, which specifies where the views are
+stored. You might want to delete old views now and then.
+
+==============================================================================
+*28.5* Folding by indent
+
+Defining folds with |zf| is a lot of work. If your text is structured by
+giving lower level items a larger indent, you can use the indent folding
+method. This will create folds for every sequence of lines with the same
+indent. Lines with a larger indent will become nested folds. This works well
+with many programming languages.
+
+Try this by setting the 'foldmethod' option: >
+
+ :set foldmethod=indent
+
+Then you can use the |zm| and |zr| commands to fold more and reduce folding.
+It's easy to see on this example text:
+
+This line is not indented
+ This line is indented once
+ This line is indented twice
+ This line is indented twice
+ This line is indented once
+This line is not indented
+ This line is indented once
+ This line is indented once
+
+Note that the relation between the amount of indent and the fold depth depends
+on the 'shiftwidth' option. Each 'shiftwidth' worth of indent adds one to the
+depth of the fold. This is called a fold level.
+
+When you use the |zr| and |zm| commands you actually increase or decrease the
+'foldlevel' option. You could also set it directly: >
+
+ :set foldlevel=3
+
+This means that all folds with three times a 'shiftwidth' indent or more will
+be closed. The lower the foldlevel, the more folds will be closed. When
+'foldlevel' is zero, all folds are closed. |zM| does set 'foldlevel' to zero.
+The opposite command |zR| sets 'foldlevel' to the deepest fold level that is
+present in the file.
+
+Thus there are two ways to open and close the folds:
+(A) By setting the fold level.
+ This gives a very quick way of "zooming out" to view the structure of the
+ text, move the cursor, and "zoom in" on the text again.
+
+(B) By using |zo| and |zc| commands to open or close specific folds.
+ This allows opening only those folds that you want to be open, while other
+ folds remain closed.
+
+This can be combined: You can first close most folds by using |zm| a few times
+and then open a specific fold with |zo|. Or open all folds with |zR| and
+then close specific folds with |zc|.
+
+But you cannot manually define folds when 'foldmethod' is "indent", as that
+would conflict with the relation between the indent and the fold level.
+
+More about folding by indent in the reference manual: |fold-indent|
+
+==============================================================================
+*28.6* Folding with markers
+
+Markers in the text are used to specify the start and end of a fold region.
+This gives precise control over which lines are included in a fold. The
+disadvantage is that the text needs to be modified.
+
+Try it: >
+
+ :set foldmethod=marker
+
+Example text, as it could appear in a C program:
+
+ /* foobar () {{{ */
+ int foobar()
+ {
+ /* return a value {{{ */
+ return 42;
+ /* }}} */
+ }
+ /* }}} */
+
+Notice that the folded line will display the text before the marker. This is
+very useful to tell what the fold contains.
+
+It's quite annoying when the markers don't pair up correctly after moving some
+lines around. This can be avoided by using numbered markers. Example:
+
+ /* global variables {{{1 */
+ int varA, varB;
+
+ /* functions {{{1 */
+ /* funcA() {{{2 */
+ void funcA() {}
+
+ /* funcB() {{{2 */
+ void funcB() {}
+ /* }}}1 */
+
+At every numbered marker a fold at the specified level begins. This will make
+any fold at a higher level stop here. You can just use numbered start markers
+to define all folds. Only when you want to explicitly stop a fold before
+another starts you need to add an end marker.
+
+More about folding with markers in the reference manual: |fold-marker|
+
+==============================================================================
+*28.7* Folding by syntax
+
+For each language Vim uses a different syntax file. This defines the colors
+for various items in the file. If you are reading this in Vim, in a terminal
+that supports colors, the colors you see are made with the "help" syntax file.
+ In the syntax files it is possible to add syntax items that have the "fold"
+argument. These define a fold region. This requires writing a syntax file
+and adding these items in it. That's not so easy to do. But once it's done,
+all folding happens automatically.
+ Here we'll assume you are using an existing syntax file. Then there is
+nothing more to explain. You can open and close folds as explained above.
+The folds will be created and deleted automatically when you edit the file.
+
+More about folding by syntax in the reference manual: |fold-syntax|
+
+==============================================================================
+*28.8* Folding by expression
+
+This is similar to folding by indent, but instead of using the indent of a
+line a user function is called to compute the fold level of a line. You can
+use this for text where something in the text indicates which lines belong
+together. An example is an e-mail message where the quoted text is indicated
+by a ">" before the line. To fold these quotes use this: >
+
+ :set foldmethod=expr
+ :set foldexpr=strlen(substitute(substitute(getline(v:lnum),'\\s','',\"g\"),'[^>].*','',''))
+
+You can try it out on this text:
+
+> quoted text he wrote
+> quoted text he wrote
+> > double quoted text I wrote
+> > double quoted text I wrote
+
+Explanation for the 'foldexpr' used in the example (inside out):
+ getline(v:lnum) gets the current line
+ substitute(...,'\\s','','g') removes all white space from the line
+ substitute(...,'[^>].*','','')) removes everything after leading '>'s
+ strlen(...) counts the length of the string, which
+ is the number of '>'s found
+
+Note that a backslash must be inserted before every space, double quote and
+backslash for the ":set" command. If this confuses you, do >
+
+ :set foldexpr
+
+to check the actual resulting value. To correct a complicated expression, use
+the command-line completion: >
+
+ :set foldexpr=<Tab>
+
+Where <Tab> is a real Tab. Vim will fill in the previous value, which you can
+then edit.
+
+When the expression gets more complicated you should put it in a function and
+set 'foldexpr' to call that function.
+
+More about folding by expression in the reference manual: |fold-expr|
+
+==============================================================================
+*28.9* Folding unchanged lines
+
+This is useful when you set the 'diff' option in the same window. The
+|vimdiff| command does this for you. Example: >
+
+ setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1
+
+Do this in every window that shows a different version of the same file. You
+will clearly see the differences between the files, while the text that didn't
+change is folded.
+
+For more details see |fold-diff|.
+
+==============================================================================
+*28.10* Which fold method to use?
+
+All these possibilities makes you wonder which method you should chose.
+Unfortunately, there is no golden rule. Here are some hints.
+
+If there is a syntax file with folding for the language you are editing, that
+is probably the best choice. If there isn't one, you might try to write it.
+This requires a good knowledge of search patterns. It's not easy, but when
+it's working you will not have to define folds manually.
+
+Typing commands to manually fold regions can be used for unstructured text.
+Then use the |:mkview| command to save and restore your folds.
+
+The marker method requires you to change the file. If you are sharing the
+files with other people or you have to meet company standards, you might not
+be allowed to add them.
+ The main advantage of markers is that you can put them exactly where you
+want them. That avoids that a few lines are missed when you cut and paste
+folds. And you can add a comment about what is contained in the fold.
+
+Folding by indent is something that works in many files, but not always very
+well. Use it when you can't use one of the other methods. However, it is
+very useful for outlining. Then you specifically use one 'shiftwidth' for
+each nesting level.
+
+Folding with expressions can make folds in almost any structured text. It is
+quite simple to specify, especially if the start and end of a fold can easily
+be recognized.
+ If you use the "expr" method to define folds, but they are not exactly how
+you want them, you could switch to the "manual" method. This will not remove
+the defined folds. Then you can delete or add folds manually.
+
+==============================================================================
+
+Next chapter: |usr_29.txt| Moving through programs
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_29.txt b/runtime/doc/usr_29.txt
new file mode 100644
index 000000000..b906cf6bd
--- /dev/null
+++ b/runtime/doc/usr_29.txt
@@ -0,0 +1,613 @@
+*usr_29.txt* For Vim version 7.0aa. Last change: 2004 Feb 12
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Moving through programs
+
+
+The creator of Vim is a computer programmer. It's no surprise that Vim
+contains many features to aid in writing programs. Jump around to find where
+identifiers are defined and used. Preview declarations in a separate window.
+There is more in the next chapter.
+
+|29.1| Using tags
+|29.2| The preview window
+|29.3| Moving through a program
+|29.4| Finding global identifiers
+|29.5| Finding local identifiers
+
+ Next chapter: |usr_30.txt| Editing programs
+ Previous chapter: |usr_28.txt| Folding
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*29.1* Using tags
+
+What is a tag? It is a location where an identifier is defined. An example
+is a function definition in a C or C++ program. A list of tags is kept in a
+tags file. This can be used by Vim to directly jump from any place to the
+tag, the place where an identifier is defined.
+ To generate the tags file for all C files in the current directory, use the
+following command: >
+
+ ctags *.c
+
+"ctags" is a separate program. Most Unix systems already have it installed.
+If you do not have it yet, you can find Exuberant ctags here:
+
+ http://ctags.sf.net ~
+
+Now when you are in Vim and you want to go to a function definition, you can
+jump to it by using the following command: >
+
+ :tag startlist
+
+This command will find the function "startlist" even if it is in another file.
+ The CTRL-] command jumps to the tag of the word that is under the cursor.
+This makes it easy to explore a tangle of C code. Suppose, for example, that
+you are in the function "write_block". You can see that it calls
+"write_line". But what does "write_line" do? By placing the cursor on the
+call to "write_line" and pressing CTRL-], you jump to the definition of this
+function.
+ The "write_line" function calls "write_char". You need to figure out what
+it does. So you position the cursor over the call to "write_char" and press
+CTRL-]. Now you are at the definition of "write_char".
+
+ +-------------------------------------+
+ |void write_block(char **s; int cnt) |
+ |{ |
+ | int i; |
+ | for (i = 0; i < cnt; ++i) |
+ | write_line(s[i]); |
+ |} | |
+ +-----------|-------------------------+
+ |
+ CTRL-] |
+ | +----------------------------+
+ +--> |void write_line(char *s) |
+ |{ |
+ | while (*s != 0) |
+ | write_char(*s++); |
+ |} | |
+ +--------|-------------------+
+ |
+ CTRL-] |
+ | +------------------------------------+
+ +--> |void write_char(char c) |
+ |{ |
+ | putchar((int)(unsigned char)c); |
+ |} |
+ +------------------------------------+
+
+The ":tags" command shows the list of tags that you traversed through:
+
+ :tags
+ # TO tag FROM line in file/text ~
+ 1 1 write_line 8 write_block.c ~
+ 2 1 write_char 7 write_line.c ~
+ > ~
+>
+Now to go back. The CTRL-T command goes to the preceding tag. In the example
+above you get back to the "write_line" function, in the call to "write_char".
+ This command takes a count argument that indicates how many tags to jump
+back. You have gone forward, and now back. Let's go forward again. The
+following command goes to the tag on top of the list: >
+
+ :tag
+
+You can prefix it with a count and jump forward that many tags. For example:
+":3tag". CTRL-T also can be preceded with a count.
+ These commands thus allow you to go down a call tree with CTRL-] and back
+up again with CTRL-T. Use ":tags" to find out where you are.
+
+
+SPLIT WINDOWS
+
+The ":tag" command replaces the file in the current window with the one
+containing the new function. But suppose you want to see not only the old
+function but also the new one? You can split the window using the ":split"
+command followed by the ":tag" command. Vim has a shorthand command that does
+both: >
+ :stag tagname
+
+To split the current window and jump to the tag under the cursor use this
+command: >
+
+ CTRL-W ]
+
+If a count is specified, the new window will be that many lines high.
+
+
+MORE TAGS FILES
+
+When you have files in many directories, you can create a tags file in each of
+them. Vim will then only be able to jump to tags within that directory.
+ To find more tags files, set the 'tags' option to include all the relevant
+tags files. Example: >
+
+ :set tags=./tags,./../tags,./*/tags
+
+This finds a tags file in the same directory as the current file, one
+directory level higher and in all subdirectories.
+ This is quite a number of tags files, but it may still not be enough. For
+example, when editing a file in "~/proj/src", you will not find the tags file
+"~/proj/sub/tags". For this situation Vim offers to search a whole directory
+tree for tags files. Example: >
+
+ :set tags=~/proj/**/tags
+
+
+ONE TAGS FILE
+
+When Vim has to search many places for tags files, you can hear the disk
+rattling. It may get a bit slow. In that case it's better to spend this
+time while generating one big tags file. You might do this overnight.
+ This requires the Exuberant ctags program, mentioned above. It offers an
+argument to search a whole directory tree: >
+
+ cd ~/proj
+ ctags -R .
+
+The nice thing about this is that Exuberant ctags recognizes various file
+types. Thus this doesn't work just for C and C++ programs, also for Eiffel
+and even Vim scripts. See the ctags documentation to tune this.
+ Now you only need to tell Vim where your big tags file is: >
+
+ :set tags=~/proj/tags
+
+
+MULTIPLE MATCHES
+
+When a function is defined multiple times (or a method in several classes),
+the ":tag" command will jump to the first one. If there is a match in the
+current file, that one is used first.
+ You can now jump to other matches for the same tag with: >
+
+ :tnext
+
+Repeat this to find further matches. If there are many, you can select which
+one to jump to: >
+
+ :tselect tagname
+
+Vim will present you with a list of choices:
+
+ # pri kind tag file ~
+ 1 F f mch_init os_amiga.c ~
+ mch_init() ~
+ 2 F f mch_init os_mac.c ~
+ mch_init() ~
+ 3 F f mch_init os_msdos.c ~
+ mch_init(void) ~
+ 4 F f mch_init os_riscos.c ~
+ mch_init() ~
+ Enter nr of choice (<CR> to abort): ~
+
+You can now enter the number (in the first column) of the match that you would
+like to jump to. The information in the other columns give you a good idea of
+where the match is defined.
+
+To move between the matching tags, these commands can be used:
+
+ :tfirst go to first match
+ :[count]tprevious go to [count] previous match
+ :[count]tnext go to [count] next match
+ :tlast go to last match
+
+If [count] is omitted then one is used.
+
+
+GUESSING TAG NAMES
+
+Command line completion is a good way to avoid typing a long tag name. Just
+type the first bit and press <Tab>: >
+
+ :tag write_<Tab>
+
+You will get the first match. If it's not the one you want, press <Tab> until
+you find the right one.
+ Sometimes you only know part of the name of a function. Or you have many
+tags that start with the same string, but end differently. Then you can tell
+Vim to use a pattern to find the tag.
+ Suppose you want to jump to a tag that contains "block". First type
+this: >
+
+ :tag /block
+
+Now use command line completion: press <Tab>. Vim will find all tags that
+contain "block" and use the first match.
+ The "/" before a tag name tells Vim that what follows is not a literal tag
+name, but a pattern. You can use all the items for search patterns here. For
+example, suppose you want to select a tag that starts with "write_": >
+
+ :tselect /^write_
+
+The "^" specifies that the tag starts with "write_". Otherwise it would also
+be found halfway a tag name. Similarly "$" at the end makes sure the pattern
+matches until the end of a tag.
+
+
+A TAGS BROWSER
+
+Since CTRL-] takes you to the definition of the identifier under the cursor,
+you can use a list of identifier names as a table of contents. Here is an
+example.
+ First create a list of identifiers (this requires Exuberant ctags): >
+
+ ctags --c-types=f -f functions *.c
+
+Now start Vim without a file, and edit this file in Vim, in a vertically split
+window: >
+
+ vim
+ :vsplit functions
+
+The window contains a list of all the functions. There is some more stuff,
+but you can ignore that. Do ":setlocal ts=99" to clean it up a bit.
+ In this window, define a mapping: >
+
+ :nnoremap <buffer> <CR> 0ye<C-W>w:tag <C-R>"<CR>
+
+Move the cursor to the line that contains the function you want to go to.
+Now press <Enter>. Vim will go to the other window and jump to the selected
+function.
+
+
+RELATED ITEMS
+
+You can set 'ignorecase' to make case in tag names be ignored.
+
+The 'tagbsearch' option tells if the tags file is sorted or not. The default
+is to assume a sorted tags file, which makes a tags search a lot faster, but
+doesn't work if the tags file isn't sorted.
+
+The 'taglength' option can be used to tell Vim the number of significant
+characters in a tag.
+
+When you use the SNiFF+ program, you can use the Vim interface to it |sniff|.
+SNiFF+ is a commercial program.
+
+Cscope is a free program. It does not only find places where an identifier is
+declared, but also where it is used. See |cscope|.
+
+==============================================================================
+*29.2* The preview window
+
+When you edit code that contains a function call, you need to use the correct
+arguments. To know what values to pass you can look at how the function is
+defined. The tags mechanism works very well for this. Preferably the
+definition is displayed in another window. For this the preview window can be
+used.
+ To open a preview window to display the function "write_char": >
+
+ :ptag write_char
+
+Vim will open a window, and jumps to the tag "write_char". Then it takes you
+back to the original position. Thus you can continue typing without the need
+to use a CTRL-W command.
+ If the name of a function appears in the text, you can get its definition
+in the preview window with: >
+
+ CTRL-W }
+
+There is a script that automatically displays the text where the word under
+the cursor was defined. See |CursorHold-example|.
+
+To close the preview window use this command: >
+
+ :pclose
+
+To edit a specific file in the preview window, use ":pedit". This can be
+useful to edit a header file, for example: >
+
+ :pedit defs.h
+
+Finally, ":psearch" can be used to find a word in the current file and any
+included files and display the match in the preview window. This is
+especially useful when using library functions, for which you do not have a
+tags file. Example: >
+
+ :psearch popen
+
+This will show the "stdio.h" file in the preview window, with the function
+prototype for popen():
+
+ FILE *popen __P((const char *, const char *)); ~
+
+You can specify the height of the preview window, when it is opened, with the
+'previewheight' option.
+
+==============================================================================
+*29.3* Moving through a program
+
+Since a program is structured, Vim can recognize items in it. Specific
+commands can be used to move around.
+ C programs often contain constructs like this:
+
+ #ifdef USE_POPEN ~
+ fd = popen("ls", "r") ~
+ #else ~
+ fd = fopen("tmp", "w") ~
+ #endif ~
+
+But then much longer, and possibly nested. Position the cursor on the
+"#ifdef" and press %. Vim will jump to the "#else". Pressing % again takes
+you to the "#endif". Another % takes you to the "#ifdef" again.
+ When the construct is nested, Vim will find the matching items. This is a
+good way to check if you didn't forget an "#endif".
+ When you are somewhere inside a "#if" - "#endif", you can jump to the start
+of it with: >
+
+ [#
+
+If you are not after a "#if" or "#ifdef" Vim will beep. To jump forward to
+the next "#else" or "#endif" use: >
+
+ ]#
+
+These two commands skip any "#if" - "#endif" blocks that they encounter.
+Example:
+
+ #if defined(HAS_INC_H) ~
+ a = a + inc(); ~
+ # ifdef USE_THEME ~
+ a += 3; ~
+ # endif ~
+ set_width(a); ~
+
+With the cursor in the last line, "[#" moves to the first line. The "#ifdef"
+- "#endif" block in the middle is skipped.
+
+
+MOVING IN CODE BLOCKS
+
+In C code blocks are enclosed in {}. These can get pretty long. To move to
+the start of the outer block use the "[[" command. Use "][" to find the end.
+This assumes that the "{" and "}" are in the first column.
+ The "[{" command moves to the start of the current block. It skips over
+pairs of {} at the same level. "]}" jumps to the end.
+ An overview:
+
+ function(int a)
+ +-> {
+ | if (a)
+ | +-> {
+ [[ | | for (;;) --+
+ | | +-> { |
+ | [{ | | foo(32); | --+
+ | | [{ | if (bar(a)) --+ | ]} |
+ +-- | +-- break; | ]} | |
+ | } <-+ | | ][
+ +-- foobar(a) | |
+ } <-+ |
+ } <-+
+
+When writing C++ or Java, the outer {} block is for the class. The next level
+of {} is for a method. When somewhere inside a class use "[m" to find the
+previous start of a method. "]m" finds the next end of a method.
+
+Additionally, "[]" moves backward to the end of a function and "]]" moves
+forward to the start of the next function. The end of a function is defined
+by a "}" in the first column.
+
+ int func1(void)
+ {
+ return 1;
+ +----------> }
+ |
+ [] | int func2(void)
+ | +-> {
+ | [[ | if (flag)
+ start +-- +-- return flag;
+ | ][ | return 2;
+ | +-> }
+ ]] |
+ | int func3(void)
+ +----------> {
+ return 3;
+ }
+
+Don't forget you can also use "%" to move between matching (), {} and [].
+That also works when they are many lines apart.
+
+
+MOVING IN BRACES
+
+The "[(" and "])" commands work similar to "[{" and "]}", except that they
+work on () pairs instead of {} pairs.
+>
+ [(
+< <--------------------------------
+ <-------
+ if (a == b && (c == d || (e > f)) && x > y) ~
+ -------------->
+ --------------------------------> >
+ ])
+
+MOVING IN COMMENTS
+
+To move back to the start of a comment use "[/". Move forward to the end of a
+comment with "]/". This only works for /* - */ comments.
+
+ +-> +-> /*
+ | [/ | * A comment about --+
+ [/ | +-- * wonderful life. | ]/
+ | */ <-+
+ |
+ +-- foo = bar * 3; --+
+ | ]/
+ /* a short comment */ <-+
+
+==============================================================================
+*29.4* Finding global identifiers
+
+You are editing a C program and wonder if a variable is declared as "int" or
+"unsigned". A quick way to find this is with the "[I" command.
+ Suppose the cursor is on the word "column". Type: >
+
+ [I
+
+Vim will list the matching lines it can find. Not only in the current file,
+but also in all included files (and files included in them, etc.). The result
+looks like this:
+
+ structs.h ~
+ 1: 29 unsigned column; /* column number */ ~
+
+The advantage over using tags or the preview window is that included files are
+searched. In most cases this results in the right declaration to be found.
+Also when the tags file is out of date. Also when you don't have tags for the
+included files.
+ However, a few things must be right for "[I" to do its work. First of all,
+the 'include' option must specify how a file is included. The default value
+works for C and C++. For other languages you will have to change it.
+
+
+LOCATING INCLUDED FILES
+
+ Vim will find included files in the places specified with the 'path'
+option. If a directory is missing, some include files will not be found. You
+can discover this with this command: >
+
+ :checkpath
+
+It will list the include files that could not be found. Also files included
+by the files that could be found. An example of the output:
+
+ --- Included files not found in path --- ~
+ <io.h> ~
+ vim.h --> ~
+ <functions.h> ~
+ <clib/exec_protos.h> ~
+
+The "io.h" file is included by the current file and can't be found. "vim.h"
+can be found, thus ":checkpath" goes into this file and checks what it
+includes. The "functions.h" and "clib/exec_protos.h" files, included by
+"vim.h" are not found.
+
+ Note:
+ Vim is not a compiler. It does not recognize "#ifdef" statements.
+ This means every "#include" statement is used, also when it comes
+ after "#if NEVER".
+
+To fix the files that could not be found, add a directory to the 'path'
+option. A good place to find out about this is the Makefile. Look out for
+lines that contain "-I" items, like "-I/usr/local/X11". To add this directory
+use: >
+
+ :set path+=/usr/local/X11
+
+When there are many subdirectories, you an use the "*" wildcard. Example: >
+
+ :set path+=/usr/*/include
+
+This would find files in "/usr/local/include" as well as "/usr/X11/include".
+
+When working on a project with a whole nested tree of included files, the "**"
+items is useful. This will search down in all subdirectories. Example: >
+
+ :set path+=/projects/invent/**/include
+
+This will find files in the directories:
+
+ /projects/invent/include ~
+ /projects/invent/main/include ~
+ /projects/invent/main/os/include ~
+ etc.
+
+There are even more possibilities. Check out the 'path' option for info.
+ If you want to see which included files are actually found, use this
+command: >
+
+ :checkpath!
+
+You will get a (very long) list of included files, the files they include, and
+so on. To shorten the list a bit, Vim shows "(Already listed)" for files that
+were found before and doesn't list the included files in there again.
+
+
+JUMPING TO A MATCH
+
+"[I" produces a list with only one line of text. When you want to have a
+closer look at the first item, you can jump to that line with the command: >
+
+ [<Tab>
+
+You can also use "[ CTRL-I", since CTRL-I is the same as pressing <Tab>.
+
+The list that "[I" produces has a number at the start of each line. When you
+want to jump to another item than the first one, type the number first: >
+
+ 3[<Tab>
+
+Will jump to the third item in the list. Remember that you can use CTRL-O to
+jump back to where you started from.
+
+
+RELATED COMMANDS
+
+ [i only lists the first match
+ ]I only lists items below the cursor
+ ]i only lists the first item below the cursor
+
+
+FINDING DEFINED IDENTIFIERS
+
+The "[I" command finds any identifier. To find only macros, defined with
+"#define" use: >
+
+ [D
+
+Again, this searches in included files. The 'define' option specifies what a
+line looks like that defines the items for "[D". You could change it to make
+it work with other languages than C or C++.
+ The commands related to "[D" are:
+
+ [d only lists the first match
+ ]D only lists items below the cursor
+ ]d only lists the first item below the cursor
+
+==============================================================================
+*29.5* Finding local identifiers
+
+The "[I" command searches included files. To search in the current file only,
+and jump to the first place where the word under the cursor is used: >
+
+ gD
+
+Hint: Goto Definition. This command is very useful to find a variable or
+function that was declared locally ("static", in C terms). Example (cursor on
+"counter"):
+
+ +-> static int counter = 0;
+ |
+ | int get_counter(void)
+ gD | {
+ | ++counter;
+ +-- return counter;
+ }
+
+To restrict the search even further, and look only in the current function,
+use this command: >
+
+ gd
+
+This will go back to the start of the current function and find the first
+occurrence of the word under the cursor. Actually, it searches backwards to
+an empty line above the a "{" in the first column. From there it searches
+forward for the identifier. Example (cursor on "idx"):
+
+ int find_entry(char *name)
+ {
+ +-> int idx;
+ |
+ gd | for (idx = 0; idx < table_len; ++idx)
+ | if (strcmp(table[idx].name, name) == 0)
+ +-- return idx;
+ }
+
+==============================================================================
+
+Next chapter: |usr_30.txt| Editing programs
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_30.txt b/runtime/doc/usr_30.txt
new file mode 100644
index 000000000..c88f060fa
--- /dev/null
+++ b/runtime/doc/usr_30.txt
@@ -0,0 +1,643 @@
+*usr_30.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Editing programs
+
+
+Vim has various commands that aid in writing computer programs. Compile a
+program and directly jump to reported errors. Automatically set the indent
+for many languages and format comments.
+
+|30.1| Compiling
+|30.2| Indenting C files
+|30.3| Automatic indenting
+|30.4| Other indenting
+|30.5| Tabs and spaces
+|30.6| Formatting comments
+
+ Next chapter: |usr_31.txt| Exploiting the GUI
+ Previous chapter: |usr_29.txt| Moving through programs
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*30.1* Compiling
+
+Vim has a set of so called "quickfix" commands. They enable you to compile a
+program from within Vim and then go through the errors generated and fix them
+(hopefully). You can then recompile and fix any new errors that are found
+until finally your program compiles without any error.
+
+The following command runs the program "make" (supplying it with any argument
+you give) and captures the results: >
+
+ :make {arguments}
+
+If errors were generated, they are captured and the editor positions you where
+the first error occurred.
+ Take a look at an example ":make" session. (Typical :make sessions generate
+far more errors and fewer stupid ones.) After typing ":make" the screen looks
+like this:
+
+ :!make | &tee /tmp/vim215953.err ~
+ gcc -g -Wall -o prog main.c sub.c ~
+ main.c: In function 'main': ~
+ main.c:6: too many arguments to function 'do_sub' ~
+ main.c: At top level: ~
+ main.c:10: parse error before '}' ~
+ make: *** [prog] Error 1 ~
+
+ 2 returned ~
+ "main.c" 11L, 111C ~
+ (3 of 6): too many arguments to function 'do_sub' ~
+ Hit ENTER or type command to continue ~
+
+From this you can see that you have errors in the file "main.c". When you
+press <Enter>, Vim displays the file "main.c", with the cursor positioned on
+line 6, the first line with an error. You did not need to specify the file or
+the line number, Vim knew where to go by looking in the error messages.
+
+ +---------------------------------------------------+
+ |int main() |
+ |{ |
+ | int i=3; |
+ cursor -> | do_sub("foo"); |
+ | ++i; |
+ | return (0); |
+ |} |
+ |} |
+ | ~ |
+ |(3 of 12): too many arguments to function 'do_sub' |
+ +---------------------------------------------------+
+
+The following command goes to where the next error occurs: >
+
+ :cnext
+
+Vim jumps to line 10, the last line in the file, where there is an extra '}'.
+ When there is not enough room, Vim will shorten the error message. To see
+the whole message use: >
+
+ :cc
+
+You can get an overview of all the error messages with the ":clist" command.
+The output looks like this: >
+
+ :clist
+< 3 main.c: 6:too many arguments to function 'do_sub' ~
+ 5 main.c: 10:parse error before '}' ~
+
+Only the lines where Vim recognized a file name and line number are listed
+here. It assumes those are the interesting lines and the rest is just boring
+messages. However, sometimes unrecognized lines do contain something you want
+to see. Output from the linker, for example, about an undefined function.
+To see all the messages add a "!" to the command: >
+
+ :clist!
+< 1 gcc -g -Wall -o prog main.c sub.c ~
+ 2 main.c: In function 'main': ~
+ 3 main.c:6: too many arguments to function 'do_sub' ~
+ 4 main.c: At top level: ~
+ 5 main.c:10: parse error before '}' ~
+ 6 make: *** [prog] Error 1 ~
+
+Vim will highlight the current error. To go back to the previous error, use:
+>
+ :cprevious
+
+Other commands to move around in the error list:
+
+ :cfirst to first error
+ :clast to last error
+ :cc 3 to error nr 3
+
+
+USING ANOTHER COMPILER
+
+The name of the program to run when the ":make" command is executed is defined
+by the 'makeprg' option. Usually this is set to "make", but Visual C++ users
+should set this to "nmake" by executing the following command: >
+
+ :set makeprg=nmake
+
+You can also include arguments in this option. Special characters need to
+be escaped with a backslash. Example: >
+
+ :set makeprg=nmake\ -f\ project.mak
+
+You can include special Vim keywords in the command specification. The %
+character expands to the name of the current file. So if you execute the
+command: >
+ :set makeprg=make\ %
+
+When you are editing main.c, then ":make" executes the following command: >
+
+ make main.c
+
+This is not too useful, so you will refine the command a little and use the :r
+(root) modifier: >
+
+ :set makeprg=make\ %:r.o
+
+Now the command executed is as follows: >
+
+ make main.o
+
+More about these modifiers here: |filename-modifiers|.
+
+
+OLD ERROR LISTS
+
+Suppose you ":make" a program. There is an warning message in one file and an
+error message in another. You fix the error and use ":make" again to check if
+it was really fixed. Now you want to look at the warning message. It doesn't
+show up in the last error list, since the file with the warning wasn't
+compiled again. You can go back to the previous error list with: >
+
+ :colder
+
+Then use ":clist" and ":cc {nr}" to jump to the place with the warning.
+ To go forward to the next error list: >
+
+ :cnewer
+
+Vim remembers ten error lists.
+
+
+SWITCHING COMPILERS
+
+You have to tell Vim what format the error messages are that your compiler
+produces. This is done with the 'errorformat' option. The syntax of this
+option is quite complicated and it can be made to fit almost any compiler.
+You can find the explanation here: |errorformat|.
+
+You might be using various different compilers. Setting the 'makeprg' option,
+and especially the 'errorformat' each time is not easy. Vim offers a simple
+method for this. For example, to switch to using the Microsoft Visual C++
+compiler: >
+
+ :compiler msvc
+
+This will find the Vim script for the "msvc" compiler and set the appropriate
+options.
+ You can write your own compiler files. See |write-compiler-plugin|.
+
+
+OUTPUT REDIRECTION
+
+The ":make" command redirects the output of the executed program to an error
+file. How this works depends on various things, such as the 'shell'. If your
+":make" command doesn't capture the output, check the 'makeef' and
+'shellpipe' options. The 'shellquote' and 'shellxquote' options might also
+matter.
+
+In case you can't get ":make" to redirect the file for you, an alternative is
+to compile the program in another window and redirect the output into a file.
+Then have Vim read this file with: >
+
+ :cfile {filename}
+
+Jumping to errors will work like with the ":make" command.
+
+==============================================================================
+*30.2* Indenting C files
+
+A program is much easier to understand when the lines have been properly
+indented. Vim offers various ways to make this less work.
+ For C programs set the 'cindent' option. Vim knows a lot about C programs
+and will try very hard to automatically set the indent for you. Set the
+'shiftwidth' option to the amount of spaces you want for a deeper level. Four
+spaces will work fine. One ":set" command will do it: >
+
+ :set cindent shiftwidth=4
+
+With this option enabled, when you type something such as "if (x)", the next
+line will automatically be indented an additional level.
+
+ if (flag)
+ Automatic indent ---> do_the_work();
+ Automatic unindent <-- if (other_flag) {
+ Automatic indent ---> do_file();
+ keep indent do_some_more();
+ Automatic unindent <-- }
+
+When you type something in curly braces ({}), the text will be indented at the
+start and unindented at the end. The unindenting will happen after typing the
+'}', since Vim can't guess what you are going to type.
+
+One side effect of automatic indentation is that it helps you catch errors in
+your code early. When you type a } to finish a function, only to find that
+the automatic indentation gives it more indent than what you expected, there
+is probably a } missing. Use the "%" command to find out which { matches the
+} you typed.
+ A missing ) and ; also cause extra indent. Thus if you get more white
+space than you would expect, check the preceding lines.
+
+When you have code that is badly formatted, or you inserted and deleted lines,
+you need to re-indent the lines. The "=" operator does this. The simplest
+form is: >
+
+ ==
+
+This indents the current line. Like with all operators, there are three ways
+to use it. In Visual mode "=" indents the selected lines. A useful text
+object is "a{". This selects the current {} block. Thus, to re-indent the
+code code block the cursor is in: >
+
+ =a{
+
+I you have really badly indented code, you can re-indent the whole file with:
+>
+ gg=G
+
+However, don't do this in files that have been carefully indented manually.
+The automatic indenting does a good job, but in some situations you might want
+to overrule it.
+
+
+SETTING INDENT STYLE
+
+Different people have different styles of indentation. By default Vim does a
+pretty good job of indenting in a way that 90% of programmers do. There are
+different styles, however; so if you want to, you can customize the
+indentation style with the 'cinoptions' option.
+ By default 'cinoptions' is empty and Vim uses the default style. You can
+add various items where you want something different. For example, to make
+curly braces be placed like this:
+
+ if (flag) ~
+ { ~
+ i = 8; ~
+ j = 0; ~
+ } ~
+
+Use this command: >
+
+ :set cinoptions+={2
+
+There are many of these items. See |cinoptions-values|.
+
+==============================================================================
+*30.3* Automatic indenting
+
+You don't want to switch on the 'cindent' option manually every time you edit
+a C file. This is how you make it work automatically: >
+
+ :filetype indent on
+
+Actually, this does a lot more than switching on 'cindent' for C files. First
+of all, it enables detecting the type of a file. That's the same as what is
+used for syntax highlighting.
+ When the filetype is known, Vim will search for an indent file for this
+type of file. The Vim distribution includes a number of these for various
+programming languages. This indent file will then prepare for automatic
+indenting specifically for this file.
+
+If you don't like the automatic indenting, you can switch it off again: >
+
+ :filetype indent off
+
+If you don't like the indenting for one specific type of file, this is how you
+avoid it. Create a file with just this one line: >
+
+ :let b:did_indent = 1
+
+Now you need to write this in a file with a specific name:
+
+ {directory}/indent/{filetype}.vim
+
+The {filetype} is the name of the file type, such as "cpp" or "java". You can
+see the exact name that Vim detected with this command: >
+
+ :set filetype
+
+In this file the output is:
+
+ filetype=help ~
+
+This you would use "help" for {filetype}.
+ For the {directory} part you need to use your runtime directory. Look at
+the output of this command: >
+
+ set runtimepath
+
+Now use the first item, the name before the first comma. Thus if the output
+looks like this:
+
+ runtimepath=~/.vim,/usr/local/share/vim/vim60/runtime,~/.vim/after ~
+
+You use "~/.vim" for {directory}. Then the resulting file name is:
+
+ ~/.vim/indent/help.vim ~
+
+Instead of switching the indenting off, you could write your own indent file.
+How to do that is explained here: |indent-expression|.
+
+==============================================================================
+*30.4* Other indenting
+
+The most simple form of automatic indenting is with the 'autoindent' option.
+It uses the indent from the previous line. A bit smarter is the 'smartindent'
+option. This is useful for languages where no indent file is available.
+'smartindent'is not as smart as 'cindent', but smarter than 'autoindent'.
+ With 'smartindent' set, an extra level of indentation is added for each {
+and removed for each }. An extra level of indentation will also be added for
+any of the words in the 'cinwords' option. Lines that begin with # are
+treated specially: all indentation is removed. This is done so that
+preprocessor directives will all start in column 1. The indentation is
+restored for the next line.
+
+
+CORRECTING INDENTS
+
+When you are using 'autoindent' or 'smartindent' to get the indent of the
+previous line, there will be many times when you need to add or remove one
+'shiftwidth' worth of indent. A quick way to do this is using the CTRL-D and
+CTRL-T commands in Insert mode.
+ For example, you are typing a shell script that is supposed to look like
+this:
+
+ if test -n a; then ~
+ echo a ~
+ echo "-------" ~
+ fi ~
+
+Start off by setting these option: >
+
+ :set autoindent shiftwidth=3
+
+You start by typing the first line, <Enter> and the start of the second line:
+
+ if test -n a; then ~
+ echo ~
+
+Now you see that you need an extra indent. Type CTRL-T. The result:
+
+ if test -n a; then ~
+ echo ~
+
+The CTRL-T command, in Insert mode, adds one 'shiftwidth' to the indent, no
+matter where in the line you are.
+ You continue typing the second line, <Enter> and the third line. This time
+the indent is OK. Then <Enter> and the last line. Now you have this:
+
+ if test -n a; then ~
+ echo a ~
+ echo "-------" ~
+ fi ~
+
+To remove the superfluous indent in the last line press CTRL-D. This deletes
+one 'shiftwidth' worth of indent, no matter where you are in the line.
+ When you are in Normal mode, you can use the ">>" and "<<" commands to
+shift lines. ">" and "<" are operators, thus you have the usual three ways to
+specify the lines you want to indent. A useful combination is: >
+
+ >i{
+
+This adds one indent to the current block of lines, inside {}. The { and }
+lines themselves are left unmodified. ">a{" includes them. In this example
+the cursor is on "printf":
+
+ original text after ">i{" after ">a{"
+
+ if (flag) if (flag) if (flag) ~
+ { { { ~
+ printf("yes"); printf("yes"); printf("yes"); ~
+ flag = 0; flag = 0; flag = 0; ~
+ } } } ~
+
+==============================================================================
+*30.5* Tabs and spaces
+
+'tabstop' is set to eight by default. Although you can change it, you quickly
+run into trouble later. Other programs won't know what tabstop value you
+used. They probably use the default value of eight, and your text suddenly
+looks very different. Also, most printers use a fixed tabstop value of eight.
+Thus it's best to keep 'tabstop' alone. (If you edit a file which was written
+with a different tabstop setting, see |25.3| for how to fix that.)
+ For indenting lines in a program, using a multiple of eight spaces makes
+you quickly run into the right border of the window. Using a single space
+doesn't provide enough visual difference. Many people prefer to use four
+spaces, a good compromise.
+ Since a <Tab> is eight spaces and you want to use an indent of four spaces,
+you can't use a <Tab> character to make your indent. There are two ways to
+handle this:
+
+1. Use a mix of <Tab> and space characters. Since a <Tab> takes the place of
+ eight spaces, you have fewer characters in your file. Inserting a <Tab>
+ is quicker than eight spaces. Backspacing works faster as well.
+
+2. Use spaces only. This avoids the trouble with programs that use a
+ different tabstop value.
+
+Fortunately, Vim supports both methods quite well.
+
+
+SPACES AND TABS
+
+If you are using a combination of tabs and spaces, you just edit normally.
+The Vim defaults do a fine job of handling things.
+ You can make life a little easier by setting the 'softtabstop' option.
+This option tells Vim to make the <Tab> key look and feel as if tabs were set
+at the value of 'softtabstop', but actually use a combination of tabs and
+spaces.
+ After you execute the following command, every time you press the <Tab> key
+the cursor moves to the next 4-column boundary: >
+
+ :set softtabstop=4
+
+When you start in the first column and press <Tab>, you get 4 spaces inserted
+in your text. The second time, Vim takes out the 4 spaces and puts in a <Tab>
+(thus taking you to column 8). Thus Vim uses as many <Tab>s as possible, and
+then fills up with spaces.
+ When backspacing it works the other way around. A <BS> will always delete
+the amount specified with 'softtabstop'. Then <Tabs> are used as many as
+possible and spaces to fill the gap.
+ The following shows what happens pressing <Tab> a few times, and then using
+<BS>. A "." stands for a space and "------->" for a <Tab>.
+
+ type result ~
+ <Tab> ....
+ <Tab><Tab> ------->
+ <Tab><Tab><Tab> ------->....
+ <Tab><Tab><Tab><BS> ------->
+ <Tab><Tab><Tab><BS><BS> ....
+
+An alternative is to use the 'smarttab' option. When it's set, Vim uses
+'shiftwidth' for a <Tab> typed in the indent of a line, and a real <Tab> when
+typed after the first non-blank character. However, <BS> doesn't work like
+with 'softtabstop'.
+
+
+JUST SPACES
+
+If you want absolutely no tabs in your file, you can set the 'expandtab'
+option: >
+
+ :set expandtab
+
+When this option is set, the <Tab> key inserts a series of spaces. Thus you
+get the same amount of white space as if a <Tab> character was inserted, but
+there isn't a real <Tab> character in your file.
+ The backspace key will delete each space by itself. Thus after typing one
+<Tab> you have to press the <BS> key up to eight times to undo it. If you are
+in the indent, pressing CTRL-D will be a lot quicker.
+
+
+CHANGING TABS IN SPACES (AND BACK)
+
+Setting 'expandtab' does not affect any existing tabs. In other words, any
+tabs in the document remain tabs. If you want to convert tabs to spaces, use
+the ":retab" command. Use these commands: >
+
+ :set expandtab
+ :%retab
+
+Now Vim will have changed all indents to use spaces instead of tabs. However,
+all tabs that come after a non-blank character are kept. If you want these to
+be converted as well, add a !: >
+
+ :%retab!
+
+This is a little bit dangerous, because it can also change tabs inside a
+string. To check if these exist, you could use this: >
+
+ /"[^"\t]*\t[^"]*"
+
+It's recommended not to use hard tabs inside a string. Replace them with
+"\t" to avoid trouble.
+
+The other way around works just as well: >
+
+ :set noexpandtab
+ :%retab!
+
+==============================================================================
+*30.6* Formatting comments
+
+One of the great things about Vim is that it understands comments. You can
+ask Vim to format a comment and it will do the right thing.
+ Suppose, for example, that you have the following comment:
+
+ /* ~
+ * This is a test ~
+ * of the text formatting. ~
+ */ ~
+
+You then ask Vim to format it by positioning the cursor at the start of the
+comment and type: >
+
+ gq]/
+
+"gq" is the operator to format text. "]/" is the motion that takes you to the
+end of a comment. The result is:
+
+ /* ~
+ * This is a test of the text formatting. ~
+ */ ~
+
+Notice that Vim properly handled the beginning of each line.
+ An alternative is to select the text that is to be formatted in Visual mode
+and type "gq".
+
+To add a new line to the comment, position the cursor on the middle line and
+press "o". The result looks like this:
+
+ /* ~
+ * This is a test of the text formatting. ~
+ * ~
+ */ ~
+
+Vim has automatically inserted a star and a space for you. Now you can type
+the comment text. When it gets longer than 'textwidth', Vim will break the
+line. Again, the star is inserted automatically:
+
+ /* ~
+ * This is a test of the text formatting. ~
+ * Typing a lot of text here will make Vim ~
+ * break ~
+ */ ~
+
+For this to work some flags must be present in 'formatoptions':
+
+ r insert the star when typing <Enter> in Insert mode
+ o insert the star when using "o" or "O" in Normal mode
+ c break comment text according to 'textwidth'
+
+See |fo-table| for more flags.
+
+
+DEFINING A COMMENT
+
+The 'comments' option defines what a comment looks like. Vim distinguishes
+between a single-line comment and a comment that has a different start, end
+and middle part.
+ Many single-line comments start with a specific character. In C++ // is
+used, in Makefiles #, in Vim scripts ". For example, to make Vim understand
+C++ comments: >
+
+ :set comments=://
+
+The colon separates the flags of an item from the text by which the comment is
+recognized. The general form of an item in 'comments' is:
+
+ {flags}:{text}
+
+The {flags} part can be empty, as in this case.
+ Several of these items can be concatenated, separated by commas. This
+allows recognizing different types of comments at the same time. For example,
+let's edit an e-mail message. When replying, the text that others wrote is
+preceded with ">" and "!" characters. This command would work: >
+
+ :set comments=n:>,n:!
+
+There are two items, one for comments starting with ">" and one for comments
+that start with "!". Both use the flag "n". This means that these comments
+nest. Thus a line starting with ">" may have another comment after the ">".
+This allows formatting a message like this:
+
+ > ! Did you see that site? ~
+ > ! It looks really great. ~
+ > I don't like it. The ~
+ > colors are terrible. ~
+ What is the URL of that ~
+ site? ~
+
+Try setting 'textwidth' to a different value, e.g., 80, and format the text by
+Visually selecting it and typing "gq". The result is:
+
+ > ! Did you see that site? It looks really great. ~
+ > I don't like it. The colors are terrible. ~
+ What is the URL of that site? ~
+
+You will notice that Vim did not move text from one type of comment to
+another. The "I" in the second line would have fit at the end of the first
+line, but since that line starts with "> !" and the second line with ">", Vim
+knows that this is a different kind of comment.
+
+
+A THREE PART COMMENT
+
+A C comment starts with "/*", has "*" in the middle and "*/" at the end. The
+entry in 'comments' for this looks like this: >
+
+ :set comments=s1:/*,mb:*,ex:*/
+
+The start is defined with "s1:/*". The "s" indicates the start of a
+three-piece comment. The colon separates the flags from the text by which the
+comment is recognized: "/*". There is one flag: "1". This tells Vim that the
+middle part has an offset of one space.
+ The middle part "mb:*" starts with "m", which indicates it is a middle
+part. The "b" flag means that a blank must follow the text. Otherwise Vim
+would consider text like "*pointer" also to be the middle of a comment.
+ The end part "ex:*/" has the "e" for identification. The "x" flag has a
+special meaning. It means that after Vim automatically inserted a star,
+typing / will remove the extra space.
+
+For more details see |format-comments|.
+
+==============================================================================
+
+Next chapter: |usr_31.txt| Exploiting the GUI
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_31.txt b/runtime/doc/usr_31.txt
new file mode 100644
index 000000000..a836b0442
--- /dev/null
+++ b/runtime/doc/usr_31.txt
@@ -0,0 +1,267 @@
+*usr_31.txt* For Vim version 7.0aa. Last change: 2003 Oct 21
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Exploiting the GUI
+
+
+Vim works well in a terminal, but the GUI has a few extra items. A file
+browser can be used for commands that use a file. A dialog to make a choice
+between alternatives. Use keyboard shortcuts to access menu items quickly.
+
+|31.1| The file browser
+|31.2| Confirmation
+|31.3| Menu shortcuts
+|31.4| Vim window position and size
+|31.5| Various
+
+ Next chapter: |usr_40.txt| Make new commands
+ Previous chapter: |usr_30.txt| Editing programs
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*31.1* The file browser
+
+When using the File/Open... menu you get a file browser. This makes it easier
+to find the file you want to edit. But what if you want to split a window to
+edit another file? There is no menu entry for this. You could first use
+Window/Split and then File/Open..., but that's more work.
+ Since you are typing most commands in Vim, opening the file browser with a
+typed command is possible as well. To make the split command use the file
+browser, prepend "browse": >
+
+ :browse split
+
+Select a file and then the ":split" command will be executed with it. If you
+cancel the file dialog nothing happens, the window isn't split.
+ You can also specify a file name argument. This is used to tell the file
+browser where to start. Example: >
+
+ :browse split /etc
+
+The file browser will pop up, starting in the directory "/etc".
+
+The ":browse" command can be prepended to just about any command that opens a
+file.
+ If no directory is specified, Vim will decide where to start the file
+browser. By default it uses the same directory as the last time. Thus when
+you used ":browse split" and selected a file in "/usr/local/share", the next
+time you use a ":browse" it will start in "/usr/local/share" again.
+ This can be changed with the 'browsedir' option. It can have one of three
+values:
+
+ last Use the last directory browsed (default)
+ buffer Use the same directory as the current buffer
+ current use the current directory
+
+For example, when you are in the directory "/usr", editing the file
+"/usr/local/share/readme", then the command: >
+
+ :set browsedir=buffer
+ :browse edit
+
+Will start the browser in "/usr/local/share". Alternatively: >
+
+ :set browsedir=current
+ :browse edit
+
+Will start the browser in "/usr".
+
+ Note:
+ To avoid using the mouse, most file browsers offer using key presses
+ to navigate. Since this is different for every system, it is not
+ explained here. Vim uses a standard browser when possible, your
+ system documentation should contain an explanation on the keyboard
+ shortcuts somewhere.
+
+When you are not using the GUI version, you could use the file explorer window
+to select files like in a file browser. However, this doesn't work for the
+":browse" command. See |file-explorer|.
+
+==============================================================================
+*31.2* Confirmation
+
+Vim protects you from accidentally overwriting a file and other ways to lose
+changes. If you do something that might be a bad thing to do, Vim produces an
+error message and suggests appending ! if you really want to do it.
+ To avoid retyping the command with the !, you can make Vim give you a
+dialog. You can then press "OK" or "Cancel" to tell Vim what you want.
+ For example, you are editing a file and made changes to it. You start
+editing another file with: >
+
+ :confirm edit foo.txt
+
+Vim will pop up a dialog that looks something like this:
+
+ +-----------------------------------+
+ | |
+ | ? Save changes to "bar.txt"? |
+ | |
+ | YES NO CANCEL |
+ +-----------------------------------+
+
+Now make your choice. If you do want to save the changes, select "YES". If
+you want to lose the changes for ever: "NO". If you forgot what you were
+doing and want to check what really changed use "CANCEL". You will be back in
+the same file, with the changes still there.
+
+Just like ":browse", the ":confirm" command can be prepended to most commands
+that edit another file. They can also be combined: >
+
+ :confirm browse edit
+
+This will produce a dialog when the current buffer was changed. Then it will
+pop up a file browser to select the file to edit.
+
+ Note:
+ In the dialog you can use the keyboard to select the choice.
+ Typically the <Tab> key and the cursor keys change the choice.
+ Pressing <Enter> selects the choice. This depends on the system
+ though.
+
+When you are not using the GUI, the ":confirm" command works as well. Instead
+of popping up a dialog, Vim will print the message at the bottom of the Vim
+window and ask you to press a key to make a choice. >
+
+ :confirm edit main.c
+< Save changes to "Untitled"? ~
+ [Y]es, (N)o, (C)ancel: ~
+
+You can now press the single key for the choice. You don't have to press
+<Enter>, unlike other typing on the command line.
+
+==============================================================================
+*31.3* Menu shortcuts
+
+The keyboard is used for all Vim commands. The menus provide a simple way to
+select commands, without knowing what they are called. But you have to move
+your hand from the keyboard and grab the mouse.
+ Menus can often be selected with keys as well. This depends on your
+system, but most often it works this way. Use the <Alt> key in combination
+with the underlined letter of a menu. For example, <A-w> (<Alt> and w) pops
+up the Window menu.
+ In the Window menu, the "split" item has the p underlined. To select it,
+let go of the <Alt> key and press p.
+
+After the first selection of a menu with the <Alt> key, you can use the cursor
+keys to move through the menus. <Right> selects a submenu and <left> closes
+it. <Esc> also closes a menu. <Enter> selects a menu item.
+
+There is a conflict between using the <Alt> key to select menu items, and
+using <Alt> key combinations for mappings. The 'winaltkeys' option tells Vim
+what it should do with the <Alt> key.
+ The default value "menu" is the smart choice: If the key combination is a
+menu shortcut it can't be mapped. All other keys are available for mapping.
+ The value "no" doesn't use any <Alt> keys for the menus. Thus you must use
+the mouse for the menus, and all <Alt> keys can be mapped.
+ The value "yes" means that Vim will use any <Alt> keys for the menus. Some
+<Alt> key combinations may also do other things than selecting a menu.
+
+==============================================================================
+*31.4* Vim window position and size
+
+To see the current Vim window position on the screen use: >
+
+ :winpos
+
+This will only work in the GUI. The output may look like this:
+
+ Window position: X 272, Y 103 ~
+
+The position is given in screen pixels. Now you can use the numbers to move
+Vim somewhere else. For example, to move it to the left a hundred pixels: >
+
+ :winpos 172 103
+<
+ Note:
+ There may be a small offset between the reported position and where
+ the window moves. This is because of the border around the window.
+ This is added by the window manager.
+
+You can use this command in your startup script to position the window at a
+specific position.
+
+The size of the Vim window is computed in characters. Thus this depends on
+the size of the font being used. You can see the current size with this
+command: >
+
+ :set lines columns
+
+To change the size set the 'lines' and/or 'columns' options to a new value: >
+
+ :set lines=50
+ :set columns=80
+
+Obtaining the size works in a terminal just like in the GUI. Setting the size
+is not possible in most terminals.
+
+You can start the X-Windows version of gvim with an argument to specify the
+size and position of the window: >
+
+ gvim -geometry {width}x{height}+{x_offset}+{y_offset}
+
+{width} and {height} are in characters, {x_offset} and {y_offset} are in
+pixels. Example: >
+
+ gvim -geometry 80x25+100+300
+
+==============================================================================
+*31.5* Various
+
+You can use gvim to edit an e-mail message. In your e-mail program you must
+select gvim to be the editor for messages. When you try that, you will
+see that it doesn't work: The mail program thinks that editing is finished,
+while gvim is still running!
+ What happens is that gvim disconnects from the shell it was started in.
+That is fine when you start gvim in a terminal, so that you can do other work
+in that terminal. But when you really want to wait for gvim to finish, you
+must prevent it from disconnecting. The "-f" argument does this: >
+
+ gvim -f file.txt
+
+The "-f" stands for foreground. Now Vim will block the shell it was started
+in until you finish editing and exit.
+
+
+DELAYED START OF THE GUI
+
+On Unix it's possible to first start Vim in a terminal. That's useful if you
+do various tasks in the same shell. If you are editing a file and decide you
+want to use the GUI after all, you can start it with: >
+
+ :gui
+
+Vim will open the GUI window and no longer use the terminal. You can continue
+using the terminal for something else. The "-f" argument is used here to run
+the GUI in the foreground. You can also use ":gui -f".
+
+
+THE GVIM STARTUP FILE
+
+When gvim starts, it reads the gvimrc file. That's similar to the vimrc file
+used when starting Vim. The gvimrc file can be used for settings and commands
+that are only to be used when the GUI is going to be started. For example,
+you can set the 'lines' option to set a different window size: >
+
+ :set lines=55
+
+You don't want to do this in a terminal, since it's size is fixed (except for
+an xterm that supports resizing).
+ The gvimrc file is searched for in the same locations as the vimrc file.
+Normally it's name is "~/.gvimrc" for Unix and "$VIM/_gvimrc" for MS-Windows.
+ If for some reason you don't want to use the normal gvimrc file, you can
+specify another one with the "-U" argument: >
+
+ gvim -U thisrc ...
+
+That allows starting gvim for different kinds of editing. You could set
+another font size, for example.
+ To completely skip reading a gvimrc file: >
+
+ gvim -U NONE ...
+
+==============================================================================
+
+Next chapter: |usr_40.txt| Make new commands
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_40.txt b/runtime/doc/usr_40.txt
new file mode 100644
index 000000000..90664163e
--- /dev/null
+++ b/runtime/doc/usr_40.txt
@@ -0,0 +1,655 @@
+*usr_40.txt* For Vim version 7.0aa. Last change: 2004 Feb 13
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Make new commands
+
+
+Vim is an extensible editor. You can take a sequence of commands you use
+often and turn it into a new command. Or redefine an existing command.
+Autocommands make it possible to execute commands automatically.
+
+|40.1| Key mapping
+|40.2| Defining command-line commands
+|40.3| Autocommands
+
+ Next chapter: |usr_41.txt| Write a Vim script
+ Previous chapter: |usr_31.txt| Exploiting the GUI
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*40.1* Key mapping
+
+A simple mapping was explained in section |05.3|. The principle is that one
+sequence of key strokes is translated into another sequence of key strokes.
+This is a simple, yet powerful mechanism.
+ The simplest form is that one key is mapped to a sequence of keys. Since
+the function keys, except <F1>, have no predefined meaning in Vim, these are a
+good choice to map. Example: >
+
+ :map <F2> GoDate: <Esc>:read !date<CR>kJ
+
+This shows how three modes are used. After going to the last line with "G",
+the "o" command opens a new line and starts Insert mode. The text "Date: " is
+inserted and <Esc> takes you out of insert mode.
+ Notice the use of special keys inside <>. This is called angle bracket
+notation. You type these as separate characters, not by pressing the key
+itself. This makes the mappings better readable and you can copy and paste
+the text without problems.
+ The ":" character takes Vim to the command line. The ":read !date" command
+reads the output from the "date" command and appends it below the current
+line. The <CR> is required to execute the ":read" command.
+ At this point of execution the text looks like this:
+
+ Date: ~
+ Fri Jun 15 12:54:34 CEST 2001 ~
+
+Now "kJ" moves the cursor up and joins the lines together.
+ To decide which key or keys you use for mapping, see |map-which-keys|.
+
+
+MAPPING AND MODES
+
+The ":map" command defines remapping for keys in Normal mode. You can also
+define mappings for other modes. For example, ":imap" applies to Insert mode.
+You can use it to insert a date below the cursor: >
+
+ :imap <F2> <CR>Date: <Esc>:read !date<CR>kJ
+
+It looks a lot like the mapping for <F2> in Normal mode, only the start is
+different. The <F2> mapping for Normal mode is still there. Thus you can map
+the same key differently for each mode.
+ Notice that, although this mapping starts in Insert mode, it ends in Normal
+mode. If you want it to continue in Insert mode, append a "a" to the mapping.
+
+Here is an overview of map commands and in which mode they work:
+
+ :map Normal, Visual and Operator-pending
+ :vmap Visual
+ :nmap Normal
+ :omap Operator-pending
+ :map! Insert and Command-line
+ :imap Insert
+ :cmap Command-line
+
+Operator-pending mode is when you typed an operator character, such as "d" or
+"y", and you are expected to type the motion command or a text object. Thus
+when you type "dw", the "w" is entered in operator-pending mode.
+
+Suppose that you want to define <F7> so that the command d<F7> deletes a C
+program block (text enclosed in curly braces, {}). Similarly y<F7> would yank
+the program block into the unnamed register. Therefore, what you need to do
+is to define <F7> to select the current program block. You can do this with
+the following command: >
+
+ :omap <F7> a{
+
+This causes <F7> to perform a select block "a{" in operator-pending mode, just
+like you typed it. This mapping is useful if typing a { on your keyboard is a
+bit difficult.
+
+
+LISTING MAPPINGS
+
+To see the currently defined mappings, use ":map" without arguments. Or one
+of the variants that include the mode in which they work. The output could
+look like this:
+
+ _g :call MyGrep(1)<CR> ~
+ v <F2> :s/^/> /<CR>:noh<CR>`` ~
+ n <F2> :.,$s/^/> /<CR>:noh<CR>`` ~
+ <xHome> <Home>
+ <xEnd> <End>
+
+
+The first column of the list shows in which mode the mapping is effective.
+This is "n" for Normal mode, "i" for Insert mode, etc. A blank is used for a
+mapping defined with ":map", thus effective in both Normal and Visual mode.
+ One useful purpose of listing the mapping is to check if special keys in <>
+form have been recognized (this only works when color is supported). For
+example, when <Esc> is displayed in color, it stands for the escape character.
+When it has the same color as the other text, it is five characters.
+
+
+REMAPPING
+
+The result of a mapping is inspected for other mappings in it. For example,
+the mappings for <F2> above could be shortened to: >
+
+ :map <F2> G<F3>
+ :imap <F2> <Esc><F3>
+ :map <F3> oDate: <Esc>:read !date<CR>kJ
+
+For Normal mode <F2> is mapped to go to the last line, and then behave like
+<F3> was pressed. In Insert mode <F2> stops Insert mode with <Esc> and then
+also uses <F3>. Then <F3> is mapped to do the actual work.
+
+Suppose you hardly ever use Ex mode, and want to use the "Q" command to format
+text (this was so in old versions of Vim). This mapping will do it: >
+
+ :map Q gq
+
+But, in rare cases you need to use Ex mode anyway. Let's map "gQ" to Q, so
+that you can still go to Ex mode: >
+
+ :map gQ Q
+
+What happens now is that when you type "gQ" it is mapped to "Q". So far so
+good. But then "Q" is mapped to "gq", thus typing "gQ" results in "gq", and
+you don't get to Ex mode at all.
+ To avoid keys to be mapped again, use the ":noremap" command: >
+
+ :noremap gQ Q
+
+Now Vim knows that the "Q" is not to be inspected for mappings that apply to
+it. There is a similar command for every mode:
+
+ :noremap Normal, Visual and Operator-pending
+ :vnoremap Visual
+ :nnoremap Normal
+ :onoremap Operator-pending
+ :noremap! Insert and Command-line
+ :inoremap Insert
+ :cnoremap Command-line
+
+
+RECURSIVE MAPPING
+
+When a mapping triggers itself, it will run forever. This can be used to
+repeat an action an unlimited number of times.
+ For example, you have a list of files that contain a version number in the
+first line. You edit these files with "vim *.txt". You are now editing the
+first file. Define this mapping: >
+
+ :map ,, :s/5.1/5.2/<CR>:wnext<CR>,,
+
+Now you type ",,". This triggers the mapping. It replaces "5.1" with "5.2"
+in the first line. Then it does a ":wnext" to write the file and edit the
+next one. The mapping ends in ",,". This triggers the same mapping again,
+thus doing the substitution, etc.
+ This continues until there is an error. In this case it could be a file
+where the substitute command doesn't find a match for "5.1". You can then
+make a change to insert "5.1" and continue by typing ",," again. Or the
+":wnext" fails, because you are in the last file in the list.
+ When a mapping runs into an error halfway, the rest of the mapping is
+discarded. CTRL-C interrupts the mapping (CTRL-Break on MS-Windows).
+
+
+DELETE A MAPPING
+
+To remove a mapping use the ":unmap" command. Again, the mode the unmapping
+applies to depends on the command used:
+
+ :unmap Normal, Visual and Operator-pending
+ :vunmap Visual
+ :nunmap Normal
+ :ounmap Operator-pending
+ :unmap! Insert and Command-line
+ :iunmap Insert
+ :cunmap Command-line
+
+There is a trick to define a mapping that works in Normal and Operator-pending
+mode, but not in Visual mode. First define it for all three modes, then
+delete it for Visual mode: >
+
+ :map <C-A> /---><CR>
+ :vunmap <C-A>
+
+Notice that the five characters "<C-A>" stand for the single key CTRL-A.
+
+To remove all mappings use the |:mapclear| command. You can guess the
+variations for different modes by now. Be careful with this command, it can't
+be undone.
+
+
+SPECIAL CHARACTERS
+
+The ":map" command can be followed by another command. A | character
+separates the two commands. This also means that a | character can't be used
+inside a map command. To include one, use <Bar> (five characters). Example:
+>
+ :map <F8> :write <Bar> !checkin %<CR>
+
+The same problem applies to the ":unmap" command, with the addition that you
+have to watch out for trailing white space. These two commands are different:
+>
+ :unmap a | unmap b
+ :unmap a| unmap b
+
+The first command tries to unmap "a ", with a trailing space.
+
+When using a space inside a mapping, use <Space> (seven characters): >
+
+ :map <Space> W
+
+This makes the spacebar move a blank-separated word forward.
+
+It is not possible to put a comment directly after a mapping, because the "
+character is considered to be part of the mapping. You can use |", this
+starts a new, empty command with a comment. Example: >
+
+ :map <Space> W| " Use spacebar to move forward a word
+
+
+MAPPINGS AND ABBREVIATIONS
+
+Abbreviations are a lot like Insert mode mappings. The arguments are handled
+in the same way. The main difference is the way they are triggered. An
+abbreviation is triggered by typing a non-word character after the word. A
+mapping is triggered when typing the last character.
+ Another difference is that the characters you type for an abbreviation are
+inserted in the text while you type them. When the abbreviation is triggered
+these characters are deleted and replaced by what the abbreviation produces.
+When typing the characters for a mapping, nothing is inserted until you type
+the last character that triggers it. If the 'showcmd' option is set, the
+typed characters are displayed in the last line of the Vim window.
+ An exception is when a mapping is ambiguous. Suppose you have done two
+mappings: >
+
+ :imap aa foo
+ :imap aaa bar
+
+Now, when you type "aa", Vim doesn't know if it should apply the first or the
+second mapping. It waits for another character to be typed. If it is an "a",
+the second mapping is applied and results in "bar". If it is a space, for
+example, the first mapping is applied, resulting in "foo", and then the space
+is inserted.
+
+
+ADDITIONALLY...
+
+The <script> keyword can be used to make a mapping local to a script. See
+|:map-<script>|.
+
+The <buffer> keyword can be used to make a mapping local to a specific buffer.
+See |:map-<buffer>|
+
+The <unique> keyword can be used to make defining a new mapping fail when it
+already exists. Otherwise a new mapping simply overwrites the old one. See
+|:map-<unique>|.
+
+To make a key do nothing, map it to <Nop> (five characters). This will make
+the <F7> key do nothing at all: >
+
+ :map <F7> <Nop>| map! <F7> <Nop>
+
+There must be no space after <Nop>.
+
+==============================================================================
+*40.2* Defining command-line commands
+
+The Vim editor enables you to define your own commands. You execute these
+commands just like any other Command-line mode command.
+ To define a command, use the ":command" command, as follows: >
+
+ :command DeleteFirst 1delete
+
+Now when you execute the command ":DeleteFirst" Vim executes ":1delete", which
+deletes the first line.
+
+ Note:
+ User-defined commands must start with a capital letter. You cannot
+ use ":X", ":Next" and ":Print". The underscore cannot be used! You
+ can use digits, but this is discouraged.
+
+To list the user-defined commands, execute the following command: >
+
+ :command
+
+Just like with the builtin commands, the user defined commands can be
+abbreviated. You need to type just enough to distinguish the command from
+another. Command line completion can be used to get the full name.
+
+
+NUMBER OF ARGUMENTS
+
+User-defined commands can take a series of arguments. The number of arguments
+must be specified by the -nargs option. For instance, the example
+:DeleteFirst command takes no arguments, so you could have defined it as
+follows: >
+
+ :command -nargs=0 DeleteFirst 1delete
+
+However, because zero arguments is the default, you do not need to add
+"-nargs=0". The other values of -nargs are as follows:
+
+ -nargs=0 No arguments
+ -nargs=1 One argument
+ -nargs=* Any number of arguments
+ -nargs=? Zero or one argument
+ -nargs=+ One or more arguments
+
+
+USING THE ARGUMENTS
+
+Inside the command definition, the arguments are represented by the
+<args> keyword. For example: >
+
+ :command -nargs=+ Say :echo "<args>"
+
+Now when you type >
+
+ :Say Hello World
+
+Vim echoes "Hello World". However, if you add a double quote, it won't work.
+For example: >
+
+ :Say he said "hello"
+
+To get special characters turned into a string, properly escaped to use as an
+expression, use "<q-args>": >
+
+ :command -nargs=+ Say :echo <q-args>
+
+Now the above ":Say" command will result in this to be executed: >
+
+ :echo "he said \"hello\""
+
+The <f-args> keyword contains the same information as the <args> keyword,
+except in a format suitable for use as function call arguments. For example:
+>
+ :command -nargs=* DoIt :call AFunction(<f-args>)
+ :DoIt a b c
+
+Executes the following command: >
+
+ :call AFunction("a", "b", "c")
+
+
+LINE RANGE
+
+Some commands take a range as their argument. To tell Vim that you are
+defining such a command, you need to specify a -range option. The values for
+this option are as follows:
+
+ -range Range is allowed; default is the current line.
+ -range=% Range is allowed; default is the whole file.
+ -range={count} Range is allowed; the last number in it is used as a
+ single number whose default is {count}.
+
+When a range is specified, the keywords <line1> and <line2> get the values of
+the first and last line in the range. For example, the following command
+defines the SaveIt command, which writes out the specified range to the file
+"save_file": >
+
+ :command -range=% SaveIt :<line1>,<line2>write! save_file
+
+
+OTHER OPTIONS
+
+Some of the other options and keywords are as follows:
+
+ -count={number} The command can take a count whose default is
+ {number}. The resulting count can be used
+ through the <count> keyword.
+ -bang You can use a !. If present, using <bang> will
+ result in a !.
+ -register You can specify a register. (The default is
+ the unnamed register.)
+ The register specification is available as
+ <reg> (a.k.a. <register>).
+ -complete={type} Type of command-line completion used. See
+ |:command-completion| for the list of possible
+ values.
+ -bar The command can be followed by | and another
+ command, or " and a comment.
+ -buffer The command is only available for the current
+ buffer.
+
+Finally, you have the <lt> keyword. It stands for the character <. Use this
+to escape the special meaning of the <> items mentioned.
+
+
+REDEFINING AND DELETING
+
+To redefine the same command use the ! argument: >
+
+ :command -nargs=+ Say :echo "<args>"
+ :command! -nargs=+ Say :echo <q-args>
+
+To delete a user command use ":delcommand". It takes a single argument, which
+is the name of the command. Example: >
+
+ :delcommand SaveIt
+
+To delete all the user commands: >
+
+ :comclear
+
+Careful, this can't be undone!
+
+More details about all this in the reference manual: |user-commands|.
+
+==============================================================================
+*40.3* Autocommands
+
+An autocommand is a command that is executed automatically in response to some
+event, such as a file being read or written or a buffer change. Through the
+use of autocommands you can train Vim to edit compressed files, for example.
+That is used in the |gzip| plugin.
+ Autocommands are very powerful. Use them with care and they will help you
+avoid typing many commands. Use them carelessly and they will cause a lot of
+trouble.
+
+Suppose you want to replace a date stamp on the end of a file every time it is
+written. First you define a function: >
+
+ :function DateInsert()
+ : $delete
+ : read !date
+ :endfunction
+
+You want this function to be called each time, just before a file is written.
+This will make that happen: >
+
+ :autocmd FileWritePre * call DateInsert()
+
+"FileWritePre" is the event for which this autocommand is triggered: Just
+before (pre) writing a file. The "*" is a pattern to match with the file
+name. In this case it matches all files.
+ With this command enabled, when you do a ":write", Vim checks for any
+matching FileWritePre autocommands and executes them, and then it
+performs the ":write".
+ The general form of the :autocmd command is as follows: >
+
+ :autocmd [group] {events} {file_pattern} [nested] {command}
+
+The [group] name is optional. It is used in managing and calling the commands
+(more on this later). The {events} parameter is a list of events (comma
+separated) that trigger the command.
+ {file_pattern} is a filename, usually with wildcards. For example, using
+"*.txt" makes the autocommand be used for all files whose name end in ".txt".
+The optional [nested] flag allows for nesting of autocommands (see below), and
+finally, {command} is the command to be executed.
+
+
+EVENTS
+
+One of the most useful events is BufReadPost. It is triggered after a new
+file is being edited. It is commonly used to set option values. For example,
+you know that "*.gsm" files are GNU assembly language. To get the syntax file
+right, define this autocommand: >
+
+ :autocmd BufReadPost *.gsm set filetype=asm
+
+If Vim is able to detect the type of file, it will set the 'filetype' option
+for you. This triggers the Filetype event. Use this to do something when a
+certain type of file is edited. For example, to load a list of abbreviations
+for text files: >
+
+ :autocmd Filetype text source ~/.vim/abbrevs.vim
+
+When starting to edit a new file, you could make Vim insert a skeleton: >
+
+ :autocmd BufNewFile *.[ch] 0read ~/skeletons/skel.c
+
+See |autocmd-events| for a complete list of events.
+
+
+PATTERNS
+
+The {file_pattern} argument can actually be a comma-separated list of file
+patterns. For example: "*.c,*.h" matches files ending in ".c" and ".h".
+ The usual file wildcards can be used. Here is a summary of the most often
+used ones:
+
+ * Match any character any number of times
+ ? Match any character once
+ [abc] Match the character a, b or c
+ . Matches a dot
+ a{b,c} Matches "ab" and "ac"
+
+When the pattern includes a slash (/) Vim will compare directory names.
+Without the slash only the last part of a file name is used. For example,
+"*.txt" matches "/home/biep/readme.txt". The pattern "/home/biep/*" would
+also match it. But "home/foo/*.txt" wouldn't.
+ When including a slash, Vim matches the pattern against both the full path
+of the file ("/home/biep/readme.txt") and the relative path (e.g.,
+"biep/readme.txt").
+
+ Note:
+ When working on a system that uses a backslash as file separator, such
+ as MS-Windows, you still use forward slashes in autocommands. This
+ makes it easier to write the pattern, since a backslash has a special
+ meaning. It also makes the autocommands portable.
+
+
+DELETING
+
+To delete an autocommand, use the same command as what it was defined with,
+but leave out the {command} at the end and use a !. Example: >
+
+ :autocmd! FileWritePre *
+
+This will delete all autocommands for the "FileWritePre" event that use the
+"*" pattern.
+
+
+LISTING
+
+To list all the currently defined autocommands, use this: >
+
+ :autocmd
+
+The list can be very long, especially when filetype detection is used. To
+list only part of the commands, specify the group, event and/or pattern. For
+example, to list all BufNewFile autocommands: >
+
+ :autocmd BufNewFile
+
+To list all autocommands for the pattern "*.c": >
+
+ :autocmd * *.c
+
+Using "*" for the event will list all the events. To list all autocommands
+for the cprograms group: >
+
+ :autocmd cprograms
+
+
+GROUPS
+
+The {group} item, used when defining an autocommand, groups related autocommands
+together. This can be used to delete all the autocommands in a certain group,
+for example.
+ When defining several autocommands for a certain group, use the ":augroup"
+command. For example, let's define autocommands for C programs: >
+
+ :augroup cprograms
+ : autocmd BufReadPost *.c,*.h :set sw=4 sts=4
+ : autocmd BufReadPost *.cpp :set sw=3 sts=3
+ :augroup END
+
+This will do the same as: >
+
+ :autocmd cprograms BufReadPost *.c,*.h :set sw=4 sts=4
+ :autocmd cprograms BufReadPost *.cpp :set sw=3 sts=3
+
+To delete all autocommands in the "cprograms" group: >
+
+ :autocmd! cprograms
+
+
+NESTING
+
+Generally, commands executed as the result of an autocommand event will not
+trigger any new events. If you read a file in response to a FileChangedShell
+event, it will not trigger the autocommands that would set the syntax, for
+example. To make the events triggered, add the "nested" argument: >
+
+ :autocmd FileChangedShell * nested edit
+
+
+EXECUTING AUTOCOMMANDS
+
+It is possible to trigger an autocommand by pretending an event has occurred.
+This is useful to have one autocommand trigger another one. Example: >
+
+ :autocmd BufReadPost *.new execute "doautocmd BufReadPost " . expand("<afile>:r")
+
+This defines an autocommand that is triggered when a new file has been edited.
+The file name must end in ".new". The ":execute" command uses expression
+evaluation to form a new command and execute it. When editing the file
+"tryout.c.new" the executed command will be: >
+
+ :doautocmd BufReadPost tryout.c
+
+The expand() function takes the "<afile>" argument, which stands for the file
+name the autocommand was executed for, and takes the root of the file name
+with ":r".
+
+":doautocmd" executes on the current buffer. The ":doautoall" command works
+like "doautocmd" except it executes on all the buffers.
+
+
+USING NORMAL MODE COMMANDS
+
+The commands executed by an autocommand are Command-line command. If you want
+to use a Normal mode command, the ":normal" command can be used. Example: >
+
+ :autocmd BufReadPost *.log normal G
+
+This will make the cursor jump to the last line of *.log files when you start
+to edit it.
+ Using the ":normal" command is a bit tricky. First of all, make sure its
+argument is a complete command, including all the arguments. When you use "i"
+to go to Insert mode, there must also be a <Esc> to leave Insert mode again.
+If you use a "/" to start a search pattern, there must be a <CR> to execute
+it.
+ The ":normal" command uses all the text after it as commands. Thus there
+can be no | and another command following. To work around this, put the
+":normal" command inside an ":execute" command. This also makes it possible
+to pass unprintable characters in a convenient way. Example: >
+
+ :autocmd BufReadPost *.chg execute "normal ONew entry:\<Esc>" |
+ \ 1read !date
+
+This also shows the use of a backslash to break a long command into more
+lines. This can be used in Vim scripts (not at the command line).
+
+When you want the autocommand do something complicated, which involves jumping
+around in the file and then returning to the original position, you may want
+to restore the view on the file. See |restore-position| for an example.
+
+
+IGNORING EVENTS
+
+At times, you will not want to trigger an autocommand. The 'eventignore'
+option contains a list of events that will be totally ignored. For example,
+the following causes events for entering and leaving a window to be ignored: >
+
+ :set eventignore=WinEnter,WinLeave
+
+To ignore all events, use the following command: >
+
+ :set eventignore=all
+
+To set it back to the normal behavior, make 'eventignore' empty: >
+
+ :set eventignore=
+
+==============================================================================
+
+Next chapter: |usr_41.txt| Write a Vim script
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
new file mode 100644
index 000000000..e0ea026df
--- /dev/null
+++ b/runtime/doc/usr_41.txt
@@ -0,0 +1,1724 @@
+*usr_41.txt* For Vim version 7.0aa. Last change: 2004 May 06
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Write a Vim script
+
+
+The Vim script language is used for the startup vimrc file, syntax files, and
+many other things. This chapter explains the items that can be used in a Vim
+script. There are a lot of them, thus this is a long chapter.
+
+|41.1| Introduction
+|41.2| Variables
+|41.3| Expressions
+|41.4| Conditionals
+|41.5| Executing an expression
+|41.6| Using functions
+|41.7| Defining a function
+|41.8| Exceptions
+|41.9| Various remarks
+|41.10| Writing a plugin
+|41.11| Writing a filetype plugin
+|41.12| Writing a compiler plugin
+
+ Next chapter: |usr_42.txt| Add new menus
+ Previous chapter: |usr_40.txt| Make new commands
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*41.1* Introduction *vim-script-intro*
+
+Your first experience with Vim scripts is the vimrc file. Vim reads it when
+it starts up and executes the commands. You can set options to values you
+prefer. And you can use any colon command in it (commands that start with a
+":"; these are sometimes referred to as Ex commands or command-line commands).
+ Syntax files are also Vim scripts. As are files that set options for a
+specific file type. A complicated macro can be defined by a separate Vim
+script file. You can think of other uses yourself.
+
+Let's start with a simple example: >
+
+ :let i = 1
+ :while i < 5
+ : echo "count is" i
+ : let i = i + 1
+ :endwhile
+<
+ Note:
+ The ":" characters are not really needed here. You only need to use
+ them when you type a command. In a Vim script file they can be left
+ out. We will use them here anyway to make clear these are colon
+ commands and make them stand out from Normal mode commands.
+
+The ":let" command assigns a value to a variable. The generic form is: >
+
+ :let {variable} = {expression}
+
+In this case the variable name is "i" and the expression is a simple value,
+the number one.
+ The ":while" command starts a loop. The generic form is: >
+
+ :while {condition}
+ : {statements}
+ :endwhile
+
+The statements until the matching ":endwhile" are executed for as long as the
+condition is true. The condition used here is the expression "i < 5". This
+is true when the variable i is smaller than five.
+ The ":echo" command prints its arguments. In this case the string "count
+is" and the value of the variable i. Since i is one, this will print:
+
+ count is 1 ~
+
+Then there is another ":let i =" command. The value used is the expression "i
++ 1". This adds one to the variable i and assigns the new value to the same
+variable.
+ The output of the example code is:
+
+ count is 1 ~
+ count is 2 ~
+ count is 3 ~
+ count is 4 ~
+
+ Note:
+ If you happen to write a while loop that keeps on running, you can
+ interrupt it by pressing CTRL-C (CTRL-Break on MS-Windows).
+
+
+THREE KINDS OF NUMBERS
+
+Numbers can be decimal, hexadecimal or octal. A hexadecimal number starts
+with "0x" or "0X". For example "0x1f" is 31. An octal number starts with a
+zero. "017" is 15. Careful: don't put a zero before a decimal number, it
+will be interpreted as an octal number!
+ The ":echo" command always prints decimal numbers. Example: >
+
+ :echo 0x7f 036
+< 127 30 ~
+
+A number is made negative with a minus sign. This also works for hexadecimal
+and octal numbers. A minus sign is also for subtraction. Compare this with
+the previous example: >
+
+ :echo 0x7f -036
+< 97 ~
+
+White space in an expression is ignored. However, it's recommended to use it
+for separating items, to make the expression easier to read. For example, to
+avoid the confusion with a negative number, put a space between the minus sign
+and the following number: >
+
+ :echo 0x7f - 036
+
+==============================================================================
+*41.2* Variables
+
+A variable name consists of ASCII letters, digits and the underscore. It
+cannot start with a digit. Valid variable names are:
+
+ counter
+ _aap3
+ very_long_variable_name_with_underscores
+ FuncLength
+ LENGTH
+
+Invalid names are "foo+bar" and "6var".
+ These variables are global. To see a list of currently defined variables
+use this command: >
+
+ :let
+
+You can use global variables everywhere. This also means that when the
+variable "count" is used in one script file, it might also be used in another
+file. This leads to confusion at least, and real problems at worst. To avoid
+this, you can use a variable local to a script file by prepending "s:". For
+example, one script contains this code: >
+
+ :let s:count = 1
+ :while s:count < 5
+ : source other.vim
+ : let s:count = s:count + 1
+ :endwhile
+
+Since "s:count" is local to this script, you can be sure that sourcing the
+"other.vim" script will not change this variable. If "other.vim" also uses an
+"s:count" variable, it will be a different copy, local to that script. More
+about script-local variables here: |script-variable|.
+
+There are more kinds of variables, see |internal-variables|. The most often
+used ones are:
+
+ b:name variable local to a buffer
+ w:name variable local to a window
+ g:name global variable (also in a function)
+ v:name variable predefined by Vim
+
+
+DELETING VARIABLES
+
+Variables take up memory and show up in the output of the ":let" command. To
+delete a variable use the ":unlet" command. Example: >
+
+ :unlet s:count
+
+This deletes the script-local variable "s:count" to free up the memory it
+uses. If you are not sure if the variable exists, and don't want an error
+message when it doesn't, append !: >
+
+ :unlet! s:count
+
+When a script finishes, the local variables used there will not be
+automatically freed. The next time the script executes, it can still use the
+old value. Example: >
+
+ :if !exists("s:call_count")
+ : let s:call_count = 0
+ :endif
+ :let s:call_count = s:call_count + 1
+ :echo "called" s:call_count "times"
+
+The "exists()" function checks if a variable has already been defined. Its
+argument is the name of the variable you want to check. Not the variable
+itself! If you would do this: >
+
+ :if !exists(s:call_count)
+
+Then the value of s:call_count will be used as the name of the variable that
+exists() checks. That's not what you want.
+ The exclamation mark ! negates a value. When the value was true, it
+becomes false. When it was false, it becomes true. You can read it as "not".
+Thus "if !exists()" can be read as "if not exists()".
+ What Vim calls true is anything that is not zero. Only zero is false.
+
+
+STRING VARIABLES AND CONSTANTS
+
+So far only numbers were used for the variable value. Strings can be used as
+well. Numbers and strings are the only two types of variables that Vim
+supports. The type is dynamic, it is set each time when assigning a value to
+the variable with ":let".
+ To assign a string value to a variable, you need to use a string constant.
+There are two types of these. First the string in double quotes: >
+
+ :let name = "peter"
+ :echo name
+< peter ~
+
+If you want to include a double quote inside the string, put a backslash in
+front of it: >
+
+ :let name = "\"peter\""
+ :echo name
+< "peter" ~
+
+To avoid the need for a backslash, you can use a string in single quotes: >
+
+ :let name = '"peter"'
+ :echo name
+< "peter" ~
+
+Inside a single-quote string all the characters are taken literally. The
+drawback is that it's impossible to include a single quote. A backslash is
+taken literally as well, thus you can't use it to change the meaning of the
+character after it.
+ In double-quote strings it is possible to use special characters. Here are
+a few useful ones:
+
+ \t <Tab>
+ \n <NL>, line break
+ \r <CR>, <Enter>
+ \e <Esc>
+ \b <BS>, backspace
+ \" "
+ \\ \, backslash
+ \<Esc> <Esc>
+ \<C-W> CTRL-W
+
+The last two are just examples. The "\<name>" form can be used to include
+the special key "name".
+ See |expr-quote| for the full list of special items in a string.
+
+==============================================================================
+*41.3* Expressions
+
+Vim has a rich, yet simple way to handle expressions. You can read the
+definition here: |expression-syntax|. Here we will show the most common
+items.
+ The numbers, strings and variables mentioned above are expressions by
+themselves. Thus everywhere an expression is expected, you can use a number,
+string or variable. Other basic items in an expression are:
+
+ $NAME environment variable
+ &name option
+ @r register
+
+Examples: >
+
+ :echo "The value of 'tabstop' is" &ts
+ :echo "Your home directory is" $HOME
+ :if @a > 5
+
+The &name form can be used to save an option value, set it to a new value,
+do something and restore the old value. Example: >
+
+ :let save_ic = &ic
+ :set noic
+ :/The Start/,$delete
+ :let &ic = save_ic
+
+This makes sure the "The Start" pattern is used with the 'ignorecase' option
+off. Still, it keeps the value that the user had set.
+
+
+MATHEMATICS
+
+It becomes more interesting if we combine these basic items. Let's start with
+mathematics on numbers:
+
+ a + b add
+ a - b subtract
+ a * b multiply
+ a / b divide
+ a % b modulo
+
+The usual precedence is used. Example: >
+
+ :echo 10 + 5 * 2
+< 20 ~
+
+Grouping is done with braces. No surprises here. Example: >
+
+ :echo (10 + 5) * 2
+< 30 ~
+
+Strings can be concatenated with ".". Example: >
+
+ :echo "foo" . "bar"
+< foobar ~
+
+When the ":echo" command gets multiple arguments, it separates them with a
+space. In the example the argument is a single expression, thus no space is
+inserted.
+
+Borrowed from the C language is the conditional expression:
+
+ a ? b : c
+
+If "a" evaluates to true "b" is used, otherwise "c" is used. Example: >
+
+ :let i = 4
+ :echo i > 5 ? "i is big" : "i is small"
+< i is small ~
+
+The three parts of the constructs are always evaluated first, thus you could
+see it work as:
+
+ (a) ? (b) : (c)
+
+==============================================================================
+*41.4* Conditionals
+
+The ":if" commands executes the following statements, until the matching
+":endif", only when a condition is met. The generic form is:
+
+ :if {condition}
+ {statements}
+ :endif
+
+Only when the expression {condition} evaluates to true (non-zero) will the
+{statements} be executed. These must still be valid commands. If they
+contain garbage, Vim won't be able to find the ":endif".
+ You can also use ":else". The generic form for this is:
+
+ :if {condition}
+ {statements}
+ :else
+ {statements}
+ :endif
+
+The second {statements} is only executed if the first one isn't.
+ Finally, there is ":elseif":
+
+ :if {condition}
+ {statements}
+ :elseif {condition}
+ {statements}
+ :endif
+
+This works just like using ":else" and then "if", but without the need for an
+extra ":endif".
+ A useful example for your vimrc file is checking the 'term' option and
+doing something depending upon its value: >
+
+ :if &term == "xterm"
+ : " Do stuff for xterm
+ :elseif &term == "vt100"
+ : " Do stuff for a vt100 terminal
+ :else
+ : " Do something for other terminals
+ :endif
+
+
+LOGIC OPERATIONS
+
+We already used some of them in the examples. These are the most often used
+ones:
+
+ a == b equal to
+ a != b not equal to
+ a > b greater than
+ a >= b greater than or equal to
+ a < b less than
+ a <= b less than or equal to
+
+The result is one if the condition is met and zero otherwise. An example: >
+
+ :if v:version >= 600
+ : echo "congratulations"
+ :else
+ : echo "you are using an old version, upgrade!"
+ :endif
+
+Here "v:version" is a variable defined by Vim, which has the value of the Vim
+version. 600 is for version 6.0. Version 6.1 has the value 601. This is
+very useful to write a script that works with multiple versions of Vim.
+|v:version|
+
+The logic operators work both for numbers and strings. When comparing two
+strings, the mathematical difference is used. This compares byte values,
+which may not be right for some languages.
+ When comparing a string with a number, the string is first converted to a
+number. This is a bit tricky, because when a string doesn't look like a
+number, the number zero is used. Example: >
+
+ :if 0 == "one"
+ : echo "yes"
+ :endif
+
+This will echo "yes", because "one" doesn't look like a number, thus it is
+converted to the number zero.
+
+For strings there are two more items:
+
+ a =~ b matches with
+ a !~ b does not match with
+
+The left item "a" is used as a string. The right item "b" is used as a
+pattern, like what's used for searching. Example: >
+
+ :if str =~ " "
+ : echo "str contains a space"
+ :endif
+ :if str !~ '\.$'
+ : echo "str does not end in a full stop"
+ :endif
+
+Notice the use of a single-quote string for the pattern. This is useful,
+because backslashes need to be doubled in a double-quote string and patterns
+tend to contain many backslashes.
+
+The 'ignorecase' option is used when comparing strings. When you don't want
+that, append "#" to match case and "?" to ignore case. Thus "==?" compares
+two strings to be equal while ignoring case. And "!~#" checks if a pattern
+doesn't match, also checking the case of letters. For the full table see
+|expr-==|.
+
+
+MORE LOOPING
+
+The ":while" command was already mentioned. Two more statements can be used
+in between the ":while" and the ":endwhile":
+
+ :continue Jump back to the start of the while loop; the
+ loop continues.
+ :break Jump forward to the ":endwhile"; the loop is
+ discontinued.
+
+Example: >
+
+ :while counter < 40
+ : call do_something()
+ : if skip_flag
+ : continue
+ : endif
+ : if finished_flag
+ : break
+ : endif
+ : sleep 50m
+ :endwhile
+
+The ":sleep" command makes Vim take a nap. The "50m" specifies fifty
+milliseconds. Another example is ":sleep 4", which sleeps for four seconds.
+
+==============================================================================
+*41.5* Executing an expression
+
+So far the commands in the script were executed by Vim directly. The
+":execute" command allows executing the result of an expression. This is a
+very powerful way to build commands and execute them.
+ An example is to jump to a tag, which is contained in a variable: >
+
+ :execute "tag " . tag_name
+
+The "." is used to concatenate the string "tag " with the value of variable
+"tag_name". Suppose "tag_name" has the value "get_cmd", then the command that
+will be executed is: >
+
+ :tag get_cmd
+
+The ":execute" command can only execute colon commands. The ":normal" command
+executes Normal mode commands. However, its argument is not an expression but
+the literal command characters. Example: >
+
+ :normal gg=G
+
+This jumps to the first line and formats all lines with the "=" operator.
+ To make ":normal" work with an expression, combine ":execute" with it.
+Example: >
+
+ :execute "normal " . normal_commands
+
+The variable "normal_commands" must contain the Normal mode commands.
+ Make sure that the argument for ":normal" is a complete command. Otherwise
+Vim will run into the end of the argument and abort the command. For example,
+if you start Insert mode, you must leave Insert mode as well. This works: >
+
+ :execute "normal Inew text \<Esc>"
+
+This inserts "new text " in the current line. Notice the use of the special
+key "\<Esc>". This avoids having to enter a real <Esc> character in your
+script.
+
+==============================================================================
+*41.6* Using functions
+
+Vim defines many functions and provides a large amount of functionality that
+way. A few examples will be given in this section. You can find the whole
+list here: |functions|.
+
+A function is called with the ":call" command. The parameters are passed in
+between braces, separated by commas. Example: >
+
+ :call search("Date: ", "W")
+
+This calls the search() function, with arguments "Date: " and "W". The
+search() function uses its first argument as a search pattern and the second
+one as flags. The "W" flag means the search doesn't wrap around the end of
+the file.
+
+A function can be called in an expression. Example: >
+
+ :let line = getline(".")
+ :let repl = substitute(line, '\a', "*", "g")
+ :call setline(".", repl)
+
+The getline() function obtains a line from the current file. Its argument is
+a specification of the line number. In this case "." is used, which means the
+line where the cursor is.
+ The substitute() function does something similar to the ":substitute"
+command. The first argument is the string on which to perform the
+substitution. The second argument is the pattern, the third the replacement
+string. Finally, the last arguments are the flags.
+ The setline() function sets the line, specified by the first argument, to a
+new string, the second argument. In this example the line under the cursor is
+replaced with the result of the substitute(). Thus the effect of the three
+statements is equal to: >
+
+ :substitute/\a/*/g
+
+Using the functions becomes more interesting when you do more work before and
+after the substitute() call.
+
+
+FUNCTIONS *function-list*
+
+There are many functions. We will mention them here, grouped by what they are
+used for. You can find an alphabetical list here: |functions|. Use CTRL-] on
+the function name to jump to detailed help on it.
+
+String manipulation:
+ char2nr() get ASCII value of a character
+ nr2char() get a character by its ASCII value
+ escape() escape characters in a string with a '\'
+ strtrans() translate a string to make it printable
+ tolower() turn a string to lowercase
+ toupper() turn a string to uppercase
+ match() position where a pattern matches in a string
+ matchend() position where a pattern match ends in a string
+ matchstr() match of a pattern in a string
+ stridx() first index of a short string in a long string
+ 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"
+ strpart() get part of a string
+ expand() expand special keywords
+ type() type of a variable
+ iconv() convert text from one encoding to another
+
+Working with text in the current buffer:
+ byte2line() get line number at a specific byte count
+ line2byte() byte count at a specific line
+ col() column number of the cursor or a mark
+ virtcol() screen column of the cursor or a mark
+ line() line number of the cursor or mark
+ wincol() window column number of the cursor
+ winline() window line number of the cursor
+ cursor() position the cursor at a line/column
+ getline() get a line from the buffer
+ setline() replace a line in the buffer
+ append() append {string} below line {lnum}
+ indent() indent of a specific line
+ cindent() indent according to C indenting
+ lispindent() indent according to Lisp indenting
+ nextnonblank() find next non-blank line
+ prevnonblank() find previous non-blank line
+ search() find a match for a pattern
+ searchpair() find the other end of a start/skip/end
+
+System functions and manipulation of files:
+ browse() put up a file requester
+ glob() expand wildcards
+ globpath() expand wildcards in a number of directories
+ resolve() find out where a shortcut points to
+ fnamemodify() modify a file name
+ executable() check if an executable program exists
+ filereadable() check if a file can be read
+ filewritable() check if a file can be written to
+ isdirectory() check if a directory exists
+ getcwd() get the current working directory
+ getfsize() get the size of a file
+ getftime() get last modification time of a file
+ localtime() get current time
+ strftime() convert time to a string
+ tempname() get the name of a temporary file
+ delete() delete a file
+ rename() rename a file
+ system() get the result of a shell command
+ hostname() name of the system
+
+Buffers, windows and the argument list:
+ argc() number of entries in the argument list
+ argidx() current position in the argument list
+ argv() get one entry from the argument list
+ bufexists() check if a buffer exists
+ buflisted() check if a buffer exists and is listed
+ bufloaded() check if a buffer exists and is loaded
+ bufname() get the name of a specific buffer
+ bufnr() get the buffer number of a specific buffer
+ winnr() get the window number for the current window
+ bufwinnr() get the window number of a specific buffer
+ winbufnr() get the buffer number of a specific window
+ getbufvar() get a variable value from a specific buffer
+ setbufvar() set a variable in a specific buffer
+ getwinvar() get a variable value from a specific window
+ setwinvar() set a variable in a specific window
+
+Folding:
+ foldclosed() check for a closed fold at a specific line
+ foldclosedend() like foldclosed() but return the last line
+ foldlevel() check for the fold level at a specific line
+ foldtext() generate the line displayed for a closed fold
+
+Syntax highlighting:
+ hlexists() check if a highlight group exists
+ hlID() get ID of a highlight group
+ synID() get syntax ID at a specific position
+ synIDattr() get a specific attribute of a syntax ID
+ synIDtrans() get translated syntax ID
+
+History:
+ histadd() add an item to a history
+ histdel() delete an item from a history
+ histget() get an item from a history
+ histnr() get highest index of a history list
+
+Interactive:
+ confirm() let the user make a choice
+ getchar() get a character from the user
+ getcharmod() get modifiers for the last typed character
+ input() get a line from the user
+ inputsecret() get a line from the user without showing it
+ inputdialog() get a line from the user in a dialog
+ inputresave save and clear typeahead
+ inputrestore() restore typeahead
+
+Vim server:
+ serverlist() return the list of server names
+ remote_send() send command characters to a Vim server
+ remote_expr() evaluate an expression in a Vim server
+ server2client() send a reply to a client of a Vim server
+ remote_peek() check if there is a reply from a Vim server
+ remote_read() read a reply from a Vim server
+ foreground() move the Vim window to the foreground
+ remote_foreground() move the Vim server window to the foreground
+
+Various:
+ mode() get current editing mode
+ visualmode() last visual mode used
+ hasmapto() check if a mapping exists
+ mapcheck() check if a matching mapping exists
+ maparg() get rhs of a mapping
+ exists() check if a variable, function, etc. exists
+ has() check if a feature is supported in Vim
+ cscope_connection() check if a cscope connection exists
+ did_filetype() check if a FileType autocommand was used
+ eventhandler() check if invoked by an event handler
+ getwinposx() X position of the GUI Vim window
+ getwinposy() Y position of the GUI Vim window
+ winheight() get height of a specific window
+ winwidth() get width of a specific window
+ libcall() call a function in an external library
+ libcallnr() idem, returning a number
+ getreg() get contents of a register
+ getregtype() get type of a register
+ setreg() set contents and type of a register
+
+==============================================================================
+*41.7* Defining a function
+
+Vim enables you to define your own functions. The basic function declaration
+begins as follows: >
+
+ :function {name}({var1}, {var2}, ...)
+ : {body}
+ :endfunction
+<
+ Note:
+ Function names must begin with a capital letter.
+
+Let's define a short function to return the smaller of two numbers. It starts
+with this line: >
+
+ :function Min(num1, num2)
+
+This tells Vim that the function is named "Min" and it takes two arguments:
+"num1" and "num2".
+ The first thing you need to do is to check to see which number is smaller:
+ >
+ : if a:num1 < a:num2
+
+The special prefix "a:" tells Vim that the variable is a function argument.
+Let's assign the variable "smaller" the value of the smallest number: >
+
+ : if a:num1 < a:num2
+ : let smaller = a:num1
+ : else
+ : let smaller = a:num2
+ : endif
+
+The variable "smaller" is a local variable. Variables used inside a function
+are local unless prefixed by something like "g:", "a:", or "s:".
+
+ Note:
+ To access a global variable from inside a function you must prepend
+ "g:" to it. Thus "g:count" inside a function is used for the global
+ variable "count", and "count" is another variable, local to the
+ function.
+
+You now use the ":return" statement to return the smallest number to the user.
+Finally, you end the function: >
+
+ : return smaller
+ :endfunction
+
+The complete function definition is as follows: >
+
+ :function Min(num1, num2)
+ : if a:num1 < a:num2
+ : let smaller = a:num1
+ : else
+ : let smaller = a:num2
+ : endif
+ : return smaller
+ :endfunction
+
+A user defined function is called in exactly the same way as a builtin
+function. Only the name is different. The Min function can be used like
+this: >
+
+ :echo Min(5, 8)
+
+Only now will the function be executed and the lines be interpreted by Vim.
+If there are mistakes, like using an undefined variable or function, you will
+now get an error message. When defining the function these errors are not
+detected.
+
+When a function reaches ":endfunction" or ":return" is used without an
+argument, the function returns zero.
+
+To redefine a function that already exists, use the ! for the ":function"
+command: >
+
+ :function! Min(num1, num2, num3)
+
+
+USING A RANGE
+
+The ":call" command can be given a line range. This can have one of two
+meanings. When a function has been defined with the "range" keyword, it will
+take care of the line range itself.
+ The function will be passed the variables "a:firstline" and "a:lastline".
+These will have the line numbers from the range the function was called with.
+Example: >
+
+ :function Count_words() range
+ : let n = a:firstline
+ : let count = 0
+ : while n <= a:lastline
+ : let count = count + Wordcount(getline(n))
+ : let n = n + 1
+ : endwhile
+ : echo "found " . count . " words"
+ :endfunction
+
+You can call this function with: >
+
+ :10,30call Count_words()
+
+It will be executed once and echo the number of words.
+ The other way to use a line range is by defining a function without the
+"range" keyword. The function will be called once for every line in the
+range, with the cursor in that line. Example: >
+
+ :function Number()
+ : echo "line " . line(".") . " contains: " . getline(".")
+ :endfunction
+
+If you call this function with: >
+
+ :10,15call Number()
+
+The function will be called six times.
+
+
+VARIABLE NUMBER OF ARGUMENTS
+
+Vim enables you to define functions that have a variable number of arguments.
+The following command, for instance, defines a function that must have 1
+argument (start) and can have up to 20 additional arguments: >
+
+ :function Show(start, ...)
+
+The variable "a:1" contains the first optional argument, "a:2" the second, and
+so on. The variable "a:0" contains the number of extra arguments.
+ For example: >
+
+ :function Show(start, ...)
+ : echohl Title
+ : echo "Show is " . a:start
+ : echohl None
+ : let index = 1
+ : while index <= a:0
+ : echo " Arg " . index . " is " . a:{index}
+ : let index = index + 1
+ : endwhile
+ : echo ""
+ :endfunction
+
+This uses the ":echohl" command to specify the highlighting used for the
+following ":echo" command. ":echohl None" stops it again. The ":echon"
+command works like ":echo", but doesn't output a line break.
+
+
+LISTING FUNCTIONS
+
+The ":function" command lists the names and arguments of all user-defined
+functions: >
+
+ :function
+< function Show(start, ...) ~
+ function GetVimIndent() ~
+ function SetSyn(name) ~
+
+To see what a function does, use its name as an argument for ":function": >
+
+ :function SetSyn
+< 1 if &syntax == '' ~
+ 2 let &syntax = a:name ~
+ 3 endif ~
+ endfunction ~
+
+
+DEBUGGING
+
+The line number is useful for when you get an error message or when debugging.
+See |debug-scripts| about debugging mode.
+ You can also set the 'verbose' option to 12 or higher to see all function
+calls. Set it to 15 or higher to see every executed line.
+
+
+DELETING A FUNCTION
+
+To delete the Show() function: >
+
+ :delfunction Show
+
+You get an error when the function doesn't exist.
+
+==============================================================================
+*41.8* Exceptions
+
+Let's start with an example: >
+
+ :try
+ : read ~/templates/pascal.tmpl
+ :catch /E484:/
+ : echo "Sorry, the Pascal template file cannot be found."
+ :endtry
+
+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.
+
+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
+contains the error message. And every error message has a number. In this
+case, the error we catch contains "E484:". This number is guaranteed to stay
+the same (the text may change, e.g., it may be translated).
+
+When the ":read" command causes another error, the pattern "E484:" will not
+match in it. Thus this exception will not be caught and result in the usual
+error message.
+
+You might be tempted to do this: >
+
+ :try
+ : read ~/templates/pascal.tmpl
+ :catch
+ : echo "Sorry, the Pascal template file cannot be found."
+ :endtry
+
+This means all errors are caught. But then you will not see errors that are
+useful, such as "E21: Cannot make changes, 'modifiable' is off".
+
+Another useful mechanism is the ":finally" command: >
+
+ :let tmp = tempname()
+ :try
+ : exe ".,$write " . tmp
+ : exe "!filter " . tmp
+ : .,$delete
+ : exe "$read " . tmp
+ :finally
+ : call delete(tmp)
+ :endtry
+
+This filters the lines from the cursor until the end of the file through the
+"filter" command, which takes a file name argument. No matter if the
+filtering works, something goes wrong in between ":try" and ":finally" or the
+user cancels the filtering by pressing CTRL-C, the "call delete(tmp)" is
+always executed. This makes sure you don't leave the temporary file behind.
+
+More information about exception handling can be found in the reference
+manual: |exception-handling|.
+
+==============================================================================
+*41.9* Various remarks
+
+Here is a summary of items that apply to Vim scripts. They are also mentioned
+elsewhere, but form a nice checklist.
+
+The end-of-line character depends on the system. For Unix a single <NL>
+character is used. For MS-DOS, Windows, OS/2 and the like, <CR><LF> is used.
+This is important when using mappings that end in a <CR>. See |:source_crnl|.
+
+
+WHITE SPACE
+
+Blank lines are allowed and ignored.
+
+Leading whitespace characters (blanks and TABs) are always ignored. The
+whitespaces between parameters (e.g. between the 'set' and the 'cpoptions' in
+the example below) are reduced to one blank character and plays the role of a
+separator, the whitespaces after the last (visible) character may or may not
+be ignored depending on the situation, see below.
+
+For a ":set" command involving the "=" (equal) sign, such as in: >
+
+ :set cpoptions =aABceFst
+
+the whitespace immediately before the "=" sign is ignored. But there can be
+no whitespace after the "=" sign!
+
+To include a whitespace character in the value of an option, it must be
+escaped by a "\" (backslash) as in the following example: >
+
+ :set tags=my\ nice\ file
+
+The same example written as >
+
+ :set tags=my nice file
+
+will issue an error, because it is interpreted as: >
+
+ :set tags=my
+ :set nice
+ :set file
+
+
+COMMENTS
+
+The character " (the double quote mark) starts a comment. Everything after
+and including this character until the end-of-line is considered a comment and
+is ignored, except for commands that don't consider comments, as shown in
+examples below. A comment can start on any character position on the line.
+
+There is a little "catch" with comments for some commands. Examples: >
+
+ :abbrev dev development " shorthand
+ :map <F3> o#include " insert include
+ :execute cmd " do it
+ :!ls *.c " list C files
+
+The abbreviation 'dev' will be expanded to 'development " shorthand'. The
+mapping of <F3> will actually be the whole line after the 'o# ....' including
+the '" insert include'. The "execute" command will give an error. The "!"
+command will send everything after it to the shell, causing an error for an
+unmatched '"' character.
+ There can be no comment after ":map", ":abbreviate", ":execute" and "!"
+commands (there are a few more commands with this restriction). For the
+":map", ":abbreviate" and ":execute" commands there is a trick: >
+
+ :abbrev dev development|" shorthand
+ :map <F3> o#include|" insert include
+ :execute cmd |" do it
+
+With the '|' character the command is separated from the next one. And that
+next command is only a comment.
+
+Notice that there is no white space before the '|' in the abbreviation and
+mapping. For these commands, any character until the end-of-line or '|' is
+included. As a consequence of this behavior, you don't always see that
+trailing whitespace is included: >
+
+ :map <F4> o#include
+
+To avoid these problems, you can set the 'list' option when editing vimrc
+files.
+
+
+PITFALLS
+
+Even bigger problem arises in the following example: >
+
+ :map ,ab o#include
+ :unmap ,ab
+
+Here the unmap command will not work, because it tries to unmap ",ab ". This
+does not exist as a mapped sequence. An error will be issued, which is very
+hard to identify, because the ending whitespace character in ":unmap ,ab " is
+not visible.
+
+And this is the same as what happens when one uses a comment after an 'unmap'
+command: >
+
+ :unmap ,ab " comment
+
+Here the comment part will be ignored. However, Vim will try to unmap
+',ab ', which does not exist. Rewrite it as: >
+
+ :unmap ,ab| " comment
+
+
+RESTORING THE VIEW
+
+Sometimes you want to make a change and go back to where 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
+file and then restores the view: >
+
+ map ,p ma"aYHmbgg"aP`bzt`a
+
+What this does: >
+ ma"aYHmbgg"aP`bzt`a
+< ma set mark a at cursor position
+ "aY yank current line into register a
+ Hmb go to top line in window and set mark b there
+ gg go to first line in file
+ "aP put the yanked line above it
+ `b go back to top line in display
+ zt position the text in the window as before
+ `a go back to saved cursor position
+
+
+PACKAGING
+
+To avoid your function names to interfere with functions that you get from
+others, use this scheme:
+- Prepend a unique string before each function name. I often use an
+ abbreviation. For example, "OW_" is used for the option window functions.
+- Put the definition of your functions together in a file. Set a global
+ variable to indicate that the functions have been loaded. When sourcing the
+ file again, first unload the functions.
+Example: >
+
+ " This is the XXX package
+
+ if exists("XXX_loaded")
+ delfun XXX_one
+ delfun XXX_two
+ endif
+
+ function XXX_one(a)
+ ... body of function ...
+ endfun
+
+ function XXX_two(b)
+ ... body of function ...
+ endfun
+
+ let XXX_loaded = 1
+
+==============================================================================
+*41.10* Writing a plugin *write-plugin*
+
+You can write a Vim script in such a way that many people can use it. This is
+called a plugin. Vim users can drop your script in their plugin directory and
+use its features right away |add-plugin|.
+
+There are actually two types of plugins:
+
+ global plugins: For all types of files.
+filetype plugins: Only for files of a specific type.
+
+In this section the first type is explained. Most items are also relevant for
+writing filetype plugins. The specifics for filetype plugins are in the next
+section |write-filetype-plugin|.
+
+
+NAME
+
+First of all you must choose a name for your plugin. The features provided
+by the plugin should be clear from its name. And it should be unlikely that
+someone else writes a plugin with the same name but which does something
+different. And please limit the name to 8 characters, to avoid problems on
+old Windows systems.
+
+A script that corrects typing mistakes could be called "typecorr.vim". We
+will use it here as an example.
+
+For the plugin to work for everybody, it should follow a few guidelines. This
+will be explained step-by-step. The complete example plugin is at the end.
+
+
+BODY
+
+Let's start with the body of the plugin, the lines that do the actual work: >
+
+ 14 iabbrev teh the
+ 15 iabbrev otehr other
+ 16 iabbrev wnat want
+ 17 iabbrev synchronisation
+ 18 \ synchronization
+ 19 let s:count = 4
+
+The actual list should be much longer, of course.
+
+The line numbers have only been added to explain a few things, don't put them
+in your plugin file!
+
+
+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
+know who wrote this wonderful plugin and where they can send remarks.
+Therefore, put a header at the top of your plugin: >
+
+ 1 " Vim global plugin for correcting typing mistakes
+ 2 " Last Change: 2000 Oct 15
+ 3 " Maintainer: Bram Moolenaar <Bram@vim.org>
+
+About copyright and licensing: Since plugins are very useful and it's hardly
+worth restricting their distribution, please consider making your plugin
+either public domain or use the Vim |license|. A short note about this near
+the top of the plugin should be sufficient. Example: >
+
+ 4 " License: This file is placed in the public domain.
+
+
+LINE CONTINUATION, AVOIDING SIDE EFFECTS *use-cpo-save*
+
+In line 18 above, the line-continuation mechanism is used |line-continuation|.
+Users with 'compatible' set will run into trouble here, they will get an error
+message. We can't just reset 'compatible', because that has a lot of side
+effects. To avoid this, we will set the 'cpoptions' option to its Vim default
+value and restore it later. That will allow the use of line-continuation and
+make the script work for most people. It is done like this: >
+
+ 11 let s:save_cpo = &cpo
+ 12 set cpo&vim
+ ..
+ 42 let &cpo = 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.
+
+Notice that a script-local variable is used |s:var|. A global variable could
+already be in use for something else. Always use script-local variables for
+things that are only used in the script.
+
+
+NOT LOADING
+
+It's possible that a user doesn't always want to load this plugin. Or the
+system administrator has dropped it in the system-wide plugin directory, but a
+user has his own plugin he wants to use. Then the user must have a chance to
+disable loading this specific plugin. This will make it possible: >
+
+ 6 if exists("loaded_typecorr")
+ 7 finish
+ 8 endif
+ 9 let loaded_typecorr = 1
+
+This also avoids that when the script is loaded twice it would cause error
+messages for redefining functions and cause trouble for autocommands that are
+added twice.
+
+
+MAPPING
+
+Now let's make the plugin more interesting: We will add a mapping that adds a
+correction for the word under the cursor. We could just pick a key sequence
+for this mapping, but the user might already use it for something else. To
+allow the user to define which keys a mapping in a plugin uses, the <Leader>
+item can be used: >
+
+ 22 map <unique> <Leader>a <Plug>TypecorrAdd
+
+The "<Plug>TypecorrAdd" thing will do the work, more about that further on.
+
+The user can set the "mapleader" variable to the key sequence that he wants
+this mapping to start with. Thus if the user has done: >
+
+ let mapleader = "_"
+
+the mapping will define "_a". If the user didn't do this, the default value
+will be used, which is a backslash. Then a map for "\a" will be defined.
+
+Note that <unique> is used, this will cause an error message if the mapping
+already happened to exist. |:map-<unique>|
+
+But what if the user wants to define his own key sequence? We can allow that
+with this mechanism: >
+
+ 21 if !hasmapto('<Plug>TypecorrAdd')
+ 22 map <unique> <Leader>a <Plug>TypecorrAdd
+ 23 endif
+
+This checks if a mapping to "<Plug>TypecorrAdd" already exists, and only
+defines the mapping from "<Leader>a" if it doesn't. The user then has a
+chance of putting this in his vimrc file: >
+
+ map ,c <Plug>TypecorrAdd
+
+Then the mapped key sequence will be ",c" instead of "_a" or "\a".
+
+
+PIECES
+
+If a script gets longer, you often want to break up the work in pieces. You
+can use functions or mappings for this. But you don't want these functions
+and mappings to interfere with the ones from other scripts. For example, you
+could define a function Add(), but another script could try to define the same
+function. To avoid this, we define the function local to the script by
+prepending it with "s:".
+
+We will define a function that adds a new typing correction: >
+
+ 30 function s:Add(from, correct)
+ 31 let to = input("type the correction for " . a:from . ": ")
+ 32 exe ":iabbrev " . a:from . " " . to
+ ..
+ 36 endfunction
+
+Now we can call the function s:Add() from within this script. If another
+script also defines s:Add(), it will be local to that script and can only
+be called from the script it was defined in. There can also be a global Add()
+function (without the "s:"), which is again another function.
+
+<SID> can be used with mappings. It generates a script ID, which identifies
+the current script. In our typing correction plugin we use it like this: >
+
+ 24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add
+ ..
+ 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR>
+
+Thus when a user types "\a", this sequence is invoked: >
+
+ \a -> <Plug>TypecorrAdd -> <SID>Add -> :call <SID>Add()
+
+If another script would also map <SID>Add, it would get another script ID and
+thus define another mapping.
+
+Note that instead of s:Add() we use <SID>Add() here. That is because the
+mapping is typed by the user, thus outside of the script. The <SID> is
+translated to the script ID, so that Vim knows in which script to look for
+the Add() function.
+
+This is a bit complicated, but it's required for the plugin to work together
+with other plugins. The basic rule is that you use <SID>Add() in mappings and
+s:Add() in other places (the script itself, autocommands, user commands).
+
+We can also add a menu entry to do the same as the mapping: >
+
+ 26 noremenu <script> Plugin.Add\ Correction <SID>Add
+
+The "Plugin" menu is recommended for adding menu items for plugins. In this
+case only one item is used. When adding more items, creating a submenu is
+recommended. For example, "Plugin.CVS" could be used for a plugin that offers
+CVS operations "Plugin.CVS.checkin", "Plugin.CVS.checkout", etc.
+
+Note that in line 28 ":noremap" is used to avoid that any other mappings cause
+trouble. Someone may have remapped ":call", for example. In line 24 we also
+use ":noremap", but we do want "<SID>Add" to be remapped. This is why
+"<script>" is used here. This only allows mappings which are local to the
+script. |:map-<script>| The same is done in line 26 for ":noremenu".
+|:menu-<script>|
+
+
+<SID> AND <Plug> *using-<Plug>*
+
+Both <SID> and <Plug> are used to avoid that mappings of typed keys interfere
+with mappings that are only to be used from other mappings. Note the
+difference between using <SID> and <Plug>:
+
+<Plug> is visible outside of the script. It is used for mappings which the
+ user might want to map a key sequence to. <Plug> is a special code
+ that a typed key will never produce.
+ To make it very unlikely that other plugins use the same sequence of
+ characters, use this structure: <Plug> scriptname mapname
+ In our example the scriptname is "Typecorr" and the mapname is "Add".
+ This results in "<Plug>TypecorrAdd". Only the first character of
+ scriptname and mapname is uppercase, so that we can see where mapname
+ starts.
+
+<SID> is the script ID, a unique identifier for a script.
+ Internally Vim translates <SID> to "<SNR>123_", where "123" can be any
+ number. Thus a function "<SID>Add()" will have a name "<SNR>11_Add()"
+ in one script, and "<SNR>22_Add()" in another. You can see this if
+ you use the ":function" command to get a list of functions. The
+ translation of <SID> in mappings is exactly the same, that's how you
+ can call a script-local function from a mapping.
+
+
+USER COMMAND
+
+Now let's add a user command to add a correction: >
+
+ 38 if !exists(":Correct")
+ 39 command -nargs=1 Correct :call s:Add(<q-args>, 0)
+ 40 endif
+
+The user command is defined only if no command with the same name already
+exists. Otherwise we would get an error here. Overriding the existing user
+command with ":command!" is not a good idea, this would probably make the user
+wonder why the command he defined himself doesn't work. |:command|
+
+
+SCRIPT VARIABLES
+
+When a variable starts with "s:" it is a script variable. It can only be used
+inside a script. Outside the script it's not visible. This avoids trouble
+with using the same variable name in different scripts. The variables will be
+kept as long as Vim is running. And the same variables are used when sourcing
+the same script again. |s:var|
+
+The fun is that these variables can also be used in functions, autocommands
+and user commands that are defined in the script. In our example we can add
+a few lines to count the number of corrections: >
+
+ 19 let s:count = 4
+ ..
+ 30 function s:Add(from, correct)
+ ..
+ 34 let s:count = s:count + 1
+ 35 echo s:count . " corrections now"
+ 36 endfunction
+
+First s:count is initialized to 4 in the script itself. When later the
+s:Add() function is called, it increments s:count. It doesn't matter from
+where the function was called, since it has been defined in the script, it
+will use the local variables from this script.
+
+
+THE RESULT
+
+Here is the resulting complete example: >
+
+ 1 " Vim global plugin for correcting typing mistakes
+ 2 " Last Change: 2000 Oct 15
+ 3 " Maintainer: Bram Moolenaar <Bram@vim.org>
+ 4 " License: This file is placed in the public domain.
+ 5
+ 6 if exists("loaded_typecorr")
+ 7 finish
+ 8 endif
+ 9 let loaded_typecorr = 1
+ 10
+ 11 let s:save_cpo = &cpo
+ 12 set cpo&vim
+ 13
+ 14 iabbrev teh the
+ 15 iabbrev otehr other
+ 16 iabbrev wnat want
+ 17 iabbrev synchronisation
+ 18 \ synchronization
+ 19 let s:count = 4
+ 20
+ 21 if !hasmapto('<Plug>TypecorrAdd')
+ 22 map <unique> <Leader>a <Plug>TypecorrAdd
+ 23 endif
+ 24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add
+ 25
+ 26 noremenu <script> Plugin.Add\ Correction <SID>Add
+ 27
+ 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR>
+ 29
+ 30 function s:Add(from, correct)
+ 31 let to = input("type the correction for " . a:from . ": ")
+ 32 exe ":iabbrev " . a:from . " " . to
+ 33 if a:correct | exe "normal viws\<C-R>\" \b\e" | endif
+ 34 let s:count = s:count + 1
+ 35 echo s:count . " corrections now"
+ 36 endfunction
+ 37
+ 38 if !exists(":Correct")
+ 39 command -nargs=1 Correct :call s:Add(<q-args>, 0)
+ 40 endif
+ 41
+ 42 let &cpo = 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
+that mappings and abbreviations are expanded here, even though the function
+was called from a mapping defined with ":noremap".
+
+Using "unix" for the 'fileformat' option is recommended. The Vim scripts will
+then work everywhere. Scripts with 'fileformat' set to "dos" do not work on
+Unix. Also see |:source_crnl|. To be sure it is set right, do this before
+writing the file: >
+
+ :set fileformat=unix
+
+
+DOCUMENTATION *write-local-help*
+
+It's a good idea to also write some documentation for your plugin. Especially
+when its behavior can be changed by the user. See |add-local-help| for how
+they are installed.
+
+Here is a simple example for a plugin help file, called "typecorr.txt": >
+
+ 1 *typecorr.txt* Plugin for correcting typing mistakes
+ 2
+ 3 If you make typing mistakes, this plugin will have them corrected
+ 4 automatically.
+ 5
+ 6 There are currently only a few corrections. Add your own if you like.
+ 7
+ 8 Mappings:
+ 9 <Leader>a or <Plug>TypecorrAdd
+ 10 Add a correction for the word under the cursor.
+ 11
+ 12 Commands:
+ 13 :Correct {word}
+ 14 Add a correction for {word}.
+ 15
+ 16 *typecorr-settings*
+ 17 This plugin doesn't have any settings.
+
+The first line is actually the only one for which the format matters. It will
+be extracted from the help file to be put in the "LOCAL ADDITIONS:" section of
+help.txt |local-additions|. The first "*" must be in the first column of the
+first line. After adding your help file do ":help" and check that the entries
+line up nicely.
+
+You can add more tags inside ** in your help file. But be careful not to use
+existing help tags. You would probably use the name of your plugin in most of
+them, like "typecorr-settings" in the example.
+
+Using references to other parts of the help in || is recommended. This makes
+it easy for the user to find associated help.
+
+
+FILETYPE DETECTION *plugin-filetype*
+
+If your filetype is not already detected by Vim, you should create a filetype
+detection snippet in a separate file. It is usually in the form of an
+autocommand that sets the filetype when the file name matches a pattern.
+Example: >
+
+ au BufNewFile,BufRead *.foo set filetype=foofoo
+
+Write this single-line file as "ftdetect/foofoo.vim" in the first directory
+that appears in 'runtimepath'. For Unix that would be
+"~/.vim/ftdetect/foofoo.vim". The convention is to use the name of the
+filetype for the script name.
+
+You can make more complicated checks if you like, for example to inspect the
+contents of the file to recognize the language. Also see |new-filetype|.
+
+
+SUMMARY *plugin-special*
+
+Summary of special things to use in a plugin:
+
+s:name Variables local to the script.
+
+<SID> Script-ID, used for mappings and functions local to
+ the script.
+
+hasmapto() Function to test if the user already defined a mapping
+ for functionality the script offers.
+
+<Leader> Value of "mapleader", which the user defines as the
+ keys that plugin mappings start with.
+
+:map <unique> Give a warning if a mapping already exists.
+
+:noremap <script> Use only mappings local to the script, not global
+ mappings.
+
+exists(":Cmd") Check if a user command already exists.
+
+==============================================================================
+*41.11* Writing a filetype plugin *write-filetype-plugin* *ftplugin*
+
+A filetype plugin is like a global plugin, except that it sets options and
+defines mappings for the current buffer only. See |add-filetype-plugin| for
+how this type of plugin is used.
+
+First read the section on global plugins above |41.10|. All that is said there
+also applies to filetype plugins. There are a few extras, which are explained
+here. The essential thing is that a filetype plugin should only have an
+effect on the current buffer.
+
+
+DISABLING
+
+If you are writing a filetype plugin to be used by many people, they need a
+chance to disable loading it. Put this at the top of the plugin: >
+
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+ finish
+ endif
+ let b:did_ftplugin = 1
+
+This also needs to be used to avoid that the same plugin is executed twice for
+the same buffer (happens when using an ":edit" command without arguments).
+
+Now users can disable loading the default plugin completely by making a
+filetype plugin with only this line: >
+
+ let b:did_ftplugin = 1
+
+This does require that the filetype plugin directory comes before $VIMRUNTIME
+in 'runtimepath'!
+
+If you do want to use the default plugin, but overrule one of the settings,
+you can write the different setting in a script: >
+
+ setlocal textwidth=70
+
+Now write this in the "after" directory, so that it gets sourced after the
+distributed "vim.vim" ftplugin |after-directory|. For Unix this would be
+"~/.vim/after/ftplugin/vim.vim". Note that the default plugin will have set
+"b:did_ftplugin", but it is ignored here.
+
+
+OPTIONS
+
+To make sure the filetype plugin only affects the current buffer use the >
+
+ :setlocal
+
+command to set options. And only set options which are local to a buffer (see
+the help for the option to check that). When using |:setlocal| for global
+options or options local to a window, the value will change for many buffers,
+and that is not what a filetype plugin should do.
+
+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: >
+
+ :setlocal formatoptions& formatoptions+=ro
+
+
+MAPPINGS
+
+To make sure mappings will only work in the current buffer use the >
+
+ :map <buffer>
+
+command. This needs to be combined with the two-step mapping explained above.
+An example of how to define functionality in a filetype plugin: >
+
+ if !hasmapto('<Plug>JavaImport')
+ map <buffer> <unique> <LocalLeader>i <Plug>JavaImport
+ endif
+ noremap <buffer> <unique> <Plug>JavaImport oimport ""<Left><Esc>
+
+|hasmapto()| is used to check if the user has already defined a map to
+<Plug>JavaImport. If not, then the filetype plugin defines the default
+mapping. This starts with |<LocalLeader>|, which allows the user to select
+the key(s) he wants filetype plugin mappings to start with. The default is a
+backslash.
+"<unique>" is used to give an error message if the mapping already exists or
+overlaps with an existing mapping.
+|:noremap| is used to avoid that any other mappings that the user has defined
+interferes. You might want to use ":noremap <script>" to allow remapping
+mappings defined in this script that start with <SID>.
+
+The user must have a chance to disable the mappings in a filetype plugin,
+without disabling everything. Here is an example of how this is done for a
+plugin for the mail filetype: >
+
+ " Add mappings, unless the user didn't want this.
+ if !exists("no_plugin_maps") && !exists("no_mail_maps")
+ " Quote text by inserting "> "
+ if !hasmapto('<Plug>MailQuote')
+ vmap <buffer> <LocalLeader>q <Plug>MailQuote
+ nmap <buffer> <LocalLeader>q <Plug>MailQuote
+ endif
+ vnoremap <buffer> <Plug>MailQuote :s/^/> /<CR>
+ nnoremap <buffer> <Plug>MailQuote :.,$s/^/> /<CR>
+ endif
+
+Two global variables are used:
+no_plugin_maps disables mappings for all filetype plugins
+no_mail_maps disables mappings for a specific filetype
+
+
+USER COMMANDS
+
+To add a user command for a specific file type, so that it can only be used in
+one buffer, use the "-buffer" argument to |:command|. Example: >
+
+ :command -buffer Make make %:r.s
+
+
+VARIABLES
+
+A filetype plugin will be sourced for each buffer of the type it's for. Local
+script variables |s:var| will be shared between all invocations. Use local
+buffer variables |b:var| if you want a variable specifically for one buffer.
+
+
+FUNCTIONS
+
+When defining a function, this only needs to be done once. But the filetype
+plugin will be sourced every time a file with this filetype will be opened.
+This construct make sure the function is only defined once: >
+
+ :if !exists("*s:Func")
+ : function s:Func(arg)
+ : ...
+ : endfunction
+ :endif
+<
+
+UNDO *undo_ftplugin*
+
+When the user does ":setfiletype xyz" the effect of the previous filetype
+should be undone. Set the b:undo_ftplugin variable to the commands that will
+undo the settings in your filetype plugin. Example: >
+
+ let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
+ \ . "| unlet b:match_ignorecase b:match_words b:match_skip"
+
+Using ":setlocal" with "<" after the option name resets the option to its
+global value. That is mostly the best way to reset the option value.
+
+This does require removing the "C" flag from 'cpoptions' to allow line
+continuation, as mentioned above |use-cpo-save|.
+
+
+FILE NAME
+
+The filetype must be included in the file name |ftplugin-name|. Use one of
+these three forms:
+
+ .../ftplugin/stuff.vim
+ .../ftplugin/stuff_foo.vim
+ .../ftplugin/stuff/bar.vim
+
+"stuff" is the filetype, "foo" and "bar" are arbitrary names.
+
+
+SUMMARY *ftplugin-special*
+
+Summary of special things to use in a filetype plugin:
+
+<LocalLeader> Value of "maplocalleader", which the user defines as
+ the keys that filetype plugin mappings start with.
+
+:map <buffer> Define a mapping local to the buffer.
+
+:noremap <script> Only remap mappings defined in this script that start
+ with <SID>.
+
+:setlocal Set an option for the current buffer only.
+
+:command -buffer Define a user command local to the buffer.
+
+exists("*s:Func") Check if a function was already defined.
+
+Also see |plugin-special|, the special things used for all plugins.
+
+==============================================================================
+*41.12* Writing a compiler plugin *write-compiler-plugin*
+
+A compiler plugin sets options for use with a specific compiler. The user can
+load it with the |:compiler| command. The main use is to set the
+'errorformat' and 'makeprg' options.
+
+Easiest is to have a look at examples. This command will edit all the default
+compiler plugins: >
+
+ :next $VIMRUNTIME/compiler/*.vim
+
+Use |:next| to go to the next plugin file.
+
+There are two special items about these files. First is a mechanism to allow
+a user to overrule or add to the default file. The default files start with: >
+
+ :if exists("current_compiler")
+ : finish
+ :endif
+ :let current_compiler = "mine"
+
+When you write a compiler file and put it in your personal runtime directory
+(e.g., ~/.vim/compiler for Unix), you set the "current_compiler" variable to
+make the default file skip the settings.
+
+The second mechanism is to use ":set" for ":compiler!" and ":setlocal" for
+":compiler". Vim defines the ":CompilerSet" user command for this. However,
+older Vim versions don't, thus your plugin should define it then. This is an
+example: >
+
+ if exists(":CompilerSet") != 2
+ command -nargs=* CompilerSet setlocal <args>
+ endif
+ CompilerSet errorformat& " use the default 'errorformat'
+ CompilerSet makeprg=nmake
+
+When you write a compiler plugin for the Vim distribution or for a system-wide
+runtime directory, use the mechanism mentioned above. When
+"current_compiler" was already set by a user plugin nothing will be done.
+
+When you write a compiler plugin to overrule settings from a default plugin,
+don't check "current_compiler". This plugin is supposed to be loaded
+last, thus it should be in a directory at the end of 'runtimepath'. For Unix
+that could be ~/.vim/after/compiler.
+
+==============================================================================
+
+Next chapter: |usr_42.txt| Add new menus
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_42.txt b/runtime/doc/usr_42.txt
new file mode 100644
index 000000000..b560d6b64
--- /dev/null
+++ b/runtime/doc/usr_42.txt
@@ -0,0 +1,365 @@
+*usr_42.txt* For Vim version 7.0aa. Last change: 2002 Oct 08
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Add new menus
+
+
+By now you know that Vim is very flexible. This includes the menus used in
+the GUI. You can define your own menu entries to make certain commands easily
+accessible. This is for mouse-happy users only.
+
+|42.1| Introduction
+|42.2| Menu commands
+|42.3| Various
+|42.4| Toolbar and popup menus
+
+ Next chapter: |usr_43.txt| Using filetypes
+ Previous chapter: |usr_41.txt| Write a Vim script
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*42.1* Introduction
+
+The menus that Vim uses are defined in the file "$VIMRUNTIME/menu.vim". If
+you want to write your own menus, you might first want to look through that
+file.
+ To define a menu item, use the ":menu" command. The basic form of this
+command is as follows: >
+
+ :menu {menu-item} {keys}
+
+The {menu-item} describes where on the menu to put the item. A typical
+{menu-item} is "File.Save", which represents the item "Save" under the
+"File" menu. A dot is used to separate the names. Example: >
+
+ :menu File.Save :update<CR>
+
+The ":update" command writes the file when it was modified.
+ You can add another level: "Edit.Settings.Shiftwidth" defines a submenu
+"Settings" under the "Edit" menu, with an item "Shiftwidth". You could use
+even deeper levels. Don't use this too much, you need to move the mouse quite
+a bit to use such an item.
+ The ":menu" command is very similar to the ":map" command: the left side
+specifies how the item is triggered and the right hand side defines the
+characters that are executed. {keys} are characters, they are used just like
+you would have typed them. Thus in Insert mode, when {keys} is plain text,
+that text is inserted.
+
+
+ACCELERATORS
+
+The ampersand character (&) is used to indicate an accelerator. For instance,
+you can use Alt-F to select "File" and S to select "Save". (The 'winaltkeys'
+option may disable this though!). Therefore, the {menu-item} looks like
+"&File.&Save". The accelerator characters will be underlined in the menu.
+ You must take care that each key is used only once in each menu. Otherwise
+you will not know which of the two will actually be used. Vim doesn't warn
+you for this.
+
+
+PRIORITIES
+
+The actual definition of the File.Save menu item is as follows: >
+
+ :menu 10.340 &File.&Save<Tab>:w :confirm w<CR>
+
+The number 10.340 is called the priority number. It is used by the editor to
+decide where it places the menu item. The first number (10) indicates the
+position on the menu bar. Lower numbered menus are positioned to the left,
+higher numbers to the right.
+ These are the priorities used for the standard menus:
+
+ 10 20 40 50 60 70 9999
+
+ +------------------------------------------------------------+
+ | File Edit Tools Syntax Buffers Window Help |
+ +------------------------------------------------------------+
+
+Notice that the Help menu is given a very high number, to make it appear on
+the far right.
+ The second number (340) determines the location of the item within the
+pull-down menu. Lower numbers go on top, higher number on the bottom. These
+are the priorities in the File menu:
+
+ +-----------------+
+ 10.310 |Open... |
+ 10.320 |Split-Open... |
+ 10.325 |New |
+ 10.330 |Close |
+ 10.335 |---------------- |
+ 10.340 |Save |
+ 10.350 |Save As... |
+ 10.400 |---------------- |
+ 10.410 |Split Diff with |
+ 10.420 |Split Patched By |
+ 10.500 |---------------- |
+ 10.510 |Print |
+ 10.600 |---------------- |
+ 10.610 |Save-Exit |
+ 10.620 |Exit |
+ +-----------------+
+
+Notice that there is room in between the numbers. This is where you can
+insert your own items, if you really want to (it's often better to leave the
+standard menus alone and add a new menu for your own items).
+ When you create a submenu, you can add another ".number" to the priority.
+Thus each name in {menu-item} has its priority number.
+
+
+SPECIAL CHARACTERS
+
+The {menu-item} in this example is "&File.&Save<Tab>:w". This brings up an
+important point: {menu-item} must be one word. If you want to put a dot,
+space or tabs in the name, you either use the <> notation (<Space> and <Tab>,
+for instance) or use the backslash (\) escape. >
+
+ :menu 10.305 &File.&Do\ It\.\.\. :exit<CR>
+
+In this example, the name of the menu item "Do It..." contains a space and the
+command is ":exit<CR>".
+
+The <Tab> character in a menu name is used to separate the part that defines
+the menu name from the part that gives a hint to the user. The part after the
+<Tab> is displayed right aligned in the menu. In the File.Save menu the name
+used is "&File.&Save<Tab>:w". Thus the menu name is "File.Save" and the hint
+is ":w".
+
+
+SEPARATORS
+
+The separator lines, used to group related menu items together, can be defined
+by using a name that starts and ends in a '-'. For example "-sep-". When
+using several separators the names must be different. Otherwise the names
+don't matter.
+ The command from a separator will never be executed, but you have to define
+one anyway. A single colon will do. Example: >
+
+ :amenu 20.510 Edit.-sep3- :
+
+==============================================================================
+*42.2* Menu commands
+
+You can define menu items that exist for only certain modes. This works just
+like the variations on the ":map" command:
+
+ :menu Normal, Visual and Operator-pending mode
+ :nmenu Normal mode
+ :vmenu Visual mode
+ :omenu Operator-pending mode
+ :menu! Insert and Command-line mode
+ :imenu Insert mode
+ :cmenu Command-line mode
+ :amenu All modes
+
+To avoid that the commands of a menu item are being mapped, use the command
+":noremenu", ":nnoremenu", ":anoremenu", etc.
+
+
+USING :AMENU
+
+The ":amenu" command is a bit different. It assumes that the {keys} you
+give are to be executed in Normal mode. When Vim is in Visual or Insert mode
+when the menu is used, Vim first has to go back to Normal mode. ":amenu"
+inserts a CTRL-C or CTRL-O for you. For example, if you use this command:
+>
+ :amenu 90.100 Mine.Find\ Word *
+
+Then the resulting menu commands will be:
+
+ Normal mode: *
+ Visual mode: CTRL-C *
+ Operator-pending mode: CTRL-C *
+ Insert mode: CTRL-O *
+ Command-line mode: CTRL-C *
+
+When in Command-line mode the CTRL-C will abandon the command typed so far.
+In Visual and Operator-pending mode CTRL-C will stop the mode. The CTRL-O in
+Insert mode will execute the command and then return to Insert mode.
+ CTRL-O only works for one command. If you need to use two or more
+commands, put them in a function and call that function. Example: >
+
+ :amenu Mine.Next\ File :call <SID>NextFile()<CR>
+ :function <SID>NextFile()
+ : next
+ : 1/^Code
+ :endfunction
+
+This menu entry goes to the next file in the argument list with ":next". Then
+it searches for the line that starts with "Code".
+ The <SID> before the function name is the script ID. This makes the
+function local to the current Vim script file. This avoids problems when a
+function with the same name is defined in another script file. See |<SID>|.
+
+
+SILENT MENUS
+
+The menu executes the {keys} as if you typed them. For a ":" command this
+means you will see the command being echoed on the command line. If it's a
+long command, the hit-Enter prompt will appear. That can be very annoying!
+ To avoid this, make the menu silent. This is done with the <silent>
+argument. For example, take the call to NextFile() in the previous example.
+When you use this menu, you will see this on the command line:
+
+ :call <SNR>34_NextFile() ~
+
+To avoid this text on the command line, insert "<silent>" as the first
+argument: >
+
+ :amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>
+
+Don't use "<silent>" too often. It is not needed for short commands. If you
+make a menu for someone else, being able the see the executed command will
+give him a hint about what he could have typed, instead of using the mouse.
+
+
+LISTING MENUS
+
+When a menu command is used without a {keys} part, it lists the already
+defined menus. You can specify a {menu-item}, or part of it, to list specific
+menus. Example: >
+
+ :amenu
+
+This lists all menus. That's a long list! Better specify the name of a menu
+to get a shorter list: >
+
+ :amenu Edit
+
+This lists only the "Edit" menu items for all modes. To list only one
+specific menu item for Insert mode: >
+
+ :imenu Edit.Undo
+
+Take care that you type exactly the right name. Case matters here. But the
+'&' for accelerators can be omitted. The <Tab> and what comes after it can be
+left out as well.
+
+
+DELETING MENUS
+
+To delete a menu, the same command is used as for listing, but with "menu"
+changed to "unmenu". Thus ":menu" becomes, ":unmenu", ":nmenu" becomes
+":nunmenu", etc. To delete the "Tools.Make" item for Insert mode: >
+
+ :iunmenu Tools.Make
+
+You can delete a whole menu, with all its items, by using the menu name.
+Example: >
+
+ :aunmenu Syntax
+
+This deletes the Syntax menu and all the items in it.
+
+==============================================================================
+*42.3* Various
+
+You can change the appearance of the menus with flags in 'guioptions'. In the
+default value they are all included. You can remove a flag with a command
+like: >
+
+ :set guioptions-=m
+<
+ m When removed the menubar is not displayed.
+
+ M When removed the default menus are not loaded.
+
+ g When removed the inactive menu items are not made grey
+ but are completely removed. (Does not work on all
+ systems.)
+
+ t When removed the tearoff feature is not enabled.
+
+The dotted line at the top of a menu is not a separator line. When you select
+this item, the menu is "teared-off": It is displayed in a separate window.
+This is called a tearoff menu. This is useful when you use the same menu
+often.
+
+For translating menu items, see |:menutrans|.
+
+Since the mouse has to be used to select a menu item, it is a good idea to use
+the ":browse" command for selecting a file. And ":confirm" to get a dialog
+instead of an error message, e.g., when the current buffer contains changes.
+These two can be combined: >
+
+ :amenu File.Open :browse confirm edit<CR>
+
+The ":browse" makes a file browser appear to select the file to edit. The
+":confirm" will pop up a dialog when the current buffer has changes. You can
+then select to save the changes, throw them away or cancel the command.
+ For more complicated items, the confirm() and inputdialog() functions can
+be used. The default menus contain a few examples.
+
+==============================================================================
+*42.4* Toolbar and popup menus
+
+There are two special menus: ToolBar and PopUp. Items that start with these
+names do not appear in the normal menu bar.
+
+
+TOOLBAR
+
+The toolbar appears only when the "T" flag is included in the 'guioptions'
+option.
+ The toolbar uses icons rather than text to represent the command. For
+example, the {menu-item} named "ToolBar.New" causes the "New" icon to appear
+on the toolbar.
+ The Vim editor has 28 built-in icons. You can find a table here:
+|builtin-tools|. Most of them are used in the default toolbar. You can
+redefine what these items do (after the default menus are setup).
+ You can add another bitmap for a toolbar item. Or define a new toolbar
+item with a bitmap. For example, define a new toolbar item with: >
+
+ :tmenu ToolBar.Compile Compile the current file
+ :amenu ToolBar.Compile :!cc % -o %:r<CR>
+
+Now you need to create the icon. For MS-Windows it must be in bitmap format,
+with the name "Compile.bmp". For Unix XPM format is used, the file name is
+"Compile.xpm". The size must be 18 by 18 pixels. On MS-Windows other sizes
+can be used as well, but it will look ugly.
+ Put the bitmap in the directory "bitmaps" in one of the directories from
+'runtimepath'. E.g., for Unix "~/.vim/bitmaps/Compile.xpm".
+
+You can define tooltips for the items in the toolbar. A tooltip is a short
+text that explains what a toolbar item will do. For example "Open file". It
+appears when the mouse pointer is on the item, without moving for a moment.
+This is very useful if the meaning of the picture isn't that obvious.
+Example: >
+
+ :tmenu ToolBar.Make Run make in the current directory
+<
+ Note:
+ Pay attention to the case used. "Toolbar" and "toolbar" are different
+ from "ToolBar"!
+
+To remove a tooltip, use the |:tunmenu| command.
+
+The 'toolbar' option can be used to display text instead of a bitmap, or both
+text and a bitmap. Most people use just the bitmap, since the text takes
+quite a bit of space.
+
+
+POPUP MENU
+
+The popup menu pops up where the mouse pointer is. On MS-Windows you activate
+it by clicking the right mouse button. Then you can select an item with the
+left mouse button. On Unix the popup menu is used by pressing and holding the
+right mouse button.
+ The popup menu only appears when the 'mousemodel' has been set to "popup"
+or "popup_setpos". The difference between the two is that "popup_setpos"
+moves the cursor to the mouse pointer position. When clicking inside a
+selection, the selection will be used unmodified. When there is a selection
+but you click outside of it, the selection is removed.
+ There is a separate popup menu for each mode. Thus there are never grey
+items like in the normal menus.
+
+What is the meaning of life, the universe and everything? *42*
+Douglas Adams, the only person who knew what this question really was about is
+now dead, unfortunately. So now you might wonder what the meaning of death
+is...
+
+==============================================================================
+
+Next chapter: |usr_43.txt| Using filetypes
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_43.txt b/runtime/doc/usr_43.txt
new file mode 100644
index 000000000..e04b8b27b
--- /dev/null
+++ b/runtime/doc/usr_43.txt
@@ -0,0 +1,172 @@
+*usr_43.txt* For Vim version 7.0aa. Last change: 2002 Jul 14
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Using filetypes
+
+
+When you are editing a file of a certain type, for example a C program or a
+shell script, you often use the same option settings and mappings. You
+quickly get tired of manually setting these each time. This chapter explains
+how to do it automatically.
+
+|43.1| Plugins for a filetype
+|43.2| Adding a filetype
+
+ Next chapter: |usr_44.txt| Your own syntax highlighted
+ Previous chapter: |usr_42.txt| Add new menus
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*43.1* Plugins for a filetype *filetype-plugin*
+
+How to start using filetype plugins has already been discussed here:
+|add-filetype-plugin|. But you probably are not satisfied with the default
+settings, because they have been kept minimal. Suppose that for C files you
+want to set the 'softtabstop' option to 4 and define a mapping to insert a
+three-line comment. You do this with only two steps:
+
+ *your-runtime-dir*
+1. Create your own runtime directory. On Unix this usually is "~/.vim". In
+ this directory create the "ftplugin" directory: >
+
+ mkdir ~/.vim
+ mkdir ~/.vim/ftplugin
+<
+ When you are not on Unix, check the value of the 'runtimepath' option to
+ see where Vim will look for the "ftplugin" directory: >
+
+ set runtimepath
+
+< You would normally use the first directory name (before the first comma).
+ You might want to prepend a directory name to the 'runtimepath' option in
+ your |vimrc| file if you don't like the default value.
+
+2. Create the file "~/.vim/ftplugin/c.vim", with the contents: >
+
+ setlocal softtabstop=4
+ noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc>
+
+Try editing a C file. You should notice that the 'softtabstop' option is set
+to 4. But when you edit another file it's reset to the default zero. That is
+because the ":setlocal" command was used. This sets the 'softtabstop' option
+only locally to the buffer. As soon as you edit another buffer, it will be
+set to the value set for that buffer. For a new buffer it will get the
+default value or the value from the last ":set" command.
+
+Likewise, the mapping for "\c" will disappear when editing another buffer.
+The ":map <buffer>" command creates a mapping that is local to the current
+buffer. This works with any mapping command: ":map!", ":vmap", etc. The
+|<LocalLeader>| in the mapping is replaced with the value of "maplocalleader".
+
+You can find examples for filetype plugins in this directory: >
+
+ $VIMRUNTIME/ftplugin/
+
+More details about writing a filetype plugin can be found here:
+|write-plugin|.
+
+==============================================================================
+*43.2* Adding a filetype
+
+If you are using a type of file that is not recognized by Vim, this is how to
+get it recognized. You need a runtime directory of your own. See
+|your-runtime-dir| above.
+
+Create a file "filetype.vim" which contains an autocommand for your filetype.
+(Autocommands were explained in section |40.3|.) Example: >
+
+ augroup filetypedetect
+ au BufNewFile,BufRead *.xyz setf xyz
+ augroup END
+
+This will recognize all files that end in ".xyz" as the "xyz" filetype. The
+":augroup" commands put this autocommand in the "filetypedetect" group. This
+allows removing all autocommands for filetype detection when doing ":filetype
+off". The "setf" command will set the 'filetype' option to its argument,
+unless it was set already. This will make sure that 'filetype' isn't set
+twice.
+
+You can use many different patterns to match the name of your file. Directory
+names can also be included. See |autocmd-patterns|. For example, the files
+under "/usr/share/scripts/" are all "ruby" files, but don't have the expected
+file name extension. Adding this to the example above: >
+
+ augroup filetypedetect
+ au BufNewFile,BufRead *.xyz setf xyz
+ au BufNewFile,BufRead /usr/share/scripts/* setf ruby
+ augroup END
+
+However, if you now edit a file /usr/share/scripts/README.txt, this is not a
+ruby file. The danger of a pattern ending in "*" is that it quickly matches
+too many files. To avoid trouble with this, put the filetype.vim file in
+another directory, one that is at the end of 'runtimepath'. For Unix for
+example, you could use "~/.vim/after/filetype.vim".
+ You now put the detection of text files in ~/.vim/filetype.vim: >
+
+ augroup filetypedetect
+ au BufNewFile,BufRead *.txt setf text
+ augroup END
+
+That file is found in 'runtimepath' first. Then use this in
+~/.vim/after/filetype.vim, which is found last: >
+
+ augroup filetypedetect
+ au BufNewFile,BufRead /usr/share/scripts/* setf ruby
+ augroup END
+
+What will happen now is that Vim searches for "filetype.vim" files in each
+directory in 'runtimepath'. First ~/.vim/filetype.vim is found. The
+autocommand to catch *.txt files is defined there. Then Vim finds the
+filetype.vim file in $VIMRUNTIME, which is halfway 'runtimepath'. Finally
+~/.vim/after/filetype.vim is found and the autocommand for detecting ruby
+files in /usr/share/scripts is added.
+ When you now edit /usr/share/scripts/README.txt, the autocommands are
+checked in the order in which they were defined. The *.txt pattern matches,
+thus "setf text" is executed to set the filetype to "text". The pattern for
+ruby matches too, and the "setf ruby" is executed. But since 'filetype' was
+already set to "text", nothing happens here.
+ When you edit the file /usr/share/scripts/foobar the same autocommands are
+checked. Only the one for ruby matches and "setf ruby" sets 'filetype' to
+ruby.
+
+
+RECOGNIZING BY CONTENTS
+
+If your file cannot be recognized by its file name, you might be able to
+recognize it by its contents. For example, many script files start with a
+line like:
+
+ #!/bin/xyz ~
+
+To recognize this script create a file "scripts.vim" in your runtime directory
+(same place where filetype.vim goes). It might look like this: >
+
+ if did_filetype()
+ finish
+ endif
+ if getline(1) =~ '^#!.*[/\\]xyz\>'
+ setf xyz
+ endif
+
+The first check with did_filetype() is to avoid that you will check the
+contents of files for which the filetype was already detected by the file
+name. That avoids wasting time on checking the file when the "setf" command
+won't do anything.
+ The scripts.vim file is sourced by an autocommand in the default
+filetype.vim file. Therefore, the order of checks is:
+
+ 1. filetype.vim files before $VIMRUNTIME in 'runtimepath'
+ 2. first part of $VIMRUNTIME/filetype.vim
+ 3. all scripts.vim files in 'runtimepath'
+ 4. remainder of $VIMRUNTIME/filetype.vim
+ 5. filetype.vim files after $VIMRUNTIME in 'runtimepath'
+
+If this is not sufficient for you, add an autocommand that matches all files
+and sources a script or executes a function to check the contents of the file.
+
+==============================================================================
+
+Next chapter: |usr_44.txt| Your own syntax highlighted
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_44.txt b/runtime/doc/usr_44.txt
new file mode 100644
index 000000000..021c41e23
--- /dev/null
+++ b/runtime/doc/usr_44.txt
@@ -0,0 +1,719 @@
+*usr_44.txt* For Vim version 7.0aa. Last change: 2002 Oct 10
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Your own syntax highlighted
+
+
+Vim comes with highlighting for a couple of hundred different file types. If
+the file you are editing isn't included, read this chapter to find out how to
+get this type of file highlighted. Also see |:syn-define| in the reference
+manual.
+
+|44.1| Basic syntax commands
+|44.2| Keywords
+|44.3| Matches
+|44.4| Regions
+|44.5| Nested items
+|44.6| Following groups
+|44.7| Other arguments
+|44.8| Clusters
+|44.9| Including another syntax file
+|44.10| Synchronizing
+|44.11| Installing a syntax file
+|44.12| Portable syntax file layout
+
+ Next chapter: |usr_45.txt| Select your language
+ Previous chapter: |usr_43.txt| Using filetypes
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*44.1* Basic syntax commands
+
+Using an existing syntax file to start with will save you a lot of time. Try
+finding a syntax file in $VIMRUNTIME/syntax for a language that is similar.
+These files will also show you the normal layout of a syntax file. To
+understand it, you need to read the following.
+
+Let's start with the basic arguments. Before we start defining any new
+syntax, we need to clear out any old definitions: >
+
+ :syntax clear
+
+This isn't required in the final syntax file, but very useful when
+experimenting.
+
+There are more simplifications in this chapter. If you are writing a syntax
+file to be used by others, read all the way through the end to find out the
+details.
+
+
+LISTING DEFINED ITEMS
+
+To check which syntax items are currently defined, use this command: >
+
+ :syntax
+
+You can use this to check which items have actually been defined. Quite
+useful when you are experimenting with a new syntax file. It also shows the
+colors used for each item, which helps to find out what is what.
+ To list the items in a specific syntax group use: >
+
+ :syntax list {group-name}
+
+This also can be used to list clusters (explained in |44.8|). Just include
+the @ in the name.
+
+
+MATCHING CASE
+
+Some languages are not case sensitive, such as Pascal. Others, such as C, are
+case sensitive. You need to tell which type you have with the following
+commands: >
+ :syntax case match
+ :syntax case ignore
+
+The "match" argument means that Vim will match the case of syntax elements.
+Therefore, "int" differs from "Int" and "INT". If the "ignore" argument is
+used, the following are equivalent: "Procedure", "PROCEDURE" and "procedure".
+ The ":syntax case" commands can appear anywhere in a syntax file and affect
+the syntax definitions that follow. In most cases, you have only one ":syntax
+case" command in your syntax file; if you work with an unusual language that
+contains both case-sensitive and non-case-sensitive elements, however, you can
+scatter the ":syntax case" command throughout the file.
+
+==============================================================================
+*44.2* Keywords
+
+The most basic syntax elements are keywords. To define a keyword, use the
+following form: >
+
+ :syntax keyword {group} {keyword} ...
+
+The {group} is the name of a syntax group. With the ":highlight" command you
+can assign colors to a {group}. The {keyword} argument is an actual keyword.
+Here are a few examples: >
+
+ :syntax keyword xType int long char
+ :syntax keyword xStatement if then else endif
+
+This example uses the group names "xType" and "xStatement". By convention,
+each group name is prefixed by the filetype for the language being defined.
+This example defines syntax for the x language (eXample language without an
+interesting name). In a syntax file for "csh" scripts the name "cshType"
+would be used. Thus the prefix is equal to the value of 'filetype'.
+ These commands cause the words "int", "long" and "char" to be highlighted
+one way and the words "if", "then", "else" and "endif" to be highlighted
+another way. Now you need to connect the x group names to standard Vim
+names. You do this with the following commands: >
+
+ :highlight link xType Type
+ :highlight link xStatement Statement
+
+This tells Vim to highlight "xType" like "Type" and "xStatement" like
+"Statement". See |group-name| for the standard names.
+
+
+UNUSUAL KEYWORDS
+
+The characters used in a keyword must be in the 'iskeyword' option. If you
+use another character, the word will never match. Vim doesn't give a warning
+message for this.
+ The x language uses the '-' character in keywords. This is how it's done:
+>
+ :setlocal iskeyword+=-
+ :syntax keyword xStatement when-not
+
+The ":setlocal" command is used to change 'iskeyword' only for the current
+buffer. Still it does change the behavior of commands like "w" and "*". If
+that is not wanted, don't define a keyword but use a match (explained in the
+next section).
+
+The x language allows for abbreviations. For example, "next" can be
+abbreviated to "n", "ne" or "nex". You can define them by using this command:
+>
+ :syntax keyword xStatement n[ext]
+
+This doesn't match "nextone", keywords always match whole words only.
+
+==============================================================================
+*44.3* Matches
+
+Consider defining something a bit more complex. You want to match ordinary
+identifiers. To do this, you define a match syntax item. This one matches
+any word consisting of only lowercase letters: >
+
+ :syntax match xIdentifier /\<\l\+\>/
+<
+ Note:
+ Keywords overrule any other syntax item. Thus the keywords "if",
+ "then", etc., will be keywords, as defined with the ":syntax keyword"
+ commands above, even though they also match the pattern for
+ xIdentifier.
+
+The part at the end is a pattern, like it's used for searching. The // is
+used to surround the pattern (like how it's done in a ":substitute" command).
+You can use any other character, like a plus or a quote.
+
+Now define a match for a comment. In the x language it is anything from # to
+the end of a line: >
+
+ :syntax match xComment /#.*/
+
+Since you can use any search pattern, you can highlight very complex things
+with a match item. See |pattern| for help on search patterns.
+
+==============================================================================
+*44.4* Regions
+
+In the example x language, strings are enclosed in double quotation marks (").
+To highlight strings you define a region. You need a region start (double
+quote) and a region end (double quote). The definition is as follows: >
+
+ :syntax region xString start=/"/ end=/"/
+
+The "start" and "end" directives define the patterns used to find the start
+and end of the region. But what about strings that look like this?
+
+ "A string with a double quote (\") in it" ~
+
+This creates a problem: The double quotation marks in the middle of the string
+will end the region. You need to tell Vim to skip over any escaped double
+quotes in the string. Do this with the skip keyword: >
+
+ :syntax region xString start=/"/ skip=/\\"/ end=/"/
+
+The double backslash matches a single backslash, since the backslash is a
+special character in search patterns.
+
+When to use a region instead of a match? The main difference is that a match
+item is a single pattern, which must match as a whole. A region starts as
+soon as the "start" pattern matches. Whether the "end" pattern is found or
+not doesn't matter. Thus when the item depends on the "end" pattern to match,
+you cannot use a region. Otherwise, regions are often simpler to define. And
+it is easier to use nested items, as is explained in the next section.
+
+==============================================================================
+*44.5* Nested items
+
+Take a look at this comment:
+
+ %Get input TODO: Skip white space ~
+
+You want to highlight TODO in big yellow letters, even though it is in a
+comment that is highlighted blue. To let Vim know about this, you define the
+following syntax groups: >
+
+ :syntax keyword xTodo TODO contained
+ :syntax match xComment /%.*/ contains=xTodo
+
+In the first line, the "contained" argument tells Vim that this keyword can
+exist only inside another syntax item. The next line has "contains=xTodo".
+This indicates that the xTodo syntax element is inside it. The result is that
+the comment line as a whole is matched with "xComment" and made blue. The
+word TODO inside it is matched by xTodo and highlighted yellow (highlighting
+for xTodo was setup for this).
+
+
+RECURSIVE NESTING
+
+The x language defines code blocks in curly braces. And a code block may
+contain other code blocks. This can be defined this way: >
+
+ :syntax region xBlock start=/{/ end=/}/ contains=xBlock
+
+Suppose you have this text:
+
+ while i < b { ~
+ if a { ~
+ b = c; ~
+ } ~
+ } ~
+
+First a xBlock starts at the { in the first line. In the second line another
+{ is found. Since we are inside a xBlock item, and it contains itself, a
+nested xBlock item will start here. Thus the "b = c" line is inside the
+second level xBlock region. Then a } is found in the next line, which matches
+with the end pattern of the region. This ends the nested xBlock. Because the
+} is included in the nested region, it is hidden from the first xBlock region.
+Then at the last } the first xBlock region ends.
+
+
+KEEPING THE END
+
+Consider the following two syntax items: >
+
+ :syntax region xComment start=/%/ end=/$/ contained
+ :syntax region xPreProc start=/#/ end=/$/ contains=xComment
+
+You define a comment as anything from % to the end of the line. A
+preprocessor directive is anything from # to the end of the line. Because you
+can have a comment on a preprocessor line, the preprocessor definition
+includes a "contains=xComment" argument. Now look what happens with this
+text:
+
+ #define X = Y % Comment text ~
+ int foo = 1; ~
+
+What you see is that the second line is also highlighted as xPreProc. The
+preprocessor directive should end at the end of the line. That is why
+you have used "end=/$/". So what is going wrong?
+ The problem is the contained comment. The comment starts with % and ends
+at the end of the line. After the comment ends, the preprocessor syntax
+continues. This is after the end of the line has been seen, so the next
+line is included as well.
+ To avoid this problem and to avoid a contained syntax item eating a needed
+end of line, use the "keepend" argument. This takes care of
+the double end-of-line matching: >
+
+ :syntax region xComment start=/%/ end=/$/ contained
+ :syntax region xPreProc start=/#/ end=/$/ contains=xComment keepend
+
+
+CONTAINING MANY ITEMS
+
+You can use the contains argument to specify that everything can be contained.
+For example: >
+
+ :syntax region xList start=/\[/ end=/\]/ contains=ALL
+
+All syntax items will be contained in this one. It also contains itself, but
+not at the same position (that would cause an endless loop).
+ You can specify that some groups are not contained. Thus contain all
+groups but the ones that are listed:
+>
+ :syntax region xList start=/\[/ end=/\]/ contains=ALLBUT,xString
+
+With the "TOP" item you can include all items that don't have a "contained"
+argument. "CONTAINED" is used to only include items with a "contained"
+argument. See |:syn-contains| for the details.
+
+==============================================================================
+*44.6* Following groups
+
+The x language has statements in this form:
+
+ if (condition) then ~
+
+You want to highlight the three items differently. But "(condition)" and
+"then" might also appear in other places, where they get different
+highlighting. This is how you can do this: >
+
+ :syntax match xIf /if/ nextgroup=xIfCondition skipwhite
+ :syntax match xIfCondition /([^)]*)/ contained nextgroup=xThen skipwhite
+ :syntax match xThen /then/ contained
+
+The "nextgroup" argument specifies which item can come next. This is not
+required. If none of the items that are specified are found, nothing happens.
+For example, in this text:
+
+ if not (condition) then ~
+
+The "if" is matched by xIf. "not" doesn't match the specified nextgroup
+xIfCondition, thus only the "if" is highlighted.
+
+The "skipwhite" argument tells Vim that white space (spaces and tabs) may
+appear in between the items. Similar arguments are "skipnl", which allows a
+line break in between the items, and "skipempty", which allows empty lines.
+Notice that "skipnl" doesn't skip an empty line, something must match after
+the line break.
+
+==============================================================================
+*44.7* Other arguments
+
+MATCHGROUP
+
+When you define a region, the entire region is highlighted according to the
+group name specified. To highlight the text enclosed in parentheses () with
+the group xInside, for example, use the following command: >
+
+ :syntax region xInside start=/(/ end=/)/
+
+Suppose, that you want to highlight the parentheses differently. You can do
+this with a lot of convoluted region statements, or you can use the
+"matchgroup" argument. This tells Vim to highlight the start and end of a
+region with a different highlight group (in this case, the xParen group): >
+
+ :syntax region xInside matchgroup=xParen start=/(/ end=/)/
+
+The "matchgroup" argument applies to the start or end match that comes after
+it. In the previous example both start and end are highlighted with xParen.
+To highlight the end with xParenEnd: >
+
+ :syntax region xInside matchgroup=xParen start=/(/
+ \ matchgroup=xParenEnd end=/)/
+
+A side effect of using "matchgroup" is that contained items will not match in
+the start or end of the region. The example for "transparent" uses this.
+
+
+TRANSPARENT
+
+In a C language file you would like to highlight the () text after a "while"
+differently from the () text after a "for". In both of these there can be
+nested () items, which should be highlighted in the same way. You must make
+sure the () highlighting stops at the matching ). This is one way to do this:
+>
+ :syntax region cWhile matchgroup=cWhile start=/while\s*(/ end=/)/
+ \ contains=cCondNest
+ :syntax region cFor matchgroup=cFor start=/for\s*(/ end=/)/
+ \ contains=cCondNest
+ :syntax region cCondNest start=/(/ end=/)/ contained transparent
+
+Now you can give cWhile and cFor different highlighting. The cCondNest item
+can appear in either of them, but take over the highlighting of the item it is
+contained in. The "transparent" argument causes this.
+ Notice that the "matchgroup" argument has the same group as the item
+itself. Why define it then? Well, the side effect of using a matchgroup is
+that contained items are not found in the match with the start item then.
+This avoids that the cCondNest group matches the ( just after the "while" or
+"for". If this would happen, it would span the whole text until the matching
+) and the region would continue after it. Now cCondNest only matches after
+the match with the start pattern, thus after the first (.
+
+
+OFFSETS
+
+Suppose you want to define a region for the text between ( and ) after an
+"if". But you don't want to include the "if" or the ( and ). You can do this
+by specifying offsets for the patterns. Example: >
+
+ :syntax region xCond start=/if\s*(/ms=e+1 end=/)/me=s-1
+
+The offset for the start pattern is "ms=e+1". "ms" stands for Match Start.
+This defines an offset for the start of the match. Normally the match starts
+where the pattern matches. "e+1" means that the match now starts at the end
+of the pattern match, and then one character further.
+ The offset for the end pattern is "me=s-1". "me" stands for Match End.
+"s-1" means the start of the pattern match and then one character back. The
+result is that in this text:
+
+ if (foo == bar) ~
+
+Only the text "foo == bar" will be highlighted as xCond.
+
+More about offsets here: |:syn-pattern-offset|.
+
+
+ONELINE
+
+The "oneline" argument indicates that the region does not cross a line
+boundary. For example: >
+
+ :syntax region xIfThen start=/if/ end=/then/ oneline
+
+This defines a region that starts at "if" and ends at "then". But if there is
+no "then" after the "if", the region doesn't match.
+
+ Note:
+ When using "oneline" the region doesn't start if the end pattern
+ doesn't match in the same line. Without "oneline" Vim does _not_
+ check if there is a match for the end pattern. The region starts even
+ when the end pattern doesn't match in the rest of the file.
+
+
+CONTINUATION LINES AND AVOIDING THEM
+
+Things now become a little more complex. Let's define a preprocessor line.
+This starts with a # in the first column and continues until the end of the
+line. A line that ends with \ makes the next line a continuation line. The
+way you handle this is to allow the syntax item to contain a continuation
+pattern: >
+
+ :syntax region xPreProc start=/^#/ end=/$/ contains=xLineContinue
+ :syntax match xLineContinue "\\$" contained
+
+In this case, although xPreProc normally matches a single line, the group
+contained in it (namely xLineContinue) lets it go on for more than one line.
+For example, it would match both of these lines:
+
+ #define SPAM spam spam spam \ ~
+ bacon and spam ~
+
+In this case, this is what you want. If it is not what you want, you can call
+for the region to be on a single line by adding "excludenl" to the contained
+pattern. For example, you want to highlight "end" in xPreProc, but only at
+the end of the line. To avoid making the xPreProc continue on the next line,
+like xLineContinue does, use "excludenl" like this: >
+
+ :syntax region xPreProc start=/^#/ end=/$/
+ \ contains=xLineContinue,xPreProcEnd
+ :syntax match xPreProcEnd excludenl /end$/ contained
+ :syntax match xLineContinue "\\$" contained
+
+"excludenl" must be placed before the pattern. Since "xLineContinue" doesn't
+have "excludenl", a match with it will extend xPreProc to the next line as
+before.
+
+==============================================================================
+*44.8* Clusters
+
+One of the things you will notice as you start to write a syntax file is that
+you wind up generating a lot of syntax groups. Vim enables you to define a
+collection of syntax groups called a cluster.
+ Suppose you have a language that contains for loops, if statements, while
+loops, and functions. Each of them contains the same syntax elements: numbers
+and identifiers. You define them like this: >
+
+ :syntax match xFor /^for.*/ contains=xNumber,xIdent
+ :syntax match xIf /^if.*/ contains=xNumber,xIdent
+ :syntax match xWhile /^while.*/ contains=xNumber,xIdent
+
+You have to repeat the same "contains=" every time. If you want to add
+another contained item, you have to add it three times. Syntax clusters
+simplify these definitions by enabling you to have one cluster stand for
+several syntax groups.
+ To define a cluster for the two items that the three groups contain, use
+the following command: >
+
+ :syntax cluster xState contains=xNumber,xIdent
+
+Clusters are used inside other syntax items just like any syntax group.
+Their names start with @. Thus, you can define the three groups like this: >
+
+ :syntax match xFor /^for.*/ contains=@xState
+ :syntax match xIf /^if.*/ contains=@xState
+ :syntax match xWhile /^while.*/ contains=@xState
+
+You can add new group names to this cluster with the "add" argument: >
+
+ :syntax cluster xState add=xString
+
+You can remove syntax groups from this list as well: >
+
+ :syntax cluster xState remove=xNumber
+
+==============================================================================
+*44.9* Including another syntax file
+
+The C++ language syntax is a superset of the C language. Because you do not
+want to write two syntax files, you can have the C++ syntax file read in the
+one for C by using the following command: >
+
+ :runtime! syntax/c.vim
+
+The ":runtime!" command searches 'runtimepath' for all "syntax/c.vim" files.
+This makes the C syntax be defined like for C files. If you have replaced the
+c.vim syntax file, or added items with an extra file, these will be loaded as
+well.
+ After loading the C syntax items the specific C++ items can be defined.
+For example, add keywords that are not used in C: >
+
+ :syntax keyword cppStatement new delete this friend using
+
+This works just like in any other syntax file.
+
+Now consider the Perl language. It consists of two distinct parts: a
+documentation section in POD format, and a program written in Perl itself.
+The POD section starts with "=head" and ends with "=cut".
+ You want to define the POD syntax in one file, and use it from the Perl
+syntax file. The ":syntax include" command reads in a syntax file and stores
+the elements it defined in a syntax cluster. For Perl, the statements are as
+follows: >
+
+ :syntax include @Pod <sfile>:p:h/pod.vim
+ :syntax region perlPOD start=/^=head/ end=/^=cut/ contains=@Pod
+
+When "=head" is found in a Perl file, the perlPOD region starts. In this
+region the @Pod cluster is contained. All the items defined as top-level
+items in the pod.vim syntax files will match here. When "=cut" is found, the
+region ends and we go back to the items defined in the Perl file.
+ The ":syntax include" command is clever enough to ignore a ":syntax clear"
+command in the included file. And an argument such as "contains=ALL" will
+only contain items defined in the included file, not in the file that includes
+it.
+ The "<sfile>:p:h/" part uses the name of the current file (<sfile>),
+expands it to a full path (:p) and then takes the head (:h). This results in
+the directory name of the file. This causes the pod.vim file in the same
+directory to be included.
+
+==============================================================================
+*44.10* Synchronizing
+
+Compilers have it easy. They start at the beginning of a file and parse it
+straight through. Vim does not have it so easy. It must start in the middle,
+where the editing is being done. So how does it tell where it is?
+ The secret is the ":syntax sync" command. This tells Vim how to figure out
+where it is. For example, the following command tells Vim to scan backward
+for the beginning or end of a C-style comment and begin syntax coloring from
+there: >
+
+ :syntax sync ccomment
+
+You can tune this processing with some arguments. The "minlines" argument
+tells Vim the minimum number of lines to look backward, and "maxlines" tells
+the editor the maximum number of lines to scan.
+ For example, the following command tells Vim to look at least 10 lines
+before the top of the screen: >
+
+ :syntax sync ccomment minlines=10 maxlines=500
+
+If it cannot figure out where it is in that space, it starts looking farther
+and farther back until it figures out what to do. But it looks no farther
+back than 500 lines. (A large "maxlines" slows down processing. A small one
+might cause synchronization to fail.)
+ To make synchronizing go a bit faster, tell Vim which syntax items can be
+skipped. Every match and region that only needs to be used when actually
+displaying text can be given the "display" argument.
+ By default, the comment to be found will be colored as part of the Comment
+syntax group. If you want to color things another way, you can specify a
+different syntax group: >
+
+ :syntax sync ccomment xAltComment
+
+If your programming language does not have C-style comments in it, you can try
+another method of synchronization. The simplest way is to tell Vim to space
+back a number of lines and try to figure out things from there. The following
+command tells Vim to go back 150 lines and start parsing from there: >
+
+ :syntax sync minlines=150
+
+A large "minlines" value can make Vim slower, especially when scrolling
+backwards in the file.
+ Finally, you can specify a syntax group to look for by using this command:
+>
+ :syntax sync match {sync-group-name}
+ \ grouphere {group-name} {pattern}
+
+This tells Vim that when it sees {pattern} the syntax group named {group-name}
+begins just after the pattern given. The {sync-group-name} is used to give a
+name to this synchronization specification. For example, the sh scripting
+language begins an if statement with "if" and ends it with "fi":
+
+ if [ --f file.txt ] ; then ~
+ echo "File exists" ~
+ fi ~
+
+To define a "grouphere" directive for this syntax, you use the following
+command: >
+
+ :syntax sync match shIfSync grouphere shIf "\<if\>"
+
+The "groupthere" argument tells Vim that the pattern ends a group. For
+example, the end of the if/fi group is as follows: >
+
+ :syntax sync match shIfSync groupthere NONE "\<fi\>"
+
+In this example, the NONE tells Vim that you are not in any special syntax
+region. In particular, you are not inside an if block.
+
+You also can define matches and regions that are with no "grouphere" or
+"groupthere" arguments. These groups are for syntax groups skipped during
+synchronization. For example, the following skips over anything inside {},
+even if it would normally match another synchronization method: >
+
+ :syntax sync match xSpecial /{.*}/
+
+More about synchronizing in the reference manual: |:syn-sync|.
+
+==============================================================================
+*44.11* Installing a syntax file
+
+When your new syntax file is ready to be used, drop it in a "syntax" directory
+in 'runtimepath'. For Unix that would be "~/.vim/syntax".
+ The name of the syntax file must be equal to the file type, with ".vim"
+added. Thus for the x language, the full path of the file would be:
+
+ ~/.vim/syntax/x.vim ~
+
+You must also make the file type be recognized. See |43.2|.
+
+If your file works well, you might want to make it available to other Vim
+users. First read the next section to make sure your file works well for
+others. Then e-mail it to the Vim maintainer: <maintainer@vim.org>. Also
+explain how the filetype can be detected. With a bit of luck your file will
+be included in the next Vim version!
+
+
+ADDING TO AN EXISTING SYNTAX FILE
+
+We were assuming you were adding a completely new syntax file. When an existing
+syntax file works, but is missing some items, you can add items in a separate
+file. That avoids changing the distributed syntax file, which will be lost
+when installing a new version of Vim.
+ Write syntax commands in your file, possibly using group names from the
+existing syntax. For example, to add new variable types to the C syntax file:
+>
+ :syntax keyword cType off_t uint
+
+Write the file with the same name as the original syntax file. In this case
+"c.vim". Place it in a directory near the end of 'runtimepath'. This makes
+it loaded after the original syntax file. For Unix this would be:
+
+ ~/.vim/after/syntax/c.vim ~
+
+==============================================================================
+*44.12* Portable syntax file layout
+
+Wouldn't it be nice if all Vim users exchange syntax files? To make this
+possible, the syntax file must follow a few guidelines.
+
+Start with a header that explains what the syntax file is for, who maintains
+it and when it was last updated. Don't include too much information about
+changes history, not many people will read it. Example: >
+
+ " Vim syntax file
+ " Language: C
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+ " Last Change: 2001 Jun 18
+ " Remark: Included by the C++ syntax.
+
+Use the same layout as the other syntax files. Using an existing syntax file
+as an example will save you a lot of time.
+
+Choose a good, descriptive name for your syntax file. Use lowercase letters
+and digits. Don't make it too long, it is used in many places: The name of
+the syntax file "name.vim", 'filetype', b:current_syntax the start of each
+syntax group (nameType, nameStatement, nameString, etc).
+
+Start with a check for "b:current_syntax". If it is defined, some other
+syntax file, earlier in 'runtimepath' was already loaded. To be compatible
+with Vim 5.8 use: >
+
+ if version < 600
+ syntax clear
+ elseif exists("b:current_syntax")
+ finish
+ endif
+
+Set "b:current_syntax" to the name of the syntax at the end. Don't forget
+that included files do this too, you might have to reset "b:current_syntax" if
+you include two files.
+
+If you want your syntax file to work with Vim 5.x, add a check for v:version.
+See yacc.vim for an example.
+
+Do not include anything that is a user preference. Don't set 'tabstop',
+'expandtab', etc. These belong in a filetype plugin.
+
+Do not include mappings or abbreviations. Only include setting 'iskeyword' if
+it is really necessary for recognizing keywords.
+
+Avoid using specific colors. Link to the standard highlight groups whenever
+possible. Don't forget that some people use a different background color, or
+have only eight colors available.
+For backwards compatibility with Vim 5.8 this construction is used: >
+
+ if version >= 508 || !exists("did_c_syn_inits")
+ if version < 508
+ let did_c_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink nameString String
+ HiLink nameNumber Number
+ ... etc ...
+
+ delcommand HiLink
+ endif
+
+Add the "display" argument to items that are not used when syncing, to speed
+up scrolling backwards and CTRL-L.
+
+==============================================================================
+
+Next chapter: |usr_45.txt| Select your language
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_45.txt b/runtime/doc/usr_45.txt
new file mode 100644
index 000000000..034b040dc
--- /dev/null
+++ b/runtime/doc/usr_45.txt
@@ -0,0 +1,419 @@
+*usr_45.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Select your language
+
+
+The messages in Vim can be given in several languages. This chapter explains
+how to change which one is used. Also, the different ways to work with files
+in various languages is explained.
+
+|45.1| Language for Messages
+|45.2| Language for Menus
+|45.3| Using another encoding
+|45.4| Editing files with a different encoding
+|45.5| Entering language text
+
+ Next chapter: |usr_90.txt| Installing Vim
+ Previous chapter: |usr_44.txt| Your own syntax highlighted
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*45.1* Language for Messages
+
+When you start Vim, it checks the environment to find out what language you
+are using. Mostly this should work fine, and you get the messages in your
+language (if they are available). To see what the current language is, use
+this command: >
+
+ :language
+
+If it replies with "C", this means the default is being used, which is
+English.
+
+ Note:
+ Using different languages only works when Vim was compiled to handle
+ it. To find out if it works, use the ":version" command and check the
+ output for "+gettext" and "+multi_lang". If they are there, you are
+ OK. If you see "-gettext" or "-multi_lang" you will have to find
+ another Vim.
+
+What if you would like your messages in a different language? There are
+several ways. Which one you should use depends on the capabilities of your
+system.
+ The first way is to set the environment to the desired language before
+starting Vim. Example for Unix: >
+
+ env LANG=de_DE.ISO_8859-1 vim
+
+This only works if the language is available on your system. The advantage is
+that all the GUI messages and things in libraries will use the right language
+as well. A disadvantage is that you must do this before starting Vim. If you
+want to change language while Vim is running, you can use the second method: >
+
+ :language fr_FR.ISO_8859-1
+
+This way you can try out several names for your language. You will get an
+error message when it's not supported on your system. You don't get an error
+when translated messages are not available. Vim will silently fall back to
+using English.
+ To find out which languages are supported on your system, find the
+directory where they are listed. On my system it is "/usr/share/locale". On
+some systems it's in "/usr/lib/locale". The manual page for "setlocale"
+should give you a hint where it is found on your system.
+ Be careful to type the name exactly as it should be. Upper and lowercase
+matter, and the '-' and '_' characters are easily confused.
+
+You can also set the language separately for messages, edited text and the
+time format. See |:language|.
+
+
+DO-IT-YOURSELF MESSAGE TRANSLATION
+
+If translated messages are not available for your language, you could write
+them yourself. To do this, get the source code for Vim and the GNU gettext
+package. After unpacking the sources, instructions can be found in the
+directory src/po/README.txt.
+ It's not too difficult to do the translation. You don't need to be a
+programmer. You must know both English and the language you are translating
+to, of course.
+ When you are satisfied with the translation, consider making it available
+to others. Upload it at vim-online (http://vim.sf.net) or e-mail it to
+the Vim maintainer <maintainer@vim.org>. Or both.
+
+==============================================================================
+*45.2* Language for Menus
+
+The default menus are in English. To be able to use your local language, they
+must be translated. Normally this is automatically done for you if the
+environment is set for your language, just like with messages. You don't need
+to do anything extra for this. But it only works if translations for the
+language are available.
+ Suppose you are in Germany, with the language set to German, but prefer to
+use "File" instead of "Datei". You can switch back to using the English menus
+this way: >
+
+ :set langmenu=none
+
+It is also possible to specify a language: >
+
+ :set langmenu=nl_NL.ISO_8859-1
+
+Like above, differences between "-" and "_" matter. However, upper/lowercase
+differences are ignored here.
+ The 'langmenu' option must be set before the menus are loaded. Once the
+menus have been defined changing 'langmenu' has no direct effect. Therefore,
+put the command to set 'langmenu' in your vimrc file.
+ If you really want to switch menu language while running Vim, you can do it
+this way: >
+
+ :source $VIMRUNTIME/delmenu.vim
+ :set langmenu=de_DE.ISO_8859-1
+ :source $VIMRUNTIME/menu.vim
+
+There is one drawback: All menus that you defined yourself will be gone. You
+will need to redefine them as well.
+
+
+DO-IT-YOURSELF MENU TRANSLATION
+
+To see which menu translations are available, look in this directory:
+
+ $VIMRUNTIME/lang ~
+
+The files are called menu_{language}.vim. If you don't see the language you
+want to use, you can do your own translations. The simplest way to do this is
+by copying one of the existing language files, and change it.
+ First find out the name of your language with the ":language" command. Use
+this name, but with all letters made lowercase. Then copy the file to your
+own runtime directory, as found early in 'runtimepath'. For example, for Unix
+you would do: >
+
+ :!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.vim/lang/menu_nl_be.iso_8859-1.vim
+
+You will find hints for the translation in "$VIMRUNTIME/lang/README.txt".
+
+==============================================================================
+*45.3* Using another encoding
+
+Vim guesses that the files you are going to edit are encoded for your
+language. For many European languages this is "latin1". Then each byte is
+one character. That means there are 256 different characters possible. For
+Asian languages this is not sufficient. These mostly use a double-byte
+encoding, providing for over ten thousand possible characters. This still
+isn't enough when a text is to contain several different languages. This is
+where Unicode comes in. It was designed to include all characters used in
+commonly used languages. This is the "Super encoding that replaces all
+others". But it isn't used that much yet.
+ Fortunately, Vim supports these three kinds of encodings. And, with some
+restrictions, you can use them even when your environment uses another
+language than the text.
+ Nevertheless, when you only edit files that are in the encoding of your
+language, the default should work fine and you don't need to do anything. The
+following is only relevant when you want to edit different languages.
+
+ Note:
+ Using different encodings only works when Vim was compiled to handle
+ it. To find out if it works, use the ":version" command and check the
+ output for "+multi_byte". If it's there, you are OK. If you see
+ "-multi_byte" you will have to find another Vim.
+
+
+USING UNICODE IN THE GUI
+
+The nice thing about Unicode is that other encodings can be converted to it
+and back without losing information. When you make Vim use Unicode
+internally, you will be able to edit files in any encoding.
+ Unfortunately, the number of systems supporting Unicode is still limited.
+Thus it's unlikely that your language uses it. You need to tell Vim you want
+to use Unicode, and how to handle interfacing with the rest of the system.
+ Let's start with the GUI version of Vim, which is able to display Unicode
+characters. This should work: >
+
+ :set encoding=utf-8
+ :set guifont=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
+
+The 'encoding' option tells Vim the encoding of the characters that you use.
+This applies to the text in buffers (files you are editing), registers, Vim
+script files, etc. You can regard 'encoding' as the setting for the internals
+of Vim.
+ This example assumes you have this font on your system. The name in the
+example is for the X Window System. This font is in a package that is used to
+enhance xterm with Unicode support. If you don't have this font, you might
+find it here:
+
+ http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz ~
+
+For MS-Windows, some fonts have a limited number of Unicode characters. Try
+using the "Courier New" font. You can use the Edit/Select Font... menu to
+select and try out the fonts available. Only fixed-width fonts can be used
+though. Example: >
+
+ :set guifont=courier_new:h12
+
+If it doesn't work well, try getting a fontpack. If Microsoft didn't move it,
+you can find it here:
+
+ http://www.microsoft.com/typography/fontpack/default.htm ~
+
+Now you have told Vim to use Unicode internally and display text with a
+Unicode font. Typed characters still arrive in the encoding of your original
+language. This requires converting them to Unicode. Tell Vim the language
+from which to convert with the 'termencoding' option. You can do it like
+this: >
+
+ :let &termencoding = &encoding
+ :set encoding=utf-8
+
+This assigns the old value of 'encoding' to 'termencoding' before setting
+'encoding' to utf-8. You will have to try out if this really works for your
+setup. It should work especially well when using an input method for an Asian
+language, and you want to edit Unicode text.
+
+
+USING UNICODE IN A UNICODE TERMINAL
+
+There are terminals that support Unicode directly. The standard xterm that
+comes with XFree86 is one of them. Let's use that as an example.
+ First of all, the xterm must have been compiled with Unicode support. See
+|UTF8-xterm| how to check that and how to compile it when needed.
+ Start the xterm with the "-u8" argument. You might also need so specify a
+font. Example: >
+
+ xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
+
+Now you can run Vim inside this terminal. Set 'encoding' to "utf-8" as
+before. That's all.
+
+
+USING UNICODE IN AN ORDINARY TERMINAL
+
+Suppose you want to work with Unicode files, but don't have a terminal with
+Unicode support. You can do this with Vim, although characters that are not
+supported by the terminal will not be displayed. The layout of the text
+will be preserved. >
+
+ :let &termencoding = &encoding
+ :set encoding=utf-8
+
+This is the same as what was used for the GUI. But it works differently: Vim
+will convert the displayed text before sending it to the terminal. That
+avoids that the display is messed up with strange characters.
+ For this to work the conversion between 'termencoding' and 'encoding' must
+be possible. Vim will convert from latin1 to Unicode, thus that always works.
+For other conversions the |+iconv| feature is required.
+ Try editing a file with Unicode characters in it. You will notice that Vim
+will put a question mark (or underscore or some other character) in places
+where a character should be that the terminal can't display. Move the cursor
+to a question mark and use this command: >
+
+ ga
+
+Vim will display a line with the code of the character. This gives you a hint
+about what character it is. You can look it up in a Unicode table. You could
+actually view a file that way, if you have lots of time at hand.
+
+ Note:
+ Since 'encoding' is used for all text inside Vim, changing it makes
+ all non-ASCII text invalid. You will notice this when using registers
+ and the 'viminfo' file (e.g., a remembered search pattern). It's
+ recommended to set 'encoding' in your vimrc file, and leave it alone.
+
+==============================================================================
+*45.4* Editing files with a different encoding
+
+Suppose you have setup Vim to use Unicode, and you want to edit a file that is
+in 16-bit Unicode. Sounds simple, right? Well, Vim actually uses utf-8
+encoding internally, thus the 16-bit encoding must be converted. Thus there
+is a difference between the character set (Unicode) and the encoding (utf-8 or
+16-bit).
+ Vim will try to detect what kind of file you are editing. It uses the
+encoding names in the 'fileencodings' option. When using Unicode, the default
+value is: "ucs-bom,utf-8,latin1". This means that Vim checks the file to see
+if it's one of these encodings:
+
+ ucs-bom File must start with a Byte Order Mark (BOM). This
+ allows detection of 16-bit, 32-bit and utf-8 Unicode
+ encodings.
+ utf-8 utf-8 Unicode. This is rejected when a sequence of
+ bytes is illegal in utf-8.
+ latin1 The good old 8-bit encoding. Always works.
+
+When you start editing that 16-bit Unicode file, and it has a BOM, Vim will
+detect this and convert the file to utf-8 when reading it. The 'fileencoding'
+option (without s at the end) is set to the detected value. In this case it
+is "ucs-2le". That means it's Unicode, two bytes and little-endian. This
+file format is common on MS-Windows (e.g., for registry files).
+ When writing the file, Vim will compare 'fileencoding' with 'encoding'. If
+they are different, the text will be converted.
+ An empty value for 'fileencoding' means that no conversion is to be done.
+Thus the text is assumed to be encoded with 'encoding'.
+
+If the default 'fileencodings' value is not good for you, set it to the
+encodings you want Vim to try. Only when a value is found to be invalid will
+the next one be used. Putting "latin1" first doesn't work, because it is
+never illegal. An example, to fall back to Japanese when the file doesn't
+have a BOM and isn't utf-8: >
+
+ :set fileencodings=ucs-bom,utf-8,sjis
+
+See |encoding-values| for suggested values. Other values may work as well.
+This depends on the conversion available.
+
+
+FORCING AN ENCODING
+
+If the automatic detection doesn't work you must tell Vim what encoding the
+file is. Example: >
+
+ :edit ++enc=koi8-r russian.txt
+
+The "++enc" part specifies the name of the encoding to be used for this file
+only. Vim will convert the file from the specified encoding, Russian in this
+example, to 'encoding'. 'fileencoding' will also be set to the specified
+encoding, so that the reverse conversion can be done when writing the file.
+ The same argument can be used when writing the file. This way you can
+actually use Vim to convert a file. Example: >
+
+ :write ++enc=utf-8 russian.txt
+<
+ Note:
+ Conversion may result in lost characters. Conversion from an encoding
+ to Unicode and back is mostly free of this problem, unless there are
+ illegal characters. Conversion from Unicode to other encodings often
+ loses information when there was more than one language in the file.
+
+==============================================================================
+*45.5* Entering language text
+
+Computer keyboards don't have much more than a hundred keys. Some languages
+have thousands of characters, Unicode has ten thousands. So how do you type
+these characters?
+ First of all, when you don't use too many of the special characters, you
+can use digraphs. This was already explained in |24.9|.
+ When you use a language that uses many more characters than keys on your
+keyboard, you will want to use an Input Method (IM). This requires learning
+the translation from typed keys to resulting character. When you need an IM
+you probably already have one on your system. It should work with Vim like
+with other programs. For details see |mbyte-XIM| for the X Window system and
+|mbyte-IME| for MS-Windows.
+
+
+KEYMAPS
+
+For some languages the character set is different from latin, but uses a
+similar number of characters. It's possible to map keys to characters. Vim
+uses keymaps for this.
+ Suppose you want to type Hebrew. You can load the keymap like this: >
+
+ :set keymap=hebrew
+
+Vim will try to find a keymap file for you. This depends on the value of
+'encoding'. If no matching file was found, you will get an error message.
+
+Now you can type Hebrew in Insert mode. In Normal mode, and when typing a ":"
+command, Vim automatically switches to English. You can use this command to
+switch between Hebrew and English: >
+
+ CTRL-^
+
+This only works in Insert mode and Command-line mode. In Normal mode it does
+something completely different (jumps to alternate file).
+ The usage of the keymap is indicated in the mode message, if you have the
+'showmode' option set. In the GUI Vim will indicate the usage of keymaps with
+a different cursor color.
+ You can also change the usage of the keymap with the 'iminsert' and
+'imsearch' options.
+
+To see the list of mappings, use this command: >
+
+ :lmap
+
+To find out which keymap files are available, in the GUI you can use the
+Edit/Keymap menu. Otherwise you can use this command: >
+
+ :echo globpath(&rtp, "keymap/*.vim")
+
+
+DO-IT-YOURSELF KEYMAPS
+
+You can create your own keymap file. It's not very difficult. Start with
+a keymap file that is similar to the language you want to use. Copy it to the
+"keymap" directory in your runtime directory. For example, for Unix, you
+would use the directory "~/.vim/keymap".
+ The name of the keymap file must look like this:
+
+ keymap/{name}.vim ~
+or
+ keymap/{name}_{encoding}.vim ~
+
+{name} is the name of the keymap. Chose a name that is obvious, but different
+from existing keymaps (unless you want to replace an existing keymap file).
+{name} cannot contain an underscore. Optionally, add the encoding used after
+an underscore. Examples:
+
+ keymap/hebrew.vim ~
+ keymap/hebrew_utf-8.vim ~
+
+The contents of the file should be self-explanatory. Look at a few of the
+keymaps that are distributed with Vim. For the details, see |mbyte-keymap|.
+
+
+LAST RESORT
+
+If all other methods fail, you can enter any character with CTRL-V:
+
+ encoding type range ~
+ 8-bit CTRL-V 123 decimal 0-255
+ 8-bit CTRL-V x a1 hexadecimal 00-ff
+ 16-bit CTRL-V u 013b hexadecimal 0000-ffff
+ 31-bit CTRL-V U 001303a4 hexadecimal 00000000-7fffffff
+
+Don't type the spaces. See |i_CTRL-V_digit| for the details.
+
+==============================================================================
+
+Next chapter: |usr_90.txt| Installing Vim
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_90.txt b/runtime/doc/usr_90.txt
new file mode 100644
index 000000000..4a9c488be
--- /dev/null
+++ b/runtime/doc/usr_90.txt
@@ -0,0 +1,498 @@
+*usr_90.txt* For Vim version 7.0aa. Last change: 2004 Mar 21
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Installing Vim
+
+ *install*
+Before you can use Vim you have to install it. Depending on your system it's
+simple or easy. This chapter gives a few hints and also explains how
+upgrading to a new version is done.
+
+|90.1| Unix
+|90.2| MS-Windows
+|90.3| Upgrading
+|90.4| Common installation issues
+|90.5| Uninstalling Vim
+
+ Previous chapter: |usr_45.txt| Select your language
+Table of contents: |usr_toc.txt|
+
+==============================================================================
+*90.1* Unix
+
+First you have to decide if you are going to install Vim system-wide or for a
+single user. The installation is almost the same, but the directory where Vim
+is installed in differs.
+ For a system-wide installation the base directory "/usr/local" is often
+used. But this may be different for your system. Try finding out where other
+packages are installed.
+ When installing for a single user, you can use your home directory as the
+base. The files will be placed in subdirectories like "bin" and "shared/vim".
+
+
+FROM A PACKAGE
+
+You can get precompiled binaries for many different UNIX systems. There is a
+long list with links on this page:
+
+ http://www.vim.org/binaries.html ~
+
+Volunteers maintain the binaries, so they are often out of date. It is a
+good idea to compile your own UNIX version from the source. Also, creating
+the editor from the source allows you to control which features are compiled.
+This does require a compiler though.
+
+If you have a Linux distribution, the "vi" program is probably a minimal
+version of Vim. It doesn't do syntax highlighting, for example. Try finding
+another Vim package in your distribution, or search on the web site.
+
+
+FROM SOURCES
+
+To compile and install Vim, you will need the following:
+
+ - A C compiler (GCC preferred)
+ - The GZIP program (you can get it from www.gnu.org)
+ - The Vim source and runtime archives
+
+To get the Vim archives, look in this file for a mirror near you, this should
+provide the fastest download:
+
+ ftp://ftp.vim.org/pub/vim/MIRRORS ~
+
+Or use the home site ftp.vim.org, if you think it's fast enough. Go to the
+"unix" directory and you'll find a list of files there. The version number is
+embedded in the file name. You will want to get the most recent version.
+ You can get the files for Unix in two ways: One big archive that contains
+everything, or four smaller ones that each fit on a floppy disk. For version
+6.1 the single big one is called:
+
+ vim-6.1.tar.bz2 ~
+
+You need the bzip2 program to uncompress it. If you don't have it, get the
+four smaller files, which can be uncompressed with gzip. For Vim 6.1 they are
+called:
+
+ vim-6.1-src1.tar.gz ~
+ vim-6.1-src2.tar.gz ~
+ vim-6.1-rt1.tar.gz ~
+ vim-6.1-rt2.tar.gz ~
+
+
+COMPILING
+
+First create a top directory to work in, for example: >
+
+ mkdir ~/vim
+ cd ~/vim
+
+Then unpack the archives there. If you have the one big archive, you unpack
+it like this: >
+
+ bzip2 -d -c path/vim-6.1.tar.bz2 | tar xf -
+
+Change "path" to where you have downloaded the file. >
+
+ gzip -d -c path/vim-6.1-src1.tar.gz | tar xf -
+ gzip -d -c path/vim-6.1-src2.tar.gz | tar xf -
+ gzip -d -c path/vim-6.1-rt1.tar.gz | tar xf -
+ gzip -d -c path/vim-6.1-rt2.tar.gz | tar xf -
+
+If you are satisfied with getting the default features, and your environment
+is setup properly, you should be able to compile Vim with just this: >
+
+ cd vim61/src
+ make
+
+The make program will run configure and compile everything. Further on we
+will explain how to compile with different features.
+ If there are errors while compiling, carefully look at the error messages.
+There should be a hint about what went wrong. Hopefully you will be able to
+correct it. You might have to disable some features to make Vim compile.
+Look in the Makefile for specific hints for your system.
+
+
+TESTING
+
+Now you can check if compiling worked OK: >
+
+ make test
+
+This will run a sequence of test scripts to verify that Vim works as expected.
+Vim will be started many times and all kinds of text and messages flash by.
+If it is alright you will finally see:
+
+ test results: ~
+ ALL DONE ~
+
+If there are one or two messages about failed tests, Vim might still work, but
+not perfectly. If you see a lot of error messages or Vim doesn't finish until
+the end, there must be something wrong. Either try to find out yourself, or
+find someone who can solve it. You could look in the |maillist-archive| for a
+solution. If everything else fails, you could ask in the vim |maillist| if
+someone can help you.
+
+
+INSTALLING
+ *install-home*
+If you want to install in your home directory, edit the Makefile and search
+for a line:
+
+ #prefix = $(HOME) ~
+
+Remove the # at the start of the line.
+ When installing for the whole system, Vim has most likely already selected
+a good installation directory for you. You can also specify one, see below.
+You need to become root for the following.
+
+To install Vim do: >
+
+ make install
+
+That should move all the relevant files to the right place. Now you can try
+running vim to verify that it works. Use two simple tests to check if Vim can
+find its runtime files: >
+
+ :help
+ :syntax enable
+
+If this doesn't work, use this command to check where Vim is looking for the
+runtime files: >
+
+ :echo $VIMRUNTIME
+
+You can also start Vim with the "-V" argument to see what happens during
+startup: >
+
+ vim -V
+
+Don't forget that the user manual assumes you Vim in a certain way. After
+installing Vim, follow the instructions at |not-compatible| to make Vim work
+as assumed in this manual.
+
+
+SELECTING FEATURES
+
+Vim has many ways to select features. One of the simple ways is to edit the
+Makefile. There are many directions and examples. Often you can enable or
+disable a feature by uncommenting a line.
+ An alternative is to run "configure" separately. This allows you to
+specify configuration options manually. The disadvantage is that you have to
+figure out what exactly to type.
+ Some of the most interesting configure arguments follow. These can also be
+enabled from the Makefile.
+
+ --prefix={directory} Top directory where to install Vim.
+
+ --with-features=tiny Compile with many features disabled.
+ --with-features=small Compile with some features disabled.
+ --with-features=big Compile with more features enabled.
+ --with-features=huge Compile with most features enabled.
+ See |+feature-list| for which feature
+ is enabled in which case.
+
+ --enable-perlinterp Enable the Perl interface. There are
+ similar arguments for ruby, python and
+ tcl.
+
+ --disable-gui Do not compile the GUI interface.
+ --without-x Do not compile X-windows features.
+ When both of these are used, Vim will
+ not connect to the X server, which
+ makes startup faster.
+
+To see the whole list use: >
+
+ ./configure --help
+
+You can find a bit of explanation for each feature, and links for more
+information here: |feature-list|.
+ For the adventurous, edit the file "feature.h". You can also change the
+source code yourself!
+
+==============================================================================
+*90.2* MS-Windows
+
+There are two ways to install the Vim program for Microsoft Windows. You can
+uncompress several archives, or use a self-installing big archive. Most users
+with fairly recent computers will prefer the second method. For the first
+one, you will need:
+
+ - An archive with binaries for Vim.
+ - The Vim runtime archive.
+ - A program to unpack the zip files.
+
+To get the Vim archives, look in this file for a mirror near you, this should
+provide the fastest download:
+
+ ftp://ftp.vim.org/pub/vim/MIRRORS ~
+
+Or use the home site ftp.vim.org, if you think it's fast enough. Go to the
+"pc" directory and you'll find a list of files there. The version number is
+embedded in the file name. You will want to get the most recent version.
+We will use "61" here, which is version 6.1.
+
+ gvim61.exe The self-installing archive.
+
+This is all you need for the second method. Just launch the executable, and
+follow the prompts.
+
+For the first method you must chose one of the binary archives. These are
+available:
+
+ gvim61.zip The normal MS-Windows GUI version.
+ gvim61ole.zip The MS-Windows GUI version with OLE support.
+ Uses more memory, supports interfacing with
+ other OLE applications.
+ vim61w32.zip 32 bit MS-Windows console version. For use in
+ a Win NT/2000/XP console. Does not work well
+ on Win 95/98.
+ vim61d32.zip 32 bit MS-DOS version. For use in the
+ Win 95/98 console window.
+ vim61d16.zip 16 bit MS-DOS version. Only for old systems.
+ Does not support long filenames.
+
+You only need one of them. Although you could install both a GUI and a
+console version. You always need to get the archive with runtime files.
+
+ vim61rt.zip The runtime files.
+
+Use your un-zip program to unpack the files. For example, using the "unzip"
+program: >
+
+ cd c:\
+ unzip path\gvim61.zip
+ unzip path\vim61rt.zip
+
+This will unpack the files in the directory "c:\vim\vim61". If you already
+have a "vim" directory somewhere, you will want to move to the directory just
+above it.
+ Now change to the "vim\vim61" directory and run the install program: >
+
+ install
+
+Carefully look through the messages and select the options you want to use.
+If you finally select "do it" the install program will carry out the actions
+you selected.
+ The install program doesn't move the runtime files. They remain where you
+unpacked them.
+
+In case you are not satisfied with the features included in the supplied
+binaries, you could try compiling Vim yourself. Get the source archive from
+the same location as where the binaries are. You need a compiler for which a
+makefile exists. Microsoft Visual C works, but is expensive. The Free
+Borland command-line compiler 5.5 can be used, as well as the free MingW and
+Cygwin compilers. Check the file src/INSTALLpc.txt for hints.
+
+==============================================================================
+*90.3* Upgrading
+
+If you are running one version of Vim and want to install another, here is
+what to do.
+
+
+UNIX
+
+When you type "make install" the runtime files will be copied to a directory
+which is specific for this version. Thus they will not overwrite a previous
+version. This makes it possible to use two or more versions next to
+each other.
+ The executable "vim" will overwrite an older version. If you don't care
+about keeping the old version, running "make install" will work fine. You can
+delete the old runtime files manually. Just delete the directory with the
+version number in it and all files below it. Example: >
+
+ rm -rf /usr/local/share/vim/vim58
+
+There are normally no changed files below this directory. If you did change
+the "filetype.vim" file, for example, you better merge the changes into the
+new version before deleting it.
+
+If you are careful and want to try out the new version for a while before
+switching to it, install the new version under another name. You need to
+specify a configure argument. For example: >
+
+ ./configure --with-vim-name=vim6
+
+Before running "make install", you could use "make -n install" to check that
+no valuable existing files are overwritten.
+ When you finally decide to switch to the new version, all you need to do is
+to rename the binary to "vim". For example: >
+
+ mv /usr/local/bin/vim6 /usr/local/bin/vim
+
+
+MS-WINDOWS
+
+Upgrading is mostly equal to installing a new version. Just unpack the files
+in the same place as the previous version. A new directory will be created,
+e.g., "vim61", for the files of the new version. Your runtime files, vimrc
+file, viminfo, etc. will be left alone.
+ If you want to run the new version next to the old one, you will have to do
+some handwork. Don't run the install program, it will overwrite a few files
+of the old version. Execute the new binaries by specifying the full path.
+The program should be able to automatically find the runtime files for the
+right version. However, this won't work if you set the $VIMRUNTIME variable
+somewhere.
+ If you are satisfied with the upgrade, you can delete the files of the
+previous version. See |90.5|.
+
+==============================================================================
+*90.4* Common installation issues
+
+This section describes some of the common problems that occur when installing
+Vim and suggests some solutions. It also contains answers to many
+installation questions.
+
+
+Q: I Do Not Have Root Privileges. How Do I Install Vim? (Unix)
+
+Use the following configuration command to install Vim in a directory called
+$HOME/vim: >
+
+ ./configure --prefix=$HOME
+
+This gives you a personal copy of Vim. You need to put $HOME/bin in your
+path to execute the editor. Also see |install-home|.
+
+
+Q: The Colors Are Not Right on My Screen. (Unix)
+
+Check your terminal settings by using the following command in a shell: >
+
+ echo $TERM
+
+If the terminal type listed is not correct, fix it. For more hints, see
+|06.2|. Another solution is to always use the GUI version of Vim, called
+gvim. This avoids the need for a correct terminal setup.
+
+
+Q: My Backspace And Delete Keys Don't Work Right
+
+The definition of what key sends what code is very unclear for backspace <BS>
+and Delete <Del> keys. First of all, check your $TERM setting. If there is
+nothing wrong with it, try this: >
+
+ :set t_kb=^V<BS>
+ :set t_kD=^V<Del>
+
+In the first line you need to press CTRL-V and then hit the backspace key.
+In the second line you need to press CTRL-V and then hit the Delete key.
+You can put these lines in your vimrc file, see |05.1|. A disadvantage is
+that it won't work when you use another terminal some day. Look here for
+alternate solutions: |:fixdel|.
+
+
+Q: I Am Using RedHat Linux. Can I Use the Vim That Comes with the System?
+
+By default RedHat installs a minimal version of Vim. Check your RPM packages
+for something named "Vim-enhanced-version.rpm" and install that.
+
+
+Q: How Do I Turn Syntax Coloring On? How do I make plugins work?
+
+Use the example vimrc script. You can find an explanation on how to use it
+here: |not-compatible|.
+
+See chapter 6 for information about syntax highlighting: |usr_06.txt|.
+
+
+Q: What Is a Good vimrc File to Use?
+
+See the www.vim.org Web site for several good examples.
+
+
+Q: Where Do I Find a Good Vim Plugin?
+
+See the Vim-online site: http://vim.sf.net. Many users have uploaded useful
+Vim scripts and plugins there.
+
+
+Q: Where Do I Find More Tips?
+
+See the Vim-online site: http://vim.sf.net. There is an archive with hints
+from Vim users. You might also want to search in the |maillist-archive|.
+
+==============================================================================
+*90.5* Uninstalling Vim
+
+In the unlikely event you want to uninstall Vim completely, this is how you do
+it.
+
+
+UNIX
+
+When you installed Vim as a package, check your package manager to find out
+how to remove the package again.
+ If you installed Vim from sources you can use this command: >
+
+ make uninstall
+
+However, if you have deleted the original files or you used an archive that
+someone supplied, you can't do this. Do delete the files manually, here is an
+example for when "/usr/local" was used as the root: >
+
+ rm -rf /usr/local/share/vim/vim61
+ rm /usr/local/bin/eview
+ rm /usr/local/bin/evim
+ rm /usr/local/bin/ex
+ rm /usr/local/bin/gview
+ rm /usr/local/bin/gvim
+ rm /usr/local/bin/gvim
+ rm /usr/local/bin/gvimdiff
+ rm /usr/local/bin/rgview
+ rm /usr/local/bin/rgvim
+ rm /usr/local/bin/rview
+ rm /usr/local/bin/rvim
+ rm /usr/local/bin/rvim
+ rm /usr/local/bin/view
+ rm /usr/local/bin/vim
+ rm /usr/local/bin/vimdiff
+ rm /usr/local/bin/vimtutor
+ rm /usr/local/bin/xxd
+ rm /usr/local/man/man1/eview.1
+ rm /usr/local/man/man1/evim.1
+ rm /usr/local/man/man1/ex.1
+ rm /usr/local/man/man1/gview.1
+ rm /usr/local/man/man1/gvim.1
+ rm /usr/local/man/man1/gvimdiff.1
+ rm /usr/local/man/man1/rgview.1
+ rm /usr/local/man/man1/rgvim.1
+ rm /usr/local/man/man1/rview.1
+ rm /usr/local/man/man1/rvim.1
+ rm /usr/local/man/man1/view.1
+ rm /usr/local/man/man1/vim.1
+ rm /usr/local/man/man1/vimdiff.1
+ rm /usr/local/man/man1/vimtutor.1
+ rm /usr/local/man/man1/xxd.1
+
+
+MS-WINDOWS
+
+If you installed Vim with the self-installing archive you can run
+the "uninstall-gui" program located in the same directory as the other Vim
+programs, e.g. "c:\vim\vim61". You can also launch it from the Start menu if
+installed the Vim entries there. This will remove most of the files, menu
+entries and desktop shortcuts. Some files may remain however, as they need a
+Windows restart before being deleted.
+ You will be given the option to remove the whole "vim" directory. It
+probably contains your vimrc file and other runtime files that you created, so
+be careful.
+
+Else, if you installed Vim with the zip archives, the preferred way is to use
+the "uninstal" program (note the missing l at the end). You can find it in
+the same directory as the "install" program, e.g., "c:\vim\vim61". This
+should also work from the usual "install/remove software" page.
+ However, this only removes the registry entries for Vim. You have to
+delete the files yourself. Simply select the directory "vim\vim61" and delete
+it recursively. There should be no files there that you changed, but you
+might want to check that first.
+ The "vim" directory probably contains your vimrc file and other runtime
+files that you created. You might want to keep that.
+
+==============================================================================
+
+Table of contents: |usr_toc.txt|
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/usr_toc.txt b/runtime/doc/usr_toc.txt
new file mode 100644
index 000000000..c371dda8f
--- /dev/null
+++ b/runtime/doc/usr_toc.txt
@@ -0,0 +1,340 @@
+*usr_toc.txt* For Vim version 7.0aa. Last change: 2003 Aug 18
+
+ VIM USER MANUAL - by Bram Moolenaar
+
+ Table Of Contents *user-manual*
+
+==============================================================================
+Overview ~
+
+Getting Started
+|usr_01.txt| About the manuals
+|usr_02.txt| The first steps in Vim
+|usr_03.txt| Moving around
+|usr_04.txt| Making small changes
+|usr_05.txt| Set your settings
+|usr_06.txt| Using syntax highlighting
+|usr_07.txt| Editing more than one file
+|usr_08.txt| Splitting windows
+|usr_09.txt| Using the GUI
+|usr_10.txt| Making big changes
+|usr_11.txt| Recovering from a crash
+|usr_12.txt| Clever tricks
+
+Editing Effectively
+|usr_20.txt| Typing command-line commands quickly
+|usr_21.txt| Go away and come back
+|usr_22.txt| Finding the file to edit
+|usr_23.txt| Editing other files
+|usr_24.txt| Inserting quickly
+|usr_25.txt| Editing formatted text
+|usr_26.txt| Repeating
+|usr_27.txt| Search commands and patterns
+|usr_28.txt| Folding
+|usr_29.txt| Moving through programs
+|usr_30.txt| Editing programs
+|usr_31.txt| Exploiting the GUI
+
+Tuning Vim
+|usr_40.txt| Make new commands
+|usr_41.txt| Write a Vim script
+|usr_42.txt| Add new menus
+|usr_43.txt| Using filetypes
+|usr_44.txt| Your own syntax highlighted
+|usr_45.txt| Select your language
+
+Making Vim Run
+|usr_90.txt| Installing Vim
+
+
+The user manual is available as a single, ready to print HTML and PDF file
+here:
+ http://vimdoc.sf.net
+
+==============================================================================
+Getting Started ~
+
+Read this from start to end to learn the essential commands.
+
+|usr_01.txt| About the manuals
+ |01.1| Two manuals
+ |01.2| Vim installed
+ |01.3| Using the Vim tutor
+ |01.4| Copyright
+
+|usr_02.txt| The first steps in Vim
+ |02.1| Running Vim for the First Time
+ |02.2| Inserting text
+ |02.3| Moving around
+ |02.4| Deleting characters
+ |02.5| Undo and Redo
+ |02.6| Other editing commands
+ |02.7| Getting out
+ |02.8| Finding help
+
+|usr_03.txt| Moving around
+ |03.1| Word movement
+ |03.2| Moving to the start or end of a line
+ |03.3| Moving to a character
+ |03.4| Matching a paren
+ |03.5| Moving to a specific line
+ |03.6| Telling where you are
+ |03.7| Scrolling around
+ |03.8| Simple searches
+ |03.9| Simple search patterns
+ |03.10| Using marks
+
+|usr_04.txt| Making small changes
+ |04.1| Operators and motions
+ |04.2| Changing text
+ |04.3| Repeating a change
+ |04.4| Visual mode
+ |04.5| Moving text
+ |04.6| Copying text
+ |04.7| Using the clipboard
+ |04.8| Text objects
+ |04.9| Replace mode
+ |04.10| Conclusion
+
+|usr_05.txt| Set your settings
+ |05.1| The vimrc file
+ |05.2| The example vimrc file explained
+ |05.3| Simple mappings
+ |05.4| Adding a plugin
+ |05.5| Adding a help file
+ |05.6| The option window
+ |05.7| Often used options
+
+|usr_06.txt| Using syntax highlighting
+ |06.1| Switching it on
+ |06.2| No or wrong colors?
+ |06.3| Different colors
+ |06.4| With colors or without colors
+ |06.5| Printing with colors
+ |06.6| Further reading
+
+|usr_07.txt| Editing more than one file
+ |07.1| Edit another file
+ |07.2| A list of files
+ |07.3| Jumping from file to file
+ |07.4| Backup files
+ |07.5| Copy text between files
+ |07.6| Viewing a file
+ |07.7| Changing the file name
+
+|usr_08.txt| Splitting windows
+ |08.1| Split a window
+ |08.2| Split a window on another file
+ |08.3| Window size
+ |08.4| Vertical splits
+ |08.5| Moving windows
+ |08.6| Commands for all windows
+ |08.7| Viewing differences with vimdiff
+ |08.8| Various
+
+|usr_09.txt| Using the GUI
+ |09.1| Parts of the GUI
+ |09.2| Using the mouse
+ |09.3| The clipboard
+ |09.4| Select mode
+
+|usr_10.txt| Making big changes
+ |10.1| Record and playback commands
+ |10.2| Substitution
+ |10.3| Command ranges
+ |10.4| The global command
+ |10.5| Visual block mode
+ |10.6| Reading and writing part of a file
+ |10.7| Formatting text
+ |10.8| Changing case
+ |10.9| Using an external program
+
+|usr_11.txt| Recovering from a crash
+ |11.1| Basic recovery
+ |11.2| Where is the swap file?
+ |11.3| Crashed or not?
+ |11.4| Further reading
+
+|usr_12.txt| Clever tricks
+ |12.1| Replace a word
+ |12.2| Change "Last, First" to "First Last"
+ |12.3| Sort a list
+ |12.4| Reverse line order
+ |12.5| Count words
+ |12.6| Find a man page
+ |12.7| Trim blanks
+ |12.8| Find where a word is used
+
+==============================================================================
+Editing Effectively ~
+
+Subjects that can be read independently.
+
+|usr_20.txt| Typing command-line commands quickly
+ |20.1| Command line editing
+ |20.2| Command line abbreviations
+ |20.3| Command line completion
+ |20.4| Command line history
+ |20.5| Command line window
+
+|usr_21.txt| Go away and come back
+ |21.1| Suspend and resume
+ |21.2| Executing shell commands
+ |21.3| Remembering information; viminfo
+ |21.4| Sessions
+ |21.5| Views
+ |21.6| Modelines
+
+|usr_22.txt| Finding the file to edit
+ |22.1| The file explorer
+ |22.2| The current directory
+ |22.3| Finding a file
+ |22.4| The buffer list
+
+|usr_23.txt| Editing other files
+ |23.1| DOS, Mac and Unix files
+ |23.2| Files on the internet
+ |23.3| Encryption
+ |23.4| Binary files
+ |23.5| Compressed files
+
+|usr_24.txt| Inserting quickly
+ |24.1| Making corrections
+ |24.2| Showing matches
+ |24.3| Completion
+ |24.4| Repeating an insert
+ |24.5| Copying from another line
+ |24.6| Inserting a register
+ |24.7| Abbreviations
+ |24.8| Entering special characters
+ |24.9| Digraphs
+ |24.10| Normal mode commands
+
+|usr_25.txt| Editing formatted text
+ |25.1| Breaking lines
+ |25.2| Aligning text
+ |25.3| Indents and tabs
+ |25.4| Dealing with long lines
+ |25.5| Editing tables
+
+|usr_26.txt| Repeating
+ |26.1| Repeating with Visual mode
+ |26.2| Add and subtract
+ |26.3| Making a change in many files
+ |26.4| Using Vim from a shell script
+
+|usr_27.txt| Search commands and patterns
+ |27.1| Ignoring case
+ |27.2| Wrapping around the file end
+ |27.3| Offsets
+ |27.4| Matching multiple times
+ |27.5| Alternatives
+ |27.6| Character ranges
+ |27.7| Character classes
+ |27.8| Matching a line break
+ |27.9| Examples
+
+|usr_28.txt| Folding
+ |28.1| What is folding?
+ |28.2| Manual folding
+ |28.3| Working with folds
+ |28.4| Saving and restoring folds
+ |28.5| Folding by indent
+ |28.6| Folding with markers
+ |28.7| Folding by syntax
+ |28.8| Folding by expression
+ |28.9| Folding unchanged lines
+ |28.10| Which fold method to use?
+
+|usr_29.txt| Moving through programs
+ |29.1| Using tags
+ |29.2| The preview window
+ |29.3| Moving through a program
+ |29.4| Finding global identifiers
+ |29.5| Finding local identifiers
+
+|usr_30.txt| Editing programs
+ |30.1| Compiling
+ |30.2| Indenting C files
+ |30.3| Automatic indenting
+ |30.4| Other indenting
+ |30.5| Tabs and spaces
+ |30.6| Formatting comments
+
+|usr_31.txt| Exploiting the GUI
+ |31.1| The file browser
+ |31.2| Confirmation
+ |31.3| Menu shortcuts
+ |31.4| Vim window position and size
+ |31.5| Various
+
+==============================================================================
+Tuning Vim ~
+
+Make Vim work as you like it.
+
+|usr_40.txt| Make new commands
+ |40.1| Key mapping
+ |40.2| Defining command-line commands
+ |40.3| Autocommands
+
+|usr_41.txt| Write a Vim script
+ |41.1| Introduction
+ |41.2| Variables
+ |41.3| Expressions
+ |41.4| Conditionals
+ |41.5| Executing an expression
+ |41.6| Using functions
+ |41.7| Defining a function
+ |41.8| Exceptions
+ |41.9| Various remarks
+ |41.10| Writing a plugin
+ |41.11| Writing a filetype plugin
+ |41.12| Writing a compiler plugin
+
+|usr_42.txt| Add new menus
+ |42.1| Introduction
+ |42.2| Menu commands
+ |42.3| Various
+ |42.4| Toolbar and popup menus
+
+|usr_43.txt| Using filetypes
+ |43.1| Plugins for a filetype
+ |43.2| Adding a filetype
+
+|usr_44.txt| Your own syntax highlighted
+ |44.1| Basic syntax commands
+ |44.2| Keywords
+ |44.3| Matches
+ |44.4| Regions
+ |44.5| Nested items
+ |44.6| Following groups
+ |44.7| Other arguments
+ |44.8| Clusters
+ |44.9| Including another syntax file
+ |44.10| Synchronizing
+ |44.11| Installing a syntax file
+ |44.12| Portable syntax file layout
+
+|usr_45.txt| Select your language
+ |45.1| Language for Messages
+ |45.2| Language for Menus
+ |45.3| Using another encoding
+ |45.4| Editing files with a different encoding
+ |45.5| Entering language text
+
+==============================================================================
+Making Vim Run ~
+
+Before you can use Vim.
+
+|usr_90.txt| Installing Vim
+ |90.1| Unix
+ |90.2| MS-Windows
+ |90.3| Upgrading
+ |90.4| Common installation issues
+ |90.5| Uninstalling Vim
+
+==============================================================================
+
+Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
new file mode 100644
index 000000000..252572d97
--- /dev/null
+++ b/runtime/doc/various.txt
@@ -0,0 +1,1098 @@
+*various.txt* For Vim version 7.0aa. Last change: 2004 May 01
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Various commands *various*
+
+1. Various commands |various-cmds|
+2. Online help |online-help|
+3. Printing |printing|
+4. Using Vim like less or more |less|
+
+==============================================================================
+1. Various commands *various-cmds*
+
+ *CTRL-L*
+CTRL-L Clear and redraw the screen (later).
+
+ *:redr* *:redraw*
+:redr[aw][!] Redraw the screen right now. When ! is included it is
+ cleared first.
+ Useful to update the screen halfway executing a script
+ or function. Also when halfway a mapping and
+ 'lazyredraw' is set.
+
+ *:redraws* *:redrawstatus*
+:redraws[tatus][!] Redraw the status line of the current window. When !
+ is included all status lines are redrawn.
+ Useful to update the status line(s) when 'statusline'
+ includes an item that doesn't cause automatic
+ updating.
+
+ *N<Del>*
+<Del> When entering a number: Remove the last digit.
+ Note: if you like to use <BS> for this, add this
+ mapping to your .vimrc: >
+ :map CTRL-V <BS> CTRL-V <Del>
+< See |:fixdel| if your <Del> key does not do what you
+ want.
+
+:as[cii] or *ga* *:as* *:ascii*
+ga Print the ascii value of the character under the
+ cursor in decimal, hexadecimal and octal. For
+ example, when the cursor is on a 'R':
+ <R> 82, Hex 52, Octal 122 ~
+ When the character is a non-standard ASCII character,
+ but printable according to the 'isprint' option, the
+ non-printable version is also given. When the
+ character is larger than 127, the <M-x> form is also
+ printed. For example:
+ <~A> <M-^A> 129, Hex 81, Octal 201 ~
+ <p> <|~> <M-~> 254, Hex fe, Octal 376 ~
+ (where <p> is a special character)
+ The <Nul> character in a file is stored internally as
+ <NL>, but it will be shown as:
+ <^@> 0, Hex 00, Octal 000 ~
+ Mnemonic: Get Ascii value. {not in Vi}
+
+ *g8*
+g8 Print the hex values of the bytes used in the
+ character under the cursor, assuming it is in |UTF-8|
+ encoding. This also shows composing characters.
+ Example of a character with three composing
+ characters:
+ e0 b8 81 + e0 b8 b9 + e0 b9 89 ~
+ {not in Vi}
+
+ *:p* *:pr* *:print*
+:[range]p[rint] Print [range] lines (default current line).
+ Note: If you are looking for a way to print your text
+ file, you need an external program for that. In the
+ GUI you can use the File.Print menu entry.
+ (For printing on paper see |:hardcopy|)
+
+:[range]p[rint] {count}
+ Print {count} lines, starting with [range] (default
+ current line |cmdline-ranges|).
+
+ *:P* *:Print*
+:[range]P[rint] [count]
+ Just as ":print". Was apparently added to Vi for
+ people that keep the shift key pressed too long...
+
+ *:l* *:list*
+:[range]l[ist] [count]
+ Same as :print, but display unprintable characters
+ with '^'.
+
+ *:nu* *:number*
+:[range]nu[mber] [count]
+ Same as :print, but precede each line with its line
+ number. (See also 'highlight' option).
+
+ *:#*
+:[range]# [count] synonym for :number.
+
+ *:z* *E144*
+:{range}z[+-^.=]{count} Display several lines of text surrounding the line
+ 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; otherwise, the current
+ window size is used.
+
+ :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 ~
+ ---- ---------- --------- ------------
+ + current line 1 scr forward 1 scr forward
+ - 1 scr back current line current line
+ ^ 2 scr back 1 scr back 1 scr back
+ . 1/2 scr back 1/2 scr fwd 1/2 src fwd
+ = 1/2 src back 1/2 scr fwd current line
+
+ Specifying no mark at all is the same as "+".
+ If the mark is "=", a line of dashes is printed
+ around the current line.
+
+:{range}z#[+-^.=]{count} *:z#*
+ Like ":z", but number the lines.
+ {not in all versions of Vi, not with these arguments}
+
+ *:=*
+:= Print the last line number.
+
+:{range}= Prints the last line number in {range}. For example,
+ this prints the current line number: >
+ :.=
+
+: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.
+ If the [!] is given, mappings will not be used.
+ {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.
+ {commands} cannot start with a space. Put a 1 (one)
+ before it, 1 space 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. Example: >
+ :exe "normal \<c-w>\<c-w>"
+< {not in Vi, of course}
+ {not available when the |+ex_extra| feature was
+ disabled at compile time}
+
+:{range}norm[al][!] {commands} *:normal-range*
+ Execute Normal mode commands {commands} for each line
+ in the {range}. Before executing the {commands}, the
+ cursor is positioned in the first column of the range,
+ for each line. Otherwise it's the same as the
+ ":normal" command without a range.
+ {not in Vi}
+ Not available when |+ex_extra| feature was disabled at
+ compile time.
+
+ *:sh* *:shell* *E371*
+:sh[ell] This command starts a shell. When the shell exits
+ (after the "exit" command) you return to Vim. The
+ name for the shell command comes from 'shell' option.
+ *E360*
+ Note: This doesn't work when Vim on the Amiga was
+ started in QuickFix mode from a compiler, because the
+ compiler will have set stdin to a non-interactive
+ mode.
+
+ *:!cmd* *:!* *E34*
+:!{cmd} Execute {cmd} with the shell. See also the 'shell'
+ and 'shelltype' option.
+ Any '!' in {cmd} is replaced with the previous
+ external command (see also 'cpoptions'). But not when
+ there is a backslash before the '!', then that
+ backslash is removed. Example: ":!ls" followed by
+ ":!echo ! \! \\!" executes "echo ls ! \!".
+ After the command has been executed, the timestamp of
+ the current file is checked |timestamp|.
+ There cannot be a '|' in {cmd}, see |:bar|.
+ A newline character ends {cmd}, what follows is
+ interpreted as a following ":" command. However, if
+ there is a backslash before the newline it is removed
+ and {cmd} continues. It doesn't matter how many
+ backslashes are before the newline, only one is
+ removed.
+ On Unix the command normally runs in a non-interactive
+ shell. If you want an interactive shell to be used
+ (to use aliases) set 'shellcmdflag' to "-ic".
+ For Win32 also see |:!start|.
+ Vim redraws the screen after the command is finished,
+ because it may have printed any text. This requires a
+ hit-enter prompt, so that you can read any messages.
+ To avoid this use: >
+ :silent !{cmd}
+< The screen is not redrawn then, thus you have to use
+ CTRL-L or ":redraw!" if the command did display
+ something.
+ Also see |shell-window|.
+
+ *:!!*
+:!! Repeat last ":!{cmd}".
+
+ *:ve* *:version*
+:ve[rsion] Print the version number of the editor. If the
+ compiler used understands "__DATE__" the compilation
+ date is mentioned. Otherwise a fixed release-date is
+ shown.
+ The following lines contain information about which
+ features were enabled when Vim was compiled. When
+ there is a preceding '+', the feature is included,
+ when there is a '-' it is excluded. To change this,
+ you have to edit feature.h and recompile Vim.
+ To check for this in an expression, see |has()|.
+ Here is an overview of the features.
+ The first column shows the smallest version in which
+ they are included:
+ T tiny
+ S small
+ N normal
+ B big
+ H huge
+ m manually enabled or depends on other features
+ (none) system dependent
+ Thus if a feature is marked with "N", it is included
+ in the normal, big and huge versions of Vim.
+
+ *+feature-list*
+ *+ARP* Amiga only: ARP support included
+B *+arabic* |Arabic| language support
+N *+autocmd* |:autocmd|, automatic commands
+m *+balloon_eval* |balloon-eval| support
+N *+browse* |:browse| command
+N *+builtin_terms* some terminals builtin |builtin-terms|
+B *++builtin_terms* maximal terminals builtin |builtin-terms|
+N *+byte_offset* support for 'o' flag in 'statusline' option, "go"
+ and ":goto" commands.
+N *+cindent* |'cindent'|, C indenting
+N *+clientserver* Unix and Win32: Remote invocation |clientserver|
+ *+clipboard* |clipboard| support
+N *+cmdline_compl* command line completion |cmdline-completion|
+N *+cmdline_hist* command line history |cmdline-history|
+N *+cmdline_info* |'showcmd'| and |'ruler'|
+N *+comments* |'comments'| support
+N *+cryptv* encryption support |encryption|
+B *+cscope* |cscope| support
+N *+dialog_gui* Support for |:confirm| with GUI dialog.
+N *+dialog_con* Support for |:confirm| with console dialog.
+N *+dialog_con_gui* Support for |:confirm| with GUI and console dialog.
+N *+diff* |vimdiff| and 'diff'
+N *+digraphs* |digraphs| *E196*
+ *+dnd* Support for DnD into the "~ register |quote_~|.
+B *+emacs_tags* |emacs-tags| files
+N *+eval* expression evaluation |eval.txt|
+N *+ex_extra* Vim's extra Ex commands: |:center|, |:left|,
+ |:normal|, |:retab| and |:right|
+N *+extra_search* |'hlsearch'| and |'incsearch'| options.
+B *+farsi* |farsi| language
+N *+file_in_path* |gf|, |CTRL-W_f| and |<cfile>|
+N *+find_in_path* include file searches: |[I|, |:isearch|,
+ |CTRL-W_CTRL-I|, |:checkpath|, etc.
+N *+folding* |folding|
+ *+footer* |gui-footer|
+ *+fork* Unix only: |fork| shell commands
+N *+gettext* message translations |multi-lang|
+ *+GUI_Athena* Unix only: Athena |GUI|
+ *+GUI_neXtaw* Unix only: neXtaw |GUI|
+ *+GUI_BeOS* BeOS only: BeOS |GUI|
+ *+GUI_GTK* Unix only: GTK+ |GUI|
+ *+GUI_Motif* Unix only: Motif |GUI|
+ *+GUI_Photon* QNX only: Photon |GUI|
+m *+hangul_input* Hangul input support |hangul|
+ *+iconv* Compiled with the |iconv()| function, may have |/dyn|
+N *+insert_expand* |insert_expand| Insert mode completion
+N *+jumplist* |jumplist|
+B *+keymap* |'keymap'|
+B *+langmap* |'langmap'|
+N *+libcall* |libcall()|
+N *+linebreak* |'linebreak'|, |'breakat'| and |'showbreak'|
+N *+lispindent* |'lisp'|
+N *+listcmds* Vim commands for the list of buffers |buffer-hidden|
+ and argument list |:argdelete|
+N *+localmap* Support for mappings local to a buffer |:map-local|
+N *+menu* |:menu|
+N *+mksession* |:mksession|
+N *+modify_fname* |filename-modifiers|
+N *+mouse* Mouse handling |mouse-using|
+N *+mouseshape* |'mouseshape'|
+B *+mouse_dec* Unix only: Dec terminal mouse handling |dec-mouse|
+N *+mouse_gpm* Unix only: Linux console mouse handling |gpm-mouse|
+B *+mouse_netterm* Unix only: netterm mouse handling |netterm-mouse|
+N *+mouse_pterm* QNX only: pterm mouse handling |qnx-terminal|
+N *+mouse_xterm* Unix only: xterm mouse handling |xterm-mouse|
+B *+multi_byte* Korean and other languages |multibyte|
+ *+multi_byte_ime* Win32 input method for multibyte chars |multibyte-ime|
+N *+multi_lang* non-English language support |multi-lang|
+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|, may have |/dyn|
+ *+postscript* |:hardcopy| writes a PostScript file
+N *+printer* |:hardcopy| command
+m *+python* Python interface |python|, may have |/dyn|
+N *+quickfix* |:make| and |quickfix| commands
+B *+rightleft* Right to left typing |'rightleft'|
+m *+ruby* Ruby interface |ruby|, may have |/dyn|
+N *+scrollbind* |'scrollbind'|
+B *+signs* |:sign|
+N *+smartindent* |'smartindent'|
+m *+sniff* SniFF interface |sniff|
+N *+statusline* Options 'statusline', 'rulerformat' and special
+ formats of 'titlestring' and 'iconstring'
+m *+sun_workshop* |workshop|
+N *+syntax* Syntax highlighting |syntax|
+ *+system()* Unix only: opposite of |+fork|
+N *+tag_binary* binary searching in tags file |tag-binary-search|
+N *+tag_old_static* old method for static tags |tag-old-static|
+m *+tag_any_white* any white space allowed in tags file |tag-any-white|
+m *+tcl* Tcl interface |tcl|, may have |/dyn|
+ *+terminfo* uses |terminfo| instead of termcap
+N *+termresponse* support for |t_RV| and |v:termresponse|
+N *+textobjects* |text-objects| selection
+ *+tgetent* non-Unix only: able to use external termcap
+N *+title* Setting the window title |'title'|
+N *+toolbar* |gui-toolbar|
+N *+user_commands* User-defined commands. |user-commands|
+N *+viminfo* |'viminfo'|
+N *+vertsplit* Vertically split windows |:vsplit|
+N *+virtualedit* |'virtualedit'|
+S *+visual* Visual mode |Visual-mode|
+N *+visualextra* extra Visual mode commands |blockwise-operators|
+N *+vreplace* |gR| and |gr|
+N *+wildignore* |'wildignore'|
+N *+wildmenu* |'wildmenu'|
+S *+windows* more than one window
+m *+writebackup* |'writebackup'| is default on
+m *+xim* X input method |xim|
+ *+xfontset* X fontset support |xfontset|
+ *+xsmp* XSMP (X session management) support
+ *+xsmp_interact* interactive XSMP (X session management) support
+N *+xterm_clipboard* Unix only: xterm clipboard handling
+m *+xterm_save* save and restore xterm screen |xterm-screens|
+N *+X11* Unix only: can restore window title |X11|
+
+ */dyn* *E370* *E448*
+ To some of the features "/dyn" is added when the
+ feature is only available when the related library can
+ be dynamically loaded.
+
+:ve[rsion] {nr} Is now ignored. This was previously used to check the
+ version number of a .vimrc file. It was removed,
+ because you can now use the ":if" command for
+ version-dependent behavior. {not in Vi}
+
+ *:redi* *:redir*
+:redi[r][!] > {file} Redirect messages to file {file}. The messages which
+ are the output of commands are written to that file,
+ until redirection ends. The messages are also still
+ shown on the screen. When [!] is included, an
+ existing file is overwritten. When [!] is omitted,
+ and {file} exists, this command fails.
+ Only one ":redir" can be active at a time. Calls to
+ ":redir" will close any active redirection before
+ starting redirection to the new target.
+ To stop the messages and commands from being echoed to
+ the screen, put the commands in a function and call it
+ with ":silent call Function()".
+ {not in Vi}
+
+:redi[r] >> {file} Redirect messages to file {file}. Append if {file}
+ already exists. {not in Vi}
+
+:redi[r] @{a-zA-Z} Redirect messages to register {a-z}. Append to the
+ contents of the register if its name is given
+ uppercase {A-Z}. {not in Vi}
+
+:redi[r] @* Redirect messages to the clipboard. {not in Vi}
+
+:redi[r] @" Redirect messages to the unnamed register. {not in Vi}
+
+:redi[r] END End redirecting messages. {not in Vi}
+
+ *:sil* *:silent*
+:sil[ent][!] {command} Execute {command} silently. Normal messages will not
+ be given or added to the message history.
+ When [!] is added, error messages will also be
+ skipped, and commands and mappings will not be aborted
+ when an error is detected. |v:errmsg| is still set.
+ When [!] is not used, an error message will cause
+ further messages to be displayed normally.
+ Redirection, started with |:redir|, will continue as
+ usual, although there might be small differences.
+ This will allow redirecting the output of a command
+ without seeing it on the screen. Example: >
+ :redir >/tmp/foobar
+ :silent g/Aap/p
+ :redir END
+< To execute a Normal mode command silently, use the
+ |:normal| command. For example, to search for a
+ string without messages: >
+ :silent exe "normal /path\<CR>"
+< ":silent!" is useful to execute a command that may
+ fail, but the failure is to be ignored. Example: >
+ :let v:errmsg = ""
+ :silent! /^begin
+ :if v:errmsg != ""
+ : ... pattern was not found
+< ":silent" will also avoid the hit-enter prompt. When
+ using this for an external command, this may cause the
+ screen to be messed up. Use |CTRL-L| to clean it up
+ then.
+ ":silent menu ..." defines a menu that will not echo a
+ Command-line command. The command will still produce
+ messages though. Use ":silent" in the command itself
+ to avoid that: ":silent menu .... :silent command".
+
+ *:verb* *:verbose*
+:[count]verb[ose] {command}
+ Execute {command} with 'verbose' set to [count]. If
+ [count] is omitted one is used.
+ The additional use of ":silent" makes messages
+ generated but not displayed.
+ The combination of ":silent" and ":verbose" can be
+ used to generate messages and check them with
+ |v:statusmsg| and friends. For example: >
+ :let v:statusmsg = ""
+ :silent verbose runtime foobar.vim
+ :if v:statusmsg != ""
+ : " foobar.vim could not be found
+ :endif
+< When concatenating another command, the ":verbose"
+ only applies to the first one: >
+ :4verbose set verbose | set verbose
+< verbose=4 ~
+ verbose=0 ~
+
+ *K*
+K Run a program to lookup the keyword under the
+ cursor. The name of the program is given with the
+ 'keywordprg' (kp) option (default is "man"). The
+ keyword is formed of letters, numbers and the
+ characters in 'iskeyword'. The keyword under or
+ right of the cursor is used. The same can be done
+ with the command >
+ :!{program} {keyword}
+< There is an example of a program to use in the tools
+ directory of Vim. It is called 'ref' and does a
+ simple spelling check.
+ Special cases:
+ - If 'keywordprg' is empty, the ":help" command is
+ used. It's a good idea to include more characters
+ in 'iskeyword' then, to be able to find more help.
+ - When 'keywordprg' is equal to "man", a count before
+ "K" is inserted after the "man" command and before
+ the keyword. For example, using "2K" while the
+ cursor is on "mkdir", results in: >
+ !man 2 mkdir
+< - When 'keywordprg' is equal to "man -s", a count
+ before "K" is inserted after the "-s". If there is
+ no count, the "-s" is removed.
+ {not in Vi}
+
+ *v_K*
+{Visual}K Like "K", but use the visually highlighted text for
+ the keyword. Only works when the highlighted text is
+ not more than one line. {not in Vi}
+
+[N]gs *gs* *:sl* *:sleep*
+:[N]sl[eep] [N] [m] Do nothing for [N] seconds. When [m] is included,
+ sleep for [N] milliseconds. The count for "gs" always
+ uses seconds. The default is one second. >
+ :sleep "sleep for one second
+ :5sleep "sleep for five seconds
+ :sleep 100m "sleep for a hundred milliseconds
+ 10gs "sleep for ten seconds
+< Can be interrupted with CTRL-C (CTRL-Break on MS-DOS).
+ "gs" stands for "goto sleep". While sleeping the
+ cursor is positioned in the text (if visible). {not
+ in Vi}
+
+ *g_CTRL-A*
+g CTRL-A Only when Vim was compiled with MEM_PROFILING defined
+ (which is very rare): print memory usage statistics.
+ Only useful for debugging Vim.
+
+==============================================================================
+2. Online help *online-help*
+
+ *help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*
+<Help> or
+:h[elp] Open a window and display the help file in read-only
+ mode. If there is a help window open already, use
+ that one. Otherwise, if the current window uses the
+ full width of the screen or is at least 80 characters
+ wide, the help window will appear just above the
+ current window. Otherwise the new window is put at
+ the very top.
+ The 'helplang' option is used to select a language, if
+ the main help file is available in several languages.
+ {not in Vi}
+
+ *{subject}* *E149* *E661*
+:h[elp] {subject} Like ":help", additionally jump to the tag {subject}.
+ {subject} can include wildcards like "*", "?" and
+ "[a-z]":
+ :help z? jump to help for any "z" command
+ :help z. jump to the help for "z."
+ If there is no full match for the pattern, or there
+ are several matches, the "best" match will be used.
+ A sophisticated algorithm is used to decide which
+ match is better than another one. These items are
+ considered in the computation:
+ - A match with same case is much better than a match
+ with different case.
+ - A match that starts after a non-alphanumeric
+ character is better than a match in the middle of a
+ word.
+ - A match at or near the beginning of the tag is
+ better than a match further on.
+ - The more alphanumeric characters match, the better.
+ - The shorter the length of the match, the better.
+
+ The 'helplang' option is used to select a language, if
+ the {subject} is available in several languages.
+ To find a tag in a specific language, append "@ab",
+ where "ab" is the two-letter language code. See
+ |help-translated|.
+
+ Note that the longer the {subject} you give, the less
+ matches will be found. You can get an idea how this
+ all works by using commandline completion (type CTRL-D
+ after ":help subject").
+ If there are several matches, you can have them listed
+ by hitting CTRL-D. Example: >
+ :help cont<Ctrl-D>
+< To use a regexp |pattern|, first do ":help" and then
+ use ":tag {pattern}" in the help window. The
+ ":tnext" command can then be used to jump to other
+ matches, "tselect" to list matches and choose one. >
+ :help index| :tse z.
+< This command can be followed by '|' and another
+ command, but you don't need to escape the '|' inside a
+ help command. So these both work: >
+ :help |
+ :help k| only
+< Note that a space before the '|' is seen as part of
+ the ":help" argument.
+ You can also use <LF> or <CR> to separate the help
+ command from a following command. You need to type
+ CTRL-V first to insert the <LF> or <CR>. Example: >
+ :help so<C-V><CR>only
+< {not in Vi}
+
+:h[elp]! [subject] Like ":help", but in non-English help files prefer to
+ find a tag in a file with the same language as the
+ current file. See |help-translated|.
+
+ *:helpg* *:helpgrep*
+:helpg[rep] {pattern}
+ Search all help text files and make a list of lines
+ in which {pattern} matches. Jumps to the first match.
+ You can navigate through the matches with the
+ |quickfix| commands, e.g., |:cnext| to jump to the
+ next one. Or use |:cwindow| to get the list of
+ matches in the quickfix window.
+ {pattern} is used as a Vim regexp |pattern|.
+ 'ignorecase' is not used, add "\c" to ignore case.
+ Example for case sensitive search: >
+ :helpgrep Uganda
+< Example for case ignoring search: >
+ :helpgrep uganda\c
+< Cannot be followed by another command, everything is
+ used as part of the pattern. But you can use
+ |:execute| when needed.
+ Compressed help files will not be searched (Debian
+ compresses the help files).
+ {not in Vi}
+
+
+When no argument is given to |:help| the file given with the 'helpfile' option
+will be opened. Otherwise the specified tag is searched for in all "doc/tags"
+files in the directories specified in the 'runtimepath' option.
+
+The initial height of the help window can be set with the 'helpheight' option
+(default 20).
+
+Jump to specific subjects by using tags. This can be done in two ways:
+- Use the "CTRL-]" command while standing on the name of a command or option.
+ This only works when the tag is a keyword. "<C-Leftmouse>" and
+ "g<LeftMouse>" work just like "CTRL-]".
+- use the ":ta {subject}" command. This also works with non-keyword
+ characters.
+
+Use CTRL-T or CTRL-O to jump back.
+Use ":q" to close the help window.
+
+If there are several matches for an item you are looking for, this is how you
+can jump to each one of them:
+1. Open a help window
+2. Use the ":tag" command with a slash prepended to the tag. E.g.: >
+ :tag /min
+3. Use ":tnext" to jump to the next matching tag.
+
+It is possible to add help files for plugins and other items. You don't need
+to change the distributed help files for that. See |add-local-help|.
+
+To write a local help file, see |write-local-help|.
+
+Note that the title lines from the local help files are automagically added to
+the "LOCAL ADDITIONS" section in the "help.txt" help file |local-additions|.
+This is done when viewing the file in Vim, the file itself is not changed. It
+is done by going through all help files and obtaining the first line of each
+file. The files in $VIMRUNTIME/doc are skipped.
+
+ *help-xterm-window*
+If you want to have the help in another xterm window, you could use this
+command: >
+ :!xterm -e vim +help &
+<
+
+ *:helpfind* *:helpf*
+:helpf[ind] Like |:help|, but use a dialog to enter the argument.
+ 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}
+
+ *:helpt* *:helptags*
+ *E154* *E150* *E151* *E152* *E153* *E670*
+:helpt[ags] {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.
+ When there are duplicates an error message is given.
+ An existing tags file is silently overwritten.
+ To rebuild the help tags in the runtime directory
+ (requires write permission there): >
+ :helptags $VIMRUNTIME/doc
+< {not in Vi}
+
+
+TRANSLATED HELP *help-translated*
+
+It is possible to add translated help files, next to the original English help
+files. Vim will search for all help in "doc" directories in 'runtimepath'.
+This is only available when compiled with the |+multi_lang| feature.
+
+A set of translated help files consists of these files:
+
+ help.abx
+ howto.abx
+ ...
+ tags-ab
+
+"ab" is the two-letter language code. Thus for Italian the names are:
+
+ help.itx
+ howto.itx
+ ...
+ tags-it
+
+The 'helplang' option can be set to the preferred language(s). The default is
+set according to the environment. Vim will first try to find a matching tag
+in the preferred language(s). English is used when it cannot be found.
+
+To find a tag in a specific language, append "@ab" to a tag, where "ab" is the
+two-letter language code. Example: >
+ :he user-manual@it
+ :he user-manual@en
+The first one finds the Italian user manual, even when 'helplang' is empty.
+The second one finds the English user manual, even when 'helplang' is set to
+"it".
+
+When using command-line completion for the ":help" command, the "@en"
+extention is only shown when a tag exists for multiple languages. When the
+tag only exists for English "@en" is omitted.
+
+When using |CTRL-]| or ":help!" in a non-English help file Vim will try to
+find the tag in the same language. If not found then 'helplang' will be used
+to select a language.
+
+Help files must use latin1 or utf-8 encoding. Vim assumes the encoding is
+utf-8 when finding non-ASCII characters in the first line. Thus you must
+translate the header with "For Vim version".
+
+The same encoding must be used for the help files of one language in one
+directory. You can use a different encoding for different languages and use
+a different encoding for help files of the same language but in a different
+directory.
+
+Hints for translators:
+- Do not translate the tags. This makes it possible to use 'helplang' to
+ specify the preferred language. You may add new tags in your language.
+- When you do not translate a part of a file, add tags to the English version,
+ using the "tag@en" notation.
+- Make a package with all the files and the tags file available for download.
+ Users can drop it in one of the "doc" directories and start use it.
+ Report this to Bram, so that he can add a link on www.vim.org.
+- Use the |:helptags| command to generate the tags files. It will find all
+ languages in the specified directory.
+
+==============================================================================
+3. Printing *printing*
+
+On MS-Windows Vim can print your text on any installed printer. On other
+systems a PostScript file is produced. This can be directly sent to a
+PostScript printer. For other printers a program like ghostscript needs to be
+used.
+
+3.1 PostScript Printing |postscript-printing|
+3.2 PostScript Printing Encoding |postscript-print-encoding|
+3.3 PostScript Printing Troubleshooting |postscript-print-trouble|
+3.4 PostScript Utilities |postscript-print-util|
+3.5 Formfeed Characters |printing-formfeed|
+
+{not in Vi}
+{only available when compiled with |+printer| feature}
+
+ *:ha* *:hardcopy* *E237* *E238* *E324*
+:[range]ha[rdcopy][!] [arguments]
+ Send [range] lines (default whole file) to the
+ printer.
+
+ On MS-Windows a dialog is displayed to allow selection
+ of printer, paper size etc. To skip the dialog, use
+ the [!]. In this case the printer defined by
+ 'printdevice' is used, or, if 'printdevice' is empty,
+ the system default printer.
+
+ For systems other than MS-Windows, PostScript is
+ written in a temp file and 'printexpr' is used to
+ actually print it. Then [arguments] can be used by
+ 'printexpr' through |v:cmdarg|. Otherwise [arguments]
+ is ignored. 'printoptions' can be used to specify
+ paper size, duplex, etc.
+
+:[range]ha[rdcopy][!] >{filename}
+ As above, but write the resulting PostScript in file
+ {filename}.
+ Things like "%" are expanded |cmdline-special|
+ Careful: An existing file is silently overwritten.
+ {only available when compiled with the |+postscript|
+ feature}
+ On MS-Windows use the "print to file" feature of the
+ printer driver.
+
+Progress is displayed during printing as a page number and a percentage. To
+abort printing use the interrupt key (CTRL-C or, on MS-systems, CTRL-Break).
+
+Printer output is controlled by the 'printfont' and 'printoptions' options.
+'printheader' specifies the format of a page header.
+
+The printed file is always limited to the selected margins, irrespective of
+the current window's 'wrap' or 'linebreak' settings. The "wrap" item in
+'printoptions' can be used to switch wrapping off.
+The current highlighting colors are used in the printout, with the following
+considerations:
+1) The normal background is always rendered as white (i.e. blank paper.)
+2) White text or the default foreground is rendered as black, so that it shows
+ up!
+3) If 'background' is "dark", then the colours are darkened to compensate for
+ the fact that otherwise they would be too bright to show up clearly on
+ white paper.
+
+
+3.1 PostScript Printing *postscript-printing*
+ *E455* *E456* *E457* *E624*
+Provided you have enough disk space there should be no problems generating a
+PostScript file. You need to have the runtime files correctly installed (if
+you can find the help files, they probably are).
+
+There are currently a number of limitations with PostScript printing:
+
+- 'printfont' - The font name is ignored (the Courier family is always used -
+ it should be available on all PostScript printers) but the font size is
+ used.
+
+- 'printoptions' - The duplex setting is used when generating PostScript
+ output, but it is up to the printer to take notice of the setting. If the
+ printer does not support duplex printing then it should be silently ignored.
+ Some printers, however, don't print at all.
+
+- 8-bit support - While a number of 8-bit print character encodings are
+ supported it is possible that some characters will not print. Whether a
+ character will print depends on the font in the printer knowing the
+ character. Missing characters will be replaced with an upside down question
+ mark, or a space if that character is also not known by the font. It may be
+ possible to get all the characters in an encoding to print by installing a
+ new version of the Courier font family.
+
+- Multi-byte support - Currently VIM will try to convert multi-byte characters
+ to the 8-bit encoding specified by 'printencoding' (or latin1 if it is
+ empty). Any characters that are not successfully converted are shown as
+ unknown characters. Printing will fail if VIM cannot convert the multi-byte
+ to the 8-bit encoding.
+
+
+3.2 Custom 8-bit Print Character Encodings *postscript-print-encoding*
+ *E618* *E619*
+To use your own print character encoding when printing 8-bit character data
+you need to define your own PostScript font encoding vector. Details on how
+to to define a font encoding vector is beyond the scope of this help file, but
+you can find details in the PostScript Language Reference Manual, 3rd Edition,
+published by Addison-Wesley and available in PDF form at
+http://www.adobe.com/. The following describes what you need to do for VIM to
+locate and use your print character encoding.
+
+i. Decide on a unique name for your encoding vector, one that does not clash
+ with any of the recognized or standard encoding names that VIM uses (see
+ |encoding-names| for a list), and that no one else is likely to use.
+ii. Copy $VIMRUNTIME/print/latin1.ps to the print subdirectory in your
+ 'runtimepath' and rename it with your unique name.
+iii. Edit your renamed copy of latin1.ps, replacing all occurrences of latin1
+ with your unique name (don't forget the line starting %%Title:), and
+ modify the array of glyph names to define your new encoding vector. The
+ array must have exactly 256 entries or you will not be able to print!
+iv. Within VIM, set 'printencoding' to your unique encoding name and then
+ print your file. VIM will now use your custom print character encoding.
+
+VIM will report an error with the resource file if you change the order or
+content of the first 3 lines, other than the name of the encoding on the line
+starting %%Title: or the version number on the line starting %%Version:.
+
+[Technical explanation for those that know PostScript - VIM looks for a file
+with the same name as the encoding it will use when printing. The file
+defines a new PostScript Encoding resource called /VIM-name, where name is the
+print character encoding VIM will use.]
+
+
+3.3 PostScript Printing Troubleshooting *postscript-print-trouble*
+ *E621*
+Usually the only sign of a problem when printing with PostScript is that your
+printout does not appear. If you are lucky you may get a printed page that
+tells you the PostScript operator that generated the error that prevented the
+print job completing.
+
+There are a number of possible causes as to why the printing may have failed:
+
+- Wrong version of the prolog resource file. The prolog resource file
+ contains some PostScript that VIM needs to be able to print. Each version
+ of VIM needs one particular version. Make sure you have correctly installed
+ the runtime files, and don't have any old versions of a file called prolog
+ in the print directory in your 'runtimepath' directory.
+
+- Paper size. Some PostScript printers will abort printing a file if they do
+ not support the requested paper size. By default VIM uses A4 paper. Find
+ out what size paper your printer normally uses and set the appropriate paper
+ size with 'printoptions'. If you cannot find the name of the paper used,
+ measure a sheet and compare it with the table of supported paper sizes listed
+ for 'printoptions', using the paper that is closest in both width AND height.
+ Note: The dimensions of actual paper may vary slightly from the ones listed.
+ If there is no paper listed close enough, then you may want to try psresize
+ from PSUtils, discussed below.
+
+- Two-sided printing (duplex). Normally a PostScript printer that does not
+ support two-sided printing will ignore any request to do it. However, some
+ printers may abort the job altogether. Try printing with duplex turned off.
+ Note: Duplex prints can be achieved manually using PS utils - see below.
+
+- Collated printing. As with Duplex printing, most PostScript printers that
+ do not support collating printouts will ignore a request to do so. Some may
+ not. Try printing with collation turned off.
+
+- Syntax highlighting. Some print management code may prevent the generated
+ PostScript file from being printed on a black and white printer when syntax
+ highlighting is turned on, even if solid black is the only color used. Try
+ printing with syntax highlighting turned off.
+
+A safe printoptions setting to try is: >
+
+ :set printoptions=paper:A4,duplex:off,collate:n,syntax:n
+
+Replace "A4" with the paper size that best matches your printer paper.
+
+
+3.4 PostScript Utilities *postscript-print-util*
+
+3.4.1 Ghostscript
+
+Ghostscript is a PostScript and PDF interpreter that can be used to display
+and print on non-PostScript printers PostScript and PDF files. It can also
+generate PDF files from PostScript.
+
+Ghostscript will run on a wide variety of platforms.
+
+There are three available versions:
+
+- AFPL Ghostscript (formerly Aladdin Ghostscript) which is free for
+ non-commercial use. It can be obtained from:
+
+ http://www.cs.wisc.edu/~ghost/
+
+- GNU Ghostscript which is available under the GNU General Public License. It
+ can be obtained from:
+
+ ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/
+
+- A commercial version for inclusion in commercial products.
+
+Additional information on Ghostscript can also be found at:
+
+ http://www.ghostscript.com/
+
+Support for a number of non PostScript printers is provided in the
+distribution as standard, but if you cannot find support for your printer
+check the Ghostscript site for other printers not included by default.
+
+
+3.4.2 Ghostscript Previewers.
+
+The interface to Ghostscript is very primitive so a number of graphical front
+ends have been created. These allow easier PostScript file selection,
+previewing at different zoom levels, and printing. Check supplied
+documentation for full details.
+
+X11
+
+- Ghostview. Obtainable from:
+
+ http://www.cs.wisc.edu/~ghost/gv/
+
+- gv. Derived from Ghostview. Obtainable from:
+
+ http://wwwthep.physik.uni-mainz.de/~plass/gv/
+
+ Copies (possibly not the most recent) can be found at:
+
+ http://www.cs.wisc.edu/~ghost/gv/
+
+OpenVMS
+
+- Is apparently supported in the main code now (untested). See:
+
+ http://wwwthep.physik.uni-mainz.de/~plass/gv/
+
+Windows and OS/2
+
+- GSview. Obtainable from:
+
+ http://www.cs.wisc.edu/~ghost/gsview/
+
+DOS
+
+- ps_view. Obtainable from:
+
+ ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/
+ ftp://ftp.dante.de/tex-archive/support/ps_view/
+
+Linux
+
+- GSview. Linux version of the popular Windows and OS/2 previewer.
+ Obtainable from:
+
+ http://www.cs.wisc.edu/~ghost/gsview/
+
+- BMV. Different from Ghostview and gv in that it doesn't use X but svgalib.
+ Obtainable from:
+
+ ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz
+
+
+3.4.3 PSUtils
+
+PSUtils is a collection of utility programs for manipulating PostScript
+documents. Binary distributions are available for many platforms, as well as
+the full source. PSUtils can be found at:
+
+ http://knackered.org/angus/psutils
+
+The utilities of interest include:
+
+- psnup. Convert PS files for N-up printing.
+- psselect. Select page range and order of printing.
+- psresize. Change the page size.
+- psbook. Reorder and lay out pages ready for making a book.
+
+The output of one program can be used as the input to the next, allowing for
+complex print document creation.
+
+
+N-UP PRINTING
+
+The psnup utility takes an existing PostScript file generated from VIM and
+convert it to an n-up version. The simplest way to create a 2-up printout is
+to first create a PostScript file with: >
+
+ :hardcopy > test.ps
+
+Then on your command line execute: >
+
+ psnup -n 2 test.ps final.ps
+
+Note: You may get warnings from some Ghostscript previewers for files produced
+by psnup - these may safely be ignored.
+
+Finally print the file final.ps to your PostScript printer with your
+platform's print command. (You will need to delete the two PostScript files
+afterwards yourself.) 'printexpr' could be modified to perform this extra
+step before printing.
+
+
+ALTERNATE DUPLEX PRINTING
+
+It is possible to achieve a poor man's version of duplex printing using the PS
+utility psselect. This utility has options -e and -o for printing just the
+even or odd pages of a PS file respectively.
+
+First generate a PS file with the 'hardcopy' command, then generate a new
+files with all the odd and even numbered pages with: >
+
+ psselect -o test.ps odd.ps
+ psselect -e test.ps even.ps
+
+Next print odd.ps with your platform's normal print command. Then take the
+print output, turn it over and place it back in the paper feeder. Now print
+even.ps with your platform's print command. All the even pages should now
+appear on the back of the odd pages.
+
+There a couple of points to bear in mind:
+
+1. Position of the first page. If the first page is on top of the printout
+ when printing the odd pages then you need to reverse the order that the odd
+ pages are printed. This can be done with the -r option to psselect. This
+ will ensure page 2 is printed on the back of page 1.
+ Note: it is better to reverse the odd numbered pages rather than the even
+ numbered in case there are an odd number of pages in the original PS file.
+
+2. Paper flipping. When turning over the paper with the odd pages printed on
+ them you may have to either flip them horizontally (along the long edge) or
+ vertically (along the short edge), as well as possibly rotating them 180
+ degrees. All this depends on the printer - it will be more obvious for
+ desktop ink jets than for small office laser printers where the paper path
+ is hidden from view.
+
+
+3.5 Formfeed Characters *printing-formfeed*
+
+By default VIM does not do any special processing of |formfeed| control
+characters. Setting the 'printoptions' formfeed item will make VIM recognize
+formfeed characters and continue printing the current line at the beginning
+of the first line on a new page. The use of formfeed characters provides
+rudimentary print control but there are certain things to be aware of.
+
+VIM will always start printing a line (including a line number if enabled)
+containing a formfeed character, even if it is the first character on the
+line. This means if a line starting with a formfeed character is the first
+line of a page then VIM will print a blank page.
+
+Since the line number is printed at the start of printing the line containing
+the formfeed character, the remainder of the line printed on the new page
+will not have a line number printed for it (in the same way as the wrapped
+lines of a long line when wrap in 'printoptions' is enabled).
+
+If the formfeed character is the last character on a line, then printing will
+continue on the second line of the new page, not the first. This is due to
+VIM processing the end of the line after the formfeed character and moving
+down a line to continue printing.
+
+Due to the points made above it is recommended that when formfeed character
+processing is enabled, printing of line numbers is disabled, and that form
+feed characters are not the last character on a line. Even then you may need
+to adjust the number of lines before a formfeed character to prevent
+accidental blank pages.
+
+==============================================================================
+4. 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
+using the shell script "$VIMRUNTIME/macros/less.sh".
+
+This shell script uses the Vim script "$VIMRUNTIME/macros/less.vim". It sets
+up mappings to simulate the commands that less supports. Otherwise, you can
+still use the Vim commands.
+
+This isn't perfect. For example, when viewing a short file Vim will still use
+the whole screen. But it works good enough for most uses, and you get syntax
+highlighting.
+
+The "h" key will give you a short overview of the available commands.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/version4.txt b/runtime/doc/version4.txt
new file mode 100644
index 000000000..f3f760f9b
--- /dev/null
+++ b/runtime/doc/version4.txt
@@ -0,0 +1,355 @@
+*version4.txt* For Vim version 7.0aa. Last change: 2004 Mar 12
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+This document lists the incompatible differences between Vim 3.0 and Vim 4.0.
+Although 4.0 is mentioned here, this is also for version 4.1, 4.2, etc..
+
+This file is important for everybody upgrading from Vim 3.0. Read it
+carefully to avoid unexpected problems.
+
+'backup' option default changed |backup-changed|
+Extension for backup file changed |backup-extension|
+Structure of swap file changed |swapfile-changed|
+"-w scriptout" argument changed |scriptout-changed|
+Backspace and Delete keys |backspace-delete|
+Escape for | changed |escape-bar|
+Key codes changed |key-codes-changed|
+Terminal options changed |termcap-changed|
+'errorformat' option changed |errorformat-changed|
+'graphic' option gone |graphic-option-gone|
+'yankendofline' option gone |ye-option-gone|
+'icon' and 'title' default value changed |icon-changed|
+'highlight' option changed |highlight-changed|
+'tildeop' and 'weirdinvert' short names changed |short-name-changed|
+Use of "v", "V" and "CTRL-V" in Visual mode |use-visual-cmds|
+CTRL-B in Insert mode removed |toggle-revins|
+
+
+'backup' option default changed *backup-changed*
+-------------------------------
+
+The default value for 'backup' used to be on. This resulted in a backup file
+being made when the original file was overwritten.
+
+Now the default for 'backup' is off. As soon as the writing of the file has
+successfully finished, the backup file is deleted. If you want to keep the
+backup file, set 'backup' on in your vimrc. The reason for this change is
+that many people complained that leaving a backup file behind is not
+Vi-compatible. |'backup'|
+
+
+Extension for backup file changed *backup-extension*
+---------------------------------
+
+The extension for the backup file used to be ".bak". Since other programs
+also use this extension and some users make copies with this extension, it was
+changed to the less obvious "~". Another advantage is that this takes less
+space, which is useful when working on a system with short file names. For
+example, on MS-DOS the backup files for "longfile.c" and "longfile.h" would
+both become "longfile.bak"; now they will be "longfile.c~" and "longfile.h~".
+
+If you prefer to use ".bak", you can set the 'backupext' option: >
+ :set bex=.bak
+
+
+Structure of swap file changed *swapfile-changed*
+------------------------------
+
+The contents of the swap file were extended with several parameters. Vim
+stores the user name and other information about the edited file to make
+recovery more easy and to be able to know where the swap file comes from. The
+first part of the swap file can now be understood on a machine with a
+different byte order or sizeof(int). When you try to recover a file on such a
+machine, you will get an error message that this is not possible.
+
+Because of this change, swap files cannot be exchanged between 3.0 and 4.0.
+If you have a swap file from a crashed session with 3.0, use Vim 3.0 to
+recover the file---don't use 4.0. |swap-file|
+
+
+"-w scriptout" argument changed *scriptout-changed*
+-------------------------------
+
+"vim -w scriptout" used to append to the scriptout file. Since this was
+illogical, it now creates a new file. An existing file is not overwritten
+(to avoid destroying an existing file for those who rely on the appending).
+[This was removed again later] |-w|
+
+
+Backspace and Delete keys *backspace-delete*
+-------------------------
+
+In 3.0 both the delete key and the backspace key worked as a backspace in
+insert mode; they deleted the character to the left of the cursor. In 4.0 the
+delete key has a new function: it deletes the character under the cursor, just
+like it does on the command-line. If the cursor is after the end of the line
+and 'bs' is set, two lines are joined. |<Del>| |i_<Del>|
+
+In 3.0 the backspace key was always defined as CTRL-H and delete as CTRL-?.
+In 4.0 the code for the backspace and delete key is obtained from termcap or
+termlib, and adjusted for the "stty erase" value on Unix. This helps people
+who define the erase character according to the keyboard they are working on.
+ |<BS>| |i_<BS>|
+
+If you prefer backspace and delete in Insert mode to have the old behavior,
+put this line in your vimrc:
+
+ inoremap ^? ^H
+
+And you may also want to add these, to fix the values for <BS> and <Del>:
+
+ set t_kb=^H
+ set t_kD=^?
+
+(Enter ^H with CTRL-V CTRL-H and ^? with CTRL-V CTRL-? or <Del>.)
+
+If the value for t_kb is correct, but the t_kD value is not, use the ":fixdel"
+command. It will set t_kD according to the value of t_kb. This is useful if
+you are using several different terminals. |:fixdel|
+
+When ^H is not recognized as <BS> or <Del>, it is used like a backspace.
+
+
+Escape for | changed *escape-bar*
+--------------------
+
+When the 'b' flag is present in 'cpoptions', the backslash cannot be used to
+escape '|' in mapping and abbreviate commands, only CTRL-V can. This is
+Vi-compatible. If you work in Vi-compatible mode and had used "\|" to include
+a bar in a mapping, this needs to be replaced by "^V|". See |:bar|.
+
+
+Key codes changed *key-codes-changed*
+-----------------
+
+The internal representation of key codes has changed dramatically. In 3.0 a
+one-byte code was used to represent a key. This caused problems with
+different characters sets that also used these codes. In 4.0 a three-byte
+code is used that cannot be confused with a character. |key-notation|
+
+If you have used the single-byte key codes in your vimrc for mappings, you
+will have to replace them with the 4.0 codes. Instead of using the three-byte
+code directly, you should use the symbolic representation for this in <>. See
+the table below. The table also lists the old name, as it was used in the 3.0
+documentation.
+
+The key names in <> can be used in mappings directly. This makes it possible
+to copy/paste examples or type them literally. The <> notation has been
+introduced for this |<>|. The 'B' and '<' flags must not be present in
+'cpoptions' to enable this to work |'cpoptions'|.
+
+old name new name old code old MS-DOS code ~
+ hex dec hex dec ~
+<ESC> <Esc>
+<TAB> <Tab>
+<LF> <NL> <NewLine> <LineFeed>
+<SPACE> <Space>
+<NUL> <Nul>
+<BELL> <Bell>
+<BS> <BS> <BackSpace>
+<INSERT> <Insert>
+<DEL> <Del> <Delete>
+<HOME> <Home>
+<END> <End>
+<PAGE_UP> <PageUp>
+<PAGE_DOWN> <PageDown>
+
+<C_UP> <Up> 0x80 128 0xb0 176
+<C_DOWN> <Down> 0x81 129 0xb1 177
+<C_LEFT> <Left> 0x82 130 0xb2 178
+<C_RIGHT> <Right> 0x83 131 0xb3 179
+<SC_UP> <S-Up> 0x84 132 0xb4 180
+<SC_DOWN> <S-Down> 0x85 133 0xb5 181
+<SC_LEFT> <S-Left> 0x86 134 0xb6 182
+<SC_RIGHT> <S-Right> 0x87 135 0xb7 183
+
+<F1> <F1> 0x88 136 0xb8 184
+<F2> <F2> 0x89 137 0xb9 185
+<F3> <F3> 0x8a 138 0xba 186
+<F4> <F4> 0x8b 139 0xbb 187
+<F5> <F5> 0x8c 140 0xbc 188
+<F6> <F6> 0x8d 141 0xbd 189
+<F7> <F7> 0x8e 142 0xbe 190
+<F8> <F8> 0x8f 143 0xbf 191
+<F9> <F9> 0x90 144 0xc0 192
+<F10> <F10> 0x91 145 0xc1 193
+
+<SF1> <S-F1> 0x92 146 0xc2 194
+<SF2> <S-F2> 0x93 147 0xc3 195
+<SF3> <S-F3> 0x94 148 0xc4 196
+<SF4> <S-F4> 0x95 149 0xc5 197
+<SF5> <S-F5> 0x96 150 0xc6 198
+<SF6> <S-F6> 0x97 151 0xc7 199
+<SF7> <S-F7> 0x98 152 0xc8 200
+<SF8> <S-F8> 0x99 153 0xc9 201
+<SF9> <S-F9> 0x9a 154 0xca 202
+<SF10> <S-F10> 0x9b 155 0xcb 203
+
+<HELP> <Help> 0x9c 156 0xcc 204
+<UNDO> <Undo> 0x9d 157 0xcd 205
+
+ (not used) 0x9e 158 0xce 206
+ (not used) 0x9f 159 0xcf 207
+
+
+Terminal options changed *termcap-changed*
+------------------------
+
+The names of the terminal options have been changed to match the termcap names
+of these options. All terminal options now have the name t_xx, where xx is
+the termcap name. Normally these options are not used, unless you have a
+termcap entry that is wrong or incomplete, or you have set the highlight
+options to a different value. |terminal-options|
+
+Note that for some keys there is no termcap name. Use the <> type of name
+instead, which is a good idea anyway.
+
+Note that "t_ti" has become "t_mr" (invert/reverse output) and "t_ts" has
+become "t_ti" (init terminal mode). Be careful when you use "t_ti"!
+
+old name new name meaning ~
+t_cdl t_DL delete number of lines *t_cdl*
+t_ci t_vi cursor invisible *t_ci*
+t_cil t_AL insert number of lines *t_cil*
+t_cm t_cm move cursor
+t_cri t_RI cursor number of chars right *t_cri*
+t_cv t_ve cursor visible *t_cv*
+t_cvv t_vs cursor very visible *t_cvv*
+t_dl t_dl delete line
+t_cs t_cs scroll region
+t_ed t_cl clear display *t_ed*
+t_el t_ce clear line *t_el*
+t_il t_al insert line *t_il*
+ t_da display may be retained above the screen
+ t_db display may be retained below the screen
+t_ke t_ke put terminal out of keypad transmit mode
+t_ks t_ks put terminal in keypad transmit mode
+t_ms t_ms save to move cursor in highlight mode
+t_se t_se normal mode (undo t_so)
+t_so t_so shift out (standout) mode
+t_ti t_mr reverse highlight
+t_tb t_md bold mode *t_tb*
+t_tp t_me highlight end *t_tp*
+t_sr t_sr scroll reverse
+t_te t_te out of termcap mode
+t_ts t_ti into termcap mode *t_ts_old*
+t_vb t_vb visual bell
+t_csc t_CS cursor is relative to scroll region *t_csc*
+
+t_ku t_ku <Up> arrow up
+t_kd t_kd <Down> arrow down
+t_kr t_kr <Right> arrow right
+t_kl t_kl <Left> arrow left
+t_sku <S-Up> shifted arrow up *t_sku*
+t_skd <S-Down> shifted arrow down *t_skd*
+t_skr t_%i <S-Right> shifted arrow right *t_skr*
+t_skl t_#4 <S-Left> shifted arrow left *t_skl*
+t_f1 t_k1 <F1> function key 1 *t_f1*
+t_f2 t_k2 <F2> function key 2 *t_f2*
+t_f3 t_k3 <F3> function key 3 *t_f3*
+t_f4 t_k4 <F4> function key 4 *t_f4*
+t_f5 t_k5 <F5> function key 5 *t_f5*
+t_f6 t_k6 <F6> function key 6 *t_f6*
+t_f7 t_k7 <F7> function key 7 *t_f7*
+t_f8 t_k8 <F8> function key 8 *t_f8*
+t_f9 t_k9 <F9> function key 9 *t_f9*
+t_f10 t_k; <F10> function key 10 *t_f10*
+t_sf1 <S-F1> shifted function key 1 *t_sf1*
+t_sf2 <S-F2> shifted function key 2 *t_sf2*
+t_sf3 <S-F3> shifted function key 3 *t_sf3*
+t_sf4 <S-F4> shifted function key 4 *t_sf4*
+t_sf5 <S-F5> shifted function key 5 *t_sf5*
+t_sf6 <S-F6> shifted function key 6 *t_sf6*
+t_sf7 <S-F7> shifted function key 7 *t_sf7*
+t_sf8 <S-F8> shifted function key 8 *t_sf8*
+t_sf9 <S-F9> shifted function key 9 *t_sf9*
+t_sf10 <S-F10> shifted function key 10 *t_sf10*
+t_help t_%1 <Help> help key *t_help*
+t_undo t_&8 <Undo> undo key *t_undo*
+
+
+'errorformat' option changed *errorformat-changed*
+----------------------------
+
+'errorformat' can now contain several formats, separated by commas. The first
+format that matches is used. The default values have been adjusted to catch
+the most common formats. |errorformat|
+
+If you have a format that contains a comma, it needs to be preceded with a
+backslash. Type two backslashes, because the ":set" command will eat one.
+
+
+'graphic' option gone *graphic-option-gone*
+---------------------
+
+The 'graphic' option was used to make the characters between <~> and 0xa0
+display directly on the screen. Now the 'isprint' option takes care of this
+with many more possibilities. The default setting is the same; you only need
+to look into this if you previously set the 'graphic' option in your vimrc.
+ |'isprint'|
+
+
+'yankendofline' option gone *ye-option-gone*
+---------------------------
+
+The 'yankendofline' option has been removed. Instead you can just use
+ :map Y y$
+
+
+'icon' and 'title' default value changed *icon-changed*
+----------------------------------------
+
+The 'title' option is now only set by default if the original title can be
+restored. Avoids "Thanks for flying Vim" titles. If you want them anyway,
+put ":set title" in your vimrc. |'title'|
+
+The default for 'icon' now depends on the possibility of restoring the
+original value, just like 'title'. If you don't like your icon titles to be
+changed, add this line to your vimrc: |'icon'|
+ :set noicon
+
+
+'highlight' option changed *highlight-changed*
+--------------------------
+
+The 'i' flag now means italic highlighting, instead of invert. The 'r' flag
+is used for reverse highlighting, which is what 'i' used to be. Normally you
+won't see the difference, because italic mode is not supported on most
+terminals and reverse mode is used as a fallback. |'highlight'|
+
+When an occasion is not present in 'highlight', use the mode from the default
+value for 'highlight', instead of reverse mode.
+
+
+'tildeop' and 'weirdinvert' short names changed *short-name-changed*
+-----------------------------------------------
+
+Renamed 'to' (abbreviation for 'tildeop') to 'top'. |'tildeop'|
+Renamed 'wi' (abbreviation for 'weirdinvert') to 'wiv'. |'weirdinvert'|
+
+This was done because Vi uses 'wi' as the short name for 'window' and 'to' as
+the short name for 'timeout'. This means that if you try setting these
+options, you won't get an error message, but the effect will be different.
+
+
+Use of "v", "V" and "CTRL-V" in Visual mode *use-visual-cmds*
+-------------------------------------------
+
+In Visual mode, "v", "V", and "CTRL-V" used to end Visual mode. Now this
+happens only if the Visual mode was in the corresponding type. Otherwise the
+type of Visual mode is changed. Now only ESC can be used in all circumstances
+to end Visual mode without doing anything. |v_V|
+
+
+CTRL-B in Insert mode removed *toggle-revins*
+-----------------------------
+
+CTRL-B in Insert mode used to toggle the 'revins' option. If you don't know
+this and accidentally hit CTRL-B, it is very difficult to find out how to undo
+it. Since hardly anybody uses this feature, it is disabled by default. If
+you want to use it, define RIGHTLEFT in feature.h before compiling. |'revins'|
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/version5.txt b/runtime/doc/version5.txt
new file mode 100644
index 000000000..4f53463cb
--- /dev/null
+++ b/runtime/doc/version5.txt
@@ -0,0 +1,7813 @@
+*version5.txt* For Vim version 7.0aa. Last change: 2004 Jan 17
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+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..
+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.
+
+INCOMPATIBLE: |incompatible-5|
+
+Default value for 'compatible' changed |cp-default|
+Text formatting command "Q" changed |Q-command-changed|
+Command-line arguments changed |cmdline-changed|
+Autocommands are kept |autocmds-kept|
+Use of 'hidden' changed |hidden-changed|
+Text object commands changed |text-objects-changed|
+X-Windows Resources removed |x-resources|
+Use of $VIM |$VIM-use|
+Use of $HOME for MS-DOS and Win32 |$HOME-use|
+Tags file format changed |tags-file-changed|
+Options changed |options-changed|
+CTRL-B in Insert mode gone |i_CTRL-B-gone|
+
+NEW FEATURES: |new-5|
+
+Syntax highlighting |new-highlighting|
+Built-in script language |new-script|
+Perl and Python support |new-perl-python|
+Win32 GUI version |added-win32-GUI|
+VMS version |added-VMS|
+BeOS version |added-BeOS|
+Macintosh GUI version |added-Mac|
+More Vi compatible |more-compatible|
+Read input from stdin |read-stdin|
+Regular expression patterns |added-regexp|
+Overloaded tags |tag-overloaded|
+New commands |new-commands|
+New options |added-options|
+New command-line arguments |added-cmdline-args|
+Various additions |added-various|
+
+IMPROVEMENTS |improvements-5|
+
+COMPILE TIME CHANGES |compile-changes-5|
+
+BUG FIXES |bug-fixes-5|
+
+VERSION 5.1 |version-5.1|
+Changed |changed-5.1|
+Added |added-5.1|
+Fixed |fixed-5.1|
+
+VERSION 5.2 |version-5.2|
+Long lines editable |long-lines|
+File browser added |file-browser-5.2|
+Dialogs added |dialogs-added|
+Popup menu added |popup-menu-added|
+Select mode added |new-Select-mode|
+Session files added |new-session-files|
+User defined functions and commands |new-user-defined|
+New interfaces |interfaces-5.2|
+New ports |ports-5.2|
+Multi-byte support |new-multi-byte|
+New functions |new-functions-5.2|
+New options |new-options-5.2|
+New Ex commands |new-ex-commands-5.2|
+Changed |changed-5.2|
+Added |added-5.2|
+Fixed |fixed-5.2|
+
+VERSION 5.3 |version-5.3|
+Changed |changed-5.3|
+Added |added-5.3|
+Fixed |fixed-5.3|
+
+VERSION 5.4 |version-5.4|
+Runtime directory introduced |new-runtime-dir|
+Filetype introduced |new-filetype-5.4|
+Vim script line continuation |new-line-continuation|
+Improved session files |improved-sessions|
+Autocommands improved |improved-autocmds-5.4|
+Encryption |new-encryption|
+GTK GUI port |new-GTK-GUI|
+Menu changes |menu-changes-5.4|
+Viminfo improved |improved-viminfo|
+Various new commands |new-commands-5.4|
+Various new options |new-options-5.4|
+Vim scripts |new-script-5.4|
+Avoid hit-enter prompt |avoid-hit-enter|
+Improved quickfix |improved-quickfix|
+Regular expressions |regexp-changes-5.4|
+Changed |changed-5.4|
+Added |added-5.4|
+Fixed |fixed-5.4|
+
+VERSION 5.5 |version-5.5|
+Changed |changed-5.5|
+Added |added-5.5|
+Fixed |fixed-5.5|
+
+VERSION 5.6 |version-5.6|
+Changed |changed-5.6|
+Added |added-5.6|
+Fixed |fixed-5.6|
+
+VERSION 5.7 |version-5.7|
+Changed |changed-5.7|
+Added |added-5.7|
+Fixed |fixed-5.7|
+
+VERSION 5.8 |version-5.8|
+Changed |changed-5.8|
+Added |added-5.8|
+Fixed |fixed-5.8|
+
+==============================================================================
+ INCOMPATIBLE *incompatible-5*
+
+Default value for 'compatible' changed *cp-default*
+--------------------------------------
+
+Vim version 5.0 tries to be more Vi compatible. This helps people who use Vim
+as a drop-in replacement for Vi, but causes some things to be incompatible
+with version 4.x.
+
+In version 4.x the default value for the 'compatible' option was off. Now the
+default is on. The first thing you will notice is that the "u" command undoes
+itself. Other side effects will be that mappings may work differently or not
+work at all.
+
+Since a lot of people switching from Vim 4.x to 5.0 will find this annoying,
+the 'compatible' option is switched off if Vim finds a vimrc file. This is a
+bit of magic to make sure that 90% of the Vim users will not be bitten by
+this change.
+
+What does this mean?
+- If you prefer to run in 'compatible' mode and don't have a vimrc file, you
+ don't have to do anything.
+- If you prefer to run in 'nocompatible' mode and do have a vimrc file, you
+ don't have to do anything.
+- If you prefer to run in 'compatible' mode and do have a vimrc file, you
+ should put this line first in your vimrc file: >
+ :set compatible
+- If you prefer to run in 'nocompatible' mode and don't have a vimrc file,
+ you can do one of the following:
+ - Create an empty vimrc file (e.g.: "~/.vimrc" for Unix).
+ - Put this command in your .exrc file or $EXINIT: >
+ :set nocompatible
+< - Start Vim with the "-N" argument.
+
+If you are new to Vi and Vim, using 'nocompatible' is strongly recommended,
+because Vi has a lot of unexpected side effects, which are avoided by this
+setting. See 'compatible'.
+
+If you like some things from 'compatible' and some not, you can tune the
+compatibility with 'cpoptions'.
+
+When you invoke Vim as "ex" or "gex", Vim always starts in compatible mode.
+
+
+Text formatting command "Q" changed *Q-command-changed*
+-----------------------------------
+
+The "Q" command formerly formatted lines to the width the 'textwidth' option
+specifies. The command for this is now "gq" (see |gq| for more info). The
+reason for this change is that "Q" is the standard Vi command to enter "Ex"
+mode, and Vim now does in fact have an "Ex" mode (see |Q| for more info).
+
+If you still want to use "Q" for formatting, use this mapping: >
+ :noremap Q gq
+And if you also want to use the functionality of "Q": >
+ :noremap gQ Q
+
+
+Command-line arguments changed *cmdline-changed*
+------------------------------
+
+Command-line file-arguments and option-arguments can now be mixed. You can
+give options after the file names. Example: >
+ vim main.c -g
+
+This is not possible when editing a file that starts with a '-'. Use the "--"
+argument then |---|: >
+ vim -g -- -main.c
+
+"-v" now means to start Ex in Vi mode, use "-R" for read-only mode.
+old: "vim -v file" |-v|
+new: "vim -R file" |-R|
+
+"-e" now means to start Vi in Ex mode, use "-q" for quickfix.
+old: "vim -e errorfile" |-e|
+new: "vim -q errorfile" |-q|
+
+"-s" in Ex mode now means to run in silent (batch) mode. |-s-ex|
+
+"-x" reserved for crypt, use "-f" to avoid starting a new CLI (Amiga).
+old: "vim -x file" |-x|
+new: "vim -f file" |-f|
+
+Vim allows up to ten "+cmd" and "-c cmd" arguments. Previously Vim executed
+only the last one.
+
+"-n" now overrides any setting for 'updatecount' in a vimrc file, but not in
+a gvimrc file.
+
+
+Autocommands are kept *autocmds-kept*
+---------------------
+
+Before version 5.0, autocommands with the same event, file name pattern, and
+command could appear only once. This was fine for simple autocommands (like
+setting option values), but for more complicated autocommands, where the same
+command might appear twice, this restriction caused problems. Therefore
+Vim stores all autocommands and keeps them in the order that they are defined.
+
+The most obvious side effect of this change is that when you source a vimrc
+file twice, the autocommands in it will be defined twice. To avoid this, do
+one of these:
+
+- Remove any autocommands that might potentially defined twice before
+ defining them. Example: >
+ :au! * *.ext
+ :au BufEnter *.ext ...
+
+- Put the autocommands inside an ":if" command. Example: >
+ if !exists("did_ext_autocmds")
+ let did_ext_autocmds = 1
+ autocmd BufEnter *.ext ...
+ endif
+
+- Put your autocommands in a different autocommand group so you can remove
+ them before defining them |:augroup|: >
+ augroup uncompress
+ au!
+ au BufReadPost *.gz ...
+ augroup END
+
+
+Use of 'hidden' changed *hidden-changed*
+-----------------------
+
+In version 4.x, only some commands used the 'hidden' option. Now all commands
+uses it whenever a buffer disappears from a window.
+
+Previously you could do ":buf xxx" in a changed buffer and that buffer would
+then become hidden. Now you must set the 'hidden' option for this to work.
+
+The new behavior is simpler: whether Vim hides buffers no longer depends on
+the specific command that you use.
+- with 'hidden' not set, you never get hidden buffers. Exceptions are the
+ ":hide" and ":close!" commands and, in rare cases, where you would otherwise
+ lose changes to the buffer.
+- With 'hidden' set, you almost never unload a buffer. Exceptions are the
+ ":bunload" or ":bdel" commands.
+
+":buffer" now supports a "!": abandon changes in current buffer. So do
+":bnext", ":brewind", etc.
+
+
+Text object commands changed *text-objects-changed*
+----------------------------
+
+Text object commands have new names. This allows more text objects and makes
+characters available for other Visual mode commands. Since no more single
+characters were available, text objects names now require two characters.
+The first one is always 'i' or 'a'.
+ OLD NEW ~
+ a aw a word |v_aw|
+ A aW a WORD |v_aW|
+ s as a sentence |v_as|
+ p ap a paragraph |v_ap|
+ S ab a () block |v_ab|
+ P aB a {} block |v_aB|
+
+There is another set of text objects that starts with "i", for "inner". These
+select the same objects, but exclude white space.
+
+
+X-Windows Resources removed *x-resources*
+--------------------------
+
+Vim no longer supports the following X resources:
+- boldColor
+- italicColor
+- underlineColor
+- cursorColor
+
+Vim now uses highlight groups to set colors. This avoids the confusion of
+using a bold Font, which would imply a certain color. See |:highlight| and
+|gui-resources|.
+
+
+Use of $VIM *$VIM-use*
+-----------
+
+Vim now uses the VIM environment variable to find all Vim system files. This
+includes the global vimrc, gvimrc, and menu.vim files and all on-line help
+and syntax files. See |$VIM|. Starting with version 5.4, |$VIMRUNTIME| can
+also be used.
+For Unix, Vim sets a default value for $VIM when doing "make install".
+When $VIM is not set, its default value is the directory from 'helpfile',
+excluding "/doc/help.txt".
+
+
+Use of $HOME for MS-DOS and Win32 *$HOME-use*
+---------------------------------
+
+The MS-DOS and Win32 versions of Vim now first check $HOME when searching for
+a vimrc or exrc file and for reading/storing the viminfo file. Previously Vim
+used $VIM for these systems, but this causes trouble on a system with several
+users. Now Vim uses $VIM only when $HOME is not set or the file is not found
+in $HOME. See |_vimrc|.
+
+
+Tags file format changed *tags-file-changed*
+------------------------
+
+Only Tabs are allowed to separate fields in a tags file. This allows for
+spaces in a file name and is still Vi compatible. In previous versions of
+Vim, any white space was allowed to separate the fields. If you have a file
+which doesn't use a single Tab between fields, edit the tags file and execute
+this command: >
+ :%s/\(\S*\)\s\+\(\S*\)\s\+\(.*\)/\1\t\2\t\3/
+
+
+Options changed *options-changed*
+---------------
+
+The default value of 'errorfile' has changed from "errors.vim" to "errors.err".
+The reason is that only Vim scripts should have the ".vim" extensions.
+
+The ":make" command no longer uses the 'errorfile' option. This prevents the
+output of the ":make" command from overwriting a manually saved error file.
+":make" uses the 'makeef' option instead. This also allows for generating a
+unique name, to prevent concurrently running ":make" commands from overwriting
+each other's files.
+
+With 'insertmode' set, a few more things change:
+- <Esc> in Normal mode goes to Insert mode.
+- <Esc> in Insert mode doesn't leave Insert mode.
+- When doing ":set im", go to Insert mode immediately.
+
+Vim considers a buffer to be changed when the 'fileformat' (formerly the
+'textmode' option) is different from the buffer's initial format.
+
+
+CTRL-B in Insert mode gone *i_CTRL-B-gone*
+--------------------------
+
+When Vim was compiled with the |+rightleft| feature, you could use CTRL-B to
+toggle the 'revins' option. Unfortunately, some people hit the 'B' key
+accidentally when trying to type CTRL-V or CTRL-N and then didn't know how to
+undo this. Since toggling the 'revins' option can easily be done with the
+mapping below, this use of the CTRL-B key is disabled. You can still use the
+CTRL-_ key for this |i_CTRL-_|. >
+ :imap <C-B> <C-O>:set revins!<CR>
+
+==============================================================================
+ NEW FEATURES *new-5*
+
+Syntax highlighting *new-highlighting*
+-------------------
+
+Vim now has a very flexible way to highlighting just about any type of file.
+See |syntax|. Summary: >
+ :syntax on
+
+Colors and attributes can be set for the syntax highlighting, and also for
+other highlighted items with the ':' flag in the 'highlight' option. All
+highlighted items are assigned a highlight group which specifies their
+highlighting. See |:highlight|. The default colors have been improved.
+
+You can use the "Normal" group to set the default fore/background colors for a
+color terminal. For the GUI, you can use this group to specify the font, too.
+
+The "2html.vim" script can be used to convert any file that has syntax
+highlighting to HTML. The colors will be exactly the same as how you see them
+in Vim. With a HTML viewer you can also print the file with colors.
+
+
+Built-in script language *new-script*
+------------------------
+
+A few extra commands and an expression evaluator enable you to write simple
+but powerful scripts. Commands include ":if" and ":while". Expressions can
+manipulate numbers and strings. You can use the '=' register to insert
+directly the result of an expression. See |expression|.
+
+
+Perl and Python support *new-perl-python*
+-----------------------
+
+Vim can call Perl commands with ":perldo", ":perl", etc. See |perl|.
+Patches made by Sven Verdoolaege and Matt Gerassimoff.
+
+Vim can call Python commands with ":python" and ":pyfile". See |python|.
+
+Both of these are only available when enabled at compile time.
+
+
+Win32 GUI version *added-win32-GUI*
+-----------------
+
+The GUI has been ported to MS Windows 95 and NT. All the features of the X11
+GUI are available to Windows users now. |gui-w32|
+This also fixes problems with running the Win32 console version under Windows
+95, where console support has always been bad.
+There is also a version that supports OLE automation interface. |if_ole.txt|
+Vim can be integrated with Microsoft Developer Studio using the VisVim DLL.
+It is possible to produce a DLL version of gvim with Borland C++ (Aaron).
+
+
+VMS version *added-VMS*
+-----------
+
+Vim can now also be used on VMS systems. Port done by Henk Elbers.
+This has not been tested much, but it should work.
+Sorry, no documentation!
+
+
+BeOS version *added-BeOS*
+------------
+
+Vim can be used on BeOS systems (including the BeBox). (Olaf Seibert)
+See |os_beos.txt|.
+
+
+Macintosh GUI version *added-Mac*
+---------------------
+
+Vim can now be used on the Macintosh. (Dany St-Amant)
+It has not been tested much yet, be careful!
+See |os_mac.txt|.
+
+
+More Vi compatible *more-compatible*
+------------------
+
+There is now a real Ex mode. Started with the "Q" command, or by calling the
+executable "ex" or "gex". |Ex-mode|
+
+Always allow multi-level undo, also in Vi compatible mode. When the 'u' flag
+in 'cpoptions' is included, CTRL-R is used for repeating the undo or redo
+(like "." in Nvi).
+
+
+Read input from stdin *read-stdin*
+---------------------
+
+When using the "-" command-line argument, Vim reads its text input from stdin.
+This can be used for putting Vim at the end of a pipe: >
+ grep "^a.*" *.c | vim -
+See |--|.
+
+
+Regular expression patterns *added-regexp*
+---------------------------
+
+Added specifying a range for the number of matches of a atom: "\{a,b}". |/\{|
+Added the "shortest match" regexp "\{-}" (Webb).
+Added "\s", matches a white character. Can replace "[ \t]". |/\s|
+Added "\S", matches a non-white character. Can replace "[^ \t]". |/\S|
+
+
+Overloaded tags *tag-overloaded*
+---------------
+
+When using a language like C++, there can be several tags for the same
+tagname. Commands have been added to be able to jump to any of these
+overloaded tags:
+|:tselect| List matching tags, and jump to one of them.
+|:stselect| Idem, and split window.
+|g_CTRL-]| Do ":tselect" with the word under the cursor.
+
+ After ":ta {tagname}" with multiple matches:
+|:tnext| Go to next matching tag.
+|:tprevious| Go to previous matching tag.
+|:trewind| Go to first matching tag.
+|:tlast| Go to last matching tag.
+
+The ":tag" command now also accepts wildcards. When doing command-line
+completion on tags, case-insensitive matching is also available (at the end).
+
+
+New commands *new-commands*
+------------
+
+|:amenu| Define menus for all modes, inserting a CTRL-O for Insert
+ mode, ESC for Visual and CTRL-C for Cmdline mode. "amenu" is
+ used for the default menus and the Syntax menu.
+
+|:augroup| Set group to be used for following autocommands. Allows the
+ grouping of autocommands to enable deletion of a specific
+ group.
+
+|:crewind| Go to first error.
+|:clast| Go to last error.
+
+|:doautoall| Execute autocommands for all loaded buffers.
+
+|:echo| Echo its argument, which is an expression. Can be used to
+ display messages which include variables.
+
+|:execute| Execute its argument, which is an expression. Can be used to
+ built up an Ex command with anything.
+
+|:hide| Works like ":close".
+
+|:if| Conditional execution, for built-in script language.
+
+|:intro| Show introductory message. This is always executed when Vim
+ is started without file arguments.
+
+|:let| Assign a value to an internal variable.
+
+|:omap| Map only in operator-pending mode. Makes it possible to map
+ text-object commands.
+
+|:redir| Redirect output of messages to a file.
+
+|:update| Write when buffer has changed.
+
+|:while| While-loop for built-in script language.
+
+Visual mode:
+|v_O| "O" in Visual block mode, moves the cursor to the other corner
+ horizontally.
+|v_D| "D" in Visual block mode deletes till end of line.
+
+Insert mode:
+|i_CTRL-]| Triggers abbreviation, without inserting any character.
+
+
+New options *added-options*
+-----------
+
+'background' Used for selecting highlight color defaults. Also used in
+ "syntax.vim" for selecting the syntax colors. Often set
+ automatically, depending on the terminal used.
+
+'complete' Specifies how Insert mode completion works.
+
+'eventignore' Makes it possible to ignore autocommands temporarily.
+
+'fileformat' Current file format. Replaces 'textmode'.
+'fileformats' Possible file formats. Replaces 'textauto'.
+ New is that this also supports Macintosh format: A single <CR>
+ separates lines.
+ The default for 'fileformats' for MS-DOS, Win32 and OS/2 is
+ "dos,unix", also when 'compatible' set. Unix type files
+ didn't work anyway when 'fileformats' was empty.
+
+'guicursor' Set the cursor shape and blinking in various modes.
+ Default is to adjust the cursor for Insert and Replace mode,
+ and when an operator is pending. Blinking is default on.
+
+'fkmap' Farsi key mapping.
+
+'hlsearch' Highlight all matches with the last used search pattern.
+
+'hkmapp' Phonetic Hebrew mapping (Ilya Dogolazky).
+
+'iconstring' Define the name of the icon, when not empty. (version 5.2: the
+ string is used literally, a newline can be used to make two
+ lines).
+
+'lazyredraw' Don't redraw the screen while executing macros, registers or
+ other not typed commands.
+
+'makeef' Errorfile to be used for ":make". "##" is replaced with a
+ unique number. Avoids that two Vim sessions overwrite each
+ others errorfile. The Unix default is "/tmp/vim##.err"; for
+ Amiga "t:vim##.Err, for others "vim##.err".
+
+'matchtime' 1/10s of a second to show a matching paren, when 'showmatch'
+ is set. Like Nvi.
+
+'mousehide' Hide mouse pointer in GUI when typing text.
+
+'nrformats' Defines what bases Vim will consider for numbers when using
+ the CTRL-A and CTRL-X commands. Default: "hex,octal".
+
+'shellxquote' Add extra quotes around the whole shell command, including
+ redirection.
+
+'softtabstop' Make typing behave like tabstop is set at this value, without
+ changing the value of 'tabstop'. Makes it more easy to keep
+ 'ts' at 8, while still getting four spaces for a <Tab>.
+
+'titlestring' String for the window title, when not empty. (version 5.2:
+ this string is used literally, a newline can be used to make
+ two lines).
+
+'verbose' Level of verbosity. Makes it possible to show which .vimrc,
+ .exrc, .viminfo files etc. are used for initializing. Also
+ to show autocommands that are being executed. Can also be set
+ by using the "-V" command-line argument.
+
+
+New command-line arguments *added-cmdline-args*
+--------------------------
+
+|-U| Set the gvimrc file to be used. Like "-u" for the vimrc.
+
+|-V| Set the 'verbose' option. E.g. "vim -V10".
+
+|-N| Start in non-compatible mode.
+
+|-C| Start in compatible mode.
+
+|-Z| Start in restricted mode, disallow shell commands. Can also
+ be done by calling the executable "rvim".
+
+|-h| Show usage information and exit.
+
+
+Various additions *added-various*
+-----------------
+
+Added support for SNiFF+ connection (submitted by Toni Leherbauer). Vim can
+be used as an editor for SNiFF. No documentation available...
+
+For producing a bug report, the bugreport.vim script has been included.
+Can be used with ":so $VIMRUNTIME/bugreport.vim", which creates the file
+"bugreport.txt" in the current directory. |bugs|
+
+Added range to ":normal" command. Now you can repeat the same command for
+each line in the range. |:normal-range|
+
+Included support for the Farsi language (Shiran). Only when enabled at
+compile time. See |farsi|.
+
+==============================================================================
+ IMPROVEMENTS *improvements-5*
+
+Performance:
+- When 'showcmd' was set, mappings would execute much more slowly because the
+ output would be flushed very often. Helps a lot when executing the "life"
+ macros with 'showcmd' set.
+- Included patches for binary searching in tags file (David O'Neill).
+ Can be disabled by resetting the 'tagbsearch' option.
+- Don't update the ruler when repeating insert (slowed it down a lot).
+- For Unix, file name expansion is now done internally instead of starting a
+ shell for it.
+- Expand environment variables with expand_env(), instead of calling the
+ shell. Makes ":so $VIMRUNTIME/syntax/syntax.vim" a LOT faster.
+- Reduced output for cursor positioning: Use CR-LF for moving to first few
+ columns in next few lines; Don't output CR twice when using termios.
+- Optimized cursor positioning. Use CR, BS and NL when it's shorter than
+ absolute cursor positioning.
+- Disable redrawing while repeating insert "1000ii<Esc>".
+- Made "d$" or "D" for long lines a lot faster (delete all characters at once,
+ instead of one by one).
+- Access option table by first letter, instead of searching from start.
+- Made setting special highlighting attributes a lot faster by using
+ highlight_attr[], instead of searching in the 'highlight' string.
+- Don't show the mode when redrawing is disabled.
+- When setting an option, only redraw the screen when required.
+- Improved performance of Ex commands by using a lookup table for the first
+ character.
+
+Options:
+'cinoptions' Added 'g' flag, for C++ scope declarations.
+'cpoptions' Added 'E' flag: Disallow yanking, deleting, etc. empty text
+ area. Default is to allow empty yanks. When 'E' is included,
+ "y$" in an empty line now is handled as an error (Vi
+ compatible).
+ Added 'j' flag: Only add two spaces for a join after a '.',
+ not after a '?' or '!'.
+ Added 'A' flag: don't give ATTENTION message.
+ Added 'L' flag: When not included, and 'list' is set,
+ 'textwidth' formatting works like 'list' is not set.
+ Added 'W' flag: Let ":w!" behave like Vi: don't overwrite
+ readonly files, or a file owned by someone else.
+'highlight' Added '@' flag, for '@' characters after the last line on the
+ screen, and '$' at the end of the line when 'list' is set.
+ Added 'i' flag: Set highlighting for 'incsearch'. Default
+ uses "IncSearch" highlight group, which is linked to "Visual".
+ Disallow 'h' flag in 'highlight' (wasn't used anymore since
+ 3.0).
+'guifont' Win32 GUI only: When set to "*" brings up a font requester.
+'guipty' Default on, because so many people need it.
+'path' Can contain wildcards, and "**" for searching a whole tree.
+'shortmess' Added 'I' flag to avoid the intro message.
+'viminfo' Added '%' flag: Store buffer list in viminfo file.
+
+- Increased defaults for 'maxmem' and 'maxmemtot' for Unix and Win32. Most
+ machines have much more RAM now that prices have dropped.
+- Implemented ":set all&", set all options to their default value. |:set|
+
+Swap file:
+- Don't create a swap file for a readonly file. Then create one on the first
+ change. Also create a swapfile when the amount of memory used is getting
+ too high. |swap-file|
+- Make swap file "hidden", if possible. On Unix this is done by prepending a
+ dot to the swap file name. When long file names are used, the DJGPP and
+ Win32 versions also prepend a dot, in case a file on a mounted Unix file
+ system is edited. |:swapname| On MSDOS the hidden file attribute is NOT
+ set, because this causes problems with share.exe.
+- 'updatecount' always defaults to non-zero, also for Vi compatible mode.
+ This means there is a swap file, which can be used for recovery.
+
+Tags:
+- Included ctags 2.0 (Darren Hiebert). The syntax for static tags changed
+ from
+ {tag}:{fname} {fname} {command}
+ to
+ {tag} {fname} {command};" file:
+ Which is both faster to parse, shorter and Vi compatible. The old format is
+ also still accepted, unless disabled in src/feature.h (see OLD_STATIC_TAGS).
+ |tags-file-format|
+- Completion of tags now also includes static tags for other files, at the
+ end.
+- Included "shtags" from Stephen Riehm.
+- When finding a matching tag, but the file doesn't exist, continue searching
+ for another match. Helps when using the same tags file (with links) for
+ different versions of source code.
+- Give a tag with a global match in the current file a higher priority than a
+ global match in another file.
+
+Included xxd version V1.8 (Juergen Weigert).
+
+Autocommands:
+- VimLeave autocommands are executed after writing the viminfo file, instead
+ of before. |VimLeave|
+- Allow changing autocommands while executing them. This allows for
+ self-modifying autocommands. (idea from Goldberg)
+- When using autocommands with two or more patterns, could not split
+ ":if/:endif" over two lines. Now all matching autocommands are executed in
+ one do_cmdline().
+- Autocommands no longer change the command repeated with ".".
+- Search patterns are restored after executing autocommands. This avoids
+ that the 'hlsearch' highlighting is messed up by autocommands.
+- When trying to execute an autocommand, also try matching the pattern with
+ the short file name. Helps when short file name is different from full
+ file name (expanded symbolic links). |autocmd-patterns|
+- Made the output of ":autocmd" shorter and look better.
+- Expand <sfile> in an ":autocmd" when it is defined. |<sfile>|
+- Added "nested" flag to ":autocmd", allows nesting. |autocmd-nested|
+- Added [group] argument to ":autocmd". Overrides the currently set group.
+ |autocmd-groups|
+- new events:
+ |BufUnload| before a buffer is unloaded
+ |BufDelete| before a buffer is deleted from the buffer list
+ |FileChangedShell| when a file's modification time has changed after
+ executing a shell command
+ |User| user-defined autocommand
+- When 'modified' was set by a BufRead* autocommand, it was reset again
+ afterwards. Now the ":set modified" is remembered.
+
+GUI:
+- Improved GUI scrollbar handling when redrawing is slower than the scrollbar
+ events are generated.
+- "vim -u NONE" now also stops loading the .gvimrc and other GUI inits. |-u|
+ Use "-U" to use another gvimrc file. |-U|
+- Handle CTRL-C for external command, also for systems where "setsid()" is
+ supported.
+- When starting the GUI, restrict the window size to the screen size.
+- The default menus are read from $VIMRUNTIME/menu.vim. This allows for a
+ customized default menu. |menu.vim|
+- Improved the default menus. Added File/Print, a Window menu, Syntax menu,
+ etc.
+- Added priority to the ":menu" command. Now each menu can be put in a place
+ where you want it, independent of the order in which the menus are defined.
+ |menu-priority|
+
+Give a warning in the intro screen when running the Win32 console version on
+Windows 95 because there are problems using this version under Windows 95.
+|win32-problems|
+
+Added 'e' flag for ":substitute" command: Don't complain when not finding a
+match (Campbell). |:s|
+
+When using search commands in a mapping, only the last one is kept in the
+history. Avoids that the history is trashed by long mappings.
+
+Ignore characters after "ex", "view" and "gvim" when checking startup mode.
+Allows the use of "gvim5" et. al. |gvim| "gview" starts the GUI in readonly
+mode. |gview|
+
+When resizing windows, the cursor is kept in the same relative position, if
+possible. (Webb)
+
+":all" and ":ball" no longer close and then open a window for the same buffer.
+Avoids losing options, jumplist, and other info.
+
+"-f" command-line argument is now ignored if Vim was compiled without GUI.
+|-f|
+
+In Visual block mode, the right mouse button picks up the nearest corner.
+
+Changed default mappings for DOS et al. Removed the DOS-specific mappings,
+only use the Windows ones. Added Shift-Insert, Ctrl-Insert, Ctrl-Del and
+Shift-Del.
+
+Changed the numbers in the output of ":jumps", so you can see where {count}
+CTRL-O takes you. |:jumps|
+
+Using "~" for $HOME now works for all systems. |$HOME|
+
+Unix: Besides using CTRL-C, also use the INTR character from the tty settings.
+Somebody has INTR set to DEL.
+
+Allow a <LF> in a ":help" command argument to end the help command, so another
+command can follow.
+
+Doing "%" on a line that starts with " #if" didn't jump to matching "#else".
+Don't recognize "#if", "#else" etc. for '%' when 'cpo' contains the '%' flag.
+|%|
+
+Insert mode expansion with "CTRL-N", "CTRL-P" and "CTRL-X" improved
+|ins-completion|:
+- 'complete' option added.
+- When 'nowrapscan' is set, and no match found, report the searched direction
+ in the error message.
+- Repeating CTRL-X commands adds following words/lines after the match.
+- When adding-expansions, accept single character matches.
+- Made repeated CTRL-X CTRL-N not break undo, and "." repeats the whole
+ insertion. Also fixes not being able to backspace over a word that has been
+ inserted with CTRL-N.
+
+When copying characters in Insert mode from previous/next line, with CTRL-E or
+CTRL-Y, 'textwidth' is no longer used. |i_CTRL-E|
+
+Commands that move in the arglist, like ":n" and ":rew", keep the old cursor
+position of the file (this is mostly Vi compatible).
+
+Vim now remembers the '< and '> marks for each buffer. This fixes a problem
+that a line-delete in one buffer invalidated the '< and '> marks in another
+buffer. |'<|
+
+For MSDOS, Unix and OS/2: When $VIM not set, use the path from the executable.
+When using the executable path for $VIM, remove "src/" when present. Should
+make Vim find the docs and syntax files when it is run directly after
+compiling. |$VIM|
+
+When quitting Visual mode with <Esc>, the cursor is put at start of the Visual
+area (like after executing an operator).
+
+Win32 and Unix version: Removed 1100 character limit on external commands.
+
+Added possibility to include a space in a ":edit +command" argument, by
+putting a backslash before it. |+cmd|
+
+After recovery, BufReadPost autocommands are applied. |:recover|
+
+Added color support for "os2ansi", OS/2 console. (Slootman) |os2ansi|
+
+Allow "%:p:h" when % is empty. |:_%|
+
+Included "<sfile>": file name from the ":source" command. |<sfile>|
+
+Added "<Bslash>" special character. Helps for avoiding multiple backslashes
+in mappings and menus.
+
+In a help window, a double-click jumps to the tag under the cursor (like
+CTRL-]).
+
+<C-Left> and <C-Right> now work like <S-Left> and <S-Right>, move a word
+forward/backward (Windows compatible). |<C-Left>|
+
+Removed the requirement for a ":version" command in a .vimrc file. It wasn't
+used for anything. You can use ":if" to handle differences between versions.
+|:version|
+
+For MS-DOS, Win32 and OS/2: When comparing file names for autocommands, don't
+make a difference between '/' and '\' for path separator.
+
+New termcap options:
+"mb": blink. Can only be used by assigning it to one of the other highlight
+ options. |t_mb|
+"bc": backspace character. |t_bc|
+"nd": Used for moving the cursor right in the GUI, to avoid removing one line
+ of pixels from the last bold character. |t_nd|
+"xs": highlighting not erased by overwriting, for hpterm. Combined with
+ 'weirdinvert'. Visual mode works on hpterm now. |t_xs|
+
+Unix: Set time of patch and backup file same as original file. (Hiebert).
+
+Amiga: In QuickFix mode no longer opens another window. Shell commands can be
+used now.
+
+Added decmouse patches from David Binette. Can now use Dec and Netterm mouse.
+But only when enabled at compile time.
+
+Added '#' register: Alternate file name |quote#|. Display '#' register with
+":dis" command. |:display|
+
+Removed ':' from 'isfname' default for Unix. Check for "://" in a file name
+anyway. Also check for ":\\", for MS-DOS.
+
+Added count to "K"eyword command, when 'keywordprg' is "man", is inserted in
+the man command. "2K" results in "!man 2 <cword>". |K|
+
+When using "gf" on a relative path name, remove "../" from the file name, like
+it's done for file names in the tags file. |gf|
+
+When finishing recording, don't make the recorded register the default put
+register.
+
+When using "!!", don't put ":5,5!" on the command-line, but ":.!". And some
+other enhancements to replace the line number with "." or "$" when possible.
+
+MSDOS et al.: Renamed $VIM/viminfo to $VIM/_viminfo. It's more consistent:
+.vimrc/_vimrc and .viminfo/_viminfo
+
+For systems where case doesn't matter in file names (MSDOS, Amiga), ignore
+case while sorting file names. For buffer names too.
+
+When reading from stdin doesn't work, read from stderr (helps for "foo | xargs
+vim").
+
+32 bit MS-DOS version: Replaced csdpmi3 by csdpmi4.
+
+Changed <C-Left> and <C-Right> to skip a WORD instead of a word.
+
+Warning for changed modified time when overwriting a file now also works on
+other systems than Unix.
+
+Unix: Changed the defaults for configure to be the same as the defaults for
+Makefile: include GUI, Perl, and Python.
+
+Some versions of Motif require "-lXpm". Added check for this in configure.
+
+Don't add "-L/usr/lib" to the link line, causes problems on a few systems.
+
+==============================================================================
+ COMPILE TIME CHANGES *compile-changes-5*
+
+When compiling, allow a choice for minimal, normal or maximal features in an
+easy way, by changing a single line in src/feature.h.
+The DOS16 version has been compiled with minimal features to avoid running
+out of memory too quickly. |dos16|
+The Win32, DJGPP, and OS/2 versions use maximal features, because they have
+enough memory.
+The Amiga version is available with normal and maximal features.
+
+Added "make test" to Unix version Makefile. Allows for a quick check if most
+"normal" commands work properly. Also tests a few specific commands.
+
+Added setlocale() with codepage support for DJGPP version.
+
+autoconf:
+- Added autoconf check for -lXdmcp.
+- Included check for -lXmu, no longer needed to edit the Makefile for this.
+- Switched to autoconf 2.12.
+- Added configure check for <poll.h>. Seems to be needed when including
+ Perl on Linux?
+- termlib is now checked before termcap.
+- Added configure check for strncasecmp(), stricmp() and strnicmp(). Added
+ vim_stricmp() for when there's no library function for stricmp().
+- Use "datadir" in configure, instead of our own check for HELPDIR.
+
+Removed "make proto" from Makefile.manx. Could not make it work without a lot
+of #ifdefs.
+
+Removed "proto/" from paths in proto.h. Needed for the Mac port.
+
+Drastically changed Makefile.mint. Now it includes the Unix Makefile.
+
+Added support for Dos16 in Makefile.b32 (renamed Makefile.b32 to Makefile.bor)
+
+All source files are now edited with a tabstop of 8 instead of 4, which is
+better when debugging and using other tools. 'softtabstop' is set to 4, to
+make editing easier.
+
+Unix: Added "link.sh" script, which removes a few unnecessary libraries from
+the link command.
+
+Don't use HPUX digraphs by default, but only when HPUX_DIGRAPHS is defined.
+|digraphs-default|
+
+==============================================================================
+ BUG FIXES *bug-fixes-5*
+
+Note: Some of these fixes may only apply to test versions which were
+ created after version 4.6, but before 5.0.
+
+
+When doing ":bdel", try going to the next loaded buffer. Don't rewind to the
+start of the buffer list.
+
+mch_isdir() for Unix returned TRUE for "" on some systems.
+
+Win32: 'shell' set to "mksnt/sh.exe" breaks ":!" commands. Don't use
+backslashes in the temp file names.
+
+On linux, with a FAT file system, could get spurious "file xxx changed since
+editing started" messages, because the time is rounded off to two seconds
+unexpectedly.
+
+Crash in GUI, when selecting a word (double click) and then extend until an
+empty line.
+
+For systems where isdigit() can't handle characters > 255, get_number() caused
+a crash when moving the mouse during the prompt for recovery.
+
+In Insert mode, "CTRL-O P" left the cursor on the last inserted character.
+Now the cursor is left after the last putted character.
+
+When quickfix found an error type other than 'e' or 'w', it was never printed.
+
+A setting for 'errorfile' in a .vimrc overruled the "-q errorfile" argument.
+
+Some systems create a file when generating a temp file name. Filtering would
+then create a backup file for this, which was never deleted. Now no backup
+file is made when filtering.
+
+simplify_filename() could remove a ".." after a link, resulting in the wrong
+file name. Made simplify_filename also work for MSDOS. Don't use it for
+Amiga, since it doesn't have "../".
+
+otherfile() was unreliable when using links. Could think that reading/writing
+was for a different file, when it was the same.
+
+Pasting with mouse in Replace mode didn't replace anything.
+
+Window height computed wrong when resizing a window with an autocommand (could
+cause a crash).
+
+":s!foo!bar!" wasn't possible (Vi compatible).
+
+do_bang() freed memory twice when called recursively, because of autocommands
+(test11). Thanks to Electric Fence!
+
+"v$d" on an empty line didn't remove the "-- VISUAL --" mode message from the
+command-line, and inverted the cursor.
+
+":mkexrc" didn't check for failure to open the file, causing a crash.
+(Felderhoff).
+
+Win32 mch_write() wrote past fixed buffer, causing terminal keys no longer to
+be recognized. Both console and GUI version.
+
+Athena GUI: Crash when removing a menu item. Now Vim doesn't crash, but the
+reversing of the menu item is still wrong.
+
+Always reset 'list' option for the help window.
+
+When 'scrolloff' is non-zero, a 'showmatch' could cause the shown match to be
+in the wrong line and the window to be scrolled (Acevedo).
+
+After ":set all&", 'lines' and 'ttytype' were still non-default, because the
+defaults never got set. Now the defaults for 'lines' and 'columns' are set
+after detecting the window size. 'term' and 'ttytype' defaults are set when
+detecting the terminal type.
+
+For (most) non-Unix systems, don't add file names with illegal characters when
+expanding. Fixes "cannot open swapfile" error when doing ":e *.burp", when
+there is no match.
+
+In X11 GUI, drawing part of the cursor obscured the text. Now the text is
+drawn over the cursor, like when it fills the block. (Seibert)
+
+when started with "-c cmd -q errfile", the cursor would be left in line 1.
+Now a ":cc" is done after executing "cmd".
+
+":ilist" never ignored case, even when 'ignorecase' set.
+
+"vim -r file" for a readonly file, then making a change, got ATTENTION message
+in insert mode, display mixed up until <Esc> typed. Also don't give ATTENTION
+message after recovering a file.
+
+The abbreviation ":ab #i #include" could not be removed.
+
+CTRL-L completion (longest common match) on command-line didn't work properly
+for case-insensitive systems (MS-DOS, Windows, etc.). (suggested by Richard
+Kilgore).
+
+For terminals that can hide the cursor ("vi" termcap entry), resizing the
+window caused the cursor to disappear.
+
+Using an invalid mark in an Ex address didn't abort the command.
+
+When 'smarttab' set, would use 'shiftround' when inserting a TAB after a
+space. Now it always rounds to a tabstop.
+
+Set '[ and '] marks for ":copy", ":move", ":append", ":insert", ":substitute"
+and ":change". (Acevedo).
+
+"d$" in an empty line still caused an error, even when 'E' is not in
+'cpoptions'.
+
+Help files were stored in the viminfo buffer list without a path.
+
+GUI: Displaying cursor was not synchronized with other displaying. Caused
+several display errors. For example, when the last two lines in the file
+start with spaces, "dd" on the last line copied text to the (then) last line.
+
+Win32: Needed to type CTRL-SHIFT-- to get CTRL-_.
+
+GUI: Moving the cursor forwards over bold text would remove one column of bold
+pixels.
+
+X11 GUI: When a bold character in the last column was scrolled up or down, one
+column of pixels would not be copied.
+
+Using <BS> to move the cursor left can sometimes erase a character. Now use
+"le" termcap entry for this.
+
+Keyword completion with regexp didn't work. e.g., for "b.*crat".
+
+Fixed: With CTRL-O that jumps to another file, cursor could end up just after
+the line.
+
+Amiga: '$' was missing from character recognized as wildcards, causing $VIM
+sometimes not to be expanded.
+
+":change" didn't adjust marks for deleted lines.
+
+":help [range]" didn't work. Also for [pattern], [count] and [quotex].
+
+For 'cindent'ing, typing "class::method" doesn't align like a label when the
+second ':' is typed.
+When inserting a CR with 'cindent' set (and a bunch of other conditions) the
+cursor went to a wrong location.
+'cindent' was wrong for a line that ends in '}'.
+'cindent' was wrong after "else {".
+
+While editing the cmdline in the GUI, could not use the mouse to select text
+from the command-line itself.
+
+When deleting lines, marks in tag stack were only adjusted for the current
+window, not for other windows on the same buffer.
+
+Tag guessing could find a function "some_func" instead of the "func" we were
+looking for.
+
+Tags file name relative to the current file didn't work.
+
+":g/pat2/s//pat2/g", causing the number of subs to be reported, used to cause
+a scroll up. Now you no longer have to hit <CR>.
+
+X11 GUI: Selecting text could cause a crash.
+
+32 bit DOS version: CTRL-C in external command killed Vim. When SHELL is set
+to "sh.exe", external commands didn't work. Removed using of command.com, no
+longer need to set 'shellquote'.
+
+Fixed crash when using ":g/pat/i".
+
+Fixed (potential) crash for X11 GUI, when using an X selection. Was giving a
+pointer on the stack to a callback function, now it's static.
+
+Using "#" and "*" with an operator didn't work. E.g. "c#".
+
+Command-line expansion didn't work properly after ":*". (Acevedo)
+
+Setting 'weirdinvert' caused highlighting to be wrong in the GUI.
+
+":e +4 #" didn't work, because the "4" was in unallocated memory (could cause
+a crash).
+
+Cursor position was wrong for ":e #", after ":e #" failed, because of changes
+to the buffer.
+
+When doing ":buf N", going to a buffer that was edited with ":view", the
+readonly flag was reset. Now make a difference between ":e file" and ":buf
+file": Only set/reset 'ro' for the first one.
+
+Avoid |hit-enter| prompt when not able to write viminfo on exit.
+
+When giving error messages in the terminal where the GUI was started, GUI
+escape codes would be written to the terminal. In an xterm this could be seen
+as a '$' after the message.
+
+Mouse would not work directly after ":gui", because full_screen isn't set,
+which causes starttermcap() not to do its work.
+
+'incsearch' did not scroll the window in the same way as the actual search.
+When 'nowrap' set, incsearch didn't show a match when it was off the side of
+the screen. Now it also shows the whole match, instead of just the cursor
+position (if possible).
+
+":unmap", ":unab" and ":unmenu" did not accept a double quote, it was seen as
+the start of a comment. Now it's Vi compatible.
+
+Using <Up><Left><Left><Up> in the command-line, when there is no previous
+cmdline in the history, inserted a NUL on the command-line.
+
+"i<Esc>" when on a <Tab> in column 0 left the cursor in the wrong place.
+
+GUI Motif: When adding a lot of menu items, the menu bar goes into two rows.
+Deleting menu items, reducing the number of rows, now also works.
+
+With ":g/pat/s//foo/c", a match in the first line was scrolled off of the
+screen, so you could not see it.
+When using ":s//c", with 'nowrap' set, a match could be off the side of the
+screen, so you could not see it.
+
+When 'helpfile' was set to a fixed, non-absolute path in feature.h, Vim would
+crash. mch_Fullname can now handle file names in read-only memory. (Lottem)
+
+When using CTRL-A or CTRL-@ in Insert mode, there could be strange effects
+when using CTRL-D next. Also, when repeating inserted text that included "0
+CTRL-D" or "^ CTRL-D" this didn't work. (Acevedo)
+Using CTRL-D after using CTRL-E or CTRL-Y in Insert mode that inserted a '0'
+or '^', removed the '0' or '^' and more indent.
+
+The command "2".p" caused the last inserted text to be executed as commands.
+(Acevedo)
+
+Repeating the insert of "CTRL-V 048" resulted in "^@" to be inserted.
+
+Repeating Insert completion could fail if there are special characters in the
+text. (Acevedo)
+
+":normal /string<CR>" caused the window to scroll. Now all ":normal" commands
+are executed without scrolling messages.
+
+Redo of CTRL-E or CTRL-Y in Insert mode interpreted special characters as
+commands.
+
+Line wrapping for 'tw' was done one character off for insert expansion
+inserts.
+
+buffer_exists() function didn't work properly for buffer names with a symbolic
+link in them (e.g. when using buffer_exists(#)).
+
+Removed the "MOTIF_COMMENT" construction from Makefile. It now works with
+FreeBSD make, and probably with NeXT make too.
+
+Matching the 'define' and 'include' arguments now honor the settings for
+'ignorecase'. (Acevedo)
+
+When one file shown in two windows, Visual selection mixed up cursor position
+in current window and other window.
+
+When doing ":e file" from a help file, the 'isk' option wasn't reset properly,
+because of a modeline in the help file.
+
+When doing ":e!", a cursor in another window on the same buffer could become
+invalid, leading to "ml_get: invalid lnum" errors.
+
+Matching buffer name for when expanded name has a different path from not
+expanded name (Brugnara).
+
+Normal mappings didn't work after an operator. For example, with ":map Q gq",
+"QQ" didn't work.
+
+When ":make" resulted in zero errors, a "No Errors" error message was given
+(which breaks mappings).
+
+When ":sourcing" a file, line length was limited to 1024 characters. CTRL-V
+before <EOL> was not handled Vi compatible. (Acevedo)
+
+Unexpected exit for X11 GUI, caused by SAVE_YOURSELF event. (Heimann)
+
+CTRL-X CTRL-I only found one match per line. (Acevedo)
+When using an illegal CTRL-X key in Insert mode, the CTRL-X mode message
+was stuck.
+
+Finally managed to ignore the "Quit" menu entry of the Window manager! Now
+Vim only exists when there are no changed buffers.
+
+Trying to start the GUI when $DISPLAY is not set resulted in a crash.
+When $DISPLAY is not set and gvim starts vim, title was restored to "Thanks
+for flying Vim".
+When $DISPLAY not set, starting "gvim" (dropping back to vim) and then
+selecting text with the mouse caused a crash.
+
+"J", with 'joinspaces' set, on a line ending in ". ", caused one space too
+many to be added. (Acevedo)
+
+In insert mode, a CTRL-R {regname} which didn't insert anything left the '"'
+on the screen.
+
+":z10" didn't work. (Clapp)
+
+"Help "*" didn't work.
+
+Renamed a lot of functions, to avoid clashes with POSIX name space.
+
+When adding characters to a line, making it wrap, the following lines were
+sometimes not shifted down (e.g. after a tag jump).
+
+CTRL-E, with 'so' set and cursor on last line, now does not move cursor as
+long as the last line is on the screen.
+
+When there are two windows, doing "^W+^W-" in the bottom window could cause
+the status line to be doubled (not redrawn correctly).
+
+This command would hang: ":n `cat`". Now connect stdin of the external
+command to /dev/null, when expanding.
+
+Fixed lalloc(0,) error for ":echo %:e:r". (Acevedo)
+
+The "+command" argument to ":split" didn't work when there was no file name.
+
+When selecting text in the GUI, which is the output of a command-line command
+or an external command, the inversion would sometimes remain.
+
+GUI: "-mh 70" argument was broken. Now, when menuheight is specified, it is
+not changed anymore.
+
+GUI: When using the scrollbar or mouse while executing an external command,
+this caused garbage characters.
+
+Showmatch sometimes jumped to the wrong position. Was caused by a call to
+findmatch() when redrawing the display (when syntax highlighting is on).
+
+Search pattern "\(a *\)\{3} did not work correctly, also matched "a a".
+Problem with brace_count not being decremented.
+
+Wildcard expansion added too many non-matching file names.
+
+When 'iskeyword' contains characters like '~', "*" and "#" didn't work
+properly. (Acevedo)
+
+On Linux, on a FAT file system, modification time can change by one second.
+Avoid a "file has changed" warning for a one second difference.
+
+When using the page-switching in an xterm, Vim would position the cursor on
+the last line of the window on exit. Also removed the cursor positioning for
+":!" commands.
+
+":g/pat/p" command (partly) overwrote the command. Now the output is on a
+separate line.
+
+With 'ic' and 'scs' set, a search for "Keyword", ignore-case matches were
+highlighted too.
+
+"^" on a line with only white space, put cursor beyond the end of the line.
+
+When deleting characters before where insertion started ('bs' == 2), could not
+use abbreviations.
+
+CTRL-E at end of file puts cursor below the file, in Visual mode, when 'so' is
+non-zero. CTRL-E didn't work when 'so' is big and the line below the window
+wraps. CTRL-E, when 'so' is non-zero, at end of the file, caused jumping
+up-down.
+
+":retab" didn't work well when 'list' is set.
+
+Amiga: When inserting characters at the last line on the screen, causing it
+to wrap, messed up the display. It appears that a '\n' on the last line
+doesn't always cause a scroll up.
+
+In Insert mode "0<C-D><C-D>" deleted an extra character, because Vim thought
+that the "0" was still there. (Acevedo)
+
+"z{count}l" ignored the count. Also for "zh" et. al. (Acevedo)
+
+"S" when 'autoindent' is off didn't delete leading white space.
+
+"/<Tab>" landed on the wrong character when 'incsearch' is set.
+
+Asking a yes/no question could cause a |hit-enter| prompt.
+
+When the file consists of one long line (>4100 characters), making changes
+caused various errors and a crash.
+
+DJGPP version could not save long lines (>64000) for undo.
+
+"yw" on the last char in the file didn't work. Also fixed "6x" at the end of
+the line. "6X" at the start of a line fails, but does not break a mapping. In
+general, a movement for an operator doesn't beep or flush a mapping, but when
+there is nothing to operate on it beeps (this is Vi compatible).
+
+"m'" and "m`" now set the '' mark at the cursor position.
+
+Unix: Resetting of signals for external program didn't work, because SIG_DFL
+and NULL are the same! For "!!yes|dd count=1|, the yes command kept on
+running.
+
+Partly fixed: Unix GUI: Typeahead while executing an external command was lost.
+Now it's not lost while the command is producing output.
+
+Typing <S-Tab> in Insert mode, when it isn't mapped, inserted "<S-Tab>". Now
+it works like a normal <Tab>, just like <C-Tab> and <M-Tab>.
+
+Redrawing ruler didn't check for old value correctly (caused UMR warnings in
+Purify).
+
+Negative array index in finish_viminfo_history().
+
+":g/^/d|mo $" deleted all the lines. The ":move" command now removes the
+:global mark from the moved lines.
+
+Using "vG" while the last line in the window is a "@" line, didn't update
+correctly. Just the "v" showed "~" lines.
+
+"daw" on the last char of the file, when it's a space, moved the cursor beyond
+the end of the line.
+
+When 'hlsearch' was set or reset, only the current buffer was redrawn, while
+this affects all windows.
+
+CTRL-^, positioning the cursor somewhere from 1/2 to 1 1/2 screen down the
+file, put the cursor at the bottom of the window, instead of halfway.
+
+When scrolling up for ":append" command, not all windows were updated
+correctly.
+
+When 'hlsearch' is set, and an auto-indent is highlighted, pressing <Esc>
+didn't remove the highlighting, although the indent was deleted.
+
+When 'ru' set and 'nosc', using "$j" showed a wrong ruler.
+
+Under Xfree 3.2, Shift-Tab didn't work (wrong keysym is used).
+
+Mapping <S-Tab> didn't work. Changed the key translations to use the shortest
+key code possible. This makes the termcode translations and mappings more
+consistent. Now all modifiers work in all combinations, not only with <Tab>,
+but also with <Space>, <CR>, etc.
+
+For Unix, restore three more signals. And Vim catches SIGINT now, so CTRL-C
+in Ex mode doesn't make Vim exit.
+
+""a5Y" yanked 25 lines instead of 5.
+
+"vrxxx<Esc>" in an empty line could not be undone.
+
+A CTRL-C that breaks ":make" caused the errorfile not to be read (annoying
+when you want to handle what ":make" produced so far).
+
+":0;/pat" didn't find "pat" in line 1.
+
+Search for "/test/s+1" at first char of file gave bottom-top message, or
+didn't work at all with 'nowrapscan'.
+
+Bug in viminfo history. Could cause a crash on exit.
+
+":print" didn't put cursor on first non-blank in line.
+
+":0r !cat </dev/null" left cursor in line zero, with very strange effects.
+
+With 'showcmd' set and 'timeoutlen' set to a few seconds, trick to position
+the cursor leftwards didn't work.
+
+AIX stty settings were restored to cs5 instead of cs8 (Winn).
+
+File name completion didn't work for "zsh" versions that put spaces between
+file names, instead of NULs.
+
+Changed "XawChain*" to "XtChain*", should work for more systems.
+
+Included quite a few fixes for rightleft mode (Lottem).
+
+Didn't ask to |hit-enter| when GUI is started and error messages are printed.
+
+When trying to edit a file in a non-existent directory, ended up with editing
+"No file".
+
+"gqap" to format a paragraph did too much redrawing.
+
+When 'hlsearch' set, only the current window was updated for a new search
+pattern.
+
+Sometimes error messages on startup didn't cause a |hit-enter| prompt,
+because of autocommands containing an empty line.
+
+Was possible to select part of the window in the border, below the command
+line.
+
+'< and '> marks were not at the correct position after linewise Visual
+selection.
+
+When translating a help argument to "CTRL-x", prepend or append a '_', when
+applicable.
+
+Blockwise visual mode wasn't correct when moving vertically over a special
+character (displayed as two screen characters).
+
+Renamed "struct option" to "struct vimoption" to avoid name clash with GNU
+getopt().
+
+":abclear" didn't work (but ":iabclear" and ":cabclear" did work).
+
+When 'nowrap' used, screen wasn't always updated correctly.
+
+"vim -c split file" displayed extra lines.
+
+After starting the GUI, searched the termcap for a "gui" term.
+
+When 'hls' used, search for "^$" caused a hang.
+When 'hls' was set, an error in the last regexp caused trouble.
+
+Unix: Only output an extra <EOL> on exit when outputted something in the
+alternate screen, or when there is a message that needs to be cleared.
+
+"/a\{" did strange things, depending on previous search.
+
+"c}" only redrew one line (with -u NONE).
+
+For mappings, CTRL-META-A was shown as <M-^A> instead of <MC-A>, while :map
+only accepts <MC-A>. Now <M-C-A> is shown.
+
+Unix: When using full path name in a tags file, which contains a link, and
+'hidden' set and jumping to a tag in the current file, would get bogus
+ATTENTION message. Solved by always expanding file names, even when starting
+with '/'.
+
+'hlsearch' highlighting of special characters (e.g., a TAB) didn't highlight
+the whole thing.
+
+"r<CR>" didn't work correctly on the last char of a line.
+
+sometimes a window resize or other signal caused an endless loop, involving
+set_winsize().
+
+"vim -r" didn't work, it would just hang (using tgetent() while 'term' is
+empty).
+
+"gk" while 'nowrap' set moved two lines up.
+
+When windows are split, a message that causes a scroll-up messed up one of the
+windows, which required a CTRL-L to be typed.
+
+Possible endless loop when using shell command in the GUI.
+
+Menus defined in the .vimrc were removed when GUI started.
+
+Crash when pasting with the mouse in insert mode.
+
+Crash whith ":unmenu *" in .gvimrc for Athena.
+
+"5>>" shifted 5 lines 5 times, instead of 1 time.
+
+CTRL-C when getting a prompt in ":global" didn't interrupt.
+
+When 'so' is non-zero, and moving the scrollbar completely to the bottom,
+there was a lot of flashing.
+
+GUI: Scrollbar ident must be long for DEC Alpha.
+
+Some functions called vim_regcomp() without setting reg_magic, which could
+lead to unpredictable magicness.
+
+Crash when clicking around the status line, could get a selection with a
+backwards range.
+
+When deleting more than one line characterwise, the last character wasn't
+deleted.
+
+GUI: Status line could be overwritten when moving the scrollbar quickly (or
+when 'wd' is non-zero).
+
+An ESC at the end of a ":normal" command caused a wait for a terminal code to
+finish. Now, a terminal code is not recognized when its start comes from a
+mapping or ":normal" command.
+
+Included patches from Robert Webb for GUI. Layout of the windows is now done
+inside Vim, instead of letting the layout manager do this. Makes Vim work
+with Lesstif!
+
+UMR warning in set_expand_context().
+
+Memory leak: b_winlnum list was never freed.
+
+Removed TIOCLSET/TIOCLGET code from os_unix.c. Was changing some of the
+terminal settings, and looked like it wasn't doing anything good. (suggested
+by Juergen Weigert).
+
+Ruler overwrote "is a directory" message. When starting up, and 'cmdheight'
+set to > 1, first message could still be in the last line.
+
+Removed prototype for putenv() from proto.h, it's already in osdef2.h.in.
+
+In replace mode, when moving the cursor and then backspacing, wrong characters
+were inserted.
+
+Win32 GUI was checking for a CTRL-C too often, making it slow.
+
+Removed mappings for MS-DOS that were already covered by commands.
+
+When visually selecting all lines in a file, cursor at last line, then "J".
+Gave ml_get errors. Was a problem with scrolling down during redrawing.
+
+When doing a linewise operator, and then an operator with a mouse click, it
+was also linewise, instead of characterwise.
+
+When 'list' is set, the column of the ruler was wrong.
+
+Spurious error message for "/\(b\+\)*".
+
+When visually selected many lines, message from ":w file" disappeared when
+redrawing the screen.
+
+":set <M-b>=^[b", then insert "^[b", waited for another character. And then
+inserted "<M-b>" instead of the real <M-b> character. Was trying to insert
+K_SPECIAL x NUL.
+
+CTRL-W ] didn't use count to set window height.
+
+GUI: "-font" command-line argument didn't override 'guifont' setting from
+.gvimrc. (Acevedo)
+
+GUI: clipboard wasn't used for "*y". And some more Win32/X11 differences
+fixed for the clipboard (Webb).
+
+Jumping from one help file to another help file, with 'compatible' set,
+removed the 'help' flag from the buffer.
+
+File-writable bit could be reset when using ":w!" for a readonly file.
+
+There was a wait for CTRL-O n in Insert mode, because the search pattern was
+shown.
+Reduced wait, to allow reading a message, from 10 to 3 seconds. It seemed
+nothing was happening.
+
+":recover" found same swap file twice.
+
+GUI: "*yy only worked the second time (when pasting to an xterm)."
+
+DJGPP version (dos32): The system flags were cleared.
+
+Dos32 version: Underscores were sometimes replaced with y-umlaut (Levin).
+
+Version 4.1 of ncurses can't handle tputs("", ..). Avoid calling tputs() with
+an empty string.
+
+<S-Tab> in the command-line worked like CTRL-P when no completion started yet.
+Now it does completion, last match first.
+
+Unix: Could get annoying "can't write viminfo" message after doing "su". Now
+the viminfo file is overwritten, and the user set back to the original one.
+
+":set term=builtin_gui" started the GUI in a wrong way. Now it's not
+allowed anymore. But "vim -T gui" does start the GUI correctly now.
+
+GUI: Triple click after a line only put last char in selection, when it is a
+single character word.
+
+When the window is bigger than the screen, the scrolling up of messages was
+wrong (e.g. ":vers", ":hi"). Also when the bottom part of the window was
+obscured by another window.
+
+When using a wrong option only an error message is printed, to avoid that the
+usage information makes it scroll off the screen.
+
+When exiting because of not being able to read from stdin, didn't preserve the
+swap files properly.
+
+Visual selecting all chars in more than one line, then hit "x" didn't leave an
+empty line. For one line it did leave an empty line.
+
+Message for which autocommand is executing messed up file write message (for
+FileWritePost event).
+
+"vim -h" included "-U" even when GUI is not available, and "-l" when lisp is
+not available.
+
+Crash for ":he <C-A>" (command-line longer than screen).
+
+":s/this/that/gc", type "y" two times, then undo, did reset the modified
+option, even though the file is still modified.
+
+Empty lines in a tags file caused a ":tag" to be aborted.
+
+When hitting 'q' at the more prompt for ":menu", still scrolled a few lines.
+
+In an xterm that uses the bold trick a single row of characters could remain
+after an erased bold character. Now erase one extra char after the bold char,
+like for the GUI.
+
+":pop!" didn't work.
+
+When the reading a buffer was interrupted, ":w" should not be able to
+overwrite the file, ":w!" is required.
+
+":cf%" caused a crash.
+
+":gui longfilename", when forking is enabled, could leave part of the
+longfilename at the shell prompt.
+
+==============================================================================
+VERSION 5.1 *version-5.1*
+
+Improvements made between version 5.0 and 5.1.
+
+This was mostly a bug-fix release, not many new features.
+
+
+Changed *changed-5.1*
+-------
+
+The expand() function now separates file names with <NL> instead of a space.
+This avoids problems for file names with embedded spaces. To get the old
+result, use substitute(expand(foo), "\n", " ", "g").
+
+For Insert-expanding dictionaries allow a backslash to be used for
+wildchars. Allows expanding "ze\kra", when 'isk' includes a backslash.
+
+New icon for the Win32 GUI.
+
+":tag", ":tselect" etc. only use the argument as a regexp when it starts
+with '/'. Avoids that ":tag xx~" gives an error message: "No previous sub.
+regexp". Also, when the :tag argument contained wildcard characters, it was
+not Vi compatible.
+When using '/', the argument is taken literally too, with a higher priority,
+so it's found before wildcard matches.
+Only when the '/' is used are matches with different case found, even though
+'ignorecase' isn't set.
+Changed "g^]" to only do ":tselect" when there is more than on matching tag.
+
+Changed some of the default colors, because they were not very readable on a
+dark background.
+
+A character offset to a search pattern can move the cursor to the next or
+previous line. Also fixes that "/pattern/e+2" got stuck on "pattern" at the
+end of a line.
+
+Double-clicks in the status line do no longer start Visual mode. Dragging a
+status line no longer stops Visual mode.
+
+Perl interface: Buffers() and Windows() now use more logical arguments, like
+they are used in the rest of Vim (Moore).
+
+Init '" mark to the first character of the first line. Makes it possible to
+use '" in an autocommand without getting an error message.
+
+
+Added *added-5.1*
+-----
+
+"shell_error" internal variable: result of last shell command.
+
+":echohl" command: Set highlighting for ":echo".
+
+'S' flag in 'highlight' and StatusLineNC highlight group: highlighting for
+status line of not-current window. Default is to use bold for current
+window.
+
+Added buffer_name() and buffer_number() functions (Aaron).
+Added flags argument "g" to substitute() function (Aaron).
+Added winheight() function.
+
+Win32: When an external command starts with "start ", no console is opened
+for it (Aaron).
+
+Win32 console: Use termcap codes for bold/reverse based on the current
+console attributes.
+
+Configure check for "strip". (Napier)
+
+CTRL-R CTRL-R x in Insert mode: Insert the contents of a register literally,
+instead of as typed.
+
+Made a few "No match" error messages more informative by adding the pattern
+that didn't match.
+
+"make install" now also copies the macro files.
+
+tools/tcltags, a shell script to generate a tags file from a TCL file.
+
+"--with-tlib" setting for configure. Easy way to use termlib: "./configure
+--with-tlib=termlib".
+
+'u' flag in 'cino' for setting the indent for contained () parts.
+
+When Win32 OLE version can't load the registered type library, ask the user
+if he wants to register Vim now. (Erhardt)
+Win32 with OLE: When registered automatically, exit Vim.
+Included VisVim 1.1b, with a few enhancements and the new icon (Heiko
+Erhardt).
+
+Added patch from Vince Negri for Win32s support. Needs to be compiled with
+VC 4.1!
+
+Perl interface: Added $curbuf. Rationalized Buffers() and Windows().
+(Moore) Added "group" argument to Msg().
+
+Included Perl files in DOS source archive. Changed Makefile.bor and
+Makefile.w32 to support building a Win32 version with Perl included.
+
+Included new Makefile.w32 from Ken Scott. Now it's able to make all Win32
+versions, including OLE, Perl and Python.
+
+Added CTRL-W g ] and CTRL-W g ^]: split window and do g] or g^].
+
+Added "g]" to always do ":tselect" for the ident under the cursor.
+Added ":tjump" and ":stjump" commands.
+Improved listing of ":tselect" when tag names are a bit long.
+
+Included patches for the Macintosh version. Also for Python interface.
+(St-Amant)
+
+":buf foo" now also restores cursor column, when the buffer was used before.
+
+Adjusted the Makefile for different final destinations for the syntax files
+and scripts (for Debian Linux).
+
+Amiga: $VIM can be used everywhere. When $VIM is not defined, "VIM:" is
+used. This fixes that "VIM:" had to be assigned for the help files, and
+$VIM set for the syntax files. Now either of these work.
+
+Some xterms send vt100 compatible function keys F1-F4. Since it's not
+possible to detect this, recognize both type of keys and translate them to
+<F1> - <F4>.
+
+Added "VimEnter" autocommand. Executed after loading all the startup stuff.
+
+BeOS version now also runs on Intel CPUs (Seibert).
+
+
+Fixed *fixed-5.1*
+-----
+
+":ts" changed position in the tag stack when cancelled with <CR>.
+":ts" changed the cursor position for CTRL-T when cancelled with <CR>.
+":tn" would always jump to the second match. Was using the wrong entry in
+the tag stack.
+Doing "tag foo", then ":tselect", overwrote the original cursor position in
+the tag stack.
+
+"make install" changed the vim.1 manpage in a wrong way, causing "doc/doc"
+to appear for the documentation files.
+
+When compiled with MAX_FEAT, xterm mouse handling failed. Was caused by DEC
+mouse handling interfering.
+
+Was leaking memory when using selection in X11.
+
+CTRL-D halfway a command-line left some characters behind the first line(s)
+of the listing.
+
+When expanding directories for ":set path=", put two extra backslashes
+before a space in a directory name.
+
+When 'lisp' set, first line of a function would be indented. Now its indent
+is set to zero. And use the indent of the first previous line that is at
+the same () level. Added test33.
+
+"so<Esc>u" in an empty file didn't work.
+
+DOS: "seek error in swap file write" errors, when using DOS 6.2 share.exe,
+because the swap file was made hidden. It's no longer hidden.
+
+":global" command would sometimes not execute on a matching line. Happened
+when a data block is full in ml_replace().
+
+For AIX use a tgetent buffer of 2048 bytes, instead of 1024.
+
+Win32 gvim now only sets the console size for external commands to 25x80
+on Windows 95, not on NT.
+
+Win32 console: Dead key could cause a crash, because of a missing "WINAPI"
+(Deshpande).
+
+The right mouse button started Visual mode, even when 'mouse' is empty, and
+in the command-line, a left click moved the cursor when 'mouse' is empty.
+In Visual mode, 'n' in 'mouse' would be used instead of 'v'.
+
+A blinking cursor or focus change cleared a non-Visual selection.
+
+CTRL-Home and CTRL-End didn't work for MS-DOS versions.
+
+Could include NUL in 'iskeyword', causing a crash when doing insert mode
+completion.
+
+Use _dos_commit() to flush the swap file to disk for MSDOS 16 bit version.
+
+In mappings, CTRL-H was replaced by the backspace key code. This caused
+problems when it was used as text, e.g. ":map _U :%s/.^H//g<CR>".
+
+":set t_Co=0" was not handled like a normal term. Now it's translated into
+":set t_Co=", which works.
+
+For ":syntax keyword" the "transparent" option did work, although not
+mentioned in the help. But synID() returned wrong name.
+
+"gqG" in a file with one-word-per-line (e.g. a dictionary) was very slow and
+not interruptable.
+
+"gq" operator inserted screen lines in the wrong situation. Now screen
+lines are inserted or deleted when this speeds up displaying.
+
+cindent was wrong when an "if" contained "((".
+
+'r' flag in 'viminfo' was not used for '%'. Could get files in the buffer
+list from removable media.
+
+Win32 GUI with OLE: if_ole_vc.mak could not be converted into a project.
+Hand-edited to fix this...
+
+With 'nosol' set, doing "$kdw" below an empty line positioned the cursor at
+the end of the line.
+
+Dos32 version changed "\dir\file" into "/dir/file", to work around a DJGPP
+bug. That bug appears to have been fixed, therefore this translation has
+been removed.
+
+"/^*" didn't work (find '*' in first column).
+
+"<afile>" was not always set for autocommands. E.g., for ":au BufEnter *
+let &tags = expand("<afile>:p:h") . "/tags".
+
+In an xterm, the window may be a child of the outer xterm window. Use the
+parent window when getting the title and icon names. (Smith)
+
+When starting with "gvim -bg black -fg white", the value of 'background' is
+only set after reading the .gvimrc file. This causes a ":syntax on" to use
+the wrong colors. Now allow using ":gui" to open the GUI window and set the
+colors. Previously ":gui" in a gvimrc crashed Vim.
+
+tempname() returned the same name all the time, unless the file was actually
+created. Now there are at least 26 different names.
+
+File name used for <afile> was sometimes full path, sometimes file name
+relative to current directory.
+
+When 'background' was set after the GUI window was opened, it could change
+colors that were set by the user in the .gvimrc file. Now it only changes
+colors that have not been set by the user.
+
+Ignore special characters after a CSI in the GUI version. These could be
+interpreted as special characters in a wrong way. (St-Amant)
+
+Memory leak in farsi code, when using search or ":s" command.
+Farsi string reversing for a mapping was only done for new mappings. Now it
+also works for replacing a mapping.
+
+Crash in Win32 when using a file name longer than _MAX_PATH. (Aaron)
+
+When BufDelete autocommands were executed, some things for the buffer were
+already deleted (esp. Perl stuff).
+
+Perl interface: Buffer specific items were deleted too soon; fixes "screen
+no longer exists" messages. (Moore)
+
+The Perl functions didn't set the 'modified' flag.
+
+link.sh did not return an error on exit, which may cause Vim to start
+installing, even though there is no executable to install. (Riehm)
+
+Vi incompatibility: In Vi "." redoes the "y" command. Added the 'y' flag to
+'cpoptions'. Only for 'compatible' mode.
+
+":echohl" defined a new group, when the argument was not an existing group.
+
+"syn on" and ":syn off" could move the cursor, if there is a hidden buffer
+that is shorter that the current cursor position.
+
+The " mark was not set when doing ":b file".
+
+When a "nextgroup" is used with "skipwhite" in syntax highlighting, space at
+the end of the line made the nextgroup also be found in the next line.
+
+":he g<CTRL-D>", then ":" and backspace to the start didn't redraw.
+
+X11 GUI: "gvim -rv" reversed the colors twice on Sun. Now Vim checks if the
+result is really reverse video (background darker than foreground).
+
+"cat link.sh | vim -" didn't set syntax highlighting.
+
+Win32: Expanding "file.sw?" matched ".file.swp". This is an error of
+FindnextFile() that we need to work around. (Kilgore)
+
+"gqgq" gave an "Invalid lnum" error on the last line.
+Formatting with "gq" didn't format the first line after a change of comment
+leader.
+
+There was no check for out-of-memory in win_alloc().
+
+"vim -h" didn't mention "-register" and "-unregister" for the OLE version.
+
+Could not increase 'cmdheight' when the last window is only one line. Now
+other windows are also made smaller, when necessary.
+
+Added a few {} to avoid "suggest braces around" warnings from gcc 2.8.x.
+Changed return type of main() from void to int. (Nam)
+
+Using '~' twice in a substitute pattern caused a crash.
+
+"syn on" and ":syn off" could scroll the window, if there is a hidden buffer
+that is shorter that the current cursor position.
+
+":if 0 | if 1 | endif | endif" didn't work. Same for ":while" and "elseif".
+
+With two windows on modified files, with 'autowrite' set, cursor in second
+window, ":qa" gave a warning for the file in the first window, but then
+auto-wrote the file in the second window. (Webb)
+
+Win32 GUI scrollbar could only handle 32767 lines. Also makes the
+intellimouse wheel use the configurable number of scrolls. (Robinson)
+
+When using 'patchmode', and the backup file is on another partition, the file
+copying messed up the write-file message.
+
+GUI X11: Alt-Backspace and Alt-Delete didn't work.
+
+"`0" could put the cursor after the last character in the line, causing
+trouble for other commands, like "i".
+
+When completing tags in insert mode with ^X^], some matches were skipped,
+because the compare with other tags was wrong. E.g., when "mnuFileSave" was
+already there, "mnuFile" would be skipped. (Negri)
+
+When scrolling up/down, a syntax item with "keepend" didn't work properly.
+Now the flags are also stored for the syntax state a the start of each line.
+
+When 'ic' was changed while 'hlsearch' is on, there was no redraw to show the
+effect.
+
+Win32 GUI: Don't display "No write since last chance" in a message box, but in
+the Vim window.
+
+==============================================================================
+VERSION 5.2 *version-5.2*
+
+Improvements made between version 5.1 and 5.2.
+
+
+Long lines editable *long-lines*
+-------------------
+
+A single long line that doesn't fit in the window doesn't show a line of @@@
+anymore. Redrawing starts at a character further on in the line, such that
+the text around the cursor can be seen. This makes it possible to edit these
+long lines when wrapping is on.
+
+
+File browser added *file-browser-5.2*
+------------------
+
+The Win32, Athena and Motif GUI bring up a file requester if the user asks to
+":browse" for the ":e", ":w", ":r", ":so", ":redirect" and
+":mkexrc/vimrc/vsess" commands. ::browse e /foo/bar" opens the requester in
+the /foo/bar directory, so you can have nice mapping rhs's like ":browse so
+$vim/macros". If no initial dir specified for ":browse e", can be compiled to
+either begin in the current directory, or that of the current buffer. (Negri
+and Kahn)
+Added the 'browsedir' option, with value "current", "last" or "buffer". Tells
+wether a browse dialog starts in last used dir, dir of current buffer, or
+current dir. ":browse w" is unaffected.
+The default menus have been changed to use the ":browse" command.
+
+
+Dialogs added *dialogs-added*
+-------------
+
+Added the ":confirm" command. Works on ":e", ":q", ":w", ":cl". Win32,
+Athena and Motif GUI uses a window-dialog. All other platforms can use
+prompt in command-line. ":confirm qa" offers a choice to save all modified
+files.
+
+confirm() function: allows user access to the confirm engine.
+
+Added 'v' flag to 'guioptions'. When included, a vertical button layout is
+always used for the Win32 GUI dialog. Otherwise, a horizontal layout is
+preferred.
+
+Win32 GUI: ":promptfind" and ":promptrepl" pop up a dialog to find/replace.
+To be used from a menu entry. (Negri)
+
+
+Popup menu added *popup-menu-added*
+----------------
+
+When the 'mousemodel' option is set to "popup", the right mouse button
+displays the top level menu headed with "PopUp" as pop-up context menu. The
+"PopUp" menu is not displayed in the normal menu bar. This currently only
+works for Win32 and Athena GUI.
+
+
+Select mode added *new-Select-mode*
+-----------------
+
+A new mode has been added: "Select mode". It is like Visual mode, but typing
+a printable character replaces the selection.
+- CTRL-G can be used to toggle between Visual mode and Select mode.
+- CTRL-O can be used to switch from Select mode to Visual mode for one command.
+- Added 'selectmode' option: tells when to start Select mode instead of Visual
+ mode.
+- Added 'mousemodel' option: Change use of mouse buttons.
+- Added 'keymodel' option: tells to use shifted special keys to start a
+ Visual or Select mode selection.
+- Added ":behave". Can be used to quickly set 'selectmode', 'mousemodel'
+ and 'keymodel' for MS-Windows and xterm behavior.
+- The xterm-like selection is now called modeless selection.
+- Visual mode mappings and menus are used in Select mode. They automatically
+ switch to Visual mode first. Afterwards, reselect the area, unless it was
+ deleted. The "gV" command can be used in a mapping to skip the reselection.
+- Added the "gh", "gH" and "g^H" commands: start Select (highlight) mode.
+- Backspace in Select mode deletes the selected area.
+
+"mswin.vim" script. Sets behavior mostly like MS-Windows.
+
+
+Session files added *new-session-files*
+-------------------
+
+":mks[ession]" acts like "mkvimrc", but also writes the full filenames of the
+currently loaded buffers and current directory, so that :so'ing the file
+re-loads those files and cd's to that directory. Also stores and restores
+windows. File names are made relative to session file.
+The 'sessionoptions' option sets behavior of ":mksession". (Negri)
+
+
+User defined functions and commands *new-user-defined*
+-----------------------------------
+
+Added user defined functions. Defined with ":function" until ":endfunction".
+Called with "Func()". Allows the use of a variable number of arguments.
+Included support for local variables "l:name". Return a value with ":return".
+See |:function|.
+Call a function with ":call". When using a range, the function is called for
+each line in the range. |:call|
+"macros/justify.vim" is an example of using user defined functions.
+User functions do not change the last used search pattern or the command to be
+redone with ".".
+'maxfuncdepth' option. Restricts the depth of function calls. Avoids trouble
+(crash because of out-of-memory) when a function uses endless recursion.
+
+User definable Ex commands: ":command", ":delcommand" and ":comclear".
+(Moore) See |user-commands|.
+
+
+New interfaces *interfaces-5.2*
+--------------
+
+Tcl interface. (Wilken) See |tcl|.
+Uses the ":tcl", ":tcldo" and "tclfile" commands.
+
+Cscope support. (Kahn) (Sekera) See |cscope|.
+Uses the ":cscope" and ":cstag" commands. Uses the options 'cscopeprg',
+'cscopetag', 'cscopetagorder' and 'cscopeverbose'.
+
+
+New ports *ports-5.2*
+---------
+
+Amiga GUI port. (Nielsen) Not tested much yet!
+
+RISC OS version. (Thomas Leonard) See |riscos|.
+This version can run either with a GUI or in text mode, depending upon where
+it is invoked.
+Deleted the "os_archie" files, they were not working anyway.
+
+
+Multi-byte support *new-multi-byte*
+------------------
+
+MultiByte support for Win32 GUI. (Baek)
+The 'fileencoding' option decides how the text in the file is encoded.
+":ascii" works for multi-byte characters. Multi-byte characters work on
+Windows 95, even when using the US version. (Aaron)
+Needs to be enabled in feature.h.
+This has not been tested much yet!
+
+
+New functions *new-functions-5.2*
+-------------
+
+|browse()| puts up a file requester when available. (Negri)
+|escape()| escapes characters in a string with a backslash.
+|fnamemodify()| modifies a file name.
+|input()| asks the user to enter a line. (Aaron) There is a separate
+ history for lines typed for the input() function.
+|argc()|
+|argv()| can be used to access the argument list.
+|winbufnr()| buffer number of a window. (Aaron)
+|winnr()| window number. (Aaron)
+|matchstr()| Return matched string.
+|setline()| Set a line to a string value.
+
+
+New options *new-options-5.2*
+-----------
+
+'allowrevins' Enable the CTRL-_ command in Insert and Command-line mode.
+'browsedir' Tells in which directory a browse dialog starts.
+'confirm' when set, :q :w and :e commands always act as if ":confirm"
+ is used. (Negri)
+'cscopeprg'
+'cscopetag'
+'cscopetagorder'
+'cscopeverbose' Set the |cscope| behavior.
+'filetype' RISC-OS specific type of file.
+'grepformat'
+'grepprg' For the |:grep| command.
+'keymodel' Tells to use shifted special keys to start a Visual or Select
+ mode selection.
+'listchars' Set character to show in 'list' mode for end-of-line, tabs and
+ trailing spaces. (partly by Smith) Also sets character to
+ display if a line doesn't fit when 'nowrap' is set.
+'matchpairs' Allows matching '<' with '>', and other single character
+ pairs.
+'mousefocus' Window focus follows mouse (partly by Terhaar). Changing the
+ focus with a keyboard command moves the pointer to that
+ window. Also move the pointer when changing the window layout
+ (split window, change window height, etc.).
+'mousemodel' Change use of mouse buttons.
+'selection' When set to "inclusive" or "exclusive", the cursor can go one
+ character past the end of the line in Visual or Select mode.
+ When set to "old" the old behavior is used. When
+ "inclusive", the character under the cursor is included in the
+ operation. When using "exclusive", the new "ve" entry of
+ 'guicursor' is used. The default is a vertical bar.
+'selectmode' Tells when to start Select mode instead of Visual mode.
+'sessionoptions' Sets behavior of ":mksession". (Negri)
+'showfulltag' When completing a tag in Insert mode, show the tag search
+ pattern (tidied up) as a choice as well (if there is one).
+'swapfile' Whether to use a swap file for a buffer.
+'syntax' When it is set, the syntax by that name is loaded. Allows for
+ setting a specific syntax from a modeline.
+'ttymouse' Allows using xterm mouse codes for terminals which name
+ doesn't start with "xterm".
+'wildignore' List of patterns for files that should not be completed at
+ all.
+'wildmode' Can be used to set the type of expansion for 'wildchar'.
+ Replaces the CTRL-T command for command line completion.
+ Don't beep when listing all matches.
+'winaltkeys' Win32 and Motif GUI. When "yes", ALT keys are handled
+ entirely by the window system. When "no", ALT keys are never
+ used by the window system. When "menu" it depends on whether
+ a key is a menu shortcut.
+'winminheight' Minimal height for each window. Default is 1. Set to 0 if
+ you want zero-line windows. Scrollbar is removed for
+ zero-height windows. (Negri)
+
+
+
+New Ex commands *new-ex-commands-5.2*
+---------------
+
+|:badd| Add file name to buffer list without side effects. (Negri)
+|:behave| Quickly set MS-Windows or xterm behavior.
+|:browse| Use file selection dialog.
+|:call| Call a function, optionally with a range.
+|:cnewer|
+|:colder| To access a stack of quickfix error lists.
+|:comclear| Clear all user-defined commands.
+|:command| Define a user command.
+|:continue| Go back to ":while".
+|:confirm| Ask confirmation if something unexpected happens.
+|:cscope| Execute cscope command.
+|:cstag| Use cscope to jump to a tag.
+|:delcommand| Delete a user-defined command.
+|:delfunction| Delete a user-defined function.
+|:endfunction| End of user-defined function.
+|:function| Define a user function.
+|:grep| Works similar to ":make". (Negri)
+|:mksession| Create a session file.
+|:nohlsearch| Stop 'hlsearch' highlighting for a moment.
+|:Print| This is Vi compatible. Does the same as ":print".
+|:promptfind| Search dialog (Win32 GUI).
+|:promptrepl| Search/replace dialog (Win32 GUI).
+|:return| Return from a user-defined function.
+|:simalt| Win32 GUI: Simulate alt-key pressed. (Negri)
+|:smagic| Like ":substitute", but always use 'magic'.
+|:snomagic| Like ":substitute", but always use 'nomagic'.
+|:tcl| Execute TCL command.
+|:tcldo| Execute TCL command for a range of lines.
+|:tclfile| Execute a TCL script file.
+|:tearoff| Tear-off a menu (Win32 GUI).
+|:tmenu|
+|:tunmenu| Win32 GUI: menu tooltips. (Negri)
+|:star| :* Execute a register.
+
+
+Changed *changed-5.2*
+-------
+
+Renamed functions:
+ buffer_exists() -> bufexists()
+ buffer_name() -> bufname()
+ buffer_number() -> bufnr()
+ file_readable() -> filereadable()
+ highlight_exists() -> hlexists()
+ highlightID() -> hlID()
+ last_buffer_nr() -> bufnr("$")
+The old ones are still there, for backwards compatibility.
+
+The CTRL-_ command in Insert and Command-line mode is only available when the
+new 'allowrevins' option is set. Avoids that people who want to type SHIFT-_
+accidentally enter reverse Insert mode, and don't know how to get out.
+
+When a file name path in ":tselect" listing is too long, remove a part in the
+middle and put "..." there.
+
+Win32 GUI: Made font selector appear inside Vim window, not just any odd
+place. (Negri)
+
+":bn" skips help buffers, unless currently in a help buffer. (Negri)
+
+When there is a status line and only one window, don't show '^' in the status
+line of the current window.
+
+":*" used to be used for "'<,'>", the Visual area. But in Vi it's used as an
+alternative for ":@". When 'cpoptions' includes '*' this is Vi compatible.
+
+When 'insertmode' is set, using CTRL-O to execute a mapping will work like
+'insertmode' was not set. This allows "normal" mappings to be used even when
+'insertmode' is set.
+
+When 'mouse' was set already (e.g., in the .vimrc file), don't automatically
+set 'mouse' when the GUI starts.
+
+Removed the 'N', 'I' and 'A' flags from the 'mouse' option.
+
+Renamed "toggle option" to "boolean option". Some people thought that ":set
+xyz" would toggle 'xyz' on/off each time.
+
+The internal variable "shell_error" contains the error code from the shell,
+instead of just 0 or 1.
+
+When inserting or replacing, typing CTRL-V CTRL-<CR> used to insert "<C-CR>".
+That is not very useful. Now the CTRL key is ignored and a <CR> is inserted.
+Same for all other "normal" keys with modifiers. Mapping these modified key
+combinations is still possible.
+In Insert mode, <C-CR> and <S-Space> can be inserted by using CTRL-K and then
+the special character.
+
+Moved "quotes" file to doc/quotes.txt, and "todo" file to doc/todo.txt. They
+are now installed like other documentation files.
+
+winheight() function returns -1 for a non-existing window. It used to be
+zero, but that is a valid height now.
+
+The default for 'selection' is "inclusive", which makes a difference when
+using "$" or the mouse to move the cursor in Visual mode.
+
+":q!" does not exit when there are changed buffers which are hidden. Use
+":qa!" to exit anyway.
+
+Disabled the Perl/Python/Tcl interfaces by default. Not many people use them
+and they make the executable a lot bigger. The internal scripting language is
+now powerful enough for most tasks.
+
+The strings from the 'titlestring' and 'iconstring' options are used
+untranslated for the Window title and icon. This allows for including a <CR>.
+Previously a <CR> would be shown as "^M" (two characters).
+
+When a mapping is started in Visual or Select mode which was started from
+Insert mode (the mode shows "(insert) Visual"), don't return to Insert mode
+until the mapping has ended. Makes it possible to use a mapping in Visual
+mode that also works when the Visual mode was started from Select mode.
+
+Menus in $VIMRUNTIME/menu.vim no longer overrule existing menus. This helps
+when defining menus in the .vimrc file, or when sourcing mswin.vim.
+
+Unix: Use /var/tmp for .swp files, if it exists. Files there survive a
+reboot (at least on Linux).
+
+
+Added *added-5.2*
+-----
+
+--with-motif-lib configure argument. Allows for using a static Motif library.
+
+Support for mapping numeric keypad +,-,*,/ keys. (Negri)
+When not mapped, they produce the normal character.
+
+Win32 GUI: When directory dropped on Gvim, cd there and edit new buffer.
+(Negri)
+
+Win32 GUI: Made CTRL-Break work as interrupt, so that CTRL-C can be
+used for mappings.
+
+In the output of ":map", highlight the "*" to make clear it's not part of the
+rhs. (Roemer)
+
+When showing the Visual area, the cursor is not switched off, so that it can
+be located. The Visual area is now highlighted with a grey background in the
+GUI. This makes the cursor visible when it's also reversed.
+
+Win32: When started with single full pathname (e.g. via double-clicked file),
+cd to that file's directory. (Negri)
+
+Win32 GUI: Tear-off menus, with ":tearoff <menu-name>" command. (Negri)
+'t' option to 'guioptions': Add tearoff menu items for Win32 GUI and Motif.
+It's included by default.
+Win32 GUI: tearoff menu with submenus is indicated with a ">>". (Negri)
+
+Added ^Kaa and ^KAA digraphs.
+Added "euro" symbol to digraph.c. (Corry)
+
+Support for Motif menu shortcut keys, using '&' like MS-Windows (Ollis).
+Other GUIs ignore '&' in a menu name.
+
+DJGPP: Faster screen updating (John Lange).
+
+Clustering of syntax groups ":syntax cluster" (Bigham).
+Including syntax files: ":syntax include" (Bigham).
+
+Keep column when switching buffers, when 'nosol' is set (Radics).
+
+Number function for Perl interface.
+
+Support for Intellimouse in Athena GUI. (Jensen)
+
+":sleep" also accepts an argument in milliseconds, when "m" is used.
+
+Added 'p' flag in 'guioptions': Install callbacks for enter/leave window
+events. Makes cursor blinking work for Terhaar, breaks it for me.
+
+"--help" and "--version" command-line arguments.
+
+Non-text in ":list" output is highlighted with NonText.
+
+Added text objects: "i(" and "i)" as synonym for "ib". "i{" and "i}" as
+synonym for "iB". New: "i<" and "i>", to select <thing>. All this also for
+"a" objects.
+
+'O' flag in 'shortmess': message for reading a file overwrites any previous
+message. (Negri)
+
+Win32 GUI: 'T' flag in 'guioptions': switch toolbar on/off.
+Included a list with self-made toolbar bitmaps. (Negri)
+
+Added menu priority for sub-menus. Implemented for Win32 and Motif GUI.
+Display menu priority with ":menu" command.
+Default and Syntax menus now include priority for items. Allows inserting
+menu items in between the default ones.
+
+When the 'number' option is on, highlight line numbers with the LineNr group.
+
+"Ignore" highlight group: Text highlighted with this is made blank. It is
+used to hide special characters in the help text.
+
+Included Exuberant Ctags version 2.3, with C++ support, Java support and
+recurse into directories. (Hiebert)
+
+When a tags file is not sorted, and this is detected (in a simplistic way), an
+error message is given.
+
+":unlet" accepts a "!", to ignore non-existing variables, and accepts more
+than one argument. (Roemer)
+Completion of variable names for ":unlet". (Roemer)
+
+When there is an error in a function which is called by another function, show
+the call stack in the error message.
+
+New file name modifiers:
+":.": reduce file name to be relative to current dir.
+":~": reduce file name to be relative to home dir.
+":s?pat?sub?": substitute "pat" with "sub" once.
+":gs?pat?sub?": substitute "pat" with "sub" globally.
+
+New configure arguments: --enable-min-features and --enable-max-features.
+Easy way to switch to minimum or maximum features.
+
+New compile-time feature: modify_fname. For file name modifiers, e.g,
+"%:p:h". Can be disabled to save some code (16 bit DOS).
+
+When using whole-line completion in Insert mode, and 'cindent' is set, indent
+the line properly.
+
+MSDOS and Win32 console: 'guicursor' sets cursor thickness. (Negri)
+
+Included new set of Farsi fonts. (Shiran)
+
+Accelerator text now also works in Motif. All menus can be defined with & for
+mnemonic and TAB for accelerator text. They are ignored on systems that don't
+support them.
+When removing or replacing a menu, compare the menu name only up to the <Tab>
+before the mnemonic.
+
+'i' and 'I' flags after ":substitute": ignore case or not.
+
+"make install" complains if the runtime files are missing.
+
+Unix: When finding an existing swap file that can't be opened, mention the
+owner of the file in the ATTENTION message.
+
+The 'i', 't' and 'k' options in 'complete' now also print the place where they
+are looking for matches. (Acevedo)
+
+"gJ" command: Join lines without inserting a space.
+
+Setting 'keywordprg' to "man -s" is handled specifically. The "-s" is removed
+when no count given, the count is added otherwise. Configure checks if "man
+-s 2 read" works, and sets the default for 'keywordprg' accordingly.
+
+If you do a ":bd" and there is only one window open, Vim tries to move to a
+buffer of the same type (i.e. non-help to non-help, help to help), for
+consistent behavior to :bnext/:bprev. (Negri)
+
+Allow "<Nop>" to be used as the rhs of a mapping. ":map xx <Nop>", maps "xx"
+to nothing at all.
+
+In a ":menu" command, "<Tab>" can be used instead of a real tab, in the menu
+path. This makes it more easy to type, no backslash needed.
+
+POSIX compatible character classes for regexp patterns: [:alnum:], [:alpha:],
+[:blank:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:],
+[:space:], [:upper:] and [:xdigit:]. (Briscoe)
+
+regexp character classes (for fast syntax highlight matching):
+ digits: \d [0-9] \D not digit (Roemer)
+ hex: \x [0-9a-fA-F] \X not hex
+ octal: \o [0-7] \O not octal
+ word: \w [a-zA-Z0-9_] \W not word
+ head: \h [a-zA-Z_] \H not head
+ alphabetic: \a [a-zA-Z] \A not alphabetic
+ lowercase: \l [a-z] \L not lowercase
+ uppercase: \u [A-Z] \U not uppercase
+
+":set" now accepts "+=", |^=" and "-=": add or remove parts of a string
+option, add or subtract a number from a number option. A comma is
+automagically inserted or deleted for options that are a comma separated list.
+
+Filetype feature, for autocommands. Uses a file type instead of a pattern to
+match a file. Currently only used for RISC OS. (Leonard)
+
+In a pattern for an autocommand, environment variables can be used. They are
+expanded when the autocommand is defined.
+
+"BufFilePre" and "BufFilePost" autocommand evens: Before and after applying
+the ":file" command to change the name of a buffer.
+"VimLeavePre" autocommand event: before writing the .viminfo file.
+
+For autocommands argument: <abuf> is buffer number, like <afile>.
+
+Made syntax highlighting a bit faster when scrolling backwards, by keeping
+more syncing context.
+
+Win32 GUI: Made scrolling faster by avoiding a redraw when deleting or
+inserting screen lines.
+
+GUI: Made scrolling faster by not redrawing the scrollbar when the thumb moved
+less than a pixel.
+
+Included ":highlight" in bugreport.vim.
+
+Created install.exe program, for simplistic installation on DOS and
+MS-Windows.
+
+New register: '_', the black hole. When writing to it, nothing happens. When
+reading from it, it's always empty. Can be used to avoid a delete or change
+command to modify the registers, or reduce memory use for big changes.
+
+CTRL-V xff enters character by hex number. CTRL-V o123 enters character by
+octal number. (Aaron)
+
+Improved performance of syntax highlighting by skipping check for "keepend"
+when there isn't any.
+
+Moved the mode message ("-- INSERT --") to the last line of the screen. When
+'cmdheight' is more than one, messages will remain readable.
+
+When listing matching files, they are also sorted on 'suffixes', such that
+they are listed in the same order as CTRL-N retrieves them.
+
+synIDattr() takes a third argument (optionally), which tells for which
+terminal type to get the attributes for. This makes it possible to run
+2html.vim outside of gvim (using color names instead of #RRGGBB).
+
+Memory profiling, only for debugging. Prints at exit, and with "g^A" command.
+(Kahn)
+
+DOS: When using a file in the current drive, remove the drive name:
+"A:\dir\file" -> "\dir\file". This helps when moving a session file on a
+floppy from "A:\dir" to "B:\dir".
+
+Increased number of remembered jumps from 30 to 50 per window.
+
+Command to temporarily disable 'hls' highlighting until the next search:
+":nohlsearch".
+
+"gp" and "gP" commands: like "p" and "P", but leave the cursor just after the
+inserted text. Used for the CTRL-V command in MS-Windows mode.
+
+
+Fixed *fixed-5.2*
+-----
+
+Win32 GUI: Could draw text twice in one place, for fake-bold text. Removed
+this, Windows will handle the bold text anyway. (Negri)
+
+patch 5.1.1: Win32s GUI: pasting caused a crash (Negri)
+
+patch 5.1.2: When entering another window, where characters before the cursor
+have been deleted, could have a cursor beyond the end of the line.
+
+patch 5.1.3: Win32s GUI: Didn't wait for external command to finish. (Negri)
+
+patch 5.1.4: Makefile.w32 can now also be used to generate the OLE version
+(Scott).
+
+patch 5.1.5: Crashed when using syntax highlighting: cursor on a line that
+doesn't fit in the window, and splitting that line in two.
+
+patch 5.1.6: Visual highlighting bug: After ":set nowrap", go to end of line
+(so that the window scrolls horizontally), ":set wrap". Following Visual
+selection was wrong.
+
+patch 5.1.7: When 'tagbsearch' off, and 'ignorecase' off, still could do
+binary searching.
+
+patch 5.1.8: Win32 GUI: dragging the scrollbar didn't update the ruler.
+
+patch 5.1.9: Using ":gui" in .vimrc, caused xterm cursor to disappear.
+
+patch 5.1.10: A CTRL-N in Insert mode could cause a crash, when a buffer
+without a name exists.
+
+patch 5.1.11: "make test" didn't work in the shadow directory. Also adjusted
+"make shadow" for the links in the ctags directory.
+
+patch 5.1.12: "buf 123foo" used "123" as a count, instead as the start of a
+buffer name.
+
+patch 5.1.13: When completing file names on the command-line, reallocating the
+command-line may go wrong.
+
+patch 5.1.14: ":[nvci]unmenu" removed menu for all modes, when full menu patch
+specified.
+
+Graceful handling of NULLs in drag-dropped file list. Handle passing NULL to
+Fullname_save(). (Negri)
+
+Win32: ":!start" to invoke a program without opening a console, swapping
+screens, or waiting for completion in either console or gui version. e.g. you
+can type ":!start winfile". ALSO fixes "can't delete swapfile after spawning
+a shell" bug. (enhancement of Aaron patch) (Negri)
+
+Win32 GUI: Fix CTRL-X default keymapping to be more Windows-like. (Negri)
+
+Shorten filenames on startup. If in /foo/bar, entering "vim ../bar/bang.c"
+displays "bang.c" in status bar, not "/foo/bar/bang.c" (Negri)
+
+Win32 GUI: No copy to Windows clipboard when it's not desired.
+
+Win32s: Fix pasting from clipboard - made an assumption not valid under
+Win32s. (Negri)
+
+Win32 GUI: Speed up calls to gui_mch_draw_string() and cursor drawing
+functions. (Negri)
+
+Win32 GUI: Middle mouse button emulation now works in GUI! (Negri)
+
+Could skip messages when combining commands in one line, e.g.:
+":echo "hello" | write".
+
+Perl interpreter was disabled before executing VimLeave autocommands. Could
+not use ":perl" in them. (Aaron)
+
+Included patch for the Intellimouse (Aaron/Robinson).
+
+Could not set 'ls' to one, when last window has only one line. (Mitterand)
+
+Fixed a memory leak when removing menus.
+
+After ":only" the ruler could overwrite a message.
+
+Dos32: removed changing of __system_flags. It appears to work better when
+it's left at the default value.
+
+p_aleph was an int instead of along, caused trouble on systems where
+sizeof(int) != sizeof(long). (Schmidt)
+
+Fixed enum problems for Ultrix. (Seibert)
+
+Small redraw problem: "dd" on last line in file cleared wrong line.
+
+Didn't interpret "cmd | endif" when "cmd" starts with a range. E.g. "if 0 |
+.d | endif".
+
+Command "+|" on the last line of the file caused ml_get errors.
+
+Memory underrun in eval_vars(). (Aaron)
+
+Don't rename files in a difficult way, except on Windows 95 (was also done on
+Windows NT).
+
+Win32 GUI: An external command that produces an error code put the error
+message in a dialog box. had to close the window and close the dialog. Now
+the error code is displayed in the console. (Negri)
+
+"comctl32.lib" was missing from the GUI libraries in Makefile.w32. (Battle)
+
+In Insert mode, when entering a window in Insert mode, allow the cursor to be
+one char beyond the text.
+
+Renamed machine dependent rename() to mch_rename(). Define mch_rename() to
+rename() when it works properly.
+
+Rename vim_chdir() to mch_chdir(), because it's machine dependent.
+
+When using an arglist, and editing file 5 of 4, ":q" could cause "-1 more
+files to edit" error.
+
+In if_python.c, VimCommand() caused an assertion when a do_cmdline() failed.
+Moved the Python_Release_Vim() to before the VimErrorCheck(). (Harkins)
+
+Give an error message for an unknown argument after "--". E.g. for "vim
+--xyz".
+
+The FileChangedShell autocommand didn't set <afile> to the name of the changed
+file.
+
+When doing ":e file", causing the attention message, there sometimes was no
+hit-enter prompt. Caused by empty line or "endif" at end of sourced file.
+
+A large number of patches for the VMS version. (Hunsaker)
+
+When CTRL-L completion (find longest match) results in a shorter string, no
+completion is done (happens with ":help").
+
+Crash in Win32 GUI version, when using an Ex "@" command, because
+LinePointers[] was used while not initialized.
+
+Win32 GUI: allow mapping of Alt-Space.
+
+Output from "vim -h" was sent to stderr. Sending it to stdout is better, so
+one can use "vim -h | more".
+
+In command-line mode, ":vi[!]" should reload the file, just like ":e[!]".
+In Ex mode, ":vi" stops Ex mode, but doesn't reload the file. This is Vi
+compatible.
+
+When using a ":set ls=1" in the .gvimrc file, would get a status line for a
+single window. (Robinson)
+
+Didn't give an error message for ":set ai,xx". (Roemer)
+Didn't give an error message for ":set ai?xx", ":set ai&xx", ":set ai!xx".
+
+Non-Unix systems: That a file exists but is unreadable is recognized as "new
+file". Now check for existence when file can't be opened (like Unix).
+
+Unix: osdef.sh didn't handle declarations where the function name is at the
+first column of the line.
+
+DJGPP: Shortening of file names didn't work properly, because get_cwd()
+returned a path with backslashes. (Negri)
+
+When using a 'comments' part where a space is required after the middle part,
+always insert a space when starting a new line. Helps for C comments, below a
+line with "/****".
+
+Replacing path of home directory with "~/" could be wrong for file names
+with embedded spaces or commas.
+
+A few fixes for the Sniff interface. (Leherbauer)
+
+When asking to hit 'y' or 'n' (e.g. for ":3,1d"), using the mouse caused
+trouble. Same for ":s/x/y/c" prompt.
+
+With 'nowrap' and 'list', a Tab halfway on the screen was displayed as blanks,
+instead of the characters specified with 'listchars'. Also for other
+characters that take more than one screen character.
+
+When setting 'guifont' to an unknown font name, the previous font was lost and
+a default font would be used. (Steed)
+
+DOS: Filenames in the root directory didn't get shortened properly. (Negri)
+
+DJGPP: making a full path name out of a file name didn't work properly when
+there is no _fullpath() function. (Negri)
+
+Win32 console: ":sh" caused a crash. (Negri)
+
+Win32 console: Setting 'lines' and/or 'columns' in the _vimrc failed miserably
+(could hang Windows 95). (Negri)
+
+Win32: The change-drive function was not correct, went to the wrong drive.
+(Tsindlekht)
+
+GUI: When editing a command line in Ex mode, Tabs were sometimes not
+backspaced properly, and unprintable characters were displayed directly.
+non-GUI can still be wrong, because a system function is called for this.
+
+":set" didn't stop after an error. For example ":set no ai" gave an error for
+"no", but still set "ai". Now ":set" stops after the first error.
+
+When running configure for ctags, $LDFLAGS wasn't passed to it, causing
+trouble for IRIX.
+
+"@%" and "@#" when file name not set gave an error message. Now they just
+return an empty string. (Steed)
+
+CTRL-X and CTRL-A didn't work correctly with negative hex and octal numbers.
+(Steed)
+
+":echo" always started with a blank.
+
+Updating GUI cursor shape didn't always work (e.g., when blinking is off).
+
+In silent Ex mode ("ex -s" or "ex <file") ":s///p" didn't print a line. Also
+a few other commands that explicitly print a text line didn't work. Made this
+Vi compatible.
+
+Win32 version of _chdrive() didn't return correct value. (Tsindlekht)
+
+When using 't' in 'complete' option, no longer give an error message for a
+missing tags file.
+
+Unix: tgoto() can return NULL, which was not handled correctly in configure.
+
+When doing ":help" from a buffer where 'binary' is set, also edited the help
+file in binary mode. Caused extra ^Ms for DOS systems.
+
+Cursor position in a file was reset to 1 when closing a window.
+
+":!ls" in Ex mode switched off echo.
+
+When doing a double click in window A, while currently in window B, first
+click would reset double click time, had to click three times to select a
+word.
+
+When using <F11> in mappings, ":mkexrc" produced an exrc file that can't be
+used in Vi compatible mode. Added setting of 'cpo' to avoid this. Also, add
+a CTRL-V in front of a '<', to avoid a normal string to be interpreted as a
+special key name.
+
+Gave confusing error message for ":set guifont=-*-lucida-*": first "font is
+not fixed width", then "Unknown font".
+
+Some options were still completely left out, instead of included as hidden
+options.
+
+While running the X11 GUI, ignore SIGHUP signals. Avoids a crash after
+executing an external command (in rare cases).
+
+In os_unixx.h, signal() was defined to sigset(), while it already was.
+
+Memory leak when executing autocommands (was reported as a memory leak in
+syntax highlighting).
+
+Didn't print source of error sometimes, because pointers were the same,
+although names were different.
+
+Avoid a number of UMR errors from Purify (third argument to open()).
+
+A swap file could still be created just after setting 'updatecount' to zero,
+when there is an empty buffer and doing ":e file". (Kutschera)
+
+Test 35 failed on 64 bit machines. (Schild)
+
+With "p" and "P" commands, redrawing was slow.
+
+Awk script for html documentation didn't work correctly with AIX awk.
+Replaced "[ ,.);\] ]" with "[] ,.); ]". (Briscoe)
+The makehtml.awk script had a small problem, causing extra lines to be
+inserted. (Briscoe)
+
+"gqgq" could not be repeated. Repeating for "gugu" and "gUgU" worked in a
+wrong way. Also made "gqq" work to be consistent with "guu".
+
+C indent was wrong after "case ':':".
+
+":au BufReadPre *.c put": Line from put text was deleted, because the buffer
+was still assumed to be empty.
+
+Text pasted with the Edit/Paste menu was subject to 'textwidth' and
+'autoindent'. That was inconsistent with using the mouse to paste. Now "*p
+is used.
+
+When using CTRL-W CTRL-] on a word that's not a tag, and then CTRL-] on a tag,
+window was split.
+
+":ts" got stuck on a tags line that has two extra fields.
+
+In Insert mode, with 'showmode' on, <C-O><C-G> message was directly
+overwritten by mode message, if preceded with search command warning message.
+
+When putting the result of an expression with "=<expr>p, newlines were
+inserted like ^@ (NUL in the file). Now the string is split up in lines at
+the newline.
+
+putenv() was declared with "const char *" in pty.c, but with "char *" in
+osdef2.h.in. Made the last one also "const char *".
+
+":help {word}", where +{word} is a feature, jumped to the feature list instead
+of where the command was explained. E.g., ":help browse", ":help autocmd".
+
+Using the "\<xx>" form in an expression only got one byte, even when using a
+special character that uses several bytes (e.g., "\<F9>").
+Changed "\<BS>" to produce CTRL-H instead of the special key code for the
+backspace key. "\<Del>" produces 0x7f.
+
+":mkvimrc" didn't write a command to set 'compatible' or 'nocompatible'.
+
+The shell syntax didn't contain a "syn sync maxlines" setting. In a long file
+without recognizable items, syncing took so long it looked like Vim hangs.
+Added a maxlines setting, and made syncing interruptable.
+
+The "gs" command didn't flush output before waiting.
+
+Memory leaks for:
+ ":if 0 | let a = b . c | endif"
+ "let a = b[c]"
+ ":so {file}" where {file} contains a ":while"
+
+GUI: allocated fonts were never released. (Leonard)
+
+Makefile.bor:
+- Changed $(DEFINES) into a list of "-D" options, so that it can also be used
+ for the resource compiler. (not tested!)
+- "bcc.cfg" was used for all configurations. When building for another
+ configuration, the settings for the previous one would be used. Moved
+ "bcc.cfg" to the object directory. (Geddes)
+- Included targets for vimrun, install, ctags and xxd. Changed the default to
+ use the Borland DLL Runtime Library, makes Vim.exe a log smaller. (Aaron)
+
+"2*" search for the word under the cursor with "2" prepended. (Leonard)
+
+When deleting into a specific register, would still overwrite the non-Win32
+GUI selection. Now ""x"*P works.
+
+When deleting into the "" register, would write to the last used register.
+Now ""x always writes to the unnamed register.
+
+GUI Athena: A submenu with a '.' in it didn't work. E.g.,
+":amenu Syntax.XY\.Z.foo lll".
+
+When first doing ":tag foo" and then ":tnext" and/or ":tselect" the order of
+matching tags could change, because the current file is different. Now the
+existing matches are kept in the same order, newly found matches are added
+after them, not matter what the current file is.
+
+":ta" didn't find the second entry in a tags file, if the second entry was
+longer than the first one.
+
+When using ":set si tw=7" inserting "foo {^P}" made the "}" inserted at the
+wrong position. can_si was still TRUE when the cursor is not in the indent of
+the line.
+
+Running an external command in Win32 version had the problem that Vim exits
+when the X on the console is hit (and confirmed). Now use the "vimrun"
+command to start the external command indirectly. (Negri)
+
+Win32 GUI: When running an external filter, do it in a minimized DOS box.
+(Negri)
+
+":let" listed variables without translation into printable characters.
+
+Win32 console: When resizing the window, switching back to the old size
+(when exiting or executing an external command) sometimes failed. (Negri)
+This appears to also fix a "non fixable" problem:
+Win32 console in NT 4.0: When running Vim in a cmd window with a scrollbar,
+the scrollbar disappeared and was not restored when Vim exits. This does work
+under NT 3.51, it appears not to be a Vim problem.
+
+When executing BufDelete and BufUnload autocommands for a buffer without a
+name, the name of the current buffer was used for <afile>.
+
+When jumping to a tag it reported "tag 1 of >2", while in fact there could be
+only two matches. Changed to "tag 1 of 2 or more".
+
+":tjump tag" did a linear search in the tags file, which can be slow.
+
+Configure didn't find "LibXm.so.2.0", a Xm library with a version number.
+
+Win32 GUI: When using a shifted key with ALT, the shift modifier would remain
+set, even when it was already used by changing the used key. E.g., "<M-S-9>"
+resulted in "<M-S-(>", but it should be "<M-(>". (Negri)
+
+A call to ga_init() was often followed by setting growsize and itemsize.
+Created ga_init2() for this, which looks better. (Aaron)
+
+Function filereadable() could call fopen() with an empty string, which might
+be illegal.
+
+X Windows GUI: When executing an external command that outputs text, could
+write one character beyond the end of a buffer, which caused a crash. (Kohan)
+
+When using "*" or "#" on a string that includes '/' or '?' (when these are
+included in 'isk'), they were not escaped. (Parmelan)
+
+When adding a ToolBar menu in the Motif GUI, the submenu_id field was not
+cleared, causing random problems.
+
+When adding a menu, the check if this menu (or submenu) name already exists
+didn't compare with the simplified version (no mnemonic or accelerator) of the
+new menu. Could get two menus with the same name, e.g., "File" and "&File".
+
+Breaking a line because of 'textwidth' at the last line in the window caused a
+redraw of the whole window instead of a scroll. Speeds up normal typing with
+'textwidth' a lot for slow terminals.
+
+An invalid line number produced an "invalid range" error, even when it wasn't
+to be executed (inside "if 0").
+
+When the unnamed, first buffer is re-used, the "BufDelete" autocommand was
+not called. It would stick in a buffer list menu.
+
+When doing "%" on the NUL after the line, a "{" or "}" in the last character
+of the line was not found.
+
+The Insert mode menu was not used for the "s" command, the Operator-pending
+menu was used instead.
+
+With 'compatible' set, some syntax highlighting was not correct, because of
+using "[\t]" for a search pattern. Now use the regexps for syntax
+highlighting like the 'cpoptions' option is empty (as was documented already).
+
+When using "map <M-Space> ms" or "map <Space> sss" the output of ":map" didn't
+show any lhs for the mapping (if 'isprint' includes 160). Now always use
+<Space> and <M-Space>, even when they are printable.
+
+Adjusted the Syntax menu, so that the lowest entry fits on a small screen (for
+Athena, where menus don't wrap).
+
+When using CTRL-E or CTRL-Y in Insert mode for characters like 'o', 'x' and
+digits, repeating the insert didn't work.
+
+The file "tools/ccfilter.README.txt" could not be unpacked when using short
+file names, because of the two dots. Renamed it to
+"tools/ccfilter_README.txt".
+
+For a dark 'background', using Blue for Directory and SpecialKey highlight
+groups is not very readable. Use Cyan instead.
+
+In the function uc_scan_attr() in ex_docmd.c there was a goto that jumped into
+a block with a local variable. That's illegal for some compilers.
+
+Win32 GUI: There was a row of pixels at the bottom of the window which was not
+drawn. (Aaron)
+
+Under DOS, editing "filename/" created a swap file of "filename/.swp". Should
+be "filename/_swp".
+
+Win32 GUI: pointer was hidden when executing an external command.
+
+When 'so' is 999, "J" near the end of the file didn't redisplay correctly.
+
+":0a" inserted after the first line, instead of before the first line.
+
+Unix: Wildcard expansion didn't handle single quotes and {} patterns. Now
+":file 'window.c'" removes the quotes and ":e 'main*.c'" works (literal '*').
+":file {o}{n}{e}" now results in file name "one".
+
+Memory leak when setting a string option back to its default value.
+
+==============================================================================
+VERSION 5.3 *version-5.3*
+
+Version 5.3 was a bug-fix version of 5.2. There are not many changes.
+Improvements made between version 5.2 and 5.3:
+
+Changed *changed-5.3*
+-------
+
+Renamed "IDE" menu to "Tools" menu.
+
+
+Added *added-5.3*
+-----
+
+Win32 GUI: Give a warning when Vim is activated, and one of the files changed
+since editing started. (Negri)
+
+
+Fixed *fixed-5.3*
+-----
+
+5.2.1: Win32 GUI: space for external command was not properly allocated, could
+cause a crash. (Aaron) This was the reason to bring out 5.3 quickly after
+5.2.
+
+5.2.2: Some commands didn't complain when used without an argument, although
+they need one: ":badd", ":browse", ":call", ":confirm", ":behave",
+":delfunction", ":delcommand" and ":tearoff".
+":endfunction" outside of a function gave wrong error message: "Command not
+implemented". Should be ":endfunction not inside a function".
+
+5.2.3: Win32 GUI: When gvim was installed in "Program files", or another path
+with a space in it, executing external commands with vimrun didn't work.
+
+5.2.4: Pasting with the mouse in Insert mode left the cursor on the last
+pasted character, instead of behind it.
+
+5.2.5: In Insert mode, cursor after the end of the line, a shift-cursor-left
+didn't include the last character in the selection.
+
+5.2.6: When deleting text from Insert mode (with "<C-O>D" or the mouse), which
+includes the last character in the line, the cursor could be left on the last
+character in the line, instead of just after it.
+
+5.2.7: Win32 GUI: scrollbar was one pixel too big.
+
+5.2.8: Completion of "PopUp" menu showed the derivates "PopUpc", "PopUPi",
+etc. ":menu" also showed these.
+
+5.2.9: When using two input() functions on a row, the prompt would not be
+drawn in column 0.
+
+5.2.10: A loop with input() could not be broken with CTRL-C.
+
+5.2.11: ":call asdf" and ":call asdf(" didn't give an error message.
+
+5.2.12: Recursively using ":normal" crashes Vim after a while. E.g.:
+":map gq :normal gq<CR>"
+
+5.2.13: Syntax highlighting used 'iskeyword' from wrong buffer. When using
+":help", then "/\k*" in another window with 'hlsearch' set.
+
+5.2.14: When using ":source" from a function, global variables would not be
+available unless "g:" was used.
+
+5.2.15: XPM files can have the extension ".pm", which is the same as for Perl
+modules. Added "syntax/pmfile.vim" to handle this.
+
+5.2.16: On Win32 and Amiga, "echo expand("%:p:h")" removed one dirname in an
+empty buffer. mch_Fullname() didn't append a slash at the end of a directory
+name.
+
+Should include the character under the cursor in the Visual area when using
+'selection' "exclusive". This wasn't done for "%", "e", "E", "t" and "f".
+
+""p would always put register 0, instead of the unnamed (last used) register.
+Reverse the change that ""x doesn't write in the unnamed (last used) register.
+It would always write in register 0, which isn't very useful. Use "-x for the
+paste mappings in Visual mode.
+
+When there is one long line on the screen, and 'showcmd' is off, "0$" didn't
+redraw the screen.
+
+Win32 GUI: When using 'mousehide', the pointer would flicker when the cursor
+shape is changed. (Negri)
+
+When cancelling Visual mode, and the cursor moves to the start, the wanted
+column wasn't set, "k" or "j" moved to the wrong column.
+
+When using ":browse" or ":confirm", was checking for a comment and separating
+bar, which can break some commands.
+
+Included fixes for Macintosh. (Kielhorn)
+
+==============================================================================
+VERSION 5.4 *version-5.4*
+
+Version 5.4 adds new features, useful changes and a lot of bug fixes.
+
+
+Runtime directory introduced *new-runtime-dir*
+----------------------------
+
+The distributed runtime files are now in $VIMRUNTIME, the user files in $VIM.
+You normally don't set $VIMRUNTIME but let Vim find it, by using
+$VIM/vim{version}, or use $VIM when that doesn't exist. This allows for
+separating the user files from the distributed files and makes it more easy to
+upgrade to another version. It also makes it possible to keep two versions of
+Vim around, each with their own runtime files.
+
+In the Unix distribution the runtime files have been moved to the "runtime"
+directory. This makes it possible to copy all the runtime files at once,
+without the need to know what needs to be copied.
+
+The archives for DOS, Windows, Amiga and OS/2 now have an extra top-level
+"vim" directory. This is to make clear that user-modified files should be put
+here. The directory that contains the executables doesn't have '-' or '.'
+characters. This avoids strange extensions.
+
+The $VIM and $VIMRUNTIME variables are set when they are first used. This
+allows them to be used by Perl, for example.
+
+The runtime files are also found in a directory called "$VIM/runtime". This
+helps when running Vim after just unpacking the runtime archive. When using
+an executable in the "src" directory, Vim checks if "vim54" or "runtime" can
+be added after removing it. This make the runtime files be found just after
+compiling.
+
+A default for $VIMRUNTIME can be given in the Unix Makefile. This is useful
+if $VIM doesn't point to above the runtime directory but to e.g., "/etc/".
+
+
+Filetype introduced *new-filetype-5.4*
+-------------------
+
+Syntax files are now loaded with the new FileType autocommand. Old
+"mysyntaxfile" files will no longer work. |filetypes|
+
+The scripts for loading syntax highlighting have been changed to use the
+new Syntax autocommand event.
+
+This combination of Filetype and Syntax events allows tuning the syntax
+highlighting a bit more, also when selected from the Syntax menu. The
+FileType autocommand can also be used to set options and mappings specifically
+for that type of file.
+
+The "$VIMRUNTIME/filetype.vim" file is not loaded automatically. The
+":filetype on" command has been added for this. ":syntax on" also loads it.
+
+The 'filetype' option has been added. It is used to trigger the FileType
+autocommand event, like the 'syntax' option does for the Syntax event.
+
+":set syntax=OFF" and ":set syntax=ON" can be used (in a modeline) to switch
+syntax highlighting on/off for the current file.
+
+The Syntax menu commands have been moved to $VIMRUNTIME/menu.vim. The Syntax
+menu is included both when ":filetype on" and when ":syntax manual" is used.
+
+Renamed the old 'filetype' option to 'osfiletype'. It was only used for
+RISCOS. 'filetype' is now used for the common file type.
+
+Added the ":syntax manual" command. Allows manual selection of the syntax to
+be used, e.g., from a modeline.
+
+
+Vim script line continuation *new-line-continuation*
+----------------------------
+
+When an Ex line starts with a backslash, it is concatenated to the previous
+line. This avoids the need for long lines. |line-continuation| (Roemer)
+Example: >
+ if has("dialog_con") ||
+ \ has("dialog_gui")
+ :let result = confirm("Enter your choice",
+ \ "&Yes\n&No\n&Maybe",
+ \ 2)
+ endif
+
+
+Improved session files *improved-sessions*
+----------------------
+
+New words for 'sessionoptions':
+- "help" Restore the help window.
+- "blank" Restore empty windows.
+- "winpos" Restore the Vim window position. Uses the new ":winpos"
+ command
+- "buffers" Restore hidden and unloaded buffers. Without it only the
+ buffers in windows are restored.
+- "slash" Replace backward by forward slashes in file names.
+- "globals" Store global variables.
+- "unix" Use unix file format (<NL> instead of <CR><NL>)
+
+The ":mksession" and 'sessionoptions' are now in the +mksession feature.
+
+The top line of the window is also restored when using a session file.
+
+":mksession" and ":mkvimrc" don't store 'fileformat', it should be detected
+when loading a file.
+
+(Most of this was done by Vince Negri and Robert Webb)
+
+
+Autocommands improved *improved-autocmds-5.4*
+---------------------
+
+New events:
+|FileType| When the file type has been detected.
+|FocusGained| When Vim got input focus. (Negri)
+|FocusLost| When Vim lost input focus. (Negri)
+|BufCreate| Called just after a new buffer has been created or has been
+ renamed. (Madsen)
+|CursorHold| Triggered when no key has been typed for 'updatetime'. Can be
+ used to do something with the word under the cursor. (Negri)
+ Implemented CursorHold autocommand event for Unix. (Zellner)
+ Also for Amiga and MS-DOS.
+|GUIEnter| Can be used to do something with the GUI window after it has
+ been created (e.g., a ":winpos 100 50").
+|BufHidden| When a buffer becomes hidden. Used to delete the
+ option-window when it becomes hidden.
+
+Also trigger |BufDelete| just before a buffer is going to be renamed. (Madsen)
+
+The "<amatch>" pattern can be used like "<afile>" for autocommands, except
+that it is the matching value for the FileType and Syntax events.
+
+When ":let @/ = <string>" is used in an autocommand, this last search pattern
+will be used after the autocommand finishes.
+
+Made loading autocommands a bit faster. Avoid doing strlen() on each exiting
+pattern for each new pattern by remembering the length.
+
+
+Encryption *new-encryption*
+----------
+
+Files can be encrypted when writing and decrypted when reading. Added the
+'key' option, "-x" command line argument and ":X" command. |encryption| (based
+on patch from Mohsin Ahmed)
+
+When reading a file, there is an automatic detection whether it has been
+crypted. Vim will then prompt for the key.
+
+Note that the encryption method is not compatible with Vi. The encryption is
+not unbreakable. This allows it to be exported from the US.
+
+
+GTK GUI port *new-GTK-GUI*
+------------
+
+New GUI port for GTK+. Includes a toolbar, menu tearoffs, etc. |gui-gtk|
+Added the |:helpfind| command. (Kahn and Dalecki)
+
+
+Menu changes *menu-changes-5.4*
+------------
+
+Menus can now also be used in the console. It is enabled by the new
+'wildmenu' option. This shows matches for command-line completion like a
+menu. This works as a minimal file browser.
+
+The new |:emenu| command can be used to execute a menu item.
+
+Uses the last status line to list items, or inserts a line just above the
+command line. (Negri)
+
+The 'wildcharx' option can be used to trigger 'wildmenu' completion from a
+mapping.
+
+When compiled without menus, this can be detected with has("menu"). Also show
+this in the ":version" output. Allow compiling GUI versions without menu
+support. Only include toolbar support when there is menu support.
+
+Moved the "Window" menu all the way to the right (priority 70). Looks more
+familiar for people working with MS-Windows, shouldn't matter for others.
+
+Included "Buffers" menu. Works with existing autocommands and functions. It
+can be disabled by setting the "no_buffers_menu" variable. (Aaron and Madsen)
+
+Win32 supports separators in a menu: "-.*-". (Geddes)
+Menu separators for Motif now work too.
+
+Made Popup menu for Motif GUI work. (Madsen)
+
+'M' flag in 'guioptions': Don't source the system menu.
+
+All the menu code has been moved from gui.c to menu.c.
+
+
+Viminfo improved *improved-viminfo*
+----------------
+
+New flags for 'viminfo':
+'!' Store global variables in the viminfo file if they are in uppercase
+ letters. (Negri)
+'h' Do ":nohlsearch" when loading a viminfo file.
+
+Store search patterns in the viminfo file with their offset, magic, etc. Also
+store the flag whether 'hlsearch' highlighting is on or off (which is not used
+if the 'h' flag is in 'viminfo').
+
+Give an error message when setting 'viminfo' without commas.
+
+
+Various new commands *new-commands-5.4*
+--------------------
+
+Operator |g?|: rot13 encoding. (Negri)
+
+|zH| and |zL| commands: Horizontal scrolling by half a page.
+|gm| move cursor to middle of screen line. (Ideas by Campbell)
+
+Operations on Visual blocks: |v_b_I|, |v_b_A|, |v_b_c|, |v_b_C|, |v_b_r|,
+|v_b_<| and |v_b_>|. (Kelly)
+
+New command: CTRL-\ CTRL-N, which does nothing in Normal mode, and goes to
+Normal mode when in Insert or Command-line mode. Can be used by VisVim or
+other OLE programs to make sure Vim is in Normal mode, without causing a beep.
+|CTRL-\_CTRL-N|
+
+":cscope kill" command to use the connection filename. |:cscope| (Kahn)
+
+|:startinsert| command: Start Insert mode next.
+
+|:history| command, to show all four types of histories. (Roemer)
+
+|[m|, |[M|, |]m| and |]M| commands, for jumping backward/forward to start/end
+of method in a (Java) class.
+
+":@*" executes the * register. |:@| (Acevedo)
+
+|go| and |:goto| commands: Jump to byte offset in the file.
+
+|gR| and |gr| command: Virtual Replace mode. Replace characters without
+changing the layout. (Webb)
+
+":cd -" changes to the directory from before the previous ":cd" command.
+|:cd-| (Webb)
+
+Tag preview commands |:ptag|. Shows the result of a ":tag" in a dedicated
+window. Can be used to see the context of the tag (e.g., function arguments).
+(Negri)
+|:pclose| command, and CTRL-W CTRL-Z: Close preview window. (Moore)
+'previewheight' option, height for the preview window.
+Also |:ppop|, |:ptnext|, |:ptprevious|, |:ptNext|, |:ptrewind|, |:ptlast|.
+
+|:find| and |:sfind| commands: Find a file in 'path', (split window) and edit
+it.
+
+The |:options| command opens an option window that shows the current option
+values. Or use ":browse set" to open it. Options are grouped by function.
+Offers short help on each option. Hit <CR> to jump to more help. Edit the
+option value and hit <CR> on a "set" line to set a new value.
+
+
+Various new options *new-options-5.4*
+-------------------
+
+Scroll-binding: 'scrollbind' and 'scrollopt' options. Added |:syncbind|
+command. Makes windows scroll the same amount (horizontally and/or
+vertically). (Ralston)
+
+'conskey' option for MS-DOS. Use direct console I/O. This should work with
+telnet (untested!).
+
+'statusline' option: Configurable contents of the status line. Also allows
+showing the byte offset in the file. Highlighting with %1* to %9*, using the
+new highlight groups User1 to User9. (Madsen)
+
+'rulerformat' option: Configurable contents of the ruler, like 'statusline'.
+(Madsen)
+
+'write' option: When off, writing files is not allowed. Avoids overwriting a
+file even with ":w!". The |-m| command line option resets 'write'.
+
+'clipboard' option: How the clipboard is used. Value "unnamed": Use unnamed
+register like "*. (Cortopassi) Value "autoselect": Like what 'a' in
+'guioptions' does but works in the terminal.
+
+'guifontset' option: Specify fonts for the +fontset feature, for the X11 GUI
+versions. Allows using normal fonts when vim is compiled with this feature.
+(Nam)
+
+'guiheadroom' option: How much room to allow above/below the GUI window.
+Used for Motif, Athena and GTK.
+
+Implemented 'tagstack' option: When off, pushing tags onto the stack is
+disabled (Vi compatible). Useful for mappings.
+
+'shellslash' option. Only for systems that use a backslash as a file
+separator. This option will use a forward slash in file names when expanding
+it. Useful when 'shell' is sh or csh.
+
+'pastetoggle' option: Key sequence that toggles 'paste'. Works around the
+problem that mappings don't work in Insert mode when 'paste' is set.
+
+'display' option: When set to "lastline", the last line fills the window,
+instead of being replaced with "@" lines. Only the last three characters are
+replaced with "@@@", to indicate that the line has not finished yet.
+
+'switchbuf' option: Allows re-using existing windows on a buffer that is being
+jumped to, or split the window to open a new buffer. (Roemer)
+
+'titleold' option. Replaces the fixed string "Thanks for flying Vim", which
+is used to set the title when exiting. (Schild)
+
+
+Vim scripts *new-script-5.4*
+-----------
+
+The |exists()| function can also check for existence of a function. (Roemer)
+An internal function is now found with a binary search, should be a bit
+faster. (Roemer)
+
+New functions:
+- |getwinposx()| and |getwinposy()|: get Vim window position. (Webb)
+- |histnr()|, |histadd()|, |histget()| and |histdel()|: Make history
+ available. (Roemer)
+- |maparg()|: Returns rhs of a mapping. Based on a patch from Vikas.
+- |mapcheck()|: Check if a map name matches with an existing one.
+- |visualmode()|: Return type of last Visual mode. (Webb)
+- |libcall()|: Call a function in a library. Currently only for Win32. (Negri)
+- |bufwinnr()|: find window that contains the specified buffer. (Roemer)
+- |bufloaded()|: Whether a buffer exists and is loaded.
+- |localtime()| and |getftime()|: wall clock time and last modification time
+ of a file (Webb)
+- |glob()|: expand file name wildcards only.
+- |system()|: get the raw output of an external command. (based on a patch
+ from Aaron).
+- |strtrans()|: Translate String into printable characters. Used for
+ 2html.vim script.
+- |append()|: easy way to append a line of text in a buffer.
+
+Changed functions:
+- Optional argument to |strftime()| to give the time in seconds. (Webb)
+- |expand()| now also returns names for files that don't exist.
+
+Allow numbers in the name of a user command. (Webb)
+
+Use "v:" for internal Vim variables: "v:errmsg", "v:shell_error", etc. The
+ones from version 5.3 can be used without "v:" too, for backwards
+compatibility.
+
+New variables:
+"v:warningmsg" and "v:statusmsg" internal variables. Contain the last given
+warning and status message. |v:warningmsg| |v:statusmsg| (Madsen)
+"v:count1" variable: like "v:count", but defaults to one when no count is
+used. |v:count1|
+
+When compiling without expression evaluation, "if 1" can be used around the
+not supported commands to avoid it being executed. Works like in Vim 4.x.
+Some of the runtime scripts gave errors when used with a Vim that was compiled
+with minimal features. Now "if 1" is used around code that is not always
+supported.
+
+When evaluating an expression with && and ||, skip the parts that will not
+influence the outcome. This makes it faster and avoids error messages. (Webb)
+Also optimized the skipping of expressions inside an "if 0".
+
+
+Avoid hit-enter prompt *avoid-hit-enter*
+-----------------------
+
+Added 'T' flag to 'shortmess': Truncate all messages that would cause the
+hit-enter prompt (unless that would happen anyway).
+The 'O' flag in 'shortmess' now also applies to quickfix messages, e.g., from
+the ":cn" command.
+
+The default for 'shortmess' is now "filnxtToO", to make most messages fit on
+the command line, and not cause the hit-enter prompt.
+
+Previous messages can be viewed with the new |:messages| command.
+
+Some messages are shown fully, even when 'shortmess' tells to shorten
+messages, because the user is expected to want to see them in full: CTRL-G and
+some quickfix commands.
+
+
+Improved quickfix *improved-quickfix*
+-----------------
+
+Parse change-directory lines for gmake: "make[1]: Entering directory 'name'".
+Uses "%D" and "%X" in 'errorformat'.
+Also parse "Making {target} in {dir}" messages from make. Helps when not
+using GNU make. (Schandl)
+
+Use 'isfname' for "%f" in 'errorformat'.
+
+Parsing of multi-line messages. |errorformat-multi-line|
+
+Allow a range for the |:clist| command. (Roemer)
+
+Support for "global" file names, for error formats that output the file name
+once for several errors. (Roemer)
+
+|:cnfile| jumps to first error in next file.
+
+"$*" in 'makeprg' is replaced by arguments to ":make". (Roemer)
+
+
+Regular expressions *regexp-changes-5.4*
+-------------------
+
+In a regexp, a '$' before "\)" is also considered to be an end-of-line. |/$|
+In patterns "^" after "\|" or "\(" is a start-of-line. |/^| (Robinson)
+
+In a regexp, in front of "\)" and "\|" both "$" and "\$" were considered
+end-of-line. Now use "$" as end-of-line and "\$" for a literal dollar. Same
+for '^' after "\(" and "\|". |/\$| |/\^|
+
+Some search patterns can be extremely slow, even though they are not really
+illegal. For example: "\([^a-z]\+\)\+Q". Allow interrupting any regexp
+search with CTRL-C.
+
+Register "/: last search string (read-only). (Kohan) Changed to use last used
+search pattern (like what 'hlsearch' uses). Can set the search pattern with
+":let @/ = {expr}".
+
+Added character classes to search patterns, to avoid the need for removing the
+'l' flag from 'cpoptions': |[:tab:]|, |[:return:]|, |[:backspace:]| and
+|[:escape:]|.
+
+By adding a '?' after a comparative operator in an expression, the comparison
+is done by ignoring case. |expr-==?|
+
+
+Other improvements made between version 5.3 and 5.4
+---------------------------------------------------
+
+Changed *changed-5.4*
+-------
+
+Unix: Use $TMPDIR for temporary files, if it is set and exists.
+
+Removed "Empty buffer" message. It isn't useful and can cause a hit-enter
+prompt. (Negri)
+
+"ex -" now reads commands from stdin and works in silent mode. This is to be
+compatible with the original "ex" command that is used for scripts.
+
+Default range for ":tcldo" is the whole file.
+
+Cancelling Visual mode with ESC moved the cursor. There appears to be no
+reason for this. Now leave the cursor where it is.
+
+The ":grep" and ":make" commands see " as part of the arguments, instead of
+the start of a comment.
+
+In expressions the "=~" and "!~" operators no longer are affected by
+'ignorecase'.
+
+Renamed vimrc_example to vimrc_example.vim and gvimrc_example to
+gvimrc_example.vim. Makes them being recognized as vim scripts.
+
+"gd" no longer starts searching at the end of the previous function, but at
+the first blank line above the start of the current function. Avoids that
+using "gd" in the first function finds global a variable.
+
+Default for 'complete' changed from ".,b" to ".,w,b,u,t,i". Many more matches
+will be found, at the cost of time (the search can be interrupted).
+
+It is no longer possible to set 'shell*' options from a modeline. Previously
+only a warning message was given. This reduces security risks.
+
+The ordering of the index of documentation files was changed to make it more
+easy to find a subject.
+
+On MS-DOS and win32, when $VIM was not set, $HOME was used. This caused
+trouble if $HOME was set to e.g., "C:\" for some other tool, the runtime files
+would not be found. Now use $HOME only for _vimrc, _gvimrc, etc., not to find
+the runtime file.
+
+When 'tags' is "./{fname}" and there is no file name for the current buffer,
+just use it. Previously it was skipped, causing "vim -t {tag}" not to find
+many tags.
+
+When trying to select text in the 'scrolloff' area by mouse dragging, the
+resulting scrolling made this difficult. Now 'scrolloff' is temporarily set
+to 0 or 1 to avoid this. But still allow scrolling in the top line to extend
+to above the displayed text.
+
+Default for 'comments' now includes "sl:/*,mb: *,ex:*/", to make javadoc
+comments work. Also helps for C comments that start with "/*******".
+
+CTRL-X CTRL-] Insert mode tag expansion tried to expand to all tags when used
+after a non-ID character, which can take a very long time. Now limit this to
+200 matches. Also used for command-line tag completion.
+
+The OS/2 distribution has been split in two files. It was too big to fit on a
+floppy. The same runtime archive as for the PC is now used.
+
+In the documentation, items like <a-z> have been replaced with {a-z} for
+non-optional arguments. This avoids confusion with key names: <C-Z> is a
+CTRL-Z, not a character between C and Z, that is {C-Z}.
+
+
+Added *added-5.4*
+-----
+
+Color support for the iris-ansi builtin termcap entry. (Tubman)
+
+Included VisVim version 1.3a. (Erhardt)
+
+Win32 port for SNiFF+ interface. (Leherbauer)
+Documentation file for sniff interface: if_sniff.txt. (Leherbauer)
+
+Included the "SendToVim" and "OpenWithVim" programs in the OleVim directory.
+To be used with the OLE version of gvim under MS-Windows. (Schaller)
+
+Included Exuberant Ctags version 3.2.4 with Eiffel support. (Hiebert)
+
+When a file that is being edited is deleted, give a warning (like when the
+time stamp changed).
+
+Included newer versions of the HTML-generating Awk and Perl scripts. (Colombo)
+
+Linux console mouse support through "gpm". (Tsindlekht)
+
+Security fix: Disallow changing 'secure' and 'exrc' from a modeline. When
+'secure' is set, give a warning for changing options that contain a program
+name.
+
+Made the Perl interface work with Perl 5.005 and threads. (Verdoolaege)
+
+When giving an error message for an ambiguous mapping, include the offending
+mapping. (Roemer)
+
+Command line editing:
+- Command line completion of mappings. (Roemer)
+- Command line completion for ":function", ":delfunction", ":let", ":call",
+ ":if", etc. (Roemer)
+- When using CTRL-D completion for user commands that have
+ "-complete=tag_listfiles" also list the file names. (Madsen)
+- Complete the arguments of the ":command" command. (Webb)
+- CTRL-R . in command line inserts last inserted text. CTRL-F, CTRL-P, CTRL-W
+ and CTRL-A after CTRL-R are used to insert an object from under the cursor.
+ (Madsen)
+
+Made the text in uganda.txt about copying Vim a bit more clear.
+
+Updated the Vim tutor. Added the "vimtutor" command, which copies the tutor
+and starts Vim on it. "make install" now also copies the tutor.
+
+In the output of ":clist" the current entry is highlighted, with the 'i'
+highlighting (same as used for 'incsearch').
+
+For the ":clist" command, you can scroll backwards with "b" (one screenfull),
+"u" (half a screenfull) and "k" (one line).
+
+Multi-byte support:
+- X-input method for multi-byte characters. And various fixes for multi-byte
+ support. (Nam)
+- Hangul input method feature: |hangul|. (Nam)
+- Cleaned up configuration of multi-byte support, XIM, fontset and Hangul
+ input. Each is now configurable separately.
+- Changed check for GTK_KEYBOARD to HANGUL_KEYBOARD_TYPE. (Nam)
+- Added doc/hangulin.txt: Documentation for the Hangul input code. (Nam)
+- XIM support for GTK+. (Nam)
+- First attempt to include support for SJIS encoding. (Nagano)
+- When a double-byte character doesn't fit at the end of the line, put a "~"
+ there and print it on the next line.
+- Optimize output of multi-byte text. (Park)
+- Win32 IME: preedit style is like over-the-spot. (Nagano)
+- Win32 IME: IME mode change now done with ImmSetOpenStatus. (Nagano)
+- GUI Athena: file selection dialog can display multi-byte characters.
+ (Nagano)
+- Selection reply for XA_TEXT as XA_STRING. (Nagano)
+
+"runtime/macros/diffwin.vim". Mappings to make a diff window. (Campbell)
+
+Added ".obj" to the 'suffixes' option.
+
+Reduced size of syntax/synload.vim by using the ":SynAu" user command.
+Automated numbering of Syntax menu entries in menu.vim.
+In the Syntax menu, insert separators between syntax names that start with
+a different letter. (Geddes)
+
+Xterm:
+- Clipboard support when using the mouse in an xterm. (Madsen)
+- When using the xterm mouse, track dragging of the mouse. Use xterm escape
+ sequences when possible. It is more precise than other methods, but
+ requires a fairly recent xterm version. It is enabled with "xterm2" in
+ 'ttymouse'. (Madsen)
+- Check xterm patch level, to set the value of 'ttymouse'. Has only been
+ added to xterm recently (patch level > 95). Uses the new 't_RV' termcap
+ option. Set 'ttymouse' to "xterm2" when a correct response is recognized.
+ Will make xterm mouse dragging work better.
+- Support for shifted function keys on xterm. Changed codes for shifted
+ cursor keys to what the xterm actually produces. Added codes for shifted
+ <End> and <Home>.
+- Added 't_WP' to set the window position in pixels and 't_WS' to set the
+ window size in characters. Xterm can now move (used for ":winpos") and
+ resize (use for ":set lines=" and ":set columns=").
+
+X11:
+- When in Visual mode but not owning the selection, display the Visual area
+ with the VisualNOS group to show this. (Madsen)
+- Support for requesting the type of clipboard support. Used for AIX and
+ dtterm. (Wittig)
+- Support compound_text selection (even when compiled without multi-byte).
+
+Swap file:
+- New variation for naming swap files: Replace path separators into %, place
+ all swap files in one directory. Used when a name in 'dir' ends in two path
+ separators. (Madsen)
+- When a swap file is found, show whether it contains modifications or not in
+ the informative message. (Madsen)
+- When dialogs are supported, use a dialog to ask the user what to do when a
+ swapfile already exists.
+
+"popup_setpos" in 'mousemodel' option. Allows for moving the cursor when
+using the right mouse button.
+
+When a buffer is deleted, the selection for which buffer to display instead
+now uses the most recent entry from the jump list. (Madsen)
+
+When using CTRL-O/CTRL-I, skip deleted buffers.
+
+A percentage is shown in the ruler, when there is room.
+
+Used autoconf 1.13 to generate configure.
+
+Included get_lisp_indent() from Dirk van Deun. Does better Lisp indenting
+when 'p' flag in 'cpoptions' is not included.
+
+Made the 2html.vim script quite a bit faster. (based on ideas from Geddes)
+
+Unix:
+- Included the name of the user that compiled Vim and the system name it was
+ compiled on in the version message.
+- "make install" now also installs the "tools" directory. Makes them
+ available for everybody.
+- "make check" now does the same as "make test". "make test" checks for
+ Visual block mode shift, insert, replace and change.
+- Speed up comparing a file name with existing buffers by storing the
+ device/inode number with the buffer.
+- Added configure arguments "--disable-gtk", "--disable-motif" and
+ "--disable-athena", to be able to disable a specific GUI (when it doesn't
+ work).
+- Renamed the configure arguments for disabling the check for specific GUIs.
+ Should be clearer now. (Kahn)
+- On a Digital Unix system ("OSF1") check for the curses library before
+ termlib and termcap. (Schild)
+- "make uninstall_runtime" will only delete the version-specific files. Can
+ be used to delete the runtime files of a previous version.
+
+Macintosh: (St-Amant)
+- Dragging the scrollbar, like it's done for the Win32 GUI. Moved common code
+ from gui_w32.c to gui.c
+- Added dialogs and file browsing.
+- Resource fork preserved, warning when it will be lost.
+- Copy original file attributes to newly written file.
+- Set title/notitle bug solved.
+- Filename completion improved.
+- Grow box limit resize to a char by char size.
+- Use of rgb.txt for more colors (but give back bad color).
+- Apple menu works (beside the about...).
+- Internal border now vim compliant.
+- Removing a menu doesn't crash anymore.
+- Weak-linking of Python 1.5.1 (only on PPC). Python is supported when the
+ library is available.
+- If an error is encountered when sourcing the users .vimrc, the alert box now
+ shows right away with the OK button defaulted. There's no more "Delete"-key
+ sign at the start of each line
+- Better management of environment variables. Now $VIM is calculated only
+ once, not regenerated every time it is used.
+- No more CPU hog when in background.
+- In a sourced Vim script the Mac file format can be recognized, just like DOS
+ file format is.
+
+When both "unix" and "mac" are present in 'fileformats', prefer "mac" format
+when there are more CR than NL characters.
+When using "mac" fileformat, use CR instead of a NL, because NL is used for
+NUL. Will preserve all characters in a file. (Madsen)
+
+The DOS install.exe now contains checks for an existing installation. It
+avoids setting $VIM and $PATH again.
+The install program for Dos/Windows can now install Vim in the popup menu, by
+adding two registry keys.
+
+Port to EGCS/mingw32. New Makefile.ming. (Aaron)
+
+DOS 16 bit: Don't include cursor shape stuff. Save some bytes.
+
+TCL support to Makefile.w32. (Duperval)
+
+OS/2: Use argv[0] to find runtime files.
+
+When using "gf" to go to a buffer that has already been used, jump to the
+line where the cursor last was.
+
+Colored the output of ":tselect" a bit more. Different highlighting between
+tag name and file name. Highlight field name ("struct:") separately from
+argument.
+
+Backtick expansion for non-Unix systems. Based on a patch from Aaron.
+Allows the use of things like ":n `grep -l test *.c`" and
+"echo expand('`ls m*`')".
+
+Check for the 'complete' option when it is set. (Acevedo)
+'d' flag in 'complete' searches for defined names or macros.
+While searching for Insert mode completions in include files and tags files,
+check for typeahead, so that you can use matches early. (Webb)
+The '.' flag in 'complete' now scans the current buffer completely, ignoring
+'nowrapscan'. (Webb)
+
+Added '~' flag to 'whichwrap'. (Acevedo)
+
+When ending the Visual mode (e.g., with ESC) don't grab ownership of the
+selection.
+
+In a color terminal, "fg" and "bg" can be used as color names. They stand for
+the "Normal" colors.
+
+A few cscope cleanups. (Kahn)
+
+Included changed vimspell.sh from Schemenauer.
+
+Concatenation of strings in an expression with "." is a bit faster. (Roemer)
+
+The ":redir" command can now redirect to a register: ":redir @r". (Roemer)
+
+Made the output of ":marks" and ":jumps" look similar. When the mark is in
+the current file, show the text at the mark. Also for ":tags".
+
+When configure finds ftello() and fseeko(), they are used in tag.c (for when
+you have extremely big tags files).
+
+Configure check for "-FOlimit,2000" argument for the compiler. (Borsenkow)
+
+GUI:
+- When using ":gui" in a non-GUI Vim, give a clear error message.
+- "gvim -v" doesn't start the GUI (if console support is present).
+- When in Ex mode, use non-Visual selection for the whole screen.
+- When starting with "gvim -f" and using ":gui" in the .gvimrc file, Vim
+ forked anyway. Now the "-f" flag is remembered for ":gui". Added "gui -b"
+ to run gvim in the background anyway.
+
+Motif GUI:
+- Check for "-lXp" library in configure (but it doesn't work yet...).
+- Let configure check for Lesstif in "/usr/local/Lesstif/Motif*". Changed the
+ order to let a local Motif version override a system standard version.
+
+Win32 GUI:
+- When using "-register" or "-unregister" in the non-OLE version, give an
+ error message.
+- Use GTK toolbar icons. Make window border look better. Use sizing handles
+ on the lower left&right corners of the window. (Negri)
+- When starting an external command with ":!start" and the command can not be
+ executed, give an error message. (Webb)
+- Use sizing handles for the grey rectangles below the scrollbars. Can draw
+ toolbar in flat mode now, looks better. (Negri)
+- Preparations for MS-Windows 3.1 addition. Mostly changing WIN32 to MSWIN
+ and USE_GUI_WIN32 to USE_GUI_MSWIN. (Negri)
+
+Avoid allocating the same string four times in buflist_findpat(). (Williams)
+
+Set title and icon text with termcap options 't_ts', 't_fs', 't_IS' and
+'t_IE'. Allows doing this on any terminal that supports setting the title
+and/or icon text. (Schild)
+
+New 'x' flag in 'comments': Automatically insert the end part when its last
+character is typed. Helps to close a /* */ comment in C. (Webb)
+
+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
+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,
+give a warning message.
+
+When editing a new file, CTRL-G will show [New file]. When there were errors
+while reading the file, CTRL-G will show [Read errors].
+
+":wall" can now use a dialog and file-browsing when needed.
+
+Grouped functionality into new features, mainly to reduce the size of the
+minimal version:
++linebreak: 'showbreak', 'breakat' and 'linebreak'
++visualextra: "I"nsert and "A"ppend in Visual block mode, "c"hange all lines
+ in a block, ">" and "<": Shifting a block, "r": Replacing a
+ Visual area with one character.
++comments: 'comments'
++cmdline_info: 'ruler' and 'showcmd'. Replaces +showcmd.
+"+title" Don't add code to set title or icon for MSDOS, this was not
+ possible anyway.
++cmdline_compl Disable commandline completion at compile time, except for
+ files, directories and help items.
+
+Moved features from a list of function calls into an array. Should save a bit
+of space.
+
+While entering the body of a function, adjust indent according to "if" and
+"while" commands.
+
+VMS: Adjusted os_vms.mms a bit according to suggestions from Arpadffy.
+
+The flags in the 'comments' option can now include an offset. This makes it
+possible to align "/*****", "/* xxx" and "/*" comments with the same
+'comments' setting. The default value for 'comments' uses this.
+Added 'O' flag: Don't use this part for the "O" command. Useful for "set
+com=sO:*\ -,mO:*\ \ ,exO:*/"
+
+FileType autocommands recognize ".bak", ".orig" and "~" extensions and remove
+them to find the relevant extension.
+
+The tutorial for writing a Vim script file has been extended.
+
+Some more highlighting in help files, for items that are not typed literally.
+
+Can use "CTRL-W CTRL-G" like "CTRL-W g".
+
+"make test" for OS/2.
+
+Adjusted configure to automatically use the GUI for BeOS.
+
+
+Fixed *fixed-5.4*
+-----
+
+5.3.1: When using an autocommand for BufWritePre that changes the name of the
+buffer, freed memory would be used. (Geddes)
+
+Mac: Compiler didn't understand start of skip_class_name().
+
+Win32 GUI:
+- When cancelling the font requester, don't give an error message.
+- When a tearoff-menu is open and its menu is deleted, Vim could crash.
+ (Negri)
+- There was a problem on Windows 95 with (un)maximizing the window.
+ (Williams)
+- when 'mousehide' is set, the mouse would stay hidden when a menu is dropped
+ with the keyboard. (Ralston)
+- The tempname() function already created the file. Caused problems when
+ using ":w". Now the file is deleted.
+- Cursor disappeared when ending up in the top-left character on the screen
+ after scrolling. (Webb)
+- When adding a submenu for a torn-off menu, it was not updated.
+- Menu tooltip was using the toolbar tooltip. (Negri)
+- Setting 'notitle' didn't remove the title. (Steed)
+- Using ":!start cmd" scrolled the screen one line up, and didn't wait for
+ return when the command wasn't found.
+
+Cscope interface: Sorting of matches was wrong. Starting the interface could
+fail. (Kahn)
+
+Motif GUI: Could not compile with Motif 1.1, because some tear-off
+functionality was not in #ifdefs.
+
+Configure could sometimes not compile or link the test program for sizeof(int)
+properly. This caused alignment problems for the undo structure allocations.
+Added a safety check that SIZEOF_INT is not zero.
+
+Added configure check to test if strings.h can be included after string.h.
+Some systems can't handle it.
+Some systems need both string.h and strings.h included. Adjusted vim.h for
+that. Removed including string.h from os_unixx.h, since it's already in
+vim.h. (Savage)
+AIX: defining _NO_PROTO in os_unix.h causes a conflict between string.h and
+strings.h, but after the configure check said it was OK. Also define
+_NO_PROTO for AIX in the configure check. (Winn)
+
+When closing a window with CTRL-W c, the value of 'hidden' was not taken into
+account, the buffer was always unloaded. (Negri)
+
+Unix Makefile: "make install" always tried to rename an older executable and
+remove it. This caused an error message when it didn't exit. Added a check
+for the existence of an old executable.
+The command line for "make install" could get too long, because of the many
+syntax files. Now first do a "cd" to reduce the length.
+
+On RISCOS and MSDOS, reading a file could fail, because the short filename was
+used, which can be wrong after a ":!cd".
+
+In the DOS versions, the wrong install.exe was included (required Windows).
+Now the install.exe version is included that is the same as the Vim version.
+This also supports long file names where possible.
+
+When recording, and stopping while in Insert mode with CTRL-O q, the CTRL-O
+would also be recorded.
+
+32bit DOS version: "vim \file", while in a subdirectory, resulted in "new
+file" for "file" in the local directory, while "\file" did exist. When
+"file" in the current directory existed, this didn't happen.
+
+MSDOS: Mouse could not go beyond 80 columns in 132 columns mode. (Young)
+
+"make test" failed in the RedHat RPM, because compatible is off by default.
+
+In Insert mode <C-O><C-W><C-W> changes to other window, but the status bars
+were not updated until another character was typed.
+
+MSDOS: environment options in lowercase didn't work, although they did in the
+Win32 versions. (Negri)
+
+After ":nohlsearch", a tag command switched highlighting back on.
+
+When using "append" command as the last line in an autocommand, Vim would
+crash.
+
+RISCOS: The scroll bumpers (?) were not working properly. (Leonard)
+
+"zl" and "zh" could move the cursor, but this didn't set the column in which
+e.g., "k" would move the cursor.
+
+When doing ":set all&" the value of 'scroll' was not set correctly. This
+caused an error message when later setting any other number option.
+
+When 'hlsearch' highlighting has been disabled with ":nohlsearch",
+incremental searching would switch it back on too early.
+
+When listing tags for ":tselect", and using a non-search command, and the last
+character was equal to the first (e.g., "99"), the last char would not be
+shown.
+
+When searching for tags with ":tag" Vim would assume that all matches had been
+found when there were still more (e.g. from another tags file).
+
+Win32: Didn't recognize "c:\" (e.g., in tags file) as absolute path when
+upper/lowercase was different.
+
+Some xterms (Debian) send <Esc>OH for HOME and <Esc>OF for END. Added these
+to the builtin-xterm.
+
+In ex mode, any CR was seen as the end of the line. Only a NL should be
+handled that way. broke ":s/foo/some^Mtext/".
+
+In menu.vim, a vmenu was used to override an amenu. That didn't work, because
+the system menu file doesn't overwrite existing menus. Added explicit vunmenu
+to solve this.
+
+Configure check for terminal library could find a library that doesn't work at
+runtime (Solaris: shared library not found). Added a check that a program
+with tgoto() can run correctly.
+
+Unix: "echo -n" in the Makefile doesn't work on all systems, causing errors
+compiling pathdef.c. Replaced it with "tr".
+
+Perl: DO_JOIN was redefined by Perl. Undefined it in the perl files.
+
+Various XIM and multi-byte fixes:
+- Fix user cannot see his language while he is typing his language with
+ off-the-spot method. (Nagano)
+- Fix preedit position using text/edit area (using gui.wid). (Nagano)
+- remove 'fix dead key' codes. It was needed since XNFocusWindow was
+ "x11_window", XNFocusWindow is now gui.wid. (Nagano)
+- Remove some compile warnings and fix typos. (Namsh)
+- For status area, check the gtk+ version while Vim runs. I believe it is
+ better than compile time check. (Namsh)
+- Remove one FIXME for gtk+-xim. (Namsh)
+- XIM: Dead keys didn't work for Czech. (Vyskovsky)
+- Multibyte: If user input only 3byte such as mb1_mb2_eng or eng_mb1_mb2 VIM
+ could convert it to special character. (Nam)
+- Athena/Motif with XIM: fix preedit area. (Nam)
+- XIM: Composed strings were sometimes ignored. Vim crashed when compose
+ string was longer than 256 bytes. IM's geometry control is fixed. (Nam,
+ Nagano)
+- Win32 multi-byte: hollowed cursor width on a double byte char was wrong.
+ (Nagano)
+- When there is no GUI, selecting XIM caused compilation problems.
+ Automatically disable XIM when there is no GUI in configure.
+- Motif and Athena: When compiled with XIM, but the input method was not
+ enabled, there would still be a status line. Now the status line is gone if
+ the input method doesn't work. (Nam)
+
+Win32: tooltip was not removed when selecting a parent menu (it was when
+selecting a menu entry). (Negri)
+
+Unix with X: Some systems crash on exit, because of the XtCloseDisplay() call.
+Removed it, it should not be necessary when exiting.
+
+Win32: Crash on keypress when compiled with Borland C++. (Aaron)
+
+When checking for Motif library files, prefer the same location as the include
+files (with "include" replaced with "lib") above another entry.
+
+Athena GUI: Changed "XtOffset()" in gui_at_fs.c to "XtOffsetOf()", like it's
+used in gui_x11.c.
+
+Win32: When testing for a timestamp of a file on floppy, would get a dialog
+box when the floppy has been removed. Now return with an error. (Negri)
+
+Win32 OLE: When forced to come to the foreground, a minimized window was still
+minimized, now it's restored. (Zivkov)
+
+There was no check for a positive 'shiftwidth'. A negative value could cause
+a hangup, a zero value a crash.
+
+Athena GUI: horizontal scrollbar wasn't updated correctly when clicking right
+or left of the thumb.
+
+When making a Visual-block selection in one window, and trying to scroll
+another, could cause errors for accessing non-existent line numbers.
+
+When 'matchpairs' contains "`:'", jumping from the ` to the ' didn't work
+properly.
+
+Changed '\"' to '"' to make it compatible with old C compilers.
+
+The command line expansion for mappings caused a script with a TAB between lhs
+and rhs of a map command to fail. Assume the TAB is to separate lhs and rhs
+when there are no mappings to expand.
+
+When editing a file with very long lines with 'scrolloff' set, "j" would
+sometimes end up in a line which wasn't displayed.
+
+When editing a read-only file, it was completely read into memory, even when
+it would not fit. Now create a swap file for a read-only file when running
+out of memory while reading the file.
+
+When using ":set cino={s,e-s", a line after "} else {" was not indented
+properly. Also added a check for this in test3.in.
+
+The Hebrew mapping for the command line was remembered for the next command
+line. That isn't very useful, a command is not Hebrew. (Kol)
+
+When completing file names with embedded spaces, like "Program\ files", this
+didn't work. Also for user commands. Moved backslash_halve() down to
+mch_expandpath().
+
+When using "set mouse=a" in Ex mode, mouse events were handled like typed
+text. Then typing "quit" screwed up the mouse behavior of the xterm.
+
+When repeating an insert with "." that contains a CTRL-Y, a number 5 was
+inserted as "053".
+
+Yanking a Visual area, with the cursor past the line, didn't move the cursor
+back onto the line. Same for "~", "u", "U" and "g?"
+
+Win32: Default for 'grepprg' could be "findstr /n" even though there is no
+findstr.exe (Windows 95). Check if it exists, and fall back to "grep -n" if
+it doesn't.
+
+Because gui_mouse_moved() inserted a leftmouse click in the input buffer,
+remapping a leftmouse click caused strange effects. Now Insert another code
+in the input buffer. Also insert a leftmouse release, to avoid the problem
+with ":map <LeftMouse> l" that the next release is seen as the release for the
+focus click.
+
+With 'wrap' on, when using a line that doesn't fit on the screen, if the start
+of the Visual area is before the start of the screen, there was no
+highlighting. Also, 'showbreak' doesn't work properly.
+
+DOS, Win32: A pattern "[0-9]\+" didn't work in autocommands.
+
+When creating a swap file for a buffer which isn't the current buffer, could
+get a mixup of short file name, resulting in a long file name when a short
+file name was required. makeswapname() was calling modname() instead of
+buf_modname().
+
+When a function caused an error, and the error message was very long because
+of recursiveness, this would cause a crash.
+
+'suffixes' were always compared with matching case. For MS-DOS, Win32 and
+OS/2 case is now ignored.
+
+The use of CHARBITS in regexp.c didn't work on some Linux. Don't use it.
+
+When generating a script file, 'cpo' was made empty. This caused backslashes
+to disappear from mappings. Set it to "B" to avoid that.
+
+Lots of typos in the documentation. (Campbell)
+
+When editing an existing (hidden) buffer, jump to the last used cursor
+position. (Madsen)
+
+On a Sun the xterm screen was not restored properly when suspending. (Madsen)
+
+When $VIMINIT is processed, 'nocompatible' was only set after processing it.
+
+Unix: Polling for a character wasn't done for GPM, Sniff and Xterm clipboard
+all together. Cleaned up the code for using select() too.
+
+When executing external commands from the GUI, some typeahead was lost. Added
+some code to regain as much typeahead as possible.
+
+When the window height is 5 lines or fewer, <PageDown> didn't use a one-line
+overlap, while <PageUp> does. Made sure that <PageUp> uses the same overlap
+as <PageDown>, so that using them both always displays the same lines.
+
+Removed a few unused functions and variables (found with lint).
+
+Dictionary completion didn't use 'infercase'. (Raul)
+
+Configure tests failed when the Perl library was not in LD_LIBRARY_PATH.
+Don't use the Perl library for configure tests, add it to the linker line only
+when linking Vim.
+
+When using ncurses/terminfo, could get a 't_Sf' and 't_Sb' termcap entry that
+has "%d" instead of "%p1%d". The light background colors didn't work then.
+
+GTK GUI with ncurses: Crashed when starting up in tputs(). Don't use tputs()
+when the GUI is active.
+
+Could use the ":let" command to set the "count", "shell_error" and "version"
+variables, but that didn't work. Give an error message when trying to set
+them.
+
+On FreeBSD 3.0, tclsh is called tclsh8.0. Adjusted configure.in to find it.
+
+When Vim is linked with -lncurses, but python uses -ltermcap, this causes
+trouble: "OOPS". Configure now removes the -ltermcap.
+
+:@" and :*" didn't work properly, because the " was recognized as the start of
+a comment.
+
+Win32s GUI: Minimizing the console where a filter command runs in caused
+trouble for detecting that the filter command has finished. (Negri)
+
+After executing a filter command from an xterm, the mouse would be disabled.
+It would work again after changing the mode.
+
+Mac GUI: Crashed in newenv(). (St-Amant)
+
+The menus and mappings in mswin.vim didn't handle text ending in a NL
+correctly. (Acevedo)
+
+The ":k" command didn't check if it had a valid argument or extra characters.
+Now give a meaningful error message. (Webb)
+
+On SGI, the signal function doesn't always have three arguments. Check for
+struct sigcontext to find out. Might still be wrong...
+
+Could crash when using 'hlsearch' and search pattern is "^".
+
+When search patterns were saved and restored, status of no_hlsearch was not
+also saved and restored (from ":nohlsearch" command).
+
+When using setline() to make a line shorter, the cursor position was not
+adjusted.
+
+MS-DOS and Win95: When trying to edit a file and accidentally adding a slash
+or backslash at the end, the file was deleted. Probably when trying to create
+the swap file. Explicitly check for a trailing slash or backslash before
+trying to read a file.
+
+X11 GUI: When starting the GUI failed and received a deadly signal while
+setting the title, would lock up when trying to exit, because the title is
+reset again. Avoid using mch_settitle() recursively.
+
+X11 GUI: When starting the GUI fails, and then trying it again, would crash,
+because argv[] has been freed and x11_display was reset to NULL.
+
+Win32: When $HOME was set, would put "~user" in the swap file, which would
+never compare with a file name, and never cause the attention message. Put
+the full path in the swap file instead.
+
+Win32 console: There were funny characters at the end of the "vim -r" swap
+files message (direct output of CR CR LF).
+
+DOS 32 bit: "vim -r" put the text at the top of the window.
+
+GUI: With 'mousefocus' set, got mouse codes as text with "!sleep 100" or "Q".
+
+Motif and Win32 GUI: When changing 'guifont' to a font of the same size the
+screen wasn't redrawn.
+
+Unix: When using ":make", jumping to a file b.c, which is already open as a
+symbolic link a.c, opened a new buffer instead of using the existing one.
+
+Inserting text in the current buffer while sourcing the .vimrc file would
+cause a crash or hang. The memfile for the current buffer was never
+allocated. Now it's allocated as soon as something is written in the buffer.
+
+DOS 32 bit: "lightblue" background worked for text, but not drawn parts were
+black.
+
+DOS: Colors of console were not restored upon exiting.
+
+When recording, with 'cmdheight' set to 2 and typing Esc> in Insert mode
+caused the "recording" message to be doubled.
+
+Spurious "file changed" messages could happen on Windows. Now tolerate a one
+second difference, like for Linux.
+
+GUI: When returning from Ex mode, scrollbars were not updated.
+
+Win32: Copying text to the clipboard containing a <CR>, pasting it would
+replace it with a <NL> and drop the next character.
+
+Entering a double byte character didn't work if the second byte is in [xXoO].
+(Eric Lee)
+
+vim_realloc was both defined and had a prototype in proto/misc2.pro. Caused
+conflicts on Solaris.
+
+A pattern in an autocommand was treated differently on DOS et al. than on
+Unix. Now it's the same, also when using backslashes.
+
+When using <Tab> twice for command line completion, without a match, the <Tab>
+would be inserted. (Negri)
+
+Bug in MS-Visual C++ 6.0 when compiling ex_docmd.c with optimization. (Negri)
+
+Testing the result of mktemp() for failure was wrong. Could cause a crash.
+(Peters)
+
+GUI: When checking for a ".gvimrc" file in the current directory, didn't check
+for a "_gvimrc" file too.
+
+Motif GUI: When using the popup menu and then adding an item to the menu bar,
+the menu bar would get very high.
+
+Mouse clicks and special keys (e.g. cursor keys) quit the more prompt and
+dialogs. Now they are ignored.
+
+When at the more-prompt, xterm selection didn't work. Now use the 'r' flag in
+'mouse' also for the more-prompt.
+
+When selecting a Visual area of more than 1023 lines, with 'guioptions' set to
+"a", could mess up the display because of a message in free_yank(). Removed
+that message, except for the Amiga.
+
+Moved auto-selection from ui_write() to the screen update functions. Avoids
+unexpected behavior from a low-level function. Also makes the different
+feedback of owning the selection possible.
+
+Vi incompatibility: Using "i<CR>" in an indent, with 'ai' set, used the
+original indent instead of truncating it at the cursor. (Webb)
+
+":echo x" didn't stop at "q" for the more prompt.
+
+Various fixes for Macintosh. (St-Amant)
+
+When using 'selectmode' set to "exclusive", selecting a word and then using
+CTRL-] included the character under the cursor.
+
+Using ":let a:name" in a function caused a crash. (Webb)
+
+When using ":append", an empty line didn't scroll up.
+
+DOS etc.: A file name starting with '!' didn't work. Added '!' to default for
+'isfname'.
+
+BeOS: Compilation problem with prototype of skip_class_name(). (Price)
+
+When deleting more than one line, e.g., with "de", could still use "U"
+command, which didn't work properly then.
+
+Amiga: Could not compile ex_docmd.c, it was getting too big. Moved some
+functions to ex_cmds.c.
+
+The expand() function would add a trailing slash for directories.
+
+Didn't give an error message when trying to assign a value to an argument of a
+function. (Webb)
+
+Moved including sys/ptem.h to after termios.h. Needed for Sinix.
+
+OLE interface: Don't delete the object in CVimCF::Release() when the reference
+count becomes zero. (Cordell)
+VisVim could still crash on exit. (Erhardt)
+
+"case a: case b:" (two case statements in one line) aligned with the second
+case. Now it uses one 'sw' for indent. (Webb)
+
+Font initialisation wasn't right for Athena/Motif GUI. Moved the call to
+highlight_gui_started() gui_mch_init() to gui_mch_open(). (Nam)
+
+In Replace mode, backspacing over a TAB before where the replace mode started
+while 'sts' is different from 'ts', would delete the TAB.
+
+Win32 console: When executing external commands and switching between the two
+console screens, Vim would copy the text between the buffers. That caused the
+screen to be messed up for backtick expansion.
+
+":winpos -1" then ":winpos" gave wrong error message.
+
+Windows commander creates files called c:\tmp\$wc\abc.txt. Don't remove the
+backslash before the $. Environment variables were not expanded anyway,
+because of the backslash before the dollar.
+
+Using "-=" with ":set" could remove half a part when it contains a "\,".
+E.g., ":set path+=a\\,b" and then "set path-=b" removed ",b".
+
+When Visually selecting lines, with 'selection' set to "inclusive", including
+the last char of the line, "<<" moved an extra line. Also for other operators
+that always work on lines.
+
+link.sh changed "-lnsl_s" to "_s" when looking for "nsl" to be removed.
+Now it only remove whole words.
+
+When jumped to a mark or using "fz", and there is an error, the current column
+was lost. E.g. when using "$fzj".
+
+The "g CTRL-G" command could not be interrupted, even though it can take a
+long time.
+
+Some terminals do have <F4> and <xF4>. <xF4> was always interpreted as <F4>.
+Now map <xF4> to <F4>, so that the user can override this.
+
+When compiling os_win32.c with MIN_FEAT the apply_autocmds() should not be
+used. (Aaron)
+
+This autocommand looped forever: ":au FileChangedShell * nested e <afile>"
+Now FileChangeShell never nests. (Roemer)
+
+When evaluating an ":elseif" that was not going to matter anyway, ignore
+errors. (Roemer)
+
+GUI Lesstif: Tearoff bar was the last item, instead of the first.
+
+GUI Motif: Colors of tear-off widgets was wrong when 't' flag added to
+'guioptions' afterwards. When 't' flag in 'guioptions' is excluded, would
+still get a tearoff item in a new menu.
+
+An inode number can be "long long". Use ino_t instead of long. Added
+configure check for ino_t.
+
+Binary search for tags was using a file offset "long" instead of "off_t".
+
+Insert mode completion of tags was not using 'ignorecase' properly.
+
+In Insert mode, the <xFn> keys were not properly mapped to <Fn> for the
+default mappings. Also caused errors for ":mkvimrc" and ":mksession".
+
+When jumping to another window while in Insert mode, would get the "warning:
+changing readonly file" even when not making a change.
+
+A '(' or '{' inside a trailing "//" comment would disturb C-indenting.
+When using two labels below each other, the second one was not indented
+properly. Comments could mess up C-indenting in many places. (Roemer)
+
+Could delete or redefine a function while it was being used. Could cause a
+crash.
+In a function it's logical to prepend "g:" to a system variable, but this
+didn't work. (Roemer)
+
+Hangul input: Buffer would overflow when user inputs invalid key sequence.
+(Nam)
+
+When BufLoad or BufEnter autocommands change the topline of the buffer in the
+window, it was overruled and the cursor put halfway the window. Now only put
+the cursor halfway if the autocommands didn't change the topline.
+
+Calling exists("&option") always returned 1. (Roemer)
+
+Win32: Didn't take actually available memory into account. (Williams)
+
+White space after an automatically inserted comment leader was not removed
+when 'ai' is not set and <CR> hit just after inserting it. (Webb)
+
+A few menus had duplicated accelerators. (Roemer)
+
+Spelling errors in documentation, quite a few "the the". (Roemer)
+
+Missing prototypes for Macintosh. (Kielhorn)
+
+Win32: When using 'shellquote' or 'shellxquote', the "!start cmd" wasn't
+executed in a disconnected process.
+
+When resizing the window, causing a line before the cursor to wrap or unwrap,
+the cursor was displayed in the wrong position.
+
+There was quite a bit of dead code when compiling with minimal features.
+
+When doing a ":%s///" command that makes lines shorter, such that lines above
+the final cursor position no longer wrap, the cursor position was not updated.
+
+get_id_list() could allocate an array one too small, when a "contains=" item
+has a wildcard that matches a group name that is added just after it. E.g.:
+"contains=a.*b,axb". Give an error message for it.
+
+When yanking a Visual area and using the middle mouse button -> crash. When
+clipboard doesn't work, now make "* always use "".
+
+Win32: Using ":buf a\ b\file" didn't work, it was interpreted as "ab\file".
+
+Using ":ts ident", then hit <CR>, with 'cmdheight' set to 2: command line was
+not cleared, the tselect prompt was on the last but one line.
+
+mksession didn't restore the cursor column properly when it was after a tab.
+Could not get all windows back when using a smaller terminal screen. Didn't
+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
+file names are case sensitive or not (like when expanding file names).
+
+Win32 GUI: (Negri)
+- Redrawing the background caused flicker when resizing the window. Removed
+ _OnEraseBG(). Removed CS_HREDRAW and CS_VREDRAW flags from the
+ sndclass.style.
+- Some parts of the window were drawn in grey, instead of using the color from
+ the user color scheme.
+- Dropping a file on gvim didn't activate the window.
+- When there is no menu ('guioptions' excludes 'm'), never use the ALT key for
+ it.
+
+GUI: When resizing the window, would make the window height a bit smaller.
+Now round off to the nearest char cell size. (Negri)
+
+In Vi the ")" and "(" commands don't stop at a single space after a dot.
+Added 'J' flag in 'cpoptions' to make this behave Vi compatible. (Roemer)
+
+When saving a session without any buffers loaded, there would be a ":normal"
+command without arguments in it. (Webb)
+
+Memory leaks fixed: (Madsen)
+- eval.c: forgot to release func structure when func deleted
+- ex_docmd.c: forgot to release string after "<sfile>"
+- misc1.c: leak when completion pattern had no matches.
+- os_unix.c: forgot to release regexp after file completions
+
+Could crash when using a buffer without a name. (Madsen)
+Could crash when doing file name completion, because of backslash_halve().
+(Madsen)
+
+":@a" would do mappings on register a, which is not Vi compatible. (Roemer)
+
+":g/foo.*()/s/foobar/_&/gc" worked fine, but then "n" searched for "foobar"
+and displayed "/foo.*()". (Roemer)
+
+OS/2: get_cmd_output() was not included. Didn't check for $VIM/.vimrc file.
+
+Command line completion of options didn't work after "+=" and "-=".
+
+Unix configure: Test for memmove()/bcopy()/memcpy() tried redefining these
+functions, which could fail if they are defined already. Use mch_memmove() to
+redefine.
+
+Unix: ":let a = expand("`xterm`&")" started an xterm asynchronously, but
+":let a = expand("`xterm&`")" generated an error message, because the
+redirection was put after the '&'.
+
+Win32 GUI: Dialog buttons could not be selected properly with cursor keys,
+when the default is not the first button. (Webb)
+
+The "File has changed since editing started" (when regaining focus) could not
+always be seen. (Webb)
+
+When starting with "ex filename", the file message was overwritten with
+the "entering Ex mode" message.
+
+Output of ":tselect" listed name of file directly from the tags file. Now it
+is corrected for the position of the tags file.
+
+When 'backspace' is 0, could backspace over autoindent. Now it is no longer
+allowed (Vi compatible).
+
+In Replace mode, when 'noexpandtab' and 'smarttab' were set, and inserting
+Tabs, backspacing didn't work correctly for Tabs inserted at the start of the
+line (unless 'sts' was set too). Also, when replacing the first non-blank
+after which is a space, rounding the indent was done on the first non-blank
+instead of on the character under the cursor.
+
+When 'sw' at 4, 'ts' at 8 and 'smarttab' set: When a tab was appended after
+four spaces (they are replaced with a tab) couldn't backspace over the tab.
+
+In Insert mode, with 'bs' set to 0, couldn't backspace to before autoindent,
+even when it was removed with CTRL-D.
+
+When repeating an insert command where a <BS>, <Left> or other key causes an
+error, would flush buffers and remain in Insert mode. No longer flush
+buffers, only beep and continue with the insert command.
+
+Dos and Win32 console: Setting t_me didn't work to get another color. Made
+this works backwards compatible.
+
+For turkish (LANG = "tr") uppercase 'i' is not an 'I'. Use ASCII uppercase
+translation in vim_strup() to avoid language problems. (Komur)
+
+Unix: Use usleep() or nanosleep() for mch_delay() when available. Hopefully
+this avoids a hangup in select(0, ..) for Solaris 2.6.
+
+Vim would crash when using a script file with 'let &sp = "| tee"', starting
+vim with "vim -u test", then doing ":set sp=". The P_WAS_SET flag wasn't set
+for a string option, could cause problems with any string option.
+
+When using "cmd | vim -", stdin is not a terminal. This gave problems with
+GPM (Linux console mouse) and when executing external commands. Now close
+stdin and re-open it as a copy of stderr.
+
+Syntax highlighting: A "nextgroup" item was not properly stored in the state
+list. This caused missing of next groups when not redrawing from start to
+end, but starting halfway.
+
+Didn't check for valid values of 'ttymouse'.
+
+When executing an external command from the GUI, waiting for the child to
+terminate might not work, causing a hang. (Parmelan)
+
+"make uninstall" didn't delete the vimrc_example.vim and gvimrc_example.vim
+files and the vimtutor.
+
+Win32: "expand("%:p:h")" with no buffer name removed the directory name.
+"fnamemodify("", ":p")" did not add a trailing slash, fname_case() removed it.
+
+Fixed: When 'hlsearch' was set and the 'c' flag was not in 'cpoptions':
+highlighting was not correct. Now overlapping matches are handled correctly.
+
+Athena, Motif and GTK GUI: When started without focus, cursor was shown as if
+with focus.
+
+Don't include 'shellpipe' when compiled without quickfix, it's not used.
+Don't include 'dictionary' option when compiled without the +insert_expand
+feature.
+Only include the 'shelltype' option for the Amiga.
+
+When making a change to a line, with 'hlsearch' on, causing it to wrap, while
+executing a register, the screen would not be updated correctly. This was a
+generic problem in update_screenline() being called while must_redraw is
+VALID.
+
+Using ":bdelete" in a BufUnload autocommand could cause a crash. The window
+height was added to another window twice in close_window().
+
+Win32 GUI: When removing a menu item, the tearoff wasn't updated. (Negri)
+
+Some performance bottlenecks removed. Allocating memory was not efficient.
+For Win32 checking for available memory was slow, don't check it every time
+now. On NT obtaining the user name takes a long time, cache the result (for
+all systems).
+
+fnamemodify() with an argument ":~:." or ":.:~" didn't work properly.
+
+When editing a new file and exiting, the marks for the buffer were not saved
+in the viminfo file.
+
+":confirm only" didn't put up a dialog.
+
+These text objects didn't work when 'selection' was "exclusive": va( vi( va{
+vi{ va< vi< vi[ va[.
+
+The dialog for writing a readonly file didn't have a valid default. (Negri)
+
+The line number used for error messages when sourcing a file was reset when
+modelines were inspected. It was wrong when executing a function.
+
+The file name and line number for an error message wasn't displayed when it
+was the same as for the last error, even when this was long ago. Now reset
+the name/lnum after a hit-enter prompt.
+
+In a session file, a "%" in a file name caused trouble, because fprintf() was
+used to write it to the file.
+
+When skipping statements, a mark in an address wasn't skipped correctly:
+"ka|if 0|'ad|else|echo|endif". (Roemer)
+
+":wall" could overwrite a not-edited file without asking.
+
+GUI: When $DISPLAY was not set or starting the GUI failed in another way, the
+console mode then started with wrong colors and skipped initializations. Now
+do an early check if the GUI can be started. Don't source the menu.vim or
+gvimrc when it will not. Also do normal terminal initializations if the GUI
+might not start.
+
+When using a BufEnter autocommand to position the cursor and scroll the
+window, the cursor was always put at the last used line and halfway the window
+anyhow.
+
+When 'wildmode' was set to "longest,list:full", ":e *.c<Tab><Tab>" didn't list
+the matches. Also avoid that listing after a "longest" lists the wrong
+matches when the first expansion changed the string in front of the cursor.
+
+When using ":insert", ":append" or ":change" inside a while loop, was not able
+to break out of it with a CTRL-C.
+
+Win32: ":e ." took an awful long time before an error message when used in
+"C:\". Was caused by adding another backslash and then trying to get the full
+name for "C:\\".
+
+":winpos -10 100" was working like ":winpos -10 -10", because a pointer was
+not advanced past the '-' sign.
+
+When obtaining the value of a hidden option, would give an error message. Now
+just use a zero value.
+
+OS/2: Was using argv[0], even though it was not a useful name. It could be
+just "vim", found in the search path.
+
+Xterm: ":set columns=78" didn't redraw properly (when lines wrap/unwrap) until
+after a delay of 'updatetime'. Didn't check for the size-changed signal.
+
+'scrollbind' didn't work in Insert mode.
+Horizontal scrollbinding didn't always work for "0" and "$" commands (e.g.,
+when 'showcmd' was off).
+
+When compiled with minimal features but with GUI, switching on the mouse in an
+xterm caused garbage, because the mouse codes were not recognized. Don't
+enable the mouse when it can't be recognized. In the GUI it also didn't work,
+the arguments to the mouse code were not interpreted.
+
+When 'showbreak' used, in Insert mode, when the cursor is just after the last
+character in the line, which is also the in the rightmost column, the cursor
+position would be like the 'showbreak' string is shown, but it wasn't.
+
+Autocommands could move the cursor in a new file, so that CTRL-W i didn't show
+the right line. Same for when using a filemark to jump to another file.
+
+When redefining the argument list, the title used for other windows could be
+showing the wrong info about the position in the argument list. Also update
+this for a ":split" command without arguments.
+
+When editing file 97 of 13, ":Next" didn't work. Now it goes to the last
+file in the argument list.
+
+Insert mode completion (for dictionaries or included files) could not be
+interrupted by typing an <Esc>. Could get hit-enter prompt after line
+completion, or whenever the informative message would get too long.
+
+When using the ":edit" command to re-edit the same file, an autocommand to
+jump to the last cursor position caused the cursor to move. Now set the last
+used cursor position to avoid this.
+
+When 'comments' has a part that starts with white space, formatting the
+comment didn't work.
+
+At the ":tselect" prompt Normal mode mappings were used. That has been
+disabled.
+
+When 'selection' is not "old", some commands still didn't allow the cursor
+past the end-of-line in Visual mode.
+
+Athena: When a menu was deleted, it would appear again (but not functional)
+when adding another menu. Now they don't reappear anymore (although they are
+not really deleted either).
+
+Borland C++ 4.x had an optimizer problem in fill_breakat_flags(). (Negri)
+
+"ze" didn't work when 'number' was on. (Davis)
+
+Win32 GUI: Intellimouse code didn't work properly on Windows 98. (Robinson)
+
+A few files were including proto.h a second time, after vim.h had already done
+that, which could cause problems with the vim_realloc() macro.
+
+Win32 console: <M-x> or ALT-x was not recognized. Also keypad '+', '-' and
+'*'. (Negri)
+MS-DOS: <M-x> didn't work, produced a two-byte code. Now the alphabetic and
+number keys work. (Negri)
+
+When finding a lot of matches for a tag completion, the check for avoiding
+double matches could take a lot of time. Add a line_breakcheck() to be able
+to interrupt this. (Deshpande)
+
+When the command line was getting longer than the screen, the more-prompt
+would be given regularly, and the cursor position would be wrong. Now only
+show the part of the command line that fits on the screen and force the cursor
+to be positioned on the visible part. There can be text after the cursor
+which isn't editable.
+
+At the more prompt and with the console dialog, a cursor key was interpreted
+as <Esc> and OA. Now recognize special keys in get_keystroke(). Ignore mouse
+and scrollbar events.
+
+When typing a BS after inserting a middle comment leader, typing the last char
+of the end comment leader still changed it into the end comment leader. (Webb)
+
+When a file system is full, writing to a swap file failed. Now first try to
+write one block to the file. Try next entry in 'dir' if it fails.
+
+When "~" is in 'whichwrap', doing "~" on last char of a line didn't update the
+display.
+
+Unix: Expanding wildcards for ":file {\\}" didn't work, because "\}" was
+translated to "}" before the shell got it. Now don't remove backslashes when
+wildcards are going to be expanded.
+
+Unix: ":e /tmp/$uid" didn't work. When expanding environment variables in a
+file name doesn't work, use the shell to expand the file name. ":e /tmp/$tty"
+still doesn't work though.
+
+"make test" didn't always work on DOS/Windows for test30, because it depended
+on the external "echo" command.
+
+The link.sh script used "make" instead of $MAKE from the Makefile. Caused
+problems for generating pathdef.c when "make" doesn't work properly.
+
+On versions that can do console and GUI: In the console a typed CSI code could
+cause trouble.
+
+The patterns in expression evaluation didn't ignore the 'l' flag in
+'cpoptions'. This broke the working of <CR> in the options window.
+
+When 'hls' off and 'ai' on, "O<Esc>" did remove the indent, but it was still
+highlighted red for trailing space.
+
+Win32 GUI: Dropping an encrypted file on a running gvim didn't work right. Vim
+would loop while outputting "*" characters. vgetc() was called recursively,
+thus it returns NUL. Added safe_vgetc(), which reads input directly from the
+user in this situation.
+
+While reading text from stdin, only an empty screen was shown. Now show that
+Vim is reading from stdin.
+
+The cursor shape wasn't set properly when returning to Insert mode, after
+using a CTRL-O /asdf command which fails. It would be OK after a few seconds.
+Now it's OK right away.
+
+The 'isfname' default for DOS/Windows didn't include the '@' character. File
+names that contained "dir\@file" could not be edited.
+
+Win32 console: <C-S-Left> could cause a crash when compiled with Borland or
+egcs. (Aaron)
+
+Unix and VMS: "#if HAVE_DIRENT_H" caused problems for some compilers. Use
+"#ifdef HAVE_DIRENT_H" instead. (Jones)
+
+When a matching tag is in the current file but has a search pattern that
+doesn't match, the cursor would jump to the first line.
+
+Unix: Dependencies for pty.c were not included in Makefile. Dependency of
+ctags/config.h was not included (only matters for parallel make).
+
+Removed a few Uninitialized Memory Reads (potential crashes). In do_call()
+calling clear_var() when not evaluating. In win32_expandpath() and
+dos_expandpath() calling backslash_halve() past the end of a file name.
+
+Removed memory leaks: Set_vim_var_string() never freed the value. The
+next_list for a syntax keyword was never freed.
+
+On non-Unix systems, using a file name with wildcards without a match would
+silently fail. E.g., ":e *.sh". Now give a "No match" error message.
+
+The life/life.mac, urm/urm.mac and hanoi/hanoi.mac files were not recognized
+as Vim scripts. Renamed them to *.vim.
+
+[Note: some numbered patches are not relevant when upgrading from version 5.3,
+they have been removed]
+
+Patch 5.4m.1
+Problem: When editing a file with a long name, would get the hit-enter
+ prompt, even though all settings are such that the name should be
+ truncated to avoid that. filemess() was printing the file name
+ without truncating it.
+Solution: Truncate the message in filemess(). Use the same code as for
+ msg_trunc_attr(), which is moved to the new function
+ msg_may_trunc().
+Files: src/message.c, src/proto/message.pro, src/fileio.c
+
+Patch 5.4m.3
+Problem: The Motif libraries were not found by configure for Digital Unix.
+Solution: Add "/usr/shlib" to the search path. (Andy Kahn)
+Files: src/configure.in, src/configure
+
+Patch 5.4m.5
+Problem: Win32 GUI: When using the Save-As menu entry and selecting an
+ existing file in the file browser, would get a dialog to confirm
+ overwriting twice. (Ed Krall)
+Solution: Removed the dialog from the file browser. It would be nicer to
+ set the "forceit" flag and skip Vim's ":confirm" dialog, but it
+ requires quite a few changes to do that.
+Files: src/gui_w32.c
+
+Patch 5.4m.6
+Problem: Win32 GUI: When reading text from stdin, e.g., "cat foo | gvim -",
+ a message box would pop up with "-stdin-" (when exiting). (Michael
+ Schaap)
+Solution: Don't switch off termcap mode for versions that are GUI-only.
+ They use another terminal to read from stdin.
+Files: src/main.c, src/fileio.c
+
+Patch 5.4m.7
+Problem: Unix: running configure with --enable-gtk-check,
+ --enable-motif-check, --enable-athena-check or --enable-gtktest
+ had the reverse effect. (Thomas Koehler)
+Solution: Use $enable_gtk_check variable correctly in AC_ARG_ENABLE().
+Files: src/configure.in, src/configure
+
+Patch 5.4m.9
+Problem: Multi-byte: With wrapping lines, the cursor was sometimes 2
+ characters to the left. Syntax highlighting was wrong when a
+ double-byte character was split for a wrapping line. When
+ 'showbreak' was on the splitting also didn't work.
+Solution: Adjust getvcol() and win_line(). (Chong-Dae Park)
+Files: src/charset.c, src/screen.c
+
+Patch 5.4m.11
+Problem: The ":call" command didn't check for illegal trailing characters.
+ (Stefan Roemer)
+Solution: Add the check in do_call().
+Files: src/eval.c
+
+Patch 5.4m.13
+Problem: With the ":s" command:
+ 1. When performing a substitute command, the mouse would be
+ disabled and enabled for every substitution.
+ 2. The cursor position could be beyond the end of the line.
+ Calling line_breakcheck() could try to position the cursor,
+ which causes a crash in the Win32 GUI.
+ 3. When using ":s" in a ":g" command, the cursor was not put on
+ the first non-white in the line.
+ 4. There was a hit-enter prompt when confirming the substitution
+ and the replacement was a bit longer.
+Solution: 1. Only disable/enable the mouse when asking for confirmation.
+ 2. Always put the cursor on the first character, it is going to be
+ moved to the first non-blank anyway.
+ Don't use the cursor position in gui_mch_draw_hollow_cursor(),
+ get the character from the screen buffer.
+ 3. Added global_need_beginline flag to call beginline() after ":g"
+ has finished all substitutions.
+ 4. Clear the need_wait_return flag after prompting the user.
+Files: src/ex_cmds.c, src/gui_w32.c
+
+Patch 5.4m.14
+Problem: When doing "vim xxx", ":opt", ":only" and then ":e xxx" we end
+ up with two swapfiles for "xxx". That is caused by the ":bdel"
+ command which is executed when unloading the option-window.
+ Also, there was no check if closing a buffer made the new one
+ invalid, this could cause a crash.
+Solution: When closing a buffer causes the current buffer to be deleted,
+ use the new buffer to replace it. Also detect that the new buffer
+ has become invalid as a side effect of closing the current one.
+ Make autocommand that calls ":bdel" in optwin.vim nested, so that
+ the buffer loading it triggers also executes autocommands.
+ Also added a test for this in test13.
+Files: runtime/optwin.vim, src/buffer.c, src/ex_cmds.c, src/globals.h
+ src/testdir/test13.in, src/testdir/test13.ok
+
+Patch 5.4m.15
+Problem: When using a BufEnter autocommand to reload the syntax file,
+ conversion to HTML caused a crash. (Sung-Hyun Nam)
+Solution: When using ":syntax clear" the current stack of syntax items was
+ not cleared. This will cause memory to be used that has already
+ been freed. Added call to invalidate_current_state() in
+ syntax_clear().
+Files: src/syntax.c
+
+Patch 5.4m.17
+Problem: When omitting a ')' in an expression it would not be seen as a
+ failure.
+ When detecting an error inside (), there would be an error message
+ for a missing ')' too.
+ When using ":echo 1+|echo 2" there was no error message. (Roemer)
+ When using ":exe 1+" there was no error message.
+ When using ":return 1+" there was no error message.
+Solution: Fix do_echo(), do_execute() and do_return() to give an error
+ message when eval1() returns FAIL.
+ Fix eval6() to handle trailing ')' correctly and return FAIL when
+ it's missing.
+Files: src/eval.c
+
+Patch 5.4m.18
+Problem: When using input() from inside an expression entered with
+ "CTRL-R =" on the command line, there could be a crash. And the
+ resulting command line was wrong.
+Solution: Added getcmdline_prompt(), which handles recursive use of
+ getcmdline() correctly. It also sets the command line prompt.
+ Removed cmdline_prompt(). Also use getcmdline_prompt() for
+ getting the crypt key in get_crypt_key().
+Files: src/proto/ex_getln.pro, src/ex_getln.c, src/eval.c, src/misc2.c
+
+Patch 5.4m.21
+Problem: When starting up, the screen structures were first allocated at
+ the minimal size, then initializations were done with Rows
+ possibly different from screen_Rows. Caused a crash in rare
+ situations (GTK with XIM and fontset).
+Solution: Call screenalloc() in main() only after calling ui_get_winsize().
+ Also avoids a potential delay because of calling screenclear()
+ while "starting" is non-zero.
+Files: src/main.c
+
+Patch 5.4m.22
+Problem: In the GUI it was possible that the screen was resized and the
+ screen structures re-allocated while redrawing the screen. This
+ could cause a crash (hard to reproduce). The call sequence goes
+ through update_screen() .. syntax_start() .. ui_breakcheck() ..
+ gui_resize_window() .. screenalloc().
+Solution: Set updating_screen while redrawing. If the window is resized
+ remember the new size and handle it only after redrawing is
+ finished.
+ This also fixes that resizing the screen while still redrawing
+ (slow syntax highlighting) would not work properly.
+ Also disable display_hint, it was never used.
+Files: src/globals.h, src/gui.c, src/screen.c, src/proto/gui.pro
+
+Patch 5.4m.23
+Problem: When using expand("<cword>") when there was no word under the
+ cursor, would get an error message. Same for <cWORD> and <cfile>.
+Solution: Don't give an error message, return an empty string.
+Files: src/eval.c
+
+Patch 5.4m.24
+Problem: ":help \|" didn't find anything. It was translated to "/\\|".
+Solution: Translate "\|" into "\\bar". First check the table for specific
+ translations before checking for "\x".
+Files: src/ex_cmds.c
+
+Patch 5.4m.25
+Problem: Unix: When using command line completion on files that contain
+ ''', '"' or '|' the file name could not be used.
+ Adding this file name to the Buffers menu caused an error message.
+Solution: Insert a backslash before these three characters.
+ Adjust Mungename() function to insert a backslash before '|'.
+Files: src/ex_getln.c, runtime/menu.vim
+
+Patch 5.4m.26
+Problem: When using a mapping of two function keys, e.g., <F1><F1>, and
+ only the first char of the second key has been read, the mapping
+ would not be recognized. Noticed on some Unix systems with xterm.
+Solution: Add 'K' flag to 'cpoptions' to wait for the whole key code, even
+ when halfway a mapping.
+Files: src/option.h, src/term.c
+
+Patch 5.4m.27
+Problem: When making test33 without the lisp feature it hangs. Interrupting
+ the execution of the script then might cause a crash.
+Solution: In inchar(), after closing a script, don't use buf[] anymore.
+ closescript() has freed typebuf[] and buf[] might be pointing
+ inside typebuf[].
+ Avoid that test33 hangs when the lisp feature is missing.
+Files: src/getchar.c src/testdir/test33.in
+
+"os2" was missing from the feature list. Useful for has("os2").
+
+BeOS:
+- Included patches from Richard Offer for BeOS R4.5.
+- menu code didn't work right. Crashed in the Buffers menu. The window title
+ wasn't set. (Offer)
+
+Patch 5.4n.3
+Problem: C-indenting was wrong after " } else". The white space was not
+ skipped. Visible when 'cino' has "+10".
+Solution: Skip white space before calling cin_iselse(). (Norbert Zeh)
+Files: src/misc1.c
+
+Patch 5.4n.4
+Problem: When the 't' flag in 'cpoptions' is included, after a
+ ":nohlsearch" the search highlighting would not be enabled again
+ after a tag search. (Norbert Zeh)
+Solution: When setting the new search pattern in jumpto_tag(), don't restore
+ no_hlsearch.
+Files: src/tag.c
+
+Patch 5.4n.5
+Problem: When using ":normal" from a CursorHold autocommand Vim hangs. The
+ autocommand is executed down from vgetc(). Calling vgetc()
+ recursively to execute the command doesn't work then.
+Solution: Forbid the use of ":normal" when vgetc_busy is set. Give an error
+ message when this happens.
+Files: src/ex_docmd.c, runtime/doc/autocmd.txt
+
+Patch 5.4n.6
+Problem: "gv" could reselect a Visual that starts and/or ends past the end
+ of a line. (Robert Webb)
+Solution: Check that the start and end of the Visual area are on a valid
+ character by calling adjust_cursor().
+Files: src/normal.c
+
+Patch 5.4n.8
+Problem: When a mark was on a non existing line (e.g., when the .viminfo
+ was edited), jumping to it caused ml_get errors. (Alexey
+ Marinichev).
+Solution: Added check_cursor_lnum() in nv_gomark().
+Files: src/normal.c
+
+Patch 5.4n.9
+Problem: ":-2" moved the cursor to a negative line number. (Ralf Schandl)
+Solution: Give an error message for a negative line number.
+Files: src/ex_docmd.c
+
+Patch 5.4n.10
+Problem: Win32 GUI: At the hit-enter prompt, it was possible to scroll the
+ text. This erased the prompt and made Vim look like it is in
+ Normal mode, while it is actually still waiting for a <CR>.
+Solution: Disallow scrolling at the hit-enter prompt for systems that use
+ on the fly scrolling.
+Files: src/message.c
+
+Patch 5.4n.14
+Problem: Win32 GUI: When using ":winsize 80 46" and the height is more than
+ what fits on the screen, the window size was made smaller than
+ asked for (that's OK) and Vim crashed (that's not OK)>
+Solution: Call check_winsize() from gui_set_winsize() to resize the windows.
+Files: src/gui.c
+
+Patch 5.4n.16
+Problem: Win32 GUI: The <F10> key both selected the menu and was handled as
+ a key hit.
+Solution: Apply 'winaltkeys' to <F10>, like it is used for Alt keys.
+Files: src/gui_w32.c
+
+Patch 5.4n.17
+Problem: Local buffer variables were freed when the buffer is unloaded.
+ That's not logical, since options are not freed. (Ron Aaron)
+Solution: Free local buffer variables only when deleting the buffer.
+Files: src/buffer.c
+
+Patch 5.4n.19
+Problem: Doing ":e" (without argument) in an option-window causes trouble.
+ The mappings for <CR> and <Space> are not removed. When there is
+ another buffer loaded, the swap file for it gets mixed up.
+ (Steve Mueller)
+Solution: Also remove the mappings at the BufUnload event, if they are still
+ present.
+ When re-editing the same file causes the current buffer to be
+ deleted, don't try editing it.
+ Also added a test for this situation.
+Files: runtime/optwin.vim, src/ex_cmds.c, src/testdir/test13.in,
+ src/testdir/test13.ok
+
+Patch 5.4n.24
+Problem: BeOS: configure never enabled the GUI, because $with_x was "no".
+ Unix prototypes caused problems, because Display and Widget are
+ undefined.
+ Freeing fonts on exit caused a crash.
+Solution: Only disable the GUI when $with_x is "no" and $BEOS is not "yes".
+ Add dummy defines for Display and Widget in proto.h.
+ Don't free the fonts in gui_exit() for BeOS.
+Files: src/configure.in, src/configure, src/proto.h, src/gui.c.
+
+
+The runtime/vim48x48.xpm icon didn't have a transparent background. (Schild)
+
+Some versions of the mingw32/egcs compiler didn't have WINBASEAPI defined.
+(Aaron)
+
+VMS:
+- mch_setenv() had two arguments instead of three.
+- The system vimrc and gvimrc files were called ".vimrc" and ".gvimrc".
+ Removed the dot.
+- call to RealWaitForChar() had one argument too many. (Campbell)
+- WaitForChar() is static, removed the prototype from proto/os_vms.pro.
+- Many file accesses failed, because Unix style file names were used.
+ Translate file names to VMS style by using vim_fopen().
+- Filtering didn't work, because the temporary file name was generated wrong.
+- There was an extra newline every 9192 characters when writing a file. Work
+ around it by writing line by line. (Campbell)
+- os_vms.c contained "# typedef int DESC". Should be "typedef int DESC;".
+ Only mattered for generating prototypes.
+- Added file name translation to many places. Made easy by defining macros
+ mch_access(), mch_fopen(), mch_fstat(), mch_lstat() and mch_stat().
+- Set default for 'tagbsearch' to off, because binary tag searching apparently
+ doesn't work for VMS.
+- make mch_get_host_name() work with /dec and /standard=vaxc. (Campbell)
+
+
+Patch 5.4o.2
+Problem: Crash when using "gf" on "file.c://comment here". (Scott Graham)
+Solution: Fix wrong use of pointers in get_file_name_in_path().
+Files: src/window.c
+
+Patch 5.4o.3
+Problem: The horizontal scrollbar was not sized correctly when 'number' is
+ set and 'wrap' not set.
+ Athena: Horizontal scrollbar wasn't updated when the cursor was
+ positioned with a mouse click just after dragging.
+Solution: Subtract 8 from the size when 'number' set and 'wrap' not set.
+ Reset gui.dragged_sb when a mouse click is received.
+Files: src/gui.c
+
+Patch 5.4o.4
+Problem: When running in an xterm and $WINDOWID is set to an illegal value,
+ Vim would exit with "Vim: Got X error".
+Solution: When using the display which was opened for the xterm clipboard,
+ check if x11_window is valid by trying to obtain the window title.
+ Also add a check in setup_xterm_clip(), for when using X calls to
+ get the pointer position in an xterm.
+Files: src/os_unix.c
+
+Patch 5.4o.5
+Problem: Motif version with Lesstif: When removing the menubar and then
+ using a menu shortcut key, Vim would crash. (raf)
+Solution: Disable the menu mnemonics when the menu bar is removed.
+Files: src/gui_motif.c
+
+Patch 5.4o.9
+Problem: The DOS install.exe program used the "move" program. That doesn't
+ work on Windows NT, where "move" is internal to cmd.exe.
+Solution: Don't use an external program for moving the executables. Use C
+ functions to copy the file and delete the original.
+Files: src/dosinst.c
+
+Motif and Athena obtained the status area height differently from GTK. Moved
+status_area_enabled from global.h to gui_x11.c and call
+xim_get_status_area_height() to get the status area height.
+
+Patch 5.4p.1
+Problem: When using auto-select, and the "gv" command is used, would not
+ always obtain ownership of the selection. Caused by the Visual
+ area still being the same, but ownership taken away by another
+ program.
+Solution: Reset the clipboard Visual mode to force updating the selection.
+Files: src/normal.c
+
+Patch 5.4p.2
+Problem: Motif and Athena with XIM: Typing 3-byte
+ <multibyte><multibyte><space> doesn't work correctly with Ami XIM.
+Solution: Avoid using key_sym XK_VoidSymbol. (Nam)
+Files: src/multbyte.c, src/gui_x11.c
+
+Patch 5.4p.4
+Problem: Win32 GUI: The scrollbar values were reduced for a file with more
+ than 32767 lines. But this info was kept global for all
+ scrollbars, causing a mixup between the windows.
+ Using the down arrow of a scrollbar in a large file didn't work.
+ Because of round-off errors there is no scroll at all.
+Solution: Give each scrollbar its own scroll_shift field. When the down
+ arrow is used, scroll several lines.
+Files: src/gui.h, src/gui_w32.c
+
+Patch 5.4p.5
+Problem: When changing buffers in a BufDelete autocommand, there could be
+ ml_line errors and/or a crash. (Schandl) Was caused by deleting
+ the current buffer.
+Solution: When the buffer to be deleted unexpectedly becomes the current
+ buffer, don't delete it.
+ Also added a check for this in test13.
+Files: src/buffer.c, src/testdir/test13.in, src/testdir/test13.ok
+
+Patch 5.4p.7
+Problem: Win32 GUI: When using 'mousemodel' set to "popup_setpos" and
+ clicking the right mouse button outside of the selected area, the
+ selected area wasn't removed until the popup menu has gone.
+ (Aaron)
+Solution: Set the cursor and update the display before showing the popup
+ menu.
+Files: src/normal.c
+
+Patch 5.4p.8
+Problem: The generated bugreport didn't contain information about
+ $VIMRUNTIME and whether runtime files actually exist.
+Solution: Added a few checks to the bugreport script.
+Files: runtime/bugreport.vim
+
+Patch 5.4p.9
+Problem: The windows install.exe created a wrong entry in the popup menu.
+ The "%1" was "". The full directory was included, even when the
+ executable had been moved elsewhere. (Ott)
+Solution: Double the '%' to get one from printf. Only include the path to
+ gvim.exe when it wasn't moved and it's not in $PATH.
+Files: src/dosinst.c
+
+Patch 5.4p.10
+Problem: Win32: On top of 5.4p.9: The "Edit with Vim" entry sometimes used
+ a short file name for a directory.
+Solution: Change the "%1" to "%L" in the registry entry.
+Files: src/dosinst.c
+
+Patch 5.4p.11
+Problem: Motif, Athena and GTK: When closing the GUI window when there is a
+ changed buffer, there was only an error message and Vim would not
+ exit.
+Solution: Put up a dialog, like for ":confirm qa". Uses the code that was
+ already used for MS-Windows.
+Files: src/gui.c, src/gui_w32.c
+
+Patch 5.4p.12
+Problem: Win32: Trying to expand a string that is longer than 256
+ characters could cause a crash. (Steed)
+Solution: For the buffer in win32_expandpath() don't use a fixed size array,
+ allocate it.
+Files: src/os_win32.c
+
+MSDOS: Added "-Wall" to Makefile.djg compile flags. Function prototypes for
+fname_case() and mch_update_cursor() were missing. "fd" was unused in
+mf_sync(). "puiLocation" was unused in myputch(). "newcmd" unused in
+mch_call_shell() for DJGPP version.
+
+==============================================================================
+VERSION 5.5 *version-5.5*
+
+Version 5.5 is a bug-fix version of 5.4.
+
+
+Changed *changed-5.5*
+-------
+
+The DJGPP version is now compiled with "-O2" instead of "-O4" to reduce the
+size of the executables.
+
+Moved the src/STYLE file to runtime/doc/develop.txt. Added the design goals
+to it.
+
+'backspace' is now a string option. See patch 5.4.15.
+
+
+Added *added-5.5*
+-----
+
+Included Exuberant Ctags version 3.3. (Darren Hiebert)
+
+In runtime/mswin.vim, map CTRL-Q to CTRL-V, so that CTRL-Q can be used
+everywhere to do what CTRL-V used to do.
+
+Support for decompression of bzip2 files in vimrc_example.vim.
+
+When a patch is included, the patch number is entered in a table in version.c.
+This allows skipping a patch without breaking a next one.
+
+Support for mouse scroll wheel in X11. See patch 5.5a.14.
+
+line2byte() can be used to get the size of the buffer. See patch 5.4.35.
+
+The CTRL-R CTRL-O r and CTRL-R CTRL-P r commands in Insert mode are used to
+insert a register literally. See patch 5.4.48.
+
+Uninstall program for MS-Windows. To be able to remove the registry entries
+for "Edit with Vim". It is registered to be run from the "Add/Remove
+programs" application. See patch 5.4.x7.
+
+
+Fixed *fixed-5.5*
+-----
+
+When using vimrc_example.vim: An error message when the cursor is on a line
+higher than the number of lines in the compressed file. Move the autocommand
+for jumping to the last known cursor position to after the decompressing
+autocommands.
+
+":mkexrc" and ":mksession" wrote the current value of 'textmode'. That may
+mark a file as modified, which causes problems. This is a buffer-specific
+setting, it should not affect all files.
+
+"vim --version" wrote two empty lines.
+
+Unix: The alarm signal could kill Vim. It is generated by the Perl alarm()
+function. Ignore SIGALRM.
+
+Win32 GUI: Toolbar still had the yellow bitmap for running a Vim script.
+
+BeOS: "tmo" must be bigtime_t, instead of double. (Seibert)
+
+Patch 5.4.1
+Problem: Test11 fails when $GZIP is set to "-v". (Matthew Jackson)
+Solution: Set $GZIP to an empty string.
+Files: src/testdir/test11.in
+
+Patch 5.4.2
+Problem: Typing <Esc> at the crypt key prompt caused a crash. (Kallingal)
+Solution: Check for a NULL pointer returned from get_crypt_key().
+Files: src/fileio.c
+
+Patch 5.4.3
+Problem: Python: Trying to use the name of an unnamed buffer caused a
+ crash. (Daniel Burrows)
+Solution: Check for b_fname being a NULL pointer.
+Files: src/if_python.c
+
+Patch 5.4.4
+Problem: Win32: When compiled without toolbar, but the 'T' flag is in
+ 'guioptions', there would be an empty space for the toolbar.
+Solution: Add two #ifdefs where checking for the 'T' flag. (Vince Negri)
+Files: src/gui.c
+
+Patch 5.4.5
+Problem: Athena GUI: Using the Buffers.Refresh menu entry caused a crash.
+ Looks like any ":unmenu" command may cause trouble.
+Solution: Disallow ":unmenu" in the Athena version. Disable the Buffers
+ menu, because the Refresh item would not work.
+Files: src/menu.c, runtime/menu.vim
+
+Patch 5.4.6
+Problem: GTK GUI: Using ":gui" in the .gvimrc file caused an error. Only
+ happens when the GUI forks.
+Solution: Don't fork in a recursive call of gui_start().
+Files: src/gui.c
+
+Patch 5.4.7
+Problem: Typing 'q' at the more prompt for the ATTENTION message causes the
+ file loading to be interrupted. (Will Day)
+Solution: Reset got_int after showing the ATTENTION message.
+Files: src/memline.c
+
+Patch 5.4.8
+Problem: Edit some file, ":he", ":opt": options from help window are shown,
+ but pressing space updates from the other window. (Phillipps)
+ Also: When there are changes in the option-window, ":q!" gives an
+ error message.
+Solution: Before creating the option-window, go to a non-help window.
+ Use ":bdel!" to delete the buffer.
+Files: runtime/optwin.vim
+
+Patch 5.4.9
+ Just updates version.h. The real patch has been moved to 5.4.x1.
+ This patch is just to keep the version number correct.
+
+Patch 5.4.10
+Problem: GTK GUI: When $DISPLAY is invalid, "gvim -f" just exits. It
+ should run in the terminal.
+Solution: Use gtk_init_check() instead of gtk_init().
+Files: src/gui_gtk_x11.c
+
+Patch 5.4.11
+Problem: When using the 'S' flag in 'cpoptions', 'tabstop' is not copied to
+ the next buffer for some commands, e.g., ":buffer".
+Solution: When the BCO_NOHELP flag is given to buf_copy_options(), still
+ copy the options used by do_help() when neither the "from" or "to"
+ buffer is a help buffer.
+Files: src/option.c
+
+Patch 5.4.12
+Problem: When using 'smartindent', there would be no extra indent if the
+ current line did not have any indent already. (Hanus Adler)
+Solution: There was a wrongly placed "else", that previously matched with
+ the "if" that set trunc_line. Removed the "else" and added a
+ check for trunc_line to be false.
+Files: src/misc1.c
+
+Patch 5.4.13
+Problem: New SGI C compilers need another option for optimisation.
+Solution: Add a check in configure for "-OPT:Olimit". (Chin A Young)
+Files: src/configure.in, src/configure
+
+Patch 5.4.14
+Problem: Motif GUI: When the popup menu is present, a tiny window appears
+ on the desktop for some users.
+Solution: Set the menu widget ID for a popup menu to 0. (Thomas Koehler)
+Files: src/gui_motif.c
+
+Patch 5.4.15
+Problem: Since 'backspace' set to 0 has been made Vi compatible, it is no
+ longer possible to only allow deleting autoindent.
+Solution: Make 'backspace' a list of parts, to allow each kind of
+ backspacing separately.
+Files: src/edit.c, src/option.c, src/option.h, src/proto/option.pro,
+ runtime/doc/option.txt, runtime/doc/insert.txt
+
+Patch 5.4.16
+Problem: Multibyte: Locale zh_TW.Big5 was not checked for in configure.
+Solution: Add zh_TW.Big5 to configure check. (Chih-Tsun Huang)
+Files: src/configure.in, src/configure
+
+Patch 5.4.17
+Problem: GUI: When started from inside gvim with ":!gvim", Vim would not
+ start. ":!gvim -f" works fine.
+Solution: After forking, wait a moment in the parent process, to give the
+ child a chance to set its process group.
+Files: src/gui.c
+
+Patch 5.4.18
+Problem: Python: The clear_history() function also exists in a library.
+Solution: Rename clear_history() to clear_hist().
+Files: src/ex_getln.c, src/eval.c, src/proto/ex_getln.pro
+
+Patch 5.4.19
+Problem: In a terminal with 25 lines, there is a more prompt after the
+ ATTENTION message. When hitting 'q' here the dialog prompt
+ doesn't appear and file loading is interrupted. (Will Day)
+Solution: Don't allow quitting the printing of a message for the dialog
+ prompt. Added the msg_noquit_more flag for this.
+Files: src/message.c
+
+Patch 5.4.20
+Problem: GTK: When starting gvim, would send escape sequences to the
+ terminal to switch the cursor off and on.
+Solution: Don't call msg_start() if the GUI is expected to start.
+Files: src/main.c
+
+Patch 5.4.21
+Problem: Motif: Toplevel menu ordering was wrong when using tear-off items.
+Solution: Don't add one to the index for a toplevel menu.
+Files: src/gui_motif.c
+
+Patch 5.4.22
+Problem: In Insert mode, <C-Left>, <S-Left>, <C-Right> and <S-Right> didn't
+ update the column used for vertical movement.
+Solution: Set curwin->w_set_curswant for those commands.
+Files: src/edit.c
+
+Patch 5.4.23
+Problem: When a Visual selection is lost to another program, and then the
+ same text is Visually selected again, the clipboard ownership
+ wasn't regained.
+Solution: Set clipboard.vmode to NUL to force regaining the clipboard.
+Files: src/normal.c
+
+Patch 5.4.24
+Problem: Encryption: When using ":r file" while 'key' has already entered,
+ the 'key' option would be messed up. When writing the file it
+ would be encrypted with an unknown key and lost! (Brad Despres)
+Solution: Don't free cryptkey when it is equal to the 'key' option.
+Files: src/fileio.c
+
+Patch 5.4.25
+Problem: When 'cindent' is set, but 'autoindent' isn't, comments are not
+ properly indented when starting a new line. (Mitterand)
+Solution: When there is a comment leader for the new line, but 'autoindent'
+ isn't set, do C-indenting.
+Files: src/misc1.c
+
+Patch 5.4.26
+Problem: Multi-byte: a multi-byte character is never recognized in a file
+ name, causing a backslash before it to be removed on Windows.
+Solution: Assume that a leading-byte character is a file name character in
+ vim_isfilec().
+Files: src/charset.c
+
+Patch 5.4.27
+Problem: Entries in the PopUp[nvic] menus were added for several modes, but
+ only deleted for the mode they were used for. This resulted in
+ the entry remaining in the PopUp menu.
+ When removing a PopUp[nvic] menu, the name had been truncated,
+ could result in greying-out the whole PopUp menu.
+Solution: Remove entries for all modes from the PopUp[nvic] menus. Remove
+ the PopUp[nvic] menu entries first, before the name is changed.
+Files: src/menu.c
+
+Patch 5.4.28
+Problem: When using a BufWritePre autocommand to change 'fileformat', the
+ new value would not be used for writing the file.
+Solution: Check 'fileformat' after executing the autocommands instead of
+ before.
+Files: src/fileio.c
+
+Patch 5.4.29
+Problem: Athena GUI: When removing the 'g' flag from 'guioptions', using a
+ menu can result in a crash.
+Solution: Always grey-out menus for Athena, don't hide them.
+Files: src/menu.c
+
+Patch 5.4.30
+Problem: BeOS: Suspending Vim with CTRL-Z didn't work (killed Vim). The
+ first character typed after ":sh" goes to Vim, instead of the
+ started shell.
+Solution: Don't suspend Vim, start a new shell. Kill the async read thread
+ when starting a new shell. It will be restarted later. (Will Day)
+Files: src/os_unix.c, src/ui.c
+
+Patch 5.4.31
+Problem: GUI: When 'mousefocus' is set, moving the mouse over where a
+ window boundary was, causes a hit-enter prompt to be finished.
+ (Jeff Walker)
+Solution: Don't use 'mousefocus' at the hit-enter prompt. Also ignore it
+ for the more prompt and a few other situations. When an operator
+ is pending, abort it first.
+Files: src/gui.c
+
+Patch 5.4.32
+Problem: Unix: $LDFLAGS was not passed to configure.
+Solution: Pass $LDFLAGS to configure just like $CFLAGS. (Jon Miner)
+Files: src/Makefile
+
+Patch 5.4.33
+Problem: Unix: After expanding an environment variable with the shell, the
+ next expansion would also use the shell, even though it is not
+ needed.
+Solution: Reset "recursive" before returning from gen_expand_wildcards().
+Files: src/misc1.c
+
+Patch 5.4.34 (also see 5.4.x5)
+Problem: When editing a file, and the file name is relative to a directory
+ above the current directory, the file name was made absolute.
+ (Gregory Margo)
+Solution: Add an argument to shorten_fnames() which indicates if all file
+ names should be shortened, or only absolute names. In main() only
+ use shorten_fnames() to shorten absolute names.
+Files: src/ex_docmd.c, src/fileio.c, src/main.c, src/proto/fileio.pro
+
+Patch 5.4.35
+Problem: There is no function to get the current file size.
+Solution: Allow using line2byte() with the number of lines in the file plus
+ one. This returns the offset of the line past the end of the
+ file, which is the file size plus one.
+Files: src/eval.c, runtime/doc/eval.txt
+
+Patch 5.4.36
+Problem: Comparing strings while ignoring case didn't work correctly for
+ some machines. (Mide Steed)
+Solution: vim_stricmp() and vim_strnicmp() only returned 0 or 1. Changed
+ them to return -1 when the first argument is smaller.
+Files: src/misc2.c
+
+Patch 5.4.37 (also see 5.4.40 and 5.4.43)
+Problem: Long strings from the viminfo file are truncated.
+Solution: When writing a long string to the viminfo file, first write a line
+ with the length, then the string itself in a second line.
+Files: src/eval.c, src/ex_cmds.c, src/ex_getln.c, src/mark.c, src/ops.c,
+ src/search.c, src/proto/ex_cmds.pro, runtime/syntax/viminfo.vim
+
+Patch 5.4.38
+Problem: In the option-window, ":set go&" resulted in 'go' being handled
+ like a boolean option.
+ Mappings for <Space> and <CR> were overruled by the option-window.
+Solution: When the value of an option isn't 0 or 1, don't handle it like a
+ boolean option.
+ Save and restore mappings for <Space> and <CR> when entering and
+ leaving the option-window.
+Files: runtime/optwin.vim
+
+Patch 5.4.39
+Problem: When setting a hidden option, spaces before the equal sign were
+ not skipped and cause an error message. E.g., ":set csprg =cmd".
+Solution: When skipping over a hidden option, check for a following "=val"
+ and skip it too.
+Files: src/option.c
+
+Patch 5.4.40 (depends on 5.4.37)
+Problem: Compiler error for "atol(p + 1)". (Axel Kielhorn)
+Solution: Add a typecast: "atol((char *)p + 1)".
+Files: src/ex_cmds.c
+
+Patch 5.4.41
+Problem: Some commands that were not included would give an error message,
+ even when after "if 0".
+Solution: Don't give an error message for an unsupported command when not
+ executing the command.
+Files: src/ex_docmd.c
+
+Patch 5.4.42
+Problem: ":w" would also cause a truncated message to appear in the message
+ history.
+Solution: Don't put a kept message in the message history when it starts
+ with "<".
+Files: src/message.c
+
+Patch 5.4.43 (depends on 5.4.37)
+Problem: Mixing long lines with multiple lines in a register causes errors
+ when writing the viminfo file. (Robinson)
+Solution: When reading the viminfo file to skip register contents, skip
+ lines that start with "<".
+Files: src/ops.c
+
+Patch 5.4.44
+Problem: When 'whichwrap' includes '~', a "~" command that goes on to the
+ next line cannot be properly undone. (Zellner)
+Solution: Save each line for undo in n_swapchar().
+Files: src/normal.c
+
+Patch 5.4.45 (also see 5.4.x8)
+Problem: When expand("$ASDF") fails, there is an error message.
+Solution: Remove the global expand_interactively. Pass a flag down to skip
+ the error message.
+ Also: expand("$ASDF") returns an empty string if $ASDF isn't set.
+ Previously it returned "$ASDF" when 'shell' is "sh".
+ Also: system() doesn't print an error when the command returns an
+ error code.
+Files: many
+
+Patch 5.4.46
+Problem: Backspacing did not always use 'softtabstop' after hitting <CR>,
+ inserting a register, moving the cursor, etc.
+Solution: Reset inserted_space much more often in edit().
+Files: src/edit.c
+
+Patch 5.4.47
+Problem: When executing BufWritePre or BufWritePost autocommands for a
+ hidden buffer, the cursor could be moved to a non-existing
+ position. (Vince Negri)
+Solution: Save and restore the cursor and topline for the current window
+ when it is going to be used to execute autocommands for a hidden
+ buffer. Use an existing window for the buffer when it's not
+ hidden.
+Files: src/fileio.c
+
+Patch 5.4.48
+Problem: A paste with the mouse in Insert mode was not repeated exactly the
+ same with ".". For example, when 'autoindent' is set and pasting
+ text with leading indent. (Perry)
+Solution: Add the CTRL-R CTRL-O r and CTRL-R CTRL-P r commands in Insert
+ mode, which insert the contents of a register literally.
+Files: src/edit.c, src/normal.c, runtime/doc/insert.txt
+
+Patch 5.4.49
+Problem: When pasting text with [ <MiddleMouse>, the cursor could end up
+ after the last character of the line.
+Solution: Correct the cursor position for the change in indent.
+Files: src/ops.c
+
+Patch 5.4.x1 (note: Replaces patch 5.4.9)
+Problem: Win32 GUI: menu hints were never used, because WANT_MENU is not
+ defined until vim.h is included.
+Solution: Move the #ifdef WANT_MENU from where MENUHINTS is defined to where
+ it is used.
+Files: src/gui_w32.c
+
+Patch 5.4.x2
+Problem: BeOS: When pasting text, one character was moved to the end.
+Solution: Re-enable the BeOS code in fill_input_buf(), and fix timing out
+ with acquire_sem_etc(). (Will Day)
+Files: src/os_beos.c, src/ui.c
+
+Patch 5.4.x3
+Problem: Win32 GUI: When dropping a directory on a running gvim it crashes.
+Solution: Avoid using a NULL file name. Also display a message to indicate
+ that the current directory was changed.
+Files: src/gui_w32.c
+
+Patch 5.4.x4
+Problem: Win32 GUI: Removing an item from the popup menu doesn't work.
+Solution: Don't remove the item from the menubar, but from the parent popup
+ menu.
+Files: src/gui_w32.c
+
+Patch 5.4.x5 (addition to 5.4.34)
+Files: src/gui_w32.c
+
+Patch 5.4.x6
+Problem: Win32: Expanding (dir)name starting with a dot doesn't work.
+ (McCormack) Only when there is a path before it.
+Solution: Fix the check, done before expansion, if the file name pattern
+ starts with a dot.
+Files: src/os_win32.c
+
+Patch 5.4.x7
+Problem: Win32 GUI: Removing "Edit with Vim" from registry is difficult.
+Solution: Add uninstall program to remove the registry keys. It is installed
+ in the "Add/Remove programs" list for ease of use.
+ Also: don't set $VIM when the executable is with the runtime files.
+ Also: Add a text file with a step-by-step description of how to
+ uninstall Vim for DOS and Windows.
+Files: src/uninstal.c, src/dosinst.c, src/Makefile.w32, uninstal.txt
+
+Patch 5.4.x8 (addition to 5.4.45)
+Files: many
+
+Patch 5.4.x9
+Problem: Win32 GUI: After executing an external command, focus is not
+ always regained (when using focus-follows-mouse).
+Solution: Add SetFocus() in mch_system(). (Mike Steed)
+Files: src/os_win32.c
+
+
+Patch 5.5a.1
+Problem: ":let @* = @:" did not work. The text was not put on the
+ I clipboard. (Fisher)
+Solution: Own the clipboard and put the text on it.
+Files: src/ops.c
+
+Patch 5.5a.2
+Problem: append() did not mark the buffer modified. Marks below the
+ new line were not adjusted.
+Solution: Fix the f_append() function.
+Files: src/eval.c
+
+Patch 5.5a.3
+Problem: Editing compressed ".gz" files doesn't work on non-Unix systems,
+ because there is no "mv" command.
+Solution: Add the rename() function and use it instead of ":!mv".
+ Also: Disable the automatic jump to the last position, because it
+ changes the jumplist.
+Files: src/eval.c, runtime/doc/eval.txt, runtime/vimrc_example.vim
+
+Patch 5.5a.4
+Problem: When using whole-line completion in insert mode while the cursor
+ is in the indent, get "out of memory" error. (Stekrt)
+Solution: Don't allocate a negative amount of memory in ins_complete().
+Files: src/edit.c
+
+Patch 5.5a.5
+Problem: Win32: The 'path' option can hold only up to 256 characters,
+ because _MAX_PATH is 256. (Robert Webb)
+Solution: Use a fixed path length of 1024.
+Files: src/os_win32.h
+
+Patch 5.5a.6
+Problem: Compiling with gcc on Win32, using the Unix Makefile, didn't work.
+Solution: Add $(SUFFIX) to all places where an executable is used. Also
+ pass it to ctags. (Reynolds)
+Files: src/Makefile
+
+Patch 5.5a.7
+Problem: When using "cat | vim -" in an xterm, the xterm version reply
+ would end up in the file.
+Solution: Read the file from stdin before switching the terminal to RAW
+ mode. Should also avoid problems with programs that use a
+ specific terminal setting.
+ Also: when using the GUI, print "Reading from stdin..." in the GUI
+ window, to give a hint why it doesn't do anything.
+Files: src/main.c, src/fileio.c
+
+Patch 5.5a.8
+Problem: On multi-threaded Solaris, suspending doesn't work.
+Solution: Call pause() when the SIGCONT signal was not received after
+ sending the SIGTSTP signal. (Nagano)
+Files: src/os_unix.c
+
+Patch 5.5a.9
+Problem: 'winaltkeys' could be set to an empty argument, which is illegal.
+Solution: Give an error message when doing ":set winaltkeys=".
+Files: src/option.c
+
+Patch 5.5a.10
+Problem: Win32 console: Using ALTGR on a German keyboard to produce "}"
+ doesn't work, because the 8th bit is set when ALT is pressed.
+Solution: Don't set the 8th bit when ALT and CTRL are used. (Leipert)
+Files: src/os_win32.c
+
+Patch 5.5a.11
+Problem: Tcl: Configure always uses tclsh8.0.
+ Also: Loading a library doesn't work.
+Solution: Add "--with-tclsh" configure argument to allow specifying another
+ name for the tcl shell.
+ Call Tcl_Init() in tclinit() to make loading libraries work.
+ (Johannes Zellner)
+Files: src/configure.in, src/configure, src/if_tcl.c
+
+Patch 5.5a.12
+Problem: The "user_commands" feature is called "user-commands".
+Solution: Replace "user-commands" with "user_commands". (Kim Sung-bom)
+ Keep "user-commands" for the has() function, to remain backwards
+ compatible with 5.4.
+Files: src/eval.c, src/version.c
+
+Patch 5.5a.13
+Problem: OS/2: When $HOME is not defined, "C:/" is used for the viminfo
+ file. That is very wrong when OS/2 is on another partition.
+Solution: Use $VIM for the viminfo file when it is defined, like for MSDOS.
+ Also: Makefile.os2 didn't depend on os_unix.h.
+Files: src/os_unix.h, src/Makefile.os2
+
+Patch 5.5a.14
+Problem: Athena, Motif and GTK: The Mouse scroll wheel doesn't work.
+Solution: Interpret a click of the wheel as a key press of the <MouseDown>
+ or <MouseUp> keys. Default behavior is to scroll three lines, or
+ a full page when Shift is used.
+Files: src/edit.c, src/ex_getln.c, src/gui.c, src/gui_gtk_x11.c,
+ src/gui_x11.c, src/keymap.h, src/message.c, src/misc1.c,
+ src/misc2.c, src/normal.c, src/proto/normal.pro, src/vim.h,
+ runtime/doc/scroll.txt
+
+Patch 5.5a.15
+Problem: Using CTRL-A in Insert mode doesn't work correctly when the insert
+ started with the <Insert> key. (Andreas Rohrschneider)
+Solution: Replace <Insert> with "i" before setting up the redo buffer.
+Files: src/normal.c
+
+Patch 5.5a.16
+Problem: VMS: GUI does not compile and run.
+Solution: Various fixes. (Zoltan Arpadffy)
+ Moved functions from os_unix.c to ui.c, so that VMS can use them
+ too: open_app_context(), x11_setup_atoms() and clip_x11* functions.
+ Made xterm_dpy global, it's now used by ui.c and os_unix.c.
+ Use gethostname() always, sys_hostname doesn't exist.
+Files: src/globals.h, src/gui_x11.c, src/os_vms.mms, src/os_unix.c,
+ src/os_vms.c, src/ui.c, src/proto/os_unix.pro, src/proto/ui.pro
+
+Renamed AdjustCursorForMultiByteCharacter() to AdjustCursorForMultiByteChar()
+to avoid symbol length limit of 31 characters. (Steve P. Wall)
+
+Patch 5.5b.1
+Problem: SASC complains about dead assignments and implicit type casts.
+Solution: Removed the dead assignments. Added explicit type casts.
+Files: src/buffer.c, src/edit.c, src/eval.c, src/ex_cmds.c,
+ src/ex_getln.c, src/fileio.c, src/getchar.c, src/memline.c,
+ src/menu.c, src/misc1.c, src/normal.c, src/ops.c, src/quickfix.c,
+ src/screen.c
+
+Patch 5.5b.2
+Problem: When using "CTRL-O O" in Insert mode, hit <Esc> and then "o" in
+ another line truncates that line. (Devin Weaver)
+Solution: When using a command that starts Insert mode from CTRL-O, reset
+ "restart_edit" first. This avoids that edit() is called with a
+ mix of starting a new edit command and restarting a previous one.
+Files: src/normal.c
+
+==============================================================================
+VERSION 5.6 *version-5.6*
+
+Version 5.6 is a bug-fix version of 5.5.
+
+
+Changed *changed-5.6*
+-------
+
+Small changes to OleVim files. (Christian Schaller)
+
+Inserted "/**/" between patch numbers in src/version.c. This allows for one
+line of context, which some versions of patch need.
+
+Reordered the Syntax menu to avoid long submenus. Removed keyboard shortcuts
+for alphabetical items to avoid a clash with fixed items.
+
+
+Added *added-5.6*
+-----
+
+Included Exuberant Ctags version 3.4. (Darren Hiebert)
+
+OpenWithVim in Python. (Christian Schaller)
+
+Win32 GUI: gvimext.dll, for the context menu "Edit with Vim" entry. Avoids
+the reported problems with the MS Office taskbar. Now it's a Shell Extension.
+(Tianmiao Hu)
+
+New syntax files:
+abel Abel (John Cook)
+aml Arc Macro Language (Nikki Knuit)
+apachestyle Apache-style config file (Christian Hammers)
+cf Cold Fusion (Jeff Lanzarotta)
+ctrlh files with CTRL-H sequences (Bram Moolenaar)
+cupl CUPL (John Cook)
+cuplsim CUPL simulation (John Cook)
+erlang Erlang (Kresimir Marzic)
+gedcom Gedcom (Paul Johnson)
+icon Icon (Wendell Turner)
+ist MakeIndex style (Peter Meszaros)
+jsp Java Server Pages (Rafael Garcia-Suarez)
+rcslog Rcslog (Joe Karthauser)
+remind Remind (Davide Alberani)
+sqr Structured Query Report Writer (Paul Moore)
+tads TADS (Amir Karger)
+texinfo Texinfo (Sandor Kopanyi)
+xpm2 X Pixmap v2 (Steve Wall)
+
+The 'C' flag in 'cpoptions' can be used to switch off concatenation for
+sourced lines. See patch 5.5.013 below. |line-continuation|
+
+"excludenl" argument for the ":syntax" command. See patch 5.5.032 below.
+|:syn-excludenl|
+
+Implemented |z+| and |z^| commands. See patch 5.5.050 below.
+
+Vim logo in Corel Draw format. Can be scaled to any resolution.
+
+
+Fixed *fixed-5.6*
+-----
+
+Using this mapping in Select mode, terminated completion:
+":vnoremap <C-N> <Esc>a<C-N>" (Benji Fisher)
+Ignore K_SELECT in ins_compl_prep().
+
+VMS (Zoltan Arpadffy, David Elins):
+- ioctl() in pty.c caused trouble, #ifndef VMS added.
+- Cut & paste mismatch corrected.
+- Popup menu line crash corrected. (Patch 5.5.047)
+- Motif directories during open and save as corrected.
+- Handle full file names with version numbers. (Patch 5.5.046)
+- Directory handling (CD command etc.)
+- Corrected file name conversion VMS to Unix and v.v.
+- Recovery was not working.
+- Terminal and signal handling was outdated compared to os_unix.c.
+- Improved os_vms.txt.
+
+Configure used fprintf() instead of printf() to check for __DATE__ and
+__TIME__. (John Card II)
+
+BeOS: Adjust computing the char_height and char_ascent. Round them up
+separately, avoids redrawing artifacts. (Mike Steed)
+
+Fix a few multi-byte problems in menu_name_skip(), set_reg_ic(), searchc() and
+findmatchlimit(). (Taro Muraoka)
+
+GTK GUI:
+- With GTK 1.2.5 and later the scrollbars were not redrawn correctly.
+- Adjusted the gtk_form_draw() function.
+- SNiFF connection didn't work.
+- 'mousefocus' was not working. (Dalecki)
+- Some keys were not working with modifiers: Shift-Tab, Ctrl-Space and CTRL-@.
+
+
+Patch 5.5.001
+Problem: Configure in the top directory did not pass on an argument with a
+ space correctly. For example "./configure --previs="/My home".
+ (Stephane Chazelas)
+Solution: Use '"$@"' instead of '$*' to pass on the arguments.
+Files: configure
+
+Patch 5.5.002
+Problem: Compilation error for using "fds[] & POLLIN". (Jeff Walker)
+Solution: Use "fds[].revents & POLLIN".
+Files: src/os_unix.c
+
+Patch 5.5.003
+Problem: The autoconf check for sizeof(int) is wrong on machines where
+ sizeof(size_t) != sizeof(int).
+Solution: Use our own configure check. Also fixes the warning for
+ cross-compiling.
+Files: src/configure.in, src/configure
+
+Patch 5.5.004
+Problem: On Unix it's not possible to interrupt ":sleep 100".
+Solution: Switch terminal to cooked mode while asleep, to allow a SIGINT to
+ wake us up. But switch off echo, added TMODE_SLEEP.
+Files: src/term.h, src/os_unix.c
+
+Patch 5.5.005
+Problem: When using <f-args> with a user command, an empty argument to the
+ command resulted in one empty string, while no string was
+ expected.
+Solution: Catch an empty argument and pass no argument to the function.
+ (Paul Moore)
+Files: src/ex_docmd.c
+
+Patch 5.5.006
+Problem: Python: When platform-dependent files are in another directory
+ than the platform-independent files it doesn't work.
+Solution: Also check the executable directory, and add it to CFLAGS. (Tessa
+ Lau)
+Files: src/configure.in, src/configure
+
+Patch 5.5.007 (extra)
+Problem: Win32 OLE: Occasional crash when exiting while still being used
+ via OLE.
+Solution: Move OleUninitialize() to before deleting the application object.
+ (Vince Negri)
+Files: src/if_ole.cpp
+
+Patch 5.5.008
+Problem: 10000@@ takes a long time and cannot be interrupted.
+Solution: Check for CTRL-C typed while in the loop to push the register.
+Files: src/normal.c
+
+Patch 5.5.009
+Problem: Recent Sequent machines don't link with "-linet". (Kurtis Rader)
+Solution: Remove configure check for Sequent.
+Files: src/configure.in, src/configure
+
+Patch 5.5.010
+Problem: Ctags freed a memory block twice when exiting. When out of
+ memory, a misleading error message was given.
+Solution: Update to ctags 3.3.2. Also fixes a few other problems. (Darren
+ Hiebert)
+Files: src/ctags/*
+
+Patch 5.5.011
+Problem: After "CTRL-V s", the cursor jumps back to the start, while all
+ other operators leave the cursor on the last changed character.
+ (Xiangjiang Ma)
+Solution: Position cursor on last changed character, if possible.
+Files: src/ops.c
+
+Patch 5.5.012
+Problem: Using CTRL-] in Visual mode doesn't work when the text includes a
+ space (just where it's useful). (Stefan Bittner)
+Solution: Don't escape special characters in a tag name with a backslash.
+Files: src/normal.c
+
+Patch 5.5.013
+Problem: The ":append" and ":insert" commands allow using a leading
+ backslash in a line. The ":source" command concatenates those
+ lines. (Heinlein)
+Solution: Add the 'C' flag in 'cpoptions' to switch off concatenation.
+Files: src/ex_docmd.c, src/option.h, runtime/doc/options.txt,
+ runtime/filetype.vim, runtime/scripts.vim
+
+Patch 5.5.014
+Problem: When executing a register with ":@", the ":append" command would
+ get text lines with a ':' prepended. (Heinlein)
+Solution: Remove the ':' characters.
+Files: src/ex_docmd.c, src/ex_getln.c, src/globals.h
+
+Patch 5.5.015
+Problem: When using ":g/pat/p", it's hard to see where the output starts,
+ the ":g" command is overwritten. Vi keeps the ":g" command.
+Solution: Keep the ":g" command, but allow overwriting it with the report
+ for the number of changes.
+Files: src/ex_cmds.c
+
+Patch 5.5.016 (extra)
+Problem: Win32: Using regedit to install Vim in the popup menu requires the
+ user to confirm this in a dialog.
+Solution: Use "regedit /s" to avoid the dialog
+Files: src/dosinst.c
+
+Patch 5.5.017
+Problem: If an error occurs when closing the current window, Vim could get
+ stuck in the error handling.
+Solution: Don't set curwin to NULL when closing the current window.
+Files: src/window.c
+
+Patch 5.5.018
+Problem: Absolute paths in shell scripts do not always work.
+Solution: Use /usr/bin/env to find out the path.
+Files: runtime/doc/vim2html.pl, runtime/tools/efm_filter.pl,
+ runtime/tools/shtags.pl
+
+Patch 5.5.019
+Problem: A function call in 'statusline' stops using ":q" twice from
+ exiting, when the last argument hasn't been edited.
+Solution: Don't decrement quitmore when executing a function. (Madsen)
+Files: src/ex_docmd.c
+
+Patch 5.5.020
+Problem: When the output of CTRL-D completion in the commandline goes all
+ the way to the last column, there is an empty line.
+Solution: Don't add a newline when the cursor wrapped already. (Madsen)
+Files: src/ex_getln.c
+
+Patch 5.5.021
+Problem: When checking if a file name in the tags file is relative,
+ environment variables were not expanded.
+Solution: Expand the file name before checking if it is relative. (Madsen)
+Files: src/tag.c
+
+Patch 5.5.022
+Problem: When setting or resetting 'paste' the ruler wasn't updated.
+Solution: Update the status lines when 'ruler' changes because of 'paste'.
+Files: src/option.c
+
+Patch 5.5.023
+Problem: When editing a new file and autocommands change the cursor
+ position, the cursor was moved back to the first non-white, unless
+ 'startofline' was reset.
+Solution: Keep the new column, just like the line number.
+Files: src/ex_cmds.c
+
+Patch 5.5.024 (extra)
+Problem: Win32 GUI: When using confirm() to put up a dialog without a
+ default button, the dialog would not have keyboard focus.
+ (Krishna)
+Solution: Always set focus to the dialog window. Only set focus to a button
+ when a default one is specified.
+Files: src/gui_w32.c
+
+Patch 5.5.025
+Problem: When using "keepend" in a syntax region, a contained match that
+ includes the end-of-line could still force that region to
+ continue, if there is another contained match in between.
+Solution: Check the keepend_level in check_state_ends().
+Files: src/syntax.c
+
+Patch 5.5.026
+Problem: When starting Vim in a white-on-black xterm, with 'bg' set to
+ "dark", and then starting the GUI with ":gui", setting 'bg' to
+ "light" in the gvimrc, the highlighting isn't set. (Tsjokwing)
+Solution: Set the highlighting when 'bg' is changed in the gvimrc, even
+ though full_screen isn't set.
+Files: src/option.c
+
+Patch 5.5.027
+Problem: Unix: os_unix.c doesn't compile when XTERM_CLIP is used but
+ WANT_TITLE isn't. (Barnum)
+Solution: Move a few functions that are used by the X11 title and clipboard
+ and put another "#if" around it.
+Files: src/os_unix.c
+
+Patch 5.5.028 (extra)
+Problem: Win32 GUI: When a file is dropped on Win32 gvim while at the ":"
+ prompt, the file is edited but the command line is actually still
+ there, the cursor goes back to command line on the next command.
+ (Krishna)
+Solution: When dropping a file or directory on gvim while at the ":" prompt,
+ insert the name of the file/directory. Allows using the
+ file/directory name for any Ex command.
+Files: src/gui_w32.c
+
+Patch 5.5.029
+Problem: "das" at the end of the file didn't delete the last character of
+ the sentence.
+Solution: When there is no character after the sentence, make the operation
+ inclusive in current_sent().
+Files: src/search.c
+
+Patch 5.5.030
+Problem: Unix: in os_unix.c, "term_str" is used, which is also defined in
+ vim.h as a macro. (wuxin)
+Solution: Renamed "term_str" to "buf" in do_xterm_trace().
+Files: src/os_unix.c
+
+Patch 5.5.031 (extra)
+Problem: Win32 GUI: When exiting Windows, gvim will leave swap files behind
+ and will be killed ungracefully. (Krishna)
+Solution: Catch the WM_QUERYENDSESSION and WM_ENDSESSION messages and try to
+ exit gracefully. Allow the user to cancel the shutdown if there
+ is a changed buffer.
+Files: src/gui_w32.c
+
+Patch 5.5.032
+Problem: Patch 5.5.025 wasn't right. And C highlighting was still not
+ working correctly for a #define.
+Solution: Added "excludenl" argument to ":syntax", to be able not to extend
+ a containing item when there is a match with the end-of-line.
+Files: src/syntax.c, runtime/doc/syntax.txt, runtime/syntax/c.vim
+
+Patch 5.5.033
+Problem: When reading from stdin, a long line in viminfo would mess up the
+ file message. readfile() uses IObuff for keep_msg, which could be
+ overwritten by anyone.
+Solution: Copy the message from IObuff to msg_buf and set keep_msg to that.
+ Also change vim_fgets() to not use IObuff any longer.
+Files: src/fileio.c
+
+Patch 5.5.034
+Problem: "gvim -rv" caused a crash. Using 't_Co' before it's set.
+Solution: Don't try to initialize the highlighting before it has been
+ initialized from main().
+Files: src/syntax.c
+
+Patch 5.5.035
+Problem: GTK with XIM: Resizing with status area was messy, and
+ ":set guioptions+=b" didn't work.
+Solution: Make status area a separate widget, but not a separate window.
+ (Chi-Deok Hwang)
+Files: src/gui_gtk_f.c, src/gui_gtk_x11.c, src/multbyte.c
+
+Patch 5.5.036
+Problem: The GZIP_read() function in $VIMRUNTIME/vimrc_example.vim to
+ uncompress a file did not do detection for 'fileformat'. This is
+ because the filtering is done with 'binary' set.
+Solution: Split the filtering into separate write, filter and read commands.
+Files: runtime/vimrc_example.vim
+
+Patch 5.5.037
+Problem: The "U" command didn't mark the buffer as changed. (McCormack)
+Solution: Set the 'modified' flag when using "U".
+Files: src/undo.c
+
+Patch 5.5.038
+Problem: When typing a long ":" command, so that the screen scrolls up,
+ causes the hit-enter prompt, even though the user just typed
+ return to execute the command.
+Solution: Reset need_wait_return if (part of) the command was typed in
+ getcmdline().
+Files: src/ex_getln.c
+
+Patch 5.5.039
+Problem: When using a custom status line, "%a" (file # of #) reports the
+ index of the current window for all windows.
+Solution: Pass a window pointer to append_arg_number(), and pass the window
+ being updated from build_stl_str_hl(). (Stephen P. Wall)
+Files: src/buffer.c, src/screen.c, src/proto/buffer.pro
+
+Patch 5.5.040
+Problem: Multi-byte: When there is some error in xim_real_init(), it can
+ close XIM and return. After this there can be a segv.
+Solution: Test "xic" for being non-NULL, don't set "xim" to NULL. Also try
+ to find more matches for supported styles. (Sung-Hyun Nam)
+Files: src/multbyte.c
+
+Patch 5.5.041
+Problem: X11 GUI: CTRL-_ requires the SHIFT key only on some machines.
+Solution: Translate CTRL-- to CTRL-_. (Robert Webb)
+Files: src/gui_x11.c
+
+Patch 5.5.042
+Problem: X11 GUI: keys with ALT were assumed to be used for the menu, even
+ when the menu has been disabled by removing 'm' from 'guioptions'.
+Solution: Ignore keys with ALT only when gui.menu_is_active is set. (Raf)
+Files: src/gui_x11.c
+
+Patch 5.5.043
+Problem: GTK: Handling of fontset fonts was not right when 'guifontset'
+ contains exactly 14 times '-'.
+Solution: Avoid setting fonts when working with a fontset. (Sung-Hyun Nam)
+Files: src/gui_gtk_x11.c
+
+Patch 5.5.044
+Problem: pltags.pl contains an absolute path "/usr/local/bin/perl". That
+ might not work everywhere.
+Solution: Use "/usr/bin/env perl" instead.
+Files: runtime/tools/pltags.pl
+
+Patch 5.5.045
+Problem: Using "this_session" variable does not work, requires preceding it
+ with "v:". Default filename for ":mksession" isn't mentioned
+ in the docs. (Fisher)
+Solution: Support using "this_session" to be backwards compatible.
+Files: src/eval.c, runtime/doc/options.txt
+
+Patch 5.5.046 (extra)
+Problem: VMS: problems with path and filename.
+Solution: Truncate file name at last ';', etc. (Zoltan Arpadffy)
+Files: src/buffer.c, src/fileio.c, src/gui_motif.c, src/os_vms.c,
+ src/proto/os_vms.pro
+
+Patch 5.5.047
+Problem: VMS: Crash when using the popup menu
+Solution: Turn the #define MENU_MODE_CHARS into an array. (Arpadffy)
+Files: src/structs.h, src/menu.c
+
+Patch 5.5.048
+Problem: HP-UX 11: Compiling doesn't work, because both string.h and
+ strings.h are included. (Squassabia)
+Solution: The configure test for including both string.h and strings.h
+ must include <Xm/Xm.h> first, because it causes problems.
+Files: src/configure.in, src/configure, src/config.h.in
+
+Patch 5.5.049
+Problem: Unix: When installing Vim, the protection bits of files might be
+ influenced by the umask.
+Solution: Add $(FILEMOD) to Makefile. (Shetye)
+Files: src/Makefile
+
+Patch 5.5.050
+Problem: "z+" and "z^" commands are missing.
+Solution: Implemented "z+" and "z^".
+Files: src/normal.c, runtime/doc/scroll.txt, runtime/doc/index.txt
+
+Patch 5.5.051
+Problem: Several Unix systems have a problem with the optimization limits
+ check in configure.
+Solution: Removed the configure check, let the user add it manually in
+ Makefile or the environment.
+Files: src/configure.in, src/configure, src/Makefile
+
+Patch 5.5.052
+Problem: Crash when using a cursor key at the ATTENTION prompt. (Alberani)
+Solution: Ignore special keys at the console dialog. Also ignore characters
+ > 255 for other uses of tolower() and toupper().
+Files: src/menu.c, src/message.c, src/misc2.c
+
+Patch 5.5.053
+Problem: Indenting is wrong after a function when 'cino' has "fs". Another
+ problem when 'cino' has "{s".
+Solution: Put line after closing "}" of a function at the left margin.
+ Apply ind_open_extra in the right way after a '{'.
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 5.5.054
+Problem: Unix: ":e #" doesn't work if the alternate file name contains a
+ space or backslash. (Hudacek)
+Solution: When replacing "#", "%" or other items that stand for a file name,
+ prepend a backslash before special characters.
+Files: src/ex_docmd.c
+
+Patch 5.5.055
+Problem: Using "<C-V>$r-" in blockwise Visual mode replaces one character
+ beyond the end of the line. (Zivkov)
+Solution: Only replace existing characters.
+Files: src/ops.c
+
+Patch 5.5.056
+Problem: After "z20<CR>" messages were printed at the old command line
+ position once. (Veselinovic)
+Solution: Set msg_row and msg_col when changing cmdline_row in
+ win_setheight().
+Files: src/window.c
+
+Patch 5.5.057
+Problem: After "S<Esc>" it should be possible to restore the line with "U".
+ (Veselinovic)
+Solution: Don't call u_clearline() in op_delete() when changing only one
+ line.
+Files: src/ops.c
+
+Patch 5.5.058
+Problem: Using a long search pattern and then "n" causes the hit-enter
+ prompt. (Krishna)
+Solution: Truncate the echoed pattern, like other messages. Moved code for
+ truncating from msg_attr() to msg_strtrunc().
+Files: src/message.c, src/proto/message.pro, src/search.c
+
+Patch 5.5.059
+Problem: GTK GUI: When $term is invalid, using "gvim" gives an error
+ message, even though $term isn't really used. (Robbins)
+Solution: When the GUI is about to start, skip the error messages for a
+ wrong $term.
+Files: src/term.c
+
+Patch 5.5.060 (extra)
+Problem: Dos 32 bit: When a directory in 'backupdir' doesn't exist, ":w"
+ causes the file to be renamed to "axlqwqhy.ba~". (Matzdorf)
+Solution: The code to work around a LFN bug in Windows 95 doesn't handle a
+ non-existing target name correctly. When renaming fails, make
+ sure the file has its original name. Also do this for the Win32
+ version, although it's unlikely that it runs into this problem.
+Files: src/os_msdos.c, src/os_win32.c
+
+Patch 5.5.061
+Problem: When using "\:" in a modeline, the backslash is included in the
+ option value. (Mohsin)
+Solution: Remove one backslash before the ':' in a modeline.
+Files: src/buffer.c, runtime/doc/options.txt
+
+Patch 5.5.062 (extra)
+Problem: Win32 console: Temp files are created in the root of the current
+ drive, which may be read-only. (Peterson)
+Solution: Use the same mechanism of the GUI version: Use $TMP, $TEMP or the
+ current directory. Cleaned up vim_tempname() a bit.
+Files: src/fileio.c, src/os_win32.h, runtime/doc/os_dos.txt
+
+Patch 5.5.063
+Problem: When using whole-line completion in Insert mode, 'cindent' is
+ applied, even after changing the indent of the line.
+Solution: Don't reindent the completed line after inserting/removing indent.
+ (Robert Webb)
+Files: src/edit.c
+
+Patch 5.5.064
+Problem: has("sniff") doesn't work correctly.
+Solution: Return 1 when Vim was compiled with the +sniff feature. (Pruemmer)
+Files: src/eval.c
+
+Patch 5.5.065
+Problem: When dropping a file on Vim, the 'shellslash' option is not
+ effective. (Krishna)
+Solution: Fix the slashes in the dropped file names according to
+ 'shellslash'.
+Files: src/ex_docmd.c, runtime/doc/options.txt
+
+Patch 5.5.066
+Problem: For systems with backslash in file name: Setting a file name
+ option to a value starting with "\\machine" removed a backslash.
+Solution: Keep the double backslash for "\\machine", but do change
+ "\\\\machine" to "\\machine" for backwards compatibility.
+Files: src/option.c, runtime/doc/options.txt
+
+Patch 5.5.067
+Problem: With 'hlsearch' set, the pattern "\>" doesn't highlight the first
+ match in a line. (Benji Fisher)
+Solution: Fix highlighting an empty match. Also highlight the first
+ character in an empty line for "$".
+Files: src/screen.c
+
+Patch 5.5.068
+Problem: Crash when a ":while" is used with an argument that has an error.
+ (Sylvain Viart)
+Solution: Was using an uninitialized index in the cs_line[] array. The
+ crash only happened when the index was far off. Made sure the
+ uninitialized index isn't used.
+Files: src/ex_docmd.c
+
+Patch 5.5.069
+Problem: Shifting lines in blockwise Visual mode didn't set the 'modified'
+ flag.
+Solution: Do set the 'modified' flag.
+Files: src/ops.c
+
+Patch 5.5.070
+Problem: When editing a new file, creating that file outside of Vim, then
+ editing it again, ":w" still warns for overwriting an existing
+ file. (Nam)
+Solution: The BF_NEW flag in the "b_flags" field wasn't cleared properly.
+Files: src/buffer.c, src/fileio.c
+
+Patch 5.5.071
+Problem: Using a matchgroup in a ":syn region", which is the same syntax
+ group as the region, didn't stop a contained item from matching in
+ the start pattern.
+Solution: Also push an item on the stack when the syntax ID of the
+ matchgroup is the same as the syntax ID of the region.
+Files: src/syntax.c
+
+Patch 5.5.072 (extra)
+Problem: Dos 32 bit: When setting 'columns' to a too large value, Vim may
+ crash, and the DOS console too.
+Solution: Check that the value of 'columns' isn't larger than the number of
+ columns that the BIOS reports.
+Files: src/os_msdos.c, src/proto/os_msdos.pro, src/option.c
+
+Patch 5.5.073 (extra)
+Problem: Win 32 GUI: The Find and Find/Replace dialogs didn't show the
+ "match case" checkbox. The Find/Replace dialog didn't handle the
+ "match whole word" checkbox.
+Solution: Support the "match case" and "match whole word" checkboxes.
+Files: src/gui_w32.c
+
+Patch 5.6a.001
+Problem: Using <C-End> with a count doesn't work like it does with "G".
+ (Benji Fisher)
+Solution: Accept a count for <C-End> and <C-Home>.
+Files: src/normal.c
+
+Patch 5.6a.002
+Problem: The script for conversion to HTML was an older version.
+Solution: Add support for running 2html.vim on a color terminal.
+Files: runtime/syntax/2html.vim
+
+Patch 5.6a.003
+Problem: Defining a function inside a function didn't give an error
+ message. A missing ":endfunction" doesn't give an error message.
+Solution: Allow defining a function inside a function.
+Files: src/eval.c, runtime/doc/eval.txt
+
+Patch 5.6a.004
+Problem: A missing ":endwhile" or ":endif" doesn't give an error message.
+ (Johannes Zellner)
+Solution: Check for missing ":endwhile" and ":endif" in sourced files.
+ Add missing ":endif" in file selection macros.
+Files: src/ex_docmd.c, runtime/macros/file_select.vim
+
+Patch 5.6a.005
+Problem: 'hlsearch' was not listed alphabetically. The value of 'toolbar'
+ was changed when 'compatible' is set.
+Solution: Moved entry of 'hlsearch' in options[] table down.
+ Don't reset 'toolbar' option to the default value when
+ 'compatible' is set.
+Files: src/option.c
+
+Patch 5.6a.006
+Problem: Using a backwards range inside ":if 0" gave an error message.
+Solution: Don't complain about a range when it is not going to be used.
+ (Stefan Roemer)
+Files: src/ex_docmd.c
+
+Patch 5.6a.007
+Problem: ":let" didn't show internal Vim variables. (Ron Aaron)
+Solution: Do show ":v" variables for ":let" and ":let v:name".
+Files: src/eval.c
+
+Patch 5.6a.008
+Problem: Selecting a syntax from the Syntax menu gives an error message.
+Solution: Replace "else if" in SetSyn() with "elseif". (Ronald Schild)
+Files: runtime/menu.vim
+
+Patch 5.6a.009
+Problem: When compiling with +extra_search but without +syntax, there is a
+ compilation error in screen.c. (Axel Kielhorn)
+Solution: Adjust the #ifdef for declaring and initializing "line" in
+ win_line(). Also solve compilation problem when +statusline is
+ used without +eval. Another one when +cmdline_compl is used
+ without +eval.
+Files: src/screen.c, src/misc2.c
+
+Patch 5.6a.010
+Problem: In a function, ":startinsert!" does not append to the end of the
+ line if a ":normal" command was used to move the cursor. (Fisher)
+Solution: Reset "w_set_curswant" to avoid that w_curswant is changed again.
+Files: src/ex_docmd.c
+
+Patch 5.6a.011 (depends on 5.6a.004)
+Problem: A missing ":endif" or ":endwhile" in a function doesn't give an
+ error message.
+Solution: Give that error message.
+Files: src/ex_docmd.c
+
+Patch 5.6a.012 (depends on 5.6a.008)
+Problem: Some Syntax menu entries caused a hit-enter prompt.
+Solution: Call a function to make the command shorter. Also rename a few
+ functions to avoid name clashes.
+Files: runtime/menu.vim
+
+Patch 5.6a.013
+Problem: Command line completion works different when another completion
+ was done earlier. (Johannes Zellner)
+Solution: Reset wim_index when starting a new completion.
+Files: src/ex_getln.c
+
+Patch 5.6a.014
+Problem: Various warning messages when compiling and running lint with
+ different combinations of features.
+Solution: Fix the warning messages.
+Files: src/eval.c, src/ex_cmds.c, src/ex_docmd.c, src/gui_gtk_x11.c,
+ src/option.c, src/screen.c, src/search.c, src/syntax.c,
+ src/feature.h, src/globals.h
+
+Patch 5.6a.015
+Problem: The vimtutor command doesn't always know the value of $VIMRUNTIME.
+Solution: Let Vim expand $VIMRUNTIME, instead of the shell.
+Files: src/vimtutor
+
+Patch 5.6a.016 (extra)
+Problem: Mac: Window size is restricted when starting. Cannot drag the
+ window all over the desktop.
+Solution: Get real screen size instead of assuming 640x400. Do not use a
+ fixed number for the drag limits. (Axel Kielhorn)
+Files: src/gui_mac.c
+
+Patch 5.6a.017
+Problem: The "Paste" entry in popup menu for Visual, Insert and Cmdline
+ mode is in the wrong position. (Stol)
+Solution: Add priority numbers for all Paste menu entries.
+Files: runtime/menu.vim
+
+Patch 5.6a.018
+Problem: GTK GUI: submenu priority doesn't work.
+ Help dialog could be destroyed too soon.
+ When closing a dialog window (e.g. the "ATTENTION" one), Vim would
+ just hang.
+ When GTK theme is changed, Vim doesn't adjust to the new colors.
+ Argument for ":promptfind" isn't used.
+Solution: Fixed the mentioned problems.
+ Made the dialogs look&feel nicer.
+ Moved functions to avoid the need for a forward declaration.
+ Fixed reentrancy of the file browser dialog.
+ Added drag&drop support for GNOME.
+ Init the text for the Find/replace dialog from the last used
+ search string. Set "match whole word" toggle button correctly.
+ Made repeat rate for drag outside of window depend on the
+ distance from the window. (Marcin Dalecki)
+ Made the drag in Visual mode actually work.
+ Removed recursiveness protection from gui_mch_get_rgb(), it might
+ cause more trouble than it solves.
+Files: src/ex_docmd.c, src/gui_gtk.c, src/gui_gtk_x11.c, src/ui.c,
+ src/proto/ui.pro, src/misc2.c
+
+Patch 5.6a.019
+Problem: When trying to recover through NFS, which uses a large block size,
+ Vim might think the swap file is empty, because mf_blocknr_max is
+ zero. (Scott McDermott)
+Solution: When computing the number of blocks of the file in mf_open(),
+ round up instead of down.
+Files: src/memfile.c
+
+Patch 5.6a.020
+Problem: GUI GTK: Could not set display for gvim.
+Solution: Add "-display" and "--display" arguments. (Marcin Dalecki)
+Files: src/gui_gtk_x11.c
+
+Patch 5.6a.021
+Problem: Recovering still may not work when the block size of the device
+ where the swap file is located is larger than 4096.
+Solution: Read block 0 with the minimal block size.
+Files: src/memline.c, src/memfile.c, src/vim.h
+
+Patch 5.6a.022 (extra)
+Problem: Win32 GUI: When an error in the vimrc causes a dialog to pop up
+ (e.g., for an existing swap file), Vim crashes. (David Elins)
+Solution: Before showing a dialog, open the main window.
+Files: src/gui_w32.c
+
+Patch 5.6a.023
+Problem: Using expand("%:gs??/?") causes a crash. (Ron Aaron)
+Solution: Check for running into the end of the string in do_string_sub().
+Files: src/eval.c
+
+Patch 5.6a.024
+Problem: Using an autocommand to delete a buffer when leaving it can cause
+ a crash when jumping to a tag. (Franz Gorkotte)
+Solution: In do_tag(), store tagstacklen before jumping to another buffer.
+ Check tagstackidx after jumping to another buffer.
+ Add extra check in win_split() if tagname isn't NULL.
+Files: src/tag.c, src/window.c
+
+Patch 5.6a.025 (extra)
+Problem: Win32 GUI: The tables for toupper() and tolower() are initialized
+ too late. (Mike Steed)
+Solution: Move the initialization to win32_init() and call it from main().
+Files: src/main.c, src/os_w32.c, src/proto/os_w32.pro
+
+Patch 5.6a.026
+Problem: When the SNiFF connection is open, shell commands hang. (Pruemmer)
+Solution: Skip a second wait() call if waitpid() already detected that the
+ child has exited.
+Files: src/os_unix.c
+
+Patch 5.6a.027 (extra)
+Problem: Win32 GUI: The "Edit with Vim" popup menu entry causes problems
+ for the Office toolbar.
+Solution: Use a shell extension dll. (Tianmiao Hu)
+ Added it to the install and uninstal programs, replaces the old
+ "Edit with Vim" menu registry entries.
+Files: src/dosinst.c, src/uninstal.c, gvimext/*, runtime/doc/gui_w32.txt
+
+Patch 5.6a.028 (extra)
+Problem: Win32 GUI: Dialogs and tear-off menus can't handle multi-byte
+ characters.
+Solution: Adjust nCopyAnsiToWideChar() to handle multi-byte characters
+ correctly.
+Files: src/gui_w32.c
+
+==============================================================================
+VERSION 5.7 *version-5.7*
+
+Version 5.7 is a bug-fix version of 5.6.
+
+Changed *changed-5.7*
+-------
+
+Renamed src/INSTALL.mac to INSTALL_mac.txt to avoid it being recognized with a
+wrong file type. Also renamed src/INSTALL.amiga to INSTALL_ami.txt.
+
+
+Added *added-5.7*
+-----
+
+New syntax files:
+stp Stored Procedures (Jeff Lanzarotta)
+snnsnet, snnspat, snnsres SNNS (Davide Alberani)
+mel MEL (Robert Minsk)
+ruby Ruby (Mirko Nasato)
+tli TealInfo (Kurt W. Andrews)
+ora Oracle config file (Sandor Kopanyi)
+abaqus Abaqus (Carl Osterwisch)
+jproperties Java Properties (Simon Baldwin)
+apache Apache config (Allan Kelly)
+csp CSP (Jan Bredereke)
+samba Samba config (Rafael Garcia-Suarez)
+kscript KDE script (Thomas Capricelli)
+hb Hyper Builder (Alejandro Forero Cuervo)
+fortran Fortran (rewritten) (Ajit J. Thakkar)
+sml SML (Fabrizio Zeno Cornelli)
+cvs CVS commit (Matt Dunford)
+aspperl ASP Perl (Aaron Hope)
+bc BC calculator (Vladimir Scholtz)
+latte Latte (Nick Moffitt)
+wml WML (Gerfried Fuchs)
+
+Included Exuberant ctags 3.5.1. (Darren Hiebert)
+
+"display" and "fold" arguments for syntax items. For future extension, they
+are ignored now.
+
+strftime() function for the Macintosh.
+
+macros/explorer.vim: A file browser script (M A Aziz Ahmed)
+
+
+Fixed *fixed-5.7*
+-----
+
+The 16 bit MS-DOS version is now compiled with Bcc 3.1 instead of 4.0. The
+executable is smaller.
+
+When a "make test" failed, the output file was lost. Rename it to
+test99.failed to be able to see what went wrong.
+
+After sourcing bugreport.vim, it's not clear that bugreport.txt has been
+written in the current directory. Edit bugreport.txt to avoid that.
+
+Adding IME support when using Makefile.w32 didn't work. (Taro Muraoka)
+
+Win32 console: Mouse drags were passed on even when the mouse didn't move.
+
+Perl interface: In Buffers(), type of argument to SvPV() was int, should be
+STRLEN. (Tony Leneis)
+
+Problem with prototype for index() on AIX 4.3.0. Added check for _AIX43 in
+os_unix.h. (Jake Hamby)
+
+Mappings in mswin.vim could break when some commands are mapped. Add "nore"
+to most mappings to avoid re-mapping.
+
+modify_fname() made a copy of a file name for ":p" when it already was a full
+path name, which is a bit slow.
+
+Win32 with Borland C++ 5.5: Pass the path to the compiler on to xxd and ctags,
+to avoid depending on $PATH. Fixed "make clean".
+
+Many fixes to Macintosh specific parts: (mostly by Dany StAmant)
+- Only one Help menu.
+- No more crash when removing a menu item.
+- Support as External Editor for Codewarrior (still some little glitches).
+- Popup menu support.
+- Fixed crash when pasting after application switch.
+- Color from rgb.txt properly displayed.
+- 'isprint' default includes all chars above '~'. (Axel Kielhorn)
+- mac_expandpath() was leaking memory.
+- Add digraphs table. (Axel Kielhorn)
+- Multi-byte support: (Kenichi Asai)
+ Switch keyscript when going in/out of Insert mode.
+ Draw multi-byte character correctly.
+ Don't use mblen() but highest bit of char to detect multi-byte char.
+ Display value of multi-byte in statusline (also for other systems).
+- mouse button was not initialized properly to MOUSE_LEFT when
+ USE_CTRLCLICKMENU not defined.
+- With Japanese SJIS characters: Make "w", "b", and "e" work
+ properly. (Kenichi Asai)
+- Replaced old CodeWarrior file os_mac.CW9.hqx with os_mac.cw5.sit.hqx.
+
+Fixes for VMS: (Zoltan Arpadffy) (also see patch 5.6.045 below)
+- Added Makefile_vms.mms and vimrc.vms to src/testdir to be able to run the
+ tests.
+- Various fixes.
+- Set 'undolevels' to 1000 by default.
+- Made mch_settitle() equivalent to the one in os_unix.c.
+
+RiscOS: A few prototypes for os_riscos.c were outdated. Generate prototypes
+automatically.
+
+
+Previously released patches:
+
+Patch 5.6.001
+Problem: When using "set bs=0 si cin", Inserting "#<BS>" or "}<BS>" which
+ reduces the indent doesn't delete the "#" or "}". (Lorton)
+Solution: Adjust ai_col in ins_try_si().
+Files: src/edit.c
+
+Patch 5.6.002
+Problem: When using the vim.vim syntax file, a comment with all uppercase
+ characters causes a hang.
+Solution: Adjust pattern for vimCommentTitle (Charles Campbell)
+Files: runtime/syntax/vim.vim
+
+Patch 5.6.003
+Problem: GTK GUI: Loading a user defined toolbar bitmap gives a warning
+ about the colormap. Probably because the window has not been
+ opened yet.
+Solution: Use gdk_pixmap_colormap_create_from_xpm() to convert the xpm file.
+ (Keith Radebaugh)
+Files: src/gui_gtk.c
+
+Patch 5.6.004 (extra)
+Problem: Win32 GUI with IME: When setting 'guifont' to "*", the font
+ requester appears twice.
+Solution: In gui_mch_init_font() don't call get_logfont() but copy
+ norm_logfont from fh. (Yasuhiro Matsumoto)
+Files: src/gui_w32.c
+
+Patch 5.6.005
+Problem: When 'winminheight' is zero, CTRL-W - with a big number causes a
+ crash. (David Kotchan)
+Solution: Check for negative window height in win_setheight().
+Files: src/window.c
+
+Patch 5.6.006
+Problem: GTK GUI: Bold font cannot always be used. Memory is freed too
+ early in gui_mch_init_font().
+Solution: Move call to g_free() to after where sdup is used. (Artem Hodyush)
+Files: src/gui_gtk_x11.c
+
+Patch 5.6.007 (extra)
+Problem: Win32 IME: Font is not changed when screen font is changed. And
+ IME composition window does not trace the cursor.
+Solution: Initialize IME font. When cursor is moved, set IME composition
+ window with ImeSetCompositionWindow(). Add call to
+ ImmReleaseContext() in several places. (Taro Muraoka)
+Files: src/gui.c, src/gui_w32.c, src/proto/gui_w32.pro
+
+Patch 5.6.008 (extra)
+Problem: Win32: When two files exist with the same name but different case
+ (through NFS or Samba), fixing the file name case could cause the
+ wrong one to be edited.
+Solution: Prefer a perfect match above a match while ignoring case in
+ fname_case(). (Flemming Madsen)
+Files: src/os_win32.c
+
+Patch 5.6.009 (extra)
+Problem: Win32 GUI: Garbage in Windows Explorer help line when selecting
+ "Edit with Vim" popup menu entry.
+Solution: Only return the help line when called with the GCS_HELPTEXT flag.
+ (Tianmiao Hu)
+Files: GvimExt/gvimext.cpp
+
+Patch 5.6.010
+Problem: A file name which contains a TAB was not read correctly from the
+ viminfo file and the ":ls" listing was not aligned properly.
+Solution: Parse the buffer list lines in the viminfo file from the end
+ backwards. Count a Tab for two characters to align the ":ls" list.
+Files: src/buffer.c
+
+Patch 5.6.011
+Problem: When 'columns' is huge (using a tiny font) and 'statusline' is
+ used, Vim can crash.
+Solution: Limit maxlen to MAXPATHL in win_redr_custom(). (John Mullin)
+Files: src/screen.c
+
+Patch 5.6.012
+Problem: When using "zsh" for /bin/sh, toolcheck may hang until "exit" is
+ typed. (Kuratczyk)
+Solution: Add "-c exit" when checking for the shell version.
+Files: src/toolcheck
+
+Patch 5.6.013
+Problem: Multibyte char in tooltip is broken.
+Solution: Consider multibyte char in replace_termcodes(). (Taro Muraoka)
+Files: src/term.c
+
+Patch 5.6.014
+Problem: When cursor is at the end of line and the character under cursor
+ is a multibyte character, "yl" doesn't yank 1 multibyte-char.
+ (Takuhiro Nishioka)
+Solution: Recognize a multibyte-char at end-of-line correctly in oneright().
+ (Taro Muraoka)
+ Also: make "+quickfix" in ":version" output appear alphabetically.
+Files: src/edit.c
+
+Patch 5.6.015
+Problem: New xterm delete key sends <Esc>[3~ by default.
+Solution: Added <kDel> and <kIns> to make the set of keypad keys complete.
+Files: src/edit.c, src/ex_getln.c, src/keymap.h, src/misc1.c,
+ src/misc2.c, src/normal.c, src/os_unix.c, src/term.c
+
+Patch 5.6.016
+Problem: When deleting a search string from history from inside a mapping,
+ another entry is deleted too. (Benji Fisher)
+Solution: Reset last_maptick when deleting the last entry of the search
+ history. Also: Increment maptick when starting a mapping from
+ typed characters to avoid a just added search string being
+ overwritten or removed from history.
+Files: src/ex_getln.c, src/getchar.c
+
+Patch 5.6.017
+Problem: ":s/e/\^M/" should replace an "e" with a CTRL-M, not split the
+ line. (Calder)
+Solution: Replace the backslash with a CTRL-V internally. (Stephen P. Wall)
+Files: src/ex_cmds.c
+
+Patch 5.6.018
+Problem: ":help [:digit:]" takes a long time to jump to the wrong place.
+Solution: Insert a backslash to avoid the special meaning of '[]'.
+Files: src/ex_cmds.c
+
+Patch 5.6.019
+Problem: "snd.c", "snd.java", etc. were recognized as "mail" filetype.
+Solution: Make pattern for mail filetype more strict.
+Files: runtime/filetype.vim
+
+Patch 5.6.020 (extra)
+Problem: The DJGPP version eats processor time (Walter Briscoe).
+Solution: Call __dpmi_yield() in the busy-wait loop.
+Files: src/os_msdos.c
+
+Patch 5.6.021
+Problem: When 'selection' is "exclusive", a double mouse click in Insert
+ mode doesn't select last char in line. (Lutz)
+Solution: Allow leaving the cursor on the NUL past the line in this case.
+Files: src/edit.c
+
+Patch 5.6.022
+Problem: ":e \~<Tab>" expands to ":e ~\$ceelen", which doesn't work.
+Solution: Re-insert the backslash before the '~'.
+Files: src/ex_getln.c
+
+Patch 5.6.023 (extra)
+Problem: Various warnings for the Ming compiler.
+Solution: Changes to avoid the warnings. (Bill McCarthy)
+Files: src/ex_cmds.c, src/gui_w32.c, src/os_w32exe.c, src/os_win32.c,
+ src/syntax.c, src/vim.rc
+
+Patch 5.6.024 (extra)
+Problem: Win32 console: Entering CTRL-_ requires the shift key. (Kotchan)
+Solution: Specifically catch keycode 0xBD, like the GUI.
+Files: src/os_win32.c
+
+Patch 5.6.025
+Problem: GTK GUI: Starting the GUI could be interrupted by a SIGWINCH.
+ (Nils Lohner)
+Solution: Repeat the read() call to get the gui_in_use value when
+ interrupted by a signal.
+Files: src/gui.c
+
+Patch 5.6.026 (extra)
+Problem: Win32 GUI: Toolbar bitmaps are searched for in
+ $VIMRUNTIME/bitmaps, while GTK looks in $VIM/bitmaps. (Keith
+ Radebaugh)
+Solution: Use $VIM/bitmaps for both, because these are not part of the
+ distribution but defined by the user.
+Files: src/gui_w32.c, runtime/doc/gui.txt
+
+Patch 5.6.027
+Problem: TCL: Crash when using a Tcl script (reported for Win32).
+Solution: Call Tcl_FindExecutable() in main(). (Brent Fulgham)
+Files: src/main.c
+
+Patch 5.6.028
+Problem: Xterm patch level 126 sends codes for mouse scroll wheel.
+ Fully works with xterm patch level 131.
+Solution: Recognize the codes for button 4 (0x60) and button 5 (0x61).
+Files: src/term.c
+
+Patch 5.6.029
+Problem: GTK GUI: Shortcut keys cannot be used for a dialog. (Johannes
+ Zellner)
+Solution: Add support for shortcut keys. (Marcin Dalecki)
+Files: src/gui_gtk.c
+
+Patch 5.6.030
+Problem: When closing a window and 'ea' is set, Vim can crash. (Yasuhiro
+ Matsumoto)
+Solution: Set "curbuf" to a valid value in win_close().
+Files: src/window.c
+
+Patch 5.6.031
+Problem: Multi-byte: When a double-byte character ends in CSI, Vim waits
+ for another character to be typed.
+Solution: Recognize the CSI as the second byte of a character and don't wait
+ for another one. (Yasuhiro Matsumoto)
+Files: src/getchar.c
+
+Patch 5.6.032
+Problem: Functions with an argument that is a line number don't all accept
+ ".", "$", etc. (Ralf Arens)
+Solution: Add get_art_lnum() and use it for setline(), line2byte() and
+ synID().
+Files: src/eval.c
+
+Patch 5.6.033
+Problem: Multi-byte: "f " sometimes skips to the second space. (Sung-Hyun
+ Nam)
+Solution: Change logic in searchc() to skip trailing byte of a double-byte
+ character.
+ Also: Ask for second byte when searching for double-byte
+ character. (Park Chong-Dae)
+Files: src/search.c
+
+Patch 5.6.034 (extra)
+Problem: Compiling with Borland C++ 5.5 fails on tolower() and toupper().
+Solution: Use TO_LOWER() and TO_UPPER() instead. Also adjust the Makefile
+ to make using bcc 5.5 easier.
+Files: src/edit.c, src/ex_docmd.c, src/misc1.c, src/Makefile.bor
+
+Patch 5.6.035
+Problem: Listing the"+comments" feature in the ":version" output depended
+ on the wrong ID. (Stephen P. Wall)
+Solution: Change "CRYPTV" to "COMMENTS".
+Files: src/version.c
+
+Patch 5.6.036
+Problem: GTK GUI: Copy/paste text doesn't work between gvim and Eterm.
+Solution: Support TEXT and COMPOUND_TEXT selection targets. (ChiDeok Hwang)
+Files: src/gui_gtk_x11.c
+
+Patch 5.6.037
+Problem: Multi-byte: Can't use "f" command with multi-byte character in GUI.
+Solution: Enable XIM in Normal mode for the GUI. (Sung-Hyun Nam)
+Files: src/gui_gtk_x11.c, src/multbyte.c
+
+Patch 5.6.038
+Problem: Multi-clicks in GUI are interpreted as a mouse wheel click. When
+ 'ttymouse' is "xterm" a mouse click is interpreted as a mouse
+ wheel click.
+Solution: Don't recognize the mouse wheel in check_termcode() in the GUI.
+ Use 0x43 for a mouse drag in do_xterm_trace(), not 0x63.
+Files: src/term.c, src/os_unix.c
+
+Patch 5.6.039
+Problem: Motif GUI under KDE: When trying to logout, Vim hangs up the
+ system. (Hermann Rochholz)
+Solution: When handling the WM_SAVE_YOURSELF event, set the WM_COMMAND
+ property of the window to let the session manager know we finished
+ saving ourselves.
+Files: src/gui_x11.c
+
+Patch 5.6.040
+Problem: When using ":s" command, matching the regexp is done twice.
+Solution: After copying the matched line, adjust the pointers instead of
+ finding the match again. (Loic Grenie) Added vim_regnewptr().
+Files: src/ex_cmds.c, src/regexp.c, src/proto/regexp.pro
+
+Patch 5.6.041
+Problem: GUI: Athena, Motif and GTK don't give more than 10 dialog buttons.
+Solution: Remove the limit on the number of buttons.
+ Also support the 'v' flag in 'guioptions'.
+ For GTK: Center the buttons.
+Files: src/gui_athena.c, src/gui_gtk.c, src/gui_motif.c
+
+Patch 5.6.042
+Problem: When doing "vim -u vimrc" and vimrc contains ":q", the cursor in
+ the terminal can remain off.
+Solution: Call cursor_on() in mch_windexit().
+Files: src/os_unix.c
+
+Patch 5.6.043 (extra)
+Problem: Win32 GUI: When selecting guifont with the dialog, 'guifont'
+ doesn't include the bold or italic attributes.
+Solution: Append ":i" and/or ":b" to 'guifont' in gui_mch_init_font().
+Files: src/gui_w32.c
+
+Patch 5.6.044 (extra)
+Problem: MS-DOS and Windows: The line that dosinst.exe appends to
+ autoexec.bat to set PATH is wrong when Vim is in a directory with
+ an embedded space.
+Solution: Use double quotes for the value when there is an embedded space.
+Files: src/dosinst.c
+
+Patch 5.6.045 (extra) (fixed version)
+Problem: VMS: Various small problems.
+Solution: Many small changes. (Zoltan Arpadffy)
+ File name modifier ":h" keeps the path separator.
+ File name modifier ":e" also removes version.
+ Compile with MAX_FEAT by default.
+ When checking for autocommands ignore version in file name.
+ Be aware of file names being case insensitive.
+ Added vt320 builtin termcap.
+ Be prepared for an empty default_vim_dir.
+Files: runtime/gvimrc_example.vim, runtime/vimrc_example.vim,
+ runtime/doc/os_vms.txt, src/eval.c, src/feature.h, src/fileio.c,
+ src/gui_motif.c, src/gui_vms_conf.h, src/main.c, src/memline.c,
+ src/misc1.c, src/option.c, src/os_vms_conf.h, src/os_vms.c,
+ src/os_vms.h, src/os_vms.mms, src/tag.c, src/term.c, src/version.c
+
+Patch 5.6.046
+Problem: Systems with backslash in file name: With 'shellslash' set, "vim
+ */*.c" only uses a slash for the first file name. (Har'El)
+Solution: Fix slashes in file name arguments after reading the vimrc file.
+Files: src/option.c
+
+Patch 5.6.047
+Problem: $CPPFLAGS is not passed on to ctags configure.
+Solution: Add it. (Walter Briscoe)
+Files: src/config.mk.in, src/Makefile
+
+Patch 5.6.048
+Problem: CTRL-R in Command-line mode is documented to insert text as typed,
+ but inserts text literally.
+Solution: Make CTRL-R insert text as typed, use CTRL-R CTRL-R to insert
+ literally. This is consistent with Insert mode. But characters
+ that end Command-line mode are inserted literally.
+Files: runtime/doc/index.txt, runtime/doc/cmdline.txt, src/ex_getln.c,
+ src/ops.c, src/proto/ops.pro
+
+Patch 5.6.049
+Problem: Documentation for [!] after ":ijump" is wrong way around. (Benji
+ Fisher)
+Solution: Fix the documentation. Also improve the code to check for a match
+ after a /* */ comment.
+Files: runtime/doc/tagsearch.txt, src/search.c
+
+Patch 5.6.050
+Problem: Replacing is wrong when replacing a single-byte char with
+ double-byte char or the other way around.
+Solution: Shift the text after the character when it is replaced.
+ (Yasuhiro Matsumoto)
+Files: src/normal.c, src/misc1.c
+
+Patch 5.6.051
+Problem: ":tprev" and ":tnext" don't give an error message when trying to
+ go before the first or beyond the last tag. (Robert Webb)
+Solution: Added error messages. Also: Delay a second when a file-read
+ message is going to overwrite an error message, otherwise it won't
+ be seen.
+Files: src/fileio.c, src/tag.c
+
+Patch 5.6.052
+Problem: Multi-byte: When an Ex command has a '|' or '"' as a second byte,
+ it terminates the command.
+Solution: Skip second byte of multi-byte char when checking for '|' and '"'.
+ (Asai Kenichi)
+Files: src/ex_docmd.c
+
+Patch 5.6.053
+Problem: CTRL-] doesn't work on a tag that contains a '|'. (Cesar Crusius)
+Solution: Escape '|', '"' and '\' in tag names when using CTRL-] and also
+ for command-line completion.
+Files: src/ex_getln.c, src/normal.c
+
+Patch 5.6.054
+Problem: When using ":e" and ":e #" the cursor is put in the first column
+ when 'startofline' is set. (Cordell)
+Solution: Use the last known column when 'startofline' is set.
+ Also, use ECMD_LAST more often to simplify the code.
+Files: src/buffer.c, src/ex_cmds.c, src/ex_docmd.c, src/proto/buffer.pro
+
+Patch 5.6.055
+Problem: When 'statusline' only contains a text without "%" and doesn't fit
+ in the window, Vim crashes. (Ron Aaron)
+Solution: Don't use the pointer for the first item if there is no item.
+Files: src/screen.c
+
+Patch 5.6.056 (extra)
+Problem: MS-DOS: F11 and F12 don't work when 'bioskey' is set.
+Solution: Use enhanced keyboard functions. (Vince Negri)
+ Detect presence of enhanced keyboard and set bioskey_read and
+ bioskey_ready.
+Files: src/os_msdos.c
+
+Patch 5.6.057 (extra)
+Problem: Win32 GUI: Multi-byte characters are wrong in dialogs and tear-off
+ menus.
+Solution: Use system font instead of a fixed font. (Matsumoto, Muraoka)
+Files: src/gui_w32.c
+
+Patch 5.6.058
+Problem: When the 'a' flag is not in 'guioptions', non-Windows systems
+ copy Visually selected text to the clipboard/selection on a yank
+ or delete command anyway. On Windows it isn't done even when the
+ 'a' flag is included.
+Solution: Respect the 'a' flag in 'guioptions' on all systems.
+Files: src/normal.c
+
+Patch 5.6.059 (extra)
+Problem: When moving the cursor over italic text and the characters spill
+ over to the cell on the right, that spill-over is deleted.
+ Noticed in the Win32 GUI, can happen on other systems too.
+Solution: Redraw italic text starting from a blank, like this is already
+ done for bold text. (Vince Negri)
+Files: src/gui.c, src/gui.h, src/gui_w32.c
+
+Patch 5.6.060
+Problem: Some bold characters spill over to the cell on the left, that
+ spill-over can remain sometimes.
+Solution: Redraw a characters when the next character was bold and needs
+ redrawing. (Robert Webb)
+Files: src/screen.c
+
+Patch 5.6.061
+Problem: When xterm sends 8-bit controls, recognizing the version response
+ doesn't work.
+ When using CSI instead of <Esc>[ for the termcap color codes,
+ using 16 colors doesn't work. (Neil Bird)
+Solution: Also accept CSI in place of <Esc>[ for the version string.
+ Also check for CSI when handling colors 8-15 in term_color().
+ Use CSI for builtin xterm termcap entries when 'term' contains
+ "8bit".
+Files: runtime/doc/term.txt, src/ex_cmds.c, src/option.c, src/term.c,
+ src/os_unix.c, src/proto/option.pro, src/proto/term.pro
+
+Patch 5.6.062
+Problem: The documentation says that setting 'smartindent' doesn't have an
+ effect when 'cindent' is set, but it does make a difference for
+ lines starting with "#". (Neil Bird)
+Solution: Really ignore 'smartindent' when 'cindent' is set.
+Files: src/misc1.c, src/ops.c
+
+Patch 5.6.063
+Problem: Using "I" in Visual-block mode doesn't accept a count. (Johannes
+ Zellner)
+Solution: Pass the count on to do_insert() and edit(). (Allan Kelly)
+Files: src/normal.c, src/ops.c, src/proto/ops.pro
+
+Patch 5.6.064
+Problem: MS-DOS and Win32 console: Mouse doesn't work correctly after
+ including patch 5.6.28. (Vince Negri)
+Solution: Don't check for mouse scroll wheel when the mouse code contains
+ the number of clicks.
+Files: src/term.c
+
+Patch 5.6.065
+Problem: After moving the cursor around in Insert mode, typing a space can
+ still trigger an abbreviation. (Benji Fisher)
+Solution: Don't check for an abbreviation after moving around in Insert mode.
+Files: src/edit.c
+
+Patch 5.6.066
+Problem: Still a few bold character spill-over remains after patch 60.
+Solution: Clear character just in front of blanking out rest of the line.
+ (Robert Webb)
+Files: src/screen.c
+
+Patch 5.6.067
+Problem: When a file name contains a NL, the viminfo file is corrupted.
+Solution: Use viminfo_writestring() to convert the NL to CTRL-V n.
+ Also fix the Buffers menu and listing a menu name with a newline.
+Files: runtime/menu.vim, src/buffer.c, src/mark.c, src/menu.c
+
+Patch 5.6.068
+Problem: Compiling the Perl interface doesn't work with Perl 5.6.0.
+ (Bernhard Rosenkraenzer)
+Solution: Also check xs_apiversion for the version number when prepending
+ defines for PL_*.
+Files: src/Makefile
+
+Patch 5.6.069
+Problem: "go" doesn't always end up at the right character when
+ 'fileformat' is "dos". (Bruce DeVisser)
+Solution: Correct computations in ml_find_line_or_offset().
+Files: src/memline.
+
+Patch 5.6.070 (depends on 5.6.068)
+Problem: Compiling the Perl interface doesn't work with Perl 5.6.0.
+ (Bernhard Rosenkraenzer)
+Solution: Simpler check instead of the one from patch 68.
+Files: src/Makefile
+
+Patch 5.6.071
+Problem: "A" in Visual block mode on a Tab positions the cursor one char to
+ the right. (Michael Haumann)
+Solution: Correct the column computation in op_insert().
+Files: src/ops.c
+
+Patch 5.6.072
+Problem: When starting Vim with "vim +startinsert", it enters Insert mode
+ only after typing the first command. (Andrew Pimlott)
+Solution: Insert a dummy command in the stuff buffer.
+Files: src/main.c
+
+Patch 5.6.073 (extra) (depends on 5.6.034)
+Problem: Win32 GUI: When compiled with Bcc 5.5 menus don't work.
+ In dosinst.c toupper() and tolower() give an "internal compiler
+ error" for Bcc 5.5.
+Solution: Define WINVER to 4 to avoid compiling for Windows 2000. (Dan
+ Sharp) Also cleaned up compilation arguments.
+ Use our own implementation of toupper() in dosinst.c. Use
+ mytoupper() instead of tolower().
+Files: src/Makefile.bor, src/dosinst.c
+
+Patch 5.6.074 (extra)
+Problem: Entering CSI directly doesn't always work, because it's recognized
+ as the start of a special key. Mostly a problem with multi-byte
+ in the GUI.
+Solution: Use K_CSI for a typed CSI character. Use <CSI> for a normal CSI,
+ <xCSI> for a CSI typed in the GUI.
+Files: runtime/doc/intro.txt, src/getchar.c, src/gui_amiga.c,
+ src/gui_gtk_x11.c, src/gui_mac.c, src/gui_riscos.c, src/gui_w32.c,
+ src/keymap.h, src/misc2.c
+
+Patch 5.6.075
+Problem: When using "I" or "A" in Visual block mode while 'sts' is set may
+ change spaces to a Tab the inserted text is not correct. (Mike
+ Steed) And some other problems when using "A" to append after the
+ end of the line.
+Solution: Check for change in spaces/tabs after inserting the text. Append
+ spaces to fill the gap between the end-of-line and the right edge
+ of the block.
+Files: src/ops.c
+
+Patch 5.6.076
+Problem: GTK GUI: Mapping <M-Space> doesn't work.
+Solution: Don't use the "Alt" modifier twice in key_press_event().
+Files: src/gui_gtk_x11.c
+
+Patch 5.6.077
+Problem: GUI: When interrupting an external program with CTRL-C, gvim might
+ crash. (Benjamin Korvemaker)
+Solution: Avoid using a NULL pointer in ui_inchar_undo().
+Files: src/ui.c
+
+Patch 5.6.078
+Problem: Locale doesn't always work on FreeBSD. (David O'Brien)
+Solution: Link with the "xpg4" library when available.
+Files: src/configure.in, src/configure
+
+Patch 5.6.079
+Problem: Vim could crash when several Tcl interpreters are created and
+ destroyed.
+Solution: handle the "exit" command and nested ":tcl" commands better. (Ingo
+ Wilken)
+Files: runtime/doc/if_tcl.txt, src/if_tcl.c
+
+Patch 5.6.080
+Problem: When jumping to a tag, generating the tags file and jumping to the
+ same tag again uses the old search pattern. (Sung-Hyun Nam)
+Solution: Flush cached tag matches when executing an external command.
+Files: src/misc2.c, src/proto/tag.pro, src/tag.c
+
+Patch 5.6.081
+Problem: ":syn include" uses a level for the included file, this confuses
+ contained items included at the same level.
+Solution: Use a unique tag for each included file. Changed sp_syn_inc_lvl
+ to sp_syn_inc_tag. (Scott Bigham)
+Files: src/syntax.c, src/structs.h
+
+Patch 5.6.082
+Problem: When using cscope, Vim can crash.
+Solution: Initialize tag_fname in find_tags(). (Anton Blanchard)
+Files: src/tag.c
+
+Patch 5.6.083 (extra)
+Problem: Win32: The visual beep can't be seen. (Eric Roesinger)
+Solution: Flush the output before waiting with GdiFlush(). (Maurice S. Barnum)
+ Also: Allow specifying the delay in t_vb for the GUI.
+Files: src/gui.c, src/gui_amiga.c, src/gui_gtk_x11.c, src/gui_mac.c,
+ src/gui_riscos.c, src/gui_w32.c, src/gui_x11.c, src/gui_beos.cc,
+ src/proto/gui_amiga.pro, src/proto/gui_gtk_x11.pro,
+ src/proto/gui_mac.pro, src/proto/gui_riscos.pro,
+ src/proto/gui_w32.pro, src/proto/gui_x11.pro,
+ src/proto/gui_beos.pro
+
+Patch 5.6.084 (depends on 5.6.074)
+Problem: GUI: Entering CSI doesn't always work for Athena and Motif.
+Solution: Handle typed CSI as <xCSI> (forgot this bit in 5.6.074).
+Files: src/gui_x11.c
+
+Patch 5.6.085
+Problem: Multi-byte: Using "r" to replace a double-byte char with a
+ single-byte char moved the cursor one character. (Matsumoto)
+ Also, using a count when replacing a single-byte char with a
+ double-byte char didn't work.
+Solution: Don't use del_char() to delete the second byte.
+ Get "ptr" again after calling ins_char().
+Files: src/normal.c
+
+Patch 5.6.086 (extra)
+Problem: Win32: When using libcall() and the returned value is not a valid
+ pointer, Vim crashes.
+Solution: Use IsBadStringPtr() to check if the pointer is valid.
+Files: src/os_win32.c
+
+Patch 5.6.087
+Problem: Multi-byte: Commands and messages with multi-byte characters are
+ displayed wrong.
+Solution: Detect double-byte characters. (Yasuhiro Matsumoto)
+Files: src/ex_getln.c, src/message.c, src/misc2.c, src/screen.c
+
+Patch 5.6.088
+Problem: Multi-byte with Motif or Athena: The message "XIM requires
+ fontset" is annoying when Vim was compiled with XIM support but it
+ is not being used.
+Solution: Remove that message.
+Files: src/multbyte.c
+
+Patch 5.6.089
+Problem: On non-Unix systems it's possible to overwrite a read-only file
+ without using "!".
+Solution: Check if the file permissions allow overwriting before moving the
+ file to become the backup file.
+Files: src/fileio.c
+
+Patch 5.6.090
+Problem: When editing a file in "/home/dir/home/dir" this was replaced with
+ "~~". (Andreas Jellinghaus)
+Solution: Replace the home directory only once in home_replace().
+Files: src/misc1.c
+
+Patch 5.6.091
+Problem: When editing many "no file" files, can't create swap file, because
+ .sw[a-p] have all been used. (Neil Bird)
+Solution: Also use ".sv[a-z]", ".su[a-z]", etc.
+Files: src/memline.c
+
+Patch 5.6.092
+Problem: FreeBSD: When setting $TERM to a non-valid terminal name, Vim
+ hangs in tputs().
+Solution: After tgetent() returns an error code, call it again with the
+ terminal name "dumb". This apparently creates an environment in
+ which tputs() doesn't fail.
+Files: src/term.c
+
+Patch 5.6.093 (extra)
+Problem: Win32 GUI: "ls | gvim -" will show a message box about reading
+ stdin when Vim exits. (Donohue)
+Solution: Don't write a message about the file read from stdin until the GUI
+ has started.
+Files: src/fileio.c
+
+Patch 5.6.094
+Problem: Problem with multi-byte string for ":echo var".
+Solution: Check for length in msg_outtrans_len_attr(). (Sung-Hyun Nam)
+ Also make do_echo() aware of multi-byte characters.
+Files: src/eval.c, src/message.c
+
+Patch 5.6.095
+Problem: With an Emacs TAGS file that include another a relative path
+ doesn't always work.
+Solution: Use expand_tag_fname() on the name of the included file.
+ (Utz-Uwe Haus)
+Files: src/tag.c
+
+Patch 5.6.096
+Problem: Unix: When editing many files, startup can be slow. (Paul
+ Ackersviller)
+Solution: Halve the number of stat() calls used to add a file to the buffer
+ list.
+Files: src/buffer.c
+
+Patch 5.7a.001
+Problem: GTK doesn't respond on drag&drop from ROX-Filer.
+Solution: Add "text/uri-list" target. (Thomas Leonard)
+ Also: fix problem with checking for trash arguments.
+Files: src/gui_gtk_x11.c
+
+Patch 5.7a.002
+Problem: Multi-byte: 'showmatch' is performed when second byte of an
+ inserted double-byte char is a paren or brace.
+Solution: Check IsTrailByte() before calling showmatch(). (Taro Muraoka)
+Files: src/misc1.c
+
+Patch 5.7a.003
+Problem: Multi-byte: After using CTRL-O in Insert mode with the cursor at
+ the end of the line on a multi-byte character the cursor moves to
+ the left.
+Solution: Check for multi-byte character at end-of-line. (Taro Muraoka)
+ Also: fix cls() to detect a double-byte character. (Chong-Dae Park)
+Files: src/edit.c, src/search.c
+
+Patch 5.7a.004
+Problem: When reporting the search pattern offset, the string could be
+ unterminated, which may cause a crash.
+Solution: Terminate the string for the search offset. (Stephen P. Wall)
+Files: src/search.c
+
+Patch 5.7a.005
+Problem: When ":s//~/" doesn't find a match it reports "[NULL]" for the
+ pattern.
+Solution: Use get_search_pat() to obtain the actually used pattern.
+Files: src/ex_cmds.c, src/proto/search.pro, src/search.c
+
+Patch 5.7a.006 (extra)
+Problem: VMS: Various problems, also with the VAXC compiler.
+Solution: In many places use the Unix code for VMS too.
+ Added time, date and compiler version to version message.
+ (Zoltan Arpadffy)
+Files: src/ex_cmds.c, src/ex_docmd.c, src/globals.h, src/gui_vms_conf.h,
+ src/main.c, src/message.c, src/misc1.c, src/os_vms.c,
+ src/os_vms.h, src/os_vms.mms, src/os_vms_conf.h,
+ src/proto/os_vms.pro, src/proto/version.pro, src/term.c,
+ src/version.c, src/xxd/os_vms.mms, src/xxd/xxd.c
+
+Patch 5.7a.007
+Problem: Motif and Athena GUI: CTRL-@ is interpreted as CTRL-C.
+Solution: Only use "intr_char" when it has been set.
+Files: src/gui_x11.c
+
+Patch 5.7a.008
+Problem: GTK GUI: When using CTRL-L the screen is redrawn twice, causing
+ trouble for bold characters. Also happens when moving with the
+ scrollbar. Best seen when 'writedelay' is non-zero.
+ When starting the GUI with ":gui" the screen is redrawn once with
+ the wrong colors.
+Solution: Only set the geometry hints when the window size really changed.
+ This avoids setting it each time the scrollbar is forcefully
+ redrawn.
+ Don't redraw in expose_event() when gui.starting is still set.
+Files: src/gui_gtk_x11.c
+
+
+==============================================================================
+VERSION 5.8 *version-5.8*
+
+Version 5.8 is a bug-fix version of 5.7.
+
+
+Changed *changed-5.8*
+-------
+
+Ctags is no longer included with Vim. It has grown into a project of its own.
+You can find it here: http://ctags.sf.net. It is highly recommended as a Vim
+companion when you are writing programs.
+
+
+Added *added-5.8*
+-----
+
+New syntax files:
+acedb AceDB (Stewart Morris)
+aflex Aflex (Mathieu Clabaut)
+antlr Antlr (Mathieu Clabaut)
+asm68k 68000 Assembly (Steve Wall)
+automake Automake (John Williams)
+ayacc Ayacc (Mathieu Clabaut)
+b B (Mathieu Clabaut)
+bindzone BIND zone (glory hump)
+blank Blank (Rafal Sulejman)
+cfg Configure files (Igor Prischepoff)
+changelog ChangeLog (Gediminas Paulauskas)
+cl Clever (Phil Uren)
+crontab Crontab (John Hoelzel)
+csc Essbase script (Raul Segura Acevedo)
+cynlib Cynlib(C++) (Phil Derrick)
+cynpp Cyn++ (Phil Derrick)
+debchangelog Debian Changelog (Wichert Akkerman)
+debcontrol Debian Control (Wichert Akkerman)
+dns DNS zone file (Jehsom)
+dtml Zope's DTML (Jean Jordaan)
+dylan Dylan, Dylan-intr and Dylan-lid (Brent Fulgham)
+ecd Embedix Component Description (John Beppu)
+fgl Informix 4GL (Rafal Sulejman)
+foxpro FoxPro (Powing Tse)
+gsp GNU Server Pages (Nathaniel Harward)
+gtkrc GTK rc (David Necas)
+hercules Hercules (Avant! Corporation) (Dana Edwards)
+htmlos HTML/OS by Aestiva (Jason Rust)
+inittab SysV process control (David Necas)
+iss Inno Setup (Dominique Stephan)
+jam Jam (Ralf Lemke)
+jess Jess (Paul Baleme)
+lprolog LambdaProlog (Markus Mottl)
+ia64 Intel Itanium (parth malwankar)
+kix Kixtart (Nigel Gibbs)
+mgp MaGic Point (Gerfried Fuchs)
+mason Mason (HTML with Perl) (Andrew Smith)
+mma Mathematica (Wolfgang Waltenberger)
+nqc Not Quite C (Stefan Scherer)
+omnimark Omnimark (Paul Terray)
+openroad OpenROAD (Luis Moreno Serrano)
+named BIND configuration (glory hump)
+papp PApp (Marc Lehmann)
+pfmain Postfix main config (Peter Kelemen)
+pic PIC assembly (Aleksandar Veselinovic)
+ppwiz PPWizard (Stefan Schwarzer)
+progress Progress (Phil Uren)
+psf Product Specification File (Rex Barzee)
+r R (Tom Payne)
+registry MS-Windows registry (Dominique Stephan)
+robots Robots.txt (Dominique Stephan)
+rtf Rich Text Format (Dominique Stephan)
+setl SETL (Alex Poylisher)
+sgmldecl SGML Declarations (Daniel A. Molina W.)
+sinda Sinda input (Adrian Nagle)
+sindacmp Sinda compare (Adrian Nagle)
+sindaout Sinda output (Adrian Nagle)
+smith SMITH (Rafal Sulejman)
+snobol4 Snobol 4 (Rafal Sulejman)
+strace Strace (David Necas)
+tak TAK input (Adrian Nagle)
+takcmp TAK compare (Adrian Nagle)
+takout TAK output (Adrian Nagle)
+tasm Turbo assembly (FooLman)
+texmf TeX configuration (David Necas)
+trasys Trasys input (Adrian Nagle)
+tssgm TSS Geometry (Adrian Nagle)
+tssop TSS Optics (Adrian Nagle)
+tsscl TSS Command line (Adrian Nagle)
+virata Virata Configuration Script (Manuel M.H. Stol)
+vsejcl VSE JCL (David Ondrejko)
+wdiff Wordwise diff (Gerfried Fuchs)
+wsh Windows Scripting Host (Paul Moore)
+xkb X Keyboard Extension (David Necas)
+
+Renamed php3 to php, it now also supports php4 (Lutz Eymers)
+
+Patch 5.7.015
+Problem: Syntax files for Vim 6.0 can't be used with 5.x.
+Solution: Add the "default" argument to the ":highlight" command: Ignore the
+ command if highlighting was already specified.
+Files: src/syntax.c
+
+Generate the Syntax menu with makemenu.vim, so that it doesn't have to be done
+when Vim is starting up. Reduces the startup time of the GUI.
+
+
+Fixed *fixed-5.8*
+-----
+
+Conversion of docs to HTML didn't convert "|tag|s" to a hyperlink.
+
+Fixed compiling under NeXT. (Jeroen C.M. Goudswaard)
+
+optwin.vim gave an error when used in Vi compatible mode ('cpo' contains 'C').
+
+Tcl interpreter: "buffer" command didn't check for precense of an argument.
+(Dave Bodenstab)
+
+dosinst.c: Added checks for too long file name.
+
+Amiga: a file name starting with a colon was considered absolute but it isn't.
+Amiga: ":pwd" added a slash when in the root of a drive.
+
+Macintosh: Warnings for unused variables. (Bernhard Pruemmer)
+
+Unix: When catching a deadly signal, handle it in such a way that it's
+unlikely that Vim will hang. Call _exit() instead of exit() in case of a
+severe problem.
+
+Setting the window title from nothing to something didn't work after patch 29.
+
+Check for ownership of .exrc and .vimrc was done with stat(). Use lstat() as
+well for extra security.
+
+Win32 GUI: Printing a file with 'fileformat' "unix" didn't work. Set
+'fileformat' to "dos" before writing the temp file.
+
+Unix: Could start waiting for a character when checking for a CTRL-C typed
+when an X event is received.
+
+Could not use Perl and Python at the same time on FreeBSD, because Perl used
+"-lc" and Python used the threaded C library.
+
+Win32: The Mingw compiler gave a few warning messages.
+
+When using "ZZ" and an autocommand for writing uses an abbreviation it didn't
+work. Don't stuff the ":x" command but execute it directly. (Mikael Berthe)
+
+VMS doesn't always have lstat(), added an #ifdef around it.
+
+Added a few corrections for the Macintosh. (Axel Kielhorn)
+
+Win32: Gvimext could not edit more than a few files at once, the length of the
+argument was fixed.
+
+
+Previously released patches for Vim 5.7:
+
+Patch 5.7.001
+Problem: When the current buffer is crypted, and another modified buffer
+ isn't, ":wall" will encrypt the other buffer.
+Solution: In buf_write() use "buf" instead of "curbuf" to check for the
+ crypt key.
+Files: src/fileio.c
+
+Patch 5.7.002
+Problem: When 'showmode' is set, using "CTRL-O :r file" waits three seconds
+ before displaying the read text. (Wichert Akkerman)
+Solution: Set "keep_msg" to the file message so that the screen is redrawn
+ before the three seconds wait for displaying the mode message.
+Files: src/fileio.c
+
+Patch 5.7.003
+Problem: Searching for "[[:cntrl:]]" doesn't work.
+Solution: Exclude NUL from the matching characters, it terminates the list.
+Files: src/regexp.c
+
+Patch 5.7.004
+Problem: GTK: When selecting a new font, Vim can crash.
+Solution: In gui_mch_init_font() unreference the old font, not the new one.
+Files: src/gui_gtk_x11.c
+
+Patch 5.7.005
+Problem: Multibyte: Inserting a wrapped line corrupts kterm screen.
+ Pasting TEXT/COMPOUND_TEXT into Vim does not work.
+ On Motif no XIM status line is displayed even though it is
+ available.
+Solution: Don't use xterm trick for wrapping lines for multibyte mode.
+ Correct a missing "break", added TEXT/COMPOUND_TEXT selection
+ request.
+ Add XIMStatusArea fallback code.
+ (Katsuhito Nagano)
+Files: src/gui_gtk_x11.c, src/multbyte.c, src/screen.c, src/ui.c
+
+Patch 5.7.006
+Problem: GUI: redrawing the non-Visual selection is wrong when the window
+ is unobscured. (Jean-Pierre Etienne)
+Solution: Redraw the selection properly and don't clear it. Added "len"
+ argument to clip_may_redraw_selection().
+Files: src/gui.c, src/ui.c, src/proto/ui.pro
+
+Patch 5.7.007
+Problem: Python: Crash when using the current buffer twice.
+Solution: Increase the reference count for buffer and window objects.
+ (Johannes Zellner)
+Files: src/if_python.c
+
+Patch 5.7.008
+Problem: In Ex mode, backspacing over the first TAB doesn't work properly.
+ (Wichert Akkerman)
+Solution: Switch the cursor on before printing the newline.
+Files: src/ex_getln.c
+
+Patch 5.7.009 (extra)
+Problem: Mac: Crash when using a long file.
+Solution: Don't redefine malloc() and free(), because it will break using
+ realloc().
+Files: src/os_mac.h
+
+Patch 5.7.010
+Problem: When using CTRL-A on a very long number Vim can crash. (Michael
+ Naumann)
+Solution: Truncate the length of the new number to avoid a buffer overflow.
+Files: src/ops.c
+
+Patch 5.7.011 (extra)
+Problem: Win32 GUI on NT 5 and Win98: Displaying Hebrew is reversed.
+Solution: Output each character separately, to avoid that Windows reverses
+ the text for some fonts. (Ron Aaron)
+Files: src/gui_w32.c
+
+Patch 5.7.012
+Problem: When using "-complete=buffer" for ":command" the user command
+ fails.
+Solution: In a user command don't replace the buffer name with a count for
+ the buffer number.
+Files: src/ex_docmd.c
+
+Patch 5.7.013
+Problem: "gD" didn't always find a match in the first line, depending on
+ the column the search started at.
+Solution: Reset the column to zero before starting to search.
+Files: src/normal.c
+
+Patch 5.7.014
+Problem: Rot13 encoding was done on characters with accents, which is
+ wrong. (Sven Gottwald)
+Solution: Only do rot13 encoding on ASCII characters.
+Files: src/ops.c
+
+Patch 5.7.016
+Problem: When hitting 'n' for a ":s///c" command, the ignore-case flag was
+ not restored, some matches were skipped. (Daniel Blaustein)
+Solution: Restore the reg_ic variable when 'n' was hit.
+Files: src/ex_cmds.c
+
+Patch 5.7.017
+Problem: When using a Vim script for Vim 6.0 with <SID> before a function
+ name, it produces an error message even when inside an "if version
+ >= 600". (Charles Campbell)
+Solution: Ignore errors in the function name when the function is not going
+ to be defined.
+Files: src/eval.c
+
+Patch 5.7.018
+Problem: When running "rvim" or "vim -Z" it was still possible to execute a
+ shell command with system() and backtick-expansion. (Antonios A.
+ Kavarnos)
+Solution: Disallow executing a shell command in get_cmd_output() and
+ mch_expand_wildcards().
+Files: src/misc1.c, src/os_unix.c
+
+Patch 5.7.019
+Problem: Multibyte: In a substitute string, a multi-byte character isn't
+ skipped properly, can be a problem when the second byte is a
+ backslash.
+Solution: Skip an extra byte for a double-byte character. (Muraoka Taro)
+Files: src/ex_cmds.c
+
+Patch 5.7.020
+Problem: Compilation doesn't work on MacOS-X.
+Solution: Add a couple of #ifdefs. (Jamie Curmi)
+Files: src/regexp.c, src/ctags/general.h
+
+Patch 5.7.021
+Problem: Vim sometimes produces a beep when started in an xterm. Only
+ happens when compiled without mouse support.
+Solution: Requesting the xterm version results in a K_IGNORE. This wasn't
+ handled when mouse support is disabled. Accept K_IGNORE always.
+Files: src/normal.c
+
+Patch 5.7.022
+Problem: %v in 'statusline' is not displayed when it's equal to %c.
+Solution: Check if %V or %v is used and handle them differently.
+Files: src/screen.c
+
+Patch 5.7.023
+Problem: Crash when a WinLeave autocommand deletes the buffer in the other
+ window.
+Solution: Check that after executing the WinLeave autocommands there still
+ is a window to be closed. Also update the test that was supposed
+ to check for this problem.
+Files: src/window.c, testdir/test13.in, testdir/test13.ok
+
+Patch 5.7.024
+Problem: Evaluating an expression for 'statusline' can have side effects.
+Solution: Evaluate the expression in a sandbox.
+Files: src/edit.c, src/eval.c, src/proto/eval.pro, src/ex_cmds.c,
+ src/ex_cmds.h, src/ex_docmd.c, src/globals.h, src/option.c,
+ src/screen.c, src/undo.c
+
+Patch 5.7.025 (fixed)
+Problem: Creating a temp file has a race condition.
+Solution: Create a private directory to write the temp files in.
+Files: src/fileio.c, src/misc1.c, src/proto/misc1.pro,
+ src/proto/fileio.pro, src/memline.c, src/os_unix.h
+
+Patch 5.7.026 (extra)
+Problem: Creating a temp file has a race condition.
+Solution: Create a private directory to write the temp files in.
+ This is the extra part of patch 5.7.025.
+Files: src/os_msdos.h
+
+Patch 5.7.027
+Problem: Starting to edit a file can cause a crash. For example when in
+ Insert mode, using CTRL-O :help abbr<Tab> to scroll the screen and
+ then <CR>, which edits a help file. (Robert Bogomip)
+Solution: Check if keep_msg is NULL before copying it.
+Files: src/fileio.c
+
+Patch 5.7.028
+Problem: Creating a backup or swap file could fail in rare situations.
+Solution: Use O_EXCL for open().
+Files: src/fileio.c, src/memfile.c
+
+Patch 5.7.029
+Problem: Editing a file with an extremely long name crashed Vim.
+Solution: Check for length of the name when setting the window title.
+Files: src/buffer.c
+
+Patch 5.7.030
+Problem: A ":make" or ":grep" command with a very long argument could cause
+ a crash.
+Solution: Allocate the buffer for the shell command.
+Files: src/ex_docmd.c
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/version6.txt b/runtime/doc/version6.txt
new file mode 100644
index 000000000..d97cf92a8
--- /dev/null
+++ b/runtime/doc/version6.txt
@@ -0,0 +1,13846 @@
+*version6.txt* For Vim version 7.0aa. Last change: 2004 Jun 07
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Welcome to Vim Version 6.0! A large number of features has been added. This
+file mentions all the new items that have been added, changes to existing
+features and bug fixes compared to Vim 5.x.
+
+See |vi_diff.txt| for an overview of differences between Vi and Vim 6.0.
+See |version4.txt| for differences between Vim 3.0 and Vim 4.0.
+See |version5.txt| for differences between Vim 4.0 and Vim 5.0.
+
+INCOMPATIBLE CHANGES |incompatible-6|
+
+Cursor position in Visual mode |curpos-visual|
+substitute command Vi compatible |substitute-CR|
+global option values introduced |new-global-values|
+'fileencoding' changed |fileencoding-changed|
+Digraphs changed |digraphs-changed|
+Filetype detection changed |filetypedetect-changed|
+Unlisted buffers introduced |new-unlisted-buffers|
+CTRL-U in Command-line mode changed |CTRL-U-changed|
+Ctags gone |ctags-gone|
+Documentation reorganized |documentation-6|
+Modeless selection and clipboard |modeless-and-clipboard|
+Small incompatibilities |incomp-small-6|
+
+NEW FEATURES |new-6|
+
+Folding |new-folding|
+Vertically split windows |new-vertsplit|
+Diff mode |new-diff-mode|
+Easy Vim: click-and-type |new-evim|
+User manual |new-user-manual|
+Flexible indenting |new-indent-flex|
+Extended search patterns |new-searchpat|
+UTF-8 support |new-utf-8|
+Multi-language support |new-multi-lang|
+Plugin support |new-plugins|
+Filetype plugins |new-filetype-plugins|
+File browser |new-file-browser|
+Editing files over a network |new-network-files|
+Window for command-line editing |new-cmdwin|
+Debugging mode |new-debug-mode|
+Cursor in virtual position |new-virtedit|
+Debugger interface |new-debug-itf|
+Communication between Vims |new-vim-server|
+Buffer type options |new-buftype|
+Printing |new-printing|
+Ports |ports-6|
+Quickfix extended |quickfix-6|
+Operator modifiers |new-operator-mod|
+Search Path |new-search-path|
+Writing files improved |new-file-writing|
+Argument list |new-argument-list|
+Restore a View |new-View|
+Color schemes |new-color-schemes|
+Various new items |new-items-6|
+
+IMPROVEMENTS |improvements-6|
+
+COMPILE TIME CHANGES |compile-changes-6|
+
+BUG FIXES |bug-fixes-6|
+
+VERSION 6.1 |version-6.1|
+Changed |changed-6.1|
+Added |added-6.1|
+Fixed |fixed-6.1|
+
+VERSION 6.2 |version-6.2|
+Changed |changed-6.2|
+Added |added-6.2|
+Fixed |fixed-6.2|
+
+VERSION 6.3 |version-6.3|
+Changed |changed-6.3|
+Added |added-6.3|
+Fixed |fixed-6.3|
+
+==============================================================================
+INCOMPATIBLE CHANGES *incompatible-6*
+
+These changes are incompatible with previous releases. Check this list if you
+run into a problem when upgrading from Vim 5.x to 6.0
+
+
+Cursor position in Visual mode *curpos-visual*
+------------------------------
+
+When going from one window to another window on the same buffer while in
+Visual mode, the cursor position of the other window is adjusted to keep the
+same Visual area. This can be used to set the start of the Visual area in one
+window and the end in another. In vim 5.x the cursor position of the other
+window would be used, which could be anywhere and was not very useful.
+
+
+Substitute command Vi compatible *substitute-CR*
+--------------------------------
+
+The substitute string (the "to" part of the substitute command) has been made
+Vi compatible. Previously a CTRL-V had a special meaning and could be used to
+prevent a <CR> to insert a line break. This made it impossible to insert a
+CTRL-V before a line break. Now a backslash is used to prevent a <CR> to
+cause a line break. Since the number of backslashes is halved, it is still
+possible to insert a line break at the end of the line. This now works just
+like Vi, but it's not compatible with Vim versions before 6.0.
+
+When a ":s" command doesn't make any substitutions, it no longer sets the '[
+and '] marks. This is not related to Vi, since it doesn't have these marks.
+
+
+Global option values introduced *new-global-values*
+-------------------------------
+
+There are now global values for options which are local to a buffer or window.
+Previously the local options were copied from one buffer to another. When
+editing another file this could cause option values from a modeline to be used
+for the wrong file. Now the global values are used when entering a buffer
+that has not been used before. Also, when editing another buffer in a window,
+the local window options are reset to their global values. The ":set" command
+sets both the local and global values, this is still compatible. But a
+modeline only sets the local value, this is not backwards compatible.
+
+":let &opt = val" now sets the local and global values, like ":set". New
+commands have been added to set the global or local value:
+ :let &opt = val like ":set"
+ :let &g:opt = val like ":setglobal"
+ :let &l:opt = val like ":setlocal"
+
+
+'fileencoding' changed *fileencoding-changed*
+----------------------
+
+'fileencoding' was used in Vim 5.x to set the encoding used inside all of Vim.
+This was a bit strange, because it was local to a buffer and worked for all
+buffers. It could never be different between buffers, because it changed the
+way text in all buffers was interpreted.
+It is now used for the encoding of the file related to the buffer. If you
+still set 'fileencoding' it is likely to be overwritten by the detected
+encoding from 'fileencodings', thus it is "mostly harmless".
+The old FileEncoding autocommand now does the same as the new EncodingChanged
+event.
+
+
+Digraphs changed *digraphs-changed*
+----------------
+
+The default digraphs now correspond to RFC1345. This is very different from
+what was used in Vim 5.x. |digraphs|
+
+
+Filetype detection changed *filetypedetect-changed*
+--------------------------
+
+The filetype detection previously was using the "filetype" autocommand group.
+This caused confusion with the FileType event name (case is ignored). The
+group is now called "filetypedetect". It still works, but if the "filetype"
+group is used the autocommands will not be removed by ":filetype off".
+ The support for 'runtimepath' has made the "myfiletypefile" and
+"mysyntaxfile" mechanism obsolete. They are still used for backwards
+compatibility.
+
+The connection between the FileType event and setting the 'syntax' option was
+previously in the "syntax" autocommand group. That caused confusion with the
+Syntax event name. The group is now called "syntaxset".
+
+The distributed syntax files no longer contain "syntax clear". That makes it
+possible to include one in the other without tricks. The syntax is now
+cleared when the 'syntax' option is set (by an autocommand added from
+synload.vim). This makes the syntax cleared when the value of 'syntax' does
+not correspond to a syntax file. Previously the existing highlighting was
+kept.
+
+
+Unlisted buffers introduced *new-unlisted-buffers*
+---------------------------
+
+There is now a difference between buffers which don't appear in the buffer
+list and buffers which are really not in the buffer list. Commands like
+":ls", ":bnext", ":blast" and the Buffers menu will skip buffers not in the
+buffer list. |unlisted-buffer|
+The 'buflisted' option can be used to make a buffer appear in the buffer list
+or not.
+
+Several commands that previously added a buffer to the buffer list now create
+an unlisted buffer. This means that a ":bnext" and ":ball" will not find these
+files until they have actually been edited. For example, buffers used for the
+alternative file by ":write file" and ":read file".
+ Other commands previously completely deleted a buffer and now only remove
+the buffer from the buffer list. Commands relying on a buffer not to be
+present might fail. For example, a ":bdelete" command in an autocommand that
+relied on something following to fail (was used in the automatic tests).
+|:bwipeout| can be used for the old meaning of ":bdelete".
+
+The BufDelete autocommand event is now triggered when a buffer is removed from
+the buffer list. The BufCreate event is only triggered when a buffer is
+created that is added to the buffer list, or when an existing buffer is added
+to the buffer list. BufAdd is a new name for BufCreate.
+The new BufNew event is for creating any buffer and BufWipeout for really
+deleting a buffer.
+
+When doing Insert mode completion, only buffers in the buffer list are
+scanned. Added the 'U' flag to 'complete' to do completion from unlisted
+buffers.
+
+Unlisted buffers are not stored in a viminfo file.
+
+
+CTRL-U in Command-line mode changed *CTRL-U-changed*
+-----------------------------------
+
+Using CTRL-U when editing the command line cleared the whole line. Most
+shells only delete the characters before the cursor. Made it work like that.
+(Steve Wall)
+
+You can get the old behavior with CTRL-E CTRL-U: >
+ :cnoremap <C-U> <C-E><C-U>
+
+
+Ctags gone *ctags-gone*
+----------
+
+Ctags is no longer part of the Vim distribution. It's now a grown-up program
+by itself, it deserves to be distributed separately.
+Ctags can be found here: http://ctags.sf.net/.
+
+
+Documentation reorganized *documentation-6*
+-------------------------
+
+The documentation has been reorganized, an item may not be where you found it
+in Vim 5.x.
+- The user manual was added, some items have been moved to it from the
+ reference manual.
+- The quick reference is now in a separate file (so that it can be printed).
+
+The examples in the documentation were previously marked with a ">" in the
+first column. This made it difficult to copy/paste them. There is now a
+single ">" before the example and it ends at a "<" or a non-blank in the first
+column. This also looks better without highlighting.
+
+'helpfile' is no longer used to find the help tags file. This allows a user
+to add its own help files (e.g., for plugins).
+
+
+Modeless selection and clipboard *modeless-and-clipboard*
+--------------------------------
+
+The modeless selection is used to select text when Visual mode can't be used,
+for example when editing the command line or at the more prompt.
+In Vim 5.x the modeless selection was always used. On MS-Windows this caused
+the clipboard to be overwritten, with no way to avoid that. The modeless
+selection now obeys the 'a' and 'A' flags in 'guioptions' and "autoselect" and
+"autoselectml" in 'clipboard'. By default there is no automatic copy on
+MS-Windows. Use the |c_CTRL-Y| command to manually copy the selection.
+
+To get the old behavior back, do this: >
+
+ :set clipboard^=autoselectml guioptions+=A
+
+
+Small incompatibilities *incomp-small-6*
+-----------------------
+
+'backupdir', 'cdpath', 'directory', 'equalprg', 'errorfile', 'formatprg',
+'grepprg', 'helpfile', 'makeef', 'makeprg', 'keywordprg', 'cscopeprg',
+'viminfo' and 'runtimepath' can no longer be set from a modeline, for better
+security.
+
+Removed '_' from the 'breakat' default: It's commonly used in keywords.
+
+The default for 'mousehide' is on, because this works well for most people.
+
+The Amiga binary is now always compiled with "big" features. The "big" binary
+archive no longer exists.
+
+The items "[RO]", "[+]", "[help]", "[Preview]" and "[filetype]" in
+'statusline' no longer have a leading space.
+
+Non-Unix systems: When expanding wildcards for the Vim arguments, don't use
+'suffixes'. It now works as if the shell had expanded the arguments.
+
+The 'lisp', 'smartindent' and 'cindent' options are not switched off when
+'paste' is set. The auto-indenting is disabled when 'paste' is set, but
+manual indenting with "=" still works.
+
+When formatting with "=" uses 'cindent' or 'indentexpr' indenting, and there
+is no change in indent, this is not counted as a change ('modified' isn't set
+and there is nothing to undo).
+
+Report 'modified' as changed when 'fileencoding' or 'fileformat' was set.
+Thus it reflects the possibility to abandon the buffer without losing changes.
+
+The "Save As" menu entry now edits the saved file. Most people expect it to
+work like this.
+
+A buffer for a directory is no longer added to the Buffers menu.
+
+Renamed <Return> to <Enter>, since that's what it's called on most keyboards.
+Thus it's now the hit-enter prompt instead of the hit-return prompt.
+Can map <Enter> just like <CR> or <Return>.
+
+The default for the 'viminfo' option is now '20,"50,h when 'compatible' isn't
+set. Most people will want to use it, including beginners, but it required
+setting the option, which isn't that easy.
+
+After using ":colder" the newer error lists are overwritten. This makes it
+possible to use ":grep" to browse in a tree-like way. Must use ":cnewer 99"
+to get the old behavior.
+
+The patterns in 'errorformat' would sometimes ignore case (MS-Windows) and
+sometimes not (Unix). Now case is always ignored. Add "\C" to the pattern to
+match case.
+
+The 16 bit MS-DOS version is now compiled without the +listcmds feature
+(buffer list manipulation commands). They are not often needed and this
+executable needs to be smaller.
+
+'sessionoptions' now includes "curdir" by default. This means that restoring
+a session will result in the current directory being restored, instead of
+going to the directory where the session file is located.
+
+A session deleted all buffers, deleting all marks. Now keep the buffer list,
+it shouldn't hurt for some existing buffers to remain present.
+When the argument list is empty ":argdel *" caused an error message.
+
+No longer put the search pattern from a tag jump in the history.
+
+Use "SpecialKey" highlighting for unprintable characters instead of "NonText".
+The idea is that unprintable text or any text that's displayed differently
+from the characters in the file is using "SpecialKey", and "NonText" is used
+for text that doesn't really exist in the file.
+
+Motif now uses the system default colors for the menu and scrollbar. Used to
+be grey. It's still possible to set the colors with ":highlight" commands and
+resources.
+
+Formatting text with "gq" breaks a paragraph at a non-empty blank line.
+Previously the line would be removed, which wasn't very useful.
+
+":normal" does no longer hang when the argument ends in half a command.
+Previously Vim would wait for more characters to be typed, without updating
+the screen. Now it pretends an <Esc> was typed.
+
+Bitmaps for the toolbar are no longer searched for in "$VIM/bitmaps" but in
+the "bitmaps" directories in 'runtimepath'.
+
+Now use the Cmdline-mode menus for the hit-enter prompt instead of the Normal
+mode menus. This generally works better and allows using the "Copy" menu to
+produce CTRL-Y to copy the modeless selection.
+
+Moved the font selection from the Window to the Edit menu, together with the
+other settings.
+
+The default values for 'isfname' include more characters to make "gf" work
+better.
+
+Changed the license for the documentation to the Open Publication License.
+This seemed fair, considering the inclusion of parts of the Vim book, which is
+also published under the OPL. The downside is that we can't force someone who
+would sell copies of the manual to contribute to Uganda.
+
+After "ayy don't let ""yy or :let @" = val overwrite the "a register.
+Use the unnamed register instead.
+
+MSDOS: A pattern "*.*" previously also matched a file name without a dot.
+This was inconsistent with other versions.
+
+In Insert mode, CTRL-O CTRL-\ CTRL-N {cmd} remains in Normal mode. Previously
+it would go back to Insert mode, thus confusing the meaning of CTRL-\ CTRL-N,
+which is supposed to take us to Normal mode (especially in ":amenu").
+
+Allow using ":" commands after an operator. Could be used to implement a new
+movement command. Thus it no longer aborts a pending operator.
+
+For the Amiga the "-d {device}" argument was possible. When compiled with the
+diff feature, this no longer works. Use "-dev {device}" instead. |-dev|
+
+Made the default mappings for <S-Insert> in Insert mode insert the text
+literally, avoids that special characters like BS cause side effects.
+
+Using ":confirm" applied to the rest of the line. Now it applies only to the
+command right after it. Thus ":confirm if x | edit | endif" no longer works,
+use ":if x | confirm edit | endif". This was the original intention, that it
+worked differently was a bug.
+
+==============================================================================
+NEW FEATURES *new-6*
+
+Folding *new-folding*
+-------
+
+Vim can now display a buffer with text folded. This allows overviewing the
+structure of a file quickly. It is also possible to yank, delete and put
+folded text, for example to move a function to another position.
+
+There is a whole bunch of new commands and options related to folding.
+See |folding|.
+
+
+Vertically split windows *new-vertsplit*
+------------------------
+
+Windows can also be split vertically. This makes it possible to have windows
+side by side. One nice use for this is to compare two similar files (see
+|new-diff-mode|). The 'scrollbind' option can be used to synchronize
+scrolling.
+
+A vertical split can be created with the commands:
+ :vsplit or CTRL-W v or CTRL-W CTRL-V |:vsplit|
+ :vnew |:vnew|
+ :vertical {cmd} |:vertical|
+The last one is a modifier, which has a meaning for any command that splits a
+window. For example: >
+ :vertical stag main
+Will vertically split the window and jump to the tag "main" in the new window.
+
+Moving from window to window horizontally can be done with the |CTRL-W_h| and
+|CTRL-W_l| commands. The |CTRL-W_k| and |CTRL-W_j| commands have been changed
+to jump to the window above or below the cursor position.
+
+The vertical and horizontal splits can be mixed as you like. Resizing windows
+is easy when using the mouse, just position the pointer on a status line or
+vertical separator and drag it. In the GUI a special mouse pointer shape
+indicates where you can drag a status or separator line.
+
+To resize vertically split windows use the |CTRL-W_<| and |CTRL-W_>| commands.
+To make a window the maximum width use the CTRL-W | command |CTRL-W_bar|.
+
+To force a new window to use the full width or height of the Vim window,
+these two modifiers are available:
+ :topleft {cmd} New window appears at the top with full
+ width or at the left with full height.
+ :botright {cmd} New window appears at the bottom with full
+ width or at the right with full height.
+This can be combined with ":vertical" to force a vertical split: >
+ :vert bot dsplit DEBUG
+This will open a window at the far right, occupying the full height of the Vim
+window, with the cursor on the first definition of "DEBUG".
+The help window is opened at the top, like ":topleft" was used, if the current
+window is fewer than 80 characters wide.
+
+A few options can be used to set the preferences for vertically split windows.
+They work similar to their existing horizontal equivalents:
+ horizontal vertical ~
+ 'splitbelow' 'splitright'
+ 'winheight' 'winwidth'
+ 'winminheight' 'winminwidth'
+It's possible to set 'winminwidth' to zero, so that temporarily unused windows
+hardly take up space without closing them.
+
+The new 'eadirection' option tells where 'equalalways' applies:
+ :set eadirection=both both directions
+ :set eadirection=ver equalize window heights
+ :set eadirection=hor equalize windows widths
+This can be used to avoid changing window sizes when you want to keep them.
+
+Since windows can become quite narrow with vertical splits, text lines will
+often not fit. The 'sidescrolloff' has been added to keep some context left
+and right of the cursor. The 'listchars' option has been extended with the
+"precedes" item, to show a "<" for example, when there is text left off the
+screen. (Utz-Uwe Haus)
+
+"-O" command line argument: Like "-o" but split windows vertically. (Scott
+Urban)
+
+Added commands to move the current window to the very top (CTRL-W K), bottom
+(CTRL-W J), left (CTRL-W H) and right (CTRL-W L). In the new position the
+window uses the full width/height of the screen.
+
+When there is not enough room in the status line for both the file name and
+the ruler, use up to half the width for the ruler. Useful for narrow windows.
+
+
+Diff mode *new-diff-mode*
+---------
+
+In diff mode Vim shows the differences between two, three or four files.
+Folding is used to hide the parts of the file that are equal.
+Highlighting is used to show deleted and changed lines.
+See |diff-mode|.
+
+An easy way to start in diff mode is to start Vim as "vimdiff file1 file2".
+Added the vimdiff manpage.
+
+In a running Vim the |:diffsplit| command starts diff mode for the current
+file and another file. The |:diffpatch| command starts diff mode using the
+current file and a patch file. The |:diffthis| command starts diff mode for
+the current window.
+
+Differences can be removed with the |:diffget| and |:diffput| commands.
+
+- The 'diff' option switches diff mode on in a window.
+- The |:diffupdate| command refreshes the diffs.
+- The 'diffopt' option changes how diffs are displayed.
+- The 'diffexpr' option can be set how a diff is to be created.
+- The 'patchexpr' option can be set how patch is applied to a file.
+- Added the "diff" folding method. When opening a window for diff-mode, set
+ 'foldlevel' to zero and 'foldenable' on, to close the folds.
+- Added the DiffAdd, DiffChange, DiffDelete and DiffText highlight groups to
+ specify the highlighting for differences. The defaults are ugly...
+- Unix: make a vimdiff symbolic link for "make install".
+- Removed the now obsolete "vimdiff.vim" script from the distribution.
+- Added the "[c" and "]c" commands to move to the next/previous change in diff
+ mode.
+
+
+Easy Vim: click-and-type *new-evim*
+------------------------
+
+eVim stands for "Easy Vim". This is a separate program, but can also be
+started as "vim -y".
+
+This starts Vim with 'insertmode' set to allow click-and-type editing. The
+$VIMRUNTIME/evim.vim script is used to add mappings and set options to be able
+to do most things like Notepad. This is only for people who can't stand two
+modes.
+
+eView does the same but in readonly mode.
+
+In the GUI a CTRL-C now only interrupts when busy with something, not when
+waiting for a character. Allows using CTRL-C to copy text to the clipboard.
+
+
+User manual *new-user-manual*
+-----------
+
+The user manual has been added. It is organised around editing tasks. It
+reads like a book, from start to end. It should allow beginners to start
+learning Vim. It helps everybody to learn using the most useful Vim features.
+It is much easier to read than the reference manual, but omits details. See
+|user-manual|.
+
+The user manual includes parts of the Vim book by Steve Oualline |frombook|.
+It is published under the OPL |manual-copyright|.
+
+When syntax highlighting is not enabled, the characters in the help file which
+mark examples ('>' and '<') and header lines ('~') are replaced with a space.
+
+When closing the help window, the window layout is restored from before
+opening it, if the window layout didn't change since then.
+When opening the help window, put it at the top of the Vim window if the
+current window is fewer than 80 characters and not full width.
+
+
+Flexible indenting *new-indent-flex*
+------------------
+
+Automatic indenting is now possible for any language. It works with a Vim
+script, which makes it very flexible to compute the indent.
+
+The ":filetype indent on" command enables using the provided indent scripts.
+This is explained in the user manual: |30.3|.
+
+The 'indentexpr' option is evaluated to get the indent for a line. The
+'indentkeys' option tells when to trigger re-indenting. Normally these
+options are set from an indent script. Like Syntax files, indent scripts will
+be created and maintained by many people.
+
+
+Extended search patterns *new-searchpat*
+------------------------
+
+Added the possibility to match more than one line with a pattern. (partly by
+Loic Grenie)
+New items in a search pattern for multi-line matches:
+\n match end-of-line, also in []
+\_[] match characters in range and end-of-line
+\_x match character class and end-of-line
+\_. match any character or end-of-line
+\_^ match start-of-line, can be used anywhere in the regexp
+\_$ match end-of-line, can be used anywhere in the regexp
+
+Various other new items in search patterns:
+\c ignore case for the whole pattern
+\C match case for the whole pattern
+\m magic on for the following
+\M magic off for the following
+\v make following characters "very magic"
+\V make following characters "very nomagic"
+
+\@! don't match atom before this.
+ Example: "foo\(bar\)\@!" matches "foo " but not "foobar".
+\@= match atom, resulting in zero-width match
+ Example: "foo\(bar\)\@=" matches "foo" in "foobar".
+\@<! don't match preceding atom before the current position
+\@<= match preceding atom before the current position
+\@> match preceding atom as a subexpression
+
+\& match only when branch before and after it match
+
+\%[] optionally match a list of atoms; "end\%[if]" matches "end",
+ "endi" and "endif"
+\%(\) like \(\), but without creating a back-reference; there can be
+ any number of these, overcomes the limit of nine \( \) pairs
+\%^ match start-of-file (Chase Tingley)
+\%$ match end-of-file (Chase Tingley)
+\%# Match with the cursor position. (Chase Tingley)
+\? Just like "\=" but can't be used in a "?" command.
+
+\%23l match in line 23
+\%<23l match before line 23
+\%>23l match after line 23
+\%23c, \%<23c, \%>23c match in/before/after column 23
+\%23v, \%<23v, \%>23v match in/before/after virtual column 23
+
+
+For syntax items:
+\z(...\) external reference match set (in region start pattern)
+\z1 - \z9 external reference match use (in region skip or end pattern)
+ (Scott Bigham)
+
+\zs use position as start of match
+\ze use position as end of match
+
+Removed limit of matching only up to 32767 times with *, \+, etc.
+
+Added support to match multi-byte characters. (partly by Muraoka Taro)
+Made "\<" and "\>" work for UTF-8. (Muraoka Taro)
+
+
+UTF-8 support *new-utf-8*
+-------------
+
+Vim can now edit files in UTF-8 encoding. Up to 31 bit characters can be
+used, but only 16 bit characters are displayed. Up to two combining
+characters are supported, they overprint the preceding character.
+Double-wide characters are also supported. See |UTF-8|.
+
+UCS-2, UCS-4 and UTF-16 encodings are supported too, they are converted to
+UTF-8 internally. There is also support for editing Unicode files in a Latin1
+environment. Other encodings are converted with iconv() or an external
+converter specified with 'charconvert'.
+
+Many new items for Multi-byte support:
+- Added 'encoding' option: specifies character encoding used inside Vim. It
+ can be any 8-bit encoding, some double-byte encodings or Unicode.
+ It is initialized from the environment when a supported value is found.
+- Added 'fileencoding' and 'fileencodings': specify character coding in a
+ file, similar to 'fileformat' and 'fileformats'.
+ When 'encoding' is "utf-8" and 'fileencodings' is "utf-8,latin1" this will
+ automatically switch to latin1 if a file does not contain valid UTF-8.
+- Added 'bomb' option and detection of a BOM at the start of a file. Can be
+ used with "ucs-bom" in 'fileencodings' to automatically detect a Unicode
+ file if it starts with a BOM. Especially useful on MS-Windows (NT and
+ 2000), which uses ucs-2le files with a BOM (e.g., when exporting the
+ registry).
+- Added the 'termencoding' option: Specifies the encoding used for the
+ terminal. Useful to put Vim in utf-8 mode while in a non-Unicode locale: >
+ :let &termencoding = &encoding
+ :set encoding=utf-8
+- When 'viminfo' contains the 'c' flag, the viminfo file is converted from the
+ 'encoding' it was written with to the current 'encoding'.
+- Added ":scriptencoding" command: convert lines in a sourced script to
+ 'encoding'. Useful for menu files.
+- Added 'guifontwide' to specify a font for double-wide characters.
+- Added Korean support for character class detection. Also fix cls() in
+ search.c. (Chong-Dae Park)
+- Win32: Typing multi-byte characters without IME. (Alexander Smishlajev)
+- Win32 with Mingw: compile with iconv library. (Ron Aaron)
+- Win32 with MSVC: dynamically load iconv.dll library. (Muraoka Taro)
+- Make it possible to build a version with multi-byte and iconv support with
+ Borland 5.5. (Yasuhiro Matsumoto)
+- Added 'delcombine' option: Delete combining character separately. (Ron
+ Aaron)
+- The "xfontset" feature isn't required for "xim". These are now two
+ independent features.
+- XIM: enable XIM when typing a language character (Insert mode, Search
+ pattern, "f" or "r" command). Disable XIM when typing a Normal mode
+ command.
+- When the XIM is active, show "XIM" in the 'showmode' message. (Nam SungHyun)
+- Support "CursorIM" for XIM. (Nam SungHyun)
+- Added 'm' flag to 'formatoptions': When wrapping words, allow splitting at
+ each multibyte character, not only at a space.
+- Made ":syntax keyword" work with multi-byte characters.
+- Added support for Unicode upper/lowercase flipping and comparing. (based on
+ patch by Raphael Finkel)
+ Let "~" on multi-byte characters that have a third case ("title case")
+ switch between the three cases. (Raphael Finkel)
+
+Allow defining digraphs for multi-byte characters.
+Added RFC1345 digraphs for Unicode.
+Most Normal mode commands that accept a character argument, like "r", "t" and
+"f" now accept a digraph. The 'D' flag in 'cpoptions' disables this to remain
+Vi compatible.
+
+Added Language mapping and 'keymap' to be able to type multi-byte characters:
+- Added the ":lmap" command and friends: Define mappings that are used when
+ typing characters in the language of the text. Also for "r", "t", etc. In
+ Insert and Command-line mode CTRL-^ switches the use of the mappings on/off.
+ CTRL-^ also toggles the use of an input method when no language mappings are
+ present. Allows switching the IM back on halfway typing.
+- "<char-123>" argument to ":map", allows to specify the decimal, octal or
+ hexadecimal value of a character.
+- Implemented the 'keymap' option: Load a keymap file. Uses ":lnoremap" to
+ define mappings for the keymap. The new ":loadkeymap" command is used in
+ the keymap file.
+- Added 'k' flag in 'statusline': Value of "b:keymap_name" or 'keymap' when
+ it's being used. Uses "<lang>" when no keymap is loaded and ":lmap"s are
+ active. Show this text in the default statusline too.
+- Added the 'iminsert' and 'imsearch' options: Specify use of langmap mappings
+ and Input Method with an option. (Muraoka Taro)
+ Added 'imcmdline' option: When set the input method is always enabled when
+ starting to edit a command line. Useful for a XIM that uses dead keys to
+ type accented characters.
+ Added 'imactivatekey' option to better control XIM. (Muraoka Taro)
+- When typing a mapping that's not finished yet, display the last character
+ under the cursor in Insert mode and Command-line mode. Looks good for dead
+ characters.
+- Made the 'langmap' option recognize multi-byte characters. But mapping only
+ works for 8-bit characters. Helps when using UTF-8.
+- Use a different cursor for when ":lmap" mappings are active. Can specify
+ two highlight groups for an item in 'guicursor'. By default "lCursor" and
+ "Cursor" are equal, the user must set a color he likes.
+ Use the cursor color for hangul input as well. (Sung-Hyun Nam)
+- Show "(lang)" for 'showmode' when language mapping is enabled.
+- UTF-8: Made "r" work with a ":lmap" that includes a composing character.
+ Also works for "f", which now works to find a character that includes a
+ composing character.
+
+Other multi-byte character additions:
+- Support double-byte single-width characters for euc-jp: Characters starting
+ with 0x8E. Added ScreenLines2[] to store the second byte.
+
+
+Multi-language support *new-multi-lang*
+----------------------
+
+The messages used in Vim can be translated. Several translations are
+available. This uses the gettext mechanism. It allows adding a translation
+without recompiling Vim. |multi-lang| (partly by Marcin Dalecki)
+
+The translation files are in the src/po directory. The src/po/README.txt file
+explains a few things about doing a translation.
+
+Menu translations are available as well. This uses the new |:menutranslate|
+command. The translations are found in the runtime directory "lang". This
+allows a user to add a translation.
+
+Added |:language| command to set the language (locale) for messages, time and
+character type. This allows switching languages in Vim without changing the
+locale outside of Vim.
+
+Made it possible to have vimtutor use different languages. (Eduardo Fernandez)
+Spanish (Eduardo Fernandez), Italian (Antonio Colombo), Japanese (Yasuhiro
+Matsumoto) and French (Adrien Beau) translations are included.
+Added "vimtutor.bat": script to start Vim on a copy of the tutor file for
+MS-Windows. (Dan Sharp)
+
+- Added v:lang variable to be able to get current language setting.
+ (Marcin Dalecki) Also v:lc_time and v:ctype.
+- Make it possible to translate the dialogs used by the menus. Uses global
+ "menutrans_" variables. ":menutrans clear" deletes them.
+- removed "broken locale" (Marcin Dalecki).
+- Don't use color names in icons, use RGB values. The names could be
+ translated.
+- Win32: Added global IME support (Muraoka)
+- Win32: Added dynamic loading of IME support.
+- ":messages" prints a message about who maintains the messages or the
+ translations. Useful to find out where to make a remark about a wrong
+ translation.
+- --disable-nls argument for configure: Disable use of gettext(). (Sung-Hyun
+ Nam)
+- Added NLS support for Win32 with the MingW compiler. (Eduardo Fernandez)
+- When available, call bind_textdomain_codeset() to have gettext() translate
+ messages to 'encoding'. This requires GNU gettext 0.10.36 or later.
+- Added gettext support for Win32. This means messages will be translated
+ when the locale is set and libintl.dll can be found. (Muraoka Taro)
+ Also made it work with MingW compiler. (Eduardo Fernandez)
+ Detect the language and set $LANG to get the appropriate translated messages
+ (if supported). Also use $LANG to select a language, v:lang is a very
+ different kind of name.
+- Made gvimext.dll use translated messages, if possible. (Yasuhiro Matsumoto)
+
+
+Plugin support *new-plugins*
+--------------
+
+To make it really easy to load a Vim script when starting Vim, the "plugin"
+runtime directory can be used. All "*.vim" files in it will be automatically
+loaded. For Unix, the directory "~/.vim/plugin" is used by default. The
+'runtimepath' option can be set to look in other directories for plugins.
+|load-plugins| |add-plugin|
+
+The |:runtime| command has been added to load one or more files in
+'runtimepath'.
+
+Standard plugins:
+netrw.vim - Edit files over a network |new-network-files|
+gzip.vim - Edit compressed files
+explorer.vim - Browse directories |new-file-browser|
+
+Added support for local help files. |add-local-help|.
+When searching for help tags, all "doc/tags" files in 'runtimepath' are used.
+Added the ":helptags" command: Generate a tags file for a help directory.
+The first line of each help file is automagically added to the "LOCAL
+ADDITIONS" section in doc/help.txt.
+
+Added the <unique> argument to ":map": only add a mapping when it wasn't
+defined before.
+
+When displaying an option value with 'verbose' set will give a message about
+where the option was last set. Very useful to find out which script did set
+the value.
+
+The new |:scriptnames| command displays a list of all scripts that have been
+sourced.
+
+GUI: For Athena, Motif and GTK look for a toolbar bitmap in the "bitmaps"
+directories in 'runtimepath'. Allows adding your own bitmaps.
+
+
+Filetype plugins *new-filetype-plugins*
+-----------------
+
+A new group of files has been added to do settings for specific file types.
+These can be options and mappings which are specifically used for one value of
+'filetype'.
+
+The files are located in "$VIMRUNTIME/ftplugin". The 'runtimepath' option
+makes it possible to use several sets of plugins: Your own, system-wide,
+included in the Vim distribution, etc.
+
+To be able to make this work, several features were added:
+- Added the "s:" variables, local to a script. Avoids name conflicts with
+ global variables. They can be used in the script and in functions,
+ autocommands and user commands defined in the script. They are kept between
+ invocations of the same script. |s:var|
+- Added the global value for local options. This value is used when opening
+ a new buffer or editing another file. The option value specified in a
+ modeline or filetype setting is not carried over to another buffer.
+ ":set" sets both the local and the global value.
+ ":setlocal" sets the local option value only.
+ ":setglobal" sets or displays the global value for a local option.
+ ":setlocal name<" sets a local option to its global value.
+- Added the buffer-local value for some global options: 'equalprg', 'makeprg',
+ 'errorformat', 'grepprg', 'path', 'dictionary', 'thesaurus', 'tags',
+ 'include' and 'define'. This allows setting a local value for these global
+ options, without making it incompatible.
+- Added mappings and abbreviations local to a buffer: ":map <buffer>".
+- In a mapping "<Leader>" can be used to get the value of the "mapleader"
+ variable. This simplifies mappings that use "mapleader". "<Leader>"
+ defaults to "\". "<LocalLeader>" does the same with "maplocalleader". This
+ is to be used for mappings local to a buffer.
+- Added <SID> Script ID to define functions and mappings local to a script.
+- Added <script> argument to ":noremap" and ":noremenu": Only remap
+ script-local mappings. Avoids that mappings from other scripts get in the
+ way, but does allow using mappings defined in the script.
+- User commands can be local to a buffer: ":command -buffer".
+
+The new ":setfiletype" command is used in the filetype detection autocommands,
+to avoid that 'filetype' is set twice.
+
+
+File browser *new-file-browser*
+------------
+
+When editing a directory, the explorer plugin will list the files in the
+directory. Pressing <Enter> on a file name edits that file. Pressing <Enter>
+on a directory moves the browser to that directory.
+
+There are several other possibilities, such as opening a file in the preview
+window, renaming files and deleting files.
+
+See |file-explorer|.
+
+
+Editing files over a network *new-network-files*
+----------------------------
+
+Files starting with scp://, rcp://, ftp:// and http:// are recognized as
+remote files. An attempt is made to access these files with the indicated
+method. For http:// only reading is possible, for the others writing is also
+supported. Uses the netrw.vim script as a standard "plugin". |netrw|
+
+Made "gf" work on a URL. It no longer assumes the file is local on the
+computer (mostly didn't work anyway, because the full path was required).
+Adjusted test2 for this.
+
+Allow using a URL in 'path'. Makes ":find index.html" work.
+
+GTK: Allow dropping a http:// and ftp:// URL on Vim. The netrw plugin takes
+care of downloading the file. (MiKael Berthe)
+
+
+Window for command-line editing *new-cmdwin*
+-------------------------------
+
+The Command-line window can be used to edit a command-line with Normal and
+Insert mode commands. When it is opened it contains the history. This allows
+copying parts of previous command lines. |cmdwin|
+
+The command-line window can be opened from the command-line with the key
+specified by the 'cedit' option (like Nvi). It can also be opened directly
+from Normal mode with "q:", "q/" and "q?".
+
+The 'cmdwinheight' is used to specify the initial height of the window.
+
+In Insert mode CTRL-X CTRL-V can be used to complete an Ex command line, like
+it's done on the command-line. This is also useful for writing Vim scripts!
+
+Additionally, there is "improved Ex mode". Entered when Vim is started as
+"exim" or "vim -E", and with the "gQ" command. Works like repeated use of
+":", with full command-line editing and completion. (Ulf Carlsson)
+
+
+Debugging mode *new-debug-mode*
+--------------
+
+In debugging mode sourced scripts and user functions can be executed line by
+line. There are commands to step over a command or step into it. |debug-mode|
+
+Breakpoints can be set to run until a certain line in a script or user
+function is executed. |:breakadd|
+
+Debugging can be started with ":debug {cmd}" to debug what happens when a
+command executes. The |-D| argument can be used to debug while starting up.
+
+
+Cursor in virtual position *new-virtedit*
+--------------------------
+
+Added the 'virtualedit' option: Allow positioning the cursor where there is no
+actual character in Insert mode, Visual mode or always. (Matthias Kramm)
+This is especially useful in Visual-block mode. It allows positioning a
+corner of the area where there is no text character. (Many improvements by
+Chase Tingley)
+
+
+Debugger interface *new-debug-itf*
+------------------
+
+This was originally made to work with Sun Visual Workshop. (Gordon Prieur)
+See |debugger.txt|, |sign.txt| and |workshop.txt|.
+
+Added the ":sign" command to define and place signs. They can be displayed
+with two ASCII characters or an icon. The line after it can be highlighted.
+Useful to display breakpoints and the current PC position.
+
+Added the |:wsverb| command to execute debugger commands.
+
+Added balloon stuff: 'balloondelay' and 'ballooneval' options.
+
+Added "icon=" argument for ":menu". Allows defining a specific icon for a
+ToolBar item.
+
+
+Communication between Vims *new-vim-server*
+--------------------------
+
+Added communication between two Vims. Makes it possible to send commands from
+one Vim to another. Works for X-Windows and MS-Windows |clientserver|.
+
+Use "--remote" to have files be edited in an already running Vim.
+Use "--remote-wait" to do the same and wait for the editing to finish.
+Use "--remote-send" to send commands from one Vim to another.
+Use "--remote-expr" to have an expression evaluated in another Vim.
+Use "--serverlist" to list the currently available Vim servers. (X only)
+There are also functions to communicate between the server and the client.
+|remote_send()| |remote_expr()|
+
+(X-windows version implemented by Flemming Madsen, MS-Windows version by Paul
+Moore)
+
+Added the command server name to the window title, so you can see which server
+name belongs to which Vim.
+
+Removed the OleVim directory and SendToVim.exe and EditWithVim.exe from the
+distribution. Can now use "gvim --remote" and "gvim --remote-send", which is
+portable.
+
+GTK+: Support running Vim inside another window. Uses the --socketid argument
+(Neil Bird)
+
+
+Buffer type options *new-buftype*
+-------------------
+
+The 'buftype' and 'bufhidden' options have been added. They can be set to
+have different kinds of buffers. For example:
+- 'buftype' = "quickfix": buffer with error list
+- 'buftype' = "nofile" and 'bufhidden' = "delete": scratch buffer that will be
+ deleted as soon as there is no window displaying it.
+
+'bufhidden' can be used to overrule the 'hidden' option for one buffer.
+
+In combination with 'buflisted' and 'swapfile' this offers the possibility to
+use various kinds of special buffers. See |special-buffers|.
+
+
+Printing *new-printing*
+--------
+
+Included first implementation of the ":hardcopy" command for printing
+to paper. For MS-Windows any installed printer can be used. For other
+systems a PostScript file is generated, which can be printed with the
+'printexpr' option.
+(MS-Windows part by Vince Negri, Vipin Aravind, PostScript by Vince Negri and
+Mike Williams)
+
+Made ":hardcopy" work with multi-byte characters. (Muraoka Taro, Yasuhiro
+Matsumoto)
+
+Added options to tune the way printing works: (Vince Negri)
+- 'printoptions' defines various things.
+- 'printheader' specifies the header format. Added "N" field to 'statusline'
+ for the page number.
+- 'printfont' specifies the font name and attributes.
+- 'printdevice' defines the default printer for ":hardcopy!".
+
+
+Ports *ports-6*
+-----
+
+Port to OS/390 Unix (Ralf Schandl)
+- A lot of changes to handle EBCDIC encoding.
+- Changed Ctrl('x') to Ctrl_x define.
+
+Included jsbmouse support. (Darren Garth)
+Support for dec mouse in Unix. (Steve Wall)
+
+Port to 16-bit MS Windows (Windows 3.1x) (Vince Negri)
+
+Port to QNX. Supports the Photon GUI, mouse, etc. (Julian Kinraid)
+
+Allow cross-compiling the Win32 version with Make_ming.mak. (Ron Aaron)
+Added Python support for compiling with Mingw. (Ron Aaron)
+
+Dos 32 bit: Added support the Windows clipboard. (David Kotchan)
+
+Win32: Dynamically load Perl and Python. Allows compiling Vim with these
+interfaces and will try to find the DLLs at runtime. (Muraoka Taro)
+
+Compiling the Win32 GUI with Cygwin. Also compile vimrun, dosinst and
+uninstall. (Gerfried)
+
+Mac: Make Vim compile with the free MPW compiler supplied by Apple. And
+updates for CodeWarrior. (Axel Kielhorn)
+
+Added typecasts and ifdefs as a start to make Vim work on Win64 (George
+Reilly)
+
+
+Quickfix extended *quickfix-6*
+-----------------
+
+Added the "error window". It contains all the errors of the current error
+list. Pressing <Enter> in a line makes Vim jump to that line (in another
+window). This makes it easy to navigate through the error list.
+|quickfix-window|.
+
+- |:copen| opens the quickfix window.
+- |:cclose| closes the quickfix window.
+- |:cwindow| takes care that there is a quickfix window only when there are
+ recognized errors. (Dan Sharp)
+
+- Quickfix also knows "info", next to "warning" and "error" types. "%I" can be
+ used for the start of a multi-line informational message. (Tony Leneis)
+- The "%p" argument can be used in 'errorformat' to get the column number from
+ a line where "^" points to the column. (Stefan Roemer)
+- When using "%f" in 'errorformat' on a DOS/Windows system, also include "c:"
+ in the filename, even when using "%f:".
+
+
+Operator modifiers *new-operator-mod*
+------------------
+
+Insert "v", "V" or CTRL-V between an operator and a motion command to force
+the operator to work characterwise, linewise or blockwise. |o_v|
+
+
+Search Path *new-search-path*
+-----------
+
+Vim can search in a directory tree not only in downwards but also upwards.
+Works for the 'path', 'cdpath' and 'tags' options. (Ralf Schandl)
+
+Also use "**" for 'tags' option. (Ralf Schandl)
+
+Added 'includeexpr', can be used to modify file name found by 'include'
+option.
+Also use 'includeexpr' for "gf" and "<cfile>" when the file can't be found
+without modification. Useful for doing "gf" on the name after an include or
+import statement.
+
+Added the 'cdpath' option: Locations to find a ":cd" argument. (Raf)
+
+Added the 'suffixesadd' option: Suffixes to be added to a file name when
+searching for a file for the "gf", "[I", etc. commands.
+
+
+Writing files improved *new-file-writing*
+----------------------
+
+Added the 'backupcopy' option: Select whether a file is to be copied or
+renamed to make a backup file. Useful on Unix to speed up writing an ordinary
+file. Useful on other systems to preserve file attributes and when editing a
+file on a Unix filesystem.
+
+Added the 'autowriteall' option. Works like 'autowrite' but for more
+commands.
+
+Added the 'backupskip' option: A list of file patterns to skip making a backup
+file when it matches. The default for Unix includes "/tmp/*", this makes
+"crontab -e" work.
+
+Added support for Access Control Lists (ACL) for FreeBSD and Win32. The ACL
+is copied from the original file to the new file (or the backup if it's
+copied).
+ACL is also supported for AIX, Solaris and generic POSIX. (Tomas Ogren)
+And on SGI.
+
+
+Argument list *new-argument-list*
+-------------
+
+The support for the argument list has been extended. It can now be
+manipulated to contain the files you want it to contain.
+
+The argument list can now be local to a window. It is created with the
+|:arglocal| command. The |:argglobal| command can be used to go back to the
+global argument list.
+
+The |:argdo| command executes a command on all files in the argument list.
+
+File names can be added to the argument list with |:argadd|. File names can
+be removed with |:argdelete|.
+
+"##" can be used like "#", it is replaced by all the names in the argument
+list concatenated. Useful for ":grep foo ##".
+
+The |:argedit| adds a file to the argument list and edits it. Like ":argadd"
+and then ":edit".
+
+
+Restore a View *new-View*
+--------------
+
+The ":mkview" command writes a Vim script with the settings and mappings for
+one window. When the created file is sourced, the view of the window is
+restored. It's like ":mksession" for one window.
+The View also contains the local argument list and manually created, opened
+and closed folds.
+
+Added the ":loadview" command and the 'viewdir' option: Allows for saving and
+restoring views of a file with simple commands. ":mkview 1" saves view 1 for
+the current file, ":loadview 1" loads it again. Also allows quickly switching
+between two views on one file. And saving and restoring manual folds and the
+folding state.
+
+Added 'viewoptions' to specify how ":mkview" works.
+
+":mksession" now also works fine with vertical splits. It has been further
+improved and restores the view of each window. It also works properly with
+preview and quickfix windows.
+
+'sessionoptions' is used for ":mkview" as well.
+Added "curdir" and "sesdir" to 'sessionoptions'. Allows selection of what
+the current directory will be restored to.
+
+The session file now also contains the argument list(s).
+
+
+Color schemes *new-color-schemes*
+-------------
+
+Support for loading a color scheme. Added the ":colorscheme" command.
+Automatically add menu entries for available schemes.
+Should now properly reset the colors when 'background' or 't_Co' is changed.
+":highlight clear" sets the default colors again.
+":syntax reset" sets the syntax highlight colors back to the defaults.
+For ":set bg&" guess the value. This allows a color scheme to switch back to
+the default colors.
+When syntax highlighting is switched on and a color scheme was defined, reload
+the color scheme to define the colors.
+
+
+Various new items *new-items-6*
+-----------------
+
+Normal mode commands: ~
+
+"gi" Jump to the ^ mark and start Insert mode. Also works when the
+ mark is just after the line. |gi|
+
+"g'm" and "g`m"
+ Jump to a mark without changing the jumplist. Now you can use
+ g`" to jump to the last known position in a file without side
+ effects. Also useful in mappings.
+
+[', [`, ]' and ]`
+ move the cursor to the next/previous lowercase mark.
+
+g_ Go to last non-blank in line. (Steve Wall)
+
+
+Options: ~
+
+'autoread' When detected that a file changed outside of Vim,
+ automatically read a buffer again when it's not changed.
+ It has a global and a local value. Use ":setlocal autoread<"
+ to go back to using the global value for 'autoread'.
+
+'debug' When set to "msg" it will print error messages that would
+ otherwise be omitted. Useful for debugging 'indentexpr' and
+ 'foldexpr'.
+
+'lispwords' List of words used for lisp indenting. It was previously hard
+ coded. Added a number of Lisp names to the default.
+
+'fold...' Many new options for folding.
+
+'modifiable' When off, it is impossible to make changes to a buffer.
+ The %m and %M items in 'statusline' show a '-'.
+
+'previewwindow' Set in the preview window. Used in a session file to mark a
+ window as the preview window.
+
+'printfont'
+'printexpr'
+'printheader'
+'printdevice'
+'printoptions' for ":hardcopy".
+
+'buflisted' Makes a buffer appear in the buffer list or not.
+
+Use "vim{version}:" for modelines, only to be executed when the version is
+>= {version}. Also "vim>{version}", "vim<{version}" and "vim={version}".
+
+
+Ex commands: ~
+
+:sav[eas][!] {file}
+ Works like ":w file" and ":e #", but without loading the file
+ again and avoiding other side effects. |:saveas|
+
+:silent[!] {cmd}
+ Execute a command silently. Also don't use a delay that would
+ come after the message. And don't do 'showmatch'.
+ RISCOS: Removed that "!~cmd" didn't output anything, and
+ didn't wait for <Enter> afterwards. Can use ":silent !cmd"
+ now.
+:menu <silent> Add a menu that won't echo Ex commands.
+:map <silent> Add a mapping that won't echo Ex commands.
+
+:checktime Check for changed buffers.
+
+:verbose {cmd} Set 'verbose' for one command.
+
+:echomsg {expr}
+:echoerr {expr} Like ":echo" but store the message in the history. (Mark
+ Waggoner)
+
+:grepadd Works just like ":grep" but adds to the current error list
+ instead of defining a new list. |:grepadd|
+
+:finish Finish sourcing a file. Can be used to skip the rest of a Vim
+ script. |:finish|
+
+:leftabove
+:aboveleft Split left/above current window.
+
+:rightbelow
+:belowright Split right/below current window.
+
+:first, :bfirst, :ptfirst, etc.
+ Alias for ":rewind". It's more logical compared to ":last".
+
+:enew Edit a new, unnamed buffer. This is needed, because ":edit"
+ re-edits the same file. (Wall)
+
+:quitall Same as ":qall".
+
+:match Define match highlighting local to a window. Allows
+ highlighting an item in the current window without interfering
+ with syntax highlighting.
+
+:menu enable
+:menu disable Commands to enable/disable menu entries without removing them.
+ (Monish Shah)
+
+:windo Execute a command in all windows.
+:bufdo Execute a command in all buffers.
+
+:wincmd Window (CTRL-W) command. Useful when a Normal mode command
+ can't be used (e.g., for a CursorHold autocommand). See
+ |CursorHold-example| for a nice application with it.
+
+:lcd and :lchdir
+ Set local directory for a window. (Benjie Chen)
+
+:hide {command}
+ Execute {command} with 'hidden' set.
+
+:emenu in Visual mode to execute a ":vmenu" entry.
+
+:popup Pop up a popup menu.
+
+:redraw Redraw the screen even when busy with a script or function.
+
+:hardcopy Print to paper.
+
+:compiler Load a Vim script to do settings for a specific compiler.
+
+:z# List numbered lines. (Bohdan Vlasyuk)
+
+
+New marks: ~
+
+'( and ') Begin or end of current sentence. Useful in Ex commands.
+'{ and '} Begin or end of current paragraph. Useful in Ex commands.
+'. Position of the last change in the current buffer.
+'^ Position where Insert mode was stopped.
+
+Store the ^ and . marks in the viminfo file. Makes it possible to jump to the
+last insert position or changed text.
+
+
+New functions: ~
+argidx() Current index in argument list.
+buflisted() Checks if the buffer exists and has 'buflisted' set.
+cindent() Get indent according to 'cindent'.
+eventhandler() Returns 1 when inside an event handler and interactive
+ commands can't be used.
+executable() Checks if a program or batch script can be executed.
+filewritable() Checks if a file can be written. (Ron Aaron)
+foldclosed() Find out if there is a closed fold. (Johannes Zellner).
+foldcloseend() Find the end of a closed fold.
+foldlevel() Find out the foldlevel. (Johannes Zellner)
+foreground() Move the GUI window to the foreground.
+getchar() Get one character from the user. Can be used to define a
+ mapping that takes an argument.
+getcharmod() Get last used key modifier.
+getbufvar() gets the value of an option or local variable in a buffer (Ron
+ Aaron)
+getfsize() Return the size of a file.
+getwinvar() gets the value of an option or local variable in a window (Ron
+ Aaron)
+globpath() Find matching files in a list of directories.
+hasmapto() Detect if a mapping to a string is already present.
+iconv() Convert a string from one encoding to another.
+indent() gets the indent of a line (Ron Aaron)
+inputdialog() Like input() but use a GUI dialog when possible. Currently
+ only works for Win32, Motif, Athena and GTK.
+ Use inputdialog() for the Edit/Settings/Text Width menu. Also
+ for the Help/Find.. and Toolbar FindHelp items.
+ (Win32 support by Thore B. Karlsen)
+ (Win16 support by Vince Negri)
+inputsecret() Ask the user to type a string without showing the typed keys.
+ (Charles Campbell)
+libcall() for Unix (Neil Bird, Johannes Zellner, Stephen Wall)
+libcallnr() for Win32 and Unix
+lispindent() Get indent according to 'lisp'.
+mode() Return a string that indicates the current mode.
+nextnonblank() Skip blank lines forwards.
+prevnonblank() Skip blank lines backwards. Useful to for indent scripts.
+resolve() MS-Windows: resolve a shortcut to the file it points to.
+ Unix: resolve a symbolic link.
+search() Search for a pattern.
+searchpair() Search for matching pair. Can be used in indent files to find
+ the "if" matching an endif.
+setbufvar() sets an option or variable local to a buffer (Ron Aaron)
+setwinvar() sets an option or variable local to a window (Ron Aaron)
+stridx() Search for first occurrence of one string in another.
+strridx() Search for last occurrence of one string in another.
+tolower() Convert string to all-lowercase.
+toupper() Convert string to all-uppercase.
+type() Check the type of an expression.
+wincol() window column of the cursor
+winwidth() Width of a window. (Johannes Zellner)
+winline() window line of the cursor
+
+
+Added expansion of curly braces in variable and function names. This can be
+used for variable names that include the value of an option. Or a primitive
+form of arrays. (Vince Negri)
+
+
+New autocommand events: ~
+BufWinEnter Triggered when a buffer is displayed in a window, after using
+ the modelines. Can be used to load a view.
+BufWinLeave Triggered when a buffer is no longer in a window. Also
+ triggered when exiting Vim. Can be used to save views.
+FileChangedRO Triggered before making the first change to a read-only file.
+ Can be used to check-out the file. (Scott Graham)
+TermResponse Triggered when the terminal replies to the version-request.
+ The v:termresponse internal variable holds the result. Can be
+ used to react to the version of the terminal. (Ronald Schild)
+FileReadCmd Triggered before reading a file.
+BufReadCmd Triggered before reading a file into a buffer.
+FileWriteCmd Triggered before writing a file.
+BufWriteCmd Triggered before writing a buffer into a file.
+FileAppendCmd Triggered before appending to a file.
+FuncUndefined Triggered when a user function is not defined. (Ron Aaron)
+
+The autocommands for the *Cmd events read or write the file instead of normal
+file read/write. Use this in netrw.vim to be able to edit files on a remote
+system. (Charles Campbell)
+
+
+New Syntax files: ~
+
+bdf BDF font definition (Nikolai Weibull)
+catalog SGML catalog (Johannes Zellner)
+debchangelog Debian Changelog (Wichert Akkerman)
+debcontrol Debian Control (Wichert Akkerman)
+dot dot (Markus Mottl)
+dsl DSSSL syntax (Johannes Zellner)
+eterm Eterm configuration (Nikolai Weibull)
+indent Indent profile (Nikolai Weibull)
+lftp LFTP (Nikolai Weibull)
+lynx Lynx config (Doug Kearns)
+mush mush sourcecode (Bek Oberin)
+natural Natural (Marko Leipert)
+pilrc Pal resource compiler (Brian Schau)
+plm PL/M (Philippe Coulonges)
+povini Povray configuration (David Necas)
+ratpoison Ratpoison config/command (Doug Kearns)
+readline readline config (Nikolai Weibull)
+screen Screen RC (Nikolai Weibull)
+specman Specman (Or Freund)
+sqlforms SQL*Forms (Austin Ziegler)
+terminfo terminfo (Nikolai Weibull)
+tidy Tidy configuration (Doug Kearns)
+wget Wget configuration (Doug Kearns)
+
+
+Updated many syntax files to work both with Vim 5.7 and 6.0.
+
+Interface to Ruby. (Shugo Maeda)
+Support dynamic loading of the Ruby interface on MS-Windows. (Muraoka Taro)
+Support this for Mingw too. (Benoit Cerrina)
+
+Win32: Added possibility to load TCL dynamically. (Muraoka Taro)
+Also for Borland 5.5. (Dan Sharp)
+
+Win32: When editing a file that is a shortcut (*.lnk file), edit the file it
+links to. Unless 'binary' is set, then edit the shortcut file itself.
+(Yasuhiro Matsumoto)
+
+The ":command" command now accepts a "-bar" argument. This allows the user
+command to be followed by "| command".
+
+The preview window is now also used by these commands:
+- |:pedit| edits the specified file in the preview window
+- |:psearch| searches for a word in included files, like |:ijump|, and
+ displays the found text in the preview window.
+Added the CTRL-W P command: go to preview window.
+
+MS-DOS and MS-Windows also read the system-wide vimrc file $VIM/vimrc. Mostly
+for NT systems with multiple users.
+
+A double-click of the mouse on a character that has a "%" match selects from
+that character to the match. Similar to "v%".
+
+"-S session.vim" argument: Source a script file when starting up. Convenient
+way to start Vim with a session file.
+
+Added "--cmd {command}" Vim argument to execute a command before a vimrc file
+is loaded. (Vince Negri)
+
+Added the "-M" Vim argument: reset 'modifiable' and 'write', thus disallow
+making changes and writing files.
+
+Added runtime/delmenu.vim. Source this to remove all menus and prepare for
+loading new menus. Useful when changing 'langmenu'.
+
+Perl script to filter Perl error messages to quickfix usable format. (Joerg
+Ziefle)
+
+Added runtime/macros/less.vim: Vim script to simulate less, but with syntax
+highlighting.
+
+MS-Windows install program: (Jon Merz)
+- The Win32 program can now create shortcuts on the desktop and install Vim in
+ the Start menu.
+- Possibly remove old "Edit with Vim" entries.
+- The Vim executable is never moved or $PATH changed. A small batch file is
+ created in a directory in $PATH. Fewer choices to be made.
+- Detect already installed Vim versions and offer to uninstall them first.
+
+Improved the MS-Windows uninstal program. It now also deletes the entries in
+the Start menu, icons from the desktop and the created batch files. (Jon Merz)
+Also made it possible to delete only some of these. Also unregister gvim for
+OLE.
+
+Generate a self-installing Vim package for MS-Windows. This uses NSIS. (Jon
+Merz et al.)
+
+Added ":filetype detect". Try detecting the filetype again. Helps when
+writing a new shell script, after adding "#!/bin/csh".
+
+Added ":augroup! name" to delete an autocommand group. Needed for the
+client-server "--remote-wait".
+
+Add the Vim version number to the viminfo file, useful for debugging.
+
+==============================================================================
+IMPROVEMENTS *improvements-6*
+
+Added the 'n' flag in 'cpoptions': When omitted text of wrapped lines is not
+put between line numbers from 'number' option. Makes it a lot easier to read
+wrapped lines.
+
+When there is a format error in a tags file, the byte position is reported so
+that the error can be located.
+
+"gf" works in Visual mode: Use the selected text as the file name. (Chase
+Tingley)
+
+Allow ambiguous mappings. Thus "aa" and "aaa" can both be mapped, the longest
+matching one is used. Especially useful for ":lmap" and 'keymap'.
+
+Encryption: Ask the key to be typed twice when crypting the first time.
+Otherwise a typo might cause the text to be lost forever. (Chase Tingley)
+
+The window title now has "VIM" on the end. The file name comes first, useful
+in the taskbar. A "+" is added when the file is modified. "=" is added for
+a read-only file. "-" is added for a file with 'modifiable' off.
+
+In Visual mode, mention the size of the selected area in the 'showcmd'
+position.
+
+Added the "b:changedtick" variable. Incremented at each change, also for
+undo. Can be used to take action only if the buffer has been changed.
+
+In the replacement string of a ":s" command "\=" can be used to replace with
+the result of an expression. From this expression the submatch() function can
+be used to access submatches.
+
+When doing ":qall" and there is a change in a buffer that is being edited in
+another window, jump to that window, instead of editing that buffer in the
+current window.
+
+Added the "++enc=" and "++ff=" arguments to file read/write commands to force
+using the given 'encoding' or 'fileformat'. And added the "v:cmdarg"
+variable, to be used for FileReadCmd autocommands that read/write the file
+themselves.
+
+When reading stdin, first read the text in binary mode and then re-read it
+with automatic selection of 'fileformat' and 'fileencoding'. This avoids
+problems with not being able to rewind the file (e.g., when a line near the
+end of the file ends in LF instead of CR-LF).
+When reading text from stdin and the buffer is empty, don't mark it changed.
+Allows exiting without trouble.
+
+Added an ID to many error messages. This will make it easier to find help for
+a message.
+
+Insert mode:
+- "CTRL-G j" and "CTRL-G k" can be used to insert in another line in the same
+ column. Useful for editing a table.
+- Added Thesaurus completion with CTRL-X CTRL-T. (Vince Negri)
+- Added the 'thesaurus' option, to use instead of 'dictionary' for thesaurus
+ completion. Added the 's' flag in 'complete'.
+- Made CTRL-X CTRL-L in Insert mode use the 'complete' option. It now also
+ scans other loaded buffers for matching lines.
+- CTRL-R now also works in Insert mode while doing completion with CTRL-X or
+ CTRL-N. (Neil Bird)
+- When doing Insert mode completion, when completion is finished check for a
+ match with words from 'cinkeys' or 'indentkeys'.
+
+Performance:
+- Made display updating more efficient. Insert/delete lines may be used for
+ all changes, also for undo/redo.
+- The display is not redrawn when there is typeahead in Insert mode. Speeds
+ up CTRL-R a lot.
+- Improved speed of screen output for 32 bit DOS version. (Vince Negri)
+- When dragging with the mouse, there is a lookahead to skip mouse codes when
+ there is another one next. Makes dragging with the mouse a lot faster.
+- Also a memory usage improvement: When calling u_save with a single line,
+ don't save it if the line was recently saved for the same undo already.
+- When using a script that appends one character at a time, the amount of
+ allocated memory was growing steadily. Also when 'undolevels' is -1.
+ Caused by the line saved for "U" never to be freed. Now free an undo block
+ when it becomes empty.
+- GUI and Dos32: Use a vertical scroll region, to make scrolling in a
+ vertically split window faster. No need to redraw the whole window.
+- When scrolling isn't possible with terminal codes (e.g., for a vertically
+ split window) redraw from ScreenLines[]. That should be faster than going
+ through the lines with win_line(), especially when using syntax
+ highlighting.
+- The Syntax menu is now pre-generated by a separate script. Makes loading
+ the menu 70% faster. This can halve the startup time of gvim.
+- When doing ":help tag", don't open help.txt first, jump directly to the help
+ tag. It's faster and avoids an extra message.
+- Win32: When a file name doesn't end in ".lnk" don't try resolving a
+ shortcut, it takes quite a bit of time.
+- Don't update the mouse pointer shape while there are typeahead characters.
+- Change META[] from a string into an array, avoids using strchr() on it.
+- Don't clear the command line when adding characters, avoids that screen_fill
+ is called but doesn't do anything.
+
+Robustness:
+- Unix: Check for running out of stack space when executing a regexp. Avoids
+ a nasty crash. Only works when the system supports running the signal
+ function on another stack.
+- Disallow ":source <dirname>". On unix it's possible to read a directory,
+ does not make sense to use it as Vim commands.
+
+Security:
+- When reading from or writing to a temporary file, check that it isn't a
+ symbolic link. Gives some protection against symlink attacks.
+- When creating a backup file copy or a swap file, check for it already
+ existing to avoid a symlink attack. (Colin Phipps)
+- Evaluating options which are an expression is done in a |sandbox|. If the
+ option was set by a modeline, it cannot cause damage.
+- Use a secure way to generate temp file names: Create a private directory for
+ temp files. Used for Unix, MS-DOS and OS/2.
+- 'makeef' can be empty, which means that an internally generated file name is
+ used. The old default was "/tmp/file", which is a security risk.
+ Writing 'makeef' in the current directory fails in a read-only directory and
+ causes trouble when using ":grep" on all files. Made the default empty for
+ all systems, so that a temp file is used.
+- The command from a tags file is executed in the sandbox for better security.
+- The Ruby, Tcl and Python interfaces cannot be used from the sandbox. They
+ might do dangerous things. Perl is still possible, but limited to the Safe
+ environment. (Donnie Smith)
+
+Syntax highlighting:
+- Optimized the speed by caching the state stack all over the file, not just
+ the part being displayed. Required for folding.
+- Added ":syntax sync fromstart": Always parse from the start of the file.
+- Added the "display" argument for syntax items: use the item only when
+ displaying the result. Can make parsing faster for text that isn't going to
+ be displayed.
+- When using CTRL-L, the cached states are deleted, to force parsing the text
+ again.
+- Use elfhash algorithm for table of keywords. This should give a better
+ distribution and speedup keyword lookup. (Campbell)
+- Also allow the "lc" leading context for skip and end patterns. (Scott
+ Bigham)
+- Syntax items can have the "extend" argument to undo the effect of a
+ "keepend" argument of an item it is contained in. Makes it possible to have
+ some contained items extend a region while others don't.
+- ":syntax clear" now deletes the b:current_syntax variable. That's logical,
+ since no syntax is defined after this command.
+- Added ":syntax enable": switch on syntax highlighting without changing the
+ colors. This allows specifying the colors in the .vimrc file without the
+ need for a mysyntaxfile.
+- Added ":syntax reset": reset the colors to their defaults.
+- Added the "contains=TOP" and "contains=CONTAINED" arguments. Makes it
+ possible to define a transparent item that doesn't contain itself.
+- Added a "containedin" argument to syntax items. Allows adding a contained
+ item to an existing item (e.g., to highlight a name in a comment).
+
+Modeless selection:
+- When in the command-line window, use modeless selection in the other
+ windows. Makes it possible to copy visible text to the command-line window.
+- Support modeless selection on the cmdline in a terminal. Previously it was
+ only possible for the GUI.
+- Make double-right-click in modeless selection select a whole word. Single
+ right click doesn't use the word selection started by a double-left-click.
+ Makes it work like in Visual mode.
+- The modeless selection no longer has an implied automatic copy to the
+ clipboard. It now obeys the 'a' and 'A' flags in 'guioptions' or
+ "autoselect" and "autoselectml" in 'clipboard'.
+- Added the CTRL-Y command in Cmdline-mode to copy the modeless selection to
+ the clipboard. Also works at the hit-enter prompt and the more prompt.
+ Removed the mappings in runtime/mswin.vim for CTRL-Y and CTRL-Z in
+ cmdline-mode to be able to use CTRL-Y in the new way.
+
+Reduced the amount of stack space used by regmatch() to allow it to handle
+complicated patterns on a longer text.
+
+'isfname' now includes '%' and '#'. Makes "vim dir\#file" work for MS-DOS.
+
+Added keypad special keys <kEnter>, <k0> - <k9>. When not mapped they behave
+like the ASCII equivalent. (Ivan Wellesz and Vince Negri)
+Recognize a few more xterm keys: <C-Right>, <C-Left>, <C-End>, <C-Home>
+
+Also trigger the BufUnload event when Vim is going to exit. Perhaps a script
+needs to do some cleaning up.
+
+Expand expression in backticks: `={expr}`. Can be used where backtick
+expansion is done. (Vince Negri)
+
+GUI:
+- Added 'L' and 'R' flags in 'guioptions': Add a left or right scrollbar only
+ when there is a vertically split window.
+- X11: When a color can't be allocated, use the nearest match from the
+ colormap. This avoids that black is used for many things. (Monish Shah)
+ Also do this for the menu and scrollbar, to avoid that they become black.
+- Win32 and X11: Added 'mouseshape' option: Adjust the mouse pointer shape to
+ the current mode. (Vince Negri)
+- Added the 'linespace' option: Insert a pixel line between lines. (Nam)
+- Allow modeless selection (without moving the cursor) by keeping CTRL and
+ SHIFT pressed. (Ivan Wellesz)
+- Motif: added toolbar. (Gordon Prieur) Also added tooltips.
+- Athena: added toolbar and tooltips. (David Harrison -- based on Gordon
+ Prieur's work)
+- Made the 'toolbar' option work for Athena and Motif. Can now switch between
+ text and icons on the fly. (David Harrison)
+- Support menu separator lines for Athena. (David Harrison)
+- Athena: Adjust the arrow pixmap used in a pullright menu to the size of the
+ font. (David Harrison)
+- Win32: Added "c" flag to 'guifont' to be able to specify the charset. (Artem
+ Khodush)
+- When no --enable-xim argument is given, automatically enable it when a X GUI
+ is used. Required for dead key support (and multi-byte input).
+- After a file selection dialog, check that the edited files were not changed
+ or deleted. The Win32 dialog allows deleting and renaming files.
+- Motif and Athena: Added support for "editres". (Martin Dalecki)
+- Motif and Athena: Added "menuFont" to be able to specify a font or fontset
+ for the menus. Can also be set with the "Menu" highlight group. Useful
+ when the locale is different from 'encoding'. (David Harrison)
+ When FONTSET_ALWAYS is defined, always use a fontset for the menus. Should
+ avoid trouble with changing from a font to a fontset. (David Harrison)
+- Highlighting and font for the tooltips can be specified with the "Tooltip"
+ highlight group. (David Harrison)
+- The Cmdline-mode menus can be used at the more-prompt. This mostly works
+ fine, because they start with a CTRL-C. The "Copy" menu works to copy the
+ modeless selection. Allows copying the output of ":set all" or ":intro"
+ without auto-selection.
+- When starting the GUI when there is no terminal connected to stdout and
+ stderr, display error messages in a dialog. Previously they wouldn't be
+ displayed at all.
+- Allow setting 'browsedir' to the name of a directory, to be used for the
+ file dialog. (Dan Sharp)
+- b:browsefilter and g:browsefilter can be set to the filters used for the
+ file dialog. Supported for Win32 and Motif GUI. (Dan Sharp)
+
+X11:
+- Support for the clipboard selection as register "+. When exiting or
+ suspending copy the selection to cut buffer 0. Should allow copy/paste with
+ more applications in a X11-standard way. (Neil Bird)
+- Use the X clipboard in any terminal, not just in an xterm.
+ Added "exclude:" in 'clipboard': Specify a pattern to match against terminal
+ names for which no connection should be made to the X server. The default
+ currently work for FreeBSD and Linux consoles.
+- Added a few messages for when 'verbose' is non-zero to show what happens
+ when trying to connect to the X server. Should help when trying to find out
+ why startup is slow.
+
+GTK GUI: (partly by Marcin Dalecki)
+- With some fonts the characters can be taller than ascent + descent. E.g.,
+ "-misc-fixed-*-*-*-*-18-*-*-*-*-*-iso10646-1". Add one to the character
+ cell height.
+- Implement "no" value for 'winaltkeys': don't use Alt-Key as a menu shortcut,
+ when 'wak' changed after creating the menus.
+- Setting 'wak' after the GUI started works.
+- recycle text GC's to reduce communication.
+- Adjust icon size to window manager.
+- Cleanup in font handling.
+- Replace XQueryColor with GDK calls.
+- Gnome support. Detects Gnome in configure and uses different widgets.
+ Otherwise it's much like GTK. (Andy Kahn)
+ It is disabled by default, because it causes a few problems.
+- Removed the special code to fork first and then start the GUI. Now use
+ _exit() instead of exit(), this works fine without special tricks.
+- Dialogs sometimes appeared a bit far away. Position the dialogs inside
+ the gvim window. (Brent Verner)
+- When dropping a file on Vim, remove extra slashes from the start of the
+ path. Also shorten the file name if possible.
+
+Motif: (Martin Dalecki)
+- Made the dialog layout better.
+- Added find and find/replace dialogs.
+- For the menus, change "iso-8859" to "iso_8859", Linux appears to need this.
+- Added icon to dialogs, like for GTK.
+- Use XPM bitmaps for the icon when possible. Use the Solaris XpmP.h include
+ file when it's available.
+- Change the shadow of the toolbar items to get a visual feedback of it being
+ pressed on non-LessTiff.
+- Use gadgets instead of windows for some items for speed.
+
+Command line completion:
+- Complete environment variable names. (Mike Steed)
+- For ":command", added a few completion methods: "mapping", "function",
+ "expression" and "environment".
+- When a function doesn't take arguments, let completion add () instead of (.
+
+For MS-DOS, MS-Windows and OS/2: Expand %VAR% environment variables like $VAR.
+(Walter Briscoe)
+
+Redirect messages to the clipboard ":redir @*" and to the unnamed register
+":redir @"". (Wall)
+
+":let @/ = ''" clears the search pattern, instead of setting it to an empty
+string.
+
+Expression evaluation:
+- "? :" can be used like in C.
+- col("$") returns the length of the cursor line plus one. (Stephen P. Wall)
+- Optional extra argument for match(), matchend() and matchstr(): Offset to
+ start looking for a match.
+- Made third argument to strpart() optional. (Paul Moore, Zdenek Sekera)
+- exists() can also be used to check for Ex commands and defined autocommands.
+- Added extra argument to input(): Default text.
+- Also set "v:errmsg" when using ":silent! cmd".
+- Added the v:prevcount variable: v:count for the previous command.
+- Added "v:progname", name with which Vim was started. (Vince Negri)
+- In the verbose message about returning from a function, also show the return
+ value.
+
+Cscope:
+- Added the cscope_connection() function. (Andy Kahn)
+- ":cscope kill -1" kills all cscope connections. (Andy Kahn)
+- Added the 'cscopepathcomp' option. (Scott Hauck)
+- Added ":scscope" command, split window and execute Cscope command. (Jason
+ Duell)
+
+VMS:
+- Command line arguments are always uppercase. Interpret a "-X" argument as
+ "-x" and "-/X" as "-X".
+- Set 'makeprg' and 'grepprg' to meaningful defaults. (Zoltan Arpadffy)
+- Use the X-clipboard feature and the X command server. (Zoltan Arpadffy)
+
+Macintosh: (Dany St-Amant)
+- Allow a tags file to have CR, CR-LF or LF line separator. (Axel Kielhorn)
+- Carbonized (while keeping non Carbon code)
+ (Some work "stolen" from Ammon Skidmore)
+- Improved the menu item index handling (should be faster)
+- Runtime commands now handle / in file name (MacOS 9 version)
+- Added ":winpos" support.
+- Support using "~" in file names for home directory.
+
+Options:
+- When using set += or ^= , check for items used twice. Duplicates are
+ removed. (Vince Negri)
+- When setting an option that is a list of flags, remove duplicate flags.
+- If possible, use getrlimit() to set 'maxmemtot' and 'maxmem'. (Pina)
+- Added "alpha" to 'nrformats': increment or decrement an alphabetic character
+ with CTRL-A and CTRL-X.
+- ":set opt&vi" sets an option to its Vi default, ":set opt&vim" to its Vim
+ default. Useful to set 'cpo' to its Vim default without knowing what flags
+ that includes.
+- 'scrolloff' now also applies to a long, wrapped line that doesn't fit in the
+ window.
+- Added more option settings to the default menus.
+- Updated the option window with new options. Made it a bit easier to read.
+
+Internal changes:
+- Split line pointers in text part and attributes part. Allows for future
+ change to make attribute more than one byte.
+- Provide a qsort() function for systems that don't have it.
+- Changed the big switch for Normal mode commands into a table. This cleans
+ up the code considerably and avoids trouble for some optimizing compilers.
+- Assigned a negative value to special keys, to avoid them being mixed up with
+ Unicode characters.
+- Global variables expand_context and expand_pattern were not supposed to be
+ global. Pass them to ExpandOne() and all functions called by it.
+- No longer use the global reg_ic flag. It caused trouble and in a few places
+ it was not set.
+- Removed the use of the stuff buffer for "*", "K", CTRL-], etc. Avoids
+ problem with autocommands.
+- Moved some code from ex_docmd.c to ex_cmds2.c. The file was getting too
+ big. Also moved some code from screen.c to move.c.
+- Don't include the CRC table for encryption, generate it. Saves quite a bit
+ of space in the source code. (Matthias Kramm)
+- Renamed multibyte.c to mbyte.c to avoid a problem with 8.3 filesystems.
+- Removed the GTK implementation of ":findhelp", it now uses the
+ ToolBar.FindHelp menu entry.
+- Renamed mch_windexit() to mch_exit(), mch_init() to mch_early_init() and
+ mch_shellinit() to mch_init().
+
+Highlighting:
+- In a ":highlight" listing, show "xxx" with the highlight color.
+- Added support for xterm with 88 or 256 colors. The right color numbers will
+ be used for the name used in a ":highlight" command. (Steve Wall)
+- Added "default" argument for ":highlight". When included, the command is
+ ignored if highlighting for the group was already defined.
+ All syntax files now use ":hi default ..." to allow the user to specify
+ colors in his vimrc file. Also, the "if did_xxx_syntax_inits" is not needed
+ anymore. This greatly simplifies using non-default colors for a specific
+ language.
+- Adjusted colortest.vim: Included colors on normal background and reduced the
+ size by using a while loop. (Rafael Garcia-Suarez)
+- Added the "DarkYellow" color name. Just to make the list of standard colors
+ consistent, it's not really a nice color to use.
+
+When an xterm is in 8-bit mode this is detected by the code returned for
+|t_RV|. All key codes are automatically converted to their 8-bit versions.
+
+The OPT_TCAP_QUERY in xterm patch level 141 and later is used to obtain the
+actual key codes used and the number of colors for t_Co. Only when |t_RV| is
+also used.
+
+":browse set" now also works in the console mode. ":browse edit" will give an
+error message.
+
+":bdelete" and ":bunload" only report the number of deleted/unloaded buffers
+when more than 'report'. The message was annoying when deleting a buffer in a
+script.
+
+Jump list:
+- The number of marks kept in the jumplist has been increased from 50 to 100.
+- The jumplist is now stored in the viminfo file. CTRL-O can be used to jump
+ to positions from a previous edit session.
+- When doing ":split" copy the jumplist to the new window.
+
+Also set the '[ and '] marks for the "~" and "r" commands. These marks are
+now always set when making a change with a Normal mode command.
+
+Python interface: Allow setting the width of a vertically split window. (John
+Cook)
+
+Added "=word" and "=~word" to 'cinkeys' (also used in 'indentkeys').
+
+Added "j1" argument in 'cinoptions': indent {} inside () for Java. (Johannes
+Zellner)
+Added the "l" flag in 'cinoptions'. (Anduin Withers)
+Added 'C', 'U', 'w' and 'm' flags to 'cinoptions'. (Servatius Brandt)
+
+When doing ":wall" or ":wqall" and a modified buffer doesn't have a name,
+mention its buffer number in the error message.
+
+":function Name" lists the function with line numbers. Makes it easier to
+find out where an error happened.
+
+In non-blockwise Visual mode, "r" replaces all selected characters with the
+typed one, like in blockwise Visual mode.
+
+When editing the last file in the argument list in any way, allow exiting.
+Previously this was only possible when getting to that file with ":next" or
+":last".
+
+Added the '1' flag to 'formatoptions'. (Vit Stradal)
+Added 'n' flag in 'formatoptions': format a numbered list.
+
+Swap file:
+- When a swap file already exists, and the user selects "Delete" at the
+ ATTENTION prompt, use the same ".swp" swapfile, to avoid creating a ".swo"
+ file which won't always be found.
+- When giving the ATTENTION message and the date of the file is newer than the
+ date of swap file, give a warning about this.
+- Made the info for an existing swap file a bit shorter, so that it still fits
+ on a 24 line screen.
+- It was possible to make a symlink with the name of a swap file, linking to a
+ file that doesn't exist. Vim would then silently use another file (if open
+ with O_EXCL refuses a symlink). Now check for a symlink to exist. Also do
+ another check for an existing swap file just before creating it to catch a
+ symlink attack.
+
+The g CTRL-G command also works in Visual mode and counts the number of words.
+(Chase Tingley)
+
+Give an error message when using 'shell' and it's empty.
+
+Added the possibility to include "%s" in 'shellpipe'.
+
+Added "uhex" value for 'display': show non-printable characters as <xx>.
+Show unprintable characters with NonText highlighting, also in the command
+line.
+
+When asked to display the value of a hidden option, tell it's not supported.
+
+Win32:
+- When dropping a shortcut on gvim (.lnk file) edit the target, not the
+ shortcut itself. (Yasuhiro Matsumoto)
+- Added C versions of the OpenWithVim and SendToVim programs. (Walter Briscoe)
+- When 'shell' is "cmd" or "cmd.exe", set 'shellredir' to redirect stderr too.
+ Also check for the Unix shell names.
+- When $HOMEDRIVE and $HOMEPATH are defined, use them to define $HOME. (Craig
+ Barkhouse)
+
+Win32 console version:
+- Includes the user and system name in the ":version" message, when available.
+ It generates a pathdef.c file for this. (Jon Miner)
+- Set the window icon to Vim's icon (only for Windows 2000). While executing
+ a shell command, modify the window title to show this. When exiting,
+ restore the cursor position too. (Craig Barkhouse)
+- The Win32 console version can be compiled with OLE support. It can only
+ function as a client, not as an OLE server.
+
+Errorformat:
+- Let "%p" in 'errorformat' (column of error indicated by a row of characters)
+ also accept a line of dots.
+- Added "%v" item in 'errorformat': Virtual column number. (Dan Sharp)
+- Added a default 'errorformat' value for VMS. (Jim Bush)
+
+The "p" command can now be used in Visual mode. It overwrites the selected
+text with the contents of a register.
+
+Highlight the <> items in the intro message to make clear they are special.
+
+When using the "c" flag for ":substitute", allow typing "l" for replacing this
+item and then stop: "last".
+
+When printing a verbose message about sourcing another file, print the line
+number.
+
+When resizing the Vim window, don't use 'equalalways'. Avoids that making the
+Vim window smaller makes split windows bigger. And it's what the docs say.
+
+When typing CTRL-D in Insert mode, just after an autoindent, then hitting CR
+kept the remaining white space. Now made it work like BS: delete the
+autoindent to avoid a blank non-empty line results.
+
+Added a GetHwnd() call to the OLE interface. (Vince Negri)
+
+Made ":normal" work in an event handler. Useful when dropping a file on Vim
+and for CursorHold autocommands.
+
+For the MS-Windows version, don't change to the directory of the file when a
+slash is used instead of a backslash. Explorer should always use a backslash,
+the user can use a slash when typing the command.
+
+Timestamps:
+- When a buffer was changed outside of Vim and regaining focus, give a dialog
+ to allow the user to reload the file. Now also for other GUIs than
+ MS-Windows. And also used in the console, when compiled with dialog
+ support.
+- Inspect the file contents to find out if it really changed, ignore
+ situations where only the time stamp changed (e.g., checking the file out
+ from CVS).
+- When checking the timestamp, first check if the file size changed, to avoid
+ a file compare then. Makes it quicker for large (log) files that are
+ appended to.
+- Don't give a warning for a changed or deleted file when 'buftype' is set.
+- No longer warn for a changed directory. This avoids that the file explorer
+ produces warnings.
+- Checking timestamps is only done for buffers that are not hidden. These
+ will be checked when they become unhidden.
+- When checking for a file being changed outside of Vim, also check if the
+ file permissions changed. When the file contents didn't change but the
+ permissions did, give a warning.
+- Avoid checking too often, otherwise the dialog keeps popping up for a log
+ file that steadily grows.
+
+Mapping <M-A> when 'encoding' is "latin1" and then setting 'encoding' to
+"utf-8" causes the first byte of a multi-byte to be mapped. Can cause very
+hard to find problems. Disallow mapping part of a multi-byte character.
+
+For ":python" and ":tcl" accept an in-line script. (Johannes Zellner)
+Also for ":ruby" and ":perl". (Benoit Cerrina)
+
+Made ":syn include" use 'runtimepath' when the file name is not a full path.
+
+When 'switchbuf' contains "split" and the current window is empty, don't split
+the window.
+
+Unix: Catch SIGPWR to preserve files when the power is about to go down.
+
+Sniff interface: (Anton Leherbauer)
+- fixed windows code, esp. the event handling stuff
+- adaptations for sniff 4.x ($SNIFF_DIR4)
+- support for adding sniff requests at runtime
+
+Support the notation <A-x> as an alias for <M-x>. This logical, since the Alt
+key is used.
+
+":find" accepts a count, which means that the count'th match in 'path' is
+used.
+
+":ls" and ":buffers" output shows modified/readonly/modifiable flag. When a
+buffer is active show "a" instead of nothing. When a buffer isn't loaded
+show nothing instead of "-".
+
+Unix install:
+- When installing the tools, set absolute paths in tools scripts efm_perl.pl
+ and mve.awk. Avoids that the user has to edit these files.
+- Install Icons for KDE when the directories exist and the icons do not exist
+ yet.
+
+Added has("win95"), to be able to distinguish between MS-Windows 95/98/ME and
+NT/2000/XP in a Vim script.
+
+When a ":cd" command was typed, echo the new current directory. (Dan Sharp)
+
+When using ":winpos" before the GUI window has been opened, remember the
+values until it is opened.
+
+In the ":version" output, add "/dyn" for features that are dynamically loaded.
+This indicates the feature may not always work.
+
+On Windows NT it is possible that a directory is read-only, but a file can be
+deleted. When making a backup by renaming the file and 'backupdir' doesn't
+use the current directory, this causes the original file to be deleted,
+without the possibility to create a new file. Give an extra error message
+then to warn to user about this.
+
+Made CTRL-R CTRL-O at the command line work like CTRL-R CTRL-R, so that it's
+consistent with Insert mode.
+
+==============================================================================
+COMPILE TIME CHANGES *compile-changes-6*
+
+All generated files have been moved out of the "src" directory. This makes it
+easy to see which files are not edited by hand. The files generated by
+configure are now in the "src/auto" directory. For Unix, compiled object
+files go in the objects directory.
+
+The source archive was over the 1.4M floppy limit. The archives are now split
+up into two runtime and two source archives. Also provide a bzip2 compressed
+archive that contains all the sources and runtime files.
+
+Added "reconfig" as a target for make. Useful when changing some of the
+arguments that require flushing the cache, such as switching from GTK to
+Motif. Adjusted the meaning of GUI_INC_LOC and GUI_LIB_LOC to be consistent
+over different GUIs.
+
+Added src/README.txt to give an overview of the main parts of the source code.
+
+The Unix Makefile now fully supports using $(DESTDIR) to install to a specific
+location. Replaces the manual setting of *ENDLOC variables.
+
+Added the possibility for a maintainer of a binary version to include his
+e-mail address with the --with-compiledby configure argument.
+
+Included features are now grouped in "tiny", "small", "normal", "big" and
+"huge". This replaces "min-features" and "max-features". Using "tiny"
+disables multiple windows for a really small Vim.
+
+For the tiny version or when FEAT_WINDOWS is not defined: Firstwin and lastwin
+are equal to curwin and don't use w_next and w_prev.
+
+Added the +listcmds feature. Can be used to compile without the Vim commands
+that manipulate the buffer list and argument list (the buffer list itself is
+still there, can't do without it).
+
+Added the +vreplace feature. It is disabled in the "small" version to avoid
+that the 16 bit DOS version runs out of memory.
+
+Removed GTK+ support for versions older than 1.1.16.
+
+The configure checks for using PTYs have been improved. Code taken from a
+recent version of screen.
+
+Added configure options to install Vim, Ex and View under another name (e.g.,
+vim6, ex6 and view6).
+
+Added "--with-global-runtime" configure argument. Allows specifying the
+global directory used in the 'runtimepath' default.
+
+Made enabling the SNiFF+ interface possible with a configure argument.
+
+Configure now always checks /usr/local/lib for libraries and
+/usr/local/include for include files. Helps finding the stuff for iconv() and
+gettext().
+
+Moved the command line history stuff into the +cmdline_hist feature, to
+exclude the command line history from the tiny version.
+
+MS-Windows: Moved common functions from Win16 and Win32 to os_mswin.c. Avoids
+having to change two files for one problem. (Vince Negri)
+
+Moved common code from gui_w16.c and gui_w32.c to gui_w48.c (Vince Negri)
+
+The jumplist is now a separate feature. It is disabled for the "small"
+version (16 bit MS-DOS).
+
+Renamed all types ending in _t to end in _T. Avoids potential problems with
+system types.
+
+Added a configure check for X11 header files that implicitly define the return
+type to int. (Steve Wall)
+
+"make doslang" in the top directory makes an archive with the menu and .mo
+files for Windows. This uses the files generated on Unix, these should work
+on MS-Windows as well.
+
+Merged a large part of os_vms.c with os_unix.c. The code was duplicated in
+the past which made maintenance more work. (Zoltan Arpadffy)
+
+Updated the Borland C version 5 Makefile: (Dan Sharp)
+- Fixed the Perl build
+- Added python and tcl builds
+- Added dynamic perl and dynamic python builds
+- Added uninstal.exe build
+- Use "yes" and "no" for the options, like in Make_mvc.mak.
+
+Win32: Merged Make_gvc.mak and Make_ovc.mak into one file: Make_ivc.mak. It's
+much smaller, many unnecessary text has been removed. (Walter Briscoe)
+Added Make_dvc.mak to be able to debug exe generated with Make_mvc.mak in
+MS-Devstudio. (Walter Briscoe)
+
+MS-Windows: The big gvim.exe, which includes OLE, now also includes
+dynamically loaded Tcl, Perl and Python. This uses ActivePerl 5.6.1,
+ActivePython 2.1.1 and ActiveTCL 8.3.3
+
+Added AC_EXEEXT to configure.in, to check if the executable needs ".exe" for
+Cygwin or MingW. Renamed SUFFIX to EXEEXT in Makefile.
+
+Win32: Load comdlg32.dll delayed for faster startup. Only when using VC 6.
+(Vipin Aravind)
+
+Win32: When compiling with Borland, allow using IME. (Yasuhiro Matsumoto)
+
+Win32: Added Makefile for Borland 5 to compile gvimext.dll. (Yasuhiro
+Matsumoto)
+
+==============================================================================
+BUG FIXES *bug-fixes-6*
+
+When checking the command name for "gvim", "ex", etc. ignore case. Required
+for systems where case is ignored in command names.
+
+Search pattern "[a-c-e]" also matched a 'd' and didn't match a '-'.
+
+When double-clicking in another window, wasn't recognized as double click,
+because topline is different. Added set_mouse_topline().
+
+The BROKEN_LOCALE check was broken. (Marcin Dalecki)
+
+When "t_Co" is set, the default colors remain the same, thus wrong. Reset the
+colors after changing "t_Co". (Steve Wall)
+
+When exiting with ":wqall" the messages about writing files could overwrite
+each other and be lost forever.
+
+When starting Vim with an extremely long file name (around 1024 characters) it
+would crash. Added a few checks to avoid buffer overflows.
+
+CTRL-E could get stuck in a file with very long lines.
+
+":au syntax<Tab>" expanded event names while it should expand groups starting
+with "syntax".
+
+When expanding a file name caused an error (e.g., for <amatch>) it was
+produced even when inside an "if 0".
+
+'cindent' formatted C comments differently from what the 'comments' option
+specified. (Steve Wall)
+
+Default for 'grepprg' didn't include the file name when only grepping in one
+file. Now /dev/null has been added for Unix.
+
+Opening the option window twice caused trouble. Now the cursor goes to the
+existing option window.
+
+":sview" and ":view" didn't set 'readonly' for an existing buffer. Now do set
+'readonly', unless the buffer is also edited in another window.
+
+GTK GUI: When 'guioptions' excluded 'g', the more prompt caused the toolbar
+and menubar to disappear and resize the window (which clears the text).
+Now always grey-out the toplevel menus to avoid that the menubar changes size
+or disappears.
+
+When re-using the current buffer for a new buffer, buffer-local variables were
+not deleted.
+
+GUI: when 'scrolloff' is 0 dragging the mouse above the window didn't cause a
+down scroll. Now pass on a mouse event with mouse_row set to -1.
+
+Win32: Console version didn't work on telnet, because of switching between two
+console screens. Now use one console screen and save/restore the contents
+when needed. (Craig Barkhouse)
+
+When reading a file the magic number for encryption was included in the file
+length. (Antonio Colombo)
+
+The quickfix window contained leading whitespace and NULs for multi-line
+messages. (David Harrison)
+
+When using cscope, redundant tags were removed. This caused a numbering
+problem, because they were all listed. Don't remove redundant cscope tags.
+(David Bustos).
+
+Cscope: Test for which matches are in the current buffer sometimes failed,
+causing a jump to another match than selected. (David Bustos)
+
+Win32: Buffer overflow when adding a charset name in a font.
+
+'titlestring' and 'iconstring' were evaluating an expression in the current
+context, which could be a user function, which is a problem for local
+variables vs global variables.
+
+Win32 GUI: Mapping <M-F> didn't work. Now handle SHIFT and CTRL in
+_OnSysChar().
+
+Win32 GUI: (on no file), :vs<CR>:q<CR> left a trail of pixels down the middle.
+Could also happen for the ruler. screen_puts() didn't clear the right char in
+ScreenLines[] for the bold trick.
+
+Win32: ":%!sort|uniq" didn't work, because the input file name touches the
+"|". Insert a space before the "|".
+
+OS/2: Expanding wildcards included non-existing files. Caused ":runtime" to
+fail, which caused syntax highlighting to fail.
+
+Pasting a register containing CTRL-R on the command line could cause an
+endless loop that can't be interrupted. Now it can be stopped with CTRL-C.
+
+When 'verbose' is set, a message for file read/write could overwrite the
+previous message.
+When 'verbose' is set, the header from ":select" was put after the last
+message. Now start a new line.
+
+The hit-enter prompt reacted to the response of the t_RV string, causing
+messages at startup to disappear.
+
+When t_Co was set to 1, colors were still used. Now only use color when t_Co
+> 1.
+
+Listing functions with ":function" didn't quit when 'q' or ':' was typed at
+the more prompt.
+
+Use mkstemp() instead of mktemp() when it's available, avoids a warning for
+linking on FreeBSD.
+
+When doing Insert mode completion it's possible that b_sfname is NULL. Don't
+give it to printf() for the "Scanning" message.
+
+":set runtimepath-=$VIMRUNTIME" didn't work, because expansion of wildcards
+was done after trying to remove the string. Now for ":set opt+=val" and ":set
+opt-=val" the expansion of wildcards is done before adding or removing "val".
+
+Using CTRL-V with the "r" command with a blockwise Visual selection inserted a
+CTRL-V instead of getting a special character.
+
+Unix: Changed the order of libraries: Put -lXdmcp after -lX11 and -lSM -lICE
+after -lXdmcp. Should fix link problem on HP-UX 10.20.
+
+Don't remove the last "-lm" from the link line. Vim may link but fail later
+when the GUI starts.
+
+When the shell returns with an error when trying to expand wildcards, do
+include the pattern when the "EW_NOTFOUND" flag was set.
+When expanding wildcards with the shell fails, give a clear error message
+instead of just "1 returned".
+
+Selecting a Visual block, with the start partly on a Tab, deleting it leaves
+the cursor too far to the left. Causes "s" to work in the wrong position.
+
+Pound sign in normal.c caused trouble on some compilers. Use 0xA3 instead.
+
+Warning for changing a read-only file wasn't given when 'insertmode' was set.
+
+Win32: When 'shellxquote' is set to a double quote (e.g., using csh), ":!start
+notepad file" doesn't work. Remove the double quotes added by 'shellxquote'
+when using ":!start". (Pavol Juhas)
+
+The "<f-args>" argument of ":command" didn't accept Tabs for white space.
+Also, don't add an empty argument when there are trailing blanks.
+
+":e test\\je" edited "test\je", but ":next test\\je" edited "testje".
+Backslashes were removed one time too many for ":next".
+
+VMS: "gf" didn't work properly. Use vms_fixfilename() to translate the file
+name. (Zoltan Arpadffy)
+
+After ":hi Normal ctermbg=black ctermfg=white" and suspending Vim not all
+characters are redrawn with the right background.
+
+When doing "make test" without +eval or +windows feature, many tests failed.
+Now have test1 generate a script to copy the correct output, so that a test
+that doesn't work is skipped.
+
+On FreeBSD the Perl interface added "-lc" to the link command and Python added
+"-pthread". These two don't work together, because the libc_r library should
+be used. Removed "-lc" from Perl, it should not be needed.
+Also: Add "-pthread" to $LIBS, so that the checks for functions is done with
+libc_r. Sigaltstack() appears to be missing from libc_r.
+
+The Syntax sub-menus were getting too long, reorganized them and added another
+level for some languages.
+
+Visual block "r"eplace didn't work well when a Tab is partly included.
+(Matthias Kramm)
+
+When yanking a Visual block, where some lines end halfway the block, putting
+the text somewhere else doesn't insert a block. Padd with spaces for missing
+characters. Added "y_width" to struct yankreg. (Matthias Kramm)
+
+If a substitute string has a multibyte character after a backslash only the
+first byte of it was skipped. (Muraoka Taro)
+
+Win32: Numeric keypad keys were missing from the builtin termcap entry.
+
+When a file was read-only ":wa!" didn't force it to be written. (Vince Negri)
+
+Amiga: A file name starting with a colon was considered absolute but it isn't.
+Amiga: ":pwd" added a slash when in the root of a drive.
+
+Don't let 'ttymouse' default to "dec" when compiled with dec mouse support.
+It breaks the gpm mouse (Linux console).
+
+The prototypes for the Perl interface didn't work for threaded Perl. Added a
+sed command to remove the prototypes from proto/if_perl.pro and added them
+manually to if_perl.xs.
+
+When ":w!" resets the 'readonly' option the title and status lines were not
+updated.
+
+":args" showed the current file when the argument list was empty. Made this
+work like Vi: display nothing.
+
+"99:<C-U>echo v:count" echoed "99" in Normal mode, but 0 in Visual mode.
+Don't set v:count when executing a stuffed command.
+
+Amiga: Got a requester for "home:" because it's in the default runtime path.
+Don't bring up a requester when searching for a file in 'path', sourcing the
+.vimrc file or using ":runtime".
+
+Win16 and Win32: Considered a file "\path\file" absolute. Can cause the same
+file to appear as two different buffers.
+
+Win32: Renaming a file to an empty string crashed Vim. Happened when using
+explorer.vim and hitting ESC at the rename prompt.
+
+Win32: strftime() crashed when called with a "-1" value for the time.
+
+Win32 with Borland compiler: mch_FullName() didn't work, caused tag file not
+to be found.
+
+Cscope sometimes jumped to the wrong tag. (David Bustos)
+
+OS/2: Could not find the tags file. mch_expand_wildcards() added another
+slash to a directory name.
+
+When using ">>" the `] mark was not in the last column.
+
+When Vim was compiled without menu support, filetype.vim was still trying to
+source the menu.vim script. (Rafael Garcia-Suarez)
+
+":ptag" added an item to the tag stack.
+
+Win32 IME: "gr" didn't use IME mode.
+
+In the "vim --help" message the term "options" was used for arguments. That's
+confusing, call them "arguments".
+
+When there are two windows, and a BufUnload autocommand for closing window #1
+closed window #2, Vim would crash.
+
+When there is a preview window and only one other window, ":q" wouldn't exit.
+
+In Insert mode, when cancelling a digraph with ESC, the '?' wasn't removed.
+
+On Unix glob(".*") returned "." and "..", on Windows it didn't. On Windows
+glob("*") also returned files starting with a dot. Made this work like Unix
+on all systems.
+
+Win32: Removed old code to open a console. Vimrun is now used and works fine.
+
+Compute the room needed by the intro message accurately, so that it also fits
+on a 25 line console. (Craig Barkhouse)
+
+":ptnext" was broken. Now remember the last tag used in the preview window
+separately from the tagstack.
+
+Didn't check for "-display" being the last argument. (Wichert Akkerman)
+
+GTK GUI: When starting "gvim" under some conditions there would be an X error.
+Don't replace the error handler when creating the xterm clipboard. (Wichert
+Akkerman)
+
+Adding a space after a help tag caused the tag not to be found. E.g., ":he
+autoindent ".
+
+Was trying to expand a URL into a full path name. On Windows this resulted in
+the current directory to be prepended to the URL. Added vim_isAbsName() and
+vim_FullName() to avoid that various machine specific functions do it
+differently.
+
+":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
+":cd"), unless it's deleted.
+
+When inserting a special key as its name ("<F8>" as four characters) after
+moving around in Insert mode, undo didn't work properly.
+
+Motif GUI: When using the right mouse button, for some people gvim froze for
+a couple of seconds (Motif 1.2?). This doesn't happen when there is no Popup
+menu. Solved by only creating a popup menu when 'mousemodel' is "popup" or
+"popup_setpos". (David Harrison)
+
+Motif: When adding many menu items, the "Help" menu disappeared but the
+menubar didn't wrap. Now manually set the menubar height.
+
+When using <BS> in Insert mode to remove a line break, or using "J" to join
+lines, the cursor could end up halfway a multi-byte character. (Muraoka Taro)
+
+Removed defining SVR4 in configure. It causes problems for some X header
+files and doesn't appear to be used anywhere.
+
+When 'wildignore' is used, 'ignorecase' for a tag match was not working.
+
+When 'wildignore' contains "*~" it was impossible to edit a file ending in a
+"~". Now don't recognize a file ending in "~" as containing wildcards.
+
+Disabled the mouse code for OS/2. It was not really used.
+
+":mksession" always used the full path name for a buffer, also when the short
+name could be used.
+":mkvimrc" and ":mksession" didn't save 'wildchar' and 'pastetoggle' in such a
+way that they would be restored. Now use the key name if possible, this is
+portable.
+
+After recovering a file and abandoning it, an ":edit" command didn't give the
+ATTENTION prompt again. Would be useful to be able to delete the file in an
+easy way. Reset the BF_RECOVERED flag when unloading the buffer.
+
+histdel() could match or ignore case, depending on what happened before it.
+Now always match case.
+
+When a window size was specified when splitting a window, it would still get
+the size from 'winheight' or 'winwidth' if it's larger.
+
+When using "append" or "insert" inside a function definition, a line starting
+with "function" or "endfunction" caused confusion. Now recognize the commands
+and skip lines until a ".".
+
+At the end of any function or sourced file need_wait_return could be reset,
+causing messages to disappear when redrawing.
+
+When in a while loop the line number for error messages stayed fixed. Now the
+line number is remembered in the while loop.
+
+"cd c:/" didn't work on MS-DOS. mch_isdir() removed a trailing slash.
+
+MS-Windows: getftime() didn't work when a directory had a trailing slash or
+backslash. Didn't show the time in the explorer because of this.
+
+When doing wildcard completion, a directory "a/" sorted after "a-b". Now
+recognize path separators when sorting files.
+
+Non-Unix systems: When editing "c:/dir/../file" and "c:/file" they were
+created as different buffers, although it's the same file. Expand to a full
+file name also when an absolute name contains "..".
+
+"g&" didn't repeat the last substitute properly.
+
+When 'clipboard' was set to "unnamed", a "Y" command would not write to "0.
+Now make a copy of register 0 to the clipboard register.
+
+When the search pattern matches in many ways, it could not always be
+interrupted with a CTRL-C. And CTRL-C would have to be hit once for every
+line when 'hlsearch' is on.
+When 'incsearch' is on and interrupting the search for a match, don't abandon
+the command line.
+
+When turning a directory name into a full path, e.g., with fnamemodify(),
+sometimes a slash was added. Make this consistent: Don't add a slash.
+
+When a file name contains a "!", using it in a shell command will cause
+trouble: ":!cat %". Escape the "!" to avoid that. Escape it another time
+when 'shell' contains "sh".
+
+Completing a file name that has a tail that starts with a "~" didn't work:
+":e view/~<Tab>".
+
+Using a ":command" argument that contains < and > but not for a special
+argument was not skipped properly.
+
+The DOS install program: On Win2000 the check for a vim.exe or gvim.exe in
+$PATH didn't work, it always found it in the current directory.
+Rename the vim.exe in the current dir to avoid this. (Walter Briscoe)
+
+In the MS-DOS/Windows install program, use %VIM% instead of an absolute path,
+so that moving Vim requires only one change in the batch file.
+
+Mac: mch_FullName() changed the "fname" argument and didn't always initialize
+the buffer.
+
+MS-DOS: mch_FullName() didn't fix forward/backward slashes in an absolute file
+name.
+
+"echo expand("%:p:h")" with an empty file name removed one directory name on
+MS-DOS. For Unix, when the file name is a directory, the directory name was
+removed. Now make it consistent: "%:p" adds a path separator for all systems,
+but no path separator is added in other situations.
+
+Unix: When checking for a CTRL-C (could happen any time) and there is an X
+event (e.g., clipboard updated) and there is typeahead, Vim would hang until a
+character was typed.
+
+MS-DOS, MS-Windows and Amiga: expanding "$ENV/foo" when $ENV ends in a colon,
+had the slash removed.
+
+":he \^=" gave an error for using \_. ":he ^=" didn't find tag :set^=. Even
+"he :set^=" didn't find it.
+
+A tags file name "D:/tags" was used as file "tags" in "D:". That doesn't work
+when the current path for D: isn't the root of the drive.
+
+Removed calls to XtInitializeWidgetClass(), they shouldn't be necessary.
+
+When using a dtterm or various other color terminals, and the Normal group has
+been set to use a different background color, the background wouldn't always
+be displayed with that color. Added check for "ut" termcap entry: If it's
+missing, clearing the screen won't give us the current background color. Need
+to draw each character instead. Vim now also works when the "cl" (clear
+screen) termcap entry is missing.
+
+When repeating a "/" search command with a line offset, the "n" did use the
+offset but didn't make the motion linewise. Made "d/pat/+2" and "dn" do the
+same.
+
+Win32: Trying to use ":tearoff" for a menu that doesn't exist caused a crash.
+
+OpenPTY() didn't work on Sequent. Add a configure check for getpseudotty().
+
+C-indenting: Indented a line starting with ")" with the matching "(", but not
+a line starting with "x)" looks strange. Also compute the indent for aligning
+with items inside the () and use the lowest indent.
+
+MS-DOS and Windows: ":n *.vim" also matched files ending in "~".
+Moved mch_expandpath() from os_win16.c and os_msdos.c to misc1.c, they are
+equal.
+
+Macintosh: (Dany St-Amant)
+- In Vi-compatible mode didn't read files with CR line separators.
+- Fixed a bug in the handling of Activate/Deactivate Event
+- Fixed a bug in gui_mch_dialog (using wrong pointer)
+
+Multibyte GDK XIM: While composing a multibyte-word, if user presses a
+mouse button, then the word is removed. It should remain and composing end.
+(Sung-Hyun Nam)
+
+MS-DOS, MS-Windows and OS/2: When reading from stdin, automatic CR-LF
+conversion by the C library got in the way of detecting a "dos" 'fileformat'.
+
+When 'smartcase' is set, patterns with "\S" would also make 'ignorecase'
+reset.
+
+When clicking the mouse in a column larger than 222, it moved to the first
+column. Can't encode a larger number in a character. Now limit the number to
+222, don't jump back to the first column.
+
+GUI: In some versions CSI would cause trouble, either when typed directly or
+when part of a multi-byte sequence.
+
+When using multibyte characters in a ":normal" command, a trailing byte that
+is CSI or K_SPECIAL caused problems.
+
+Wildmenu didn't handle multi-byte characters.
+
+":sleep 10" could not be interrupted on Windows, while "gs" could. Made them
+both work the same.
+
+Unix: When waiting for a character is interrupted by an X-windows event (e.g.,
+to obtain the contents of the selection), the wait time would not be honored.
+A message could be overwritten quickly. Now compute the remaining waiting
+time.
+
+Windows: Completing "\\share\c$\S" inserted a backslash before the $ and then
+the name is invalid. Don't insert the backslash.
+
+When doing an auto-write before ":make", IObuff was overwritten and the wrong
+text displayed later.
+
+On the Mac the directories "c:/tmp" and "c:/temp" were used in the defaults
+for 'backupdir' and 'directory', they don't exist.
+
+The check for a new file not to be on an MS-DOS filesystem created the file
+temporarily, which can be slow. Don't do this if there is another check for
+the swap file being on an MS-DOS filesystem.
+
+Don't give the "Changing a readonly file" warning when reading from stdin.
+
+When using the "Save As" menu entry and not entering a file name, would get an
+error message for the trailing ":edit #". Now only do that when the
+alternate file name was changed.
+
+When Vim owns the X11 selection and is being suspended, an application that
+tries to use the selection hangs. When Vim continues it could no longer
+obtain the selection. Now give up the selection when suspending.
+
+option.h and globals.h were included in some files, while they were already
+included in vim.h. Moved the definition of EXTERN to vim.h to avoid doing it
+twice.
+
+When repeating an operator that used a search pattern and the search pattern
+contained characters that have a special meaning on the cmdline (e.g., CTRL-U)
+it didn't work.
+
+Fixed various problems with using K_SPECIAL (0x80) and CSI (0x9b) as a byte in
+a (multibyte) character. For example, the "r" command could not be repeated.
+
+The DOS/Windows install program didn't always work from a directory with a
+long filename, because $VIM and the executable name would not have the same
+path.
+
+Multi-byte:
+- Using an any-but character range [^x] in a regexp didn't work for UTF-8.
+ (Muraoka Taro)
+- When backspacing over inserted characters in Replace mode multi-byte
+ characters were not handled correctly. (Muraoka Taro)
+- Search commands "#" and "*" didn't work with multibyte characters. (Muraoka
+ Taro)
+- Word completion in Insert mode didn't work with multibyte characters.
+ (Muraoka Taro)
+- Athena/Motif GUI: when 'linespace' is non-zero the cursor would be drawn too
+ wide (number of bytes instead of cell width).
+- When changing 'encoding' to "euc-jp" and inserting a character Vim would
+ crash.
+- For euc-jp characters positioning the cursor would sometimes be wrong.
+ Also, with two characters with 0x8e leading byte only the first one would be
+ displayed.
+- When using DYNAMIC_ICONV on Win32 conversion might fail because of using the
+ wrong error number. (Muraoka Taro)
+- Using Alt-x in the GUI while 'encoding' was set to "utf-8" didn't produce
+ the right character.
+- When using Visual block selection and only the left halve of a double-wide
+ character is selected, the highlighting continued to the end of the line.
+- Visual-block delete didn't work properly when deleting the right halve of a
+ double-wide character.
+- Overstrike mode for the cmdline replaced only the first byte of a multibyte
+ character.
+- The cursor in Replace mode (also in the cmdline) was to small on a
+ double-wide character.
+- When a multibyte character contained a 0x80 byte, it didn't work (was using
+ a CSI byte instead). (Muraoka Taro)
+- Wordwise selection with the mouse didn't work.
+- Yanking a modeless selection of multi-byte characters didn't work.
+- When 'selection' is "exclusive", selecting a word that ends in a multi-byte
+ character used wrong highlighting for the following character.
+
+Win32 with Make_mvc.mak: Didn't compile for debugging. (Craig Barkhouse)
+
+Win32 GUI: When "vimrun.exe" is used to execute an external command, don't
+give a message box with the return value, it was already printed by vimrun.
+Also avoid printing the return value of the shell when ":silent!" is used.
+
+Win32: selecting a lot of text and using the "find/replace" dialog caused a
+crash.
+
+X11 GUI: When typing a character with the 8th bit set and the Meta/Alt
+modifier, the modifier was removed without changing the character.
+
+Truncating a message to make it fit on the command line, using "..." for the
+middle, didn't always compute the space correctly.
+
+Could not imap <C-@>. Now it works like <Nul>.
+
+VMS:
+- Fixed a few things for VAXC. os_vms_fix.com had some strange CTRL-M
+ characters. (Zoltan Arpadffy and John W. Hamill)
+- Added VMS-specific defaults for the 'isfname' and 'isprint' options.
+ (Zoltan Arpadffy)
+- Removed os_vms_osdef.h, it's no longer used.
+
+The gzip plugin used a ":normal" command, this doesn't work when dropping a
+compressed file on Vim.
+
+In very rare situations a binary search for a tag would fail, because an
+uninitialized value happens to be half the size of the tag file. (Narendran)
+
+When using BufEnter and BufLeave autocommands to enable/disable a menu, it
+wasn't updated right away.
+
+When doing a replace with the "c"onfirm flag, the cursor was positioned after
+the ruler, instead of after the question. With a long replacement string the
+screen could scroll up and cause a "more" prompt. Now the message is
+truncated to make it fit.
+
+Motif: The autoconf check for the Xp library didn't work.
+
+When 'verbose' is set to list lines of a sourced file, defining a function
+would reset the counter used for the "more" prompt.
+
+In the Win32 find/replace dialog, a '/' character caused problems. Escape it
+with a backslash.
+
+Starting a shell with ":sh" was different from starting a shell for CTRL-Z
+when suspending doesn't work. They now work the same way.
+
+Jumping to a file mark while in a changed buffer gave a "mark not set" error.
+
+":execute histget("cmd")" causes an endless loop and crashed Vim. Now catch
+all commands that cause too much recursiveness.
+
+Removed "Failed to open input method" error message, too many people got this
+when they didn't want to use a XIM.
+
+GUI: When compiled without the +windows feature, the scrollbar would start
+below line one.
+
+Removed the trick with redefining character class functions from regexp.c.
+
+Win32 GUI: Find dialog gives focus back to main window, when typing a
+character mouse pointer is blanked, it didn't reappear when moving it in the
+dialog window. (Vince Negri)
+
+When recording and typing a CTRL-C, no character was recorded. When in Insert
+mode or cancelling half a command, playing back the recorded sequence wouldn't
+work. Now record the CTRL-C.
+
+When the GUI was started, mouse codes for DEC and netterm were still checked
+for.
+
+GUI: When scrolling and 'writedelay' is non-zero, the character under the
+cursor was displayed in the wrong position (one line above/below with
+CTRL-E/CTRL-Y).
+
+A ":normal" command would reset the 'scrollbind' info. Causes problems when
+using a ":normal" command in an autocommand for opening a file.
+
+Windows GUI: a point size with a dot, like "7.5", wasn't recognized. (Muraoka
+Taro)
+
+When 'scrollbind' wasn't set would still remember the current position,
+wasting time.
+
+GTK: Crash when 'shell' doesn't exist and doing":!ls". Use _exit() instead of
+exit() when the child couldn't execute the shell.
+
+Multi-byte:
+- GUI with double-byte encoding: a mouse click in left halve of double-wide
+ character put the cursor in previous char.
+- Using double-byte encoding and 'selection' is "exclusive": "vey" and "^Vey"
+ included the character after the word.
+- When using a double-byte encoding and there is a lead byte at the end of the
+ line, the preceding line would be displayed. "ga" also showed wrong info.
+- "gf" didn't include multi-byte characters before the cursor properly.
+ (Muraoka Taro)
+
+GUI: The cursor was sometimes not removed when scrolling. Changed the policy
+from redrawing the cursor after each call to gui_write() to only update it at
+the end of update_screen() or when setting the cursor position. Also only
+update the scrollbars at the end of update_screen(), that's the only place
+where the window text may have been scrolled.
+
+Formatting "/*<Tab>long text", produced "* <Tab>" in the next line. Now
+remove the space before the Tab.
+Formatting "/*<Tab> long text", produced "* <Tab> long text" in the next
+line. Now keep the space after the Tab.
+
+In some places non-ASCII alphabetical characters were accepted, which could
+cause problems. For example, ":X" (X being such a character).
+
+When a pattern matches the end of the line, the last character in the line was
+highlighted for 'hlsearch'. That looks wrong for "/\%3c". Now highlight the
+character just after the line.
+
+Motif: If a dialog was closed by clicking on the "X" of the window frame Vim
+would no longer respond.
+
+When using CTRL-X or CTRL-A on a number with many leading zeros, Vim would
+crash. (Matsumoto)
+
+When 'insertmode' is set, the mapping in mswin.vim for CTRL-V didn't work in
+Select mode. Insert mode wasn't restarted after overwriting the text.
+Now allow nesting Insert mode with insert and change commands. CTRL-O
+cwfoo<Esc> now also works.
+
+Clicking with the right mouse button in another window started Visual mode,
+but used the start position of the current window. Caused ml_get errors when
+the line number was invalid. Now stay in the same window.
+
+When 'selection' is "exclusive", "gv" sometimes selected one character fewer.
+
+When 'comments' contains more than one start/middle/end triplet, the optional
+flags could be mixed up. Also didn't align the end with the middle part.
+
+Double-right-click in Visual mode didn't update the shown mode.
+
+When the Normal group has a font name, it was never used when starting up.
+Now use it when 'guifont' and 'guifontset' are empty.
+Setting a font name to a highlight group before the GUI was started didn't
+work.
+
+"make test" didn't use the name of the generated Vim executable.
+
+'cindent' problems:
+- Aligned with an "else" inside a do-while loop for a line below that loop.
+ (Meikel Brandmeyer)
+- A line before a function would be indented even when terminated with a
+ semicolon. (Meikel Brandmeyer)
+- 'cindent' gave too much indent to a line after a "};" that ends an array
+ init.
+- Support declaration lines ending in "," and "\". (Meikel Brandmeyer)
+- A case statement inside a do-while loop was used for indenting a line after
+ the do-while loop. (Meikel Brandmeyer)
+- When skipping a string in a line with one double quote it could continue in
+ the previous line. (Meikel Brandmeyer)
+
+When 'list' is set, 'hlsearch' didn't highlight a match at the end of the
+line. Now highlight the '$'.
+
+The Paste menu item in the menu bar, the popup menu and the toolbar were all
+different. Now made them all equal to how it was done in mswin.vim.
+
+st_dev can be smaller than "unsigned". The compiler may give an overflow
+warning. Added a configure check for dev_t.
+
+Athena: closing a confirm() dialog killed Vim.
+
+Various typos in the documentation. (Matt Dunford)
+
+Python interface: The definition of _DEBUG could cause trouble, undefine it.
+The error message for not being able to load the shared library wasn't
+translated. (Muraoka Taro)
+
+Mac: (Dany St-Amant and Axel Kielhorn)
+- Several fixes.
+- Vim was eating 80% of the CPU time.
+- The project os_mac.pbxproj didn't work, Moved it to a subdirectory.
+- Made the menu priority work for the menubar.
+- Fixed a problem with dragging the scrollbar.
+- Cleaned up the various #ifdefs.
+
+Unix: When catching a deadly signal and we keep getting one use _exit() to
+exit in a quick and dirty way.
+
+Athena menu ordering didn't work correctly. (David Harrison)
+
+A ":make" or ":grep" command with a long argument could cause a crash.
+
+Doing ":new file" and using "Quit" for the ATTENTION dialog still opened a new
+window.
+
+GTK: When starting the GUI and there is an error in the .vimrc file, don't
+present the wait-return prompt, since the message was given in the terminal.
+
+When there was an error in a .vimrc file the terminal where gvim was started
+could be cleared. Set msg_row in main.c before writing any messages.
+
+GTK and X11 GUI: When trying to read characters from the user (e.g. with
+input()) before the Vim window was opened caused Vim to hang when it was
+started from the desktop.
+
+OS/390 uses 31 bit pointers. That broke some computations with MAX_COL.
+Reduce MAX_COL by one bit for OS/390. (Ralf Schandl)
+
+When defining a function and it already exists, Vim didn't say it existed
+until after typing it. Now do this right away when typing it.
+
+The message remembered for displaying later (keep_msg) was sometimes pointing
+into a generic buffer, which might be changed by the time the message is
+displayed. Now make a copy of the message.
+
+When using multi-byte characters in a menu and a trailing byte is a backslash,
+the menu would not be created correctly. (Muraoka Taro)
+Using a multibyte character in the substitute string where a trail byte is a
+backslash didn't work. (Muraoka Taro)
+
+When setting "t_Co" in a vimrc file, then setting it automatically from an
+xterm termresponse and then setting it again manually caused a crash.
+
+When getting the value of a string option that is not supported, the number
+zero was returned. This breaks a check like "&enc == "asdf". Now an empty
+string is returned for string options.
+
+Crashed when starting the GTK GUI while using 'notitle' in the vimrc, setting
+'title' in the gvimrc and starting the GUI with ":gui". Closed the connection
+to the X server accidentally.
+
+Had to hit return after selecting an entry for ":ts".
+
+The message from ":cn" message was sometimes cleared. Now display it after
+redrawing if it doesn't cause a scroll (truncated when necessary).
+
+hangulin.c didn't compile when the GUI was disabled. Disable it when it won't
+work.
+
+When setting a termcap option like "t_CO", the value could be displayed as
+being for a normal key with a modifier, like "<M-=>".
+
+When expanding the argument list, entries which are a directory name did not
+get included. This stopped "vim c:/" from opening the file explorer.
+
+":syn match sd "^" nextgroup=asdf" skipped the first column and matched the
+nextgroup in the second column.
+
+GUI: When 'lazyredraw' is set, 'showmatch' didn't work. Required flushing
+the output.
+
+Don't define the <NetMouse> termcode in an xterm, reduces the problem when
+someone types <Esc> } in Insert mode.
+
+Made slash_adjust() work correctly for multi-byte characters. (Yasuhiro
+Matsumoto)
+Using a filename in Big5 encoding for autocommands didn't work (backslash in
+trailbyte). (Yasuhiro Matsumoto)
+
+DOS and Windows: Expanding *.vim also matched file.vimfoo. Expand path like
+Unix to avoid problems with Windows dir functions. Merged the DOS and Win32
+functions.
+
+Win32: Gvimext could not edit more than a few files at once, the length of the
+argument was fixed.
+
+"ls -1 * | xargs vim" worked, but the input was in cooked mode. Now switch to
+raw mode when needed. Use dup() to copy the stderr file descriptor to stdin
+to make shell commands work. No longer requires an external program to do
+this.
+
+When using ":filetype off", ftplugin and indent usage would be switched off at
+the same time. Don't do this, setting 'filetype' manually can still use them.
+
+GUI: When writing a double-byte character, it could be split up in two calls
+to gui_write(), which doesn't work. Now flush before the output buffer
+becomes full.
+
+When 'laststatus' is set and 'cmdheight' is two or bigger, the intro message
+would be written over the status line.
+The ":intro" command didn't work when there wasn't enough room.
+
+Configuring for Ruby failed with a recent version of Ruby. (Akinori Musha)
+
+Athena: When deleting the directory in which Vim was started, using the file
+browser made Vim exit. Removed the use of XtAppError().
+
+When using autoconf 2.50, UNIX was not defined. Moved the comment for "#undef
+UNIX" to a separate line.
+
+Win32: Disabled _OnWindowPosChanging() to make maximize work better.
+
+Win32: Compiling with VC 4.0 didn't work. (Walter Briscoe)
+
+Athena:
+- Finally fixed the problems with deleting a menu. (David Harrison)
+- Athena: When closing the confirm() dialog, worked like OK was pressed,
+ instead of Cancel.
+
+The file explorer didn't work in compatible mode, because of line
+continuation.
+
+Didn't give an error message for ":digraph a".
+
+When using Ex mode in the GUI and typing a special key, <BS> didn't delete it
+correctly. Now display '?' for a special key.
+
+When an operator is pending, clicking in another window made it apply to that
+window, even though the line numbers could be beyond the end of the buffer.
+
+When a function call doesn't have a terminating ")" Vim could crash.
+
+Perl interface: could crash on exit with perl 5.6.1. (Anduin Withers)
+
+Using %P in 'errorformat' wasn't handled correctly. (Tomas Zellerin)
+
+Using a syntax cluster that includes itself made Vim crash.
+
+GUI: With 'ls' set to 2, dragging the status line all the way up, then making
+the Vim window smaller: Could not the drag status line anymore.
+
+"vim -c startinsert! file" placed cursor on last char of a line, instead of
+after it. A ":set" command in the buffer menu set w_set_curswant. Now don't
+do this when w_curswant is MAXCOL.
+
+Win32: When the gvim window was maximized and selecting another font, the
+window would no longer fill the screen.
+
+The line with 'pastetoggle' in ":options" didn't show the right value when it
+is a special key. Hitting <CR> didn't work either.
+
+Formatting text, resulting in a % landing in the first line, repeated the % in
+the following lines, like it's the start of a comment.
+
+GTK: When adding a toolbar item while gvim is already running, it wasn't
+possible to use the tooltip. Now it works by adding the tooltip first.
+
+The output of "g CTRL-G" mentioned "Char" but it's actually bytes.
+
+Searching for the end of a oneline region didn't work correctly when there is
+an offset for the highlighting.
+
+Syntax highlighting: When synchronizing on C-comments, //*/ was seen as the
+start of a comment.
+
+Win32: Without scrollbars present, the MS mouse scroll wheel didn't work.
+Also handle the scrollbars when they are not visible.
+
+Motif: When there is no right scrollbar, the bottom scrollbar would still
+leave room for it. (Martin Dalecki)
+
+When changing 'guicursor' and the value is invalid, some of the effects would
+still take place. Now first check for errors and only make the new value
+effective when it's OK.
+
+Using "A" In Visual block mode, appending to lines that don't extend into the
+block, padding was wrong.
+
+When pasting a block of text, a character that occupies more than one screen
+column could be deleted and spaces inserted instead. Now only do that with a
+tab.
+
+Fixed conversion of documentation to HTML using Perl. (Dan Sharp)
+
+Give an error message when a menu name starts with a dot.
+
+Avoid a hang when executing a shell from the GUI on HP-UX by pushing "ptem"
+even when sys/ptem.h isn't present.
+
+When creating the temp directory, make sure umask is 077, otherwise the
+directory is not accessible when it was set to 0177.
+
+Unix: When resizing the window and a redraw is a bit slow, could get a window
+resize event while redrawing, resulting in a messed up window. Any input
+(e.g., a mouse click) would redraw.
+
+The "%B" item in the status line became zero in Insert mode (that's normal)
+for another than the current window.
+
+The menu entries to convert to xxd and back didn't work in Insert mode.
+
+When ":vglobal" didn't find a line where the pattern doesn't match, the error
+message would be the wrong way around.
+
+When ignoring a multi-line error message with "%-A", the continuation lines
+would be used anyway. (Servatius Brandt)
+
+"grx" on a double-wide character inserted "x", instead of replacing the
+character with "x ". "gR" on <xx> ('display' set the "uhex") didn't replace
+at all. When doing "gRxx" on a control character the first "x" would be
+inserted, breaking the alignment.
+
+Added "0)" to 'cinkeys', so that when typing a ) it is put in the same place
+as where "==" would put it.
+
+Win32: When maximized, adding/removing toolbar didn't resize the text area.
+
+When using <C-RightMouse> a count was discarded.
+
+When typing CTRL-V and <RightMouse> in the command line, would insert
+<LeftMouse>.
+
+Using "vis" or "vas" when 'selection' is exclusive didn't include the last
+character.
+
+When adding to an option like 'grepprg', leading space would be lost. Don't
+expand environment variables when there is no comma separating the items.
+
+GUI: When using a bold-italic font, would still use the bold trick and
+underlining.
+
+Motif: The default button didn't work in dialogs, the first one was always
+used. Had to give input focus to the default button.
+
+When using CTRL-T to jump within the same file, the '' mark wasn't set.
+
+Undo wasn't Vi compatible when using the 'c' flag for ":s". Now it undoes the
+whole ":s" command instead of each confirmed replacement.
+
+The Buffers menu, when torn-off, disappeared when being refreshed. Add a
+dummy item to avoid this.
+
+Removed calling msg_start() in main(), it should not be needed.
+
+vim_strpbrk() did not support multibyte characters. (Muraoka Taro)
+
+The Amiga version didn't compile, the code was too big for relative jumps.
+Moved a few files from ex_docmd.c to ex_cmds2.c
+
+When evaluating the "= register resulted in the "= register being changed, Vim
+would crash.
+
+When doing ":view file" and it fails, the current buffer was made read-only.
+
+Motif: For some people the separators in the toolbar disappeared when resizing
+the Vim window. (Martin Dalecki)
+
+Win32 GUI: when setting 'lines' to a huge number, would not compute the
+available space correctly. Was counting the menu height twice.
+
+Conversion of the docs to HTML didn't handle the line with the +quickfix tag
+correctly. (Antonio Colombo)
+
+Win32: fname_case() didn't handle multi-byte characters correctly. (Yasuhiro
+Matsumoto)
+
+The Cygwin version had trouble with fchdir(). Don't use that function for
+Cygwin.
+
+The generic check in scripts.vim for "conf" syntax was done before some checks
+in filetype.vim, resulting in "conf" syntax too often.
+
+Dos32: Typing lagged behind. Would wait for one biostick when checking if a
+character is available.
+
+GTK: When setting 'columns' while starting up "gvim", would set the width of
+the terminal it was started in.
+
+When using ESC in Insert mode, an autoindent that wraps to the next line
+caused the cursor to move to the end of the line temporarily. When the
+character before the cursor was a double-wide multi-byte character the cursor
+would be on the right halve, which causes problems with some terminals.
+
+Didn't handle multi-byte characters correctly when expanding a file name.
+(Yasuhiro Matsumoto)
+
+Win32 GUI: Errors generated before the GUI is decided to start were not
+reported.
+
+globpath() didn't reserve enough room for concatenated results. (Anduin
+Withers)
+
+When expanding an option that is very long already, don't do the expansion, it
+would be truncated to MAXPATHL. (Anduin Withers)
+
+When 'selection' is "exclusive", using "Fx" in Visual mode only moved until
+just after the character.
+
+When using IME on the console to enter a file name, the screen may scroll up.
+Redraw the screen then. (Yasuhiro Matsumoto)
+
+Motif: In the find/replace dialog the "Replace" button didn't work first time,
+second time it replaced all matches. Removed the use of ":s///c".
+GTK: Similar problems with the find/replace dialog, moved the code to a common
+function.
+
+X11: Use shared GC's for text. (Martin Dalecki)
+
+"]i" found the match under the cursor, instead of the first one below it.
+Same for "]I", "] CTRL-I", "]d", "]D" and "] CTRL-D".
+
+Win16: When maximized and the font is changed, don't change the window size.
+(Vince Negri)
+
+When 'lbr' is set, deleting a block of text could leave the cursor in the
+wrong position.
+
+Win32: When opening a file with the "Edit with Vim" popup menu entry,
+wildcards would cause trouble. Added the "--literal" argument to avoid
+expanding file names.
+
+When using "gv", it didn't restore that "$" was used in Visual block mode.
+
+Win32 GUI: While waiting for a shell command to finish, the window wasn't
+redrawn at all. (Yasuhiro Matsumoto)
+
+Syntax highlighting: A match that continues on a next line because of a
+contained region didn't end when that region ended.
+
+The ":s" command didn't allow flags like 'e' and 'i' right after it.
+
+When using ":s" to split a line, marks were moved to the next line. Vi keeps
+them in the first line.
+
+When using ":n" ":rew", the previous context mark was at the top of the file,
+while Vi puts it in the same place as the cursor. Made it Vi compatible.
+
+Fixed Vi incompatibility: Text was not put in register 1 when using "c" and
+"d" with a motion character, when deleting within one line with one of the
+commands: % ( ) `<character> / ? N n { }
+
+Win32 GUI: The tooltip for tear-off items remained when the tear-off item was
+no longer selected.
+
+GUI: When typing ":" at the more prompt, would return to Normal mode and not
+redraw the screen.
+
+When starting Vim with an argument "-c g/at/p" the printed lines would
+overwrite each other.
+
+BeOS: Didn't compile. Configure didn't add the os_beos files, the QNX check
+removed them. Various changes to os_beos.cc. (Joshua Haberman)
+Removed the check for the hardware platform, the BeBox has not been produced
+for a long time now.
+
+Win32 GUI: don't use a message box when the shell returns an error code,
+display the message in the Vim window.
+
+Make_mvc.mak always included "/debug" for linking. "GUI=no" argument didn't
+work. Use "DEBUG=yes" instead of "DEBUG=1" to make it consistent. (Dan Sharp)
+
+When a line in the tags file ended in ;" (no TAB following) the command would
+not be recognized as a search command.
+
+X11: The inputMethod resource never worked. Don't use the "none" input method
+for SGI, it apparently makes the first character in Input method dropped.
+
+Fixed incorrect tests in os_mac.h. (Axel Kielhorn)
+
+Win32 console: When the console where Vim runs in is closed, Vim could hang in
+trying to restore the window icon. (Yasuhiro Matsumoto)
+
+When using ":3call func()" or ":3,3call func() the line number was ignored.
+
+When 'showbreak' and 'linebreak' were both set, Visual highlighting sometimes
+continued until the end of the line.
+
+GTK GUI: Tearoff items were added even when 'guioptions' didn't contain 't'
+when starting up.
+
+MS-Windows: When the current directory includes a "~", searching files with
+"gf" or ":find" didn't work. A "$" in the directory had the same problem.
+Added mch_has_exp_wildcard() functions.
+
+When reducing the Vim window height while starting up, would get an
+out-of-memory error message.
+
+When editing a very long search pattern, 'incsearch' caused the redraw of the
+command line to fail.
+
+Motif GUI: On some systems the "Help" menu would not be on the far right, as
+it should be. On some other systems (esp. IRIX) the command line would not
+completely show. Solution is to only resize the menubar for Lesstif.
+
+Using "%" in a line that contains "\\" twice didn't take care of the quotes
+properly. Now make a difference between \" and \\".
+
+For non-Unix systems a dummy file is created when finding a swap name to
+detect a 8.3 filesystem. When there is an existing swap file, would get a
+warning for the file being created outside of Vim. Also, when closing the Vim
+window the file would remain.
+
+Motif: The menu height was always computed, using a "-menuheight" argument
+was setting the room for the command line. Now make clear the argument is not
+supported.
+
+For some (EBCDIC) systems, POUND was equal to '#'. Added an #if for that to
+avoid a duplicate case in a switch.
+
+The GUI may have problems when forking. Always call _exit() instead of exit()
+in the parent, the child will call exit().
+
+Win32 GUI: Accented characters were often wrong in dialogs and tearoff menus.
+Now use CP_ACP instead of CP_OEMCP. (Vince Negri)
+
+When displaying text with syntax highlighting causes an error (e.g., running
+out of stack) the syntax highlighting is disabled to avoid further messages.
+
+When a command in a .vimrc or .gvimrc causes an ATTENTION prompt, and Vim was
+started from the desktop (no place to display messages) it would hang. Now
+open the GUI window early to be able to display the messages and pop up the
+dialog.
+
+"r<CR>" on a multi-byte character deleted only the first byte of the
+character. "3r<CR>" deleted three bytes instead of three characters.
+
+When interrupting reading a file, Vi considers the buffer modified. Added the
+'i' flag in 'cpoptions' flag for this (we don't want it modified to be able to
+do ":q").
+
+When using an item in 'guicursor' that starts with a colon, Vim would get
+stuck or crash.
+
+When putting a file mark in a help file and later jumping back to it, the
+options would not be set. Extended the modeline in all help files to make
+this work better.
+
+When a modeline contained "::" the local option values would be printed. Now
+ignore it.
+
+Some help files did not use a 8.3 names, which causes problems when using
+MS-DOS unzip. Renamed "multibyte.txt" to "mbyte.txt", "rightleft.txt" to
+"rileft.txt", "tagsearch.txt" to "tagsrch.txt", "os_riscos.txt" to
+"os_risc.txt".
+
+When Visual mode is blockwise, using "iw" or "aw" made it characterwise. That
+doesn't seem right, only do this when in linewise mode. But then do it
+always, not only when start and end of Visual mode are equal.
+
+When using "viw" on a single-letter word and 'selection' is exclusive, would
+not include the word.
+
+When formatting text from Insert mode, using CTRL-O, could mess up undo
+information.
+
+While writing a file (also for the backup file) there was no check for an
+interrupt (hitting CTRL-C). Vim could hang when writing a large file over a
+slow network, and moving the mouse didn't make it appear (when 'mousehide' is
+set) and the screen wasn't updated in the GUI. Also allow interrupting when
+syncing the swap file, it can take a long time.
+
+When using ":mksession" while there is help window, it would later be restored
+to the right file but not marked as a help buffer. ":help" would then open
+another window. Now use the value "help" for 'buftype' to mark a help buffer.
+
+The session file contained absolute path names in option values, that doesn't
+work when the home directory depends on the situation. Replace the home
+directory with ~/ when possible.
+
+When using 'showbreak' a TAB just after the shown break would not be counted
+correctly, the cursor would be positioned wrong.
+
+With 'showbreak' set to "--->" or "------->" and 'sts' set to 4, inserting
+tabs did not work right. Could cause a crash. Backspacing was also wrong,
+could get stuck at a line break.
+
+Win32: crashed when tearing off a menu with over 300 items.
+
+GUI: A menu or toolbar item would appear when only a tooltip was defined for
+it.
+
+When 'scrolloff' is non-zero and "$" is in 'cpoptions', using "s" while the
+last line of the file is the first line on screen, the text wasn't displayed.
+
+When running "autoconf", delete the configure cache to force starting cleanly
+when configure is run again.
+
+When changing the Normal colors for cterm, the value of 'background' was
+changed even when the GUI was used.
+
+The warning for a missing vimrun.exe was always given on startup, but some
+people just editing a file don't need to be bothered by it. Only show it when
+vimrun would be used.
+
+When using "%" in a multibyte text it could get confused by trailbytes that
+match. (Muraoka Taro)
+
+Termcap entry for RiscOS was wrong, using 7 and 8 in octal codes.
+
+Athena: The title of a dialog window and the file selector window were not
+set. (David Harrison)
+
+The "htmlLink" highlight group specified colors, which gives problems when
+using a color scheme. Added the "Underlined" highlight group for this.
+
+After using ":insert" or ":change" the '[ mark would be one line too low.
+
+When looking for the file name after a match with 'include' one character was
+skipped. Same for 'define'.
+
+Win32 and DJGPP: When editing a file with a short name in a directory, and
+editing the same file but using the long name, would end up with two buffers
+on the same file.
+
+"gf" on a filename that starts with "../" only worked when the file being
+edited is in the current directory. An include file search didn't work
+properly for files starting with "../" or ".". Now search both relative to
+the file and to the current directory.
+
+When 'printheader', 'titlestring', 'iconstring', 'rulerformat' or 'statusline'
+contained "%{" but no following "}" memory was corrupted and a crash could
+happen.
+
+":0append" and then inserting two lines did not redraw the blank lines that
+were scrolled back down.
+
+When using insert mode completion in a narrow window, the message caused a
+scroll up. Now shorten the message if it doesn't fit and avoid writing the
+ruler over the message.
+
+XIM still didn't work correctly on some systems, especially SGI/IRIX. Added
+the 'imdisable' option, which is set by default for that system.
+
+Patch 6.0aw.008
+Problem: When the first character of a file name is over 127, the Buffers
+ menu entry would get a negative priority and cause problems.
+Solution: Reduce the multiplier for the first character when computing
+ the hash value for a Buffers menu entry.
+Files: runtime/menu.vim
+
+Patch 6.0aw.010
+Problem: Win32: ":browse edit dir/dir" didn't work. (Vikas)
+Solution: Change slashes to backslashes in the directory passed to the file
+ browser.
+Files: src/gui_w48.c
+
+Athena file browser: On some systems wcstombs() can't be used to get the
+length of a multi-byte string. Use the maximum length then. (Yasuhiro
+Matsumoto)
+
+Patch 6.0ax.001
+Problem: When 'patchmode' is set, appending to a file gives an empty
+ original file. (Ed Ralston)
+Solution: Also make a backup copy when appending and 'patchmode' is set.
+Files: src/fileio.c
+
+Patch 6.0ax.002
+Problem: When 'patchmode' is set, appending to a compressed file gives an
+ uncompressed original file. (Ed Ralston)
+Solution: Create the original file before decompressing.
+Files: runtime/plugin/gzip.vim
+
+Patch 6.0ax.005
+Problem: Athena file selector keeps the title of the first invocation.
+Solution: Set the title each time the file selector is opened. (David
+ Harrison)
+Files: src/gui_at_fs.c
+
+Patch 6.0ax.007
+Problem: When using GPM (mouse driver in a Linux console) a double click is
+ interpreted as a scroll wheel click.
+Solution: Check if GPM is being used when deciding if a mouse event is for
+ the scroll wheel.
+Files: src/term.c
+
+Patch 6.0ax.010
+Problem: The Edit.Save menu and the Save toolbar button didn't work when
+ the buffer has no file name.
+Solution: Use a file browser to ask for a file name. Also fix the toolbar
+ Find item in Visual mode.
+Files: runtime/menu.vim
+
+Patch 6.0ax.012
+Problem: When 'cpoptions' contains "$", breaking a line for 'textwidth'
+ doesn't redraw properly. (Stefan Schulze)
+Solution: Remove the dollar before breaking the line.
+Files: src/edit.c
+
+Patch 6.0ax.014
+Problem: Win32: On Windows 98 ":make -f file" doesn't work when 'shell' is
+ "command.com" and 'makeprg' is "nmake". The environment isn't
+ passed on to "nmake".
+Solution: Also use vimrun.exe when redirecting the output of a command.
+Files: src/os_win32.c
+
+Patch 6.0ax.016
+Problem: The version number was reported wrong in the intro screen.
+Solution: Check for a version number with two additional letters.
+Files: src/version.c
+
+Patch 6.0ax.019
+Problem: When scrolling a window with folds upwards, switching to another
+ vertically split window and back may not update the scrollbar.
+Solution: Limit w_botline to the number of lines in the buffer plus one.
+Files: src/move.c
+
+
+==============================================================================
+VERSION 6.1 *version-6.1*
+
+This section is about improvements made between version 6.0 and 6.1.
+
+This is a bug-fix release, there are not really any new features.
+
+
+Changed *changed-6.1*
+-------
+
+'iminsert' and 'imsearch' are no longer set as a side effect of defining a
+language-mapping using ":lmap".
+
+
+Added *added-6.1*
+-----
+
+Syntax files:
+ampl AMPL (David Krief)
+ant Ant (Johannes Zellner)
+baan Baan (Her van de Vliert)
+cs C# (Johannes Zellner)
+lifelines Lifelines (Patrick Texier)
+lscript LotusScript (Taryn East)
+moo MOO (Timo Frenay)
+nsis NSIS (Alex Jakushev)
+ppd Postscript Printer Description (Bjoern Jacke)
+rpl RPL/2 (Joel Bertrand)
+scilab Scilab (Benoit Hamelin)
+splint Splint (Ralf Wildenhues)
+sqlj SQLJ (Andreas Fischbach)
+wvdial WvDial (Prahlad Vaidyanathan)
+xf86conf XFree86 config (Nikolai Weibull)
+xmodmap Xmodmap (Nikolai Weibull)
+xslt Xslt (Johannes Zellner)
+monk Monk (Mike Litherland)
+xsd Xsd (Johannes Zellner)
+cdl CDL (Raul Segura Acevedo)
+sendpr Send-pr (Hendrik Scholz)
+
+Added indent file for Scheme. (Dorai Sitaram)
+Added indent file for Prolog. (Kontra Gergely)
+Added indent file for Povray (David Necas)
+Added indent file for IDL (Aleksandar Jelenak)
+Added C# indent and ftplugin scripts.
+
+Added Ukrainian menu translations. (Bohdan Vlasyuk)
+Added ASCII version of the Czech menus. (Jiri Brezina)
+
+Added Simplified Chinese translation of the tutor. (Mendel L Chan)
+
+Added Russian keymap for yawerty keyboard.
+
+Added an explanation of using the vimrc file in the tutor.
+Changed tutor.vim to get the right encoding for the Taiwainese tutor.
+
+Added Russian tutor. (Andrey Kiselev)
+Added Polish tutor. (Mikolaj Machowski)
+
+Added darkblue color scheme. (Bohdan Vlasyuk)
+
+When packing the dos language archive automatically generate the .mo files
+that are required.
+
+Improved NSIS script to support NSIS 180. Added icons for the
+enabled/disabled status. (Mirek Pruchnik)
+
+cp1250 version of the Slovak message translations.
+
+Compiler plugins for IRIX compilers. (David Harrison)
+
+
+Fixed *fixed-6.1*
+-----
+
+The license text was updated to make the meaning clearer and make it
+compatible with the GNU GPL. Otherwise distributors have a problem when
+linking Vim with a GPL'ed library.
+
+When installing the "less.sh" script it was not made executable. (Chuck Berg)
+
+Win32: The "9" key on the numpad wasn't working. (Julian Kinraid)
+
+The NSIS install script didn't work with NSIS 1.80 or later. Also add
+Vim-specific icons. (Pruchnik)
+
+The script for conversion to HTML contained an "if" in the wrong place.
+(Michael Geddes)
+
+Allow using ":ascii" in the sandbox, it's harmless.
+
+Removed creat() from osdef2.h.in, it wasn't used and may cause a problem when
+it's redefined to creat64().
+
+The text files in the VisVim directory were in "dos" format. This caused
+problems when applying a patch. Now keep them in "unix" format and convert
+them to "dos" format only for the PC archives.
+
+Add ruby files to the dos source archive, they can be used by Make_mvc.mak.
+(Mirek Pruchnik)
+
+"cp -f" doesn't work on all systems. Change "cp -f" in the Makefile to "rm
+-f" and "cp".
+
+Didn't compile on a Compaq Tandem Himalaya OSS. (Michael A. Benzinger)
+
+The GTK file selection dialog didn't include the "Create Dir", "Delete File"
+and "Rename File" buttons.
+
+When doing ":browse source" the dialog has the title "Run Macro". Better
+would be "Source Vim script". (Yegappan Lakshmanan)
+
+Win32: Don't use the printer font as default for the font dialog.
+
+"make doslang" didn't work when configure didn't run (yet). Set $MAKEMO to
+"yes". (Mirek Pruchnik)
+
+The ToolBar TagJump item used "g]", which prompts for a selection even when
+there is only one matching tag. Use "g<C-]>" instead.
+
+The ming makefile for message translations didn't have the right list of
+files.
+
+The MS-Windows 3.1 version complains about LIBINTL.DLL not found. Compile
+this version without message translations.
+
+The Borland 5 makefile contained a check for Ruby which is no longer needed.
+The URLs for the TCL library was outdated. (Dan Sharp)
+
+The eviso.ps file was missing from the DOS runtime archive, it's needed for
+printing PostScript in the 32bit DOS version.
+
+In menu files ":scriptencoding" was used in a wrong way after patch 6.1a.032
+Now use ":scriptencoding" in the file where the translations are given. Do
+the same for all menus in latin1 encoding.
+
+Included a lot of fixes for the Macintosh, mostly to make it work with Carbon.
+(Dany StAmant, Axel Kielhorn, Benji Fisher)
+
+Improved the vimtutor shell script to use $TMPDIR when it exists, and delete
+the copied file when exiting in an abnormal way. (Max Ischenko)
+
+When "iconv.dll" can't be found, try using "libiconv.dll".
+
+When encryption is used, filtering with a shell command wasn't possible.
+
+DJGPP: ":cd c:" always failed, can't get permissions for "c:".
+Win32: ":cd c:/" failed if the previous current directory on c: had become
+invalid.
+
+DJGPP: Shift-Del and Del both produce \316\123. Default mapping for Del is
+wrong. Disabled it.
+
+Dependencies on header files in MingW makefile was wrong.
+
+Win32: Don't use ACL stuff for MSVC 4.2, it's not supported. (Walter Briscoe)
+
+Win32 with Borland: bcc.cfg was caching the value for $(BOR), but providing a
+different argument to make didn't regenerate it.
+
+Win32 with MSVC: Make_ivc.mak generates a new if_ole.h in a different
+directory, the if_ole.h in the src directory may be used instead. Delete the
+distributed file.
+
+When a window is vertically split and then ":ball" is used, the window layout
+is messed up, can cause a crash. (Muraoka Taro)
+
+When 'insertmode' is set, using File/New menu and then double clicking, "i" is
+soon inserted. (Merlin Hansen)
+
+When Select mode is active and using the Buffers menu to switch to another
+buffer, an old selection comes back. Reset VIsual_reselect for a ":buffer"
+command.
+
+When Select mode is active and 'insertmode' is set, using the Buffers menu to
+switch to another buffer, did not return to Insert mode. Make sure
+"restart_edit" is set.
+
+When double clicking on the first character of a word while 'selection' is
+"exclusive" didn't select that word.
+
+
+Patch 6.0.001
+Problem: Loading the sh.vim syntax file causes error messages . (Corinna
+ Vinschen)
+Solution: Add an "if". (Charles Campbell)
+Files: runtime/syntax/sh.vim
+
+Patch 6.0.002
+Problem: Using a '@' item in 'viminfo' doesn't work. (Marko Leipert)
+Solution: Add '@' to the list of accepted items.
+Files: src/option.c
+
+Patch 6.0.003
+Problem: The configure check for ACLs on AIX doesn't work.
+Solution: Fix the test program so that it compiles. (Tomas Ogren)
+Files: src/configure.in, src/auto/configure
+
+Patch 6.0.004
+Problem: The find/replace dialog doesn't reuse a previous argument
+ properly.
+Solution: After removing a "\V" terminate the string. (Zwane Mwaikambo)
+Files: src/gui.c
+
+Patch 6.0.005
+Problem: In Insert mode, "CTRL-O :ls" has a delay before redrawing.
+Solution: Don't delay just after wait_return() was called. Added the
+ did_wait_return flag.
+Files: src/globals.h, src/message.c, src/normal.c, src/screen.c
+
+Patch 6.0.006
+Problem: With a vertical split, 'number' set and 'scrolloff' non-zero,
+ making the window width very small causes a crash. (Niklas
+ Lindstrom)
+Solution: Check for a zero width.
+Files: src/move.c
+
+Patch 6.0.007
+Problem: When setting 'filetype' while there is no FileType autocommand, a
+ following ":setfiletype" would set 'filetype' again. (Kobus
+ Retief)
+Solution: Set did_filetype always when 'filetype' has been set.
+Files: src/option.c
+
+Patch 6.0.008
+Problem: 'imdisable' is missing from the options window. (Michael Naumann)
+Solution: Add an entry for it.
+Files: runtime/optwin.vim
+
+Patch 6.0.009
+Problem: Nextstep doesn't have S_ISBLK. (John Beppu)
+Solution: Define S_ISBLK using S_IFBLK.
+Files: src/os_unix.h
+
+Patch 6.0.010
+Problem: Using "gf" on a file name starting with "./" or "../" in a buffer
+ without a name causes a crash. (Roy Lewis)
+Solution: Check for a NULL file name.
+Files: src/misc2.c
+
+Patch 6.0.011
+Problem: Python: After replacing or deleting lines get an ml_get error.
+ (Leo Lipelis)
+Solution: Adjust the cursor position for deleted or added lines.
+Files: src/if_python.c
+
+Patch 6.0.012
+Problem: Polish translations contain printf format errors, this can result
+ in a crash when using one of them.
+Solution: Fix for translated messages. (Michal Politowski)
+Files: src/po/pl.po
+
+Patch 6.0.013
+Problem: Using ":silent! cmd" still gives some error messages, like for an
+ invalid range. (Salman Halim)
+Solution: Reset emsg_silent after calling emsg() in do_one_cmd().
+Files: src/ex_docmd.c
+
+Patch 6.0.014
+Problem: When 'modifiable' is off and 'virtualedit' is "all", "rx" on a TAB
+ still changes the buffer. (Muraoka Taro)
+Solution: Check if saving the line for undo fails.
+Files: src/normal.c
+
+Patch 6.0.015
+Problem: When 'cpoptions' includes "S" and "filetype plugin on" has been
+ used, can get an error for deleting the b:did_ftplugin variable.
+ (Ralph Henderson)
+Solution: Only delete the variable when it exists.
+Files: runtime/ftplugin.vim
+
+Patch 6.0.016
+Problem: bufnr(), bufname() and bufwinnr() don't find unlisted buffers when
+ the argument is a string. (Hari Krishna Dara)
+ Also for setbufvar() and getbufvar().
+Solution: Also find unlisted buffers.
+Files: src/eval.c
+
+Patch 6.0.017
+Problem: When 'ttybuiltin' is set and a builtin termcap entry defines t_Co
+ and the external one doesn't, it gets reset to empty. (David
+ Harrison)
+Solution: Only set t_Co when it wasn't set yet.
+Files: src/term.c
+
+Patch 6.0.018
+Problem: Initializing 'encoding' may cause a crash when setlocale() is not
+ used. (Dany St-Amant)
+Solution: Check for a NULL pointer.
+Files: src/mbyte.c
+
+Patch 6.0.019
+Problem: Converting a string with multi-byte characters to a printable
+ string, e.g., with strtrans(), may cause a crash. (Tomas Zellerin)
+Solution: Correctly compute the length of the result in transstr().
+Files: src/charset.c
+
+Patch 6.0.020
+Problem: When obtaining the value of a global variable internally, could
+ get the function-local value instead. Applies to using <Leader>
+ and <LocalLeader> and resetting highlighting in a function.
+Solution: Prepend "g:" to the variable name. (Aric Blumer)
+Files: src/syntax.c, src/term.c
+
+Patch 6.0.021
+Problem: The 'cscopepathcomp' option didn't work.
+Solution: Change USE_CSCOPE to FEAT_CSCOPE. (Mark Feng)
+Files: src/option.c
+
+Patch 6.0.022
+Problem: When using the 'langmap' option, the second character of a command
+ starting with "g" isn't adjusted.
+Solution: Apply 'langmap' to the second character. (Alex Kapranoff)
+Files: src/normal.c
+
+Patch 6.0.023
+Problem: Loading the lhaskell syntax doesn't work. (Thore B. Karlsen)
+Solution: Use ":runtime" instead of "source" to load haskell.vim.
+Files: runtime/syntax/lhaskell.vim
+
+Patch 6.0.024
+Problem: Using "CTRL-V u 9900" in Insert mode may cause a crash. (Noah
+ Levitt)
+Solution: Don't insert a NUL byte in the text, use a newline.
+Files: src/misc1.c
+
+Patch 6.0.025
+Problem: The pattern "\vx(.|$)" doesn't match "x" at the end of a line.
+ (Preben Peppe Guldberg)
+Solution: Always see a "$" as end-of-line after "\v". Do the same for "^".
+Files: src/regexp.c
+
+Patch 6.0.026
+Problem: GTK: When using arrow keys to navigate through the menus, the
+ separators are selected.
+Solution: Set the separators "insensitive". (Pavel Kankovsky)
+Files: src/gui_gtk.c, src/gui_gtk_x11.c
+
+Patch 6.0.027
+Problem: VMS: Printing doesn't work, the file is deleted too quickly.
+ No longer need the VMS specific printing menu.
+ gethostname() is not available with VAXC.
+ The makefile was lacking selection of the tiny-huge feature set.
+Solution: Adjust the 'printexpr' option default. Fix the other problems and
+ update the documentation. (Zoltan Arpadffy)
+Files: runtime/doc/os_vms.txt, runtime/menu.vim, src/INSTALLvms.txt,
+ src/Make_vms.mms, src/option.c, src/os_unix.c, src/os_vms_conf.h
+
+Patch 6.0.028
+Problem: Can't compile without +virtualedit and with +visualextra. (Geza
+ Lakner)
+Solution: Add an #ifdef for +virtualedit.
+Files: src/ops.c
+
+Patch 6.0.029
+Problem: When making a change in line 1, then in line 2 and then deleting
+ line 1, undo info could be wrong. Only when the changes are undone
+ at once. (Gerhard Hochholzer)
+Solution: When not saving a line for undo because it was already done
+ before, remember for which entry the last line must be computed.
+ Added ue_getbot_entry pointer for this. When the number of lines
+ changes, adjust the position of newer undo entries.
+Files: src/structs.h, src/undo.c
+
+Patch 6.0.030
+Problem: Using ":source! file" doesn't work inside a loop or after
+ ":argdo". (Pavol Juhas)
+Solution: Execute the commands in the file right away, do not let the main
+ loop do it.
+Files: src/ex_cmds2.c, src/ex_docmd.c, src/getchar.c, src/globals.h,
+ src/proto/ex_docmd.pro, src/proto/getchar.pro
+
+Patch 6.0.031
+Problem: Nextstep doesn't have setenv() or putenv(). (John Beppu)
+Solution: Move putenv() from pty.c to misc2.c
+Files: src/misc2.c, src/pty.c
+
+Patch 6.0.032
+Problem: When changing a setting that affects all folds, they are not
+ displayed immediately.
+Solution: Set the redraw flag in foldUpdateAll().
+Files: src/fold.c
+
+Patch 6.0.033
+Problem: Using 'wildmenu' on MS-Windows, file names that include a space
+ are only displayed starting with that space. (Xie Yuheng)
+Solution: Don't recognize a backslash before a space as a path separator.
+Files: src/screen.c
+
+Patch 6.0.034
+Problem: Calling searchpair() with three arguments could result in a crash
+ or strange error message. (Kalle Bjorklid)
+Solution: Don't use the fifth argument when there is no fourth argument.
+Files: src/eval.c
+
+Patch 6.0.035
+Problem: The menu item Edit/Global_Settings/Toggle_Toolbar doesn't work
+ when 'ignorecase' is set. (Allen Castaban)
+Solution: Always match case when checking if a flag is already present in
+ 'guioptions'.
+Files: runtime/menu.vim
+
+Patch 6.0.036
+Problem: OS/2, MS-DOS and MS-Windows: Using a path that starts with a
+ slash in 'tags' doesn't work as expected. (Mathias Koehrer
+Solution: Only use the drive, not the whole path to the current directory.
+ Also make it work for "c:dir/file".
+Files: src/misc2.c
+
+Patch 6.0.037
+Problem: When the user has set "did_install_syntax_menu" to avoid the
+ default Syntax menu it still appears. (Virgilio)
+Solution: Don't add the three default items when "did_install_syntax_menu"
+ is set.
+Files: runtime/menu.vim
+
+Patch 6.0.038
+Problem: When 'selection' is "exclusive", deleting a block of text at the
+ end of a line can leave the cursor beyond the end of the line.
+Solution: Correct the cursor position.
+Files: src/ops.c
+
+Patch 6.0.039
+Problem: "gP" leaves the cursor in the wrong position when 'virtualedit' is
+ used. Using "c" in blockwise Visual mode leaves the cursor in a
+ strange position.
+Solution: For "gP" reset the "coladd" field for the '] mark. For "c" leave
+ the cursor on the last inserted character.
+Files: src/ops.c
+
+Patch 6.0.040
+Problem: When 'fileencoding' is invalid and writing fails because of
+ this, the original file is gone. (Eric Carlier)
+Solution: Restore the original file from the backup.
+Files: src/fileio.c
+
+Patch 6.0.041
+Problem: Using ":language messages en" when LC_MESSAGES is undefined
+ results in setting LC_CTYPE. (Eric Carlier)
+Solution: Set $LC_MESSAGES instead.
+Files: src/ex_cmds2.c
+
+Patch 6.0.042
+Problem: ":mksession" can't handle file names with a space.
+Solution: Escape special characters in file names with a backslash.
+Files: src/ex_docmd.c
+
+Patch 6.0.043
+Problem: Patch 6.0.041 was wrong.
+Solution: Use mch_getenv() instead of vim_getenv().
+Files: src/ex_cmds2.c
+
+Patch 6.0.044
+Problem: Using a "containedin" list for a syntax item doesn't work for an
+ item that doesn't have a "contains" argument. Also, "containedin"
+ doesn't ignore a transparent item. (Timo Frenay)
+Solution: When there is a "containedin" argument somewhere, always check for
+ contained items. Don't check for the transparent item but the
+ item it's contained in.
+Files: src/structs.h, src/syntax.c
+
+Patch 6.0.045
+Problem: After creating a fold with a Visual selection, another window
+ with the same buffer still has inverted text. (Sami Salonen)
+Solution: Redraw the inverted text.
+Files: src/normal.c
+
+Patch 6.0.046
+Problem: When getrlimit() returns an 8 byte number the check for running
+ out of stack may fail. (Anthony Meijer)
+Solution: Skip the stack check if the limit doesn't fit in a long.
+Files: src/auto/configure, src/config.h.in, src/configure.in,
+ src/os_unix.c
+
+Patch 6.0.047
+Problem: Using a regexp with "\(\)" inside a "\%[]" item causes a crash.
+ (Samuel Lacas)
+Solution: Don't allow nested atoms inside "\%[]".
+Files: src/regexp.c
+
+Patch 6.0.048
+Problem: Win32: In the console the mouse doesn't always work correctly.
+ Sometimes after getting focus a mouse movement is interpreted like
+ a button click.
+Solution: Use a different function to obtain the number of mouse buttons.
+ Avoid recognizing a button press from undefined bits. (Vince Negri)
+Files: src/os_win32.c
+
+Patch 6.0.049
+Problem: When using evim the intro screen is misleading. (Adrian Nagle)
+Solution: Mention whether 'insertmode' is set and the menus to be used.
+Files: runtime/menu.vim, src/version.c
+
+Patch 6.0.050
+Problem: UTF-8: "viw" doesn't include non-ASCII characters before the
+ cursor. (Bertilo Wennergren)
+Solution: Use dec_cursor() instead of decrementing the column number.
+Files: src/search.c
+
+Patch 6.0.051
+Problem: UTF-8: Using CTRL-R on the command line doesn't insert composing
+ characters. (Ron Aaron)
+Solution: Also include the composing characters and fix redrawing them.
+Files: src/ex_getln.c, src/ops.c
+
+Patch 6.0.052
+Problem: The check for rlim_t in patch 6.0.046 does not work on some
+ systems. (Zdenek Sekera)
+Solution: Also look in sys/resource.h for rlim_t.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.0.053 (extra)
+Problem: Various problems with QNX.
+Solution: Minor fix for configure. Switch on terminal clipboard support in
+ main.c. Fix "pterm" mouse support. os_qnx.c didn't build without
+ photon. (Julian Kinraid)
+Files: src/auto/configure, src/configure.in, src/gui_photon.c,
+ src/main.c, src/misc2.c, src/option.h, src/os_qnx.c, src/os_qnx.h,
+ src/syntax.c
+
+Patch 6.0.054
+Problem: When using mswin.vim, CTRL-V pastes a block of text like it is
+ normal text. Using CTRL-V in blockwise Visual mode leaves "x"
+ characters behind.
+Solution: Make CTRL-V work as it should. Do the same for the Paste menu
+ entries.
+Files: runtime/menu.vim, runtime/mswin.vim
+
+Patch 6.0.055
+Problem: GTK: The selection isn't copied the first time.
+Solution: Own the selection at the right moment.
+Files: src/gui_gtk_x11.c
+
+Patch 6.0.056
+Problem: Using "CTRL-O cw" in Insert mode results in a nested Insert mode.
+ <Esc> doesn't leave Insert mode then.
+Solution: Only use nested Insert mode when 'insertmode' is set or when a
+ mapping is used.
+Files: src/normal.c
+
+Patch 6.0.057
+Problem: Using ":wincmd g}" in a function doesn't work. (Gary Holloway)
+Solution: Execute the command directly, instead of putting it in the
+ typeahead buffer.
+Files: src/normal.c, src/proto/normal.pro, src/window.c
+
+Patch 6.0.058
+Problem: When a Cursorhold autocommand moved the cursor, the ruler wasn't
+ updated. (Bohdan Vlasyuk)
+Solution: Update the ruler after executing the autocommands.
+Files: src/gui.c
+
+Patch 6.0.059
+Problem: Highlighting for 'hlsearch' isn't visible in lines that are
+ highlighted for diff highlighting. (Gary Holloway)
+Solution: Let 'hlsearch' highlighting overrule diff highlighting.
+Files: src/screen.c
+
+Patch 6.0.060
+Problem: Motif: When the tooltip is to be popped up, Vim crashes.
+ (Gary Holloway)
+Solution: Check for a NULL return value from gui_motif_fontset2fontlist().
+Files: src/gui_beval.c
+
+Patch 6.0.061
+Problem: The toolbar buttons to load and save a session do not correctly
+ use v:this_session.
+Solution: Check for v:this_session to be empty instead of existing.
+Files: runtime/menu.vim
+
+Patch 6.0.062
+Problem: Crash when 'verbose' is > 3 and using ":shell". (Yegappan
+ Lakshmanan)
+Solution: Avoid giving a NULL pointer to printf(). Also output a newline
+ and switch the cursor on.
+Files: src/misc2.c
+
+Patch 6.0.063
+Problem: When 'cpoptions' includes "$", using "cw" to type a ')' on top of
+ the "$" doesn't update syntax highlighting after it.
+Solution: Stop displaying the "$" when typing a ')' in its position.
+Files: src/search.c
+
+Patch 6.0.064 (extra)
+Problem: The NSIS install script doesn't work with newer versions of NSIS.
+ The diff feature doesn't work when there isn't a good diff.exe on
+ the system.
+Solution: Replace the GetParentDir instruction by a user function.
+ Fix a few cosmetic problems. Use defined constants for the
+ version number, so that it's defined in one place only.
+ Only accept the install directory when it ends in "vim".
+ (Eduardo Fernandez)
+ Add a diff.exe and use it from the default _vimrc.
+Files: nsis/gvim.nsi, nsis/README.txt, src/dosinst.c
+
+Patch 6.0.065
+Problem: When using ":normal" in 'indentexpr' it may use redo characters
+ before its argument. (Neil Bird)
+Solution: Save and restore the stuff buffer in ex_normal().
+Files: src/ex_docmd.c, src/getchar.c, src/globals.h, src/structs.h
+
+Patch 6.0.066
+Problem: Sometimes undo for one command is split into two undo actions.
+ (Halim Salman)
+Solution: Don't set the undo-synced flag when reusing a line that was
+ already saved for undo.
+Files: src/undo.c
+
+Patch 6.0.067
+Problem: if_xcmdsrv.c doesn't compile on systems where fd_set isn't defined
+ in the usual header file (e.g., AIX). (Mark Waggoner)
+Solution: Include sys/select.h in if_xcmdsrv.c for systems that have it.
+Files: src/if_xcmdsrv.c
+
+Patch 6.0.068
+Problem: When formatting a Visually selected area with "gq" and the number
+ of lines increases the last line may not be redrawn correctly.
+ (Yegappan Lakshmanan)
+Solution: Correct the area to be redrawn for inserted/deleted lines.
+Files: src/ops.c
+
+Patch 6.0.069
+Problem: Using "K" on a word that includes a "!" causes a "No previous
+ command" error, because the "!" is expanded. (Craig Jeffries)
+Solution: Put a backslash before the "!".
+Files: src/normal.c
+
+Patch 6.0.070
+Problem: Win32: The error message for a failed dynamic linking of a Perl,
+ Ruby, Tcl and Python library is unclear about what went wrong.
+Solution: Give the name of the library or function that could not be loaded.
+ Also for the iconv and gettext libraries when 'verbose' is set.
+Files: src/eval.c, src/if_perl.xs, src/if_python.c, src/if_ruby.c,
+ src/if_tcl.c, src/mbyte.c, src/os_win32.c, src/proto/if_perl.pro,
+ src/proto/if_python.pro, src/proto/if_ruby.pro,
+ src/proto/if_tcl.pro, src/proto/mbyte.pro
+
+Patch 6.0.071
+Problem: The "iris-ansi" builtin termcap isn't very good.
+Solution: Fix the wrong entries. (David Harrison)
+Files: src/term.c
+
+Patch 6.0.072
+Problem: When 'lazyredraw' is set, a mapping that stops Visual mode, moves
+ the cursor and starts Visual mode again causes a redraw problem.
+ (Brian Silverman)
+Solution: Redraw both the old and the new Visual area when necessary.
+Files: src/normal.c, src/screen.c
+
+Patch 6.0.073 (extra)
+Problem: DJGPP: When using CTRL-Z to start a shell, the prompt is halfway
+ the text. (Volker Kiefel)
+Solution: Position the system cursor before starting the shell.
+Files: src/os_msdos.c
+
+Patch 6.0.074
+Problem: When using "&" in a substitute string a multi-byte character with
+ a trailbyte 0x5c is not handled correctly.
+Solution: Recognize multi-byte characters inside the "&" part. (Muraoka Taro)
+Files: src/regexp.c
+
+Patch 6.0.075
+Problem: When closing a horizontally split window while 'eadirection' is
+ "hor" another horizontally split window is still resized. (Aron
+ Griffis)
+Solution: Only resize windows in the same top frame as the window that is
+ split or closed.
+Files: src/main.c, src/proto/window.pro, src/window.c
+
+Patch 6.0.076
+Problem: Warning for wrong pointer type when compiling.
+Solution: Use char instead of char_u pointer.
+Files: src/version.c
+
+Patch 6.0.077
+Problem: Patch 6.0.075 was incomplete.
+Solution: Fix another call to win_equal().
+Files: src/option.c
+
+Patch 6.0.078
+Problem: Using "daw" at the end of a line on a single-character word didn't
+ include the white space before it. At the end of the file it
+ didn't work at all. (Gavin Sinclair)
+Solution: Include the white space before the word.
+Files: src/search.c
+
+Patch 6.0.079
+Problem: When "W" is in 'cpoptions' and 'backupcopy' is "no" or "auto", can
+ still overwrite a read-only file, because it's renamed. (Gary
+ Holloway)
+Solution: Add a check for a read-only file before renaming the file to
+ become the backup.
+Files: src/fileio.c
+
+Patch 6.0.080
+Problem: When using a session file that has the same file in two windows,
+ the fileinfo() call in do_ecmd() causes a scroll and a hit-enter
+ prompt. (Robert Webb)
+Solution: Don't scroll this message when 'shortmess' contains 'O'.
+Files: src/ex_cmds.c
+
+Patch 6.0.081
+Problem: After using ":saveas" the new buffer name is added to the Buffers
+ menu with a wrong number. (Chauk-Mean Proum)
+Solution: Trigger BufFilePre and BufFilePost events for the renamed buffer
+ and BufAdd for the old name (which is with a new buffer).
+Files: src/ex_cmds.c
+
+Patch 6.0.082
+Problem: When swapping screens in an xterm and there is an (error) message
+ from the vimrc script, the shell prompt is after the message.
+Solution: Output a newline when there was output on the alternate screen.
+ Also when starting the GUI.
+Files: src/main.c
+
+Patch 6.0.083
+Problem: GTK: When compiled without menu support the buttons in a dialog
+ don't have any text. (Erik Edelmann)
+Solution: Add the text also when GTK_USE_ACCEL isn't defined. And define
+ GTK_USE_ACCEL also when not using menus.
+Files: src/gui_gtk.c
+
+Patch 6.0.084
+Problem: UTF-8: a "r" command with an argument that is a keymap for a
+ character with a composing character can't be repeated with ".".
+ (Raphael Finkel)
+Solution: Add the composing characters to the redo buffer.
+Files: src/normal.c
+
+Patch 6.0.085
+Problem: When 'mousefocus' is set, using "s" to go to Insert mode and then
+ moving the mouse pointer to another window stops Insert mode,
+ while this doesn't happen with "a" or "i". (Robert Webb)
+Solution: Reset finish_op before calling edit().
+Files: src/normal.c
+
+Patch 6.0.086
+Problem: When using "gu" the message says "~ed".
+Solution: Make the message say "changed".
+Files: src/ops.c
+
+Patch 6.0.087 (lang)
+Problem: Message translations are incorrect, which may cause a crash.
+ (Peter Figura)
+ The Turkish translations needed more work and the maintainer
+ didn't have time.
+Solution: Fix order of printf arguments. Remove %2$d constructs.
+ Add "-v" to msgfmt to get a warning for wrong translations.
+ Don't install the Turkish translations for now.
+ Update a few more translations.
+Files: src/po/Makefile, src/po/af.po, src/po/cs.po, src/po/cs.cp1250.po,
+ src/po/de.po, src/po/es.po, src/po/fr.po, src/po/it.po,
+ src/po/ja.po, src/po/ja.sjis.po, src/po/ko.po, src/po/pl.po,
+ src/po/sk.po, src/po/uk.po, src/po/zh_CN.UTF-8.po,
+ src/po/zh_CN.cp936.po, src/po/zh_CN.po, src/po/zh_TW.po
+
+Patch 6.0.088
+Problem: "." doesn't work after using "rx" in Visual mode. (Charles
+ Campbell)
+Solution: Also store the replacement character in the redo buffer.
+Files: src/normal.c
+
+Patch 6.0.089
+Problem: In a C file, using "==" to align a line starting with "* " after
+ a line with "* -" indents one space too few. (Piet Delport)
+Solution: Align with the previous line if the comment-start-string matches
+ there.
+Files: src/misc1.c
+
+Patch 6.0.090
+Problem: When a wrapping line does not fit in a window and 'scrolloff' is
+ bigger than half the window height, moving the cursor left or
+ right causes the screen to flash badly. (Lubomir Host)
+Solution: When there is not enough room to show 'scrolloff' screen lines and
+ near the end of the line, show the end of the line.
+Files: src/move.c
+
+Patch 6.0.091
+Problem: Using CTRL-O in Insert mode, while 'virtualedit' is "all" and the
+ cursor is after the end-of-line, moves the cursor left. (Yegappan
+ Lakshmanan)
+Solution: Keep the cursor in the same position.
+Files: src/edit.c
+
+Patch 6.0.092
+Problem: The explorer plugin doesn't ignore case of 'suffixes' on
+ MS-Windows. (Mike Williams)
+Solution: Match or ignore case as appropriate for the OS.
+Files: runtime/plugin/explorer.vim
+
+Patch 6.0.093
+Problem: When the Tcl library couldn't be loaded dynamically, get an error
+ message when closing a buffer or window. (Muraoka Taro)
+Solution: Only free structures if already using the Tcl interpreter.
+Files: src/if_tcl.c
+
+Patch 6.0.094
+Problem: Athena: When clicking in the horizontal scrollbar Vim crashes.
+ (Paul Ackersviller)
+Solution: Use the thumb size instead of the window pointer of the scrollbar
+ (which is NULL). (David Harrison)
+ Also avoid that scrolling goes the wrong way in a narrow window.
+Files: src/gui_athena.c
+
+Patch 6.0.095
+Problem: Perl: Deleting lines may leave the cursor beyond the end of the
+ file.
+Solution: Check the cursor position after deleting a line. (Serguei)
+Files: src/if_perl.xs
+
+Patch 6.0.096
+Problem: When ":saveas fname" fails because the file already exists, the
+ file name is changed anyway and a following ":w" will overwrite
+ the file. (Eric Carlier)
+Solution: Don't change the file name if the file already exists.
+Files: src/ex_cmds.c
+
+Patch 6.0.097
+Problem: Re-indenting in Insert mode with CTRL-F may cause a crash with a
+ multi-byte encoding.
+Solution: Avoid using a character before the start of a line. (Sergey
+ Vlasov)
+Files: src/edit.c
+
+Patch 6.0.098
+Problem: GTK: When using Gnome the "Search" and "Search and Replace" dialog
+ boxes are not translated.
+Solution: Define ENABLE_NLS before including gnome.h. (Eduardo Fernandez)
+Files: src/gui_gtk.c, src/gui_gtk_x11.c
+
+Patch 6.0.099
+Problem: Cygwin: When running Vi compatible MS-DOS line endings cause
+ trouble.
+Solution: Make the default for 'fileformats' "unix,dos" in Vi compatible
+ mode. (Michael Schaap)
+Files: src/option.h
+
+Patch 6.0.100
+Problem: ":badd +0 test%file" causes a crash.
+Solution: Take into account that the "+0" is NUL terminated when allocating
+ room for replacing the "%".
+Files: src/ex_docmd.c
+
+Patch 6.0.101
+Problem: ":mksession" doesn't restore editing a file that has a '#' or '%'
+ in its name. (Wolfgang Blankenburg)
+Solution: Put a backslash before the '#' and '%'.
+Files: src/ex_docmd.c
+
+Patch 6.0.102
+Problem: When changing folds the cursor may appear halfway a closed fold.
+ (Nam SungHyun)
+Solution: Set w_cline_folded correctly. (Yasuhiro Matsumoto)
+Files: src/move.c
+
+Patch 6.0.103
+Problem: When using 'scrollbind' a large value of 'scrolloff' will make the
+ scroll binding stop near the end of the file. (Coen Engelbarts)
+Solution: Don't use 'scrolloff' when limiting the topline for scroll
+ binding. (Dany StAmant)
+Files: src/normal.c
+
+Patch 6.0.104
+Problem: Multi-byte: When '$' is in 'cpoptions', typing a double-wide
+ character that overwrites the left halve of an old double-wide
+ character causes a redraw problem and the cursor stops blinking.
+Solution: Clear the right half of the old character. (Yasuhiro Matsumoto)
+Files: src/edit.c, src/screen.c
+
+Patch 6.0.105
+Problem: Multi-byte: In a window of one column wide, with syntax
+ highlighting enabled a crash might happen.
+Solution: Skip getting the syntax attribute when the character doesn't fit
+ anyway. (Yasuhiro Matsumoto)
+Files: src/screen.c
+
+Patch 6.0.106 (extra)
+Problem: Win32: When the printer font is wrong, there is no error message.
+Solution: Give an appropriate error message. (Yasuhiro Matsumoto)
+Files: src/os_mswin.c
+
+Patch 6.0.107 (extra)
+Problem: VisVim: When editing another file, a modified file may be written
+ unexpectedly and without warning.
+Solution: Split the window if a file was modified.
+Files: VisVim/Commands.cpp
+
+Patch 6.0.108
+Problem: When using folding could try displaying line zero, resulting in an
+ error for a NULL pointer.
+Solution: Stop decrementing w_topline when the first line of a window is in
+ a closed fold.
+Files: src/window.c
+
+Patch 6.0.109
+Problem: XIM: When the input method is enabled, repeating an insertion with
+ "." disables it. (Marcel Svitalsky)
+Solution: Don't store the input method status when a command comes from the
+ stuff buffer.
+Files: src/ui.c
+
+Patch 6.0.110
+Problem: Using undo after executing "OxjAxkdd" from a register in
+ an empty buffer gives an error message. (Gerhard Hochholzer)
+Solution: Don't adjust the bottom line number of an undo block when it's
+ zero. Add a test for this problem.
+Files: src/undo.c, src/testdir/test20.in, src/testdir/test20.ok
+
+Patch 6.0.111
+Problem: The virtcol() function doesn't take care of 'virtualedit'.
+Solution: Add the column offset when needed. (Yegappan Lakshmanan)
+Files: src/eval.c
+
+Patch 6.0.112
+Problem: The explorer plugin doesn't sort directories with a space or
+ special character after a directory with a shorter name.
+Solution: Ignore the trailing slash when comparing directory names. (Mike
+ Williams)
+Files: runtime/plugin/explorer.vim
+
+Patch 6.0.113
+Problem: ":edit ~/fname" doesn't work if $HOME includes a space. Also,
+ expanding wildcards with the shell may fail. (John Daniel)
+Solution: Escape spaces with a backslash when needed.
+Files: src/ex_docmd.c, src/misc1.c, src/proto/misc1.pro, src/os_unix.c
+
+Patch 6.0.114
+Problem: Using ":p" with fnamemodify() didn't expand "~/" or "~user/" to a
+ full path. For Win32 the current directory was prepended.
+ (Michael Geddes)
+Solution: Expand the home directory.
+Files: src/eval.c
+
+Patch 6.0.115 (extra)
+Problem: Win32: When using a dialog with a textfield it cannot scroll the
+ text.
+Solution: Add ES_AUTOHSCROLL to the textfield style. (Pedro Gomes)
+Files: src/gui_w32.c
+
+Patch 6.0.116 (extra)
+Problem: MS-Windows NT/2000/XP: filewritable() doesn't work correctly for
+ filesystems that use ACLs.
+Solution: Use ACL functions to check if a file is writable. (Mike Williams)
+Files: src/eval.c, src/macros.h, src/os_win32.c, src/proto/os_win32.pro
+
+Patch 6.0.117 (extra)
+Problem: Win32: when disabling the menu, "set lines=999" doesn't use all
+ the available screen space.
+Solution: Don't subtract the fixed caption height but the real menu height
+ from the available screen space. Also: Avoid recursion in
+ gui_mswin_get_menu_height().
+Files: src/gui_w32.c, src/gui_w48.c
+
+Patch 6.0.118
+Problem: When $TMPDIR is a relative path, the temp directory is missing a
+ trailing slash and isn't deleted when Vim exits. (Peter Holm)
+Solution: Add the slash after expanding the directory to an absolute path.
+Files: src/fileio.c
+
+Patch 6.0.119 (depends on patch 6.0.116)
+Problem: VMS: filewritable() doesn't work properly.
+Solution: Use the same method as for Unix. (Zoltan Arpadffy)
+Files: src/eval.c
+
+Patch 6.0.120
+Problem: The conversion to html isn't compatible with XHTML.
+Solution: Quote the values. (Jess Thrysoee)
+Files: runtime/syntax/2html.vim
+
+Patch 6.0.121 (extra) (depends on patch 6.0.116)
+Problem: Win32: After patch 6.0.116 Vim doesn't compile with mingw32.
+Solution: Add an #ifdef HAVE_ACL.
+Files: src/os_win32.c
+
+Patch 6.0.122 (extra)
+Problem: Win16: Same resize problems as patch 6.0.117 fixed for Win32. And
+ dialog textfield problem from patch 6.0.115.
+Solution: Set old_menu_height only when used. Add ES_AUTOHSCROLL flag.
+ (Vince Negri)
+Files: src/gui_w16.c
+
+Patch 6.0.123 (depends on patch 6.0.119)
+Problem: Win16: Compilation problems.
+Solution: Move "&&" to other lines. (Vince Negri)
+Files: src/eval.c
+
+Patch 6.0.124
+Problem: When using a ":substitute" command that starts with "\="
+ (evaluated as an expression), "~" was still replaced with the
+ previous substitute string.
+Solution: Skip the replacement when the substitute string starts with "\=".
+ Also adjust the documentation about doubling backslashes.
+Files: src/ex_cmds.c, runtime/doc/change.txt
+
+Patch 6.0.125 (extra)
+Problem: Win32: When using the multi_byte_ime feature pressing the shift
+ key would be handled as if a character was entered, thus mappings
+ with a shifted key didn't work. (Charles Campbell)
+Solution: Ignore pressing the shift, control and alt keys.
+Files: src/os_win32.c
+
+Patch 6.0.126
+Problem: The python library was always statically linked.
+Solution: Link the python library dynamically. (Matthias Klose)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.0.127
+Problem: When using a terminal that swaps screens and the Normal background
+ color has a different background, using an external command may
+ cause the color of the wrong screen to be changed. (Mark Waggoner)
+Solution: Don't call screen_stop_highlight() in stoptermcap().
+Files: src/term.c
+
+Patch 6.0.128
+Problem: When moving a vertically split window to the far left or right,
+ the scrollbars are not adjusted. (Scott E Lee) When 'mousefocus'
+ is set the mouse pointer wasn't adjusted.
+Solution: Adjust the scrollbars and the mouse pointer.
+Files: src/window.c
+
+Patch 6.0.129
+Problem: When using a very long file name, ":ls" (repeated a few times)
+ causes a crash. Test with "vim `perl -e 'print "A"x1000'`".
+ (Tejeda)
+Solution: Terminate a string before getting its length in buflist_list().
+Files: src/buffer.c
+
+Patch 6.0.130
+Problem: When using ":cprev" while the error window is open, and the new
+ line at the top wraps, the window isn't correctly drawn.
+ (Yegappan Lakshmanan)
+Solution: When redrawing the topline don't scroll twice.
+Files: src/screen.c
+
+Patch 6.0.131
+Problem: When using bufname() and there are two matches for listed buffers
+ and one match for an unlisted buffer, the unlisted buffer is used.
+ (Aric Blumer)
+Solution: When there is a match with a listed buffer, don't check for
+ unlisted buffers.
+Files: src/buffer.c
+
+Patch 6.0.132
+Problem: When setting 'iminsert' in the vimrc and using an xterm with two
+ screens the ruler is drawn in the wrong screen. (Igor Goldenberg)
+Solution: Only draw the ruler when using the right screen.
+Files: src/option.c
+
+Patch 6.0.133
+Problem: When opening another buffer while 'keymap' is set and 'iminsert'
+ is zero, 'iminsert' is set to one unexpectedly. (Igor Goldenberg)
+Solution: Don't set 'iminsert' as a side effect of defining a ":lmap"
+ mapping. Only do that when 'keymap' is set.
+Files: src/getchar.c, src/option.c
+
+Patch 6.0.134
+Problem: When completing ":set tags=" a path with an embedded space causes
+ the completion to stop. (Sektor van Skijlen)
+Solution: Escape spaces with backslashes, like for ":set path=". Also take
+ backslashes into account when searching for the start of the path
+ to complete (e.g., for 'backupdir' and 'cscopeprg').
+Files: src/ex_docmd.c, src/ex_getln.c, src/option.c, src/structs.h
+
+Patch 6.0.135
+Problem: Menus that are not supposed to do anything used "<Nul>", which
+ still produced an error beep.
+ When CTRL-O is mapped for Insert mode, ":amenu" commands didn't
+ work in Insert mode.
+ Menu language falls back to English when $LANG ends in "@euro".
+Solution: Use "<Nop>" for a menu item that doesn't do anything, just like
+ mappings.
+ Use ":anoremenu" instead of ":amenu".
+ Ignore "@euro" in the locale name.
+Files: runtime/makemenu.vim, runtime/menu.vim, src/menu.c
+
+Patch 6.0.136
+Problem: When completing in Insert mode, a mapping could be unexpectedly
+ applied.
+Solution: Don't use mappings when checking for a typed character.
+Files: src/edit.c
+
+Patch 6.0.137
+Problem: GUI: When using the find or find/replace dialog from Insert mode,
+ the input mode is stopped.
+Solution: Don't use the input method status when the main window doesn't
+ have focus.
+Files: src/ui.c
+
+Patch 6.0.138
+Problem: GUI: When using the find or find/replace dialog from Insert mode,
+ the text is inserted when CTRL-O is mapped. (Andre Pang)
+ When opening the dialog again, a whole word search isn't
+ recognized.
+ When doing "replace all" a whole word search was never done.
+Solution: Don't put a search or replace command in the input buffer,
+ execute it directly.
+ Recognize "\<" and "\>" after removing "\V".
+ Add "\<" and "\>" also for "replace all".
+Files: src/gui.c
+
+Patch 6.0.139
+Problem: When stopping 'wildmenu' completion, the statusline of the
+ bottom-left vertically split window isn't redrawn. (Yegappan
+ Lakshmanan)
+Solution: Redraw all the bottom statuslines.
+Files: src/ex_getln.c, src/proto/screen.pro, src/screen.c
+
+Patch 6.0.140
+Problem: Memory allocated for local mappings and abbreviations is leaked
+ when the buffer is wiped out.
+Solution: Clear the local mappings when deleting a buffer.
+Files: src/buffer.c, src/getchar.c, src/proto/getchar.pro, src/vim.h
+
+Patch 6.0.141
+Problem: When using ":enew" in an empty buffer, some buffer-local things
+ are not cleared. b:keymap_name is not set.
+Solution: Clear user commands and mappings local to the buffer when re-using
+ the current buffer. Reload the keymap.
+Files: src/buffer.c
+
+Patch 6.0.142
+Problem: When Python is linked statically, loading dynamic extensions might
+ fail.
+Solution: Add an extra linking flag when needed. (Andrew Rodionoff)
+Files: src/configure.in, src/auto/configure
+
+Patch 6.0.143
+Problem: When a syntax item includes a line break in a pattern, the syntax
+ may not be updated properly when making a change.
+Solution: Add the "linebreaks" argument to ":syn sync".
+Files: runtime/doc/syntax.txt, src/screen.c, src/structs.h, src/syntax.c
+
+Patch 6.0.144
+Problem: After patch 6.0.088 redoing "veU" doesn't work.
+Solution: Don't add the "U" to the redo buffer, it will be used as an undo
+ command.
+Files: src/normal.c
+
+Patch 6.0.145
+Problem: When Vim can't read any input it might get stuck. When
+ redirecting stdin and stderr Vim would not read commands from a
+ file. (Servatius Brandt)
+Solution: When repeatedly trying to read a character when it's not possible,
+ exit Vim. When stdin and stderr are not a tty, still try reading
+ from them, but don't do a blocking wait.
+Files: src/ui.c
+
+Patch 6.0.146
+Problem: When 'statusline' contains "%{'-'}" this results in a zero.
+ (Milan Vancura)
+Solution: Don't handle numbers with a minus as a number, they were not
+ displayed anyway.
+Files: src/buffer.c
+
+Patch 6.0.147
+Problem: It's not easy to mark a Vim version as being modified. The new
+ license requires this.
+Solution: Add the --modified-by argument to configure and the MODIFIED_BY
+ define. I's used in the intro screen and the ":version" output.
+Files: src/auto/configure, src/configure.in, src/config.h.in,
+ src/feature.h, src/version.c
+
+Patch 6.0.148
+Problem: After "p" in an empty line, `[ goes to the second character.
+ (Kontra Gergely)
+Solution: Don't increment the column number in an empty line.
+Files: src/ops.c
+
+Patch 6.0.149
+Problem: The pattern "\(.\{-}\)*" causes a hang. When using a search
+ pattern that causes a stack overflow to be detected Vim could
+ still hang.
+Solution: Correctly report "operand could be empty" when using "\{-}".
+ Check for "out_of_stack" inside loops to avoid a hang.
+Files: src/regexp.c
+
+Patch 6.0.150
+Problem: When using a multi-byte encoding, patch 6.0.148 causes "p" to work
+ like "P". (Sung-Hyun Nam)
+Solution: Compute the byte length of a multi-byte character.
+Files: src/ops.c
+
+Patch 6.0.151
+Problem: Redrawing the status line and ruler can be wrong when it contains
+ multi-byte characters.
+Solution: Use character width and byte length correctly. (Yasuhiro Matsumoto)
+Files: src/screen.c
+
+Patch 6.0.152
+Problem: strtrans() could hang on an illegal UTF-8 byte sequence.
+Solution: Skip over illegal bytes. (Yasuhiro Matsumoto)
+Files: src/charset.c
+
+Patch 6.0.153
+Problem: When using (illegal) double-byte characters and Vim syntax
+ highlighting Vim can crash. (Yasuhiro Matsumoto)
+Solution: Increase a pointer over a character instead of a byte.
+Files: src/regexp.c
+
+Patch 6.0.154
+Problem: MS-DOS and MS-Windows: The menu entries for xxd don't work when
+ there is no xxd in the path.
+ When converting back from Hex the filetype may remain "xxd" if it
+ is not detected.
+Solution: When xxd is not in the path use the one in the runtime directory,
+ where the install program has put it.
+ Clear the 'filetype' option before detecting the new value.
+Files: runtime/menu.vim
+
+Patch 6.0.155
+Problem: Mac: compilation problems in ui.c after patch 6.0.145. (Axel
+ Kielhorn)
+Solution: Don't call mch_inchar() when NO_CONSOLE is defined.
+Files: src/ui.c
+
+Patch 6.0.156
+Problem: Starting Vim with the -b argument and two files, ":next" doesn't
+ set 'binary' in the second file, like Vim 5.7. (Norman Diamond)
+Solution: Set the global value for 'binary'.
+Files: src/option.c
+
+Patch 6.0.157
+Problem: When defining a user command with "-complete=dir" files will also
+ be expanded. Also, "-complete=mapping" doesn't appear to work.
+ (Michael Naumann)
+Solution: Use the expansion flags defined with the user command.
+ Handle expanding mappings specifically.
+Files: src/ex_docmd.c
+
+Patch 6.0.158
+Problem: When getting the warning for a file being changed outside of Vim
+ and reloading the file, the 'readonly' option is reset, even when
+ the permissions didn't change. (Marcel Svitalsky)
+Solution: Keep 'readonly' set when reloading a file and the permissions
+ didn't change.
+Files: src/fileio.c
+
+Patch 6.0.159
+Problem: Wildcard expansion for ":emenu" also shows separators.
+Solution: Skip menu separators for ":emenu", ":popup" and ":tearoff".
+ Also, don't handle ":tmenu" as if it was ":tearoff". And leave
+ out the alternatives with "&" included.
+Files: src/menu.c
+
+Patch 6.0.160
+Problem: When compiling with GCC 3.0.2 and using the "-O2" argument, the
+ optimizer causes a problem that makes Vim crash.
+Solution: Add a configure check to avoid "-O2" for this version of gcc.
+Files: src/configure.in, src/auto/configure
+
+Patch 6.0.161 (extra)
+Problem: Win32: Bitmaps don't work with signs.
+Solution: Make it possible to use bitmaps with signs. (Muraoka Taro)
+Files: src/ex_cmds.c, src/feature.h, src/gui_w32.c, src/gui_x11.c,
+ src/proto/gui_w32.pro, src/proto/gui_x11.pro
+
+Patch 6.0.162
+Problem: Client-server: An error message for a wrong expression appears in
+ the server instead of the client.
+Solution: Pass the error message from the server to the client. Also
+ adjust the example code. (Flemming Madsen)
+Files: src/globals.h, src/if_xcmdsrv.c, src/main.c, src/os_mswin.c,
+ src/proto/if_xcmdsrv.pro, src/proto/os_mswin.pro,
+ runtime/doc/eval.txt, runtime/tools/xcmdsrv_client.c
+
+Patch 6.0.163
+Problem: When using a GUI dialog, a file name is sometimes used like it was
+ a directory.
+Solution: Separate path and file name properly.
+ For GTK, Motif and Athena concatenate directory and file name for
+ the default selection.
+Files: src/diff.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+ src/gui_athena.c, src/gui_gtk.c, src/gui_motif.c, src/message.c
+
+Patch 6.0.164
+Problem: After patch 6.0.135 the menu entries for pasting don't work in
+ Insert and Visual mode. (Muraoka Taro)
+Solution: Add <script> to allow script-local mappings.
+Files: runtime/menu.vim
+
+Patch 6.0.165
+Problem: Using --remote and executing locally gives unavoidable error
+ messages.
+Solution: Add --remote-silent and --remote-wait-silent to silently execute
+ locally.
+ For Win32 there was no error message when a server didn't exist.
+Files: src/eval.c, src/if_xcmdsrv.c, src/main.c, src/os_mswin.c,
+ src/proto/if_xcmdsrv.pro, src/proto/os_mswin.pro
+
+Patch 6.0.166
+Problem: GUI: There is no way to avoid dialogs to pop up.
+Solution: Add the 'c' flag to 'guioptions': Use console dialogs. (Yegappan
+ Lakshmanan)
+Files: runtime/doc/options.txt, src/option.h, src/message.c
+
+Patch 6.0.167
+Problem: When 'fileencodings' is "latin2" some characters in the help files
+ are displayed wrong.
+Solution: Force the 'fileencoding' for the help files to be "latin1".
+Files: src/fileio.c
+
+Patch 6.0.168
+Problem: ":%s/\n/#/" doesn't replace at an empty line. (Bruce DeVisser)
+Solution: Don't skip matches after joining two lines.
+Files: src/ex_cmds.c
+
+Patch 6.0.169
+Problem: When run as evim and the GUI can't be started we get stuck in a
+ terminal without menus in Insert mode.
+Solution: Exit when using "evim" and "gvim -y" when the GUI can't be
+ started.
+Files: src/main.c
+
+Patch 6.0.170
+Problem: When printing double-width characters the size of tabs after them
+ is wrong. (Muraoka Taro)
+Solution: Correctly compute the column after a double-width character.
+Files: src/ex_cmds2.c
+
+Patch 6.0.171
+Problem: With 'keymodel' including "startsel", in Insert mode after the end
+ of a line, shift-Left does not move the cursor. (Steve Hall)
+Solution: CTRL-O doesn't move the cursor left, need to do that explicitly.
+Files: src/edit.c
+
+Patch 6.0.172
+Problem: CTRL-Q doesn't replace CTRL-V after CTRL-X in Insert mode while it
+ does in most other situations.
+Solution: Make CTRL-X CTRL-Q work like CTRL-X CTRL-V in Insert mode.
+Files: src/edit.c
+
+Patch 6.0.173
+Problem: When using "P" to insert a line break the cursor remains past the
+ end of the line.
+Solution: Check for the cursor being beyond the end of the line.
+Files: src/ops.c
+
+Patch 6.0.174
+Problem: After using "gd" or "gD" the search direction for "n" may still be
+ backwards. (Servatius Brandt)
+Solution: Reset the search direction to forward.
+Files: src/normal.c, src/search.c, src/proto/search.pro
+
+Patch 6.0.175
+Problem: ":help /\z(\)" doesn't work. (Thomas Koehler)
+Solution: Double the backslashes.
+Files: src/ex_cmds.c
+
+Patch 6.0.176
+Problem: When killed by a signal autocommands are still triggered as if
+ nothing happened.
+Solution: Add the v:dying variable to allow autocommands to work differently
+ when a deadly signal has been trapped.
+Files: src/eval.c, src/os_unix.c, src/vim.h
+
+Patch 6.0.177
+Problem: When 'commentstring' is empty and 'foldmethod' is "marker", "zf"
+ doesn't work. (Thomas S. Urban)
+Solution: Add the marker even when 'commentstring' is empty.
+Files: src/fold.c, src/normal.c
+
+Patch 6.0.178
+Problem: Uninitialized memory read from xp_backslash field.
+Solution: Initialize xp_backslash field properly.
+Files: src/eval.c, src/ex_docmd.c, src/ex_getln.c, src/misc1.c, src/tag.c
+
+Patch 6.0.179
+Problem: Win32: When displaying UTF-8 characters may read uninitialized
+ memory.
+Solution: Add utfc_ptr2len_check_len() to avoid reading past the end of a
+ string.
+Files: src/mbyte.c, src/proto/mbyte.pro, src/gui_w32.c
+
+Patch 6.0.180
+Problem: Expanding environment variables in a string that ends in a
+ backslash could go past the end of the string.
+Solution: Detect the trailing backslash.
+Files: src/misc1.c
+
+Patch 6.0.181
+Problem: When using ":cd dir" memory was leaked.
+Solution: Free the allocated memory. Also avoid an uninitialized memory
+ read.
+Files: src/misc2.c
+
+Patch 6.0.182
+Problem: When using a regexp on multi-byte characters, could try to read a
+ character before the start of the line.
+Solution: Don't decrement a pointer to before the start of the line.
+Files: src/regexp.c
+
+Patch 6.0.183
+Problem: Leaking memory when ":func!" redefines a function.
+Solution: Free the function name when it's not used.
+Files: src/eval.c
+
+Patch 6.0.184
+Problem: Leaking memory when expanding option values.
+Solution: Don't always copy the expanded option into allocated memory.
+Files: src/option.c
+
+Patch 6.0.185
+Problem: Crash in Vim when pasting a selection in another application, on a
+ 64 bit machine.
+Solution: Fix the format for an Atom to 32 bits. (Peter Derr)
+Files: src/ui.c
+
+Patch 6.0.186
+Problem: X11: Three warnings when compiling the client-server code.
+Solution: Add a typecast to unsigned char.
+Files: src/if_xcmdsrv.c
+
+Patch 6.0.187
+Problem: "I" in Visual mode and then "u" reports too many changes. (Andrew
+ Stryker)
+ "I" in Visual linewise mode adjusts the indent for no apparent
+ reason.
+Solution: Only save those lines for undo that are changed.
+ Don't change the indent after inserting in Visual linewise mode.
+Files: src/ops.c
+
+Patch 6.0.188
+Problem: Win32: After patch 6.0.161 signs defined in the vimrc file don't
+ work.
+Solution: Initialize the sign icons after initializing the GUI. (Vince
+ Negri)
+Files: src/gui.c, src/gui_x11.c
+
+Patch 6.0.189
+Problem: The size of the Visual area isn't always displayed when scrolling
+ ('ruler' off, 'showcmd' on). Also not when using a search
+ command. (Sylvain Hitier)
+Solution: Redisplay the size of the selection after showing the mode.
+Files: src/screen.c
+
+Patch 6.0.190
+Problem: GUI: when 'mouse' is empty a click with the middle button still
+ moves the cursor.
+Solution: Paste at the cursor position instead of the mouse position.
+Files: src/normal.c
+
+Patch 6.0.191
+Problem: When no servers are available serverlist() gives an error instead
+ of returning an empty string. (Hari Krishna)
+Solution: Don't give an error message.
+Files: src/eval.c
+
+Patch 6.0.192
+Problem: When 'virtualedit' is set, "ylj" goes to the wrong column. (Andrew
+ Nikitin)
+Solution: Reset the flag that w_virtcol is valid when moving the cursor back
+ to the start of the operated area.
+Files: src/normal.c
+
+Patch 6.0.193
+Problem: When 'virtualedit' is set, col(".") after the end of the line
+ should return one extra.
+Solution: Add one to the column.
+Files: src/eval.c
+
+Patch 6.0.194
+Problem: "--remote-silent" tries to send a reply to the client, like it was
+ "--remote-wait".
+Solution: Properly check for the argument.
+Files: src/main.c
+
+Patch 6.0.195
+Problem: When 'virtualedit' is set and a search starts in virtual space
+ ":call search('x')" goes to the wrong position. (Eric Long)
+Solution: Reset coladd when finding a match.
+Files: src/search.c
+
+Patch 6.0.196
+Problem: When 'virtualedit' is set, 'selection' is "exclusive" and visually
+ selecting part of a tab at the start of a line, "x" joins it with
+ the previous line. Also, when the selection spans more than one
+ line the whole tab is deleted.
+Solution: Take coladd into account when adjusting for 'selection' being
+ "exclusive". Also expand a tab into spaces when deleting more
+ than one line.
+Files: src/normal.c, src/ops.c
+
+Patch 6.0.197
+Problem: When 'virtualedit' is set and 'selection' is "exclusive", "v$x"
+ doesn't delete the last character in the line. (Eric Long)
+Solution: Don't reset the inclusive flag. (Helmut Stiegler)
+Files: src/normal.c
+
+Patch 6.0.198
+Problem: When 'virtualedit' is set and 'showbreak' is not empty, moving the
+ cursor over the line break doesn't work properly. (Eric Long)
+Solution: Make getviscol() and getviscol2() use getvvcol() to obtain the
+ virtual cursor position. Adjust coladvance() and oneleft() to
+ skip over the 'showbreak' characters.
+Files: src/edit.c, src/misc2.c
+
+Patch 6.0.199
+Problem: Multi-byte: could use iconv() after calling iconv_end().
+ (Yasuhiro Matsumoto)
+Solution: Stop converting input and output stream after calling iconv_end().
+Files: src/mbyte.c
+
+Patch 6.0.200
+Problem: A script that starts with "#!perl" isn't recognized as a Perl
+ filetype.
+Solution: Ignore a missing path in a script header. Also, speed up
+ recognizing scripts by simplifying the patterns used.
+Files: runtime/scripts.vim
+
+Patch 6.0.201
+Problem: When scrollbinding and doing a long jump, switching windows jumps
+ to another position in the file. Scrolling a few lines at a time
+ is OK. (Johannes Zellner)
+Solution: When setting w_topline reset the flag that indicates w_botline is
+ valid.
+Files: src/diff.c
+
+Patch 6.0.202
+Problem: The "icon=" argument for the menu command to define a toolbar icon
+ with a file didn't work for GTK. (Christian J. Robinson)
+ For Motif and Athena a full path was required.
+Solution: Search the icon file using the specified path. Expand environment
+ variables in the file name.
+Files: src/gui_gtk.c, src/gui_x11.c
+
+Patch 6.0.203
+Problem: Can change 'fileformat' even though 'modifiable' is off.
+ (Servatius Brandt)
+Solution: Correct check for kind of set command.
+Files: src/option.c
+
+Patch 6.0.204
+Problem: ":unlet" doesn't work for variables with curly braces. (Thomas
+ Scott Urban)
+Solution: Handle variable names with curly braces properly. (Vince Negri)
+Files: src/eval.c
+
+Patch 6.0.205 (extra)
+Problem: "gvim -f" still forks when using the batch script to start Vim.
+Solution: Add an argument to "start" to use a foreground session (Michael
+ Geddes)
+Files: src/dosinst.c
+
+Patch 6.0.206
+Problem: Unix: if expanding a wildcard in a file name results in a
+ wildcard character and there are more parts in the path with a
+ wildcard, it is expanded again.
+ Windows: ":edit \[abc]" could never edit the file "[abc]".
+Solution: Don't expand wildcards in already expanded parts.
+ Don't remove backslashes used to escape the special meaning of a
+ wildcard; can edit "[abc]" if '[' is removed from 'isfname'.
+Files: src/misc1.c, src/os_unix.c
+
+Patch 6.0.207 (extra)
+Problem: Win32: The shortcuts and start menu entries let Vim startup in the
+ desktop directory, which is not very useful.
+Solution: Let shortcuts start Vim in $HOME or $HOMEDIR$HOMEPATH.
+Files: src/dosinst.c
+
+Patch 6.0.208
+Problem: GUI: When using a keymap and the cursor is not blinking, CTRL-^ in
+ Insert mode doesn't directly change the cursor color. (Alex
+ Solow)
+Solution: Force a redraw of the cursor after CTRL-^.
+Files: src/edit.c
+
+Patch 6.0.209
+Problem: GUI GTK: After selecting a 'guifont' with the font dialog there
+ are redraw problems for multi-byte characters.
+Solution: Separate the font dialog from setting the new font name to avoid
+ that "*" is used to find wide and bold fonts.
+ When redrawing extra characters for the bold trick, take care of
+ UTF-8 characters.
+Files: src/gui.c, src/gui_gtk_x11.c, src/option.c, src/proto/gui.pro,
+ src/proto/gui_gtk_x11.pro
+
+Patch 6.0.210
+Problem: After patch 6.0.167 it's no longer possible to edit a help file in
+ another encoding than latin1.
+Solution: Let the "++enc=" argument overrule the encoding.
+Files: src/fileio.c
+
+Patch 6.0.211
+Problem: When reading a file fails, the buffer is empty, but it might still
+ be possible to write it with ":w" later. The original file is
+ lost then. (Steve Amerige)
+Solution: Set the 'readonly' option for the buffer.
+Files: src/fileio.c
+
+Patch 6.0.212
+Problem: GUI GTK: confirm("foo", "") causes a crash.
+Solution: Don't make a non-existing button the default. Add a default "OK"
+ button if none is specified.
+Files: src/eval.c, src/gui_gtk.c
+
+Patch 6.0.213
+Problem: When a file name contains unprintable characters, CTRL-G and other
+ commands don't work well.
+Solution: Turn unprintable into printable characters. (Yasuhiro Matsumoto)
+Files: src/buffer.c, src/charset.c
+
+Patch 6.0.214
+Problem: When there is a buffer without a name, empty entries appear in the
+ jumplist saved in the viminfo file.
+Solution: Don't write jumplist entries without a file name.
+Files: src/mark.c
+
+Patch 6.0.215
+Problem: After using "/" from Visual mode the Paste menu and Toolbar
+ entries don't work. Pasting with the middle mouse doesn't work
+ and modeless selection doesn't work.
+Solution: Use the command line mode menus and use the mouse like in the
+ command line.
+Files: src/gui.c, src/menu.c, src/ui.c
+
+Patch 6.0.216
+Problem: After reloading a file, displayed in another window than the
+ current one, which was changed outside of Vim the part of the file
+ around the cursor set by autocommands may be displayed, but
+ jumping back to the original cursor position when entering the
+ window again.
+Solution: Restore the topline of the window.
+Files: src/fileio.c
+
+Patch 6.0.217
+Problem: When getting help from a help file that was used before, an empty
+ unlisted buffer remains in the buffer list. (Eric Long)
+Solution: Wipe out the buffer used to do the tag jump from.
+Files: src/buffer.c, src/ex_cmds.c, src/proto/buffer.pro
+
+Patch 6.0.218
+Problem: With explorer plugin: "vim -o filename dirname" doesn't load the
+ explorer window until entering the window.
+Solution: Call s:EditDir() for each window after starting up.
+Files: runtime/plugin/explorer.vim
+
+Patch 6.0.219
+Problem: ":setlocal" and ":setglobal", without arguments, display terminal
+ options. (Zdenek Sekera)
+Solution: Skip terminal options for these two commands.
+Files: src/option.c
+
+Patch 6.0.220
+Problem: After patch 6.0.218 get a beep on startup. (Muraoka Taro)
+Solution: Don't try going to another window when there isn't one.
+Files: runtime/plugin/explorer.vim
+
+Patch 6.0.221
+Problem: When using ":bdel" and all other buffers are unloaded the lowest
+ numbered buffer is jumped to instead of the most recent one. (Dave
+ Cecil)
+Solution: Prefer an unloaded buffer from the jumplist.
+Files: src/buffer.c
+
+Patch 6.0.222
+Problem: When 'virtualedit' is set and using autoindent, pressing Esc after
+ starting a new line leaves behind part of the autoindent. (Helmut
+ Stiegler)
+Solution: After deleting the last char in the line adjust the cursor
+ position in del_bytes().
+Files: src/misc1.c, src/ops.c
+
+Patch 6.0.223
+Problem: When splitting a window that contains the explorer, hitting CR on
+ a file name gives error messages.
+Solution: Set the window variables after splitting the window.
+Files: runtime/plugin/explorer.vim
+
+Patch 6.0.224
+Problem: When 'sidescroll' and 'sidescrolloff' are set in a narrow window
+ the text may jump left-right and the cursor is displayed in the
+ wrong position. (Aric Blumer)
+Solution: When there is not enough room, compute the left column for the
+ window to put the cursor in the middle.
+Files: src/move.c
+
+Patch 6.0.225
+Problem: In Visual mode "gk" gets stuck in a closed fold. (Srinath
+ Avadhanula)
+Solution: Behave differently in a closed fold.
+Files: src/normal.c
+
+Patch 6.0.226
+Problem: When doing ":recover file" get the ATTENTION prompt.
+ After recovering the same file five times get a read error or a
+ crash. (Alex Davis)
+Solution: Set the recoverymode flag before setting the file name.
+ Correct the amount of used memory for the size of block zero.
+Files: src/ex_docmd.c
+
+Patch 6.0.227 (extra)
+Problem: The RISC OS port has several problems.
+Solution: Update the makefile and fix some of the problems. (Andy Wingate)
+Files: src/Make_ro.mak, src/os_riscos.c, src/os_riscos.h,
+ src/proto/os_riscos.pro, src/search.c
+
+Patch 6.0.228
+Problem: After putting text in Visual mode the '] mark is not at the end of
+ the put text.
+ Undo doesn't work properly when putting a word into a Visual
+ selection that spans more than one line.
+Solution: Correct the '] mark for the deleting the Visually selected text.
+ #ifdef code that depends on FEAT_VISUAL properly.
+ Also fix that "d" crossing line boundary puts '[ just before
+ deleted text.
+ Fix undo by saving all deleted lines at once.
+Files: src/ex_docmd.c, src/globals.h, src/normal.c, src/ops.c,
+ src/structs.h, src/vim.h
+
+Patch 6.0.229
+Problem: Multi-byte: With 'm' in 'formatoptions', formatting doesn't break
+ at a multi-byte char followed by an ASCII char, and the other way
+ around. (Muraoka Taro)
+ When joining lines a space is inserted between multi-byte
+ characters, which is not always wanted.
+Solution: Check for multi-byte character before and after the breakpoint.
+ Don't insert a space before or after a multi-byte character when
+ joining lines and the 'M' flag is in 'formatoptions'. Don't
+ insert a space between multi-byte characters when the 'B' flag is
+ in 'formatoptions'.
+Files: src/edit.c, src/ops.c, src/option.h
+
+Patch 6.0.230
+Problem: The ":" used as a motion after an operator is exclusive, but
+ sometimes it should be inclusive.
+Solution: Make the "v" in between an operator and motion toggle
+ inclusive/exclusive. (Servatius Brandt)
+Files: runtime/doc/motion.txt, src/normal.c
+
+Patch 6.0.231
+Problem: "gd" and "gD" don't work when the variable matches in a comment
+ just above the match to be found. (Servatius Brandt)
+Solution: Continue searching in the first column below the comment.
+Files: src/normal.c
+
+Patch 6.0.232
+Problem: "vim --version" prints on stderr while "vim --help" prints on
+ stdout.
+Solution: Make "vim --version" use stdout.
+Files: runtime/doc/starting.txt, src/globals.h, src/main.c, src/message.c
+
+Patch 6.0.233
+Problem: "\1\{,8}" in a regexp is not allowed, but it should work, because
+ there is an upper limit. (Jim Battle)
+Solution: Allow using "\{min,max}" after an atom that can be empty if there
+ is an upper limit.
+Files: src/regexp.c
+
+Patch 6.0.234
+Problem: It's not easy to set the cursor position without modifying marks.
+Solution: Add the cursor() function. (Yegappan Lakshmanan)
+Files: runtime/doc/eval.txt, src/eval.c
+
+Patch 6.0.235
+Problem: When writing a file and renaming the original file to make the
+ backup, permissions could change when setting the owner.
+Solution: Only set the owner when it's needed and set the permissions again
+ afterwards.
+ When 'backupcopy' is "auto" check that the owner and permissions
+ of a newly created file can be set properly.
+Files: src/fileio.c
+
+Patch 6.0.236
+Problem: ":edit" without argument should move cursor to line 1 in Vi
+ compatible mode.
+Solution: Add 'g' flag to 'cpoptions'.
+Files: runtime/doc/options.txt, src/ex_docmd.c, src/option.h
+
+Patch 6.0.237
+Problem: In a C file, using the filetype plugin, re-indenting a comment
+ with two spaces after the middle "*" doesn't align properly.
+Solution: Don't use a middle entry from a start/middle/end to line up with
+ the start of the comment when the start part doesn't match with
+ the actual comment start.
+Files: src/misc1.c
+
+Patch 6.0.238
+Problem: Using a ":substitute" command with a substitute() call in the
+ substitution expression causes errors. (Srinath Avadhanula)
+Solution: Save and restore pointers when doing substitution recursively.
+Files: src/regexp.c
+
+Patch 6.0.239
+Problem: Using "A" to append after a Visually selected block which is after
+ the end of the line, spaces are inserted in the wrong line and
+ other unexpected effects. (Michael Naumann)
+Solution: Don't advance the cursor to the next line.
+Files: src/ops.c
+
+Patch 6.0.240
+Problem: Win32: building with Python 2.2 doesn't work.
+Solution: Add support for Python 2.2 with dynamic linking. (Paul Moore)
+Files: src/if_python.c
+
+Patch 6.0.241
+Problem: Win32: Expanding the old value of an option that is a path that
+ starts with a backslash, an extra backslash is inserted.
+Solution: Only insert backslashes where needed.
+ Also handle multi-byte characters properly when removing
+ backslashes.
+Files: src/option.c
+
+Patch 6.0.242
+Problem: GUI: On a system with an Exceed X server sometimes get a "Bad
+ Window" error. (Tommi Maekitalo)
+Solution: When forking, use a pipe to wait in the parent for the child to
+ have done the setsid() call.
+Files: src/gui.c
+
+Patch 6.0.243
+Problem: Unix: "vim --version" outputs a NL before the last line instead of
+ after it. (Charles Campbell)
+Solution: Send the NL to the same output stream as the text.
+Files: src/message.c, src/os_unix.c, src/proto/message.pro
+
+Patch 6.0.244
+Problem: Multi-byte: Problems with (illegal) UTF-8 characters in menu and
+ file name (e.g., icon text, status line).
+Solution: Correctly handle unprintable characters. Catch illegal UTF-8
+ characters and replace them with <xx>. Truncating the status line
+ wasn't done correctly at a multi-byte character. (Yasuhiro
+ Matsumoto)
+ Added correct_cmdspos() and transchar_byte().
+Files: src/buffer.c, src/charset.c, src/ex_getln.c, src/gui.c,
+ src/message.c, src/screen.c, src/vim.h
+
+Patch 6.0.245
+Problem: After using a color scheme, setting the 'background' option might
+ not work. (Peter Horst)
+Solution: Disable the color scheme if it switches 'background' back to the
+ wrong value.
+Files: src/option.c
+
+Patch 6.0.246
+Problem: ":echomsg" didn't use the highlighting set by ":echohl". (Gary
+ Holloway)
+Solution: Use the specified attributes for the message. (Yegappan
+ Lakshmanan)
+Files: src/eval.c
+
+Patch 6.0.247
+Problem: GTK GUI: Can't use gvim in a kpart widget.
+Solution: Add the "--echo-wid" argument to let Vim echo the window ID on
+ stdout. (Philippe Fremy)
+Files: runtime/doc/starting.txt, src/globals.h, src/gui_gtk_x11.c,
+ src/main.c
+
+Patch 6.0.248
+Problem: When using compressed help files and 'encoding' isn't "latin1",
+ Vim converts the help file before decompressing. (David Reviejo)
+Solution: Don't convert a help file when 'binary' is set.
+Files: src/fileio.c
+
+Patch 6.0.249
+Problem: "vim -t edit -c 'sta ex_help'" doesn't move cursor to edit().
+Solution: Don't set the cursor on the first line for "-c" arguments when
+ there also is a "-t" argument.
+Files: src/main.c
+
+Patch 6.0.250 (extra)
+Problem: Macintosh: Various problems when compiling.
+Solution: Various fixes, mostly #ifdefs. (Dany St. Amant)
+Files: src/gui_mac.c, src/main.c, src/misc2.c, src/os_mac.h,
+ src/os_mac.pbproj/project.pbxproj, src/os_unix.c
+
+Patch 6.0.251 (extra)
+Problem: Macintosh: menu shortcuts are not very clear.
+Solution: Show the shortcut with the Mac clover symbol. (raindog)
+Files: src/gui_mac.c
+
+Patch 6.0.252
+Problem: When a user function was defined with "abort", an error that is
+ not inside if/endif or while/endwhile doesn't abort the function.
+ (Servatius Brandt)
+Solution: Don't reset did_emsg when the function is to be aborted.
+Files: src/ex_docmd.c
+
+Patch 6.0.253
+Problem: When 'insertmode' is set, after "<C-O>:edit file" the next <C-O>
+ doesn't work. (Benji Fisher) <C-L> has the same problem.
+Solution: Reset need_start_insertmode once in edit().
+Files: src/edit.c
+
+Patch 6.0.254 (extra)
+Problem: Borland C++ 5.5: Checking for stack overflow doesn't work
+ correctly. Matters when using a complicated regexp.
+Solution: Remove -N- from Make_bc5.mak. (Yasuhiro Matsumoto)
+Files: src/Make_bc5.mak
+
+Patch 6.0.255 (extra) (depends on patch 6.0.116 and 6.0.121)
+Problem: Win32: ACL support doesn't work well on Samba drives.
+Solution: Add a check for working ACL support. (Mike Williams)
+Files: src/os_win32.c
+
+Patch 6.0.256 (extra)
+Problem: Win32: ":highlight Comment guifg=asdf" does not give an error
+ message. (Randall W. Morris) Also for other systems.
+Solution: Add gui_get_color() to give one error message for all systems.
+Files: src/gui.c, src/gui_amiga.c, src/gui_athena.c, src/gui_motif.c,
+ src/gui_riscos.c, src/gui_x11.c, src/gui_gtk_x11.c,
+ src/proto/gui.pro, src/syntax.c
+
+Patch 6.0.257
+Problem: Win32: When 'mousefocus' is set and there is a BufRead
+ autocommand, after the dialog for permissions changed outside of
+ Vim: 'mousefocus' stops working. (Robert Webb)
+Solution: Reset need_mouse_correct after checking timestamps.
+Files: src/fileio.c
+
+Patch 6.0.258
+Problem: When 'scrolloff' is 999 and there are folds, the text can jump up
+ and down when moving the cursor down near the end of the file.
+ (Lubomir Host)
+Solution: When putting the cursor halfway the window start counting lines at
+ the end of a fold.
+Files: src/move.c
+
+Patch 6.0.259
+Problem: MS-DOS: after editing the command line the cursor shape may remain
+ like in Insert mode. (Volker Kiefel)
+Solution: Reset the cursor shape after editing the command line.
+Files: src/ex_getln.c
+
+Patch 6.0.260
+Problem: GUI: May crash while starting up when giving an error message for
+ missing color. (Servatius Brandt)
+Solution: Don't call gui_write() when still starting up. Don't give error
+ message for empty color name. Don't use 't_vb' while the GUI is
+ still starting up.
+Files: src/fileio.c, src/gui.c, src/misc1.c, src/ui.c
+
+Patch 6.0.261
+Problem: nr2char() and char2nr() don't work with multi-byte characters.
+Solution: Use 'encoding' for these functions. (Yasuhiro Matsumoto)
+Files: runtime/doc/eval.txt, src/eval.c
+
+Patch 6.0.262 (extra)
+Problem: Win32: IME doesn't work properly. OnImeComposition() isn't used
+ at all.
+Solution: Adjust various things for IME.
+Files: src/globals.h, src/gui_w32.c, src/mbyte.c, src/proto/ui.pro,
+ src/structs.h, src/ui.c
+
+Patch 6.0.263
+Problem: GTK: When a dialog is closed by the window manager, Vim hangs.
+ (Christian J. Robinson)
+Solution: Use GTK_WIDGET_DRAWABLE() instead of GTK_WIDGET_VISIBLE().
+Files: src/gui_gtk.c, src/gui_gtk_x11.c
+
+Patch 6.0.264
+Problem: The amount of virtual memory is used to initialize 'maxmemtot',
+ which may be much more than the amount of physical memory,
+ resulting in a lot of swapping.
+Solution: Get the amount of physical memory with sysctl(), sysconf() or
+ sysinfo() when possible.
+Files: src/auto/configure, src/configure.in, src/config.h.in,
+ src/os_unix.c, src/os_unix.h
+
+Patch 6.0.265
+Problem: Win32: Using backspace while 'fkmap' is set causes a crash.
+ (Jamshid Oasjmoha)
+Solution: Don't try mapping special keys.
+Files: src/farsi.c
+
+Patch 6.0.266
+Problem: The rename() function deletes the file if the old and the new name
+ are the same. (Volker Kiefel)
+Solution: Don't do anything if the names are equal.
+Files: src/fileio.c
+
+Patch 6.0.267
+Problem: UTF-8: Although 'isprint' says a character is printable,
+ utf_char2cells() still considers it unprintable.
+Solution: Use vim_isprintc() for characters upto 0x100. (Yasuhiro Matsumoto)
+Files: src/mbyte.c
+
+Patch 6.0.268 (extra) (depends on patch 6.0.255)
+Problem: Win32: ACL check crashes when using forward slash in file name.
+Solution: Improve the check for the path in the file name.
+Files: src/os_win32.c
+
+Patch 6.0.269
+Problem: Unprintable characters in a file name may cause problems when
+ using the 'statusline' option or when 'buftype' is "nofile".
+Solution: call trans_characters() for the resulting statusline. (Yasuhiro
+ Matsumoto)
+Files: src/buffer.c, src/screen.c, src/charset.c
+
+Patch 6.0.270 (depends on patch 6.0.267)
+Problem: A tab causes UTF-8 text to be displayed in the wrong position.
+ (Ron Aaron)
+Solution: Correct utf_char2cells() again.
+Files: src/mbyte.c
+
+Patch 6.1a.001 (extra)
+Problem: 32bit DOS: copying text to the clipboard may cause a crash.
+ (Jonathan D Johnston)
+Solution: Don't copy one byte too much in SetClipboardData().
+Files: src/os_msdos.c
+
+Patch 6.1a.002
+Problem: GTK: On some configurations, when closing a dialog from the window
+ manager, Vim hangs.
+Solution: Catch the "destroy" signal. (Aric Blumer)
+Files: src/gui_gtk.c
+
+Patch 6.1a.003
+Problem: Multi-byte: With UTF-8 double-wide char and 'virtualedit' set:
+ yanking in Visual mode doesn't include the last byte. (Eric Long)
+Solution: Don't add a space for a double-wide character.
+Files: src/ops.c
+
+Patch 6.1a.004 (extra)
+Problem: MINGW: undefined type. (Ron Aaron)
+Solution: Make GetCompositionString_inUCS2() static.
+Files: src/gui_w32.c, src/gui_w48.c, src/proto/gui_w32.pro
+
+Patch 6.1a.005 (extra)
+Problem: Win32: ":hardcopy" doesn't work after ":hardcopy!". (Jonathan
+ Johnston)
+Solution: Don't keep the driver context when using ":hardcopy!". (Vince
+ Negri)
+Files: src/os_mswin.c
+
+Patch 6.1a.006
+Problem: multi-byte: after setting 'encoding' the window title might be
+ wrong.
+Solution: Force resetting the title. (Yasuhiro Matsumoto)
+Files: src/option.c
+
+Patch 6.1a.007
+Problem: Filetype detection for "*.inc" doesn't work.
+Solution: Use a ":let" command. (David Schweikert)
+Files: runtime/filetype.vim
+
+Patch 6.1a.008 (extra)
+Problem: Win32: ACL detection for network shares doesn't work.
+Solution: Include the trailing (back)slash in the root path. (Mike Williams)
+Files: src/os_win32.c
+
+Patch 6.1a.009
+Problem: When using "\@<=" or "\@<!" in a pattern, a "\1" may refer to a ()
+ part that follows, but it generates an error message.
+Solution: Allow a forward reference when there is a following "\@<=" or
+ "\@<!".
+Files: runtime/doc/pattern.txt, src/regexp.c
+
+Patch 6.1a.010
+Problem: When using ":help" and opening a new window, the alternate file
+ isn't set.
+Solution: Set the alternate file to the previously edited file.
+Files: src/ex_cmds.c
+
+Patch 6.1a.011
+Problem: GTK: ":set co=77", change width with the mouse, ":set co=77"
+ doesn't resize the window. (Darren Hiebert)
+Solution: Set the form size after handling a resize event.
+Files: src/gui_gtk_x11.c
+
+Patch 6.1a.012
+Problem: GTK: The file browser always returns a full path. (Lohner)
+Solution: Shorten the file name if possible.
+Files: src/gui_gtk.c
+
+Patch 6.1a.013
+Problem: When using "=~word" in 'cinkeys' or 'indentkeys', the case of the
+ last character of the word isn't ignored. (Raul Segura Acevedo)
+Solution: Ignore case when checking the last typed character.
+Files: src/edit.c
+
+Patch 6.1a.014
+Problem: After patch 6.1a.006 can't compile without the title feature.
+Solution: Add an #ifdef.
+Files: src/option.c
+
+Patch 6.1a.015
+Problem: MS-Windows: When expanding a file name that contains a '[' or '{'
+ an extra backslash is inserted. (Raul Segura Acevedo)
+Solution: Avoid adding the backslash.
+Files: src/ex_getln.c
+
+Patch 6.1a.016
+Problem: Completion after ":language" doesn't include "time". (Raul Segura
+ Acevedo)
+Solution: Add the alternative to the completions.
+Files: src/ex_cmds2.c
+
+Patch 6.1a.017
+Problem: Clicking the mouse in the top row of a window where the first line
+ doesn't fit moves the cursor to the wrong column.
+Solution: Add the skipcol also for the top row of a window.
+Files: src/ui.c
+
+Patch 6.1a.018
+Problem: When 'scrolloff' is one and the window height is one, "gj" can put
+ the cursor above the window. (Raul Segura Acevedo)
+Solution: Don't let skipcol become bigger than the cursor column.
+Files: src/move.c
+
+Patch 6.1a.019
+Problem: When using a composing character on top of an ASCII character, the
+ "l" command clears the composing character. Only when 'ruler' and
+ 'showcmd' are off. (Raphael Finkel)
+Solution: Don't move the cursor by displaying characters when there are
+ composing characters.
+Files: src/screen.c
+
+Patch 6.1a.020
+Problem: GTK: after patch 6.1a.011 resizing with the mouse doesn't always
+ work well for small sizes. (Adrien Beau)
+Solution: Use another way to avoid the problem with ":set co=77".
+Files: src/gui_gtk_x11.c
+
+Patch 6.1a.021
+Problem: Several Syntax menu entries are wrong or confusing.
+Solution: Rephrase and correct the menu entries. (Adrien Beau)
+Files: runtime/makemenu.vim, runtime/menu.vim
+
+Patch 6.1a.022
+Problem: A tags file might be used twice on case insensitive systems.
+ (Rick Swanton)
+Solution: Don't use the same file name twice in the default for the 'tags'
+ option. Ignore case when comparing names of already visited
+ files.
+Files: src/misc2.c, src/option.c
+
+Patch 6.1a.023
+Problem: When starting the GUI get "C" characters echoed in the terminal.
+Solution: Don't try sending a clear-screen command while the GUI is starting
+ up.
+Files: src/screen.c
+
+Patch 6.1a.024
+Problem: In other editors CTRL-F is often used for a find dialog.
+Solution: In evim use CTRL-F for the find dialog.
+Files: runtime/evim.vim
+
+Patch 6.1a.025
+Problem: The choices for the fileformat dialog can't be translated.
+Solution: Add g:menutrans_fileformat_choices. (Adrien Beau)
+Files: runtime/menu.vim
+
+Patch 6.1a.026
+Problem: Indenting Java files is wrong with "throws", "extends" and
+ "implements" clauses.
+Solution: Update the Java indent script.
+Files: runtime/indent/java.vim
+
+Patch 6.1a.027
+Problem: A few Syntax menu entries missing or incorrect.
+Solution: Add and correct the menu entries. (Adrien Beau)
+ Shorten a few menus to avoid they become too long.
+Files: runtime/makemenu.vim, runtime/menu.vim
+
+Patch 6.1a.028
+Problem: XIM: problems with feedback and some input methods.
+Solution: Use iconv for calculating the cells. Remove the queue for
+ key_press_event only when text was changed. (Yasuhiro Matsumoto)
+Files: src/globals.h, src/mbyte.c, src/screen.c
+
+Patch 6.1a.029
+Problem: After patch 6.1a.028 can't compile GTK version with XIM but
+ without multi-byte chars.
+Solution: Add an #ifdef. (Aschwin Marsman)
+Files: src/mbyte.c
+
+Patch 6.1a.030
+Problem: With double-byte encodings toupper() and tolower() may have wrong
+ results.
+Solution: Skip double-byte characters. (Eric Long)
+Files: src/eval.c
+
+Patch 6.1a.031
+Problem: Accessing the 'balloondelay' variable may cause a crash.
+Solution: Make the variable for 'balloondelay' a long. (Olaf Seibert)
+Files: src/option.h
+
+Patch 6.1a.032 (extra)
+Problem: Some menu files used a wrong encoding name for "scriptencoding".
+Solution: Move the translations to a separate file, which is sourced after
+ setting "scriptencoding".
+ Also add Czech menu translations in ASCII and update the other
+ encodings.
+Files: runtime/lang/menu_cs_cz.iso_8859-1.vim,
+ runtime/lang/menu_cs_cz.iso_8859-2.vim,
+ runtime/lang/menu_czech_czech_republic.1250.vim,
+ runtime/lang/menu_czech_czech_republic.1252.vim,
+ runtime/lang/menu_czech_czech_republic.ascii.vim,
+ runtime/lang/menu_de_de.iso_8859-1.vim,
+ runtime/lang/menu_de_de.latin1.vim,
+ runtime/lang/menu_fr_fr.iso_8859-1.vim,
+ runtime/lang/menu_fr_fr.latin1.vim,
+ runtime/lang/menu_french_france.1252.vim,
+ runtime/lang/menu_german_germany.1252.vim,
+ runtime/lang/menu_ja_jp.euc-jp.vim,
+ runtime/lang/menu_ja_jp.utf-8.vim,
+ runtime/lang/menu_japanese_japan.932.vim
+
+Patch 6.1a.033
+Problem: XIM: doesn't reset input context.
+Solution: call xim_reset() with im_set_active(FALSE). (Takuhiro Nishioka)
+Files: src/mbyte.c
+
+Patch 6.1a.034 (extra)
+Problem: Win32: The ACL checks for a readonly file still don't work well.
+Solution: Remove the ACL checks, go back to how it worked in Vim 6.0.
+Files: src/os_win32.c
+
+Patch 6.1a.035
+Problem: multi-byte: When using ":sh" in the GUI, typed and displayed
+ multi-byte characters are not handled correctly.
+Solution: Deal with multi-byte characters to and from the shell. (Yasuhiro
+ Matsumoto) Also handle UTF-8 composing characters.
+Files: src/os_unix.c
+
+Patch 6.1a.036
+Problem: GTK: the save-yourself event was not handled.
+Solution: Catch the save-yourself event and preserve swap files. (Neil Bird)
+Files: src/gui_gtk_x11.c
+
+Patch 6.1a.037
+Problem: The MS-Windows key mapping doesn't include CTRL-S for saving.
+ (Vlad Sandrini)
+Solution: Map CTRL-S to ":update".
+Files: runtime/mswin.vim
+
+Patch 6.1a.038
+Problem: Solaris: Including both sys/sysctl.h and sys/sysinfo.h doesn't
+ work. (Antonio Colombo)
+Solution: Don't include sys/sysinfo.h when not calling sysinfo().
+Files: src/os_unix.c
+
+Patch 6.1a.039
+Problem: Not all visual basic files are recognized.
+Solution: Add checks to catch *.ctl files. (Raul Segura Acevedo)
+Files: runtime/filetype.vim
+
+Patch 6.1a.040
+Problem: A *.pl file is recognized as Perl, but it could be a prolog file.
+Solution: Check the first non-empty line. (Kontra Gergely)
+Files: runtime/filetype.vim
+
+Patch 6.1a.041
+Problem: When pressing the left mouse button in the command line and them
+ moving the mouse upwards, nearly all the text is selected.
+Solution: Don't try extending a modeless selection when there isn't one.
+Files: src/ui.c
+
+Patch 6.1a.042
+Problem: When merging files, ":diffput" and ":diffget" are used a lot, but
+ they require a lot of typing.
+Solution: Add "dp" for ":diffput" and "do" for ":diffget".
+Files: runtime/doc/diff.txt, src/diff.c, src/normal.c, src/proto/diff.pro
+
+
+Patch 6.1b.001 (extra)
+Problem: Checking for wildcards in a path does not handle multi-byte
+ characters with a trail byte which is a wildcard.
+Solution: Handle multi-byte characters correctly. (Muraoka Taro)
+Files: src/os_amiga.c, src/os_mac.c, src/os_msdos.c, src/os_mswin.c,
+ src/os_unix.c
+
+Patch 6.1b.002
+Problem: A regexp that ends in "\{" is not flagged as an error. May cause
+ a stack overflow when 'incsearch' is set. (Gerhard Hochholzer)
+Solution: Handle a missing "}" as an error.
+Files: src/regexp.c
+
+Patch 6.1b.003 (extra)
+Problem: The RISC OS GUI doesn't compile.
+Solution: Include changes since Vim 5.7. (Andy Wingate)
+Files: src/Make_ro.mak, src/gui_riscos.c, src/os_riscos.c,
+ src/os_riscos.h, src/proto/gui_riscos.pro
+
+Patch 6.1b.004
+Problem: col("'>") returns a negative number for linewise selection. (Neil
+ Bird)
+Solution: Don't add one to MAXCOL.
+Files: src/eval.c
+
+Patch 6.1b.005
+Problem: Using a search pattern that causes an out-of-stack error while
+ 'hlsearch' is set keeps giving the hit-Enter prompt.
+ A search pattern that takes a long time delays typing when
+ 'incsearch' is set.
+Solution: Stop 'hlsearch' highlighting when the regexp causes an error.
+ Stop searching for 'incsearch' when a character is typed.
+Files: src/globals.h, src/message.c, src/screen.c, src/search.c,
+ src/vim.h
+
+Patch 6.1b.006
+Problem: When entering a composing character on the command line with
+ CTRL-V, the text isn't redrawn correctly.
+Solution: Redraw the text under and after the cursor.
+Files: src/ex_getln.c
+
+Patch 6.1b.007
+Problem: When the cursor is in the white space between two sentences, "dis"
+ deletes the first character of the following sentence, "das"
+ deletes a space after the sentence.
+Solution: Backup the cursor one character in these situations.
+Files: src/search.c
+
+Patch 6.1b.008
+Problem: *.xsl files are not recognized as xslt but xml.
+ Monk files are not recognized.
+Solution: Delete the duplicate line for *.xsl. (Johannes Zellner)
+ Recognize monk files.
+Files: runtime/filetype.vim
+
+Patch 6.1b.009
+Problem: Can't always compile small features and then adding eval feature,
+ "sandbox" is undefined. (Axel Kielhorn)
+Solution: Always define "sandbox" when the eval feature is used.
+Files: src/globals.h
+
+Patch 6.1b.010 (extra)
+Problem: When compiling gvimext.cpp with MSVC 4.2 get a number of warnings.
+Solution: Change "true" to "TRUE". (Walter Briscoe)
+Files: GvimExt/gvimext.cpp
+
+Patch 6.1b.011
+Problem: When using a very long string for confirm(), can't quit the
+ displaying at the more prompt. (Hari Krishna Dara)
+Solution: Jump to the end of the message to show the choices.
+Files: src/message.c
+
+Patch 6.1b.012
+Problem: Multi-byte: When 'showbreak' is set and a double-wide character
+ doesn't fit at the right window edge the cursor gets stuck there.
+ Using cursor-left gets stuck when 'virtualedit' is set. (Eric
+ Long)
+Solution: Fix the way the extra ">" character is counted when 'showbreak' is
+ set. Don't correct cursor for virtual editing on a double-wide
+ character.
+Files: src/charset.c, src/edit.c
+
+Patch 6.1b.013
+Problem: A user command that partly matches with a buffer-local user
+ command and matches full with a global user command unnecessarily
+ gives an 'ambiguous command' error.
+Solution: Find the full global match even after a partly local match.
+Files: src/ex_docmd.c
+
+Patch 6.1b.014
+Problem: EBCDIC: switching mouse events off causes garbage on screen.
+ Positioning the cursor in the GUI causes garbage.
+Solution: Insert an ESC in the terminal code. (Ralf Schandl)
+ Use "\b" instead of "\010" for KS_LE.
+Files: src/os_unix.c, src/term.c
+
+Patch 6.1b.015
+Problem: Vimtutor has a typo. Get a warning for "tempfile" if it
+ doesn't exist.
+Solution: Move a quote to the end of a line. (Max Ischenko)
+ Use "mktemp" first, more systems have it.
+Files: src/vimtutor
+
+Patch 6.1b.016
+Problem: GTK: loading a fontset that works partly, Vim might hang or crash.
+Solution: Avoid that char_width becomes zero. (Yasuhiro Matsumoto)
+Files: src/gui_gtk_x11.c
+
+Patch 6.1b.017
+Problem: GUI: When using ":shell" and there is a beep, nothing happens.
+Solution: Call vim_beep() to produce the beep from the shell. (Yasuhiro
+ Matsumoto)
+Files: src/message.c
+
+Patch 6.1b.018 (depends on 6.1b.006)
+Problem: When entering the encryption key, special keys may still reveal
+ the typed characters.
+Solution: Make sure stars are used or nothing is shown in all cases.
+Files: src/digraph.c, src/getchar.c, src/ex_getln.c
+
+Patch 6.1b.019 (depends on 6.1b.005)
+Problem: A search pattern that takes a long time slows down typing when
+ 'incsearch' is set.
+Solution: Pass SEARCH_PEEK to dosearch().
+Files: src/ex_getln.c
+
+Patch 6.1b.020
+Problem: When using the matchit plugin, "%" finds a match on the "end" of a
+ ":syntax region" command in Vim scripts.
+Solution: Skip over ":syntax region" commands by setting b:match_skip.
+Files: runtime/ftplugin/vim.vim
+
+Patch 6.1b.021
+Problem: when 'mousefocus' is set, CTRL-W CTRL-] sometimes doesn't warp the
+ pointer to the new window. (Robert Webb)
+Solution: Don't reset need_mouse_correct when checking the timestamp of a
+ file.
+Files: src/fileio.c
+
+Patch 6.1b.022
+Problem: With lots of folds "j" does not obey 'scrolloff' properly.
+ (Srinath Avadhanula)
+Solution: Go to end of the fold before counting context lines.
+Files: src/move.c
+
+Patch 6.1b.023
+Problem: On MS-Windows system() may cause checking timestamps, because Vim
+ looses and gains input focus, while this doesn't happen on Unix.
+Solution: Don't check timestamps while system() is busy.
+Files: src/ex_cmds2.c, src/fileio.c, src/globals.h, src/misc1.c
+
+Patch 6.1b.024 (extra)
+Problem: Gettext 0.11 complains that "sjis" is not a standard name.
+Solution: Use "cp932" instead.
+Files: src/po/sjiscorr.c
+
+Patch 6.1b.025 (extra)
+Problem: Win32: When closing gvim while it is minimized and has a changed
+ file, the file-changed dialog pops up in a corner of the screen.
+Solution: Put the dialog in the middle of the screen.
+Files: src/gui_w48.c
+
+Patch 6.1b.026
+Problem: When 'diffopt' contains 'iwhite' but not 'icase': differences in
+ case are not highlighted properly. (Gerhard Hochholzer)
+Solution: Don't ignore case when ignoring white space differences.
+Files: src/diff.c
+
+Patch 6.1b.027
+Problem: "vim --remote +" may cause a crash.
+Solution: Check for missing file name argument. (Martin Kahlert)
+Files: src/main.c
+
+Patch 6.1b.028 (extra)
+Problem: Win16: Can't compile after patch 6.1b.025.
+Solution: Add code specifically for Win16. (Vince Negri)
+Files: src/gui_w48.c
+
+Patch 6.1b.029
+Problem: Win32: When a directory on an NTFS partition is read/execute (no
+ delete,modify,write) and the file has modify rights, trying to
+ write the file deletes it. Making the file read/write/execute
+ (not delete) solves it. (Mark Canup)
+Solution: Use the Unix code to check for a writable directory. If not, then
+ make a backup copy and overwrite the file.
+Files: src/fileio.c
+
+Patch 6.1b.030 (extra)
+Problem: Mac: small mistake in the build script and prototypes.
+Solution: Fix the build script and add the prototypes. (Axel Kielhorn)
+Files: src/os_mac.build, src/gui_mac.c
+
+Patch 6.1b.031 (extra)
+Problem: Win32 GUI: ":set guifont=*" doesn't set 'guifont' to the resulting
+ font name. (Vlad Sandrini)
+Solution: Put the code back in gui_mch_init_font() to form the font name out
+ of the logfont.
+Files: src/gui_w48.c
+
+Patch 6.1b.032
+Problem: Athena: Setting a color scheme before the GUI has started causes a
+ crash. (Todd Blumer)
+Solution: Don't try using color names that haven't been set yet.
+Files: src/gui_athena.c
+
+Patch 6.1b.033
+Problem: When using a count after a ":s" command may get ml_get errors.
+ (Dietmar Lang)
+Solution: Check that the resulting range does not go past the end of the
+ buffer.
+Files: src/ex_cmds.c
+
+Patch 6.1b.034
+Problem: After sourcing mswin.vim, when using <C-S-Right> after
+ auto-indenting and then <Del>, get warning for allocating
+ ridiculous amount of memory. (Dave Delgreco)
+Solution: Adjust the start of the Visual area when deleting the auto-indent.
+Files: src/edit.c
+
+Patch 6.1b.035
+Problem: When using evim, dropping a file on Vim and then double clicking
+ on a word, it is changed to "i". (Merlin Hansen)
+Solution: Reset need_start_insertmode after editing the file.
+Files: src/ex_docmd.c
+
+
+==============================================================================
+VERSION 6.2 *version-6.2*
+
+This section is about improvements made between version 6.1 and 6.2.
+
+This is mainly a bug-fix release. There are also a few new features.
+
+Main new features:
+- Support for GTK 2. (Daniel Elstner)
+- Support for editing Arabic text. (Nadim Shaikli & Isam Bayazidi)
+- ":try" command and exception handling. (Servatius Brandt)
+- Support for the neXtaw GUI toolkit (mostly like Athena). (Alexey Froloff)
+- Cscope support for Win32. (Khorev Sergey)
+- Support for PostScript printing in various 8-bit encodings. (Mike Williams)
+
+
+Changed *changed-6.2*
+-------
+
+Removed the scheme indent file, the internal Lisp indenting works well now.
+
+Moved the GvimEXt, OleVim and VisVim directories into the "src" directory.
+This is more consistent with how xxd is handled.
+
+The VisVim.dll file is installed in the top directory, next to gvimext.dll,
+instead of in a subdirectory "VisVim". Fixes that NSIS was uninstalling it
+from the wrong directory.
+
+Removed the art indent file, it didn't do anything.
+
+submatch() returned line breaks with CR instead of LF.
+
+Changed the Win32 Makefiles to become more uniform and compile gvimext.dll.
+(Dan Sharp)
+
+'cindent': Align a "//" comment with a "//" comment in a previous line.
+(Helmut Stiegler)
+
+Previously only for xterm-like terminals parent widgets were followed to find
+the title and icon label. Now do this for all terminal emulators.
+
+Made it possible to recognize backslashes for "%" matching. The 'M' flag in
+'cpoptions' disables it. (Haakon Riiser)
+
+Removed the Make_tcc.mak makefile for Turbo C. It didn't work and we probably
+can't make it work (the compiler runs out of memory).
+
+Even though the documentation refers to keywords, "[ CTRL-D" was using
+'isident' to find matches. Changed it to use 'iskeyword'. Also applies to
+other commands that search for defined words in included files such as
+":dsearch", "[D" and "[d".
+
+Made 'keywordprg' global-local. (Christian Robinson)
+
+Enabled the Netbeans interface by default. Reversed the configure argument
+from "--enable-netbeans" to "--disable-netbeans".
+
+
+Added *added-6.2*
+-----
+
+New options:
+ 'arabic'
+ 'arabicshape'
+ 'ambiwidth'
+ 'autochdir'
+ 'casemap'
+ 'copyindent'
+ 'cscopequickfix'
+ 'preserveindent'
+ 'printencoding'
+ 'rightleftcmd'
+ 'termbidi'
+ 'toolbariconsize'
+ 'winfixheight'
+
+New keymaps:
+ Serbian (Aleksandar Veselinovic)
+ Chinese Pinyin (Fredrik Roubert)
+ Esperanto (Antoine J. Mechelynck)
+
+New syntax files:
+ Valgrind (Roger Luethi)
+ Smarty template (Manfred Stienstra)
+ MySQL (Kenneth Pronovici)
+ RockLinux package description (Piotr Esden-Tempski)
+ MMIX (Dirk Huesken)
+ gkrellmrc (David Necas)
+ Tilde (Tobias Rundtrom)
+ Logtalk (Paulo Moura)
+ PLP (Juerd Waalboer)
+ fvwm2m4 (David Necas)
+ IPfilter (Hendrik Scholz)
+ fstab (Radu Dineiu)
+ Quake (Nikolai Weibull)
+ Occam (Mario Schweigler)
+ lpc (Shizhu Pan)
+ Exim conf (David Necas)
+ EDIF (Artem Zankovich)
+ .cvsrc (Nikolai Weibull)
+ .fetchmailrc (Nikolai Weibull)
+ GNU gpg (Nikolai Weibull)
+ Grub (Nikolai Weibull)
+ Modconf (Nikolai Weibull)
+ RCS (Dmitry Vasiliev)
+ Art (Dorai Sitaram)
+ Renderman Interface Bytestream (Andrew J Bromage)
+ Mailcap (Doug Kearns)
+ Subversion commit file (Dmitry Vasiliev)
+ Microsoft IDL (Vadim Zeitlin)
+ WildPackets EtherPeek Decoder (Christopher Shinn)
+ Spyce (Rimon Barr)
+ Resolv.conf (Radu Dineiu)
+ A65 (Clemens Kirchgatterer)
+ sshconfig and sshdconfig (David Necas)
+ Cheetah and HTMLCheetah (Max Ischenko)
+ Packet filter (Camiel Dobbelaar)
+
+New indent files:
+ Eiffel (David Clarke)
+ Tilde (Tobias Rundtrom)
+ Occam (Mario Schweigler)
+ Art (Dorai Sitaram)
+ PHP (Miles Lott)
+ Dylan (Brent Fulgham)
+
+New tutor translations:
+ Slovak (Lubos Celko)
+ Greek (Christos Kontas)
+ German (Joachim Hofmann)
+ Norwegian (Øyvind Holm)
+
+New filetype plugins:
+ Occam (Mario Schweigler)
+ Art (Dorai Sitaram)
+ ant.vim, aspvbs.vim, config.vim, csc.vim, csh.vim, dtd.vim, html.vim,
+ jsp.vim, pascal.vim, php.vim, sgml.vim, sh.vim, svg.vim, tcsh.vim,
+ xhtml.vim, xml.vim, xsd.vim. (Dan Sharp)
+
+New compiler plugins:
+ Checkstyle (Doug Kearns)
+ g77 (Ralf Wildenhues)
+ fortran (Johann-Guenter Simon)
+ Xmllint (Doug Kearns)
+ Ruby (Tim Hammerquist)
+ Modelsim vcom (Paul Baleme)
+
+New menu translations:
+ Brazilian (José de Paula)
+ British (Mike Williams)
+ Korean in UTF-8. (Nam SungHyun)
+ Norwegian (Øyvind Holm)
+ Serbian (Aleksandar Jelenak)
+
+New message translation for Norwegian. (Øyvind Holm)
+
+New color scheme:
+ desert (Hans Fugal)
+
+Arabic specific features. 'arabicshape', 'termbidi', 'arabic' and
+'rightleftcmd' options. (Nadim Shaikli & Isam Bayazidi)
+
+Support for neXtaw GUI toolkit, mostly like Athena. (Alexey Froloff)
+
+Win32: cscope support. (Khorev Sergey)
+
+VMS: various improvements to documentation and makefiles. (Zoltan Arpadffy)
+
+Added "x" key to the explorer plugin: execute the default action. (Yasuhiro
+Matsumoto)
+
+Compile gvimext.dll with MingW. (Rene de Zwart)
+
+Add the "tohtml.vim" plugin. It defines the ":TOhtml" user command, an easy
+way to convert text to HTML.
+
+Added ":try" / ":catch" / ":finally" / ":endtry" commands. Add E999 numbers
+to all error messages, so that they can be caught by the number.
+(Servatius Brandt)
+Moved part of ex_docmd.c to the new ex_eval.c source file.
+
+Include support for GTK+ 2.2.x (Daniel Elstner)
+Adds the "~" register: drag & drop text.
+Adds the 'toolbariconsize' option.
+Add -Dalloca when running lint to work around a problem with alloca()
+prototype.
+
+When selecting an item in the error window to jump to, take some effort to
+find an ordinary window to show the file in (not a preview window).
+
+Support for PostScript printing of various 8-bit encodings. (Mike Williams)
+
+inputdialog() accepts a third argument that is used when the dialog is
+cancelled. Makes it possible to see a difference between cancelling and
+entering nothing.
+
+Included Aap recipes. Can be used to update Vim to the latest version,
+building and installing.
+
+"/" option in 'cinoptions': extra indent for comment lines. (Helmut Stiegler)
+
+Vim variable "v:register" and functions setreg(), getreg() and getregtype().
+(Michael Geddes)
+
+"v" flag in 'cpoptions': Leave text on screen with backspace in Insert mode.
+(Phillip Vandry)
+
+Dosinst.exe also finds gvimext.dll in the "GvimExt" directory. Useful when
+running install in the "src" directory for testing.
+
+Support tag files that were sorted with case ignored. (Flemming Madsen)
+
+When completing a wildcard in a leading path element, as in "../*/Makefile",
+only the last part ("Makefile") was listed. Support custom defined
+command line completion. (Flemming Madsen)
+
+Also recognize "rxvt" as an xterm-like terminal. (Tomas Styblo)
+
+Proper X11 session management. Fixes that the WM_SAVE_YOURSELF event was not
+used by popular desktops. (Neil Bird)
+Not used for Gnome 2, it has its own handling.
+
+Support BOR, DEBUG and SPAWNO arguments for the Borland 3 Makefile. (Walter
+Briscoe)
+
+Support page breaks for printing. Adds the "formfeed" field in
+'printoptions'. (Mike Williams)
+
+Mac OSX: multi-language support: iconv and gettext. (Muraoka Taro, Axel
+Kielhorn)
+
+"\Z" flag in patterns: ignore differences in combining characters. (Ron Aaron)
+
+Added 'preserveindent' and 'copyindent' options. They use existing white
+space characters instead of using Tabs as much as possible. (Chris Leishman)
+
+Updated Unicode tables to Unicode 4.0. (Raphael Finkel)
+
+Support for the mouse wheel in rxvt. (AIDA Shinra)
+
+Win32: Added ":8" file modifier to get short filename. Test50 tests the ":8"
+expansion on Win32 systems. (Michael Geddes)
+
+'cscopequickfix' option: Open quickfix window for Cscope commands. Also
+cleanup the code for giving messages. (Khorev Sergey)
+
+GUI: Support more than 222 columns for mouse positions.
+
+":stopinsert" command: Don't return to Insert mode.
+
+"interrupt" command for debug mode. Useful for simulating CTRL-C. (Servatius
+Brandt)
+
+
+Fixed *fixed-6.2*
+-----
+
+Removed a few unused #defines from config.h.in, os_os2_cfg.h and os_vms_conf.h.
+
+The Vim icons in PNG format didn't have a transparent background. (Greg
+Roelofs)
+
+Fixed a large number of spelling mistakes in the docs. (Adri Verhoef)
+
+The #defines for prototype generation were causing trouble. Changed them to
+typedefs.
+
+A new version of libintl.h uses __asm__, which confuses cproto. Define a
+dummy __asm__ macro.
+
+When 'virtualedit' is set can't move to halfway an unprintable character.
+Cripples CTRL-V selection. (Taro Muraoka)
+Allow moving to halfway an unprintable character. Don't let getvvcol() change
+the pos->coladd argument.
+
+When a tab wraps to the next line, 'listchars' is set and 'foldcolumn' is
+non-zero, only one character of the foldcolumn is highlighted. (Muraoka Taro)
+
+When using ":catch" without an argument Vim crashes. (Yasuhiro Matsumoto)
+When no argument given use the ".*" pattern.
+
+Win32: When gvim.exe is started from a shortcut with the window style property
+set to maximize Vim doesn't start with a maximized window. (Yasuhiro
+Matsumoto) Open the window with the default size and don't call ShowWindow()
+again when it's already visible. (Helmut Stiegler)
+
+gui_gtk.c used MAX, but it's undefined to avoid a conflict with system header
+files.
+
+Win32: When closing a window from a mapping some pixels remain on the
+statusline. (Yasuhiro Matsumoto)
+
+A column number in an errorformat that goes beyond the end of the line may
+cause a crash.
+
+":throw 'test'" crashes Vim. (Yasuhiro Matsumoto)
+
+The file selector's scrollbar colors are not set after doing a ":hi Scrollbar
+guifg=color". And the file selector's colors are not changed by the
+colorscheme command. (David Harrison)
+
+Motif: When compiling with FEAT_FOOTER defined, the text area gets a few
+pixels extra space on the right. Remove the special case in
+gui_get_base_width(). (David Harrison)
+
+Using CTRL-R CTRL-P in Insert mode puts the '] mark in the wrong position.
+(Helmut Stiegler)
+
+When 'formatoptions' includes "awct" a non-comment wasn't auto-formatted.
+
+Using a "--cmd" argument more than 10 times caused a crash.
+
+DEC style mouse support didn't work if the page field is not empty.
+(Uribarri)
+
+"vim -l one two" did only set 'lisp' in the first file. Vi does it for every
+file.
+
+":set tw<" didn't work. Was checking for '^' instead of '<'.
+
+In ":hardcopy > %.ps" the "%" was not expanded to the current filename.
+
+Made ":redraw" also update the Visual area.
+
+When a not implemented command, such as ":perl", has wrong arguments the less
+important error was reported, giving the user the idea the command could work.
+
+On non-Unix systems autocommands for writing did not attempt a match with the
+short file name, causing a pattern like "a/b" to fail.
+
+VMS: e_screenmode was not defined and a few other fixes for VMS. (Zoltan
+Arpadffy)
+
+redraw_msg() depended on FEAT_ARABIC instead of FEAT_RIGHTLEFT. (Walter
+Briscoe)
+
+Various changes for the PC Makefiles. (Walter Briscoe)
+
+Use _truename() instead of our own code to expand a file name into a full
+path. (Walter Briscoe)
+
+Error in filetype check for /etc/modutils. (Lubomir Host)
+
+Cscope interface: allocated a buffer too small.
+
+Win16: remove a trailing backslash from a path when obtaining the permission
+flags. (Vince Negri)
+
+When searching for tags with case ignored Vim could hang.
+
+When searching directories with a stopdir could get a crash. Did not
+re-allocate enough memory. (Vince Negri)
+
+A user command may cause a crash. Don't use the command index when it's
+negative. (Vince Negri)
+
+putenv() didn't work for MingW and Cygwin. (Dan Sharp)
+
+Many functions were common between os_msdos.c and os_win16.c. Use os_msdos.c
+for compiling the Win16 version and remove the functions from os_win16.c.
+(Vince Negri)
+
+For terminals that behave like an xterm but didn't have a name that is
+recognized, the window title would not always be set.
+
+When syntax highlighting is off ":hardcopy" could still attempt printing
+colors.
+
+Crash when using ":catch" without an argument. (Servatius Brandt)
+
+Win32: ":n #" doubled the backslashes.
+
+Fixed Arabic shaping for the command line. (Nadim Shaikli)
+
+Avoid splitting up a string displayed on the command line into individual
+characters, it breaks Arabic shaping.
+
+Updated Cygwin and MingW makefiles to use more dependencies. (Dan Sharp)
+
+2html.vim didn't work with 'nomagic' set.
+
+When a local argument list is used and doing ":only" Vim could crash later.
+(Muraoka Taro)
+
+When using "%P" in 'statusline' and the fillchar is "-", a percentage of 3%
+could result in "-3%". Also avoid changing a space inside a filename to the
+fill character.
+
+MSwin: Handling of backslashes and double quotes for command line arguments
+was not like what other applications do. (Walter Briscoe)
+
+Test32 sometimes didn't work, because test11.out was written as TEST11.OUT.
+
+Avoid pointer conversions warnings for Borland C 5.5 in dosinst.c and
+uninstal.c.
+
+More improvements for Make_bc3.mak file. (Walter Briscoe)
+
+When ":syn sync linebreaks=1" is used, editing the first line caused a redraw
+of the whole screen.
+
+Making translated messages didn't work, if_perl.xs wasn't found. (Vlad
+Sandrini)
+
+Motif and Athena: moving Vim to the foreground didn't uniconify it. Use
+XMapRaised() instead of XRaiseWindow(). (Srikanth Sankaran)
+
+When using ":ptag" in a window where 'scrollbind' is set the preview window
+would also have 'scrollbind' set. Also reset 'foldcolumn' and 'diff'.
+
+Various commands that split a window took over 'scrollbind', which is hardly
+ever desired. Esp. for "q:" and ":copen". Mostly reset 'scrollbind' when
+splitting a window.
+
+When 'shellslash' is set in the vimrc file the first entry of ":scriptnames"
+would still have backslashes. Entries in the quickfix list could also have
+wrong (back)slashes.
+
+Win32: printer dialog texts were not translated. (Yasuhiro Matsumoto)
+
+When using a multi-byte character with a K_SPECIAL byte or a special key code
+with "--remote-send" the received byte sequence was mangled. Put it in the
+typeahead buffer instead of the input buffer.
+
+Win32: The cursor position was incorrect after changing cursor shape.
+(Yasuhiro Matsumoto).
+
+Win32: When 'encoding' is not the current codepage the title could not be set
+to non-ascii characters.
+
+"vim -d scp://machine/file1 scp://machine/file2" did not work, there was only
+one window. Fixed the netrw plugin not to wipe out the buffer if it is
+displayed in other windows.
+
+"/$" caused "e" in last column of screen to disappear, a highlighted blank was
+displayed instead.
+
+":s/ *\ze\n//e" removed the line break and introduced arbitrary text. Was
+using the line count including what matched after the "\ze".
+
+Using the "c" flag with ":s" changed the behavior when a line break is
+replaced and "\@<=" is used. Without "c" a following match was not found.
+
+":%s/\vA@<=\nB@=//gce" got stuck on "A\nB" when entering "n".
+
+VMS: add HAVE_STRFTIME in the config file. (Zoltan Arpadffy)
+
+When a delete prompts if a delete should continue when yanking is not
+possible, restore msg_silent afterwards.
+
+":sign" did not complain about a missing argument.
+
+When adding or deleting a sign 'hlsearch' highlighting could disappear.
+Use the generic functions for updating signs.
+
+On MS-Windows NT, 2K and XP don't use command.com but cmd.exe for testing.
+Makes the tests work on more systems.
+
+In the DOS tests don't create "/tmp" to avoid an error.
+
+Mac classic: Problems with reading files with CR vs CR/LF. Rely on the
+library version of fgets() to work correctly for Metrowerks 2.2. (Axel
+Kielhorn)
+
+When typing a password a "*" was shown for each byte instead of for each
+character. Added multi-byte handling to displaying the stars. (Yasuhiro
+Matsumoto)
+
+When using Perl 5.6 accessing $curbuf doesn't work. Add an #ifdef to use
+different code for 5.6 and 5.8. (Dan Sharp)
+
+MingW and Cygwin: Don't strip the debug executable. (Dan Sharp)
+
+An assignment to a variable with curlies that includes "==" doesn't work.
+Skip over the curlies before searching for an "=". (Vince Negri)
+
+When cancelling the selection of alternate matching tags the tag stack index
+could be advanced too far, resulting in an error message when using CTRL-T.
+
+
+Patch 6.1.001
+Problem: When formatting UTF-8 text it might be wrapped at a space that is
+ followed by a composing character. (Raphael Finkel)
+ Also correct a display error for removing a composing char on top
+ of a space.
+Solution: Check for a composing character on a space.
+Files: src/edit.c, src/misc1.c, src/screen.c
+
+Patch 6.1.002 (extra)
+Problem: Win32: after a ":popup" command the mouse pointer stays hidden.
+Solution: Unhide the mouse pointer before showing the menu.
+Files: src/gui_w48.c
+
+Patch 6.1.003
+Problem: When 'laststatus' is zero and there is a vertical split, the
+ vertical separator is drawn in the command line. (Srikant
+ Sankaran)
+Solution: Don't draw the vertical separator where there is no statusline.
+Files: src/screen.c
+
+Patch 6.1.004
+Problem: Unicode 3.2 changes width and composing of a few characters.
+ (Markus Kuhn)
+Solution: Adjust the Unicode functions for the character width and composing
+ characters.
+Files: src/mbyte.c
+
+Patch 6.1.005
+Problem: When using more than 50 items in 'statusline' Vim might crash.
+ (Steve Hall)
+Solution: Increment itemcnt in check_stl_option(). (Flemming Madsen)
+Files: src/option.c
+
+Patch 6.1.006
+Problem: When using "P" in Visual mode to put linewise selected text, the
+ wrong text is deleted. (Jakub Turski)
+Solution: Put the text before the Visual area and correct the text to be
+ deleted for the inserted lines.
+ Also fix that "p" of linewise text in Visual block mode doesn't
+ work correctly.
+Files: src/normal.c, src/ops.c
+
+Patch 6.1.007
+Problem: Using ":filetype plugin off" when filetype plugins were never
+ enabled causes an error message. (Yiu Wing)
+Solution: Use ":silent!" to avoid the error message.
+Files: runtime/ftplugof.vim
+
+Patch 6.1.008
+Problem: The "%" command doesn't ignore \" inside a string, it's seen as
+ the end of the string. (Ken Clark)
+Solution: Skip a double quote preceded by an odd number of backslashes.
+Files: src/search.c
+
+Patch 6.1.009
+Problem: Vim crashes when using a huge number for the maxwid value in a
+ statusline. (Robert M. Nowotniak)
+Solution: Check for an overflow that makes maxwid negative.
+Files: src/buffer.c
+
+Patch 6.1.010
+Problem: Searching backwards for a question mark with "?\?" doesn't work.
+ (Alan Isaac) Same problem in ":s?\??" and ":g?\??".
+Solution: Change the "\?" in a pattern to "?" when using "?" as delimiter.
+Files: src/ex_cmds.c, src/ex_docmd.c, src/proto/regexp.pro, src/regexp.c,
+ src/search.c, src/syntax.c, src/tag.c
+
+Patch 6.1.011
+Problem: XIM: doesn't work correctly when 'number' is set. Also, a focus
+ problem when selecting candidates.
+Solution: Fix the XIM problems. (Yasuhiro Matsumoto)
+Files: src/mbyte.c, src/screen.c
+
+Patch 6.1.012
+Problem: A system() call might fail if fread() does CR-LF to LF
+ translation.
+Solution: Open the output file in binary mode. (Pavol Huhas)
+Files: src/misc1.c
+
+Patch 6.1.013
+Problem: Win32: The default for 'printexpr' doesn't work when there are
+ special characters in 'printdevice'.
+Solution: Add double quotes around the device name. (Mike Williams)
+Files: runtime/doc/option.txt, src/option.c
+
+Patch 6.1.014
+Problem: An operator like "r" used in Visual block mode doesn't use
+ 'virtualedit' when it's set to "block".
+Solution: Check for 'virtualedit' being active in Visual block mode when the
+ operator was started.
+Files: src/ex_docmd.c, src/globals.h, src/misc2.c, src/normal.c,
+ src/ops.c, src/undo.c
+
+Patch 6.1.015
+Problem: After patch 6.1.014 can't compile with tiny features. (Christian
+ J. Robinson)
+Solution: Add the missing define of virtual_op.
+Files: src/vim.h
+
+Patch 6.1.016 (extra)
+Problem: Win32: Outputting Hebrew or Arabic text might have a problem with
+ reversing.
+Solution: Replace the RevOut() function with ETO_IGNORELANGUAGE. (Ron Aaron)
+Files: src/gui_w32.c
+
+Patch 6.1.017
+Problem: Cygwin: After patch 6.1.012 Still doesn't do binary file I/O.
+ (Pavol Juhas)
+Solution: Define BINARY_FILE_IO for Cygwin.
+Files: src/os_unix.h
+
+Patch 6.1.018
+Problem: Error message when using cterm highlighting. (Leonardo Di Lella)
+Solution: Remove a backslash before a question mark.
+Files: runtime/syntax/cterm.vim
+
+Patch 6.1.019 (extra)
+Problem: Win32: File name is messed up when editing just a drive name.
+ (Walter Briscoe)
+Solution: Append a NUL after the drive name. (Vince Negri)
+Files: src/os_win32.c
+
+Patch 6.1.020
+Problem: col("'>") returns a huge number after using Visual line mode.
+Solution: Return the length of the line instead.
+Files: src/eval.c
+
+Patch 6.1.021 (depends on patch 6.1.009)
+Problem: Vim crashes when using a huge number for the minwid value in a
+ statusline. (Robert M. Nowotniak)
+Solution: Check for an overflow that makes minwid negative.
+Files: src/buffer.c
+
+Patch 6.1.022
+Problem: Grabbing the status line above the command-line window works like
+ the bottom status line was grabbed. (Jim Battle)
+Solution: Make it possible to grab the status line above the command-line
+ window, so that it can be resized.
+Files: src/ui.c
+
+Patch 6.1.023 (extra)
+Problem: VMS: running tests doesn't work properly.
+Solution: Adjust the makefile. (Zoltan Arpadffy)
+Files: src/testdir/Make_vms.mms
+
+Patch 6.1.024
+Problem: When header files use a new syntax for declaring functions, Vim
+ can't figure out missing prototypes properly.
+Solution: Accept braces around a function name. (M. Warner Losh)
+Files: src/osdef.sh
+
+Patch 6.1.025
+Problem: Five messages for "vim --help" don't start with a capital. (Vlad
+ Sandrini)
+Solution: Make the messages consistent.
+Files: src/main.c
+
+Patch 6.1.026
+Problem: *.patch files are not recognized as diff files. In a script a
+ "VAR=val" argument after "env" isn't ignored. PHP scripts are not
+ recognized.
+Solution: Add *.patch for diff filetypes. Ignore "VAR=val". Recognize PHP
+ scripts. (Roman Neuhauser)
+Files: runtime/filetype.vim, runtime/scripts.vim
+
+Patch 6.1.027
+Problem: When 'foldcolumn' is non-zero, a special character that wraps to
+ the next line disturbs the foldcolumn highlighting. (Yasuhiro
+ Matsumoto)
+Solution: Only use the special highlighting when drawing text characters.
+Files: src/screen.c
+
+Patch 6.1.028
+Problem: Client-server: When a --remote-expr fails, Vim still exits with
+ status zero.
+Solution: Exit Vim with a non-zero status to indicate the --remote-expr
+ failed. (Thomas Scott Urban)
+Files: src/main.c
+
+Patch 6.1.029
+Problem: When 'encoding' is an 8-bit encoding other than "latin1", editing
+ a utf-8 or other Unicode file uses the wrong conversion. (Jan
+ Fedak)
+Solution: Don't use Unicode to latin1 conversion for 8-bit encodings other
+ than "latin1".
+Files: src/fileio.c
+
+Patch 6.1.030
+Problem: When CTRL-N is mapped in Insert mode, it is also mapped after
+ CTRL-X CTRL-N, while it is not mapped after CTRL-X CTRL-F.
+ (Kontra Gergely)
+Solution: Don't map CTRL-N after CTRL-X CTRL-N. Same for CTRL-P.
+Files: src/getchar.c
+
+Patch 6.1.031
+Problem: Cygwin: Xxd could read a file in text mode intead of binary mode.
+Solution: Use "rb" or "rt" when needed. (Pavol Juhas)
+Files: src/xxd/xxd.c
+
+Patch 6.1.032
+Problem: Can't specify a quickfix file without jumping to the first error.
+Solution: Add the ":cgetfile" command. (Yegappan Lakshmanan)
+Files: runtime/doc/index.txt, runtime/doc/quickfix.txt, src/ex_cmds.h,
+ src/quickfix.c
+
+Patch 6.1.033
+Problem: GUI: When the selection is lost and the Visual highlighting is
+ changed to underlining, the cursor is left in a different
+ position. (Christian Michon)
+Solution: Update the cursor position after redrawing the selection.
+Files: src/ui.c
+
+Patch 6.1.034
+Problem: A CVS diff file isn't recognized as diff filetype.
+Solution: Skip lines starting with "? " before checking for an "Index:" line.
+Files: runtime/scripts.vim
+
+Patch 6.1.035 (extra, depends on 6.1.016)
+Problem: Win32: Outputting Hebrew or Arabic text might have a problem with
+ reversing on MS-Windows 95/98/ME.
+Solution: Restore the RevOut() function and use it in specific situations
+ only. (Ron Aaron)
+Files: src/gui_w32.c
+
+Patch 6.1.036
+Problem: This command may cause a crash: ":v/./,//-j". (Ralf Arens)
+Solution: Compute the right length of the regexp when it's empty.
+Files: src/search.c
+
+Patch 6.1.037
+Problem: When 'lazyredraw' is set, pressing "q" at the hit-enter prompt
+ causes an incomplete redraw and the cursor isn't positioned.
+ (Lubomir Host)
+Solution: Overrule 'lazyredraw' when do_redraw is set.
+Files: src/main.c, src/screen.c
+
+Patch 6.1.038
+Problem: Multi-byte: When a ":s" command contains a multi-byte character
+ where the trail byte is '~' the text is messed up.
+Solution: Properly skip multi-byte characters in regtilde() (Muraoka Taro)
+Files: src/regexp.c
+
+Patch 6.1.039
+Problem: When folds are defined and the file is changed outside of Vim,
+ reloading the file doesn't update the folds. (Anders
+ Schack-Nielsen)
+Solution: Recompute the folds after reloading the file.
+Files: src/fileio.c
+
+Patch 6.1.040
+Problem: When changing directory for expanding a file name fails there is
+ no error message.
+Solution: Give an error message for this situation. Don't change directory
+ if we can't return to the original directory.
+Files: src/diff.c, src/ex_docmd.c, src/globals.h, src/misc1.c,
+ src/os_unix.c
+
+Patch 6.1.041
+Problem: ":mkvimrc" doesn't handle a mapping that has a leading space in
+ the rhs. (Davyd Ondrejko)
+Solution: Insert a CTRL-V before the leading space. Also display leading
+ and trailing white space in <> form.
+Files: src/getchar.c, src/message.c
+
+Patch 6.1.042
+Problem: "vim -r" doesn't show all matches when 'wildignore' removes swap
+ files. (Steve Talley)
+Solution: Keep all matching swap file names.
+Files: src/memline.c
+
+Patch 6.1.043
+Problem: After patch 6.1.040 a few warnings are produced.
+Solution: Add a type cast to "char *" for mch_chdir(). (Axel Kielhorn)
+Files: src/diff.c, src/ex_docmd.c.c, src/misc1.c, src/os_unix.c
+
+Patch 6.1.044 (extra)
+Problem: GUI: When using the find/replace dialog with text that contains a
+ slash, an invalid substitute command is generated.
+ On Win32 a find doesn't work when 'insertmode' is set.
+Solution: Escape slashes with a backslash.
+ Make the Win32, Motif and GTK gui use common code for the
+ find/replace dialog.
+ Add the "match case" option for Motif and GTK.
+Files: src/feature.h, src/proto/gui.pro, src/gui.c, src/gui.h,
+ src/gui_motif.c, src/gui_gtk.c, src/gui_w48.c
+
+Patch 6.1.045
+Problem: In Visual mode, with lots of folds and 'scrolloff' set to 999,
+ moving the cursor down near the end of the file causes the text to
+ jump up and down. (Lubomir Host)
+Solution: Take into account that the cursor may be on the last line of a
+ closed fold.
+Files: src/move.c
+
+Patch 6.1.046
+Problem: X11 GUI: ":set lsp=2 gcr=n-v-i:hor1-blinkon0" draws a black
+ rectangle. ":set lsp=2 gcr=n-v-i:hor10-blinkon0" makes the cursor
+ disappear. (Nam SungHyun)
+Solution: Correctly compute the height of the horizontal cursor.
+Files: src/gui_gtk_x11.c, src/gui_x11.c
+
+Patch 6.1.047
+Problem: When skipping commands after an error was encountered, expressions
+ for ":if", ";elseif" and ":while" are still evaluated.
+Solution: Skip the expression after an error. (Servatius Brandt)
+Files: src/ex_docmd.c
+
+Patch 6.1.048
+Problem: Unicode 3.2 changes were missing a few Hangul Jamo characters.
+Solution: Recognize more characters as composing characters. (Jungshik Shin)
+Files: src/mbyte.c
+
+Patch 6.1.049 (extra)
+Problem: On a 32 bit display a valid color may cause an error message,
+ because its pixel value is negative. (Chris Paulson-Ellis)
+Solution: Check for -11111 instead of the color being negative.
+ Don't add one to the pixel value, -1 may be used for white.
+Files: src/globals.h, src/gui.c, src/gui.h, src/gui_amiga.c,
+ src/gui_athena.c, src/gui_beos.cc, src/gui_gtk_x11.c,
+ src/gui_mac.c, src/gui_motif.c, src/gui_photon.c,
+ src/gui_riscos.c, src/gui_w16.c, src/gui_w32.c, src/gui_w48.c,
+ src/gui_x11.c, src/mbyte.c, src/syntax.c
+
+Patch 6.1.050 (depends on 6.1.049)
+Problem: After patch 6.1.049 the non-GUI version doesn't compile.
+Solution: Add an #ifdef FEAT_GUI. (Robert Stanton)
+Files: src/syntax.c
+
+Patch 6.1.051 (depends on 6.1.044)
+Problem: Doesn't compile with GUI and small features.
+Solution: Adjust the #if for ga_append().
+Files: src/misc2.c
+
+Patch 6.1.052
+Problem: Unix: The executable() function doesn't work when the "which"
+ command isn't available.
+Solution: Go through $PATH manually. Also makes it work for VMS.
+Files: src/os_unix.c
+
+Patch 6.1.053
+Problem: When 'sessionoptions' contains "globals", or "localoptions" and an
+ option value contains a line break, the resulting script is wrong.
+Solution: Use "\n" and "\r" for a line break. (Srinath Avadhanula)
+Files: src/eval.c
+
+Patch 6.1.054
+Problem: GUI: A mouse click is not recognized at the more prompt, even when
+ 'mouse' includes 'r'.
+Solution: Recognize a mouse click at the more prompt.
+ Also accept a mouse click in the last line in the GUI.
+ Add "ml" entry in 'mouseshape'.
+Files: src/gui.c, src/message.c, src/misc1.c, src/misc2.c, src/option.c,
+ src/structs.h
+
+Patch 6.1.055
+Problem: When editing a compressed file, Vim will inspect the contents to
+ guess the filetype.
+Solution: Don't source scripts.vim for .Z, .gz, .bz2, .zip and .tgz files.
+Files: runtime/filetype.vim, runtime/plugin/gzip.vim
+
+Patch 6.1.056
+Problem: Loading the Syntax menu can take quite a bit of time.
+Solution: Add the "skip_syntax_sel_menu" variable. When its defined the
+ available syntax files are not in the Syntax menu.
+Files: runtime/doc/gui.txt, runtime/menu.vim
+
+Patch 6.1.057
+Problem: An ESC inside a mapping doesn't work as documented when
+ 'insertmode' is set, it does go from Visual or Normal mode to
+ Insert mode. (Benji Fisher)
+Solution: Make it work as documented.
+Files: src/normal.c
+
+Patch 6.1.058
+Problem: When there is a closed fold just above the first line in the
+ window, using CTRL-X CTRL-Y in Insert mode will show only one line
+ of the fold. (Alexey Marinichev)
+Solution: Correct the topline by putting it at the start of the fold.
+Files: src/move.c
+
+Patch 6.1.059
+Problem: ":redir > ~/file" doesn't work. (Stephen Rasku)
+Solution: Expand environment variables in the ":redir >" argument.
+Files: src/ex_docmd.c
+
+Patch 6.1.060
+Problem: When 'virtualedit' is set and 'selection' is "exclusive", deleting
+ a character just before a tab changes the tab into spaces. Undo
+ doesn't restore the tab. (Helmut Stiegler)
+Solution: Don't replace the tab by spaces when it's not needed. Correctly
+ save the line before it's changed.
+Files: src/ops.c
+
+Patch 6.1.061
+Problem: When 'virtualedit' is set and 'selection' is "exclusive", a Visual
+ selection that ends just after a tab doesn't include that tab in
+ the highlighting. (Helmut Stiegler)
+Solution: Use a different way to exclude the character under the cursor.
+Files: src/screen.c
+
+Patch 6.1.062
+Problem: The "man" filetype plugin doesn't work properly on Solaris 5.
+Solution: Use a different way to detect that "man -s" should be used. (Hugh
+ Sasse)
+Files: runtime/ftplugin/man.vim
+
+Patch 6.1.063
+Problem: Java indenting doesn't work properly.
+Solution: Ignore comments when checking if the indent doesn't increase after
+ a "}".
+Files: runtime/indent/java.vim
+
+Patch 6.1.064
+Problem: The URLs that the netrw plugin recognized for ftp and rcp did not
+ conform to the standard method://[user@]host[:port]/path.
+Solution: Use ftp://[user@]host[[:#]port]/path, which supports both the new
+ and the previous style. Also added a bit of dav/cadaver support.
+ (Charles Campbell)
+Files: runtime/plugin/netrw.vim
+
+Patch 6.1.065
+Problem: VMS: The colorscheme, keymap and compiler menus are not filled in.
+Solution: Ignore case when looking for ".vim" files. (Coen Engelbarts)
+Files: runtime/menu.vim
+
+Patch 6.1.066 (extra)
+Problem: When calling system() in a plugin reading stdin hangs.
+Solution: Don't set the terminal to RAW mode when it wasn't in RAW mode
+ before the system() call.
+Files: src/os_amiga.c, src/os_msdos.c, src/os_riscos.c, src/os_unix.c,
+ src/os_win16.c, src/os_win32.c
+
+Patch 6.1.067
+Problem: ":set viminfo+=f0" is not working. (Benji Fisher)
+Solution: Check the "f" flag instead of "'" in 'viminfo'.
+Files: src/mark.c
+
+Patch 6.1.068
+Problem: When a file is reloaded after it was changed outside of Vim, diff
+ mode isn't updated. (Michael Naumann)
+Solution: Invalidate the diff info so that it's updated when needed.
+Files: src/fileio.c
+
+Patch 6.1.069
+Problem: When 'showmatch' is set and "$" is in 'cpoptions', using
+ "C}<Esc>" may forget to remove the "$". (Preben Guldberg)
+Solution: Restore dollar_vcol after displaying the matching cursor position.
+Files: src/search.c
+
+Patch 6.1.070 (depends on 6.1.060)
+Problem: Compiler warning for signed/unsigned mismatch. (Mike Williams)
+Solution: Add a typecast to int.
+Files: src/ops.c
+
+Patch 6.1.071
+Problem: When 'selection' is exclusive, g CTRL-G in Visual mode counts one
+ character too much. (David Necas)
+Solution: Subtract one from the end position.
+Files: src/ops.c
+
+Patch 6.1.072
+Problem: When a file name in a tags file starts with http:// or something
+ else for which there is a BufReadCmd autocommand, the file isn't
+ opened anyway.
+Solution: Check if there is a matching BufReadCmd autocommand and try to
+ open the file.
+Files: src/fileio.c, src/proto/fileio.pro, src/tag.c
+
+Patch 6.1.073 (extra)
+Problem: BC5: Can't easily specify a tiny, small, normal, big or huge
+ version.
+Solution: Allow selecting the version with the FEATURES variable. (Ajit
+ Thakkar)
+Files: src/Make_bc5.mak
+
+Patch 6.1.074
+Problem: When 'cdpath' includes "../..", changing to a directory in which
+ we currently already are doesn't work. ff_check_visited() adds
+ the directory both when using it as the root for searching and for
+ the actual matches. (Stephen Rasku)
+Solution: Use a separate list for the already searched directories.
+Files: src/misc2.c
+
+Patch 6.1.075 (depends on 6.1.072)
+Problem: Can't compile fileio.c on MS-Windows.
+Solution: Add a declaration for the "p" pointer. (Madoka Machitani)
+Files: src/fileio.c
+
+Patch 6.1.076 (extra)
+Problem: Macintosh: explorer plugin doesn't work on Mac Classic.
+ IME doesn't work. Dialog boxes don't work on Mac OS X
+Solution: Fix explorer plugin and key modifiers. (Axel Kielhorn)
+ Fix IME support. (Muraoka Taro)
+ Disable dialog boxes. (Benji Fisher)
+Files: src/edit.c, src/feature.h, src/gui_mac.c, src/os_mac.c
+
+Patch 6.1.077
+Problem: On a Debian systEm wht ACL linking fails. (Lubomir Host)
+Solution: When the "acl" library is used, check if the "attr" library is
+ present and use it.
+Files: src/auto/configure, src/configure.in, src/link.sh
+
+Patch 6.1.078
+Problem: When using 'foldmethod' "marker" and the end marker appears before
+ the start marker in the file, no fold is found. (Nazri Ramliy)
+Solution: Don't let the fold depth go negative.
+Files: src/fold.c
+
+Patch 6.1.079
+Problem: When using "s" in Visual block mode with 'virtualedit' set, when
+ the selected block is after the end of some lines the wrong text
+ is inserted and some lines are skipped. (Servatius Brandt)
+Solution: Insert the right text and extend short lines.
+Files: src/ops.c
+
+Patch 6.1.080
+Problem: When using gcc with /usr/local already in the search path, adding
+ it again causes problems.
+Solution: Adjust configure.in to avoid adding /usr/local/include and
+ /usr/local/lib when using GCC and they are already used. (Johannes
+ Zellner)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.081
+Problem: ":help CTRL-\_CTRL-N" doesn't work. (Christian J. Robinson)
+Solution: Double the backslash to avoid the special meaning of "\_".
+Files: src/ex_cmds.c
+
+Patch 6.1.082
+Problem: On MS-Windows the vimrc_example.vim script is sourced and then
+ mswin.vim. This enables using select mode, but since "p" is
+ mapped it doesn't replace the selection.
+Solution: Remove the mapping of "p" from vimrc_example.vim, it's obsolete.
+ (Vlad Sandrini)
+Files: runtime/vimrc_example.vim
+
+Patch 6.1.083
+Problem: When $LANG is "sk" or "sk_sk", the Slovak menu file isn't found.
+ (Martin Lacko)
+Solution: Guess the right menu file based on the system.
+Files: runtime/lang/menu_sk_sk.vim
+
+Patch 6.1.084 (depends on 6.1.080)
+Problem: "include" and "lib" are mixed up when checking the directories gcc
+ already searches.
+Solution: Swap the variable names. (SunHo Kim)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.085
+Problem: When using CTRL-O CTRL-\ CTRL-N from Insert mode, the displayed
+ mode "(insert)" isn't removed. (Benji Fisher)
+Solution: Clear the command line.
+Files: src/normal.c
+
+Patch 6.1.086 (depends on 6.1.049)
+Problem: The guifg color for CursorIM doesn't take effect.
+Solution: Use the foreground color when it's defined. (Muraoka Taro)
+Files: src/gui.c
+
+Patch 6.1.087
+Problem: A thesaurus with Japanese characters has problems with characters
+ in different word classes.
+Solution: Only separate words with single-byte non-word characters.
+ (Muraoka Taro)
+Files: src/edit.c
+
+Patch 6.1.088 (extra)
+Problem: Win32: no debugging info is generated. Tags file excludes .cpp
+ files.
+Solution: Add "/map" to compiler flags. Add "*.cpp" to ctags command.
+ (Muraoka Taro)
+Files: src/Make_mvc.mak
+
+Patch 6.1.089
+Problem: On BSDI systems there is no ss_sp field in stack_t. (Robert Jan)
+Solution: Use ss_base instead.
+Files: src/auto/configure, src/configure.in, src/config.h.in,
+ src/os_unix.c
+
+Patch 6.1.090
+Problem: CTRL-F gets stuck when 'scrolloff' is non-zero and there is a mix
+ of long wrapping lines and a non-wrapping line.
+Solution: Check that CTRL-F scrolls at least one line.
+Files: src/move.c
+
+Patch 6.1.091
+Problem: GTK: Can't change preeditstate without setting 'imactivatekey'.
+Solution: Add some code to change preeditstate for OnTheSpot. (Yasuhiro
+ Matsumoto)
+Files: src/mbyte.c
+
+Patch 6.1.092
+Problem: ":mapclear <buffer>" doesn't work. (Srikanth Adayapalam)
+Solution: Allow an argument for ":mapclear".
+Files: src/ex_cmds.h
+
+Patch 6.1.093 (extra)
+Problem: Mac and MS-Windows GUI: when scrolling while ":s" is working the
+ results can be messed up, because the cursor is moved.
+Solution: Disallow direct scrolling when not waiting for a character.
+Files: src/gui_mac.c, src/gui_w16.c, src/gui_w32.c, src/gui_w48.c
+
+Patch 6.1.094
+Problem: Cygwin: Passing a file name that has backslashes isn't handled
+ very well.
+Solution: Convert file name arguments to Posix. (Chris Metcalf)
+Files: src/main.c
+
+Patch 6.1.095
+Problem: When using signs can free an item on the stack.
+ Overruling sign colors doesn't work. (Srikanth Sankaran)
+Solution: Don't free the item on the stack. Use NULL instead of "none" for
+ the value of the color.
+Files: src/gui_x11.c
+
+Patch 6.1.096
+Problem: When erasing the right halve of a double-byte character, it may
+ cause further characters to be erased. (Yasuhiro Matsumoto)
+Solution: Make sure only one character is erased.
+Files: src/screen.c
+
+Patch 6.1.097 (depends on 6.1.090)
+Problem: When 'scrolloff' is set to a huge value, CTRL-F at the end of the
+ file scrolls one line. (Lubomir Host)
+Solution: Don't scroll when CTRL-F detects the end-of-file.
+Files: src/move.c
+
+Patch 6.1.098
+Problem: MS-Windows: When the xxd program is under "c:\program files" the
+ "Convert to Hex" menu doesn't work. (Brian Mathis)
+Solution: Put the path to xxd in double quotes.
+Files: runtime/menu.vim
+
+Patch 6.1.099
+Problem: Memory corrupted when closing a fold with more than 99999 lines.
+Solution: Allocate more space for the fold text. (Walter Briscoe)
+Files: src/eval.c
+
+Patch 6.1.100 (extra, depends on 6.1.088)
+Problem: Win32: VC5 and earlier don't support the /mapinfo option.
+Solution: Add "/mapinfo" only when "MAP=lines" is specified. (Muraoka Taro)
+Files: src/Make_mvc.mak
+
+Patch 6.1.101
+Problem: After using ":options" the tabstop of a new window is 15. Entry
+ in ":options" window for 'autowriteall' is wrong. (Antoine J
+ Mechelynck) Can't insert a space in an option value.
+Solution: Use ":setlocal" instead of ":set". Change "aw" to "awa".
+ Don't map space in Insert mode.
+Files: runtime/optwin.vim
+
+Patch 6.1.102
+Problem: Unprintable and multi-byte characters in a statusline item are not
+ truncated correctly. (Yasuhiro Matsumoto)
+Solution: Count the width of characters instead of the number of bytes.
+Files: src/buffer.c
+
+Patch 6.1.103
+Problem: A function returning from a while loop, with 'verbose' set to 12
+ or higher, doesn't mention the return value. A function with the
+ 'abort' attribute may return -1 while the verbose message says
+ something else.
+Solution: Move the verbose message about returning from a function to
+ call_func(). (Servatius Brandt)
+Files: src/eval.c
+
+Patch 6.1.104
+Problem: GCC 3.1 appears to have an optimizer problem that makes test 3
+ crash.
+Solution: For GCC 3.1 add -fno-strength-reduce to avoid the optimizer bug.
+ Filter out extra info from "gcc --version".
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.105
+Problem: Win32: The default for 'shellpipe' doesn't redirect stderr. (Dion
+ Nicolaas)
+Solution: Redirect stderr, depending on the shell (like for 'shellredir').
+Files: src/option.c
+
+Patch 6.1.106
+Problem: The maze program crashes.
+Solution: Change "11" to "27" and it works. (Greg Roelofs)
+Files: runtime/macros/maze/mazeansi.c
+
+Patch 6.1.107
+Problem: When 'list' is set the current line in the error window may be
+ displayed wrong. (Muraoka Taro)
+Solution: Don't continue the line after the $ has been displayed and the
+ rightmost column is reached.
+Files: src/screen.c
+
+Patch 6.1.108
+Problem: When interrupting a filter command such as "!!sleep 20" the file
+ becomes read-only. (Mark Brader)
+Solution: Only set the read-only flag when opening a buffer is interrupted.
+ When the shell command was interrupted, read the output that was
+ produced so far.
+Files: src/ex_cmds.c, src/fileio.c
+
+Patch 6.1.109
+Problem: When 'eadirection' is "hor", using CTRL-W = doesn't equalize the
+ window heights. (Roman Neuhauser)
+Solution: Ignore 'eadirection' for CTRL-W =
+Files: src/window.c
+
+Patch 6.1.110
+Problem: When using ":badd file" when "file" is already present but not
+ listed, it stays unlisted. (David Frey)
+Solution: Set 'buflisted'.
+Files: src/buffer.c
+
+Patch 6.1.111
+Problem: It's not possible to detect using the Unix sources on Win32 or Mac.
+Solution: Add has("macunix") and has("win32unix").
+Files: runtime/doc/eval.txt, src/eval.c
+
+Patch 6.1.112
+Problem: When using ":argdo", ":bufdo" or ":windo", CTRL-O doesn't go to
+ the cursor position from before this command but every position
+ where the argument was executed.
+Solution: Only remember the cursor position from before the ":argdo",
+ ":bufdo" and ":windo".
+Files: src/ex_cmds2.c, src/mark.c
+
+Patch 6.1.113
+Problem: ":bufdo bwipe" only wipes out half the buffers. (Roman Neuhauser)
+Solution: Decide what buffer to go to next before executing the command.
+Files: src/ex_cmds2.c
+
+Patch 6.1.114
+Problem: ":python import vim", ":python vim.current.buffer[0:0] = []" gives
+ a lalloc(0) error. (Chris Southern)
+Solution: Don't allocate an array when it's size is zero.
+Files: src/if_python.c
+
+Patch 6.1.115
+Problem: "das" on the white space at the end of a paragraph does not delete
+ the "." the sentence ends with.
+Solution: Don't exclude the last character when it is not white space.
+Files: src/search.c
+
+Patch 6.1.116
+Problem: When 'endofline' is changed while 'binary' is set a file should be
+ considered modified. (Olaf Buddenhagen)
+Solution: Remember the 'eol' value when editing started and consider the
+ file changed when the current value is different and 'binary' is
+ set. Also fix that the window title isn't updated when 'ff' or
+ 'bin' changes.
+Files: src/option.c, src/structs.h
+
+Patch 6.1.117
+Problem: Small problem with editing a file over ftp: and with Cygwin.
+Solution: Remove a dot from a ":normal" command. Use "cygdrive" where
+ appropriate. (Charles Campbell)
+Files: runtime/plugin/netrw.vim
+
+Patch 6.1.118
+Problem: When a file in diff mode is reloaded because it changed outside
+ of Vim, other windows in diff mode are not always updated.
+ (Michael Naumann)
+Solution: After reloading a file in diff mode mark all windows in diff mode
+ for redraw.
+Files: src/diff.c
+
+Patch 6.1.119 (extra)
+Problem: With the Sniff interface, using Sniff 4.0.X on HP-UX, there may be
+ a crash when connecting to Sniff.
+Solution: Initialize sniff_rq_sep such that its value can be changed.
+ (Martin Egloff)
+Files: src/if_sniff.c
+
+Patch 6.1.120 (depends on 6.1.097)
+Problem: When 'scrolloff' is non-zero and there are folds, CTRL-F at the
+ end of the file scrolls part of a closed fold. (Lubomir Host)
+Solution: Adjust the first line to the start of a fold.
+Files: src/move.c
+
+Patch 6.1.121 (depends on 6.1.098)
+Problem: When starting Select mode from Insert mode, then using the Paste
+ menu entry, the cursor is left before the laste pasted character.
+ (Mario Schweigler)
+Solution: Set the cursor for Insert mode one character to the right.
+Files: runtime/menu.vim
+
+Patch 6.1.122
+Problem: ":file name" creates a new buffer to hold the old buffer name,
+ which becomes the alternate file. This buffer is unexpectedly
+ listed.
+Solution: Create the buffer for the alternate name unlisted.
+Files: src/ex_cmds.c
+
+Patch 6.1.123
+Problem: A ":match" command with more than one argument doesn't report an
+ error.
+Solution: Check for extra characters. (Servatius Brandt)
+Files: src/ex_docmd.c
+
+Patch 6.1.124
+Problem: When trying to exit and there is a hidden buffer that had 'eol'
+ off and 'bin' set exiting isn't possible. (John McGowan)
+Solution: Set b_start_eol when clearing the buffer.
+Files: src/buffer.c
+
+Patch 6.1.125
+Problem: Explorer plugin asks for saving a modified buffer even when it's
+ open in another window as well.
+Solution: Count the number of windows using the buffer.
+Files: runtime/plugin/explorer.vim
+
+Patch 6.1.126
+Problem: Adding the choices in the syntax menu is consuming much of the
+ startup time of the GUI while it's not often used.
+Solution: Only add the choices when the user wants to use them.
+Files: Makefile, runtime/makemenu.vim, runtime/menu.vim,
+ runtime/synmenu.vim, src/Makefile
+
+Patch 6.1.127
+Problem: When using "--remote file" and the server has 'insertmode' set,
+ commands are inserted instead of being executed. (Niklas Volbers)
+Solution: Go to Normal mode again after the ":drop" command.
+Files: src/main.c
+
+Patch 6.1.128
+Problem: The expression "input('very long prompt')" puts the cursor in the
+ wrong line (column is OK).
+Solution: Add the wrapped lines to the indent. (Yasuhiro Matsumoto)
+Files: src/ex_getln.c
+
+Patch 6.1.129
+Problem: On Solaris editing "file/" and then "file" results in using the
+ same buffer. (Jim Battle)
+Solution: Before using stat(), check that there is no illegal trailing
+ slash.
+Files: src/auto/configure, src/config.h.in, src/configure.in,
+ src/macros.h src/misc2.c, src/proto/misc2.pro
+
+Patch 6.1.130
+Problem: The documentation for some of the 'errorformat' items is unclear.
+Solution: Add more examples and explain hard to understand items. (Stefan
+ Roemer)
+Files: runtime/doc/quickfix.txt
+
+Patch 6.1.131
+Problem: X11 GUI: when expanding a CSI byte in the input stream to K_CSI,
+ the CSI byte itself isn't copied.
+Solution: Copy the CSI byte.
+Files: src/gui_x11.c
+
+Patch 6.1.132
+Problem: Executing a register in Ex mode may cause commands to be skipped.
+ (John McGowan)
+Solution: In Ex mode use an extra check if the register contents was
+ consumed, to avoid input goes into the typeahead buffer.
+Files: src/ex_docmd.c
+
+Patch 6.1.133
+Problem: When drawing double-wide characters in the statusline, may clear
+ half of a character. (Yasuhiro Matsumoto)
+Solution: Force redraw of the next character by setting the attributes
+ instead of putting a NUL in ScreenLines[]. Do put a NUL in
+ ScreenLines[] when overwriting half of a double-wide character.
+Files: src/screen.c
+
+Patch 6.1.134
+Problem: An error for a trailing argument of ":match" should not be given
+ after ":if 0". (Servatius Brandt)
+Solution: Only do the check when executing commands.
+Files: src/ex_docmd.c
+
+Patch 6.1.135
+Problem: Passing a command to the shell that includes a newline always has
+ a backslash before the newline.
+Solution: Remove one backslash before the newline. (Servatius Brandt)
+Files: src/ex_docmd.c
+
+Patch 6.1.136
+Problem: When $TERM is "linux" the default for 'background' is "dark", even
+ though the GUI uses a light background. (Hugh Allen)
+Solution: Don't mark the option as set when defaulting to "dark" for the
+ linux console. Also reset 'background' to "light" when the GUI
+ has a light background.
+Files: src/option.c
+
+Patch 6.1.137
+Problem: Converting to HTML has a clumsy way of dealing with tabs which may
+ change the highlighting.
+Solution: Replace tabs with spaces after converting a line to HTML. (Preben
+ Guldberg)
+Files: runtime/syntax/2html.vim
+
+Patch 6.1.138 (depends on 6.1.126)
+Problem: Adding extra items to the Syntax menu can't be done when the "Show
+ individual choices" menu is used.
+Solution: Use ":runtime!" instead of ":source", so that all synmenu.vim
+ files in the runtime path are loaded. (Servatius Brandt)
+ Also fix that a translated menu can't be removed.
+Files: runtime/menu.vim
+
+Patch 6.1.139
+Problem: Cygwin: PATH_MAX is not defined.
+Solution: Include limits.h. (Dan Sharp)
+Files: src/main.c
+
+Patch 6.1.140
+Problem: Cygwin: ":args `ls *.c`" does not work if the shell command
+ produces CR NL line separators.
+Solution: Remove the CR characters ourselves. (Pavol Juhas)
+Files: src/os_unix.c
+
+Patch 6.1.141
+Problem: ":wincmd gx" may cause problems when mixed with other commands.
+ ":wincmd c" doesn't close the window immediately. (Benji Fisher)
+Solution: Pass the extra command character directly instead of using the
+ stuff buffer and call ex_close() directly.
+Files: src/ex_docmd.c, src/normal.c, src/proto/normal.pro,
+ src/proto/window.pro, src/window.c
+
+Patch 6.1.142
+Problem: Defining paragraphs without a separating blank line isn't
+ possible. Paragraphs can't be formatted automatically.
+Solution: Allow defining paragraphs with lines that end in white space.
+ Added the 'w' and 'a' flags in 'formatoptions'.
+Files: runtime/doc/change.txt, src/edit.c, src/misc1.c, src/normal.c,
+ src/option.h, src/ops.c, src/proto/edit.pro, src/proto/ops.pro,
+ src/vim.h
+
+Patch 6.1.143 (depends on 6.1.142)
+Problem: Auto formatting near the end of the file moves the cursor to a
+ wrong position. In Insert mode some lines are made one char too
+ narrow. When deleting a line undo might not always work properly.
+Solution: Don't always move to the end of the line in the last line. Don't
+ position the cursor past the end of the line in Insert mode.
+ After deleting a line save the cursor line for undo.
+Files: src/edit.c, src/ops.c, src/normal.c
+
+Patch 6.1.144
+Problem: Obtaining the size of a line in screen characters can be wrong.
+ A pointer may wrap around zero.
+Solution: In win_linetabsize() check for a MAXCOL length argument. (Jim
+ Dunleavy)
+Files: src/charset.c
+
+Patch 6.1.145
+Problem: GTK: Drag&drop with more than 3 files may cause a crash. (Mickael
+ Marchand)
+Solution: Rewrite the code that parses the received list of files to be more
+ robust.
+Files: src/charset.c, src/gui_gtk_x11.c
+
+Patch 6.1.146
+Problem: MS-Windows: When $HOME is constructed from $HOMEDRIVE and
+ $HOMEPATH, it is not used for storing the _viminfo file. (Normal
+ Diamond)
+Solution: Set $HOME with the value obtained from $HOMEDRIVE and $HOMEPATH.
+Files: src/misc1.c
+
+Patch 6.1.147 (extra)
+Problem: MS-Windows: When a dialog has no default button, pressing Enter
+ ends it anyway and all buttons are selected.
+Solution: Don't end a dialog when there is no default button. Don't select
+ all button when there is no default. (Vince Negri)
+Files: src/gui_w32.c
+
+Patch 6.1.148 (extra)
+Problem: MS-Windows: ACL is not properly supported.
+Solution: Add an access() replacement that also works for ACL. (Mike
+ Williams)
+Files: runtime/doc/editing.txt, src/os_win32.c
+
+Patch 6.1.149 (extra)
+Problem: MS-Windows: Can't use diff mode from the file explorer.
+Solution: Add a "diff with Vim" context menu entry. (Dan Sharp)
+Files: GvimExt/gvimext.cpp, GvimExt/gvimext.h
+
+Patch 6.1.150
+Problem: OS/2, MS-Windows and MS-DOS: When 'shellslash' is set getcwd()
+ still uses backslash. (Yegappan Lakshmanan)
+Solution: Adjust slashes in getcwd().
+Files: src/eval.c
+
+Patch 6.1.151 (extra)
+Problem: Win32: The NTFS substream isn't copied.
+Solution: Copy the substream when making a backup copy. (Muraoka Taro)
+Files: src/fileio.c, src/os_win32.c, src/proto/os_win32.pro
+
+Patch 6.1.152
+Problem: When $LANG is iso8859-1 translated menus are not used.
+Solution: Change iso8859 to iso_8859.
+Files: runtime/menu.vim
+
+Patch 6.1.153
+Problem: Searching in included files may search recursively when the path
+ starts with "../". (Sven Berkvens-Matthijsse)
+Solution: Compare full file names, use inode/device when possible.
+Files: src/search.c
+
+Patch 6.1.154 (extra)
+Problem: DJGPP: "vim -h" leaves the cursor in a wrong position.
+Solution: Don't position the cursor using uninitialized variables. (Jim
+ Dunleavy)
+Files: src/os_msdos.c
+
+Patch 6.1.155
+Problem: Win32: Cursor may sometimes disappear in Insert mode.
+Solution: Change "hor10" in 'guicursor' to "hor15". (Walter Briscoe)
+Files: src/option.c
+
+Patch 6.1.156
+Problem: Conversion between DBCS and UCS-2 isn't implemented cleanly.
+Solution: Clean up a few things.
+Files: src/mbyte.c, src/structs.h
+
+Patch 6.1.157
+Problem: 'hlsearch' highlights only the second comma in ",,,,," with
+ "/,\@<=[^,]*". (Preben Guldberg)
+Solution: Also check for an empty match to start just after a previous
+ match.
+Files: src/screen.c
+
+Patch 6.1.158
+Problem: "zs" and "ze" don't work correctly with ":set nowrap siso=1".
+ (Preben Guldberg)
+Solution: Take 'siso' into account when computing the horizontal scroll
+ position for "zs" and "ze".
+Files: src/normal.c
+
+Patch 6.1.159
+Problem: When expanding an abbreviation that includes a multi-byte
+ character too many characters are deleted. (Andrey Urazov)
+Solution: Delete the abbreviation counting characters instead of bytes.
+Files: src/getchar.c
+
+Patch 6.1.160
+Problem: ":$read file.gz" doesn't work. (Preben Guldberg)
+Solution: Don't use the '[ mark after it has become invalid.
+Files: runtime/plugin/gzip.vim
+
+Patch 6.1.161 (depends on 6.1.158)
+Problem: Warning for signed/unsigned compare. Can set 'siso' to a negative
+ value. (Mike Williams)
+Solution: Add a typecast. Add a check for 'siso' being negative.
+Files: src/normal.c, src/option.c
+
+Patch 6.1.162
+Problem: Python interface: Didn't initialize threads properly.
+Solution: Call PyEval_InitThreads() when starting up.
+Files: src/if_python.c
+
+Patch 6.1.163
+Problem: Win32: Can't compile with Python after 6.1.162.
+Solution: Dynamically load PyEval_InitThreads(). (Dan Sharp)
+Files: src/if_python.c
+
+Patch 6.1.164
+Problem: If 'modifiable' is off, converting to xxd fails and 'filetype' is
+ changed to "xxd" anyway.
+Solution: Don't change 'filetype' when conversion failed.
+Files: runtime/menu.vim
+
+Patch 6.1.165
+Problem: Making changes in several lines and then a change in one of these
+ lines that splits it in two or more lines, undo information was
+ corrupted. May cause a crash. (Dave Fishburn)
+Solution: When skipping to save a line for undo because it was already
+ saved, move it to become the last saved line, so that when the
+ command changes the line count other saved lines are not involved.
+Files: src/undo.c
+
+Patch 6.1.166
+Problem: When 'autoindent' is set and mswin.vim has been sourced, pasting
+ with CTRL-V just after auto-indenting removes the indent. (Shlomi
+ Fish)
+Solution: First insert an "x" and delete it again, so that the auto-indent
+ remains.
+Files: runtime/mswin.vim
+
+Patch 6.1.167
+Problem: When giving a negative argument to ":retab" strange things start
+ happening. (Hans Ginzel)
+Solution: Check for a negative value.
+Files: src/ex_cmds.c
+
+Patch 6.1.168
+Problem: Pressing CTRL-C at the hit-enter prompt doesn't end the prompt.
+Solution: Make CTRL-C stop the hit-enter prompt.
+Files: src/message.c
+
+Patch 6.1.169
+Problem: bufexists() finds a buffer by using the name of a symbolic link to
+ it, but bufnr() doesn't. (Yegappan Lakshmanan)
+Solution: When bufnr() can't find a buffer, try using the same method as
+ bufexists().
+Files: src/eval.c
+
+Patch 6.1.170
+Problem: Using ":mksession" uses the default session file name, but "vim
+ -S" doesn't. (Hans Ginzel)
+Solution: Use the default session file name if "-S" is the last command
+ line argument or another option follows.
+Files: runtime/doc/starting.txt, src/main.c
+
+Patch 6.1.171
+Problem: When opening a line just above a closed fold with "O" and the
+ comment leader is automatically inserted, the cursor is displayed
+ in the first column. (Sung-Hyun Nam)
+Solution: Update the flag that indicates the cursor is in a closed fold.
+Files: src/misc1.c
+
+Patch 6.1.172
+Problem: Command line completion of ":tag /pat" does not show the same
+ results as the tags the command actually finds. (Gilles Roy)
+Solution: Don't modify the pattern to make it a regexp.
+Files: src/ex_getln.c, src/tag.c
+
+Patch 6.1.173
+Problem: When using remote control to edit a position in a file and this
+ file is the current buffer and it's modified, the window is split
+ and the ":drop" command fails.
+Solution: Don't split the window, keep editing the same buffer.
+ Use the ":drop" command in VisVim to avoid the problem there.
+Files: src/ex_cmds.c, src/ex_cmds2.c, src/proto/ex_cmds2.pro,
+ VisVim/Commands.cpp
+
+Patch 6.1.174
+Problem: It is difficult to know in a script whether an option not only
+ exists but really works.
+Solution: Add "exists('+option')".
+Files: runtime/doc/eval.txt, src/eval.c
+
+Patch 6.1.175
+Problem: When reading commands from a pipe and a CTRL-C is pressed, Vim
+ will hang. (Piet Delport)
+Solution: Don't keep reading characters to clear typeahead when an interrupt
+ was detected, stop when a single CTRL-C is read.
+Files: src/getchar.c, src/ui.c
+
+Patch 6.1.176
+Problem: When the stack limit is very big a false out-of-stack error may
+ be detected.
+Solution: Add a check for overflow of the stack limit computation. (Jim
+ Dunleavy)
+Files: src/os_unix.c
+
+Patch 6.1.177 (depends on 6.1.141)
+Problem: ":wincmd" does not allow a following command. (Gary Johnson)
+Solution: Check for a following " | cmd". Also give an error for trailing
+ characters.
+Files: src/ex_docmd.c
+
+Patch 6.1.178
+Problem: When 'expandtab' is set "r<C-V><Tab>" still expands the Tab.
+ (Bruce deVisser)
+Solution: Replace with a literal Tab.
+Files: src/normal.c
+
+Patch 6.1.179 (depends on 6.1.091)
+Problem: When using X11R5 XIMPreserveState is undefined. (Albert Chin)
+Solution: Include the missing definitions.
+Files: src/mbyte.c
+
+Patch 6.1.180
+Problem: Use of the GUI code for forking is inconsistent.
+Solution: Define MAY_FORK and use it for later #ifdefs. (Ben Fowlwer)
+Files: src/gui.c
+
+Patch 6.1.181
+Problem: If the terminal doesn't wrap from the last char in a line to the
+ next line, the last column is blanked out. (Peter Karp)
+Solution: Don't output a space to mark the wrap, but the same character
+ again.
+Files: src/screen.c
+
+Patch 6.1.182 (depends on 6.1.142)
+Problem: It is not possible to auto-format comments only. (Moshe Kaminsky)
+Solution: When the 'a' and 'c' flags are in 'formatoptions' only auto-format
+ comments.
+Files: runtime/doc/change.txt, src/edit.c
+
+Patch 6.1.183
+Problem: When 'fencs' is empty and 'enc' is utf-8, reading a file with
+ illegal bytes gives "CONVERSION ERROR" even though no conversion
+ is done. 'readonly' is set, even though writing the file results
+ in an unmodified file.
+Solution: For this specific error use "ILLEGAL BYTE" and don't set
+ 'readonly'.
+Files: src/fileio.c
+
+Patch 6.1.184 (extra)
+Problem: The extra mouse buttons found on some mice don't work.
+Solution: Support two extra buttons for MS-Windows. (Michael Geddes)
+Files: runtime/doc/term.txt, src/edit.c, src/ex_getln.c, src/gui.c,
+ src/gui_w32.c, src/gui_w48.c, src/keymap.h, src/message.c,
+ src/misc1.c, src/misc2.c, src/normal.c. src/vim.h
+
+Patch 6.1.185 (depends on 6.1.182)
+Problem: Can't compile without +comments feature.
+Solution: Add #ifdef FEAT_COMMENTS. (Christian J. Robinson)
+Files: src/edit.c
+
+Patch 6.1.186 (depends on 6.1.177)
+Problem: ":wincmd" does not allow a following comment. (Aric Blumer)
+Solution: Check for a following double quote.
+Files: src/ex_docmd.c
+
+Patch 6.1.187
+Problem: Using ":doarg" with 'hidden' set and the current file is the only
+ argument and was modified gives an error message. (Preben
+ Guldberg)
+Solution: Don't try re-editing the same file.
+Files: src/ex_cmds2.c
+
+Patch 6.1.188 (depends on 6.1.173)
+Problem: Unused variable in the small version.
+Solution: Move the declaration for "p" inside #ifdef FEAT_LISTCMDS.
+Files: src/ex_cmds2.c
+
+Patch 6.1.189
+Problem: inputdialog() doesn't work when 'c' is in 'guioptions'. (Aric
+ Blumer)
+Solution: Fall back to the input() function in this situation.
+Files: src/eval.c
+
+Patch 6.1.190 (extra)
+Problem: VMS: doesn't build with GTK GUI. Various other problems.
+Solution: Fix building for GTK. Improved Perl, Python and TCL support.
+ Improved VMS documentation. (Zoltan Arpadffy)
+ Added Vimtutor for VMS (T. R. Wyant)
+Files: runtime/doc/os_vms.txt, src/INSTALLvms.txt, src/gui_gtk_f.h,
+ src/if_tcl.c, src/main.c, src/gui_gtk_vms.h, src/Make_vms.mms,
+ src/os_vms.opt, src/proto/if_tcl.pro, vimtutor.com,
+ src/testdir/Make_vms.mms
+
+Patch 6.1.191
+Problem: When using "vim -s script" and redirecting the output, the delay
+ for the "Output is not to a terminal" warning slows Vim down too
+ much.
+Solution: Don't delay when reading commands from a script.
+Files: src/main.c
+
+Patch 6.1.192
+Problem: ":diffsplit" doesn't add "hor" to 'scrollopt'. (Gary Johnson)
+Solution: Add "hor" to 'scrollopt' each time ":diffsplit" is used.
+Files: src/diff.c, src/main.c
+
+Patch 6.1.193
+Problem: Crash in in_id_list() for an item with a "containedin" list. (Dave
+ Fishburn)
+Solution: Check for a negative syntax id, used for keywords.
+Files: src/syntax.c
+
+Patch 6.1.194
+Problem: When "t_ti" is set but it doesn't cause swapping terminal pages,
+ "ZZ" may cause the shell prompt to appear on top of the file-write
+ message.
+Solution: Scroll the text up in the Vim page before swapping to the terminal
+ page. (Michael Schroeder)
+Files: src/os_unix.c
+
+Patch 6.1.195
+Problem: The quickfix and preview windows always keep their height, while
+ other windows can't fix their height.
+Solution: Add the 'winfixheight' option, so that a fixed height can be
+ specified for any window. Also fix that the wildmenu may resize a
+ one-line window to a two-line window if 'ls' is zero.
+Files: runtime/doc/options.txt, runtime/optwin.vim, src/ex_cmds.c,
+ src/ex_getln.c, src/globals.h, src/option.c, src/quickfix.c,
+ src/screen.c, src/structs.h, src/window.c
+
+Patch 6.1.196 (depends on 6.1.084)
+Problem: On Mac OS X 10.2 generating osdef.h fails.
+Solution: Add -no-cpp-precomp to avoid using precompiled header files, which
+ disables printing the search path. (Ben Fowler)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.197
+Problem: ":help <C-V><C-\><C-V><C-N>" (resulting in <1c><0e>) gives an
+ error message. (Servatius Brandt)
+Solution: Double the backslash in "CTRL-\".
+Files: src/ex_cmds.c
+
+Patch 6.1.198 (extra) (depends on 6.1.076)
+Problem: Mac OS X: Dialogues don't work.
+Solution: Fix a crashing problem for some GUI dialogues. Fix a problem when
+ saving to a new file from the GUI. (Peter Cucka)
+Files: src/feature.h, src/gui_mac.c
+
+Patch 6.1.199
+Problem: 'guifontwide' doesn't work on Win32.
+Solution: Output each wide character separately. (Michael Geddes)
+Files: src/gui.c
+
+Patch 6.1.200
+Problem: ":syn sync fromstart" is not skipped after ":if 0". This can make
+ syntax highlighting very slow.
+Solution: Check "eap->skip" appropriately. (Rob West)
+Files: src/syntax.c
+
+Patch 6.1.201 (depends on 6.1.192)
+Problem: Warning for illegal pointer combination. (Zoltan Arpadffy)
+Solution: Add a typecast.
+Files: src/diff.c
+
+Patch 6.1.202 (extra)(depends on 6.1.148)
+Problem: Win32: filewritable() doesn't work properly on directories.
+Solution: fix filewritable(). (Mike Williams)
+Files: src/os_win32.c
+
+Patch 6.1.203
+Problem: ":%s/~//" causes a crash after ":%s/x//". (Gary Holloway)
+Solution: Avoid reading past the end of a line when "~" is empty.
+Files: src/regexp.c
+
+Patch 6.1.204 (depends on 6.1.129)
+Problem: Warning for an illegal pointer on Solaris.
+Solution: Add a typecast. (Derek Wyatt)
+Files: src/misc2.c
+
+Patch 6.1.205
+Problem: The gzip plugin changes the alternate file when editing a
+ compressed file. (Oliver Fuchs)
+Solution: Temporarily remove the 'a' and 'A' flags from 'cpo'.
+Files: runtime/plugin/gzip.vim
+
+Patch 6.1.206
+Problem: The script generated with ":mksession" doesn't work properly when
+ some commands are mapped.
+Solution: Use ":normal!" instead of ":normal". And use ":wincmd" where
+ possible. (Muraoka Taro)
+Files: src/ex_docmd.c, src/fold.c
+
+Patch 6.1.207
+Problem: Indenting a Java file hangs below a line with a comment after a
+ command.
+Solution: Break out of a loop. (Andre Pang)
+ Also line up } with matching {.
+Files: runtime/indent/java.vim
+
+Patch 6.1.208
+Problem: Can't use the buffer number from the Python interface.
+Solution: Add buffer.number. (Michal Vitecek)
+Files: src/if_python.c
+
+Patch 6.1.209
+Problem: Printing doesn't work on Mac OS classic.
+Solution: Use a ":" for path separator when opening the resource file. (Axel
+ Kielhorn)
+Files: src/ex_cmds2.c
+
+Patch 6.1.210
+Problem: When there is an iconv() conversion error when reading a file
+ there can be an error the next time iconv() is used.
+Solution: Reset the state of the iconv() descriptor. (Yasuhiro Matsumoto)
+Files: src/fileio.c
+
+Patch 6.1.211
+Problem: The message "use ! to override" is confusing.
+Solution: Make it "add ! to override".
+Files: src/buffer.c, src/eval.c, src/ex_docmd.c, src/fileio.c,
+ src/globals.h
+
+Patch 6.1.212
+Problem: When Vim was started with "-R" ":new" creates a buffer
+ 'noreadonly' while ":enew" has 'readonly' set. (Preben Guldberg)
+Solution: Don't set 'readonly in a new empty buffer for ":enew".
+Files: src/ex_docmd.c
+
+Patch 6.1.213
+Problem: Using CTRL-W H may cause a big gap to appear below the last
+ window. (Aric Blumer)
+Solution: Don't set the window height when there is a vertical split.
+ (Yasuhiro Matsumoto)
+Files: src/window.c
+
+Patch 6.1.214
+Problem: When installing Vim and the runtime files were checked out from
+ CVS the CVS directories will also be installed.
+Solution: Avoid installing the CVS dirs and their contents.
+Files: src/Makefile
+
+Patch 6.1.215
+Problem: Win32: ":pwd" uses backslashes even when 'shellslash' is set.
+ (Xiangjiang Ma)
+Solution: Adjust backslashes before printing the message.
+Files: src/ex_docmd.c
+
+Patch 6.1.216
+Problem: When dynamically loading the iconv library, the error codes may be
+ confused.
+Solution: Use specific error codes for iconv and redefine them for dynamic
+ loading. (Yasuhiro Matsumoto)
+Files: src/fileio.c, src/mbyte.c, src/vim.h
+
+Patch 6.1.217
+Problem: When sourcing the same Vim script using a different name (symbolic
+ link or MS-Windows 8.3 name) it is listed twice with
+ ":scriptnames". (Tony Mechelynck)
+Solution: Turn the script name into a full path before using it. On Unix
+ compare inode/device numbers.
+Files: src/ex_cmds2.c
+
+Patch 6.1.218
+Problem: No error message for using the function argument "5+". (Servatius
+ Brandt)
+Solution: Give an error message if a function or variable is expected but is
+ not found.
+Files: src/eval.c
+
+Patch 6.1.219
+Problem: When using ":amenu :b 1<CR>" with a Visual selection and
+ 'insertmode' is set, Vim does not return to Insert mode. (Mickael
+ Marchand)
+Solution: Add the command CTRL-\ CTRL-G that goes to Insert mode if
+ 'insertmode' is set and to Normal mode otherwise. Append this to
+ menus defined with ":amenu".
+Files: src/edit.c, src/ex_getln.c, src/normal.c
+
+Patch 6.1.220
+Problem: When using a BufReadPost autocommand that changes the line count,
+ e.g., "$-1join", reloading a file that was changed outside Vim
+ does not work properly. (Alan G Isaac)
+Solution: Make the buffer empty before reading the new version of the file.
+ Save the lines in a dummy buffer, so that they can be put back
+ when reading the file fails.
+Files: src/buffer.c, src/ex_cmds.c, src/fileio.c, src/globals.h,
+ src/proto/buffer.pro
+
+Patch 6.1.221
+Problem: Changing case may not work properly, depending on the current
+ locale.
+Solution: Add the 'casemap' option to let the user chose how changing case
+ is to be done.
+ Also fix lowering case when an UTF-8 character doesn't keep the
+ same byte length.
+Files: runtime/doc/options.txt, src/ascii.h, src/auto/configure,
+ src/buffer.c, src/charset.c, src/config.h.in, src/configure.in,
+ src/diff.c, src/edit.c, src/eval.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_getln.c, src/fileio.c, src/gui_amiga.c
+ src/gui_mac.c, src/gui_photon.c, src/gui_w48.c, src/gui_beos.cc,
+ src/macros.h, src/main.c, src/mbyte.c, src/menu.c, src/message.c,
+ src/misc1.c, src/misc2.c, src/option.c, src/os_msdos.c,
+ src/os_mswin.c, src/proto/charset.pro, src/regexp.c, src/option.h,
+ src/syntax.c
+
+Patch 6.1.222 (depends on 6.1.219)
+Problem: Patch 6.1.219 was incomplete.
+Solution: Add the changes for ":amenu".
+Files: src/menu.c
+
+Patch 6.1.223 (extra)
+Problem: Win32: When IME is activated 'iminsert' is set, but it might never
+ be reset when IME is disabled. (Muraoka Taro)
+ All systems: 'iminsert' is set to 2 when leaving Insert mode, even
+ when langmap is being used. (Peter Valach)
+Solution: Don't set "b_p_iminsert" in _OnImeNotify(). (Muraoka Taro)
+ Don't store the status of the input method in 'iminsert' when
+ 'iminsert' is one. Also for editing the command line and for
+ arguments to Normal mode commands.
+Files: src/edit.c, src/ex_getln.c, src/gui_w32.c, src/normal.c
+
+Patch 6.1.224
+Problem: "expand('$VAR')" returns an empty string when the expanded $VAR
+ is not an existing file. (Aric Blumer)
+Solution: Included non-existing files, as documented.
+Files: src/eval.c
+
+Patch 6.1.225
+Problem: Using <C-O><C-^> in Insert mode has a delay when starting "vim -u
+ NONE" and ":set nocp hidden". (Emmanuel) do_ecmd() uses
+ fileinfo(), the redraw is done after a delay to give the user time
+ to read the message.
+Solution: Put the message from fileio() in "keep_msg", so that the redraw is
+ done before the delay (still needed to avoid the mode message
+ overwrites the fileinfo() message).
+Files: src/buffer.c
+
+Patch 6.1.226
+Problem: Using ":debug" with a ":normal" command may cause a hang. (Colin
+ Keith)
+Solution: Save the typeahead buffer when obtaining a debug command.
+Files: src/ex_cmds2.c, src/getchar.c, src/proto/getchar.pro
+
+Patch 6.1.227
+Problem: It is possible to use a variable name "asdf:asdf" and ":let j:asdf
+ = 5" does not give an error message. (Mikolaj Machowski)
+Solution: Check for a ":" inside the variable name.
+Files: src/eval.c
+
+Patch 6.1.228 (extra)
+Problem: Win32: The special output function for Hangul is used too often,
+ causing special handling for other situations to be skipped.
+ bInComposition is always FALSE, causing ImeGetTempComposition()
+ always to return NULL.
+Solution: Remove HanExtTextOut(). Delete the dead code around
+ bInComposition and ImeGetTempComposition().
+Files: src/gui_w16.c, src/gui_w32.c, src/gui_w48.c
+
+Patch 6.1.229
+Problem: Win32: Conversion to/from often used codepages requires the iconv
+ library, which is not always available.
+Solution: Use standard MS-Windows functions for the conversion when
+ possible. (mostly by Glenn Maynard)
+ Also fixes missing declaration for patch 6.1.220.
+Files: src/fileio.c
+
+Patch 6.1.230 (extra)
+Problem: Win16: building doesn't work.
+Solution: Exclude the XBUTTON handling. (Vince Negri)
+Files: src/gui_w48.c
+
+Patch 6.1.231
+Problem: Double clicking with the mouse to select a word does not work for
+ multi-byte characters.
+Solution: Use vim_iswordc() instead of vim_isIDc(). This means 'iskeyword'
+ is used intead of 'isident'. Also fix that mixing ASCII with
+ multi-byte word characters doesn't work, the mouse class for
+ punctuation and word characters was mixed up.
+Files: src/normal.c
+
+Patch 6.1.232 (depends on 6.1.226)
+Problem: Using ex_normal_busy while it might not be available. (Axel
+ Kielhorn)
+Solution: Only use ex_normal_busy when FEAT_EX_EXTRA is defined.
+Files: src/ex_cmds2.c
+
+Patch 6.1.233
+Problem: ":help expr-||" does not work.
+Solution: Don't use the '|' as a command separator
+Files: src/ex_cmds.c
+
+Patch 6.1.234 (depends on 6.1.217)
+Problem: Get a warning for using a negative value for st_dev.
+Solution: Don't assign a negative value to st_dev.
+Files: src/ex_cmds2.c
+
+Patch 6.1.235 (depends on 6.1.223)
+Problem: 'iminsert' is changed from 1 to 2 when leaving Insert mode. (Peter
+ Valach)
+Solution: Check "State" before resetting it to NORMAL.
+Files: src/edit.c
+
+Patch 6.1.236
+Problem: Memory leaks when appending lines for ":diffget" or ":diffput" and
+ when reloading a changed buffer.
+Solution: Free a line after calling ml_append().
+Files: src/diff.c, src/fileio.c
+
+Patch 6.1.237
+Problem: Putting in Visual block mode does not work correctly when "$" was
+ used or when the first line is short. (Christian Michon)
+Solution: First delete the selected text and then put the new text. Save
+ and restore registers as necessary.
+Files: src/globals.h, src/normal.c, src/ops.c, src/proto/ops.pro,
+ src/vim.h
+
+Patch 6.1.238 (extra)
+Problem: Win32: The "icon=" argument for the ":menu" command does not
+ search for the bitmap file.
+Solution: Expand environment variables and search for the bitmap file.
+ (Vince Negri)
+ Make it consistent, use the same mechanism for X11 and GTK.
+Files: src/gui.c src/gui_gtk.c, src/gui_w32.c, src/gui_x11.c,
+ src/proto/gui.pro
+
+Patch 6.1.239
+Problem: Giving an error for missing :endif or :endwhile when being
+ interrupted.
+Solution: Don't give these messages when interrupted.
+Files: src/ex_docmd.c, src/os_unix.c
+
+Patch 6.1.240 (extra)
+Problem: Win32 with BCC 5: CPU may be defined in the environment, which
+ causes a wrong argument for the compiler. (Walter Briscoe)
+Solution: Use CPUNR instead of CPU.
+Files: src/Make_bc5.mak
+
+Patch 6.1.241
+Problem: Something goes wrong when drawing or undrawing the cursor.
+Solution: Remember when the cursor invalid in a better way.
+Files: src/gui.c
+
+Patch 6.1.242
+Problem: When pasting a large number of lines on the command line it is not
+ possible to interrupt. (Jean Jordaan)
+Solution: Check for an interrupt after each pasted line.
+Files: src/ops.c
+
+Patch 6.1.243 (extra)
+Problem: Win32: When the OLE version is started and wasn't registered, a
+ message pops up to suggest registering, even when this isn't
+ possible (when the registry is not writable).
+Solution: Check if registering is possible before asking whether it should
+ be done. (Walter Briscoe)
+ Also avoid restarting Vim after registering.
+Files: src/if_ole.cpp
+
+Patch 6.1.244
+Problem: Patch 6.1.237 was missing the diff for vim.h. (Igor Goldenberg)
+Solution: Include it here.
+Files: src/vim.h
+
+Patch 6.1.245
+Problem: Comparing with ignored case does not work properly for Unicode
+ with a locale where case folding an ASCII character results in a
+ multi-byte character. (Glenn Maynard)
+Solution: Handle ignore-case compare for Unicode differently.
+Files: src/mbyte.c
+
+Patch 6.1.246
+Problem: ":blast" goes to the first buffer if the last one is unlisted.
+ (Andrew Stryker)
+Solution: From the last buffer search backwards for the first listed buffer
+ instead of forwards.
+Files: src/ex_docmd.c
+
+Patch 6.1.247
+Problem: ACL support doesn't always work properly.
+Solution: Add a configure argument to disable ACL "--disable-acl". (Thierry
+ Vignaud)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.248
+Problem: Typing 'q' at the more-prompt for ":let" does not quit the
+ listing. (Hari Krishna Dara)
+Solution: Quit the listing when got_int is set.
+Files: src/eval.c
+
+Patch 6.1.249
+Problem: Can't expand a path on the command line if it includes a "|" as a
+ trail byte of a multi-byte character.
+Solution: Check for multi-byte characters. (Yasuhiro Matsumoto)
+Files: src/ex_docmd.c
+
+Patch 6.1.250
+Problem: When changing the value of 'lines' inside the expression set with
+ 'diffexpr' Vim might crash. (Dave Fishburn)
+Solution: Don't allow changing the screen size while updating the screen.
+Files: src/globals.h, src/option.c, src/screen.c
+
+Patch 6.1.251
+Problem: Can't use completion for ":lcd" and ":lchdir" like ":cd".
+Solution: Expand directory names for these commands. (Servatius Brandt)
+Files: src/ex_docmd.c
+
+Patch 6.1.252
+Problem: "vi}" does not include a line break when the "}" is at the start
+ of a following line. (Kamil Burzynski)
+Solution: Include the line break.
+Files: src/search.c
+
+Patch 6.1.253 (extra)
+Problem: Win32 with Cygwin: Changes the path of arguments in a wrong way.
+ (Xiangjiang Ma)
+Solution: Don't use cygwin_conv_to_posix_path() for the Win32 version.
+ Update the Cygwin makefile to support more features. (Dan Sharp)
+Files: src/Make_cyg.mak, src/if_ole.cpp, src/main.c
+
+Patch 6.1.254
+Problem: exists("foo{bar}") does not work. ':unlet v{"a"}r' does not work.
+ ":let v{a}r1 v{a}r2" does not work. ":func F{(1)}" does not work.
+ ":delfunc F{" does not give an error message. ':delfunc F{"F"}'
+ does not work.
+Solution: Support magic braces for the exists() argument. (Vince Negri)
+ Check for trailing comments explicitly for ":unlet". Add support
+ for magic braces in further arguments of ":let". Look for a
+ parenthesis only after the function name. (Servatius Brandt)
+ Also expand magic braces for "exists('*expr')". Give an error
+ message for an invalid ":delfunc" argument. Allow quotes in the
+ ":delfunc" argument.
+Files: src/eval.c, src/ex_cmds.h, src/ex_docmd.c
+
+Patch 6.1.255 (depends on 6.1.254)
+Problem: Crash when loading menu.vim a second time. (Christian Robinson)
+ ":unlet garbage foo" tries unletting "foo" after an error message.
+ (Servatius Brandt)
+ Very long function arguments cause very long messages when
+ 'verbose' is 14 or higher.
+Solution: Avoid reading from uninitialized memory.
+ Break out of a loop after an invalid argument for ":unlet".
+ Truncate long function arguments to 80 characters.
+Files: src/eval.c
+
+Patch 6.1.256 (depends on 6.1.255)
+Problem: Defining a function after ":if 0" could still cause an error
+ message for an existing function.
+ Leaking memory when there are trailing characters for ":delfunc".
+Solution: Check the "skip" flag. Free the memory. (Servatius Brandt)
+Files: src/eval.c
+
+Patch 6.1.257
+Problem: ":cwindow" always sets the previous window to the last but one
+ window. (Benji Fisher)
+Solution: Set the previous window properly.
+Files: src/globals.c, src/quickfix.c, src/window.c
+
+Patch 6.1.258
+Problem: Buffers menu doesn't work properly for multibyte buffer names.
+Solution: Use a pattern to get the left and right part of the name.
+ (Yasuhiro Matsumoto)
+Files: runtime/menu.vim
+
+Patch 6.1.259 (extra)
+Problem: Mac: with 'patchmode' is used filenames are truncated.
+Solution: Increase the BASENAMELEN for Mac OS X. (Ed Ralston)
+Files: src/os_mac.h
+
+Patch 6.1.260 (depends on 6.1.104)
+Problem: GCC 3.2 still seems to have an optimizer problem. (Zvi Har'El)
+Solution: Use the same configure check as used for GCC 3.1.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.261
+Problem: When deleting a line in a buffer which is not the current buffer,
+ using the Perl interface Delete(), the cursor in the current
+ window may move. (Chris Houser)
+Solution: Don't adjust the cursor position when changing another buffer.
+Files: src/if_perl.xs
+
+Patch 6.1.262
+Problem: When jumping over folds with "z[", "zj" and "zk" the previous
+ position is not remembered. (Hari Krishna Dara)
+Solution: Set the previous context mark before jumping.
+Files: src/fold.c
+
+Patch 6.1.263
+Problem: When typing a multi-byte character that triggers an abbreviation
+ it is not inserted properly.
+Solution: Handle adding the typed multi-byte character. (Yasuhiro Matsumoto)
+Files: src/getchar.c
+
+Patch 6.1.264 (depends on patch 6.1.254)
+Problem: exists() does not work for built-in functions. (Steve Wall)
+Solution: Don't check for the function name to start with a capital.
+Files: src/eval.c
+
+Patch 6.1.265
+Problem: libcall() can be used in 'foldexpr' to call any system function.
+ rename(), delete() and remote_send() can also be used in
+ 'foldexpr'. These are security problems. (Georgi Guninski)
+Solution: Don't allow using libcall(), rename(), delete(), remote_send() and
+ similar functions in the sandbox.
+Files: src/eval.c
+
+Patch 6.1.266 (depends on 6.1.265)
+Problem: Win32: compile error in eval.c. (Bill McCarthy)
+Solution: Move a variable declaration.
+Files: src/eval.c
+
+Patch 6.1.267
+Problem: Using "p" to paste into a Visual selected area may cause a crash.
+Solution: Allocate enough memory for saving the register contents. (Muraoka
+ Taro)
+Files: src/ops.c
+
+Patch 6.1.268
+Problem: When triggering an abbreviation with a multi-byte character, this
+ character is not correctly inserted after expanding the
+ abbreviation. (Taro Muraoka)
+Solution: Add ABBR_OFF to all characters above 0xff.
+Files: src/edit.c, src/ex_getln.c, src/getchar.c
+
+Patch 6.1.269
+Problem: After using input() text written with ":redir" gets extra indent.
+ (David Fishburn)
+Solution: Restore msg_col after using input().
+Files: src/ex_getln.c
+
+Patch 6.1.270 (depends on 6.1.260)
+Problem: GCC 3.2.1 still seems to have an optimizer problem.
+Solution: Use the same configure check as used for GCC 3.1.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.271
+Problem: When compiling without the +syntax feature there are errors.
+Solution: Don't use some code for syntax highlighting. (Roger Cornelius)
+ Make test 45 work without syntax highlighting.
+ Also fix an error in a pattern matching: "\%(" was not supported.
+Files: src/ex_cmds2.c, src/regexp.c, src/testdir/test45.in
+
+Patch 6.1.272
+Problem: After using ":set define<" a crash may happen. (Christian Robinson)
+Solution: Make a copy of the option value in allocated memory.
+Files: src/option.c
+
+Patch 6.1.273
+Problem: When the cursor doesn't blink, redrawing an exposed area may hide
+ the cursor.
+Solution: Always draw the cursor, also when it didn't move. (Muraoka Taro)
+Files: src/gui.c
+
+Patch 6.1.274 (depends on 6.1.210)
+Problem: Resetting the iconv() state after each error is wrong for an
+ incomplete sequence.
+Solution: Don't reset the iconv() state.
+Files: src/fileio.c
+
+Patch 6.1.275
+Problem: When using "v" in a startup script, get warning message that
+ terminal cannot highlight. (Charles Campbell)
+Solution: Only give the message after the terminal has been initialized.
+Files: src/normal.c
+
+Patch 6.1.276
+Problem: "gvim --remote file" doesn't prompt for an encryption key.
+Solution: The further characters the client sends to the server are used.
+ Added inputsave() and inputrestore() to allow prompting the
+ user directly and not using typeahead.
+ Also fix possible memory leak for ":normal".
+Files: src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/getchar.c,
+ src/main.c, src/proto/getchar.pro, src/proto/ui.pro,
+ src/runtime/doc/eval.txt, src/structs.h, src/ui.c, src/vim.h
+
+Patch 6.1.277 (depends on 6.1.276)
+Problem: Compilation error when building with small features.
+Solution: Define trash_input_buf() when needed. (Kelvin Lee)
+Files: src/ui.c
+
+Patch 6.1.278
+Problem: When using signs the line number of a closed fold doesn't line up
+ with the other line numbers. (Kamil Burzynski)
+Solution: Insert two spaces for the sign column.
+Files: src/screen.c
+
+Patch 6.1.279
+Problem: The prototype for smsg() and smsg_attr() do not match the function
+ definition. This may cause trouble for some compilers. (Nix)
+Solution: Use va_list for systems that have stdarg.h. Use "int" instead of
+ "void" for the return type.
+Files: src/auto/configure, src/config.h.in, src/configure.in,
+ src/proto.h, src/message.c
+
+Patch 6.1.280
+Problem: It's possible to use an argument "firstline" or "lastline" for a
+ function but using "a:firstline" or "a:lastline" in the function
+ won't work. (Benji Fisher)
+Solution: Give an error message for these arguments.
+ Also avoid that the following function body causes a whole row of
+ errors, skip over it after an error in the first line.
+Files: src/eval.c
+
+Patch 6.1.281
+Problem: In Insert mode CTRL-X CTRL-G leaves the cursor after the ruler.
+Solution: Set the cursor position before waiting for the argument of CTRL-G.
+ (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+Patch 6.1.282
+Problem: Elvis uses "se" in a modeline, Vim doesn't recognize this.
+Solution: Also accept "se " where "set " is accepted in a modeline.
+ (Yasuhiro Matsumoto)
+Files: src/buffer.c
+
+Patch 6.1.283
+Problem: For ":sign" the icon file name cannot contain a space.
+Solution: Handle backslashes in the file name. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c
+
+Patch 6.1.284
+Problem: On Solaris there is a warning for "struct utimbuf".
+Solution: Move including "utime.h" to outside the function. (Derek Wyatt)
+Files: src/fileio.c
+
+Patch 6.1.285
+Problem: Can't wipe out a buffer with 'bufhide' option.
+Solution: Add "wipe" value to 'bufhide'. (Yegappan Lakshmanan)
+Files: runtime/doc/options.txt, src/buffer.c, src/option.c,
+ src/quickfix.c
+
+Patch 6.1.286
+Problem: 'showbreak' cannot contain multi-byte characters.
+Solution: Allow using all printable characters for 'showbreak'.
+Files: src/charset.c, src/move.c, src/option.c
+
+Patch 6.1.287 (depends on 6.1.285)
+Problem: Effect of "delete" and "wipe" in 'bufhide' were mixed up.
+Solution: Wipe out when wiping out is asked for.
+Files: src/buffer.c
+
+Patch 6.1.288
+Problem: ":silent function F" hangs. (Hari Krishna Dara)
+Solution: Don't use msg_col, it is not incremented when using ":silent".
+ Also made the function output look a bit better. Don't translate
+ "function".
+Files: src/eval.c
+
+Patch 6.1.289 (depends on 6.1.278)
+Problem: Compiler warning for pointer. (Axel Kielhorn)
+Solution: Add a typecast for " ".
+Files: src/screen.c
+
+Patch 6.1.290 (extra)
+Problem: Truncating long text for message box may break multi-byte
+ character.
+Solution: Adjust to start of multi-byte character. (Yasuhiro Matsumoto)
+Files: src/os_mswin.c
+
+Patch 6.1.291 (extra)
+Problem: Win32: CTRL-@ doesn't work. Don't even get a message for it.
+Solution: Recognize the keycode for CTRL-@. (Yasuhiro Matsumoto)
+Files: src/gui_w48.c
+
+Patch 6.1.292 (extra, depends on 6.1.253)
+Problem: Win32: Can't compile with new MingW compiler.
+ Borland 5 makefile doesn't generate pathdef.c.
+Solution: Remove -wwide-multiply argument. (Rene de Zwart)
+ Various fixes for other problems in Win32 makefiles. (Dan Sharp)
+Files: src/Make_bc5.mak, src/Make_cyg.mak, src/Make_ming.mak,
+ src/Make_mvc.mak
+
+Patch 6.1.293
+Problem: byte2line() returns a wrong result for some values.
+Solution: Change ">=" to ">" in ml_find_line_or_offset(). (Bradford C Smith)
+ Add one to the line number when at the end of a block.
+Files: src/memline.c
+
+Patch 6.1.294
+Problem: Can't include a multi-byte character in a string by its hex value.
+ (Benji Fisher)
+Solution: Add "\u....": a character specified with up to four hex numbers
+ and stored according to the value of 'encoding'.
+Files: src/eval.c
+
+Patch 6.1.295 (extra)
+Problem: Processing the cs.po file generates an error. (Rahul Agrawal)
+Solution: Fix the printf format characters in the translation.
+Files: src/po/cs.po
+
+Patch 6.1.296
+Problem: Win32: When cancelling the font dialog 'guifont' remains set to
+ "*".
+Solution: Restore the old value of 'guifont' (Yasuhiro Matsumoto)
+Files: src/option.c
+
+Patch 6.1.297
+Problem: "make test" fails in test6 in an UTF-8 environment. (Benji Fisher)
+Solution: Before executing the BufReadPost autocommands save the current
+ fileencoding, so that the file isn't marked changed.
+Files: src/fileio.c
+
+Patch 6.1.298
+Problem: When using signs and the first line of a closed fold has a sign
+ it can be redrawn as if the fold was open. (Kamil Burzynski)
+Solution: Don't redraw a sign inside a closed fold.
+Files: src/screen.c
+
+Patch 6.1.299
+Problem: ":edit +set\ ro file" doesn't work.
+Solution: Halve the number of backslashes in the "+cmd" argument.
+Files: src/ex_docmd.c
+
+Patch 6.1.300 (extra)
+Problem: Handling of ETO_IGNORELANGUAGE is confusing.
+Solution: Clean up the handling of ETO_IGNORELANGUAGE. (Glenn Maynard)
+Files: src/gui_w32.c
+
+Patch 6.1.301 (extra)
+Problem: French translation of file-save dialog doesn't show file name.
+Solution: Insert a star in the printf string. (Francois Terrot)
+Files: src/po/fr.po
+
+Patch 6.1.302
+Problem: Counting lines of the Visual area is incorrect for closed folds.
+ (Mikolaj Machowski)
+Solution: Correct the start and end for the closed fold.
+Files: src/normal.c
+
+Patch 6.1.303 (extra)
+Problem: The Top/Bottom/All text does not always fit in the ruler when
+ translated to Japanese. Problem with a character being wider when
+ in a bold font.
+Solution: Use ETO_PDY to specify the width of each character. (Yasuhiro
+ Matsumoto)
+Files: src/gui_w32.c
+
+Patch 6.1.304 (extra, depends on 6.1.292)
+Problem: Win32: Postscript is always enabled in the MingW Makefile.
+ Pathdef.c isn't generated properly with Make_bc5.mak. (Yasuhiro
+ Matsumoto)
+Solution: Change an ifdef to an ifeq. (Madoka Machitani)
+ Use the Borland make redirection to generate pathdef.c. (Maurice
+ Barnum)
+Files: src/Make_bc5.mak, src/Make_ming.mak
+
+Patch 6.1.305
+Problem: When 'verbose' is 14 or higher, a function call may cause reading
+ uninitialized data. (Walter Briscoe)
+Solution: Check for end-of-string in trunc_string().
+Files: src/message.c
+
+Patch 6.1.306
+Problem: The AIX VisualAge cc compiler doesn't define __STDC__.
+Solution: Use __EXTENDED__ like __STDC__. (Jess Thrysoee)
+Files: src/os_unix.h
+
+Patch 6.1.307
+Problem: When a double-byte character has an illegal tail byte the display
+ is messed up. (Yasuhiro Matsumoto)
+Solution: Draw "XX" instead of the wrong character.
+Files: src/screen.c
+
+Patch 6.1.308
+Problem: Can't reset the Visual mode returned by visualmode().
+Solution: Use an optional argument to visualmode(). (Charles Campbell)
+Files: runtime/doc/eval.txt, src/eval.c, src/normal.c,
+ src/structs.h
+
+Patch 6.1.309
+Problem: The tutor doesn't select German if the locale name is
+ "German_Germany.1252". (Joachim Hofmann)
+Solution: Check for "German" in the locale name. Also check for
+ ".ge". And include the German and Greek tutors.
+Files: runtime/tutor/tutor.de, runtime/tutor/tutor.vim,
+ runtime/tutor/tutor.gr, runtime/tutor/tutor.gr.cp737
+
+Patch 6.1.310 (depends on 6.1.307)
+Problem: All double-byte characters are displayed as "XX".
+Solution: Use ">= 32" instead of "< 32". (Yasuhiro Matsumoto)
+Files: src/screen.c
+
+Patch 6.1.311 (extra)
+Problem: VMS: path in window title doesn't include necessary separator.
+ file version doesn't always work properly with Unix.
+ Crashes because of memory overwrite in GUI.
+ Didn't always handle files with lowercase and correct path.
+Solution: Fix the problems. Remove unnecessary file name translations.
+ (Zoltan Arpadffy)
+Files: src/buffer.c, src/ex_cmds2.c, src/fileio.c, src/memline.c,
+ src/misc1.c, src/misc2.c, src/os_unix.c, src/os_vms.c, src/tag.c
+
+Patch 6.1.312
+Problem: When using ":silent" debugging is also done silently.
+Solution: Disable silence while at the debug prompt.
+Files: src/ex_cmds2.c
+
+Patch 6.1.313
+Problem: When a ":drop fname" command is used and "fname" is open in
+ another window, it is also opened in the current window.
+Solution: Change to the window with "fname" instead.
+ Don't redefine the argument list when dropping only one file.
+Files: runtime/doc/windows.txt, src/ex_cmds2.c, src/ex_cmds.c,
+ src/ex_docmd.c, src/proto/ex_cmds2.pro, src/proto/ex_docmd.pro
+
+Patch 6.1.314 (depends on 6.1.126)
+Problem: Missing backslash in "Generic Config file" syntax menu.
+Solution: Insert the backslash. (Zak Beck)
+Files: runtime/makemenu.vim, runtime/synmenu.vim
+
+Patch 6.1.315 (extra)
+Problem: A very long hostname may lead to an unterminated string. Failing
+ to obtain a hostname may result in garbage. (Walter Briscoe)
+Solution: Add a NUL at the end of the hostname buffer.
+Files: src/os_mac.c, src/os_msdos.c, src/os_unix.c, src/os_win16.c,
+ src/os_win32.c
+
+Patch 6.1.316
+Problem: When exiting with "wq" and there is a hidden buffer, after the
+ "file changed" dialog there is a warning for a changed buffer.
+ (Ajit Thakkar)
+Solution: Do update the buffer timestamps when exiting.
+Files: src/fileio.c
+
+Patch 6.1.317
+Problem: Closing a window may cause some of the remaining windows to be
+ positioned wrong if there is a mix of horizontal and vertical
+ splits. (Stefan Ingi Valdimarsson)
+Solution: Update the frame sizes before updating the window positions.
+Files: src/window.c
+
+Patch 6.1.318
+Problem: auto/pathdef.c can include wrong quotes when a compiler flag
+ includes quotes.
+Solution: Put a backslash before the quotes in compiler flags. (Shinra Aida)
+Files: src/Makefile
+
+Patch 6.1.319 (depends on 6.1.276)
+Problem: Using "--remote +cmd file" does not execute "cmd".
+Solution: Call inputrestore() in the same command line as inputsave(),
+ otherwise it will never get executed.
+Files: src/main.c
+
+Patch 6.1.320 (depends on 6.1.313)
+Problem: When a ":drop one\ file" command is used the file "one\ file" is
+ opened, the backslash is not removed. (Taro Muraoka)
+Solution: Handle backslashes correctly. Always set the argument list to
+ keep it simple.
+Files: runtime/doc/windows.txt, src/ex_cmds.c
+
+Patch 6.1.321
+Problem: When 'mouse' includes 'n' but not 'v', don't allow starting Visual
+ mode with the mouse.
+Solution: Don't use MOUSE_MAY_VIS when there is no 'v' in 'mouse'. (Flemming
+ Madsen)
+Files: src/normal.c
+
+Patch 6.1.322 (extra, depends on 6.1.315)
+Problem: Win32: The host name is always "PC " plus the real host name.
+Solution: Don't insert "PC " before the host name.
+Files: src/os_win32.c
+
+Patch 6.1.323
+Problem: ":registers" doesn't stop listing for a "q" at the more prompt.
+ (Hari Krishna Dara)
+Solution: Check for interrupt and got_int.
+Files: src/ops.c, src/proto/ops.pro
+
+Patch 6.1.324
+Problem: Crash when dragging a vertical separator when <LeftMouse> is
+ remapped to jump to another window.
+Solution: Pass the window pointer to the function doing the dragging instead
+ of always using the current window. (Daniel Elstner)
+ Also fix that starting a drag changes window focus.
+Files: src/normal.c, src/proto/window.pro, src/ui.c, src/vim.h,
+ src/window.c
+
+Patch 6.1.325
+Problem: Shift-Tab is not automatically recognized in an xterm.
+Solution: Add <Esc>[Z as the termcap code. (Andrew Pimlott)
+Files: src/term.c
+
+Patch 6.1.326
+Problem: Using a search pattern may read from uninitialized data (Yasuhiro
+ Matsumoto)
+Solution: Initialize pointers to NULL.
+Files: src/regexp.c
+
+Patch 6.1.327
+Problem: When opening the "mbyte.txt" help file the utf-8 characters are
+ unreadable, because the fileencoding is forced to be latin1.
+Solution: Check for utf-8 encoding first in help files. (Daniel Elstner)
+Files: runtime/doc/mbyte.txt, src/fileio.c
+
+Patch 6.1.328
+Problem: Prototype for enc_canon_search() is missing.
+Solution: Add the prototype. (Walter Briscoe)
+Files: src/mbyte.c
+
+Patch 6.1.329
+Problem: When editing a file "a b c" replacing "%" in ":Cmd %" or ":next %"
+ does not work properly. (Hari Krishna Dara)
+Solution: Always escape spaces when expanding "%". Don't split argument for
+ <f-args> in a user command when only one argument is used.
+Files: src/ex_docmd.c
+
+Patch 6.1.330
+Problem: GTK, Motif and Athena: Keypad keys produce the same code as
+ non-keypad keys, making it impossible to map them separately.
+Solution: Use different termcap codes for the keypad keys. (Neil Bird)
+Files: src/gui_gtk_x11.c, src/gui_x11.c
+
+Patch 6.1.331
+Problem: When translating the help files, "LOCAL ADDITIONS" no longer marks
+ the spot where help files from plugins are to be listed.
+Solution: Add a "local-additions" tag and use that to find the right spot.
+Files: runtime/doc/help.txt, src/ex_cmds.c
+
+Patch 6.1.332 (extra)
+Problem: Win32: Loading Perl dynamically doesn't work with Perl 5.8.
+ Perl 5.8 also does not work with Cygwin and Ming.
+Solution: Adjust the function calls. (Taro Muraoka)
+ Adjust the cyg and ming makefiles. (Dan Sharp)
+Files: src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak,
+ src/if_perl.xs
+
+Patch 6.1.333 (extra)
+Problem: Win32: Can't handle Unicode text on the clipboard.
+ Can't pass NUL byte, it becomes a line break. (Bruce DeVisser)
+Solution: Support Unicode for the clipboard (Ron Aaron and Glenn Maynard)
+ Also support copy/paste of NUL bytes.
+Files: src/os_mswin.c, src/os_win16.c src/os_win32.c
+
+Patch 6.1.334 (extra, depends on 6.1.303)
+Problem: Problem with drawing Hebrew characters.
+Solution: Only use ETO_PDY for Windows NT and the like. (Yasuhiro Matsumoto)
+Files: src/gui_w32.c
+
+Patch 6.1.335 (extra)
+Problem: Failure of obtaining the cursor position and window size is
+ ignored.
+Solution: Remove a semicolon after an "if". (Walter Briscoe)
+Files: src/gui_w32.c
+
+Patch 6.1.336 (extra)
+Problem: Warning for use of function prototypes of smsg().
+Solution: Define HAVE_STDARG_H. (Walter Briscoe)
+Files: src/os_win32.h
+
+Patch 6.1.337
+Problem: When using "finish" in debug mode in function B() for ":call
+ A(B())" does not stop after B() is finished.
+Solution: Increase debug_level while evaluating a function.
+Files: src/ex_docmd.c
+
+Patch 6.1.338
+Problem: When using a menu that checks out the current file from Insert
+ mode, there is no warning for the changed file until exiting
+ Insert mode. (Srikanth Sankaran)
+Solution: Add a check for need_check_timestamps in the Insert mode loop.
+Files: src/edit.c
+
+Patch 6.1.339
+Problem: Completion doesn't allow "g:" in ":let g:did_<Tab>". (Benji
+ Fisher)
+Solution: Return "g:var" for global variables when that is what is being
+ expanded. (Flemming Madsen)
+Files: src/eval.c
+
+Patch 6.1.340 (extra, depends on 6.1.332)
+Problem: Win32: Can't compile the Perl interface with nmake.
+Solution: Don't compare the version number as a string but as a number.
+ (Juergen Kraemer)
+Files: src/Make_mvc.mak
+
+Patch 6.1.341
+Problem: In Insert mode with 'rightleft' set the cursor is drawn halfway a
+ double-wide character. For CTRL-R and CTRL-K in Insert mode the "
+ or ? is not displayed.
+Solution: Draw the cursor in the next character cell. Display the " or ?
+ over the right half of the double-wide character. (Yasuhiro
+ Matsumoto) Also fix that cancelling a digraph doesn't redraw
+ a double-byte character correctly.
+Files: src/edit.c, src/gui.c, src/mbyte.c
+
+Patch 6.1.342 (depends on 6.1.341)
+Problem: With 'rightleft' set typing "c" on a double-wide character causes
+ the cursor to be displayed one cell to the left.
+Solution: Draw the cursor in the next character cell. (Yasuhiro Matsumoto)
+Files: src/gui.c
+
+Patch 6.1.343 (depends on 6.1.342)
+Problem: Cannot compile with the +multi_byte feature but without +rightleft.
+ Cannot compile without the GUI.
+Solution: Fix the #ifdefs. (partly by Nam SungHyun)
+Files: src/gui.c, src/mbyte.c, src/ui.c
+
+Patch 6.1.344
+Problem: When using ":silent filetype" the output is still put in the
+ message history. (Hari Krishna Dara)
+Solution: Don't add messages in the history when ":silent" is used.
+Files: src/message.c
+
+Patch 6.1.345 (extra)
+Problem: Win32: 'imdisable' doesn't work.
+Solution: Make 'imdisable' work. (Yasuhiro Matsumoto)
+Files: src/gui_w32.c
+
+Patch 6.1.346
+Problem: The scroll wheel can only scroll the current window.
+Solution: Make the scroll wheel scroll the window that the mouse points to.
+ (Daniel Elstner)
+Files: src/edit.c, src/gui.c, src/normal.c, src/term.c
+
+Patch 6.1.347
+Problem: When using cscope to list matching tags, the listed number is
+ sometimes not equal to what cscope uses. (Vihren Milev)
+Solution: For cscope tags use only one table, don't give tags in the current
+ file a higher priority.
+Files: src/tag.c
+
+Patch 6.1.348
+Problem: Wildmode with wildmenu: ":set wildmode=list,full", ":colorscheme
+ <tab>" results in "zellner" instead of the first entry. (Anand
+ Hariharan)
+Solution: Don't call ExpandOne() from globpath(). (Flemming Madsen)
+Files: src/ex_getln.c
+
+Patch 6.1.349
+Problem: "vim --serverlist" when no server was ever started gives an error
+ message without "\n".
+ "vim --serverlist" doesn't exit when the X server can't be
+ contacted, it starts Vim unexpectedly. (Ricardo Signes)
+Solution: Don't give an error when no Vim server was ever started.
+ Treat failing of opening the display equal to errors inside the
+ remote*() functions. (Flemming Madsen)
+Files: src/if_xcmdsrv.c, src/main.c
+
+Patch 6.1.350
+Problem: When entering a buffer with ":bnext" for the first time, using an
+ autocommand to restore the last used cursor position doesn't work.
+ (Paolo Giarusso)
+Solution: Don't use the last known cursor position of the current Vim
+ invocation if an autocommand changed the position.
+Files: src/buffer.c
+
+Patch 6.1.351 (depends on 6.1.349)
+Problem: Crash when starting Vim the first time in an X server. (John
+ McGowan)
+Solution: Don't call xFree() with a fixed string.
+Files: src/if_xcmdsrv.c
+
+Patch 6.1.352 (extra, depends on 6.1.345)
+Problem: Win32: Crash when setting "imdisable" in _vimrc.
+Solution: Don't call IME functions when imm32.dll was not loaded (yet).
+ Also add typecasts to avoid Compiler warnings for
+ ImmAssociateContext() argument.
+Files: src/gui_w32.c
+
+Patch 6.1.353 (extra, depends on 6.1.334)
+Problem: Problem with drawing Arabic characters.
+Solution: Don't use ETO_PDY, do use padding.
+Files: src/gui_w32.c
+
+Patch 6.1.354 (extra, depends on 6.1.333)
+Problem: MS-Windows 98: Notepad can't paste text copied from Vim when
+ 'encoding' is "utf-8".
+Solution: Also make CF_TEXT available on the clipboard. (Ron Aaron)
+Files: src/os_mswin.c
+
+Patch 6.1.355
+Problem: In a regexp '\n' will never match anything in a string.
+Solution: Make '\n' match a newline character.
+Files: src/buffer.c, src/edit.c, src/eval.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_getln.c, src/fileio.c, src/misc1.c,
+ src/option.c, src/os_mac.c, src/os_unix.c, src/quickfix.c,
+ src/regexp.c, src/search.c, src/syntax.c, src/tag.c, src/vim.h
+
+Patch 6.1.356 (extra, depends on, well, eh, several others)
+Problem: Compiler warnings for using convert_setup() and a few other
+ things.
+Solution: Add typecasts.
+Files: src/mbyte.c, src/os_mswin.c, src/proto/os_win32.pro, src/os_win32.c
+
+Patch 6.1.357
+Problem: CR in the quickfix window jumps to the error under the cursor, but
+ this doesn't work in Insert mode. (Srikanth Sankaran)
+Solution: Handle CR in Insert mode in the quickfix window.
+Files: src/edit.c
+
+Patch 6.1.358
+Problem: The tutor doesn't select another locale version properly.
+Solution: Insert the "let" command. (Yasuhiro Matsumoto)
+Files: runtime/tutor/tutor.vim
+
+Patch 6.1.359 (extra)
+Problem: Mac Carbon: Vim doesn't get focus when started from the command
+ line. Crash when using horizontal scroll bar.
+Solution: Set Vim as the frontprocess. Fix scrolling. (Peter Cucka)
+Files: src/gui_mac.c
+
+Patch 6.1.360 (depends on 6.1.341)
+Problem: In Insert mode CTRL-K ESC messes up a multi-byte character.
+ (Anders Helmersson)
+Solution: Save all bytes of a character when displaying a character
+ temporarily.
+Files: src/edit.c, src/proto/screen.pro, src/screen.c
+
+Patch 6.1.361
+Problem: Cannot jump to a file mark with ":'M".
+Solution: Allow jumping to another file for a mark in an Ex address when it
+ is the only thing in the command line.
+Files: src/ex_docmd.c
+
+Patch 6.1.362
+Problem: tgetent() may return zero for success. tgetflag() may return -1
+ for an error.
+Solution: Check tgetflag() for returning a positive value. Add an autoconf
+ check for the value that tgetent() returns.
+Files: src/auto/configure, src/config.h.in, src/configure.in, src/term.c
+
+Patch 6.1.363
+Problem: byte2line() can return one more than the number of lines.
+Solution: Return -1 if the offset is one byte past the end.
+Files: src/memline.c
+
+Patch 6.1.364
+Problem: That the FileChangedShell autocommand event never nests makes it
+ difficult to reload a file in a normal way.
+Solution: Allow nesting for the FileChangedShell event but do not allow
+ triggering itself again.
+ Also avoid autocommands for the cmdline window in rare cases.
+Files: src/ex_getln.c, src/fileio.c, src/window.c
+
+Patch 6.1.365 (depends on 6.1.217)
+Problem: Setting a breakpoint in a sourced file with a relative path name
+ doesn't work. (Servatius Brandt)
+Solution: Expand the file name to a full path.
+Files: src/ex_cmds2.c
+
+Patch 6.1.366
+Problem: Can't use Vim with Netbeans.
+Solution: Add the Netbeans interface. Includes support for sign icons and
+ "-fg" and "-bg" arguments for GTK. Add the 'autochdir'
+ option. (Gordon Prieur, George Hernandez, Dave Weatherford)
+ Make it possible to display both a sign with a text and one with
+ line highlighting in the same line.
+ Add support for Agide, interface version 2.1.
+ Also fix that when 'iskeyword' includes '?' the "*" command
+ doesn't work properly on a word that includes "?" (Bill McCarthy):
+ Don't escape "?" to "\?" when searching forward.
+Files: runtime/doc/Makefile, runtime/doc/netbeans.txt,
+ runtime/doc/options.txt, runtime/doc/various.txt,
+ src/Makefile, src/auto/configure, src/buffer.c, src/config.h.in,
+ src/config.mk.in, src/configure.in, src/edit.c, src/ex_cmds.c,
+ src/ex_docmd.c, src/feature.h, src/fileio.c, src/globals.h,
+ src/gui.c, src/gui_beval.c, src/gui_gtk_x11.c, src/gui_x11.c,
+ src/main.c, src/memline.c, src/misc1.c, src/misc2.c, src/move.c,
+ src/nbdebug.c, src/nbdebug.h, src/netbeans.c, src/normal.c,
+ src/ops.c, src/option.c, src/option.h, src/proto/buffer.pro,
+ src/proto/gui_beval.pro, src/proto/gui_gtk_x11.pro,
+ src/proto/gui_x11.pro, src/proto/misc2.pro,
+ src/proto/netbeans.pro, src/proto/normal.pro, src/proto/ui.pro,
+ src/proto.h, src/screen.c, src/structs.h, src/ui.c, src/undo.c,
+ src/vim.h, src/window.c, src/workshop.c
+
+Patch 6.1.367 (depends on 6.1.365)
+Problem: Setting a breakpoint in a function doesn't work. For a sourced
+ file it doesn't work when symbolic links are involved. (Servatius
+ Brandt)
+Solution: Expand the file name in the same way as do_source() does. Don't
+ prepend the path to a function name.
+Files: src/ex_cmds2.c
+
+Patch 6.1.368
+Problem: Completion for ":map" does not include <silent> and <script>.
+ ":mkexrc" do not save the <silent> attribute of mappings.
+Solution: Add "<silent>" to the generated map commands when appropriate.
+ (David Elstner)
+ Add <silent> and <script> to command line completion.
+Files: src/getchar.c
+
+Patch 6.1.369 (extra)
+Problem: VMS: Vim hangs when attempting to edit a read-only file in the
+ terminal. Problem with VMS filenames for quickfix.
+Solution: Rewrite low level input. Remove version number from file name in
+ a couple more places. Fix crash after patch 6.1.362. Correct
+ return code for system(). (Zoltan Arpadffy, Tomas Stehlik)
+Files: src/misc1.c, src/os_unix.c, src/os_vms.c, src/proto/os_vms.pro,
+ src/os_vms_conf.h, src/quickfix.c, src/ui.c
+
+Patch 6.1.370
+Problem: #ifdef nesting is unclear.
+Solution: Insert spaces to indicate the nesting.
+Files: src/os_unix.c
+
+Patch 6.1.371
+Problem: "%V" in 'statusline' doesn't show "0-1" in an empty line.
+Solution: Add one to the column when comparing with virtual column (Andrew
+ Pimlott)
+Files: src/buffer.c
+
+Patch 6.1.372
+Problem: With 16 bit ints there are compiler warnings. (Walter Briscoe)
+Solution: Change int into long.
+Files: src/structs.h, src/syntax.c
+
+Patch 6.1.373
+Problem: The default page header for printing is not translated.
+Solution: Add _() around the two places where "Page" is used. (Mike
+ Williams) Translate the default value of the 'titleold' and
+ 'printheader' options.
+Files: src/ex_cmds2.c, src/option.c
+
+Patch 6.1.374 (extra)
+Problem: MS-Windows: Cannot build GvimExt with MingW or Cygwin.
+Solution: Add makefile and modified resource files. (Rene de Zwart)
+ Also support Cygwin. (Alejandro Lopez_Valencia)
+Files: GvimExt/Make_cyg.mak, GvimExt/Make_ming.mak, GvimExt/Makefile,
+ GvimExt/gvimext_ming.def, GvimExt/gvimext_ming.rc
+
+Patch 6.1.375
+Problem: MS-Windows: ':!dir "%"' does not work for a file name with spaces.
+ (Xiangjiang Ma)
+Solution: Don't insert backslashes for spaces in a shell command.
+Files: src/ex_docmd.c
+
+Patch 6.1.376
+Problem: "vim --version" and "vim --help" have a non-zero exit code.
+ That is unusual. (Petesea)
+Solution: Use a zero exit code.
+Files: src/main.c
+
+Patch 6.1.377
+Problem: Can't add words to 'lispwords' option.
+Solution: Add P_COMMA and P_NODUP flags. (Haakon Riiser)
+Files: src/option.c
+
+Patch 6.1.378
+Problem: When two buffer-local user commands are ambiguous, a full match
+ with a global user command isn't found. (Hari Krishna Dara)
+Solution: Detect this situation and accept the global command.
+Files: src/ex_docmd.c
+
+Patch 6.1.379
+Problem: Linux with kernel 2.2 can't use the alternate stack in combination
+ with threading, causes an infinite loop.
+Solution: Don't use the alternate stack in this situation.
+Files: src/os_unix.c
+
+Patch 6.1.380
+Problem: When 'winminheight' is zero and the quickfix window is zero lines,
+ entering the window doesn't make it higher. (Christian J.
+ Robinson)
+Solution: Make sure the current window is at least one line high.
+Files: src/window.c
+
+Patch 6.1.381
+Problem: When a BufWriteCmd is used and it leaves the buffer modified, the
+ window may still be closed. (Hari Krishna Dara)
+Solution: Return FAIL from buf_write() when the buffer is still modified
+ after a BufWriteCmd autocommand was used.
+Files: src/fileio.c
+
+Patch 6.1.382 (extra)
+Problem: Win32 GUI: When using two monitors, the code that checks/fixes the
+ window size and position (e.g. when a font changes) doesn't work
+ properly. (George Reilly)
+Solution: Handle a double monitor situation. (Helmut Stiegler)
+Files: src/gui_w32.c
+
+Patch 6.1.383
+Problem: The filling of the status line doesn't work properly for
+ multi-byte characters. (Nam SungHyun)
+ There is no check for going past the end of the buffer.
+Solution: Properly distinguish characters and bytes. Properly check for
+ running out of buffer space.
+Files: src/buffer.c, src/ex_cmds2.c, src/proto/buffer.pro, src/screen.c
+
+Patch 6.1.384
+Problem: It is not possible to find if a certain patch has been included.
+ (Lubomir Host)
+Solution: Support using has() to check if a patch was included.
+Files: runtime/doc/eval.txt, src/eval.c, src/proto/version.pro,
+ src/version.c
+
+Patch 6.1.385 (depends on 6.1.383)
+Problem: Can't compile without the multi-byte feature.
+Solution: Move an #ifdef. (Christian J. Robinson)
+Files: src/buffer.c
+
+Patch 6.1.386
+Problem: Get duplicate tags when running ":helptags".
+Solution: Do the other halve of moving a section to another help file.
+Files: runtime/tagsrch.txt
+
+Patch 6.1.387 (depends on 6.1.373)
+Problem: Compiler warning for pointer cast.
+Solution: Add (char_u *).
+Files: src/option.c
+
+Patch 6.1.388 (depends on 6.1.384)
+Problem: Compiler warning for pointer cast.
+Solution: Add (char *). Only include has_patch() when used.
+Files: src/eval.c, src/version.c
+
+Patch 6.1.389 (depends on 6.1.366)
+Problem: Balloon evaluation doesn't work for GTK.
+ has("balloon_eval") doesn't work.
+Solution: Add balloon evaluation for GTK. Also improve displaying of signs.
+ (Daniel Elstner)
+ Also make ":gui" start the netbeans connection and avoid using
+ netbeans functions when the connection is not open.
+Files: src/Makefile, src/feature.h, src/gui.c, src/gui.h,
+ src/gui_beval.c, src/gui_beval.h, src/gui_gtk.c,
+ src/gui_gtk_x11.c, src/eval.c, src/memline.c, src/menu.c,
+ src/netbeans.c, src/proto/gui_beval.pro, src/proto/gui_gtk.pro,
+ src/structs.h, src/syntax.c, src/ui.c, src/workshop.c
+
+Patch 6.1.390 (depends on 6.1.389)
+Problem: It's not possible to tell Vim to save and exit through the
+ Netbeans interface. Would still try to send balloon eval text
+ after the connection is closed.
+ Can't use Unicode characters for sign text.
+Solution: Add functions "saveAndExit" and "getModified". Check for a
+ working connection before sending a balloonText event.
+ various other cleanups.
+ Support any character for sign text. (Daniel Elstner)
+Files: runtime/doc/netbeans.txt, runtime/doc/sign.txt, src/ex_cmds.c,
+ src/netbeans.c, src/screen.c
+
+Patch 6.1.391
+Problem: ml_get() error when using virtualedit. (Charles Campbell)
+Solution: Get a line from a specific window, not the current one.
+Files: src/charset.c
+
+Patch 6.1.392 (depends on 6.1.383)
+Problem: Highlighting in the 'statusline' is in the wrong position when an
+ item is truncated. (Zak Beck)
+Solution: Correct the start of 'statusline' items properly for a truncated
+ item.
+Files: src/buffer.c
+
+Patch 6.1.393
+Problem: When compiled with Python and threads, detaching the terminal may
+ cause Vim to loop forever.
+Solution: Add -pthread to $CFLAGS when using Python and gcc. (Daniel
+ Elstner)
+Files: src/auto/configure,, src/configure.in
+
+Patch 6.1.394 (depends on 6.1.390)
+Problem: The netbeans interface doesn't recognize multibyte glyph names.
+Solution: Check the number of cells rather than bytes to decide
+ whether a glyph name is not a filename. (Daniel Elstner)
+Files: src/netbeans.c
+
+Patch 6.1.395 (extra, depends on 6.1.369)
+Problem: VMS: OLD_VMS is never defined. Missing function prototype.
+Solution: Define OLD_VMS in Make_vms.mms. Add vms_sys_status() to
+ os_vms.pro. (Zoltan Arpadffy)
+Files: src/Make_vms.mms, src/proto/os_vms.pro
+
+Patch 6.1.396 (depends on 6.1.330)
+Problem: Compiler warnings for using enum.
+Solution: Add typecast to char_u.
+Files: src/gui_gtk_x11.c, src/gui_x11.c
+
+Patch 6.1.397 (extra)
+Problem: The install program may use a wrong path for the diff command if
+ there is a space in the install directory path.
+Solution: Use double quotes around the path if necessary. (Alejandro
+ Lopez-Valencia) Also use double quotes around the file name
+ arguments.
+Files: src/dosinst.c
+
+Patch 6.1.398
+Problem: Saving the typeahead for debug mode causes trouble for a test
+ script. (Servatius Brandt)
+Solution: Add the ":debuggreedy" command to avoid saving the typeahead.
+Files: runtime/doc/repeat.txt, src/ex_cmds.h, src/ex_cmds2.c,
+ src/ex_docmd.c, src/proto/ex_cmds2.pro
+
+Patch 6.1.399
+Problem: Warning for unused variable.
+Solution: Remove the variable two_or_more.
+Files: src/ex_cmds.c
+
+Patch 6.1.400 (depends on 6.1.381)
+Problem: When a BufWriteCmd wipes out the buffer it may still be accessed.
+Solution: Don't try accessing a buffer that has been wiped out.
+Files: src/fileio.c
+
+Patch 6.1.401 (extra)
+Problem: Building the Win16 version with Borland 5.01 doesn't work.
+ "make test" doesn't work with Make_dos.mak. (Walter Briscoe)
+Solution: Various fixes to the w16 makefile. (Walter Briscoe)
+ Don't use deltree. Use "mkdir \tmp" instead of "mkdir /tmp".
+Files: src/Make_w16.mak, src/testdir/Make_dos.mak
+
+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
+ error was encountered. Skip evaluating an expression in curly
+ braces when skipping. (Servatius Brandt)
+Files: src/eval.c
+
+Patch 6.1.403 (extra)
+Problem: MS-Windows 16 bit: compiler warnings.
+Solution: Add typecasts. (Walter Briscoe)
+Files: src/ex_cmds2.c, src/gui_w48.c, src/os_mswin.c, src/os_win16.c,
+ src/syntax.c
+
+Patch 6.1.404 (extra)
+Problem: Various small problems.
+Solution: Fix comments. Various small additions, changes in indent, removal
+ of unused items and fixes.
+Files: Makefile, README.txt, runtime/menu.vim, runtime/vimrc_example.vim,
+ src/INSTALL, src/INSTALLole.txt, src/Make_bc5.mak,
+ src/Make_cyg.mak, src/Make_ming.mak, src/Makefile,
+ src/config.h.in, src/edit.c, src/eval.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_getln.c, src/fileio.c, src/getchar.c,
+ src/gui.c, src/gui_gtk.c, src/gui_photon.c, src/if_cscope.c,
+ src/if_python.c, src/keymap.h, src/mark.c, src/mbyte.c,
+ src/message.c, src/misc1.c, src/misc2.c, src/normal.c,
+ src/option.c, src/os_os2_cfg.h, src/os_win32.c,
+ src/proto/getchar.pro, src/proto/message.pro,
+ src/proto/regexp.pro, src/screen.c, src/structs.h, src/syntax.c,
+ src/term.c, src/testdir/test15.in, src/testdir/test15.ok,
+ src/vim.rc, src/xxd/Make_cyg.mak, src/xxd/Makefile
+
+Patch 6.1.405
+Problem: A few files are missing from the toplevel Makefile.
+Solution: Add the missing files.
+Files: Makefile
+
+Patch 6.1.406 (depends on 6.1.392)
+Problem: When a statusline item doesn't fit arbitrary text appears.
+ (Christian J. Robinson)
+Solution: When there is just enough room but not for the "<" truncate the
+ statusline item like there is no room.
+Files: src/buffer.c
+
+Patch 6.1.407
+Problem: ":set scrollbind | help" scrollbinds the help window. (Andrew
+ Pimlott)
+Solution: Reset 'scrollbind' when opening a help window.
+Files: src/ex_cmds.c
+
+Patch 6.1.408
+Problem: When 'rightleft' is set unprintable character 0x0c is displayed as
+ ">c0<".
+Solution: Reverse the text of the hex character.
+Files: src/screen.c
+
+Patch 6.1.409
+Problem: Generating tags for the help doesn't work for some locales.
+Solution: Set LANG=C LC_ALL=C in the environment for "sort". (Daniel
+ Elstner)
+Files: runtime/doc/Makefile
+
+Patch 6.1.410 (depends on 6.1.390)
+Problem: Linking error when compiling with Netbeans but without sign icons.
+ (Malte Neumann)
+Solution: Don't define buf_signcount() when sign icons are unavailable.
+Files: src/buffer.c
+
+Patch 6.1.411
+Problem: When 'virtualedit' is set, highlighting a Visual block beyond the
+ end of a line may be wrong.
+Solution: Correct the virtual column when the end of the line is before the
+ displayed part of the line. (Muraoka Taro)
+Files: src/screen.c
+
+Patch 6.1.412
+Problem: When swapping terminal screens and using ":gui" to start the GUI,
+ the shell prompt may be after a hit-enter prompt.
+Solution: Output a newline in the terminal when starting the GUI and there
+ was a hit-enter prompt..
+Files: src/gui.c
+
+Patch 6.1.413
+Problem: When 'clipboard' contains "unnamed", "p" in Visual mode doesn't
+ work correctly.
+Solution: Save the register before overwriting it and put the resulting text
+ on the clipboard afterwards. (Muraoka Taro)
+Files: src/normal.c, src/ops.c
+
+Patch 6.1.414 (extra, depends on 6.1.369)
+Problem: VMS: Vim busy waits when waiting for input.
+Solution: Delay for a short while before getting another character. (Zoltan
+ Arpadffy)
+Files: src/os_vms.c
+
+Patch 6.1.415
+Problem: When there is a vertical split and a quickfix window, reducing the
+ size of the Vim window may result in a wrong window layout and a
+ crash.
+Solution: When reducing the window size and there is not enough space for
+ 'winfixheight' set the frame height to the larger height, so that
+ there is a retry while ignoring 'winfixheight'. (Yasuhiro
+ Matsumoto)
+Files: src/window.c
+
+Patch 6.1.416 (depends on 6.1.366)
+Problem: When using the Netbeans interface, a line with a sign cannot be
+ changed.
+Solution: Respect the GUARDEDOFFSET for sign IDs when checking for a guarded
+ area.
+Files: src/netbeans.c
+
+Patch 6.1.417
+Problem: Unprintable multi-byte characters are not handled correctly.
+ Multi-byte characters above 0xffff are displayed as another
+ character.
+Solution: Handle unprintable multi-byte characters. Display multi-byte
+ characters above 0xffff with a marker. Recognize UTF-16 words and
+ BOM words as unprintable. (Daniel Elstner)
+Files: src/charset.c, src/mbyte.c, src/screen.c
+
+Patch 6.1.418
+Problem: The result of strftime() is in the current locals. Need to
+ convert it to 'encoding'.
+Solution: Obtain the current locale and convert the argument for strftime()
+ to it and the result back to 'encoding'. (Daniel Elstner)
+Files: src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/mbyte.c,
+ src/proto/mbyte.pro, src/option.c, src/os_mswin.c
+
+Patch 6.1.419
+Problem: Vim doesn't compile on AIX 5.1.
+Solution: Don't define _NO_PROTO on this system. (Uribarri)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.420 (extra)
+Problem: convert_input() has an unnecessary STRLEN().
+ Conversion from UCS-2 to a codepage uses word count instead of
+ byte count.
+Solution: Remove the STRLEN() call. (Daniel Elstner)
+ Always use byte count for string_convert().
+Files: src/gui_w32.c, src/mbyte.c
+
+Patch 6.1.421 (extra, depends on 6.1.354)
+Problem: MS-Windows 9x: When putting text on the clipboard it can be in
+ the wrong encoding.
+Solution: Convert text to the active codepage for CF_TEXT. (Glenn Maynard)
+Files: src/os_mswin.c
+
+Patch 6.1.422
+Problem: Error in .vimrc doesn't cause hit-enter prompt when swapping
+ screens. (Neil Bird)
+Solution: Set msg_didany also when sending a message to the terminal
+ directly.
+Files: src/message.c
+
+Patch 6.1.423
+Problem: Can't find arbitrary text in help files.
+Solution: Added the ":helpgrep" command.
+Files: runtime/doc/various.txt, src/ex_cmds.h, src/ex_docmd.c,
+ src/proto/quickfix.pro, src/quickfix.c
+
+Patch 6.1.424 (extra)
+Problem: Win32: Gvim compiled with VC++ 7.0 run on Windows 95 does not show
+ menu items.
+Solution: Define $WINVER to avoid an extra item is added to MENUITEMINFO.
+ (Muraoka Taro)
+Files: src/Make_mvc.mak
+
+Patch 6.1.425
+Problem: ":helptags $VIMRUNTIME/doc" does not add the "help-tags" tag.
+Solution: Do add the "help-tags" tag for that specific directory.
+Files: src/ex_cmds.c
+
+Patch 6.1.426
+Problem: "--remote-wait +cmd file" waits forever. (Valery Kondakoff)
+Solution: Don't wait for the "+cmd" argument to have been edited.
+Files: src/main.c
+
+Patch 6.1.427
+Problem: Several error messages for regexp patterns are not translated.
+Solution: Use _() properly. (Muraoka Taro)
+Files: src/regexp.c
+
+Patch 6.1.428
+Problem: FreeBSD: wait() may hang when compiled with Python support and
+ doing a system() call in a startup script.
+Solution: Use waitpid() instead of wait() and poll every 10 msec, just like
+ what is done in the GUI.
+Files: src/os_unix.c
+
+Patch 6.1.429 (depends on 6.1.390)
+Problem: Crash when using showmarks.vim plugin. (Charles Campbell)
+Solution: Check for sign_get_text() returning a NULL pointer.
+Files: src/screen.c
+
+Patch 6.1.430
+Problem: In Lisp code backslashed parens should be ignored for "%". (Dorai)
+Solution: Skip over backslashed parens.
+Files: src/search.c
+
+Patch 6.1.431
+Problem: Debug commands end up in redirected text.
+Solution: Disable redirection while handling debug commands.
+Files: src/ex_cmds2.c
+
+Patch 6.1.432 (depends on 6.1.375)
+Problem: MS-Windows: ":make %:p" inserts extra backslashes. (David Rennalls)
+Solution: Don't add backslashes, handle it like ":!cmd".
+Files: src/ex_docmd.c
+
+Patch 6.1.433
+Problem: ":popup" only works for Win32.
+Solution: Add ":popup" support for GTK. (Daniel Elstner)
+Files: runtime/doc/gui.txt, src/ex_docmd.c, src/gui_gtk.c, src/menu.c,
+ src/proto/gui_gtk.pro
+
+Patch 6.1.434 (extra)
+Problem: Win32: When there are more than 32767 lines, the scrollbar has a
+ roundoff error.
+Solution: Make a click on an arrow move one line. Also move the code to
+ gui_w48.c, there is hardly any difference between the 16 bit and
+ 32 bit versions. (Walter Briscoe)
+Files: src/gui_w16.c, src/gui_w32.c, src/gui_w48.c
+
+Patch 6.1.435
+Problem: ":winsize x" resizes the Vim window to the minimal size. (Andrew
+ Pimlott)
+Solution: Give an error message for wrong arguments of ":winsize" and
+ ":winpos".
+Files: src/ex_docmd.c
+
+Patch 6.1.436
+Problem: When a long UTF-8 file contains an illegal byte it's hard to find
+ out where it is. (Ron Aaron)
+Solution: Add the line number to the error message.
+Files: src/fileio.c
+
+Patch 6.1.437 (extra, depends on 6.1.421)
+Problem: Using multi-byte functions when they are not available.
+Solution: Put the clipboard conversion inside an #ifdef. (Vince Negri)
+ Also fix a pointer type mistake. (Walter Briscoe)
+Files: src/os_mswin.c
+
+Patch 6.1.438
+Problem: When Perl has thread support Vim cannot use the Perl interface.
+Solution: Add a configure check and disable Perl when it will not work.
+ (Aron Griffis)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.1.439
+Problem: Netbeans: A "create" function doesn't actually create a buffer,
+ following functions may fail.
+Solution: Create a Vim buffer without a name when "create" is called.
+ (Gordon Prieur)
+Files: runtime/doc/netbeans.txt, src/netbeans.c
+
+Patch 6.1.440
+Problem: The "@*" command doesn't obtain the actual contents of the
+ clipboard. (Hari Krishna Dara)
+Solution: Obtain the clipboard text before executing the command.
+Files: src/ops.c
+
+Patch 6.1.441
+Problem: "zj" and "zk" cannot be used as a motion command after an
+ operator. (Ralf Hetzel)
+Solution: Accept these commands as motion commands.
+Files: src/normal.c
+
+Patch 6.1.442
+Problem: Unicode 3.2 defines more space and punctuation characters.
+Solution: Add the new characters to the Unicode tables. (Raphael Finkel)
+Files: src/mbyte.c
+
+Patch 6.1.443 (extra)
+Problem: Win32: The gvimext.dll build with Borland 5.5 requires another
+ DLL.
+Solution: Build a statically linked version by default. (Dan Sharp)
+Files: GvimExt/Make_bc5.mak
+
+Patch 6.1.444 (extra)
+Problem: Win32: Enabling a build with gettext support is not consistent.
+Solution: Use "GETTEXT" for Borland and msvc makefiles. (Dan Sharp)
+Files: src/Make_bc5.mak, src/Make_mvc.mak
+
+Patch 6.1.445 (extra)
+Problem: DJGPP: get warning for argument of putenv()
+Solution: Define HAVE_PUTENV to use DJGPP's putenv(). (Walter Briscoe)
+Files: src/os_msdos.h
+
+Patch 6.1.446 (extra)
+Problem: Win32: The MingW makefile uses a different style of arguments than
+ other makefiles.
+ Dynamic IME is not supported for Cygwin.
+Solution: Use "no" and "yes" style arguments. Remove the use of the
+ dyn-ming.h include file. (Dan Sharp)
+ Do not include the ime.h file and adjust the makefile. (Alejandro
+ Lopez-Valencia)
+Files: src/Make_cyg.mak, src/Make_ming.mak, src/gui_w32.c,
+ src/if_perl.xs, src/if_python.c, src/if_ruby.c, src/os_win32.c
+
+Patch 6.1.447
+Problem: "make install" uses "make" directly for generating help tags.
+Solution: Use $(MAKE) instead of "make". (Tim Mooney)
+Files: src/Makefile
+
+Patch 6.1.448
+Problem: 'titlestring' has a default maximum width of 50 chars per item.
+Solution: Remove the default maximum (also for 'statusline').
+Files: src/buffer.c
+
+Patch 6.1.449
+Problem: When "1" and "a" are in 'formatoptions', auto-formatting always
+ moves a newly added character to the next line. (Servatius Brandt)
+Solution: Don't move a single character to the next line when it was just
+ typed.
+Files: src/edit.c
+
+Patch 6.1.450
+Problem: Termcap entry "kB" for back-tab is not recognized.
+Solution: Use back-tab as the shift-tab code.
+Files: src/keymap.h, src/misc2.c, src/term.c
+
+Patch 6.1.451
+Problem: GUI: When text in the find dialog contains a slash, a backslash is
+ inserted the next time it is opened. (Mezz)
+Solution: Remove escaped backslashes and question marks. (Daniel Elstner)
+Files: src/gui.c
+
+Patch 6.1.452 (extra, after 6.1.446)
+Problem: Win32: IME support doesn't work for MSVC.
+Solution: Use _MSC_VER instead of __MSVC. (Alejandro Lopez-Valencia)
+Files: src/gui_w32.c
+
+Patch 6.1.453 (after 6.1.429)
+Problem: When compiled without sign icons but with sign support, adding a
+ sign may cause a crash.
+Solution: Check for the text sign to exist before using it. (Kamil
+ Burzynski)
+Files: src/screen.c
+
+Patch 6.1.454 (extra)
+Problem: Win32: pasting Russian text in Vim with 'enc' set to cp1251
+ results in utf-8 bytes. (Perelyubskiy)
+ Conversion from DBCS to UCS2 does not work when 'encoding' is not
+ the active codepage.
+Solution: Introduce enc_codepage and use it for conversion to 'encoding'
+ (Glenn Maynard)
+ Use MultiByteToWideChar() and WideCharToMultiByte() instead of
+ iconv(). Should do most needed conversions without iconv.dll.
+Files: src/globals.h, src/gui_w32.c, src/mbyte.c, src/os_mswin.c,
+ src/proto/mbyte.pro, src/proto/os_mswin.pro, src/structs.h
+
+Patch 6.1.455
+Problem: Some Unicode characters can be one or two character cells wide.
+Solution: Add the 'ambiwidth' option to tell Vim how to display these
+ characters. (Jungshik Shin)
+ Also reset the script ID when setting an option to its default
+ value, so that ":verbose set" won't give wrong info.
+Files: runtime/doc/options.txt, src/mbyte.c, src/option.c, src/option.h
+
+Patch 6.1.456 (extra, after 6.1.454)
+Problem: Win32: IME doesn't work.
+Solution: ImmGetCompositionStringW() returns the size in bytes, not words.
+ (Yasuhiro Matsumoto) Also fix typecast problem.
+Files: src/gui_w32.c, src/os_mswin.c
+
+Patch 6.1.457
+Problem: An empty register in viminfo causes conversion to fail.
+Solution: Don't convert an empty string. (Yasuhiro Matsumoto)
+Files: src/ex_cmds.c, src/mbyte.c
+
+Patch 6.1.458
+Problem: Compiler warning for pointer.
+Solution: Add a typecast.
+Files: src/ex_cmds.c
+
+Patch 6.1.459 (extra)
+Problem: Win32: libcall() may return an invalid pointer and cause Vim to
+ crash.
+Solution: Add a strict check for the returned pointer. (Bruce Mellows)
+Files: src/os_mswin.c
+
+Patch 6.1.460
+Problem: GTK: after scrolling the text one line with a key, clicking the
+ arrow of the scrollbar does not always work. (Nam SungHyun)
+Solution: Always update the scrollbar thumb when the value changed, even
+ when it would not move, like for RISCOS. (Daniel Elstner)
+Files: src/gui.c, src/gui.h
+
+Patch 6.1.461
+Problem: When a keymap is active, typing a character in Select mode does
+ not use it. (Benji Fisher)
+Solution: Apply Insert mode mapping to the character typed in Select mode.
+Files: src/normal.c
+
+Patch 6.1.462
+Problem: When autocommands wipe out a buffer, a crash may happen. (Hari
+ Krishna Dara)
+Solution: Don't decrement the window count of a buffer before calling the
+ autocommands for it. When re-using the current buffer, watch out
+ for autocommands changing the current buffer.
+Files: src/buffer.c, src/ex_cmds.c, src/proto/buffer.pro
+
+Patch 6.1.463
+Problem: When writing a compressed file, the file name that gzip stores in
+ the file is the weird temporary file name. (David Rennalls)
+Solution: Use the real file name when possible.
+Files: runtime/plugin/gzip.vim
+
+Patch 6.1.464
+Problem: Crash when using C++ syntax highlighting. (Gerhard Hochholzer)
+Solution: Check for a negative index.
+Files: src/syntax.c
+
+Patch 6.1.465 (after 6.1.454)
+Problem: Compile error when using cygwin.
+Solution: Change #ifdef WIN32 to #ifdef WIN3264. (Alejandro Lopez-Valencia)
+ Undefine WIN32 after including windows.h
+Files: src/mbyte.c
+
+Patch 6.1.466
+Problem: The "-f" argument is a bit obscure.
+Solution: Add the "--nofork" argument. Improve the help text a bit.
+Files: runtime/doc/starting.txt, src/main.c
+
+Patch 6.1.467
+Problem: Setting the window title doesn't work for Chinese.
+Solution: Use an X11 function to convert text to a text property. (Kentaro
+ Nakazawa)
+Files: src/os_unix.c
+
+Patch 6.1.468
+Problem: ":mksession" also stores folds for buffers which will not be
+ restored.
+Solution: Only store folds for a buffer with 'buftype' empty and help files.
+Files: src/ex_docmd.c
+
+Patch 6.1.469
+Problem: 'listchars' cannot contain multi-byte characters.
+Solution: Handle multi-byte UTF-8 list characters. (Matthew Samsonoff)
+Files: src/message.c, src/option.c, src/screen.c
+
+Patch 6.1.470 (lang)
+Problem: Polish messages don't show up correctly on MS-Windows.
+Solution: Convert messages to cp1250. (Mikolaj Machowski)
+ Also add English message translations, because it got in the way
+ of the patch.
+Files: Makefile, src/po/Makefile, src/po/en_gb.po, src/po/pl.po
+
+Patch 6.1.471
+Problem: ":jumps" output continues after pressing "q" at the more-prompt.
+ (Hari Krishna Dara)
+Solution: Check for "got_int" being set.
+Files: src/mark.c
+
+Patch 6.1.472
+Problem: When there is an authentication error when connecting to the X
+ server Vim exits.
+Solution: Use XSetIOErrorHandler() to catch the error and longjmp() to avoid
+ the exit. Also do this in the main loop, so that when the X
+ server exits a Vim running in a console isn't killed.
+Files: src/globals.h, src/main.c, src/os_unix.c
+
+Patch 6.1.473
+Problem: Referring to $curwin or $curbuf in Perl 5.6 causes a crash.
+Solution: Add "pTHX_" to cur_val(). (Yasuhiro Matsumoto)
+Files: src/if_perl.xs
+
+Patch 6.1.474
+Problem: When opening the command-line window in Ex mode it's impossible to
+ go back. (Pavol Juhas)
+Solution: Reset "exmode_active" and restore it when the command-line window
+ is closed.
+Files: src/ex_getln.c
+
+
+Patch 6.2f.001
+Problem: The configure check for Ruby didn't work properly for Ruby 1.8.0.
+Solution: Change the way the Ruby check is done. (Aron Griffis)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2f.002
+Problem: The output of ":ls" doesn't show whether a buffer had read errors.
+Solution: Add the "x" flag in the ":ls" output.
+Files: runtime/doc/windows.txt, src/buffer.c
+
+Patch 6.2f.003
+Problem: Test49 doesn't properly test the behavior of ":catch" without an
+ argument.
+Solution: Update test49. (Servatius Brandt)
+Files: src/testdir/test49.ok, src/testdir/test49.vim
+
+Patch 6.2f.004
+Problem: "vim --version" always uses CR/LF in the output.
+Solution: Omit the CR.
+Files: src/message.c, src/os_unix.c
+
+Patch 6.2f.005
+Problem: Two error messages without a colon after the number.
+Solution: Add the colon. (Taro Muraoka)
+Files: src/if_cscope.c
+
+Patch 6.2f.006
+Problem: When saving a file takes a while and Vim regains focus this can
+ result in a "file changed outside of Vim" warning and ml_get()
+ errors. (Mike Williams)
+Solution: Add the "b_saving" flag to avoid checking the timestamp while the
+ buffer is being saved. (Michael Schaap)
+Files: src/fileio.c, src/structs.h
+
+Patch 6.2f.007
+Problem: Irix compiler complains about multiple defined symbols.
+ vsnprintf() is not available. (Charles Campbell)
+Solution: Insert EXTERN for variables in globals.h. Change the configure
+ check for vsnprintf() from compiling to linking.
+Files: src/auto/configure, src/configure.in, src/globals.h
+
+Patch 6.2f.008
+Problem: The Aap recipe doesn't work with Aap 0.149.
+Solution: Change targetarg to TARGETARG. Update the mysign file.
+Files: src/main.aap, src/mysign
+
+Patch 6.2f.009 (extra)
+Problem: Small problem when building with Borland 5.01.
+Solution: Use mkdir() instead of _mkdir(). (Walter Briscoe)
+Files: src/dosinst.h
+
+Patch 6.2f.010
+Problem: Warning for missing prototypes.
+Solution: Add missing prototypes. (Walter Briscoe)
+Files: src/if_cscope.c
+
+Patch 6.2f.011
+Problem: The configure script doesn't work with autoconf 2.5x.
+Solution: Add square brackets around a header check. (Aron Griffis)
+ Note: touch src/auto/configure after applying this patch.
+Files: src/configure.in
+
+Patch 6.2f.012
+Problem: ":echoerr" doesn't work correctly inside try/endtry.
+Solution: Don't reset did_emsg inside a try/endtry. (Servatius Brandt)
+Files: src/eval.c
+
+Patch 6.2f.013 (extra)
+Problem: Macintosh: Compiler warning for a trigraph.
+Solution: Insert a backslash before each question mark. (Peter Cucka)
+Files: src/os_mac.h
+
+Patch 6.2f.014 (extra)
+Problem: Macintosh: ex_eval is not included in the project file.
+Solution: Add ex_eval. (Dany St-Amant)
+Files: src/os_mac.pbproj/project.pbxproj
+
+Patch 6.2f.015 (extra)
+Problem: Win32: When changing header files not all source files involved
+ are recompiled.
+Solution: Improve the dependency rules. (Dan Sharp)
+Files: src/Make_cyg.mak, src/Make_ming.mak
+
+Patch 6.2f.016
+Problem: "vim --version > ff" on non-Unix systems results in a file with a
+ missing line break at the end. (Bill McCArthy)
+Solution: Add a line break.
+Files: src/main.c
+
+Patch 6.2f.017
+Problem: Unix: starting Vim in the background and then bringing it to the
+ foreground may cause the terminal settings to be wrong.
+Solution: Check for tcsetattr() to return an error, retry when it does.
+ (Paul Tapper)
+Files: src/os_unix.c
+
+Patch 6.2f.018
+Problem: Mac OS X 10.2: OK is defined to zero in cursus.h while Vim uses
+ one. Redefining it causes a warning message.
+Solution: Undefine OK before defining it to one. (Taro Muraoka)
+Files: src/vim.h
+
+Patch 6.2f.019
+Problem: Mac OS X 10.2: COLOR_BLACK and COLOR_WHITE are defined in
+ curses.h.
+Solution: Rename them to PRCOLOR_BLACK and PRCOLOR_WHITE.
+Files: src/ex_cmds2.c
+
+Patch 6.2f.020
+Problem: Win32: test50 produces beeps and fails with some versions of diff.
+Solution: Remove empty lines and convert the output to dos fileformat.
+Files: src/testdir/test50.in
+
+Patch 6.2f.021
+Problem: Running configure with "--enable-netbeans" disables Netbeans.
+ (Gordon Prieur)
+Solution: Fix the tests in configure.in where the default is to enable a
+ feature. Fix that "--enable-acl" reported "yes" confusingly.
+Files: src/auto/configure, src/configure.in, src/mysign
+
+Patch 6.2f.022
+Problem: A bogus value for 'foldmarker' is not rejected, possibly causing a
+ hang. (Derek Wyatt)
+Solution: Check for a non-empty string before and after the comma.
+Files: src/option.c
+
+Patch 6.2f.023
+Problem: When the help files are not in $VIMRUNTIME but 'helpfile' is
+ correct Vim still can't find the help files.
+Solution: Also look for a tags file in the directory of 'helpfile'.
+Files: src/tag.c
+
+Patch 6.2f.024
+Problem: When 'delcombine' is set and a character has more than two
+ composing characters "x" deletes them all.
+Solution: Always delete only the last composing character.
+Files: src/misc1.c
+
+Patch 6.2f.025
+Problem: When reading a file from stdin that has DOS line endings but a
+ missing end-of-line for the last line 'fileformat' becomes "unix".
+ (Bill McCarthy)
+Solution: Don't add the missing line break when re-reading the text from the
+ buffer.
+Files: src/fileio.c
+
+Patch 6.2f.026
+Problem: When typing new text at the command line, old composing characters
+ may be displayed.
+Solution: Don't read composing characters from after the end of the
+ text to be displayed.
+Files: src/ex_getln.c, src/mbyte.c, src/message.c, src/proto/mbyte.pro,
+ src/screen.c
+
+Patch 6.2f.027
+Problem: Compiler warnings for unsigned char pointers. (Tony Leneis)
+Solution: Add typecasts to char pointer.
+Files: src/quickfix.c
+
+Patch 6.2f.028
+Problem: GTK: When 'imactivatekey' is empty and XIM is inactive it can't be
+ made active again. Cursor isn't updated immediately when changing
+ XIM activation. Japanese XIM may hang when using 'imactivatekey'.
+ Can't activate XIM after typing fFtT command or ":sh".
+Solution: Properly set the flag that indicates the IM is active. Update the
+ cursor right away. Do not send a key-release event. Handle
+ Normal mode and running an external command differently.
+ (Yasuhiro Matsumoto)
+Files: src/mbyte.c
+
+Patch 6.2f.029
+Problem: Mixing use of int and enum.
+Solution: Adjust argument type of cs_usage_msg(). Fix wrong typedef.
+Files: src/if_cscope.c, src/if_cscope.h
+
+Patch 6.2f.030 (after 6.2f.028)
+Problem: Cursor moves up when using XIM.
+Solution: Reset im_preedit_cursor. (Yasuhiro Matsumoto)
+Files: src/mbyte.c
+
+Patch 6.2f.031
+Problem: Crash when listing a function argument in the debugger. (Ron Aaron)
+Solution: Init the name field of an argument to NULL.
+Files: src/eval.c
+
+Patch 6.2f.032
+Problem: When a write fails for a ":silent!" while inside try/endtry the
+ BufWritePost autocommands are not triggered.
+Solution: Check the emsg_silent flag in should_abort(). (Servatius Brandt)
+Files: src/ex_eval.c, src/testdir/test49.ok, src/testdir/test49.vim
+
+Patch 6.2f.033
+Problem: Cscope: re-entrance problem for ":cscope" command. Checking for
+ duplicate database didn't work well for Win95. Didn't check for
+ duplicate databases after an empty entry.
+Solution: Don't set postponed_split too early. Remember first empty
+ database entry. (Sergey Khorev)
+Files: src/if_cscope.c
+
+Patch 6.2f.034
+Problem: The netbeans interface cannot be used on systems without
+ vsnprintf(). (Tony Leneis)
+Solution: Use EMSG(), EMSGN() and EMSG2() instead.
+Files: src/auto/configure, src/configure.in, src/netbeans.c
+
+Patch 6.2f.035
+Problem: The configure check for the netbeans interface doesn't work if the
+ socket and nsl libraries are required.
+Solution: Check for the socket and nsl libraries before the netbeans check.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2f.036
+Problem: Moving leftwards over text with an illegal UTF-8 byte moves one
+ byte instead of one character.
+Solution: Ignore an illegal byte after the cursor position.
+Files: src/mbyte.c
+
+Patch 6.2f.037
+Problem: When receiving a Netbeans command at the hit-enter or more prompt
+ the screen is redrawn but Vim is still waiting at the prompt.
+Solution: Quit the prompt like a CTRL-C was typed.
+Files: src/netbeans.c
+
+Patch 6.2f.038
+Problem: The dependency to run autoconf causes a patch for configure.in
+ to run autoconf, even though the configure script was updated as
+ well.
+Solution: Only run autoconf with "make autoconf".
+Files: src/Makefile
+
+Patch 6.2f.039
+Problem: CTRL-W K makes the new top window very high.
+Solution: When 'equalalways' is set equalize the window heights.
+Files: src/window.c
+
+
+==============================================================================
+VERSION 6.3 *version-6.3*
+
+This section is about improvements made between version 6.2 and 6.3.
+
+This is mainly a bug-fix release. There are also a few new features.
+The major number of new items is in the runtime files and translations.
+
+
+Changed *changed-6.3*
+-------
+
+The intro message also displays a note about sponsoring Vim, mixed randomly
+with the message about helping children in Uganda.
+
+Included the translated menus, keymaps and tutors with the normal runtime
+files. The separate "lang" archive now only contains translated messages.
+
+Made the translated menu file names a bit more consistent. Use "latin1" for
+"iso_8859-1" and "iso_8859-15".
+
+Removed the "file_select.vim" script from the distribution. It's not more
+useful than other scripts that can be downloaded from www.vim.org.
+
+The "runtime/doc/tags" file is now always in unix fileformat. On MS-Windows
+it used to be dos fileformat, but ":helptags" generates a unix format file.
+
+
+Added *added-6.3*
+-----
+
+New commands:
+ :cNfile go to last error in previous file
+ :cpfile idem
+ :changes print the change list
+ :keepmarks following command keeps marks where they are
+ :keepjumps following command keeps jumplist and marks
+ :lockmarks following command keeps marks where they are
+ :redrawstatus force a redraw of the status line(s)
+
+New options:
+ 'antialias' Mac OS X: use smooth, antialiased fonts
+ 'helplang' preferred help languages
+
+Syntax files:
+ Arch inventory (Nikolai Weibull)
+ Calendar (Nikolai Weibull)
+ Ch (Wayne Cheng)
+ Controllable Regex Mutilator (Nikolai Weibull)
+ D (Jason Mills)
+ Desktop (Mikolaj Machowski)
+ Dircolors (Nikolai Weibull)
+ Elinks configuration (Nikolai Weibull)
+ FASM (Ron Aaron)
+ GrADS scripts (Stefan Fronzek)
+ Icewm menu (James Mahler)
+ LDIF (Zak Johnson)
+ Locale input, fdcc. (Dwayne Bailey)
+ Pinfo config (Nikolai Weibull)
+ Pyrex (Marco Barisione)
+ Relax NG Compact (Nikolai Weibull)
+ Slice (Morel Bodin)
+ VAX Macro Assembly (Tom Uijldert)
+ grads (Stefan Fronzek)
+ libao (Nikolai Weibull)
+ mplayer (Nikolai Weibull)
+ rst (Nikolai Weibull)
+ tcsh (Gautam Iyer)
+ yaml (Nikolai Weibull)
+
+Compiler plugins:
+ ATT dot (Marcos Macedo)
+ Apple Project Builder (Alexander von Below)
+ Intel (David Harrison)
+ bdf (Nikolai Weibull)
+ icc (Peter Puck)
+ javac (Doug Kearns)
+ neato (Marcos Macedo)
+ onsgmls (Robert B. Rowsome)
+ perl (Christian J. Robinson)
+ rst (Nikolai Weibull)
+ se (SmartEiffel) (Doug Kearns)
+ tcl (Doug Kearns)
+ xmlwf (Robert B. Rowsome)
+
+Filetype plugins:
+ Aap (Bram Moolenaar)
+ Ch (Wayne Cheng)
+ Css (Nikolai Weibull)
+ Pyrex (Marco Barisione)
+ Rst (Nikolai Weibull)
+
+Indent scripts:
+ Aap (Bram Moolenaar)
+ Ch (Wayne Cheng)
+ DocBook (Nikolai Weibull)
+ MetaPost (Eugene Minkovskii)
+ Objective-C (Kazunobu Kuriyama)
+ Pyrex (Marco Barisione)
+ Rst (Nikolai Weibull)
+ Tcsh (Gautam Iyer)
+ XFree86 configuration file (Nikolai Weibull)
+ Zsh (Nikolai Weibull)
+
+Keymaps:
+ Greek for cp1253 (Panagiotis Louridas)
+ Hungarian (Magyar) (Laszlo Zavaleta)
+ Persian-Iranian (Behnam Esfahbod)
+
+Message translations:
+ Catalan (Ernest Adrogue)
+ Russian (Vassily Ragosin)
+ Swedish (Johan Svedberg)
+
+Menu translations:
+ Catalan (Ernest Adrogue)
+ Russian (Tim Alexeevsky)
+ Swedish (Johan Svedberg)
+
+Tutor translations:
+ Catalan (Ernest Adrogue)
+ Russian in cp1251 (Alexey Froloff)
+ Slovak in cp1251 and iso8859-2 (Lubos Celko)
+ Swedish (Johan Svedberg)
+ Korean (Kee-Won Seo)
+ UTF-8 version of the Japanese tutor (Yasuhiro Matsumoto) Use this as
+ the original, create the other Japanese tutor by conversion.
+
+Included "russian.txt" help file. (Vassily Ragosin)
+
+Include Encapsulated PostScript and PDF versions of the Vim logo in the extra
+archive.
+
+The help highlighting finds the highlight groups and shows them in the color
+that is actually being used. (idea from Yakov Lerner)
+
+The big Win32 version is now compiled with Ruby interface, version 1.8. For
+Python version 2.3 is used. For Perl version 5.8 is used.
+
+The "ftdetect" directory is mentioned in the documentation. The DOS install
+program creates it.
+
+
+Fixed *fixed-6.3*
+-----
+
+Test 42 failed on MS-Windows. Set and reset 'fileformat' and 'binary' options
+here and there. (Walter Briscoe)
+
+The explorer plugin didn't work for double-byte 'encoding's.
+
+Use "copy /y" in Make_bc5.mak to avoid a prompt for overwriting.
+
+Patch 6.2.001
+Problem: The ":stopinsert" command doesn't have a help tag.
+Solution: Add the tag. (Antoine J. Mechelynck)
+Files: runtime/doc/insert.txt, runtime/doc/tags
+
+Patch 6.2.002
+Problem: When compiled with the +multi_byte feature but without +eval,
+ displaying UTF-8 characters may cause a crash. (Karsten Hopp)
+Solution: Also set the default for 'ambiwidth' when compiled without the
+ +eval feature.
+Files: src/option.c
+
+Patch 6.2.003
+Problem: GTK 2: double-wide characters below 256 are not displayed
+ correctly.
+Solution: Check the cell width for characters above 127. (Yasuhiro
+ Matsumoto)
+Files: src/gui_gtk_x11.c
+
+Patch 6.2.004
+Problem: With a line-Visual selection at the end of the file a "p" command
+ puts the text one line upwards.
+Solution: Detect that the last line was deleted and put forward. (Taro
+ Muraoka)
+Files: src/normal.c
+
+Patch 6.2.005
+Problem: GTK: the "Find" and "Find and Replace" tools don't work. (Aschwin
+ Marsman)
+Solution: Show the dialog after creating it. (David Necas)
+Files: src/gui_gtk.c
+
+Patch 6.2.006
+Problem: The Netbeans code contains an obsolete function that uses "vim61"
+ and sets the fall-back value for $VIMRUNTIME.
+Solution: Delete the obsolete function.
+Files: src/main.c, src/netbeans.c, src/proto/netbeans.pro
+
+Patch 6.2.007
+Problem: Listing tags for Cscope doesn't always work.
+Solution: Avoid using smgs_attr(). (Sergey Khorev)
+Files: src/if_cscope.c
+
+Patch 6.2.008
+Problem: XIM with GTK 2: After backspacing preedit characters are wrong.
+Solution: Reset the cursor position. (Yasuhiro Matsumoto)
+Files: src/mbyte.c
+
+Patch 6.2.009
+Problem: Win32: The self-installing executable "Full" selection only
+ selects some of the items to install. (Salman Mohsin)
+Solution: Change commas to spaces in between section numbers.
+Files: nsis/gvim.nsi
+
+Patch 6.2.010
+Problem: When 'virtualedit' is effective and a line starts with a
+ multi-byte character, moving the cursor right doesn't work.
+Solution: Obtain the right character to compute the column offset. (Taro
+ Muraoka)
+Files: src/charset.c
+
+Patch 6.2.011
+Problem: Alpha OSF1: stat() is a macro and doesn't allow an #ifdef halfway.
+ (Moshe Kaminsky)
+Solution: Move the #ifdef outside of stat().
+Files: src/os_unix.c
+
+Patch 6.2.012
+Problem: May hang when polling for a character.
+Solution: Break the wait loop when not waiting for a character.
+Files: src/os_unix.c
+
+Patch 6.2.013 (extra)
+Problem: Win32: The registry key for uninstalling GvimExt still uses "6.1".
+Solution: Change the version number to "6.2". (Ajit Thakkar)
+Files: src/GvimExt/GvimExt.reg
+
+Patch 6.2.014 (after 6.2.012)
+Problem: XSMP doesn't work when using poll().
+Solution: Use xsmp_idx instead of gpm_idx. (Neil Bird)
+Files: src/os_unix.c
+
+Patch 6.2.015
+Problem: The +xsmp feature is never enabled.
+Solution: Move the #define for USE_XSMP to below where WANT_X11 is defined.
+ (Alexey Froloff)
+Files: src/feature.h
+
+Patch 6.2.016
+Problem: Using ":scscope find" with 'cscopequickfix' does not always split
+ the window. (Gary Johnson)
+ Win32: ":cscope add" could make the script that contains it
+ read-only until the corresponding ":cscope kill".
+ Errors during ":cscope add" may not be handled properly.
+Solution: When using the quickfix window may need to split the window.
+ Avoid file handle inheritance for the script.
+ Check for a failed connection and/or process. (Sergey Khorev)
+Files: src/ex_cmds2.c, src/if_cscope.c
+
+Patch 6.2.017
+Problem: Test11 sometimes prompts the user, because a file would have been
+ changed outside of Vim. (Antonio Colombo)
+Solution: Add a FileChangedShell autocommand to avoid the prompt.
+Files: src/testdir/test11.in
+
+Patch 6.2.018
+Problem: When using the XSMP protocol and reading from stdin Vim may wait
+ for a key to be pressed.
+Solution: Avoid that RealWaitForChar() is used recursively.
+Files: src/os_unix.c
+
+Patch 6.2.019 (lang)
+Problem: Loading the Portuguese menu causes an error message.
+Solution: Join two lines. (Jose Pedro Oliveira, José de Paula)
+Files: runtime/lang/menu_pt_br.vim
+
+Patch 6.2.020
+Problem: The "Syntax/Set syntax only" menu item causes an error message.
+ (Oyvind Holm)
+Solution: Set the script-local variable in a function. (Benji Fisher)
+Files: runtime/synmenu.vim
+
+Patch 6.2.021
+Problem: The user manual section on exceptions contains small mistakes.
+Solution: Give a good example of an error that could be missed and other
+ improvements. (Servatius Brandt)
+Files: runtime/doc/usr_41.txt
+
+Patch 6.2.022 (extra)
+Problem: Win32: After deleting a menu item it still appears in a tear-off
+ window.
+Solution: Set the mode to zero for the deleted item. (Yasuhiro Matsumoto)
+Files: src/gui_w32.c
+
+Patch 6.2.023 (extra)
+Problem: Win32: Make_ivc.mak does not clean everything.
+Solution: Delete more files in the clean rule. (Walter Briscoe)
+Files: src/Make_ivc.mak
+
+Patch 6.2.024 (extra)
+Problem: Win32: Compiler warnings for typecasts.
+Solution: Use DWORD instead of WORD. (Walter Briscoe)
+Files: src/gui_w32.c
+
+Patch 6.2.025
+Problem: Missing prototype for sigaltstack().
+Solution: Add the prototype when it is not found in a header file.
+Files: src/os_unix.c
+
+Patch 6.2.026
+Problem: Warning for utimes() argument.
+Solution: Add a typecast.
+Files: src/fileio.c
+
+Patch 6.2.027
+Problem: Warning for uninitialized variable.
+Solution: Set mb_l to one when not using multi-byte characters.
+Files: src/message.c
+
+Patch 6.2.028
+Problem: Cscope connection may kill Vim process and others.
+Solution: Check for pid being larger than one. (Khorev Sergey)
+Files: src/if_cscope.c
+
+Patch 6.2.029
+Problem: When using the remote server functionality Vim may leak memory.
+ (Srikanth Sankaran)
+Solution: Free the result of XListProperties().
+Files: src/if_xcmdsrv.c
+
+Patch 6.2.030
+Problem: Mac: Warning for not being able to use precompiled header files.
+Solution: Don't redefine select. Use -no-cpp-precomp for compiling, so that
+ function prototypes are still found.
+Files: src/os_unix.c, src/osdef.sh
+
+Patch 6.2.031
+Problem: The langmenu entry in the options window doesn't work. (Rodolfo
+ Lima)
+ With GTK 1 the ":options" command causes an error message.
+ (Michael Naumann)
+Solution: Change "lmenu" to "langmenu". Only display the 'tbis' option for
+ GTK 2.
+Files: runtime/optwin.vim
+
+Patch 6.2.032
+Problem: The lpc filetype is never recognized. (Shizhu Pan)
+Solution: Check for g:lpc_syntax_for_c instead of the local variable
+ lpc_syntax_for_c. (Benji Fisher)
+Files: runtime/filetype.vim
+
+Patch 6.2.033 (extra)
+Problem: Mac: Various compiler warnings.
+Solution: Don't include Classic-only headers in Unix version.
+ Remove references to several unused variables. (Ben Fowler)
+ Fix double definition of DEFAULT_TERM.
+ Use int instead of unsigned short for pixel values, so that the
+ negative error values are recognized.
+Files: src/gui_mac.c, src/term.c
+
+Patch 6.2.034
+Problem: Mac: Compiler warning for redefining DEFAULT_TERM.
+Solution: Fix double definition of DEFAULT_TERM.
+Files: src/term.c
+
+Patch 6.2.035
+Problem: Mac: Compiler warnings in Python interface.
+Solution: Make a difference between pure Mac and Unix-Mac. (Peter Cucka)
+Files: src/if_python.c
+
+Patch 6.2.036 (extra)
+Problem: Mac Unix version: If foo is a directory, then ":e f<Tab>" should
+ expand to ":e foo/" instead of ":e foo" . (Vadim Zeitlin)
+Solution: Define DONT_ADD_PATHSEP_TO_DIR only for pure Mac. (Benji Fisher)
+Files: src/os_mac.h
+
+Patch 6.2.037
+Problem: Win32: converting an encoding name to a codepage could result in
+ an arbitrary number.
+Solution: make encname2codepage() return zero if the encoding name doesn't
+ contain a codepage number.
+Files: src/mbyte.c
+
+Patch 6.2.038 (extra)
+Problem: Warning messages when using the MingW compiler. (Bill McCarthy)
+ Can't compile console version without +mouse feature.
+Solution: Initialize variables, add parenthesis.
+ Add an #ifdef around g_nMouseClick. (Ajit Thakkar)
+Files: src/eval.c, src/os_win32.c, src/gui_w32.c, src/dosinst.c
+
+Patch 6.2.039 (extra)
+Problem: More warning messages when using the MingW compiler.
+Solution: Initialize variables. (Bill McCarthy)
+Files: src/os_mswin.c
+
+Patch 6.2.040
+Problem: FreeBSD: Crash while starting up when compiled with +xsmp feature.
+Solution: Pass a non-NULL argument to IceAddConnectionWatch().
+Files: src/os_unix.c
+
+Patch 6.2.041 (extra, after 6.2.033)
+Problem: Mac: Compiler warnings for conversion types, missing prototype,
+ missing return type.
+Solution: Change sscanf "%hd" to "%d", the argument is an int now. Add
+ gui_mch_init_check() prototype. Add "int" to termlib functions.
+Files: src/gui_mac.c, src/proto/gui_mac.pro, src/termlib.c.
+
+Patch 6.2.042 (extra)
+Problem: Cygwin: gcc 3.2 has an optimizer problem, sometimes causing a
+ crash.
+Solution: Add -fno-strength-reduce to the compiler arguments. (Dan Sharp)
+Files: src/Make_cyg.mak
+
+Patch 6.2.043
+Problem: Compiling with both netbeans and workshop doesn't work.
+Solution: Move the shellRectangle() function to gui_x11.c. (Gordon Prieur)
+Files: src/gui_x11.c, src/integration.c, src/netbeans.c,
+ src/proto/netbeans.pro
+
+Patch 6.2.044
+Problem: ":au filetypedetect" gives an error for a non-existing event name,
+ but it's actually a non-existing group name. (Antoine Mechelynck)
+Solution: Make the error message clearer.
+Files: src/fileio.c
+
+Patch 6.2.045
+Problem: Obtaining the '( mark changes the '' mark. (Gary Holloway)
+Solution: Don't set the '' mark when searching for the start/end of the
+ current sentence/paragraph.
+Files: src/mark.c
+
+Patch 6.2.046
+Problem: When evaluating an argument of a function throws an exception the
+ function is still called. (Hari Krishna Dara)
+Solution: Don't call the function when an exception was thrown.
+Files: src/eval.c
+
+Patch 6.2.047 (extra)
+Problem: Compiler warnings when using MingW. (Bill McCarthy)
+Solution: Give the s_dwLastClickTime variable a type. Initialize dwEndTime.
+Files: src/os_win32.c
+
+Patch 6.2.048
+Problem: The Python interface doesn't compile with Python 2.3 when
+ dynamically loaded.
+Solution: Use dll_PyObject_Malloc and dll_PyObject_Free. (Paul Moore)
+Files: src/if_python.c
+
+Patch 6.2.049
+Problem: Using a "-range=" argument with ":command" doesn't work and
+ doesn't generate an error message.
+Solution: Generate an error message.
+Files: src/ex_docmd.c
+
+Patch 6.2.050
+Problem: Test 32 didn't work on MS-Windows.
+Solution: Write the temp file in Unix fileformat. (Walter Briscoe)
+Files: src/testdir/test32.in
+
+Patch 6.2.051
+Problem: When using "\=submatch(0)" in a ":s" command, line breaks become
+ NUL characters.
+Solution: Change NL to CR characters, so that they become line breaks.
+Files: src/regexp.c
+
+Patch 6.2.052
+Problem: A few messages are not translated.
+Solution: Add _() to the messages. (Muraoka Taro)
+Files: src/ex_cmds.c
+
+Patch 6.2.053
+Problem: Prototype for bzero() doesn't match most systems.
+Solution: Use "void *" instead of "char *" and "size_t" intead of "int".
+Files: src/osdef1.h.in
+
+Patch 6.2.054
+Problem: A double-byte character with a second byte that is a backslash
+ causes problems inside a string.
+Solution: Skip over multi-byte characters in a string properly. (Yasuhiro
+ Matsumoto)
+Files: src/eval.c
+
+Patch 6.2.055
+Problem: Using col('.') from CTRL-O in Insert mode does not return the
+ correct value for multi-byte characters.
+Solution: Correct the cursor position when it is necessary, move to the
+ first byte of a multi-byte character. (Yasuhiro Matsumoto)
+Files: src/edit.c
+
+Patch 6.2.056 (extra)
+Problem: Building with Sniff++ doesn't work.
+Solution: Use the multi-threaded libc when needed. (Holger Ditting)
+Files: src/Make_mvc.mak
+
+Patch 6.2.057 (extra)
+Problem: Mac: With -DMACOS_X putenv() is defined twice, it is in a system
+ library. Get a warning for redefining OK. Unused variables in
+ os_mac.c
+Solution: Define HAVE_PUTENV. Undefine OK after including curses.h.
+ Remove declarations for unused variables.
+Files: src/os_mac.c, src/os_mac.h, src/vim.h
+
+Patch 6.2.058
+Problem: When 'autochdir' is set ":bnext" to a buffer without a name causes
+ a crash.
+Solution: Don't call vim_chdirfile() when the file name is NULL. (Taro
+ Muraoka)
+Files: src/buffer.c
+
+Patch 6.2.059
+Problem: When 'scrolloff' is a large number and listing completion results
+ on the command line, then executing a command that jumps close to
+ where the cursor was before, part of the screen is not updated.
+ (Yakov Lerner)
+Solution: Don't skip redrawing part of the window when it was scrolled.
+Files: src/screen.c
+
+Patch 6.2.060 (extra)
+Problem: Win32: When 'encoding' is set to "iso-8859-7" copy/paste to/from
+ the clipboard gives a lalloc(0) error. (Kriton Kyrimis)
+Solution: When the string length is zero allocate one byte. Also fix that
+ when the length of the Unicode text is zero (conversion from
+ 'encoding' to UCS-2 was not possible) the normal text is used.
+Files: src/os_mswin.c
+
+Patch 6.2.061
+Problem: GUI: Using the left mouse button with the shift key should work
+ like "*" but it scrolls instead. (Martin Beller)
+Solution: Don't recognize an rxvt scroll wheel event when using the GUI.
+Files: src/term.c
+
+Patch 6.2.062
+Problem: When one buffer uses a syntax with "containedin" and another
+ buffer does not, redrawing depends on what the current buffer is.
+ (Brett Pershing Stahlman)
+Solution: Use "syn_buf" instead of "curbuf" to get the b_syn_containedin
+ flag.
+Files: src/syntax.c
+
+Patch 6.2.063
+Problem: When using custom completion end up with no matches.
+Solution: Make cmd_numfiles and cmd_files local to completion to avoid that
+ they are overwritten when ExpandOne() is called recursively by
+ f_glob().
+Files: src/eval.c, src/ex_docmd.c, src/ex_getln.c, src/proto/ex_getln.pro,
+ src/misc1.c, src/structs.h, src/tag.c
+
+Patch 6.2.064
+Problem: resolve() only handles one symbolic link, need to repeat it to
+ resolve all of them. Then need to simplify the file name.
+Solution: Make resolve() resolve all symbolic links and simplify the result.
+ Add simplify() to just simplify a file name. Fix that test49
+ doesn't work if /tmp is a symbolic link. (Servatius Brandt)
+Files: runtime/doc/eval.txt, src/eval.c, src/tag.c,
+ src/testdir/test49.vim
+
+Patch 6.2.065
+Problem: ":windo 123" only updates other windows when entering them.
+ (Walter Briscoe)
+Solution: Update the topline before going to the next window.
+Files: src/ex_cmds2.c
+
+Patch 6.2.066 (extra)
+Problem: Ruby interface doesn't work with Ruby 1.8.0.
+Solution: Change "defout" to "stdout". (Aron Grifis)
+ Change dynamic loading. (Taro Muraoka)
+Files: src/if_ruby.c, src/Make_mvc.mak
+
+Patch 6.2.067
+Problem: When searching for a string that starts with a composing character
+ the command line isn't drawn properly.
+Solution: Don't count the space to draw the composing character on and
+ adjust the cursor column after drawing the string.
+Files: src/message.c
+
+Patch 6.2.068
+Problem: Events for the netbeans interface that include a file name with
+ special characters don't work properly.
+Solution: Use nb_quote() on the file name. (Sergey Khorev)
+Files: src/netbeans.c
+
+Patch 6.2.069 (after 6.2.064)
+Problem: Unused variables "limit" and "new_st" and unused label "fail" in
+ some situation. (Bill McCarthy)
+Solution: Put the declarations inside an #ifdef. (Servatius Brandt)
+Files: src/eval.c, src/tag.c
+
+Patch 6.2.070 (after 6.2.069)
+Problem: Still unused variable "new_st". (Bill McCarthy)
+Solution: Move the declaration to the right block this time.
+Files: src/tag.c
+
+Patch 6.2.071
+Problem: 'statusline' can only contain 50 % items. (Antony Scriven)
+Solution: Allow 80 items and mention it in the docs.
+Files: runtime/doc/option.txt, src/vim.h
+
+Patch 6.2.072
+Problem: When using expression folding, foldexpr() mostly returns -1 for
+ the previous line, which makes it difficult to write a fold
+ expression.
+Solution: Make the level of the previous line available while still looking
+ for the end of a fold.
+Files: src/fold.c
+
+Patch 6.2.073
+Problem: When adding detection of a specific filetype for a plugin you need
+ to edit "filetype.vim".
+Solution: Source files from the "ftdetect" directory, so that a filetype
+ detection plugin only needs to be dropped in a directory.
+Files: runtime/doc/filetype.txt, runtime/doc/usr_05.txt,
+ runtime/doc/usr_41.txt, runtime/filetype.vim
+
+Patch 6.2.074
+Problem: Warnings when compiling the Python interface. (Ajit Thakkar)
+Solution: Use ANSI function declarations.
+Files: src/if_python.c
+
+Patch 6.2.075
+Problem: When the temp file for writing viminfo can't be used "NULL"
+ appears in the error message. (Ben Lavender)
+Solution: Print the original file name when there is no temp file name.
+Files: src/ex_cmds.c
+
+Patch 6.2.076
+Problem: The tags listed for cscope are in the wrong order. (Johannes
+ Stezenbach)
+Solution: Remove the reordering of tags for the current file. (Sergey
+ Khorev)
+Files: src/if_cscope.c
+
+Patch 6.2.077
+Problem: When a user function specifies custom completion, the function
+ gets a zero argument instead of an empty string when there is no
+ word before the cursor. (Preben Guldberg)
+Solution: Don't convert an empty string to a zero.
+Files: src/eval.c
+
+Patch 6.2.078
+Problem: "make test" doesn't work if Vim wasn't compiled yet. (Ed Avis)
+Solution: Build Vim before running the tests.
+Files: src/Makefile
+
+Patch 6.2.079
+Problem: ":w ++enc=utf-8 !cmd" doesn't work.
+Solution: Check for the "++" argument before the "!".
+Files: src/ex_docmd.c
+
+Patch 6.2.080
+Problem: When 't_ti' is not empty but doesn't swap screens, using "ZZ" in
+ an unmodified file doesn't clear the last line.
+Solution: Call msg_clr_eos() when needed. (Michael Schroeder)
+Files: src/os_unix.c
+
+Patch 6.2.081
+Problem: Problem when using a long multibyte string for the statusline.
+Solution: Use the right pointer to get the cell size. (Taro Muraoka)
+Files: src/buffer.c
+
+Patch 6.2.082
+Problem: Can't compile with Perl 5.8.1.
+Solution: Rename "e_number" to "e_number_exp". (Sascha Blank)
+Files: src/digraph.c, src/globals.h
+
+Patch 6.2.083
+Problem: When a compiler uses ^^^^ to mark a word the information is not
+ visible in the quickfix window. (Srikanth Sankaran)
+Solution: Don't remove the indent for a line that is not recognized as an
+ error message.
+Files: src/quickfix.c
+
+Patch 6.2.084
+Problem: "g_" in Visual mode always goes to the character after the line.
+ (Jean-Rene David)
+Solution: Ignore the NUL at the end of the line.
+Files: src/normal.c
+
+Patch 6.2.085
+Problem: ":verbose set ts" doesn't say an option was set with a "-c" or
+ "--cmd" argument.
+Solution: Remember the option was set from a Vim argument.
+Files: src/main.c, src/ex_cmds2.c, src/vim.h
+
+Patch 6.2.086
+Problem: "{" and "}" stop inside a closed fold.
+Solution: Only stop once inside a closed fold. (Stephen Riehm)
+Files: src/search.c
+
+Patch 6.2.087
+Problem: CTRL-^ doesn't use the 'confirm' option. Same problem with
+ ":bnext". (Yakov Lerner)
+Solution: Put up a dialog for a changed file when 'confirm' is set in more
+ situations.
+Files: src/buffer.c, src/ex_cmds.c
+
+Patch 6.2.088
+Problem: When 'sidescrolloff' is set 'showmatch' doesn't work correctly if
+ the match is less than 'sidescrolloff' off from the side of the
+ window. (Roland Stahn)
+Solution: Set 'sidescrolloff' to zero while displaying the match.
+Files: src/search.c
+
+Patch 6.2.089
+Problem: ":set isk+=" adds a comma. (Mark Waggoner)
+Solution: Don't add a comma when the added value is empty.
+Files: src/option.c
+
+Patch 6.2.090 (extra)
+Problem: Win32: MingW compiler complains about #pragmas. (Bill McCarthy)
+Solution: Put an #ifdef around the #pragmas.
+Files: src/os_win32.c
+
+Patch 6.2.091
+Problem: When an autocommand is triggered when a file is dropped on Vim and
+ it produces output, messages from a following command may be
+ scrolled unexpectedly. (David Rennalls)
+Solution: Save and restore msg_scroll in handle_drop().
+Files: src/ex_docmd.c
+
+Patch 6.2.092
+Problem: Invalid items appear in the help file tags. (Antonio Colombo)
+Solution: Only accept tags with white space before the first "*".
+Files: runtime/doc/doctags.c, src/ex_cmds.c
+
+Patch 6.2.093
+Problem: ":nnoremenu" also defines menu for Visual mode. (Klaus Bosau)
+Solution: Check the second command character for an "o", not the third.
+Files: src/menu.c
+
+Patch 6.2.094
+Problem: Can't compile with GTK and tiny features.
+Solution: Include handle_drop() and vim_chdirfile() when FEAT_DND is defined.
+ Do not try to split the window.
+Files: src/ex_docmd.c, src/misc2.c
+
+Patch 6.2.095
+Problem: The message "Cannot go to buffer x" is confusing for ":buf 6".
+ (Frans Englich)
+Solution: Make it "Buffer x does not exist".
+Files: src/buffer.c
+
+Patch 6.2.096
+Problem: Win32: ":let @* = ''" put a newline on the clipboard. (Klaus
+ Bosau)
+Solution: Put zero bytes on the clibpoard for an empty string.
+Files: src/ops.c
+
+Patch 6.2.097
+Problem: Setting or resetting 'insertmode' in a BufEnter autocommand
+ doesn't always have immediate effect. (Nagger)
+Solution: When 'insertmode' is set, set need_start_insertmode, when it's
+ reset set stop_insert_mode.
+Files: src/option.c
+
+Patch 6.2.098 (after 6.2.097)
+Problem: Can't build Vim with tiny features. (Christian J. Robinson)
+Solution: Declare stop_insert_mode always.
+Files: src/edit.c, src/globals.h
+
+Patch 6.2.099 (extra)
+Problem: Test 49 fails. (Mikolaj Machowski)
+Solution: The Polish translation must not change "E116" to "R116".
+Files: src/po/pl.po
+
+Patch 6.2.100
+Problem: "make proto" fails when compiled with the Perl interface.
+Solution: Remove "-fno.*" from PERL_CFLAGS, cproto sees it as its option.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2.101
+Problem: When using syntax folding, opening a file slows down a lot when
+ it's size increases by only 20%. (Gary Johnson)
+Solution: The array with cached syntax states is leaking entries. After
+ cleaning up the list obtain the current entry again.
+Files: src/syntax.c
+
+Patch 6.2.102
+Problem: The macros equal() and CR conflict with a Carbon header file.
+Solution: Rename equal() to equalpos(). Rename CR to CAR.
+ Do this in the non-extra files only.
+Files: src/ascii.h, src/buffer.c, src/charset.c, src/edit.c, src/eval.c,
+ src/ex_cmds.c, src/ex_cmds2.c, src/ex_getln.c, src/fileio.c,
+ src/getchar.c, src/gui.c, src/gui_athena.c, src/gui_gtk_x11.c,
+ src/gui_motif.c, src/macros.h, src/mark.c, src/message.c,
+ src/misc1.c, src/misc2.c, src/normal.c, src/ops.c, src/os_unix.c,
+ src/regexp.c, src/search.c, src/ui.c, src/workshop.c
+
+Patch 6.2.103 (extra)
+Problem: The macros equal() and CR conflict with a Carbon header file.
+Solution: Rename equal() to equalpos(). Rename CR to CAR.
+ Do this in the extra files only.
+Files: src/gui_photon.c, src/gui_w48.c
+
+Patch 6.2.104
+Problem: Unmatched braces in the table with options.
+Solution: Move the "}," outside of the #ifdef. (Yakov Lerner)
+Files: src/option.c
+
+Patch 6.2.105
+Problem: When the cursor is past the end of the line when calling
+ get_c_indent() a crash might occur.
+Solution: Don't look past the end of the line. (NJ Verenini)
+Files: src/misc1.c
+
+Patch 6.2.106
+Problem: Tag searching gets stuck on a very long line in the tags file.
+Solution: When skipping back to search the first matching tag remember the
+ offset where searching started looking for a line break.
+Files: src/tag.c
+
+Patch 6.2.107 (extra)
+Problem: The NetBeans interface cannot be used on Win32.
+Solution: Add support for the NetBeans for Win32. Add support for reading
+ XPM files on Win32. Also fixes that a sign icon with a space in
+ the file name did not work through the NetBeans interface.
+ (Sergey Khorev)
+ Also: avoid repeating error messages when the connection is lost.
+Files: Makefile, runtime/doc/netbeans.txt, src/Make_bc5.mak,
+ src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak,
+ src/bigvim.bat, src/feature.h, src/gui_beval.c, src/gui_beval.h,
+ src/gui_w32.c, src/gui_w48.c, src/menu.c, src/nbdebug.c,
+ src/nbdebug.h, src/netbeans.c, src/os_mswin.c, src/os_win32.h,
+ src/proto/gui_beval.pro, src/proto/gui_w32.pro,
+ src/proto/netbeans.pro, src/proto.h, src/version.c, src/vim.h,
+ src/xpm_w32.c, src/xpm_w32.h
+
+Patch 6.2.108
+Problem: Crash when giving a message about ignoring case in a tag. (Manfred
+ Kuehn)
+Solution: Use a longer buffer for the message.
+Files: src/tag.c
+
+Patch 6.2.109
+Problem: Compiler warnings with various Amiga compilers.
+Solution: Add typecast, prototypes, et al. that are also useful for other
+ systems. (Flavio Stanchina)
+Files: src/eval.c, src/ops.c
+
+Patch 6.2.110
+Problem: When $LANG includes the encoding, a menu without an encoding name
+ is not found.
+Solution: Also look for a menu file without any encoding.
+Files: runtime/menu.vim
+
+Patch 6.2.111
+Problem: Encoding "cp1251" is not recognized.
+Solution: Add "cp1251" to the table of encocings. (Alexey Froloff)
+Files: src/mbyte.c
+
+Patch 6.2.112
+Problem: After applying patches test32 fails. (Antonio Colombo)
+Solution: Have "make clean" in the testdir delete *.rej and *.orig files.
+ Use this when doing "make clean" in the src directory.
+Files: src/Makefile, src/testdir/Makefile
+
+Patch 6.2.113
+Problem: Using ":startinsert" after "$" works like "a" instead of "i".
+ (Ajit Thakkar)
+Solution: Reset "w_curswant" for ":startinsert" and reset o_eol in edit().
+Files: src/edit.c, src/ex_docmd.c
+
+Patch 6.2.114
+Problem: When stdout is piped through "tee", the size of the screen may not
+ be correct.
+Solution: Use stdin instead of stdout for ioctl() when stdin is a tty and
+ stdout isn't.
+Files: src/os_unix.c
+
+Patch 6.2.115 (extra)
+Problem: Compiler warnings with various Amiga compilers.
+Solution: Add typecast, prototypes, et al. Those changes that are
+ Amiga-specific. (Flavio Stanchina)
+Files: src/fileio.c, src/memfile.c, src/os_amiga.c, src/os_amiga.h,
+ src/vim.h
+
+Patch 6.2.116 (extra)
+Problem: German keyboard with Numlock set different from system startup
+ causes problems.
+Solution: Ignore keys with code 0xff. (Helmut Stiegler)
+Files: src/gui_w48.c
+
+Patch 6.2.117
+Problem: Breakpoints in loops of sourced files and functions are not
+ detected. (Hari Krishna Dara)
+Solution: Check for breakpoints when using lines that were previously read.
+ (Servatius Brandt)
+Files: src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/proto/eval.pro,
+ src/proto/ex_cmds2.pro
+
+Patch 6.2.118 (extra)
+Problem: Mac: Compiling is done in a non-standard way.
+Solution: Use the Unix method for Mac OS X, with autoconf. Add "CARBONGUI"
+ to Makefile and configure. (Eric Kow)
+ Move a few prototypes from os_mac.pro to gui_mac.pro.
+Files: src/Makefile, src/auto/configure, src/configure.in,
+ src/config.mk.in, src/gui_mac.c, src/os_mac.h, src/os_macosx.c,
+ src/proto/gui_mac.pro, src/proto/os_mac.pro,
+ src/infplist.xml, src/vim.h
+
+Patch 6.2.119 (after 6.2.107)
+Problem: When packing the MS-Windows archives a few files are missing.
+ (Guopeng Wen)
+Solution: Add gui_beval.* to the list of generic source files.
+Files: Makefile
+
+Patch 6.2.120
+Problem: Win32 GUI: The console dialogs are not supported on MS-Windows,
+ disabling the 'c' flag of 'guioptions'. (Servatius Brandt)
+Solution: Define FEAT_CON_DIALOG also for GUI-only builds.
+Files: src/feature.h
+
+Patch 6.2.121 (after 6.2.118)
+Problem: Not all make programs support "+=". (Charles Campbell)
+Solution: Use a normal assignment.
+Files: src/Makefile
+
+Patch 6.2.122 (after 6.2.119)
+Problem: Not all shells can expand [^~]. File missing. (Guopeng Wen)
+Solution: Use a simpler pattern. Add the Aap recipe for the maze program
+ and a clean version of the source code.
+Files: Makefile, runtime/macros/maze/Makefile,
+ runtime/macros/maze/README.txt, runtime/macros/maze/main.aap,
+ runtime/macros/maze/mazeclean.c
+
+Patch 6.2.123 (after 6.2.118)
+Problem: Running configure fails. (Tony Leneis)
+Solution: Change "==" to "=" for a test.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2.124 (after 6.2.121)(extra)
+Problem: Mac: Recursive use of M4FLAGS causes problems. When running Vim
+ directly it can't find the runtime files. (Emily Jackson)
+ Using GNU constructs causes warnings with other make programs.
+ (Ronald Schild)
+Solution: Use another name for the M4FLAGS variable.
+ Don't remove "Vim.app" from the path.
+ Update the explanation for compiling on the Mac. (Eric Kow)
+ Don't use $(shell ) and $(addprefix ).
+Files: src/INSTALLmac.txt, src/Makefile, src/misc1.c
+
+Patch 6.2.125 (after 6.2.107)
+Problem: The "winsock2.h" file isn't always available.
+Solution: Don't include this header file.
+Files: src/netbeans.c
+
+Patch 6.2.126
+Problem: Typing CTRL-C at a confirm() prompt doesn't throw an exception.
+Solution: Reset "mapped_ctrl_c" in get_keystroke(), so that "got_int" is set
+ in _OnChar().
+Files: src/misc1.c
+
+Patch 6.2.127 (extra)
+Problem: Win32 console: Typing CTRL-C doesn't throw an exception.
+Solution: Set got_int immediately when CTRL-C is typed, don't wait for
+ mch_breakcheck() being called.
+Files: src/os_win32.c
+
+Patch 6.2.128 (after 6.2.118)
+Problem: src/auto/configure is not consistent with src/configure.in.
+Solution: Use the newly generated configure script.
+Files: src/auto/configure
+
+Patch 6.2.129
+Problem: When 'number' is set 'wrapmargin' does not work Vi-compatible.
+ (Yasuhiro Matsumoto)
+Solution: Reduce the textwidth when 'number' is set. Also for 'foldcolumn'
+ and similar things.
+Files: src/edit.c
+
+Patch 6.2.130 (extra)
+Problem: Win32 console: When 'restorescreen' is not set exiting Vim causes
+ the screen to be cleared. (Michael A. Mangino)
+Solution: Don't clear the screen when exiting and 'restorescreen' isn't set.
+Files: src/os_win32.c
+
+Patch 6.2.131 (extra)
+Problem: Win32: Font handles are leaked.
+Solution: Free italic, bold and bold-italic handles before overwriting them.
+ (Michael Wookey)
+Files: src/gui_w48.c
+
+Patch 6.2.132 (extra)
+Problem: Win32: console version doesn't work on latest Windows Server 2003.
+Solution: Copy 12000 instead of 15000 cells at a time to avoid running out
+ of memory.
+Files: src/os_win32.c
+
+Patch 6.2.133
+Problem: When starting the GUI a bogus error message about 'imactivatekey'
+ may be given.
+Solution: Only check the value of 'imactivatekey' when the GUI is running.
+Files: src/gui.c, src/option.c
+
+Patch 6.2.134 (extra)
+Problem: Win32: When scrolling parts of the window are redrawn when this
+ isn't necessary.
+Solution: Only invalidate parts of the window when they are obscured by
+ other windows. (Michael Wookey)
+Files: src/gui_w48.c
+
+Patch 6.2.135
+Problem: An item <> in the ":command" argument is interpreted as <args>.
+Solution: Avoid that <> is recognized as <args>.
+Files: src/ex_docmd.c
+
+Patch 6.2.136
+Problem: ":e ++enc=latin1 newfile" doesn't set 'fenc' when the file doesn't
+ exist. (Miroslaw Dobrzanski-Neumann)
+Solution: Set 'fileencoding' to the specified encoding when editing a file
+ that does not exist.
+Files: src/fileio.c
+
+Patch 6.2.137
+Problem: "d:cmd<CR>" cannot be repeated with ".". Breaks repeating "d%"
+ when using the matchit plugin.
+Solution: Store the command to be repeated. This is restricted to
+ single-line commands.
+Files: src/ex_docmd.c, src/globals.h, src/normal.c, src/vim.h
+
+Patch 6.2.138 (extra)
+Problem: Compilation problem on VMS with dynamic buffer on the stack.
+Solution: Read one byte less than the size of the buffer, so that we can
+ check for the string length without an extra buffer.
+Files: src/os_vms.c
+
+Patch 6.2.139
+Problem: Code is repeated in the two Perl files.
+Solution: Move common code from if_perl.xs and if_perlsfio.c to vim.h.
+ Also fix a problem with generating prototypes.
+Files: src/if_perl.xs, src/if_perlsfio.c, src/vim.h
+
+Patch 6.2.140 (after 6.2.121)
+Problem: Mac: Compiling with Python and Perl doesn't work.
+Solution: Adjust the configure check for Python to use "-framework Python"
+ for Python 2.3 on Mac OS/X.
+ Move "-ldl" after "DynaLoader.a" in the link command.
+ Change "perllibs" to "PERL_LIBS".
+Files: src/auto/configure, src/configure.in, src/config.mk.in
+
+Patch 6.2.141 (extra)
+Problem: Mac: The b_FSSpec field is sometimes unused.
+Solution: Change the #ifdef to FEAT_CW_EDITOR and defined it in feature.h
+Files: src/fileio.c, src/gui_mac.c, src/structs.h, src/feature.h
+
+Patch 6.2.142 (after 6.2.124)
+Problem: Mac: building without GUI through configure doesn't work.
+ When the system is slow, unpacking the resource file takes too
+ long.
+Solution: Don't always define FEAT_GUI_MAC when MACOS is defined, define it
+ in the Makefile.
+ Add a configure option to skip Darwin detection.
+ Use a Python script to unpack the resources to avoid a race
+ condition. (Taro Muraoka)
+Files: Makefile, src/Makefile, src/auto/configure, src/configure.in,
+ src/dehqx.py, src/vim.h
+
+Patch 6.2.143
+Problem: Using "K" on Visually selected text doesn't work if it ends in
+ a multi-byte character.
+Solution: Include all the bytes of the last character. (Taro Muraoka)
+Files: src/normal.c
+
+Patch 6.2.144
+Problem: When "g:html_use_css" is set the HTML header generated by the
+ 2html script is wrong.
+Solution: Add the header after adding HREF for links.
+ Also use ":normal!" instead of ":normal" to avoid mappings
+ getting in the way.
+Files: runtime/syntax/2html.vim
+
+Patch 6.2.145 (after 6.2.139)
+Problem: Undefining "bool" doesn't work for older systems. (Wojtek Pilorz)
+Solution: Only undefine "bool" on Mac OS.
+Files: src/vim.h
+
+Patch 6.2.146
+Problem: On some systems the prototype for iconv() is wrong, causing a
+ warning message.
+Solution: Use a cast (void *) to avoid the warning. (Charles Campbell)
+Files: src/fileio.c, src/mbyte.c
+
+Patch 6.2.147
+Problem: ":s/pat/\=col('.')" always replaces with "1".
+Solution: Set the cursor to the start of the match before substituting.
+ (Helmut Stiegler)
+Files: src/ex_cmds.c
+
+Patch 6.2.148
+Problem: Can't break an Insert into several undoable parts.
+Solution: Add the CTRL-G u command.
+Files: runtime/doc/insert.txt, src/edit.c
+
+Patch 6.2.149
+Problem: When the cursor is on a line past 21,474,748 the indicated
+ percentage of the position is invalid. With that many lines
+ "100%" causes a negative cursor line number, resulting in a crash.
+ (Daniel Goujot)
+Solution: Divide by 100 instead of multiplying. Avoid overflow when
+ computing the line number for "100%".
+Files: src/buffer.c, src/ex_cmds2.c, src/normal.c
+
+Patch 6.2.150
+Problem: When doing "vim - < file" lines are broken at NUL chars.
+ (Daniel Goujot)
+Solution: Change NL characters back to NUL when reading from the temp
+ buffer.
+Files: src/fileio.c
+
+Patch 6.2.151
+Problem: When doing "vim --remote +startinsert file" some commands are
+ inserted as text. (Klaus Bosau)
+Solution: Put all the init commands in one Ex line, not using a <CR>, so
+ that Insert mode isn't started too early.
+Files: src/main.c
+
+Patch 6.2.152
+Problem: The cursor() function doesn't reset the column offset for
+ 'virtualedit'.
+Solution: Reset the offset to zero. (Helmut Stiegler)
+Files: src/eval.c
+
+Patch 6.2.153
+Problem: Win32: ":lang german" doesn't use German messages.
+Solution: Add a table to translate the Win32 language names to two-letter
+ language codes.
+Files: src/ex_cmds2.c
+
+Patch 6.2.154
+Problem: Python bails out when giving a warning message. (Eugene
+ Minkovskii)
+Solution: Set sys.argv[] to an empty string.
+Files: src/if_python.c
+
+Patch 6.2.155
+Problem: Win32: Using ":tjump www" in a help file gives two results.
+ (Dave Roberts)
+Solution: Ignore differences between slashes and backslashes when checking
+ for identical tag matches.
+Files: src/tag.c
+
+Patch 6.2.156 (after 6.2.125)
+Problem: Win32: Netbeans fails to build, EINTR is not defined.
+Solution: Redefine EINTR to WSAEINTR. (Mike Williams)
+Files: src/netbeans.c
+
+Patch 6.2.157
+Problem: Using "%p" in 'errorformat' gives a column number that is too
+ high.
+Solution: Set the flag to use the number as a virtual column. (Lefteris
+ Koutsoloukas)
+Files: src/quickfix.c
+
+Patch 6.2.158
+Problem: The sed command on Solaris and HPUX doesn't work for a line that
+ doesn't end in a newline.
+Solution: Add a newline when feeding text to sed. (Mark Waggoner)
+Files: src/configure.in, src/auto/configure
+
+Patch 6.2.159
+Problem: When using expression folding and 'foldopen' is "undo" an undo
+ command doesn't always open the fold.
+Solution: Save and restore the KeyTyped variable when evaluating 'foldexpr'.
+ (Taro Muraoka)
+Files: src/fold.c
+
+Patch 6.2.160
+Problem: When 'virtualedit' is "all" and 'selection is "exclusive",
+ selecting a double-width character below a single-width character
+ may cause a crash.
+Solution: Avoid overflow on unsigned integer decrement. (Taro Muraoka)
+Files: src/normal.c
+
+Patch 6.2.161 (extra)
+Problem: VMS: Missing header file. Reading input busy loops.
+Solution: Include termdef.h. Avoid the use of a wait function in
+ vms_read(). (Frank Ries)
+Files: src/os_unix.h, src/os_vms.c
+
+Patch 6.2.162
+Problem: ":redraw" doesn't always display the text that includes the cursor
+ position, e.g. after ":call cursor(1, 0)". (Eugene Minkovskii)
+Solution: Call update_topline() before redrawing.
+Files: src/ex_docmd.c
+
+Patch 6.2.163
+Problem: "make install" may also copy AAPDIR directories.
+Solution: Delete AAPDIR directories, just like CVS directories.
+Files: src/Makefile
+
+Patch 6.2.164 (after 6.2.144)
+Problem: When "g:html_use_css" is set the HTML header generated by the
+ 2html script is still wrong.
+Solution: Search for a string instead of jumping to a fixed line number.
+ Go to the start of the line before inserting the header.
+ (Jess Thrysoee)
+Files: runtime/syntax/2html.vim
+
+Patch 6.2.165
+Problem: The configure checks hang when using autoconf 2.57.
+Solution: Invoke AC_PROGRAM_EGREP to set $EGREP. (Aron Griffis)
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2.166
+Problem: When $GZIP contains "-N" editing compressed files doesn't work
+ properly.
+Solution: Add "-n" to "gzip -d" to avoid restoring the file name. (Oyvind
+ Holm)
+Files: runtime/plugin/gzip.vim
+
+Patch 6.2.167
+Problem: The Python interface leaks memory when assigning lines to a
+ buffer. (Sergey Khorev)
+Solution: Do not copy the line when calling ml_replace().
+Files: src/if_python.c
+
+Patch 6.2.168
+Problem: Python interface: There is no way to get the indices from a range
+ object.
+Solution: Add the "start" and "end" attributes. (Maurice S. Barnum)
+Files: src/if_python.c, runtime/doc/if_pyth.txt
+
+Patch 6.2.169
+Problem: The prototype for _Xmblen() appears in a recent XFree86 header
+ file, causing a warning for our prototype. (Hisashi T Fujinaka)
+Solution: Move the prototype to an osdef file, so that it's filtered out.
+Files: src/mbyte.c, src/osdef2.h.in
+
+Patch 6.2.170
+Problem: When using Sun WorkShop the current directory isn't changed to
+ where the file is.
+Solution: Set the 'autochdir' option when using WorkShop. And avoid using
+ the basename when 'autochdir' is not set.
+Files: src/gui_x11.c, src/ex_cmds.c
+
+Patch 6.2.171 (after 6.2.163)
+Problem: The "-or" argument of "find" doesn't work for SysV systems.
+Solution: Use "-o" instead. (Gordon Prieur)
+Files: src/Makefile
+
+Patch 6.2.172 (after 6.2.169)
+Problem: The prototype for _Xmblen() still causes trouble.
+Solution: Include the X11 header file that defines the prototype.
+Files: src/osdef2.h.in, src/osdef.sh
+
+Patch 6.2.173 (extra)
+Problem: Win32: Ruby interface doesn't work with Ruby 1.8.0 for other
+ compilers than MSVC.
+Solution: Fix the BC5, Cygwin and Mingw makefiles. (Dan Sharp)
+Files: src/Make_bc5.mak, src/Make_cyg.mak, src/Make_ming.mak
+
+Patch 6.2.174
+Problem: After the ":intro" message only a mouse click in the last line
+ gets past the hit-return prompt.
+Solution: Accept a click at or below the hit-return prompt.
+Files: src/gui.c, src/message.c
+
+Patch 6.2.175
+Problem: Changing 'backupext' in a *WritePre autocommand doesn't work.
+ (William Natter)
+Solution: Move the use of p_bex to after executing the *WritePre
+ autocommands. Also avoids reading allocated memory after freeing.
+Files: src/fileio.c
+
+Patch 6.2.176
+Problem: Accented characters in translated help files are not handled
+ correctly. (Fabien Vayssiere)
+Solution: Include "192-255" in 'iskeyword' for the help window.
+Files: src/ex_cmds.c
+
+Patch 6.2.177 (extra)
+Problem: VisVim: Opening a file with a space in the name doesn't work. (Rob
+ Retter) Arbitrary commands are being executed. (Neil Bird)
+Solution: Put a backslash in front of every space in the file name.
+ (Gerard Blais) Terminate the CTRL-\ CTRL-N command with a NUL.
+Files: src/VisVim/Commands.cpp, src/VisVim/VisVim.rc
+
+Patch 6.2.178
+Problem: People who don't know how to exit Vim try pressing CTRL-C.
+Solution: Give a message how to exit Vim when CTRL-C is pressed and it
+ doesn't cancel anything.
+Files: src/normal.c
+
+Patch 6.2.179 (extra)
+Problem: The en_gb messages file isn't found on case sensitive systems.
+Solution: Rename en_gb to en_GB. (Mike Williams)
+Files: src/po/en_gb.po, src/po/en_GB.po, src/po/Make_ming.mak,
+ src/po/Make_mvc.mak, src/po/Makefile, src/po/README_mvc.txt
+
+Patch 6.2.180
+Problem: Compiling with GTK2 on Win32 doesn't work.
+Solution: Include gdkwin32.h instead of gdkx.h. (Srinath Avadhanula)
+Files: src/gui_gtk.c, src/gui_gtk_f.c, src/gui_gtk_x11.c, src/mbyte.c
+
+Patch 6.2.181 (after 6.2.171)
+Problem: The "-o" argument of "find" has lower priority than the implied
+ "and" with "-print".
+Solution: Add parenthesis around the "-o" expression. (Gordon Prieur)
+Files: src/Makefile
+
+Patch 6.2.182 (after 6.2.094)
+Problem: Compilation with tiny features fails because of missing
+ get_past_head() function.
+Solution: Adjust the #ifdef for get_past_head().
+Files: src/misc1.c
+
+Patch 6.2.183 (after 6.2.178)
+Problem: Warning for char/unsigned char mixup.
+Solution: Use MSG() instead of msg(). (Tony Leneis)
+Files: src/normal.c
+
+Patch 6.2.184
+Problem: With 'formatoptions' set to "1aw" inserting text may cause the
+ paragraph to be ended. (Alan Schmitt)
+Solution: Temporarily add an extra space to make the paragraph continue
+ after moving the word after the cursor to the next line.
+ Also format when pressing Esc.
+Files: src/edit.c, src/normal.c, src/proto/edit.pro
+
+Patch 6.2.185
+Problem: Restoring a session with zero-height windows does not work
+ properly. (Charles Campbell)
+Solution: Accept a zero argument to ":resize" as intended. Add a window
+ number argument to ":resize" to be able to set the size of other
+ windows, because the current window cannot be zero-height.
+ Fix the explorer plugin to avoid changing the window sizes. Add
+ the winrestcmd() function for this.
+Files: runtime/doc/eval.txt, runtime/plugin/explorer.vim, src/eval.c,
+ src/ex_cmds.h, src/ex_docmd.c, src/proto/window.pro, src/window.c
+
+Patch 6.2.186 (after 6.2.185)
+Problem: Documentation file eval.txt contains examples without indent.
+Solution: Insert the indent. Also fix other mistakes.
+Files: runtime/doc/eval.txt
+
+Patch 6.2.187
+Problem: Using Insure++ reveals a number of bugs. (Dominuque Pelle)
+Solution: Initialize variables where needed. Free allocated memory to avoid
+ leaks. Fix comparing tags to avoid reading past allocated memory.
+Files: src/buffer.c, src/diff.c, src/fileio.c, src/mark.c, src/misc1.c,
+ src/misc2.c, src/ops.c, src/option.c, src/tag.c, src/ui.c
+
+Patch 6.2.188 (extra)
+Problem: MS-Windows: Multi-byte characters in a filename cause trouble for
+ the window title.
+Solution: Return when the wide function for setting the title did its work.
+Files: src/gui_w48.c
+
+Patch 6.2.189
+Problem: When setting 'viminfo' after editing a new buffer its marks are
+ not stored. (Keith Roberts)
+Solution: Set the "b_marks_read" flag when skipping to read marks from the
+ viminfo file.
+Files: src/fileio.c
+
+Patch 6.2.190
+Problem: When editing a compressed files, marks are lost.
+Solution: Add the ":lockmarks" modifier and use it in the gzip plugin.
+ Make exists() also check for command modifiers, so that the
+ existence of ":lockmarks" can be checked for.
+ Also add ":keepmarks" to avoid that marks are deleted when
+ filtering text.
+ When deleting lines put marks 'A - 'Z and '0 - '9 at the first
+ deleted line instead of clearing the mark. They were kept in the
+ viminfo file anyway.
+ Avoid that the gzip plugin puts deleted text in registers.
+Files: runtime/doc/motion.txt, runtime/plugin/gzip.vim, src/ex_cmds.c,
+ src/ex_docmd.c, src/mark.c, src/structs.h
+
+Patch 6.2.191
+Problem: The intro message is outdated. Information about sponsoring and
+ registering is missing.
+Solution: Show info about sponsoring and registering Vim in the intro
+ message now and then. Add help file about sponsoring.
+Files: runtime/doc/help.txt, runtime/doc/sponsor.txt, runtime/doc/tags,
+ runtime/menu.vim, src/version.c
+
+Patch 6.2.192
+Problem: Using CTRL-T and CTRL-D with "gR" messes up the text. (Jonahtan
+ Hankins)
+Solution: Avoid calling change_indent() recursively.
+Files: src/edit.c
+
+Patch 6.2.193
+Problem: When recalling a search pattern from the history from a ":s,a/c,"
+ command the '/' ends the search string. (JC van Winkel)
+Solution: Store the separator character with the history entries. Escape
+ characters when needed, replace the old separator with the new one.
+ Also fixes that recalling a "/" search for a "?" command messes up
+ trailing flags.
+Files: src/eval.c, src/ex_getln.c, src/normal.c, src/proto/ex_getln.pro,
+ src/search.c, src/tag.c
+
+Patch 6.2.194 (after 6.2.068)
+Problem: For NetBeans, instead of writing the file and sending an event
+ about it, tell NetBeans to write the file.
+Solution: Add the "save" command, "netbeansBuffer" command and
+ "buttonRelease" event to the netbeans protocol. Updated the
+ interface to version 2.2. (Gordon Prieur)
+ Also: open a fold when the cursor has been positioned.
+ Also: fix memory leak, free result of nb_quote().
+Files: runtime/doc/netbeans.txt, src/fileio.c, src/netbeans.c,
+ src/normal.c, src/proto/netbeans.pro, src/structs.h
+
+Patch 6.2.195 (after 6.2.190)
+Problem: Compiling fails for missing CPO_REMMARK symbol.
+Solution: Add the patch I forgot to include...
+Files: src/option.h
+
+Patch 6.2.196 (after 6.2.191)
+Problem: Rebuilding the documentation doesn't use the sponsor.txt file.
+Solution: Add sponsor.txt to the Makefile. (Christian J. Robinson)
+Files: runtime/doc/Makefile
+
+Patch 6.2.197
+Problem: It is not possible to force a redraw of status lines. (Gary
+ Johnson)
+Solution: Add the ":redrawstatus" command.
+Files: runtime/doc/various.txt, src/ex_cmds.h, src/ex_docmd.c,
+ src/screen.c
+
+Patch 6.2.198
+Problem: A few messages are not translated. (Ernest Adrogue)
+Solution: Mark the messages to be translated.
+Files: src/ex_cmds.c
+
+Patch 6.2.199 (after 6.2.194)
+Problem: Vim doesn't work perfectly well with NetBeans.
+Solution: When NetBeans saves the file, reset the timestamp to avoid "file
+ changed" warnings. Close a buffer in a proper way. Don't try
+ giving a debug message with an invalid pointer. Send a
+ newDotAndMark message when needed. Report a change by the "r"
+ command to NetBeans. (Gordon Prieur)
+Files: src/netbeans.c, src/normal.c
+
+Patch 6.2.200
+Problem: When recovering a file, 'fileformat' is always the default, thus
+ writing the file may result in differences. (Penelope Fudd)
+Solution: Before recovering the file try reading the original file to obtain
+ the values of 'fileformat', 'fileencoding', etc.
+Files: src/memline.c
+
+Patch 6.2.201
+Problem: When 'autowriteall' is set ":qall" still refuses to exit if there
+ is a modified buffer. (Antoine Mechelynck)
+Solution: Attempt writing modified buffers as intended.
+Files: src/ex_cmds2.c
+
+Patch 6.2.202
+Problem: Filetype names of CHILL and ch script are confusing.
+Solution: Rename "ch" to "chill" and "chscript" to "ch".
+Files: runtime/filetype.vim, runtime/makemenu.vim, runtime/synmenu.vim
+ runtime/syntax/ch.vim, runtime/syntax/chill.vim
+
+Patch 6.2.203
+Problem: With characterwise text that has more than one line, "3P" works
+ wrong. "3p" has the same problem. There also is a display
+ problem. (Daniel Goujot)
+Solution: Perform characterwise puts with a count in the right position.
+Files: src/ops.c
+
+Patch 6.2.204 (after 6.2.086)
+Problem: "]]" in a file with closed folds moves to the end of the file.
+ (Nam SungHyun)
+Solution: Find one position in each closed fold, then move to after the fold.
+Files: src/search.c
+
+Patch 6.2.205 (extra)
+Problem: MS-Windows: When the taskbar is at the left or top of the screen,
+ the Vim window placement is wrong.
+Solution: Compute the size and position of the window correctly. (Taro
+ Muraoka)
+Files: src/gui_w32.c, src/gui_w48.c
+
+Patch 6.2.206
+Problem: Multi-byte characters cannot be used as hotkeys in a console
+ dialog. (Mattias Erkisson)
+Solution: Handle multi-byte characters properly. Also put () or [] around
+ default hotkeys.
+Files: src/message.c, src/macros.h
+
+Patch 6.2.207
+Problem: When 'encoding' is a multi-byte encoding, expanding an
+ abbreviation that starts where insertion started results in
+ characters before the insertion to be deleted. (Xiangjiang Ma)
+Solution: Stop searching leftwards for the start of the word at the position
+ where insertion started.
+Files: src/getchar.c
+
+Patch 6.2.208
+Problem: When using fold markers, three lines in a row have the start
+ marker and deleting the first one with "dd", a nested fold is not
+ deleted. (Kamil Burzynski)
+ Using marker folding, a level 1 fold doesn't stop when it is
+ followed by "{{{2", starting a level 2 fold.
+Solution: Don't stop updating folds at the end of a change when the nesting
+ level of folds is larger than the fold level.
+ Correctly compute the number of folds that start at "{{{2".
+ Also avoid a crash for a NULL pointer.
+Files: src/fold.c
+
+Patch 6.2.209
+Problem: A bogus fold is created when using "P" while the cursor is in the
+ middle of a closed fold. (Kamil Burzynski)
+Solution: Correct the line number where marks are modified for closed folds.
+Files: src/ops.c
+
+Patch 6.2.210 (extra)
+Problem: Mac OSX: antialiased fonts are not supported.
+Solution: Add the 'antialias' option to switch on antialiasing on Mac OSX
+ 10.2 and later. (Peter Cucka)
+Files: runtime/doc/options.txt, src/gui_mac.c, src/option.h, src/option.c
+
+Patch 6.2.211 (extra)
+Problem: Code for handling file dropped on Vim is duplicated.
+Solution: Move the common code to gui_handle_drop().
+ Add code to drop the files in the window under the cursor.
+ Support drag&drop on the Macintosh. (Taro Muraoka)
+ When dropping a directory name edit that directory (using the
+ explorer plugin)
+ Fix that changing directory with Shift pressed didn't work for
+ relative path names.
+Files: src/fileio.c, src/gui.c, src/gui_gtk_x11.c, src/gui_mac.c,
+ src/gui_w48.c, src/proto/fileio.pro, src/proto/gui.pro
+
+Patch 6.2.212 (after 6.2.199)
+Problem: NetBeans: Replacing with a count is not handled correctly.
+Solution: Move reporting the change outside of the loop for the count.
+ (Gordon Prieur)
+Files: src/normal.c
+
+Patch 6.2.213 (after 6.2.208)
+Problem: Using marker folding, "{{{1" doesn't start a new fold when already
+ at fold level 1. (Servatius Brandt)
+Solution: Correctly compute the number of folds that start at "{{{1".
+Files: src/fold.c
+
+Patch 6.2.214 (after 6.2.211) (extra)
+Problem: Warning for an unused variable.
+Solution: Delete the declaration. (Bill McCarthy)
+Files: src/gui_w48.c
+
+Patch 6.2.215
+Problem: NetBeans: problems saving an unmodified file.
+Solution: Add isNetbeansModified() function. Disable netbeans_unmodified().
+ (Gordon Prieur)
+Files: src/fileio.c, src/netbeans.c, src/proto/netbeans.pro,
+ runtime/doc/netbeans.txt, runtime/doc/tags
+
+Patch 6.2.216 (after 6.2.206)
+Problem: Multi-byte characters stil cannot be used as hotkeys in a console
+ dialog. (Mattias Erkisson)
+Solution: Make get_keystroke() handle multi-byte characters.
+Files: src/misc1.c
+
+Patch 6.2.217
+Problem: GTK: setting the title doesn't always work correctly.
+Solution: Invoke gui_mch_settitle(). (Tomas Stehlik)
+Files: src/os_unix.c
+
+Patch 6.2.218
+Problem: Warning for function without prototype.
+Solution: Add argument types to the msgCB field of the BalloonEval struct.
+Files: src/gui_beval.h
+
+Patch 6.2.219
+Problem: Syntax highlighting hangs on an empty match of an item with a
+ nextgroup. (Charles Campbell)
+Solution: Remember that the item has already matched and don't match it
+ again at the same position.
+Files: src/syntax.c
+
+Patch 6.2.220
+Problem: When a Vim server runs in a console a remote command isn't handled
+ before a key is typed. (Joshua Neuheisel)
+Solution: Don't try reading more input when a client-server command has been
+ received.
+Files: src/os_unix.c
+
+Patch 6.2.221
+Problem: No file name completion for ":cscope add".
+Solution: Add the XFILE flag to ":cscope". (Gary Johnson)
+Files: src/ex_cmds.h
+
+Patch 6.2.222
+Problem: Using "--remote" several times on a row only opens some of the
+ files. (Dany St-Amant)
+Solution: Don't delete all typehead when the server receives a command from
+ a client, only delete typed characters.
+Files: src/main.c
+
+Patch 6.2.223
+Problem: Cscope: Avoid a hang when cscope waits for a response while Vim
+ waits for a prompt.
+ Error messages from Cscope mess up the display.
+Solution: Detect the hit-enter message and respond by sending a return
+ character to cscope. (Gary Johnson)
+ Use EMSG() and strerror() when possible. Replace perror() with
+ PERROR() everywhere, add emsg3().
+Files: src/diff.c, src/if_cscope.c, src/integration.c, src/message.c,
+ src/proto/message.pro, src/misc2.c, src/netbeans.c, src/vim.h
+
+Patch 6.2.224
+Problem: Mac: Can't compile with small features. (Axel Kielhorn)
+Solution: Also include vim_chdirfile() when compiling for the Mac.
+Files: src/misc2.c
+
+Patch 6.2.225
+Problem: NetBeans: Reported modified state isn't exactly right.
+Solution: Report a file being modified in the NetBeans way.
+Files: src/netbeans.c
+
+Patch 6.2.226 (after 6.2.107) (extra)
+Problem: The "ws2-32.lib" file isn't always available.
+Solution: Use "WSock32.lib" instead. (Taro Muraoka, Dan Sharp)
+Files: src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak
+
+Patch 6.2.227 (extra)
+Problem: The "PC" symbol is defined but not used anywhere.
+Solution: Remove "-DPC" from the makefiles.
+Files: src/Make_bc3.mak, src/Make_bc5.mak, src/Make_cyg.mak,
+ src/Make_ming.mak
+
+Patch 6.2.228
+Problem: Receiving CTRL-\ CTRL-N after typing "f" or "m" doesn't switch Vim
+ back to Normal mode. Same for CTRL-\ CTRL-G.
+Solution: Check if the character typed after a command is CTRL-\ and obtain
+ another character to check for CTRL-N or CTRL-G, waiting up to
+ 'ttimeoutlen' msec.
+Files: src/normal.c
+
+Patch 6.2.229
+Problem: ":function" with a name that uses magic curlies does not work
+ inside a function. (Servatius Brandt)
+Solution: Skip over the function name properly.
+Files: src/eval.c
+
+Patch 6.2.230 (extra)
+Problem: Win32: a complex pattern may cause a crash.
+Solution: Use __try and __except to catch the exception and handle it
+ gracefully, when possible. Add myresetstkoflw() to reset the
+ stack overflow. (Benjamin Peterson)
+Files: src/Make_bc5.mak, src/os_mswin.c src/os_win32.c, src/os_win32.h,
+ src/proto/os_win32.pro, src/regexp.c
+
+Patch 6.2.231 (after 6.2.046)
+Problem: Various problems when an error exception is raised from within a
+ builtin function. When it is invoked while evaluating arguments
+ to a function following arguments are still evaluated. When
+ invoked with a line range it will be called for remaining lines.
+Solution: Update "force_abort" also after calling a builtin function, so
+ that aborting() always returns the correct value. (Servatius
+ Brandt)
+Files: src/eval.c, src/ex_eval.c, src/proto/ex_eval.pro,
+ src/testdir/test49.ok, src/testdir/test49.vim
+
+Patch 6.2.232
+Problem: ":python vim.command('python print 2*2')" crashes Vim. (Eugene
+ Minkovskii)
+Solution: Disallow executing a Python command recursively and give an error
+ message.
+Files: src/if_python.c
+
+Patch 6.2.233
+Problem: On Mac OSX adding -pthread for Python only generates a warning.
+ The test for Perl threads rejects Perl while it's OK.
+ Tcl doesn't work at all.
+ The test for Ruby fails if ruby exists but there are no header
+ files. The Ruby library isn't detected properly
+Solution: Avoid adding -pthread on Mac OSX. Accept Perl threads when it's
+ not the 5.5 threads.
+ Use the Tcl framework for header files. For Ruby rename cWindow
+ to cVimWindow to avoid a name clash. (Ken Scott)
+ Only enable Ruby when the header files can be found. Use "-lruby"
+ instead of "libruby.a" when it can't be found.
+Files: src/auto/configure, src/configure.in, src/if_ruby.c
+
+Patch 6.2.234
+Problem: GTK 2 GUI: ":sp" and the ":q" leaves the cursor on the command
+ line.
+Solution: Flush output before removing scrollbars. Also do this in other
+ places where gui_mch_*() functions are invoked.
+Files: src/ex_cmds.c, src/option.c, src/window.c
+
+Patch 6.2.235 (extra)
+Problem: Win32: Cursor isn't removed with a 25x80 window and doing:
+ "1830ia<Esc>400a-<Esc>0w0". (Yasuhiro Matsumoto)
+Solution: Remove the call to gui_undraw_cursor() from gui_mch_insert_lines().
+Files: src/gui_w48.c
+
+Patch 6.2.236
+Problem: Using gvim with Agide gives "connection lost" error messages.
+Solution: Only give the "connection lost" message when the buffer was once
+ owned by NetBeans.
+Files: src/netbeans.c, src/structs.h
+
+Patch 6.2.237
+Problem: GTK 2: Thai text is drawn wrong. It changes when moving the
+ cursor over it.
+Solution: Disable the shaping engine, it moves combining characters to a
+ wrong position and combines characters, while drawing the cursor
+ doesn't combine characters.
+Files: src/gui_gtk_x11.c
+
+Patch 6.2.238 (after 6.2.231)
+Problem: ":function" does not work inside a while loop. (Servatius Brandt)
+Solution: Add get_while_line() and pass it to do_one_cmd() when in a while
+ loop, so that all lines are stored and can be used again when
+ repeating the loop.
+ Adjust test 49 so that it checks for the fixed problems.
+ (Servatius Brandt)
+Files: src/digraph.c, src/ex_cmds2.c, src/ex_docmd.c, src/ex_eval.c,
+ src/proto/ex_cmds2.pro, src/proto/ex_docmd.pro,
+ src/testdir/test49.in, src/testdir/test49.ok,
+ src/testdir/test49.vim
+
+Patch 6.2.239
+Problem: GTK 2: With closed folds the arrow buttons of a vertical scrollbar
+ often doesn't scroll. (Moshe Kaminsky)
+Solution: Hackish solution: Detect that the button was pressed from the
+ mouse pointer position.
+Files: src/gui_gtk.c, src/gui.c
+
+Patch 6.2.240
+Problem: GTK 2: Searching for bitmaps for the toolbar doesn't work as with
+ other systems. Need to explicitly use "icon=name". (Ned Konz,
+ Christian J. Robinson)
+Solution: Search for icons like done for Motif.
+Files: src/gui_gtk.c
+
+Patch 6.2.241
+Problem: GTK 2: Search and Search/Replace dialogs are synced, that makes no
+ sense. Buttons are sometimes greyed-out. (Jeremy Messenger)
+Solution: Remove the code to sync the two dialogs. Adjust the code to react
+ to an empty search string to also work for GTK2. (David Necas)
+Files: src/gui_gtk.c
+
+Patch 6.2.242
+Problem: Gnome: "vim --help" only shows the Gnome arguments, not the Vim
+ arguments.
+Solution: Don't let the Gnome code remove the "--help" argument and don't
+ exit at the end of usage().
+Files: src/gui_gtk_x11.c, src/main.c
+
+Patch 6.2.243 (extra)
+Problem: Mac: Dropping a file on a Vim icon causes a hit-enter prompt.
+Solution: Move the dropped files to the global argument list, instead of the
+ usual drop handling. (Eckehard Berns)
+Files: src/main.c, src/gui_mac.c
+
+Patch 6.2.244
+Problem: ':echo "\xf7"' displays the illegal byte as if it was a character
+ and leaves "cho" after it.
+Solution: When checking the length of a UTF-8 byte sequence and it's shorter
+ than the number of bytes available, assume it's an illegal byte.
+Files: src/mbyte.c
+
+Patch 6.2.245
+Problem: Completion doesn't work for ":keepmarks" and ":lockmarks".
+Solution: Add the command modifiers to the table of commands. (Madoka
+ Machitani)
+Files: src/ex_cmds.h, src/ex_docmd.c
+
+Patch 6.2.246
+Problem: Mac: Starting Vim from Finder doesn't show error messages.
+Solution: Recognize that output is being displayed by stderr being
+ "/dev/console". (Eckehard Berns)
+Files: src/main.c, src/message.c
+
+Patch 6.2.247 (after 6.2.193)
+Problem: When using a search pattern from the viminfo file the last
+ character is replaced with a '/'.
+Solution: Store the separator character in the right place. (Kelvin Lee)
+Files: src/ex_getln.c
+
+Patch 6.2.248
+Problem: GTK: When XIM is enabled normal "2" and keypad "2" cannot be
+ distinguished.
+Solution: Detect that XIM changes the keypad key to the expected ASCII
+ character and fall back to the non-XIM code. (Neil Bird)
+Files: src/gui_gtk_x11.c, src/mbyte.c, src/proto/mbyte.pro
+
+Patch 6.2.249
+Problem: ":cnext" moves to the error in the next file, but there is no
+ method to go back.
+Solution: Add ":cpfile" and ":cNfile".
+Files: src/ex_cmds.h, src/quickfix.c, src/vim.h, runtime/doc/quickfix.txt
+
+Patch 6.2.250
+Problem: Memory leaks when using signs. (Xavier de Gaye)
+Solution: Delete the list of signs when unloading a buffer.
+Files: src/buffer.c
+
+Patch 6.2.251
+Problem: GTK: The 'v' flag in 'guioptions' doesn't work. (Steve Hall)
+ Order of buttons is reversed for GTK 2.2.4. Don't always get
+ focus back after handling a dialog.
+Solution: Make buttons appear vertically when desired. Reverse the order in
+ which buttons are added to a dialog. Move mouse pointer around
+ when the dialog is done and we don't have focus.
+Files: src/gui_gtk.c
+
+Patch 6.2.252 (extra, after 6.2.243)
+Problem: Mac: Dropping a file on a Vim icon causes a hit-enter prompt for
+ Mac OS classic.
+Solution: Remove the #ifdef from the code that fixes it for Mac OSX.
+Files: src/gui_mac.c
+
+Patch 6.2.253
+Problem: When 'tagstack' is not set a ":tag id" command does not work after
+ a ":tjump" command.
+Solution: Set "new_tag" when 'tagstack' isn't set. (G. Narendran)
+Files: src/tag.c
+
+Patch 6.2.254
+Problem: May run out of space for error messages.
+Solution: Keep room for two more bytes.
+Files: src/quickfix.c
+
+Patch 6.2.255
+Problem: GTK: A new item in the popup menu is put just after instead of
+ just before the right item. (Gabriel Zachmann)
+Solution: Don't increment the menu item index.
+Files: src/gui_gtk.c
+
+Patch 6.2.256
+Problem: Mac: "macroman" encoding isn't recognized, need to use
+ "8bit-macroman.
+Solution: Recognize "macroman" with an alias "mac". (Eckehard Berns)
+Files: src/mbyte.c
+
+Patch 6.2.257 (after 6.2.250)
+Problem: Signs are deleted for ":bdel", but they could still be useful.
+Solution: Delete signs only for ":bwipe".
+Files: src/buffer.c
+
+Patch 6.2.258
+Problem: GUI: can't disable (grey-out) a popup menu item. (Ajit Thakkar)
+Solution: Loop over the popup menus for all modes.
+Files: src/menu.c
+
+Patch 6.2.259
+Problem: If there are messages when exiting, on the console there is a
+ hit-enter prompt while the message can be read; in the GUI the
+ message may not be visible.
+Solution: Use the hit-enter prompt when there is an error message from
+ writing the viminfo file or autocommands, or when there is any
+ output in the GUI and 'verbose' is set. Don't use a hit-enter
+ prompt for the non-GUI version unless there is an error message.
+Files: src/main.c
+
+Patch 6.2.260
+Problem: GTK 2: Can't quit a dialog with <Esc>.
+ GTK 1 and 2: <Enter> always gives a result, even when the default
+ button has been disabled.
+Solution: Handle these keys explicitly. When no default button is specified
+ use the first one (works mostly like it was before).
+Files: src/gui_gtk.c
+
+Patch 6.2.261
+Problem: When 'autoindent' and 'cindent' are set and a line is recognized
+ as a comment, starting a new line won't do 'cindent' formatting.
+Solution: Also use 'cindent' formatting for lines that are used as a
+ comment. (Servatius Brandt)
+Files: src/misc1.c
+
+Patch 6.2.262
+Problem: 1 CTRL-W w beeps, even though going to the first window is
+ possible. (Charles Campbell)
+Solution: Don't beep.
+Files: src/window.c
+
+Patch 6.2.263
+Problem: Lint warnings: Duplicate function prototypes, duplicate macros,
+ use of a zero character instead of a zero pointer, unused
+ variable. Clearing allocated memory in a complicated way.
+Solution: Remove the function prototypes from farsi.h. Remove the
+ duplicated lines in keymap.h. Change getvcol() argument from NUL
+ to NULL. Remove the "col" variable in regmatch(). Use
+ lalloc_clear() instead of lalloc(). (Walter Briscoe)
+Files: src/farsi.h, src/keymap.h, src/ops.c, src/regexp.c, src/search.c
+
+Patch 6.2.264 (after 6.2.247)
+Problem: Writing past allocated memory when using a command line from the
+ viminfo file.
+Solution: Store the NUL in the right place.
+Files: src/ex_getln.c
+
+Patch 6.2.265
+Problem: Although ":set" is not allowed in the sandbox, ":let &opt = val"
+ works.
+Solution: Do allow changing options in the sandbox, but not the ones that
+ can't be changed from a modeline.
+Files: src/ex_cmds.h, src/options.c
+
+Patch 6.2.266
+Problem: When redirecting output and using ":silent", line breaks are
+ missing from output of ":map" and ":tselect". Alignment of
+ columns is wrong.
+Solution: Insert a line break where "msg_didout" was tested. Update msg_col
+ when redirecting and using ":silent".
+Files: src/getchar.c, src/message.c
+
+Patch 6.2.267 (extra)
+Problem: Win32: "&&" in a tearoff menu is not shown. (Luc Hermitte)
+Solution: Use the "name" item from the menu instead of the "dname" item.
+Files: src/gui_w32.c, src/menu.c
+
+Patch 6.2.268
+Problem: GUI: When changing 'guioptions' part of the window may be off
+ screen. (Randall Morris)
+Solution: Adjust the size of the window when changing 'guioptions', but only
+ when adding something.
+Files: src/gui.c
+
+Patch 6.2.269
+Problem: Diff mode does not highlight a change in a combining character.
+ (Raphael Finkel)
+Solution: Make diff_find_change() multi-byte aware: find the start byte of
+ a character that contains a change.
+Files: src/diff.c
+
+Patch 6.2.270
+Problem: Completion in Insert mode, then repeating with ".", doesn't handle
+ composing characters in the completed text. (Raphael Finkel)
+Solution: Don't skip over composing chars when adding completed text to the
+ redo buffer.
+Files: src/getchar.c
+
+Patch 6.2.271
+Problem: NetBeans: Can't do "tail -f" on the log. Passing socket info with
+ an argument or environment variable is not secure.
+Solution: Wait after initializing the log. Allow passing the socket info
+ through a file. (Gordon Prieur)
+Files: runtime/doc/netbeans.txt, src/main.c, src/netbeans.c
+
+Patch 6.2.272
+Problem: When the "po" directory exists, but "po/Makefile" doesn't,
+ building fails. Make loops when the "po" directory has been
+ deleted after running configure.
+Solution: Check for the "po/Makefile" instead of just the "po" directory.
+ Check this again before trying to run make with that Makefile.
+Files: src/auto/configure, src/configure.in, src/Makefile
+
+Patch 6.2.273
+Problem: Changing the sort order in an explorer window for an empty
+ directory produces error messages. (Doug Kearns)
+Solution: When an invalid range is used for a function that is not going to
+ be executed, skip over the arguments anyway.
+Files: src/eval.c
+
+Patch 6.2.274
+Problem: ":print" skips empty lines when 'list' is set and there is no
+ "eol" in 'listchars'. (Yakov Lerner)
+Solution: Skip outputting a space for an empty line only when 'list' is set
+ and the end-of-line character is not empty.
+Files: src/message.c
+
+Patch 6.2.275 (extra, after 6.2.267)
+Problem: Warning for uninitialized variable when using gcc.
+Solution: Initialize "acLen" to zero. (Bill McCarthy)
+Files: src/gui_w32.c
+
+Patch 6.2.276
+Problem: ":echo X()" does not put a line break between the message that X()
+ displays and the text that X() returns. (Yakov Lerner)
+Solution: Invoke msg_start() after evaluating the argument.
+Files: src/eval.c
+
+Patch 6.2.277
+Problem: Vim crashes when a ":runtime ftplugin/ada.vim" causes a recursive
+ loop. (Robert Nowotniak)
+Solution: Restore "msg_list" before returning from do_cmdline().
+Files: src/ex_docmd.c
+
+Patch 6.2.278
+Problem: Using "much" instead of "many".
+Solution: Correct the error message.
+Files: src/eval.c
+
+Patch 6.2.279
+Problem: There is no default choice for a confirm() dialog, now that it is
+ possible not to have a default choice.
+Solution: Make the first choice the default choice.
+Files: runtime/doc/eval.txt, src/eval.c
+
+Patch 6.2.280
+Problem: "do" and ":diffget" don't work in the first line and the last line
+ of a buffer. (Aron Griffis)
+Solution: Find a difference above the first line and below the last line.
+ Also fix a few display updating bugs.
+Files: src/diff.c, src/fold.c, src/move.c
+
+Patch 6.2.281
+Problem: PostScript printing doesn't work on Mac OS X 10.3.2.
+Solution: Adjust the header file. (Mike Williams)
+Files: runtime/print/prolog.ps
+
+Patch 6.2.282
+Problem: When using CTRL-O to go back to a help file, it becomes listed.
+ (Andrew Nesbit)
+ Using ":tag" or ":tjump" in a help file doesn't keep the help file
+ settings (e.g. for 'iskeyword').
+Solution: Don't mark a buffer as listed when its help flag is set. Put all
+ the option settings for a help buffer together in do_ecmd().
+Files: src/ex_cmds.c
+
+Patch 6.2.283
+Problem: The "local additions" in help.txt are used without conversion,
+ causing latin1 characters showing up wrong when 'enc' is utf-8.
+ (Antoine J. Mechelynck)
+Solution: Convert the text to 'encoding'.
+Files: src/ex_cmds.c
+
+Patch 6.2.284
+Problem: Listing a function puts "endfunction" in the message history.
+ Typing "q" at the more prompt isn't handled correctly when listing
+ variables and functions. (Hara Krishna Dara)
+Solution: Don't use msg() for "endfunction". Check "got_int" regularly.
+Files: src/eval.c
+
+Patch 6.2.285
+Problem: GUI: In a single wrapped line that fills the window, "gj" in the
+ last screen line leaves the cursor behind. (Ivan Tarasov)
+Solution: Undraw the cursor before scrolling the text up.
+Files: src/gui.c
+
+Patch 6.2.286
+Problem: When trying to rename a file and it doesn't exist, the destination
+ file is deleted anyway. (Luc Deux)
+Solution: Don't delete the destination when the source doesn't exist. (Taro
+ Muraoka)
+Files: src/fileio.c
+
+Patch 6.2.287 (after 6.2.264)
+Problem: Duplicate lines are added to the viminfo file.
+Solution: Compare with existing entries without an offset. Also fixes
+ reading very long history lines from viminfo.
+Files: src/ex_getln.c
+
+Patch 6.2.288 (extra)
+Problem: Mac: An external program can't be interrupted.
+Solution: Don't use the 'c' key for backspace. (Eckehard Berns)
+Files: src/gui_mac.c
+
+Patch 6.2.289
+Problem: Compiling the Tcl interface with thread support causes ":make" to
+ fail. (Juergen Salk)
+Solution: Use $TCL_DEFS from the Tcl config script to obtain the required
+ compile flags for using the thread library.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2.290 (extra)
+Problem: Mac: The mousewheel doesn't work.
+Solution: Add mousewheel support. Also fix updating the thumb after a drag
+ and then using another way to scroll. (Eckehard Berns)
+Files: src/gui_mac.c
+
+Patch 6.2.291 (extra)
+Problem: Mac: the plus button and close button don't do anything.
+Solution: Make the plus button maximize the window and the close button
+ close Vim. (Eckehard Berns)
+Files: src/gui.c, src/gui_mac.c
+
+Patch 6.2.292
+Problem: Motif: When removing GUI arguments from argv[] a "ps -ef" shows
+ the last argument repeated.
+Solution: Set argv[argc] to NULL. (Michael Jarvis)
+Files: src/gui_x11.c
+
+Patch 6.2.293 (after 6.2.255)
+Problem: GTK: A new item in a menu is put before the tearoff item.
+Solution: Do increment the menu item index for non-popup menu items.
+Files: src/gui_gtk.c
+
+Patch 6.2.294 (extra)
+Problem: Mac: Cannot use modifiers with Space, Tab, Enter and Escape.
+Solution: Handle all modifiers for these keys. (Eckehard Berns)
+Files: src/gui_mac.c
+
+Patch 6.2.295
+Problem: When in debug mode, receiving a message from a remote client
+ causes a crash. Evaluating an expression causes Vim to wait for
+ "cont" to be typed, without a prompt. (Hari Krishna Dara)
+Solution: Disable debugging when evaluating an expression for a client.
+ (Michael Geddes) Don't try reading into the typehead buffer when
+ it may have been filled in another way.
+Files: src/ex_getln.c, src/getchar.c, src/if_xcmdsrv.c, src/main.c,
+ src/misc1.c, src/proto/getchar.pro, src/proto/main.pro,
+ src/proto/os_unix.pro, src/proto/ui.pro, src/structs.h,
+ src/os_unix.c, src/ui.c
+
+Patch 6.2.296 (extra)
+Problem: Same as 6.2.295.
+Solution: Extra files for patch 6.2.295.
+Files: src/os_amiga.c, src/os_msdos.c, src/os_riscos.c, src/os_win32.c,
+ src/proto/os_amiga.pro, src/proto/os_msdos.pro,
+ src/proto/os_riscos.pro, src/proto/os_win32.pro
+
+Patch 6.2.297 (after 6.2.232)
+Problem: Cannot invoke Python commands recursively.
+Solution: With Python 2.3 and later use the available mechanisms to invoke
+ Python recursively. (Matthew Mueller)
+Files: src/if_python.c
+
+Patch 6.2.298
+Problem: A change always sets the '. mark and an insert always sets the '^
+ mark, even when this is not wanted.
+ Cannot go back to the position of older changes without undoing
+ those changes.
+Solution: Add the ":keepjumps" command modifier.
+ Add the "g," and "g;" commands.
+Files: runtime/doc/motion.txt, src/ex_cmds.h, src/ex_docmd.c, src/edit.c,
+ src/mark.c, src/misc1.c, src/normal.c, src/proto/mark.pro,
+ src/structs.h, src/undo.c
+
+Patch 6.2.299
+Problem: Can only use one language for help files.
+Solution: Add the 'helplang' option to select the preferred language(s).
+ Make ":helptags" generate tags files for all languages.
+Files: runtime/doc/options.txt, runtime/doc/various.txt, src/Makefile,
+ src/ex_cmds.c, src/ex_cmds2.c, src/ex_cmds.h, src/ex_getln.c,
+ src/normal.c, src/option.c, src/option.h, src/proto/ex_cmds.pro,
+ src/proto/ex_cmds2.pro, src/proto/option.pro, src/structs.h,
+ src/tag.c, src/vim.h
+
+Patch 6.2.300 (after 6.2.297)
+Problem: Cannot build Python interface with Python 2.2 or earlier.
+Solution: Add a semicolon.
+Files: src/if_python.c
+
+Patch 6.2.301
+Problem: The "select all" item from the popup menu doesn't work for Select
+ mode.
+Solution: Use the same commands as for the "Edit.select all" menu.
+ (Benji Fisher)
+Files: runtime/menu.vim
+
+Patch 6.2.302
+Problem: Using "CTRL-O ." in Insert mode doesn't work properly. (Benji
+ Fisher)
+Solution: Restore "restart_edit" after an insert command that was not typed.
+ Avoid waiting with displaying the mode when there is no text to be
+ overwritten.
+ Fix that "CTRL-O ." sometimes doesn't put the cursor back after
+ the end-of-line. Only reset the flag that CTRL-O was used past
+ the end of the line when restarting editing. Update "o_lnum"
+ number when inserting text and "o_eol" is set.
+Files: src/edit.c, src/normal.c
+
+Patch 6.2.303
+Problem: Cannot use Unicode digraphs while 'encoding' is not Unicode.
+Solution: Convert the character from Unicode to 'encoding' when needed.
+ Use the Unicode digraphs for the Macintosh. (Eckehard Berns)
+Files: src/digraph.c
+
+Patch 6.2.304 (extra, after 6.2.256)
+Problem: Mac: No proper support for 'encoding'. Conversion without iconv()
+ is not possible.
+Solution: Convert input from 'termencoding' to 'encoding'. Add
+ mac_string_convert(). Convert text for the clipboard when needed.
+ (Eckehard Berns)
+Files: src/gui_mac.c, src/mbyte.c, src/structs.h, src/vim.h
+
+Patch 6.2.305 (after 6.2.300)
+Problem: Win32: Cannot build Python interface with Python 2.3. (Ajit
+ Thakkar)
+Solution: Add two functions to the dynamic loading feature.
+Files: src/if_python.c
+
+Patch 6.2.306 (extra)
+Problem: Win32: Building console version with BCC 5.5 gives a warning for
+ get_cmd_args() prototype missing. (Ajit Thakkar)
+Solution: Don't build os_w32exe.c for the console version.
+Files: src/Make_bc5.mak
+
+Patch 6.2.307 (after 6.2.299)
+Problem: Installing help files fails.
+Solution: Expand wildcards for translated help files separately.
+Files: src/Makefile
+
+Patch 6.2.308
+Problem: Not all systems have "whoami", resulting in an empty user name.
+Solution: Use "logname" when possible, "whoami" otherwise. (David Boyce)
+Files: src/Makefile
+
+Patch 6.2.309
+Problem: "3grx" waits for two ESC to be typed. (Jens Paulus)
+Solution: Append the ESC to the stuff buffer when redoing the "gr" insert.
+Files: src/edit.c
+
+Patch 6.2.310
+Problem: When setting 'undolevels' to -1, making a change and setting
+ 'undolevels' to a positive value an "undo list corrupt" error
+ occurs. (Madoka Machitani)
+Solution: Sync undo before changing 'undolevels'.
+Files: src/option.c
+
+Patch 6.2.311 (after 6.2.298)
+Problem: When making several changes in one line the changelist grows
+ quickly. There is no error message for reaching the end of the
+ changelist. Reading changelist marks from viminfo doesn't work
+ properly.
+Solution: Only make a new entry in the changelist when making a change in
+ another line or 'textwidth' columns away. Add E662, E663 and E664
+ error messages. Put a changelist mark from viminfo one position
+ before the end.
+Files: runtime/doc/motion.txt, src/mark.c, src/misc1.c, src/normal.c
+
+Patch 6.2.312 (after 6.2.299)
+Problem: "make install" clears the screen when installing the docs.
+Solution: Execute ":helptags" in silent mode.
+Files: runtime/doc/Makefile
+
+Patch 6.2.313
+Problem: When opening folds in a diff window, other diff windows no longer
+ show the same text.
+Solution: Sync the folds in diff windows.
+Files: src/diff.c, src/fold.c, src/move.c, src/proto/diff.pro,
+ src/proto/move.pro
+
+Patch 6.2.314
+Problem: When 'virtualedit' is set "rx" may cause a crash with a blockwise
+ selection and using "$". (Moritz Orbach)
+Solution: Don't try replacing chars in a line that has no characters in the
+ block.
+Files: src/ops.c
+
+Patch 6.2.315
+Problem: Using CTRL-C in a Visual mode mapping while 'insertmode' is set
+ stops Vim from returning to Insert mode.
+Solution: Don't reset "restart_edit" when a CTRL-C is found and 'insertmode'
+ is set.
+Files: src/normal.c
+
+Patch 6.2.316 (after 6.2.312)
+Problem: "make install" tries connecting to the X server when installing
+ the docs. (Stephen Thomas)
+Solution: Add the "-X" argument.
+Files: runtime/doc/Makefile
+
+Patch 6.2.317 (after 6.2.313)
+Problem: When using "zi" in a diff window, other diff windows are not
+ adjusted. (Richard Curnow)
+Solution: Distribute a change in 'foldenable' to other diff windows.
+Files: src/normal.c
+
+Patch 6.2.318
+Problem: When compiling with _THREAD_SAFE external commands don't echo
+ typed characters.
+Solution: Don't set the terminal mode to TMODE_SLEEP when it's already at
+ TMODE_COOK.
+Files: src/os_unix.c
+
+Patch 6.2.319 (extra)
+Problem: Building gvimext.dll with Mingw doesn't work properly.
+Solution: Use gcc instead of dllwrap. Use long option names. (Alejandro
+ Lopez-Valencia)
+Files: src/GvimExt/Make_ming.mak
+
+Patch 6.2.320
+Problem: Win32: Adding and removing the menubar resizes the Vim window.
+ (Jonathon Merz)
+Solution: Don't let a resize event change 'lines' unexpectedly.
+Files: src/gui.c
+
+Patch 6.2.321
+Problem: When using modeless selection, wrapping lines are not recognized,
+ a line break is always inserted.
+Solution: Add LineWraps[] to remember whether a line wrapped or not.
+Files: src/globals.h, src/screen.c, src/ui.c
+
+Patch 6.2.322
+Problem: With 'showcmd' set, after typing "dd" the next "d" may not be
+ displayed. (Jens Paulus)
+Solution: Redraw the command line after updating the screen, scrolling may
+ have set "clear_cmdline".
+Files: src/screen.c
+
+Patch 6.2.323
+Problem: Win32: expanding "~/file" in an autocommand pattern results in
+ backslashes, while this pattern should only have forward slashes.
+Solution: Make expanding environment variables respect 'shellslash' and set
+ p_ssl when expanding the autocommand pattern.
+Files: src/fileio.c, src/misc1.c, src/proto/fileio.pro
+
+Patch 6.2.324 (extra)
+Problem: Win32: when "vimrun.exe" has a path with white space, such as
+ "Program Files", executing external commands may fail.
+Solution: Put double quotes around the path to "vimrun".
+Files: src/os_win32.c
+
+Patch 6.2.325
+Problem: When $HOME includes a space, doing ":set tags=~/tags" doesn't
+ work, the space is used to separate file names. (Brett Stahlman)
+Solution: Escape the space with a backslash.
+Files: src/option.c
+
+Patch 6.2.326
+Problem: ":windo set syntax=foo" doesn't work. (Tim Chase)
+Solution: Don't change 'eventignore' for ":windo".
+Files: src/ex_cmds2.c
+
+Patch 6.2.327
+Problem: When formatting text all marks in the formatted lines are lost.
+ A word is not joined to a previous line when this would be
+ possible. (Mikolaj Machowski)
+Solution: Try to keep marks in the same position as much as possible.
+ Also keep mark positions when joining lines.
+ Start auto-formatting in the previous line when appropriate.
+ Add the "gw" operator: Like "gq" but keep the cursor where it is.
+Files: runtime/doc/change.txt, src/edit.c, src/globals.h, src/mark.c,
+ src/misc1.c, src/normal.c, src/ops.c, src/proto/edit.pro,
+ src/proto/mark.pro, src/proto/ops.pro, src/structs.h, src/vim.h
+
+Patch 6.2.328
+Problem: XIM with GTK: It is hard to understand what XIM is doing.
+Solution: Add xim_log() to log XIM events and help with debugging.
+Files: src/mbyte.c
+
+Patch 6.2.329
+Problem: ":=" does not work Vi compatible. (Antony Scriven)
+Solution: Print the last line number instead of the current line. Don't
+ print "line".
+Files: src/ex_cmds.h, src/ex_docmd.c
+
+Patch 6.2.330 (extra, after 6.2.267)
+Problem: Win32: Crash when tearing off a menu.
+Solution: Terminate a string with a NUL. (Yasuhiro Matsumoto)
+Files: src/gui_w32.c
+
+Patch 6.2.331 (after 6.2.327)
+Problem: "gwap" leaves cursor in the wrong line.
+Solution: Remember the cursor position before finding the ends of the
+ paragraph.
+Files: src/normal.c, src/ops.c, src/structs.h
+
+Patch 6.2.332 (extra)
+Problem: Amiga: Compile error for string array. Compiling the Amiga GUI
+ doesn't work.
+Solution: Use a char pointer instead. Move including "gui_amiga.h" to after
+ including "vim.h". Add a semicolon. (Ali Akcaagac)
+Files: src/gui_amiga.c, src/os_amiga.c
+
+Patch 6.2.333 (extra)
+Problem: Win32: printing doesn't work with specified font charset.
+Solution: Use the specified font charset. (Mike Williams)
+Files: src/os_mswin.c
+
+Patch 6.2.334 (extra, after 6.2.296)
+Problem: Win32: evaluating client expression in debug mode requires typing
+ "cont".
+Solution: Use eval_client_expr_to_string().
+Files: src/os_mswin.c
+
+Patch 6.2.335
+Problem: The ":sign" command cannot be followed by another command.
+Solution: Add TRLBAR to the command flags.
+Files: src/ex_cmds.h
+
+Patch 6.2.336 (after 6.2.327)
+Problem: Mixup of items in an expression.
+Solution: Move "== NUL" to the right spot.
+Files: src/edit.c
+
+Patch 6.2.337 (extra, after 6.2.319)
+Problem: Building gvimext.dll with Mingw doesn't work properly.
+Solution: Fix white space and other details. (Alejandro Lopez-Valencia)
+Files: src/GvimExt/Make_ming.mak
+
+Patch 6.2.338 (after 6.2.331)
+Problem: When undoing "gwap" the cursor is always put at the start of the
+ paragraph. When undoing auto-formatting the cursor may be above
+ the change.
+Solution: Try to move the cursor back to where it was or to the first line
+ that actually changed.
+Files: src/normal.c, src/ops.c, src/undo.c
+
+Patch 6.2.339
+Problem: Crash when using many different highlight groups and a User
+ highlight group. (Juergen Kraemer)
+Solution: Do not use the sg_name_u pointer when it is NULL. Also simplify
+ use of the highlight group table.
+Files: src/syntax.c
+
+Patch 6.2.340
+Problem: ":reg" doesn't show the actual contents of the clipboard if it was
+ filled outside of Vim. (Stuart MacDonald)
+Solution: Obtain the clipboard contents before displaying it.
+Files: src/ops.c
+
+Patch 6.2.341 (extra)
+Problem: Win32: When the path to diff.exe contains a space and using the
+ vimrc generated by the install program, diff mode does not work.
+Solution: Put the first double quote just before the space instead of before
+ the path.
+Files: src/dosinst.c
+
+Patch 6.2.342 (extra)
+Problem: Win32: macros are not always used as expected.
+Solution: Define WINVER to 0x0400 instead of 0x400. (Alejandro
+ Lopez-Valencia)
+Files: src/Make_bc5.mak, src/Make_cyg.mak, src/Make_mvc.mak
+
+Patch 6.2.343
+Problem: Title doesn't work with some window managers. X11: Setting the
+ text property for the window title is hard coded.
+Solution: Use STRING format when possible. Use the UTF-8 function when
+ it's available and 'encoding' is utf-8. Use
+ XStringListToTextProperty(). Do the same for the icon name.
+ (David Harrison)
+Files: src/os_unix.c
+
+Patch 6.2.344 (extra, after 6.2.337)
+Problem: Cannot build gvimext.dll with MingW on Linux.
+Solution: Add support for cross compiling. (Ronald Hoellwarth)
+Files: src/GvimExt/Make_ming.mak
+
+Patch 6.2.345 (extra)
+Problem: Win32: Copy/paste between two Vims fails if 'encoding' is not set
+ properly or there are illegal bytes.
+Solution: Use a raw byte format. Always set it when copying. When pasting
+ use the raw format if 'encoding' is the same.
+Files: src/os_mswin.c, src/os_win16.c, src/os_win32.c, src/vim.h
+
+Patch 6.2.346
+Problem: Win32 console: After using "chcp" Vim does not detect the
+ different codepage.
+Solution: Use GetConsoleCP() and when it is different from GetACP() set
+ 'termencoding'.
+Files: src/option.c
+
+Patch 6.2.347 (extra)
+Problem: Win32: XP theme support is missing.
+Solution: Add a manifest and refer to it from the resource file. (Michael
+ Wookey)
+Files: Makefile, src/gvim.exe.mnf, src/vim.rc
+
+Patch 6.2.348
+Problem: Win32: "vim c:\dir\(test)" doesn't work, because the 'isfname'
+ default value doesn't contain parenthesis.
+Solution: Temporarily add '(' and ')' to 'isfname' when expanding file name
+ arguments.
+Files: src/main.c
+
+Patch 6.2.349
+Problem: Finding a match using 'matchpairs' may cause a crash.
+ 'matchpairs' is not used for 'showmatch'.
+Solution: Don't look past the NUL in 'matchpairs'. Use 'matchpairs' for
+ 'showmatch'. (Dave Olszewkski)
+Files: src/misc1.c, src/normal.c, src/proto/search.pro, src/search.c
+
+Patch 6.2.350
+Problem: Not enough info about startup timing.
+Solution: Add a few more TIME_MSG() calls.
+Files: src/main.c
+
+Patch 6.2.351
+Problem: Win32: $HOME may be set to %USERPROFILE%.
+Solution: Expand %VAR% at the start of $HOME.
+Files: src/misc1.c
+
+Patch 6.2.352 (after 6.2.335)
+Problem: ":sign texthl=||" does not work.
+Solution: Remove the check for a following command. Give an error for extra
+ arguments after "buff=1".
+Files: src/ex_cmds.c, src/ex_cmds.h
+
+Patch 6.2.353 (extra)
+Problem: Win32: Supported server name length is limited. (Paul Bossi)
+Solution: Use MAX_PATH instead of 25.
+Files: src/os_mswin.c
+
+Patch 6.2.354 (extra)
+Problem: Win32: When the mouse pointer is on a tear-off menu it is hidden
+ when typing but is not redisplayed when moved. (Markx Hackmann)
+Solution: Handle the pointer move event for the tear-off menu window.
+Files: src/gui_w32.c
+
+Patch 6.2.355 (after 6.2.303)
+Problem: When 'encoding' is a double-byte encoding different from the
+ current locale, the width of characters is not correct.
+ Possible failure and memory leak when using iconv, Unicode
+ digraphs and 'encoding' is not "utf-8".
+Solution: Use iconv() to discover the actual width of characters.
+ Add the "vc_fail" field to vimconv_T.
+ When converting a digraph, init the conversion type to NONE and
+ cleanup afterwards.
+Files: src/digraph.c, src/mbyte.c, src/structs.h
+
+Patch 6.2.356
+Problem: When using a double-byte 'encoding' and 'selection' is
+ "exclusive", "vy" only yanks the first byte of a double-byte
+ character. (Xiangjiang Ma)
+Solution: Correct the column in unadjust_for_sel() to position on the first
+ byte, always include the trailing byte of the selected text.
+Files: src/normal.c
+
+Patch 6.2.357 (after 6.2.321)
+Problem: Memory leak when resizing the Vim window.
+Solution: Free the LineWraps array.
+Files: src/screen.c
+
+Patch 6.2.358 (after 6.2.299)
+Problem: Memory leak when using ":help" and the language doesn't match.
+Solution: Free the array with matching tags.
+Files: src/ex_cmds.c
+
+Patch 6.2.359 (after 6.2.352)
+Problem: Compiler warning for long to int type cast.
+Solution: Add explicit type cast.
+Files: src/ex_cmds.c
+
+Patch 6.2.360
+Problem: "100|" in an empty line results in a ruler "1,0-100". (Pavol
+ Juhas)
+Solution: Recompute w_virtcol if the target column was not reached.
+Files: src/misc2.c
+
+Patch 6.2.361 (extra)
+Problem: Win32: Run gvim, ":set go-=m", use Alt-Tab, keep Alt pressed while
+ pressing Esc, then release Alt: Cursor disappears and typing a key
+ causes a beep. (Hari Krishna Dara)
+Solution: Don't ignore the WM_SYSKEYUP event when the menu is disabled.
+Files: src/gui_w32.c
+
+Patch 6.2.362 (extra, after 6.2.347)
+Problem: Win32: The manifest causes Gvim not to work. (Dave Roberts)
+Solution: Change "x86" to "X86". (Serge Pirotte)
+Files: src/gvim.exe.mnf
+
+Patch 6.2.363
+Problem: In an empty file with 'showmode' off, "i" doesn't change the ruler
+ from "0-1" to "1". Typing "x<BS>" does show "1", but then <Esc>
+ doesn't make it "0-1" again. Same problem for ruler in
+ statusline. (Andrew Pimlott)
+Solution: Remember the "empty line" flag with Insert mode and'ed to it.
+Files: src/screen.c
+
+Patch 6.2.364
+Problem: HTML version of the documentation doesn't mention the encoding,
+ which is a problem for mbyte.txt.
+Solution: Adjust the awk script. (Ilya Sher)
+Files: runtime/doc/makehtml.awk
+
+Patch 6.2.365
+Problem: The configure checks for Perl and Python may add compile and link
+ arguments that break building Vim.
+Solution: Do a sanity check: try building with the arguments.
+Files: src/auto/configure, src/configure.in
+
+Patch 6.2.366
+Problem: When the GUI can't start because no valid font is found, there is
+ no error message. (Ugen)
+Solution: Add an error message.
+Files: src/gui.c
+
+Patch 6.2.367
+Problem: Building the help tags file while installing may fail if there is
+ another Vim in $PATH.
+Solution: Specify the just installed Vim executable. (Gordon Prieur)
+Files: src/Makefile
+
+Patch 6.2.368
+Problem: When 'autochdir' is set, closing a window doesn't change to the
+ directory of the new current window. (Salman Halim)
+Solution: Handle 'autochdir' always when a window becomes the current one.
+Files: src/window.c
+
+Patch 6.2.369
+Problem: Various memory leaks: when using globpath(), when searching for
+ help tags files, when defining a function inside a function, when
+ giving an error message through an exception, for the final "."
+ line in ":append", in expression "cond ? a : b" that fails and for
+ missing ")" in an expression. Using NULL pointer when adding
+ first user command and for pointer computations with regexp.
+ (tests by Dominique Pelle)
+Solution: Fix the leaks by freeing the allocated memory. Don't use the
+ array of user commands when there are no entries. Use a macro
+ instead of a function call for saving and restoring regexp states.
+Files: src/eval.c, src/ex_cmds.c, src/ex_docmd.c, src/ex_getln.c,
+ src/misc2.c, src/regexp.c, src/screen.c, src/tag.c
+
+Patch 6.2.370 (extra, after6.2.341)
+Problem: Win32: When the path to diff.exe contains a space and using the
+ vimrc generated by the install program, diff mode may not work.
+ (Alejandro Lopez-Valencia)
+Solution: Do not use double quotes for arguments that do not have a space.
+Files: src/dosinst.c
+
+Patch 6.2.371
+Problem: When 'virtualedit' is set and there is a Tab before the next "x",
+ "dtx" does not delete the whole Tab. (Ken Hashishi)
+Solution: Move the cursor to the last position of the Tab. Also for
+ "df<Tab>".
+Files: src/normal.c
+
+Patch 6.2.372
+Problem: When using balloon evaluation, no value is displayed for members
+ of structures and items of an array.
+Solution: Include "->", "." and "[*]" in the expression.
+Files: src/gui_beval.c, src/normal.c, src/vim.h
+
+Patch 6.2.373
+Problem: When 'winminheight' is zero and a window is reduced to zero
+ height, the ruler always says "Top" instead of the cursor
+ position. (Antoine J. Mechelynck)
+Solution: Don't recompute w_topline for a zero-height window.
+Files: src/window.c
+
+Patch 6.2.374
+Problem: ":echo "hello" | silent normal n" removes the "hello" message.
+ (Servatius Brandt)
+Solution: Don't echo the search string when ":silent" was used. Also don't
+ show the mode. In general: don't clear to the end of the screen.
+Files: src/gui.c, src/message.c, src/os_unix.c, src/proto/message.pro,
+ src/screen.c, src/search.c, src/window.c
+
+Patch 6.2.375
+Problem: When changing 'guioptions' the hit-enter prompt may be below the
+ end of the Vim window.
+Solution: Call screen_alloc() before showing the prompt.
+Files: src/message.c
+
+Patch 6.2.376
+Problem: Win32: Ruby interface cannot be dynamically linked with Ruby 1.6.
+Solution: Add #ifdefs around use of rb_w32_snprintf(). (Benoît Cerrina)
+Files: src/if_ruby.c
+
+Patch 6.2.377 (after 6.2.372)
+Problem: Compiler warnings for signed/unsigned compare. (Michael Wookey)
+Solution: Add type cast.
+Files: src/normal.c
+
+Patch 6.2.378 (extra, after 6.2.118)
+Problem: Mac: cannot build with Project Builder.
+Solution: Add remove_tail_with_ext() to locate and remove the "build"
+ directory from the runtime path. Include os_unix.c when needed.
+ (Dany St Amant)
+Files: src/misc1.c, src/os_macosx.c, src/vim.h
+
+Patch 6.2.379
+Problem: Using ":mkvimrc" in the ":options" window sets 'bufhidden' to
+ "delete". (Michael Naumann)
+Solution: Do not add buffer-specific option values to a global vimrc file.
+Files: src/option.c
+
+Patch 6.2.380 (extra)
+Problem: DOS: "make test" fails when running it again. Can't "make test"
+ with Borland C.
+Solution: Make sure ".out" files are deleted when they get in the way. Add
+ a "test" target to the Borland C Makefile.
+Files: src/Make_bc5.mak, src/testdir/Make_dos.mak
+
+Patch 6.2.381
+Problem: Setting 'fileencoding' to a comma separated list (confusing it
+ with 'fileencodings') does not result in an error message.
+ Setting 'fileencoding' in an empty file marks it as modified.
+ There is no "+" in the title after setting 'fileencoding'.
+Solution: Check for a comma in 'fileencoding'. Only consider a non-empty
+ file modified by changing 'fileencoding'. Update the title after
+ changing 'fileencoding'.
+Files: src/option.c
+
+Patch 6.2.382
+Problem: Running "make test" puts marks from test files in viminfo.
+Solution: Specify a different viminfo file to use.
+Files: src/testdir/test15.in, src/testdir/test49.in
+
+Patch 6.2.383
+Problem: ":hi foo term='bla" crashes Vim. (Antony Scriven)
+Solution: Check that the closing ' is there.
+Files: src/syntax.c
+
+Patch 6.2.384
+Problem: ":menu a.&b" ":unmenu a.b" only works if "&b" isn't translated.
+Solution: Also compare the names without '&' characters.
+Files: src/menu.c
+
+Patch 6.2.385 (extra)
+Problem: Win32: forward_slash() and trash_input_buf() are undefined when
+ compiling with small features. (Ajit Thakkar)
+Solution: Change the #ifdefs for forward_slash(). Don't call
+ trash_input_buf() if the input buffer isn't used.
+Files: src/fileio.c, src/os_win32.c
+
+Patch 6.2.386
+Problem: Wasting time trying to read marks from the viminfo file for a
+ buffer without a name.
+Solution: Skip reading marks when the buffer has no name.
+Files: src/fileio.c
+
+Patch 6.2.387
+Problem: There is no highlighting of translated items in help files.
+Solution: Search for a "help_ab.vim" syntax file when the help file is
+ called "*.abx". Also improve the help highlighting a bit.
+Files: runtime/syntax/help.vim
+
+Patch 6.2.388
+Problem: GTK: When displaying some double-width characters they are drawn
+ as single-width, because of conversion to UTF-8.
+Solution: Check the width that GTK uses and add a space if it's one instead
+ of two.
+Files: src/gui_gtk_x11.c
+
+Patch 6.2.389
+Problem: When working over a slow connection, it's very annoying that the
+ last line is partly drawn and then cleared for every change.
+Solution: Don't redraw the bottom line if no rows were inserted or deleted.
+ Don't draw the line if we know "@" lines will be used.
+Files: src/screen.c
+
+Patch 6.2.390
+Problem: Using "r*" in Visual mode on multi-byte characters only replaces
+ every other character. (Tyson Roberts)
+Solution: Correct the cursor position after replacing each character.
+Files: src/ops.c
+
+Patch 6.2.391 (extra)
+Problem: The ":highlight" command is not tested.
+Solution: Add a test script for ":highlight".
+Files: src/testdir/Makefile, src/testdir/Make_amiga.mak,
+ src/testdir/Make_dos.mak, src/testdir/Make_os2.mak,
+ src/testdir/Make_vms.mms, src/testdir/test51.in,
+ src/testdir/test51.ok
+
+Patch 6.2.392 (after 6.2.384)
+Problem: Unused variable.
+Solution: Remove "dlen".
+Files: src/menu.c
+
+Patch 6.2.393
+Problem: When using very long lines the viminfo file can become very big.
+Solution: Add the "s" flag to 'viminfo': skip registers with more than the
+ specified Kbyte of text.
+Files: runtime/doc/options.txt, src/ops.c, src/option.c
+
+Patch 6.2.394 (after 6.2.391)
+Problem: Test 51 fails on a terminal with 8 colors. (Tony Leneis)
+Solution: Use "DarkBlue" instead of "Blue" to avoid the "bold" attribute.
+Files: src/testdir/test51.in
+
+Patch 6.2.395
+Problem: When using ":tag" or ":pop" the previous matching tag is used.
+ But since the current file is different, the ordering of the tags
+ may change.
+Solution: Remember what the current buffer was for when re-using cur_match.
+Files: src/edit.c, src/ex_cmds.c, src/proto/tag.pro, src/structs.h,
+ src/tag.c
+
+Patch 6.2.396
+Problem: When CTRL-T jumps to another file and an autocommand moves the
+ cursor to the '" mark, don't end up on the right line. (Michal
+ Malecki)
+Solution: Set the line number after loading the file.
+Files: src/tag.c
+
+Patch 6.2.397
+Problem: When using a double-byte 'encoding' mapping <M-x> doesn't work.
+ (Yasuhiro Matsumoto)
+Solution: Do not set the 8th bit of the character but use a modifier.
+Files: src/gui_gtk_x11.c, src/gui_x11.c, src/misc2.c
+
+Patch 6.2.398 (extra)
+Problem: Win32 console: no extra key modifiers are supported.
+Solution: Encode the modifiers into the input stream. Also fix that special
+ keys are converted and stop working when 'tenc' is set. Also fix
+ that when 'tenc' is intialized the input and output conversion is
+ not setup properly until 'enc' or 'tenc' is set.
+Files: src/getchar.c, src/option.c, src/os_win32.c
+
+Patch 6.2.399
+Problem: A ":set" command that fails still writes a message when it is
+ inside a try/catch block.
+Solution: Include all the text of the message in the error message.
+Files: src/charset.c, src/option.c
+
+Patch 6.2.400
+Problem: Can't compile if_xcmdsrv.c on HP-UX 11.0.
+Solution: Include header file poll.h. (Malte Neumann)
+Files: src/if_xcmdsrv.c
+
+Patch 6.2.401
+Problem: When opening a buffer that was previously opened, Vim does not
+ restore the cursor position if the first line starts with white
+ space. (Gregory Margo)
+Solution: Don't skip restoring the cursor position if it is past the blanks
+ in the first line.
+Files: src/buffer.c
+
+Patch 6.2.402
+Problem: Mac: "make install" doesn't generate help tags. (Benji Fisher)
+Solution: Generate help tags before copying the runtime files.
+Files: src/Makefile
+
+Patch 6.2.403
+Problem: ":@y" checks stdin if there are more commands to execute. This
+ fails if stdin is not connected, e.g., when starting the GUI from
+ KDE. (Ned Konz)
+Solution: Only check for a next command if there still is typeahead.
+Files: src/ex_docmd.c
+
+Patch 6.2.404
+Problem: Our own function to determine width of Unicode characters may get
+ outdated. (Markus Kuhn)
+Solution: Use wcwidth() when it is available. Also use iswprint().
+Files: src/auto/configure, src/configure.in, src/config.h.in, src/mbyte.c
+
+Patch 6.2.405
+Problem: Cannot map zero without breaking the count before a command.
+ (Benji Fisher)
+Solution: Disable mapping zero when entering a count.
+Files: src/getchar.c, src/globals.h, src/normal.c
+
+Patch 6.2.406
+Problem: ":help \zs", ":help \@=" and similar don't find useful help.
+Solution: Prepend "/\" to the arguments to find the desired help tag.
+Files: src/ex_cmds.c
+
+Patch 6.2.407 (after 6.2.299)
+Problem: ":help \@<=" doesn't find help.
+Solution: Avoid that ":help \@<=" searches for the "<=" language.
+Files: src/tag.c
+
+Patch 6.2.408
+Problem: ":compiler" is not consistent: Sets local options and a global
+ variable. (Douglas Potts) There is no error message when a
+ compiler is not supported.
+Solution: Use ":compiler!" to set a compiler globally, otherwise it's local
+ to the buffer and "b:current_compiler" is used. Give an error
+ when no compiler script could be found.
+ Note: updated compiler plugins can be found at
+ ftp://ftp.vim.org/pub/vim/runtime/compiler/
+Files: runtime/compiler/msvc.vim, runtime/doc/quickfix.txt, src/eval.c,
+ src/ex_cmds2.c
+
+Patch 6.2.409
+Problem: The cursor ends up in the last column instead of after the line
+ when doing "i//<Esc>o" with 'indentexpr' set to "cindent(v:lnum)".
+ (Toby Allsopp)
+Solution: Adjust the cursor as if in Insert mode.
+Files: src/misc1.c
+
+Patch 6.2.410 (after 6.2.389)
+Problem: In diff mode, when there are more filler lines than fit in the
+ window, they are not drawn.
+Solution: Check for filler lines when skipping to draw a line that doesn't
+ fit.
+Files: src/screen.c
+
+Patch 6.2.411
+Problem: A "\n" inside a string is not seen as a line break by the regular
+ expression matching. (Hari Krishna Dara)
+Solution: Add the vim_regexec_nl() function for strings where "\n" is to be
+ matched with a line break.
+Files: src/eval.c, src/ex_eval.c, src/proto/regexp.c, src/regexp.c
+
+Patch 6.2.412
+Problem: Ruby: "ruby << EOF" inside a function doesn't always work. Also
+ for ":python", ":tcl" and ":perl".
+Solution: Check for "<< marker" and skip until "marker" before checking for
+ "endfunction".
+Files: src/eval.c
+
+Patch 6.2.413 (after 6.2.411)
+Problem: Missing prototype for vim_regexec_nl(). (Marcel Svitalsky)
+Solution: Now really include the prototype.
+Files: src/proto/regexp.pro
+
+Patch 6.2.414
+Problem: The function used for custom completion of user commands cannot
+ have <SID> to make it local. (Hari Krishna Dara)
+Solution: Pass the SID of the script where the user command was defined on
+ to the completion. Also clean up #ifdefs.
+Files: src/ex_docmd.c, src/eval.c, src/ex_getln.c, src/structs.h
+
+Patch 6.2.415
+Problem: Vim may crash after a sequence of events that change the window
+ size. The window layout assumes a larger window than is actually
+ available. (Servatius Brandt)
+Solution: Invoke win_new_shellsize() from screenalloc() instead of from
+ set_shellsize().
+Files: src/screen.c, src/term.c
+
+Patch 6.2.416
+Problem: Compiler warning for incompatible pointer.
+Solution: Remove the "&" in the call to poll(). (Xavier de Gaye)
+Files: src/os_unix.c
+
+Patch 6.2.417 (after 6.2.393)
+Problem: Many people forget that the '"' item in 'viminfo' needs to be
+ preceded with a backslash,
+Solution: Add '<' as an alias for the '"' item.
+Files: runtime/doc/options.txt, src/ops.c, src/option.c
+
+Patch 6.2.418
+Problem: Using ":nnoremap <F12> :echo "cheese" and ":cabbr cheese xxx":
+ when pressing <F12> still uses the abbreviation. (Hari Krishna)
+Solution: Also apply "noremap" to abbreviations.
+Files: src/getchar.c
+
+Patch 6.2.419 (extra)
+Problem: Win32: Cannot open the Vim window inside another application.
+Solution: Add the "-P" argument to specify the window title of the
+ application to run inside. (Zibo Zhao)
+Files: runtime/doc/starting.txt, src/main.c, src/gui_w32.c,
+ src/gui_w48.c, src/if_ole.cpp, src/os_mswin.c,
+ src/proto/gui_w32.pro
+
+Patch 6.2.420
+Problem: Cannot specify a file to be edited in binary mode without setting
+ the global value of the 'binary' option.
+Solution: Support ":edit ++bin file".
+Files: runtime/doc/editing.txt, src/buffer.c, src/eval.c, src/ex_cmds.h,
+ src/ex_docmd.c, src/fileio.c, src/misc2.c
+
+Patch 6.2.421
+Problem: Cannot set the '[ and '] mark, which may be necessary when an
+ autocommand simulates reading a file.
+Solution: Allow using "m[" and "m]".
+Files: runtime/doc/motion.txt, src/mark.c
+
+Patch 6.2.422
+Problem: In CTRL-X completion messages the "/" makes them less readable.
+Solution: Remove the slashes. (Antony Scriven)
+Files: src/edit.c
+
+Patch 6.2.423
+Problem: ":vertical wincmd ]" does not split vertically.
+Solution: Add "postponed_split_flags".
+Files: src/ex_docmd.c, src/globals.h, src/if_cscope.c, src/tag.c
+
+Patch 6.2.424
+Problem: A BufEnter autocommand that sets an option stops 'mousefocus' from
+ working in Insert mode (Normal mode is OK). (Gregory Seidman)
+Solution: In the Insert mode loop invoke gui_mouse_correct() when needed.
+Files: src/edit.c
+
+Patch 6.2.425
+Problem: Vertical split and command line window: can only drag status line
+ above the cmdline window on the righthand side, not lefthand side.
+Solution: Check the status line row instead of the window pointer.
+Files: src/ui.c
+
+Patch 6.2.426
+Problem: A syntax region end match with a matchgroup that includes a line
+ break only highlights the last line with matchgroup. (Gary
+ Holloway)
+Solution: Also use the line number of the position where the region
+ highlighting ends.
+Files: src/syntax.c
+
+Patch 6.2.427 (extra)
+Problem: When pasting a lot of text in a multi-byte encoding, conversion
+ from 'termencoding' to 'encoding' may fail for some characters.
+ (Kuang-che Wu)
+Solution: When there is an incomplete byte sequence at the end of the read
+ text keep it for the next time.
+Files: src/mbyte.c, src/os_amiga.c, src/os_mswin.c, src/proto/mbyte.pro,
+ src/proto/os_mswin.pro, src/ui.c
+
+Patch 6.2.428
+Problem: The X11 clipboard supports the Vim selection for char/line/block
+ mode, but since the encoding is not included can't copy/paste
+ between two Vims with a different 'encoding'.
+Solution: Add a new selection format that includes the 'encoding'. Perform
+ conversion when necessary.
+Files: src/gui_gtk_x11.c, src/ui.c, src/vim.h
+
+Patch 6.2.429
+Problem: Unix: glob() doesn't work for a directory with a single quote in
+ the name. (Nazri Ramliy)
+Solution: When using the shell to expand, only put double quotes around
+ spaces and single quotes, not the whole thing.
+Files: src/os_unix.c
+
+Patch 6.2.430
+Problem: BOM at start of a vim script file is not recognized and causes an
+ error message.
+Solution: Detect the BOM and skip over it. Also fix that after using
+ ":scriptencoding" the iconv() file descriptor was not closed
+ (memory leak).
+Files: src/ex_cmds2.c
+
+Patch 6.2.431
+Problem: When using the horizontal scrollbar, the scrolling is limited to
+ the length of the cursor line.
+Solution: Make the scroll limit depend on the longest visible line. The
+ cursor is moved when necessary. Including the 'h' flag in
+ 'guioptions' disables this.
+Files: runtime/doc/gui.txt, runtime/doc/options.txt, src/gui.c,
+ src/misc2.c, src/option.h
+
+Patch 6.2.432 (after 6.2.430 and 6.2.431)
+Problem: Lint warnings.
+Solution: Add type casts.
+Files: src/ex_cmds2.c, src/gui.c
+
+Patch 6.2.433
+Problem: Translating "VISUAL" and "BLOCK" separately doesn't give a good
+ result. (Alejandro Lopez Valencia)
+Solution: Use a string for each combination.
+Files: src/screen.c
+
+Patch 6.2.434 (after 6.2.431)
+Problem: Compiler warning. (Salman Halim)
+Solution: Add type casts.
+Files: src/gui.c
+
+Patch 6.2.435
+Problem: When there are vertically split windows the minimal Vim window
+ height is computed wrong.
+Solution: Use frame_minheight() to correctly compute the minimal height.
+Files: src/window.c
+
+Patch 6.2.436
+Problem: Running the tests changes the user's viminfo file.
+Solution: In test 49 tell the extra Vim to use the test viminfo file.
+Files: src/testdir/test49.vim
+
+Patch 6.2.437
+Problem: ":mksession" always puts "set nocompatible" in the session file.
+ This changes option settings. (Ron Aaron)
+Solution: Add an "if" to only change 'compatible' when needed.
+Files: src/ex_docmd.c
+
+Patch 6.2.438
+Problem: When the 'v' flag is present in 'cpoptions', backspacing and then
+ typing text again: one character too much is overtyped before
+ inserting is done again.
+Solution: Set "dollar_vcol" to the right column.
+Files: src/edit.c
+
+Patch 6.2.439
+Problem: GTK 2: Changing 'lines' may cause a mismatch between the window
+ layout and the size of the window.
+Solution: Disable the hack with force_shell_resize_idle().
+Files: src/gui_gtk_x11.c
+
+Patch 6.2.440
+Problem: When 'lazyredraw' is set the window title is still updated.
+ The size of the Visual area and the ruler are displayed too often.
+Solution: Postpone redrawing the window title. Only show the Visual area
+ size when waiting for a character. Don't draw the ruler
+ unnecessary.
+Files: src/buffer.c, src/normal.c, src/screen.c
+
+Patch 6.2.441
+Problem: ":unabbreviate foo " doesn't work, because of the trailing space,
+ while an abbreviation with a trailing space is not possible. (Paul
+ Jolly)
+Solution: Accept a match with the lhs of an abbreviation without the
+ trailing space.
+Files: src/getchar.c
+
+Patch 6.2.442
+Problem: Cannot manipulate the command line from a function.
+Solution: Add getcmdline(), getcmdpos() and setcmdpos() functions and the
+ CTRL-\ e command.
+Files: runtime/doc/cmdline.txt, runtime/doc/eval.txt, src/eval.c
+ src/ex_getln.c, src/ops.c, src/proto/ex_getln.pro,
+ src/proto/ops.pro
+
+Patch 6.2.443
+Problem: With ":silent! echoerr something" you don't get the position of
+ the error. emsg() only writes the message itself and returns.
+Solution: Also redirect the position of the error.
+Files: src/message.c
+
+Patch 6.2.444
+Problem: When adding the 'c' flag to a ":substitute" command it may replace
+ more times than without the 'c' flag. Happens for a match that
+ starts with "\ze" (Marcel Svitalsk) and when using "\@<=" (Klaus
+ Bosau).
+Solution: Correct "prev_matchcol" when replacing the line. Don't replace
+ the line when the pattern uses look-behind matching.
+Files: src/ex_cmds.c, src/proto/regexp.pro, src/regexp.c
+
+Patch 6.2.445
+Problem: Copying vimtutor to /tmp/something is not secure, a symlink may
+ cause trouble.
+Solution: Create a directory and create the file in it. Use "umask" to
+ create the directory with mode 700. (Stefan Nordhausen)
+Files: src/vimtutor
+
+Patch 6.2.446 (after 6.2.404)
+Problem: Using library functions wcwidth() and iswprint() results in
+ display problems for Hebrew characters. (Ron Aaron)
+Solution: Disable the code to use the library functions, use our own.
+Files: src/mbyte.c
+
+Patch 6.2.447 (after 6.2.440)
+Problem: Now that the title is only updated when redrawing, it is no longer
+ possible to show it while executing a function. (Madoka Machitani)
+Solution: Make ":redraw" also update the title.
+Files: src/ex_docmd.c
+
+Patch 6.2.448 (after 6.2.427)
+Problem: Mac: conversion done when 'termencoding' differs from 'encoding'
+ fails when pasting a longer text.
+Solution: Check for an incomplete sequence at the end of the chunk to be
+ converted. (Eckehard Berns)
+Files: src/mbyte.c
+
+Patch 6.2.449 (after 6.2.431)
+Problem: Get error messages when switching files.
+Solution: Check for a valid line number when calculating the width of the
+ horizontal scrollbar. (Helmut Stiegler)
+Files: src/gui.c
+
+Patch 6.2.450
+Problem: " #include" and " #define" are not recognized with the default
+ option values for 'include' and 'defined'. (RG Kiran)
+Solution: Adjust the default values to allow white space before the #.
+Files: runtime/doc/options.txt, src/option.c
+
+Patch 6.2.451
+Problem: GTK: when using XIM there are various problems, including setting
+ 'modified' and breaking undo at the wrong moment.
+Solution: Add "xim_changed_while_preediting", "preedit_end_col" and
+ im_is_preediting(). (Yasuhiro Matsumoto)
+Files: src/ex_getln.c, src/globals.h, src/gui_gtk.c, src/gui_gtk_x11.c,
+ src/mbyte.c, src/misc1.c, src/proto/mbyte.pro, src/screen.c,
+ src/undo.c
+
+Patch 6.2.452
+Problem: In diff mode, when DiffAdd and DiffText highlight settings are
+ equal, an added line is highlighted with DiffChange. (Tom Schumm)
+Solution: Remember the diff highlight type instead of the attributes.
+Files: src/screen.c
+
+Patch 6.2.453
+Problem: ":s/foo\|\nbar/x/g" does not replace two times in "foo\nbar".
+ (Pavel Papushev)
+Solution: When the pattern can match a line break also try matching at the
+ NUL at the end of a line.
+Files: src/ex_cmds.c, src/regexp.c
+
+Patch 6.2.454
+Problem: ":let b:changedtick" doesn't work. (Alan Schmitt) ":let
+ b:changedtick = 99" does not give an error message.
+Solution: Add code to recognize ":let b:changedtick".
+Files: src/eval.c
+
+Patch 6.2.455 (after 6.2.297)
+Problem: In Python commands the current locale changes how certain Python
+ functions work. (Eugene M. Minkovskii)
+Solution: Set the LC_NUMERIC locale to "C" while executing a Python command.
+Files: src/if_python.c
+
+Patch 6.2.456 (extra)
+Problem: Win32: Editing a file by its Unicode name (dropping it on Vim or
+ using the file selection dialog) doesn't work. (Yakov Lerner, Alex
+ Jakushev)
+Solution: Use wide character functions when file names are involved and
+ convert from/to 'encoding' where needed.
+Files: src/gui_w48.c, src/macros.h, src/memfile.c, src/memline.c,
+ src/os_mswin.c, src/os_win32.c
+
+Patch 6.2.457 (after 6.2.244)
+Problem: When 'encoding' is "utf-8" and writing text with chars above 0x80
+ in latin1, conversion is wrong every 8200 bytes. (Oyvind Holm)
+Solution: Correct the utf_ptr2len_check_len() function and fix the problem
+ of displaying 0xf7 in utfc_ptr2len_check_len().
+Files: src/mbyte.c
+
+Patch 6.2.458
+Problem: When 'virtualedit' is set "$" doesn't move to the end of an
+ unprintable character, causing "y$" not to include that character.
+ (Fred Ma)
+Solution: Set "coladd" to move the cursor to the end of the character.
+Files: src/misc2.c
+
+Patch 6.2.459 (after 6.2.454)
+Problem: Variable "b" cannot be written. (Salman Halim)
+Solution: Compare strings properly.
+Files: src/eval.c
+
+Patch 6.2.460 (extra, after 6.2.456)
+Problem: Compiler warnings for missing prototypes.
+Solution: Include the missing prototypes.
+Files: src/proto/os_win32.pro
+
+Patch 6.2.461
+Problem: After using a search command "x" starts putting single characters
+ in the numbered registers.
+Solution: Reset "use_reg_one" at the right moment.
+Files: src/normal.c
+
+Patch 6.2.462
+Problem: Finding a matching parenthesis does not correctly handle a
+ backslash in a trailing byte.
+Solution: Handle multi-byte characters correctly. (Taro Muraoka)
+Files: src/search.c
+
+Patch 6.2.463 (extra)
+Problem: Win32: An NTFS file system may contain files with extra info
+ streams. The current method to copy them creates one and then
+ deletes it again. (Peter Toennies) Also, only three streams with
+ hard coded names are copied.
+Solution: Use BackupRead() to check which info streams the original file
+ contains and only copy these streams.
+Files: src/os_win32.c
+
+Patch 6.2.464 (extra, after 6.2.427)
+Problem: Amiga: Compilation error with gcc. (Ali Akcaagac)
+Solution: Move the #ifdef outside of Read().
+Files: src/os_amiga.c
+
+Patch 6.2.465
+Problem: When resizing the GUI window the window manager sometimes moves it
+ left of or above the screen. (Michael McCarty)
+Solution: Check the window position after resizing it and move it onto the
+ screen when it isn't.
+Files: src/gui.c
+
+Patch 6.2.466 (extra, after 6.2.456)
+Problem: Win32: Compiling with Borland C fails, and an un/signed warning.
+Solution: Redefine wcsicmp() to wcscmpi() and add type casts. (Yasuhiro
+ Matsumoto)
+Files: src/os_win32.c
+
+Patch 6.2.467 (extra, after 6.2.463)
+Problem: Win32: can't compile without multi-byte feature. (Ajit Thakkar)
+Solution: Add #ifdefs around the info stream code.
+Files: src/os_win32.c
+
+Patch 6.2.468
+Problem: Compiler warnings for shadowed variables. (Matthias Mohr)
+Solution: Delete superfluous variables and rename others.
+Files: src/eval.c, src/ex_docmd.c, src/ex_eval.c, src/if_cscope.c,
+ src/fold.c, src/option.c, src/os_unix.c, src/quickfix.c,
+ src/regexp.c
+
+Patch 6.2.469 (extra, after 6.2.456)
+Problem: Win32: Can't create swap file when 'encoding' differs from the
+ active code page. (Kriton Kyrimis)
+Solution: In enc_to_ucs2() terminate the converted string with a NUL
+Files: src/os_mswin.c
+
+Patch 6.2.470
+Problem: The name returned by tempname() may be equal to the file used for
+ shell output when ignoring case.
+Solution: Skip 'O' and 'I' in tempname().
+Files: src/eval.c
+
+Patch 6.2.471
+Problem: "-L/usr/lib" is used in the link command, even though it's
+ supposed to be filtered out. "-lw" and "-ldl" are not
+ automatically added when needed for "-lXmu". (Antonio Colombo)
+Solution: Check for a space after the argument instead of before. Also
+ remove "-R/usr/lib" if it's there. Check for "-lw" and "-ldl"
+ before trying "-lXmu".
+Files: src/auto/configure, src/configure.in, src/link.sh
+
+Patch 6.2.472
+Problem: When using a FileChangedShell autocommand that changes the current
+ buffer, a buffer exists that can't be wiped out.
+ Also, Vim sometimes crashes when executing an external command
+ that changes the buffer and a FileChangedShell autocommand is
+ used. (Hari Krishna Dara)
+ Users are confused by the warning for a file being changed outside
+ of Vim.
+Solution: Avoid that the window counter for a buffer is incremented twice.
+ Avoid that buf_check_timestamp() is used recursively.
+ Add a hint to look in the help for more info.
+Files: src/ex_cmds.c, src/fileio.c
+
+Patch 6.2.473
+Problem: Using CTRL-] in a help buffer without a name causes a crash.
+Solution: Check for name to be present before using it. (Taro Muraoka)
+Files: src/tag.c
+
+Patch 6.2.474 (extra, after 6.2.456)
+Problem: When Vim is starting up conversion is done unnecessarily. Failure
+ to find the runtime files on Windows 98. (Randall W. Morris)
+Solution: Init enc_codepage negative, only use it when not negative.
+ Don't use GetFileAttributesW() on Windows 98 or earlier.
+Files: src/globals.h, src/gui_w32.c, src/gui_w48.c, src/os_mswin.c,
+ src/os_win32.c
+
+Patch 6.2.475
+Problem: Commands after "perl <<EOF" are parsed as Vim commands when they
+ are not executed.
+Solution: Properly skip over the perl commands.
+Files: src/ex_docmd.c, src/ex_getln.c, src/if_perl.xs, src/if_python.c,
+ src/if_ruby.c, src/if_tcl.c, src/misc2.c
+
+Patch 6.2.476
+Problem: When reloading a hidden buffer changed outside of Vim and the
+ current buffer is read-only, the reloaded buffer becomes
+ read-only. (Hari Krishna Dara)
+Solution: Save the 'readonly' flag of the realoaded buffer instead of the
+ current buffer.
+Files: src/fileio.c
+
+Patch 6.2.477
+Problem: Using remote_send(v:servername, "\<C-V>") causes Vim to hang.
+ (Yakov Lerner)
+Solution: When the resulting string is empty don't set received_from_client.
+Files: src/main.c
+
+Patch 6.2.478
+Problem: Win32: "--remote file" fails changing directory if the current
+ directory name starts with a single quote. (Iestyn Walters)
+Solution: Add a backslash where it will be removed later.
+Files: src/main.c, src/misc2.c, src/proto/misc2.pro
+
+Patch 6.2.479
+Problem: The error message for errors during recovery goes unnoticed.
+Solution: Avoid that the hit-enter prompt overwrites the message. Add a few
+ lines to make the error stand out.
+Files: src/main.c, src/message.c, src/memline.c
+
+Patch 6.2.480
+Problem: NetBeans: Using negative index in array. backslash at end of
+ message may cause Vim to crash. (Xavier de Gaye)
+Solution: Initialize buf_list_used to zero. Check for trailing backslash.
+Files: src/netbeans.c
+
+Patch 6.2.481
+Problem: When writing a file it is not possible to specify that hard and/or
+ symlinks are to be broken instead of preserved.
+Solution: Add the "breaksymlink" and "breakhardlink" values to 'backupcopy'.
+ (Simon Ekstrand)
+Files: runtime/doc/options.txt, src/fileio.c, src/option.c, src/option.h
+
+Patch 6.2.482
+Problem: Repeating insert of CTRL-K 1 S doesn't work. The superscript 1 is
+ considered to be a digit. (Juergen Kraemer)
+Solution: In vim_isdigit() only accept '0' to '9'. Use VIM_ISDIGIT() for
+ speed where possible. Also add vim_isxdigit().
+Files: src/buffer.c, src/charset.c, src/diff.c, src/digraph.c,
+ src/edit.c, src/eval.c,, src/ex_cmds.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_eval.c, src/ex_getln.c,
+ src/if_xcmdsrv.c, src/farsi.c, src/fileio.c, src/fold.c,
+ src/getchar.c, src/gui.c, src/if_cscope.c, src/macros.h,
+ src/main.c, src/mark.c, src/mbyte.c, src/menu.c, src/misc1.c,
+ src/misc2.c, src/normal.c, src/ops.c, src/option.c,
+ src/proto/charset.pro, src/regexp.c, src/screen.c, src/search.c,
+ src/syntax.c, src/tag.c, src/term.c, src/termlib.c
+
+Patch 6.2.483 (extra, after 6.2.482)
+Problem: See 6.2.482.
+Solution: Extra part of patch 6.2.482.
+Files: src/gui_photon.c, src/gui_w48.c, src/os_msdos.c, src/os_mswin.c
+
+Patch 6.2.484
+Problem: MS-Windows: With the included diff.exe, differences after a CTRL-Z
+ are not recognized. (Peter Keresztes)
+Solution: Write the files with unix fileformat and invoke diff with --binary
+ if possible.
+Files: src/diff.c
+
+Patch 6.2.485
+Problem: A BufWriteCmd autocommand cannot know if "!" was used or not.
+ (Hari Krishna Dara)
+Solution: Add the v:cmdbang variable.
+Files: runtime/doc/eval.txt, src/eval.c, src/proto/eval.pro,
+ src/fileio.c, src/vim.h
+
+Patch 6.2.486 (6.2.482)
+Problem: Diff for eval.c is missing.
+Solution: Addition to patch 6.2.482.
+Files: src/eval.c
+
+Patch 6.2.487 (extra, after 6.2.456)
+Problem: Compiler warnings for wrong prototype. (Alejandro Lopez Valencia)
+Solution: Delete the prototype for Handle_WM_Notify().
+Files: src/proto/gui_w32.pro
+
+Patch 6.2.488
+Problem: Missing ")" in *.ch filetype detection.
+Solution: Add the ")". (Ciaran McCreesh)
+Files: runtime/filetype.vim
+
+Patch 6.2.489
+Problem: When accidentally opening a session in Vim which has already been
+ opened in another Vim there is a long row of ATTENTION prompts.
+ Need to quit each of them to get out. (Robert Webb)
+Solution: Add the "Abort" alternative to the dialog.
+Files: src/memline.c
+
+Patch 6.2.490
+Problem: With 'paragraph' it is not possible to use a single dot as a
+ paragraph boundary. (Dorai Sitaram)
+Solution: Allow using " " (two spaces) in 'paragraph' to match ".$" or
+ ". $"
+Files: src/search.c
+
+Patch 6.2.491
+Problem: Decrementing a position doesn't take care of multi-byte chars.
+Solution: Adjust the column for multi-byte characters. Remove mb_dec().
+ (Yasuhiro Matsumoto)
+Files: src/mbyte.c, src/misc2.c, src/proto/mbyte.pro
+
+Patch 6.2.492
+Problem: When using ":redraw" while there is a message, the next ":echo"
+ still causes text to scroll. (Yasuhiro Matsumoto)
+Solution: Reset msg_didout and msg_col, so that after ":redraw" the next
+ message overwrites an existing one.
+Files: src/ex_docmd.c
+
+Patch 6.2.493
+Problem: "@x" doesn't work when 'insertmode' is set. (Benji Fisher)
+Solution: Put "restart_edit" in the typeahead buffer, so that it's used
+ after executing the register contents.
+Files: src/ops.c
+
+Patch 6.2.494
+Problem: Using diff mode with two windows, when moving horizontally in
+ inserted lines, a fold in the other window may open.
+Solution: Compute the line number in the other window correctly.
+Files: src/diff.c
+
+Patch 6.2.495 (extra, after 6.2.456)
+Problem: Win32: The file dialog doesn't work on Windows 95.
+Solution: Put the wide code of gui_mch_browse() in gui_mch_browseW() and use
+ it only on Windows NT/2000/XP.
+Files: src/gui_w32.c, src/gui_w48.c
+
+Patch 6.2.496
+Problem: FreeBSD 4.x: When compiled with the pthread library (Python) a
+ complicated pattern may cause Vim to crash. Catching the signal
+ doesn't work.
+Solution: When compiled with threads, instead of using the normal stacksize
+ limit, use the size of the initial stack.
+Files: src/auto/configure, src/config.h.in, src/configure.in,
+ src/os_unix.c
+
+Patch 6.2.497 (extra)
+Problem: Russian messages are only available in one encoding.
+Solution: Convert the messages to MS-Windows codepages. (Vassily Ragosin)
+Files: src/po/Makefile
+
+Patch 6.2.498
+Problem: Non-latin1 help files are not properly supported.
+Solution: Support utf-8 help files and convert them to 'encoding' when
+ needed.
+Files: src/fileio.c
+
+Patch 6.2.499
+Problem: When writing a file and halting the system, the file might be lost
+ when using a journalling file system.
+Solution: Use fsync() to flush the file data to disk after writing a file.
+ (Radim Kolar)
+Files: src/fileio.c
+
+Patch 6.2.500 (extra)
+Problem: The DOS/MS-Windows the installer doesn't use the --binary flag for
+ diff.
+Solution: Add --binary to the diff argument in MyDiff(). (Alejandro Lopez-
+ Valencia)
+Files: src/dosinst.c
+
+Patch 6.2.501
+Problem: Vim does not compile with MorphOS.
+Solution: Add a Makefile and a few changes to make Vim work with MorphOS.
+ (Ali Akcaagac)
+Files: runtime/doc/os_amiga.txt, src/INSTALLami.txt,
+ src/Make_morphos.mak, src/memfile.c, src/term.c
+
+Patch 6.2.502
+Problem: Building fails for generating message files.
+Solution: Add dummy message files.
+Files: src/po/ca.po, src/po/ru.po, src/po/sv.po
+
+Patch 6.2.503
+Problem: Mac: Can't compile MacRoman conversions without the GUI.
+Solution: Also link with the Carbon framework for the terminal version, for
+ the MacRoman conversion functions. (Eckehard Berns)
+ Remove -ltermcap from the GUI link command, it is not needed.
+Files: src/auto/configure, src/Makefile, src/configure.in
+
+Patch 6.2.504
+Problem: Various problems with 'cindent', among which that a
+ list of variable declarations is not indented properly.
+Solution: Fix the wrong indenting. Improve indenting of C++ methods.
+ Add the 'i', 'b' and 'W' options to 'cinoptions'. (mostly by
+ Helmut Stiegler)
+ Improve indenting of preprocessor-continuation lines.
+Files: runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+ src/testdir/test3.ok
+
+Patch 6.2.505
+Problem: Help for -P argument is missing. (Ronald Hoellwarth)
+Solution: Add the patch that was missing in 6.2.419.
+Files: runtime/doc/starting.txt
+
+Patch 6.2.506 (extra)
+Problem: Win32: When 'encoding' is a codepage then reading a utf-8 file
+ only works when iconv is available. Writing a file in another
+ codepage uses the wrong kind of conversion.
+Solution: Use internal conversion functions. Enable reading and writing
+ files with 'fileencoding' different from 'encoding' for all valid
+ codepages and utf-8 without the need for iconv.
+Files: src/fileio.c, src/testdir/Make_dos.mak, src/testdir/test52.in,
+ src/testdir/test52.ok
+
+Patch 6.2.507
+Problem: The ownership of the file with the password for the NetBeans
+ connection is not checked. "-nb={file}" doesn't work for GTK.
+Solution: Only accept the file when owned by the user and not accessible by
+ others. Detect "-nb=" for GTK.
+Files: src/netbeans.c, src/gui_gtk_x11.c
+
+Patch 6.2.508
+Problem: Win32: "v:lang" does not show the current language for messages if
+ it differs from the other locale settings.
+Solution: Use the value of the $LC_MESSAGES environment variable.
+Files: src/ex_cmds2.c
+
+Patch 6.2.509 (after 6.2.508)
+Problem: Crash when $LANG is not set.
+Solution: Add check for NULL pointer. (Ron Aaron)
+Files: src/ex_cmds2.c
+
+Patch 6.2.510 (after 6.2.507)
+Problem: Warning for pointer conversion.
+Solution: Add a type cast.
+Files: src/gui_gtk_x11.c
+
+Patch 6.2.511
+Problem: Tags in Russian help files are in utf-8 encoding, which may be
+ different from 'encoding'.
+Solution: Use the "TAG_FILE_ENCODING" field in the tags file to specify the
+ encoding of the tags. Convert help tags from 'encoding' to the
+ tag file encoding when searching for matches, do the reverse when
+ listing help tags.
+Files: runtime/doc/tagsrch.txt, src/ex_cmds.c, src/tag.c
+
+Patch 6.2.512
+Problem: Translating "\"\n" is useless. (Gerfried Fuchs)
+Solution: Remove the _() around it.
+Files: src/main.c, src/memline.c
+
+Patch 6.2.513 (after 6.2.507)
+Problem: NetBeans: the check for owning the connection info file can be
+ simplified. (Nikolay Molchanov)
+Solution: Only check if the access mode is right.
+Files: src/netbeans.c
+
+Patch 6.2.514
+Problem: When a highlight/syntax group name contains invalid characters
+ there is no warning.
+Solution: Add an error for unprintable characters and a warning for other
+ invalid characters.
+Files: src/syntax.c
+
+Patch 6.2.515
+Problem: When using the options window 'swapfile' is reset.
+Solution: Use ":setlocal" instead of ":set".
+Files: runtime/optwin.vim
+
+Patch 6.2.516
+Problem: The sign column cannot be seen, looks like there are two spaces
+ before the text. (Rob Retter)
+Solution: Add the SignColumn highlight group.
+Files: runtime/doc/options.txt, runtime/doc/sign.txt, src/option.c,
+ src/screen.c, src/syntax.c, src/vim.h
+
+Patch 6.2.517
+Problem: Using "r*" in Visual mode on multi-byte characters replaces
+ too many characters. In Visual Block mode replacing with a
+ multi-byte character doesn't work.
+Solution: Adjust the operator end for the difference in byte length of the
+ original and the replaced character. Insert all bytes of a
+ multi-byte character, take care of double-wide characters.
+Files: src/ops.c
+
+Patch 6.2.518
+Problem: Last line of a window is not updated after using "J" and then "D".
+ (Adri Verhoef)
+Solution: When no line is found below a change that doesn't need updating,
+ update all lines below the change.
+Files: src/screen.c
+
+Patch 6.2.519
+Problem: Mac: cannot read/write files in MacRoman format.
+Solution: Do internal conversion from/to MacRoman to/from utf-8 and latin1.
+ (Eckehard Berns)
+Files: src/fileio.c
+
+Patch 6.2.520 (extra)
+Problem: The NSIS installer is outdated.
+Solution: Make it work with NSIS 2.0. Also include console executables for
+ Win 95/98/ME and Win NT/2000/XP. Use LZWA compression. Use
+ "/oname" to avoid having to rename files before running NSIS.
+Files: Makefile, nsis/gvim.nsi
+
+Patch 6.2.521
+Problem: When using silent Ex mode the "changing a readonly file" warning
+ is omitted but the one second wait isn't. (Yakov Lerner)
+Solution: Skip the delay when "silent_mode" is set.
+Files: src/misc1.c
+
+Patch 6.2.522
+Problem: GUI: when changing 'cmdheight' in the gvimrc file the window
+ layout is messed up. (Keith Dart)
+Solution: Skip updating the window layout when changing 'cmdheight' while
+ still starting up.
+Files: src/option.c
+
+Patch 6.2.523
+Problem: When loading a session and aborting when a swap file already
+ exists, the user is left with useless windows. (Robert Webb)
+Solution: Load one file before creating the windows.
+Files: src/ex_docmd.c
+
+Patch 6.2.524 (extra, after 6.2.520)
+Problem: Win32: (un)installing gvimext.dll may fail if it was used.
+ The desktop and start menu links are created for the current user
+ instead of all users.
+ Using the home directory as working directory for the links is a
+ bad idea for multi-user systems.
+ Cannot use Vim from the "Open With..." menu.
+Solution: Force a reboot if necessary. (Alejandro Lopez-Valencia) Also use
+ macros for the directory of the source and runtime files. Use
+ "CSIDL_COMMON_*" instead of "CSIDL_*" when possible.
+ Do not specify a working directory in the links.
+ Add Vim to the "Open With..." menu. (Giuseppe Bilotta)
+Files: nsis/gvim.nsi, src/dosinst.c, src/dosinst.h, src/uninstal.c
+
+Patch 6.2.525
+Problem: When the history contains a very long line ":history" causes a
+ crash. (Volker Kiefel)
+Solution: Shorten the history entry to fit it in one line.
+Files: src/ex_getln.c
+
+Patch 6.2.526
+Problem: When s:lang is "ja" the Japanese menus are not used.
+Solution: Add 'encoding' to the language when there is no charset.
+Files: runtime/menu.vim
+
+Patch 6.2.527
+Problem: The 2html script uses ":wincmd p", which breaks when using some
+ autocommands.
+Solution: Remember the window numbers and jump to them with ":wincmd w".
+ Also add XHTML support. (Panagiotis Issaris)
+Files: runtime/syntax/2html.vim
+
+Patch 6.2.528
+Problem: NetBeans: Changes of the "~" command are not reported.
+Solution: Call netbeans_inserted() after performing "~". (Gordon Prieur)
+ Also change NetBeans debugging to append to the log file.
+ Also fix that "~" in Visual block mode changes too much if there
+ are multi-byte characters.
+Files: src/nbdebug.c, src/normal.c, src/ops.c
+
+Patch 6.2.529 (extra)
+Problem: VisVim only works for Admin. Doing it for one user doesn't work.
+ (Alexandre Gouraud)
+Solution: When registering the module fails, simply continue.
+Files: src/VisVim/VisVim.cpp
+
+Patch 6.2.530
+Problem: Warning for missing prototype on the Amiga.
+Solution: Include time.h
+Files: src/version.c
+
+Patch 6.2.531
+Problem: In silent ex mode no messages are given, which makes debugging
+ very difficult.
+Solution: Do output messages when 'verbose' is set.
+Files: src/message.c, src/ui.c
+
+Patch 6.2.532 (extra)
+Problem: Compiling for Win32s with VC 4.1 doesn't work.
+Solution: Don't use CP_UTF8 if it's not defined. Don't use CSIDL_COMMON*
+ when not defined.
+Files: src/dosinst.h, src/fileio.c
+
+Win32 console: After patch 6.2.398 Ex mode did not work. (Yasuhiro Matsumoto)
+
+Patch 6.3a.001
+Problem: Win32: if testing for the "--binary" option fails, diff isn't used
+ at all.
+Solution: Handle the "ok" flag properly. (Yasuhiro Matsumoto)
+Files: src/diff.c
+
+Patch 6.3a.002
+Problem: NetBeans: An insert command from NetBeans beyond the end of a
+ buffer crashes Vim. (Xavier de Gaye)
+Solution: Use a local pos_T structure for the position.
+Files: src/netbeans.c
+
+Patch 6.3a.003
+Problem: E315 error with auto-formatting comments. (Henry Van Roessel)
+Solution: Pass the line number to same_leader().
+Files: src/ops.c
+
+Patch 6.3a.004
+Problem: Test32 fails on Windows XP for the DJGPP version. Renaming
+ test11.out fails.
+Solution: Don't try renaming, create new files to use for the test.
+Files: src/testdir/test32.in, src/testdir/test32.ok
+
+Patch 6.3a.005
+Problem: ":checkpath!" does not use 'includeexpr'.
+Solution: Use a file name that was found directly. When a file was not
+ found and the located name is empty, use the rest of the line.
+Files: src/search.c
+
+Patch 6.3a.006
+Problem: "yip" moves the cursor to the first yanked line, but not to the
+ first column. Looks like not all text was yanked. (Jens Paulus)
+Solution: Move the cursor to the first column.
+Files: src/search.c
+
+Patch 6.3a.007
+Problem: 'cindent' recognizes "enum" but not "typedef enum".
+Solution: Skip over "typedef" before checking for "enum". (Helmut Stiegler)
+ Also avoid that searching for this item goes too far back.
+Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 6.3a.008 (extra)
+Problem: Windows 98: Some of the wide functions are not implemented,
+ resulting in file I/O to fail. This depends on what Unicode
+ support is installed.
+Solution: Handle the failure and fall back to non-wide functions.
+Files: src/os_win32.c
+
+Patch 6.3a.009
+Problem: Win32: Completion of filenames does not work properly when
+ 'encoding' differs from the active code page.
+Solution: Use wide functions for expanding wildcards when appropriate.
+Files: src/misc1.c
+
+Patch 6.3a.010 (extra)
+Problem: Win32: Characters in the window title that do not appear in the
+ active codepage are replaced by a question mark.
+Solution: Use DefWindowProcW() instead of DefWindowProc() when possible.
+Files: src/glbl_ime.cpp, src/globals.h, src/proto/gui_w16.pro,
+ src/proto/gui_w32.pro, src/gui_w16.c, src/gui_w32.c, src/gui_w48.c
+
+Patch 6.3a.011
+Problem: Using the explorer plugin changes a local directory to the global
+ directory.
+Solution: Don't use ":chdir" to restore the current directory. Make
+ "expand('%:p')" remove "/../" and "/./" items from the path.
+Files: runtime/plugin/explorer.vim, src/eval.c, src/os_unix.c
+
+Patch 6.3a.012 (extra)
+Problem: On Windows 98 the installer doesn't work, don't even get the "I
+ agree" button. The check for the path ending in "vim" makes the
+ browse dialog hard to use. The default path when no previous Vim
+ is installed is "c:\vim" instead of "c:\Program Files\Vim".
+Solution: Remove the background gradient command. Change the
+ .onVerifyInstDir function to a leave function for the directory
+ page. Don't let the install program default to c:\vim when no
+ path could be found.
+Files: nsis/gvim.nsi, src/dosinst.c
+
+Patch 6.3a.013 (extra)
+Problem: Win32: Characters in the menu that are not in the active codepage
+ are garbled.
+Solution: Convert menu strings from 'encoding' to the active codepage.
+Files: src/gui_w32.c, src/gui_w48.c
+
+Patch 6.3a.014
+Problem: Using multi-byte text and highlighting in a statusline causes gaps
+ to appear. (Helmut Stiegler)
+Solution: Advance the column by text width instead of number of bytes. Add
+ the vim_strnsize() function.
+Files: src/charset.c, src/proto/charset.pro, src/screen.c
+
+Patch 6.3a.015
+Problem: Using the "select all" menu item when 'insertmode' is set and
+ clicking the mouse button doesn't return to Insert mode. The
+ Buffers/Delete menu doesn't offer a choice to abandon a changed
+ buffer. (Jens Paulus)
+Solution: Don't use CTRL-\ CTRL-N. Add ":confirm" for the Buffers menu
+ items.
+Files: runtime/menu.vim
+
+Patch 6.3a.016
+Problem: After cancelling the ":confirm" dialog the error message and
+ hit-enter prompt may not be displayed properly.
+Solution: Flush output after showing the dialog.
+Files: src/message.c
+
+Patch 6.3a.017
+Problem: servername() doesn't work when Vim was started with the "-X"
+ argument or when the "exclude" in 'clipboard' matches the terminal
+ name. (Robert Nowotniak)
+Solution: Force connecting to the X server when using client-server
+ commands.
+Files: src/eval.c, src/globals.h, src/os_unix.c
+
+Patch 6.3a.018 (after 6.3a.017)
+Problem: Compiler warning for return value of make_connection().
+Solution: Use void return type.
+Files: src/eval.c
+
+Patch 6.3a.019 (extra)
+Problem: Win32: typing non-latin1 characters doesn't work.
+Solution: Invoke _OnChar() directly to avoid that the argument is truncated
+ to a byte. Convert the UTF-16 character to bytes according to
+ 'encoding' and ignore 'termencoding'. Same for _OnSysChar().
+Files: src/gui_w32.c, src/gui_w48.c
+
+Patch 6.3a.020 (extra)
+Problem: Missing support for AROS (AmigaOS reimplementation). Amiga GUI
+ doesn't work.
+Solution: Add AROS support. (Adam Chodorowski)
+ Fix Amiga GUI problems. (Georg Steger, Ali Akcaagac)
+Files: Makefile, src/Make_aros.mak, src/gui_amiga.c, src/gui_amiga.h,
+ src/memfile.c, src/os_amiga.c, src/term.c
+
+Patch 6.3a.021 (after 6.3a.017)
+Problem: Can't compile with X11 but without GUI.
+Solution: Put use of "gui.in_use" inside an #ifdef.
+Files: src/eval.c
+
+Patch 6.3a.022
+Problem: When typing Tabs when 'softtabstop' is used and 'list' is set a
+ tab is counted for two spaces.
+Solution: Use the "L" flag in 'cpoptions' to tell whether a tab is counted
+ as two spaces or as 'tabstop'. (Antony Scriven)
+Files: runtime/doc/options.txt, src/edit.c
+
+Patch 6.3a.023
+Problem: Completion on the command line doesn't handle backslashes
+ properly. Only the tail of matches is shown, even when not
+ completing filenames.
+Solution: When turning the string into a pattern double backslashes. Don't
+ omit the path when not expanding files or directories.
+Files: src/ex_getln.c
+
+Patch 6.3a.024
+Problem: The "save all" toolbar item fails for buffers that don't have a
+ name. When using ":wa" or closing the Vim window and there are
+ nameless buffers, browsing for a name may cause the name being
+ given to the wrong buffer or not stored properly. ":browse" only
+ worked for one file.
+Solution: Use ":confirm browse" for "save all".
+ Pass buffer argument to setfname(). Restore "browse" flag and
+ "forceit" after doing the work for one file.
+Files: runtime/menu.vim, src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_getln.c, src/fileio.c, src/memline.c,
+ src/message.c, src/window.c, src/proto/buffer.pro,
+ src/proto/ex_cmds2.pro, src/proto/memline.pro
+
+Patch 6.3a.025
+Problem: Setting 'virtualedit' moves the cursor. (Benji Fisher)
+Solution: Update the virtual column before using it.
+Files: src/option.c
+
+Patch 6.3a.026 (extra, after 6.3a.008)
+Problem: Editing files on Windows 98 doesn't work when 'encoding' is
+ "utf-8" (Antoine Mechelynck)
+ Warning for missing function prototype.
+Solution: For all wide functions check if it failed because it is not
+ implemented. Use ANSI function declaration for char_to_string().
+Files: src/gui_w48.c, src/os_mswin.c, src/os_win32.c
+
+Patch 6.3a.027 (extra, after 6.3a.026)
+Problem: Compiler warning for function argument.
+Solution: Declare both char and WCHAR arrays.
+Files: src/gui_w48.c
+
+Patch 6.3a.028
+Problem: ":normal ." doesn't work inside a function, because redo is saved
+ and restored. (Benji Fisher)
+Solution: Make a copy of the redo buffer when executing a function.
+Files: src/getchar.c
+
+Patch 6.3b.001 (extra)
+Problem: Bcc 5: The generated auto/pathdef can't be compiled.
+Solution: Fix the way quotes and backslashes are escaped.
+Files: src/Make_bc5.mak
+
+Patch 6.3b.002
+Problem: Win32: conversion during file write fails when a double-byte
+ character is split over two writes.
+Solution: Fix the conversion retry without a trailing byte. (Taro Muraoka)
+Files: src/fileio.c
+
+Patch 6.3b.003 (extra)
+Problem: Win32: When compiling with Borland C 5.5 and 'encoding' is "utf-8"
+ then Vim can't open files under MS-Windows 98. (Antoine J.
+ Mechelynck)
+Solution: Don't use _wstat(), _wopen() and _wfopen() in this situation.
+Files: src/os_mswin.c, src/os_win32.c
+
+Patch 6.3b.004
+Problem: ":helpgrep" includes a trailing CR in the text line.
+Solution: Remove the CR.
+Files: src/quickfix.c
+
+Patch 6.3b.005
+Problem: ":echo &g:ai" results in the local option value. (Salman Halim)
+Solution: Pass the flags from find_option_end() to get_option_value().
+Files: src/eval.c
+
+Patch 6.3b.006
+Problem: When using "mswin.vim", CTRL-V in Insert mode leaves cursor before
+ last pasted character. (Mathew Davis)
+Solution: Use the same Paste() function as in menu.vim.
+Files: runtime/mswin.vim
+
+Patch 6.3b.007
+Problem: Session file doesn't restore view on windows properly. (Robert
+ Webb)
+Solution: Restore window sizes both before and after restoring the view, so
+ that the view, cursor position and size are restored properly.
+Files: src/ex_docmd.c
+
+Patch 6.3b.008
+Problem: Using ":finally" in a user command doesn't always work. (Hari
+ Krishna Dara)
+Solution: Don't assume that using getexline() means the command was typed.
+Files: src/ex_docmd.c
+
+Patch 6.3b.009 (extra)
+Problem: Win32: When the -P argument is not found in a window title, there
+ is no error message.
+Solution: When the window can't be found give an error message and exit.
+ Also use try/except to catch failing to open the MDI window.
+ (Michael Wookey)
+Files: src/gui_w32.c
+
+Patch 6.3b.010
+Problem: Win32: Using the "-D" argument and expanding arguments may cause a
+ hang, because the terminal isn't initialized yet. (Vince Negri)
+Solution: Don't go into debug mode before the terminal is initialized.
+Files: src/main.c
+
+Patch 6.3b.011
+Problem: Using CTRL-\ e while obtaining an expression aborts the command
+ line. (Hari Krishna Dara)
+Solution: Insert the CTRL-\ e as typed.
+Files: src/ex_getln.c
+
+Patch 6.3b.012 (after 6.3b.010)
+Problem: Can't compile with tiny features. (Norbert Tretkowski)
+Solution: Add #ifdefs.
+Files: src/main.c
+
+Patch 6.3b.013
+Problem: Loading a session file results in editing the wrong file in the
+ first window when this is not the file at the current position in
+ the argument list. (Robert Webb)
+Solution: Check w_arg_idx_invalid to decide whether to edit a file.
+Files: src/ex_docmd.c
+
+Patch 6.3b.014
+Problem: ":runtime! foo*.vim" may using freed memory when a sourced script
+ changes the value of 'runtimepath'.
+Solution: Make a copy of 'runtimepath' when looping over the matches.
+Files: src/ex_cmds2.c
+
+Patch 6.3b.015
+Problem: Get lalloc(0) error when using "p" in Visual mode while
+ 'clipboard' contains "autoselect,unnamed". (Mark Wagonner)
+Solution: Avoid allocating zero bytes. Obtain the clipboard when necessary.
+Files: src/ops.c
+
+Patch 6.3b.016
+Problem: When 'virtualedit' is used "x" doesn't delete the last character
+ of a line that has as many characters as 'columns'. (Yakov Lerner)
+Solution: When the cursor isn't moved let oneright() return FAIL.
+Files: src/edit.c
+
+Patch 6.3b.017
+Problem: Win32: "vim --remote-wait" doesn't exit when the server finished
+ editing the file. (David Fishburn)
+Solution: In the rrhelper plugin change backslashes to forward slashes and
+ escape special characters.
+Files: runtime/plugin/rrhelper.vim
+
+Patch 6.3b.018
+Problem: The list of help files in the "local additions" table doesn't
+ recognize utf-8 encoding. (Yasuhiro Matsumoto)
+Solution: Recognize utf-8 characters.
+Files: src/ex_cmds.c
+
+Patch 6.3b.019
+Problem: When $VIMRUNTIME is not a full path name the "local additions"
+ table lists all the help files.
+Solution: Use fullpathcmp() instead of fnamecmp() to compare the directory
+ names.
+Files: src/ex_cmds.c
+
+Patch 6.3b.020
+Problem: When using CTRL-^ when entering a search string, the item in the
+ statusline that indicates the keymap is not updated. (Ilya
+ Dogolazky)
+Solution: Mark the statuslines for updating.
+Files: src/ex_getln.c
+
+Patch 6.3b.021
+Problem: The swapfile is not readable for others, the ATTENTION prompt does
+ not show all info when someone else is editing the same file.
+ (Marcel Svitalsky)
+Solution: Use the protection of original file for the swapfile and set it
+ after creating the swapfile.
+Files: src/fileio.c
+
+Patch 6.3b.022
+Problem: Using "4v" to select four times the old Visual area may put the
+ cursor beyond the end of the line. (Jens Paulus)
+Solution: Correct the cursor column.
+Files: src/normal.c
+
+Patch 6.3b.023
+Problem: When "3dip" starts in an empty line, white lines after the
+ non-white lines are not deleted. (Jens Paulus)
+Solution: Include the white lines.
+Files: src/search.c
+
+Patch 6.3b.024
+Problem: "2daw" does not delete leading white space like "daw" does. (Jens
+ Paulus)
+Solution: Include the white space when a count is used.
+Files: src/search.c
+
+Patch 6.3b.025
+Problem: Percentage in ruler isn't updated when a line is deleted. (Jens
+ Paulus)
+Solution: Check for a change in line count when deciding to update the ruler.
+Files: src/screen.c, src/structs.h
+
+Patch 6.3b.026
+Problem: When selecting "abort" at the ATTENTION prompt for a file that is
+ already being edited Vim crashes.
+Solution: Don't abort creating a new buffer when we really need it.
+Files: src/buffer.c, src/vim.h
+
+Patch 6.3b.027
+Problem: Win32: When enabling the menu in a maximized window, Vim uses more
+ lines than what is room for. (Shizhu Pan)
+Solution: When deciding to call shell_resized(), also compare the text area
+ size with Rows and Columns, not just with screen_Rows and
+ screen_Columns.
+Files: src/gui.c
+
+Patch 6.3b.028
+Problem: When in diff mode, setting 'rightleft' causes a crash. (Eddine)
+Solution: Check for last column differently when 'rightleft' is set.
+Files: src/screen.c
+
+Patch 6.3b.029
+Problem: Win32: warning for uninitialized variable.
+Solution: Initialize to zero.
+Files: src/misc1.c
+
+Patch 6.3b.030
+Problem: After Visually selecting four characters, changing it to other
+ text, Visually selecting and yanking two characters: "." changes
+ four characters, another "." changes two characters. (Robert Webb)
+Solution: Don't store the size of the Visual area when redo is active.
+Files: src/normal.c
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
new file mode 100644
index 000000000..46bff9a7c
--- /dev/null
+++ b/runtime/doc/version7.txt
@@ -0,0 +1,84 @@
+*version7.txt* For Vim version 7.0aa. Last change: 2004 Jun 07
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Welcome to Vim 7! A large number of features has been added. This file
+mentions all the new items, changes to existing features and bug fixes
+compared to Vim 6.x.
+
+See |vi_diff.txt| for an overview of differences between Vi and Vim 7.0.
+See |version4.txt| for differences between Vim 3.x and Vim 4.x.
+See |version5.txt| for differences between Vim 4.x and Vim 5.x.
+See |version6.txt| for differences between Vim 5.x and Vim 6.x.
+
+INCOMPATIBLE CHANGES |incompatible-7|
+
+NEW FEATURES |new-7|
+
+New data types |new-data-types|
+Various new items |new-items-7|
+
+IMPROVEMENTS |improvements-7|
+
+COMPILE TIME CHANGES |compile-changes-7|
+
+BUG FIXES |bug-fixes-7|
+
+==============================================================================
+INCOMPATIBLE CHANGES *incompatible-7*
+
+These changes are incompatible with previous releases. Check this list if you
+run into a problem when upgrading from Vim 6.x to 7.0
+
+
+==============================================================================
+NEW FEATURES *new-7*
+
+New data types *new-data-types*
+--------------
+
+In Vim scripts the following types have been added:
+
+ list ordered list of items
+ dictionary associative array of items
+ function reference to a function
+
+Many functions and commands have been added to support the new types.
+
+
+Various new items *new-items-7*
+-----------------
+
+Normal mode commands: ~
+
+
+Options: ~
+
+
+Ex commands: ~
+
+
+New functions: ~
+
+
+New autocommand events: ~
+
+
+New Syntax files: ~
+
+
+==============================================================================
+IMPROVEMENTS *improvements-7*
+
+
+==============================================================================
+COMPILE TIME CHANGES *compile-changes-7*
+
+
+==============================================================================
+BUG FIXES *bug-fixes-7*
+
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt
new file mode 100644
index 000000000..7d47db4c5
--- /dev/null
+++ b/runtime/doc/vi_diff.txt
@@ -0,0 +1,884 @@
+*vi_diff.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Differences between Vim and Vi *vi-differences*
+
+Throughout the help files differences between Vim and Vi/Ex are given in
+curly braces, like "{not in Vi}". This file only lists what has not been
+mentioned in other files and gives an overview.
+
+Vim is mostly POSIX 1003.2-1 compliant. The only command known to be missing
+is ":open". There are probably a lot of small differences (either because Vim
+is missing something or because Posix is beside the mark).
+
+1. Missing commands |missing-commands|
+2. Missing options |missing-options|
+3. Limits |limits|
+4. The most interesting additions |vim-additions|
+5. Other vim features |other-features|
+6. Command-line arguments |cmdline-arguments|
+
+==============================================================================
+1. Missing commands *missing-commands*
+
+This command is in Vi, but not in Vim:
+
+:o[pen] {Vi: start editing in open mode} *:o* *:op* *:open*
+
+==============================================================================
+2. Missing options *missing-options*
+
+These options are in the Unix Vi, but not in Vim. If you try to set one of
+them you won't get an error message, but the value is not used and cannot be
+printed.
+
+autoprint (ap) boolean (default on) *'autoprint'* *'ap'*
+beautify (bf) boolean (default off) *'beautify'* *'bf'*
+flash (fl) boolean (default ??) *'flash'* *'fl'*
+graphic (gr) boolean (default off) *'graphic'* *'gr'*
+hardtabs (ht) number (default 8) *'hardtabs'* *'ht'*
+ number of spaces that a <Tab> moves on the display
+mesg boolean (default on) *'mesg'*
+novice boolean (default off) *'novice'*
+open boolean (default on) *'open'*
+optimize (op) boolean (default off) *'optimize'* *'op'*
+prompt boolean (default on) *'prompt'*
+redraw boolean (default off) *'redraw'*
+slowopen (slow) boolean (default off) *'slowopen'* *'slow'*
+sourceany boolean (default off) *'sourceany'*
+window (wi) number (default 23) *'window'* *'wi'*
+w300 number (default 23) *'w300'*
+w1200 number (default 23) *'w1200'*
+w9600 number (default 23) *'w9600'*
+
+==============================================================================
+3. Limits *limits*
+
+Vim has only a few limits for the files that can be edited {Vi: can not handle
+<Nul> characters and characters above 128, has limited line length, many other
+limits}.
+ *E340*
+Maximum line length On machines with 16-bit ints (Amiga and MS-DOS real
+ mode): 32767, otherwise 2147483647 characters.
+ Longer lines are split.
+Maximum number of lines 2147483647 lines.
+Maximum file size 2147483647 bytes (2 Gbyte) when a long integer is
+ 32 bits. Much more for 64 bit longs. Also limited
+ by available disk space for the |swap-file|.
+ *E75*
+Length of a file path Unix and Win32: 1024 characters, otherwise 256
+ characters (or as much as the system supports).
+Length of an expanded string option
+ Unix and Win32: 1024 characters, otherwise 256
+ characters
+Maximum display width Unix and Win32: 1024 characters, otherwise 255
+ characters
+Maximum lhs of a mapping 50 characters.
+Number of highlighting different types: 223
+
+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
+undo levels and the text that can be kept in registers. Other things are also
+kept in memory: Command-line history, error messages for Quickfix mode, etc.
+
+Memory usage limits
+-------------------
+
+The option 'maxmem' ('mm') is used to set the maximum memory used for one
+buffer (in kilobytes). 'maxmemtot' is used to set the maximum memory used for
+all buffers (in kilobytes). The defaults depend on the system used. For the
+Amiga and MS-DOS, 'maxmemtot' is set depending on the amount of memory
+available. If you don't like Vim to swap to a file, set 'maxmem' and
+'maxmemtot' to a very large value. The swap file will then only be used for
+recovery. If you don't want a swap file at all, set 'updatecount' to 0, or
+use the "-n" argument when starting Vim. Note that the 'maxmem' option is
+only used when a buffer is created. Changing this option does not affect
+buffers that have already been loaded. Thus you can set it to different
+values for different files. 'maxmemtot' works always.
+
+==============================================================================
+4. The most interesting additions *vim-additions*
+
+Vi compatibility. |'compatible'|
+ Although Vim is 99% Vi compatible, some things in Vi can be
+ considered to be a bug, or at least need improvement. But still, Vim
+ starts in a mode which behaves like the "real" Vi as much as possible.
+ To make Vim behave a little bit better, try resetting the 'compatible'
+ option:
+ :set nocompatible
+ Or start Vim with the "-N" argument:
+ vim -N
+ This is done automatically if you have a .vimrc file. See |startup|.
+ The 'cpoptions' option can be used to set Vi compatibility on/off for
+ a number of specific items.
+
+Support for different systems.
+ Vim can be used on:
+ - All Unix systems (it works on all systems it was tested on, although
+ the GUI and Perl interface may not work everywhere).
+ - Amiga (500, 1000, 1200, 2000, 3000, 4000, ...).
+ - MS-DOS in real-mode (no additional drivers required).
+ - In protected mode on Windows 3.1 and MS-DOS (DPMI driver required).
+ - Windows 95 and Windows NT, with support for long file names.
+ - OS/2 (needs emx.dll)
+ - Atari MiNT
+ - VMS
+ - BeOS
+ - Macintosh
+ - Risc OS
+ - IBM OS/390
+
+Multi level undo. |undo|
+ 'u' goes backward in time, 'CTRL-R' goes forward again. Set option
+ 'undolevels' to the number of changes to be remembered (default 1000).
+ Set 'undolevels' to 0 for a vi-compatible one level undo. Set it to
+ -1 for no undo at all.
+
+ When all changes in a buffer have been undone, the buffer is not
+ considered changed anymore. You can exit it with :q, without <!>.
+
+Graphical User Interface (GUI) |gui|
+ Included support for GUI: menu's, mouse, scrollbars, etc. You can
+ define your own menus. Better support for CTRL/SHIFT/ALT keys in
+ combination with special keys and mouse. Supported for various
+ platforms, such as X11 (with Motif and Athena interfaces), GTK, Win32
+ (Windows 95 and later), BeOS, Amiga and Macintosh.
+
+Multiple windows and buffers. |windows.txt|
+ Vim can split the screen into several windows, each editing a
+ different buffer or the same buffer at a different location. Buffers
+ can still be loaded (and changed) but not displayed in a window. This
+ is called a hidden buffer. Many commands and options have been added
+ for this facility.
+
+Syntax highlighting. |:syntax|
+ Vim can highlight keywords, patterns and other things. This is
+ defined by a number of ":syntax" commands, and can be made to
+ highlight most languages and file types. A number of files are
+ included for highlighting the most common languages, like C, C++,
+ Java, Pascal, Makefiles, shell scripts, etc. The colors used for
+ highlighting can be defined for ordinary terminals, color terminals
+ and the GUI with the ":highlight" command.
+
+Folding |folding|
+ A range of lines can be shown as one "folded" line. This allows
+ overviewing a file and moving blocks of text around quickly.
+ Folds can be created manually, from the syntax of the file, by indent,
+ etc.
+
+Plugins |add-plugin|
+ The functionality can be extended by dropping a plugin file in the
+ right directory. That's an easy way to start using Vim scripts
+ written by others. Plugins can be for all kind of files, or
+ specifically for a filetype.
+
+Repeat a series of commands. |q|
+ "q{c}" starts recording typed characters into named register {c}
+ (append to the register if register name is uppercase). A subsequent
+ "q" stops recording. The register can then be executed with the
+ "@{c}" command. This is very useful to repeat a complex action.
+
+Flexible insert mode. |ins-special-special|
+ The arrow keys can be used in insert mode to move around in the file.
+ This breaks the insert in two parts as far as undo and redo is
+ concerned.
+
+ CTRL-O can be used to execute a single command-mode command. This is
+ almost the same as hitting <Esc>, typing the command and doing "a".
+
+Visual mode. |Visual-mode|
+ Visual can be used to first highlight a piece of text and then give a
+ command to do something with it. This is an (easy to use) alternative
+ to first giving the operator and then moving to the end of the text
+ to be operated upon. "v" and "V" are used to start Visual mode. "v"
+ works on characters and 'V' on lines. Move the cursor to extend the
+ Visual part. It is shown highlighted on the screen. By typing "o"
+ the other end of the Visual text can be moved. The Visual text can
+ be affected by an operator:
+ d delete
+ c change
+ y yank
+ > or < insert or delete indent
+ ! filter through external program
+ = filter through indent
+ : start ":" command for the Visual lines.
+ gq format text to 'textwidth' columns
+ J join lines
+ ~ swap case
+ u make lowercase
+ U make uppercase
+
+Block operators. |visual-block|
+ With Visual a rectangular block of text can be selected. Start Visual
+ with CTRL-V. The block can be deleted ("d"), yanked ("y") or its case
+ can be changed ("~", "u" and "U"). A deleted or yanked block can be
+ put into the text with the "p" and "P" commands.
+
+Online help system. |:help|
+ Help is displayed in a window. The usual commands can be used to
+ move around, search for a string, etc. Tags can be used to jump
+ around in the help files, just like hypertext links. The ":help"
+ command takes an argument to quickly jump to the info on a subject.
+ <F1> is the quick access to the help system. The name of the help
+ index file can be set with the 'helpfile' option.
+
+Command-line editing and history. |cmdline-editing|
+ You can insert or delete at any place in the command-line using the
+ cursor keys. The right/left cursor keys can be used to move
+ forward/backward one character. The shifted right/left cursor keys
+ can be used to move forward/backward one word. CTRL-B/CTRL-E can be
+ used to go to the begin/end of the command-line.
+
+ |cmdline-history|
+ The command-lines are remembered. The up/down cursor keys can be used
+ to recall previous command-lines. The 'history' option can be set to
+ the number of lines that will be remembered. There is a separate
+ history for commands and for search patterns.
+
+Command-line completion. |cmdline-completion|
+ While entering a command-line (on the bottom line of the screen)
+ <Tab> can be typed to complete
+ what example ~
+ - command :e<Tab>
+ - tag :ta scr<Tab>
+ - option :set sc<Tab>
+ - option value :set hf=<Tab>
+ - file name :e ve<Tab>
+ - etc.
+
+ If there are multiple matches, CTRL-N (next) and CTRL-P (previous)
+ will walk through the matches. <Tab> works like CTRL-N, but wraps
+ around to the first match.
+
+ The 'wildchar' option can be set to the character for command-line
+ completion, <Tab> is the default. CTRL-D can be typed after an
+ (incomplete) wildcard; all matches will be listed. CTRL-A will insert
+ all matches. CTRL-L will insert the longest common part of the
+ matches.
+
+Insert-mode completion |ins-completion|
+ In insert mode the CTRL-N and CTRL-P keys can be used to complete a
+ word that has previously been used. |i_CTRL-N|
+ With CTRL-X another mode is entered, through which completion can be
+ done for:
+ |i_CTRL-X_CTRL-F| file names
+ |i_CTRL-X_CTRL-K| words from 'dictionary' files
+ |i_CTRL-X_CTRL-T| words from 'thesaurus' files
+ |i_CTRL-X_CTRL-I| words from included files
+ |i_CTRL-X_CTRL-L| whole lines
+ |i_CTRL-X_CTRL-]| words from the tags file
+ |i_CTRL-X_CTRL-D| definitions or macros
+
+Long line support |'wrap'| |'linebreak'|
+ If the 'wrap' option is off, long lines will not wrap and only part
+ of them will be shown. When the cursor is moved to a part that is not
+ shown, the screen will scroll horizontally. The minimum number of
+ columns to scroll can be set with the 'sidescroll' option. The "zh"
+ and "zl" commands can be used to scroll sideways.
+ Alternatively, long lines are broken in between words when the
+ 'linebreak' option is set. This allows editing a single-line
+ paragraph conveniently (e.g. when the text is later read into a DTP
+ program). Move the cursor up/down with the "gk" and "gj" commands.
+
+Text formatting. |formatting|
+ The 'textwidth' option can be used to automatically limit the line
+ length. This supplements the 'wrapmargin' option of Vi, which was not
+ very useful. The "gq" operator can be used to format a piece of text
+ (for example, "gqap" formats the current paragraph). Commands for
+ text alignment: ":center", ":left" and ":right".
+
+Extended search patterns |pattern|
+ There are many extra items to match various text items. Examples:
+ A "\n" can be used in a search pattern to match a line break.
+ "x\{2,4}" matches "x" 2 to 4 times.
+ "\s" matches a white space character.
+
+Edit-compile-edit speedup. |quickfix|
+ The ":make" command can be used to run the compilation and jump to
+ the first error. Alternatively Vim can be started with the "-q"
+ option from the compiler. A file with compiler error messages is
+ interpreted. Vim starts editing at the first error.
+
+ Each line in the error file is scanned for the name of a file, line
+ number and error message. The 'errorformat' option can be set to a
+ list of scanf-like strings to handle output from many compilers.
+
+ The ":cn" command can be used to jump to the next error.
+ ":cl" lists all the error messages. Other commands are available
+ (almost the same as with Manx's Z editor on the Amiga).
+ The 'makeef' option has the name of the file with error messages.
+ The 'makeprg' option contains the name of the program to be executed
+ with the ":make" command.
+ The 'shellpipe' option contains the string to be used to put the
+ output of the compiler into the errorfile.
+
+Improved indenting for C programs |'cindent'|
+ When the 'cindent' option is on the indent of each line is
+ automatically adjusted. C syntax is mostly recognized. The indent
+ for various styles can be set with 'cinoptions'. The keys to trigger
+ indenting can be set with 'cinkeys'.
+
+ Comments can be automatically formatted. The 'comments' option can be
+ set to the characters that start and end a comment. This works best
+ for C code, but also works for e-mail (">" at start of the line) and
+ other types of text. The "=" operator can be used to re-indent
+ lines.
+
+Searching for words in include files |include-search|
+ The "[i" command can be used to search for a match of the word under
+ the cursor in the current and included files. The 'include' option
+ can be set the a pattern that describes a command to include a file
+ (the default is for C programs).
+ The "[I" command lists all matches, the "[ CTRL-I" command jumps to
+ a match.
+ The "[d", "[D" and "[ CTRL-D" commands do the same, but only for
+ lines where the pattern given with the 'define' option matches.
+
+Automatic commands |autocommand|
+ Commands can be automatically executed when reading a file, writing a
+ file, jumping to another buffer, etc., depending on the file name.
+ This is useful to set options and mappings for C programs,
+ documentation, plain text, e-mail, etc. This also makes it possible
+ to edit compressed files.
+
+Scripts and Expressions |expression|
+ Commands have been added to form up a simple but powerful script
+ language.
+ |:if| Conditional execution, which can be used for example
+ to set options depending on the value of $TERM.
+ |:while| Repeat a number of commands.
+ |:echo| Print the result of an expression.
+ |:let| Assign a value to an internal variable, option, etc.
+ |:execute| Execute a command formed by an expression.
+ etc.
+
+Viminfo |viminfo-file|
+ The command-line history, marks and registers can be stored in a file
+ that is read on startup. This can be used to repeat a search command
+ or command-line command after exiting and restarting Vim. It is also
+ possible to jump right back to where the last edit stopped with "'0".
+ The 'viminfo' option can be set to select which items to store in the
+ .viminfo file. This is off by default.
+
+Mouse support |mouse-using|
+ The mouse is supported in the GUI version, in an xterm for Unix, for
+ Linux with gpm, for MS-DOS, and Win32. It can be used to position the
+ cursor, select the visual area, paste a register, etc.
+
+Usage of key names |<>| |key-notation|
+ Special keys now all have a name like <Up>, <End>, etc.
+ This name can be used in mappings, to make it easy to edit them.
+
+Editing binary files |edit-binary|
+ Vim can edit binary files. You can change a few characters in an
+ executable file, without corrupting it. Vim doesn't remove NUL
+ characters (they are represented as <NL> internally).
+ |-b| command-line argument to start editing a binary file
+ |'binary'| Option set by "-b". Prevents adding an <EOL> for the
+ last line in the file.
+
+Multi-language support |multi-lang|
+ Files in double-byte or multi-byte encodings can be edited. There is
+ UTF-8 support to be able to edit various languages at the same time,
+ without switching fonts. |UTF-8|
+ Messages and menus are available in different languages.
+
+==============================================================================
+5. Other vim features *other-features*
+
+A random collection of nice extra features.
+
+
+When Vim is started with "-s scriptfile", the characters read from
+"scriptfile" are treated as if you typed them. If end of file is reached
+before the editor exits, further characters are read from the console.
+
+The "-w" option can be used to record all typed characters in a script file.
+This file can then be used to redo the editing, possibly on another file or
+after changing some commands in the script file.
+
+The "-o" option opens a window for each argument. "-o4" opens four windows.
+
+Vi requires several termcap entries to be able to work full-screen. Vim only
+requires the "cm" entry (cursor motion).
+
+
+In command mode:
+
+When the 'showcmd' option is set, the command characters are shown in the last
+line of the screen. They are removed when the command is finished.
+
+If the 'ruler' option is set, the current cursor position is shown in the
+last line of the screen.
+
+"U" still works after having moved off the last changed line and after "u".
+
+Characters with the 8th bit set are displayed. The characters between '~' and
+0xa0 are displayed as "~?", "~@", "~A", etc., unless they are included in the
+'isprint' option.
+
+"][" goes to the next ending of a C function ('}' in column 1).
+"[]" goes to the previous ending of a C function ('}' in column 1).
+
+"]f", "[f" and "gf" start editing the file whose name is under the cursor.
+CTRL-W f splits the window and starts editing the file whose name is under
+the cursor.
+
+"*" searches forward for the identifier under the cursor, "#" backward.
+"K" runs the program defined by the 'keywordprg' option, with the identifier
+under the cursor as argument.
+
+"%" can be preceded with a count. The cursor jumps to the line that
+percentage down in the file. The normal "%" function to jump to the matching
+brace skips braces inside quotes.
+
+With the CTRL-] command, the cursor may be in the middle of the identifier.
+
+The used tags are remembered. Commands that can be used with the tag stack
+are CTRL-T, ":pop" and ":tag". ":tags" lists the tag stack.
+
+The 'tags' option can be set to a list of tag file names. Thus multiple
+tag files can be used. For file names that start with "./", the "./" is
+replaced with the path of the current file. This makes it possible to use a
+tags file in the same directory as the file being edited.
+
+Previously used file names are remembered in the alternate file name list.
+CTRL-^ accepts a count, which is an index in this list.
+":files" command shows the list of alternate file names.
+"#<N>" is replaced with the <N>th alternate file name in the list.
+"#<" is replaced with the current file name without extension.
+
+Search patterns have more features. The <NL> character is seen as part of the
+search pattern and the substitute string of ":s". Vi sees it as the end of
+the command.
+
+Searches can put the cursor on the end of a match and may include a character
+offset.
+
+Count added to "~", ":next", ":Next", "n" and "N".
+
+The command ":next!" with 'autowrite' set does not write the file. In vi the
+file was written, but this is considered to be a bug, because one does not
+expect it and the file is not written with ":rewind!".
+
+In Vi when entering a <CR> in replace mode deletes a character only when 'ai'
+is set (but does not show it until you hit <Esc>). Vim always deletes a
+character (and shows it immediately).
+
+Added :wnext command. Same as ":write" followed by ":next".
+
+The ":w!" command always writes, also when the file is write protected. In Vi
+you would have to do ":!chmod +w %" and ":set noro".
+
+When 'tildeop' has been set, "~" is an operator (must be followed by a
+movement command).
+
+With the "J" (join) command you can reset the 'joinspaces' option to have only
+one space after a period (Vi inserts two spaces).
+
+"cw" can be used to change white space formed by several characters (Vi is
+confusing: "cw" only changes one space, while "dw" deletes all white space).
+
+"o" and "O" accept a count for repeating the insert (Vi clears a part of
+display).
+
+Flags after Ex commands not supported (no plans to include it).
+
+On non-UNIX systems ":cd" command shows current directory instead of going to
+the home directory (there isn't one). ":pwd" prints the current directory on
+all systems.
+
+After a ":cd" command the file names (in the argument list, opened files)
+still point to the same files. In Vi ":cd" is not allowed in a changed file;
+otherwise the meaning of file names change.
+
+":source!" command reads Vi commands from a file.
+
+":mkexrc" command writes current modified options and mappings to a ".exrc"
+file. ":mkvimrc" writes to a ".vimrc" file.
+
+No check for "tail recursion" with mappings. This allows things like
+":map! foo ^]foo".
+
+When a mapping starts with number, vi loses the count typed before it (e.g.
+when using the mapping ":map g 4G" the command "7g" goes to line 4). This is
+considered a vi bug. Vim concatenates the counts (in the example it becomes
+"74G"), as most people would expect.
+
+The :put! command inserts the contents of a register above the current line.
+
+The "p" and "P" commands of vi cannot be repeated with "." when the putted
+text is less than a line. In Vim they can always be repeated.
+
+":noremap" command can be used to enter a mapping that will not be remapped.
+This is useful to exchange the meaning of two keys. ":cmap", ":cunmap" and
+":cnoremap" can be used for mapping in command-line editing only. ":imap",
+":iunmap" and ":inoremap" can be used for mapping in insert mode only.
+Similar commands exist for abbreviations: ":noreabbrev", ":iabbrev"
+":cabbrev", ":iunabbrev", ":cunabbrev", ":inoreabbrev", ":cnoreabbrev".
+
+In Vi the command ":map foo bar" would remove a previous mapping
+":map bug foo". This is considered a bug, so it is not included in Vim.
+":unmap! foo" does remove ":map! bug foo", because unmapping would be very
+difficult otherwise (this is vi compatible).
+
+The ':' register contains the last command-line.
+The '%' register contains the current file name.
+The '.' register contains the last inserted text.
+
+":dis" command shows the contents of the yank registers.
+
+CTRL-O/CTRL-I can be used to jump to older/newer positions. These are the
+same positions as used with the '' command, but may be in another file. The
+":jumps" command lists the older positions.
+
+If the 'shiftround' option is set, an indent is rounded to a multiple of
+'shiftwidth' with ">" and "<" commands.
+
+The 'scrolljump' option can be set to the minimum number of lines to scroll
+when the cursor gets off the screen. Use this when scrolling is slow.
+
+The 'scrolloff' option can be set to the minimum number of lines to keep
+above and below the cursor. This gives some context to where you are
+editing. When set to a large number the cursor line is always in the middle
+of the window.
+
+Uppercase marks can be used to jump between files. The ":marks" command lists
+all currently set marks. The commands "']" and "`]" jump to the end of the
+previous operator or end of the text inserted with the put command. "'[" and
+"`[" do jump to the start.
+
+The 'shelltype' option can be set to reflect the type of shell used on the
+Amiga.
+
+The 'highlight' option can be set for the highlight mode to be used for
+several commands.
+
+The CTRL-A (add) and CTRL-X (subtract) commands are new. The count to the
+command (default 1) is added to/subtracted from the number at or after the
+cursor. That number may be decimal, octal (starts with a '0') or hexadecimal
+(starts with '0x'). Very useful in macros.
+
+With the :set command the prefix "inv" can be used to invert boolean options.
+
+In both Vi and Vim you can create a line break with the ":substitute" command
+by using a CTRL-M. For Vi this means you cannot insert a real CTRL-M in the
+text. With Vim you can put a real CTRL-M in the text by preceding it with a
+CTRL-V.
+
+
+In Insert mode:
+
+If the 'revins' option is set, insert happens backwards. This is for typing
+Hebrew. When inserting normal characters the cursor will not be shifted and
+the text moves rightwards. Backspace, CTRL-W and CTRL-U will also work in
+the opposite direction. CTRL-B toggles the 'revins' option. In replace mode
+'revins' has no effect. Only when enabled at compile time.
+
+The backspace key can be used just like CTRL-D to remove auto-indents.
+
+You can backspace, CTRL-U and CTRL-W over line breaks if the 'backspace' (bs)
+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
+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.
+
+CTRL-T/CTRL-D always insert/delete an indent in the current line, no matter
+what column the cursor is in.
+
+CTRL-@ (insert previously inserted text) works always (Vi: only when typed as
+first character).
+
+CTRL-A works like CTRL-@ but does not leave insert mode.
+
+CTRL-R {0-9a-z..} can be used to insert the contents of a register.
+
+When the 'smartindent' option is set, C programs will be better auto-indented.
+With 'cindent' even more.
+
+CTRL-Y and CTRL-E can be used to copy a character from above/below the
+current cursor position.
+
+After CTRL-V you can enter a three digit decimal number. This byte value is
+inserted in the text as a single character. Useful for international
+characters that are not on your keyboard.
+
+When the 'expandtab' (et) option is set, a <Tab> is expanded to the
+appropriate number of spaces.
+
+The window always reflects the contents of the buffer (Vi does not do this
+when changing text and in some other cases).
+
+If Vim is compiled with DIGRAPHS defined, digraphs are supported. A set of
+normal digraphs is included. They are shown with the ":digraph" command.
+More can be added with ":digraph {char1}{char2} {number}". A digraph is
+entered with "CTRL-K {char1} {char2}" or "{char1} BS {char2}" (only when
+'digraph' option is set).
+
+When repeating an insert, e.g. "10atest <Esc>" vi would only handle wrapmargin
+for the first insert. Vim does it for all.
+
+A count to the "i" or "a" command is used for all the text. Vi uses the count
+only for one line. "3iabc<NL>def<Esc>" would insert "abcabcabc<NL>def" in Vi
+but "abc<NL>defabc<NL>defabc<NL>def" in Vim.
+
+
+In Command-line mode:
+
+<Esc> terminates the command-line without executing it. In vi the command
+line would be executed, which is not what most people expect (hitting <Esc>
+should always get you back to command mode). To avoid problems with some
+obscure macros, an <Esc> in a macro will execute the command. If you want a
+typed <Esc> to execute the command like vi does you can fix this with
+ ":cmap ^V<Esc> ^V<CR>"
+
+General:
+
+The 'ttimeout' option is like 'timeout', but only works for cursor and
+function keys, not for ordinary mapped characters. The 'timeoutlen' option
+gives the number of milliseconds that is waited for. If the 'esckeys' option
+is not set, cursor and function keys that start with <Esc> are not recognized
+in insert mode.
+
+There is an option for each terminal string. Can be used when termcap is not
+supported or to change individual strings.
+
+The 'fileformat' option can be set to select the <EOL>: "dos" <CR><NL>, "unix"
+<NL> or "mac" <CR>.
+When the 'fileformats' option is not empty, Vim tries to detect the type of
+<EOL> automatically. The 'fileformat' option is set accordingly.
+
+On systems that have no job control (older Unix systems and non-Unix systems)
+the CTRL-Z, ":stop" or ":suspend" command starts a new shell.
+
+If Vim is started on the Amiga without an interactive window for output, a
+window is opened (and :sh still works). You can give a device to use for
+editing with the |-d| argument, e.g. "-d con:20/20/600/150".
+
+The 'columns' and 'lines' options are used to set or get the width and height
+of the display.
+
+Option settings are read from the first and last few lines of the file.
+Option 'modelines' determines how many lines are tried (default is 5). Note
+that this is different from the Vi versions that can execute any Ex command
+in a modeline (a major security problem). |trojan-horse|
+
+If the 'insertmode' option is set (e.g. in .exrc), Vim starts in insert mode.
+And it comes back there, when pressing <Esc>.
+
+Undo information is kept in memory. Available memory limits the number and
+size of change that can be undone. This may be a problem with MS-DOS, is
+hardly a problem on the Amiga and almost never with Unix and Win32.
+
+If the 'backup' or 'writebackup' option is set: Before a file is overwritten,
+a backup file (.bak) is made. If the "backup" option is set it is left
+behind.
+
+Vim creates a file ending in ".swp" to store parts of the file that have been
+changed or that do not fit in memory. This file can be used to recover from
+an aborted editing session with "vim -r file". Using the swap file can be
+switched off by setting the 'updatecount' option to 0 or starting Vim with
+the "-n" option. Use the 'directory' option for placing the .swp file
+somewhere else.
+
+Vim is able to work correctly on filesystems with 8.3 file names, also when
+using messydos or crossdos filesystems on the Amiga, or any 8.3 mounted
+filesystem under Unix. See |'shortname'|.
+
+Error messages are shown at least one second (Vi overwrites error messages).
+
+If Vim gives the |hit-enter| prompt, you can hit any key. Characters other
+than <CR>, <NL> and <Space> are interpreted as the (start of) a command. (Vi
+only accepts a command starting with ':').
+
+The contents of the numbered and unnamed registers is remembered when
+changing files.
+
+The "No lines in buffer" message is a normal message instead of an error
+message, since that may cause a mapping to be aborted.
+
+The AUX: device of the Amiga is supported.
+
+==============================================================================
+6. Command-line arguments *cmdline-arguments*
+
+Different versions of Vi have different command-line arguments. This can be
+confusing. To help you, this section gives an overview of the differences.
+
+Five variants of Vi will be considered here:
+ Elvis Elvis version 2.1b
+ Nvi Nvi version 1.79
+ Posix Posix 1003.2
+ Vi Vi version 3.7 (for Sun 4.1.x)
+ Vile Vile version 7.4 (incomplete)
+ Vim Vim version 5.2
+
+Only Vim is able to accept options in between and after the file names.
+
++{command} Elvis, Nvi, Posix, Vi, Vim: Same as "-c {command}".
+
+- Nvi, Posix, Vi: Run Ex in batch mode.
+ Vim: Read file from stdin (use -s for batch mode).
+
+-- Vim: End of options, only file names are following.
+
+--cmd {command} Vim: execute {command} before sourcing vimrc files.
+
+--echo-wid Vim: GTK+ echoes the Window ID on stdout
+
+--help Vim: show help message and exit.
+
+--literal Vim: take file names literally, don't expand wildcards.
+
+--nofork Vim: same as |-f|
+
+--noplugin[s] Vim: Skip loading plugins.
+
+--remote Vim: edit the files in another Vim server
+
+--remote-expr {expr} Vim: evaluate {expr} in another Vim server
+
+--remote-send {keys} Vim: send {keys} to a Vim server and exit
+
+--remote-silent {file} Vim: edit the files in another Vim server if possible
+
+--remote-wait Vim: edit the files in another Vim server and wait for it
+
+--remote-wait-silent Vim: like --remote-wait, no complaints if not possible
+
+--role {role} Vim: GTK+ 2: set role of main window
+
+--serverlist Vim: Output a list of Vim servers and exit
+
+--servername {name} Vim: Specify Vim server name
+
+--socketid {id} Vim: GTK window socket to run Vim in
+
+--version Vim: show version message and exit.
+
+-? Vile: print usage summary and exit.
+
+-a Elvis: Load all specified file names into a window (use -o for
+ Vim).
+
+-A Vim: Start in Arabic mode (when compiled with Arabic).
+
+-b {blksize} Elvis: Use {blksize} blocksize for the session file.
+-b Vim: set 'binary' mode.
+
+-C Vim: Compatible mode.
+
+-c {command} Elvis, Nvi, Posix, Vim: run {command} as an Ex command after
+ loading the edit buffer.
+ Vim: allow up to 10 "-c" arguments
+
+-d {device} Vim: Use {device} for I/O (Amiga only). {only when compiled
+ without the |+diff| feature}
+-d Vim: start with 'diff' set. |vimdiff|
+
+-dev {device} Vim: Use {device} for I/O (Amiga only).
+
+-D Vim: debug mode.
+
+-e Elvis, Nvi, Vim: Start in Ex mode, as if the executable is
+ called "ex".
+
+-E Vim: Start in improved Ex mode |gQ|, like "exim".
+
+-f Vim: Run GUI in foreground (Amiga: don't open new window).
+-f {session} Elvis: Use {session} as the session file.
+
+-F Vim: Start in Farsi mode (when compiled with Farsi).
+ Nvi: Fast start, don't read the entire file when editing
+ starts.
+
+-G {gui} Elvis: Use the {gui} as user interface.
+
+-g Vim: Start GUI.
+-g N Vile: start editing at line N
+
+-h Vim: Give help message.
+ Vile: edit the help file
+
+-H Vim: start Hebrew mode (when compiled with it).
+
+-i Elvis: Start each window in Insert mode.
+-i {viminfo} Vim: Use {viminfo} for viminfo file.
+
+-L Vim: Same as "-r" (also in some versions of Vi).
+
+-l Nvi, Vi, Vim: Set 'lisp' and 'showmatch' options.
+
+-m Vim: Modifications not allowed to be written, resets 'write'
+ option.
+
+-M Vim: Modifications not allowed, resets 'modifiable' and the
+ 'write' option.
+
+-N Vim: No-compatible mode.
+
+-n Vim: No swap file used.
+
+-nb[args] Vim: open a NetBeans interface connection
+
+-O[N] Vim: Like -o, but use vertically split windows.
+
+-o[N] Vim: Open [N] windows, or one for each file.
+
+-P {parent-title} Win32 Vim: open Vim inside a parent application window
+
+-q {name} Vim: Use {name} for quickfix error file.
+-q{name} Vim: Idem.
+
+-R Elvis, Nvi, Posix, Vile, Vim: Set the 'readonly' option.
+
+-r Elvis, Nvi, Posix, Vi, Vim: Recovery mode.
+
+-S Nvi: Set 'secure' option.
+-S {script} Vim: source script after starting up.
+
+-s Nvi, Posix, Vim: Same as "-" (silent mode), when in Ex mode.
+ Elvis: Sets the 'safer' option.
+-s {scriptin} Vim: Read from script file {scriptin}; only when not in Ex
+ mode.
+-s {pattern} Vile: search for {pattern}
+
+-t {tag} Elvis, Nvi, Posix, Vi, Vim: Edit the file containing {tag}.
+-t{tag} Vim: Idem.
+
+-T {term} Vim: Set terminal name to {term}.
+
+-u {vimrc} Vim: Read initializations from {vimrc} file.
+
+-U {gvimrc} Vim: Read GUI initializations from {gvimrc} file.
+
+-v Nvi, Posix, Vi, Vim: Begin in Normal mode (visual mode, in Vi
+ terms).
+ Vile: View mode, no changes possible.
+
+-V Elvis, Vim: Verbose mode.
+-V{nr} Vim: Verbose mode with specified level.
+
+-w {size} Elvis, Posix, Nvi, Vi, Vim: Set value of 'window' to {size}.
+-w{size} Nvi, Vi: Same as "-w {size}".
+-w {name} Vim: Write to script file {name} (must start with non-digit).
+
+-W {name} Vim: Append to script file {name}.
+
+-x Vi, Vim: Ask for encryption key. See |encryption|.
+
+-X Vim: Don't connect to the X server.
+
+-y Vim: Start in easy mode, like |evim|.
+
+-Z Vim: restricted mode
+
+@{cmdfile} Vile: use {cmdfile} as startup file.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/vim.1 b/runtime/doc/vim.1
new file mode 100644
index 000000000..d1fa54ad7
--- /dev/null
+++ b/runtime/doc/vim.1
@@ -0,0 +1,541 @@
+.TH VIM 1 "2002 Feb 22"
+.SH NAME
+vim \- Vi IMproved, a programmers text editor
+.SH SYNOPSIS
+.br
+.B vim
+[options] [file ..]
+.br
+.B vim
+[options] -
+.br
+.B vim
+[options] \-t tag
+.br
+.B vim
+[options] \-q [errorfile]
+.PP
+.br
+.B ex
+.br
+.B view
+.br
+.B gvim
+.B gview
+.B evim
+.B eview
+.br
+.B rvim
+.B rview
+.B rgvim
+.B rgview
+.SH DESCRIPTION
+.B Vim
+is a text editor that is upwards compatible to Vi.
+It can be used to edit all kinds of plain text.
+It is especially useful for editing programs.
+.PP
+There are a lot of enhancements above Vi: multi level undo,
+multi windows and buffers, syntax highlighting, command line
+editing, filename completion, on-line help, visual selection, etc..
+See ":help vi_diff.txt" for a summary of the differences between
+.B Vim
+and Vi.
+.PP
+While running
+.B Vim
+a lot of help can be obtained from the on-line help system, with the ":help"
+command.
+See the ON-LINE HELP section below.
+.PP
+Most often
+.B Vim
+is started to edit a single file with the command
+.PP
+ vim file
+.PP
+More generally
+.B Vim
+is started with:
+.PP
+ vim [options] [filelist]
+.PP
+If the filelist is missing, the editor will start with an empty buffer.
+Otherwise exactly one out of the following four may be used to choose one or
+more files to be edited.
+.TP 12
+file ..
+A list of filenames.
+The first one will be the current file and read into the buffer.
+The cursor will be positioned on the first line of the buffer.
+You can get to the other files with the ":next" command.
+To edit a file that starts with a dash, precede the filelist with "--".
+.TP
+-
+The file to edit is read from stdin. Commands are read from stderr, which
+should be a tty.
+.TP
+-t {tag}
+The file to edit and the initial cursor position depends on a "tag", a sort
+of goto label.
+{tag} is looked up in the tags file, the associated file becomes the current
+file and the associated command is executed.
+Mostly this is used for C programs, in which case {tag} could be a function
+name.
+The effect is that the file containing that function becomes the current file
+and the cursor is positioned on the start of the function.
+See ":help tag-commands".
+.TP
+-q [errorfile]
+Start in quickFix mode.
+The file [errorfile] is read and the first error is displayed.
+If [errorfile] is omitted, the filename is obtained from the 'errorfile'
+option (defaults to "AztecC.Err" for the Amiga, "errors.err" on other
+systems).
+Further errors can be jumped to with the ":cn" command.
+See ":help quickfix".
+.PP
+.B Vim
+behaves differently, depending on the name of the command (the executable may
+still be the same file).
+.TP 10
+vim
+The "normal" way, everything is default.
+.TP
+ex
+Start in Ex mode.
+Go to Normal mode with the ":vi" command.
+Can also be done with the "-e" argument.
+.TP
+view
+Start in read-only mode. You will be protected from writing the files. Can
+also be done with the "-R" argument.
+.TP
+gvim gview
+The GUI version.
+Starts a new window.
+Can also be done with the "-g" argument.
+.TP
+evim eview
+The GUI version in easy mode.
+Starts a new window.
+Can also be done with the "-y" argument.
+.TP
+rvim rview rgvim rgview
+Like the above, but with restrictions. It will not be possible to start shell
+commands, or suspend
+.B Vim.
+Can also be done with the "-Z" argument.
+.SH OPTIONS
+The options may be given in any order, before or after filenames.
+Options without an argument can be combined after a single dash.
+.TP 12
++[num]
+For the first file the cursor will be positioned on line "num".
+If "num" is missing, the cursor will be positioned on the last line.
+.TP
++/{pat}
+For the first file the cursor will be positioned on the
+first occurrence of {pat}.
+See ":help search-pattern" for the available search patterns.
+.TP
++{command}
+.TP
+-c {command}
+{command} will be executed after the
+first file has been read.
+{command} is interpreted as an Ex command.
+If the {command} contains spaces it must be enclosed in double quotes (this
+depends on the shell that is used).
+Example: Vim "+set si" main.c
+.br
+Note: You can use up to 10 "+" or "-c" commands.
+.TP
+-S {file}
+{file} will be sourced after the first file has been read.
+This is equivalent to -c "source {file}".
+{file} cannot start with '-'.
+If {file} is omitted "Session.vim" is used (only works when -S is the last
+argument).
+.TP
+--cmd {command}
+Like using "-c", but the command is executed just before
+processing any vimrc file.
+You can use up to 10 of these commands, independently from "-c" commands.
+.TP
+-A
+If
+.B Vim
+has been compiled with ARABIC support for editing right-to-left
+oriented files and Arabic keyboard mapping, this option starts
+.B Vim
+in Arabic mode, i.e. 'arabic' is set. Otherwise an error
+message is given and
+.B Vim
+aborts.
+.TP
+-b
+Binary mode.
+A few options will be set that makes it possible to edit a binary or
+executable file.
+.TP
+-C
+Compatible. Set the 'compatible' option.
+This will make
+.B Vim
+behave mostly like Vi, even though a .vimrc file exists.
+.TP
+-d
+Start in diff mode.
+There should be two or three file name arguments.
+.B Vim
+will open all the files and show differences between them.
+Works like vimdiff(1).
+.TP
+-d {device}
+Open {device} for use as a terminal.
+Only on the Amiga.
+Example:
+"\-d con:20/30/600/150".
+.TP
+-D
+Debugging. Go to debugging mode when executing the first command from a
+script.
+.TP
+-e
+Start
+.B Vim
+in Ex mode, just like the executable was called "ex".
+.TP
+-E
+Start
+.B Vim
+in improved Ex mode, just like the executable was called "exim".
+.TP
+-f
+Foreground. For the GUI version,
+.B Vim
+will not fork and detach from the shell it was started in.
+On the Amiga,
+.B Vim
+is not restarted to open a new window.
+This option should be used when
+.B Vim
+is executed by a program that will wait for the edit
+session to finish (e.g. mail).
+On the Amiga the ":sh" and ":!" commands will not work.
+.TP
+--nofork
+Foreground. For the GUI version,
+.B Vim
+will not fork and detach from the shell it was started in.
+.TP
+-F
+If
+.B Vim
+has been compiled with FKMAP support for editing right-to-left
+oriented files and Farsi keyboard mapping, this option starts
+.B Vim
+in Farsi mode, i.e. 'fkmap' and 'rightleft' are set.
+Otherwise an error message is given and
+.B Vim
+aborts.
+.TP
+-g
+If
+.B Vim
+has been compiled with GUI support, this option enables the GUI.
+If no GUI support was compiled in, an error message is given and
+.B Vim
+aborts.
+.TP
+-h
+Give a bit of help about the command line arguments and options.
+After this
+.B Vim
+exits.
+.TP
+-H
+If
+.B Vim
+has been compiled with RIGHTLEFT support for editing right-to-left
+oriented files and Hebrew keyboard mapping, this option starts
+.B Vim
+in Hebrew mode, i.e. 'hkmap' and 'rightleft' are set.
+Otherwise an error message is given and
+.B Vim
+aborts.
+.TP
+-i {viminfo}
+When using the viminfo file is enabled, this option sets the filename to use,
+instead of the default "~/.viminfo".
+This can also be used to skip the use of the .viminfo file, by giving the name
+"NONE".
+.TP
+-L
+Same as -r.
+.TP
+-l
+Lisp mode.
+Sets the 'lisp' and 'showmatch' options on.
+.TP
+-m
+Modifying files is disabled.
+Resets the 'write' option.
+You can still modify the buffer, but writing a file is not possible.
+.TP
+-M
+Modifications not allowed. The 'modifiable' and 'write' options will be unset,
+so that changes are not allowed and files can not be written. Note that these
+options can be set to enable making modifications.
+.TP
+-N
+No-compatible mode. Reset the 'compatible' option.
+This will make
+.B Vim
+behave a bit better, but less Vi compatible, even though a .vimrc file does
+not exist.
+.TP
+-n
+No swap file will be used.
+Recovery after a crash will be impossible.
+Handy if you want to edit a file on a very slow medium (e.g. floppy).
+Can also be done with ":set uc=0".
+Can be undone with ":set uc=200".
+.TP
+-nb
+Become an editor server for NetBeans. See the docs for details.
+.TP
+-o[N]
+Open N windows stacked.
+When N is omitted, open one window for each file.
+.TP
+-O[N]
+Open N windows side by side.
+When N is omitted, open one window for each file.
+.TP
+-R
+Read-only mode.
+The 'readonly' option will be set.
+You can still edit the buffer, but will be prevented from accidently
+overwriting a file.
+If you do want to overwrite a file, add an exclamation mark to the Ex command,
+as in ":w!".
+The -R option also implies the -n option (see below).
+The 'readonly' option can be reset with ":set noro".
+See ":help 'readonly'".
+.TP
+-r
+List swap files, with information about using them for recovery.
+.TP
+-r {file}
+Recovery mode.
+The swap file is used to recover a crashed editing session.
+The swap file is a file with the same filename as the text file with ".swp"
+appended.
+See ":help recovery".
+.TP
+-s
+Silent mode. Only when started as "Ex" or when the "-e" option was given
+before the "-s" option.
+.TP
+-s {scriptin}
+The script file {scriptin} is read.
+The characters in the file are interpreted as if you had typed them.
+The same can be done with the command ":source! {scriptin}".
+If the end of the file is reached before the editor exits, further characters
+are read from the keyboard.
+.TP
+-T {terminal}
+Tells
+.B Vim
+the name of the terminal you are using.
+Only required when the automatic way doesn't work.
+Should be a terminal known
+to
+.B Vim
+(builtin) or defined in the termcap or terminfo file.
+.TP
+-u {vimrc}
+Use the commands in the file {vimrc} for initializations.
+All the other initializations are skipped.
+Use this to edit a special kind of files.
+It can also be used to skip all initializations by giving the name "NONE".
+See ":help initialization" within vim for more details.
+.TP
+-U {gvimrc}
+Use the commands in the file {gvimrc} for GUI initializations.
+All the other GUI initializations are skipped.
+It can also be used to skip all GUI initializations by giving the name "NONE".
+See ":help gui-init" within vim for more details.
+.TP
+-V[N]
+Verbose. Give messages about which files are sourced and for reading and
+writing a viminfo file. The optional number N is the value for 'verbose'.
+Default is 10.
+.TP
+-v
+Start
+.B Vim
+in Vi mode, just like the executable was called "vi". This only has effect
+when the executable is called "ex".
+.TP
+-w {scriptout}
+All the characters that you type are recorded in the file
+{scriptout}, until you exit
+.B Vim.
+This is useful if you want to create a script file to be used with "vim -s" or
+":source!".
+If the {scriptout} file exists, characters are appended.
+.TP
+-W {scriptout}
+Like -w, but an existing file is overwritten.
+.TP
+-x
+Use encryption when writing files. Will prompt for a crypt key.
+.TP
+-X
+Don't connect to the X server. Shortens startup time in a terminal, but the
+window title and clipboard will not be used.
+.TP
+-y
+Start
+.B Vim
+in easy mode, just like the executable was called "evim" or "eview".
+Makes
+.B Vim
+behave like a click-and-type editor.
+.TP
+-Z
+Restricted mode. Works like the executable starts with "r".
+.TP
+--
+Denotes the end of the options.
+Arguments after this will be handled as a file name.
+This can be used to edit a filename that starts with a '-'.
+.TP
+--echo-wid
+GTK GUI only: Echo the Window ID on stdout
+.TP
+--help
+Give a help message and exit, just like "-h".
+.TP
+--literal
+Take file name arguments literally, do not expand wildcards. Not needed on
+Unix, the shell expand wildcards.
+.TP
+--noplugin
+Skip loading plugins. Implied by -u NONE.
+.TP
+--remote
+Connect to a Vim server and make it edit the files given in the rest of the
+arguments. If no server is found a warning is given and the files are edited
+in the current Vim.
+.TP
+--remote-expr {expr}
+Connect to a Vim server, evaluate {expr} in it and print the result on stdout.
+.TP
+--remote-send {keys}
+Connect to a Vim server and send {keys} to it.
+.TP
+--remote-silent
+As --remote, but without the warning when no server is found.
+.TP
+--remote-wait
+As --remote, but Vim does not exit until the files have been edited.
+.TP
+--remote-wait-silent
+As --remote-wait, but without the warning when no server is found.
+.TP
+--serverlist
+List the names of all Vim servers that can be found.
+.TP
+--servername {name}
+Use {name} as the server name. Used for the current Vim, unless used with a
+--remote argument, then it's the name of the server to connect to.
+.TP
+--socketid {id}
+GTK GUI only: Use the GtkPlug mechanism to run gvim in another window.
+.TP
+--version
+Print version information and exit.
+.SH ON-LINE HELP
+Type ":help" in
+.B Vim
+to get started.
+Type ":help subject" to get help on a specific subject.
+For example: ":help ZZ" to get help for the "ZZ" command.
+Use <Tab> and CTRL-D to complete subjects (":help cmdline-completion").
+Tags are present to jump from one place to another (sort of hypertext links,
+see ":help").
+All documentation files can be viewed in this way, for example
+":help syntax.txt".
+.SH FILES
+.TP 15
+/usr/local/lib/vim/doc/*.txt
+The
+.B Vim
+documentation files.
+Use ":help doc-file-list" to get the complete list.
+.TP
+/usr/local/lib/vim/doc/tags
+The tags file used for finding information in the documentation files.
+.TP
+/usr/local/lib/vim/syntax/syntax.vim
+System wide syntax initializations.
+.TP
+/usr/local/lib/vim/syntax/*.vim
+Syntax files for various languages.
+.TP
+/usr/local/lib/vim/vimrc
+System wide
+.B Vim
+initializations.
+.TP
+/usr/local/lib/vim/gvimrc
+System wide gvim initializations.
+.TP
+/usr/local/lib/vim/optwin.vim
+Script used for the ":options" command, a nice way to view and set options.
+.TP
+/usr/local/lib/vim/menu.vim
+System wide menu initializations for gvim.
+.TP
+/usr/local/lib/vim/bugreport.vim
+Script to generate a bug report. See ":help bugs".
+.TP
+/usr/local/lib/vim/filetype.vim
+Script to detect the type of a file by its name. See ":help 'filetype'".
+.TP
+/usr/local/lib/vim/scripts.vim
+Script to detect the type of a file by its contents. See ":help 'filetype'".
+.TP
+/usr/local/lib/vim/*.ps
+Files used for PostScript printing.
+.PP
+For recent info read the VIM home page:
+.br
+<URL:http://www.vim.org/>
+.SH SEE ALSO
+vimtutor(1)
+.SH AUTHOR
+Most of
+.B Vim
+was made by Bram Moolenaar, with a lot of help from others.
+See ":help credits" in
+.B Vim.
+.br
+.B Vim
+is based on Stevie, worked on by: Tim Thompson,
+Tony Andrews and G.R. (Fred) Walter.
+Although hardly any of the original code remains.
+.SH BUGS
+Probably.
+See ":help todo" for a list of known problems.
+.PP
+Note that a number of things that may be regarded as bugs by some, are in fact
+caused by a too-faithful reproduction of Vi's behaviour.
+And if you think other things are bugs "because Vi does it differently",
+you should take a closer look at the vi_diff.txt file (or type :help
+vi_diff.txt when in Vim).
+Also have a look at the 'compatible' and 'cpoptions' options.
diff --git a/runtime/doc/vim.man b/runtime/doc/vim.man
new file mode 100644
index 000000000..593926d51
--- /dev/null
+++ b/runtime/doc/vim.man
@@ -0,0 +1,420 @@
+VIM(1) VIM(1)
+
+
+
+NAME
+ vim - Vi IMproved, a programmers text editor
+
+SYNOPSIS
+ vim [options] [file ..]
+ vim [options] -
+ vim [options] -t tag
+ vim [options] -q [errorfile]
+
+ ex
+ view
+ gvim gview evim eview
+ rvim rview rgvim rgview
+
+DESCRIPTION
+ Vim is a text editor that is upwards compatible to Vi. It can be used
+ to edit all kinds of plain text. It is especially useful for editing
+ programs.
+
+ There are a lot of enhancements above Vi: multi level undo, multi win-
+ dows and buffers, syntax highlighting, command line editing, filename
+ completion, on-line help, visual selection, etc.. See ":help
+ vi_diff.txt" for a summary of the differences between Vim and Vi.
+
+ While running Vim a lot of help can be obtained from the on-line help
+ system, with the ":help" command. See the ON-LINE HELP section below.
+
+ Most often Vim is started to edit a single file with the command
+
+ vim file
+
+ More generally Vim is started with:
+
+ vim [options] [filelist]
+
+ If the filelist is missing, the editor will start with an empty buffer.
+ Otherwise exactly one out of the following four may be used to choose
+ one or more files to be edited.
+
+ file .. A list of filenames. The first one will be the current
+ file and read into the buffer. The cursor will be posi-
+ tioned on the first line of the buffer. You can get to the
+ other files with the ":next" command. To edit a file that
+ starts with a dash, precede the filelist with "--".
+
+ - The file to edit is read from stdin. Commands are read
+ from stderr, which should be a tty.
+
+ -t {tag} The file to edit and the initial cursor position depends on
+ a "tag", a sort of goto label. {tag} is looked up in the
+ tags file, the associated file becomes the current file and
+ the associated command is executed. Mostly this is used
+ for C programs, in which case {tag} could be a function
+ name. The effect is that the file containing that function
+ becomes the current file and the cursor is positioned on
+ the start of the function. See ":help tag-commands".
+
+ -q [errorfile]
+ Start in quickFix mode. The file [errorfile] is read and
+ the first error is displayed. If [errorfile] is omitted,
+ the filename is obtained from the 'errorfile' option
+ (defaults to "AztecC.Err" for the Amiga, "errors.err" on
+ other systems). Further errors can be jumped to with the
+ ":cn" command. See ":help quickfix".
+
+ Vim behaves differently, depending on the name of the command (the exe-
+ cutable may still be the same file).
+
+ vim The "normal" way, everything is default.
+
+ ex Start in Ex mode. Go to Normal mode with the ":vi" command.
+ Can also be done with the "-e" argument.
+
+ view Start in read-only mode. You will be protected from writing
+ the files. Can also be done with the "-R" argument.
+
+ gvim gview
+ The GUI version. Starts a new window. Can also be done with
+ the "-g" argument.
+
+ evim eview
+ The GUI version in easy mode. Starts a new window. Can also
+ be done with the "-y" argument.
+
+ rvim rview rgvim rgview
+ Like the above, but with restrictions. It will not be possi-
+ ble to start shell commands, or suspend Vim. Can also be
+ done with the "-Z" argument.
+
+OPTIONS
+ The options may be given in any order, before or after filenames.
+ Options without an argument can be combined after a single dash.
+
+ +[num] For the first file the cursor will be positioned on line
+ "num". If "num" is missing, the cursor will be positioned
+ on the last line.
+
+ +/{pat} For the first file the cursor will be positioned on the
+ first occurrence of {pat}. See ":help search-pattern" for
+ the available search patterns.
+
+ +{command}
+
+ -c {command}
+ {command} will be executed after the first file has been
+ read. {command} is interpreted as an Ex command. If the
+ {command} contains spaces it must be enclosed in double
+ quotes (this depends on the shell that is used). Example:
+ Vim "+set si" main.c
+ Note: You can use up to 10 "+" or "-c" commands.
+
+ -S {file} {file} will be sourced after the first file has been read.
+ This is equivalent to -c "source {file}". {file} cannot
+ start with '-'. If {file} is omitted "Session.vim" is used
+ (only works when -S is the last argument).
+
+ --cmd {command}
+ Like using "-c", but the command is executed just before
+ processing any vimrc file. You can use up to 10 of these
+ commands, independently from "-c" commands.
+
+ -A If Vim has been compiled with ARABIC support for editing
+ right-to-left oriented files and Arabic keyboard mapping,
+ this option starts Vim in Arabic mode, i.e. 'arabic' is
+ set. Otherwise an error message is given and Vim aborts.
+
+ -b Binary mode. A few options will be set that makes it pos-
+ sible to edit a binary or executable file.
+
+ -C Compatible. Set the 'compatible' option. This will make
+ Vim behave mostly like Vi, even though a .vimrc file
+ exists.
+
+ -d Start in diff mode. There should be two or three file name
+ arguments. Vim will open all the files and show differ-
+ ences between them. Works like vimdiff(1).
+
+ -d {device} Open {device} for use as a terminal. Only on the Amiga.
+ Example: "-d con:20/30/600/150".
+
+ -D Debugging. Go to debugging mode when executing the first
+ command from a script.
+
+ -e Start Vim in Ex mode, just like the executable was called
+ "ex".
+
+ -E Start Vim in improved Ex mode, just like the executable was
+ called "exim".
+
+ -f Foreground. For the GUI version, Vim will not fork and
+ detach from the shell it was started in. On the Amiga, Vim
+ is not restarted to open a new window. This option should
+ be used when Vim is executed by a program that will wait
+ for the edit session to finish (e.g. mail). On the Amiga
+ the ":sh" and ":!" commands will not work.
+
+ --nofork Foreground. For the GUI version, Vim will not fork and
+ detach from the shell it was started in.
+
+ -F If Vim has been compiled with FKMAP support for editing
+ right-to-left oriented files and Farsi keyboard mapping,
+ this option starts Vim in Farsi mode, i.e. 'fkmap' and
+ 'rightleft' are set. Otherwise an error message is given
+ and Vim aborts.
+
+ -g If Vim has been compiled with GUI support, this option
+ enables the GUI. If no GUI support was compiled in, an
+ error message is given and Vim aborts.
+
+ -h Give a bit of help about the command line arguments and
+ options. After this Vim exits.
+
+ -H If Vim has been compiled with RIGHTLEFT support for editing
+ right-to-left oriented files and Hebrew keyboard mapping,
+ this option starts Vim in Hebrew mode, i.e. 'hkmap' and
+ 'rightleft' are set. Otherwise an error message is given
+ and Vim aborts.
+
+ -i {viminfo}
+ When using the viminfo file is enabled, this option sets
+ the filename to use, instead of the default "~/.viminfo".
+ This can also be used to skip the use of the .viminfo file,
+ by giving the name "NONE".
+
+ -L Same as -r.
+
+ -l Lisp mode. Sets the 'lisp' and 'showmatch' options on.
+
+ -m Modifying files is disabled. Resets the 'write' option.
+ You can still modify the buffer, but writing a file is not
+ possible.
+
+ -M Modifications not allowed. The 'modifiable' and 'write'
+ options will be unset, so that changes are not allowed and
+ files can not be written. Note that these options can be
+ set to enable making modifications.
+
+ -N No-compatible mode. Reset the 'compatible' option. This
+ will make Vim behave a bit better, but less Vi compatible,
+ even though a .vimrc file does not exist.
+
+ -n No swap file will be used. Recovery after a crash will be
+ impossible. Handy if you want to edit a file on a very
+ slow medium (e.g. floppy). Can also be done with ":set
+ uc=0". Can be undone with ":set uc=200".
+
+ -nb Become an editor server for NetBeans. See the docs for
+ details.
+
+ -o[N] Open N windows stacked. When N is omitted, open one window
+ for each file.
+
+ -O[N] Open N windows side by side. When N is omitted, open one
+ window for each file.
+
+ -R Read-only mode. The 'readonly' option will be set. You
+ can still edit the buffer, but will be prevented from acci-
+ dently overwriting a file. If you do want to overwrite a
+ file, add an exclamation mark to the Ex command, as in
+ ":w!". The -R option also implies the -n option (see
+ below). The 'readonly' option can be reset with ":set
+ noro". See ":help 'readonly'".
+
+ -r List swap files, with information about using them for
+ recovery.
+
+ -r {file} Recovery mode. The swap file is used to recover a crashed
+ editing session. The swap file is a file with the same
+ filename as the text file with ".swp" appended. See ":help
+ recovery".
+
+ -s Silent mode. Only when started as "Ex" or when the "-e"
+ option was given before the "-s" option.
+
+ -s {scriptin}
+ The script file {scriptin} is read. The characters in the
+ file are interpreted as if you had typed them. The same
+ can be done with the command ":source! {scriptin}". If the
+ end of the file is reached before the editor exits, further
+ characters are read from the keyboard.
+
+ -T {terminal}
+ Tells Vim the name of the terminal you are using. Only
+ required when the automatic way doesn't work. Should be a
+ terminal known to Vim (builtin) or defined in the termcap
+ or terminfo file.
+
+ -u {vimrc} Use the commands in the file {vimrc} for initializations.
+ All the other initializations are skipped. Use this to
+ edit a special kind of files. It can also be used to skip
+ all initializations by giving the name "NONE". See ":help
+ initialization" within vim for more details.
+
+ -U {gvimrc} Use the commands in the file {gvimrc} for GUI initializa-
+ tions. All the other GUI initializations are skipped. It
+ can also be used to skip all GUI initializations by giving
+ the name "NONE". See ":help gui-init" within vim for more
+ details.
+
+ -V[N] Verbose. Give messages about which files are sourced and
+ for reading and writing a viminfo file. The optional num-
+ ber N is the value for 'verbose'. Default is 10.
+
+ -v Start Vim in Vi mode, just like the executable was called
+ "vi". This only has effect when the executable is called
+ "ex".
+
+ -w {scriptout}
+ All the characters that you type are recorded in the file
+ {scriptout}, until you exit Vim. This is useful if you
+ want to create a script file to be used with "vim -s" or
+ ":source!". If the {scriptout} file exists, characters are
+ appended.
+
+ -W {scriptout}
+ Like -w, but an existing file is overwritten.
+
+ -x Use encryption when writing files. Will prompt for a
+ crypt key.
+
+ -X Don't connect to the X server. Shortens startup time in a
+ terminal, but the window title and clipboard will not be
+ used.
+
+ -y Start Vim in easy mode, just like the executable was called
+ "evim" or "eview". Makes Vim behave like a click-and-type
+ editor.
+
+ -Z Restricted mode. Works like the executable starts with
+ "r".
+
+ -- Denotes the end of the options. Arguments after this will
+ be handled as a file name. This can be used to edit a
+ filename that starts with a '-'.
+
+ --echo-wid GTK GUI only: Echo the Window ID on stdout
+
+ --help Give a help message and exit, just like "-h".
+
+ --literal Take file name arguments literally, do not expand wild-
+ cards. Not needed on Unix, the shell expand wildcards.
+
+ --noplugin Skip loading plugins. Implied by -u NONE.
+
+ --remote Connect to a Vim server and make it edit the files given in
+ the rest of the arguments. If no server is found a warning
+ is given and the files are edited in the current Vim.
+
+ --remote-expr {expr}
+ Connect to a Vim server, evaluate {expr} in it and print
+ the result on stdout.
+
+ --remote-send {keys}
+ Connect to a Vim server and send {keys} to it.
+
+ --remote-silent
+ As --remote, but without the warning when no server is
+ found.
+
+ --remote-wait
+ As --remote, but Vim does not exit until the files have
+ been edited.
+
+ --remote-wait-silent
+ As --remote-wait, but without the warning when no server is
+ found.
+
+ --serverlist
+ List the names of all Vim servers that can be found.
+
+ --servername {name}
+ Use {name} as the server name. Used for the current Vim,
+ unless used with a --remote argument, then it's the name of
+ the server to connect to.
+
+ --socketid {id}
+ GTK GUI only: Use the GtkPlug mechanism to run gvim in
+ another window.
+
+ --version Print version information and exit.
+
+ON-LINE HELP
+ Type ":help" in Vim to get started. Type ":help subject" to get help
+ on a specific subject. For example: ":help ZZ" to get help for the
+ "ZZ" command. Use <Tab> and CTRL-D to complete subjects (":help cmd-
+ line-completion"). Tags are present to jump from one place to another
+ (sort of hypertext links, see ":help"). All documentation files can be
+ viewed in this way, for example ":help syntax.txt".
+
+FILES
+ /usr/local/lib/vim/doc/*.txt
+ The Vim documentation files. Use ":help doc-file-list"
+ to get the complete list.
+
+ /usr/local/lib/vim/doc/tags
+ The tags file used for finding information in the docu-
+ mentation files.
+
+ /usr/local/lib/vim/syntax/syntax.vim
+ System wide syntax initializations.
+
+ /usr/local/lib/vim/syntax/*.vim
+ Syntax files for various languages.
+
+ /usr/local/lib/vim/vimrc
+ System wide Vim initializations.
+
+ /usr/local/lib/vim/gvimrc
+ System wide gvim initializations.
+
+ /usr/local/lib/vim/optwin.vim
+ Script used for the ":options" command, a nice way to
+ view and set options.
+
+ /usr/local/lib/vim/menu.vim
+ System wide menu initializations for gvim.
+
+ /usr/local/lib/vim/bugreport.vim
+ Script to generate a bug report. See ":help bugs".
+
+ /usr/local/lib/vim/filetype.vim
+ Script to detect the type of a file by its name. See
+ ":help 'filetype'".
+
+ /usr/local/lib/vim/scripts.vim
+ Script to detect the type of a file by its contents.
+ See ":help 'filetype'".
+
+ /usr/local/lib/vim/*.ps
+ Files used for PostScript printing.
+
+ For recent info read the VIM home page:
+ <URL:http://www.vim.org/>
+
+SEE ALSO
+ vimtutor(1)
+
+AUTHOR
+ Most of Vim was made by Bram Moolenaar, with a lot of help from others.
+ See ":help credits" in Vim.
+ Vim is based on Stevie, worked on by: Tim Thompson, Tony Andrews and
+ G.R. (Fred) Walter. Although hardly any of the original code remains.
+
+BUGS
+ Probably. See ":help todo" for a list of known problems.
+
+ Note that a number of things that may be regarded as bugs by some, are
+ in fact caused by a too-faithful reproduction of Vi's behaviour. And
+ if you think other things are bugs "because Vi does it differently",
+ you should take a closer look at the vi_diff.txt file (or type :help
+ vi_diff.txt when in Vim). Also have a look at the 'compatible' and
+ 'cpoptions' options.
+
+
+
+ 2002 Feb 22 VIM(1)
diff --git a/runtime/doc/vim.man.info b/runtime/doc/vim.man.info
new file mode 100755
index 000000000..133f9a0be
--- /dev/null
+++ b/runtime/doc/vim.man.info
Binary files differ
diff --git a/runtime/doc/vim2html.pl b/runtime/doc/vim2html.pl
new file mode 100644
index 000000000..ddb1c4623
--- /dev/null
+++ b/runtime/doc/vim2html.pl
@@ -0,0 +1,229 @@
+#!/usr/bin/env perl
+
+# converts vim documentation to simple html
+# Sirtaj Singh Kang (taj@kde.org)
+
+# Sun Feb 24 14:49:17 CET 2002
+
+use strict;
+use vars qw/%url $date/;
+
+%url = ();
+$date = `date`;
+chop $date;
+
+sub maplink
+{
+ my $tag = shift;
+ if( exists $url{ $tag } ){
+ return $url{ $tag };
+ } else {
+ #warn "Unknown hyperlink target: $tag\n";
+ $tag =~ s/\.txt//;
+ $tag =~ s/</&lt;/g;
+ $tag =~ s/>/&gt;/g;
+ return "<code class=\"badlink\">$tag</code>";
+ }
+}
+
+sub readTagFile
+{
+ my($tagfile) = @_;
+ my( $tag, $file, $name );
+
+ open(TAGS,"$tagfile") || die "can't read tags\n";
+
+ while( <TAGS> ) {
+ next unless /^(\S+)\s+(\S+)\s+/;
+
+ $tag = $1;
+ my $label = $tag;
+ ($file= $2) =~ s/.txt$/.html/g;
+ $label =~ s/\.txt//;
+
+ $url{ $tag } = "<a href=\"$file#".escurl($tag)."\">".esctext($label)."</a>";
+ }
+ close( TAGS );
+}
+
+sub esctext
+{
+ my $text = shift;
+ $text =~ s/&/&amp;/g;
+ $text =~ s/</&lt;/g;
+ $text =~ s/>/&gt;/g;
+ return $text;
+}
+
+sub escurl
+{
+ my $url = shift;
+ $url =~ s/"/%22/g;
+ $url =~ s/~/%7E/g;
+ $url =~ s/</%3C/g;
+ $url =~ s/>/%3E/g;
+ $url =~ s/=/%20/g;
+ $url =~ s/#/%23/g;
+ $url =~ s/\//%2F/g;
+
+ return $url;
+}
+
+sub vim2html
+{
+ my( $infile ) = @_;
+ my( $outfile );
+
+ open(IN, "$infile" ) || die "Couldn't read from $infile: $!.\n";
+
+ ($outfile = $infile) =~ s:.*/::g;
+ $outfile =~ s/\.txt$//g;
+
+ open( OUT, ">$outfile.html" )
+ || die "Couldn't write to $outfile.html: $!.\n";
+ my $head = uc( $outfile );
+
+ print OUT<<EOF;
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>VIM: $outfile</title>
+<link rel="stylesheet" href="vim-stylesheet.css" type="text/css">
+</head>
+<body>
+<h2>$head</h2>
+<pre>
+EOF
+
+ my $inexample = 0;
+ while( <IN> ) {
+ chop;
+ if ( /^\s*[-=]+\s*$/ ) {
+ print OUT "</pre><hr><pre>";
+ next;
+ }
+
+ # examples
+ elsif( /^>$/ || /\s>$/ ) {
+ $inexample = 1;
+ chop;
+ }
+ elsif ( $inexample && /^([<\S])/ ) {
+ $inexample = 0;
+ $_ = $' if $1 eq "<";
+ }
+
+ s/\s+$//g;
+
+ # Various vim highlights. note that < and > have already been escaped
+ # so that HTML doesn't get screwed up.
+
+ my @out = ();
+ # print "Text: $_\n";
+ LOOP:
+ foreach my $token ( split /((?:\|[^\|]+\|)|(?:\*[^\*]+\*))/ ) {
+ if ( $token =~ /^\|([^\|]+)\|/ ) {
+ # link
+ push( @out, "|".maplink( $1 )."|" );
+ next LOOP;
+ }
+ elsif ( $token =~ /^\*([^\*]+)\*/ ) {
+ # target
+ push( @out,
+ "<b class=\"vimtag\">\*<a name=\"".escurl($1)."\">".esctext($1)."<\/a>\*<\/b>");
+ next LOOP;
+ }
+
+ $_ = esctext($token);
+ s/CTRL-(\w+)/<code class="keystroke">CTRL-$1<\/code>/g;
+ # parameter <...>
+ s/&lt;(.*?)&gt;/<code class="special">&lt;$1&gt;<\/code>/g;
+
+ # parameter {...}
+ s/\{([^}]*)\}/<code class="special">{$1}<\/code>/g;
+
+ # parameter [...]
+ s/\[(range|line|count|offset|cmd|[-+]?num)\]/<code class="special">\[$1\]<\/code>/g;
+ # note
+ s/(Note:?)/<code class="note">$1<\/code>/gi;
+
+ # local heading
+ s/^(.*)\~$/<code class="section">$1<\/code>/g;
+ push( @out, $_ );
+ }
+
+ $_ = join( "", @out );
+
+ if( $inexample == 2 ) {
+ print OUT "<code class=\"example\">$_</code>\n";
+ } else {
+ print OUT $_,"\n";
+ }
+
+ $inexample = 2 if $inexample == 1;
+ }
+ print OUT<<EOF;
+</pre>
+<p><i>Generated by vim2html on $date</i></p>
+</body>
+</html>
+EOF
+
+}
+
+sub usage
+{
+die<<EOF;
+vim2html.pl: converts vim documentation to HTML.
+usage:
+
+ vim2html.pl <tag file> <text files>
+EOF
+}
+
+
+
+sub writeCSS
+{
+ open( CSS, ">vim-stylesheet.css" ) || die "Couldn't write stylesheet: $!\n";
+ print CSS<<EOF;
+body { background-color: white; color: black;}
+:link { color: rgb(0,137,139); }
+:visited { color: rgb(0,100,100);
+ background-color: white; /* should be inherit */ }
+:active { color: rgb(0,200,200);
+ background-color: white; /* should be inherit */ }
+
+B.vimtag { color : rgb(250,0,250); }
+
+h1, h2 { color: rgb(82,80,82); text-align: center; }
+h3, h4, h5, h6 { color: rgb(82,80,82); }
+.headline { color: rgb(0,137,139); }
+.header { color: rgb(164, 32, 246); }
+.section { color: rgb(164, 32, 246); }
+.keystroke { color: rgb(106, 89, 205); }
+.vim { }
+.example { color: rgb(0, 0, 255); }
+.option { }
+.notvi { }
+.special { color: rgb(106, 89, 205); }
+.note { color: blue; background-color: yellow; }
+.sub {}
+.badlink { color: rgb(0,37,39); }
+EOF
+
+}
+
+# main
+usage() if $#ARGV < 2;
+
+print "Processing tags...\n";
+readTagFile( $ARGV[ 0 ] );
+
+foreach my $file ( 1..$#ARGV ) {
+ print "Processing ".$ARGV[ $file ]."...\n";
+ vim2html( $ARGV[ $file ] );
+}
+print "Writing stylesheet...\n";
+writeCSS();
+print "done.\n"
diff --git a/runtime/doc/vimdiff.1 b/runtime/doc/vimdiff.1
new file mode 100644
index 000000000..e48728412
--- /dev/null
+++ b/runtime/doc/vimdiff.1
@@ -0,0 +1,46 @@
+.TH VIMDIFF 1 "2001 March 30"
+.SH NAME
+vimdiff \- edit two or three versions of a file with Vim and show differences
+.SH SYNOPSIS
+.br
+.B vimdiff
+[options] file1 file2 [file3]
+.PP
+.B gvimdiff
+.SH DESCRIPTION
+.B Vimdiff
+starts
+.B Vim
+on two (or three) files.
+Each file gets its own window.
+The differences between the files are highlighted.
+This is a nice way to inspect changes and to move changes from one version
+to another version of the same file.
+.PP
+See vim(1) for details about Vim itself.
+.PP
+When started as
+.B gvimdiff
+the GUI will be started, if available.
+.PP
+In each window the 'diff' option will be set, which causes the differences
+to be highlighted.
+.br
+The 'wrap' and 'scrollbind' options are set to make the text look good.
+.br
+The 'foldmethod' option is set to "diff", which puts ranges of lines without
+changes in a fold. 'foldcolumn' is set to two to make it easy to spot the
+folds and open or close them.
+.SH OPTIONS
+Vertical splits are used to align the lines, as if the "-O" argument was used.
+To use horizontal splits intead, use the "-o" argument.
+.PP
+For all other arguments see vim(1).
+.SH SEE ALSO
+vim(1)
+.SH AUTHOR
+Most of
+.B Vim
+was made by Bram Moolenaar, with a lot of help from others.
+See ":help credits" in
+.B Vim.
diff --git a/runtime/doc/vimdiff.man b/runtime/doc/vimdiff.man
new file mode 100644
index 000000000..771ce9d0e
--- /dev/null
+++ b/runtime/doc/vimdiff.man
@@ -0,0 +1,66 @@
+
+
+
+VIMDIFF(1) VIMDIFF(1)
+
+
+NAME
+ vimdiff - edit two or three versions of a file with Vim
+ and show differences
+
+SYNOPSIS
+ vimdiff [options] file1 file2 [file3]
+
+ gvimdiff
+
+DESCRIPTION
+ Vimdiff starts Vim on two (or three) files. Each file
+ gets its own window. The differences between the files
+ are highlighted. This is a nice way to inspect changes
+ and to move changes from one version to another version of
+ the same file.
+
+ See vim(1) for details about Vim itself.
+
+ When started as gvimdiff the GUI will be started, if
+ available.
+
+ In each window the 'diff' option will be set, which causes
+ the differences to be highlighted.
+ The 'wrap' and 'scrollbind' options are set to make the
+ text look good.
+ The 'foldmethod' option is set to "diff", which puts
+ ranges of lines without changes in a fold. 'foldcolumn'
+ is set to two to make it easy to spot the folds and open
+ or close them.
+
+OPTIONS
+ Vertical splits are used to align the lines, as if the
+ "-O" argument was used. To use horizontal splits intead,
+ use the "-o" argument.
+
+ For all other arguments see vim(1).
+
+SEE ALSO
+ vim(1)
+
+AUTHOR
+ Most of Vim was made by Bram Moolenaar, with a lot of help
+ from others. See ":help credits" in Vim.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2001 March 30 1
+
+
diff --git a/runtime/doc/vimtutor.1 b/runtime/doc/vimtutor.1
new file mode 100644
index 000000000..4b5aea64d
--- /dev/null
+++ b/runtime/doc/vimtutor.1
@@ -0,0 +1,54 @@
+.TH VIMTUTOR 1 "2001 April 2"
+.SH NAME
+vimtutor \- the Vim tutor
+.SH SYNOPSIS
+.br
+.B vimtutor [language]
+.SH DESCRIPTION
+.B Vimtutor
+starts the
+.B Vim
+tutor.
+It copies the tutor file first, so that it can be modified without changing
+the original file.
+.PP
+The
+.B Vimtutor
+is useful for people that want to learn their first
+.B Vim
+commands.
+.PP
+The optional [language] argument is the two-letter name of a language, like
+"it" or "es".
+If the [language] argument is missing, the language of the current locale will
+be used.
+If a tutor in this language is available, it will be used.
+Otherwise the English version will be used.
+.PP
+.B Vim
+is always started in Vi compatible mode.
+.SH FILES
+.TP 15
+/usr/local/lib/vim/tutor/tutor[.language]
+The
+.B Vimtutor
+text file(s).
+.TP 15
+/usr/local/lib/vim/tutor/tutor.vim
+The Vim script used to copy the
+.B Vimtutor
+text file.
+.SH AUTHOR
+The
+.B Vimtutor
+was originally written for Vi by Michael C. Pierce and Robert K. Ware,
+Colorado School of Mines using ideas supplied by Charles Smith,
+Colorado State University.
+E-mail: bware@mines.colorado.edu.
+.br
+It was modified for
+.B Vim
+by Bram Moolenaar.
+For the names of the translators see the tutor files.
+.SH SEE ALSO
+vim(1)
diff --git a/runtime/doc/vimtutor.man b/runtime/doc/vimtutor.man
new file mode 100644
index 000000000..c36b1c185
--- /dev/null
+++ b/runtime/doc/vimtutor.man
@@ -0,0 +1,66 @@
+
+
+
+VIMTUTOR(1) VIMTUTOR(1)
+
+
+NAME
+ vimtutor - the Vim tutor
+
+SYNOPSIS
+ vimtutor [language]
+
+DESCRIPTION
+ Vimtutor starts the Vim tutor. It copies the tutor file
+ first, so that it can be modified without changing the
+ original file.
+
+ The Vimtutor is useful for people that want to learn their
+ first Vim commands.
+
+ The optional [language] argument is the two-letter name of
+ a language, like "it" or "es". If the [language] argument
+ is missing, the language of the current locale will be
+ used. If a tutor in this language is available, it will
+ be used. Otherwise the English version will be used.
+
+ Vim is always started in Vi compatible mode.
+
+FILES
+ /usr/local/lib/vim/tutor/tutor[.language]
+ The Vimtutor text file(s).
+
+ /usr/local/lib/vim/tutor/tutor.vim
+ The Vim script used to copy the Vimtutor
+ text file.
+
+AUTHOR
+ The Vimtutor was originally written for Vi by Michael C.
+ Pierce and Robert K. Ware, Colorado School of Mines using
+ ideas supplied by Charles Smith, Colorado State Univer-
+ sity. E-mail: bware@mines.colorado.edu.
+ It was modified for Vim by Bram Moolenaar. For the names
+ of the translators see the tutor files.
+
+SEE ALSO
+ vim(1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2001 April 2 1
+
+
diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt
new file mode 100644
index 000000000..410057838
--- /dev/null
+++ b/runtime/doc/visual.txt
@@ -0,0 +1,487 @@
+*visual.txt* For Vim version 7.0aa. Last change: 2004 Jun 08
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Visual mode *Visual* *Visual-mode* *visual-mode*
+
+Visual mode is a flexible and easy way to select a piece of text for an
+operator. It is the only way to select a block of text.
+
+This is introduced in section |04.4| of the user manual.
+
+1. Using Visual mode |visual-use|
+2. Starting and stopping Visual mode |visual-start|
+3. Changing the Visual area |visual-change|
+4. Operating on the Visual area |visual-operators|
+5. Blockwise operators |blockwise-operators|
+6. Repeating |visual-repeat|
+7. Examples |visual-examples|
+8. Select mode |Select-mode|
+
+{Vi has no Visual mode, the name "visual" is used for Normal mode, to
+distinguish it from Ex mode}
+{not available when the |+visual| feature was disabled when compiling}
+
+==============================================================================
+1. Using Visual mode *visual-use*
+
+Using Visual mode consists of three parts:
+1. Mark the start of the text with "v", "V" or CTRL-V.
+ The character under the cursor will be used as the start.
+2. Move to the end of the text.
+ The text from the start of the Visual mode up to and including the
+ character under the cursor is highlighted.
+3. Type an operator command.
+ The highlighted characters will be operated upon.
+
+The 'highlight' option can be used to set the display mode to use for
+highlighting in Visual mode.
+The 'virtualedit' option can be used to allow positioning the cursor to
+positions where there is no actual character.
+
+The highlighted text normally includes the character under the cursor.
+However, when the 'selection' option is set to "exclusive" and the cursor is
+after the Visual area, the character under the cursor is not included.
+
+With "v" the text before the start position and after the end position will
+not be highlighted. However, All uppercase and non-alpha operators, except
+"~" and "U", will work on whole lines anyway. See the list of operators
+below.
+
+ *visual-block*
+With CTRL-V (blockwise Visual mode) the highlighted text will be a rectangle
+between start position and the cursor. However, some operators work on whole
+lines anyway (see the list below). The change and substitute operators will
+delete the highlighted text and then start insertion at the top left
+position.
+
+==============================================================================
+2. Starting and stopping Visual mode *visual-start*
+
+ *v* *characterwise-visual*
+v start Visual mode per character.
+
+ *V* *linewise-visual*
+V start Visual mode linewise.
+
+ *CTRL-V* *blockwise-visual*
+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|.
+
+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
+and no text is affected. Also when you hit "v" in characterwise Visual mode,
+"CTRL-V" in blockwise Visual mode or "V" in linewise Visual mode. If you hit
+CTRL-Z the highlighting stops and the editor is suspended or a new shell is
+started |CTRL-Z|.
+
+ new mode after typing: *v_v* *v_CTRL-V* *v_V*
+old mode "v" "CTRL-V" "V" ~
+
+Normal Visual blockwise Visual linewise Visual
+Visual Normal blockwise Visual linewise Visual
+blockwise Visual Visual Normal linewise Visual
+linewise Visual Visual blockwise Visual Normal
+
+ *gv* *v_gv*
+gv Start Visual mode with the same area as the previous
+ area and the same mode. In Visual mode the current and
+ the previous Visual area are exchanged.
+
+ *<LeftMouse>*
+<LeftMouse> Set the current cursor position. If Visual mode is
+ active it is stopped. Only when 'mouse' option is
+ contains 'n' or 'a'. If the position is within 'so'
+ lines from the last line on the screen the text is
+ scrolled up. If the position is within 'so' lines from
+ the first line on the screen the text is scrolled
+ down.
+
+ *<RightMouse>*
+<RightMouse> Start Visual mode if it is not active. The text from
+ the cursor position to the position of the click is
+ highlighted. If Visual mode was already active move
+ the start or end of the highlighted text, which ever
+ is closest, to the position of the click. Only when
+ 'mouse' option contains 'n' or 'a'.
+
+ Note: when 'mousemodel' is set to "popup",
+ <S-LeftMouse> has to be used instead of <RightMouse>.
+
+ *<LeftRelease>*
+<LeftRelease> This works like a <LeftMouse>, if it is not at
+ the same position as <LeftMouse>. In an older version
+ of xterm you won't see the selected area until the
+ button is released, unless there is access to the
+ display where the xterm is running (via the DISPLAY
+ environment variable or the -display argument). Only
+ when 'mouse' option contains 'n' or 'a'.
+
+If Visual mode is not active and the "v", "V" or CTRL-V is preceded with a
+count, the size of the previously highlighted area is used for a start. You
+can then move the end of the highlighted area and give an operator. The type
+of the old area is used (character, line or blockwise).
+- Linewise Visual mode: The number of lines is multiplied with the count.
+- Blockwise Visual mode: The number of lines and columns is multiplied with
+ the count.
+- Normal Visual mode within one line: The number of characters is multiplied
+ with the count.
+- Normal Visual mode with several lines: The number of lines is multiplied
+ with the count, in the last line the same number of characters is used as
+ in the last line in the previously highlighted area.
+The start of the text is the Cursor position. If the "$" command was used as
+one of the last commands to extend the highlighted text, the area will be
+extended to the rightmost column of the longest line.
+
+If you want to highlight exactly the same area as the last time, you can use
+"gv" |gv| |v_gv|.
+
+ *v_CTRL-C*
+CTRL-C In Visual mode: Stop Visual mode. When insert mode is
+ pending (the mode message shows
+ "-- (insert) VISUAL --"), it is also stopped.
+
+==============================================================================
+3. Changing the Visual area *visual-change*
+
+ *v_o*
+o Go to Other end of highlighted text: The current
+ cursor position becomes the start of the highlighted
+ text and the cursor is moved to the other end of the
+ highlighted text. The highlighted area remains the
+ same.
+
+ *v_O*
+O Go to Other end of highlighted text. This is like
+ "o", but in Visual block mode the cursor moves to the
+ other corner in the same line. When the corner is at
+ a character that occupies more than one position on
+ the screen (e.g., a <Tab>), the highlighted text may
+ change.
+
+ *v_$*
+When the "$" command is used with blockwise Visual mode, the right end of the
+highlighted text will be determined by the longest highlighted line. This
+stops when a motion command is used that does not move straight up or down.
+
+For moving the end of the block many commands can be used, but you cannot
+use Ex commands, commands that make changes or abandon the file. Commands
+(starting with) ".pPiIaAO&", CTRL-^, "Z", CTRL-], CTRL-T, CTRL-R, CTRL-I
+and CTRL-O cause a beep and Visual mode continues.
+
+When switching to another window on the same buffer, the cursor position in
+that window is adjusted, so that the same Visual area is still selected. This
+is especially useful to view the start of the Visual area in one window, and
+the end in another. You can then use <RightMouse> (or <S-LeftMouse> when
+'mousemodel' is "popup") to move either end of the Visual area.
+
+==============================================================================
+4. Operating on the Visual area *visual-operators*
+
+The operators that can be used are:
+ ~ switch case |v_~|
+ d delete |v_d|
+ c change (4) |v_c|
+ y yank |v_y|
+ > shift right (4) |v_>|
+ < shift left (4) |v_<|
+ ! filter through external command (1) |v_!|
+ = filter through 'equalprg' option command (1) |v_=|
+ gq format lines to 'textwidth' length (1) |v_gq|
+
+The objects that can be used are:
+ aw a word (with white space) |v_aw|
+ iw inner word |v_iw|
+ aW a WORD (with white space) |v_aW|
+ iW inner WORD |v_iW|
+ as a sentence (with white space) |v_as|
+ is inner sentence |v_is|
+ ap a paragraph (with white space) |v_ap|
+ ip inner paragraph |v_ip|
+ ab a () block (with parenthesis) |v_ab|
+ ib inner () block |v_ib|
+ aB a {} block (with braces) |v_aB|
+ iB inner {} block |v_iB|
+ a< a <> block (with <>) |v_a<|
+ i< inner <> block |v_i<|
+ a[ a [] block (with []) |v_a[|
+ i[ inner [] block |v_i[|
+
+Additionally the following commands can be used:
+ : start ex command for highlighted lines (1) |v_:|
+ r change (4) |v_r|
+ s change |v_s|
+ C change (2)(4) |v_C|
+ S change (2) |v_S|
+ R change (2) |v_R|
+ x delete |v_x|
+ D delete (3) |v_D|
+ X delete (2) |v_X|
+ Y yank (2) |v_Y|
+ p put |v_p|
+ J join (1) |v_J|
+ U make uppercase |v_U|
+ u make lowercase |v_u|
+ ^] find tag |v_CTRL-]|
+ I block insert |v_b_I|
+ A block append |v_b_A|
+
+(1): Always whole lines, see |:visual_example|.
+(2): Whole lines when not using CTRL-V.
+(3): Whole lines when not using CTRL-V, delete until the end of the line when
+ using CTRL-V.
+(4): When using CTRL-V operates on the block only.
+
+Note that the ":vmap" command can be used to specifically map keys in Visual
+mode. For example, if you would like the "/" command not to extend the Visual
+area, but instead take the highlighted text and search for that: >
+ :vmap / y/<C-R>"<CR>
+(In the <> notation |<>|, when typing it you should type it literally; you
+need to remove the 'B' and '<' flags from 'cpoptions'.)
+
+If you want to give a register name using the """ command, do this just before
+typing the operator character: "v{move-around}"xd".
+
+If you want to give a count to the command, do this just before typing the
+operator character: "v{move-around}3>" (move lines 3 indents to the right).
+
+ *{move-around}*
+The {move-around} is any sequence of movement commands. Note the difference
+with {motion}, which is only ONE movement command.
+
+==============================================================================
+5. Blockwise operators *blockwise-operators*
+
+{not available when compiled without the |+visualextra| feature}
+
+Reminder: Use 'virtualedit' to be able to select blocks that start or end
+after the end of a line or halfway a tab.
+
+Visual-block Insert *v_b_I*
+With a blockwise selection, I{string}<ESC> will insert {string} at the start
+of block on every line of the block, provided that the line extends into the
+block. Thus lines that are short will remain unmodified. TABs are split to
+retain visual columns.
+See |v_b_I_example|.
+
+Visual-block Append *v_b_A*
+With a blockwise selection, A{string}<ESC> will append {string} to the end of
+block on every line of the block. There is some differing behavior where the
+block RHS is not straight, due to different line lengths:
+
+1. Block was created with <C-v>$
+ In this case the string is appended to the end of each line.
+2. Block was created with <C-v>{move-around}
+ In this case the string is appended to the end of the block on each line,
+ and whitespace is inserted to pad to the end-of-block column.
+See |v_b_A_example|.
+Note: "I" and "A" behave differently for lines that don't extend into the
+selected block. This was done intentionally, so that you can do it the way
+you want.
+
+Visual-block change *v_b_c*
+All selected text in the block will be replaced by the same text string. When
+using "c" the selected text is deleted and Insert mode started. You can then
+enter text (without a line break). When you hit <Esc>, the same string is
+inserted in all previously selected lines.
+
+Visual-block Change *v_b_C*
+Like using "c", but the selection is extended until the end of the line for
+all lines.
+
+ *v_b_<*
+Visual-block Shift *v_b_>*
+The block is shifted by 'shiftwidth'. The RHS of the block is irrelevant. The
+LHS of the block determines the point from which to apply a right shift, and
+padding includes TABs optimally according to 'ts' and 'et'. The LHS of the
+block determines the point upto which to shift left.
+ Note: v_< padding is buggy if the Visual Block starts and ends in the same
+ TAB. (Vim 5.4c).
+See |v_b_>_example|.
+See |v_b_<_example|.
+
+Visual-block Replace *v_b_r*
+Every screen char in the highlighted region is replaced with the same char, ie
+TABs are split and the virtual whitespace is replaced, maintaining screen
+layout.
+See |v_b_r_example|.
+
+
+==============================================================================
+6. Repeating *visual-repeat*
+
+When repeating a Visual mode operator, the operator will be applied to the
+same amount of text as the last time:
+- Linewise Visual mode: The same number of lines.
+- Blockwise Visual mode: The same number of lines and columns.
+- Normal Visual mode within one line: The same number of characters.
+- Normal Visual mode with several lines: The same number of lines, in the
+ last line the same number of characters as in the last line the last time.
+The start of the text is the Cursor position. If the "$" command was used as
+one of the last commands to extend the highlighted text, the repeating will
+be applied up to the rightmost column of the longest line.
+
+
+==============================================================================
+7. Examples *visual-examples*
+
+ *:visual_example*
+Currently the ":" command works on whole lines only. When you select part of
+a line, doing something like ":!date" will replace the whole line. If you
+want only part of the line to be replaced you will have to make a mapping for
+it. In a future release ":" may work on partial lines.
+
+Here is an example, to replace the selected text with the output of "date": >
+ :vmap _a <Esc>`>a<CR><Esc>`<i<CR><Esc>!!date<CR>kJJ
+
+(In the <> notation |<>|, when typing it you should type it literally; you
+need to remove the 'B' and '<' flags from 'cpoptions')
+
+What this does is:
+<Esc> stop Visual mode
+`> go to the end of the Visual area
+a<CR><Esc> break the line after the Visual area
+`< jump to the start of the Visual area
+i<CR><Esc> break the line before the Visual area
+!!date<CR> filter the Visual text through date
+kJJ Join the lines back together
+
+ *visual-search*
+Here is an idea for a mapping that makes it possible to do a search for the
+selected text: >
+ :vmap X y/<C-R>"<CR>
+
+(In the <> notation |<>|, when typing it you should type it literally; you
+need to remove the 'B' and '<' flags from 'cpoptions')
+
+Note that special characters (like '.' and '*') will cause problems.
+
+Visual-block Examples *blockwise-examples*
+With the following text, I will indicate the commands to produce the block and
+the results below. In all cases, the cursor begins on the 'a' in the first
+line if the test text.
+The following modeline settings are assumed ":ts=8:sw=4:".
+
+It will be helpful to
+:set hls
+/<TAB>
+where <TAB> is a real TAB. This helps visualise the operations.
+
+The test text is:
+
+abcdefghijklmnopqrstuvwxyz
+abc defghijklmnopqrstuvwxyz
+abcdef ghi jklmnopqrstuvwxyz
+abcdefghijklmnopqrstuvwxyz
+
+1. fo<C-v>3jISTRING<ESC> *v_b_I_example*
+
+abcdefghijklmnSTRINGopqrstuvwxyz
+abc STRING defghijklmnopqrstuvwxyz
+abcdef ghi STRING jklmnopqrstuvwxyz
+abcdefghijklmnSTRINGopqrstuvwxyz
+
+2. fo<C-v>3j$ASTRING<ESC> *v_b_A_example*
+
+abcdefghijklmnopqrstuvwxyzSTRING
+abc defghijklmnopqrstuvwxyzSTRING
+abcdef ghi jklmnopqrstuvwxyzSTRING
+abcdefghijklmnopqrstuvwxyzSTRING
+
+3. fo<C-v>3j3l<.. *v_b_<_example*
+
+abcdefghijklmnopqrstuvwxyz
+abc defghijklmnopqrstuvwxyz
+abcdef ghi jklmnopqrstuvwxyz
+abcdefghijklmnopqrstuvwxyz
+
+4. fo<C-v>3j>.. *v_b_>_example*
+
+abcdefghijklmn opqrstuvwxyz
+abc defghijklmnopqrstuvwxyz
+abcdef ghi jklmnopqrstuvwxyz
+abcdefghijklmn opqrstuvwxyz
+
+5. fo<C-v>5l3jrX *v_b_r_example*
+
+abcdefghijklmnXXXXXXuvwxyz
+abc XXXXXXhijklmnopqrstuvwxyz
+abcdef ghi XXXXXX jklmnopqrstuvwxyz
+abcdefghijklmnXXXXXXuvwxyz
+
+==============================================================================
+8. Select mode *Select* *Select-mode*
+
+Select mode looks like Visual mode, but the commands accepted are quite
+different. This resembles the selection mode in Microsoft Windows.
+When the 'showmode' option is set, "-- SELECT --" is shown in the last line.
+
+Entering Select mode:
+- Using the mouse to select an area, and 'selectmode' contains "mouse".
+ 'mouse' must also contain a flag for the current mode.
+- Using a non-printable movement command, with the Shift key pressed, and
+ 'selectmode' contains "key". For example: <S-Left> and <S-End>. 'keymodel'
+ must also contain "startsel".
+- Using "v", "V" or CTRL-V command, and 'selectmode' contains "cmd".
+- Using "gh", "gH" or "g_CTRL-H" command in Normal mode.
+- From Visual mode, press CTRL-G. *v_CTRL-G*
+
+Commands in Select mode:
+- Printable characters, <NL> and <CR> cause the selection to be deleted, and
+ Vim enters Insert mode. The typed character is inserted.
+- Non-printable movement commands, with the Shift key pressed, extend the
+ selection. 'keymodel' must include "startsel".
+- Non-printable movement commands, with the Shift key NOT pressed, stop Select
+ mode. 'keymodel' must include "stopsel".
+- ESC stops Select mode.
+- CTRL-O switches to Visual mode for the duration of one command. *v_CTRL-O*
+- CTRL-G switches to Visual mode.
+
+Otherwise, typed characters are handled as in Visual mode.
+
+When using an operator in Select mode, and the selection is linewise, the
+selected lines are operated upon, but like in characterwise selection. For
+example, when a whole line is deleted, it can later be pasted halfway a line.
+
+
+Mappings and menus in Select mode. *Select-mode-mapping*
+
+In Select mode the mappings and menus of Visual mode are used. Before it is
+executed, Vim automatically switches to Visual mode, so that the same
+behavior as in Visual mode is effective.
+
+After the mapping or menu finishes, the selection is enabled again and Select
+mode entered, unless the selected area was deleted, another buffer became
+the current one or the window layout was changed.
+
+When a character was typed that causes the selection to be deleted and Insert
+mode started, Insert mode mappings are applied to this character. This may
+cause some confusion, because it means Insert mode mappings apply to a
+character typed in Select mode. Language mappings apply as well.
+
+ *gV* *v_gV*
+gV Avoid the automatic reselection of the Visual area
+ after a Select mode mapping or menu has finished.
+ Put this just before the end of the mapping or menu.
+ At least it should be after any operations on the
+ selection.
+
+ *gh*
+gh Start Select mode, characterwise. This is like "v",
+ but starts Select mode instead of Visual mode.
+ Mnemonic: "get highlighted".
+
+ *gH*
+gH Start Select mode, linewise. This is like "V",
+ but starts Select mode instead of Visual mode.
+ Mnemonic: "get Highlighted".
+
+ *g_CTRL-H*
+g CTRL-H Start Select mode, blockwise. This is like CTRL-V,
+ but starts Select mode instead of Visual mode.
+ Mnemonic: "get Highlighted".
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
new file mode 100644
index 000000000..69f37c943
--- /dev/null
+++ b/runtime/doc/windows.txt
@@ -0,0 +1,1123 @@
+*windows.txt* For Vim version 7.0aa. Last change: 2004 Apr 29
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+
+
+Editing with multiple windows and buffers. *windows* *buffers*
+
+The commands which have been added to use multiple windows and buffers are
+explained here. Additionally, there are explanations for commands that work
+differently when used in combination with more than one window.
+
+The basics are explained in chapter 7 and 8 of the user manual |usr_07.txt|
+|usr_08.txt|.
+
+1. Introduction |windows-intro|
+2. Starting Vim |windows-starting|
+3. Opening and closing a window |opening-window|
+4. Moving cursor to other windows |window-move-cursor|
+5. Moving windows around |window-moving|
+6. Window resizing |window-resize|
+7. Argument and buffer list commands |buffer-list|
+8. Do a command in all buffers or windows |list-repeat|
+9. Tag or file name under the cursor |window-tag|
+10. The preview window |preview-window|
+11. Using hidden buffers |buffer-hidden|
+12. Special kinds of buffers |special-buffers|
+
+{Vi does not have any of these commands}
+{not able to use multiple windows when the |+windows| feature was disabled at
+compile time}
+{not able to use vertically split windows when the |+vertsplit| feature was
+disabled at compile time}
+
+==============================================================================
+1. Introduction *windows-intro*
+
+A window is a viewport onto a buffer. You can use multiple windows on one
+buffer, or several windows on different buffers.
+
+A buffer is a file loaded into memory for editing. The original file remains
+unchanged until you write the buffer to the file.
+
+A buffer can be in one of three states:
+
+ *active-buffer*
+active: The buffer is displayed in a window. If there is a file for this
+ buffer, it has been read into the buffer. The buffer may have been
+ modified since then and thus be different from the file.
+ *hidden-buffer*
+hidden: The buffer is not displayed. If there is a file for this buffer, it
+ has been read into the buffer. Otherwise it's the same as an active
+ buffer, you just can't see it.
+ *inactive-buffer*
+inactive: The buffer is not displayed and does not contain anything. Options
+ for the buffer are remembered if the file was once loaded. It can
+ contain marks from the |viminfo| file. But the buffer doesn't
+ contain text.
+
+In a table:
+
+state displayed loaded ":buffers" ~
+ in window shows ~
+active yes yes 'a'
+hidden no yes 'h'
+inactive no no ' '
+
+Note: All CTRL-W commands can also be executed with |:wincmd|, for those
+places where a Normal mode command can't be used or is inconvenient.
+
+==============================================================================
+2. Starting Vim *windows-starting*
+
+By default, Vim starts with one window, just like Vi.
+
+The "-o" and "-O" arguments to Vim can be used to open a window for each file
+in the argument list. The "-o" argument will split the windows horizontally;
+the "-O" argument will split the windows vertically. If both "-o" and "-O"
+are given, the last one encountered will be used to determine the split
+orientation. For example, this will open three windows, split horizontally: >
+ vim -o file1 file2 file3
+
+"-oN", where N is a decimal number, opens N windows split horizontally. If
+there are more file names than windows, only N windows are opened and some
+files do not get a window. If there are more windows than file names, the
+last few windows will be editing empty buffers. Similarly, "-ON" opens N
+windows split vertically, with the same restrictions.
+
+If there are many file names, the windows will become very small. You might
+want to set the 'winheight' and/or 'winwidth' options to create a workable
+situation.
+
+Buf/Win Enter/Leave |autocommand|s are not executed when opening the new
+windows and reading the files, that's only done when they are really entered.
+
+ *status-line*
+A status line will be used to separate windows. The 'laststatus' option tells
+when the last window also has a status line:
+ 'laststatus' = 0 never a status line
+ 'laststatus' = 1 status line if there is more than one window
+ 'laststatus' = 2 always a status line
+
+You can change the contents of the status line with the 'statusline' option.
+
+Normally, inversion is used to display the status line. This can be changed
+with the 's' character in the 'highlight' option. For example, "sb" sets it to
+bold characters. If no highlighting is used for the status line ("sn"), the
+'^' character is used for the current window, and '=' for other windows. If
+the mouse is supported and enabled with the 'mouse' option, a status line can
+be dragged to resize windows.
+
+Note: If you expect your status line to be in reverse video and it isn't,
+check if the 'highlight' option contains "si". In version 3.0, this meant to
+invert the status line. Now it should be "sr", reverse the status line, as
+"si" now stands for italic! If italic is not available on your terminal, the
+status line is inverted anyway; you will only see this problem on terminals
+that have termcap codes for italics.
+
+==============================================================================
+3. Opening and closing a window *opening-window* *E36*
+
+CTRL-W s *CTRL-W_s*
+CTRL-W S *CTRL-W_S*
+CTRL-W CTRL-S *CTRL-W_CTRL-S*
+:[N]sp[lit] [++opt] [+cmd] *:sp* *:split*
+ Split current window in two. The result is two viewports on
+ the same file. Make new window N high (default is to use half
+ the height of the current window). Reduces the current window
+ height to create room (and others, if the 'equalalways' option
+ is set and 'eadirection' isn't "hor").
+ Note: CTRL-S does not work on all terminals and might block
+ further input, use CTRL-Q to get going again.
+ Also see |++opt| and |+cmd|.
+
+CTRL-W CTRL-V *CTRL-W_CTRL-V*
+CTRL-W v *CTRL-W_v*
+:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
+ Like |:split|, but split vertically. If 'equalalways' is set
+ and 'eadirection' isn't "ver" the windows will be spread out
+ horizontally, unless a width was specified.
+ Note: In other places CTRL-Q does the same as CTRL-V, but here
+ it doesn't!
+
+CTRL-W n *CTRL-W_n*
+CTRL-W CTRL_N *CTRL-W_CTRL-N*
+:[N]new [++opt] [+cmd] *:new*
+ Create a new window and start editing an empty file in it.
+ Make new window N high (default is to use half the existing
+ height). Reduces the current window height to create room (and
+ others, if the 'equalalways' option is set and 'eadirection'
+ isn't "hor").
+ Also see |++opt| and |+cmd|.
+ If 'fileformats' is not empty, the first format given will be
+ used for the new buffer. If 'fileformats' is empty, the
+ 'fileformat' of the current buffer is used. This can be
+ overridden with the |++opt| argument.
+ Autocommands are executed in this order:
+ 1. WinLeave for the current window
+ 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.
+
+:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
+ Like |:new|, but split vertically. If 'equalalways' is set
+ and 'eadirection' isn't "ver" the windows will be spread out
+ horizontally, unless a width was specified.
+
+:[N]new [++opt] [+cmd] {file}
+:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
+ Create a new window and start editing file {file} in it.
+ If [+cmd] is given, execute the command when the file has been
+ loaded |+cmd|.
+ Also see |++opt|.
+ Make new window N high (default is to use half the existing
+ height). Reduces the current window height to create room
+ (and others, if the 'equalalways' option is set).
+
+:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
+ Same as ":split", but set 'readonly' option for this buffer.
+
+:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
+ Same as ":split", but search for {file} in 'path'. Doesn't
+ split if {file} is not found.
+
+CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
+CTRL-W ^ Does ":split #", split window in two and edit alternate file.
+ When a count is given, it becomes ":split #N", split window
+ and edit buffer N.
+
+Note that the 'splitbelow' and 'splitright' options influence where a new
+window will appear.
+
+ *:vert* *:vertical*
+:vert[ical] {cmd}
+ Execute {cmd}. If it contains a command that splits a window,
+ it will be split vertically.
+
+:lefta[bove] {cmd} *:lefta* *:leftabove*
+:abo[veleft] {cmd} *:abo* *:aboveleft*
+ Execute {cmd}. If it contains a command that splits a window,
+ it will be opened left (vertical split) or above (horizontal
+ split) the current window. Overrules 'splitbelow' and
+ 'splitright'.
+
+:rightb[elow] {cmd} *:rightb* *:rightbelow*
+:bel[owright] {cmd} *:bel* *:belowright*
+ Execute {cmd}. If it contains a command that splits a window,
+ it will be opened right (vertical split) or below (horizontal
+ split) the current window. Overrules 'splitbelow' and
+ 'splitright'.
+
+ *:topleft* *E442*
+:to[pleft] {cmd}
+ Execute {cmd}. If it contains a command that splits a window,
+ it will appear at the top and occupy the full width of the Vim
+ window. When the split is vertical the window appears at the
+ far left and occupies the full height of the Vim window.
+
+ *:botright*
+:bo[tright] {cmd}
+ Execute {cmd}. If it contains a command that splits a window,
+ it will appear at the bottom and occupy the full width of the
+ Vim window. When the split is vertical the window appears at
+ the far right and occupies the full height of the Vim window.
+
+These command modifiers can be combined to make a vertically split window
+occupy the full height. Example: >
+ :vertical topleft edit tags
+Opens a vertically split, full-height window on the "tags" file at the far
+left of the Vim window.
+
+
+Closing a window
+----------------
+
+CTRL-W q *CTRL-W_q*
+CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
+:q[uit] Quit current window. When quitting the last window (not
+ counting a help window), exit Vim.
+ When 'hidden' is set, and there is only one window for the
+ current buffer, it becomes hidden.
+ When 'hidden' is not set, and there is only one window for the
+ current buffer, and the buffer was changed, the command fails.
+ (Note: CTRL-Q does not work on all terminals)
+
+:q[uit]! Quit current window. If this was the last window for a buffer,
+ any changes to that buffer are lost. When quitting the last
+ window (not counting help windows), exit Vim. The contents of
+ the buffer are lost, even when 'hidden' is set.
+
+CTRL-W c *CTRL-W_c* *:clo* *:close*
+:clo[se][!] Close current window. When the 'hidden' option is set, or
+ when the buffer was changed and the [!] is used, the buffer
+ becomes hidden (unless there is another window editing it).
+ This command fails when: *E444*
+ - There is only one window on the screen.
+ - When 'hidden' is not set, [!] is not used, the buffer has
+ changes, and there is no other window on this buffer.
+ Changes to the buffer are not written and won't get lost, so
+ this is a "safe" command.
+
+CTRL-W CTRL-C *CTRL-W_CTRL-C*
+ You might have expected that CTRL-W CTRL-C closes the current
+ window, but that does not work, because the CTRL-C cancels the
+ command.
+
+ *:hide*
+:hid[e] Quit current window, unless it is the last window on the
+ screen. The buffer becomes hidden (unless there is another
+ window editing it or 'bufhidden' is "unload" or "delete").
+ The value of 'hidden' is irrelevant for this command.
+ Changes to the buffer are not written and won't get lost, so
+ this is a "safe" command.
+
+:hid[e] {cmd} Execute {cmd} with 'hidden' is set. The previous value of
+ 'hidden' is restored after {cmd} has been executed.
+ Example: >
+ :hide edit Makefile
+< This will edit "Makefile", and hide the current buffer if it
+ has any changes.
+
+CTRL-W o *CTRL-W_o* *E445*
+CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
+:on[ly][!] Make the current window the only one on the screen. All other
+ windows are closed.
+ When the 'hidden' option is set, all buffers in closed windows
+ become hidden.
+ When 'hidden' is not set, and the 'autowrite' option is set,
+ modified buffers are written. Otherwise, windows that have
+ buffers that are modified are not removed, unless the [!] is
+ given, then they become hidden. But modified buffers are
+ never abandoned, so changes cannot get lost.
+
+==============================================================================
+4. Moving cursor to other windows *window-move-cursor*
+
+CTRL-W <Down> *CTRL-W_<Down>*
+CTRL-W CTRL-J *CTRL-W_CTRL-J* *CTRL-W_j*
+CTRL-W j Move cursor to Nth window below current one. Uses the cursor
+ position to select between alternatives.
+
+CTRL-W <Up> *CTRL-W_<Up>*
+CTRL-W CTRL-K *CTRL-W_CTRL-K* *CTRL-W_k*
+CTRL-W k Move cursor to Nth window above current one. Uses the cursor
+ position to select between alternatives.
+
+CTRL-W <Left> *CTRL-W_<Left>*
+CTRL-W CTRL-H *CTRL-W_CTRL-H*
+CTRL-W <BS> *CTRL-W_<BS>* *CTRL-W_h*
+CTRL-W h Move cursor to Nth window left of current one. Uses the
+ cursor position to select between alternatives.
+
+CTRL-W <Right> *CTRL-W_<Right>*
+CTRL-W CTRL-L *CTRL-W_CTRL-L* *CTRL-W_l*
+CTRL-W l Move cursor to Nth window right of current one. Uses the
+ cursor position to select between alternatives.
+
+CTRL-W w *CTRL-W_w* *CTRL-W_CTRL-W*
+CTRL-W CTRL-W Without count: move cursor to window below/right of the
+ current one. If there is no window below or right, go to
+ top-left window.
+ With count: go to Nth window (windows are numbered from
+ top-left to bottom-right). To obtain the window number see
+ |bufwinnr()| and |winnr()|.
+
+ *CTRL-W_W*
+CTRL-W W Without count: move cursor to window above/left of current
+ one. If there is no window above or left, go to bottom-right
+ window. With count: go to Nth window (windows are numbered
+ from top-left to bottom-right).
+
+CTRL-W t *CTRL-W_t* *CTRL-W_CTRL-T*
+CTRL-W CTRL-T Move cursor to top-left window.
+
+CTRL-W b *CTRL-W_b* *CTRL-W_CTRL-B*
+CTRL-W CTRL-B Move cursor to bottom-right window.
+
+CTRL-W p *CTRL-W_p* *CTRL-W_CTRL-P*
+CTRL-W CTRL-P Go to previous (last accessed) window.
+
+ *CTRL-W_P* *E441*
+CTRL-W P Go to preview window. When there is no preview window this is
+ an error.
+ {not available when compiled without the |+quickfix| feature}
+
+If Visual mode is active and the new window is not for the same buffer, the
+Visual mode is ended. If the window is on the same buffer, the cursor
+position is set to keep the same Visual area selected.
+
+ *:winc* *:wincmd*
+These commands can also be executed with ":wincmd":
+
+:[count]winc[md] {arg}
+ Like executing CTRL-W [count] {arg}. Example: >
+ :wincmd j
+< Moves to the window below the current one.
+ This command is useful when a Normal mode cannot be used (for
+ the |CursorHold| autocommand event). Or when a Normal mode
+ command is inconvenient.
+ The count can also be a window number. Example: >
+ :exe nr . "wincmd w"
+< This goes to window "nr".
+
+==============================================================================
+5. Moving windows around *window-moving*
+
+CTRL-W r *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
+CTRL-W CTRL-R Rotate windows downwards/rightwards. The first window becomes
+ the second one, the second one becomes the third one, etc.
+ The last window becomes the first window. The cursor remains
+ in the same window.
+ This only works within the row or column of windows that the
+ current window is in.
+
+ *CTRL-W_R*
+CTRL-W R Rotate windows upwards/leftwards. The second window becomes
+ the first one, the third one becomes the second one, etc. The
+ first window becomes the last window. The cursor remains in
+ the same window.
+ This only works within the row or column of windows that the
+ current window is in.
+
+CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*
+CTRL-W CTRL-X Without count: Exchange current window with next one. If there
+ is no next window, exchange with previous window.
+ With count: Exchange current window with Nth window (first
+ window is 1). The cursor is put in the other window.
+ When vertical and horizontal window splits are mixed, the
+ exchange is only done in the row or column of windows that the
+ current window is in.
+
+The following commands can be used to change the window layout. For example,
+when there are two vertically split windows, CTRL-W K will change that in
+horizontally split windows. CTRL-W H does it the other way around.
+
+ *CTRL-W_K*
+CTRL-W K Move the current window to be at the very top, using the full
+ width of the screen. This works like closing the current
+ window and then creating another one with ":topleft split",
+ except that the current window contents is used for the new
+ window.
+
+ *CTRL-W_J*
+CTRL-W J Move the current window to be at the very bottom, using the
+ full width of the screen. This works like closing the current
+ window and then creating another one with ":botright split",
+ except that the current window contents is used for the new
+ window.
+
+ *CTRL-W_H*
+CTRL-W H Move the current window to be at the far left, using the
+ full height of the screen. This works like closing the
+ current window and then creating another one with
+ ":vert topleft split", except that the current window contents
+ is used for the new window.
+ {not available when compiled without the +vertsplit feature}
+
+ *CTRL-W_L*
+CTRL-W L Move the current window to be at the far right, using the full
+ height of the screen. This works like closing the
+ current window and then creating another one with
+ ":vert botright split", except that the current window
+ contents is used for the new window.
+ {not available when compiled without the +vertsplit feature}
+
+==============================================================================
+6. Window resizing *window-resize*
+
+ *CTRL-W_=*
+CTRL-W = Make all windows (almost) equally high and wide, but use
+ 'winheight' and 'winwidth' for the current window.
+
+:res[ize] -N *:res* *:resize* *CTRL-W_-*
+CTRL-W - Decrease current window height by N (default 1).
+ If used after 'vertical': decrease width by N.
+
+:res[ize] +N *CTRL-W_+*
+CTRL-W + Increase current window height by N (default 1).
+ If used after 'vertical': increase width by N.
+
+:res[ize] [N]
+CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*
+CTRL-W _ Set current window height to N (default: highest possible).
+
+z{nr}<CR> Set current window height to {nr}.
+
+ *CTRL-W_<*
+CTRL-W < Decrease current window width by N (default 1).
+
+ *CTRL-W_>*
+CTRL-W > Increase current window width by N (default 1).
+
+:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*
+CTRL-W | Set current window width to N (default: widest possible).
+
+You can also resize a window by dragging a status line up or down with the
+mouse. Or by dragging a vertical separator line left or right. This only
+works if the version of Vim that is being used supports the mouse and the
+'mouse' option has been set to enable it.
+
+The option 'winheight' ('wh') is used to set the minimal window height of the
+current window. This option is used each time another window becomes the
+current window. If the option is '0', it is disabled. Set 'winheight' to a
+very large value, e.g., '9999', to make the current window always fill all
+available space. Set it to a reasonable value, e.g., '10', to make editing in
+the current window comfortable.
+
+The equivalent 'winwidth' ('wiw') option is used to set the minimal width of
+the current window.
+
+When the option 'equalalways' ('ea') is set, all the windows are automatically
+made the same size after splitting or closing a window. If you don't set this
+option, splitting a window will reduce the size of the current window and
+leave the other windows the same. When closing a window, the extra lines are
+given to the window above it.
+
+The 'eadirection' option limits the direction in which the 'equalalways'
+option is applied. The default "both" resizes in both directions. When the
+value is "ver" only the heights of windows are equalized. Use this when you
+have manually resized a vertically split window and want to keep this width.
+Likewise, "hor" causes only the widths of windows to be equalized.
+
+The option 'cmdheight' ('ch') is used to set the height of the command-line.
+If you are annoyed by the |hit-enter| prompt for long messages, set this
+option to 2 or 3.
+
+If there is only one window, resizing that window will also change the command
+line height. If there are several windows, resizing the current window will
+also change the height of the window below it (and sometimes the window above
+it).
+
+The minimal height and width of a window is set with 'winminheight' and
+'winminwidth'. These are hard values, a window will never become smaller.
+
+==============================================================================
+7. Argument and buffer list commands *buffer-list*
+
+ args list buffer list meaning ~
+1. :[N]argument [N] 11. :[N]buffer [N] to arg/buf N
+2. :[N]next [file ..] 12. :[N]bnext [N] to Nth next arg/buf
+3. :[N]Next [N] 13. :[N]bNext [N] to Nth previous arg/buf
+4. :[N]previous [N] 14. :[N]bprevious [N] to Nth previous arg/buf
+5. :rewind / :first 15. :brewind / :bfirst to first arg/buf
+6. :last 16. :blast to last arg/buf
+7. :all 17. :ball edit all args/buffers
+ 18. :unhide edit all loaded buffers
+ 19. :[N]bmod [N] to Nth modified buf
+
+ split & args list split & buffer list meaning ~
+21. :[N]sargument [N] 31. :[N]sbuffer [N] split + to arg/buf N
+22. :[N]snext [file ..] 32. :[N]sbnext [N] split + to Nth next arg/buf
+23. :[N]sNext [N] 33. :[N]sbNext [N] split + to Nth previous arg/buf
+24. :[N]sprevious [N] 34. :[N]sbprevious [N] split + to Nth previous arg/buf
+25. :srewind / :sfirst 35. :sbrewind / :sbfirst split + to first arg/buf
+26. :slast 36. :sblast split + to last arg/buf
+27. :sall 37: :sball edit all args/buffers
+ 38. :sunhide edit all loaded buffers
+ 39. :[N]sbmod [N] split + to Nth modified buf
+
+40. :args list of arguments
+41. :buffers list of buffers
+
+The meaning of [N] depends on the command:
+ [N] is number of buffers to go forward/backward on ?2, ?3, and ?4
+ [N] is an argument number, defaulting to current argument, for 1 and 21
+ [N] is a buffer number, defaulting to current buffer, for 11 and 31
+ [N] is a count for 19 and 39
+
+Note: ":next" is an exception, because it must accept a list of file names
+for compatibility with Vi.
+
+
+The argument list and multiple windows
+--------------------------------------
+
+The current position in the argument list can be different for each window.
+Remember that when doing ":e file", the position in the argument list stays
+the same, but you are not editing the file at that position. To indicate
+this, the file message (and the title, if you have one) shows
+"(file (N) of M)", where "(N)" is the current position in the file list, and
+"M" the number of files in the file list.
+
+All the entries in the argument list are added to the buffer list. Thus, you
+can also get to them with the buffer list commands, like ":bnext".
+
+:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
+:[N]sal[l][!] [N]
+ Rearrange the screen to open one window for each argument.
+ All other windows are closed. When a count is given, this is
+ the maximum number of windows to open.
+ When the 'hidden' option is set, all buffers in closed windows
+ become hidden.
+ When 'hidden' is not set, and the 'autowrite' option is set,
+ modified buffers are written. Otherwise, windows that have
+ buffers that are modified are not removed, unless the [!] is
+ given, then they become hidden. But modified buffers are
+ never abandoned, so changes cannot get lost.
+ [N] is the maximum number of windows to open. 'winheight'
+ also limits the number of windows opened ('winwidth' if
+ |:vertical| was prepended).
+ Buf/Win Enter/Leave autocommands are not executed for the new
+ windows here, that's only done when they are really entered.
+
+:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
+ Short for ":split | argument [N]": split window and go to Nth
+ argument. But when there is no such argument, the window is
+ not split. Also see |++opt| and |+cmd|.
+
+:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
+ Short for ":split | [N]next": split window and go to Nth next
+ argument. But when there is no next file, the window is not
+ split. Also see |++opt| and |+cmd|.
+
+:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
+:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
+ Short for ":split | [N]Next": split window and go to Nth
+ previous argument. But when there is no previous file, the
+ window is not split. Also see |++opt| and |+cmd|.
+
+ *:sre* *:srewind*
+:sre[wind][!] [++opt] [+cmd]
+ Short for ":split | rewind": split window and go to first
+ argument. But when there is no argument list, the window is
+ not split. Also see |++opt| and |+cmd|.
+
+ *:sfir* *:sfirst*
+:sfir[st [++opt] [+cmd]
+ Same as ":srewind".
+
+ *:sla* *:slast*
+:sla[st][!] [++opt] [+cmd]
+ Short for ":split | last": split window and go to last
+ argument. But when there is no argument list, the window is
+ not split. Also see |++opt| and |+cmd|.
+
+ *:dr* *:drop*
+:dr[op] {file} ..
+ Edit the first {file} in a window.
+ - If the file is already open in a window change to that
+ window.
+ - If the file is not open in a window edit the file in the
+ current window. If the current buffer can't be |abandon|ed,
+ the window is split first.
+ The |argument-list| is set, like with the |:next| command.
+ The purpose of this command is that it can be used from a
+ program that wants Vim to edit another file, e.g., a debugger.
+ {only available when compiled with the +gui feature}
+
+==============================================================================
+8. Do a command in all buffers or windows *list-repeat*
+
+ *:windo*
+:windo[!] {cmd} Execute {cmd} in each window.
+ It works like doing this: >
+ CTRL-W t
+ :{cmd}
+ CTRL-W w
+ :{cmd}
+ etc.
+< When an error is detected on one window, further
+ windows will not be visited.
+ The last window (or where an error occurred) becomes
+ the current window.
+ {cmd} can contain '|' to concatenate several commands.
+ {cmd} must not open or close windows or reorder them.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+ Also see |:argdo| and |:bufdo|.
+
+ *:bufdo*
+:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
+ It works like doing this: >
+ :bfirst
+ :{cmd}
+ :bnext
+ :{cmd}
+ etc.
+< When the current file can't be |abandon|ed and the [!]
+ is not present, the command fails.
+ When an error is detected on one buffer, further
+ buffers will not be visited.
+ Unlisted buffers are skipped.
+ The last buffer (or where an error occurred) becomes
+ the current buffer.
+ {cmd} can contain '|' to concatenate several commands.
+ {cmd} must not delete buffers or add buffers to the
+ buffer list.
+ Note: While this command is executing, the Syntax
+ autocommand event is disabled by adding it to
+ 'eventignore'. This considerably speeds up editing
+ each buffer.
+ {not in Vi} {not available when compiled without the
+ |+listcmds| feature}
+ Also see |:argdo| and |:windo|.
+
+Examples: >
+
+ :windo set nolist nofoldcolumn | normal zn
+
+This resets the 'list' option and disables folding in all windows. >
+
+ :bufdo set fileencoding= | update
+
+This resets the 'fileencoding' in each buffer and writes it if this changed
+the buffer. The result is that all buffers will use the 'encoding' encoding
+(if conversion works properly).
+
+==============================================================================
+9. Tag or file name under the cursor *window-tag*
+
+ *:sta* *:stag*
+:sta[g][!] [tagname]
+ Does ":tag[!] [tagname]" and splits the window for the found
+ tag. See also |:tag|.
+
+CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*
+CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a
+ tag and jump to it in the new upper window. Make new window N
+ high.
+
+ *CTRL-W_g]*
+CTRL-W g ] Split current window in two. Use identifier under cursor as a
+ tag and perform ":tselect" on it in the new upper window.
+ Make new window N high.
+
+ *CTRL-W_g_CTRL-]*
+CTRL-W g CTRL-] Split current window in two. Use identifier under cursor as a
+ tag and perform ":tjump" on it in the new upper window. Make
+ new window N high.
+
+CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*
+CTRL-W CTRL-F Split current window in two. Edit file name under cursor.
+ Like ":split ]f", but window isn't split if the file does not
+ exist.
+ Uses the 'path' variable as a list of directory names where to
+ look for the file. Also the path for current file is
+ used to search for the file name.
+ If the name is a hypertext link that looks like
+ "type://machine/path", only "/path" is used.
+ If a count is given, the count'th matching file is edited.
+ {not available when the |+file_in_path| feature was disabled
+ at compile time}
+
+Also see |CTRL-W_CTRL-I|: open window for an included file that includes
+the keyword under the cursor.
+
+==============================================================================
+10. The preview window *preview-window*
+
+The preview window is a special window to show (preview) another file. It is
+normally a small window used to show an include file or definition of a
+function.
+{not available when compiled without the |+quickfix| feature}
+
+There can be only one preview window. It is created with one of the commands
+below. The 'previewheight' option can be set to specify the height of the
+preview window when it's opened. The 'previewwindow' option is set in the
+preview window to be able to recognize it. The 'winfixheight' option is set
+to have it keep the same height when opening/closing other windows.
+
+ *:pta* *:ptag*
+:pta[g][!] [tagname]
+ Does ":tag[!] [tagname]" and shows the found tag in a
+ "Preview" window without changing the current buffer or cursor
+ position. If a "Preview" window already exists, it is re-used
+ (like a help window is). If a new one is opened,
+ 'previewheight' is used for the height of the window. See
+ also |:tag|.
+ See below for an example. |CursorHold-example|
+ Small difference from |:tag|: When [tagname] is equal to the
+ already displayed tag, the position in the matching tag list
+ is not reset. This makes the CursorHold example work after a
+ |:ptnext|.
+
+CTRL-W z *CTRL-W_z*
+CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*
+:pc[lose][!] Close any "Preview" window currently open. When the 'hidden'
+ option is set, or when the buffer was changed and the [!] is
+ used, the buffer becomes hidden (unless there is another
+ window editing it). The command fails if any "Preview" buffer
+ cannot be closed. See also |:close|.
+
+ *:pp* *:ppop*
+:[count]pp[op][!]
+ Does ":[count]pop[!]" in the preview window. See |:pop| and
+ |:ptag|. {not in Vi}
+
+CTRL-W } *CTRL-W_}*
+ Use identifier under cursor as a tag and perform a :ptag on
+ it. Make the new Preview window (if required) N high. If N is
+ not given, 'previewheight' is used.
+
+CTRL-W g } *CTRL-W_g}*
+ Use identifier under cursor as a tag and perform a :ptjump on
+ it. Make the new Preview window (if required) N high. If N is
+ not given, 'previewheight' is used.
+
+ *:ped* *:pedit*
+:ped[it][!] [++opt] [+cmd] {file}
+ Edit {file} in the preview window. The preview window is
+ opened like with |:ptag|. The current window and cursor
+ position isn't changed. Useful example: >
+ :pedit +/fputc /usr/include/stdio.h
+<
+ *:ps* *:psearch*
+:[range]ps[earch][!] [count] [/]pattern[/]
+ Works like |:ijump| but shows the found match in the preview
+ window. The preview window is opened like with |:ptag|. The
+ current window and cursor position isn't changed. Useful
+ example: >
+ :psearch popen
+< Like with the |:ptag| command, you can use this to
+ automatically show information about the word under the
+ cursor. This is less clever than using |:ptag|, but you don't
+ need a tags file and it will also find matches in system
+ include files. Example: >
+ :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
+< Warning: This can be slow.
+
+Example *CursorHold-example* >
+
+ :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
+
+This will cause a ":ptag" to be executed for the keyword under the cursor,
+when the cursor hasn't moved for the time set with 'updatetime'. The "nested"
+makes other autocommands be executed, so that syntax highlighting works in the
+preview window. The "silent!" avoids an error message when the tag could not
+be found. Also see |CursorHold|. To disable this again: >
+
+ :au! CursorHold
+
+A nice addition is to highlight the found tag, avoid the ":ptag" when there
+is no word under the cursor, and a few other things: >
+
+ :au! CursorHold *.[ch] nested call PreviewWord()
+ :func PreviewWord()
+ : if &previewwindow " don't do this in the preview window
+ : return
+ : endif
+ : let w = expand("<cword>") " get the word under cursor
+ : if w =~ '\a' " if the word contains a letter
+ :
+ : " Delete any existing highlight before showing another tag
+ : silent! wincmd P " jump to preview window
+ : if &previewwindow " if we really get there...
+ : match none " delete existing highlight
+ : wincmd p " back to old window
+ : endif
+ :
+ : " Try displaying a matching tag for the word under the cursor
+ : try
+ : exe "ptag " . w
+ : catch
+ : return
+ : endtry
+ :
+ : silent! wincmd P " jump to preview window
+ : if &previewwindow " if we really get there...
+ : if has("folding")
+ : silent! .foldopen " don't want a closed fold
+ : endif
+ : call search("$", "b") " to end of previous line
+ : let w = substitute(w, '\\', '\\\\', "")
+ : call search('\<\V' . w . '\>') " position cursor on match
+ : " Add a match highlight to the word at this position
+ : hi previewWord term=bold ctermbg=green guibg=green
+ : exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
+ : wincmd p " back to old window
+ : endif
+ : endif
+ :endfun
+
+==============================================================================
+11. Using hidden buffers *buffer-hidden*
+
+A hidden buffer is not displayed in a window, but is still loaded into memory.
+This makes it possible to jump from file to file, without the need to read or
+write the file every time you get another buffer in a window.
+{not available when compiled without the |+listcmds| feature}
+
+ *:buffer-!*
+If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
+commands that start editing another file: ":edit", ":next", ":tag", etc. The
+commands that move through the buffer list sometimes make the current buffer
+hidden although the 'hidden' option is not set. This happens when a buffer is
+modified, but is forced (with '!') to be removed from a window, and
+'autowrite' is off or the buffer can't be written.
+
+You can make a hidden buffer not hidden by starting to edit it with any
+command. Or by deleting it with the ":bdelete" command.
+
+The 'hidden' is global, it is used for all buffers. The 'bufhidden' option
+can be used to make an exception for a specific buffer. It can take these
+values:
+ <empty> Use the value of 'hidden'.
+ hide Hide this buffer, also when 'hidden' is not set.
+ unload Don't hide but unload this buffer, also when 'hidden'
+ is set.
+ delete Delete the buffer.
+
+ *hidden-quit*
+When you try to quit Vim while there is a hidden, modified buffer, you will
+get an error message and Vim will make that buffer the current buffer. You
+can then decide to write this buffer (":wq") or quit without writing (":q!").
+Be careful: there may be more hidden, modified buffers!
+
+A buffer can also be unlisted. This means it exists, but it is not in the
+list of buffers. |unlisted-buffer|
+
+
+:files[!] *:files*
+:buffers[!] *:buffers* *:ls*
+:ls[!] Show all buffers. Example:
+
+ 1 #h "/test/text" line 1 ~
+ 2u "asdf" line 0 ~
+ 3 %l+ "version.c" line 1 ~
+
+ When the [!] is included the list will show unlisted buffers
+ (the term "unlisted" is a bit confusing then...).
+
+ Each buffer has a unique number. That number will not change,
+ so you can always go to a specific buffer with ":buffer N" or
+ "N CTRL-^", where N is the buffer number.
+
+ Indicators (chars in the same column are mutually exclusive):
+ u an unlisted buffer (only displayed when [!] is used)
+ |unlisted-buffer|
+ % the buffer in the current window
+ # the alternate buffer for ":e #" and CTRL-^
+ a an active buffer: it is loaded and visible
+ h a hidden buffer: It is loaded, but currently not
+ displayed in a window |hidden-buffer|
+ - a buffer with 'modifiable' off
+ = a readonly buffer
+ + a modified buffer
+ x a buffer with read errors
+
+ *:bad* *:badd*
+:bad[d] [+lnum] {fname}
+ Add file name {fname} to the buffer list, without loading it.
+ If "lnum" is specified, the cursor will be positioned at that
+ line when the buffer is first entered. Note that other
+ commands after the + will be ignored.
+
+:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
+:bd[elete][!] [N]
+ Unload buffer [N] (default: current buffer) and delete it from
+ the buffer list. If the buffer was changed, this fails,
+ unless when [!] is specified, in which case changes are lost.
+ The file remains unaffected. Any windows for this buffer are
+ closed. If buffer [N] is the current buffer, another buffer
+ will be displayed instead. This is the most recent entry in
+ the jump list that points into a loaded buffer.
+ Actually, the buffer isn't completely deleted, it is removed
+ from the buffer list |unlisted-buffer| and option values,
+ variables and mappings/abbreviations for the buffer are
+ cleared.
+
+:bdelete[!] {bufname} *E93* *E94*
+ Like ":bdelete[!] [N]", but buffer given by name. Note that a
+ buffer whose name is a number cannot be referenced by that
+ name; use the buffer number instead. Insert a backslash
+ before a space in a buffer name.
+
+:bdelete[!] N1 N2 ...
+ Do ":bdelete[!]" for buffer N1, N2, etc. The arguments can be
+ buffer numbers or buffer names (but not buffer names that are
+ a number). Insert a backslash before a space in a buffer
+ name.
+
+:N,Mbdelete[!] Do ":bdelete[!]" for all buffers in the range N to M
+ |inclusive|.
+
+:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
+:bw[ipeout][!] {bufname}
+:N,Mbw[ipeout][!]
+:bw[ipeout][!] N1 N2 ...
+ Like |:bdelete|, but really delete the buffer. All marks in
+ this buffer become invalid, option settings are lost, etc.
+ Don't use this unless you know what you are doing.
+
+:[N]bun[load][!] *:bun* *:bunload* *E515*
+:bun[load][!] [N]
+ Unload buffer [N] (default: current buffer). The memory
+ allocated for this buffer will be freed. The buffer remains
+ in the buffer list.
+ If the buffer was changed, this fails, unless when [!] is
+ specified, in which case the changes are lost.
+ Any windows for this buffer are closed. If buffer [N] is the
+ current buffer, another buffer will be displayed instead.
+ This is the most recent entry in the jump list that points
+ into a loaded buffer.
+
+:bunload[!] {bufname}
+ Like ":bunload[!] [N]", but buffer given by name. Note that a
+ buffer whose name is a number cannot be referenced by that
+ name; use the buffer number instead. Insert a backslash
+ before a space in a buffer name.
+
+:N,Mbunload[!] Do ":bunload[!]" for all buffers in the range N to M
+ |inclusive|.
+
+:bunload[!] N1 N2 ...
+ Do ":bunload[!]" for buffer N1, N2, etc. The arguments can be
+ buffer numbers or buffer names (but not buffer names that are
+ a number). Insert a backslash before a space in a buffer
+ name.
+
+:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86*
+ Edit buffer [N] from the buffer list. If [N] is not given,
+ the current buffer remains being edited. See |:buffer-!| for
+ [!]. This will also edit a buffer that is not in the buffer
+ list, without setting the 'buflisted' flag.
+
+:[N]b[uffer][!] {filename}
+ Edit buffer for {filename} from the buffer list. See
+ |:buffer-!| for [!]. This will also edit a buffer that is not
+ in the buffer list, without setting the 'buflisted' flag.
+
+:[N]sb[uffer] [N] *:sb* *:sbuffer*
+ Split window and edit buffer [N] from the buffer list. If [N]
+ is not given, the current buffer is edited. Respects the
+ "useopen" setting of 'switchbuf' when splitting. This will
+ also edit a buffer that is not in the buffer list, without
+ setting the 'buflisted' flag.
+
+:[N]sb[uffer] {filename}
+ Split window and edit buffer for {filename} from the buffer
+ list. This will also edit a buffer that is not in the buffer
+ list, without setting the 'buflisted' flag.
+
+ *:bn* *:bnext* *E87*
+:[N]bn[ext][!] [N]
+ Go to [N]th next buffer in buffer list. [N] defaults to one.
+ Wraps around the end of the buffer list.
+ See |:buffer-!| for [!].
+ If you are in a help buffer, this takes you to the next help
+ buffer (if there is one). Similarly, if you are in a normal
+ (non-help) buffer, this takes you to the next normal buffer.
+ This is so that if you have invoked help, it doesn't get in
+ the way when you're browsing code/text buffers. The next three
+ commands also work like this.
+
+ *:sbn* *:sbnext*
+:[N]sbn[ext] [N]
+ Split window and go to [N]th next buffer in buffer list.
+ Wraps around the end of the buffer list. Uses 'switchbuf'
+
+:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
+:[N]bp[revious][!] [N]
+ Go to [N]th previous buffer in buffer list. [N] defaults to
+ one. Wraps around the start of the buffer list.
+ See |:buffer-!| for [!] and 'switchbuf'.
+
+:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious*
+:[N]sbp[revious] [N]
+ Split window and go to [N]th previous buffer in buffer list.
+ Wraps around the start of the buffer list.
+ Uses 'switchbuf'.
+
+ *:br* *:brewind*
+:br[ewind][!] Go to first buffer in buffer list. If the buffer list is
+ empty, go to the first unlisted buffer.
+ See |:buffer-!| for [!].
+
+ *:bf* *:bfirst*
+:bf[irst] Same as ":brewind".
+
+ *:sbr* *:sbrewind*
+:sbr[ewind] Split window and go to first buffer in buffer list. If the
+ buffer list is empty, go to the first unlisted buffer.
+ Respects the 'switchbuf' option.
+
+ *:sbf* *:sbfirst*
+:sbf[irst] Same as ":sbrewind".
+
+ *:bl* *:blast*
+:bl[ast][!] Go to last buffer in buffer list. If the buffer list is
+ empty, go to the last unlisted buffer.
+ See |:buffer-!| for [!].
+
+ *:sbl* *:sblast*
+:sbl[ast] Split window and go to last buffer in buffer list. If the
+ buffer list is empty, go to the last unlisted buffer.
+ Respects 'switchbuf' option.
+
+:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84*
+ Go to [N]th next modified buffer. Note: this command also
+ finds unlisted buffers. If there is no modified buffer the
+ command fails.
+
+:[N]sbm[odified] [N] *:sbm* *:sbmodified*
+ Split window and go to [N]th next modified buffer.
+ Respects 'switchbuf' option.
+ Note: this command also finds buffers not in the buffer list.
+
+:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
+:[N]sun[hide] [N]
+ Rearrange the screen to open one window for each loaded buffer
+ in the buffer list. When a count is given, this is the
+ maximum number of windows to open.
+
+:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
+:[N]sba[ll] [N] Rearrange the screen to open one window for each buffer in
+ the buffer list. When a count is given, this is the maximum
+ number of windows to open. 'winheight' also limits the number
+ of windows opened ('winwidth' if |:vertical| was prepended).
+ Buf/Win Enter/Leave autocommands are not executed for the new
+ windows here, that's only done when they are really entered.
+
+Note: All the commands above that start editing another buffer, keep the
+'readonly' flag as it was. This differs from the ":edit" command, which sets
+the 'readonly' flag each time the file is read.
+
+==============================================================================
+12. Special kinds of buffers *special-buffers*
+
+Instead of containing the text of a file, buffers can also be used for other
+purposes. A few options can be set to change the behavior of a buffer:
+ 'bufhidden' what happens when the buffer is no longer displayed
+ in a window.
+ 'buftype' what kind of a buffer this is
+ 'swapfile' whether the buffer will have a swap file
+ 'buflisted' buffer shows up in the buffer list
+
+A few useful kinds of a buffer:
+
+quickfix Used to contain the error list. See |:cwindow|. This command
+ sets the 'buftype' option to "quickfix". You are not supposed
+ to change this! 'swapfile' is off.
+
+help Contains a help file. Will only be created with the |:help|
+ command. The flag that indicates a help buffer is internal
+ and can't be changed. The 'buflisted' option will be reset
+ for a help buffer.
+
+directory Displays directory contents. Used by the |file-explorer|
+ plugin. The buffer is created with these settings: >
+ :set buftype=nowrite
+ :set bufhidden=delete
+ :set noswapfile
+< The buffer name is the name of the directory and is adjusted
+ when using the |:cd| command.
+
+scratch Contains text that can be discarded at any time. It is kept
+ when closing the window, it must be deleted explicitly.
+ Settings: >
+ :set buftype=nofile
+ :set bufhidden=hide
+ :set noswapfile
+< The buffer name can be used to identify the buffer.
+
+ *unlisted-buffer*
+unlisted The buffer is not in the buffer list. It is not used for
+ normal editing, but to show a help file, remember a file name
+ or marks. The ":bdelete" command will also set this option,
+ thus it doesn't completely delete the buffer. Settings: >
+ :set nobuflisted
+<
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/workshop.txt b/runtime/doc/workshop.txt
new file mode 100644
index 000000000..7168c7515
--- /dev/null
+++ b/runtime/doc/workshop.txt
@@ -0,0 +1,98 @@
+*workshop.txt* For Vim version 7.0aa. Last change: 2004 Jan 08
+
+
+ VIM REFERENCE MANUAL by Gordon Prieur
+
+
+Sun Visual WorkShop Features *workshop* *workshop-support*
+
+1. Introduction |workshop-intro|
+2. Commands |workshop-commands|
+3. Compiling vim/gvim for WorkShop |workshop-compiling|
+4. Configuring gvim for a WorkShop release tree |workshop-configure|
+5. Obtaining the latest version of the XPM library |workshop-xpm|
+
+{Vi does not have any of these features}
+{only available when compiled with the |+sun_workshop| feature}
+
+==============================================================================
+1. Introduction *workshop-intro*
+
+Sun Visual WorkShop has an "Editor of Choice" feature designed to let users
+debug using their favorite editors. For the 6.0 release we have added support
+for gvim. A workshop debug session will have a debugging window and an editor
+window (possibly others as well). The user can do many debugging operations
+from the editor window, minimizing the need to switch from window to window.
+
+The version of vim shipped with Sun Visual WorkShop 6 (also called Forte
+Developer 6) is vim 5.3. The features in this release are much more reliable
+than the vim/gvim shipped with Visual WorkShop. VWS users wishing to use vim
+as their editor should compile these sources and install them in their
+workshop release tree.
+
+==============================================================================
+2. Commands *workshop-commands*
+
+ *:ws* *:wsverb*
+:ws[verb] verb Pass the verb to the verb executor
+
+Pass the verb to a workshop function which gathers some arguments and
+sends the verb and data to workshop over an IPC connection.
+
+==============================================================================
+3. Compiling vim/gvim for WorkShop *workshop-compiling*
+
+Compiling vim with FEAT_SUN_WORKSHOP turns on all compile time flags necessary
+for building a vim to work with Visual WorkShop. The features required for VWS
+have been built and tested using the Sun compilers from the VWS release. They
+have not been built or tested using Gnu compilers. This does not mean the
+features won't build and run if compiled with gcc, just that nothing is
+guaranteed with gcc!
+
+==============================================================================
+4. Configuring gvim for a WorkShop release tree *workshop-configure*
+
+There are several assumptions which must be met in order to compile a gvim for
+use with Sun Visual WorkShop 6.
+
+ o You should use the compiler in VWS rather than gcc. We have neither
+ built nor tested with gcc and cannot guarantee it will build properly.
+
+ o You must supply your own XPM library. See |workshop-xpm| below for
+ details on obtaining the latest version of XPM.
+
+ o Edit the Makefile in the src directory and uncomment the lines for Sun
+ Visual WorkShop. You can easily find these by searching for the string
+ FEAT_SUN_WORKSHOP
+
+ o We also suggest you use Motif for your gui. This will provide gvim with
+ the same look-and-feel as the rest of Sun Visual WorkShop.
+
+The following configuration line can be used to configure vim to build for use
+with Sun Visual WorkShop:
+
+ $ CC=cc configure --enable-workshop --enable-gui=motif \
+ -prefix=<VWS-install-dir>/contrib/contrib6/<vim-version>
+
+The VWS-install-dir should be the base directory where your Sun Visual WorkShop
+was installed. By default this is /opt/SUNWspro. It will normally require
+root permissions to install the vim release. You will also need to change the
+symlink <VWS-install-dir>/bin/gvim to point to the vim in your newly installed
+directory. The <vim-version> should be a unique version string. I use "vim"
+concatenated with the equivalent of version.h's VIM_VERSION_SHORT.
+
+==============================================================================
+5. Obtaining the latest version of the XPM library *workshop-xpm*
+
+The XPM library is required to show images within Vim with Motif or Athena.
+Without it the toolbar and signs will be disabled.
+
+The XPM library is provide by Arnaud Le Hors of the French National Institute
+for Research in Computer Science and Control. It can be downloaded from
+http://koala.ilog.fr/ftp/pub/xpm. The current release, as of this writing, is
+xpm-3.4k-solaris.tgz, which is a gzip'ed tar file. If you create the directory
+/usr/local/xpm and untar the file there you can use the uncommented lines in
+the Makefile without changing them. If you use another xpm directory you will
+need to change the XPM_DIR in src/Makefile.
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/xxd.1 b/runtime/doc/xxd.1
new file mode 100644
index 000000000..fba0521d6
--- /dev/null
+++ b/runtime/doc/xxd.1
@@ -0,0 +1,373 @@
+.TH XXD 1 "August 1996" "Manual page for xxd"
+.\"
+.\" 21st May 1996
+.\" Man page author:
+.\" Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
+.\" Changes by Bram Moolenaar <Bram@vim.org>
+.SH NAME
+.I xxd
+\- make a hexdump or do the reverse.
+.SH SYNOPSIS
+.B xxd
+\-h[elp]
+.br
+.B xxd
+[options] [infile [outfile]]
+.br
+.B xxd
+\-r[evert] [options] [infile [outfile]]
+.SH DESCRIPTION
+.I xxd
+creates a hex dump of a given file or standard input.
+It can also convert a hex dump back to its original binary form.
+Like
+.BR uuencode(1)
+and
+.BR uudecode(1)
+it allows the transmission of binary data in a `mail-safe' ASCII representation,
+but has the advantage of decoding to standard output.
+Moreover, it can be used to perform binary file patching.
+.SH OPTIONS
+If no
+.I infile
+is given, standard input is read.
+If
+.I infile
+is specified as a
+.RB \` \- '
+character, then input is taken from standard input.
+If no
+.I outfile
+is given (or a
+.RB \` \- '
+character is in its place), results are sent to standard output.
+.PP
+Note that a "lazy" parser is used which does not check for more than the first
+option letter, unless the option is followed by a parameter.
+Spaces between a single option letter and its parameter are optional.
+Parameters to options can be specified in decimal, hexadecimal or octal
+notation.
+Thus
+.BR \-c8 ,
+.BR "\-c 8" ,
+.B \-c 010
+and
+.B \-cols 8
+are all equivalent.
+.PP
+.TP
+.IR \-a " | " \-autoskip
+toggle autoskip: A single '*' replaces nul-lines. Default off.
+.TP
+.IR \-b " | " \-bits
+Switch to bits (binary digits) dump, rather than hexdump.
+This option writes octets as eight digits "1"s and "0"s instead of a normal
+hexacecimal dump. Each line is preceded by a line number in hexadecimal and
+followed by an ascii (or ebcdic) representation. The command line switches
+\-r, \-p, \-i do not work with this mode.
+.TP
+.IR "\-c cols " | " \-cols cols"
+.IR "\-c cols " | " \-cols cols"
+format
+.RI < cols >
+octets per line. Default 16 (\-i: 12, \-ps: 30, \-b: 6). Max 256.
+.TP
+.IR \-E " | " \-EBCDIC
+Change the character encoding in the righthand column from ASCII to EBCDIC.
+This does not change the hexadecimal representation. The option is
+meaningless in combinations with \-r, \-p or \-i.
+.TP
+.IR "\-g bytes " | " \-groupsize bytes"
+seperate the output of every
+.RI < bytes >
+bytes (two hex characters or eight bit-digits each) by a whitespace.
+Specify
+.I \-g 0
+to suppress grouping.
+.RI < Bytes "> defaults to " 2
+in normal mode and \fI1\fP in bits mode.
+Grouping does not apply to postscript or include style.
+.TP
+.IR \-h " | " \-help
+print a summary of available commands and exit. No hex dumping is performed.
+.TP
+.IR \-i " | " \-include
+output in C include file style. A complete static array definition is written
+(named after the input file), unless xxd reads from stdin.
+.TP
+.IR "\-l len " | " \-len len"
+stop after writing
+.RI < len >
+octets.
+.TP
+.IR \-p " | " \-ps " | " \-postscript " | " \-plain
+output in postscript continuous hexdump style. Also known as plain hexdump
+style.
+.TP
+.IR \-r " | " \-revert
+reverse operation: convert (or patch) hexdump into binary.
+If not writing to stdout, xxd writes into its output file without truncating
+it. Use the combination
+.I \-r \-p
+to read plain hexadecimal dumps without line number information and without a
+particular column layout. Additional Whitespace and line-breaks are allowed
+anywhere.
+.TP
+.I \-seek offset
+When used after
+.I \-r
+: revert with
+.RI < offset >
+added to file positions found in hexdump.
+.TP
+.I \-s [\+][\-]seek
+start at
+.RI < seek >
+bytes abs. (or rel.) infile offset.
+\fI\+ \fRindicates that the seek is relative to the current stdin file position
+(meaningless when not reading from stdin). \fI\- \fRindicates that the seek
+should be that many characters from the end of the input (or if combined with
+\fI \+ \fR: before the current stdin file position).
+Without \-s option, xxd starts at the current file position.
+.TP
+.I \-u
+use upper case hex letters. Default is lower case.
+.TP
+.IR \-v " | " \-version
+show version string.
+.SH CAVEATS
+.PP
+.I xxd \-r
+has some builtin magic while evaluating line number information.
+If the ouput file is seekable, then the linenumbers at the start of each
+hexdump line may be out of order, lines may be missing, or overlapping. In
+these cases xxd will lseek(2) to the next position. If the output file is not
+seekable, only gaps are allowed, which will be filled by null-bytes.
+.PP
+.I xxd \-r
+never generates parse errors. Garbage is silently skipped.
+.PP
+When editing hexdumps, please note that
+.I xxd \-r
+skips everything on the input line after reading enough columns of hexadecimal
+data (see option \-c). This also means, that changes to the printable ascii (or
+ebcdic) columns are always ignored. Reverting a plain (or postscript) style
+hexdump with xxd \-r \-p does not depend on the correct number of columns. Here an thing that looks like a pair of hex-digits is interpreted.
+.PP
+Note the difference between
+.br
+\fI% xxd \-i file\fR
+.br
+and
+.br
+\fI% xxd \-i \< file\fR
+.PP
+.I xxd \-s \+seek
+may be different from
+.I xxd \-s seek
+, as lseek(2) is used to "rewind" input. A '+'
+makes a difference if the input source is stdin, and if stdin's file position
+is not at the start of the file by the time xxd is started and given its input.
+The following examples may help to clarify (or further confuse!)...
+.PP
+Rewind stdin before reading; needed because the `cat' has already read to the
+end of stdin.
+.br
+\fI% sh \-c 'cat > plain_copy; xxd \-s 0 > hex_copy' < file
+.PP
+Hexdump from file position 0x480 (=1024+128) onwards.
+The `+' sign means "relative to the current position", thus the `128' adds to
+the 1k where dd left off.
+.br
+\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet' < file
+.PP
+Hexdump from file position 0x100 ( = 1024-768) on.
+.br
+\fI% sh \-c 'dd of=plain_snippet bs=1k count=1; xxd \-s +-768 > hex_snippet' < file
+.PP
+However, this is a rare situation and the use of `+' is rarely needed.
+the author prefers to monitor the effect of xxd with strace(1) or truss(1), whenever \-s is used.
+.SH EXAMPLES
+.PP
+.br
+Print everything but the first three lines (hex 0x30 bytes) of
+.B file
+\.
+.br
+\fI% xxd \-s 0x30 file
+.PP
+.br
+Print 3 lines (hex 0x30 bytes) from the end of
+.B file
+\.
+.br
+\fI% xxd \-s \-0x30 file
+.PP
+.br
+Print 120 bytes as continuous hexdump with 40 octets per line.
+.br
+\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
+.br
+2e544820585844203120224d616e75616c207061
+.br
+676520666f7220787864220a2e5c220a2e5c2220
+.br
+32317374204d617920313939360a2e5c22204d61
+.br
+6e207061676520617574686f723a0a2e5c222020
+.br
+2020546f6e79204e7567656e74203c746f6e7940
+.br
+7363746e7567656e2e7070702e67752e6564752e
+.br
+
+.br
+Hexdump the first 120 bytes of this man page with 12 octets per line.
+.br
+\fI% xxd \-l 120 \-c 12 xxd.1\fR
+.br
+0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
+.br
+000000c: 616e 7561 6c20 7061 6765 2066 anual page f
+.br
+0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\\".
+.br
+0000024: 2e5c 2220 3231 7374 204d 6179 .\\" 21st May
+.br
+0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\\" Ma
+.br
+000003c: 6e20 7061 6765 2061 7574 686f n page autho
+.br
+0000048: 723a 0a2e 5c22 2020 2020 546f r:..\\" To
+.br
+0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
+.br
+0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
+.br
+000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
+.PP
+.br
+Display just the date from the file xxd.1
+.br
+\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+.br
+0000028: 3231 7374 204d 6179 2031 3939 21st May 199
+.PP
+.br
+Copy
+.B input_file
+to
+.B output_file
+and prepend 100 bytes of value 0x00.
+.br
+\fI% xxd input_file | xxd \-r \-s 100 \> output_file\fR
+.br
+
+.br
+Patch the date in the file xxd.1
+.br
+\fI% echo '0000029: 3574 68' | xxd \-r \- xxd.1\fR
+.br
+\fI% xxd \-s 0x28 \-l 12 \-c 12 xxd.1\fR
+.br
+0000028: 3235 7468 204d 6179 2031 3939 25th May 199
+.PP
+.br
+Create a 65537 byte file with all bytes 0x00,
+except for the last one which is 'A' (hex 0x41).
+.br
+\fI% echo '010000: 41' | xxd \-r \> file\fR
+.PP
+.br
+Hexdump this file with autoskip.
+.br
+\fI% xxd \-a \-c 12 file\fR
+.br
+0000000: 0000 0000 0000 0000 0000 0000 ............
+.br
+*
+.br
+000fffc: 0000 0000 40 ....A
+.PP
+Create a 1 byte file containing a single 'A' character.
+The number after '\-r \-s' adds to the linenumbers found in the file;
+in effect, the leading bytes are suppressed.
+.br
+\fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> file\fR
+.PP
+Use xxd as a filter within an editor such as
+.B vim(1)
+to hexdump a region marked between `a' and `z'.
+.br
+\fI:'a,'z!xxd\fR
+.PP
+Use xxd as a filter within an editor such as
+.B vim(1)
+to recover a binary hexdump marked between `a' and `z'.
+.br
+\fI:'a,'z!xxd \-r\fR
+.PP
+Use xxd as a filter within an editor such as
+.B vim(1)
+to recover one line of a hexdump. Move the cursor over the line and type:
+.br
+\fI!!xxd \-r\fR
+.PP
+Read single characters from a serial line
+.br
+\fI% xxd \-c1 < /dev/term/b &\fR
+.br
+\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
+.br
+\fI% echo \-n foo > /dev/term/b\fR
+.PP
+.SH "RETURN VALUES"
+The following error values are returned:
+.TP
+0
+no errors encountered.
+.TP
+\-1
+operation not supported (
+.I xxd \-r \-i
+still impossible).
+.TP
+1
+error while parsing options.
+.TP
+2
+problems with input file.
+.TP
+3
+problems with output file.
+.TP
+4,5
+desired seek position is unreachable.
+.SH "SEE ALSO"
+uuencode(1), uudecode(1), patch(1)
+.br
+.SH WARNINGS
+The tools weirdness matches its creators brain.
+Use entirely at your own risk. Copy files. Trace it. Become a wizard.
+.br
+.SH VERSION
+This manual page documents xxd version 1.7
+.SH AUTHOR
+.br
+(c) 1990-1997 by Juergen Weigert
+.br
+<jnweiger@informatik.uni-erlangen.de>
+.LP
+Distribute freely and credit me,
+.br
+make money and share with me,
+.br
+lose money and don't ask me.
+.PP
+Manual page started by Tony Nugent
+.br
+<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
+.br
+Small changes by Bram Moolenaar.
+Edited by Juergen Weigert.
+.PP
diff --git a/runtime/doc/xxd.man b/runtime/doc/xxd.man
new file mode 100644
index 000000000..37b22d6d9
--- /dev/null
+++ b/runtime/doc/xxd.man
@@ -0,0 +1,396 @@
+
+
+
+XXD(1) XXD(1)
+
+
+NAME
+ xxd - make a hexdump or do the reverse.
+
+SYNOPSIS
+ xxd -h[elp]
+ xxd [options] [infile [outfile]]
+ xxd -r[evert] [options] [infile [outfile]]
+
+DESCRIPTION
+ xxd creates a hex dump of a given file or standard input.
+ It can also convert a hex dump back to its original binary
+ form. Like uuencode(1) and uudecode(1) it allows the
+ transmission of binary data in a `mail-safe' ASCII repre-
+ sentation, but has the advantage of decoding to standard
+ output. Moreover, it can be used to perform binary file
+ patching.
+
+OPTIONS
+ If no infile is given, standard input is read. If infile
+ is specified as a `-' character, then input is taken from
+ standard input. If no outfile is given (or a `-' charac-
+ ter is in its place), results are sent to standard output.
+
+ Note that a "lazy" parser is used which does not check for
+ more than the first option letter, unless the option is
+ followed by a parameter. Spaces between a single option
+ letter and its parameter are optional. Parameters to
+ options can be specified in decimal, hexadecimal or octal
+ notation. Thus -c8, -c 8, -c 010 and -cols 8 are all
+ equivalent.
+
+
+ -a | -autoskip
+ toggle autoskip: A single '*' replaces nul-lines.
+ Default off.
+
+ -b | -bits
+ Switch to bits (binary digits) dump, rather than
+ hexdump. This option writes octets as eight digits
+ "1"s and "0"s instead of a normal hexacecimal dump.
+ Each line is preceded by a line number in hexadeci-
+ mal and followed by an ascii (or ebcdic) represen-
+ tation. The command line switches -r, -p, -i do not
+ work with this mode.
+
+ -c cols | -cols cols
+ -c cols | -cols cols format <cols> octets per line.
+ Default 16 (-i: 12, -ps: 30, -b: 6). Max 256.
+
+ -E | -EBCDIC
+ Change the character encoding in the righthand col-
+ umn from ASCII to EBCDIC. This does not change the
+ hexadecimal representation. The option is meaning-
+ less in combinations with -r, -p or -i.
+
+
+
+Manual page for xxd August 1996 1
+
+
+
+
+
+XXD(1) XXD(1)
+
+
+ -g bytes | -groupsize bytes
+ seperate the output of every <bytes> bytes (two hex
+ characters or eight bit-digits each) by a whites-
+ pace. Specify -g 0 to suppress grouping. <Bytes>
+ defaults to 2 in normal mode and 1 in bits mode.
+ Grouping does not apply to postscript or include
+ style.
+
+ -h | -help
+ print a summary of available commands and exit. No
+ hex dumping is performed.
+
+ -i | -include
+ output in C include file style. A complete static
+ array definition is written (named after the input
+ file), unless xxd reads from stdin.
+
+ -l len | -len len
+ stop after writing <len> octets.
+
+ -p | -ps | -postscript | -plain
+ output in postscript continuous hexdump style. Also
+ known as plain hexdump style.
+
+ -r | -revert
+ reverse operation: convert (or patch) hexdump into
+ binary. If not writing to stdout, xxd writes into
+ its output file without truncating it. Use the com-
+ bination -r -p to read plain hexadecimal dumps
+ without line number information and without a par-
+ ticular column layout. Additional Whitespace and
+ line-breaks are allowed anywhere.
+
+ -seek offset
+ When used after -r : revert with <offset> added to
+ file positions found in hexdump.
+
+ -s [+][-]seek
+ start at <seek> bytes abs. (or rel.) infile offset.
+ + indicates that the seek is relative to the cur-
+ rent stdin file position (meaningless when not
+ reading from stdin). - indicates that the seek
+ should be that many characters from the end of the
+ input (or if combined with
+ + : before the current stdin file position).
+ Without -s option, xxd starts at the current file
+ position.
+
+ -u use upper case hex letters. Default is lower case.
+
+ -v | -version
+ show version string.
+
+
+
+
+
+Manual page for xxd August 1996 2
+
+
+
+
+
+XXD(1) XXD(1)
+
+
+CAVEATS
+ xxd -r has some builtin magic while evaluating line number
+ information. If the ouput file is seekable, then the
+ linenumbers at the start of each hexdump line may be out
+ of order, lines may be missing, or overlapping. In these
+ cases xxd will lseek(2) to the next position. If the out-
+ put file is not seekable, only gaps are allowed, which
+ will be filled by null-bytes.
+
+ xxd -r never generates parse errors. Garbage is silently
+ skipped.
+
+ When editing hexdumps, please note that xxd -r skips
+ everything on the input line after reading enough columns
+ of hexadecimal data (see option -c). This also means, that
+ changes to the printable ascii (or ebcdic) columns are
+ always ignored. Reverting a plain (or postscript) style
+ hexdump with xxd -r -p does not depend on the correct num-
+ ber of columns. Here an thing that looks like a pair of
+ hex-digits is interpreted.
+
+ Note the difference between
+ % xxd -i file
+ and
+ % xxd -i < file
+
+ xxd -s +seek may be different from xxd -s seek , as
+ lseek(2) is used to "rewind" input. A '+' makes a differ-
+ ence if the input source is stdin, and if stdin's file
+ position is not at the start of the file by the time xxd
+ is started and given its input. The following examples
+ may help to clarify (or further confuse!)...
+
+ Rewind stdin before reading; needed because the `cat' has
+ already read to the end of stdin.
+ % sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file
+
+ Hexdump from file position 0x480 (=1024+128) onwards. The
+ `+' sign means "relative to the current position", thus
+ the `128' adds to the 1k where dd left off.
+ % sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 >
+ hex_snippet' < file
+
+ Hexdump from file position 0x100 ( = 1024-768) on.
+ % sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 >
+ hex_snippet' < file
+
+ However, this is a rare situation and the use of `+' is
+ rarely needed. the author prefers to monitor the effect
+ of xxd with strace(1) or truss(1), whenever -s is used.
+
+EXAMPLES
+ Print everything but the first three lines (hex 0x30
+ bytes) of file
+
+
+
+Manual page for xxd August 1996 3
+
+
+
+
+
+XXD(1) XXD(1)
+
+
+ % xxd -s 0x30 file
+
+ Print 3 lines (hex 0x30 bytes) from the end of file
+ % xxd -s -0x30 file
+
+ Print 120 bytes as continuous hexdump with 40 octets per
+ line.
+ % xxd -l 120 -ps -c 20 xxd.1
+ 2e544820585844203120224d616e75616c207061
+ 676520666f7220787864220a2e5c220a2e5c2220
+ 32317374204d617920313939360a2e5c22204d61
+ 6e207061676520617574686f723a0a2e5c222020
+ 2020546f6e79204e7567656e74203c746f6e7940
+ 7363746e7567656e2e7070702e67752e6564752e
+
+ Hexdump the first 120 bytes of this man page with 12
+ octets per line.
+ % xxd -l 120 -c 12 xxd.1
+ 0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
+ 000000c: 616e 7561 6c20 7061 6765 2066 anual page f
+ 0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\".
+ 0000024: 2e5c 2220 3231 7374 204d 6179 .\" 21st May
+ 0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\" Ma
+ 000003c: 6e20 7061 6765 2061 7574 686f n page autho
+ 0000048: 723a 0a2e 5c22 2020 2020 546f r:..\" To
+ 0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
+ 0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
+ 000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
+
+ Display just the date from the file xxd.1
+ % xxd -s 0x28 -l 12 -c 12 xxd.1
+ 0000028: 3231 7374 204d 6179 2031 3939 21st May 199
+
+ Copy input_file to output_file and prepend 100 bytes of
+ value 0x00.
+ % xxd input_file | xxd -r -s 100 > output_file
+
+ Patch the date in the file xxd.1
+ % echo '0000029: 3574 68' | xxd -r - xxd.1
+ % xxd -s 0x28 -l 12 -c 12 xxd.1
+ 0000028: 3235 7468 204d 6179 2031 3939 25th May 199
+
+ Create a 65537 byte file with all bytes 0x00, except for
+ the last one which is 'A' (hex 0x41).
+ % echo '010000: 41' | xxd -r > file
+
+ Hexdump this file with autoskip.
+ % xxd -a -c 12 file
+ 0000000: 0000 0000 0000 0000 0000 0000 ............
+ *
+ 000fffc: 0000 0000 40 ....A
+
+ Create a 1 byte file containing a single 'A' character.
+ The number after '-r -s' adds to the linenumbers found in
+
+
+
+Manual page for xxd August 1996 4
+
+
+
+
+
+XXD(1) XXD(1)
+
+
+ the file; in effect, the leading bytes are suppressed.
+ % echo '010000: 41' | xxd -r -s -0x10000 > file
+
+ Use xxd as a filter within an editor such as vim(1) to
+ hexdump a region marked between `a' and `z'.
+ :'a,'z!xxd
+
+ Use xxd as a filter within an editor such as vim(1) to
+ recover a binary hexdump marked between `a' and `z'.
+ :'a,'z!xxd -r
+
+ Use xxd as a filter within an editor such as vim(1) to
+ recover one line of a hexdump. Move the cursor over the
+ line and type:
+ !!xxd -r
+
+ Read single characters from a serial line
+ % xxd -c1 < /dev/term/b &
+ % stty < /dev/term/b -echo -opost -isig -icanon min 1
+ % echo -n foo > /dev/term/b
+
+
+RETURN VALUES
+ The following error values are returned:
+
+ 0 no errors encountered.
+
+ -1 operation not supported ( xxd -r -i still impossi-
+ ble).
+
+ 1 error while parsing options.
+
+ 2 problems with input file.
+
+ 3 problems with output file.
+
+ 4,5 desired seek position is unreachable.
+
+SEE ALSO
+ uuencode(1), uudecode(1), patch(1)
+
+WARNINGS
+ The tools weirdness matches its creators brain. Use
+ entirely at your own risk. Copy files. Trace it. Become a
+ wizard.
+
+VERSION
+ This manual page documents xxd version 1.7
+
+AUTHOR
+ (c) 1990-1997 by Juergen Weigert
+ <jnweiger@informatik.uni-erlangen.de>
+
+ Distribute freely and credit me,
+
+
+
+Manual page for xxd August 1996 5
+
+
+
+
+
+XXD(1) XXD(1)
+
+
+ make money and share with me,
+ lose money and don't ask me.
+
+ Manual page started by Tony Nugent
+ <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
+ Small changes by Bram Moolenaar. Edited by Juergen
+ Weigert.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Manual page for xxd August 1996 6
+
+
diff --git a/runtime/evim.vim b/runtime/evim.vim
new file mode 100644
index 000000000..c289e20fd
--- /dev/null
+++ b/runtime/evim.vim
@@ -0,0 +1,66 @@
+" Vim script for Evim key bindings
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2002 Mar 04
+
+" Don't use Vi-compatible mode.
+set nocompatible
+
+" Use the mswin.vim script for most mappings
+source <sfile>:p:h/mswin.vim
+
+" Vim is in Insert mode by default
+set insertmode
+
+" Make a buffer hidden when editing another one
+set hidden
+
+" Make cursor keys ignore wrapping
+inoremap <Down> <C-O>gj
+inoremap <Up> <C-O>gk
+
+" CTRL-F does Find dialog instead of page forward
+noremap <C-F> :promptfind<CR>
+vnoremap <C-F> y:promptfind <C-R>"<CR>
+onoremap <C-F> <C-C>:promptfind<CR>
+inoremap <C-F> <C-O>:promptfind<CR>
+cnoremap <C-F> <C-C>:promptfind<CR>
+
+
+set backspace=2 " allow backspacing over everything in insert mode
+set autoindent " always set autoindenting on
+if has("vms")
+ set nobackup " do not keep a backup file, use versions instead
+else
+ set backup " keep a backup file
+endif
+set history=50 " keep 50 lines of command line history
+set ruler " show the cursor position all the time
+set incsearch " do incremental searching
+set mouse=a " always use the mouse
+
+" Don't use Ex mode, use Q for formatting
+map Q gq
+
+" Switch syntax highlighting on, when the terminal has colors
+" Highlight the last used search pattern on the next search command.
+if &t_Co > 2 || has("gui_running")
+ syntax on
+ set hlsearch
+ nohlsearch
+endif
+
+" Only do this part when compiled with support for autocommands.
+if has("autocmd")
+
+ " Enable file type detection.
+ " Use the default filetype settings, so that mail gets 'tw' set to 72,
+ " 'cindent' is on in C files, etc.
+ " Also load indent files, to automatically do language-dependent indenting.
+ filetype plugin indent on
+
+ " For all text files set 'textwidth' to 78 characters.
+ au FileType text setlocal tw=78
+
+endif " has("autocmd")
+
+" vim: set sw=2 :
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
new file mode 100644
index 000000000..eba1c19c3
--- /dev/null
+++ b/runtime/filetype.vim
@@ -0,0 +1,1737 @@
+" Vim support file to detect file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Jun 10
+
+" Listen very carefully, I will say this only once
+if exists("did_load_filetypes")
+ finish
+endif
+let did_load_filetypes = 1
+
+" Line continuation is used here, remove 'C' from 'cpoptions'
+let s:cpo_save = &cpo
+set cpo&vim
+
+augroup filetypedetect
+
+" Ignored extensions
+au BufNewFile,BufRead *.orig,*.bak,*.old,*.new,*.rpmsave,*.rpmnew
+ \ exe "doau filetypedetect BufRead " . expand("<afile>:r")
+au BufNewFile,BufRead *~
+ \ let s:name = expand("<afile>") |
+ \ let s:short = substitute(s:name, '\~$', '', '') |
+ \ if s:name != s:short && s:short != "" |
+ \ exe "doau filetypedetect BufRead " . s:short |
+ \ endif |
+ \ unlet s:name |
+ \ unlet s:short
+au BufNewFile,BufRead *.in
+ \ if expand("<afile>:t") != "configure.in" |
+ \ exe "doau filetypedetect BufRead " . expand("<afile>:r") |
+ \ endif
+
+" Pattern used to match file names which should not be inspected.
+" Currently finds compressed files.
+if !exists("g:ft_ignore_pat")
+ let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
+endif
+
+" Abaqus or Trasys
+au BufNewFile,BufRead *.inp call FTCheck_inp()
+
+fun! FTCheck_inp()
+ if getline(1) =~ '^\*'
+ setf abaqus
+ else
+ let n = 1
+ if line("$") > 500
+ let nmax = 500
+ else
+ let nmax = line("$")
+ endif
+ while n <= nmax
+ if getline(n) =~? "^header surface data"
+ setf trasys
+ break
+ endif
+ let n = n + 1
+ endwhile
+ endif
+endfun
+
+" A-A-P recipe
+au BufNewFile,BufRead *.aap setf aap
+
+" ABC music notation
+au BufNewFile,BufRead *.abc setf abc
+
+" ABEL
+au BufNewFile,BufRead *.abl setf abel
+
+" AceDB
+au BufNewFile,BufRead *.wrm setf acedb
+
+" Ada (83, 9X, 95)
+au BufNewFile,BufRead *.adb,*.ads,*.ada setf ada
+
+" AHDL
+au BufNewFile,BufRead *.tdf setf ahdl
+
+" AMPL
+au BufNewFile,BufRead *.run setf ampl
+
+" Ant
+au BufNewFile,BufRead build.xml setf ant
+
+" Apache style config file
+au BufNewFile,BufRead proftpd.conf* setf apachestyle
+
+" Apache config file
+au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,.htaccess,apache.conf* setf apache
+
+" XA65 MOS6510 cross assembler
+au BufNewFile,BufRead *.a65 setf a65
+
+" Applix ELF
+au BufNewFile,BufRead *.am
+ \ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
+
+" Arc Macro Language
+au BufNewFile,BufRead *.aml setf aml
+
+" Arch Inventory file
+au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch
+
+" ART*Enterprise (formerly ART-IM)
+au BufNewFile,BufRead *.art setf art
+
+" ASN.1
+au BufNewFile,BufRead *.asn,*.asn1 setf asn
+
+" Active Server Pages (with Visual Basic Script)
+au BufNewFile,BufRead *.asa
+ \ if exists("g:filetype_asa") |
+ \ exe "setf " . g:filetype_asa |
+ \ else |
+ \ setf aspvbs |
+ \ endif
+
+" Active Server Pages (with Perl or Visual Basic Script)
+au BufNewFile,BufRead *.asp
+ \ if exists("g:filetype_asp") |
+ \ exe "setf " . g:filetype_asp |
+ \ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
+ \ setf aspperl |
+ \ else |
+ \ setf aspvbs |
+ \ endif
+
+" Grub (must be before catch *.lst)
+au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf setf grub
+
+" Assembly (all kinds)
+" *.lst is not pure assembly, it has two extra columns (address, byte codes)
+au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call <SID>FTasm()
+
+" This function checks for the kind of assembly that is wanted by the user, or
+" can be detected from the first five lines of the file.
+fun! <SID>FTasm()
+ " make sure b:asmsyntax exists
+ if !exists("b:asmsyntax")
+ let b:asmsyntax = ""
+ endif
+
+ if b:asmsyntax == ""
+ call FTCheck_asmsyntax()
+ endif
+
+ " if b:asmsyntax still isn't set, default to asmsyntax or GNU
+ if b:asmsyntax == ""
+ if exists("g:asmsyntax")
+ let b:asmsyntax = g:asmsyntax
+ else
+ let b:asmsyntax = "asm"
+ endif
+ endif
+
+ exe "setf " . b:asmsyntax
+endfun
+
+fun! FTCheck_asmsyntax()
+ " see if file contains any asmsyntax=foo overrides. If so, change
+ " b:asmsyntax appropriately
+ let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
+ \" ".getline(5)." "
+ if head =~ '\sasmsyntax=\S\+\s'
+ let b:asmsyntax = substitute(head, '.*\sasmsyntax=\(\S\+\)\s.*','\1', "")
+ elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
+ let b:asmsyntax = "vmasm"
+ endif
+endfun
+
+" Macro (VAX)
+au BufNewFile,BufRead *.mar setf vmasm
+
+" Atlas
+au BufNewFile,BufRead *.atl,*.as setf atlas
+
+" Automake
+au BufNewFile,BufRead [mM]akefile.am setf automake
+
+" Avenue
+au BufNewFile,BufRead *.ave setf ave
+
+" Awk
+au BufNewFile,BufRead *.awk setf awk
+
+" B
+au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
+
+" BASIC or Visual Basic
+au BufNewFile,BufRead *.bas call <SID>FTVB("basic")
+
+" Check if one of the first five lines contains "VB_Name". In that case it is
+" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype.
+fun! <SID>FTVB(alt)
+ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
+ setf vb
+ else
+ exe "setf " . a:alt
+ endif
+endfun
+
+" Visual Basic Script (close to Visual Basic)
+au BufNewFile,BufRead *.vbs,*.dsm,*.ctl setf vb
+
+" Batch file for MSDOS.
+au BufNewFile,BufRead *.bat,*.btm,*.sys setf dosbatch
+" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
+au BufNewFile,BufRead *.cmd
+ \ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
+
+" Batch file for 4DOS
+au BufNewFile,BufRead *.btm setf btm
+
+" BC calculator
+au BufNewFile,BufRead *.bc setf bc
+
+" BDF font
+au BufNewFile,BufRead *.bdf setf bdf
+
+" BibTeX bibliography database file
+au BufNewFile,BufRead *.bib setf bib
+
+" BIND configuration
+au BufNewFile,BufRead named.conf setf named
+
+" BIND zone
+au BufNewFile,BufRead named.root setf bindzone
+
+" Blank
+au BufNewFile,BufRead *.bl setf blank
+
+" C or lpc
+au BufNewFile,BufRead *.c call <SID>FTlpc()
+
+fun! <SID>FTlpc()
+ if exists("g:lpc_syntax_for_c")
+ let lnum = 1
+ while lnum <= 12
+ if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
+ setf lpc
+ return
+ endif
+ let lnum = lnum + 1
+ endwhile
+ endif
+ setf c
+endfun
+
+" Calendar
+au BufNewFile,BufRead calendar,*/.calendar/*,
+ \*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
+ \ setf calendar
+
+" C#
+au BufNewFile,BufRead *.cs setf cs
+
+" Comshare Dimension Definition Language
+au BufNewFile,BufRead *.cdl setf cdl
+
+" Controllable Regex Mutilator
+au BufNewFile,BufRead *.crm setf crm
+
+" Cyn++
+au BufNewFile,BufRead *.cyn setf cynpp
+
+" Cynlib
+" .cc and .cpp files can be C++ or Cynlib.
+au BufNewFile,BufRead *.cc
+ \ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif
+au BufNewFile,BufRead *.cpp
+ \ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
+
+" C++
+if has("fname_case")
+ au BufNewFile,BufRead *.cxx,*.c++,*.C,*.H,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
+else
+ au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
+endif
+
+" .h files can be C, Ch or C++, set c_syntax_for_h if you want C,
+" ch_syntax_for_h if you want Ch.
+au BufNewFile,BufRead *.h
+ \ if exists("c_syntax_for_h") | setf c |
+ \ elseif exists("ch_syntax_for_h") | setf ch |
+ \ else | setf cpp | endif
+
+" Ch (CHscript)
+au BufNewFile,BufRead *.chf setf ch
+
+" TLH files are C++ headers generated by Visual C++'s #import from typelibs
+au BufNewFile,BufRead *.tlh setf cpp
+
+" Cascading Style Sheets
+au BufNewFile,BufRead *.css setf css
+
+" Century Term Command Scripts (*.cmd too)
+au BufNewFile,BufRead *.con setf cterm
+
+" Changelog
+au BufNewFile,BufRead changelog.Debian,changelog.dch setf debchangelog
+au BufNewFile,BufRead [cC]hange[lL]og if getline(1) =~ '; urgency='
+ \| setf debchangelog | else | setf changelog | endif
+
+" CHILL
+au BufNewFile,BufRead *..ch setf chill
+
+" Changes for WEB and CWEB or CHILL
+au BufNewFile,BufRead *.ch call <SID>FTchange()
+
+" This function checks if one of the first ten lines start with a '@'. In
+" that case it is probably a change file.
+" If the first line starts with # or ! it's probably a ch file.
+" If a line has "main", "include", "//" ir "/*" it's probably ch.
+" Otherwise CHILL is assumed.
+fun! <SID>FTchange()
+ let lnum = 1
+ while lnum <= 10
+ if getline(lnum)[0] == '@'
+ setf change
+ return
+ endif
+ if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
+ setf ch
+ return
+ endif
+ if getline(lnum) =~ "MODULE"
+ setf chill
+ return
+ endif
+ if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
+ setf ch
+ return
+ endif
+ let lnum = lnum + 1
+ endwhile
+ setf chill
+endfun
+
+" Clean
+au BufNewFile,BufRead *.dcl,*.icl setf clean
+
+" Clever
+au BufNewFile,BufRead *.eni setf cl
+
+" Clever or dtd
+au BufNewFile,BufRead *.ent call <SID>FTent()
+
+fun! <SID>FTent()
+ " This function checks for valid cl syntax in the first five lines.
+ " Look for either an opening comment, '#', or a block start, '{".
+ " If not found, assume SGML.
+ let lnum = 1
+ while lnum < 6
+ let line = getline(lnum)
+ if line =~ '^\s*[#{]'
+ setf cl
+ return
+ elseif line !~ '^\s*$'
+ " Not a blank line, not a comment, and not a block start,
+ " so doesn't look like valid cl code.
+ break
+ endif
+ let lnum = lnum + 1
+ endw
+ setf dtd
+endfun
+
+" Clipper (or FoxPro)
+au BufNewFile,BufRead *.prg
+ \ if exists("g:filetype_prg") |
+ \ exe "setf " . g:filetype_prg |
+ \ else |
+ \ setf clipper |
+ \ endif
+
+" Cobol
+au BufNewFile,BufRead *.cbl,*.cob,*.cpy,*.lib setf cobol
+
+" Cold Fusion
+au BufNewFile,BufRead *.cfm,*.cfi,*.cfc setf cf
+
+" Configure scripts
+au BufNewFile,BufRead configure.in,configure.ac setf config
+
+" WildPackets EtherPeek Decoder
+au BufNewFile,BufRead *.dcd setf dcd
+
+" Enlightenment configuration files
+au BufNewFile,BufRead *enlightenment/*.cfg setf c
+
+" Eterm
+au BufNewFile,BufRead *Eterm/*.cfg setf eterm
+
+" Lynx config files
+au BufNewFile,BufRead lynx.cfg setf lynx
+
+" Quake
+au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg setf quake
+au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake
+
+" Quake C
+au BufNewFile,BufRead *.qc setf c
+
+" Configure files
+au BufNewFile,BufRead *.cfg setf cfg
+
+" Communicating Sequential Processes
+au BufNewFile,BufRead *.csp,*.fdr setf csp
+
+" CUPL logic description and simulation
+au BufNewFile,BufRead *.pld setf cupl
+au BufNewFile,BufRead *.si setf cuplsim
+
+" Debian Control
+au BufNewFile,BufRead */debian/control setf debcontrol
+
+" ROCKLinux package description
+au BufNewFile,BufRead *.desc setf desc
+
+" the D language
+au BufNewFile,BufRead *.d setf d
+
+" Desktop files
+au BufNewFile,BufRead *.desktop,.directory setf desktop
+
+" Diff files
+au BufNewFile,BufRead *.diff,*.rej,*.patch setf diff
+
+" Dircolors
+au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS setf dircolors
+
+" Diva (with Skill) or InstallShield
+au BufNewFile,BufRead *.rul
+ \ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' |
+ \ setf ishd |
+ \ else |
+ \ setf diva |
+ \ endif
+
+" DCL (Digital Command Language - vms) or DNS zone file
+au BufNewFile,BufRead *.com
+ \ if getline(1).getline(2) =~ '$ORIGIN\|$TTL\|IN\s*SOA'
+ \ || getline(1).getline(2).getline(3).getline(4) =~ 'BIND.*named'
+ \ | setf dns | else | setf dcl | endif
+
+" DOT
+au BufNewFile,BufRead *.dot setf dot
+
+" Dylan - lid files
+au BufNewFile,BufRead *.lid setf dylanlid
+
+" Dylan - intr files (melange)
+au BufNewFile,BufRead *.intr setf dylanintr
+
+" Dylan
+au BufNewFile,BufRead *.dylan setf dylan
+
+" Microsoft Module Definition
+au BufNewFile,BufRead *.def setf def
+
+" Dracula
+au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula
+
+" dsl
+au BufNewFile,BufRead *.dsl setf dsl
+
+" DTD (Document Type Definition for XML)
+au BufNewFile,BufRead *.dtd setf dtd
+
+" EDIF (*.edf,*.edif,*.edn,*.edo)
+au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif
+
+" Embedix Component Description
+au BufNewFile,BufRead *.ecd setf ecd
+
+" Eiffel or Specman
+au BufNewFile,BufRead *.e,*.E call FTCheck_e()
+
+" Elinks configuration
+au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks
+
+fun! FTCheck_e()
+ let n = 1
+ while n < 100 && n < line("$")
+ if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
+ setf specman
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf eiffel
+endfun
+
+" ERicsson LANGuage
+au BufNewFile,BufRead *.erl setf erlang
+
+" Elm Filter Rules file
+au BufNewFile,BufRead filter-rules setf elmfilt
+
+" ESQL-C
+au BufNewFile,BufRead *.ec,*.EC setf esqlc
+
+" Essbase script
+au BufNewFile,BufRead *.csc setf csc
+
+" Exim
+au BufNewFile,BufRead exim.conf setf exim
+
+" Expect
+au BufNewFile,BufRead *.exp setf expect
+
+" Exports
+au BufNewFile,BufRead exports setf exports
+
+" Fetchmail RC file
+au BufNewFile,BufRead .fetchmailrc setf fetchmail
+
+" Focus Executable
+au BufNewFile,BufRead *.fex,*.focexec setf focexec
+
+" Focus Master file (but not for auto.master)
+au BufNewFile,BufRead auto.master setf conf
+au BufNewFile,BufRead *.mas,*.master setf master
+
+" Forth
+au BufNewFile,BufRead *.fs,*.ft setf forth
+
+" Fortran
+au BufNewFile,BufRead *.f,*.F,*.for,*.fpp,*.ftn,*.f77,*.F77,*.f90,*.F90,*.f95,*.F95 setf fortran
+
+" FStab
+au BufNewFile,BufRead fstab setf fstab
+
+" GDB command files
+au BufNewFile,BufRead .gdbinit setf gdb
+
+" GDMO
+au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
+
+" Gedcom
+au BufNewFile,BufRead *.ged setf gedcom
+
+" Gkrellmrc
+au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
+
+" GP scripts (2.0 and onward)
+au BufNewFile,BufRead *.gp setf gp
+
+" 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
+
+" Gnuplot scripts
+au BufNewFile,BufRead *.gpi setf gnuplot
+
+" GrADS scripts
+au BufNewFile,BufRead *.gs setf grads
+
+" Groovy
+au BufNewFile,BufRead *.groovy setf groovy
+
+" GNU Server Pages
+au BufNewFile,BufRead *.gsp setf gsp
+
+" GTK RC
+au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
+
+" Haskell
+au BufNewFile,BufRead *.hs setf haskell
+au BufNewFile,BufRead *.lhs setf lhaskell
+au BufNewFile,BufRead *.chs setf chaskell
+
+" Hercules
+au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum setf hercules
+
+" HEX (Intel)
+au BufNewFile,BufRead *.hex,*.h32 setf hex
+
+" Tilde (must be before HTML)
+au BufNewFile,BufRead *.t.html setf tilde
+
+" HTML (.shtml and .stm for server side)
+au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call <SID>FTCheck_html()
+
+" Distinguish between HTML and XHTML
+fun! <SID>FTCheck_html()
+ let n = 1
+ while n < 10 && n < line("$")
+ if getline(n) =~ '\<DTD\s\+XHTML\s'
+ setf xhtml
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf html
+endfun
+
+
+" HTML with M4
+au BufNewFile,BufRead *.html.m4 setf htmlm4
+
+" HTML Cheetah template
+au BufNewFile,BufRead *.tmpl setf htmlcheetah
+
+" Hyper Builder
+au BufNewFile,BufRead *.hb setf hb
+
+" Icon
+au BufNewFile,BufRead *.icn setf icon
+
+" IDL (Interface Description Language)
+au BufNewFile,BufRead *.idl call <SID>FTCheck_idl()
+
+" Distinguish between standard IDL and MS-IDL
+fun! <SID>FTCheck_idl()
+ let n = 1
+ while n < 50 && n < line("$")
+ if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
+ setf msidl
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf idl
+endfun
+
+" Microsoft IDL (Interface Description Language) Also *.idl
+" MOF = WMI (Windows Management Instrumentation) Managed Object Format
+au BufNewFile,BufRead *.odl,*.mof setf msidl
+
+" Icewm menu
+au BufNewFile,BufRead */.icewm/menu setf icemenu
+
+" Inform
+au BufNewFile,BufRead .indent.pro setf indent
+
+" IDL (Interactive Data Language)
+au BufNewFile,BufRead *.pro setf idlang
+
+" Inform
+au BufNewFile,BufRead *.inf,*.INF setf inform
+
+" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
+au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl setf fgl
+
+" .INI file for MSDOS
+au BufNewFile,BufRead *.ini setf dosini
+
+" SysV Inittab
+au BufNewFile,BufRead inittab setf inittab
+
+" Inno Setup
+au BufNewFile,BufRead *.iss setf iss
+
+" JAL
+au BufNewFile,BufRead *.jal,*.JAL setf jal
+
+" Jam
+au BufNewFile,BufRead *.jpl,*.jpr setf jam
+
+" Java
+au BufNewFile,BufRead *.java,*.jav setf java
+
+" JavaCC
+au BufNewFile,BufRead *.jj,*.jjt setf javacc
+
+" JavaScript
+au BufNewFile,BufRead *.js,*.javascript setf javascript
+
+" Java Server Pages
+au BufNewFile,BufRead *.jsp setf jsp
+
+" Java Properties resource file (note: doesn't catch font.properties.pl)
+au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??,*.properties_??_??_* setf jproperties
+
+" Jess
+au BufNewFile,BufRead *.clp setf jess
+
+" Jgraph
+au BufNewFile,BufRead *.jgr setf jgraph
+
+" Kixtart
+au BufNewFile,BufRead *.kix setf kix
+
+" Kimwitu[++]
+au BufNewFile,BufRead *.k setf kwt
+
+" KDE script
+au BufNewFile,BufRead *.ks setf kscript
+
+" Lace (ISE)
+au BufNewFile,BufRead *.ace,*.ACE setf lace
+
+" Latte
+au BufNewFile,BufRead *.latte,*.lte setf latte
+
+" LambdaProlog (*.mod too, see Modsim)
+au BufNewFile,BufRead *.sig setf lprolog
+
+" LDAP LDIF
+au BufNewFile,BufRead *.ldif setf ldif
+
+" Lex
+au BufNewFile,BufRead *.lex,*.l setf lex
+
+" Libao
+au BufNewFile,BufRead /etc/libao.conf,*/.libao setf libao
+
+" LFTP
+au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc setf lftp
+
+" Lifelines (or Lex for C++!)
+au BufNewFile,BufRead *.ll setf lifelines
+
+" Lilo: Linux loader
+au BufNewFile,BufRead lilo.conf* setf lilo
+
+" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
+if has("fname_case")
+ au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp
+else
+ au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp
+endif
+
+" Lite
+au BufNewFile,BufRead *.lite,*.lt setf lite
+
+" Logtalk
+au BufNewFile,BufRead *.lgt setf logtalk
+
+" LOTOS
+au BufNewFile,BufRead *.lot,*.lotos setf lotos
+
+" Lout (also: *.lt)
+au BufNewFile,BufRead *.lou,*.lout setf lout
+
+" Lua
+au BufNewFile,BufRead *.lua setf lua
+
+" Lynx style file (or LotusScript!)
+au BufNewFile,BufRead *.lss setf lss
+
+" M4
+au BufNewFile,BufRead *.m4
+ \ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif
+
+" MaGic Point
+au BufNewFile,BufRead *.mgp setf mgp
+
+" Mail (for Elm, trn, mutt, rn, slrn)
+au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt-*-\w\+,mutt\w\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
+
+" Mailcap configuration file
+au BufNewFile,BufRead .mailcap,mailcap setf mailcap
+
+" Makefile
+au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
+
+" MakeIndex
+au BufNewFile,BufRead *.ist,*.mst setf ist
+
+" Manpage
+au BufNewFile,BufRead *.man setf man
+
+" Maple V
+au BufNewFile,BufRead *.mv,*.mpl,*.mws setf maple
+
+" Mason
+au BufNewFile,BufRead *.mason,*.mhtml setf mason
+
+" Matlab or Objective C
+au BufNewFile,BufRead *.m call FTCheck_m()
+
+fun! FTCheck_m()
+ let n = 1
+ while n < 10
+ let line = getline(n)
+ if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
+ setf objc
+ return
+ endif
+ if line =~ '^\s*%'
+ setf matlab
+ return
+ endif
+ if line =~ '^\s*(\*'
+ setf mma
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf matlab
+endfun
+
+" Maya Extension Language
+au BufNewFile,BufRead *.mel setf mel
+
+" Metafont
+au BufNewFile,BufRead *.mf setf mf
+
+" MetaPost
+au BufNewFile,BufRead *.mp setf mp
+
+" MMIX or VMS makefile
+au BufNewFile,BufRead *.mms call FTCheck_mms()
+
+fun! FTCheck_mms()
+ let n = 1
+ while n < 10
+ let line = getline(n)
+ if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
+ setf mmix
+ return
+ endif
+ if line =~ '^\s*#'
+ setf make
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf mmix
+endfun
+
+
+" Modsim III (or LambdaProlog)
+au BufNewFile,BufRead *.mod
+ \ if getline(1) =~ '\<module\>' |
+ \ setf lprolog |
+ \ else |
+ \ setf modsim3 |
+ \ endif
+
+" Modula 2
+au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2
+
+" Modula 3 (.m3, .i3, .mg, .ig)
+au BufNewFile,BufRead *.[mi][3g] setf modula3
+
+" Monk
+au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk
+
+" MOO
+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 | setf modconf | endif
+
+" Mplayer config
+au BufNewFile,BufRead mplayer.conf,*/.mplayer/config setf mplayerconf
+
+" Moterola S record
+au BufNewFile,BufRead *.s19,*.s28,*.s37 setf srec
+
+" Msql
+au BufNewFile,BufRead *.msql setf msql
+
+" Mysql
+au BufNewFile,BufRead *.mysql setf mysql
+
+" M$ Resource files
+au BufNewFile,BufRead *.rc setf rc
+
+" Mush
+au BufNewFile,BufRead *.mush setf mush
+
+" Mutt setup file
+au BufNewFile,BufRead .muttrc*,*/.mutt/muttrc*,Muttrc setf muttrc
+
+" Nastran input/DMAP
+"au BufNewFile,BufRead *.dat setf nastran
+
+" Natural
+au BufNewFile,BufRead *.NS[ACGLMNPS] setf natural
+
+" Novell netware batch files
+au BufNewFile,BufRead *.ncf setf ncf
+
+" Nroff/Troff (*.ms and *.t are checked below)
+au BufNewFile,BufRead *.me
+ \ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" |
+ \ setf nroff |
+ \ endif
+au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff
+au BufNewFile,BufRead *.[1-9] call <SID>FTnroff()
+
+" This function checks if one of the first five lines start with a dot. In
+" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
+fun! <SID>FTnroff()
+ if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
+ setf nroff
+ return 1
+ endif
+ return 0
+endfun
+
+" Nroff or Objective C++
+au BufNewFile,BufRead *.mm call <SID>FTcheck_mm()
+
+fun! <SID>FTcheck_mm()
+ let n = 1
+ while n < 10
+ let line = getline(n)
+ if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
+ setf objcpp
+ return
+ endif
+ let n = n + 1
+ endwhile
+ setf nroff
+endfun
+
+" Not Quite C
+au BufNewFile,BufRead *.nqc setf nqc
+
+" NSIS
+au BufNewFile,BufRead *.nsi setf nsis
+
+" OCAML
+au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly setf ocaml
+
+" Occam
+au BufNewFile,BufRead *.occ setf occam
+
+" Omnimark
+au BufNewFile,BufRead *.xom,*.xin setf omnimark
+
+" OpenROAD
+au BufNewFile,BufRead *.or setf openroad
+
+" OPL
+au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl
+
+" Oracle config file
+au BufNewFile,BufRead *.ora setf ora
+
+" Packet filter conf
+au BufNewFile,BufRead pf.conf setf pf
+
+" PApp
+au BufNewFile,BufRead *.papp,*.pxml,*.pxsl setf papp
+
+" Pascal (also *.p)
+au BufNewFile,BufRead *.pas setf pascal
+
+" Delphi project file
+au BufNewFile,BufRead *.dpr setf pascal
+
+" Perl
+if has("fname_case")
+ au BufNewFile,BufRead *.pl,*.PL call FTCheck_pl()
+else
+ au BufNewFile,BufRead *.pl call FTCheck_pl()
+endif
+
+fun! FTCheck_pl()
+ if exists("g:filetype_pl")
+ exe "setf " . g:filetype_pl
+ else
+ " recognize Prolog by specific text in the first non-empty line
+ " require a blank after the '%' because Perl uses "%list" and "%translate"
+ let l = getline(nextnonblank(1))
+ if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
+ setf prolog
+ else
+ setf perl
+ endif
+ endif
+endfun
+
+" Perl, XPM or XPM2
+au BufNewFile,BufRead *.pm
+ \ if getline(1) =~ "XPM2" |
+ \ setf xpm2 |
+ \ elseif getline(1) =~ "XPM" |
+ \ setf xpm |
+ \ else |
+ \ setf perl |
+ \ endif
+
+" Perl POD
+au BufNewFile,BufRead *.pod setf pod
+
+" Php3
+au BufNewFile,BufRead *.php,*.php3 setf php
+
+" Phtml
+au BufNewFile,BufRead *.phtml setf phtml
+
+" Pike
+au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike
+
+" Pinfo config
+au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo
+
+" Palm Resource compiler
+au BufNewFile,BufRead *.rcp setf pilrc
+
+" Pine config
+au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine
+
+" PL/M (also: *.inp)
+au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm
+
+" PL/SQL
+au BufNewFile,BufRead *.pls,*.plsql setf plsql
+
+" PLP
+au BufNewFile,BufRead *.plp setf plp
+
+" PO and PO template (GNU gettext)
+au BufNewFile,BufRead *.po,*.pot setf po
+
+" Postfix main config
+au BufNewFile,BufRead main.cf setf pfmain
+
+" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
+au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr
+
+" PostScript Printer Description
+au BufNewFile,BufRead *.ppd setf ppd
+
+" Povray
+au BufNewFile,BufRead *.pov setf pov
+
+" Povray configuration
+au BufNewFile,BufRead .povrayrc setf povini
+
+" Povray, PHP or assembly
+au BufNewFile,BufRead *.inc call FTCheck_inc()
+
+fun! FTCheck_inc()
+ if exists("g:filetype_inc")
+ exe "setf " . g:filetype_inc
+ else
+ let lines = getline(1).getline(2).getline(3)
+ if lines =~? "perlscript"
+ setf aspperl
+ elseif lines =~ "<%"
+ setf aspvbs
+ elseif lines =~ "<?"
+ setf php
+ else
+ call FTCheck_asmsyntax()
+ if exists("b:asmsyntax")
+ exe "setf " . b:asmsyntax
+ else
+ setf pov
+ endif
+ endif
+ endif
+endfun
+
+" Printcap and Termcap
+au BufNewFile,BufRead *printcap
+ \ let b:ptcap_type = "print" | setf ptcap
+au BufNewFile,BufRead *termcap
+ \ let b:ptcap_type = "term" | setf ptcap
+
+" PCCTS / ANTRL
+"au BufNewFile,BufRead *.g setf antrl
+au BufNewFile,BufRead *.g setf pccts
+
+" PPWizard
+au BufNewFile,BufRead *.it,*.ih setf ppwiz
+
+" Oracle Pro*C/C++
+au BufNewFile,BufRead .pc setf proc
+
+" Procmail
+au BufNewFile,BufRead .procmail,.procmailrc setf procmail
+
+" Progress or CWEB
+au BufNewFile,BufRead *.w call <SID>FTprogress_cweb()
+
+function! <SID>FTprogress_cweb()
+ if exists("g:filetype_w")
+ exe "setf " . g:filetype_w
+ return
+ endif
+ if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
+ setf progress
+ else
+ setf cweb
+ endif
+endfun
+
+" Progress or assembly
+au BufNewFile,BufRead *.i call <SID>FTprogress_asm()
+
+function! <SID>FTprogress_asm()
+ if exists("g:filetype_i")
+ exe "setf " . g:filetype_i
+ return
+ endif
+ " This function checks for an assembly comment the first ten lines.
+ " If not found, assume Progress.
+ let lnum = 1
+ while lnum <= 10
+ let line = getline(lnum)
+ if line =~ '^\s*;' || line =~ '^\*'
+ call FTCheck_asm()
+ return
+ elseif line !~ '^\s*$' || line =~ '^/\*'
+ " Not an empty line: Doesn't look like valid assembly code.
+ " Or it looks like a Progress /* comment
+ break
+ endif
+ let lnum = lnum + 1
+ endw
+ setf progress
+endfun
+
+" Progress or Pascal
+au BufNewFile,BufRead *.p call <SID>FTprogress_pascal()
+
+function! <SID>FTprogress_pascal()
+ if exists("g:filetype_p")
+ exe "setf " . g:filetype_p
+ return
+ endif
+ " This function checks for valid Pascal syntax in the first ten lines.
+ " Look for either an opening comment or a program start.
+ " If not found, assume Progress.
+ let lnum = 1
+ while lnum <= 10
+ let line = getline(lnum)
+ if line =~ '^\s*\(program\|procedure\|function\|const\|type\|var\)\>'
+ \ || line =~ '^\s*{' || line =~ '^\s*(\*'
+ setf pascal
+ return
+ elseif line !~ '^\s*$' || line =~ '^/\*'
+ " Not an empty line: Doesn't look like valid Pascal code.
+ " Or it looks like a Progress /* comment
+ break
+ endif
+ let lnum = lnum + 1
+ endw
+ setf progress
+endfun
+
+
+" Software Distributor Product Specification File (POSIX 1387.2-1995)
+au BufNewFile,BufRead *.psf setf psf
+au BufNewFile,BufRead INDEX,INFO
+ \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
+ \ setf psf |
+ \ endif
+
+" Prolog
+au BufNewFile,BufRead *.pdb setf prolog
+
+" Pyrex
+au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
+
+" Python
+au BufNewFile,BufRead *.py,*.pyw setf python
+
+" Radiance
+au BufNewFile,BufRead *.rad,*.mat setf radiance
+
+" Ratpoison config/command files
+au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison
+
+" RCS file
+au BufNewFile,BufRead *\,v setf rcs
+
+" Readline
+au BufNewFile,BufRead .inputrc setf readline
+
+" Registry for MS-Windows
+au BufNewFile,BufRead *.reg
+ \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif
+
+" Renderman Interface Bytestream
+au BufNewFile,BufRead *.rib setf rib
+
+" Rexx
+au BufNewFile,BufRead *.rexx,*.rex setf rexx
+
+" R (Splus)
+au BufNewFile,BufRead *.s,*.S setf r
+
+" Rexx, Rebol or R
+au BufNewFile,BufRead *.r,*.R call <SID>FTCheck_r()
+
+fun! <SID>FTCheck_r()
+ if getline(1) =~ '^REBOL'
+ setf rebol
+ else
+ let n = 1
+ let max = line("$")
+ if max > 50
+ let max = 50
+ endif
+ while n < max
+ " R has # comments
+ if getline(n) =~ '^\s*#'
+ setf r
+ break
+ endif
+ " Rexx has /* comments */
+ if getline(n) =~ '^\s*/\*'
+ setf rexx
+ break
+ endif
+ let n = n + 1
+ endwhile
+ if n >= max
+ setf rexx
+ endif
+ endif
+endfun
+
+" Remind
+au BufNewFile,BufRead .reminders* setf remind
+
+" Resolv.conf
+au BufNewFile,BufRead resolv.conf setf resolv
+
+" Relax NG Compact
+au BufNewFile,BufRead *.rnc setf rnc
+
+" RPL/2
+au BufNewFile,BufRead *.rpl setf rpl
+
+" Robots.txt
+au BufNewFile,BufRead robots.txt setf robots
+
+" Rpcgen
+au BufNewFile,BufRead *.x setf rpcgen
+
+" reStructuredText Documentation Format
+au BufNewFile,BufRead *.rst setf rst
+
+" RTF
+au BufNewFile,BufRead *.rtf setf rtf
+
+" Ruby
+au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec setf ruby
+
+" S-lang (or shader language!)
+au BufNewFile,BufRead *.sl setf slang
+
+" Samba config
+au BufNewFile,BufRead smb.conf setf samba
+
+" SAS script
+au BufNewFile,BufRead *.sas setf sas
+
+" Sather
+au BufNewFile,BufRead *.sa setf sather
+
+" Scilab
+au BufNewFile,BufRead *.sci setf scilab
+
+" SDL
+au BufNewFile,BufRead *.sdl,*.pr setf sdl
+
+" sed
+au BufNewFile,BufRead *.sed setf sed
+
+" Sendmail
+au BufNewFile,BufRead sendmail.cf setf sm
+
+" Sendmail .mc files are actually m4
+au BufNewFile,BufRead *.mc setf m4
+
+" 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" |
+ \ setf docbk |
+ \ else |
+ \ setf sgml |
+ \ endif
+
+" SGMLDECL
+au BufNewFile,BufRead *.decl,*.dcl,*.dec
+ \ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
+ \ setf sgmldecl |
+ \ endif
+
+" SGML catalog file
+au BufNewFile,BufRead sgml.catalog*,catalog setf catalog
+
+" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
+" 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))
+
+fun! SetFileTypeSH(name)
+ if a:name =~ '\<ksh\>'
+ let b:is_kornshell = 1
+ if exists("b:is_bash")
+ unlet b:is_bash
+ endif
+ if exists("b:is_sh")
+ unlet b:is_sh
+ endif
+ elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
+ let b:is_bash = 1
+ if exists("b:is_kornshell")
+ unlet b:is_kornshell
+ endif
+ if exists("b:is_sh")
+ unlet b:is_sh
+ endif
+ elseif a:name =~ '\<sh\>'
+ let b:is_sh = 1
+ if exists("b:is_kornshell")
+ unlet b:is_kornshell
+ endif
+ if exists("b:is_bash")
+ unlet b:is_bash
+ endif
+ endif
+ setf sh
+endfun
+
+" tcsh scripts
+au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login setf tcsh
+
+" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
+au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias call SetFileTypeCSH()
+
+fun! SetFileTypeCSH()
+ if exists("g:filetype_csh")
+ exe "setf " . g:filetype_csh
+ elseif &shell =~ "tcsh"
+ setf tcsh
+ else
+ setf csh
+ endif
+endfun
+
+" Z-Shell script
+au BufNewFile,BufRead .zsh*,.zlog*,.zprofile,/etc/zprofile,.zfbfmarks,.zcompdump* setf zsh
+
+" Scheme
+au BufNewFile,BufRead *.scm,*.ss setf scheme
+
+" Screen RC
+au BufNewFile,BufRead .screenrc,screenrc setf screen
+
+" Simula
+au BufNewFile,BufRead *.sim setf simula
+
+" SINDA
+au BufNewFile,BufRead *.sin,*.s85 setf sinda
+
+" SKILL
+au BufNewFile,BufRead *.il setf skill
+
+" SLRN
+au BufNewFile,BufRead .slrnrc setf slrnrc
+au BufNewFile,BufRead *.score setf slrnsc
+
+" Smalltalk
+au BufNewFile,BufRead *.st,*.cls setf st
+
+" Smarty templates
+au BufNewFile,BufRead *.tpl setf smarty
+
+" SMIL or XML
+au BufNewFile,BufRead *.smil
+ \ if getline(1) =~ '<?\s*xml.*?>' |
+ \ setf xml |
+ \ else |
+ \ setf smil |
+ \ endif
+
+" SMIL or SNMP MIB file
+au BufNewFile,BufRead *.smi
+ \ if getline(1) =~ '\<smil\>' |
+ \ setf smil |
+ \ else |
+ \ setf mib |
+ \ endif
+
+" SMITH
+au BufNewFile,BufRead *.smt,*.smith setf smith
+
+" Snobol4
+au BufNewFile,BufRead *.sno setf snobol4
+
+" SNMP MIB files
+au BufNewFile,BufRead *.mib,*.my setf mib
+
+" Snort Configuration
+au BufNewFile,BufRead *.hog,snort.conf,vision.conf,*.rules setf hog
+
+" Spec (Linux RPM)
+au BufNewFile,BufRead *.spec setf spec
+
+" Speedup (AspenTech plant simulator)
+au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup
+
+" Slice
+au BufNewFile,BufRead *.ice setf slice
+
+" Spice
+au BufNewFile,BufRead *.sp,*.spice setf spice
+
+" Spyce
+au BufNewFile,BufRead *.spy,*.spi setf spyce
+
+" Squid
+au BufNewFile,BufRead squid.conf setf squid
+
+" SQL (all but the first one for Oracle Designer)
+au BufNewFile,BufRead *.sql,*.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql
+
+" SQLJ
+au BufNewFile,BufRead *.sqlj setf sqlj
+
+" SQR
+au BufNewFile,BufRead *.sqr,*.sqi setf sqr
+
+" OpenSSH configuration
+au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig
+
+" OpenSSH server configuration
+au BufNewFile,BufRead sshd_config setf sshdconfig
+
+" Stored Procedures
+au BufNewFile,BufRead *.stp setf stp
+
+" Standard ML
+au BufNewFile,BufRead *.sml setf sml
+
+" Tads (or Nroff)
+au BufNewFile,BufRead *.t
+ \ if !<SID>FTnroff() | setf tads | endif
+
+" Tags
+au BufNewFile,BufRead tags setf tags
+
+" TAK
+au BufNewFile,BufRead *.tak setf tak
+
+" Tcl
+au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk setf tcl
+
+" TealInfo
+au BufNewFile,BufRead *.tli setf tli
+
+" Telix Salt
+au BufNewFile,BufRead *.slt setf tsalt
+
+" Terminfo
+au BufNewFile,BufRead *.ti setf terminfo
+
+" TeX
+au BufNewFile,BufRead *.tex,*.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
+
+" Texinfo
+au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo
+
+" TeX configuration
+au BufNewFile,BufRead texmf.cnf setf texmf
+
+" Tidy config
+au BufNewFile,BufRead .tidyrc,tidyrc setf tidy
+
+" TF mud client
+au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf
+
+" TSS - Geometry
+au BufNewFile,BufReadPost *.tssgm setf tssgm
+
+" TSS - Optics
+au BufNewFile,BufReadPost *.tssop setf tssop
+
+" TSS - Command Line (temporary)
+au BufNewFile,BufReadPost *.tsscl setf tsscl
+
+" Motif UIT/UIL files
+au BufNewFile,BufRead *.uit,*.uil setf uil
+
+" UnrealScript
+au BufNewFile,BufRead *.uc setf uc
+
+" Verilog HDL
+au BufNewFile,BufRead *.v setf verilog
+
+" VHDL
+au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vhdl_[0-9]*,*.vbe,*.vst setf vhdl
+
+" Vim script
+au BufNewFile,BufRead *.vim,.exrc,_exrc setf vim
+
+" Viminfo file
+au BufNewFile,BufRead .viminfo,_viminfo setf viminfo
+
+" Virata Config Script File
+au BufRead,BufNewFile *.hw,*.module,*.pkg setf virata
+
+" Visual Basic (also uses *.bas) or FORM
+au BufNewFile,BufRead *.frm call <SID>FTVB("form")
+
+" SaxBasic is close to Visual Basic
+au BufNewFile,BufRead *.sba setf vb
+
+" Vgrindefs file
+au BufNewFile,BufRead vgrindefs setf vgrindefs
+
+" VRML V1.0c
+au BufNewFile,BufRead *.wrl setf vrml
+
+" Webmacro
+au BufNewFile,BufRead *.wm setf webmacro
+
+" Wget config
+au BufNewFile,BufRead .wgetrc,wgetrc setf wget
+
+" Website MetaLanguage
+au BufNewFile,BufRead *.wml setf wml
+
+" Winbatch
+au BufNewFile,BufRead *.wbt setf winbatch
+
+" WvDial
+au BufNewFile,BufRead wvdial.conf,.wvdialrc setf wvdial
+
+" CVS RC file
+au BufNewFile,BufRead .cvsrc setf cvsrc
+
+" CVS commit file
+au BufNewFile,BufRead cvs\d\+ setf cvs
+
+" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
+" lines in a WEB file).
+au BufNewFile,BufRead *.web
+ \ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" |
+ \ setf web |
+ \ else |
+ \ setf winbatch |
+ \ endif
+
+" Windows Scripting Host and Windows Script Component
+au BufNewFile,BufRead *.ws[fc] setf wsh
+
+" X Pixmap (dynamically sets colors, use BufEnter to make it work better)
+au BufEnter *.xpm
+ \ if getline(1) =~ "XPM2" |
+ \ setf xpm2 |
+ \ else |
+ \ setf xpm |
+ \ endif
+au BufEnter *.xpm2 setf xpm2
+
+" XFree86 config
+au BufNewFile,BufRead XF86Config
+ \ if getline(1) =~ '\<XConfigurator\>' |
+ \ let b:xf86c_xfree86_version = 3 |
+ \ endif |
+ \ setf xf86conf
+
+" Xorg config
+au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86c_xfree86_version = 4 | setf xf86conf
+
+" XS Perl extension interface language
+au BufNewFile,BufRead *.xs setf xs
+
+" X resources file
+au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults
+
+" Xmath
+au BufNewFile,BufRead *.msc,*.msf setf xmath
+au BufNewFile,BufRead *.ms
+ \ if !<SID>FTnroff() | setf xmath | endif
+
+" XML
+au BufNewFile,BufRead *.xml
+ \ if getline(1) . getline(2) . getline(3) =~ '<!DOCTYPE.*DocBook' |
+ \ let b:docbk_type="xml" |
+ \ setf docbk |
+ \ else |
+ \ setf xml |
+ \ endif
+
+" XMI (holding UML models) is also XML
+au BufNewFile,BufRead *.xmi setf xml
+
+" CSPROJ files are Visual Studio.NET's XML-based project config files
+au BufNewFile,BufRead *.csproj,*.csproj.user setf xml
+
+" Qt Linguist translation source and Qt User Interface Files are XML
+au BufNewFile,BufRead *.ts,*.ui setf xml
+
+" XSD
+au BufNewFile,BufRead *.xsd setf xsd
+
+" Xslt
+au BufNewFile,BufRead *.xsl,*.xslt setf xslt
+
+" Yacc
+au BufNewFile,BufRead *.y,*.yy setf yacc
+
+" Yaml
+au BufNewFile,BufRead *.yaml,*.yml setf yaml
+
+" Z80 assembler asz80
+au BufNewFile,BufRead *.z8a setf z8a
+
+augroup END
+
+
+" Source the user-specified filetype file, for backwards compatibility with
+" Vim 5.x.
+if exists("myfiletypefile") && file_readable(expand(myfiletypefile))
+ execute "source " . myfiletypefile
+endif
+
+
+" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
+" when there are no matching file name extensions.
+" Don't do this for compressed files.
+augroup filetypedetect
+au BufNewFile,BufRead *
+ \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ \ | runtime! scripts.vim | endif
+au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
+
+
+" Extra checks for when no filetype has been detected now. Mostly used for
+" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim
+" script file.
+
+" BIND zone
+au BufNewFile,BufRead /var/named/* setf bindzone
+
+" Changelog
+au BufNewFile,BufRead [cC]hange[lL]og* if getline(1) =~ '; urgency='
+ \| setf debchangelog | else | setf changelog | endif
+
+" Crontab
+au BufNewFile,BufRead crontab,crontab.* setf crontab
+
+" Dracula
+au BufNewFile,BufRead drac.* setf dracula
+
+" Fvwm
+au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
+ \ let b:fvwm_version = 1 | setf fvwm
+au BufNewFile,BufRead *fvwm2rc*
+ \ if expand("<afile>:e") == "m4" | setf fvwm2m4 | else |
+ \ let b:fvwm_version = 2 | setf fvwm | endif
+
+" GTK RC
+au BufNewFile,BufRead .gtkrc*,gtkrc* setf gtkrc
+
+" Jam
+au BufNewFile,BufRead Prl*.*,JAM*.* setf jam
+
+" Jargon
+au! BufNewFile,BufRead *jarg*
+ \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' |
+ \ setf jargon |
+ \ endif
+
+" Makefile
+au BufNewFile,BufRead [mM]akefile* setf make
+
+" Ruby Makefile
+au BufNewFile,BufRead [rR]akefile* setf ruby
+
+" Mutt setup file
+au BufNewFile,BufRead muttrc*,Muttrc* setf muttrc
+
+" Nroff macros
+au BufNewFile,BufRead tmac.* setf nroff
+
+" Printcap and Termcap
+au BufNewFile,BufRead *printcap*
+ \ if !did_filetype() | let b:ptcap_type = "print" | setf ptcap | endif
+au BufNewFile,BufRead *termcap*
+ \ if !did_filetype() | let b:ptcap_type = "term" | setf ptcap | endif
+
+" Vim script
+au BufNewFile,BufRead *vimrc* setf vim
+
+" Subversion commit file
+au BufNewFile,BufRead svn-commit.*.tmp setf svn
+
+" X resources file
+au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* setf xdefaults
+
+" XFree86 config
+au BufNewFile,BufRead XF86Config-4*
+ \ let b:xf86c_xfree86_version = 4 | setf xf86conf
+au BufNewFile,BufRead XF86Config*
+ \ if getline(1) =~ '\<XConfigurator\>' |
+ \ let b:xf86c_xfree86_version = 3 |
+ \ endif |
+ \ setf xf86conf
+
+" X11 xmodmap
+au BufNewFile,BufRead *xmodmap* setf xmodmap
+
+" Z-Shell script
+au BufNewFile,BufRead zsh*,zlog* setf zsh
+
+
+" Generic configuration file (check this last, it's just guessing!)
+au 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
+
+" Use the plugin-filetype checks last, they may overrule any of the previously
+" detected filetypes.
+runtime! ftdetect/*.vim
+
+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'.
+if has("menu") && has("gui_running")
+ \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
+ source <sfile>:p:h/menu.vim
+endif
+
+" Restore 'cpoptions'
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftoff.vim b/runtime/ftoff.vim
new file mode 100644
index 000000000..377c6ef82
--- /dev/null
+++ b/runtime/ftoff.vim
@@ -0,0 +1,11 @@
+" Vim support file to switch off detection of file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2001 Jun 11
+
+if exists("did_load_filetypes")
+ unlet did_load_filetypes
+endif
+
+" Remove all autocommands in the filetypedetect group
+silent! au! filetypedetect *
diff --git a/runtime/ftplugin.vim b/runtime/ftplugin.vim
new file mode 100644
index 000000000..2c6455088
--- /dev/null
+++ b/runtime/ftplugin.vim
@@ -0,0 +1,27 @@
+" Vim support file to switch on loading plugins for file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2003 May 10
+
+if exists("did_load_ftplugin")
+ finish
+endif
+let did_load_ftplugin = 1
+
+augroup filetypeplugin
+ au FileType * call s:LoadFTPlugin()
+ func! s:LoadFTPlugin()
+ if expand("<amatch>") != ""
+ if exists("b:undo_ftplugin")
+ exe b:undo_ftplugin
+ unlet b:undo_ftplugin b:did_ftplugin
+ endif
+ if &cpo =~# "S" && exists("b:did_ftplugin")
+ " In compatible mode options are reset to the global values, need to
+ " set the local values also when a plugin was already used.
+ unlet b:did_ftplugin
+ endif
+ runtime! ftplugin/<amatch>.vim ftplugin/<amatch>_*.vim ftplugin/<amatch>/*.vim
+ endif
+ endfunc
+augroup END
diff --git a/runtime/ftplugin/README.txt b/runtime/ftplugin/README.txt
new file mode 100644
index 000000000..19ad58bdd
--- /dev/null
+++ b/runtime/ftplugin/README.txt
@@ -0,0 +1,24 @@
+The ftplugin directory is for Vim plugin scripts that are only used for a
+specific filetype.
+
+All files ending in .vim in this directory and subdirectories will be sourced
+by Vim when it detects the filetype that matches the name of the file or
+subdirectory.
+For example, these are all loaded for the "c" filetype:
+
+ c.vim
+ c_extra.vim
+ c/settings.vim
+
+Note that the "_" in "c_extra.vim" is required to separate the filetype name
+from the following arbitrary name.
+
+The filetype plugins are only loaded when the ":filetype plugin" command has
+been used.
+
+The default filetype plugin files contain settings that 95% of the users will
+want to use. They do not contain personal preferences, like the value of
+'shiftwidth'.
+
+If you want to do additional settings, or overrule the default filetype
+plugin, you can create your own plugin file. See ":help ftplugin" in Vim.
diff --git a/runtime/ftplugin/aap.vim b/runtime/ftplugin/aap.vim
new file mode 100644
index 000000000..90d404fa6
--- /dev/null
+++ b/runtime/ftplugin/aap.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language: Aap recipe
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Nov 04
+
+" 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
+
+" Reset 'formatoptions', 'comments' and 'expandtab' to undo this plugin.
+let b:undo_ftplugin = "setl fo< com< et<"
+
+" 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 'comments' to format dashed lists in comments.
+setlocal comments=s:#\ -,m:#\ \,e:#,n:#,fb:-
+
+" Expand tabs to spaces to avoid trouble.
+setlocal expandtab
diff --git a/runtime/ftplugin/abaqus.vim b/runtime/ftplugin/abaqus.vim
new file mode 100644
index 000000000..f63962f81
--- /dev/null
+++ b/runtime/ftplugin/abaqus.vim
@@ -0,0 +1,75 @@
+" Vim filetype plugin file
+" Language: Abaqus finite element input file (www.abaqus.com)
+" Maintainer: Carl Osterwisch <osterwischc@asme.org>
+" Last Change: 2004 May
+
+" 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
+
+" Save the compatibility options and temporarily switch to vim defaults
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+" Folding
+if version >= 600
+ " Fold all lines that do not begin with *
+ setlocal foldexpr=getline(v:lnum)[0]!=\"\*\"
+ setlocal foldmethod=expr
+endif
+
+" Set the format of the include file specification for Abaqus
+" Used in :check gf ^wf [i and other commands
+setlocal include=\\<\\cINPUT\\s*=
+
+" Remove characters up to the first = when evaluating filenames
+setlocal includeexpr=substitute(v:fname,'.\\{-}=','','')
+
+" Define format of comment lines (see 'formatoptions' for uses)
+setlocal comments=:**
+setlocal commentstring=**%s
+
+" Definitions start with a * and assign a NAME, NSET, or ELSET
+" Used in [d ^wd and other commands
+setlocal define=^\\*\\a.*\\c\\(NAME\\\|NSET\\\|ELSET\\)\\s*=
+
+" Abaqus keywords and identifiers may include a - character
+setlocal iskeyword+=-
+
+" Set the file browse filter (currently only supported under Win32 gui)
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" .
+ \ "Abaqus Results (*.dat)\t*.dat\n" .
+ \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Define keys used to move [count] sections backward or forward.
+" TODO: Make this do something intelligent in visual mode.
+nnoremap <silent> <buffer> [[ :call <SID>Abaqus_Jump('?^\*\a?')<CR>
+nnoremap <silent> <buffer> ]] :call <SID>Abaqus_Jump('/^\*\a/')<CR>
+function! <SID>Abaqus_Jump(motion) range
+ let s:count = v:count1
+ mark '
+ while s:count > 0
+ silent! execute a:motion
+ let s:count = s:count - 1
+ endwhile
+endfunction
+
+" Define key to toggle commenting of the current line or range
+noremap <silent> <buffer> <m-c> :call <SID>Abaqus_ToggleComment()<CR>j
+function! <SID>Abaqus_ToggleComment() range
+ if strpart(getline(a:firstline), 0, 2) == "**"
+ " Un-comment all lines in range
+ silent execute a:firstline . ',' . a:lastline . 's/^\*\*//'
+ else
+ " Comment all lines in range
+ silent execute a:firstline . ',' . a:lastline . 's/^/**/'
+ endif
+endfunction
+
+" Restore saved compatibility options
+let &cpoptions = s:cpo_save
diff --git a/runtime/ftplugin/ada.vim b/runtime/ftplugin/ada.vim
new file mode 100644
index 000000000..06c057fc8
--- /dev/null
+++ b/runtime/ftplugin/ada.vim
@@ -0,0 +1,226 @@
+" Vim Ada plugin file
+" Language: Ada
+" Maintainer: Neil Bird <neil@fnxweb.com>
+" Last Change: 2003 May 11
+" Version: $Id$
+" Look for the latest version at http://vim.sourceforge.net/
+"
+" Perform Ada specific completion & tagging.
+"
+"
+" Provides mapping overrides for tag jumping that figure out the current
+" Ada object and tag jump to that, not the 'simple' vim word.
+" Similarly allows <Ctrl-N> matching of full-length ada entities from tags.
+" Exports 'AdaWord()' function to return full name of Ada entity under the
+" cursor( or at given line/column), stripping whitespace/newlines as necessary.
+
+
+" 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
+
+" Temporarily set cpoptions to ensure the script loads OK
+let s:cpoptions = &cpoptions
+set cpo-=C
+
+
+" Ada comments
+setlocal comments+=O:--
+
+
+" Make local tag mappings for this buffer (if not already set)
+if mapcheck('<C-]>','n') == ''
+ nnoremap <unique> <buffer> <C-]> :call JumpToTag_ada('')<cr>
+endif
+if mapcheck('g<C-]>','n') == ''
+ nnoremap <unique> <buffer> g<C-]> :call JumpToTag_ada('','stj')<cr>
+endif
+
+if mapcheck('<C-N>','i') == ''
+ inoremap <unique> <buffer> <C-N> <C-R>=<SID>AdaCompletion("\<lt>C-N>")<cr>
+endif
+if mapcheck('<C-P>','i') == ''
+ inoremap <unique> <buffer> <C-P> <C-R>=<SID>AdaCompletion("\<lt>C-P>")<cr>
+endif
+if mapcheck('<C-X><C-]>','i') == ''
+ inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>AdaCompletion("\<lt>C-X>\<lt>C-]>")<cr>
+endif
+if mapcheck('<bs>','i') == ''
+ inoremap <silent> <unique> <buffer> <bs> <C-R>=<SID>AdaInsertBackspace()<cr>
+endif
+
+
+" Only do this when not done yet for this buffer & matchit is used
+if ! exists("b:match_words") && exists("loaded_matchit")
+ " The following lines enable the macros/matchit.vim plugin for
+ " Ada-specific extended matching with the % key.
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let b:match_words=
+ \ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
+ \ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
+ \ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
+ \ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
+ \ s:notend . '\<record\>:\<end\>\s\+\<record\>'
+endif
+
+
+" Prevent re-load of functions
+if exists('s:id')
+ finish
+endif
+
+" Get this script's unique id
+map <script> <SID>?? <SID>??
+let s:id = substitute( maparg('<SID>??'), '^<SNR>\(.*\)_??$', '\1', '' )
+unmap <script> <SID>??
+
+
+" Extract current Ada word across multiple lines
+" AdaWord( [line, column] )\
+let s:AdaWordRegex = '\a\w*\(\_s*\.\_s*\a\w*\)*'
+let s:AdaComment = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
+
+function! AdaWord(...)
+ if a:0 > 1
+ let linenr = a:1
+ let colnr = a:2 - 1
+ else
+ let linenr = line('.')
+ let colnr = col('.') - 1
+ endif
+ let line = substitute( getline(linenr), s:AdaComment, '', '' )
+ " Cope with tag searching for items in comments; if we are, don't loop
+ " backards looking for previous lines
+ if colnr > strlen(line)
+ " We were in a comment
+ let line = getline(linenr)
+ let search_prev_lines = 0
+ else
+ let search_prev_lines = 1
+ endif
+
+ " Go backwards until we find a match (Ada ID) that *doesn't* include our
+ " location - i.e., the previous ID. This is because the current 'correct'
+ " match will toggle matching/not matching as we traverse characters
+ " backwards. Thus, we have to find the previous unrelated match, exclude
+ " it, then use the next full match (ours).
+ " Remember to convert vim column 'colnr' [1..n] to string offset [0..(n-1)]
+ " ... but start, here, one after the required char.
+ let newcol = colnr + 1
+ while 1
+ let newcol = newcol - 1
+ if newcol < 0
+ " Have to include previous line from file
+ let linenr = linenr - 1
+ if linenr < 1 || !search_prev_lines
+ " Start of file or matching in a comment
+ let linenr = 1
+ let newcol = 0
+ let ourmatch = match( line, s:AdaWordRegex )
+ break
+ endif
+ " Get previous line, and prepend it to our search string
+ let newline = substitute( getline(linenr), s:AdaComment, '', '' )
+ let newcol = strlen(newline) - 1
+ let colnr = colnr + newcol
+ let line = newline . line
+ endif
+ " Check to see if this is a match excluding 'us'
+ let mend = newcol + matchend( strpart(line,newcol), s:AdaWordRegex ) - 1
+ if mend >= newcol && mend < colnr
+ " Yes
+ let ourmatch = mend+1 + match( strpart(line,mend+1), s:AdaWordRegex )
+ break
+ endif
+ endwhile
+
+ " Got anything?
+ if ourmatch < 0
+ return ''
+ else
+ let line = strpart( line, ourmatch)
+ endif
+
+ " Now simply add further lines until the match gets no bigger
+ let matchstr = matchstr( line, s:AdaWordRegex )
+ let lastline = line('$')
+ let linenr = line('.') + 1
+ while linenr <= lastline
+ let lastmatch = matchstr
+ let line = line . substitute( getline(linenr), s:AdaComment, '', '' )
+ let matchstr = matchstr( line, s:AdaWordRegex )
+ if matchstr == lastmatch
+ break
+ endif
+ endwhile
+
+ " Strip whitespace & return
+ return substitute( matchstr, '\s\+', '', 'g' )
+endfunction
+
+
+" Word tag - include '.' and if Ada make uppercase
+" Name allows a common JumpToTag() to look for an ft specific JumpToTag_ft().
+function! JumpToTag_ada(word,...)
+ if a:word == ''
+ " Get current word
+ let word = AdaWord()
+ if word == ''
+ return
+ endif
+ else
+ let word = a:word
+ endif
+ if a:0 > 0
+ let mode = a:1
+ else
+ let mode = 'tj'
+ endif
+
+ let v:errmsg = ''
+ execute 'silent!' mode word
+ if v:errmsg != ''
+ if v:errmsg =~ '^E426:' " Tag not found
+ let ignorecase = &ignorecase
+ set ignorecase
+ execute mode word
+ let &ignorecase = ignorecase
+ else
+ " Repeat to give error
+ execute mode word
+ endif
+ endif
+endfunction
+
+
+" Word completion (^N/^R/^X^]) - force '.' inclusion
+function! s:AdaCompletion(cmd)
+ set iskeyword+=46
+ return a:cmd . "\<C-R>=<SNR>" . s:id . "_AdaCompletionEnd()\<CR>"
+endfunction
+function! s:AdaCompletionEnd()
+ set iskeyword-=46
+ return ''
+endfunction
+
+
+" Backspace at end of line after auto-inserted commentstring '-- ' wipes it
+function! s:AdaInsertBackspace()
+ let line = getline('.')
+ if col('.') > strlen(line) && match(line,'-- $') != -1 && match(&comments,'--') != -1
+ return "\<bs>\<bs>\<bs>"
+ else
+ return "\<bs>"
+ endif
+endfunction
+
+
+" Reset cpoptions
+let &cpoptions = s:cpoptions
+unlet s:cpoptions
+
+" vim: sts=2 sw=2 :
diff --git a/runtime/ftplugin/ant.vim b/runtime/ftplugin/ant.vim
new file mode 100644
index 000000000..d45ef3bb2
--- /dev/null
+++ b/runtime/ftplugin/ant.vim
@@ -0,0 +1,43 @@
+" Vim filetype plugin file
+" Language: ant
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show Ant-related files.
+if has("gui_win32")
+ let b:browsefilter = "Build Files (build.xml)\tbuild.xml\n" .
+ \ "Java Files (*.java)\t*.java\n" .
+ \ "Properties Files (*.prop*)\t*.prop*\n" .
+ \ "Manifest Files (*.mf)\t*.mf\n" .
+ \ s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/art.vim b/runtime/ftplugin/art.vim
new file mode 100644
index 000000000..cb95e6bf8
--- /dev/null
+++ b/runtime/ftplugin/art.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: ART-IM and ART*Enterprise
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: Apr 2, 2003
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+run ftplugin/lisp.vim
+
+setl lw-=if
+setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,
+ \for,schema,while
diff --git a/runtime/ftplugin/aspvbs.vim b/runtime/ftplugin/aspvbs.vim
new file mode 100644
index 000000000..006e3ce20
--- /dev/null
+++ b/runtime/ftplugin/aspvbs.vim
@@ -0,0 +1,58 @@
+" Vim filetype plugin file
+" Language: aspvbs
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.htm*\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+endif
+
+" ASP: Active Server Pages (with Visual Basic Script)
+" thanks to Gontran BAERTS
+if exists("loaded_matchit")
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let b:match_words =
+ \ s:notend . '\<If\>:^\s\+\<Else\>:\<ElseIf\>:\<end\s\+\<if\>,' .
+ \ s:notend . '\<Select\s\+\<Case\>:\<Case\>:\<Case\s\+\<Else\>:\<End\s\+\<Select\>,' .
+ \ '^\s*\<Sub\>:\<End\s\+\<Sub\>,' .
+ \ '^\s*\<Function\>:\<End\s\+\<Function\>,' .
+ \ '\<Class\>:\<End\s\+\<Class\>,' .
+ \ '^\s*\<Do\>:\<Loop\>,' .
+ \ '^\s*\<For\>:\<Next\>,' .
+ \ '\<While\>:\<Wend\>,' .
+ \ s:match_words
+endif
+
+" Change the :browse e filter to primarily show ASP-related files.
+if has("gui_win32")
+ let b:browsefilter="ASP Files (*.asp)\t*.asp\n" . s:browsefilter
+endif
+
+let b:undo_ftplugin = "unlet! b:match_words b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/automake.vim b/runtime/ftplugin/automake.vim
new file mode 100644
index 000000000..f25770c34
--- /dev/null
+++ b/runtime/ftplugin/automake.vim
@@ -0,0 +1,11 @@
+" Vim filetype plugin file
+" Langugage: Automake
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/ftplugin/pcp/automake/
+" Latest Revision: 2004-05-22
+" arch-tag: 3a78b0cd-27b2-410a-8e7b-51a1717c2a5b
+
+" Same as makefile filetype plugin for now.
+runtime! ftplugin/make.vim ftplugin/make_*.vim ftplugin/make/*.vim
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/ftplugin/bib.vim b/runtime/ftplugin/bib.vim
new file mode 100644
index 000000000..b4cd20fa5
--- /dev/null
+++ b/runtime/ftplugin/bib.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin
+" Language: BibTeX
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: May 21, 2003
+
+" 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
+
+setl cindent
diff --git a/runtime/ftplugin/c.vim b/runtime/ftplugin/c.vim
new file mode 100644
index 000000000..3d507581f
--- /dev/null
+++ b/runtime/ftplugin/c.vim
@@ -0,0 +1,52 @@
+" Vim filetype plugin file
+" Language: C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 May 16
+
+" 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
+
+set cpo-=C
+
+let b:undo_ftplugin = "setl cin< fo< com<"
+ \ . "| if has('vms') | setl isk< | endif"
+
+setlocal cindent
+
+" 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 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" In VMS C keywords contain '$' characters.
+if has("vms")
+ setlocal iskeyword+=$
+endif
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !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" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "All Files (*.*)\t*.*\n"
+ elseif &ft == "chscript"
+ let b:browsefilter = "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "All Files (*.*)\t*.*\n"
+ else
+ let b:browsefilter = "C Source Files (*.c)\t*.c\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "Ch Source Files (*.ch *.chf)\t*.ch;*.chf\n" .
+ \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ \ "All Files (*.*)\t*.*\n"
+ endif
+endif
diff --git a/runtime/ftplugin/ch.vim b/runtime/ftplugin/ch.vim
new file mode 100644
index 000000000..ed09003b1
--- /dev/null
+++ b/runtime/ftplugin/ch.vim
@@ -0,0 +1,17 @@
+" Vim filetype plugin file
+" Language: Ch
+" Maintainer: SoftIntegration, Inc. <info@softintegration.com>
+" URL: http://www.softintegration.com/download/vim/ftplugin/ch.vim
+" Last change: 2004 May 16
+" Created based on cpp.vim
+"
+" Ch is a C/C++ interpreter with many high level extensions
+"
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/changelog.vim b/runtime/ftplugin/changelog.vim
new file mode 100644
index 000000000..47d58ccb9
--- /dev/null
+++ b/runtime/ftplugin/changelog.vim
@@ -0,0 +1,256 @@
+" Vim filetype plugin file
+" Language: generic Changelog file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/ftplugin/pcp/changelog/
+" Latest Revision: 2004-04-25
+" arch-tag: b00e2974-c559-4477-b7b2-3ef3f4061bdb
+" Variables:
+" g:changelog_timeformat -
+" description: the timeformat used in ChangeLog entries.
+" default: "%Y-%m-%d".
+" g:changelog_username -
+" description: the username to use in ChangeLog entries
+" default: try to deduce it from environment variables and system files.
+" Local Mappings:
+" <Leader>o -
+" adds a new changelog entry for the current user for the current date.
+" Global Mappings:
+" <Leader>o -
+" switches to the ChangeLog buffer opened for the current directory, or
+" opens it in a new buffer if it exists in the current directory. Then
+" it does the same as the local <Leader>o described above.
+" Notes:
+" run 'runtime ftplugin/changelog.vim' to enable the global mapping for
+" changelog files.
+" TODO:
+" should we perhaps open the ChangeLog file even if it doesn't exist already?
+" Problem is that you might end up with ChangeLog files all over the place.
+
+" If 'filetype' isn't "changelog", we must have been to add ChangeLog opener
+if &filetype == "changelog"
+ " 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
+
+ let cpo_save = &cpo
+ set cpo-=C
+
+ " The format of the date-time field (should have been called dateformat)
+ if !exists("g:changelog_timeformat")
+ let g:changelog_timeformat = "%Y-%m-%d"
+ endif
+
+ " Try to figure out a reasonable username of the form:
+ " Full Name <user@host>
+ if !exists("g:changelog_username")
+ if exists("$EMAIL_ADDRESS")
+ let g:changelog_username = $EMAIL_ADDRESS
+ elseif exists("$EMAIL")
+ let g:changelog_username = $EMAIL
+ else
+ " Get the users login name
+ let login = system('whoami')
+ if v:shell_error
+ let login = 'unknown'
+ else
+ let newline = stridx(login, "\n")
+ if newline != -1
+ let login = strpart(login, 0, newline)
+ endif
+ endif
+
+ " Try to full name from gecos field in /etc/passwd
+ if filereadable('/etc/passwd')
+ let name = substitute(
+ \system('cat /etc/passwd | grep ^`whoami`'),
+ \'^\%([^:]*:\)\{4}\([^:]*\):.*$', '\1', '')
+ endif
+
+ " If there is no such file, or there was some other problem try
+ " others
+ if !filereadable('/etc/passwd') || v:shell_error
+ " Maybe the environment has something of interest
+ if exists("$NAME")
+ let name = $NAME
+ else
+ " No? well, use the login name and capitalize first
+ " character
+ let name = toupper(login[0]) . strpart(login, 1)
+ endif
+ endif
+
+ " Only keep stuff before the first comma
+ let comma = stridx(name, ',')
+ if comma != -1
+ let name = strpart(name, 0, comma)
+ endif
+
+ " And substitute & in the real name with the login of our user
+ let amp = stridx(name, '&')
+ if amp != -1
+ let name = strpart(name, 0, amp) . toupper(login[0]) .
+ \strpart(login, 1) . strpart(name, amp + 1)
+ endif
+
+ " Get our hostname
+ let hostname = system("hostname")
+ if v:shell_error
+ let hostname = 'unknownhost'
+ else
+ let newline = stridx(hostname, "\n")
+ if newline != -1
+ let hostname = strpart(hostname, 0, newline)
+ endif
+ endif
+
+ " And finally set the username
+ let g:changelog_username = name.' <'.login.'@'.hostname.'>'
+ endif
+ endif
+
+ " Format used for new date-entries
+ if !exists("g:changelog_new_date_format")
+ let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n"
+ endif
+
+ " Format used for new entries to current date-entry
+ if !exists("g:changelog_new_entry_format")
+ let g:changelog_new_entry_format = "\t* %c"
+ endif
+
+ if !exists("g:changelog_date_entry_search")
+ let g:changelog_date_entry_search = '^\s*%d\_s*%u'
+ endif
+
+ " Substitutes specific items in new date-entry formats and search strings
+ " Can be done with substitute of course, but unclean, and need \@! then
+ function! s:substitute_items(str, date, user)
+ let str = a:str
+ let i = stridx(str, '%')
+ while i != -1
+ let char = str[i + 1]
+ if char == '%'
+ let middle = '%'
+ elseif char == 'd'
+ let middle = a:date
+ elseif char == 'u'
+ let middle = a:user
+ elseif char == 'c'
+ let middle = '{cursor}'
+ else
+ let middle = char
+ endif
+ let str = strpart(str, 0, i) . middle . strpart(str, i + 2)
+ let i = stridx(str, '%')
+ endwhile
+ return str
+ endfunction
+
+ function! s:position_cursor()
+ if search('{cursor}') > 0
+ let pos = line('.')
+ let line = getline(pos)
+ let cursor = stridx(line, '{cursor}')
+ call setline(pos, substitute(line, '{cursor}', '', ''))
+ endif
+ startinsert!
+ endfunction
+
+ " Internal function to create a new entry in the ChangeLog
+ function! s:new_changelog_entry()
+ " Deal with 'paste' option
+ let save_paste = &paste
+ let &paste = 1
+ 1
+ " Look for an entry for today by our user
+ let date = strftime(g:changelog_timeformat)
+ let search = s:substitute_items(g:changelog_date_entry_search, date,
+ \g:changelog_username)
+ if search(search) > 0
+ " Ok, now we look for the end of the date-entry, and add an entry
+ let pos = nextnonblank(line('.') + 1)
+ let line = getline(pos)
+ while line =~ '^\s\+\S\+'
+ let pos = pos + 1
+ let line = getline(pos)
+ endwhile
+ let insert = s:substitute_items(g:changelog_new_entry_format,
+ \'', '')
+ execute "normal! ".(pos - 1)."Go".insert
+ execute pos
+ else
+ " Flag for removing empty lines at end of new ChangeLogs
+ let remove_empty = line('$') == 1
+
+ " 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)
+ " Make sure we have a cursor positioning
+ if stridx(todays_entry, '{cursor}') == -1
+ let todays_entry = todays_entry.'{cursor}'
+ endif
+
+ " Now do the work
+ execute "normal! i".todays_entry
+ if remove_empty
+ while getline('$') == ''
+ $delete
+ endwhile
+ endif
+
+ 1
+ endif
+
+ call s:position_cursor()
+
+ " And reset 'paste' option
+ let &paste = save_paste
+ endfunction
+
+ if exists(":NewChangelogEntry") != 2
+ map <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
+ command! -nargs=0 NewChangelogEntry call s:new_changelog_entry()
+ endif
+
+ let b:undo_ftplugin = "setl com< tw< fo< et< ai<"
+
+ if &textwidth == 0
+ setlocal textwidth=78
+ endif
+ setlocal comments=
+ setlocal formatoptions+=t
+ setlocal noexpandtab
+ setlocal autoindent
+
+ let &cpo = cpo_save
+else
+ " Add the Changelog opening mapping
+ nmap <silent> <Leader>o :call <SID>open_changelog()<CR>
+
+ function! s:open_changelog()
+ if filereadable('ChangeLog')
+ if bufloaded('ChangeLog')
+ let buf = bufnr('ChangeLog')
+ execute "normal! \<C-W>t"
+ while winbufnr(winnr()) != buf
+ execute "normal! \<C-W>w"
+ endwhile
+ else
+ split ChangeLog
+ endif
+
+ if exists("g:mapleader")
+ execute "normal " . g:mapleader . "o"
+ else
+ execute "normal \\o"
+ endif
+ startinsert!
+ endif
+ endfunction
+endif
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/ftplugin/config.vim b/runtime/ftplugin/config.vim
new file mode 100644
index 000000000..e4e1a412f
--- /dev/null
+++ b/runtime/ftplugin/config.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin file
+" Language: config
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "Bourne Shell Files (*.sh)\t*.sh\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/sh.vim ftplugin/sh_*.vim ftplugin/sh/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show configure-related files.
+if has("gui_win32")
+ let b:browsefilter="Configure Scripts (configure.*)\tconfigure.*\n" .
+ \ s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . b:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/cpp.vim b/runtime/ftplugin/cpp.vim
new file mode 100644
index 000000000..8c3f211da
--- /dev/null
+++ b/runtime/ftplugin/cpp.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: C++
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jan 15
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/cs.vim b/runtime/ftplugin/cs.vim
new file mode 100644
index 000000000..7f45098a4
--- /dev/null
+++ b/runtime/ftplugin/cs.vim
@@ -0,0 +1,26 @@
+" Vim filetype plugin file
+" Language: C#
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 09 Mar 2004 14:09:33 CET
+
+" 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
+
+setlocal cindent
+
+" 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 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "C# Source Files (*.cs)\t*.cs\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
diff --git a/runtime/ftplugin/csc.vim b/runtime/ftplugin/csc.vim
new file mode 100644
index 000000000..d9f901086
--- /dev/null
+++ b/runtime/ftplugin/csc.vim
@@ -0,0 +1,26 @@
+" Vim filetype plugin file
+" Language: csc
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+if exists("loaded_matchit")
+ let b:match_words=
+ \ '\<fix\>:\<endfix\>,' .
+ \ '\<if\>:\<else\%(if\)\=\>:\<endif\>,' .
+ \ '\<!loopondimensions\>\|\<!looponselected\>:\<!endloop\>'
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:match_words"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/csh.vim b/runtime/ftplugin/csh.vim
new file mode 100644
index 000000000..d053cbbde
--- /dev/null
+++ b/runtime/ftplugin/csh.vim
@@ -0,0 +1,47 @@
+" Vim filetype plugin file
+" Language: csh
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=#%s
+setlocal formatoptions-=t
+setlocal formatoptions+=crql
+
+" Csh: thanks to Johannes Zellner
+" - Both foreach and end must appear alone on separate lines.
+" - The words else and endif must appear at the beginning of input lines;
+" the if must appear alone on its input line or after an else.
+" - Each case label and the default label must appear at the start of a
+" line.
+" - while and end must appear alone on their input lines.
+if exists("loaded_matchit")
+ let b:match_words =
+ \ '^\s*\<if\>.*(.*).*\<then\>:'.
+ \ '^\s*\<else\>\s\+\<if\>.*(.*).*\<then\>:^\s*\<else\>:'.
+ \ '^\s*\<endif\>,'.
+ \ '\%(^\s*\<foreach\>\s\+\S\+\|^s*\<while\>\).*(.*):'.
+ \ '\<break\>:\<continue\>:^\s*\<end\>,'.
+ \ '^\s*\<switch\>.*(.*):^\s*\<case\>\s\+:^\s*\<default\>:^\s*\<endsw\>'
+endif
+
+" Change the :browse e filter to primarily show csh-related files.
+if has("gui_win32")
+ let b:browsefilter="csh Scripts (*.csh)\t*.csh\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring< formatoptions<" .
+ \ " | unlet! b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/css.vim b/runtime/ftplugin/css.vim
new file mode 100644
index 000000000..05eb9fff0
--- /dev/null
+++ b/runtime/ftplugin/css.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: CSS
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/ftplugin/pcp/css/
+" Latest Revision: 2004-04-25
+" arch-tag: 5fa7c74f-bf1a-47c4-b06f-6efe8f48db3b
+
+" 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
+
+let b:undo_ftplugin = "setl com<"
+
+setlocal comments=s1:/*,mb:*,ex:*/
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/ftplugin/debchangelog.vim b/runtime/ftplugin/debchangelog.vim
new file mode 100644
index 000000000..32db5a73d
--- /dev/null
+++ b/runtime/ftplugin/debchangelog.vim
@@ -0,0 +1,206 @@
+" Vim filetype plugin file
+" Language: Debian Changelog
+" Maintainer: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Last Change: 23 March 2004
+
+if exists("g:did_changelog_ftplugin")
+ finish
+endif
+
+" Don't load another plugin (this is global)
+let g:did_changelog_ftplugin = 1
+
+" Helper functions returning various data.
+" Returns full name, either from $DEBFULLNAME or debianfullname.
+" TODO Is there a way to determine name from anywhere else?
+function <SID>FullName()
+ if exists("$DEBFULLNAME")
+ return $DEBFULLNAME
+ elseif exists("g:debianfullname")
+ return g:debianfullname
+ else
+ return "Your Name"
+ endif
+endfunction
+
+" Returns email address, from $DEBEMAIL, $EMAIL or debianemail.
+function <SID>Email()
+ if exists("$DEBEMAIL")
+ return $DEBEMAIL
+ elseif exists("$EMAIL")
+ return $EMAIL
+ elseif exists("g:debianemail")
+ return g:debianfullemail
+ else
+ return "your@email.address"
+ endif
+endfunction
+
+" Returns date in RFC822 format.
+function <SID>Date()
+ let savelang = v:lc_time
+ execute "language time C"
+ let dateandtime = strftime("%a, %d %b %Y %X %z")
+ execute "language time " . savelang
+ return dateandtime
+endfunction
+
+function <SID>WarnIfNotUnfinalised()
+ if match(getline("."), " -- [[:alpha:]][[:alnum:].]")!=-1
+ echohl WarningMsg
+ echo "The entry has not been unfinalised before editing."
+ echohl None
+ return 1
+ endif
+ return 0
+endfunction
+
+function <SID>Finalised()
+ let savelinenum = line(".")
+ normal 1G
+ call search("^ -- ")
+ if match(getline("."), " -- [[:alpha:]][[:alnum:].]")!=-1
+ let returnvalue = 1
+ else
+ let returnvalue = 0
+ endif
+ execute savelinenum
+ return returnvalue
+endfunction
+
+" These functions implement the menus
+function NewVersion()
+ " The new entry is unfinalised and shall be changed
+ amenu disable Changelog.New\ Version
+ amenu enable Changelog.Add\ Entry
+ amenu enable Changelog.Close\ Bug
+ amenu enable Changelog.Set\ Distribution
+ amenu enable Changelog.Set\ Urgency
+ amenu disable Changelog.Unfinalise
+ amenu enable Changelog.Finalise
+ call append(0, substitute(getline(1),'-\([[:digit:]]\+\))', '-Ü\1)', ''))
+ call append(1, "")
+ call append(2, "")
+ call append(3, " -- ")
+ call append(4, "")
+ call Distribution("unstable")
+ call Urgency("low")
+ normal 1G
+ call search(")")
+ normal h
+ normal 
+ call setline(1, substitute(getline(1),'-Ü\([[:digit:]]\+\))', '-\1)', ''))
+ call AddEntry()
+endfunction
+
+function AddEntry()
+ normal 1G
+ call search("^ -- ")
+ normal kk
+ call append(".", " * ")
+ normal jjj
+ let warn=<SID>WarnIfNotUnfinalised()
+ normal kk
+ if warn
+ echohl MoreMsg
+ call input("Hit ENTER")
+ echohl None
+ endif
+ startinsert!
+endfunction
+
+function CloseBug()
+ normal 1G
+ call search("^ -- ")
+ let warn=<SID>WarnIfNotUnfinalised()
+ normal kk
+ call append(".", " * (closes: #" . input("Bug number to close: ") . ")")
+ normal j^ll
+ startinsert
+endfunction
+
+function Distribution(dist)
+ call setline(1, substitute(getline(1), ") [[:lower:] ]*;", ") " . a:dist . ";", ""))
+endfunction
+
+function Urgency(urg)
+ call setline(1, substitute(getline(1), "urgency=.*$", "urgency=" . a:urg, ""))
+endfunction
+
+function <SID>UnfinaliseMenu()
+ " This means the entry shall be changed
+ amenu disable Changelog.New\ Version
+ amenu enable Changelog.Add\ Entry
+ amenu enable Changelog.Close\ Bug
+ amenu enable Changelog.Set\ Distribution
+ amenu enable Changelog.Set\ Urgency
+ amenu disable Changelog.Unfinalise
+ amenu enable Changelog.Finalise
+endfunction
+
+function Unfinalise()
+ call <SID>UnfinaliseMenu()
+ normal 1G
+ call search("^ -- ")
+ call setline(".", " -- ")
+endfunction
+
+function <SID>FinaliseMenu()
+ " This means the entry should not be changed anymore
+ amenu enable Changelog.New\ Version
+ amenu disable Changelog.Add\ Entry
+ amenu disable Changelog.Close\ Bug
+ amenu disable Changelog.Set\ Distribution
+ amenu disable Changelog.Set\ Urgency
+ amenu enable Changelog.Unfinalise
+ amenu disable Changelog.Finalise
+endfunction
+
+function Finalise()
+ call <SID>FinaliseMenu()
+ normal 1G
+ call search("^ -- ")
+ call setline(".", " -- " . <SID>FullName() . " <" . <SID>Email() . "> " . <SID>Date())
+endfunction
+
+
+function <SID>MakeMenu()
+ amenu &Changelog.&New\ Version :call NewVersion()<CR>
+ amenu Changelog.&Add\ Entry :call AddEntry()<CR>
+ amenu Changelog.&Close\ Bug :call CloseBug()<CR>
+ menu Changelog.-sep- <nul>
+
+ amenu Changelog.Set\ &Distribution.&unstable :call Distribution("unstable")<CR>
+ amenu Changelog.Set\ Distribution.&frozen :call Distribution("frozen")<CR>
+ amenu Changelog.Set\ Distribution.&stable :call Distribution("stable")<CR>
+ menu Changelog.Set\ Distribution.-sep- <nul>
+ amenu Changelog.Set\ Distribution.frozen\ unstable :call Distribution("frozen unstable")<CR>
+ amenu Changelog.Set\ Distribution.stable\ unstable :call Distribution("stable unstable")<CR>
+ amenu Changelog.Set\ Distribution.stable\ frozen :call Distribution("stable frozen")<CR>
+ amenu Changelog.Set\ Distribution.stable\ frozen\ unstable :call Distribution("stable frozen unstable")<CR>
+
+ amenu Changelog.Set\ &Urgency.&low :call Urgency("low")<CR>
+ amenu Changelog.Set\ Urgency.&medium :call Urgency("medium")<CR>
+ amenu Changelog.Set\ Urgency.&high :call Urgency("high")<CR>
+
+ menu Changelog.-sep- <nul>
+ amenu Changelog.U&nfinalise :call Unfinalise()<CR>
+ amenu Changelog.&Finalise :call Finalise()<CR>
+
+ if <SID>Finalised()
+ call <SID>FinaliseMenu()
+ else
+ call <SID>UnfinaliseMenu()
+ endif
+endfunction
+
+augroup changelogMenu
+au BufEnter * if &filetype == "debchangelog" | call <SID>MakeMenu() | endif
+au BufLeave * if &filetype == "debchangelog" | aunmenu Changelog | endif
+augroup END
+
+" Debian changelogs are not supposed to have any other text width,
+" so the user cannot override this setting
+setlocal tw=78
+setlocal comments=f:*
+let b:undo_ftplugin = "setlocal tw< comments<"
diff --git a/runtime/ftplugin/dosbatch.vim b/runtime/ftplugin/dosbatch.vim
new file mode 100644
index 000000000..39a83c411
--- /dev/null
+++ b/runtime/ftplugin/dosbatch.vim
@@ -0,0 +1,21 @@
+" Vim filetype plugin file
+" Language: MS-DOS .bat files
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Last Change: 5th February 2003
+
+" 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
+
+" BAT comment formatting
+setlocal comments=b:rem,b:@rem,b:REM,b:@REM,b:::
+setlocal formatoptions-=t formatoptions+=rol
+
+" Define patterns for the browse file filter
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
+endif
diff --git a/runtime/ftplugin/dtd.vim b/runtime/ftplugin/dtd.vim
new file mode 100644
index 000000000..991118779
--- /dev/null
+++ b/runtime/ftplugin/dtd.vim
@@ -0,0 +1,33 @@
+" Vim filetype plugin file
+" Language: dtd
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=<!--%s-->
+
+if exists("loaded_matchit")
+ let b:match_words = '<!--:-->,<!:>'
+endif
+
+" Change the :browse e filter to primarily show Java-related files.
+if has("gui_win32")
+ let b:browsefilter="DTD Files (*.dtd)\t*.dtd\n" .
+ \ "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring<" .
+ \ " | unlet! b:matchwords b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/fortran.vim b/runtime/ftplugin/fortran.vim
new file mode 100644
index 000000000..d189bf465
--- /dev/null
+++ b/runtime/ftplugin/fortran.vim
@@ -0,0 +1,114 @@
+" Vim settings file
+" Language: Fortran90 (and Fortran95, Fortran77, F and elf90)
+" Version: 0.44
+" Last Change: 2003 May 18
+" URL: http://www.unb.ca/chem/ajit/ftplugin/fortran.vim
+" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
+" Usage: Do :help fortran-plugin from Vim
+
+" Only do these settings when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't do other file type settings for this buffer
+let b:did_ftplugin = 1
+
+" Determine whether this is a fixed or free format source file
+" if this hasn't been done yet
+if !exists("b:fortran_fixed_source")
+ if exists("fortran_free_source")
+ " User guarantees free source form
+ let b:fortran_fixed_source = 0
+ elseif exists("fortran_fixed_source")
+ " User guarantees fixed source form
+ let b:fortran_fixed_source = 1
+ else
+ " f90 and f95 allow 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 25 lines
+ " Detection becomes more accurate and time-consuming if more lines
+ " are checked. Increase the limit below if you keep lots of comments at
+ " the very top of each file and you have a fast computer
+ let s:lmax = 25
+ if ( s:lmax > line("$") )
+ let s:lmax = line("$")
+ endif
+ let b:fortran_fixed_source = 1
+ let s:ln=1
+ while s:ln <= s:lmax
+ let s:test = strpart(getline(s:ln),0,5)
+ if s:test[0] !~ '[Cc*!#]' && s:test !~ '^ \+[!#]' && s:test =~ '[^ 0-9\t]'
+ let b:fortran_fixed_source = 0
+ break
+ endif
+ let s:ln = s:ln + 1
+ endwhile
+ endif
+endif
+
+" Set comments and textwidth according to source type
+if (b:fortran_fixed_source == 1)
+ setlocal comments=:!,:*,:C
+ " Fixed format requires a textwidth of 72 for code
+ setlocal tw=72
+ " If you need to add "&" on continued lines so that the code is
+ " compatible with both free and fixed format, then you should do so
+ " in column 73 and uncomment the next line
+ " setlocal tw=73
+else
+ setlocal comments=:!
+ " Free format allows a textwidth of 132 for code but 80 is more usual
+ setlocal tw=80
+endif
+
+" Set commentstring for foldmethod=marker
+setlocal cms=!%s
+
+" Tabs are not a good idea in Fortran so the default is to expand tabs
+if !exists("fortran_have_tabs")
+ setlocal expandtab
+endif
+
+" Set 'formatoptions' to break comment and text lines but allow long lines
+setlocal fo+=tcql
+
+setlocal include=^#\\=\\s*include\\s\\+
+
+let s:cposet=&cpoptions
+set cpoptions-=C
+
+" Define patterns for the matchit plugin
+if !exists("b:match_words")
+ let s:notend = '\%(\<end\s\+\)\@<!'
+ let s:notselect = '\%(\<select\s\+\)\@<!'
+ let s:notelse = '\%(\<end\s\+\|\<else\s\+\)\@<!'
+ 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\>,'.
+ \ 'do\s\+\(\d\+\):\%(^\s*\)\@<=\1\s,'.
+ \ s:notend . '\<do\>:\<end\s*do\>,'.
+ \ s:notelse . '\<where\>:\<elsewhere\>:\<end\s*where\>,'.
+ \ s:notend . '\<type\s*[^(]:\<end\s*type\>,'.
+ \ s:notend . '\<interface\>:\<end\s*interface\>,'.
+ \ s:notend . '\<subroutine\>:\<end\s*subroutine\>,'.
+ \ s:notend . '\<function\>:\<end\s*function\>,'.
+ \ s:notend . '\<module\>:\<end\s*module\>,'.
+ \ s:notend . '\<program\>:\<end\s*program\>'
+endif
+
+" 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" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setl fo< com< tw< cms< et< inc<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:browsefilter"
+
+let &cpoptions=s:cposet
+unlet s:cposet
+
+" vim:sw=2
diff --git a/runtime/ftplugin/html.vim b/runtime/ftplugin/html.vim
new file mode 100644
index 000000000..7334b1584
--- /dev/null
+++ b/runtime/ftplugin/html.vim
@@ -0,0 +1,40 @@
+" Vim filetype plugin file
+" Language: html
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2004 May 11
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=<!--%s-->
+
+" HTML: thanks to Johannes Zellner and Benji Fisher.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 1
+ let b:match_skip = 's:Comment'
+ let b:match_words = '<:>,' .
+ \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
+ \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
+ \ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
+endif
+
+" Change the :browse e filter to primarily show HTML-related files.
+if has("gui_win32")
+ let b:browsefilter="HTML Files (*.html,*.htm)\t*.htm*\n" .
+ \ "JavaScript Files (*.js)\t*.js\n" .
+ \ "Cascading StyleSheets (*.css)\t*.css\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal commentstring<"
+ \ " | unlet! b:match_ignorecase b:match_skip b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/ishd.vim b/runtime/ftplugin/ishd.vim
new file mode 100644
index 000000000..63e1a747e
--- /dev/null
+++ b/runtime/ftplugin/ishd.vim
@@ -0,0 +1,30 @@
+" Vim filetype plugin file
+" Language: InstallShield (ft=ishd)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Sat, 24 May 2003 11:55:36 CEST
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal nocindent
+setlocal autoindent
+setlocal foldmethod=syntax
+
+set cpo-=C
+
+" matchit support
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words=
+ \ '\%(^\s*\)\@<=\<function\>\s\+[^()]\+\s*(:\%(^\s*\)\@<=\<begin\>\s*$:\%(^\s*\)\@<=\<return\>:\%(^\s*\)\@<=\<end\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<repeat\>\s*$:\%(^\s*\)\@<=\<until\>\s\+.\{-}\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<switch\>\s*(.\{-}):\%(^\s*\)\@<=\<\%(case\|default\)\>:\%(^\s*\)\@<=\<endswitch\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<while\>\s*(.\{-}):\%(^\s*\)\@<=\<endwhile\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<for\>.\{-}\<\%(to\|downto\)\>:\%(^\s*\)\@<=\<endfor\>\s*;\s*$,' .
+ \ '\%(^\s*\)\@<=\<if\>\s*(.\{-})\s*then:\%(^\s*\)\@<=\<else\s*if\>\s*([^)]*)\s*then:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<endif\>\s*;\s*$'
+endif
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "InstallShield Files (*.rul)\t*.rul\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
new file mode 100644
index 000000000..ba0bf3310
--- /dev/null
+++ b/runtime/ftplugin/java.vim
@@ -0,0 +1,63 @@
+" Vim filetype plugin file
+" Language: Java
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Change: 2004 May 16
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Go ahead and set this to get decent indenting even if the indent files
+" aren't being used. For people who really don't want any indentation,
+" let them turn it off.
+if !exists("g:ftplugin_java_no_indent")
+ setlocal cindent
+
+ "---------------------
+ " Correctly indent anonymous classes
+ " From Johannes Zellner <johannes@zellner.org>
+ setlocal cinoptions+=j1
+ "---------------------
+endif
+
+" For filename completion, prefer the .java extension over the .class
+" extension.
+set suffixes+=.class
+
+" Enable gf on import statements. Convert . in the package
+" name to / and append .java to the name, then search the path.
+setlocal includeexpr=substitute(v:fname,'\\.','/','g')
+setlocal suffixesadd=.java
+if exists("g:ftplugin_java_source_path")
+ let &l:path=g:ftplugin_java_source_path . ',' . &l:path
+endif
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal formatoptions-=t formatoptions+=croql
+
+" Set 'comments' to format dashed lists in comments. Behaves just like C.
+setlocal comments& comments^=sO:*\ -,mO:*\ \ ,exO:*/
+
+setlocal commentstring=//%s
+
+" Change the :browse e filter to primarily show Java-related files.
+if has("gui_win32")
+ let b:browsefilter="Java Files (*.java)\t*.java\n" .
+ \ "Properties Files (*.prop*)\t*.prop*\n" .
+ \ "Manifest Files (*.mf)\t*.mf\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cindent< cinoptions< suffixes< suffixesadd<" .
+ \ " formatoptions< comments< commentstring< path< includeexpr<" .
+ \ " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/jsp.vim b/runtime/ftplugin/jsp.vim
new file mode 100644
index 000000000..7c6ac84ef
--- /dev/null
+++ b/runtime/ftplugin/jsp.vim
@@ -0,0 +1,66 @@
+" Vim filetype plugin file
+" Language: jsp
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "Java Files (*.java)\t*.java\n" .
+ \ "HTML Files (*.html, *.htm)\t*.htm*\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+unlet b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+runtime! ftplugin/java.vim ftplugin/java_*.vim ftplugin/java/*.vim
+let b:did_ftplugin = 1
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists ("b:browsefilter")
+ let s:browsefilter = b:browsefilter . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . ',' . s:matchwords
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+" Change the :browse e filter to primarily show JSP-related files.
+if has("gui_win32")
+ let b:browsefilter="JSP Files (*.jsp)\t*.jsp\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/kwt.vim b/runtime/ftplugin/kwt.vim
new file mode 100644
index 000000000..7be64229c
--- /dev/null
+++ b/runtime/ftplugin/kwt.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin file
+" Language: Kimwitu++
+" Maintainer: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Last Change: 16 August 2001
+
+" Behaves almost like C++
+runtime! ftplugin/cpp.vim ftplugin/cpp_*.vim ftplugin/cpp/*.vim
+
+set cpo-=C
+
+" Limit the browser to related files
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Kimwitu/Kimwitu++ Files (*.k)\t*.k\n" .
+ \ "Lex/Flex Files (*.l)\t*.l\n" .
+ \ "Yacc/Bison Files (*.y)\t*.y\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Set the errorformat for the Kimwitu++ compiler
+set efm+=kc%.%#:\ error\ at\ %f:%l:\ %m
diff --git a/runtime/ftplugin/lisp.vim b/runtime/ftplugin/lisp.vim
new file mode 100644
index 000000000..5bc25af87
--- /dev/null
+++ b/runtime/ftplugin/lisp.vim
@@ -0,0 +1,20 @@
+" Vim filetype plugin
+" Language: Lisp
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: May 15, 2003
+
+" 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
+
+setl autoindent
+setl comments=:;
+setl define=^\\s*(def\\k*
+setl formatoptions-=t
+setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+setl lisp
diff --git a/runtime/ftplugin/lprolog.vim b/runtime/ftplugin/lprolog.vim
new file mode 100644
index 000000000..1e73f0c2d
--- /dev/null
+++ b/runtime/ftplugin/lprolog.vim
@@ -0,0 +1,37 @@
+" Vim settings file
+" Language: LambdaProlog (Teyjus)
+" Maintainer: Markus Mottl <markus@oefai.at>
+" URL: http://www.ai.univie.ac.at/~markus/vim/ftplugin/lprolog.vim
+" Last Change: 2003 May 11
+" 2001 Sep 16 - fixed 'no_mail_maps'-bug (MM)
+" 2001 Sep 02 - initial release (MM)
+
+" Only do these settings when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't do other file type settings for this buffer
+let b:did_ftplugin = 1
+
+" Error format
+setlocal efm=%+A./%f:%l.%c:\ %m formatprg=fmt\ -w75\ -p\\%
+
+" Formatting of comments
+setlocal formatprg=fmt\ -w75\ -p\\%
+
+" Add mappings, unless the user didn't want this.
+if !exists("no_plugin_maps") && !exists("no_lprolog_maps")
+ " Uncommenting
+ if !hasmapto('<Plug>Comment')
+ nmap <buffer> <LocalLeader>c <Plug>LUncomOn
+ vmap <buffer> <LocalLeader>c <Plug>BUncomOn
+ nmap <buffer> <LocalLeader>C <Plug>LUncomOff
+ vmap <buffer> <LocalLeader>C <Plug>BUncomOff
+ endif
+
+ nnoremap <buffer> <Plug>LUncomOn mz0i/* <ESC>$A */<ESC>`z
+ nnoremap <buffer> <Plug>LUncomOff <ESC>:s/^\/\* \(.*\) \*\//\1/<CR>
+ vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i/*<ESC>`>o<ESC>0i*/<ESC>`<
+ vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
+endif
diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim
new file mode 100644
index 000000000..3bc640f3f
--- /dev/null
+++ b/runtime/ftplugin/lua.vim
@@ -0,0 +1,36 @@
+" Vim filetype plugin file.
+" Language: Lua 4.0+
+" Maintainer: Max Ischenko <mfi@ukr.net>
+" Last Change: 2001 Sep 17
+
+" 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
+
+" 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
+
+setlocal com=:--
+setlocal cms="--%s"
+setlocal suffixesadd=.lua
+
+
+" 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
+ let b:match_words =
+ \ '\<\%(do\|function\|if\)\>:' .
+ \ '\<\%(return\|else\|elseif\)\>:' .
+ \ '\<end\>,' .
+ \ '\<repeat\>:\<until\>'
+
+endif " exists("loaded_matchit")
diff --git a/runtime/ftplugin/mail.vim b/runtime/ftplugin/mail.vim
new file mode 100644
index 000000000..16bf19758
--- /dev/null
+++ b/runtime/ftplugin/mail.vim
@@ -0,0 +1,34 @@
+" Vim filetype plugin file
+" Language: Mail
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Feb 20
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl modeline< tw< fo<"
+
+" Don't use modelines in e-mail messages, avoid trojan horses
+setlocal nomodeline
+
+" many people recommend keeping e-mail messages 72 chars wide
+if &tw == 0
+ setlocal tw=72
+endif
+
+" Set 'formatoptions' to break text lines and keep the comment leader ">".
+setlocal fo+=tcql
+
+" Add mappings, unless the user didn't want this.
+if !exists("no_plugin_maps") && !exists("no_mail_maps")
+ " Quote text by inserting "> "
+ if !hasmapto('<Plug>MailQuote')
+ vmap <buffer> <LocalLeader>q <Plug>MailQuote
+ nmap <buffer> <LocalLeader>q <Plug>MailQuote
+ endif
+ vnoremap <buffer> <Plug>MailQuote :s/^/> /<CR>:noh<CR>``
+ nnoremap <buffer> <Plug>MailQuote :.,$s/^/> /<CR>:noh<CR>``
+endif
diff --git a/runtime/ftplugin/make.vim b/runtime/ftplugin/make.vim
new file mode 100644
index 000000000..c7397da7a
--- /dev/null
+++ b/runtime/ftplugin/make.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language: Make
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 May 04
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl et< fo< com< commentstring<"
+
+" Make sure a hard tab is used, required for most make programs
+setlocal noexpandtab softtabstop=0
+
+" 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 'comments' to format dashed lists in comments
+setlocal com=sO:#\ -,mO:#\ \ ,b:#
+
+" Set 'commentstring' to put the marker after a #.
+setlocal commentstring=#\ %s
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
new file mode 100644
index 000000000..869ae9ab7
--- /dev/null
+++ b/runtime/ftplugin/man.vim
@@ -0,0 +1,177 @@
+" Vim filetype plugin file
+" Language: man
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2003 Dec 24
+
+" To make the ":Man" command available before editing a manual page, source
+" this script from your startup vimrc file.
+
+" If 'filetype' isn't "man", we must have been called to only define ":Man".
+if &filetype == "man"
+
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+ finish
+ endif
+ let b:did_ftplugin = 1
+
+ " allow dot and dash in manual page name.
+ setlocal iskeyword+=\.,-
+
+ " Add mappings, unless the user didn't want this.
+ if !exists("no_plugin_maps") && !exists("no_man_maps")
+ if !hasmapto('<Plug>ManBS')
+ nmap <buffer> <LocalLeader>h <Plug>ManBS
+ endif
+ nnoremap <buffer> <Plug>ManBS :%s/.\b//g<CR>:set nomod<CR>''
+
+ nnoremap <buffer> <c-]> :call <SID>PreGetPage(v:count)<CR>
+ nnoremap <buffer> <c-t> :call <SID>PopPage()<CR>
+ endif
+
+endif
+
+if exists(":Man") != 2
+ com -nargs=+ Man call s:GetPage(<f-args>)
+ nmap <Leader>K :call <SID>PreGetPage(0)<CR>
+endif
+
+" Define functions only once.
+if !exists("s:man_tag_depth")
+
+let s:man_tag_depth = 0
+
+if !has("win32") && $OSTYPE !~ 'cygwin\|linux' && system('uname -s') =~ "SunOS" && system('uname -r') =~ "^5"
+ let s:man_sect_arg = "-s"
+ let s:man_find_arg = "-l"
+else
+ let s:man_sect_arg = ""
+ let s:man_find_arg = "-w"
+endif
+
+func <SID>PreGetPage(cnt)
+ if a:cnt == 0
+ let old_isk = &iskeyword
+ setl iskeyword+=(,)
+ let str = expand("<cword>")
+ let &l:iskeyword = old_isk
+ let page = substitute(str, '(*\(\k\+\).*', '\1', '')
+ let sect = substitute(str, '\(\k\+\)(\([^()]*\)).*', '\2', '')
+ if match(sect, '^[0-9 ]\+$') == -1
+ let sect = ""
+ endif
+ if sect == page
+ let sect = ""
+ endif
+ else
+ let sect = a:cnt
+ let page = expand("<cword>")
+ endif
+ call s:GetPage(sect, page)
+endfunc
+
+func <SID>GetCmdArg(sect, page)
+ if a:sect == ''
+ return a:page
+ endif
+ return s:man_sect_arg.' '.a:sect.' '.a:page
+endfunc
+
+func <SID>FindPage(sect, page)
+ let where = system("/usr/bin/man ".s:man_find_arg.' '.s:GetCmdArg(a:sect, a:page))
+ if where !~ "^/"
+ if matchstr(where, " [^ ]*$") !~ "^ /"
+ return 0
+ endif
+ endif
+ return 1
+endfunc
+
+func <SID>GetPage(...)
+ if a:0 >= 2
+ let sect = a:1
+ let page = a:2
+ elseif a:0 >= 1
+ let sect = ""
+ let page = a:1
+ else
+ return
+ endif
+
+ " To support: nmap K :Man <cword>
+ if page == '<cword>'
+ let page = expand('<cword>')
+ endif
+
+ if sect != "" && s:FindPage(sect, page) == 0
+ let sect = ""
+ endif
+ if s:FindPage(sect, page) == 0
+ echo "\nCannot find a '".page."'."
+ return
+ endif
+ exec "let s:man_tag_buf_".s:man_tag_depth." = ".bufnr("%")
+ exec "let s:man_tag_lin_".s:man_tag_depth." = ".line(".")
+ exec "let s:man_tag_col_".s:man_tag_depth." = ".col(".")
+ let s:man_tag_depth = s:man_tag_depth + 1
+
+ " Use an existing "man" window if it exists, otherwise open a new one.
+ if &filetype != "man"
+ let thiswin = winnr()
+ exe "norm! \<C-W>b"
+ if winnr() == 1
+ new
+ else
+ exe "norm! " . thiswin . "\<C-W>w"
+ while 1
+ if &filetype == "man"
+ break
+ endif
+ exe "norm! \<C-W>w"
+ if thiswin == winnr()
+ new
+ break
+ endif
+ endwhile
+ endif
+ endif
+ silent exec "edit $HOME/".page.".".sect."~"
+ " Avoid warning for editing the dummy file twice
+ set buftype=nofile noswapfile
+
+ set ma
+ silent exec "norm 1GdG"
+ let $MANWIDTH = winwidth(0)
+ silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
+ " Remove blank lines from top and bottom.
+ while getline(1) =~ '^\s*$'
+ silent norm ggdd
+ endwhile
+ while getline('$') =~ '^\s*$'
+ silent norm Gdd
+ endwhile
+ 1
+ setl ft=man nomod
+ setl bufhidden=hide
+ setl nobuflisted
+endfunc
+
+func <SID>PopPage()
+ if s:man_tag_depth > 0
+ let s:man_tag_depth = s:man_tag_depth - 1
+ exec "let s:man_tag_buf=s:man_tag_buf_".s:man_tag_depth
+ exec "let s:man_tag_lin=s:man_tag_lin_".s:man_tag_depth
+ exec "let s:man_tag_col=s:man_tag_col_".s:man_tag_depth
+ exec s:man_tag_buf."b"
+ exec s:man_tag_lin
+ exec "norm ".s:man_tag_col."|"
+ exec "unlet s:man_tag_buf_".s:man_tag_depth
+ exec "unlet s:man_tag_lin_".s:man_tag_depth
+ exec "unlet s:man_tag_col_".s:man_tag_depth
+ unlet s:man_tag_buf s:man_tag_lin s:man_tag_col
+ endif
+endfunc
+
+endif
+
+" vim: set sw=2:
diff --git a/runtime/ftplugin/mf.vim b/runtime/ftplugin/mf.vim
new file mode 100644
index 000000000..b066d531e
--- /dev/null
+++ b/runtime/ftplugin/mf.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: METAFONT
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: May 27, 2003
+
+" 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
+
+setl com=:%
+setl fo-=t
diff --git a/runtime/ftplugin/mp.vim b/runtime/ftplugin/mp.vim
new file mode 100644
index 000000000..3385565b3
--- /dev/null
+++ b/runtime/ftplugin/mp.vim
@@ -0,0 +1,7 @@
+" Vim filetype plugin
+" Language: MetaPost
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: May 27, 2003
+
+runtime! ftplugin/mf.vim ftplugin/mf_*.vim ftplugin/mf/*.vim
diff --git a/runtime/ftplugin/objc.vim b/runtime/ftplugin/objc.vim
new file mode 100644
index 000000000..e41beb5da
--- /dev/null
+++ b/runtime/ftplugin/objc.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: Objective C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Jan 15
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like C
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim
new file mode 100644
index 000000000..96f2c0c78
--- /dev/null
+++ b/runtime/ftplugin/ocaml.vim
@@ -0,0 +1,49 @@
+" Vim settings file
+" Language: OCaml
+" Maintainers: Mike Leary <leary@nwlink.com>
+" Markus Mottl <markus@oefai.at>
+" URL: http://www.ai.univie.ac.at/~markus/vim/ftplugin/ocaml.vim
+" Last Change: 2003 May 11
+" 2001 Nov 01 - added local bindings for inserting
+" type holes using 'assert false' (MM)
+" 2001 Oct 02 - insert spaces in line comments (MM)
+
+" Only do these settings when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Don't do other file type settings for this buffer
+let b:did_ftplugin = 1
+
+set cpo-=C
+
+" Error formats
+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
+
+" Add mappings, unless the user didn't want this.
+if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
+ " Uncommenting
+ if !hasmapto('<Plug>Comment')
+ nmap <buffer> <LocalLeader>c <Plug>LUncomOn
+ vmap <buffer> <LocalLeader>c <Plug>BUncomOn
+ nmap <buffer> <LocalLeader>C <Plug>LUncomOff
+ vmap <buffer> <LocalLeader>C <Plug>BUncomOff
+ endif
+
+ nnoremap <buffer> <Plug>LUncomOn mz0i(* <ESC>$A *)<ESC>`z
+ nnoremap <buffer> <Plug>LUncomOff <ESC>:s/^(\* \(.*\) \*)/\1/<CR>
+ vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i(*<ESC>`>o<ESC>0i*)<ESC>`<
+ vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
+
+ if !hasmapto('<Plug>Abbrev')
+ iabbrev <buffer> ASS (assert false)
+ endif
+endif
diff --git a/runtime/ftplugin/occam.vim b/runtime/ftplugin/occam.vim
new file mode 100644
index 000000000..ed2c4f4ea
--- /dev/null
+++ b/runtime/ftplugin/occam.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: occam
+" Copyright: Christian Jacobsen <clj3@kent.ac.uk>, Mario Schweigler <ms44@kent.ac.uk>
+" Maintainer: Mario Schweigler <ms44@kent.ac.uk>
+" Last Change: 23 April 2003
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+"{{{ Indent settings
+" Set shift width for indent
+setlocal shiftwidth=2
+" Set the tab key size to two spaces
+setlocal softtabstop=2
+" Let tab keys always be expanded to spaces
+setlocal expandtab
+"}}}
+
+"{{{ Formatting
+" Break comment lines and insert comment leader in this case
+setlocal formatoptions-=t formatoptions+=cql
+setlocal comments+=:--
+" Maximum length of comments is 78
+setlocal textwidth=78
+"}}}
+
+"{{{ File browsing filters
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "All Occam Files (*.occ *.inc)\t*.occ;*.inc\n" .
+ \ "Occam Include Files (*.inc)\t*.inc\n" .
+ \ "Occam Source Files (*.occ)\t*.occ\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+"}}}
+
diff --git a/runtime/ftplugin/pascal.vim b/runtime/ftplugin/pascal.vim
new file mode 100644
index 000000000..a3e8f8160
--- /dev/null
+++ b/runtime/ftplugin/pascal.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language: pascal
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+if exists("loaded_matchit")
+ let b:match_words='\<begin\>:\<end\>'
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:match_words"
diff --git a/runtime/ftplugin/perl.vim b/runtime/ftplugin/perl.vim
new file mode 100644
index 000000000..9f714a9fe
--- /dev/null
+++ b/runtime/ftplugin/perl.vim
@@ -0,0 +1,66 @@
+" Vim filetype plugin file
+" Language: Perl
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Change: 2004 May 16
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal formatoptions+=crq
+
+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"
+endif
+
+" Provided by Ned Konz <ned at bike-nomad dot com>
+"---------------------------------------------
+setlocal include=\\<\\(use\|require\\)\\>
+setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
+setlocal define=[^A-Za-z_]
+
+" The following line changes a global variable but is necessary to make
+" gf and similar commands work. The change to iskeyword was incorrect.
+" Thanks to Andrew Pimlott for pointing out the problem. If this causes a
+" 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 this once, globally.
+if !exists("perlpath")
+ if executable("perl")
+ if &shellxquote != '"'
+ let perlpath = system('perl -e "print join(q/,/,@INC)"')
+ else
+ let perlpath = system("perl -e 'print join(q/,/,@INC)'")
+ endif
+ let perlpath = substitute(perlpath,',.$',',,','')
+ 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< isf<" .
+ \ " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/php.vim b/runtime/ftplugin/php.vim
new file mode 100644
index 000000000..a1c732979
--- /dev/null
+++ b/runtime/ftplugin/php.vim
@@ -0,0 +1,62 @@
+" Vim filetype plugin file
+" Language: php
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.htm*\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+endif
+
+" Change the :browse e filter to primarily show PHP-related files.
+if has("gui_win32")
+ let b:browsefilter="PHP Files (*.php)\t*.php\n" . s:browsefilter
+endif
+
+" ###
+" Provided by Mikolaj Machowski <mikmach at wp dot pl>
+setlocal include=\\\(require\\\|include\\\)\\\(_once\\\)\\\?
+setlocal iskeyword+=$
+if exists("loaded_matchit")
+ let b:match_words = '\<switch\>:\<endswitch\>,' .
+ \ '\<if\>:\<elseif\>:\<else\>:\<endif\>,' .
+ \ '\<while\>:\<endwhile\>,' .
+ \ '\<do\>:\<while\>,' .
+ \ '\<for\>:\<endfor\>,' .
+ \ '\<foreach\>:\<endforeach\>,' .
+ \ s:match_words
+endif
+" ###
+
+setlocal commentstring=/*%s*/
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cms< inc< isk<" .
+ \ " | unlet! b:browsefilter b:match_words | " .
+ \ s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/postscr.vim b/runtime/ftplugin/postscr.vim
new file mode 100644
index 000000000..56f4e249c
--- /dev/null
+++ b/runtime/ftplugin/postscr.vim
@@ -0,0 +1,31 @@
+" Vim filetype plugin file
+" Language: PostScript
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Last Change: 27th June 2002
+
+" 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
+
+" PS comment formatting
+setlocal comments=b:%
+setlocal formatoptions-=t formatoptions+=rol
+
+" Define patterns for the matchit macro
+if !exists("b:match_words")
+ let b:match_ignorecase = 0
+ 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
diff --git a/runtime/ftplugin/pyrex.vim b/runtime/ftplugin/pyrex.vim
new file mode 100644
index 000000000..69bd93dd1
--- /dev/null
+++ b/runtime/ftplugin/pyrex.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: Pyrex
+" Maintainer: Marco Barisione <marco.bari@people.it>
+" URL: http://marcobari.altervista.org/pyrex_vim.html
+" Last Change: 2004 May 16
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Behaves just like Python
+runtime! ftplugin/python.vim ftplugin/python_*.vim ftplugin/python/*.vim
+
+if has("gui_win32") && exists("b:browsefilter")
+ let b:browsefilter = "Pyrex files (*.pyx,*.pxd)\t*.pyx;*.pxd\n" .
+ \ "Python Files (*.py)\t*.py\n" .
+ \ "C Source Files (*.c)\t*.c\n" .
+ \ "C Header Files (*.h)\t*.h\n" .
+ \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
diff --git a/runtime/ftplugin/python.vim b/runtime/ftplugin/python.vim
new file mode 100644
index 000000000..4834b40ce
--- /dev/null
+++ b/runtime/ftplugin/python.vim
@@ -0,0 +1,41 @@
+" Vim filetype plugin file
+" Language: python
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Wed, 21 Apr 2004 13:13:08 CEST
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal cinkeys-=0#
+setlocal indentkeys-=0#
+setlocal include=\s*\\(from\\\|import\\)
+setlocal includeexpr=substitute(v:fname,'\\.','/','g')
+setlocal suffixesadd=.py
+setlocal comments-=:%
+setlocal commentstring=#%s
+
+set wildignore+=*.pyc
+
+nnoremap <silent> <buffer> ]] :call <SID>Python_jump('/^\(class\\|def\)')<cr>
+nnoremap <silent> <buffer> [[ :call <SID>Python_jump('?^\(class\\|def\)')<cr>
+nnoremap <silent> <buffer> ]m :call <SID>Python_jump('/^\s*\(class\\|def\)')<cr>
+nnoremap <silent> <buffer> [m :call <SID>Python_jump('?^\s*\(class\\|def\)')<cr>
+
+if exists('*<SID>Python_jump') | finish | endif
+
+fun! <SID>Python_jump(motion) range
+ let cnt = v:count1
+ let save = @/ " save last search pattern
+ mark '
+ while cnt > 0
+ silent! exe a:motion
+ let cnt = cnt - 1
+ endwhile
+ call histdel('/', -1)
+ let @/ = save " restore last search pattern
+endfun
+
+if has("gui_win32") && !exists("b:browsefilter")
+ let b:browsefilter = "Python Files (*.py)\t*.py\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
diff --git a/runtime/ftplugin/rpl.vim b/runtime/ftplugin/rpl.vim
new file mode 100644
index 000000000..2b26ef1fa
--- /dev/null
+++ b/runtime/ftplugin/rpl.vim
@@ -0,0 +1,22 @@
+" Vim filetype plugin file
+" Language: RPL/2
+" Maintainer: Joël BERTRAND <rpl2@free.fr>
+" Last Change: 2002 Feb 07
+" Version: 0.1
+
+" 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
+
+setlocal autoindent
+
+" 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 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
diff --git a/runtime/ftplugin/rst.vim b/runtime/ftplugin/rst.vim
new file mode 100644
index 000000000..98dd5a07b
--- /dev/null
+++ b/runtime/ftplugin/rst.vim
@@ -0,0 +1,23 @@
+" Vim filetype plugin file
+" Language: reStructuredText Documentation Format
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/ftplugin/pcp/rst/
+" Latest Revision: 2004-04-25
+" arch-tag: 618bf504-81ba-4518-bad2-43ba2b844a26
+
+" 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
+
+let b:undo_ftplugin = "setl com< cms<"
+
+setlocal comments=fb:..
+setlocal commentstring=..\ %s
+setlocal expandtab
+setlocal sts=2 sw=2
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim
new file mode 100644
index 000000000..e21afeee5
--- /dev/null
+++ b/runtime/ftplugin/ruby.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin
+" Language: Ruby
+" Maintainer: Gavin Sinclair <gsinclair@soyabean.com.au>
+" Last Change: 2002/08/12
+" URL: www.soyabean.com.au/gavin/vim/index.html
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+let b:did_ftplugin = 1
+
+" There are no known setting particularly appropriate for Ruby. Please
+" contact the maintainer if you think of some.
diff --git a/runtime/ftplugin/scheme.vim b/runtime/ftplugin/scheme.vim
new file mode 100644
index 000000000..7d34f7217
--- /dev/null
+++ b/runtime/ftplugin/scheme.vim
@@ -0,0 +1,7 @@
+" Vim filetype plugin
+" Language: Scheme
+" Maintainer: Dorai Sitaram <ds26@gte.com>
+" URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+" Last Change: Apr 2, 2003
+
+run ftplugin/lisp.vim
diff --git a/runtime/ftplugin/sgml.vim b/runtime/ftplugin/sgml.vim
new file mode 100644
index 000000000..4a19ddae7
--- /dev/null
+++ b/runtime/ftplugin/sgml.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: sgml
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 30
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xml-related files.
+if has("gui_win32")
+ let b:browsefilter="SGML Files (*.sgml,*.sgm)\t*.sgm*\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/sh.vim b/runtime/ftplugin/sh.vim
new file mode 100644
index 000000000..183215a12
--- /dev/null
+++ b/runtime/ftplugin/sh.vim
@@ -0,0 +1,38 @@
+" Vim filetype plugin file
+" Language: sh
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=#%s
+
+" Shell: thanks to Johannes Zellner
+if exists("loaded_matchit")
+ let s:sol = '\%(;\s*\|^\s*\)\@<=' " start of line
+ let b:match_words =
+ \ s:sol.'if\>:' . s:sol.'elif\>:' . s:sol.'else\>:' . s:sol. 'fi\>,' .
+ \ s:sol.'\%(for\|while\)\>:' . s:sol. 'done\>,' .
+ \ s:sol.'case\>:' . s:sol. 'esac\>'
+endif
+
+" Change the :browse e filter to primarily show shell-related files.
+if has("gui_win32")
+ let b:browsefilter="Bourne Shell Scripts (*.sh)\t*.sh\n" .
+ \ "Korn Shell Scripts (*.ksh)\t*.ksh\n" .
+ \ "Bash Shell Scripts (*.bash)\t*.bash\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cms< | unlet! b:browsefilter b:match_words"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/spec.vim b/runtime/ftplugin/spec.vim
new file mode 100644
index 000000000..3b1d70a48
--- /dev/null
+++ b/runtime/ftplugin/spec.vim
@@ -0,0 +1,168 @@
+" 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
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+if !exists("no_plugin_maps") && !exists("no_spec_maps")
+ if !hasmapto("<Plug>SpecChangelog")
+ map <buffer> <LocalLeader>c <Plug>SpecChangelog
+ endif
+endif
+
+noremap <buffer> <unique> <script> <Plug>SpecChangelog :call <SID>SpecChangelog("")<CR>
+
+if !exists("*s:SpecChangelog")
+ function s:SpecChangelog(format)
+ if strlen(a:format) == 0
+ if !exists("g:spec_chglog_format")
+ let email = input("Email address: ")
+ let g:spec_chglog_format = "%a %b %d %Y " . l:email
+ echo "\r"
+ endif
+ let format = g:spec_chglog_format
+ else
+ if !exists("g:spec_chglog_format")
+ let g:spec_chglog_format = a:format
+ endif
+ let format = a:format
+ endif
+ let line = 0
+ let name = ""
+ let ver = ""
+ let rel = ""
+ let nameline = -1
+ let verline = -1
+ let relline = -1
+ let chgline = -1
+ while (line <= line("$"))
+ let linestr = getline(line)
+ if (name == "" && linestr =~? '^Name:')
+ let nameline = line
+ let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif (ver == "" && linestr =~? '^Version:')
+ let verline = line
+ let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif (rel == "" && linestr =~? '^Release:')
+ let relline = line
+ let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ elseif (linestr =~? '^%changelog')
+ let chgline = line
+ execute line
+ break
+ endif
+ let line = line+1
+ endwhile
+ if (nameline != -1 && verline != -1 && relline != -1)
+ let include_release_info = exists("g:spec_chglog_release_info")
+ let name = s:ParseRpmVars(name, nameline)
+ let ver = s:ParseRpmVars(ver, verline)
+ let rel = s:ParseRpmVars(rel, relline)
+ else
+ let include_release_info = 0
+ endif
+ if (chgline == -1)
+ let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3)
+ if (option == 1)
+ call append(line("$"),"")
+ call append(line("$"),"%changelog")
+ execute line("$")
+ let chgline = line(".")
+ elseif (option == 2)
+ call append(line("."),"%changelog")
+ normal j
+ chgline = line(".")
+ endif
+ endif
+ if (chgline != -1)
+ let parsed_format = "* ".strftime(format)
+ let release_info = "+ ".name."-".ver."-".rel
+ let wrong_format = 0
+ let wrong_release = 0
+ let insert_line = 0
+ if (getline(chgline+1) != parsed_format)
+ let wrong_format = 1
+ endif
+ if (include_release_info && getline(chgline+2) != release_info)
+ let wrong_release = 1
+ endif
+ if (wrong_format || wrong_release)
+ if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release"))
+ let option = confirm("Increase release? ","&Yes\n&No",1)
+ if (option == 1)
+ execute relline
+ normal 
+ let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','')
+ let release_info = "+ ".name."-".ver."-".rel
+ endif
+ endif
+ let n = 0
+ call append(chgline+n, parsed_format)
+ if include_release_info
+ let n = n + 1
+ call append(chgline+n, release_info)
+ endif
+ let n = n + 1
+ call append(chgline+n,"- ")
+ let n = n + 1
+ call append(chgline+n,"")
+ let insert_line = chgline+n
+ else
+ let line = chgline
+ if !exists("g:spec_chglog_prepend")
+ while !(getline(line+2) =~ '^\( *\|\*.*\)$')
+ let line = line+1
+ endwhile
+ endif
+ call append(line+1,"- ")
+ let insert_line = line+2
+ endif
+ execute insert_line
+ startinsert!
+ endif
+ endfunction
+endif
+
+if !exists("*s:ParseRpmVars")
+ function s:ParseRpmVars(str, strline)
+ let end = -1
+ let ret = ""
+ while (1)
+ let start = match(a:str, "\%{", end+1)
+ if (start == -1)
+ let ret = ret . strpart(a:str, end+1)
+ break
+ endif
+ let ret = ret . strpart(a:str, end+1, start-(end+1))
+ let end = match(a:str, "}", start)
+ if (end == -1)
+ let ret = ret . strpart(a:str, start)
+ break
+ endif
+ let varname = strpart(a:str, start+2, end-(start+2))
+ execute a:strline
+ let definestr = "^[ \t]*%define[ \t]\\+" . varname . "[ \t]\\+\\(.*\\)$"
+ let linenum = search(definestr, "bW")
+ if (linenum != -1)
+ let ret = ret . substitute(getline(linenum), definestr, "\\1", "")
+ else
+ let ret = ret . strpart(str, start, end+1-start)
+ endif
+ endwhile
+ return ret
+ endfunction
+endif
+
+" The following lines, along with the macros/matchit.vim plugin,
+" make it easy to navigate the different sections of a spec file
+" with the % key (thanks to Max Ischenko).
+
+let b:match_ignorecase = 0
+let b:match_words =
+ \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' .
+ \ '^%package:^%preun:^%postun:^%changelog'
+
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
new file mode 100644
index 000000000..afbdf555c
--- /dev/null
+++ b/runtime/ftplugin/sql.vim
@@ -0,0 +1,35 @@
+" Vim filetype plugin file
+" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase)
+" Version: 0.02
+" Maintainer: David Fishburn <fishburn@ianywhere.com>
+" Last Change: Tue May 27 2003 09:33:31
+
+" This file should only contain values that are common to all SQL languages
+" Oracle, Microsoft SQL Server, Sybase ASA/ASE, MySQL, and so on
+" If additional features are required create:
+" vimfiles/after/ftplugin/sql.vim
+" to override and add any of your own settings
+
+" 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
+
+" Define patterns for the matchit macro
+if !exists("b:match_words")
+ " SQL is generally case insensitive
+ let b:match_ignorecase = 1
+ let b:match_words =
+ \ '\<begin\>:\<end\>\(;\)\?$,'.
+ \ '\<if\>:\<elsif\>:\<elseif\>:\<else\>:'.
+ \ '\%(\<end\s\+\)\@<!' . '\<if\>:\<end\s\+if\>,'.
+ \ '\<loop\>:\<break\>:\<continue\>:'.
+ \ '\%(\<end\s\+\)\@<!' . '\<loop\>:\<end\s\+loop\>,'.
+ \ '\<for\>:\<break\>:\<continue\>:'.
+ \ '\%(\<end\s\+\)\@<!' . '\<for\>:\<end\s\+for\>,'.
+ \ '\<case\>:\<when\>:\<default\>:'.
+ \ '\%(\<end\s\+\)\@<!' . '\<case\>:\<end\s\+case\>'
+endif
diff --git a/runtime/ftplugin/svg.vim b/runtime/ftplugin/svg.vim
new file mode 100644
index 000000000..4544172d0
--- /dev/null
+++ b/runtime/ftplugin/svg.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: svg
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xml-related files.
+if has("gui_win32")
+ let b:browsefilter="SVG Files (*.svg)\t*.svg\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/tcsh.vim b/runtime/ftplugin/tcsh.vim
new file mode 100644
index 000000000..4c724e68b
--- /dev/null
+++ b/runtime/ftplugin/tcsh.vim
@@ -0,0 +1,39 @@
+" Vim filetype plugin file
+" Language: tcsh
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "csh Files (*.csh)\t*.csh\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/csh.vim ftplugin/csh_*.vim ftplugin/csh/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show tcsh-related files.
+if has("gui_win32")
+ let b:browsefilter="tcsh Scripts (*.tcsh)\t*.tcsh\n" . s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/tex.vim b/runtime/ftplugin/tex.vim
new file mode 100644
index 000000000..1871e8fd5
--- /dev/null
+++ b/runtime/ftplugin/tex.vim
@@ -0,0 +1,112 @@
+" LaTeX filetype plugin
+" Language: LaTeX (ft=tex)
+" Maintainer: Benji Fisher, Ph.D. <benji@member.AMS.org>
+" Version: 1.2
+" Last Change: Tue 11 May 2004 04:49:20 PM EDT
+" URL: http://www.vim.org/script.php?script_id=411
+
+" 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
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" This may be used to set b:tex_flavor. A more complete version can be found
+" in foo.vim (see http://www.vim.org/script.php?script_id=72).
+if !exists("*s:GetModelines")
+ fun! s:GetModelines(pat, ...)
+ " Long but simple: set start line and finish line.
+ let EOF = line("$")
+ if a:0 > 1
+ let start = a:1 | let finish = a:2
+ elseif a:0 == 1
+ if a:1 > 0
+ let finish = a:1
+ else
+ let start = EOF + a:1 + 1
+ endif
+ endif
+ if !exists("start") || start < 1
+ let start = 1
+ endif
+ if !exists("finish") || finish > EOF
+ let finish = EOF
+ endif
+ let n = 0
+ silent! execute start .",". finish
+ \ 'g/' . escape(a:pat, "/") . "/let n=line('.')"
+ if n
+ execute "normal!\<C-O>"
+ endif
+ return n . ":"
+ endfun
+endif " !exists("*GetModelines")
+
+" Define the buffer-local variable b:tex_flavor to "tex" (for plain) or
+" "latex".
+" 1. Check the first line of the file for "%&<format>".
+" 2. Check the first 1000 lines for "\begin{document}".
+" 3. Check for a global variable g:tex_flavor, can be set in user's vimrc.
+" 4. Default to "latex".
+" 5. Strip "pdf" and change "plain" to "tex".
+if getline(1) =~ '^%&\s*\k\+'
+ let b:tex_flavor = matchstr(getline(1), '%&\s*\zs\k\+')
+elseif s:GetModelines('\\begin\s*{\s*document\s*}', 1000) != "0:"
+ let b:tex_flavor = "latex"
+elseif exists("g:tex_flavor")
+ let b:tex_flavor = g:tex_flavor
+else
+ let b:tex_flavor = "latex"
+endif
+let b:tex_flavor = substitute(b:tex_flavor, 'pdf', '', '')
+if b:tex_flavor == "plain"
+ let b:tex_flavor = "tex"
+endif
+
+" Set 'comments' to format dashed lists in comments
+setlocal com=sO:%\ -,mO:%\ \ ,eO:%%,:%
+
+" Set 'commentstring' to recognize the % comment character:
+" (Thanks to Ajit Thakkar.)
+setlocal cms=%%s
+
+" Allow "[d" to be used to find a macro definition:
+" Recognize plain TeX \def as well as LaTeX \newcommand and \renewcommand .
+" I may as well add the AMS-LaTeX DeclareMathOperator as well.
+let &l:define='\\\([egx]\|char\|mathchar\|count\|dimen\|muskip\|skip\|toks\)\='
+ \ . 'def\|\\font\|\\\(future\)\=let'
+ \ . '\|\\new\(count\|dimen\|skip\|muskip\|box\|toks\|read\|write'
+ \ . '\|fam\|insert\)'
+ \ . '\|\\\(re\)\=new\(boolean\|command\|counter\|environment\|font'
+ \ . '\|if\|length\|savebox\|theorem\(style\)\=\)\s*\*\=\s*{\='
+ \ . '\|DeclareMathOperator\s*{\=\s*'
+
+" Tell Vim how to recognize LaTeX \include{foo} and plain \input bar :
+setlocal include=\\\\input\\\\|\\\\include{
+setlocal suffixesadd=.tex
+" On some file systems, "{" and "}" are inluded in 'isfname'. In case the
+" TeX file has \include{fname} (LaTeX only), strip everything except "fname".
+let &l:includeexpr = "substitute(v:fname, '^.\\{-}{\\|}.*', '', 'g')"
+" fun! TexIncludeExpr()
+" let fname = substitute(v:fname, '}.*', '', '')
+" return fname
+" endfun
+
+" The following lines enable the macros/matchit.vim plugin for
+" extended matching with the % key.
+" TODO: Customize this based on b:tex_flavor .
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ \ | let b:match_skip = 'r:\\\@<!\%(\\\\\)*%'
+ \ | let b:match_words = '(:),\[:],{:},\\(:\\),\\\[:\\],' .
+ \ '\\begin\s*\({\a\+\*\=}\):\\end\s*\1'
+endif " exists("loaded_matchit")
+
+let &cpo = s:save_cpo
+
+" vim:sts=2:sw=2:
diff --git a/runtime/ftplugin/vb.vim b/runtime/ftplugin/vb.vim
new file mode 100644
index 000000000..bb4c23a2c
--- /dev/null
+++ b/runtime/ftplugin/vb.vim
@@ -0,0 +1,47 @@
+" Vim filetype plugin file
+" Language: VisualBasic (ft=vb)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Thu, 22 Nov 2001 12:56:14 W. Europe Standard Time
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+setlocal nocindent
+setlocal autoindent
+setlocal com=sr:'\ -,mb:'\ \ ,el:'\ \ ,:'
+
+" we need this wrapper, as call doesn't allow a count
+fun! <SID>VbSearch(pattern, flags)
+ let cnt = v:count1
+ while cnt > 0
+ call search(a:pattern, a:flags)
+ let cnt = cnt - 1
+ endwhile
+endfun
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" NOTE the double escaping \\|
+nnoremap <buffer> <silent> [[ :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ]] :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'W')<cr>
+nnoremap <buffer> <silent> [] :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'bW')<cr>
+nnoremap <buffer> <silent> ][ :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'W')<cr>
+
+" matchit support
+if exists("loaded_matchit")
+ let b:match_ignorecase=1
+ let b:match_words=
+ \ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*$:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' .
+ \ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' .
+ \ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' .
+ \ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' .
+ \ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' .
+ \ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' .
+ \ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' .
+ \ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>'
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/verilog.vim b/runtime/ftplugin/verilog.vim
new file mode 100644
index 000000000..8a8cfbe6b
--- /dev/null
+++ b/runtime/ftplugin/verilog.vim
@@ -0,0 +1,45 @@
+" Vim filetype plugin file
+" Language: Verilog HDL
+" Maintainer: Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
+" Last Change: Wed Oct 31 16:16:19 CST 2001
+" URL: http://larc.ee.nthu.edu.tw/~cthuang/vim/ftplugin/verilog.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
+
+" 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
+
+" Set 'comments' to format dashed lists in comments.
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" 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" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words=
+ \ '\<begin\>:\<end\>,' .
+ \ '\<case\>\|\<casex\>\|\<casez\>:\<endcase\>,' .
+ \ '\<module\>:\<endmodule\>,' .
+ \ '\<if\>:\<else\>,' .
+ \ '\<function\>:\<endfunction\>,' .
+ \ '`ifdef\>:`else\>:`endif\>,' .
+ \ '\<task\>:\<endtask\>,' .
+ \ '\<specify\>:\<endspecify\>'
+endif
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
new file mode 100644
index 000000000..85e74f3f1
--- /dev/null
+++ b/runtime/ftplugin/vim.vim
@@ -0,0 +1,61 @@
+" Vim filetype plugin
+" Language: Vim
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Feb 20
+
+" 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
+
+let cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
+
+" 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 'comments' to format dashed lists in comments
+setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\"
+
+" Format comments to be up to 78 characters long
+if &tw == 0
+ setlocal tw=78
+endif
+
+" Comments start with a double quote
+setlocal commentstring=\"%s
+
+" Move around functions.
+noremap <silent><buffer> [[ :call search('^\s*fu\%[nction]\>', "bW")<CR>
+noremap <silent><buffer> ]] :call search('^\s*fu\%[nction]\>', "W")<CR>
+noremap <silent><buffer> [] :call search('^\s*endf*\%[unction]\>', "bW")<CR>
+noremap <silent><buffer> ][ :call search('^\s*endf*\%[unction]\>', "W")<CR>
+
+" Move around comments
+noremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
+noremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<fu\%[nction]\>:\<retu\%[rn]\>:\<endf\%[unction]\>,' .
+ \ '\<wh\%[ile]\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<endw\%[hile]\>,' .
+ \ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
+ \ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' .
+ \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' .
+ \ '(:)'
+ " Ignore ":syntax region" commands, the 'end' argument clobbers if-endif
+ let b:match_skip = 'getline(".") =~ "^\\s*sy\\%[ntax]\\s\\+region" ||
+ \ synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string"'
+endif
+
+let &cpo = cpo_save
+setlocal cpo+=M " makes \%( match \)
diff --git a/runtime/ftplugin/xhtml.vim b/runtime/ftplugin/xhtml.vim
new file mode 100644
index 000000000..8011529c5
--- /dev/null
+++ b/runtime/ftplugin/xhtml.vim
@@ -0,0 +1,66 @@
+" Vim filetype plugin file
+" Language: xhtml
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2004 May 11
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "HTML Files (*.html, *.htm)\t*.htm*\n" .
+ \ "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+let s:match_words = ""
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+unlet b:did_ftplugin
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+ unlet b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+ unlet b:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words
+ unlet b:match_words
+endif
+
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+let b:did_ftplugin = 1
+
+" Combine the new set of values with those previously included.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter . s:browsefilter
+endif
+if exists("b:match_words")
+ let s:match_words = b:match_words . "," . s:match_words
+endif
+
+" Load the combined list of match_words for matchit.vim
+if exists("loaded_matchit")
+ let b:match_words = s:match_words
+endif
+
+" Change the :browse e filter to primarily show tcsh-related files.
+if has("gui_win32")
+ let b:browsefilter=s:browsefilter
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/xml.vim b/runtime/ftplugin/xml.vim
new file mode 100644
index 000000000..7bde8e724
--- /dev/null
+++ b/runtime/ftplugin/xml.vim
@@ -0,0 +1,47 @@
+" Vim filetype plugin file
+" Language: xml
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+setlocal commentstring=<!--%s-->
+
+" XML: thanks to Johannes Zellner and Akbar Ibrahim
+" - case sensitive
+" - don't match empty tags <fred/>
+" - match <!--, --> style comments (but not --, --)
+" - match <!, > inlined dtd's. This is not perfect, as it
+" gets confused for example by
+" <!ENTITY gt ">">
+if exists("loaded_matchit")
+ let b:match_ignorecase=0
+ let b:match_words =
+ \ '<:>,' .
+ \ '<\@<=!\[CDATA\[:]]>,'.
+ \ '<\@<=!--:-->,'.
+ \ '<\@<=?\k\+:?>,'.
+ \ '<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,'.
+ \ '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
+endif
+
+" Change the :browse e filter to primarily show xml-related files.
+if has("gui_win32")
+ let b:browsefilter="XML Files (*.xml)\t*.xml\n" .
+ \ "DTD Files (*.dtd)\t*.dtd\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal cms<" .
+ \ " | unlet! b:match_ignorecase b:match_words b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/xs.vim b/runtime/ftplugin/xs.vim
new file mode 100644
index 000000000..cf3318258
--- /dev/null
+++ b/runtime/ftplugin/xs.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: XS (Perl extension interface language)
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Sep 18
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+ finish
+endif
+
+" Just use the C plugin for now.
+runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
diff --git a/runtime/ftplugin/xsd.vim b/runtime/ftplugin/xsd.vim
new file mode 100644
index 000000000..1cd7adc76
--- /dev/null
+++ b/runtime/ftplugin/xsd.vim
@@ -0,0 +1,38 @@
+" Vim filetype plugin file
+" Language: xsd
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2003 Sep 29
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:save_cpo = &cpo
+set cpo-=C
+
+" Define some defaults in case the included ftplugins don't set them.
+let s:undo_ftplugin = ""
+let s:browsefilter = "XML Files (*.xml)\t*.xml\n" .
+ \ "All Files (*.*)\t*.*\n"
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+let b:did_ftplugin = 1
+
+" Override our defaults if these were set by an included ftplugin.
+if exists("b:undo_ftplugin")
+ let s:undo_ftplugin = b:undo_ftplugin
+endif
+if exists("b:browsefilter")
+ let s:browsefilter = b:browsefilter
+endif
+
+" Change the :browse e filter to primarily show xsd-related files.
+if has("gui_win32")
+ let b:browsefilter="XSD Files (*.xsd)\t*.xsd\n" . s:browsefilter
+endif
+
+let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
+
+" Restore the saved compatibility options.
+let &cpo = s:save_cpo
diff --git a/runtime/ftplugin/xslt.vim b/runtime/ftplugin/xslt.vim
new file mode 100644
index 000000000..a4b80a614
--- /dev/null
+++ b/runtime/ftplugin/xslt.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: xslt
+" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
+" Last Changed: 2002 Nov 26
+" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+
+if exists("b:did_ftplugin") | finish | endif
+
+runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+
+let b:did_ftplugin = 1
+
+" Change the :browse e filter to primarily show xsd-related files.
+if has("gui_win32") && exists("b:browsefilter")
+ let b:browsefilter="XSLT Files (*.xsl,*.xslt)\t*.xsl,*.xslt\n" . b:browsefilter
+endif
diff --git a/runtime/ftplugof.vim b/runtime/ftplugof.vim
new file mode 100644
index 000000000..cd99ce05a
--- /dev/null
+++ b/runtime/ftplugof.vim
@@ -0,0 +1,11 @@
+" Vim support file to switch off loading plugins for file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2002 Apr 04
+
+if exists("did_load_ftplugin")
+ unlet did_load_ftplugin
+endif
+
+" Remove all autocommands in the filetypeplugin group
+silent! au! filetypeplugin *
diff --git a/runtime/gvimrc_example.vim b/runtime/gvimrc_example.vim
new file mode 100644
index 000000000..5a5197e99
--- /dev/null
+++ b/runtime/gvimrc_example.vim
@@ -0,0 +1,59 @@
+" An example for a gvimrc file.
+" The commands in this are executed when the GUI is started.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2001 Sep 02
+"
+" To use it, copy it to
+" for Unix and OS/2: ~/.gvimrc
+" for Amiga: s:.gvimrc
+" for MS-DOS and Win32: $VIM\_gvimrc
+" for OpenVMS: sys$login:.gvimrc
+
+" Make external commands work through a pipe instead of a pseudo-tty
+"set noguipty
+
+" set the X11 font to use
+" set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1
+
+set ch=2 " Make command line two lines high
+
+set mousehide " Hide the mouse when typing text
+
+" Make shift-insert work like in Xterm
+map <S-Insert> <MiddleMouse>
+map! <S-Insert> <MiddleMouse>
+
+" Only do this for Vim version 5.0 and later.
+if version >= 500
+
+ " I like highlighting strings inside C comments
+ let c_comment_strings=1
+
+ " Switch on syntax highlighting if it wasn't on yet.
+ if !exists("syntax_on")
+ syntax on
+ endif
+
+ " Switch on search pattern highlighting.
+ set hlsearch
+
+ " For Win32 version, have "K" lookup the keyword in a help file
+ "if has("win32")
+ " let winhelpfile='windows.hlp'
+ " map K :execute "!start winhlp32 -k <cword> " . winhelpfile <CR>
+ "endif
+
+ " Set nice colors
+ " background for normal text is light grey
+ " Text below the last line is darker grey
+ " Cursor is green, Cyan when ":lmap" mappings are active
+ " Constants are not underlined but have a slightly lighter background
+ highlight Normal guibg=grey90
+ highlight Cursor guibg=Green guifg=NONE
+ highlight lCursor guibg=Cyan guifg=NONE
+ highlight NonText guibg=grey80
+ highlight Constant gui=NONE guibg=grey95
+ highlight Special gui=NONE guibg=grey95
+
+endif
diff --git a/runtime/icons.info b/runtime/icons.info
new file mode 100644
index 000000000..566bc5663
--- /dev/null
+++ b/runtime/icons.info
Binary files differ
diff --git a/runtime/indent.vim b/runtime/indent.vim
new file mode 100644
index 000000000..78fb9d0f4
--- /dev/null
+++ b/runtime/indent.vim
@@ -0,0 +1,13 @@
+" Vim support file to switch on loading indent files for file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Sep 12
+
+if exists("did_indent_on")
+ finish
+endif
+let did_indent_on = 1
+
+augroup filetypeindent
+ au FileType * if expand("<amatch>") != "" | if exists("b:did_indent") | unlet b:did_indent | endif | runtime! indent/<amatch>.vim | endif
+augroup END
diff --git a/runtime/indent/README.txt b/runtime/indent/README.txt
new file mode 100644
index 000000000..a424b4f8c
--- /dev/null
+++ b/runtime/indent/README.txt
@@ -0,0 +1,45 @@
+This directory contains files to automatically compute the indent for a
+type of file.
+
+If you want to add your own indent file for your personal use, read the docs
+at ":help indent-expression". Looking at the existing files should give you
+inspiration.
+
+If you make a new indent file which would be useful for others, please send it
+to Bram@vim.org. Include instructions for detecting the file type for this
+language, by file name extension or by checking a few lines in the file.
+And please stick to the rules below.
+
+If you have remarks about an existing file, send them to the maintainer of
+that file. Only when you get no response send a message to Bram@vim.org.
+
+If you are the maintainer of an indent file and make improvements, e-mail the
+new version to Bram@vim.org.
+
+
+Rules for making an indent file:
+
+You should use this check for "b:did_indent":
+
+ " Only load this indent file when no other was loaded yet.
+ if exists("b:did_indent")
+ finish
+ endif
+ let b:did_indent = 1
+
+Always use ":setlocal" to set 'indentexpr'. This avoids it being carried over
+to other buffers.
+
+To trigger the indenting after typing a word like "endif", add the word to the
+'cinkeys' option with "+=".
+
+You normally set 'indentexpr' to evaluate a function and then define that
+function. That function only needs to be defined once for as long as Vim is
+running. Add a test if the function exists and use ":finish", like this:
+ if exists("*GetMyIndent")
+ finish
+ endif
+
+The user may have several options set unlike you, try to write the file such
+that it works with any option settings. Also be aware of certain features not
+being compiled in.
diff --git a/runtime/indent/aap.vim b/runtime/indent/aap.vim
new file mode 100644
index 000000000..78ac0336d
--- /dev/null
+++ b/runtime/indent/aap.vim
@@ -0,0 +1,7 @@
+" Vim indent file
+" Language: Aap recipe
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Sep 08
+
+" Works mostly like Python.
+runtime! indent/python.vim
diff --git a/runtime/indent/ada.vim b/runtime/indent/ada.vim
new file mode 100644
index 000000000..72e2e80e5
--- /dev/null
+++ b/runtime/indent/ada.vim
@@ -0,0 +1,264 @@
+" Vim indent file
+" Language: Ada
+" Maintainer: Neil Bird <neil@fnxweb.com>
+" Last Change: 2003 May 20
+" Version: $Id$
+" Look for the latest version at http://vim.sourceforge.net/
+"
+" ToDo:
+" Verify handling of multi-line exprs. and recovery upon the final ';'.
+" Correctly find comments given '"' and "" ==> " syntax.
+" Combine the two large block-indent functions into one?
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetAdaIndent()
+setlocal indentkeys-=0{,0}
+setlocal indentkeys+=0=~then,0=~end,0=~elsif,0=~when,0=~exception,0=~begin,0=~is,0=~record
+
+" Only define the functions once.
+if exists("*GetAdaIndent")
+ finish
+endif
+
+let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<loop\>\|declare\>\|begin\>\|type\>.*\<is\s*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|then\>\|when\>\|is\>\)'
+let s:AdaComment = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
+
+
+" Try to find indent of the block we're in (and about to complete)
+" prev_indent = the previous line's indent
+" prev_lnum = previous line (to start looking on)
+" blockstart = expr. that indicates a possible start of this block
+" stop_at = if non-null, if a matching line is found, gives up!
+" No recursive previous block analysis: simply look for a valid line
+" with a lesser or equal indent than we currently (on prev_lnum) have.
+" This shouldn't work as well as it appears to with lines that are currently
+" nowhere near the correct indent (e.g., start of line)!
+" Seems to work OK as it 'starts' with the indent of the /previous/ line.
+function s:MainBlockIndent( prev_indent, prev_lnum, blockstart, stop_at )
+ let lnum = a:prev_lnum
+ let line = substitute( getline(lnum), s:AdaComment, '', '' )
+ while lnum > 1
+ if a:stop_at != '' && line =~ '^\s*' . a:stop_at && indent(lnum) < a:prev_indent
+ return -1
+ elseif line =~ '^\s*' . a:blockstart
+ let ind = indent(lnum)
+ if ind < a:prev_indent
+ return ind
+ endif
+ endif
+
+ let lnum = prevnonblank(lnum - 1)
+ " Get previous non-blank/non-comment-only line
+ while 1
+ let line = substitute( getline(lnum), s:AdaComment, '', '' )
+ if line !~ '^\s*$' && line !~ '^\s*#'
+ break
+ endif
+ let lnum = prevnonblank(lnum - 1)
+ if lnum <= 0
+ return a:prev_indent
+ endif
+ endwhile
+ endwhile
+ " Fallback - just move back one
+ return a:prev_indent - &sw
+endfunction
+
+" Try to find indent of the block we're in (and about to complete),
+" including handling of nested blocks. Works on the 'end' of a block.
+" prev_indent = the previous line's indent
+" prev_lnum = previous line (to start looking on)
+" blockstart = expr. that indicates a possible start of this block
+" blockend = expr. that indicates a possible end of this block
+function s:EndBlockIndent( prev_indent, prev_lnum, blockstart, blockend )
+ let lnum = a:prev_lnum
+ let line = getline(lnum)
+ let ends = 0
+ while lnum > 1
+ if getline(lnum) =~ '^\s*' . a:blockstart
+ let ind = indent(lnum)
+ if ends <= 0
+ if ind < a:prev_indent
+ return ind
+ endif
+ else
+ let ends = ends - 1
+ endif
+ elseif getline(lnum) =~ '^\s*' . a:blockend
+ let ends = ends + 1
+ endif
+
+ let lnum = prevnonblank(lnum - 1)
+ " Get previous non-blank/non-comment-only line
+ while 1
+ let line = getline(lnum)
+ let line = substitute( line, s:AdaComment, '', '' )
+ if line !~ '^\s*$'
+ break
+ endif
+ let lnum = prevnonblank(lnum - 1)
+ if lnum <= 0
+ return a:prev_indent
+ endif
+ endwhile
+ endwhile
+ " Fallback - just move back one
+ return a:prev_indent - &sw
+endfunction
+
+" As per MainBlockIndent, but return indent of previous statement-start
+" (after we've indented due to multi-line statements).
+" This time, we start searching on the line *before* the one given (which is
+" the end of a statement - we want the previous beginning).
+function s:StatementIndent( current_indent, prev_lnum )
+ let lnum = a:prev_lnum
+ while lnum > 0
+ let prev_lnum = lnum
+ let lnum = prevnonblank(lnum - 1)
+ " Get previous non-blank/non-comment-only line
+ while 1
+ let line = substitute( getline(lnum), s:AdaComment, '', '' )
+ if line !~ '^\s*$' && line !~ '^\s*#'
+ break
+ endif
+ let lnum = prevnonblank(lnum - 1)
+ if lnum <= 0
+ return a:current_indent
+ endif
+ endwhile
+ " Leave indent alone if our ';' line is part of a ';'-delineated
+ " aggregate (e.g., procedure args.) or first line after a block start.
+ if line =~ s:AdaBlockStart || line =~ '(\s*$'
+ return a:current_indent
+ endif
+ if line !~ '[.=(]\s*$'
+ let ind = indent(prev_lnum)
+ if ind < a:current_indent
+ return ind
+ endif
+ endif
+ endwhile
+ " Fallback - just use current one
+ return a:current_indent
+endfunction
+
+
+" Find correct indent of a new line based upon what went before
+function GetAdaIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+ let ind = indent(lnum)
+ let package_line = 0
+
+ " Get previous non-blank/non-comment-only/non-cpp line
+ while 1
+ let line = substitute( getline(lnum), s:AdaComment, '', '' )
+ if line !~ '^\s*$' && line !~ '^\s*#'
+ break
+ endif
+ let lnum = prevnonblank(lnum - 1)
+ if lnum <= 0
+ return ind
+ endif
+ endwhile
+
+ " Get default indent (from prev. line)
+ let ind = indent(lnum)
+
+ " Now check what's on the previous line
+ if line =~ s:AdaBlockStart || line =~ '(\s*$'
+ " Check for false matches to AdaBlockStart
+ let false_match = 0
+ if line =~ '^\s*\(procedure\|function\|package\)\>.*\<is\s*new\>'
+ " Generic instantiation
+ let false_match = 1
+ elseif line =~ ')\s*;\s*$' || line =~ '^\([^(]*([^)]*)\)*[^(]*;\s*$'
+ " forward declaration
+ let false_match = 1
+ endif
+ " Move indent in
+ if ! false_match
+ let ind = ind + &sw
+ endif
+ elseif line =~ '^\s*\(case\|exception\)\>'
+ " Move indent in twice (next 'when' will move back)
+ let ind = ind + 2 * &sw
+ elseif line =~ '^\s*end\s*record\>'
+ " Move indent back to tallying 'type' preceeding the 'record'.
+ " Allow indent to be equal to 'end record's.
+ let ind = s:MainBlockIndent( ind+&sw, lnum, 'type\>', '' )
+ elseif line =~ '\(^\s*new\>.*\)\@<!)\s*[;,]\s*$'
+ " Revert to indent of line that started this parenthesis pair
+ exe lnum
+ exe 'normal! $F)%'
+ if getline('.') =~ '^\s*('
+ " Dire layout - use previous indent (could check for AdaComment here)
+ let ind = indent( prevnonblank( line('.')-1 ) )
+ else
+ let ind = indent('.')
+ endif
+ exe v:lnum
+ elseif line =~ '[.=(]\s*$'
+ " A statement continuation - move in one
+ let ind = ind + &sw
+ elseif line =~ '^\s*new\>'
+ " Multiple line generic instantiation ('package blah is\nnew thingy')
+ let ind = s:StatementIndent( ind - &sw, lnum )
+ elseif line =~ ';\s*$'
+ " Statement end - try to find current statement-start indent
+ let ind = s:StatementIndent( ind, lnum )
+ endif
+
+ " Check for potential argument list on next line
+ let continuation = (line =~ '[A-Za-z0-9_]\s*$')
+
+
+ " Check current line; search for simplistic matching start-of-block
+ let line = getline(v:lnum)
+ if line =~ '^\s*#'
+ " Start of line for ada-pp
+ let ind = 0
+ elseif continuation && line =~ '^\s*('
+ let ind = ind + &sw
+ elseif line =~ '^\s*\(begin\|is\)\>'
+ let ind = s:MainBlockIndent( ind, lnum, '\(procedure\|function\|declare\|package\|task\)\>', 'begin\>' )
+ elseif line =~ '^\s*record\>'
+ let ind = s:MainBlockIndent( ind, lnum, 'type\>', '' ) + &sw
+ elseif line =~ '^\s*\(else\|elsif\)\>'
+ let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' )
+ elseif line =~ '^\s*when\>'
+ " Align 'when' one /in/ from matching block start
+ let ind = s:MainBlockIndent( ind, lnum, '\(case\|exception\)\>', '' ) + &sw
+ elseif line =~ '^\s*end\>\s*\<if\>'
+ " End of if statements
+ let ind = s:EndBlockIndent( ind, lnum, 'if\>', 'end\>\s*\<if\>' )
+ elseif line =~ '^\s*end\>\s*\<loop\>'
+ " End of loops
+ let ind = s:EndBlockIndent( ind, lnum, '\(\(while\|for\)\>.*\)\?\<loop\>', 'end\>\s*\<loop\>' )
+ elseif line =~ '^\s*end\>\s*\<record\>'
+ " End of records
+ let ind = s:EndBlockIndent( ind, lnum, '\(type\>.*\)\=\<record\>', 'end\>\s*\<record\>' )
+ elseif line =~ '^\s*end\>\s*\<procedure\>'
+ " End of procedures
+ let ind = s:EndBlockIndent( ind, lnum, 'procedure\>.*\<is\>', 'end\>\s*\<procedure\>' )
+ elseif line =~ '^\s*end\>\s*\<case\>'
+ " End of case statement
+ let ind = s:EndBlockIndent( ind, lnum, 'case\>.*\<is\>', 'end\>\s*\<case\>' )
+ elseif line =~ '^\s*end\>'
+ " General case for end
+ let ind = s:MainBlockIndent( ind, lnum, '\(if\|while\|for\|loop\|accept\|begin\|record\|case\|exception\)\>', '' )
+ elseif line =~ '^\s*exception\>'
+ let ind = s:MainBlockIndent( ind, lnum, 'begin\>', '' )
+ elseif line =~ '^\s*then\>'
+ let ind = s:MainBlockIndent( ind, lnum, 'if\>', '' )
+ endif
+
+ return ind
+endfunction
+
+" vim: set sw=3 sts=3 :
diff --git a/runtime/indent/ant.vim b/runtime/indent/ant.vim
new file mode 100644
index 000000000..067f27213
--- /dev/null
+++ b/runtime/indent/ant.vim
@@ -0,0 +1,12 @@
+" Vim indent file
+" Language: ANT files
+" Maintainer: David Fishburn <fishburn@ianywhere.com>
+" Last Change: Thu May 15 2003 10:02:54 PM
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+" Use XML formatting rules
+runtime! indent/xml.vim
diff --git a/runtime/indent/automake.vim b/runtime/indent/automake.vim
new file mode 100644
index 000000000..60eff0750
--- /dev/null
+++ b/runtime/indent/automake.vim
@@ -0,0 +1,11 @@
+" Vim indent file
+" Language: automake
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/automake/
+" Latest Revision: 2004-04-25
+" arch-tag: 9a2af48c-48d4-4bae-82c3-c801bc9d1976
+
+" same as makefile indenting for now.
+source <sfile>:p:h/make.vim
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/awk.vim b/runtime/indent/awk.vim
new file mode 100644
index 000000000..726a5ddbe
--- /dev/null
+++ b/runtime/indent/awk.vim
@@ -0,0 +1,228 @@
+" vim: set sw=3 sts=3:
+
+" Awk indent script. It can handle multi-line statements and expressions.
+" It works up to the point where the distinction between correct/incorrect
+" and personal taste gets fuzzy. Drop me an e-mail for bug reports and
+" reasonable style suggestions.
+"
+" Bugs:
+" =====
+" - Some syntax errors may cause erratic indentation.
+" - Same for very unusual but syntacticly correct use of { }
+" - In some cases it's confused by the use of ( and { in strings constants
+" - This version likes the closing brace of a multiline pattern-action be on
+" character position 1 before the following pattern-action combination is
+" formatted
+
+" Author:
+" =======
+" Erik Janssen, ejanssen@itmatters.nl
+"
+" History:
+" ========
+" 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
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetAwkIndent()
+" Mmm, copied from the tcl indent program. Is this okay?
+setlocal indentkeys-=:,0#
+
+" Only define the function once.
+if exists("*GetAwkIndent")
+ finish
+endif
+
+" This function contains a lot of exit points. It checks for simple cases
+" first to get out of the function as soon as possible, thereby reducing the
+" number of possibilities later on in the difficult parts
+
+function! GetAwkIndent()
+
+ " Find previous line and get it's indentation
+ let prev_lineno = s:Get_prev_line( v:lnum )
+ if prev_lineno == 0
+ return 0
+ endif
+ let prev_data = getline( prev_lineno )
+ let ind = indent( prev_lineno )
+
+ " Increase indent if the previous line contains an opening brace. Search
+ " for this brace the hard way to prevent errors if the previous line is a
+ " 'pattern { action }' (simple check match on /{/ increases the indent then)
+
+ if s:Get_brace_balance( prev_data, '{', '}' ) > 0
+ return ind + &sw
+ endif
+
+ let brace_balance = s:Get_brace_balance( prev_data, '(', ')' )
+
+ " If prev line has positive brace_balance and starts with a word (keyword
+ " or function name), align the current line on the first '(' of the prev
+ " line
+
+ if brace_balance > 0 && s:Starts_with_word( prev_data )
+ return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum))
+ endif
+
+ " If this line starts with an open brace bail out now before the line
+ " continuation checks.
+
+ if getline( v:lnum ) =~ '^\s*{'
+ return ind
+ endif
+
+ " If prev line seems to be part of multiline statement:
+ " 1. Prev line is first line of a multiline statement
+ " -> attempt to indent on first ' ' or '(' of prev line, just like we
+ " indented the positive brace balance case above
+ " 2. Prev line is not first line of a multiline statement
+ " -> copy indent of prev line
+
+ let continue_mode = s:Seems_continuing( prev_data )
+ if continue_mode > 0
+ if s:Seems_continuing( getline(s:Get_prev_line( prev_lineno )) )
+ " Case 2
+ return ind
+ else
+ " Case 1
+ if continue_mode == 1
+ " Need continuation due to comma, backslash, etc
+ return s:Safe_indent( ind, s:First_word_len(prev_data), getline(v:lnum))
+ else
+ " if/for/while without '{'
+ return ind + &sw
+ endif
+ endif
+ endif
+
+ " If the previous line doesn't need continuation on the current line we are
+ " on the start of a new statement. We have to make sure we align with the
+ " previous statement instead of just the previous line. This is a bit
+ " complicated because the previous statement might be multi-line.
+ "
+ " The start of a multiline statement can be found by:
+ "
+ " 1 If the previous line contains closing braces and has negative brace
+ " balance, search backwards until cumulative brace balance becomes zero,
+ " take indent of that line
+ " 2 If the line before the previous needs continuation search backward
+ " until that's not the case anymore. Take indent of one line down.
+
+ " Case 1
+ if prev_data =~ ')' && brace_balance < 0
+ while brace_balance != 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,'(',')' )
+ endwhile
+ let ind = indent( prev_lineno )
+ else
+ " Case 2
+ if s:Seems_continuing( getline( prev_lineno - 1 ) )
+ let prev_lineno = prev_lineno - 2
+ let prev_data = getline( prev_lineno )
+ while prev_lineno > 0 && (s:Seems_continuing( prev_data ) > 0)
+ let prev_lineno = s:Get_prev_line( prev_lineno )
+ let prev_data = getline( prev_lineno )
+ endwhile
+ let ind = indent( prev_lineno + 1 )
+ endif
+ endif
+
+ " Decrease indent if this line contains a '}'.
+ if getline(v:lnum) =~ '^\s*}'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" Find the open and close braces in this line and return how many more open-
+" than close braces there are. It's also used to determine cumulative balance
+" across multiple lines.
+
+function! s:Get_brace_balance( line, b_open, b_close )
+ let line2 = substitute( a:line, a:b_open, "", "g" )
+ let openb = strlen( a:line ) - strlen( line2 )
+ let line3 = substitute( line2, a:b_close, "", "g" )
+ let closeb = strlen( line2 ) - strlen( line3 )
+ return openb - closeb
+endfunction
+
+" Find out whether the line starts with a word (i.e. keyword or function
+" call). Might need enhancements here.
+
+function! s:Starts_with_word( line )
+ if a:line =~ '^\s*[a-zA-Z_0-9]\+\s*('
+ return 1
+ endif
+ return 0
+endfunction
+
+" Find the length of the first word in a line. This is used to be able to
+" align a line relative to the 'print ' or 'if (' on the previous line in case
+" such a statement spans multiple lines.
+" Precondition: only to be used on lines where 'Starts_with_word' returns 1.
+
+function! s:First_word_len( line )
+ let white_end = matchend( a:line, '^\s*' )
+ if match( a:line, '^\s*func' ) != -1
+ let word_end = matchend( a:line, '[a-z]\+\s\+[a-zA-Z_0-9]\+[ (]*' )
+ else
+ let word_end = matchend( a:line, '[a-zA-Z_0-9]\+[ (]*' )
+ endif
+ return word_end - white_end
+endfunction
+
+" Determine if 'line' completes a statement or is continued on the next line.
+" This one is far from complete and accepts illegal code. Not important for
+" indenting, however.
+
+function! s:Seems_continuing( line )
+ " Unfinished lines
+ if a:line =~ '[\\,\|\&\+\-\*\%\^]\s*$'
+ return 1
+ endif
+ " if/for/while (cond) eol
+ if a:line =~ '^\s*\(if\|while\|for\)\s*(.*)\s*$' || a:line =~ '^\s*else\s*'
+ return 2
+ endif
+ return 0
+endfunction
+
+" Get previous relevant line. Search back until a line is that is no
+" comment or blank and return the line number
+
+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 checks whether an indented line exceeds a maximum linewidth
+" (hardcoded 80). If so and it is possible to stay within 80 positions (or
+" limit num of characters beyond linewidth) by decreasing the indent (keeping
+" it > base_indent), do so.
+
+function! s:Safe_indent( base, wordlen, this_line )
+ let line_base = matchend( a:this_line, '^\s*' )
+ let line_len = strlen( a:this_line ) - line_base
+ let indent = a:base
+ if (indent + a:wordlen + line_len) > 80
+ " Simple implementation good enough for the time being
+ let indent = indent + 3
+ endif
+ return indent + a:wordlen
+endfunction
diff --git a/runtime/indent/c.vim b/runtime/indent/c.vim
new file mode 100644
index 000000000..135251dca
--- /dev/null
+++ b/runtime/indent/c.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jun 12
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" C indenting is built-in, thus this is very simple
+setlocal cindent
diff --git a/runtime/indent/cdl.vim b/runtime/indent/cdl.vim
new file mode 100644
index 000000000..db2b9052b
--- /dev/null
+++ b/runtime/indent/cdl.vim
@@ -0,0 +1,129 @@
+" Description: Comshare Dimension Definition Language (CDL)
+" Author: Raul Segura Acevedo <raulseguraaceved@netscape.net>
+" Last Change: Fri Nov 30 13:35:48 2001 CST
+
+if exists("b:did_indent")
+ "finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=CdlGetIndent(v:lnum)
+setlocal indentkeys&
+setlocal indentkeys+==~else,=~endif,=~then,;,),=
+
+" Only define the function once.
+if exists("*CdlGetIndent")
+ "finish
+endif
+
+" find out if an "...=..." expresion its an asignment (or a conditional)
+" it scans 'line' first, and then the previos lines
+fun! CdlAsignment(lnum, line)
+ let f = -1
+ let lnum = a:lnum
+ let line = a:line
+ while lnum > 0 && f == -1
+ " line without members [a] of [b]:[c]...
+ let inicio = 0
+ while 1
+ " keywords that help to decide
+ let inicio = matchend(line, '\c\<\(expr\|\a*if\|and\|or\|not\|else\|then\|memberis\|\k\+of\)\>\|[<>;]', inicio)
+ if inicio < 0
+ break
+ endif
+ " it's formula if there's a ';', 'elsE', 'theN', 'enDif' or 'expr'
+ " conditional if there's a '<', '>', 'elseif', 'if', 'and', 'or', 'not',
+ " 'memberis', 'childrenof' and other \k\+of funcions
+ let f = line[inicio-1] =~? '[en;]' || strpart(line, inicio-4, 4) =~? 'ndif\|expr'
+ endw
+ let lnum = prevnonblank(lnum-1)
+ let line = substitute(getline(lnum), '\c\(\[[^]]*]\(\s*of\s*\|:\)*\)\+', ' ', 'g')
+ endw
+ " if we hit the start of the file then f = -1, return 1 (formula)
+ return f != 0
+endf
+
+fun! CdlGetIndent(lnum)
+ let thisline = getline(a:lnum)
+ if match(thisline, '^\s*\(\k\+\|\[[^]]*]\)\s*\(,\|;\s*$\)') >= 0
+ " it's an attributes line
+ return &sw
+ elseif match(thisline, '^\c\s*\([{}]\|\/[*/]\|dimension\|schedule\|group\|hierarchy\|class\)') >= 0
+ " it's a header or '{' or '}' or a comment
+ return 0
+ end
+
+ let lnum = prevnonblank(a:lnum-1)
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " PREVIOUS LINE
+ let ind = indent(lnum)
+ let line = getline(lnum)
+ let f = -1 " wether a '=' is a conditional or a asignment, -1 means we don't know yet
+ " one 'closing' element at the beginning of the line has already reduced the
+ " indent, but 'else', 'elseif' & 'then' increment it for the next line
+ " '=' at the beginning has already de right indent (increased for asignments)
+ let inicio = matchend(line, '^\c\s*\(else\a*\|then\|endif\|/[*/]\|[);={]\)')
+ if inicio > 0
+ let c = line[inicio-1]
+ " ')' and '=' don't change indent and are useless to set 'f'
+ if c == '{'
+ return &sw
+ elseif c != ')' && c != '='
+ let f = 1 " all but 'elseif' are followed by a formula
+ if c ==? 'n' || c ==? 'e' " 'then', 'else'
+ let ind = ind + &sw
+ elseif strpart(line, inicio-6, 6) ==? 'elseif' " elseif, set f to conditional
+ let ind = ind + &sw
+ let f = 0
+ end
+ end
+ end
+
+ " remove members [a] of [b]:[c]... (inicio remainds valid)
+ let line = substitute(line, '\c\(\[[^]]*]\(\s*of\s*\|:\)*\)\+', ' ', 'g')
+ while 1
+ " search for the next interesting element
+ let inicio=matchend(line, '\c\<if\|endif\|[()=;]', inicio)
+ if inicio < 0
+ break
+ end
+
+ let c = line[inicio-1]
+ " 'expr(...)' containing the formula
+ if strpart(line, inicio-5, 5) ==? 'expr('
+ let ind = 0
+ let f = 1
+ elseif c == ')' || c== ';' || strpart(line, inicio-5, 5) ==? 'endif'
+ let ind = ind - &sw
+ elseif c == '(' || c ==? 'f' " '(' or 'if'
+ let ind = ind + &sw
+ else " c == '='
+ " if it is an asignment increase indent
+ if f == -1 " we don't know yet, find out
+ let f = CdlAsignment(lnum, strpart(line, 0, inicio))
+ end
+ if f == 1 " formula increase it
+ let ind = ind + &sw
+ end
+ end
+ endw
+
+ " CURRENT LINE, if it starts with a closing element, decrease indent
+ " or if it starts with '=' (asignment), increase indent
+ if match(thisline, '^\c\s*\(else\|then\|endif\|[);]\)') >= 0
+ let ind = ind - &sw
+ elseif match(thisline, '^\s*=') >= 0
+ if f == -1 " we don't know yet if is an asignment, find out
+ let f = CdlAsignment(lnum, "")
+ end
+ if f == 1 " formula increase it
+ let ind = ind + &sw
+ end
+ end
+
+ return ind
+endfun
diff --git a/runtime/indent/ch.vim b/runtime/indent/ch.vim
new file mode 100644
index 000000000..12d583d06
--- /dev/null
+++ b/runtime/indent/ch.vim
@@ -0,0 +1,18 @@
+" Vim indent file
+" Language: Ch
+" Maintainer: SoftIntegration, Inc. <info@softintegration.com>
+" URL: http://www.softintegration.com/download/vim/indent/ch.vim
+" Last change: 2003 Aug 05
+" Created based on cpp.vim
+"
+" Ch is a C/C++ interpreter with many high level extensions
+
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Ch indenting is built-in, thus this is very simple
+setlocal cindent
diff --git a/runtime/indent/config.vim b/runtime/indent/config.vim
new file mode 100644
index 000000000..5a803ed8a
--- /dev/null
+++ b/runtime/indent/config.vim
@@ -0,0 +1,85 @@
+" Vim indent file
+" Language: Autoconf configure.{ac,in} file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/config/
+" Latest Revision: 2004-04-25
+" arch-tag: 7779c341-796f-408e-80e4-a55c26b519a4
+" TODO: how about nested [()]'s in one line
+" what's wrong with '\\\@!'?
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+source <sfile>:p:h/sh.vim " will set b:did_indent
+
+setlocal indentexpr=GetConfigIndent()
+setlocal indentkeys=!^F,o,O,=then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done
+
+" Only define the function once.
+if exists("*GetConfigIndent")
+ finish
+endif
+
+" get the offset (indent) of the end of the match of 'regexp' in 'line'
+function s:GetOffsetOf(line, regexp)
+ let end = matchend(a:line, a:regexp)
+ let width = 0
+ let i = 0
+ while i < end
+ if a:line[i] != "\t"
+ let width = width + 1
+ else
+ let width = width + &ts - (width % &ts)
+ endif
+ let i = i + 1
+ endwhile
+ return width
+endfunction
+
+function GetConfigIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " where to put this
+ let ind = GetShIndent()
+ let line = getline(lnum)
+
+ " if previous line has unmatched, unescaped opening parentheses,
+ " indent to its position. TODO: not failsafe if multiple ('s
+ if line =~ '\\\@<!([^)]*$'
+ let ind = s:GetOffsetOf(line, '\\\@!(')
+ endif
+
+ " if previous line has unmatched opening bracket,
+ " indent to its position. TODO: same as above
+ if line =~ '\[[^]]*$'
+ let ind = s:GetOffsetOf(line, '\[')
+ endif
+
+ " if previous line had an unmatched closing parantheses,
+ " indent to the matching opening parantheses
+ if line =~ '[^(]*\\\@<!)$'
+ call search(')', 'bW')
+ let lnum = searchpair('\\\@<!(', '', ')', 'bWn')
+ let ind = indent(lnum)
+ endif
+
+ " if previous line had an unmatched closing bracket,
+ " indent to the matching opening bracket
+ if line =~ '[^[]*]$'
+ call search(']', 'bW')
+ let lnum = searchpair('\[', '', ']', 'bWn')
+ let ind = indent(lnum)
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/cpp.vim b/runtime/indent/cpp.vim
new file mode 100644
index 000000000..9ae126ac4
--- /dev/null
+++ b/runtime/indent/cpp.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: C++
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jun 12
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" C++ indenting is built-in, thus this is very simple
+setlocal cindent
diff --git a/runtime/indent/cs.vim b/runtime/indent/cs.vim
new file mode 100644
index 000000000..064ab0069
--- /dev/null
+++ b/runtime/indent/cs.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: C#
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Fri, 15 Mar 2002 07:53:54 CET
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" C# is like indenting C
+setlocal cindent
diff --git a/runtime/indent/css.vim b/runtime/indent/css.vim
new file mode 100644
index 000000000..610c725c6
--- /dev/null
+++ b/runtime/indent/css.vim
@@ -0,0 +1,79 @@
+" Vim indent file
+" Language: CSS
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/css/
+" Latest Revision: 2004-04-25
+" arch-tag: ccfd77a0-1c9a-43f7-a407-bbe704541442
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetCSSIndent()
+setlocal indentkeys-=:,0# indentkeys-=e
+
+" Only define the function once.
+if exists("*GetCSSIndent")
+ finish
+endif
+
+function! s:LookupLine(lnum)
+ " find a non-blank line above the current line
+ let lnum = prevnonblank(a:lnum - 1)
+
+ if lnum == 0
+ return 0
+ endif
+
+ let line = getline(lnum)
+
+ " if the line has an end comment sequence we need to find a line
+ " that isn't affected by the comment.
+ if line =~ '\*/'
+ while line !~ '/\*'
+ let lnum = lnum - 1
+ let line = getline(lnum)
+ endwhile
+ endif
+
+ " if the line we found only contained the comment and whitespace
+ " we need to find another line to use...
+ if line =~ '^\s*/\*'
+ return s:LookupLine(lnum)
+ else
+ return lnum
+ endif
+endfunction
+
+function GetCSSIndent()
+ let lnum = s:LookupLine(v:lnum)
+
+ if lnum == 0
+ return 0
+ endif
+
+ " remove commented stuff from line
+ let line = substitute(getline(lnum), '/\*.\*/', '', 'eg')
+
+ let ind = indent(lnum)
+
+ " check for opening brace on the previous line
+ " skip if it also contains a closing brace...
+ if line =~ '{\(.*}\)\@!'
+ let ind = ind + &sw
+ endif
+
+ let line = getline(v:lnum)
+
+ " check for closing brace first on current line
+ if line =~ '^\s*}'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/docbk.vim b/runtime/indent/docbk.vim
new file mode 100644
index 000000000..6b807bbf3
--- /dev/null
+++ b/runtime/indent/docbk.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: DocBook Documentation Format
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/docbk/
+" Latest Revision: 2004-05-22
+" arch-tag: 3d073af7-1d69-42a2-99ad-9a49a21eb28f
+
+" Same as XML indenting for now.
+runtime! indent/xml.vim
+
+setlocal indentexpr=XmlIndentGet(v:lnum,0)
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/dylan.vim b/runtime/indent/dylan.vim
new file mode 100644
index 000000000..0afcbeada
--- /dev/null
+++ b/runtime/indent/dylan.vim
@@ -0,0 +1,90 @@
+" Vim indent file
+" Language: Dylan
+" Version: 0.01
+" Last Change: 2003 Feb 04
+" Maintainer: Brent A. Fulgham <bfulgham@debian.org>
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentkeys+==~begin,=~block,=~case,=~cleanup,=~define,=~end,=~else,=~elseif,=~exception,=~for,=~finally,=~if,=~otherwise,=~select,=~unless,=~while
+
+" Define the appropriate indent function but only once
+setlocal indentexpr=DylanGetIndent()
+if exists("*DylanGetIndent")
+ finish
+endif
+
+function DylanGetIndent()
+ " Get the line to be indented
+ let cline = getline(v:lnum)
+
+ " Don't reindent comments on first column
+ if cline =~ '^/\[/\*]'
+ return 0
+ endif
+
+ "Find the previous non-blank line
+ let lnum = prevnonblank(v:lnum - 1)
+ "Use zero indent at the top of the file
+ if lnum == 0
+ return 0
+ endif
+
+ let prevline=getline(lnum)
+ let ind = indent(lnum)
+ let chg = 0
+
+ " If previous line was a comment, use its indent
+ if prevline =~ '^\s*//'
+ return ind
+ endif
+
+ " If previous line was a 'define', indent
+ if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)'
+ let chg = &sw
+ " local methods indent the shift-width, plus 6 for the 'local'
+ elseif prevline =~? '^\s*local'
+ let chg = &sw + 6
+ " If previous line was a let with no closing semicolon, indent
+ elseif prevline =~? '^\s*let.*[^;]\s*$'
+ let chg = &sw
+ " If previous line opened a parenthesis, and did not close it, indent
+ elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
+ return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1
+ "elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
+ elseif prevline =~ '^[^(]*)\s*$'
+ " This line closes a parenthesis. Find opening
+ let curr_line = prevnonblank(lnum - 1)
+ while curr_line >= 0
+ let str = getline(curr_line)
+ if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
+ let curr_line = prevnonblank(curr_line - 1)
+ else
+ break
+ endif
+ endwhile
+ if curr_line < 0
+ return -1
+ endif
+ let ind = indent(curr_line)
+ " Although we found the closing parenthesis, make sure this
+ " line doesn't start with an indentable command:
+ let curr_str = getline(curr_line)
+ if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)'
+ let chg = &sw
+ endif
+ endif
+
+ " If a line starts with end, un-indent (even if we just indented!)
+ if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)'
+ let chg = chg - &sw
+ endif
+
+ return ind + chg
+endfunction
+
+" vim:sw=2 tw=130
diff --git a/runtime/indent/eiffel.vim b/runtime/indent/eiffel.vim
new file mode 100644
index 000000000..ac31d1043
--- /dev/null
+++ b/runtime/indent/eiffel.vim
@@ -0,0 +1,106 @@
+" Vim indent file
+" Language: Eiffel
+" Maintainer: David Clarke <gadicath@dishevelled.net>
+" $Date$
+" $Revision$
+" URL: http://gadicath.webhop.net/other/eiffel.vim
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetEiffelIndent()
+setlocal nolisp
+setlocal nosmartindent
+setlocal nocindent
+setlocal autoindent
+setlocal comments=:--
+setlocal indentkeys+==end,=else,=ensure,=require,=check,=loop,=until
+setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant
+setlocal indentkeys+==invariant,=do,=local,=export
+setlocal sw=3
+setlocal tw=78
+
+" Define some stuff
+" keywords grouped by indenting
+let s:trust_user_indent = '\(+\)\(\s*\(--\).*\)\=$'
+let s:relative_indent = '^\s*\(deferred\|class\|feature\|creation\|inherit\|loop\|from\|until\|if\|else\|elseif\|ensure\|require\|check\|do\|local\|invariant\|variant\|rename\|redefine\|do\|export\)\>'
+let s:outdent = '^\s*\(else\|invariant\|variant\|do\|require\|until\|loop\|local\)\>'
+let s:no_indent = '^\s*\(class\|feature\|creation\|inherit\)\>'
+let s:single_dent = '^[^-]\+[[:alnum:]]\+ is\(\s*\(--\).*\)\=$'
+let s:inheritance_dent = '\s*\(redefine\|rename\|export\)\>'
+
+
+" Only define the function once.
+if exists("*GetEiffelIndent")
+ finish
+endif
+
+function GetEiffelIndent()
+
+ " Eiffel Class indenting
+ "
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " trust the user's indenting
+ if getline(lnum) =~ s:trust_user_indent
+ return -1
+ endif
+
+ " Add a 'shiftwidth' after lines that start with an indent word
+ let ind = indent(lnum)
+ if getline(lnum) =~ s:relative_indent
+ let ind = ind + &sw
+ endif
+
+ " Indent to single indent
+ if getline(v:lnum) =~ s:single_dent && getline(v:lnum) !~ s:relative_indent
+ \ && getline(v:lnum) !~ '\s*\<\(and\|or\|implies\)\>'
+ let ind = &sw
+ endif
+
+ " Indent to double indent
+ if getline(v:lnum) =~ s:inheritance_dent
+ let ind = 2 * &sw
+ endif
+
+ " Indent line after the first line of the function definition
+ if getline(lnum) =~ s:single_dent
+ let ind = ind + &sw
+ endif
+
+ " The following should always be at the start of a line, no indenting
+ if getline(v:lnum) =~ s:no_indent
+ let ind = 0
+ endif
+
+ " Subtract a 'shiftwidth', if this isn't the first thing after the 'is'
+ " or first thing after the 'do'
+ if getline(v:lnum) =~ s:outdent && getline(v:lnum - 1) !~ s:single_dent
+ \ && getline(v:lnum - 1) !~ '^\s*do\>'
+ let ind = ind - &sw
+ endif
+
+ " Subtract a shiftwidth for end statements
+ if getline(v:lnum) =~ '^\s*end\>'
+ let ind = ind - &sw
+ endif
+
+ " set indent of zero end statements that are at an indent of 3, this should
+ " only ever be the class's end.
+ if getline(v:lnum) =~ '^\s*end\>' && ind == 3
+ let ind = 0
+ endif
+
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/eterm.vim b/runtime/indent/eterm.vim
new file mode 100644
index 000000000..2e7ba1858
--- /dev/null
+++ b/runtime/indent/eterm.vim
@@ -0,0 +1,49 @@
+" Vim indent file
+" Language: Eterm configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/eterm/
+" Latest Revision: 2004-04-25
+" arch-tag: a22a92b1-c59f-4f47-8207-b21db6549b21
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetEtermIndent()
+setlocal indentkeys=!^F,o,O,=end
+
+" Only define the function once.
+if exists("*GetEtermIndent")
+ finish
+endif
+
+function GetEtermIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let line = getline(lnum)
+ let ind = indent(lnum)
+
+ if line =~ '^\s*begin\>'
+ let ind = ind + &sw
+ endif
+
+ let line = getline(v:lnum)
+
+ " Check for closing brace on current line
+ if line =~ '^\s*end\>'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/fortran.vim b/runtime/indent/fortran.vim
new file mode 100644
index 000000000..b14273aa3
--- /dev/null
+++ b/runtime/indent/fortran.vim
@@ -0,0 +1,161 @@
+" Vim indent file
+" Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
+" Version: 0.36
+" URL: http://www.unb.ca/chem/ajit/indent/fortran.vim
+" Last Change: 2004 Apr. 05
+" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
+" Usage: Do :help fortran-indent from Vim
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+let s:cposet=&cpoptions
+set cpoptions-=C
+
+setlocal indentkeys+==~end,=~case,=~if,=~else,=~do,=~where,=~elsewhere,=~select
+setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect
+
+" Determine whether this is a fixed or free format source file
+" if this hasn't been done yet
+if !exists("b:fortran_fixed_source")
+ if exists("fortran_free_source")
+ " User guarantees free source form
+ let b:fortran_fixed_source = 0
+ elseif exists("fortran_fixed_source")
+ " User guarantees fixed source form
+ let b:fortran_fixed_source = 1
+ else
+ " f90 and f95 allow 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 25 lines
+ " Detection becomes more accurate and time-consuming if more lines
+ " are checked. Increase the limit below if you keep lots of comments at
+ " the very top of each file and you have a fast computer
+ let s:lmax = 25
+ if ( s:lmax > line("$") )
+ let s:lmax = line("$")
+ endif
+ let b:fortran_fixed_source = 1
+ let s:ln=1
+ while s:ln <= s:lmax
+ let s:test = strpart(getline(s:ln),0,5)
+ if s:test[0] !~ '[Cc*!#]' && s:test !~ '^ \+[!#]' && s:test =~ '[^ 0-9\t]'
+ let b:fortran_fixed_source = 0
+ break
+ endif
+ let s:ln = s:ln + 1
+ endwhile
+ endif
+endif
+
+" Define the appropriate indent function but only once
+if (b:fortran_fixed_source == 1)
+ setlocal indentexpr=FortranGetFixedIndent()
+ if exists("*FortranGetFixedIndent")
+ finish
+ endif
+else
+ setlocal indentexpr=FortranGetFreeIndent()
+ if exists("*FortranGetFreeIndent")
+ finish
+ endif
+endif
+
+function FortranGetIndent(lnum)
+ let ind = indent(a:lnum)
+ let prevline=getline(a:lnum)
+ " Strip tail comment
+ let prevstat=substitute(prevline, '!.*$', '', '')
+
+ "Indent do loops only if they are all guaranteed to be of do/end do type
+ if exists("b:fortran_do_enddo") || exists("fortran_do_enddo")
+ if prevstat =~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*do\>'
+ let ind = ind + &sw
+ endif
+ if getline(v:lnum) =~? '^\s*\(\d\+\s\)\=\s*end\s*do\>'
+ let ind = ind - &sw
+ endif
+ endif
+
+ "Add a shiftwidth to statements following if, else, case,
+ "where and elsewhere statements
+ if prevstat =~? '^\s*\(\d\+\s\)\=\s*\(else\|case\|where\|elsewhere\)\>'
+ \ || 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
+ endif
+
+ "Subtract a shiftwidth from else, elsewhere, case, end if,
+ " end where and end select statements
+ if getline(v:lnum) =~? '^\s*\(\d\+\s\)\=\s*'
+ \. '\(else\|elsewhere\|case\|end\s*\(if\|where\|select\)\)\>'
+ let ind = ind - &sw
+ " Fix indent for case statement immediately after select
+ if prevstat =~? '\<select\>'
+ let ind = ind + &sw
+ endif
+ endif
+
+ return ind
+endfunction
+
+function FortranGetFreeIndent()
+ "Find the previous non-blank line
+ let lnum = prevnonblank(v:lnum - 1)
+
+ "Use zero indent at the top of the file
+ if lnum == 0
+ return 0
+ endif
+
+ let ind=FortranGetIndent(lnum)
+ return ind
+endfunction
+
+function FortranGetFixedIndent()
+ let currline=getline(v:lnum)
+ "Don't indent comments, continuation lines and labelled lines
+ if strpart(currline,0,6) =~ '[^ \t]'
+ let ind = indent(v:lnum)
+ return ind
+ endif
+
+ "Find the previous line which is not blank, not a comment,
+ "not a continuation line, and does not have a label
+ let lnum = v:lnum - 1
+ while lnum > 0
+ let prevline=getline(lnum)
+ if (prevline =~ "^[C*!]") || (prevline =~ "^\s*$")
+ \ || (strpart(prevline,5,1) !~ "[ 0]")
+ " Skip comments, blank lines and continuation lines
+ let lnum = lnum - 1
+ else
+ let test=strpart(prevline,0,5)
+ if test =~ "[0-9]"
+ " Skip lines with statement numbers
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ endif
+ endwhile
+
+ "First line must begin at column 7
+ if lnum == 0
+ return 6
+ endif
+
+ let ind=FortranGetIndent(lnum)
+ return ind
+endfunction
+
+let &cpoptions=s:cposet
+unlet s:cposet
+
+" vim:sw=2 tw=130
diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim
new file mode 100644
index 000000000..d78da193b
--- /dev/null
+++ b/runtime/indent/html.vim
@@ -0,0 +1,219 @@
+" Description: html indenter
+" Author: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 10:28:39 CEST
+" Globals: g:html_indent_tags -- indenting tags
+" g:html_indent_strict -- inhibit 'O O' elements
+" g:html_indent_strict_table -- inhibit 'O -' elements
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+
+" [-- local settings (must come before aborting the script) --]
+setlocal indentexpr=HtmlIndentGet(v:lnum)
+setlocal indentkeys=o,O,*<Return>,<>>,<bs>,{,}
+
+
+if exists('g:html_indent_tags')
+ unlet g:html_indent_tags
+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')
+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')
+endif
+
+delfun <SID>HtmlIndentPush
+
+set cpo-=C
+
+" [-- 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
+ endif
+ 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>
+ return -1
+ endif
+
+ " [-- special handling for <javascript>: use cindent --]
+ let js = '<script.*type\s*=\s*.*java'
+ if 0 < searchpair(js, '', '</script>', 'nWb')
+ \ || 0 < searchpair(js, '', '</script>', 'nW')
+ " we're inside javascript
+ if getline(lnum) !~ js && getline(a:lnum) != '</script>'
+ return cindent(a:lnum)
+ endif
+ 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
+ return indent(preline)
+ endif
+ endif
+
+ let ind = <SID>HtmlIndentSum(lnum, -1)
+ let ind = ind + <SID>HtmlIndentSum(a:lnum, 0)
+
+ if restore_ic == 0
+ setlocal noic
+ endif
+
+ return indent(lnum) + (&sw * ind)
+endfun
+
+" [-- EOF <runtime>/indent/html.vim --]
diff --git a/runtime/indent/idlang.vim b/runtime/indent/idlang.vim
new file mode 100644
index 000000000..97c31ada5
--- /dev/null
+++ b/runtime/indent/idlang.vim
@@ -0,0 +1,63 @@
+" IDL (Interactive Data Language) indent file.
+" Language: IDL (ft=idlang)
+" Last change: 2002 Sep 23
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+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 indentexpr=GetIdlangIndent(v:lnum)
+
+" Only define the function once.
+if exists("*GetIdlangIndent")
+ finish
+endif
+
+function GetIdlangIndent(lnum)
+ " First non-empty line above the current line.
+ let pnum = prevnonblank(v:lnum-1)
+ " v:lnum is the first non-empty line -- zero indent.
+ if pnum == 0
+ return 0
+ endif
+ " Second non-empty line above the current line.
+ let pnum2 = prevnonblank(pnum-1)
+
+ " Current indent.
+ let curind = indent(pnum)
+
+ " Indenting of continued lines.
+ if getline(pnum) =~ '\$\s*\(;.*\)\=$'
+ if getline(pnum2) !~ '\$\s*\(;.*\)\=$'
+ let curind = curind+&sw
+ endif
+ else
+ if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
+ let curind = curind-&sw
+ endif
+ endif
+
+ " Indenting blocks of statements.
+ if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>'
+ if getline(pnum) =~? 'begin\>'
+ elseif indent(v:lnum) > curind-&sw
+ let curind = curind-&sw
+ else
+ return -1
+ endif
+ elseif getline(pnum) =~? 'begin\>'
+ if indent(v:lnum) < curind+&sw
+ let curind = curind+&sw
+ else
+ return -1
+ endif
+ endif
+ return curind
+endfunction
+
diff --git a/runtime/indent/ishd.vim b/runtime/indent/ishd.vim
new file mode 100644
index 000000000..9b4d7ff0d
--- /dev/null
+++ b/runtime/indent/ishd.vim
@@ -0,0 +1,65 @@
+" Description: InstallShield indenter
+" Author: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetIshdIndent(v:lnum)
+setlocal indentkeys&
+setlocal indentkeys+==else,=elseif,=endif,=end,=begin,<:>
+" setlocal indentkeys-=0#
+
+" Only define the function once.
+if exists("*GetIshdIndent")
+ finish
+endif
+
+fun! GetIshdIndent(lnum)
+ " labels and preprocessor get zero indent immediately
+ let this_line = getline(a:lnum)
+ let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)'
+ let LABELS_OR_PREPROC_EXCEPT = '^\s*\<default\+\>:'
+ if this_line =~ LABELS_OR_PREPROC && this_line !~ LABELS_OR_PREPROC_EXCEPT
+ return 0
+ endif
+
+ " Find a non-blank line above the current line.
+ " Skip over labels and preprocessor directives.
+ let lnum = a:lnum
+ while lnum > 0
+ let lnum = prevnonblank(lnum - 1)
+ let previous_line = getline(lnum)
+ if previous_line !~ LABELS_OR_PREPROC || previous_line =~ LABELS_OR_PREPROC_EXCEPT
+ break
+ endif
+ endwhile
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+
+ " Add
+ if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>'
+ let ind = ind + &sw
+ endif
+
+ " Subtract
+ if this_line =~ '^\s*\<endswitch\>'
+ let ind = ind - 2 * &sw
+ elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>'
+ let ind = ind - &sw
+ elseif this_line =~ '^\s*\<\(case\|default\)\>'
+ if previous_line !~ '^\s*\<switch\>'
+ let ind = ind - &sw
+ endif
+ endif
+
+ return ind
+endfun
diff --git a/runtime/indent/java.vim b/runtime/indent/java.vim
new file mode 100644
index 000000000..a600c4bf3
--- /dev/null
+++ b/runtime/indent/java.vim
@@ -0,0 +1,128 @@
+" Vim indent file
+" Language: Java
+" Maintainer: Toby Allsopp <toby.allsopp@peace.com>
+" Last Change: 2003 Oct 21
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Indent Java anonymous classes correctly.
+setlocal cinoptions& cinoptions+=j1
+
+" The "extends" and "implements" lines start off with the wrong indent.
+setlocal indentkeys& indentkeys+=0=extends indentkeys+=0=implements
+
+" Set the function to do the work.
+setlocal indentexpr=GetJavaIndent()
+
+" Only define the function once.
+if exists("*GetJavaIndent")
+ finish
+endif
+
+function! SkipJavaBlanksAndComments(startline)
+ let lnum = a:startline
+ while lnum > 1
+ let lnum = prevnonblank(lnum)
+ if getline(lnum) =~ '\*/\s*$'
+ while getline(lnum) !~ '/\*' && lnum > 1
+ let lnum = lnum - 1
+ endwhile
+ if getline(lnum) =~ '^\s*/\*'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ elseif getline(lnum) =~ '^\s*//'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ endwhile
+ return lnum
+endfunction
+
+function GetJavaIndent()
+
+ " Java is just like C; use the built-in C indenting and then correct a few
+ " specific cases.
+ let theIndent = cindent(v:lnum)
+
+ " If we're in the middle of a comment then just trust cindent
+ if getline(v:lnum) =~ '^\s*\*'
+ return theIndent
+ endif
+
+ " find start of previous line, in case it was a continuation line
+ let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
+ let prev = lnum
+ while prev > 1
+ let next_prev = SkipJavaBlanksAndComments(prev - 1)
+ if getline(next_prev) !~ ',\s*$'
+ break
+ endif
+ let prev = next_prev
+ endwhile
+
+ " Try to align "throws" lines for methods and "extends" and "implements" for
+ " classes.
+ if getline(v:lnum) =~ '^\s*\(extends\|implements\)\>'
+ \ && getline(lnum) !~ '^\s*\(extends\|implements\)\>'
+ let theIndent = theIndent + &sw
+ endif
+
+ " correct for continuation lines of "throws", "implements" and "extends"
+ let cont_kw = matchstr(getline(prev),
+ \ '^\s*\zs\(throws\|implements\|extends\)\>\ze.*,\s*$')
+ if strlen(cont_kw) > 0
+ let amount = strlen(cont_kw) + 1
+ if getline(lnum) !~ ',\s*$'
+ let theIndent = theIndent - (amount + &sw)
+ if theIndent < 0
+ let theIndent = 0
+ endif
+ elseif prev == lnum
+ let theIndent = theIndent + amount
+ if cont_kw ==# 'throws'
+ let theIndent = theIndent + &sw
+ endif
+ endif
+ elseif getline(prev) =~ '^\s*\(throws\|implements\|extends\)\>'
+ \ && (getline(prev) =~ '{\s*$'
+ \ || getline(v:lnum) =~ '^\s*{\s*$')
+ let theIndent = theIndent - &sw
+ endif
+
+ " When the line starts with a }, try aligning it with the matching {,
+ " skipping over "throws", "extends" and "implements" clauses.
+ if getline(v:lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$'
+ call cursor(v:lnum, 1)
+ silent normal %
+ let lnum = line('.')
+ if lnum < v:lnum
+ while lnum > 1
+ let next_lnum = SkipJavaBlanksAndComments(lnum - 1)
+ if getline(lnum) !~ '^\s*\(throws\|extends\|implements\)\>'
+ \ && getline(next_lnum) !~ ',\s*$'
+ break
+ endif
+ let lnum = prevnonblank(next_lnum)
+ endwhile
+ return indent(lnum)
+ endif
+ endif
+
+ " Below a line starting with "}" never indent more. Needed for a method
+ " below a method with an indented "throws" clause.
+ let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
+ if getline(lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$' && indent(lnum) < theIndent
+ let theIndent = indent(lnum)
+ endif
+
+ return theIndent
+endfunction
+
+" vi: sw=2 et
diff --git a/runtime/indent/lua.vim b/runtime/indent/lua.vim
new file mode 100644
index 000000000..37e397e37
--- /dev/null
+++ b/runtime/indent/lua.vim
@@ -0,0 +1,49 @@
+" Vim indent file
+" Language: Lua script
+" Maintainer: Marcus Aurelius Farias <marcuscf@vant.com.br>
+" First Author: Max Ischenko <mfi@ukr.net>
+" Last Change: 2003 Jan 20
+
+" Only define the function once.
+if exists("*GetLuaIndent") | finish | endif
+
+setlocal indentexpr=GetLuaIndent()
+
+" To make Vim call GetLuaIndent() when it finds '\s*end' or '\s*until'
+" on the current line (else is default).
+setlocal indentkeys+=0=end,0=until
+
+setlocal autoindent
+
+function! GetLuaIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " Add a 'shiftwidth' after lines beginning with:
+ " function, if, for, while, repeat, else, elseif, '{'
+ let ind = indent(lnum)
+ let flag = 0
+ if getline(lnum) =~ '^\s*\(function\>\|if\>\|for\>\|while\>\|repeat\>\|else\>\|elseif\>\|do\>\)' || getline(lnum) =~ '{\s*$' || getline(lnum) =~ '\s*=\s*function'
+ let ind = ind + &sw
+ let flag = 1
+ endif
+
+ " Subtract a 'shiftwidth' after lines ending with
+ " 'end' when they begin with while, if, for, etc.
+ if flag == 1 && getline(lnum) =~ '\<end\>\|\<until\>'
+ let ind = ind - &sw
+ endif
+
+ " Subtract a 'shiftwidth' on end, else (and elseif), until and '}'
+ " This is the part that requires 'indentkeys'.
+ if getline(v:lnum) =~ '^\s*\(end\|else\|until\|}\)'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim
new file mode 100644
index 000000000..f376424ad
--- /dev/null
+++ b/runtime/indent/make.vim
@@ -0,0 +1,57 @@
+" Vim indent file
+" Language: Makefile
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/make/
+" Latest Revision: 2004-04-25
+" arch-tag: b539e147-a05c-4860-98af-1d2436db2f4b
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetMakeIndent()
+setlocal indentkeys=!^F,o,O
+
+" Only define the function once.
+if exists("*GetMakeIndent")
+ finish
+endif
+
+function s:GetStringWidth(line, str)
+ let end = matchend(a:line, a:str)
+ let width = 0
+ let i = 0
+ while i < end
+ if a:line[i] != "\t"
+ let width = width + 1
+ else
+ let width = width + &ts - (width % &ts)
+ endif
+ let i = i + 1
+ endwhile
+ return width
+endfunction
+
+function GetMakeIndent()
+ if v:lnum == 1
+ return 0
+ endif
+
+ let ind = indent(v:lnum - 1)
+ let line = getline(v:lnum - 1)
+
+ if line == ''
+ let ind = 0
+ elseif line =~ '^[^ \t#:][^#:]*:\{1,2}\([^=:]\|$\)'
+ let ind = ind + &ts
+ elseif line =~ '^\s*\h\w*\s*=\s*.\+\\$'
+ let ind = s:GetStringWidth(line, '=\s*')
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/matlab.vim b/runtime/indent/matlab.vim
new file mode 100644
index 000000000..7bccc7c0a
--- /dev/null
+++ b/runtime/indent/matlab.vim
@@ -0,0 +1,74 @@
+" Matlab indent file
+" Language: Matlab
+" Maintainer: Christophe Poucet <christophe.poucet@pandora.be>
+" Last Change: 6 January, 2001
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Some preliminary setting
+setlocal indentkeys=!,o,O=end,=case,=else,=elseif,=otherwise,=catch
+
+
+setlocal indentexpr=GetMatlabIndent(v:lnum)
+
+" Only define the function once.
+if exists("*GetMatlabIndent")
+ finish
+endif
+
+function GetMatlabIndent(lnum)
+ " Give up if this line is explicitly joined.
+ if getline(a:lnum - 1) =~ '\\$'
+ return -1
+ endif
+
+ " Search backwards for the first non-empty line.
+ let plnum = a:lnum - 1
+ while plnum > 0 && getline(plnum) =~ '^\s*$'
+ let plnum = plnum - 1
+ endwhile
+
+ if plnum == 0
+ " This is the first non-empty line, use zero indent.
+ return 0
+ endif
+
+ let curind = indent(plnum)
+
+ " If the current line is a stop-block statement...
+ if getline(v:lnum) =~ '^\s*\(end\|else\|elseif\|case\|otherwise\|catch\)\>'
+ " See if this line does not follow the line right after an openblock
+ if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
+ " See if the user has already dedented
+ elseif indent(v:lnum) > curind - &sw
+ " If not, recommend one dedent
+ let curind = curind - &sw
+ else
+ " Otherwise, trust the user
+ return -1
+ endif
+" endif
+
+ " If the previous line opened a block
+ elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
+ " See if the user has already indented
+ if indent(v:lnum) < curind + &sw
+ "If not, recommend indent
+ let curind = curind + &sw
+ else
+ " Otherwise, trust the user
+ return -1
+ endif
+ endif
+
+
+
+ " If we got to here, it means that the user takes the standardversion, so we return it
+ return curind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/mp.vim b/runtime/indent/mp.vim
new file mode 100644
index 000000000..1aea4f809
--- /dev/null
+++ b/runtime/indent/mp.vim
@@ -0,0 +1,206 @@
+" MetaPost indent file
+" Language: MetaPost
+" Maintainer: Eugene Minkovskii <emin@mccme.ru>
+" Last Change: 2003 Nov 21
+" Version: 0.1
+" ==========================================================================
+
+" Identation Rules: {{{1
+" First of all, MetaPost language don't expect any identation rules.
+" This screept need for you only if you (not MetaPost) need to do
+" exactly code. If you don't need to use indentation, see
+" :help filetype-indent-off
+"
+" Note: Every rules of identation in MetaPost or TeX languages (and in some
+" other of course) is very subjective. I can release only my vision of this
+" promlem.
+"
+" ..........................................................................
+" Example of correct (by me) identation {{{2
+" shiftwidth=4
+" ==========================================================================
+" for i=0 upto 99:
+" z[i] = (0,1u) rotated (i*360/100);
+" endfor
+" draw z0 -- z10 -- z20
+" withpen ... % <- 2sw because breaked line
+" withcolor ...; % <- same as previous
+" draw z0 for i=1 upto 99:
+" -- z[i] % <- 1sw from left end of 'for' satement
+" endfor withpen ... % <- 0sw from left end of 'for' satement
+" withcolor ...; % <- 2sw because breaked line
+" draw if One: % <- This is internal if (like 'for' above)
+" one
+" elsif Other:
+" other
+" fi withpen ...;
+" if one: % <- This is external if
+" draw one;
+" elseif other:
+" draw other;
+" fi
+" draw z0; draw z1;
+" }}}
+" }}}
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetMetaPostIndent()
+setlocal indentkeys+=;,<:>,=if,=for,=def,=end,=else,=fi
+
+" Only define the function once.
+if exists("*GetMetaPostIndent")
+ finish
+endif
+
+" Auxiliary Definitions: {{{1
+function! MetaNextNonblankNoncomment(pos)
+ " Like nextnonblank() but ignore comment lines
+ let tmp = nextnonblank(a:pos)
+ while tmp && getline(tmp) =~ '^\s*%'
+ let tmp = nextnonblank(tmp+1)
+ endwhile
+ return tmp
+endfunction
+
+function! MetaPrevNonblankNoncomment(pos)
+ " Like prevnonblank() but ignore comment lines
+ let tmp = prevnonblank(a:pos)
+ while tmp && getline(tmp) =~ '^\s*%'
+ let tmp = prevnonblank(tmp-1)
+ endwhile
+ return tmp
+endfunction
+
+function! MetaSearchNoncomment(pattern, ...)
+ " Like search() but ignore commented areas
+ if a:0
+ let flags = a:1
+ elseif &wrapscan
+ let flags = "w"
+ else
+ let flags = "W"
+ endif
+ let cl = line(".")
+ let cc = col(".")
+ let tmp = search(a:pattern, flags)
+ while tmp && synIDattr(synID(line("."), col("."), 1), "name") =~
+ \ 'm[fp]\(Comment\|TeXinsert\|String\)'
+ let tmp = search(a:pattern, flags)
+ endwhile
+ if !tmp
+ call cursor(cl,cc)
+ endif
+ return tmp
+endfunction
+" }}}
+
+function! GetMetaPostIndent()
+ " not indent in comment ???
+ if synIDattr(synID(line("."), col("."), 1), "name") =~
+ \ 'm[fp]\(Comment\|TeXinsert\|String\)'
+ return -1
+ endif
+ " Some RegExps: {{{1
+ " end_of_item: all of end by ';'
+ " + all of end by :endfor, :enddef, :endfig, :endgroup, :fi
+ " + all of start by :beginfig(num), :begingroup
+ " + all of start by :for, :if, :else, :elseif and end by ':'
+ " + all of start by :def, :vardef and end by '='
+ let end_of_item = '\(' .
+ \ ';\|' .
+ \ '\<\(end\(for\|def\|fig\|group\)\|fi\)\>\|' .
+ \ '\<begin\(group\>\|fig\s*(\s*\d\+\s*)\)\|' .
+ \ '\<\(for\|if\|else\(if\)\=\)\>.\+:\|' .
+ \ '\<\(var\)\=def\>.\+=' . '\)'
+ " }}}
+ " Save: current position {{{1
+ let cl = line (".")
+ let cc = col (".")
+ let cs = getline(".")
+ " if it is :beginfig or :endfig use zero indent
+ if cs =~ '^\s*\(begin\|end\)fig\>'
+ return 0
+ endif
+ " }}}
+ " Initialise: ind variable {{{1
+ " search previous item not in current line
+ let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
+ while p_semicol_l == cl
+ let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
+ endwhile
+ " if this is first item in program use zero indent
+ if !p_semicol_l
+ return 0
+ endif
+ " if this is multiline item, remember first indent
+ if MetaNextNonblankNoncomment(p_semicol_l+1) < cl
+ let ind = indent(MetaNextNonblankNoncomment(p_semicol_l+1))
+ " else --- search pre-previous item for search first line in previous item
+ else
+ " search pre-previous item not in current line
+ let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
+ while pp_semicol_l == p_semicol_l
+ let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
+ endwhile
+ " if we find pre-previous item, remember indent of previous item
+ " else --- remember zero
+ if pp_semicol_l
+ let ind = indent(MetaNextNonblankNoncomment(line(".")+1))
+ else
+ let ind = 0
+ endif
+ endif
+ " }}}
+ " Increase Indent: {{{1
+ " if it is an internal/external :for or :if statements {{{2
+ let pnn_s = getline(MetaPrevNonblankNoncomment(cl-1))
+ if pnn_s =~ '\<\(for\|if\)\>.\+:\s*\($\|%\)'
+ let ind = match(pnn_s, '\<\(for\|if\)\>.\+:\s*\($\|%\)') + &sw
+ " }}}
+ " if it is a :def, :vardef, :beginfig, :begingroup, :else, :elseif {{{2
+ elseif pnn_s =~ '^\s*\(' .
+ \ '\(var\)\=def\|' .
+ \ 'begin\(group\|fig\s*(\s*\d\+\s*)\)\|' .
+ \ 'else\(if\)\=' . '\)\>'
+ let ind = ind + &sw
+ " }}}
+ " if it is a broken line {{{2
+ elseif pnn_s !~ end_of_item.'\s*\($\|%\)'
+ let ind = ind + (2 * &sw)
+ endif
+ " }}}
+ " }}}
+ " Decrease Indent: {{{1
+ " if this is :endfor or :enddef statements {{{2
+ " this is correct because :def cannot be inside :for
+ if cs =~ '\<end\(for\|def\)\=\>'
+ call MetaSearchNoncomment('\<for\>.\+:\s*\($\|%\)' . '\|' .
+ \ '^\s*\(var\)\=def\>',"bW")
+ if col(".") > 1
+ let ind = col(".") - 1
+ else
+ let ind = indent(".")
+ endif
+ " }}}
+ " if this is :fi, :else, :elseif statements {{{2
+ elseif cs =~ '\<\(else\(if\)\=\|fi\)\>'
+ call MetaSearchNoncomment('\<if\>.\+:\s*\($\|%\)',"bW")
+ let ind = col(".") - 1
+ " }}}
+ " if this is :endgroup statement {{{2
+ elseif cs =~ '^\s*endgroup\>'
+ let ind = ind - &sw
+ endif
+ " }}}
+ " }}}
+
+ return ind
+endfunction
+"
+
+" vim:sw=2:fdm=marker
diff --git a/runtime/indent/objc.vim b/runtime/indent/objc.vim
new file mode 100644
index 000000000..beadca9fa
--- /dev/null
+++ b/runtime/indent/objc.vim
@@ -0,0 +1,79 @@
+" Vim indent file
+" Language: Objective-C
+" Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
+" Last Change: 2004 May 16
+"
+
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+setlocal cindent
+
+" Set the function to do the work.
+setlocal indentexpr=GetObjCIndent()
+
+" To make a colon (:) suggest an indentation other than a goto/swich label,
+setlocal indentkeys-=:
+setlocal indentkeys+=<:>
+
+" Only define the function once.
+if exists("*GetObjCIndent")
+ finish
+endif
+
+function s:GetWidth(line, regexp)
+ let end = matchend(a:line, a:regexp)
+ let width = 0
+ let i = 0
+ while i < end
+ if a:line[i] != "\t"
+ let width = width + 1
+ else
+ let width = width + &ts - (width % &ts)
+ endif
+ let i = i + 1
+ endwhile
+ return width
+endfunction
+
+function s:LeadingWhiteSpace(line)
+ let end = strlen(a:line)
+ let width = 0
+ let i = 0
+ while i < end
+ let char = a:line[i]
+ if char != " " && char != "\t"
+ break
+ endif
+ if char != "\t"
+ let width = width + 1
+ else
+ let width = width + &ts - (width % &ts)
+ endif
+ let i = i + 1
+ endwhile
+ return width
+endfunction
+
+
+function GetObjCIndent()
+ let theIndent = cindent(v:lnum)
+
+ let prev_line = getline(v:lnum - 1)
+ let cur_line = getline(v:lnum)
+
+ if prev_line !~# ":" || cur_line !~# ":"
+ return theIndent
+ endif
+
+ if prev_line !~# ";"
+ let prev_colon_pos = s:GetWidth(prev_line, ":")
+ let delta = s:GetWidth(cur_line, ":") - s:LeadingWhiteSpace(cur_line)
+ let theIndent = prev_colon_pos - delta
+ endif
+
+ return theIndent
+endfunction
diff --git a/runtime/indent/ocaml.vim b/runtime/indent/ocaml.vim
new file mode 100644
index 000000000..a26b4bc22
--- /dev/null
+++ b/runtime/indent/ocaml.vim
@@ -0,0 +1,311 @@
+" Vim indent file
+" Language: OCaml
+" Maintainers: Jean-Francois Yuen <jfyuen@ifrance.com>
+" Mike Leary <leary@nwlink.com>
+" Markus Mottl <markus@oefai.at>
+" URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim
+" Last Change: 2003 Apr 14
+" 2003 Mar 05 - Added '{<' and some fixes (JY)
+" 2002 Nov 06 - Some fixes (JY)
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal expandtab
+setlocal indentexpr=GetOCamlIndent()
+setlocal indentkeys+=0=and,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\],0)
+setlocal nolisp
+setlocal nosmartindent
+setlocal textwidth=80
+
+" Comment formatting
+if (has("comments"))
+ setlocal comments=sr:(*,mb:*,ex:*)
+ setlocal fo=cqort
+endif
+
+" Only define the function once.
+if exists("*GetOCamlIndent")
+ finish
+endif
+
+" Define some patterns:
+let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\|(\)\s*$'
+let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
+let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
+let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
+let s:module = '\<\%(begin\|sig\|struct\|object\)\>'
+let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
+let s:type = '^\s*\%(let\|type\)\>.*='
+let s:val = '^\s*\(val\|external\)\>.*:'
+
+" Skipping pattern, for comments
+function s:SkipPattern(lnum, pat)
+ let def = prevnonblank(a:lnum - 1)
+ while def > 0 && getline(def) =~ a:pat
+ let def = prevnonblank(def - 1)
+ endwhile
+ return def
+endfunction
+
+" Indent for ';;' to match multiple 'let'
+function s:GetInd(lnum, pat, lim)
+ let llet = search(a:pat, 'bW')
+ let old = indent(a:lnum)
+ while llet > 0
+ let old = indent(llet)
+ let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')
+ if getline(nb) =~ a:lim
+ return old
+ endif
+ let llet = search(a:pat, 'bW')
+ endwhile
+ return old
+endfunction
+
+" Indent pairs
+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)
+ 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*let\\>.*=\\s*$\\|" . s:beflet'))
+endfunction
+
+function GetOCamlIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+ let lline = getline(lnum)
+
+ " Return double 'shiftwidth' after lines matching:
+ if lline =~ '^\s*|.*->\s*$'
+ return ind + &sw + &sw
+ endif
+
+ let line = getline(v:lnum)
+
+ " Indent if current line begins with 'end'
+ " for 'sig', 'struct', 'object' and 'begin':
+ if line =~ '^\s*end\>'
+ return s:FindPair(s:module, '','\<end\>')
+
+ " Indent if current line begins with 'done' for 'do':
+ elseif line =~ '^\s*done\>'
+ return s:FindPair('\<do\>', '','\<done\>')
+
+ " Indent if current line begins with '}' or '>}':
+ elseif line =~ '^\s*\(\|>\)}'
+ return s:FindPair('{', '','}')
+
+ " Indent if current line begins with ']', '|]' or '>]':
+ elseif line =~ '^\s*\(\||\|>\)\]'
+ return s:FindPair('\[', '','\]')
+
+ " Indent if current line begins with ')':
+ elseif line =~ '^\s*)'
+ return s:FindPair('(', '',')')
+
+ " Indent if current line begins with 'let'
+ " and last line does not begin with 'let' or end with 'in' or ';;':
+ elseif line =~ '^\s*let\>'
+ if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
+ return s:FindLet(s:type, '','\<let\s*$')
+ else return ind
+ endif
+
+ " Indent if current line begins with 'type'
+ " and last line does not end with 'and' or ';;':
+ elseif line =~ '^\s*type\>'
+ if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim
+ return s:FindLet(s:type, '','\<type\s*$')
+ else return ind
+ endif
+
+ " Indent for pattern matching:
+ elseif line =~ '^\s*|'
+ if lline !~ '^\s*\(|\|\(match\|with\|type\)\>\)\|\<\(function\|parser\|with\)\s*$'
+ call search('|', 'bW')
+ return indent(searchpair('^\s*\(type\|match\)\>\|\<\(with\|function\|parser\)\s*$', '', '|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "\\[|\\||\\]" && getline(".") !~ "^\\s*|.*->"'))
+ else return ind
+ endif
+
+ " Indent if current line begins with ';;':
+ elseif line =~ '^\s*;;'
+ if lline !~ ';;\s*$'
+ return s:GetInd(v:lnum, s:letpat, s:letlim)
+ else return ind
+ endif
+
+ " Indent if current line begins with 'in' and previous
+ " line does not start with 'let' or 'and':
+ elseif line =~ '^\s*in\>'
+ if lline !~ '^\s*\(let\|and\)\>'
+ return s:FindPair('\<let\>', '', '\<in\>')
+ else return ind
+ endif
+
+ " Indent if current line begins with 'else'
+ " and previous line does not start with 'if', 'then' or 'else':
+ elseif line =~ '^\s*else\>'
+ if lline !~ '^\s*\(if\|else\|then\)\>'
+ return s:FindPair('\<if\>', '', '\<else\>')
+ else return ind
+ endif
+
+ " Indent if current line begins with 'then'
+ " and previous line does not start with 'if', 'then' or 'else':
+ elseif line =~ '^\s*then\>'
+ if lline !~ '^\s*\(if\|else\|then\)\>'
+ return s:FindPair('\<if\>', '', '\<then\>')
+ else return ind
+ endif
+
+ " Subtract a 'shiftwidth' if current line begins with 'and' and previous
+ " line does not start with 'let', 'and' or 'type' or end with 'end'
+ " (for classes):
+ elseif line =~ '^\s*and\>'
+ if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$'
+ return ind - &sw
+ else return ind
+ endif
+
+ " Indent if current line begins with 'with'
+ " and previous line does not start with 'match' or 'try':
+ elseif line =~ '^\s*with\>'
+ if lline !~ '^\s*\(match\|try\)\>'
+ return s:FindPair('\<\%(match\|try\)\>', '','\<with\>')
+ else return ind
+ endif
+
+ " Indent if current line begins with 'exception':
+ elseif line =~ '^\s*exception\>'
+ if lline !~ s:lim . '\|' . s:letlim
+ return indent(search(s:val . '\|^\s*\(external\|include\|open\|type\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'external':
+ elseif line =~ '^\s*external\>'
+ if lline !~ s:lim . '\|' . s:letlim
+ return indent(search(s:val . '\|^\s*\(exception\|include\|open\|type\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'include':
+ elseif line =~ '^\s*include\>'
+ if lline !~ s:lim . '\|' . s:letlim
+ return indent(search(s:val . '\|^\s*\(exception\|external\|open\|type\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'open':
+ elseif line =~ '^\s*open\>'
+ if lline !~ s:lim . '\|' . s:letlim
+ return indent(search(s:val . '\|^\s*\(exception\|external\|include\|type\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'val':
+ elseif line =~ '^\s*val\>'
+ if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
+ return indent(search(s:val . '\|^\s*\(exception\|include\|initializer\|method\|open\|type\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'constraint':
+ elseif line =~ '^\s*constraint\>'
+ if lline !~ s:obj
+ return indent(search('^\s*\(inherit\|initializer\|method\|val\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'inherit':
+ elseif line =~ '^\s*inherit\>'
+ if lline !~ s:obj
+ return indent(search('^\s*\(constraint\|initializer\|method\|val\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'inherit':
+ elseif line =~ '^\s*initializer\>'
+ if lline !~ s:obj
+ return indent(search('^\s*\(constraint\|inherit\|method\|val\)\>', 'bW'))
+ else return ind
+ endif
+
+ " Indent if current line begins with 'method':
+ elseif line =~ '^\s*method\>'
+ if lline !~ s:obj
+ return indent(search('^\s*\(\(constraint\|inherit\|initializer\|val\)\>\|method\>.*\(:\|=\)\)', 'bW'))
+ else return ind
+ endif
+
+ " Indent back to normal after comments:
+ elseif line =~ '^\s*\*)'
+ call search('\*)', 'bW')
+ return indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
+
+ endif
+
+ " Add a 'shiftwidth' after lines ending with:
+ if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|struct\|sig\|functor\|initializer\|object\|try\|do\|if\|then\|else\|fun\|function\|parser\)\|\<object\s*(.*)\)\s*$'
+ let ind = ind + &sw
+
+ " Back to normal indent after lines ending with ';;':
+ elseif lline =~ ';;\s*$' && lline !~ '^\s*;;'
+ let ind = s:GetInd(v:lnum, s:letpat, s:letlim)
+
+ " Back to normal indent after lines ending with 'end':
+ elseif lline =~ '\<end\s*$'
+ let ind = s:FindPair(s:module, '','\<end\>')
+
+ " Back to normal indent after lines ending with 'in':
+ elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>'
+ let ind = s:FindPair('\<let\>', '', '\<in\>')
+
+ " Back to normal indent after lines ending with 'done':
+ elseif lline =~ '\<done\s*$'
+ let ind = s:FindPair('\<do\>', '','\<done\>')
+
+ " Back to normal indent after lines ending with '}' or '>}':
+ elseif lline =~ '\(\|>\)}\s*$'
+ let ind = s:FindPair('{', '','}')
+
+ " Back to normal indent after lines ending with ']', '|]' or '>]':
+ elseif lline =~ '\(\||\|>\)\]\s*$'
+ let ind = s:FindPair('\[', '','\]')
+
+ " Back to normal indent after comments:
+ elseif lline =~ '\*)\s*$'
+ call search('\*)', 'bW')
+ let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
+
+ " Back to normal indent after lines ending with ')':
+ elseif lline =~ ')\s*$'
+ let ind = s:FindPair('(', '',')')
+
+ endif
+
+ " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
+ if lline =~ '^\s*match\>.*\<with\>\s*\<parser\s*$'
+ let ind = ind - &sw
+ endif
+
+ return ind
+
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/occam.vim b/runtime/indent/occam.vim
new file mode 100644
index 000000000..ba978e006
--- /dev/null
+++ b/runtime/indent/occam.vim
@@ -0,0 +1,182 @@
+" Vim indent file
+" Language: occam
+" Maintainer: Mario Schweigler <ms44@kent.ac.uk>
+" Last Change: 23 April 2003
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+"{{{ Settings
+" Set the occam indent function
+setlocal indentexpr=GetOccamIndent()
+" Indent after new line and after initial colon
+setlocal indentkeys=o,O,0=:
+"}}}
+
+" Only define the function once
+if exists("*GetOccamIndent")
+ finish
+endif
+
+"{{{ Indent definitions
+" Define carriage return indent
+let s:FirstLevelIndent = '^\C\s*\(IF\|ALT\|PRI\s\+ALT\|PAR\|SEQ\|PRI\s\+PAR\|WHILE\|VALOF\|CLAIM\|FORKING\)\>\|\(--.*\)\@<!\(\<PROC\>\|??\|\<CASE\>\s*\(--.*\)\=\_$\)'
+let s:FirstLevelNonColonEndIndent = '^\C\s*PROTOCOL\>\|\(--.*\)\@<!\<\(\(CHAN\|DATA\)\s\+TYPE\|FUNCTION\)\>'
+let s:SecondLevelIndent = '^\C\s*\(IF\|ALT\|PRI\s\+ALT\)\>\|\(--.*\)\@<!?\s*\<CASE\>\s*\(--.*\)\=\_$'
+let s:SecondLevelNonColonEndIndent = '\(--.*\)\@<!\<\(CHAN\|DATA\)\s\+TYPE\>'
+
+" Define colon indent
+let s:ColonIndent = '\(--.*\)\@<!\<PROC\>'
+let s:ColonNonColonEndIndent = '^\C\s*PROTOCOL\>\|\(--.*\)\@<!\<\(\(CHAN\|DATA\)\s\+TYPE\|FUNCTION\)\>'
+
+let s:ColonEnd = '\(--.*\)\@<!:\s*\(--.*\)\=$'
+let s:ColonStart = '^\s*:\s*\(--.*\)\=$'
+
+" Define comment
+let s:CommentLine = '^\s*--'
+"}}}
+
+"{{{ function GetOccamIndent()
+" Auxiliary function to get the correct indent for a line of occam code
+function GetOccamIndent()
+
+ " Ensure magic is on
+ let save_magic = &magic
+ setlocal magic
+
+ " Get reference line number
+ let linenum = prevnonblank(v:lnum - 1)
+ while linenum > 0 && getline(linenum) =~ s:CommentLine
+ let linenum = prevnonblank(linenum - 1)
+ endwhile
+
+ " Get current indent
+ let curindent = indent(linenum)
+
+ " Get current line
+ let line = getline(linenum)
+
+ " Get previous line number
+ let prevlinenum = prevnonblank(linenum - 1)
+ while prevlinenum > 0 && getline(prevlinenum) =~ s:CommentLine
+ let prevlinenum = prevnonblank(prevlinenum - 1)
+ endwhile
+
+ " Get previous line
+ let prevline = getline(prevlinenum)
+
+ " Colon indent
+ if getline(v:lnum) =~ s:ColonStart
+
+ let found = 0
+
+ while found < 1
+
+ if line =~ s:ColonStart
+ let found = found - 1
+ elseif line =~ s:ColonIndent || (line =~ s:ColonNonColonEndIndent && line !~ s:ColonEnd)
+ let found = found + 1
+ endif
+
+ if found < 1
+ let linenum = prevnonblank(linenum - 1)
+ if linenum > 0
+ let line = getline(linenum)
+ else
+ let found = 1
+ endif
+ endif
+
+ endwhile
+
+ if linenum > 0
+ let curindent = indent(linenum)
+ else
+ let colonline = getline(v:lnum)
+ let tabstr = ''
+ while strlen(tabstr) < &tabstop
+ let tabstr = ' ' . tabstr
+ endwhile
+ let colonline = substitute(colonline, '\t', tabstr, 'g')
+ let curindent = match(colonline, ':')
+ endif
+
+ " Restore magic
+ if !save_magic|setlocal nomagic|endif
+
+ return curindent
+ endif
+
+ if getline(v:lnum) =~ '^\s*:'
+ let colonline = getline(v:lnum)
+ let tabstr = ''
+ while strlen(tabstr) < &tabstop
+ let tabstr = ' ' . tabstr
+ endwhile
+ let colonline = substitute(colonline, '\t', tabstr, 'g')
+ let curindent = match(colonline, ':')
+
+ " Restore magic
+ if !save_magic|setlocal nomagic|endif
+
+ return curindent
+ endif
+
+ " Carriage return indenat
+ if line =~ s:FirstLevelIndent || (line =~ s:FirstLevelNonColonEndIndent && line !~ s:ColonEnd)
+ \ || (line !~ s:ColonStart && (prevline =~ s:SecondLevelIndent
+ \ || (prevline =~ s:SecondLevelNonColonEndIndent && prevline !~ s:ColonEnd)))
+ let curindent = curindent + &shiftwidth
+
+ " Restore magic
+ if !save_magic|setlocal nomagic|endif
+
+ return curindent
+ endif
+
+ " Commented line
+ if getline(prevnonblank(v:lnum - 1)) =~ s:CommentLine
+
+ " Restore magic
+ if !save_magic|setlocal nomagic|endif
+
+ return indent(prevnonblank(v:lnum - 1))
+ endif
+
+ " Look for previous second level IF / ALT / PRI ALT
+ let found = 0
+
+ while !found
+
+ if indent(prevlinenum) == curindent - &shiftwidth
+ let found = 1
+ endif
+
+ if !found
+ let prevlinenum = prevnonblank(prevlinenum - 1)
+ while prevlinenum > 0 && getline(prevlinenum) =~ s:CommentLine
+ let prevlinenum = prevnonblank(prevlinenum - 1)
+ endwhile
+ if prevlinenum == 0
+ let found = 1
+ endif
+ endif
+
+ endwhile
+
+ if prevlinenum > 0
+ if getline(prevlinenum) =~ s:SecondLevelIndent
+ let curindent = curindent + &shiftwidth
+ endif
+ endif
+
+ " Restore magic
+ if !save_magic|setlocal nomagic|endif
+
+ return curindent
+
+endfunction
+"}}}
diff --git a/runtime/indent/perl.vim b/runtime/indent/perl.vim
new file mode 100644
index 000000000..1af058043
--- /dev/null
+++ b/runtime/indent/perl.vim
@@ -0,0 +1,180 @@
+" Vim indent file
+" Language: Perl
+" Author: Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+" URL: http://rgarciasuarez.free.fr/vim/indent/perl.vim
+" Last Change: 2003 Apr 25
+
+" Suggestions and improvements by :
+" Aaron J. Sherman (use syntax for hints)
+" Artem Chuprina (play nice with folding)
+
+" TODO things that are not or not properly indented (yet) :
+" - Continued statements
+" print "foo",
+" "bar";
+" print "foo"
+" if bar();
+" - Multiline regular expressions (m//x)
+" (The following probably needs modifying the perl syntax file)
+" - qw() lists
+" - Heredocs with terminators that don't match \I\i*
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Is syntax highlighting active ?
+let b:indent_use_syntax = has("syntax") && &syntax == "perl"
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+setlocal indentexpr=GetPerlIndent()
+setlocal indentkeys+=0=,0),0=or,0=and
+if !b:indent_use_syntax
+ setlocal indentkeys+=0=EO
+endif
+
+" Only define the function once.
+if exists("*GetPerlIndent")
+ finish
+endif
+
+function GetPerlIndent()
+
+ " Get the line to be indented
+ let cline = getline(v:lnum)
+
+ " Indent POD markers to column 0
+ if cline =~ '^\s*=\L\@!'
+ return 0
+ endif
+
+ " Don't reindent coments on first column
+ if cline =~ '^#.'
+ return 0
+ endif
+
+ " Get current syntax item at the line's first char
+ let csynid = ''
+ if b:indent_use_syntax
+ let csynid = synIDattr(synID(v:lnum,1,0),"name")
+ endif
+
+ " Don't reindent POD and heredocs
+ if csynid == "perlPOD" || csynid == "perlHereDoc" || csynid =~ "^pod"
+ return indent(v:lnum)
+ endif
+
+ " Indent end-of-heredocs markers to column 0
+ if b:indent_use_syntax
+ " Assumes that an end-of-heredoc marker matches \I\i* to avoid
+ " confusion with other types of strings
+ if csynid == "perlStringStartEnd" && cline =~ '^\I\i*$'
+ return 0
+ endif
+ else
+ " Without syntax hints, assume that end-of-heredocs markers begin with EO
+ if cline =~ '^\s*EO'
+ return 0
+ endif
+ endif
+
+ " Now get the indent of the previous perl line.
+
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+ let line = getline(lnum)
+ let ind = indent(lnum)
+ " Skip heredocs, POD, and comments on 1st column
+ if b:indent_use_syntax
+ let skippin = 2
+ while skippin
+ let synid = synIDattr(synID(lnum,1,0),"name")
+ if (synid == "perlStringStartEnd" && line =~ '^\I\i*$')
+ \ || (skippin != 2 && synid == "perlPOD")
+ \ || (skippin != 2 && synid == "perlHereDoc")
+ \ || synid == "perlComment"
+ \ || synid =~ "^pod"
+ let lnum = prevnonblank(lnum - 1)
+ if lnum == 0
+ return 0
+ endif
+ let line = getline(lnum)
+ let ind = indent(lnum)
+ let skippin = 1
+ else
+ let skippin = 0
+ endif
+ endwhile
+ else
+ if line =~ "^EO"
+ let lnum = search("<<[\"']\\=EO", "bW")
+ let line = getline(lnum)
+ let ind = indent(lnum)
+ endif
+ endif
+
+ " Indent blocks enclosed by {} or ()
+ if b:indent_use_syntax
+ " Find a real opening brace
+ let bracepos = match(line, '[(){}]', 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.
+ " 'perlHereDoc' is here only to handle the case '&foo(<<EOF)'.
+ if synid == ""
+ \ || synid == "perlMatchStartEnd"
+ \ || synid == "perlHereDoc"
+ \ || synid =~ "^perlFiledescStatement"
+ \ || synid =~ '^perl\(Sub\|BEGINEND\|If\)Fold'
+ let brace = strpart(line, bracepos, 1)
+ if brace == '(' || brace == '{'
+ let ind = ind + &sw
+ else
+ let ind = ind - &sw
+ endif
+ endif
+ let bracepos = match(line, '[(){}]', bracepos + 1)
+ endwhile
+ let bracepos = matchend(cline, '^\s*[)}]')
+ if bracepos != -1
+ let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
+ if synid == ""
+ \ || synid == "perlMatchStartEnd"
+ \ || synid =~ '^perl\(Sub\|BEGINEND\|If\)Fold'
+ let ind = ind - &sw
+ endif
+ endif
+ else
+ if line =~ '[{(]\s*\(#[^)}]*\)\=$'
+ let ind = ind + &sw
+ endif
+ if cline =~ '^\s*[)}]'
+ let ind = ind - &sw
+ endif
+ endif
+
+ " Indent lines that begin with 'or' or 'and'
+ if cline =~ '^\s*\(or\|and\)\>'
+ if line !~ '^\s*\(or\|and\)\>'
+ let ind = ind + &sw
+ endif
+ elseif line =~ '^\s*\(or\|and\)\>'
+ let ind = ind - &sw
+ endif
+
+ return ind
+
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:ts=8:sts=2:sw=2
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
new file mode 100644
index 000000000..208df3ab0
--- /dev/null
+++ b/runtime/indent/php.vim
@@ -0,0 +1,118 @@
+" Vim indent file
+" Language: PHP
+" Author: Miles Lott <milos@groupwhere.org>
+" URL: http://milosch.dyndns.org/php.vim
+" Last Change: 2004 May 18
+" Version: 0.5
+" Notes: Close all switches with default:\nbreak; and it will look better.
+" Also, open and close brackets should be alone on a line.
+" This is my preference, and the only way this will look nice.
+" Try an older version if you care less about the formatting of
+" switch/case. It is nearly perfect for anyone regardless of your
+" stance on brackets.
+"
+" Changes: 0.5 - fix duplicate indent on open tag, and empty bracketed
+" statements.
+" 0.4 - Fixes for closing php tag, switch statement closure, and php_indent_shortopentags
+" option from Steffen Bruentjen <vim@kontraphon.de>
+"
+" Options: php_noindent_switch=1 -- do not try to indent switch/case statements (version 0.1 behavior)
+" php_indent_shortopentags=1 -- indent after short php open tags, too
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetPhpIndent()
+"setlocal indentkeys+=0=,0),=EO
+setlocal indentkeys+=0=,0),=EO,=>
+
+" Only define the function once.
+if exists("*GetPhpIndent")
+ finish
+endif
+
+" Handle option(s)
+if exists("php_noindent_switch")
+ let b:php_noindent_switch=1
+endif
+
+function GetPhpIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+ let line = getline(lnum) " last line
+ let cline = getline(v:lnum) " current line
+ let pline = getline(lnum - 1) " previous to last line
+ let ind = indent(lnum)
+
+ " Indent after php open tag
+ if line =~ '<?php'
+ let ind = ind + &sw
+ elseif exists('g:php_indent_shortopentags')
+ " indent after short open tag
+ if line =~ '<?'
+ let ind = ind + &sw
+ endif
+ endif
+ " indent after php closing tag
+ if cline =~ '\M?>'
+ let ind = ind - &sw
+ endif
+
+ if exists("b:php_noindent_switch") " version 1 behavior, diy switch/case,etc
+ " Indent blocks enclosed by {} or ()
+ if line =~ '[{(]\s*\(#[^)}]*\)\=$'
+ let ind = ind + &sw
+ endif
+ if cline =~ '^\s*[)}]'
+ let ind = ind - &sw
+ endif
+ return ind
+ else
+ " Search the matching bracket (with searchpair()) and set the indent of
+ " to the indent of the matching line.
+ if cline =~ '^\s*}'
+ call cursor(line('.'), 1)
+ let ind = indent(searchpair('{', '', '}',
+ 'bW', 'synIDattr(synID(line("."), col("."),
+ 0), "name") =~? "string"'))
+ return ind
+ endif
+ " Try to indent switch/case statements as well
+ " Indent blocks enclosed by {} or () or case statements, with some anal requirements
+ if line =~ 'case.*:\|[{(]\s*\(#[^)}]*\)\=$'
+ let ind = ind + &sw
+ " return if the current line is not another case statement of the previous line is a bracket open
+ if cline !~ '.*case.*:\|default:' || line =~ '[{(]\s*\(#[^)}]*\)\=$'
+ return ind
+ endif
+ endif
+ if cline =~ '^\s*case.*:\|^\s*default:\|^\s*[)}]'
+ let ind = ind - &sw
+ " if the last line is a break or return, or the current line is a close bracket,
+ " or if the previous line is a default statement, subtract another
+ if line =~ '^\s*break;\|^\s*return\|' && cline =~ '^\s*[)}]' && pline =~ 'default:'
+ let ind = ind - &sw
+ endif
+ endif
+ " Search the matching bracket (with searchpair()) and set the indent of cline
+ " to the indent of the matching line.
+ if cline =~ '^\s*}'
+ call cursor(line('. '), 1)
+ let ind = indent(searchpair('{', '', '}', 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
+ return ind
+ endif
+
+ if line =~ 'default:'
+ let ind = ind + &sw
+ endif
+ return ind
+ endif
+endfunction
+" vim: set ts=4 sw=4:
diff --git a/runtime/indent/postscr.vim b/runtime/indent/postscr.vim
new file mode 100644
index 000000000..b0ff48e68
--- /dev/null
+++ b/runtime/indent/postscr.vim
@@ -0,0 +1,68 @@
+" PostScript indent file
+" Language: PostScript
+" Maintainer: Mike Williams <mrw@netcomuk.co.uk>
+" Last Change: 2nd July 2001
+"
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=PostscrIndentGet(v:lnum)
+setlocal indentkeys+=0],0=>>,0=%%,0=end,0=restore,0=grestore indentkeys-=:,0#,e
+
+" Catch multiple instantiations
+if exists("*PostscrIndentGet")
+ finish
+endif
+
+function! PostscrIndentGet(lnum)
+ " Find a non-empty non-comment line above the current line.
+ " Note: ignores DSC comments as well!
+ let lnum = a:lnum - 1
+ while lnum != 0
+ let lnum = prevnonblank(lnum)
+ if getline(lnum) !~ '^\s*%.*$'
+ break
+ endif
+ let lnum = lnum - 1
+ endwhile
+
+ " Hit the start of the file, use user indent.
+ if lnum == 0
+ return -1
+ endif
+
+ " Start with the indent of the previous line
+ let ind = indent(lnum)
+ let pline = getline(lnum)
+
+ " Indent for dicts, arrays, and saves with possible trailing comment
+ if pline =~ '\(begin\|<<\|g\=save\|{\|[\)\s*\(%.*\)\=$'
+ let ind = ind + &sw
+ endif
+
+ " Remove indent for popped dicts, and restores.
+ if pline =~ '\(end\|g\=restore\)\s*$'
+ let ind = ind - &sw
+
+ " Else handle immediate dedents of dicts, restores, and arrays.
+ elseif getline(a:lnum) =~ '\(end\|>>\|g\=restore\|}\|]\)'
+ let ind = ind - &sw
+
+ " Else handle DSC comments - always start of line.
+ elseif getline(a:lnum) =~ '^\s*%%'
+ let ind = 0
+ endif
+
+ " For now catch excessive left indents if they occur.
+ if ind < 0
+ let ind = -1
+ endif
+
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/pov.vim b/runtime/indent/pov.vim
new file mode 100644
index 000000000..2b197635a
--- /dev/null
+++ b/runtime/indent/pov.vim
@@ -0,0 +1,84 @@
+" Vim indent file
+" Language: PoV-Ray Scene Description Language
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-10-20
+" URI: http://trific.ath.cx/Ftp/vim/indent/pov.vim
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Some preliminary settings.
+setlocal nolisp " Make sure lisp indenting doesn't supersede us.
+
+setlocal indentexpr=GetPoVRayIndent()
+setlocal indentkeys+==else,=end,0]
+
+" Only define the function once.
+if exists("*GetPoVRayIndent")
+ finish
+endif
+
+" Counts matches of a regexp <rexp> in line number <line>.
+" Doesn't count matches inside strings and comments (as defined by current
+" syntax).
+function! s:MatchCount(line, rexp)
+ let str = getline(a:line)
+ let i = 0
+ let n = 0
+ while i >= 0
+ let i = matchend(str, a:rexp, i)
+ if i >= 0 && synIDattr(synID(a:line, i, 0), "name") !~? "string\|comment"
+ let n = n + 1
+ endif
+ endwhile
+ return n
+endfunction
+
+" The main function. Returns indent amount.
+function GetPoVRayIndent()
+ " If we are inside a comment (may be nested in obscure ways), give up
+ if synIDattr(synID(v:lnum, indent(v:lnum)+1, 0), "name") =~? "string\|comment"
+ return -1
+ endif
+
+ " Search backwards for the frist non-empty, non-comment line.
+ let plnum = prevnonblank(v:lnum - 1)
+ let plind = indent(plnum)
+ while plnum > 0 && synIDattr(synID(plnum, plind+1, 0), "name") =~? "comment"
+ let plnum = prevnonblank(plnum - 1)
+ let plind = indent(plnum)
+ endwhile
+
+ " Start indenting from zero
+ if plnum == 0
+ return 0
+ endif
+
+ " Analyse previous nonempty line.
+ let chg = 0
+ let chg = chg + s:MatchCount(plnum, '[[{(]')
+ let chg = chg + s:MatchCount(plnum, '#\s*\%(if\|ifdef\|ifndef\|switch\|while\|macro\|else\)\>')
+ let chg = chg - s:MatchCount(plnum, '#\s*end\>')
+ let chg = chg - s:MatchCount(plnum, '[]})]')
+ " Dirty hack for people writing #if and #else on the same line.
+ let chg = chg - s:MatchCount(plnum, '#\s*\%(if\|ifdef\|ifndef\|switch\)\>.*#\s*else\>')
+ " When chg > 0, then we opened groups and we should indent more, but when
+ " chg < 0, we closed groups and this already affected the previous line,
+ " so we should not dedent. And when everything else fails, scream.
+ let chg = chg > 0 ? chg : 0
+
+ " Analyse current line
+ " FIXME: If we have to dedent, we should try to find the indentation of the
+ " opening line.
+ let cur = s:MatchCount(v:lnum, '^\s*\%(#\s*\%(end\|else\)\>\|[]})]\)')
+ if cur > 0
+ let final = plind + (chg - cur) * &sw
+ else
+ let final = plind + chg * &sw
+ endif
+
+ return final < 0 ? 0 : final
+endfunction
diff --git a/runtime/indent/prolog.vim b/runtime/indent/prolog.vim
new file mode 100644
index 000000000..afe448e8f
--- /dev/null
+++ b/runtime/indent/prolog.vim
@@ -0,0 +1,58 @@
+" vim: set sw=4 sts=4:
+" Maintainer : Gergely Kontra <kgergely@mcl.hu>
+" Revised on : 2002.02.18. 23:34:05
+" Language : Prolog
+
+" TODO:
+" checking with respect to syntax highlighting
+" ignoring multiline comments
+" detecting multiline strings
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetPrologIndent()
+setlocal indentkeys-=:,0#
+setlocal indentkeys+=0%,-,0;,>,0)
+
+" Only define the function once.
+"if exists("*GetPrologIndent")
+" finish
+"endif
+
+function! GetPrologIndent()
+ " Find a non-blank line above the current line.
+ let pnum = prevnonblank(v:lnum - 1)
+ " Hit the start of the file, use zero indent.
+ if pnum == 0
+ return 0
+ endif
+ let line = getline(v:lnum)
+ let pline = getline(pnum)
+
+ let ind = indent(pnum)
+ " Previous line was comment -> use previous line's indent
+ if pline =~ '^\s*%'
+ retu ind
+ endif
+ " Check for clause head on previous line
+ if pline =~ ':-\s*\(%.*\)\?$'
+ let ind = ind + &sw
+ " Check for end of clause on previous line
+ elseif pline =~ '\.\s*\(%.*\)\?$'
+ let ind = ind - &sw
+ endif
+ " Check for opening conditional on previous line
+ if pline =~ '^\s*\([(;]\|->\)'
+ let ind = ind + &sw
+ endif
+ " Check for closing an unclosed paren, or middle ; or ->
+ if line =~ '^\s*\([);]\|->\)'
+ let ind = ind - &sw
+ endif
+ return ind
+endfunction
diff --git a/runtime/indent/pyrex.vim b/runtime/indent/pyrex.vim
new file mode 100644
index 000000000..e7771264e
--- /dev/null
+++ b/runtime/indent/pyrex.vim
@@ -0,0 +1,8 @@
+" Vim indent file
+" Language: Pyrex
+" Maintainer: Marco Barisione <marco.bari@people.it>
+" URL: http://marcobari.altervista.org/pyrex_vim.html
+" Last Change: 2004 May 16
+
+" Use Python formatting rules
+runtime! indent/python.vim
diff --git a/runtime/indent/python.vim b/runtime/indent/python.vim
new file mode 100644
index 000000000..3dbbe10a6
--- /dev/null
+++ b/runtime/indent/python.vim
@@ -0,0 +1,175 @@
+" Vim indent file
+" Language: Python
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Original Author: David Bustos <bustos@caltech.edu>
+" Last Change: 2003 Sep 08
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Some preliminary settings
+setlocal nolisp " Make sure lisp indenting doesn't supersede us
+setlocal autoindent " indentexpr isn't much help otherwise
+
+setlocal indentexpr=GetPythonIndent(v:lnum)
+setlocal indentkeys+=<:>,=elif,=except
+
+" Only define the function once.
+if exists("*GetPythonIndent")
+ finish
+endif
+
+let s:maxoff = 50 " maximum number of lines to look backwards for ()
+
+function GetPythonIndent(lnum)
+ " If this line is explicitly joined: If the previous line was also joined,
+ " line it up with that one, otherwise add two 'shiftwidth'
+ if getline(a:lnum - 1) =~ '\\$'
+ if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$'
+ return indent(a:lnum - 1)
+ endif
+ return indent(a:lnum - 1) + (&sw * 2)
+ endif
+
+ " If the start of the line is in a string don't change the indent.
+ if has('syntax_items')
+ \ && synIDattr(synID(a:lnum, 1, 1), "name") == "pythonString"
+ return -1
+ endif
+
+ " Search backwards for the previous non-empty line.
+ let plnum = prevnonblank(v:lnum - 1)
+
+ if plnum == 0
+ " This is the first non-empty line, use zero indent.
+ return 0
+ endif
+
+ " 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(plnum, 1)
+ let parlnum = searchpair('(', '', ')', 'nbW',
+ \ "line('.') < " . (plnum - s:maxoff) . " ? dummy :"
+ \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+ \ . " =~ 'python\\(Comment\\|String\\)'")
+ if parlnum > 0
+ let plindent = indent(parlnum)
+ let plnumstart = parlnum
+ else
+ let plindent = indent(plnum)
+ let plnumstart = plnum
+ 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')"
+ \ . " =~ 'python\\(Comment\\|String\\)'")
+ if p > 0
+ if p == plnum
+ " 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')"
+ \ . " =~ 'python\\(Comment\\|String\\)'")
+ if pp > 0
+ return indent(plnum) + &sw
+ endif
+ return indent(plnum) + (&sw * 2)
+ endif
+ if plnumstart == p
+ return indent(plnum)
+ endif
+ return plindent
+ endif
+
+
+ " Get the line and remove a trailing comment.
+ " Use syntax highlighting attributes when possible.
+ let pline = getline(plnum)
+ let pline_len = strlen(pline)
+ let col = 0
+ while col < pline_len
+ if pline[col] == '#' && (!has('syntax_items')
+ \ || synIDattr(synID(plnum, col + 1, 1), "name") == "pythonComment")
+ let pline = strpart(pline, 0, col)
+ break
+ endif
+ let col = col + 1
+ endwhile
+
+ " If the previous line ended with a colon, indent this line
+ if pline =~ ':\s*$'
+ return plindent + &sw
+ endif
+
+ " If the previous line was a stop-execution statement...
+ if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\)\>'
+ " See if the user has already dedented
+ if indent(a:lnum) > indent(plnum) - &sw
+ " If not, recommend one dedent
+ return indent(plnum) - &sw
+ endif
+ " Otherwise, trust the user
+ return -1
+ endif
+
+ " If the current line begins with a keyword that lines up with "try"
+ if getline(a:lnum) =~ '^\s*\(except\|finally\)\>'
+ let lnum = a:lnum - 1
+ while lnum >= 1
+ echomsg 'got here'
+ if getline(lnum) =~ '^\s*\(try\|except\)\>'
+ let ind = indent(lnum)
+ echomsg 'got here, indent is ' . ind
+ if ind >= indent(a:lnum)
+ return -1 " indent is already less than this
+ endif
+ return ind " line up with previous try or except
+ endif
+ let lnum = lnum - 1
+ endwhile
+ echomsg 'got to the end'
+ return -1 " no matching "try"!
+ endif
+
+ " If the current line begins with a header keyword, dedent
+ if getline(a:lnum) =~ '^\s*\(elif\|else\)\>'
+
+ " Unless the previous line was a one-liner
+ if getline(plnumstart) =~ '^\s*\(for\|if\|try\)\>'
+ return plindent
+ endif
+
+ " Or the user has already dedented
+ if indent(a:lnum) <= plindent - &sw
+ return -1
+ endif
+
+ return plindent - &sw
+ endif
+
+ " When after a () construct we probably want to go back to the start line.
+ " a = (b
+ " + c)
+ " here
+ if parlnum > 0
+ return plindent
+ endif
+
+ return -1
+
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/readline.vim b/runtime/indent/readline.vim
new file mode 100644
index 000000000..b2640f1f2
--- /dev/null
+++ b/runtime/indent/readline.vim
@@ -0,0 +1,48 @@
+" Vim indent file
+" Language: readline configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/readline/
+" Latest Revision: 2004-04-25
+" arch-tag: ee681235-3abf-4a42-8587-edabd409a980
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetReadlineIndent()
+setlocal indentkeys=!^F,o,O,=$else,=$endif
+
+" Only define the function once.
+if exists("*GetReadlineIndent")
+ finish
+endif
+
+function GetReadlineIndent()
+ let lnum = prevnonblank(v:lnum - 1)
+
+ if lnum == 0
+ return 0
+ endif
+
+ let line = getline(lnum)
+ let ind = indent(lnum)
+
+ " increase indent if previous line started with $if or $else
+ if line =~ '^\s*$\(if\|else\)\>'
+ let ind = ind + &sw
+ endif
+
+ let line = getline(v:lnum)
+
+ " decrease indent if this line starts with $else or $endif
+ if line =~ '^\s*$\(else\|endif\)\>'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/rpl.vim b/runtime/indent/rpl.vim
new file mode 100644
index 000000000..341f5f950
--- /dev/null
+++ b/runtime/indent/rpl.vim
@@ -0,0 +1,60 @@
+" Vim indent file
+" Language: RPL/2
+" Version: 0.2
+" Last Change: 2002 August 16
+" Maintainer: BERTRAND Joël <rpl2@free.fr>
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentkeys+==~end,=~case,=~if,=~then,=~else,=~do,=~until,=~while,=~repeat,=~select,=~default,=~for,=~start,=~next,=~step,<<>,<>>
+
+" Define the appropriate indent function but only once
+setlocal indentexpr=RplGetFreeIndent()
+if exists("*RplGetFreeIndent")
+ finish
+endif
+
+function RplGetIndent(lnum)
+ let ind = indent(a:lnum)
+ let prevline=getline(a:lnum)
+ " Strip tail comment
+ let prevstat=substitute(prevline, '!.*$', '', '')
+
+ " Add a shiftwidth to statements following if, iferr, then, else, elseif,
+ " case, select, default, do, until, while, repeat, for, start
+ if prevstat =~? '\<\(if\|iferr\|do\|while\)\>' && prevstat =~? '\<end\>'
+ elseif prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' && prevstat =~? '\s\+>>\($\|\s\+\)'
+ elseif prevstat =~? '\<\(if\|iferr\|then\|else\|elseif\|select\|case\|do\|until\|while\|repeat\|for\|start\|default\)\>' || prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)'
+ let ind = ind + &sw
+ endif
+
+ " Subtract a shiftwidth from then, else, elseif, end, until, repeat, next,
+ " step
+ let line = getline(v:lnum)
+ if line =~? '^\s*\(then\|else\|elseif\|until\|repeat\|next\|step\|default\|end\)\>'
+ let ind = ind - &sw
+ elseif line =~? '^\s*>>\($\|\s\+\)'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+function RplGetFreeIndent()
+ " Find the previous non-blank line
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Use zero indent at the top of the file
+ if lnum == 0
+ return 0
+ endif
+
+ let ind=RplGetIndent(lnum)
+ return ind
+endfunction
+
+" vim:sw=2 tw=130
diff --git a/runtime/indent/rst.vim b/runtime/indent/rst.vim
new file mode 100644
index 000000000..c6269ec6a
--- /dev/null
+++ b/runtime/indent/rst.vim
@@ -0,0 +1,60 @@
+" Vim indent file
+" Language: reStructuredText Documentation Format
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/rst/
+" Latest Revision: 2004-04-25
+" arch-tag: 3fe10f75-24d0-4d94-a924-0ce945958104
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetRSTIndent()
+setlocal indentkeys-=:,0# indentkeys-=e
+
+" Only define the function once.
+if exists("*GetRSTIndent")
+ finish
+endif
+
+function GetRSTIndent()
+ let lnum = prevnonblank(v:lnum - 1)
+
+ if lnum == 0
+ return 0
+ endif
+
+ 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\+')
+ endif
+
+ let line = getline(v:lnum - 1)
+
+ if line =~ '^\s*$'
+ execute lnum
+ 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\+')
+ elseif line =~ '^\s*\.\.'
+ let ind = ind - 3
+ else
+ let ind = ind
+ endif
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
new file mode 100644
index 000000000..ce078f2a0
--- /dev/null
+++ b/runtime/indent/ruby.vim
@@ -0,0 +1,67 @@
+" Vim indent file
+" Language: Ruby
+" Maintainer: Gavin Sinclair <gsinclair@soyabean.com.au>
+" Last Change: 2003 May 11
+" URL: www.soyabean.com.au/gavin/vim/index.html
+" Changes: (since vim 6.1)
+" - indentation after a line ending in comma, etc, (even in a comment) was
+" broken, now fixed (2002/08/14)
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetRubyIndent()
+setlocal nolisp
+setlocal nosmartindent
+setlocal autoindent
+setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue
+
+" Only define the function once.
+if exists("*GetRubyIndent")
+ finish
+endif
+
+function GetRubyIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " If the line trailed with [*+,.(] - but not in a comment - trust the user
+ if getline(lnum) =~ '\(\[^#\].*\)?\(\*\|\.\|+\|,\|(\)\(\s*#.*\)\=$'
+ return -1
+ endif
+
+ " Add a 'shiftwidth' after lines beginning with:
+ " module, class, dev, if, for, while, until, else, elsif, case, when, {
+ let ind = indent(lnum)
+ let flag = 0
+ if getline(lnum) =~ '^\s*\(module\>\|class\>\|def\>\|if\>\|for\>\|while\>\|until\>\|else\>\|elsif\>\|case\>\|when\>\|unless\|begin\|ensure\>\|rescue\>\)'
+ \ || getline(lnum) =~ '{\s*$'
+ \ || getline(lnum) =~ '\({\|\<do\>\).*|.*|\s*$'
+ \ || getline(lnum) =~ '\<do\>\(\s*#.*\)\=$'
+ let ind = ind + &sw
+ let flag = 1
+ endif
+
+ " Subtract a 'shiftwidth' after lines ending with
+ " "end" when they begin with while, if, for, until
+ if flag == 1 && getline(lnum) =~ '\<end\>\(\s*#.*\)\=$'
+ let ind = ind - &sw
+ endif
+
+ " Subtract a 'shiftwidth' on end, else and, elsif, when and }
+ if getline(v:lnum) =~ '^\s*\(end\>\|else\>\|elsif\>\|when\>\|ensure\>\|rescue\>\|}\)'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/sdl.vim b/runtime/indent/sdl.vim
new file mode 100644
index 000000000..9dde2c3f5
--- /dev/null
+++ b/runtime/indent/sdl.vim
@@ -0,0 +1,89 @@
+" Vim indent file
+" Language: SDL
+" Maintainer: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Last Change: 2001 Sep 17
+
+" Shamelessly stolen from the Vim-Script indent file
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetSDLIndent()
+setlocal indentkeys+==~end,=~state,*<Return>
+
+" Only define the function once.
+if exists("*GetSDLIndent")
+" finish
+endif
+
+set cpo-=C
+
+function! GetSDLIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+ let virtuality = '^\s*\(\(virtual\|redefined\|finalized\)\s\+\)\=\s*'
+
+ " Add a single space to comments which use asterisks
+ if getline(lnum) =~ '^\s*\*'
+ let ind = ind - 1
+ endif
+ if getline(v:lnum) =~ '^\s*\*'
+ let ind = ind + 1
+ endif
+
+ " Add a 'shiftwidth' after states, different blocks, decision (and alternatives), inputs
+ if (getline(lnum) =~? '^\s*\(start\|state\|system\|package\|connection\|channel\|alternative\|macro\|operator\|newtype\|select\|substructure\|decision\|generator\|refinement\|service\|method\|exceptionhandler\|asntype\|syntype\|value\|(.*):\|\(priority\s\+\)\=input\|provided\)'
+ \ || getline(lnum) =~? virtuality . '\(process\|procedure\|block\|object\)')
+ \ && getline(lnum) !~? 'end[[:alpha:]]\+;$'
+ let ind = ind + &sw
+ endif
+
+ " Subtract a 'shiftwidth' after states
+ if getline(lnum) =~? '^\s*\(stop\|return\>\|nextstate\)'
+ let ind = ind - &sw
+ endif
+
+ " Subtract a 'shiftwidth' on on end (uncompleted line)
+ if getline(v:lnum) =~? '^\s*end\>'
+ let ind = ind - &sw
+ endif
+
+ " Put each alternatives where the corresponding decision was
+ if getline(v:lnum) =~? '^\s*\((.*)\|else\):'
+ normal k
+ let ind = indent(searchpair('^\s*decision', '', '^\s*enddecision', 'bW',
+ \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "sdlString"'))
+ endif
+
+ " Put each state where the preceding state was
+ if getline(v:lnum) =~? '^\s*state\>'
+ let ind = indent(search('^\s*start', 'bW'))
+ endif
+
+ " Systems and packages are always in column 0
+ if getline(v:lnum) =~? '^\s*\(\(end\)\=system\|\(end\)\=package\)'
+ return 0;
+ endif
+
+ " Put each end* where the corresponding begin was
+ if getline(v:lnum) =~? '^\s*end[[:alpha:]]'
+ normal k
+ let partner=matchstr(getline(v:lnum), '\(' . virtuality . 'end\)\@<=[[:alpha:]]\+')
+ let ind = indent(searchpair(virtuality . partner, '', '^\s*end' . partner, 'bW',
+ \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "sdlString"'))
+ endif
+
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim
new file mode 100644
index 000000000..880ad12ce
--- /dev/null
+++ b/runtime/indent/sh.vim
@@ -0,0 +1,58 @@
+" Vim indent file
+" Language: Shell Script
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/sh/
+" Latest Revision: 2004-04-25
+" arch-tag: 431c7fc1-12a6-4d71-9636-1498ef56b038
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetShIndent()
+setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done
+setlocal indentkeys-=:,0#
+
+" Only define the function once.
+if exists("*GetShIndent")
+ finish
+endif
+
+set cpoptions-=C
+
+function GetShIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " Add a 'shiftwidth' after if, while, else, case, until, for, function()
+ " Skip if the line also contains the closure for the above
+ let ind = indent(lnum)
+ let line = getline(lnum)
+ if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>'
+ \ || line =~ '^\s*\<\h\w*\>\s*()\s*{'
+ \ || line =~ '^\s*{'
+ if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$'
+ let ind = ind + &sw
+ endif
+ endif
+
+ " Subtract a 'shiftwidth' on a then, do, else, esac, fi, done
+ " Retain the indentation level if line matches fin (for find)
+ let line = getline(v:lnum)
+ if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}')
+ \ && line !~ '^\s*fi[ln]\>'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/tcl.vim b/runtime/indent/tcl.vim
new file mode 100644
index 000000000..326575e8f
--- /dev/null
+++ b/runtime/indent/tcl.vim
@@ -0,0 +1,123 @@
+" Vim indent file
+" Language: Tcl
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/tcl/
+" Latest Revision: 2004-05-21
+" arch-tag: 64fab1fa-d670-40ab-a191-55678f20ceb0
+
+" only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetTclIndent()
+setlocal indentkeys-=:,0#
+setlocal indentkeys+=0]
+
+" only define the function once.
+if exists("*GetTclIndent")
+ finish
+endif
+
+function s:PrevNonBlankNonComment(lnum)
+ let lnum = prevnonblank(a:lnum)
+ while lnum > 0
+ let line = getline(lnum)
+ if line !~ '^\s*\(#\|$\)'
+ break
+ endif
+ let lnum = prevnonblank(lnum - 1)
+ endwhile
+ return lnum
+endfunction
+
+function! GetTclIndent()
+ let lnum = s:PrevNonBlankNonComment(v:lnum - 1)
+
+ if lnum == 0
+ return 0
+ endif
+
+ let line = getline(lnum)
+ let ind = indent(lnum)
+
+ " TODO: Possible improvement, check that 'begin' and 'end' aren't inside a
+ " comment or string. This will mess it up. As I am pressed for time and
+ " stuff like this is unlikely to happen I won't deal with it in this
+ " version.
+ let open = 0
+ let begin = match(line, '{', 0)
+ while begin > -1
+ let end = match(line, '}', begin + 1)
+ if end < 0
+ let open = open + 1
+ else
+ let tmp = match(line, '{', begin + 1)
+ if tmp != -1 && tmp < end
+ let open = open + 1
+ endif
+ endif
+ let begin = match(line, '{', begin + 1)
+ endwhile
+
+ let begin = match(line, '[', 0)
+ while begin > -1
+ let end = match(line, ']', begin + 1)
+ if end < 0
+ let open = open + 1
+ else
+ let tmp = match(line, '{', begin + 1)
+ if tmp != -1 && tmp < end
+ let open = open + 1
+ endif
+ endif
+ let begin = match(line, '{', begin + 1)
+ endwhile
+
+ let close = 0
+ let prev = 0
+ let end = matchend(line, '^\s*}.*}', prev)
+ while end > -1
+ let begin = match(line, '{', prev + 1)
+ if begin < 0 || begin > prev
+ let close = close + 1
+ endif
+ let prev = end
+ let end = match(line, '}', prev + 1)
+ endwhile
+
+ let prev = 0
+ let end = match(line, ']', prev)
+ while end > -1
+ let begin = match(line, '[', prev + 1)
+ if begin < 0 || begin > prev
+ let close = close + 1
+ endif
+ let prev = end
+ let end = match(line, ']', prev + 1)
+ endwhile
+
+ let ind = ind + (open - close) * &sw
+
+ let line = getline(v:lnum)
+
+ let close = 0
+ let prev = 0
+ let end = match(line, '}', prev)
+ while end > -1
+ let begin = match(line, '{', prev + 1)
+ if begin < 0 || begin > prev
+ let close = close + 1
+ endif
+ let prev = end
+ let end = match(line, '}', prev + 1)
+ endwhile
+
+ let ind = ind - close * &sw
+
+ return ind >= 0 ? ind : 0
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/tcsh.vim b/runtime/indent/tcsh.vim
new file mode 100644
index 000000000..89403c9c9
--- /dev/null
+++ b/runtime/indent/tcsh.vim
@@ -0,0 +1,51 @@
+" Vim indent file
+" Language: C-shell (tcsh)
+" Maintainor: Gautam Iyer <gautam@math.uchicago.edu>
+" Last Modified: Wed 04 Feb 2004 04:36:07 PM CST
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=TcshGetIndent()
+setlocal indentkeys+=e,0=end,0=endsw,*<return> indentkeys-=0{,0},0),:,0#
+
+" Only define the function once.
+if exists("*TcshGetIndent")
+ finish
+endif
+
+set cpoptions-=C
+
+function TcshGetIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " Add indent if previous line begins with while or foreach
+ " OR line ends with case <str>:, default:, else, then or \
+ let ind = indent(lnum)
+ let line = getline(lnum)
+ if line =~ '\v^\s*%(while|foreach)>|^\s*%(case\s.*:|default:|else)\s*$|%(<then|\\)$'
+ let ind = ind + &sw
+ endif
+
+ if line =~ '\v^\s*breaksw>'
+ let ind = ind - &sw
+ endif
+
+ " Subtract indent if current line has on end, endif, case commands
+ let line = getline(v:lnum)
+ if line =~ '\v^\s*%(else|end|endif)\s*$'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
diff --git a/runtime/indent/tilde.vim b/runtime/indent/tilde.vim
new file mode 100644
index 000000000..5fdcfe071
--- /dev/null
+++ b/runtime/indent/tilde.vim
@@ -0,0 +1,36 @@
+"Description: Indent scheme for the tilde weblanguage
+"Author: Tobias Rundström <tobi@tobi.nu>
+"URL: http://tilde.tildesoftware.net
+"Last Change: May 8 09:15:09 CEST 2002
+
+if exists ("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal autoindent
+setlocal indentexpr=GetTildeIndent(v:lnum)
+setlocal indentkeys=o,O,)
+
+if exists("*GetTildeIndent")
+ finish
+endif
+
+function GetTildeIndent(lnum)
+ let plnum = prevnonblank(v:lnum-1)
+
+ if plnum == 0
+ return 0
+ endif
+
+ if getline(v:lnum) =~ '^\s*\~\(endif\|else\|elseif\|end\)\>'
+ return indent(v:lnum) - &sw
+ endif
+
+ if getline(plnum) =~ '^\s*\~\(if\|foreach\|foreach_row\|xml_loop\|file_loop\|file_write\|file_append\|imap_loopsections\|imap_index\|imap_list\|ldap_search\|post_loopall\|post_loop\|file_loop\|sql_loop_num\|sql_dbmsselect\|search\|sql_loop\|post\|for\|function_define\|silent\|while\|setvalbig\|mail_create\|systempipe\|mail_send\|dual\|elseif\|else\)\>'
+ return indent(plnum) + &sw
+ else
+ return -1
+ endif
+endfunction
diff --git a/runtime/indent/vb.vim b/runtime/indent/vb.vim
new file mode 100644
index 000000000..515e4dc6b
--- /dev/null
+++ b/runtime/indent/vb.vim
@@ -0,0 +1,72 @@
+" Vim indent file
+" Language: VisualBasic (ft=vb) / Basic (ft=basic) / SaxBasic (ft=vb)
+" Author: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=VbGetIndent(v:lnum)
+setlocal indentkeys&
+setlocal indentkeys+==~else,=~elseif,=~end,=~wend,=~case,=~next,=~select,~=loop,<:>
+
+" Only define the function once.
+if exists("*VbGetIndent")
+ finish
+endif
+
+fun! VbGetIndent(lnum)
+ " labels and preprocessor get zero indent immediately
+ let this_line = getline(a:lnum)
+ let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)'
+ if this_line =~? LABELS_OR_PREPROC
+ return 0
+ endif
+
+ " Find a non-blank line above the current line.
+ " Skip over labels and preprocessor directives.
+ let lnum = a:lnum
+ while lnum > 0
+ let lnum = prevnonblank(lnum - 1)
+ let previous_line = getline(lnum)
+ if previous_line !~? LABELS_OR_PREPROC
+ break
+ endif
+ endwhile
+
+ " Hit the start of the file, use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+
+ " Add
+ if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\>.\{-}\<then\>\s*$\|else\|elseif\|do\|for\|while\|enum\|with\)\>'
+ let ind = ind + &sw
+ endif
+
+ " Subtract
+ if this_line =~? '^\s*\<end\>\s\+\<select\>'
+ if previous_line !~? '^\s*\<select\>'
+ let ind = ind - 2 * &sw
+ else
+ " this case is for an empty 'select' -- 'end select'
+ " (w/o any case statements) like:
+ "
+ " select case readwrite
+ " end select
+ let ind = ind - &sw
+ endif
+ elseif this_line =~? '^\s*\<\(end\|else\|until\|loop\|next\|wend\)\>'
+ let ind = ind - &sw
+ elseif this_line =~? '^\s*\<\(case\|default\)\>'
+ if previous_line !~? '^\s*\<select\>'
+ let ind = ind - &sw
+ endif
+ endif
+
+ return ind
+endfun
diff --git a/runtime/indent/verilog.vim b/runtime/indent/verilog.vim
new file mode 100644
index 000000000..74c8c5f6d
--- /dev/null
+++ b/runtime/indent/verilog.vim
@@ -0,0 +1,219 @@
+" Language: Verilog HDL
+" Maintainer: Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
+" Last Change: Wed Oct 31 16:13:11 CST 2001
+" URL: http://larc.ee.nthu.edu.tw/~cthuang/vim/indent/verilog.vim
+"
+" Credits:
+" Suggestions for improvement, bug reports by
+" Leo Butlero <lbutler@brocade.com>
+"
+" Buffer Variables:
+" b:verilog_indent_modules : indenting after the declaration
+" of module blocks
+" b:verilog_indent_width : indenting width
+" b:verilog_indent_verbose : verbose to each indenting
+"
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetVerilogIndent()
+setlocal indentkeys=!^F,o,O,0),=begin,=end,=join,=endcase
+setlocal indentkeys+==endmodule,=endfunction,=endtask,=endspecify
+setlocal indentkeys+==`else,=`endif
+
+" Only define the function once.
+if exists("*GetVerilogIndent")
+ finish
+endif
+
+set cpo-=C
+
+function GetVerilogIndent()
+
+ if exists('b:verilog_indent_width')
+ let offset = b:verilog_indent_width
+ else
+ let offset = &sw
+ endif
+ if exists('b:verilog_indent_modules')
+ let indent_modules = offset
+ else
+ let indent_modules = 0
+ endif
+
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ let lnum2 = prevnonblank(lnum - 1)
+ let curr_line = getline(v:lnum)
+ let last_line = getline(lnum)
+ let last_line2 = getline(lnum2)
+ let ind = indent(lnum)
+ let ind2 = indent(lnum - 1)
+ let offset_comment1 = 1
+ " Define the condition of an open statement
+ " Exclude the match of //, /* or */
+ let vlog_openstat = '\(\<or\>\|\([*/]\)\@<![*(,{><+-/%^&|!=?:]\([*/]\)\@!\)'
+ " Define the condition when the statement ends with a one-line comment
+ let vlog_comment = '\(//.*\|/\*.*\*/\s*\)'
+ if exists('b:verilog_indent_verbose')
+ let vverb_str = 'INDENT VERBOSE:'
+ let vverb = 1
+ else
+ let vverb = 0
+ endif
+
+ " Indent accoding to last line
+ " End of multiple-line comment
+ if last_line =~ '\*/\s*$' && last_line !~ '/\*.\{-}\*/'
+ let ind = ind - offset_comment1
+ if vverb
+ echo vverb_str "De-indent after a multiple-line comment."
+ endif
+
+ " Indent after if/else/for/case/always/initial/specify/fork blocks
+ elseif last_line =~ '`\@<!\<\(if\|else\)\>' ||
+ \ last_line =~ '^\s*\<\(for\|case\%[[zx]]\)\>' ||
+ \ last_line =~ '^\s*\<\(always\|initial\)\>' ||
+ \ last_line =~ '^\s*\<\(specify\|fork\)\>'
+ if last_line !~ '\(;\|\<end\>\)\s*' . vlog_comment . '*$' ||
+ \ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . vlog_comment . '*$'
+ let ind = ind + offset
+ if vverb | echo vverb_str "Indent after a block statement." | endif
+ endif
+ " Indent after function/task blocks
+ elseif last_line =~ '^\s*\<\(function\|task\)\>'
+ if last_line !~ '\<end\>\s*' . vlog_comment . '*$' ||
+ \ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . vlog_comment . '*$'
+ let ind = ind + offset
+ if vverb
+ echo vverb_str "Indent after function/task block statement."
+ endif
+ endif
+
+ " Indent after module/function/task/specify/fork blocks
+ elseif last_line =~ '^\s*\<module\>'
+ let ind = ind + indent_modules
+ if vverb && indent_modules
+ echo vverb_str "Indent after module statement."
+ endif
+ if last_line =~ '[(,]\s*' . vlog_comment . '*$' &&
+ \ last_line !~ '\(//\|/\*\).*[(,]\s*' . vlog_comment . '*$'
+ let ind = ind + offset
+ if vverb
+ echo vverb_str "Indent after a multiple-line module statement."
+ endif
+ endif
+
+ " Indent after a 'begin' statement
+ elseif last_line =~ '\(\<begin\>\)\(\s*:\s*\w\+\)*' . vlog_comment . '*$' &&
+ \ last_line !~ '\(//\|/\*\).*\(\<begin\>\)' &&
+ \ ( last_line2 !~ vlog_openstat . '\s*' . vlog_comment . '*$' ||
+ \ last_line2 =~ '^\s*[^=!]\+\s*:\s*' . vlog_comment . '*$' )
+ let ind = ind + offset
+ if vverb | echo vverb_str "Indent after begin statement." | endif
+
+ " De-indent for the end of one-line block
+ elseif ( last_line !~ '\<begin\>' ||
+ \ last_line =~ '\(//\|/\*\).*\<begin\>' ) &&
+ \ last_line2 =~ '\<\(`\@<!if\|`\@<!else\|for\|always\|initial\)\>.*' .
+ \ vlog_comment . '*$' &&
+ \ last_line2 !~
+ \ '\(//\|/\*\).*\<\(`\@<!if\|`\@<!else\|for\|always\|initial\)\>' &&
+ \ last_line2 !~ vlog_openstat . '\s*' . vlog_comment . '*$' &&
+ \ ( last_line2 !~ '\<begin\>' ||
+ \ last_line2 =~ '\(//\|/\*\).*\<begin\>' )
+ let ind = ind - offset
+ if vverb
+ echo vverb_str "De-indent after the end of one-line statement."
+ endif
+
+ " Multiple-line statement (including case statement)
+ " Open statement
+ " Ident the first open line
+ elseif last_line =~ vlog_openstat . '\s*' . vlog_comment . '*$' &&
+ \ last_line !~ '\(//\|/\*\).*' . vlog_openstat . '\s*$' &&
+ \ last_line2 !~ vlog_openstat . '\s*' . vlog_comment . '*$'
+ let ind = ind + offset
+ if vverb | echo vverb_str "Indent after an open statement." | endif
+
+ " Close statement
+ " De-indent for an optional close parenthesis and a semicolon, and only
+ " if there exists precedent non-whitespace char
+ elseif last_line =~ ')*\s*;\s*' . vlog_comment . '*$' &&
+ \ last_line !~ '^\s*)*\s*;\s*' . vlog_comment . '*$' &&
+ \ last_line !~ '\(//\|/\*\).*\S)*\s*;\s*' . vlog_comment . '*$' &&
+ \ ( last_line2 =~ vlog_openstat . '\s*' . vlog_comment . '*$' &&
+ \ last_line2 !~ ';\s*//.*$') &&
+ \ last_line2 !~ '^\s*' . vlog_comment . '$'
+ let ind = ind - offset
+ if vverb | echo vverb_str "De-indent after a close statement." | endif
+
+ " `ifdef and `else
+ elseif last_line =~ '^\s*`\<\(ifdef\|else\)\>'
+ let ind = ind + offset
+ if vverb
+ echo vverb_str "Indent after a `ifdef or `else statement."
+ endif
+
+ endif
+
+ " Re-indent current line
+
+ " De-indent on the end of the block
+ " join/end/endcase/endfunction/endtask/endspecify
+ if curr_line =~ '^\s*\<\(join\|end\|endcase\)\>' ||
+ \ curr_line =~ '^\s*\<\(endfunction\|endtask\|endspecify\)\>'
+ let ind = ind - offset
+ if vverb | echo vverb_str "De-indent the end of a block." | endif
+ elseif curr_line =~ '^\s*\<endmodule\>'
+ let ind = ind - indent_modules
+ if vverb && indent_modules
+ echo vverb_str "De-indent the end of a module."
+ endif
+
+ " De-indent on a stand-alone 'begin'
+ elseif curr_line =~ '^\s*\<begin\>'
+ if last_line !~ '^\s*\<\(function\|task\|specify\|module\)\>' &&
+ \ last_line !~ '^\s*\()*\s*;\|)\+\)\s*' . vlog_comment . '*$' &&
+ \ ( last_line =~
+ \ '\<\(`\@<!if\|`\@<!else\|for\|case\%[[zx]]\|always\|initial\)\>' ||
+ \ last_line =~ ')\s*' . vlog_comment . '*$' ||
+ \ last_line =~ vlog_openstat . '\s*' . vlog_comment . '*$' )
+ let ind = ind - offset
+ if vverb
+ echo vverb_str "De-indent a stand alone begin statement."
+ endif
+ endif
+
+ " De-indent after the end of multiple-line statement
+ elseif curr_line =~ '^\s*)' &&
+ \ ( last_line =~ vlog_openstat . '\s*' . vlog_comment . '*$' ||
+ \ last_line !~ vlog_openstat . '\s*' . vlog_comment . '*$' &&
+ \ last_line2 =~ vlog_openstat . '\s*' . vlog_comment . '*$' )
+ let ind = ind - offset
+ if vverb
+ echo vverb_str "De-indent the end of a multiple statement."
+ endif
+
+ " De-indent `else and `endif
+ elseif curr_line =~ '^\s*`\<\(else\|endif\)\>'
+ let ind = ind - offset
+ if vverb | echo vverb_str "De-indent `else and `endif statement." | endif
+
+ endif
+
+ " Return the indention
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim
new file mode 100644
index 000000000..0de77748c
--- /dev/null
+++ b/runtime/indent/vim.vim
@@ -0,0 +1,65 @@
+" Vim indent file
+" Language: Vim script
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 May 25
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetVimIndent()
+setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
+
+" Only define the function once.
+if exists("*GetVimIndent")
+ finish
+endif
+
+function GetVimIndent()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+ " If the current line doesn't start with '\' and below a line that starts
+ " with '\', use the indent of the line above it.
+ if getline(v:lnum) !~ '^\s*\\'
+ while lnum > 0 && getline(lnum) =~ '^\s*\\'
+ let lnum = lnum - 1
+ endwhile
+ endif
+
+ " At the start of the file use zero indent.
+ if lnum == 0
+ return 0
+ endif
+
+ " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
+ " and :else. Add it three times for a line that starts with '\' after
+ " a line that doesn't.
+ let ind = indent(lnum)
+ if getline(v:lnum) =~ '^\s*\\' && v:lnum > 1 && getline(lnum) !~ '^\s*\\'
+ let ind = ind + &sw * 3
+ elseif getline(lnum) =~ '\(^\||\)\s*\(if\|wh\%[ile]\|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
+ endif
+
+ " If the previous line contains an "end" after a pipe, but not in an ":au"
+ " command.
+ if getline(lnum) =~ '|\s*\(ene\@!\)' && getline(lnum) !~ '^\s*au\%[tocmd]'
+ let ind = ind - &sw
+ endif
+
+
+ " Subtract a 'shiftwidth' on a :endif, :endwhile, :catch, :finally, :endtry,
+ " :endfun, :else and :augroup END.
+ if getline(v:lnum) =~ '^\s*\(ene\@!\|cat\|fina\|el\|aug\%[roup]\s*!\=\s\+END\)'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim:sw=2
diff --git a/runtime/indent/xf86conf.vim b/runtime/indent/xf86conf.vim
new file mode 100644
index 000000000..f9db1ba96
--- /dev/null
+++ b/runtime/indent/xf86conf.vim
@@ -0,0 +1,42 @@
+" Vim indent file
+" Language: XFree86 Configuration File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/xf86conf/
+" Latest Revision: 2004-04-25
+" arch-tag: 8a42f7b6-5088-49cf-b15b-07696a91c015
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetXF86ConfIndent()
+setlocal indentkeys=!^F,o,O,=End
+
+" Only define the function once.
+if exists("*GetXF86ConfIndent")
+ finish
+endif
+
+function GetXF86ConfIndent()
+ let lnum = prevnonblank(v:lnum - 1)
+
+ if lnum == 0
+ return 0
+ endif
+
+ let ind = indent(lnum)
+ let line = getline(lnum)
+
+ if line =~? '^\s*\(Sub\)\=Section'
+ let ind = ind + &sw
+ elseif getline(v:lnum) =~? '^\s*End'
+ let ind = ind - &sw
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/xhtml.vim b/runtime/indent/xhtml.vim
new file mode 100644
index 000000000..1abf6b75f
--- /dev/null
+++ b/runtime/indent/xhtml.vim
@@ -0,0 +1,7 @@
+" Vim indent file
+" Language: XHTML
+" Maintainer: Bram Moolenaar <Bram@vim.org> (for now)
+" Last Change: 2003 Feb 04
+
+" Handled like HTML for now.
+runtime! indent/html.vim
diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim
new file mode 100644
index 000000000..340981b3d
--- /dev/null
+++ b/runtime/indent/xml.vim
@@ -0,0 +1,88 @@
+" Language: xml
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" 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.
+" TODO: implement pre-like tags, see xml_indent_open / xml_indent_close
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" [-- 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>
+ " let b:xml_indent_open = '.\{-}<[/]\@!\(address\)\@!'
+endif
+
+if !exists('b:xml_indent_close')
+ let b:xml_indent_close = '.\{-}</'
+ " end pre tag, e.g. </address>
+ " let b:xml_indent_close = '.\{-}</\(address\)\@!'
+endif
+
+" [-- finish, if the function already exists --]
+if exists('*XmlIndentGet') | finish | endif
+
+fun! <SID>XmlIndentWithPattern(line, pat)
+ let s = substitute('x'.a:line, a:pat, "\1", 'g')
+ return strlen(substitute(s, "[^\1].*$", '', ''))
+endfun
+
+" [-- check if it's xml --]
+fun! <SID>XmlIndentSynCheck(lnum)
+ if '' != &syntax
+ let syn1 = synIDattr(synID(a:lnum, 1, 1), 'name')
+ let syn2 = synIDattr(synID(a:lnum, strlen(getline(a:lnum)) - 1, 1), 'name')
+ if '' != syn1 && syn1 !~ 'xml' && '' != syn2 && syn2 !~ 'xml'
+ " don't indent pure non-xml code
+ return 0
+ endif
+ endif
+ return 1
+endfun
+
+" [-- return the sum of indents of a:lnum --]
+fun! <SID>XmlIndentSum(lnum, style, add)
+ let line = getline(a:lnum)
+ if a:style == match(line, '^\s*</')
+ return (&sw *
+ \ (<SID>XmlIndentWithPattern(line, b:xml_indent_open)
+ \ - <SID>XmlIndentWithPattern(line, b:xml_indent_close)
+ \ - <SID>XmlIndentWithPattern(line, '.\{-}/>'))) + a:add
+ else
+ return a:add
+ endif
+endfun
+
+fun! XmlIndentGet(lnum, use_syntax_check)
+ " 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
+
+ if a:use_syntax_check
+ if 0 == <SID>XmlIndentSynCheck(lnum) || 0 == <SID>XmlIndentSynCheck(a:lnum)
+ return indent(a:lnum)
+ endif
+ endif
+
+ let ind = <SID>XmlIndentSum(lnum, -1, indent(lnum))
+ let ind = <SID>XmlIndentSum(a:lnum, 0, ind)
+
+ return ind
+endfun
+
+" vim:ts=8
diff --git a/runtime/indent/xslt.vim b/runtime/indent/xslt.vim
new file mode 100644
index 000000000..ff93d69d7
--- /dev/null
+++ b/runtime/indent/xslt.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: XSLT .xslt files
+" Maintainer: David Fishburn <fishburn@ianywhere.com>
+" Last Change: Wed May 14 2003 8:48:41 PM
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+" Use XML formatting rules
+runtime! indent/xml.vim
+
diff --git a/runtime/indent/yacc.vim b/runtime/indent/yacc.vim
new file mode 100644
index 000000000..4ea8f6a2d
--- /dev/null
+++ b/runtime/indent/yacc.vim
@@ -0,0 +1,44 @@
+" Vim indent file
+" Language: YACC input file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/yacc/
+" Latest Revision: 2004-04-25
+" arch-tag: 629aa719-8fe4-4787-adb7-ae94ca801610
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetYaccIndent()
+setlocal indentkeys=!^F,o,O
+
+" Only define the function once.
+if exists("*GetYaccIndent")
+ finish
+endif
+
+function GetYaccIndent()
+ if v:lnum == 1
+ return 0
+ endif
+
+ let ind = indent(v:lnum - 1)
+ let line = getline(v:lnum - 1)
+
+ if line == ''
+ let ind = 0
+ elseif line =~ '^\w\+\s*:'
+ let ind = ind + matchend(line, '^\w\+\s*')
+ elseif line =~ '^\s*;'
+ let ind = 0
+ else
+ let ind = indent(v:lnum)
+ endif
+
+ return ind
+endfunction
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indent/zsh.vim b/runtime/indent/zsh.vim
new file mode 100644
index 000000000..ff28d99d7
--- /dev/null
+++ b/runtime/indent/zsh.vim
@@ -0,0 +1,11 @@
+" Vim indent file
+" Language: Zsh Shell Script
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/indent/pcp/zsh/
+" Latest Revision: 2004-05-22
+" arch-tag: e566f55f-d8c0-4c60-b4b3-60c0dbd6dea1
+
+" Same as sh indenting for now.
+runtime! indent/sh.vim
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/indoff.vim b/runtime/indoff.vim
new file mode 100644
index 000000000..0d930352b
--- /dev/null
+++ b/runtime/indoff.vim
@@ -0,0 +1,11 @@
+" Vim support file to switch off loading indent files for file types
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jun 11
+
+if exists("did_indent_on")
+ unlet did_indent_on
+endif
+
+" Remove all autocommands in the filetypeindent group
+silent! au! filetypeindent *
diff --git a/runtime/keymap/README.txt b/runtime/keymap/README.txt
new file mode 100644
index 000000000..d42e02693
--- /dev/null
+++ b/runtime/keymap/README.txt
@@ -0,0 +1,26 @@
+keymap files for Vim
+
+One of these files is loaded when the 'keymap' option is set.
+
+The name of the file consists of these parts:
+
+ {language}[-{layout}][_{encoding}].vim
+
+{language} Name of the language (e.g., "hebrew", "greek")
+
+{layout} Optional: name of the keyboard layout (e.g., "spanish",
+ "russian3"). When omitted the layout of the standard
+ US-english keyboard is assumed.
+
+{encoding} Optional: character encoding for which this keymap works.
+ When omitted the "normal" encoding for the language is
+ assumed.
+ Use the value the 'encoding' option: lower case only, use '-'
+ instead of '_'.
+
+Each file starts with a header, naming the maintainer and the date when it was
+last changed. If you find a problem in a keymap file, check if you have the
+most recent version. If necessary, report a problem to the maintainer.
+
+The format of the keymap lines below "loadkeymap" is explained in the Vim help
+files, see ":help keymap-file-format".
diff --git a/runtime/keymap/accents.vim b/runtime/keymap/accents.vim
new file mode 100644
index 000000000..fae465e93
--- /dev/null
+++ b/runtime/keymap/accents.vim
@@ -0,0 +1,71 @@
+" Vim Keymap file for latin1 accents through dead characters
+" Maintainer: Bram Moolenaar
+" Last Change: 2001 Jul 22
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding latin1
+
+" Use this short name in the status line.
+let b:keymap_name = "acc"
+
+loadkeymap
+`A À
+'A Á
+´A Á
+^A Â
+~A Ã
+'C Ç
+´C Ç
+`E È
+'E É
+´E É
+^E Ê
+`I Ì
+'I Í
+´I Í
+^I Î
+~N Ñ
+`O Ò
+'O Ó
+´O Ó
+^O Ô
+~O Õ
+`U Ù
+'U Ú
+´U Ú
+^U Û
+'Y Ý
+´Y Ý
+`a à
+'a á
+´a á
+^a â
+~a ã
+'c ç
+´c ç
+`e è
+'e é
+´e é
+^e ê
+`i ì
+'i í
+´i í
+^i î
+~n ñ
+`o ò
+'o ó
+´o ó
+^o ô
+~o õ
+`u ù
+'u ú
+´u ú
+^u û
+'y ý
+´y ý
+'' '
+´´ ´
+`` `
+^^ ^
+~~ ~
diff --git a/runtime/keymap/arabic.vim b/runtime/keymap/arabic.vim
new file mode 100644
index 000000000..7eb9a17dd
--- /dev/null
+++ b/runtime/keymap/arabic.vim
@@ -0,0 +1,2 @@
+" Assume 'encoding' is set to "latin1" while actually iso-8859-6 is used
+source <sfile>:p:h/arabic_utf-8.vim
diff --git a/runtime/keymap/arabic_utf-8.vim b/runtime/keymap/arabic_utf-8.vim
new file mode 100644
index 000000000..aeb4a4f39
--- /dev/null
+++ b/runtime/keymap/arabic_utf-8.vim
@@ -0,0 +1,86 @@
+" Vim Keymap file for Arabic
+" Maintainer : Arabic Support group <support-at-arabeyes.org>
+" Created by : Nadim Shaikli <nadim-at-arabeyes.org>
+" Last Updated : 2003 Apr 26
+" This is for a standard Microsoft Arabic keyboard layout.
+
+" Use this short name in the status line.
+let b:keymap_name = "arab"
+
+loadkeymap
+q <char-0x0636> " (1590) - DAD
+w <char-0x0635> " (1589) - SAD
+e <char-0x062b> " (1579) - THEH
+r <char-0x0642> " (1602) - QAF
+t <char-0x0641> " (1601) - FEH
+y <char-0x063a> " (1594) - GHAIN
+u <char-0x0639> " (1593) - AIN
+i <char-0x0647> " (1607) - HEH
+o <char-0x062e> " (1582) - KHAH
+p <char-0x062d> " (1581) - HAH
+[ <char-0x062c> " (1580) - JEEM
+] <char-0x062f> " (1583) - DAL
+a <char-0x0634> " (1588) - SHEEN
+s <char-0x0633> " (1587) - SEEN
+d <char-0x064a> " (1610) - YEH
+f <char-0x0628> " (1576) - BEH
+g <char-0x0644> " (1604) - LAM
+h <char-0x0627> " (1575) - ALEF
+j <char-0x062a> " (1578) - TEH
+k <char-0x0646> " (1606) - NOON
+l <char-0x0645> " (1605) - MEEM
+; <char-0x0643> " (1603) - KAF
+' <char-0x0637> " (1591) - TAH
+z <char-0x0626> " (1574) - YEH with HAMZA ABOVE
+x <char-0x0621> " (1569) - HAMZA
+c <char-0x0624> " (1572) - WAW with HAMZA ABOVE
+v <char-0x0631> " (1585) - REH
+b <char-0x0644><char-0x0627> " (1604/1575) - LAA (lam alef)
+n <char-0x0649> " (1609) - ALEF MAKSURA
+m <char-0x0629> " (1577) - TEH MARBUTA
+, <char-0x0648> " (1608) - WAW
+. <char-0x0632> " (1586) - ZAIN
+/ <char-0x0638> " (1592) - ZAH
+0 <char-0x0660> " (1632) - Arabic 0
+1 <char-0x0661> " (1633) - Arabic 1
+2 <char-0x0662> " (1634) - Arabic 2
+3 <char-0x0663> " (1635) - Arabic 3
+4 <char-0x0664> " (1636) - Arabic 4
+5 <char-0x0665> " (1637) - Arabic 5
+6 <char-0x0666> " (1638) - Arabic 6
+7 <char-0x0667> " (1639) - Arabic 7
+8 <char-0x0668> " (1640) - Arabic 8
+9 <char-0x0669> " (1641) - Arabic 9
+` <char-0x0630> " (1584) - THAL
+~ <char-0x0651> " (1617) - Tanween -- SHADDA
+Q <char-0x064e> " (1614) - Tanween -- FATHA
+W <char-0x064b> " (1611) - Tanween -- FATHATAN
+E <char-0x064f> " (1615) - Tanween -- DAMMA
+R <char-0x064c> " (1612) - Tanween -- DAMMATAN
+T <char-0x0644><char-0x0625> " (1604/1573) - LAA with HAMZA BELOW
+Y <char-0x0625> " (1573) - ALEF with HAMZA BELOW
+U <char-0x0060> " (96) - ASCII -- `
+I <char-0x00f7> " (247) - ASCII suppl -- div
+O <char-0x00d7> " (215) - ASCII suppl -- mul
+P <char-0x061b> " (1563) - Arabic Semicolon
+{ <char-0x003c> " (60) - ASCII -- <
+} <char-0x003e> " (62) - ASCII -- >
+A <char-0x0650> " (1616) - Tanween -- KASRA
+S <char-0x064d> " (1613) - Tanween -- KASRATAN
+D <char-0x005b> " (91) - ASCII -- [
+F <char-0x005d> " (93) - ASCII -- ]
+G <char-0x0644><char-0x0623> " (1604/1571) - LAA with HAMZA ABOVE
+H <char-0x0623> " (1571) - ALEF with HAMZA ABOVE
+J <char-0x0640> " (1600) - TATWEEL
+K <char-0x060c> " (1548) - Arabic Comma
+L <char-0x002f> " (47) - ASCII -- /
+Z <char-0x007e> " (126) - ASCII -- ~
+X <char-0x0652> " (1618) - Tanween -- SUKUN
+C <char-0x007b> " (123) - ASCII -- {
+V <char-0x007d> " (125) - ASCII -- }
+B <char-0x0644><char-0x0622> " (1604/1570) - LAA with MADDA ABOVE
+N <char-0x0622> " (1570) - ALEF with MADDA ABOVE
+M <char-0x0027> " (39) - ASCII -- '
+< <char-0x002c> " (44) - ASCII -- ,
+> <char-0x002e> " (46) - ASCII -- .
+? <char-0x061f> " (1567) - Arabic Question Mark
diff --git a/runtime/keymap/czech.vim b/runtime/keymap/czech.vim
new file mode 100644
index 000000000..ffca531c0
--- /dev/null
+++ b/runtime/keymap/czech.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/czech_utf-8.vim
diff --git a/runtime/keymap/czech_utf-8.vim b/runtime/keymap/czech_utf-8.vim
new file mode 100644
index 000000000..227f80bef
--- /dev/null
+++ b/runtime/keymap/czech_utf-8.vim
@@ -0,0 +1,78 @@
+" Maintainer: Jiri Tobisek <tobich@yahoo.com>
+" Last Changed: 2001 Sep 30
+
+let b:keymap = "czech"
+
+loadkey
+0 é
+9 í
+8 ÷
+7 ý
+6 ŵ
+5 Å™
+4 Ä«
+3 Å·
+2 Ä›
+1 +
+` ;
+) 0
+( 9
+* 8
+& 7
+^ 6
+% 5
+$ 4
+# 3
+@ 2
+! 1
+] )
+} (
+[ ú
+{ /
+' §
+" !
+; ů
+: "
+/ -
+? _
+> :
+< ?
+| '
+~u ů
+~U Å®
+\\a ä
+\\e ë
+\\i ï
+\\o ö
+\\u å
+\\y ÿ
+\\A Ä
+\\E Ë
+\\I ì
+\\O Ö
+\\U ö
+\\Y Ÿ
+=a ÷
+=e é
+=i í
+=o ó
+=u ú
+=y ý
+=A Ã
+=E É
+=I ë
+=O Ó
+=U ù
+=Y û
++c Ä«
++d Ĭ
++e Ä›
++n ň
++r Å™
++s Å·
++t Å¡
++z ŵ
+"y z If you prefere 'quertz' keyboard
+"Y Z instead of 'querty',
+"z y just uncomment these
+"Z Y four last lines
diff --git a/runtime/keymap/esperanto.vim b/runtime/keymap/esperanto.vim
new file mode 100644
index 000000000..42b3987bb
--- /dev/null
+++ b/runtime/keymap/esperanto.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/esperanto_utf-8.vim
diff --git a/runtime/keymap/esperanto_utf-8.vim b/runtime/keymap/esperanto_utf-8.vim
new file mode 100644
index 000000000..3d335cb24
--- /dev/null
+++ b/runtime/keymap/esperanto_utf-8.vim
@@ -0,0 +1,58 @@
+" Esperanto keymap for utf-8
+" Maintainer: A.J.Mechelynck <antoine.mechelynck@skynet.be>
+" Last Changed: Sat 2003 Mar 15 05:23
+
+" This keymap adds the special consonants of Esperanto to an existing Latin
+" keyboard.
+"
+" All keys same as usual, except:
+" ^ followed by any of CcGgHhJjSs adds a circumflex on top of the letter
+" ù and Ù replaces the grave accent by a breve
+" any of CcGgHhJjSsUu followed by X or x maps to consonant with ^ or Uu with
+" breve.
+
+" short keymap name for statusline
+let b:keymap_name = "Eo"
+
+" make cursor bright green when keymap is active
+"highlight lCursor guifg=NONE guibg=#00E000
+
+" The following digraphs are already defined
+" digraph C> 0x0108 c> 0x0109 G> 0x011C g> 0x011D H> 0x0124 h> 0x0125
+" digraph J> 0x0134 j> 0x0135 S> 0x015C s> 0x015D U( 0x016C u( 0x016D
+
+scriptencoding latin1
+
+loadkeymap
+
+^C <Char-0x0108> " (264) UPPERCASE C WITH CIRCUMFLEX
+^c <Char-0x0109> " (265) LOWERCASE c WITH CIRCUMFLEX
+^G <Char-0x011C> " (284) UPPERCASE G WITH CIRCUMFLEX
+^g <Char-0x011D> " (285) LOWERCASE g WITH CIRCUMFLEX
+^H <Char-0x0124> " (292) UPPERCASE H WITH CIRCUMFLEX
+^h <Char-0x0125> " (293) LOWERCASE h WITH CIRCUMFLEX
+^J <Char-0x0134> " (308) UPPERCASE J WITH CIRCUMFLEX
+^j <Char-0x0135> " (309) LOWERCASE j WITH CIRCUMFLEX
+^S <Char-0x015C> " (348) UPPERCASE S WITH CIRCUMFLEX
+^s <Char-0x015D> " (349) LOWERCASE s WITH CIRCUMFLEX
+Ù <Char-0x016C> " (364) UPPERCASE U WITH BREVE
+ù <Char-0x016D> " (365) LOWERCASE u WITH BREVE
+
+CX <Char-0x0108> " (264) UPPERCASE C WITH CIRCUMFLEX
+Cx <Char-0x0108> " (264) UPPERCASE C WITH CIRCUMFLEX
+cx <Char-0x0109> " (265) LOWERCASE c WITH CIRCUMFLEX
+GX <Char-0x011C> " (284) UPPERCASE G WITH CIRCUMFLEX
+Gx <Char-0x011C> " (284) UPPERCASE G WITH CIRCUMFLEX
+gx <Char-0x011D> " (285) LOWERCASE g WITH CIRCUMFLEX
+HX <Char-0x0124> " (292) UPPERCASE H WITH CIRCUMFLEX
+Hx <Char-0x0124> " (292) UPPERCASE H WITH CIRCUMFLEX
+hx <Char-0x0125> " (293) LOWERCASE h WITH CIRCUMFLEX
+JX <Char-0x0134> " (308) UPPERCASE J WITH CIRCUMFLEX
+Jx <Char-0x0134> " (308) UPPERCASE J WITH CIRCUMFLEX
+jx <Char-0x0135> " (309) LOWERCASE j WITH CIRCUMFLEX
+SX <Char-0x015C> " (348) UPPERCASE S WITH CIRCUMFLEX
+Sx <Char-0x015C> " (348) UPPERCASE S WITH CIRCUMFLEX
+sx <Char-0x015D> " (349) LOWERCASE s WITH CIRCUMFLEX
+UX <Char-0x016C> " (364) UPPERCASE U WITH BREVE
+Ux <Char-0x016C> " (364) UPPERCASE U WITH BREVE
+ux <Char-0x016D> " (365) LOWERCASE u WITH BREVE
diff --git a/runtime/keymap/greek.vim b/runtime/keymap/greek.vim
new file mode 100644
index 000000000..eb2c1dedc
--- /dev/null
+++ b/runtime/keymap/greek.vim
@@ -0,0 +1,7 @@
+" Assume 'encoding' is set to "latin1" while actually cp1253 or iso-8859-7 is
+" being used
+if has("win16") || has("win32") || has("win32unix")
+ source <sfile>:p:h/greek_cp1253.vim
+else
+ source <sfile>:p:h/greek_iso-8859-7.vim
+endif
diff --git a/runtime/keymap/greek_cp1253.vim b/runtime/keymap/greek_cp1253.vim
new file mode 100644
index 000000000..a146477da
--- /dev/null
+++ b/runtime/keymap/greek_cp1253.vim
@@ -0,0 +1,119 @@
+" Vim Keymap file for greek
+" Maintainer: Grigorios Magklis <maglis@cs.rochester.edu>
+" Patched for MS-Windows CP1253: Panagiotis Louridas <louridas@acm.org>
+" Last Updated: Fri 13 Feb 2004 13:01:33
+"
+" This keyboard layout allows all Greek symbols to be typed,
+" including accented capitals, diaeresis & accent on the same
+" vowel, and the Greek semicolon sign.
+"
+" accent ";" + letter
+" diaeresis ":" + letter
+" diaeresis + accent ";" + ":" (or ":" + ";") + letter
+" semicolon "q"
+" colon "Q"
+" greek semicolon "W"
+" sigma at end of word "w"
+" greek left double-quote "<" twice
+" greek right double-quote ">" twice
+
+" Use this short name in the status line.
+let b:keymap_name = "greek"
+
+loadkeymap
+" capital
+A <char-193> " Á
+B <char-194> " Â
+G <char-195> " Ã
+D <char-196> " Ä
+E <char-197> " Å
+Z <char-198> " Æ
+H <char-199> " Ç
+U <char-200> " È
+I <char-201> " É
+K <char-202> " Ê
+L <char-203> " Ë
+M <char-204> " Ì
+N <char-205> " Í
+J <char-206> " Î
+O <char-207> " Ï
+P <char-208> " Ð
+R <char-209> " Ñ
+S <char-211> " Ó
+T <char-212> " Ô
+Y <char-213> " Õ
+F <char-214> " Ö
+X <char-215> " ×
+C <char-216> " Ø
+V <char-217> " Ù
+
+" small
+a <char-225> " á
+b <char-226> " â
+g <char-227> " ã
+d <char-228> " ä
+e <char-229> " å
+z <char-230> " æ
+h <char-231> " ç
+u <char-232> " è
+i <char-233> " é
+k <char-234> " ê
+l <char-235> " ë
+m <char-236> " ì
+n <char-237> " í
+j <char-238> " î
+o <char-239> " ï
+p <char-240> " ð
+r <char-241> " ñ
+w <char-242> " ò
+s <char-243> " ó
+t <char-244> " ô
+y <char-245> " õ
+f <char-246> " ö
+x <char-247> " ÷
+c <char-248> " ø
+v <char-249> " ù
+
+" accented capital
+;A <char-162> " ¢
+;E <char-184> " ¸
+;H <char-185> " ¹
+;I <char-186> " º
+;Y <char-190> " ¾
+;O <char-188> " ¼
+;V <char-191> " ¿
+"
+:I <char-218> " Ú
+:Y <char-219> " Û
+
+" accented small
+;a <char-220> " Ü
+;e <char-221> " Ý
+;h <char-222> " Þ
+;i <char-223> " ß
+;y <char-253> " ý
+;o <char-252> " ü
+;v <char-254> " þ
+"
+:i <char-250> " ú
+:y <char-251> " û
+"
+;:i <char-192> " À
+:;i <char-192> " À
+;:y <char-224> " à
+:;y <char-224> " à
+
+" symbols
+q ; " ;
+Q : " :
+W <char-183> " ·
+; <char-180> " ´
+: <char-168> " ¨
+;: <char-181> " µ
+:; <char-181> " µ
+
+" quotes
+<< <char-171> " «
+>> <char-187> " »
+" <char-161> " ¡
+" <char-162> " ¢
diff --git a/runtime/keymap/greek_iso-8859-7.vim b/runtime/keymap/greek_iso-8859-7.vim
new file mode 100644
index 000000000..5cfd936b3
--- /dev/null
+++ b/runtime/keymap/greek_iso-8859-7.vim
@@ -0,0 +1,118 @@
+" Vim Keymap file for greek
+" Maintainer: Grigorios Magklis <maglis@cs.rochester.edu>
+" Last Updated: Tue 10 Jul 2001 16:50:50
+"
+" This keyboard layout allows all Greek symbols to be typed,
+" including accented capitals, diaeresis & accent on the same
+" vowel, and the Greek semicolon sign.
+"
+" accent ";" + letter
+" diaeresis ":" + letter
+" diaeresis + accent ";" + ":" (or ":" + ";") + letter
+" semicolon "q"
+" colon "Q"
+" greek semicolon "W"
+" sigma at end of word "w"
+" greek left double-quote "<" twice
+" greek right double-quote ">" twice
+
+" Use this short name in the status line.
+let b:keymap_name = "greek"
+
+loadkeymap
+" capital
+A <char-193> " Á
+B <char-194> " Â
+G <char-195> " Ã
+D <char-196> " Ä
+E <char-197> " Å
+Z <char-198> " Æ
+H <char-199> " Ç
+U <char-200> " È
+I <char-201> " É
+K <char-202> " Ê
+L <char-203> " Ë
+M <char-204> " Ì
+N <char-205> " Í
+J <char-206> " Î
+O <char-207> " Ï
+P <char-208> " Ð
+R <char-209> " Ñ
+S <char-211> " Ó
+T <char-212> " Ô
+Y <char-213> " Õ
+F <char-214> " Ö
+X <char-215> " ×
+C <char-216> " Ø
+V <char-217> " Ù
+
+" small
+a <char-225> " á
+b <char-226> " â
+g <char-227> " ã
+d <char-228> " ä
+e <char-229> " å
+z <char-230> " æ
+h <char-231> " ç
+u <char-232> " è
+i <char-233> " é
+k <char-234> " ê
+l <char-235> " ë
+m <char-236> " ì
+n <char-237> " í
+j <char-238> " î
+o <char-239> " ï
+p <char-240> " ð
+r <char-241> " ñ
+w <char-242> " ò
+s <char-243> " ó
+t <char-244> " ô
+y <char-245> " õ
+f <char-246> " ö
+x <char-247> " ÷
+c <char-248> " ø
+v <char-249> " ù
+
+" accented capital
+;A <char-182> " ¶
+;E <char-184> " ¸
+;H <char-185> " ¹
+;I <char-186> " º
+;Y <char-190> " ¾
+;O <char-188> " ¼
+;V <char-191> " ¿
+"
+:I <char-218> " Ú
+:Y <char-219> " Û
+
+" accented small
+;a <char-220> " Ü
+;e <char-221> " Ý
+;h <char-222> " Þ
+;i <char-223> " ß
+;y <char-253> " ý
+;o <char-252> " ü
+;v <char-254> " þ
+"
+:i <char-250> " ú
+:y <char-251> " û
+"
+;:i <char-192> " À
+:;i <char-192> " À
+;:y <char-224> " à
+:;y <char-224> " à
+
+" symbols
+q ; " ;
+Q : " :
+W <char-183> " ·
+; <char-180> " ´
+: <char-168> " ¨
+;: <char-181> " µ
+:; <char-181> " µ
+
+" quotes
+<< <char-171> " «
+>> <char-187> " »
+" <char-161> " ¡
+" <char-162> " ¢
diff --git a/runtime/keymap/greek_utf-8.vim b/runtime/keymap/greek_utf-8.vim
new file mode 100644
index 000000000..7eb67cfe9
--- /dev/null
+++ b/runtime/keymap/greek_utf-8.vim
@@ -0,0 +1,600 @@
+" This file was adapted for Vim 6 from the yudit distribution by
+" Robert Goulding <goulding@princeton.edu>
+"
+" The monotonic part of this kmap was made by Constantine Stathopoulos
+" <cstath@irismedia.gr>.
+" The polytonic part was made by <birger.langkjer@image.dk> 04/11-1999,
+" Aarhus, Denmark.
+" It was modified and completed by A. Tsolomitis <atsol@aegean.gr>
+" The licence allows modifications but redistribution of modifications
+" should be with an other name.
+" Any comments can be sent to A. Tsolomitis <atsol@aegean.gr>
+
+" The keymap now conforms with the
+" LaTeX's-Babel Standard by A. Syropoulos <apostolo@ocean1.ee.duth.gr>
+
+" The conventions are as follows:
+" EURO SIGN is E$ (0x20AC),
+" Drachma sign is D$ (0x20AF)
+
+" RIGHT an LEFT QUOTATION MARKS (0x00BB), (0x00AB),
+" follow the kikbd conventions (;< abd ;>) AND << and >>
+
+" Apostrofos is corrected in order to agree with the Greek grammar rules
+" of Triantafilidis who requires the PSILI (or Koronis) symbol for an
+" apostrophe.
+
+" The Greek ANO TELEIA (0x0387), follows again the kikbd conventions as
+" well as the Emacs conventions. So it is produced by both ;. and W
+
+" All greek accents are added so they can be produced by scholars
+" without having to combine them with letters (usufull for grammarians
+" in particular) (especially for dasia and psiln we use ' for psili
+" (that is apostrophe) and ;' for dasia. This is done in order to
+" preserve the posibility to write a plain < or >.
+
+" Ypogegrammeni is | following the character (the originally proposed
+" i after the character is problematic: can't write easily ai or vi) :
+
+" > dasia " an oxia or baria *always* should follow dasia
+" < psili " an oxia or baria *always* should follow psili
+" ; oxia
+" ` varia
+" ~ perispomeni
+" : dialytika
+" :; or ;: dialytika oxia
+" :` or `: dialytika baria
+" || a single ypogegrammeni
+" vowel followed by | gives ypogegrammeni to the vowel
+" -vowel gives vowel with macron
+" ^vowel gives vowel with braxy
+" -- endash
+" --- emdash
+" ;b ;p ;f ;u ;r ;k give alternative forms
+" && give the Greek kai symbol
+" #Q and #q give archaic Qoppa and qoppa
+" ;U is capital Theta symbol
+" !e and !E are lunate epsilon and Epsilon
+" #ST stigma
+" #SP sampi
+" #G digamma
+" #Q qoppa
+" ;# avw tovos (for numerals)
+" ;## katw tovos (for numerals)
+
+
+" All accents are supported. Even rho with < and > and Rho with <
+" Also :~i and :~u and macron and braxy a,i,u and their capitals.
+let b:keymap_name = "grk"
+loadkeymap
+" PUNCTUATION MARKS - SYMBOLS (GREEK SPECIFIC)
+"
+E$ <char-0x20AC> " EURO SIGN
+>> <char-0x00BB> " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK [GREEK
+ " EISAGOGIKA/OMOIOMATIKA - DEFINITION
+ " MISSING FROM UNICODE]
+;> <char-0x00BB> "
+<< <char-0x00AB> " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK [GREEK
+ " EISAGOGIKA - DEFINITION MISSING FROM UNICODE]
+;< <char-0x00AB> "
+Q <char-0x003A> " COLON [GREEK EPEXIGIMATIKA OR ANO & KATO TELEIA -
+ " DEFINITION MISSING FROM UNICODE]
+q <char-0x037E> " GREEK QUESTION MARK (EROTIMATIKO)
+;. <char-0x0387> " GREEK ANO TELEIA (KDE/kikbd/Xinput standard)
+W <char-0x0387> " GREEK ANO TELEIA (Emacs standard)
+' <char-0x1FBD> " GREEK APOSTROFOS
+-- <char-0x2013> " endash
+--- <char-0x2014> " emdash
+"
+" GREEK DIACRITICS
+"
+: <char-0x00A8> " DIAERESIS [GREEK DIALYTIKA - DEFINITION MISSING FROM
+ " UNICODE]
+; <char-0x0384> " GREEK TONOS
+:; <char-0x0385> " GREEK DIALYTIKA Oxia
+;: <char-0x0385> " GREEK DIALYTIKA Oxia
+:` <char-0x1FED> " GREEK DIALYTIKA VARIA
+`: <char-0x1FED> " GREEK DIALYTIKA VARIA
+` <char-0x1FEF> " Greek Varia
+~ <char-0x1FC0> " Perispomeni
+>` <char-0x1FCD> " Psili Varia
+<` <char-0x1FDD> " Dasia Varia
+>; <char-0x1FCE> " Psili Oxia
+<; <char-0x1FDE> " Dasia Oxia
+<~ <char-0x1FDF> " Dasia Perispomeni
+>~ <char-0x1FCF> " Psili Perispomeni
+"For plain psili use apostrophe
+;' <char-0x1FFE> " (Plain) dasia
+
+
+"
+" GREEK LETTERS
+"
+A <char-0x0391> " GREEK CAPITAL LETTER ALPHA
+B <char-0x0392> " GREEK CAPITAL LETTER BETA
+G <char-0x0393> " GREEK CAPITAL LETTER GAMMA
+D <char-0x0394> " GREEK CAPITAL LETTER DELTA
+E <char-0x0395> " GREEK CAPITAL LETTER EPSILON
+Z <char-0x0396> " GREEK CAPITAL LETTER ZETA
+H <char-0x0397> " GREEK CAPITAL LETTER ETA
+U <char-0x0398> " GREEK CAPITAL LETTER THETA
+I <char-0x0399> " GREEK CAPITAL LETTER IOTA
+K <char-0x039A> " GREEK CAPITAL LETTER KAPPA
+L <char-0x039B> " GREEK CAPITAL LETTER LAMDA
+M <char-0x039C> " GREEK CAPITAL LETTER MU
+N <char-0x039D> " GREEK CAPITAL LETTER NU
+J <char-0x039E> " GREEK CAPITAL LETTER XI
+O <char-0x039F> " GREEK CAPITAL LETTER OMIKRON
+P <char-0x03A0> " GREEK CAPITAL LETTER PI
+R <char-0x03A1> " GREEK CAPITAL LETTER RHO
+"W <char-0x03A3> " GREEK CAPITAL LETTER SIGMA [CAPITAL ANALOGUE FOR
+ " SMALL LETTER FINAL SIGMA]
+S <char-0x03A3> " GREEK CAPITAL LETTER SIGMA
+T <char-0x03A4> " GREEK CAPITAL LETTER TAU
+Y <char-0x03A5> " GREEK CAPITAL LETTER UPSILON
+F <char-0x03A6> " GREEK CAPITAL LETTER PHI
+X <char-0x03A7> " GREEK CAPITAL LETTER CHI
+C <char-0x03A8> " GREEK CAPITAL LETTER PSI
+V <char-0x03A9> " GREEK CAPITAL LETTER OMEGA
+a <char-0x03B1> " GREEK SMALL LETTER ALPHA
+b <char-0x03B2> " GREEK SMALL LETTER BETA
+g <char-0x03B3> " GREEK SMALL LETTER GAMMA
+d <char-0x03B4> " GREEK SMALL LETTER DELTA
+e <char-0x03B5> " GREEK SMALL LETTER EPSILON
+z <char-0x03B6> " GREEK SMALL LETTER ZETA
+h <char-0x03B7> " GREEK SMALL LETTER ETA
+u <char-0x03B8> " GREEK SMALL LETTER THETA
+i <char-0x03B9> " GREEK SMALL LETTER IOTA
+k <char-0x03BA> " GREEK SMALL LETTER KAPPA
+l <char-0x03BB> " GREEK SMALL LETTER LAMDA
+m <char-0x03BC> " GREEK SMALL LETTER MU
+n <char-0x03BD> " GREEK SMALL LETTER NU
+j <char-0x03BE> " GREEK SMALL LETTER XI
+o <char-0x03BF> " GREEK SMALL LETTER OMICRON
+p <char-0x03C0> " GREEK SMALL LETTER PI
+r <char-0x03C1> " GREEK SMALL LETTER RHO
+w <char-0x03C2> " GREEK SMALL LETTER FINAL SIGMA
+s <char-0x03C3> " GREEK SMALL LETTER SIGMA
+t <char-0x03C4> " GREEK SMALL LETTER TAU
+y <char-0x03C5> " GREEK SMALL LETTER UPSILON
+f <char-0x03C6> " GREEK SMALL LETTER PHI
+x <char-0x03C7> " GREEK SMALL LETTER CHI
+c <char-0x03C8> " GREEK SMALL LETTER PSI
+v <char-0x03C9> " GREEK SMALL LETTER OMEGA
+"
+"COMBINED GREEK LETTERS WITH DIACRITICS
+"
+;A <char-0x0386> " GREEK CAPITAL LETTER ALPHA WITH TONOS
+;E <char-0x0388> " GREEK CAPITAL LETTER EPSILON WITH TONOS
+;H <char-0x0389> " GREEK CAPITAL LETTER ETA WITH TONOS
+;I <char-0x038A> " GREEK CAPITAL LETTER IOTA WITH TONOS
+;O <char-0x038C> " GREEK CAPITAL LETTER OMICRON WITH TONOS
+;Y <char-0x038E> " GREEK CAPITAL LETTER UPSILON WITH TONOS
+;V <char-0x038F> " GREEK CAPITAL LETTER OMEGA WITH TONOS
+:;i <char-0x0390> " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+;:i <char-0x0390> " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+:`i <char-0x1FD2> " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND baria
+`:i <char-0x1FD2> " GREEK SMALL LETTER IOTA WITH DIALYTIKA AND baria
+:I <char-0x03AA> " GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+:Y <char-0x03AB> " GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+;a <char-0x03AC> " GREEK SMALL LETTER ALPHA WITH TONOS
+;e <char-0x03AD> " GREEK SMALL LETTER EPSILON WITH TONOS
+;h <char-0x03AE> " GREEK SMALL LETTER ETA WITH TONOS
+;i <char-0x03AF> " GREEK SMALL LETTER IOTA WITH TONOS
+:;y <char-0x03B0> " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+;:y <char-0x03B0> " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+:`y <char-0x1FE2> " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND baria
+`:y <char-0x1FE2> " GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND baria
+:i <char-0x03CA> " GREEK SMALL LETTER IOTA WITH DIALYTIKA
+:y <char-0x03CB> " GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+;o <char-0x03CC> " GREEK SMALL LETTER OMICRON WITH TONOS
+;y <char-0x03CD> " GREEK SMALL LETTER UPSILON WITH TONOS
+;v <char-0x03CE> " GREEK SMALL LETTER OMEGA WITH TONOS
+
+
+
+"
+" letters with Varia:
+"
+`A <char-0x1FBA> " GREEK CAPITAL LETTER ALPHA WITH VARIA
+`E <char-0x1FC8> " GREEK CAPITAL LETTER ALPHA WITH VARIA
+`H <char-0x1FCA> " GREEK CAPITAL LETTER ETA WITH VARIA
+`I <char-0x1FDA> " GREEK CAPITAL LETTER IOTA WITH VARIA
+`O <char-0x1FF8> " GREEK CAPITAL LETTER ALPHA WITH VARIA
+`Y <char-0x1FEA> " GREEK CAPITAL LETTER ALPHA WITH VARIA
+`V <char-0x1FFA> " GREEK CAPITAL LETTER OMEGA WITH VARIA
+`a <char-0x1F70> " GREEK SMALL LETTER ALPHA WITH VARIA
+`e <char-0x1F72> " GREEK SMALL LETTER ALPHA WITH VARIA
+`h <char-0x1F74> " GREEK SMALL LETTER ETA WITH VARIA
+`i <char-0x1F76> " GREEK SMALL LETTER IOTA WITH VARIA
+`o <char-0x1F78> " GREEK SMALL LETTER ALPHA WITH VARIA
+`y <char-0x1F7A> " GREEK SMALL LETTER ALPHA WITH VARIA
+`v <char-0x1F7C> " GREEK SMALL LETTER OMEGA WITH VARIA
+"
+" letters with Oxia:
+"
+;A <char-0x1FBB> " GREEK CAPITAL LETTER ALPHA WITH OXIA
+;E <char-0x1FC9> " GREEK CAPITAL LETTER EPSILON WITH OXIA
+;H <char-0x1FCB> " GREEK CAPITAL LETTER ETA WITH OXIA
+;I <char-0x1FDB> " GREEK CAPITAL LETTER IOTA WITH OXIA
+;O <char-0x1FF9> " GREEK CAPITAL LETTER OMICRON WITH OXIA
+;Y <char-0x1FEB> " GREEK CAPITAL LETTER UPSILON WITH OXIA
+;V <char-0x1FFB> " GREEK CAPITAL LETTER OMEGA WITH OXIA
+;a <char-0x1F71> " GREEK SMALL LETTER ALPHA WITH OXIA
+;e <char-0x1F73> " GREEK SMALL LETTER EPSILON WITH OXIA
+;h <char-0x1F75> " GREEK SMALL LETTER ETA WITH OXIA
+;i <char-0x1F77> " GREEK SMALL LETTER IOTA WITH OXIA
+;o <char-0x1F79> " GREEK SMALL LETTER OMICRON WITH OXIA
+;y <char-0x1F7B> " GREEK SMALL LETTER UPSILON WITH OXIA
+;v <char-0x1F7D> " GREEK SMALL LETTER OMEGA WITH OXIA
+"
+"
+" This area covers 0x1F00-0x1F6F
+"
+" letters with Psili:
+"
+>A <char-0x1F08> " GREEK CAPITAL LETTER ALPHA WITH PSILI
+>E <char-0x1F18> " GREEK CAPITAL LETTER EPSILON WITH PSILI
+>H <char-0x1F28> " GREEK CAPITAL LETTER ETA WITH PSILI
+>I <char-0x1F38> " GREEK CAPITAL LETTER IOTA WITH PSILI
+>O <char-0x1F48> " GREEK CAPITAL LETTER OMICRON WITH PSILI
+>Y <char-0x1F58> " GREEK CAPITAL LETTER UPSILON WITH PSILI
+>V <char-0x1F68> " GREEK CAPITAL LETTER OMEGA WITH PSILI
+>a <char-0x1F00> " GREEK SMALL LETTER ALPHA WITH PSILI
+>e <char-0x1F10> " GREEK SMALL LETTER EPSILON WITH PSILI
+>h <char-0x1F20> " GREEK SMALL LETTER ETA WITH PSILI
+>i <char-0x1F30> " GREEK SMALL LETTER IOTA WITH PSILI
+>o <char-0x1F40> " GREEK SMALL LETTER OMICRON WITH PSILI
+>y <char-0x1F50> " GREEK SMALL LETTER UPSILON WITH PSILI
+>v <char-0x1F60> " GREEK SMALL LETTER OMEGA WITH PSILI
+
+"
+" Letters with Dasia:
+"
+<A <char-0x1F09> " GREEK CAPITAL LETTER ALPHA WITH DASIA
+<E <char-0x1F19> " GREEK CAPITAL LETTER EPSILON WITH DASIA
+<H <char-0x1F29> " GREEK CAPITAL LETTER ETA WITH DASIA
+<I <char-0x1F39> " GREEK CAPITAL LETTER IOTA WITH DASIA
+<O <char-0x1F49> " GREEK CAPITAL LETTER OMICRON WITH DASIA
+<Y <char-0x1F59> " GREEK CAPITAL LETTER UPSILON WITH DASIA
+<V <char-0x1F69> " GREEK CAPITAL LETTER OMEGA WITH DASIA
+<a <char-0x1F01> " GREEK SMALL LETTER ALPHA WITH DASIA
+<e <char-0x1F11> " GREEK SMALL LETTER EPSILON WITH DASIA
+<h <char-0x1F21> " GREEK SMALL LETTER ETA WITH DASIA
+<i <char-0x1F31> " GREEK SMALL LETTER IOTA WITH DASIA
+<o <char-0x1F41> " GREEK SMALL LETTER OMICRON WITH DASIA
+<y <char-0x1F51> " GREEK SMALL LETTER UPSILON WITH DASIA
+<v <char-0x1F61> " GREEK SMALL LETTER OMEGA WITH DASIA
+"
+" letters with Psili and Varia:
+"
+>`A <char-0x1F0A> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+>`E <char-0x1F1A> " GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+>`H <char-0x1F2A> " GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+>`I <char-0x1F3A> " GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+>`O <char-0x1F4A> " GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+>`Y <char-0x1F5A> " GREEK CAPITAL LETTER UPSILON WITH PSILI AND VARIA
+>`V <char-0x1F6A> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+>`a <char-0x1F02> " GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+>`e <char-0x1F12> " GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+>`h <char-0x1F22> " GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+>`i <char-0x1F32> " GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+>`o <char-0x1F42> " GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+>`y <char-0x1F52> " GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+>`v <char-0x1F62> " GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+"
+" Letters with Dasia and Varia:
+"
+<`A <char-0x1F0B> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+<`E <char-0x1F1B> " GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+<`H <char-0x1F2B> " GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+<`I <char-0x1F3B> " GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+<`O <char-0x1F4B> " GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+<`Y <char-0x1F5B> " GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+<`V <char-0x1F6B> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+<`a <char-0x1F03> " GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+<`e <char-0x1F13> " GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+<`h <char-0x1F23> " GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+<`i <char-0x1F33> " GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+<`o <char-0x1F43> " GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+<`y <char-0x1F53> " GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+<`v <char-0x1F63> " GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+"
+" letters with Psili and Oxia:
+"
+>;A <char-0x1F0C> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+>;E <char-0x1F1C> " GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+>;H <char-0x1F2C> " GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+>;I <char-0x1F3C> " GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+>;O <char-0x1F4C> " GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+>;Y <char-0x1F5C> " GREEK CAPITAL LETTER UPSILON WITH PSILI AND OXIA
+>;V <char-0x1F6C> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+>;a <char-0x1F04> " GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+>;e <char-0x1F14> " GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+>;h <char-0x1F24> " GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+>;i <char-0x1F34> " GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+>;o <char-0x1F44> " GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+>;y <char-0x1F54> " GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+>;v <char-0x1F64> " GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+"
+" Letters with Dasia and Oxia:
+"
+<;A <char-0x1F0D> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+<;E <char-0x1F1D> " GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+<;H <char-0x1F2D> " GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+<;I <char-0x1F3D> " GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+<;O <char-0x1F4D> " GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+<;Y <char-0x1F5D> " GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+<;V <char-0x1F6D> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+<;a <char-0x1F05> " GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+<;e <char-0x1F15> " GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+<;h <char-0x1F25> " GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+<;i <char-0x1F35> " GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+<;o <char-0x1F45> " GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+<;y <char-0x1F55> " GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+<;v <char-0x1F65> " GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+"
+" letters with Psili and Perispomeni:
+"
+>~A <char-0x1F0E> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+>~E <char-0x1F1E> " GREEK CAPITAL LETTER EPSILON WITH PSILI AND PERISPOMENI
+>~H <char-0x1F2E> " GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+>~I <char-0x1F3E> " GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+>~O <char-0x1F4E> " GREEK CAPITAL LETTER OMICRON WITH PSILI AND PERISPOMENI
+>~Y <char-0x1F5E> " GREEK CAPITAL LETTER UPSILON WITH PSILI AND PERISPOMENI
+>~V <char-0x1F6E> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+>~a <char-0x1F06> " GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+>~e <char-0x1F16> " GREEK SMALL LETTER EPSILON WITH PSILI AND PERISPOMENI
+>~h <char-0x1F26> " GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+>~i <char-0x1F36> " GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+>~o <char-0x1F46> " GREEK SMALL LETTER OMICRON WITH PSILI AND PERISPOMENI
+>~y <char-0x1F56> " GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+>~v <char-0x1F66> " GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+"
+" Letters with Dasia and Perispomeni:
+"
+<~A <char-0x1F0F> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<~E <char-0x1F1F> " GREEK CAPITAL LETTER EPSILON WITH DASIA AND PERISPOMENI
+<~H <char-0x1F2F> " GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+<~I <char-0x1F3F> " GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+<~O <char-0x1F4F> " GREEK CAPITAL LETTER OMICRON WITH DASIA AND PERISPOMENI
+<~Y <char-0x1F5F> " GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<~V <char-0x1F6F> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+<~a <char-0x1F07> " GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+<~e <char-0x1F17> " GREEK SMALL LETTER EPSILON WITH DASIA AND PERISPOMENI
+<~h <char-0x1F27> " GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+<~i <char-0x1F37> " GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+<~o <char-0x1F47> " GREEK SMALL LETTER OMICRON WITH DASIA AND PERISPOMENI
+<~y <char-0x1F57> " GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+<~v <char-0x1F67> " GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+"
+"
+"
+" letters with Ypogegrammeni/Prosgegrammeni:
+"
+A| <char-0x1FBC> " GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+H| <char-0x1FCC> " GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+V| <char-0x1FFC> " GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+a| <char-0x1FB3> " GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+h| <char-0x1FC3> " GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+v| <char-0x1FF3> " GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+"
+"
+" This area covers 0x1F80-0x1FAF
+"
+" letters with Psili and Ypogegrammeni/Prosgegrammeni:
+"
+>A| <char-0x1F88> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND
+ " PROSGEGRAMMENI
+>H| <char-0x1F98> " GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+>V| <char-0x1FA8> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND
+ " PROSGEGRAMMENI
+>a| <char-0x1F80> " GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+>h| <char-0x1F90> " GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+>v| <char-0x1FA0> " GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+"
+" letters with Dasia and Ypogegrammeni/Prosgegrammeni:
+"
+<A| <char-0x1F89> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND
+ " PROSGEGRAMMENI
+<H| <char-0x1F99> " GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+<V| <char-0x1FA9> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND
+ " PROSGEGRAMMENI
+<a| <char-0x1F81> " GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+<h| <char-0x1F91> " GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+<v| <char-0x1FA1> " GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+"
+" letters with Psili and Varia and Ypogegrammeni/Prosgegrammeni:
+"
+>`A| <char-0x1F8A> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND
+ " PROSGEGRAMMENI
+>`H| <char-0x1F9A> " GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND
+ " PROSGEGRAMMENI
+>`V| <char-0x1FAA> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND
+ " PROSGEGRAMMENI
+>`a| <char-0x1F82> " GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND
+ " YPOGEGRAMMENI
+>`h| <char-0x1F92> " GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND
+ " YPOGEGRAMMENI
+>`v| <char-0x1FA2> " GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND
+ " YPOGEGRAMMENI
+"
+" letters with Dasia and Varia and Ypogegrammeni/Prosgegrammeni:
+"
+<`A| <char-0x1F8B> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND
+ " PROSGEGRAMMENI
+<`H| <char-0x1F9B> " GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND
+ " PROSGEGRAMMENI
+<`V| <char-0x1FAB> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND
+ " PROSGEGRAMMENI
+<`a| <char-0x1F83> " GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND
+ " YPOGEGRAMMENI
+<`h| <char-0x1F93> " GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND
+ " YPOGEGRAMMENI
+<`v| <char-0x1FA3> " GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND
+ " YPOGEGRAMMENI
+"
+" letters with Psili and Oxia and Ypogegrammeni/Prosgegrammeni:
+"
+>;A| <char-0x1F8C> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND
+ " PROSGEGRAMMENI
+>;H| <char-0x1F9C> " GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND
+ " PROSGEGRAMMENI
+>;V| <char-0x1FAC> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND
+ " PROSGEGRAMMENI
+>;a| <char-0x1F84> " GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND
+ " YPOGEGRAMMENI
+>;h| <char-0x1F94> " GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND
+ " YPOGEGRAMMENI
+>;v| <char-0x1FA4> " GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND
+ " YPOGEGRAMMENI
+"
+" letters with Dasia and Oxia and Ypogegrammeni/Prosgegrammeni:
+"
+<;A| <char-0x1F8D> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND
+ " PROSGEGRAMMENI
+<;H| <char-0x1F9D> " GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND
+ " PROSGEGRAMMENI
+<;V| <char-0x1FAD> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND
+ " PROSGEGRAMMENI
+<;a| <char-0x1F85> " GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND
+ " YPOGEGRAMMENI
+<;h| <char-0x1F95> " GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND
+ " YPOGEGRAMMENI
+<;v| <char-0x1FA5> " GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND
+ " YPOGEGRAMMENI
+"
+" letters with Psili and Perispomeni and Ypogegrammeni/Prosgegrammeni:
+"
+>~A| <char-0x1F8E> " GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ " AND PROSGEGRAMMENI
+>~H| <char-0x1F9E> " GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+ " PERISPOMENI PROSGEGRAMMENI
+>~V| <char-0x1FAE> " GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ " AND PROSGEGRAMMENI
+>~a| <char-0x1F86> " GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ " AND YPOGEGRAMMENI
+>~h| <char-0x1F96> " GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND
+ " YPOGEGRAMMENI
+>~v| <char-0x1FA6> " GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ " AND YPOGEGRAMMENI
+"
+" letters with Dasia and Perispomeni and Ypogegrammeni/Prosgegrammeni:
+"
+<~A| <char-0x1F8F> " GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ " AND PROSGEGRAMMENI
+<~H| <char-0x1F9F> " GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ " AND PROSGEGRAMMENI
+<~V| <char-0x1FAF> " GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ " AND PROSGEGRAMMENI
+<~a| <char-0x1F87> " GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ " AND YPOGEGRAMMENI
+<~h| <char-0x1F97> " GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND
+ " YPOGEGRAMMENI
+<~v| <char-0x1FA7> " GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ " AND YPOGEGRAMMENI
+"
+" letters with Perispomeni:
+"
+~a <char-0x1FB6> " GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+~h <char-0x1FC6> " GREEK SMALL LETTER ETA WITH PERISPOMENI
+~i <char-0x1FD6> " GREEK SMALL LETTER IOTA WITH PERISPOMENI
+~y <char-0x1FE6> " GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+~v <char-0x1FF6> " GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+"
+" letters with Perispomeni and Ypogegrammeni:
+"
+~a| <char-0x1FB7> " GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND
+ " YPOGEGRAMMENI
+~h| <char-0x1FC7> " GREEK SMALL LETTER ETA WITH PERISPOMENI AND
+ " YPOGEGRAMMENI
+~v| <char-0x1FF7> " GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND
+ " YPOGEGRAMMENI
+"
+"
+" letters with Varia and Ypogegrammeni:
+"
+`a| <char-0x1FB2> " GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+`h| <char-0x1FC2> " GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+`v| <char-0x1FF2> " GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+"
+" letters with Oxia and Ypogegrammeni:
+"
+;a| <char-0x1FB4> " GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+;h| <char-0x1FC4> " GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+;v| <char-0x1FF4> " GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+"
+"
+" Combining/Nonspacing comma above (0x0313) instead of Psili:
+"
+>, <char-0x0313> " COMBINING COMMA ABOVE
+"
+" Combining/Nonspacing reversed comma above (0x0314) instead of Dasia:
+"
+<, <char-0x0314> " COMBINING REVERSED COMMA ABOVE
+"
+"
+" Greek Quotes if your keyboard supports them
+´ <char-0x201C> " QUOTEDBLLEFT
+ª <char-0x201D> " QUOTEDBLRIGHT
+"
+"
+"
+
+
+" APPENDIX A - Additional characters
+"
+"
+;# <char-0x0374> " GREEK NUMERAL SIGN
+;## <char-0x0375> " GREEK LOWER NUMERAL SIGN
+|| <char-0x037A> " GREEK YPOGEGRAMMENI
+;b <char-0x03D0> " GREEK BETA SYMBOL
+;u <char-0x03D1> " GREEK THETA SYMBOL
+" <char-0x03D2> " GREEK UPSILON WITH HOOK SYMBOL
+" <char-0x03D3> " GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+" <char-0x03D4> " GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+;f <char-0x03D5> " GREEK PHI SYMBOL
+;p <char-0x03D6> " GREEK PI SYMBOL
+#ST <char-0x03DA> " GREEK LETTER STIGMA
+#G <char-0x03DC> " GREEK LETTER DIGAMMA
+#Q <char-0x03DE> " GREEK LETTER KOPPA
+#SP <char-0x03E0> " GREEK LETTER SAMPI
+;k <char-0x03F0> " GREEK KAPPA SYMBOL
+;r <char-0x03F1> " GREEK RHO SYMBOL
+" <char-0x03F2> " GREEK LUNATE SIGMA SYMBOL
+" <char-0x03F3> " GREEK LETTER YOT
+
+:~ <char-0x1FC1> "dialytika peripswmevn
+~: <char-0x1FC1> "dialytika peripswmevn
+
+:~i <char-0x1FD7> "iota dialytika perispomeni
+~:i <char-0x1FD7> "iota dialytika perispomeni
+
+:~y <char-0x1FE7> "upsilon dialytika perispomeni
+~:y <char-0x1FE7> "upsilon dialytika perispomeni
+
+-a <char-0x1FB1> "alpha macron
+-i <char-0x1FD1> "iota macron
+-y <char-0x1FE1> "upsilon macron
+-A <char-0x1FB9> "Alpha macron
+-I <char-0x1FD9> "Iota macron
+-Y <char-0x1FE9> "Upsilon macron
+^a <char-0x1FB0> "alpha braxy
+^i <char-0x1FD0> "iota braxy
+^y <char-0x1FE0> "upsilon braxy
+^A <char-0x1FB8> "alpha braxy
+^I <char-0x1FD8> "iota braxy
+^Y <char-0x1FE8> "upsilon braxy
+>r <char-0x1FE4> "rho psili
+<r <char-0x1FE5> "rho dasia
+
+<R <char-0x1FEC> "Rho dasia
+
+" More Symbols
+&& <char-0x03D7> "Greek kai
+D$ <char-0x20AF> "Drachma symbol
+#Q <char-0x03D8> "Archaic Qoppa
+#q <char-0x03D9> "Archaic qoppa
+;U <char-0x03F4> "Capital Theta symbol
+"!e <char-0x03F5> "Lunate epsilon
+"!E <char-0x03F6> "Lunate Epsilon
diff --git a/runtime/keymap/hebrew.vim b/runtime/keymap/hebrew.vim
new file mode 100644
index 000000000..0928fca48
--- /dev/null
+++ b/runtime/keymap/hebrew.vim
@@ -0,0 +1,16 @@
+let encoding = &enc
+if encoding == 'latin1'
+ if has("unix")
+ let encoding = 'iso-8859-8'
+ else
+ let encoding = 'cp1255'
+ endif
+endif
+
+if encoding == 'utf-8'
+ source <sfile>:p:h/hebrew_utf-8.vim
+elseif encoding == 'cp1255'
+ source <sfile>:p:h/hebrew_cp1255.vim
+else
+ source <sfile>:p:h/hebrew_iso-8859-8.vim
+endif
diff --git a/runtime/keymap/hebrew_cp1255.vim b/runtime/keymap/hebrew_cp1255.vim
new file mode 100644
index 000000000..67a8ca773
--- /dev/null
+++ b/runtime/keymap/hebrew_cp1255.vim
@@ -0,0 +1,62 @@
+" add in the vowel points, known as 'niqud', which are present in
+" CP1255: Note: there are several 'standards' for placement of the vowel
+" points, and I ignored all of them. Since we can input English by simply
+" pressing Ctrl-^ and eliminating this map, I saw no reason to try to use
+" exotic key locations. If you don't like it, that's just too bad :-)
+let b:keymap_name = "heb"
+loadkeymap
+a <char-249> " ש - shin
+b <char-240> " ×  - nun
+c <char-225> " ב - bet
+d <char-226> " ×’ - gimel
+e <char-247> " ק - qof
+f <char-235> " ×› - kaf
+g <char-242> " ×¢ - ayin
+h <char-233> " ×™ - yod
+i <char-239> " ן - final nun
+j <char-231> " ×— - het
+k <char-236> " ל - lamed
+l <char-234> " ך - final kaf
+m <char-246> " צ - tsadi
+n <char-238> " מ - mem
+o <char-237> " × - final mem
+p <char-244> " פ - pe
+q / " / - slash
+r <char-248> " ר - resh
+s <char-227> " ד - dalet
+t <char-224> " × - alef
+u <char-229> " ו - vav
+v <char-228> " ×” - he
+w ' " ' - single-quote
+x <char-241> " ס - samekh
+y <char-232> " ט - tet
+z <char-230> " ×– - zayin
+, <char-250> " ת - tav
+. <char-245> " ×¥ - final tsadi
+; <char-243> " ×£ - final pe
+' , " , - comma
+/ . " . - period
+` ; " ; - semicolon
+" vowels:
+A: <Char-192> " sheva
+HE <Char-193> " hataf segol
+HA <Char-194> " hataf patah
+HO <Char-195> " hataf qamats
+I <Char-196> " hiriq
+AY <Char-197> " tsere
+E <Char-198> " segol
+AA <Char-199> " patah
+AO <Char-200> " qamats
+O <Char-201> " holam
+U <Char-203> " qubuts
+D <Char-204> " dagesh
+]T <Char-205> " meteg
+]Q <Char-206> " maqaf
+]R <Ö¼Char-207> " rafe
+]p <Char-208> " paseq
+SR <Char-209> " shin-dot
+SL <Char-210> " sin-dot
+]P <Char-211> " sof-pasuq
+VV <Char-212> " double-vav
+VY <Char-213> " vav-yod
+YY <Char-214> " yod-yod
diff --git a/runtime/keymap/hebrew_iso-8859-8.vim b/runtime/keymap/hebrew_iso-8859-8.vim
new file mode 100644
index 000000000..eab3084d5
--- /dev/null
+++ b/runtime/keymap/hebrew_iso-8859-8.vim
@@ -0,0 +1,41 @@
+" Vim Keymap file for hebrew
+" Maintainer : Ron Aaron <ron@ronware.org>
+" Last Updated: Wed 28 Feb 2001 21:28:51
+" This is the standard Israeli keyboard layout
+
+" Use this short name in the status line.
+let b:keymap_name = "heb"
+
+loadkeymap
+a <char-249> " ù - shin
+b <char-240> " ð - nun
+c <char-225> " á - bet
+d <char-226> " â - gimel
+e <char-247> " ÷ - qof
+f <char-235> " ë - kaf
+g <char-242> " ò - ayin
+h <char-233> " é - yod
+i <char-239> " ï - final nun
+j <char-231> " ç - het
+k <char-236> " ì - lamed
+l <char-234> " ê - final kaf
+m <char-246> " ö - tsadi
+n <char-238> " î - mem
+o <char-237> " í - final mem
+p <char-244> " ô - pe
+q / " / - slash
+r <char-248> " ø - resh
+s <char-227> " ã - dalet
+t <char-224> " à - alef
+u <char-229> " å - vav
+v <char-228> " ä - he
+w ' " ' - single-quote
+x <char-241> " ñ - samekh
+y <char-232> " è - tet
+z <char-230> " æ - zayin
+, <char-250> " ú - tav
+. <char-245> " õ - final tsadi
+; <char-243> " ó - final pe
+' , " , - comma
+/ . " . - period
+` ; " ; - semicolon
diff --git a/runtime/keymap/hebrew_utf-8.vim b/runtime/keymap/hebrew_utf-8.vim
new file mode 100644
index 000000000..63438845a
--- /dev/null
+++ b/runtime/keymap/hebrew_utf-8.vim
@@ -0,0 +1,128 @@
+" Vim Keymap file for hebrew
+" Maintainer : Ron Aaron <ron@ronware.org>
+" Last Updated: Wed 28 Feb 2001 21:28:51
+" This is the standard Israeli keyboard layout with (my nonstandard locations
+" for) niqud, for utf:
+
+" Use this short name in the status line.
+let b:keymap_name = "heb"
+loadkeymap
+a <char-0x5e9> " ש - shin
+b <char-0x5e0> " ×  - nun
+c <char-0x5d1> " ב - bet
+d <char-0x5d2> " ×’ - gimel
+e <char-0x5e7> " ק - qof
+f <char-0x5db> " ×› - kaf
+g <char-0x5e2> " ×¢ - ayin
+h <char-0x5d9> " ×™ - yod
+i <char-0x5df> " ן - final nun
+j <char-0x5d7> " ×— - het
+k <char-0x5dc> " ל - lamed
+l <char-0x5da> " ך - final kaf
+m <char-0x5e6> " צ - tsadi
+n <char-0x5de> " מ - mem
+o <char-0x5dd> " × - final mem
+p <char-0x5e4> " פ - pe
+q / " / - slash
+r <char-0x5e8> " ר - resh
+s <char-0x5d3> " ד - dalet
+t <char-0x5d0> " × - alef
+u <char-0x5d5> " ו - vav
+v <char-0x5d4> " ×” - he
+w ' " ' - single-quote
+x <char-0x5e1> " ס - samekh
+y <char-0x5d8> " ט - tet
+z <char-0x5d6> " ×– - zayin
+, <char-0x5ea> " ת - tav
+. <char-0x5e5> " ×¥ - final tsadi
+; <char-0x5e3> " ×£ - final pe
+' , " , - comma
+/ . " . - period
+` ; " ; - semicolon
+A: <Char-0x5b0> " sheva
+HE <Char-0x5b1> " hataf segol
+HA <Char-0x5b2> " hataf patah
+HO <Char-0x5b3> " hataf qamats
+I <Char-0x5b4> " hiriq
+AY <Char-0x5b5> " tsere
+E <Char-0x5b6> " segol
+AA <Char-0x5b7> " patah
+AO <Char-0x5b8> " qamats
+O <Char-0x5b9> " holam
+U <Char-0x5bb> " qubuts
+D <Char-0x5bc> " dagesh
+]T <Char-0x5bd> " meteg
+]Q <Char-0x5be> " maqaf
+]R <Char-0x5bf> " rafe
+]p <Char-0x5c0> " paseq
+SR <Char-0x5c1> " shin-dot
+SL <Char-0x5c2> " sin-dot
+]P <Char-0x5c3> " sof-pasuq
+VV <Char-0x5f0> " double-vav
+VY <Char-0x5f1> " vav-yod
+YY <Char-0x5f2> " yod-yod
+" cantillation:
+C: <Char-0x591> " etnahta
+Cs <Char-0x592> " segol
+CS <Char-0x593> " shalshelet
+Cz <Char-0x594> " zaqef qatan
+CZ <Char-0x595> " zaqef gadol
+Ct <Char-0x596> " tipeha
+Cr <Char-0x597> " revia
+Cq <Char-0x598> " zarqa
+Cp <Char-0x599> " pashta
+C! <Char-0x59a> " yetiv
+Cv <Char-0x59b> " tevir
+Cg <Char-0x59c> " geresh
+C* <Char-0x59d> " geresh qadim
+CG <Char-0x59e> " gershayim
+CP <Char-0x59f> " qarnei-parah
+Cy <Char-0x5aa> " yerach-ben-yomo
+Co <Char-0x5ab> " ole
+Ci <Char-0x5ac> " iluy
+Cd <Char-0x5ad> " dehi
+Cn <Char-0x5ae> " zinor
+CC <Char-0x5af> " masora circle
+X` <Char-0xfb20> " Alternative `ayin
+X' <Char-0xfb21> " Alternative 'alef
+X-d <Char-0xfb22> " Alternative dalet
+X-h <Char-0xfb23> " Alternative he
+X-k <Char-0xfb24> " Alternative kaf
+X-l <Char-0xfb25> " Alternative lamed
+X-m <Char-0xfb26> " Alternative mem-sofit
+X-r <Char-0xfb27> " Alternative resh
+X-t <Char-0xfb28> " Alternative tav
+X-+ <Char-0xfb29> " Alternative plus
+XW <Char-0xfb2a> " shin+shin-dot
+Xw <Char-0xfb2b> " shin+sin-dot
+X..W <Char-0xfb2c> " shin+shin-dot+dagesh
+X..w <Char-0xfb2d> " shin+sin-dot+dagesh
+XA <Char-0xfb2e> " alef+patah
+XO <Char-0xfb2f> " alef+qamats
+XI <Char-0xfb30> " alef+hiriq (mapiq)
+X.b <Char-0xfb31> " bet+dagesh
+X.g <Char-0xfb32> " gimel+dagesh
+X.d <Char-0xfb33> " dalet+dagesh
+X.h <Char-0xfb34> " he+dagesh
+Xu <Char-0xfb35> " vav+dagesh
+X.z <Char-0xfb36> " zayin+dagesh
+X.T <Char-0xfb38> " tet+dagesh
+X.y <Char-0xfb39> " yud+dagesh
+X.K <Char-0xfb3a> " kaf sofit+dagesh
+X.k <Char-0xfb3b> " kaf+dagesh
+X.l <Char-0xfb3c> " lamed+dagesh
+X.m <Char-0xfb3e> " mem+dagesh
+X.n <Char-0xfb40> " nun+dagesh
+X.s <Char-0xfb41> " samech+dagesh
+X.P <Char-0xfb43> " pe sofit+dagesh
+X.p <Char-0xfb44> " pe+dagesh
+X.x <Char-0xfb46> " tsadi+dagesh
+X.q <Char-0xfb47> " qof+dagesh
+X.r <Char-0xfb48> " resh+dagesh
+X.w <Char-0xfb49> " shin+dagesh
+X.t <Char-0xfb4a> " tav+dagesh
+Xo <Char-0xfb4b> " vav+holam
+XRb <Char-0xfb4c> " bet+rafe
+XRk <Char-0xfb4d> " kaf+rafe
+XRp <Char-0xfb4e> " pe+rafe
+Xal <Char-0xfb4f> " alef-lamed
diff --git a/runtime/keymap/hebrewp.vim b/runtime/keymap/hebrewp.vim
new file mode 100644
index 000000000..a87cdc735
--- /dev/null
+++ b/runtime/keymap/hebrewp.vim
@@ -0,0 +1,16 @@
+let encoding = &enc
+if encoding == 'latin1'
+ if has("unix")
+ let encoding = 'iso-8859-8'
+ else
+ let encoding = 'cp1255'
+ endif
+endif
+
+if encoding == 'utf-8'
+ source <sfile>:p:h/hebrewp_utf-8.vim
+elseif encoding == 'cp1255'
+ source <sfile>:p:h/hebrewp_cp1255.vim
+else
+ source <sfile>:p:h/hebrewp_iso-8859-8.vim
+endif
diff --git a/runtime/keymap/hebrewp_cp1255.vim b/runtime/keymap/hebrewp_cp1255.vim
new file mode 100644
index 000000000..990f90859
--- /dev/null
+++ b/runtime/keymap/hebrewp_cp1255.vim
@@ -0,0 +1,58 @@
+" codepage 1255 on Windows is equal to ISO 8859-8 but it
+" adds in the vowel points, known as 'niqud', which are present in
+" CP1255: Note: there are several 'standards' for placement of the vowel
+" points, and I ignored all of them. Since we can input English by simply
+" pressing Ctrl-^ and eliminating this map, I saw no reason to try to use
+" exotic key locations. If you don't like it, that's just too bad :-)
+let b:keymap_name = "hebp"
+loadkeymap
+K <char-234> " final kaf
+M <char-237> " final mem
+N <char-239> " final nun
+P <char-243> " final pe
+T <char-232> " tet
+X <char-245> " final tsadi
+a <char-224> " alef
+b <char-225> " bet
+d <char-227> " dalet
+g <char-226> " gimel
+h <char-228> " he
+j <char-231> " het
+k <char-235> " kaf
+l <char-236> " lamed
+m <char-238> " mem
+n <char-240> " nun
+s <char-241> " samekh
+p <char-244> " pe
+q <char-247> " qof
+r <char-248> " resh
+t <char-250> " tav
+u <char-242> " ayin
+v <char-229> " vav
+w <char-249> " shin
+x <char-246> " tsadi
+y <char-233> " yod
+z <char-230> " zayin
+" vowels:
+A: <Char-192> " sheva
+HE <Char-193> " hataf segol
+HA <Char-194> " hataf patah
+HO <Char-195> " hataf qamats
+I <Char-196> " hiriq
+AY <Char-197> " tsere
+E <Char-198> " segol
+AA <Char-199> " patah
+AO <Char-200> " qamats
+O <Char-201> " holam
+U <Char-203> " qubuts
+D <Char-204> " dagesh
+]T <Char-205> " meteg
+]Q <Char-206> " maqaf
+]R <ÌChar-207> " rafe
+]p <Char-208> " paseq
+SR <Char-209> " shin-dot
+SL <Char-210> " sin-dot
+]P <Char-211> " sof-pasuq
+VV <Char-212> " double-vav
+VY <Char-213> " vav-yod
+YY <Char-214> " yod-yod
diff --git a/runtime/keymap/hebrewp_iso-8859-8.vim b/runtime/keymap/hebrewp_iso-8859-8.vim
new file mode 100644
index 000000000..d4b9714d2
--- /dev/null
+++ b/runtime/keymap/hebrewp_iso-8859-8.vim
@@ -0,0 +1,36 @@
+" Vim Keymap file for hebrew
+" Maintainer : Ron Aaron <ron@ronware.org>
+" Last Updated: Sun 10 Feb 2002 11:50:56
+" This is my version of a phonetic Hebrew
+
+" Use this short name in the status line.
+let b:keymap_name = "hebp"
+
+loadkeymap
+K <char-234> " final kaf
+M <char-237> " final mem
+N <char-239> " final nun
+P <char-243> " final pe
+T <char-232> " tet
+X <char-245> " final tsadi
+a <char-224> " alef
+b <char-225> " bet
+d <char-227> " dalet
+g <char-226> " gimel
+h <char-228> " he
+j <char-231> " het
+k <char-235> " kaf
+l <char-236> " lamed
+m <char-238> " mem
+n <char-240> " nun
+s <char-241> " samekh
+p <char-244> " pe
+q <char-247> " qof
+r <char-248> " resh
+t <char-250> " tav
+u <char-242> " ayin
+v <char-229> " vav
+w <char-249> " shin
+x <char-246> " tsadi
+y <char-233> " yod
+z <char-230> " zayin
diff --git a/runtime/keymap/hebrewp_utf-8.vim b/runtime/keymap/hebrewp_utf-8.vim
new file mode 100644
index 000000000..dded60e36
--- /dev/null
+++ b/runtime/keymap/hebrewp_utf-8.vim
@@ -0,0 +1,122 @@
+" Vim Keymap file for hebrew
+" Maintainer : Ron Aaron <ron@ronware.org>
+" Last Updated: Thu 08 Mar 2001 13:49:01
+" This is my version of a phonetic Hebrew
+
+" Use this short name in the status line.
+let b:keymap_name = "hebp"
+loadkeymap
+w <char-0x5e9> " ù - shin
+n <char-0x5e0> " ð - nun
+b <char-0x5d1> " á - bet
+g <char-0x5d2> " â - gimel
+q <char-0x5e7> " ÷ - qof
+k <char-0x5db> " ë - kaf
+g <char-0x5e2> " ò - ayin
+y <char-0x5d9> " é - yod
+N <char-0x5df> " ï - final nun
+j <char-0x5d7> " ç - het
+l <char-0x5dc> " ì - lamed
+K <char-0x5da> " ê - final kaf
+x <char-0x5e6> " ö - tsadi
+m <char-0x5de> " î - mem
+M <char-0x5dd> " í - final mem
+p <char-0x5e4> " ô - pe
+r <char-0x5e8> " ø - resh
+d <char-0x5d3> " ã - dalet
+a <char-0x5d0> " à - alef
+v <char-0x5d5> " å - vav
+h <char-0x5d4> " ä - he
+s <char-0x5e1> " ñ - samekh
+T <char-0x5d8> " è - tet
+z <char-0x5d6> " æ - zayin
+t <char-0x5ea> " ú - tav
+X <char-0x5e5> " õ - final tsadi
+P <char-0x5e3> " ó - final pe
+A: <Char-0x5b0> " sheva
+HE <Char-0x5b1> " hataf segol
+HA <Char-0x5b2> " hataf patah
+HO <Char-0x5b3> " hataf qamats
+I <Char-0x5b4> " hiriq
+AY <Char-0x5b5> " tsere
+E <Char-0x5b6> " segol
+AA <Char-0x5b7> " patah
+AO <Char-0x5b8> " qamats
+O <Char-0x5b9> " holam
+U <Char-0x5bb> " qubuts
+D <Char-0x5bc> " dagesh
+]T <Char-0x5bd> " meteg
+]Q <Char-0x5be> " maqaf
+]R <ÌChar-0x5bf> " rafe
+]p <Char-0x5c0> " paseq
+SR <Char-0x5c1> " shin-dot
+SL <Char-0x5c2> " sin-dot
+]P <Char-0x5c3> " sof-pasuq
+VV <Char-0x5f0> " double-vav
+VY <Char-0x5f1> " vav-yod
+YY <Char-0x5f2> " yod-yod
+" cantillation:
+C: <Char-0x591> " etnahta
+Cs <Char-0x592> " segol
+CS <Char-0x593> " shalshelet
+Cz <Char-0x594> " zaqef qatan
+CZ <Char-0x595> " zaqef gadol
+Ct <Char-0x596> " tipeha
+Cr <Char-0x597> " revia
+Cq <Char-0x598> " zarqa
+Cp <Char-0x599> " pashta
+C! <Char-0x59a> " yetiv
+Cv <Char-0x59b> " tevir
+Cg <Char-0x59c> " geresh
+C* <Char-0x59d> " geresh qadim
+CG <Char-0x59e> " gershayim
+CP <Char-0x59f> " qarnei-parah
+Cy <Char-0x5aa> " yerach-ben-yomo
+Co <Char-0x5ab> " ole
+Ci <Char-0x5ac> " iluy
+Cd <Char-0x5ad> " dehi
+Cn <Char-0x5ae> " zinor
+CC <Char-0x5af> " masora circle
+X` <Char-0xfb20> " Alternative `ayin
+X' <Char-0xfb21> " Alternative 'alef
+X-d <Char-0xfb22> " Alternative dalet
+X-h <Char-0xfb23> " Alternative he
+X-k <Char-0xfb24> " Alternative kaf
+X-l <Char-0xfb25> " Alternative lamed
+X-m <Char-0xfb26> " Alternative mem-sofit
+X-r <Char-0xfb27> " Alternative resh
+X-t <Char-0xfb28> " Alternative tav
+X-+ <Char-0xfb29> " Alternative plus
+XW <Char-0xfb2a> " shin+shin-dot
+Xw <Char-0xfb2b> " shin+sin-dot
+X..W <Char-0xfb2c> " shin+shin-dot+dagesh
+X..w <Char-0xfb2d> " shin+sin-dot+dagesh
+XA <Char-0xfb2e> " alef+patah
+XO <Char-0xfb2f> " alef+qamats
+XI <Char-0xfb30> " alef+hiriq (mapiq)
+X.b <Char-0xfb31> " bet+dagesh
+X.g <Char-0xfb32> " gimel+dagesh
+X.d <Char-0xfb33> " dalet+dagesh
+X.h <Char-0xfb34> " he+dagesh
+Xu <Char-0xfb35> " vav+dagesh
+X.z <Char-0xfb36> " zayin+dagesh
+X.T <Char-0xfb38> " tet+dagesh
+X.y <Char-0xfb39> " yud+dagesh
+X.K <Char-0xfb3a> " kaf sofit+dagesh
+X.k <Char-0xfb3b> " kaf+dagesh
+X.l <Char-0xfb3c> " lamed+dagesh
+X.m <Char-0xfb3e> " mem+dagesh
+X.n <Char-0xfb40> " nun+dagesh
+X.s <Char-0xfb41> " samech+dagesh
+X.P <Char-0xfb43> " pe sofit+dagesh
+X.p <Char-0xfb44> " pe+dagesh
+X.x <Char-0xfb46> " tsadi+dagesh
+X.q <Char-0xfb47> " qof+dagesh
+X.r <Char-0xfb48> " resh+dagesh
+X.w <Char-0xfb49> " shin+dagesh
+X.t <Char-0xfb4a> " tav+dagesh
+Xo <Char-0xfb4b> " vav+holam
+XRb <Char-0xfb4c> " bet+rafe
+XRk <Char-0xfb4d> " kaf+rafe
+XRp <Char-0xfb4e> " pe+rafe
+Xal <Char-0xfb4f> " alef-lamed
diff --git a/runtime/keymap/lithuanian-baltic.vim b/runtime/keymap/lithuanian-baltic.vim
new file mode 100644
index 000000000..b888db6e7
--- /dev/null
+++ b/runtime/keymap/lithuanian-baltic.vim
@@ -0,0 +1,31 @@
+" Vim Keymap file for lithuanian characters, phonetic layout 'Baltic'
+" Useful mainly with utf-8 but may work with other encodings
+
+" Maintainer: Alex Jakushev <Alex.Jakushev@kemek.lt>
+" Last Changed: 2002 Apr 12
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "lt"
+
+loadkeymap
+! Ä„ LITHUANIAN CAPITAL A NOSINE
+@ Č LITHUANIAN CAPITAL CH
+# Ę LITHUANIAN CAPITAL E NOSINE
+$ Ä– LITHUANIAN CAPITAL E SU TASKU
+% Ä® LITHUANIAN CAPITAL I NOSINE
+^ Å  LITHUANIAN CAPITAL SH
+& Ų LITHUANIAN CAPITAL U NOSINE
+* Ū LITHUANIAN CAPITAL U SU BRUKSNIU
++ Ž LITHUANIAN CAPITAL ZH
+1 Ä… LITHUANIAN LOWERCASE A NOSINE
+2 Ä LITHUANIAN LOWERCASE CH
+3 Ä™ LITHUANIAN LOWERCASE E NOSINE
+4 Ä— LITHUANIAN LOWERCASE E SU TASKU
+5 į LITHUANIAN LOWERCASE I NOSINE
+6 Å¡ LITHUANIAN LOWERCASE SH
+7 ų LITHUANIAN LOWERCASE U NOSINE
+8 Å« LITHUANIAN LOWERCASE U SU BRUKSNIU
+= ž LITHUANIAN LOWERCASE ZH
diff --git a/runtime/keymap/magyar_utf-8.vim b/runtime/keymap/magyar_utf-8.vim
new file mode 100644
index 000000000..729771768
--- /dev/null
+++ b/runtime/keymap/magyar_utf-8.vim
@@ -0,0 +1,37 @@
+" Maintainer: Laszlo Zavaleta <zavaleta@smartchat.net.au>
+" Last Changed: 2003 Aug 08
+" it has all the accents and a few of the character alterations
+
+let b:keymap = "magyar"
+
+loadkey
+` í
+~ Ã
+! '
+@ "
+# +
+$ !
+^ /
+& =
+* (
+( )
+0 ö
+) Ö
+- ü
+_ Ü
+= ó
++ Ó
+\\ ű
+| Å°
+[ Å‘
+{ Å
+] ú
+} Ú
+; é
+: É
+' á
+\" Ã
+/ -
+< ?
+> :
+? _
diff --git a/runtime/keymap/persian-iranian_utf-8.vim b/runtime/keymap/persian-iranian_utf-8.vim
new file mode 100644
index 000000000..c4f396003
--- /dev/null
+++ b/runtime/keymap/persian-iranian_utf-8.vim
@@ -0,0 +1,115 @@
+" Vim Keymap file for Persian Standard Keyboard Layout
+" Maintainers: Behnam Esfahbod <behnam@bamdad.org>,
+" Amir Hedayaty <amir@bamdad.org>
+" Last Change: 2004 May 16
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+" Use this short name in the status line.
+let b:keymap_name = "per"
+
+loadkeymap
+` â€
+1 Û±
+2 Û²
+3 Û³
+4 Û´
+5 Ûµ
+6 Û¶
+7 Û·
+8 Û¸
+9 Û¹
+0 Û°
+- -
+= =
+
+q ض
+w ص
+e Ø«
+r Ù‚
+t Ù
+y غ
+u ع
+i Ù‡
+o Ø®
+p Ø­
+[ ج
+] Ú†
+
+a Ø´
+s س
+d ی
+f ب
+g Ù„
+h ا
+j ت
+k Ù†
+l Ù…
+; Ú©
+' Ú¯
+
+z ظ
+x Ø·
+c ز
+v ر
+b Ø°
+n د
+m Ù¾
+, Ùˆ
+. .
+/ /
+\ \
+
+~ ÷
+! !
+@ Ù¬
+# Ù«
+$ ï·¼
+% Ùª
+^ ×
+& ،
+* *
+( )
+) (
+_ Ù€
++ +
+
+Q Ù’
+W ٌ
+E Ù
+R Ù‹
+T Ù
+Y Ù
+U ÙŽ
+I Ù‘
+O ]
+P [
+{ }
+} {
+
+A ؤ
+S ئ
+D ÙŠ
+F إ
+G أ
+H آ
+J Ø©
+K »
+L «
+: :
+\" Ø›
+
+Z Ùƒ
+X Ù“
+C Ú˜
+V Ù°
+B ‌
+N Ù”
+M Ø¡
+< >
+> <
+? ØŸ
+| |
+
diff --git a/runtime/keymap/persian.vim b/runtime/keymap/persian.vim
new file mode 100644
index 000000000..7bf5cd61a
--- /dev/null
+++ b/runtime/keymap/persian.vim
@@ -0,0 +1,8 @@
+let encoding = &enc
+if encoding == ''
+ let encoding = 'utf-8'
+endif
+
+if encoding == 'utf-8'
+ source <sfile>:p:h/persian-iranian_utf-8.vim
+endif
diff --git a/runtime/keymap/pinyin.vim b/runtime/keymap/pinyin.vim
new file mode 100644
index 000000000..757850b83
--- /dev/null
+++ b/runtime/keymap/pinyin.vim
@@ -0,0 +1,54 @@
+" Vim Keymap file for Hanyu Pinyin tone marks through numbers.
+" Maintainer: Fredrik Roubert <roubert@df.lth.se>
+" Last Changed: February 15, 2004
+
+" All characters are given literally.
+scriptencoding utf-8
+
+" Use this short name in the status line.
+let b:keymap_name = "py"
+
+loadkeymap
+a0 a
+a1 Ä
+a2 á
+a3 ÇŽ
+a4 à
+a5 a
+e0 e
+e1 Ä“
+e2 é
+e3 Ä›
+e4 è
+e5 e
+i0 i
+i1 Ä«
+i2 í
+i3 Ç
+i4 ì
+i5 i
+o0 o
+o1 Å
+o2 ó
+o3 Ç’
+o4 ò
+o5 o
+u0 u
+u1 Å«
+u2 ú
+u3 Ç”
+u4 ù
+u5 u
+ü0 ü
+ü1 ǖ
+ü2 ǘ
+ü3 ǚ
+ü4 ǜ
+ü5 ü
+v0 ü
+v1 Ç–
+v2 ǘ
+v3 Çš
+v4 ǜ
+v5 ü
+
diff --git a/runtime/keymap/russian-jcuken.vim b/runtime/keymap/russian-jcuken.vim
new file mode 100644
index 000000000..840ec8c4e
--- /dev/null
+++ b/runtime/keymap/russian-jcuken.vim
@@ -0,0 +1,87 @@
+" Vim Keymap file for russian characters, layout 'jcuken', classical variant
+" (compatible with XFree86 'ru' keymap)
+" Useful mainly with utf-8 but may work with other encodings
+
+" Maintainer: Artem Chuprina <ran@ran.pp.ru>
+" Last Changed: 2001 Jun 23
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "ru"
+
+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 SHCHA
+} Ъ CYRILLIC CAPITAL LETTER HARD SIGN
+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 SHCHA
+] ÑŠ CYRILLIC SMALL LETTER HARD SIGN
+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 --git a/runtime/keymap/russian-jcukenwin.vim b/runtime/keymap/russian-jcukenwin.vim
new file mode 100644
index 000000000..d56470f11
--- /dev/null
+++ b/runtime/keymap/russian-jcukenwin.vim
@@ -0,0 +1,87 @@
+" Vim Keymap file for russian characters, layout 'jcuken', MS Windows variant
+" (slightly incompatible with XFree86 'ru' keymap - makes use of NUMERO SIGN)
+" Useful mainly with utf-8 but may work with other encodings
+
+" Maintainer: Artem Chuprina <ran@ran.pp.ru>
+" Last Changed: 2001 Jun 23
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "ru"
+
+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 SHCHA
+} Ъ CYRILLIC CAPITAL LETTER HARD SIGN
+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 SHCHA
+] ÑŠ CYRILLIC SMALL LETTER HARD SIGN
+s Ñ‹ CYRILLIC SMALL LETTER YERU
+m ь CYRILLIC SMALL LETTER SOFT SIGN
+' Ñ CYRILLIC SMALL LETTER E
+. ÑŽ CYRILLIC SMALL LETTER YU
+z Ñ CYRILLIC SMALL LETTER YA
+@ "
+# â„– NUMERO SIGN
+$ ;
+^ :
+& ?
+/ .
+? ,
diff --git a/runtime/keymap/russian-yawerty.vim b/runtime/keymap/russian-yawerty.vim
new file mode 100644
index 000000000..165d7ec9b
--- /dev/null
+++ b/runtime/keymap/russian-yawerty.vim
@@ -0,0 +1,79 @@
+" Vim Keymap file for russian characters, phonetic layout 'yawerty'
+" Useful mainly with utf-8 but may work with other encodings
+
+" Maintainer: Igor Goldenberg <igold@igold.pp.ru>
+" Last Changed: 2002 Jan 14
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "ru"
+
+loadkeymap
+A Ð CYRILLIC CAPITAL LETTER A
+B Б CYRILLIC CAPITAL LETTER BE
+W Ð’ CYRILLIC CAPITAL LETTER VE
+G Г CYRILLIC CAPITAL LETTER GHE
+D Д CYRILLIC CAPITAL LETTER DE
+E Е CYRILLIC CAPITAL LETTER IE
+& Ð CYRILLIC CAPITAL LETTER IO
+V Ж CYRILLIC CAPITAL LETTER ZHE
+Z З CYRILLIC CAPITAL LETTER ZE
+I И CYRILLIC CAPITAL LETTER I
+J Й CYRILLIC CAPITAL LETTER SHORT I
+K К CYRILLIC CAPITAL LETTER KA
+L Л CYRILLIC CAPITAL LETTER EL
+M М CYRILLIC CAPITAL LETTER EM
+N Ð CYRILLIC CAPITAL LETTER EN
+O О CYRILLIC CAPITAL LETTER O
+P П CYRILLIC CAPITAL LETTER PE
+R Р CYRILLIC CAPITAL LETTER ER
+S С CYRILLIC CAPITAL LETTER ES
+T Т CYRILLIC CAPITAL LETTER TE
+U У CYRILLIC CAPITAL LETTER U
+F Ф CYRILLIC CAPITAL LETTER EF
+H Х CYRILLIC CAPITAL LETTER HA
+C Ц CYRILLIC CAPITAL LETTER TSE
++ Ч CYRILLIC CAPITAL LETTER CHE
+{ Ш CYRILLIC CAPITAL LETTER SHA
+} Щ CYRILLIC CAPITAL LETTER SHCHA
+$ Ъ CYRILLIC CAPITAL LETTER HARD SIGN
+Y Ы CYRILLIC CAPITAL LETTER YERU
+X Ь CYRILLIC CAPITAL LETTER SOFT SIGN
+| Э CYRILLIC CAPITAL LETTER E
+~ Ю CYRILLIC CAPITAL LETTER YU
+Q Я CYRILLIC CAPITAL LETTER YA
+a а CYRILLIC SMALL LETTER A
+b б CYRILLIC SMALL LETTER BE
+w в CYRILLIC SMALL LETTER VE
+g г CYRILLIC SMALL LETTER GHE
+d д CYRILLIC SMALL LETTER DE
+e е CYRILLIC SMALL LETTER IE
+^ Ñ‘ CYRILLIC SMALL LETTER IO
+v ж CYRILLIC SMALL LETTER ZHE
+z з CYRILLIC SMALL LETTER ZE
+i и CYRILLIC SMALL LETTER I
+j й CYRILLIC SMALL LETTER SHORT I
+k к CYRILLIC SMALL LETTER KA
+l л CYRILLIC SMALL LETTER EL
+m м CYRILLIC SMALL LETTER EM
+n н CYRILLIC SMALL LETTER EN
+o о CYRILLIC SMALL LETTER O
+p п CYRILLIC SMALL LETTER PE
+r р CYRILLIC SMALL LETTER ER
+s Ñ CYRILLIC SMALL LETTER ES
+t Ñ‚ CYRILLIC SMALL LETTER TE
+u у CYRILLIC SMALL LETTER U
+f Ñ„ CYRILLIC SMALL LETTER EF
+h Ñ… CYRILLIC SMALL LETTER HA
+c ц CYRILLIC SMALL LETTER TSE
+= ч CYRILLIC SMALL LETTER CHE
+[ ш CYRILLIC SMALL LETTER SHA
+] щ CYRILLIC SMALL LETTER SHCHA
+# ÑŠ CYRILLIC SMALL LETTER HARD SIGN
+y Ñ‹ CYRILLIC SMALL LETTER YERU
+x ь CYRILLIC SMALL LETTER SOFT SIGN
+\\ Ñ CYRILLIC SMALL LETTER E
+` ÑŽ CYRILLIC SMALL LETTER YU
+q Ñ CYRILLIC SMALL LETTER YA
diff --git a/runtime/keymap/serbian-latin.vim b/runtime/keymap/serbian-latin.vim
new file mode 100644
index 000000000..0d2de15d0
--- /dev/null
+++ b/runtime/keymap/serbian-latin.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/serbian-latin_utf-8.vim
diff --git a/runtime/keymap/serbian-latin_utf-8.vim b/runtime/keymap/serbian-latin_utf-8.vim
new file mode 100644
index 000000000..a1b577a11
--- /dev/null
+++ b/runtime/keymap/serbian-latin_utf-8.vim
@@ -0,0 +1,44 @@
+" Vim Keymap file for Serbian characters, classical variant, UTF-8 encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://www.cs.cmu.edu/~aleksa/personal/vim/keymap/serbian-latin-UTF-8.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding UTF-8
+
+let b:keymap_name = "serbian-UTF-8"
+
+loadkeymap
+Y Z
+{ Å 
+} Ä
+y z
+[ Å¡
+] Ä‘
+: Č
+\" Ć
+\| Ž
+; Ä
+' ć
+\\ ž
+"Z Y
+"z y
+< ;
+> :
+/ -
+_ ?
+,, „
+'' â€
+
+E$ <char-0x20AC> " EURO SIGN
+-- <char-0x2013> " endash
+--- <char-0x2014> " emdash
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" &amp; .
+" * ;
+
diff --git a/runtime/keymap/serbian.vim b/runtime/keymap/serbian.vim
new file mode 100644
index 000000000..56d247cf4
--- /dev/null
+++ b/runtime/keymap/serbian.vim
@@ -0,0 +1,20 @@
+let encoding = &enc
+if encoding == 'latin1'
+ if has("unix")
+ let encoding = 'iso-8859-2'
+ else
+ let encoding = 'cp1250'
+ endif
+endif
+
+if encoding == 'utf-8'
+ source <sfile>:p:h/serbian_utf-8.vim
+elseif encoding == 'cp1250'
+ source <sfile>:p:h/serbian_cp1250.vim
+elseif encoding == 'cp1251'
+ source <sfile>:p:h/serbian_cp1251.vim
+elseif encoding == 'iso-8859-2'
+ source <sfile>:p:h/serbian_iso-8859-2.vim
+else
+ source <sfile>:p:h/serbian_iso-8859-5.vim
+endif
diff --git a/runtime/keymap/serbian_cp1250.vim b/runtime/keymap/serbian_cp1250.vim
new file mode 100644
index 000000000..30f80adf9
--- /dev/null
+++ b/runtime/keymap/serbian_cp1250.vim
@@ -0,0 +1,40 @@
+" Vim Keymap file for Serbian characters, classical variant, cp1250 encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://galeb.etf.bg.ac.yu/~alexa/vim/keymap/serbian-cp1250.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding cp1250
+
+let b:keymap_name = "serbian-cp1250"
+
+loadkeymap
+Y Z
+{ Š
+} Ð
+y z
+[ š
+] ð
+: È
+\" Æ
+\| Ž
+; è
+' æ
+\\ ž
+"Z Y
+"z y
+< ;
+> :
+/ -
+_ ?
+,, „
+'' ”
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" &amp; .
+" * ;
+
diff --git a/runtime/keymap/serbian_cp1251.vim b/runtime/keymap/serbian_cp1251.vim
new file mode 100644
index 000000000..0b1ce96ff
--- /dev/null
+++ b/runtime/keymap/serbian_cp1251.vim
@@ -0,0 +1,90 @@
+" Vim Keymap file for Serbian characters, classical variant, win cp1251
+" encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://www.cs.cmu.edu/~aleksa/personal/vim/keymap/serbian-cp1251.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding cp1251
+
+let b:keymap_name = "serbian-cp1251"
+
+loadkeymap
+Q Š
+W Œ
+E Å
+R Ð
+T Ò
+Y Ç
+U Ó
+I È
+O Î
+P Ï
+{ Ø
+} €
+q š
+w œ
+e å
+r ð
+t ò
+y ç
+u ó
+i è
+o î
+p ï
+[ ø
+]
+A À
+S Ñ
+D Ä
+F Ô
+G Ã
+H Õ
+J £
+K Ê
+L Ë
+: ×
+\" Ž
+\| Æ
+a à
+s ñ
+d ä
+f ô
+g ã
+h õ
+j ¼
+k ê
+l ë
+; ÷
+' ž
+\\ æ
+"Z Ç
+X
+C Ö
+V Â
+B Á
+N Í
+M Ì
+"z ç
+x Ÿ
+c ö
+v â
+b á
+n í
+m ì
+
+< ;
+> :
+/ -
+_ ?
+,, „
+'' ”
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" &amp; .
+" * ;
+
diff --git a/runtime/keymap/serbian_iso-8859-2.vim b/runtime/keymap/serbian_iso-8859-2.vim
new file mode 100644
index 000000000..d3be35eec
--- /dev/null
+++ b/runtime/keymap/serbian_iso-8859-2.vim
@@ -0,0 +1,40 @@
+" Vim Keymap file for Serbian characters, classical variant, iso-8859-2 encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://www.cs.cmu.edu/~aleksa/personal/vim/keymap/serbian-iso-8859-2.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding iso-8859-2
+
+let b:keymap_name = "serbian-iso-8859-2"
+
+loadkeymap
+Y Z
+{ ©
+} Ð
+y z
+[ ¹
+] ð
+: È
+\" Æ
+\| ®
+; è
+' æ
+\\ ¾
+"Z Y
+"z y
+< ;
+> :
+/ -
+_ ?
+,, ?
+'' ?
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" &amp; .
+" * ;
+
diff --git a/runtime/keymap/serbian_iso-8859-5.vim b/runtime/keymap/serbian_iso-8859-5.vim
new file mode 100644
index 000000000..113383cdf
--- /dev/null
+++ b/runtime/keymap/serbian_iso-8859-5.vim
@@ -0,0 +1,89 @@
+" Vim Keymap file for Serbian characters, classical variant, iso-8859-5 encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://www.cs.cmu.edu/~aleksa/personal/vim/keymap/serbian-iso-8859-5.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding iso-8859-5
+
+let b:keymap_name = "serbian-iso-8859-5"
+
+loadkeymap
+Q ©
+W ª
+E µ
+R À
+T Â
+Y ·
+U Ã
+I ¸
+O ¾
+P ¿
+{ È
+} ¢
+q ù
+w ú
+e Õ
+r à
+t â
+y ×
+u ã
+i Ø
+o Þ
+p ß
+[ è
+] ò
+A °
+S Á
+D ´
+F Ä
+G ³
+H Å
+J ¨
+K º
+L »
+: Ç
+\" «
+\| ¶
+a Ð
+s á
+d Ô
+f ä
+g Ó
+h å
+j ø
+k Ú
+l Û
+; ç
+' û
+\\ Ö
+"Z ·
+X ¯
+C Æ
+V ²
+B ±
+N ½
+M ¼
+"z ×
+x ÿ
+c æ
+v Ò
+b Ñ
+n Ý
+m Ü
+
+< ;
+> :
+/ -
+_ ?
+,, ?
+'' ?
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" & .
+" * ;
+
diff --git a/runtime/keymap/serbian_utf-8.vim b/runtime/keymap/serbian_utf-8.vim
new file mode 100644
index 000000000..3388bfd28
--- /dev/null
+++ b/runtime/keymap/serbian_utf-8.vim
@@ -0,0 +1,93 @@
+" Vim Keymap file for Serbian characters, classical variant, UTF-8 encoding
+"
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.edu>
+" URL: http://www.cs.cmu.edu/~aleksa/personal/vim/keymap/serbian-UTF-8.vim
+" Last Changed: 2002 Mar 29
+
+scriptencoding UTF-8
+
+let b:keymap_name = "serbian-UTF-8"
+
+loadkeymap
+Q Љ
+W Њ
+E Е
+R Р
+T Т
+Y З
+U У
+I И
+O О
+P П
+{ Ш
+} Ђ
+q Ñ™
+w Ñš
+e е
+r р
+t Ñ‚
+y з
+u у
+i и
+o о
+p п
+[ ш
+] Ñ’
+A Ð
+S С
+D Д
+F Ф
+G Г
+H Х
+J Ј
+K К
+L Л
+: Ч
+\" Ћ
+\| Ж
+a а
+s Ñ
+d д
+f Ñ„
+g г
+h Ñ…
+j ј
+k к
+l л
+; ч
+' Ñ›
+\\ ж
+"Z З
+X Ð
+C Ц
+V Ð’
+B Б
+N Ð
+M М
+"z з
+x ÑŸ
+c ц
+v в
+b б
+n н
+m м
+
+< ;
+> :
+/ -
+_ ?
+,, „
+'' â€
+
+E$ <char-0x20AC> " EURO SIGN
+-- <char-0x2013> " endash
+--- <char-0x2014> " emdash
+
+" @ "
+" # '
+" $ *
+" % :
+" ^ ,
+" &amp; .
+" * ;
+
diff --git a/runtime/keymap/slovak.vim b/runtime/keymap/slovak.vim
new file mode 100644
index 000000000..f9fd6d62a
--- /dev/null
+++ b/runtime/keymap/slovak.vim
@@ -0,0 +1,16 @@
+let encoding = &enc
+if encoding == 'latin1'
+ if has("unix")
+ let encoding = 'iso-8859-2'
+ else
+ let encoding = 'cp1250'
+ endif
+endif
+
+if encoding == 'utf-8'
+ source <sfile>:p:h/slovak_utf-8.vim
+elseif encoding == 'cp1250'
+ source <sfile>:p:h/slovak_cp1250.vim
+else
+ source <sfile>:p:h/slovak_iso-8859-2.vim
+endif
diff --git a/runtime/keymap/slovak_cp1250.vim b/runtime/keymap/slovak_cp1250.vim
new file mode 100644
index 000000000..73234cb37
--- /dev/null
+++ b/runtime/keymap/slovak_cp1250.vim
@@ -0,0 +1,100 @@
+" Maintainer: Peter Valach <pvalach@gmx.net>
+" Last Changed: 2002 Feb 3
+" URL: http://www.pv2c.sk/free/sk_vimkeymap/
+
+let b:keymap_name = "sk"
+
+loadkeymap
+" Z a Y - ak chcete slovensku qwerty, zakomentujte tieto styri riadky
+y z
+z y
+Y Z
+Z Y
+
+" Horny riadok
+` ;
+1 +
+! 1
+2 ¾
+@ 2
+3 š
+# 3
+4 è
+$ 4
+5
+% 5
+6 ž
+^ 6
+7 ý
+& 7
+8 á
+* 8
+9 í
+( 9
+0 é
+) 0
+- =
+_ %
+
+" Klavesy okolo Enteru :)
+[ ú
+{ /
+] ä
+} (
+\\ ò
+<Bar> )
+; ô
+: "
+' §
+\" !
+", , ;-)
+< ?
+". . ;-)
+> :
+/ -
+? _
+
+" Dlzne
+=a á
+=A Á
+=e é
+=E É
+=i í
+=I Í
+=l å
+=L Å
+=o ó
+=O Ó
+=r à
+=R À
+=u ú
+=U Ú
+=z ý
+=Z Ý
+" pre pripad omylu :) alebo slovenskej QWERTY
+=y ý
+=Y Ý
+
+" Makcene
++a ä
++A Ä
++c è
++C È
++d ï
++D Ï
++l ¾
++L ¼
++n ò
++N Ò
++o ô
++O Ô
++s š
++S Š
++t
++T
++y ž
++Y Ž
+" pre pripad omylu :) alebo slovenskej QWERTY
++z ž
++Z Ž
+
diff --git a/runtime/keymap/slovak_iso-8859-2.vim b/runtime/keymap/slovak_iso-8859-2.vim
new file mode 100644
index 000000000..8c43fb112
--- /dev/null
+++ b/runtime/keymap/slovak_iso-8859-2.vim
@@ -0,0 +1,100 @@
+" Maintainer: Peter Valach <pvalach@gmx.net>
+" Last Changed: 2002 Feb 3
+" URL: http://www.pv2c.sk/free/sk_vimkeymap/
+
+let b:keymap_name = "sk"
+
+loadkeymap
+" Z a Y - ak chcete slovensku qwerty, zakomentujte tieto styri riadky
+y z
+z y
+Y Z
+Z Y
+
+" Horny riadok
+` ;
+1 +
+! 1
+2 µ
+@ 2
+3 ¹
+# 3
+4 è
+$ 4
+5 »
+% 5
+6 ¾
+^ 6
+7 ý
+& 7
+8 á
+* 8
+9 í
+( 9
+0 é
+) 0
+- =
+_ %
+
+" Klavesy okolo Enteru :)
+[ ú
+{ /
+] ä
+} (
+\\ ò
+<Bar> )
+; ô
+: "
+' §
+\" !
+", , ;-)
+< ?
+". . ;-)
+> :
+/ -
+? _
+
+" Dlzne
+=a á
+=A Á
+=e é
+=E É
+=i í
+=I Í
+=l å
+=L Å
+=o ó
+=O Ó
+=r à
+=R À
+=u ú
+=U Ú
+=z ý
+=Z Ý
+" pre pripad omylu :) alebo slovenskej QWERTY
+=y ý
+=Y Ý
+
+" Makcene
++a ä
++A Ä
++c è
++C È
++d ï
++D Ï
++l µ
++L ¥
++n ò
++N Ò
++o ô
++O Ô
++s ¹
++S ©
++t »
++T «
++y ¾
++Y ®
+" pre pripad omylu :) alebo slovenskej QWERTY
++z ¾
++Z ®
+
diff --git a/runtime/keymap/slovak_utf-8.vim b/runtime/keymap/slovak_utf-8.vim
new file mode 100644
index 000000000..8e3e0838e
--- /dev/null
+++ b/runtime/keymap/slovak_utf-8.vim
@@ -0,0 +1,100 @@
+" Maintainer: Peter Valach <pvalach@gmx.net>
+" Last Changed: 2002 Nov 5
+" URL: http://www.pv2c.sk/free/sk_vimkeymap/
+
+let b:keymap_name = "sk"
+
+loadkeymap
+" Z a Y - ak chcete slovensku qwerty, zakomentujte tieto styri riadky
+y z
+z y
+Y Z
+Z Y
+
+" Horny riadok
+` ;
+1 +
+! 1
+2 ľ
+@ 2
+3 Å¡
+# 3
+4 Ä
+$ 4
+5 ť
+% 5
+6 ž
+^ 6
+7 ý
+& 7
+8 á
+* 8
+9 í
+( 9
+0 é
+) 0
+- =
+_ %
+
+" Klavesy okolo Enteru :)
+[ ú
+{ /
+] ä
+} (
+\\ ň
+<Bar> )
+; ô
+: "
+' §
+\" !
+", , ;-)
+< ?
+". . ;-)
+> :
+/ -
+? _
+
+" Dlzne
+=a á
+=A Ã
+=e é
+=E É
+=i í
+=I Ã
+=l ĺ
+=L Ĺ
+=o ó
+=O Ó
+=r Å•
+=R Å”
+=u ú
+=U Ú
+=z ý
+=Z Ã
+" pre pripad omylu :) alebo slovenskej QWERTY
+=y ý
+=Y Ã
+
+" Makcene
++a ä
++A Ä
++c Ä
++C Č
++d Ä
++D ÄŽ
++l ľ
++L Ľ
++n ň
++N Ň
++o ô
++O Ô
++s Å¡
++S Å 
++t ť
++T Ť
++y ž
++Y Ž
+" pre pripad omylu :) alebo slovenskej QWERTY
++z ž
++Z Ž
+
diff --git a/runtime/lang/README.txt b/runtime/lang/README.txt
new file mode 100644
index 000000000..3b10b4f3a
--- /dev/null
+++ b/runtime/lang/README.txt
@@ -0,0 +1,64 @@
+Language files for Vim
+
+Translated menus
+----------------
+
+The contents of each menu file is a sequence of lines with "menutrans"
+commands. Read one of the existing files to get an idea of how this works.
+
+More information in the on-line help:
+
+ :help multilang-menus
+ :help :menutrans
+ :help 'langmenu'
+ :help :language
+
+The "$VIMRUNTIME/menu.vim" file will search for a menu translation file. This
+depends on the value of the "v:lang" variable.
+
+ "menu_" . v:lang . ".vim"
+
+When the 'menutrans' option is set, its value will be used instead of v:lang.
+
+The file name is always lower case. It is the full name as the ":language"
+command shows (the LC_MESSAGES value).
+
+For example, to use the Big5 (Taiwan) menus on MS-Windows the $LANG will be
+
+ Chinese(Taiwan)_Taiwan.950
+
+and use the menu translation file:
+
+ $VIMRUNTIME/lang/menu_chinese(taiwan)_taiwan.950.vim
+
+On Unix you should set $LANG, depending on your shell:
+
+ csh/tcsh: setenv LANG "zh_TW.Big5"
+ sh/bash/ksh: export LANG="zh_TW.Big5"
+
+and the menu translation file is:
+
+ $VIMRUNTIME/lang/menu_zh_tw.big5.vim
+
+The menu translation file should set the "did_menu_trans" variable so that Vim
+will not load another file.
+
+
+AUTOMATIC CONVERSION
+
+When Vim was compiled with multi-byte support, conversion between latin1 and
+UTF-8 will always be possible. Other conversions depend on the iconv
+library, which is not always available.
+For UTF-8 menu files which only use latin1 characters, you can rely on Vim
+doing the conversion. Let the UTF-8 menu file source the latin1 menu file,
+and put "scriptencoding latin1" in that one.
+Other conversions may not always be available (e.g., between iso-8859-# and
+MS-Windows codepages), thus the converted menu file must be available.
+
+
+Translated messages
+-------------------
+
+This requires doing "make install" in the "src" directory. It will compile
+the portable files "src/po/*.po" into binary ".mo" files and place them in the
+right directory.
diff --git a/runtime/lang/menu_af.latin1.vim b/runtime/lang/menu_af.latin1.vim
new file mode 100644
index 000000000..aac2e72d0
--- /dev/null
+++ b/runtime/lang/menu_af.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Afrikaans
+
+source <sfile>:p:h/menu_af_af.latin1.vim
diff --git a/runtime/lang/menu_af.utf-8.vim b/runtime/lang/menu_af.utf-8.vim
new file mode 100644
index 000000000..be39b59a7
--- /dev/null
+++ b/runtime/lang/menu_af.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Afrikaans for UTF-8 encoding
+
+source <sfile>:p:h/menu_af_af.latin1.vim
diff --git a/runtime/lang/menu_af_af.latin1.vim b/runtime/lang/menu_af_af.latin1.vim
new file mode 100644
index 000000000..b32e8e989
--- /dev/null
+++ b/runtime/lang/menu_af_af.latin1.vim
@@ -0,0 +1,152 @@
+" Menu Translations: Afrikaas
+" Maintainer: Danie Roux <droux@tuks.co.za>
+" Last Change: 2003 Mar 30
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252 and
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+
+" Help menu
+menutrans &Help &Hulp
+menutrans &Overview<Tab><F1> &Oorsig<Tab><F1>
+menutrans &How-to\ links &How-to\ Indeks
+"menutrans &GUI &GUI
+menutrans &Credits &Met\ dank\ aan
+menutrans Co&pying &Kopiereg
+menutrans &Find\.\.\. &Soek\.\.\.
+menutrans &Version &Weergawe
+menutrans &About &Inleiding\ skerm
+
+" File menu
+menutrans &File &Lêer
+menutrans &Open\.\.\.<Tab>:e &Open\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Maak\ oop\ in\ nuwe\ &venster\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nuut<Tab>:enew
+menutrans &Close<Tab>:close Maak\ &Toe<Tab>:close
+menutrans &Save<Tab>:w &Skryf<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:w Skryf\ &as\.\.\.<Tab>:w
+menutrans &Print &Druk
+menutrans Sa&ve-Exit<Tab>:wqa Skryf\ en\ verlaat<Tab>:wqa
+menutrans E&xit<Tab>:qa &Verlaat<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Wysig
+menutrans &Undo<Tab>u Terug<Tab>u
+menutrans &Redo<Tab>^R Voo&ruit<Tab>^R
+menutrans Rep&eat<Tab>\. &Herhaal<Tab>\.
+menutrans Cu&t<Tab>"+x &Knip<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiëer<Tab>"+y
+menutrans &Paste<Tab>"+gP Plak<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Voeg\ &Voor\ in<Tab>[p
+menutrans Put\ &After<Tab>]p Voeg\ A&gter\ in<Tab>]p
+menutrans &Select\ all<Tab>ggVG Kies\ &Alles<Tab>ggVG
+menutrans &Find\.\.\. &Soek\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Soek\ en\ Vervang\.\.\.
+menutrans Options\.\.\. Opsies\.\.\.
+
+" Programming menu
+menutrans &Tools &Gereedskap
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Spring\ na\ Etiket<Tab>g^]
+menutrans Jump\ &back<Tab>^T Spring\ &Terug<Tab>^T
+menutrans Build\ &Tags\ File Genereer\ &Etiket\ Leêr
+menutrans &Make<Tab>:make Voer\ &Make\ uit<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Foutlys<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! &Boodskaplys<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Volgende\ Fout<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Vorige\ Fout<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Ouer\ Lys<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Nuwer\ Lys<Tab>:cnew
+menutrans Error\ &Window<Tab>:cwin Foute\ Venster<Tab>:cwin
+menutrans Convert\ to\ HEX<Tab>:%!xxd Verwissel\ na\ HEX<Tab>:%!xxd
+menutrans Convert\ back<Tab>:%!xxd\ -r Verwissel\ terug<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &Buffers
+menutrans Refresh Verfris
+menutrans Delete Verwyder
+menutrans Alternate Vorige
+menutrans [No\ File] [Geen\ Leêr]
+
+" Window menu
+menutrans &Window &Venster
+menutrans &New<Tab>^Wn &Nuut<Tab>^Wn
+menutrans S&plit<Tab>^Ws Ver&deel<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Verdeel\ N&a\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Verdeel\ Vertikaal<Tab>^Wv
+menutrans &Close<Tab>^Wc &Maak\ toe<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Maak\ &Ander\ Toe<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww Volgende<Tab>^Ww
+menutrans P&revious<Tab>^WW &Vorige<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Gelyke\ hoogte<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maksimale\ hoogte<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Mi&nimale\ hoogte<Tab>^W1_
+menutrans Max\ Width<Tab>^W\| Maksimale\ breedte<Tab>^W\|
+menutrans Min\ Width<Tab>^W1\| Minimale\ breedte<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR Roteer\ na\ &bo<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Roteer\ na\ &onder<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Kies\ font\.\.\.
+
+" The popup menu
+menutrans &Undo &Terug
+menutrans Cu&t Knip
+menutrans &Copy &Kopiëer
+menutrans &Paste &Plak
+menutrans &Delete &Verwyder
+menutrans Select\ Blockwise Kies\ per\ Blok
+menutrans Select\ &Word Kies\ een\ &Woord
+menutrans Select\ &Line Kies\ een\ &Reël
+menutrans Select\ &Block Kies\ een\ &Blok
+menutrans Select\ &All Kies\ &Alles
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Maak leêr oop
+ tmenu ToolBar.Save Skryf leêr
+ tmenu ToolBar.SaveAll Skryf alle leêrs
+ tmenu ToolBar.Print Druk
+ tmenu ToolBar.Undo Terug
+ tmenu ToolBar.Redo Vooruit
+ tmenu ToolBar.Cut Knip
+ tmenu ToolBar.Copy Kopiëer
+ tmenu ToolBar.Paste Plak
+ tmenu ToolBar.Find Soek...
+ tmenu ToolBar.FindNext Soek volgende
+ tmenu ToolBar.FindPrev Soek vorige
+ tmenu ToolBar.Replace Soek en vervang...
+ tmenu ToolBar.LoadSesn Laai sessie
+ tmenu ToolBar.SaveSesn Stoor sessie
+ tmenu ToolBar.RunScript Voer vim skrip uit
+ tmenu ToolBar.Make Voer make uit
+ tmenu ToolBar.Shell Begin dop
+ tmenu ToolBar.RunCtags Genereer etikette
+ tmenu ToolBar.TagJump Spring na etiket
+ tmenu ToolBar.Help Hulp
+ tmenu ToolBar.FindHelp Soek hulp...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaks
+menutrans Set\ 'syntax'\ only Stel\ slegs\ 'syntax'
+menutrans Set\ 'filetype'\ too Verander\ 'filetype'\ ook
+menutrans &Off &Af
+menutrans &Manual &Met\ die\ hand
+menutrans A&utomatic O&utomaties
+menutrans o&n\ (this\ file) Aa&n\ (die\ leêr)
+menutrans o&ff\ (this\ file) &Af\ (die\ leêr)
+menutrans Co&lor\ test Toets\ die\ &kleure
+menutrans &Highlight\ test Toets\ die\ verligting
+menutrans &Convert\ to\ HTML Verwissel\ na\ HTML
diff --git a/runtime/lang/menu_af_af.utf-8.vim b/runtime/lang/menu_af_af.utf-8.vim
new file mode 100644
index 000000000..be39b59a7
--- /dev/null
+++ b/runtime/lang/menu_af_af.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Afrikaans for UTF-8 encoding
+
+source <sfile>:p:h/menu_af_af.latin1.vim
diff --git a/runtime/lang/menu_ca.latin1.vim b/runtime/lang/menu_ca.latin1.vim
new file mode 100644
index 000000000..9eedfd80c
--- /dev/null
+++ b/runtime/lang/menu_ca.latin1.vim
@@ -0,0 +1,3 @@
+" Menu translations for Catalan
+"
+source <sfile>:p:h/menu_ca_es.latin1.vim
diff --git a/runtime/lang/menu_ca.utf-8.vim b/runtime/lang/menu_ca.utf-8.vim
new file mode 100644
index 000000000..23ee10da9
--- /dev/null
+++ b/runtime/lang/menu_ca.utf-8.vim
@@ -0,0 +1,7 @@
+" Menu translations for Catalan
+"
+" Maintainer: Ernest Adrogué <eadrogue@gmx.net>
+" Last Change: 29 Dec 2003
+"
+source <sfile>:p:h/menu_ca_es.latin1.vim
+
diff --git a/runtime/lang/menu_ca_es.latin1.vim b/runtime/lang/menu_ca_es.latin1.vim
new file mode 100644
index 000000000..a71c60ef7
--- /dev/null
+++ b/runtime/lang/menu_ca_es.latin1.vim
@@ -0,0 +1,293 @@
+" Menu translations for Catalan
+"
+" Maintainer: Ernest Adrogué <eadrogue@gmx.net>
+" Last Change: 18 Jan 2004
+"
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252,
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+
+" menú Ajuda
+menutrans &Help &Ajuda
+menutrans &Overview<Tab><F1> &Introducció<Tab><F1>
+menutrans &User\ Manual &Manual\ de\ l'usuari
+menutrans &How-to\ links Com\ &fer\.\.\.?
+menutrans &Find\.\.\. &Cerca\.\.\.
+menutrans &Credits &Autors
+menutrans Co&pying Con&dicions
+menutrans O&rphans &Orfes
+menutrans &Version &Versió
+menutrans &About &Quant\ a\.\.\.
+" text del diàleg Ajuda/Cerca...
+let g:menutrans_help_dialog = "Introduïu el terme sobre el qual necessiteu ajuda.\n\nUseu el prefix i_ per ordres d'entrada (p.ex.: i_CTRL-X)\nUseu el prefix c_ per ordres de la línia d'ordres (p.ex.: c_<Del>)\nUseu el prefix ' per noms d'opcions (p.ex.: 'shiftwidth')"
+
+
+" menú Fitxer
+menutrans &File &Fitxer
+menutrans &Open\.\.\.<Tab>:e &Obre\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Obre\ en\ una\ &finestra\ nova\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nou<Tab>:enew
+menutrans &Close<Tab>:close &Tanca<Tab>:close
+menutrans &Save<Tab>:w &Desa<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav &Anomena\ i\ desa\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. &Mostra\ les\ diferències\ respecte\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Aplica\ les\ modificacions\ de\.\.\.
+menutrans &Print &Imprimeix
+menutrans Sa&ve-Exit<Tab>:wqa Desa\ i\ s&urt<Tab>:wqa
+menutrans E&xit<Tab>:qa &Surt<Tab>:qa
+
+
+" menú Edita
+menutrans &Edit &Edita
+menutrans &Undo<Tab>u &Desfés<Tab>u
+menutrans &Redo<Tab>^R &Refés<Tab>^R
+menutrans Rep&eat<Tab>\. Re&peteix<Tab>\.
+menutrans Cu&t<Tab>"+x Re&talla<Tab>"+x
+menutrans &Copy<Tab>"+y &Copia<Tab>"+y
+menutrans &Paste<Tab>"+gP Engan&xa<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Posa\ &abans<Tab>[p
+menutrans Put\ &After<Tab>]p P&osa\ després<Tab>]p
+menutrans &Delete<Tab>x Suprimeix<Tab>x
+menutrans &Select\ all<Tab>ggVG &Selecciona-ho\ tot<Tab>ggVG
+menutrans &Find\.\.\. &Cerca\.\.\.
+menutrans &Find<Tab>/ &Cerca<Tab>/
+menutrans Find\ and\ Rep&lace Cerca\ i\ s&ubstitueix
+menutrans Find\ and\ Rep&lace\.\.\. Cerca\ i\ s&ubstitueix\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Cerca\ i\ s&ubstitueix<Tab>:%s
+menutrans Find\ and\ Rep&lace<Tab>:s Cerca\ i\ s&ubstitueix<Tab>:s
+menutrans Settings\ &Window &Finestra\ d'opcions
+menutrans &Global\ Settings Opcions\ &globals
+" submenú Edita/Opcions Globals
+ menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Ressalt\ de\ &patrons<Tab>:set\ hls!
+ menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Sensibilitat\ a\ les\ ma&júscules<Tab>:set\ ic!
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Ressalt\ de\ coincidències<Tab>:set\ sm!
+ menutrans &Context\ lines Línies\ de\ co&ntext
+ menutrans &Virtual\ Edit Edició\ &virtual
+" submenú Edita/Opcions Globals/Edició virtual
+ menutrans Never &Mai
+ menutrans Block\ Selection &Selecció\ de\ blocs
+ menutrans Insert\ mode Mode\ d'&inserció
+ menutrans Block\ and\ Insert &Blocs i inserció
+ menutrans Always S&empre
+ menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Mode\ d'&inserció<Tab>:set\ im!
+ menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Co&mpatible\ amb\ Vi<Tab>:set\ cp!
+ menutrans Search\ &Path\.\.\. &Ubicacions\.\.\.
+ menutrans Ta&g\ Files\.\.\. Fitxers\ d'&etiquetes\.\.\.
+ menutrans Toggle\ &Toolbar &Barra\ d'eines
+ menutrans Toggle\ &Bottom\ Scrollbar Barra\ de\ &desplaçament\ inferior
+ menutrans Toggle\ &Left\ Scrollbar Barra\ de\ desplaçament\ e&squerra
+ menutrans Toggle\ &Right\ Scrollbar Barra\ de\ desplaçament\ dre&ta
+menutrans F&ile\ Settings Opcions\ del\ f&itxer
+" submenú Edita/Opcions del fitxer
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Ennumera\ les\ línies<Tab>:set\ nu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list! Mode\ &llista<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! A&justa\ les\ línies\ llargues<Tab>:set\ wrap!
+ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Ajusta\ sense\ partir\ &paraules<Tab>:set\ lbr!
+ menutrans Toggle\ &expand-tab<Tab>:set\ et! Estén\ les\ ta&bulacions<Tab>:set\ et!
+ menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Sagnia\ automàtica<Tab>:set\ ai!
+ menutrans Toggle\ &C-indenting<Tab>:set\ cin! Sagnia\ estil\ &C<Tab>:set\ cin!
+ menutrans &Shiftwidth Sa&gnia
+ menutrans Soft\ &Tabstop Amplada\ de\ &tabulació
+ menutrans Te&xt\ Width\.\.\. &Amplada\ del\ text\.\.\.
+ menutrans &File\ Format\.\.\. &Format\ del\ fitxer\.\.\.
+menutrans Select\ Fo&nt\.\.\. Tipus\ de\ &lletra\.\.\.
+menutrans C&olor\ Scheme Es&quema\ de\ colors
+" submenú Edita/Esquema de colors
+ menutrans blue blau
+ menutrans darkblue blau\ fosc
+ menutrans default normal
+ menutrans desert desert
+ menutrans evening vesprada
+ menutrans morning matinada
+ menutrans peachpuff préssec
+ menutrans shine brillant
+menutrans &Keymap &Mapa\ de\ tecles
+" submenú Edita/Mapa de tecles
+ menutrans None Cap
+ menutrans accents Accents
+ menutrans arabic Àrab
+ menutrans czech Txec
+ menutrans esperanto Esperanto
+ menutrans greek Grec
+ menutrans hebrew Hebreu
+ menutrans hebrewp Hebreu\ (fonètic)
+ menutrans lithuanian-baltic Lituà\ (bàltic)
+ menutrans pinyin Mandarí\ (fonètic)
+ menutrans russian-jcuken Rus\ (jcuken)
+ menutrans russian-jcukenwin Rus\ (jcukenwin)
+ menutrans russian-yawerty Rus\ (yawerty)
+ menutrans serbian Serbi
+ menutrans serbian-latin Serbi\ (llatí)
+ menutrans slovak Eslovac
+" text del diàleg Edita/Opcions globals/Ubicacions...
+let g:menutrans_path_dialog = "Introduïu les ubicacions on cercar fitxers.\nSepareu els noms dels directoris amb una coma."
+" text del diàleg Edita/Opcions globals/Fitxers d'etiquetes...
+let g:menutrans_tags_dialog = "Introduïu els noms dels fitxers d'etiquetes.\nSepareu els noms amb una coma."
+" text del diàleg Edita/Opcions del fitxer/Amplada del text...
+let g:menutrans_textwidth_dialog = "Introduïu la nova amplada del text (0 per infinit): "
+" text del diàleg Edita/Opcions del fitxer/Format del fitxer...
+let g:menutrans_fileformat_dialog = "Seleccioneu el format per escriure el fitxer."
+
+
+" menú Eines
+menutrans &Tools Ei&nes
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Salta\ a\ aquesta\ etiqueta<Tab>g^]
+menutrans Jump\ &back<Tab>^T Salta\ en&rere<Tab>^T
+menutrans Build\ &Tags\ File Crea\ un\ fitxer\ d'eti&quetes
+menutrans &Folding &Plecs
+" submenú Eines/Plecs
+ menutrans &Enable/Disable\ folds<Tab>zi &Habilita/Deshabilita\ els\ plecs<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv &Línia\ del\ cursor\ visible<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Només\ visible\ la\ línia\ del\ cursor<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm &Tanca\ més\ plecs<Tab>zm
+ menutrans &Close\ all\ folds<Tab>zM Tanca\ t&ots\ els\ plecs<Tab>zM
+ menutrans O&pen\ more\ folds<Tab>zr Obre\ &més\ plecs<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR O&bre\ tots\ els\ plecs<Tab>zR
+ menutrans Fold\ Met&hod Mèto&de
+" submenú Eines/Plècs/Mètode
+ menutrans M&anual M&anual
+ menutrans I&ndent &Sagnia
+ menutrans E&xpression E&xpressió
+ menutrans S&yntax S&intaxi
+ menutrans &Diff &Diferències
+ menutrans Ma&rker &Marques
+ menutrans Create\ &Fold<Tab>zf &Crea\ un\ plec<Tab>zf
+ menutrans &Delete\ Fold<Tab>zd &Elimina\ un\ plec<Tab>zd
+ menutrans Delete\ &All\ Folds<Tab>zD Elimina\ tot&s\ els\ plecs<Tab>zD
+ menutrans Fold\ col&umn\ width &Amplada\ de\ la\ columna\ de\ plecs
+menutrans &Diff &Diferències
+" submenú Eines/Diferències
+ menutrans &Update &Actualitza
+ menutrans &Get\ Block &Obtingues\ un\ bloc
+ menutrans &Put\ Block &Posa\ un\ bloc
+menutrans &Make<Tab>:make Crida\ a\ &make<Tab>:make
+menutrans &List\ Errors<Tab>:cl Llista\ d'&errors<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! &Llista\ de\ missatges<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Error\ se&güent<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Error\ an&terior<Tab>:cp
+menutrans &Older\ List<Tab>:cold Llista\ &antiga<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Llista\ no&va<Tab>:cnew
+menutrans Error\ &Window F&inestra\ d'errors
+" submenú Eines/Finestra d'errors
+ menutrans &Update<Tab>:cwin &Actualitza<Tab>:cwin
+ menutrans &Open<Tab>:copen &Obre<Tab>:copen
+ menutrans &Close<Tab>:cclose &Tanca<Tab>:cclose
+menutrans &Set\ Compiler &Compilador
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Converteix\ a\ &HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Torna\ al\ format\ &original<Tab>:%!xxd\ -r
+
+
+" menú Buffers
+menutrans &Buffers &Buffers
+menutrans &Refresh\ menu &Refresca\ el\ menú
+menutrans &Delete &Elimina
+menutrans &Alternate &Alterna
+menutrans &Next &Següent
+menutrans &Previous A&nterior
+let g:menutrans_no_file = "[Cap fitxer]"
+
+
+" menú Finestra
+menutrans &Window F&inestra
+menutrans &New<Tab>^Wn &Nova<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Divideix<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Divideix\ &en\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Divideix\ &verticalment<Tab>^Wv
+menutrans Split\ File\ E&xplorer E&xplorador\ de\ fitxers
+menutrans &Close<Tab>^Wc &Tanca<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Tanca\ les\ altre&s<Tab>^Wo
+menutrans Move\ &To M&ou\ a
+" submenú Finestra/Mou
+ menutrans &Top<Tab>^WK &Dalt\ de\ tot<Tab>^WK
+ menutrans &Bottom<Tab>^WJ &Baix\ de\ tot<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH Costat\ &esquerra<Tab>^WH
+ menutrans &Right\ side<Tab>^WL Costat\ d&ret<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Alterna\ cap\ am&unt<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Alte&rna\ cap\ avall<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= &Iguala<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Màxima\ &alçada<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Mínima\ a&lçada<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Màxima\ a&mplada<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Mínima\ am&plada<Tab>^W1\|
+
+
+" menú emergent
+menutrans &Undo &Desfés
+menutrans Cu&t &Retalla
+menutrans &Copy &Copia
+menutrans &Paste &Enganxa
+menutrans &Delete &Suprimeix
+menutrans Select\ Blockwise Se&lecció
+menutrans Select\ &Word Selecció\ de\ &paraules
+menutrans Select\ &Line Selecció\ de\ &línies
+menutrans Select\ &Block Selecció\ de\ bl&ocs
+menutrans Select\ &All Selecciona-ho\ &tot
+
+
+" barra d'eines
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Obre un fitxer
+ tmenu ToolBar.Save Desa el fitxer
+ tmenu ToolBar.SaveAll Desa tots els fitxers
+ tmenu ToolBar.Print Imprimeix
+ tmenu ToolBar.Undo Desfés
+ tmenu ToolBar.Redo Refés
+ tmenu ToolBar.Cut Retalla
+ tmenu ToolBar.Copy Copia
+ tmenu ToolBar.Paste Enganxa
+ tmenu ToolBar.Find Cerca
+ tmenu ToolBar.FindNext Cerca el següent
+ tmenu ToolBar.FindPrev Cerca l'anterior
+ tmenu ToolBar.Replace Cerca i substitueix
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Finestra nova
+ tmenu ToolBar.WinSplit Divideix la finestra
+ tmenu ToolBar.WinMax Alçada màxima
+ tmenu ToolBar.WinMin Alçada mínima
+ tmenu ToolBar.WinVSplit Divideix la finestra verticalment
+ tmenu ToolBar.WinMaxWidth Amplada màxima
+ tmenu ToolBar.WinMinWidth Amplada mínima
+ tmenu ToolBar.WinClose Tanca la finestra
+ endif
+ tmenu ToolBar.LoadSesn Carrega una sessió
+ tmenu ToolBar.SaveSesn Desa la sessió
+ tmenu ToolBar.RunScript Executa un script
+ tmenu ToolBar.Make Crida a make
+ tmenu ToolBar.Shell Obre l'intèrpret d'ordres
+ tmenu ToolBar.RunCtags Crea un fitxer d'etiquetes
+ tmenu ToolBar.TagJump Salta a una etiqueta
+ tmenu ToolBar.Help Ajuda
+ tmenu ToolBar.FindHelp Cerca a l'ajuda
+ endfun
+endif
+
+
+" menú Sintaxi
+menutrans &Syntax &Sintaxi
+menutrans &Manual &Manual
+menutrans A&utomatic A&utomàtica
+menutrans on/off\ for\ &This\ file Activa/Desactiva\ en\ &aquest\ fitxer
+menutrans &Show\ filetypes\ in\ menu Mostra\ tots\ els\ &tipus\ al\ menú
+menutrans &Off &Desactiva
+menutrans Co&lor\ test Prova\ dels\ &colors
+menutrans &Highlight\ test Prova\ del\ &ressalt
+menutrans &Convert\ to\ HTML Converteix\ a\ &HTML
+menutrans Assembly Ensamblador
+menutrans Config Configuració
+menutrans Set\ '&syntax'\ only Només\ el\ ressalt\ de\ sintaxi
+menutrans Set\ '&filetype'\ too Carrega\ també\ els\ plugins
+
diff --git a/runtime/lang/menu_ca_es.utf-8.vim b/runtime/lang/menu_ca_es.utf-8.vim
new file mode 100644
index 000000000..23ee10da9
--- /dev/null
+++ b/runtime/lang/menu_ca_es.utf-8.vim
@@ -0,0 +1,7 @@
+" Menu translations for Catalan
+"
+" Maintainer: Ernest Adrogué <eadrogue@gmx.net>
+" Last Change: 29 Dec 2003
+"
+source <sfile>:p:h/menu_ca_es.latin1.vim
+
diff --git a/runtime/lang/menu_chinese_gb.936.vim b/runtime/lang/menu_chinese_gb.936.vim
new file mode 100644
index 000000000..9c3bf6dcd
--- /dev/null
+++ b/runtime/lang/menu_chinese_gb.936.vim
@@ -0,0 +1,230 @@
+" Menu Translations: Simplified Chinese (Windows)
+" Translated By: Wang Jun <junw@turbolinux.com.cn>
+" Last Change: Tue Sep 4 11:26:52 CST 2001
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp936
+
+" Help menu
+menutrans &Help °ïÖú(&H)
+menutrans &Overview<Tab><F1> Ô¤ÀÀ(&O)<Tab><F1>
+menutrans &User\ Manual Óû§ÊÖ²á(&U)
+menutrans &GUI ͼÐνçÃæ(&G)
+menutrans &How-to\ links HOWTOÎĵµ\.\.\.(&H)
+menutrans &Credits ×÷Õß(&C)
+menutrans Co&pying °æȨ(&P)
+menutrans &Version °æ±¾(&V)
+menutrans &About ¹ØÓÚ\ Vim(&A)
+
+" File menu
+menutrans &File Îļþ(&F)
+menutrans &Open\.\.\.<Tab>:e ´ò¿ª(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ·Ö¸î´°¿Ú²¢´ò¿ª(&L)<Tab>:sp
+menutrans &New<Tab>:enew н¨(&N)<Tab>:enew
+menutrans &Close<Tab>:close ¹Ø±Õ(&C)<Tab>:close
+menutrans &Save<Tab>:w ±£´æ(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Áí´æΪ(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. ·Ö¸î±È½Ï(&Diff)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. ·Ö¸î´ò²¹¶¡(&Patch)\.\.\.
+menutrans &Print ´òÓ¡(&P)
+menutrans Sa&ve-Exit<Tab>:wqa ±£´æ²¢Í˳ö(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa Í˳ö(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit ±à¼­(&E)
+menutrans &Undo<Tab>u »Ö¸´(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP Õ³Ìû(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Ìùµ½¹â±êÇ°(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p Ìùµ½¹â±êºó(&A)<Tab>]p
+menutrans &Delete<Tab>x ɾ³ý(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG È«Ñ¡(&S)<Tab>ggvG
+menutrans &Find\.\.\. ²éÕÒ(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ²éÕÒÌæ»»(&L)\.\.\.
+menutrans Settings\ &Window É趨´°¿Ú(&W)
+menutrans &Global\ Settings È«¾ÖÉ趨(&G)
+
+" Build boolean options
+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 ÉÏÏÂÎÄÐÐÊý(&C)
+
+menutrans &Virtual\ Edit ¿ÉÊÓ»¯±à¼­Ä£Ê½(&V)
+menutrans Never ´Ó²»
+menutrans Block\ Selection ¿éÑ¡Ôñ
+menutrans Insert\ mode ²åÈëģʽ
+menutrans Block\ and\ Insert ¿éÑ¡ÔñÓë²åÈëģʽ
+menutrans Always ËùÓÐģʽ
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! ¿ª/¹Ø²åÈëģʽ<Tab>:set\ im!
+
+menutrans Search\ &Path\.\.\. ²éÕÒ·¾¶\.\.\.(&P)
+
+menutrans Ta&g\ Files\.\.\. ±êÇ©Îļþ\.\.\.(&g)
+
+" GUI options
+menutrans Toggle\ &Toolbar ¿ª/¹Ø¹¤¾ßÌõ(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ¿ª/¹Øµ×²¿¹ö¶¯Ìõ(&B)
+menutrans Toggle\ &Left\ Scrollbar ¿ª/¹Ø×ó¶Ë¹ö¶¯Ìõ(&L)
+menutrans Toggle\ &Right\ Scrollbar ¿ª/¹ØÓҶ˹ö¶¯Ìõ(&R)
+
+
+" Edit/File Settings
+menutrans F&ile\ Settings ÎļþÉ趨(&i)
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! ¿ª/¹ØÏÔʾÐкÅ<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! ¿ª/¹ØÏÔʾTab<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! ¿ª/¹Øexpand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! ¿ª/¹Øauto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! ¿ª/¹ØC-indent<Tab>:set\ cin!
+
+
+" other options
+menutrans &Shiftwidth ËõÅÅ¿í¶È(&S)
+menutrans Soft\ &Tabstop αTab¿í¶È(&T)
+menutrans Te&xt\ Width\.\.\. Ò³Ãæ¿í¶È(&x)\.\.\.
+menutrans &File\ Format\.\.\. Îļþ¸ñʽ(&F)\.\.\.
+
+menutrans C&olor\ Scheme µ÷É«°å(&o)
+menutrans Select\ Fo&nt\.\.\. Ñ¡Ôñ×ÖÌå(&n)\.\.\.
+
+
+" Programming menu
+menutrans &Tools ¹¤¾ß(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ¼ìË÷¹â±ê´¦µÄ±êÇ©¹Ø¼ü×Ö(tag)(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T Ìø»Ø¼ìË÷Ç°µÄλÖÃ(&B)<Tab>^T
+menutrans Build\ &Tags\ File ½¨Á¢±êÇ©Ë÷ÒýÎļþ\ Tags(&T)
+menutrans &Folding FoldingÉ趨(&F)
+menutrans &Diff ±È½Ï(&D)
+menutrans &Make<Tab>:make Ö´ÐÐ\ Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl Áгö±àÒë´íÎó(&E)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ÁгöËùÓÐÐÅÏ¢(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ÏÂÒ»¸ö±àÒë´íÎó´¦(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ÉÏÒ»¸ö±àÒë´íÎó´¦(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold ¾É´íÎóÁбí(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew дíÎóÁбí(&E)<Tab>:cnew
+menutrans Error\ &Window ´íÎóÐÅÏ¢´°¿Ú(&W)
+menutrans &Set\ Compiler ÉèÖñàÒëÆ÷(&S)
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ת»»³É16½øÖÆ<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ´Ó16½øÖÆת»»»ØÎÄ×Ö<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi ʹÓÃ/²»Ê¹ÓÃFolding(&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 ¹Ø±ÕFolds(&L)<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM ¹Ø±ÕËùÓÐFolds(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Õ¹¿ªFolds(&P)<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Õ¹¿ªËùÓÐFolds(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod Fold·½Ê½(&H)
+menutrans Create\ &Fold<Tab>zf ½¨Á¢Fold(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd ɾ³ýFold(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD ɾ³ýËùÓÐFold(&A)<Tab>zD
+" moving around in folds
+menutrans Fold\ column\ &width É趨FoldÀ¸¿í(&W)
+
+" Tools.Diff Menu
+menutrans &Update ¸üÐÂ(&U)
+menutrans &Get\ Block È¡µÃ²»Í¬²¿·Ö(&G)
+menutrans &Put\ Block ½«²»Í¬²¿·ÖÓ¦Óõ½¶Ô·½(&P)
+
+
+" Names for buffer menu.
+menutrans &Buffers »º³åÇø(&B)
+menutrans &Refresh\ menu ¸üÐÂ(&R)
+menutrans &Delete ɾ³ý(&D)
+menutrans &Alternate ÐÞ¸Ä(&L)
+menutrans &Next ÏÂÒ»¸ö(&N)
+menutrans &Previous Ç°Ò»¸ö(&P)
+
+" Window menu
+menutrans &Window ´°¿Ú(&W)
+menutrans &New<Tab>^Wn н¨´°¿Ú(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws ·Ö¸î´°¿Ú(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ·Ö¸îµ½#(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ´¹Ö±·Ö¸î(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer Îļþä¯ÀÀÆ÷ʽ·Ö¸î(&X)
+menutrans &Close<Tab>^Wc ¹Ø±Õ´°¿Ú(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo ¹Ø±ÕÆäËü´°¿Ú(&O)<Tab>^Wo
+menutrans Move\ &To Òƶ¯µ½(&T)
+menutrans &Top<Tab>^WK ¶¥¶Ë(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ µ×¶Ë(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH ×ó±ß(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL ÓÒ±ß(&R)<Tab>^WL
+" menutrans Ne&xt<Tab>^Ww ÏÂÒ»¸ö(&X)<Tab>^Ww
+" menutrans P&revious<Tab>^WW ÉÏÒ»¸ö(&R)<Tab>^WW
+menutrans Rotate\ &Up<Tab>^WR ÉÏÒÆ´°¿Ú(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ÏÂÒÆ´°¿Ú(&D)<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= ËùÓд°¿ÚµÈ¸ß(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ×î´ó¸ß¶È(&M)<Tab>^W
+menutrans M&in\ Height<Tab>^W1_ ×îС¸ß¶È(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| ×î´ó¿í¶È(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| ×îС¿í¶È(&h)<Tab>^W1\|
+"
+" The popup menu
+menutrans &Undo ³·Ïú(&U)
+menutrans Cu&t ¼ôÇÐ(&T)
+menutrans &Copy ¸´ÖÆ(&C)
+menutrans &Paste Õ³Ìû(&P)
+menutrans &Delete ɾ³ý(&D)
+menutrans Select\ Blockwise BlockwiseÑ¡Ôñ
+menutrans Select\ &Word Ñ¡Ôñµ¥´Ê(&W)
+menutrans Select\ &Line Ñ¡ÔñÐÐ(&L)
+menutrans Select\ &Block Ñ¡Ôñ¿é(&B)
+menutrans Select\ &All È«Ñ¡(&A)
+"
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ´ò¿ªÎļþ
+ tmenu ToolBar.Save ±£´æµ±Ç°Îļþ
+ tmenu ToolBar.SaveAll ±£´æÈ«²¿Îļþ
+ tmenu ToolBar.Print ´òÓ¡
+ tmenu ToolBar.Undo ³·ÏúÉÏ´ÎÐÞ¸Ä
+ tmenu ToolBar.Redo ÖØ×öÉϴγ·ÏúµÄ¶¯×÷
+ tmenu ToolBar.Cut ¼ôÇÐÖÁ¼ôÌù°å
+ tmenu ToolBar.Copy ¸´ÖƵ½¼ôÌù°å
+ tmenu ToolBar.Paste ÓɼôÌù°åÕ³Ìû
+ tmenu ToolBar.Find ²éÕÒ...
+ tmenu ToolBar.FindNext ²éÕÒÏÂÒ»¸ö
+ tmenu ToolBar.FindPrev ²éÕÒÉÏÒ»¸ö
+ tmenu ToolBar.Replace Ìæ»»...
+ tmenu ToolBar.LoadSesn ¼ÓÔػỰ
+ tmenu ToolBar.SaveSesn ±£´æµ±Ç°µÄ»á»°
+ tmenu ToolBar.RunScript ÔËÐÐVim½Å±¾
+ tmenu ToolBar.Make Ö´ÐÐ Make
+ tmenu ToolBar.Shell ´ò¿ªÒ»¸öÃüÁî´°¿Ú
+ tmenu ToolBar.RunCtags Ö´ÐÐ ctags
+ tmenu ToolBar.TagJump Ìøµ½µ±Ç°¹â±êλÖõıêÇ©
+ tmenu ToolBar.Help Vim °ïÖú
+ tmenu ToolBar.FindHelp ²éÕÒ Vim °ïÖú
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax Óï·¨(&S)
+menutrans Set\ '&syntax'\ only Ö»É趨\ 'syntax'(&s)
+menutrans Set\ '&filetype'\ too Ò²É趨\ 'filetype'(&f)
+menutrans &Off ¹Ø±Õ(&O)
+menutrans &Manual ÊÖ¶¯É趨(&M)
+menutrans A&utomatic ×Ô¶¯É趨(&U)
+menutrans on/off\ for\ &This\ file Ö»¶ÔÕâ¸öÎļþ´ò¿ª/¹Ø±Õ(&T)
+menutrans Co&lor\ test É«²ÊÏÔʾ²âÊÔ(&L)
+menutrans &Highlight\ test Ó﷨Ч¹û²âÊÔ(&H)
+menutrans &Convert\ to\ HTML ת»»³É\ HTML\ ¸ñʽ(&C)
diff --git a/runtime/lang/menu_chinese_taiwan.950.vim b/runtime/lang/menu_chinese_taiwan.950.vim
new file mode 100644
index 000000000..f3b285913
--- /dev/null
+++ b/runtime/lang/menu_chinese_taiwan.950.vim
@@ -0,0 +1,284 @@
+" Menu Translations: Traditional Chinese (for Big5 UNIX/Windows)
+" Translated By: Hung-Teh, Lin <piaip@csie.ntu.edu.tw>
+" Last Change: Thu Apr 24 17:34:50 CST 2003
+
+" {{{ Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+" }}}
+
+scriptencoding cp950
+
+" {{{ Help menu: complete
+menutrans &Help »²§U»¡©ú(&H)
+" ------------------------------------------------------------------------
+menutrans &Overview<Tab><F1> »¡©ú¤å¥óÁ`Äý(&O)<Tab><F1>
+menutrans &User\ Manual ¨Ï¥ÎªÌ¤â¥U(&U)
+menutrans &How-to\ links ¦p¦ó§@\.\.\.(&H)
+menutrans &GUI ¹Ï«¬¬É­±(&G)
+menutrans &Credits ·PÁÂ(&C)
+menutrans Co&pying ª©Åv«Å§i(&P)
+menutrans O&rphans ¬@±Ï©t¨à(&R)
+" ------------------------------------------------------------------------
+menutrans &Version µ{¦¡ª©¥»¸ê°T(&V)
+menutrans &About Ãö©ó\ Vim(&A)
+" }}}
+
+" {{{ File menu: complete
+menutrans &File ÀÉ®×(&F)
+" ------------------------------------------------------------------------
+menutrans &Open\.\.\.<Tab>:e ¶}±Ò(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ¤À³Îµøµ¡¨Ã¶}±Ò(&L)<Tab>:sp
+menutrans &New<Tab>:enew ½s¿è·sÀÉ®×(&N)<Tab>:enew
+menutrans &Close<Tab>:close Ãö³¬ÀÉ®×(&C)<Tab>:close
+" ------------------------------------------------------------------------
+menutrans &Save<Tab>:w Àx¦s(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav ¥t¦s·sÀÉ(&A)\.\.\.<Tab>:sav
+" ------------------------------------------------------------------------
+menutrans Split\ &Diff\ with\.\.\. ¤ñ¸û(&Diff)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. °õ¦æPatch(&B)\.\.\.
+" ------------------------------------------------------------------------
+menutrans &Print ¦C¦L(&P)
+" ------------------------------------------------------------------------
+menutrans Sa&ve-Exit<Tab>:wqa Àx¦s¨ÃÂ÷¶}(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa Â÷¶}(&X)<Tab>:qa
+" }}}
+
+" {{{ Edit menu
+menutrans &Edit ½s¿è(&E)
+" ------------------------------------------------------------------------
+menutrans &Undo<Tab>u ´_­ì(&U)<Tab>u
+menutrans &Redo<Tab>^R ¨ú®ø¤W¦¸´_­ì(&R)<Tab>^R
+menutrans Rep&eat<Tab>\. ­«½Æ¤W¦¸°Ê§@(&E)<Tab>\.
+" ------------------------------------------------------------------------
+menutrans Cu&t<Tab>"+x °Å¤U(&T)<Tab>"+x
+menutrans &Copy<Tab>"+y ½Æ»s(&C)<Tab>"+y
+menutrans &Paste<Tab>"+gP ¶K¤W(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ¶K¨ì´å¼Ð«e(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p ¶K¨ì´å¼Ð«á(&A)<Tab>]p
+menutrans &Delete<Tab>x §R°£(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG ¥þ¿ï(&S)<Tab>ggvG
+" ------------------------------------------------------------------------
+menutrans &Find\.\.\. ´M§ä(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ´M§ä¨Ã¨ú¥N(&L)\.\.\.
+" ------------------------------------------------------------------------
+menutrans Settings\ &Window ³]©wµøµ¡(&W)
+menutrans &Global\ Settings ¥þ°ì³]©w(&G)
+menutrans F&ile\ Settings ³]©w¦¹ÀÉ®×(&I)
+menutrans C&olor\ Scheme °t¦â³]©w(&O)
+menutrans &Keymap Áä½L¹ïÀ³(&K)
+ " "{{{ Keymap:
+ menutrans None µL
+ " }}}
+menutrans Select\ Fo&nt\.\.\. ³]©w¦r«¬(&N)\.\.\.
+" }}}
+
+" {{{ Edit.FileSettings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! ¤Á´«Åã¥Ü¦æ¸¹(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! ¤Á´«Åã¥Ü¦æ§À¤ÎTAB(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! ¤Á´«¦Û°Ê§é¦æÅã¥Ü(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! ¤Á´«§é¦æÅã¥Ü¥i¥ô·NÂ_¥y(&R)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! ¤Á´«®i¶}TAB(&E)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! ¤Á´«¦Û°ÊÁY±Æ(&A)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! ¤Á´«¢Ñ»y¨¥ÁY±Æ(&C)<Tab>:set\ cin!
+" ------------------------------------------------------------------------
+menutrans &Shiftwidth ÁY±Æ¼e«×(shiftwidth)(&S)
+menutrans Soft\ &Tabstop ³nÅé¼ÒÀÀTAB(softtabstop)(&T)
+menutrans Te&xt\ Width\.\.\. ¤å¦r­¶­±¼e«×(textwidth)(&X)\.\.\.
+menutrans &File\ Format\.\.\. ³]©wÀɮ׮榡(¹ïÀ³§@·~¨t²Î)(&F)\.\.\.
+" }}}
+
+" {{{ Edit.GlobalSettings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! ¤Á´«°ª«G«×·j´M¦r¦ê(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! ¤Á´«©¿²¤¤j¤p¼g(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! ¤Á´«Åã¥Ü¹ïÀ³¬A¸¹(&S)<Tab>:set\ sm!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! ¤Á´«¶Ç²ÎVi¬Û®e¼Ò¦¡(&O)<Tab>:set\ cp!
+menutrans &Context\ lines ¥»¤å«e«á«O¯d¦æ¼Æ(scrolloff)(&C)
+menutrans &Virtual\ Edit ´å¼Ð¥ô·N²¾°Ê(virtualedit)(&V)
+ " {{{ Edit.GlobalSettings.VirtualEdit
+ menutrans Never ¤£¨Ï¥Î
+ menutrans Block\ Selection °Ï¶ô¿ï¾Ü®É
+ menutrans Insert\ mode ´¡¤J¼Ò¦¡®É
+ menutrans Block\ and\ Insert °Ï¶ô»P´¡¤J¼Ò¦¡
+ menutrans Always ¤@ª½¶}±Ò
+ " }}}
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! ¤Á´«´¡¤J¼Ò¦¡(&M)<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. ·j´M¸ô®|(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. Tag\ ¼ÐÅÒ¯Á¤ÞÀÉ®×(&G)\.\.\.
+" ------------------------------------------------------------------------
+menutrans Toggle\ &Toolbar ¤Á´«¨Ï¥Î¤u¨ã¦C(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ¤Á´«¨Ï¥Î©³ºÝ±²°Ê¶b(&B)
+menutrans Toggle\ &Left\ Scrollbar ¤Á´«¨Ï¥Î¥ªºÝ±²°Ê¶b(&L)
+menutrans Toggle\ &Right\ Scrollbar ¤Á´«¨Ï¥Î¥kºÝ±²°Ê¶b(&R)
+" }}}
+
+" {{{ Tools menu: complete
+menutrans &Tools ¤u¨ã(&T)
+" ------------------------------------------------------------------------
+menutrans &Jump\ to\ this\ tag<Tab>g^] À˯Á´å¼Ð³Bªº¼ÐÅÒÃöÁä¦r(tag)(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T ¸õ¦^À˯Á«eªº¦ì¸m(&B)<Tab>^T
+menutrans Build\ &Tags\ File «Ø¥ß¼ÐÅÒ¯Á¤ÞÀÉ\ Tags(&T)
+" ------------------------------------------------------------------------
+menutrans &Folding ÂÐÅ|(Fold)³]©w(&F)
+ " {{{ Tools.Fold
+ menutrans &Enable/Disable\ folds<Tab>zi ¤Á´«¨Ï¥Î\ Folding(&E)<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv À˵ø¦¹¼h\ Fold(&V)<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ¥uÀ˵ø¦¹\ Fold(&W)<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm ¦¬°_¤@¼h\ Folds(&L)<Tab>zm
+ menutrans &Close\ all\ folds<Tab>zM ¦¬°_©Ò¦³\ Folds(&C)<Tab>zM
+ menutrans O&pen\ more\ folds<Tab>zr ¥´¶}¤@¼h\ Folds(&P)<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR ¥´¶}©Ò¦³\ Folds(&O)<Tab>zR
+ menutrans Fold\ Met&hod Folding\ ¤è¦¡(&H)
+ " {{{ Tools.Fold.Method
+ menutrans M&anual ¤â°Ê«Ø¥ß(&A)
+ menutrans I&ndent ¨Ì·ÓÁY±Æ(&N)
+ menutrans E&xpression ¦Û­q¹Bºâ¦¡(&X)
+ menutrans S&yntax ¨Ì·Ó»yªk³]©w(&Y)
+ menutrans &Diff Diff(&D)
+ menutrans Ma&rker ¼Ð°O(Marker)(&R)
+ " }}}
+ " ------------------------------------------------------------------------
+ menutrans Create\ &Fold<Tab>zf «Ø¥ß\ Fold(&F)<Tab>zf
+ menutrans &Delete\ Fold<Tab>zd §R°£\ Fold(&D)<Tab>zd
+ menutrans Delete\ &All\ Folds<Tab>zD §R°£©Ò¦³\ Fold(&A)<Tab>zD
+ " ------------------------------------------------------------------------
+ menutrans Fold\ column\ &width ³]©w\ FoldÄæ¼e(&W)
+ " }}}
+menutrans &Diff Diff(&D)
+ " {{{ Tools.Diff
+ menutrans &Update §ó·s(&U)
+ menutrans &Get\ Block ¨ú±o°Ï¶ô(&G)
+ menutrans &Put\ Block ¶K¤W°Ï¶ô(&P)
+ " }}}
+" ------------------------------------------------------------------------
+menutrans &Make<Tab>:make °õ¦æ\ Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl ¦C¥X½sĶ¿ù»~(&E)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ¦C¥X©Ò¦³°T®§(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ¤U¤@­Ó½sĶ¿ù»~³B(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ¤W¤@­Ó½sĶ¿ù»~³B(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold À˵ø¿ù»~¦Cªí(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew À˵ø·s¿ù»~¦Cªí(&E)<Tab>:cnew
+menutrans Error\ &Window ¿ù»~°T®§µøµ¡(&W)
+ " {{{ Tools.ErrorWindow
+ menutrans &Update<Tab>:cwin §ó·s(&U)<Tab>:cwin
+ menutrans &Open<Tab>:copen ¶}±Ò(&O)<Tab>:copen
+ menutrans &Close<Tab>:cclose Ãö³¬(&C)<Tab>:cclose
+ " }}}
+menutrans &Set\ Compiler ³]©w½sĶ¾¹Compiler(&S)
+" ------------------------------------------------------------------------
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Âà´«¦¨16¶i¦ì½X(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ±q16¶i¦ì½XÂà´«¦^¤å¦r(&R)<Tab>:%!xxd\ -r
+" }}}
+
+" {{{ Syntax menu: compete
+menutrans &Syntax »yªk®ÄªG(&S)
+" ------------------------------------------------------------------------
+menutrans &Show\ filetypes\ in\ menu Åã¥Ü©Ò¦³¥i¥ÎÀɮ׮榡(&S)
+menutrans Set\ '&syntax'\ only ¥u¨Ï¥Î\ 'syntax'(&S)
+menutrans Set\ '&filetype'\ too ¨Ï¥Î\ 'syntax'+'filetype'(&F)
+menutrans &Off Ãö³¬®ÄªG(&O)
+menutrans &Manual ¤â°Ê³]©w(&M)
+menutrans A&utomatic ¦Û°Ê³]©w(&U)
+menutrans on/off\ for\ &This\ file ¥u¤Á´«¦¹Àɪº®ÄªG³]©w(&T)
+" ------------------------------------------------------------------------
+menutrans Co&lor\ test ¦â±mÅã¥Ü´ú¸Õ(&L)
+menutrans &Highlight\ test »yªk®ÄªG´ú¸Õ(&H)
+menutrans &Convert\ to\ HTML Âà´«¦¨\ HTML\ ®æ¦¡(&C)
+" }}}
+
+" {{{ Buffers menu: complete
+menutrans &Buffers ½w½Ä°Ï(&B)
+" ------------------------------------------------------------------------
+menutrans &Refresh\ menu §ó·s(&R)
+menutrans &Delete §R°£(&D)
+menutrans &Alternate ¤Á´«¤W¦¸½s¿è½w½Ä°Ï(&A)
+menutrans &Next ¤U¤@­Ó(&N)
+menutrans &Previous «e¤@­Ó(&P)
+" ------------------------------------------------------------------------
+" menutrans [No\ file] [µLÀÉ®×]
+" }}}
+
+" {{{ Window menu: complete
+menutrans &Window µøµ¡(&W)
+" ------------------------------------------------------------------------
+menutrans &New<Tab>^Wn ¶}·sµøµ¡(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws ¤À³Îµøµ¡(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ¤À³Î¨ì#(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ««ª½¤À³Î(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer ÀÉ®×Á`ºÞ¦¡¤À³Î(&X)
+" ------------------------------------------------------------------------
+menutrans &Close<Tab>^Wc Ãö³¬µøµ¡(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Ãö³¬¨ä¥¦µøµ¡(&O)<Tab>^Wo
+" ------------------------------------------------------------------------
+menutrans Move\ &To ²¾¦Ü(&T)
+ " {{{ Window.MoveTo
+ menutrans &Top<Tab>^WK ³»ºÝ(&T)<Tab>^WK
+ menutrans &Bottom<Tab>^WJ ©³ºÝ(&B)<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH ¥ªÃä(&L)<Tab>^WH
+ menutrans &Right\ side<Tab>^WL ¥kÃä(&R)<Tab>^WL
+ " }}}
+menutrans Rotate\ &Up<Tab>^WR ¤W²¾µøµ¡(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ¤U²¾µøµ¡(&D)<Tab>^Wr
+" ------------------------------------------------------------------------
+menutrans &Equal\ Size<Tab>^W= ©Ò¦³µøµ¡µ¥°ª(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ³Ì¤j°ª«×(&M)<Tab>^W
+menutrans M&in\ Height<Tab>^W1_ ³Ì¤p°ª«×(&I)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| ³Ì¤j¼e«×(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| ³Ì¤p¼e«×(&H)<Tab>^W1\|
+" }}}
+
+" {{{ The popup menu: complete
+menutrans &Undo ´_­ì(&U)
+" ------------------------------------------------------------------------
+menutrans Cu&t °Å¤U(&T)
+menutrans &Copy ½Æ»s(&C)
+menutrans &Paste ¶K¤W(&P)
+menutrans &Delete §R°£(&D)
+" ------------------------------------------------------------------------
+menutrans Select\ Blockwise Blockwise¦¡¿ï¾Ü
+menutrans Select\ &Word ¿ï¾Ü³æ¦r(&W)
+menutrans Select\ &Line ¿ï¾Ü¦æ(&L)
+menutrans Select\ &Block ¿ï¾Ü°Ï¶ô(&B)
+menutrans Select\ &All ¥þ¿ï(&A)
+" }}}
+
+" {{{ The GUI toolbar: complete
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ¶}±ÒÀÉ®×
+ tmenu ToolBar.Save Àx¦s¥Ø«e½s¿è¤¤ªºÀÉ®×
+ tmenu ToolBar.SaveAll Àx¦s¥þ³¡ÀÉ®×
+ tmenu ToolBar.Print ¦C¦L
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Undo ´_­ì¤W¦¸ÅÜ°Ê
+ tmenu ToolBar.Redo ¨ú®ø¤W¦¸´_­ì°Ê§@
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Cut °Å¤U¦Ü°Å¶Kï
+ tmenu ToolBar.Copy ½Æ»s¨ì°Å¶Kï
+ tmenu ToolBar.Paste ¥Ñ°Å¶Kï¶K¤W
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Find ´M§ä...
+ tmenu ToolBar.FindNext §ä¤U¤@­Ó
+ tmenu ToolBar.FindPrev §ä¤W¤@­Ó
+ tmenu ToolBar.Replace ¨ú¥N...
+" ------------------------------------------------------------------------
+ tmenu ToolBar.LoadSesn ¸ü¤J Session
+ tmenu ToolBar.SaveSesn Àx¦s¥Ø«eªº Session
+ tmenu ToolBar.RunScript °õ¦æ Vim µ{¦¡ÀÉ
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Make °õ¦æ Make
+ tmenu ToolBar.Shell ¶}±Ò¤@­Ó©R¥O¦Cµøµ¡ DosBox
+ tmenu ToolBar.RunCtags °õ¦æ ctags
+ tmenu ToolBar.TagJump ¸õ¨ì¥Ø«e´å¼Ð¦ì¸mªº tag
+ tmenu ToolBar.Help Vim »²§U»¡©ú
+ tmenu ToolBar.FindHelp ·j´M Vim »¡©ú¤å¥ó
+ endfun
+endif
+" }}}
+
+" vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
diff --git a/runtime/lang/menu_cs.cp1250.vim b/runtime/lang/menu_cs.cp1250.vim
new file mode 100644
index 000000000..becbd93b7
--- /dev/null
+++ b/runtime/lang/menu_cs.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Czech
+
+source <sfile>:p:h/menu_czech_czech_republic.1250.vim
diff --git a/runtime/lang/menu_cs.latin1.vim b/runtime/lang/menu_cs.latin1.vim
new file mode 100644
index 000000000..efb28a003
--- /dev/null
+++ b/runtime/lang/menu_cs.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Czech
+
+source <sfile>:p:h/menu_czech_czech_republic.1252.vim
diff --git a/runtime/lang/menu_cs_cz.cp1250.vim b/runtime/lang/menu_cs_cz.cp1250.vim
new file mode 100644
index 000000000..becbd93b7
--- /dev/null
+++ b/runtime/lang/menu_cs_cz.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Czech
+
+source <sfile>:p:h/menu_czech_czech_republic.1250.vim
diff --git a/runtime/lang/menu_cs_cz.iso_8859-2.vim b/runtime/lang/menu_cs_cz.iso_8859-2.vim
new file mode 100644
index 000000000..e4aeb4f14
--- /dev/null
+++ b/runtime/lang/menu_cs_cz.iso_8859-2.vim
@@ -0,0 +1,245 @@
+" Menu Translations: Czech for ISO-8859-2
+" Maintainer: Jiri Brezina <brzj@seznam.cz>
+" vim:set foldmethod=marker:
+" $Revision$
+" $Date$
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding ISO-8859-2
+
+" {{{ 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 &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
+menutrans Split\ &Diff\ with\.\.\. Rozdìlit\ okno\ -\ &Diff\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Rozdìlit\ okno\ -\ &Patch\.\.\.
+menutrans &Print &Tisk
+menutrans Sa&ve-Exit<Tab>:wqa U&lo¾it\ -\ Konec<Tab>:wqa
+menutrans E&xit<Tab>:qa &Konec<Tab>:qa
+" }}}
+
+" {{{ 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
+menutrans &Delete<Tab>x &Smazat<Tab>x
+menutrans &Select\ all<Tab>ggVG Vy&brat\ v¹e<Tab>ggVG
+menutrans &Find\.\.\. &Hledat\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+menutrans Options\.\.\. Volb&y\.\.\.
+menutrans Settings\ &Window Nastav&ení\ okna
+ " {{{2 Edit -1
+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\ &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
+menutrans Select\ Fo&nt\.\.\. Vybrat\ pís&mo\.\.\.
+" }}}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ù
+
+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\ v¹echny\ foldy<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Pøidat\ jedn&u\ úroveò\ foldù<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Otevøít\ v¹echny\ foldy<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 &Syntax
+ "menutrans &Diff &Diff
+ "menutrans Ma&rker Ma&rker
+menutrans Create\ &Fold<Tab>zf Vytvoøit\ &fold<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Vymazat\ fol&d<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD V&ymazat\ v¹echny\ foldy<Tab>zD
+menutrans Fold\ col&umn\ width Sloupec\ zob&razení\ foldù
+
+menutrans &Update &Obnovit
+menutrans &Get\ Block &Sejmout\ Blok
+menutrans &Put\ Block &Vlo¾it\ Blok
+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 &Update<Tab>:cwin O&bnovit<Tab>:cwin
+menutrans &Open<Tab>:copen &Otevøít<Tab>:copen
+menutrans &Close<Tab>:cclose &Zavøít<Tab>:cclose
+menutrans &Set\ 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í
+menutrans [No\ File] [®ádný\ soubor]
+" }}}
+
+" {{{ 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 &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\ &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
+ tmenu ToolBar.Print Tisk
+ 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
+" }}}
diff --git a/runtime/lang/menu_cs_cz.latin1.vim b/runtime/lang/menu_cs_cz.latin1.vim
new file mode 100644
index 000000000..efb28a003
--- /dev/null
+++ b/runtime/lang/menu_cs_cz.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Czech
+
+source <sfile>:p:h/menu_czech_czech_republic.1252.vim
diff --git a/runtime/lang/menu_czech_czech_republic.1250.vim b/runtime/lang/menu_czech_czech_republic.1250.vim
new file mode 100644
index 000000000..2bff9e277
--- /dev/null
+++ b/runtime/lang/menu_czech_czech_republic.1250.vim
@@ -0,0 +1,245 @@
+" Menu Translations: Czech for MS-Windows
+" Maintainer: Jiri Brezina <brzj@seznam.cz>
+" vim:set foldmethod=marker:
+" $Revision$
+" $Date$
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp1250
+
+" {{{ 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 &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
+menutrans Split\ &Diff\ with\.\.\. Rozdìlit\ okno\ -\ &Diff\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Rozdìlit\ okno\ -\ &Patch\.\.\.
+menutrans &Print &Tisk
+menutrans Sa&ve-Exit<Tab>:wqa U&ložit\ -\ Konec<Tab>:wqa
+menutrans E&xit<Tab>:qa &Konec<Tab>:qa
+" }}}
+
+" {{{ 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
+menutrans &Delete<Tab>x &Smazat<Tab>x
+menutrans &Select\ all<Tab>ggVG Vy&brat\ vše<Tab>ggVG
+menutrans &Find\.\.\. &Hledat\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+menutrans Options\.\.\. Volb&y\.\.\.
+menutrans Settings\ &Window Nastav&ení\ okna
+ " {{{2 Edit -1
+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\ &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
+menutrans Select\ Fo&nt\.\.\. Vybrat\ pís&mo\.\.\.
+" }}}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ù
+
+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\ všechny\ foldy<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Pøidat\ jedn&u\ úroveò\ foldù<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Otevøít\ všechny\ foldy<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 &Syntax
+ "menutrans &Diff &Diff
+ "menutrans Ma&rker Ma&rker
+menutrans Create\ &Fold<Tab>zf Vytvoøit\ &fold<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Vymazat\ fol&d<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD V&ymazat\ všechny\ foldy<Tab>zD
+menutrans Fold\ col&umn\ width Sloupec\ zob&razení\ foldù
+
+menutrans &Update &Obnovit
+menutrans &Get\ Block &Sejmout\ Blok
+menutrans &Put\ Block &Vložit\ Blok
+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 &Update<Tab>:cwin O&bnovit<Tab>:cwin
+menutrans &Open<Tab>:copen &Otevøít<Tab>:copen
+menutrans &Close<Tab>:cclose &Zavøít<Tab>:cclose
+menutrans &Set\ 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í
+menutrans [No\ File] [Žádný\ soubor]
+" }}}
+
+" {{{ 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 &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\ &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
+ tmenu ToolBar.Print Tisk
+ 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
+" }}}
diff --git a/runtime/lang/menu_czech_czech_republic.1252.vim b/runtime/lang/menu_czech_czech_republic.1252.vim
new file mode 100644
index 000000000..27e1fb4f2
--- /dev/null
+++ b/runtime/lang/menu_czech_czech_republic.1252.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Czech for Windows in ASCII encoding
+
+source <sfile>:p:h/menu_czech_czech_republic.ascii.vim
diff --git a/runtime/lang/menu_czech_czech_republic.ascii.vim b/runtime/lang/menu_czech_czech_republic.ascii.vim
new file mode 100644
index 000000000..1f2e96e9b
--- /dev/null
+++ b/runtime/lang/menu_czech_czech_republic.ascii.vim
@@ -0,0 +1,245 @@
+" Menu Translations: Czech for systems without localization
+" Maintainer: Jiri Brezina <brzj@seznam.cz>
+" vim:set foldmethod=marker:
+" $Revision$
+" $Date$
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+
+
+" {{{ 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 &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
+" }}}
+
+" {{{ Edit menu
+menutrans &Edit Upr&avy
+menutrans &Undo<Tab>u &Zpet<Tab>u
+menutrans &Redo<Tab>^R Z&rusit\ vraceni<Tab>^R
+menutrans Rep&eat<Tab>\. &Opakovat<Tab>\.
+menutrans Cu&t<Tab>"+x &Vyriznout<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopirovat<Tab>"+y
+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
+menutrans &Select\ all<Tab>ggVG Vy&brat\ vse<Tab>ggVG
+menutrans &Find\.\.\. &Hledat\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+menutrans Options\.\.\. Volb&y\.\.\.
+menutrans Settings\ &Window Nastav&eni\ okna
+ " {{{2 Edit -1
+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 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\.\.\.
+menutrans Ta&g\ Files\.\.\. Ta&g\ soubory\.\.\.
+menutrans Toggle\ &Toolbar Prepnout\ &Toolbar
+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
+menutrans F&ile\ Settings Nastaveni\ so&uboru
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Prepnout\ cislovani\ ra&dku<Tab>:set\ nu!
+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!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Prepnout\ &expand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Prepnout\ &auto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Prepnout\ &C-indenting<Tab>:set\ cin!
+menutrans &Shiftwidth Nastav&it\ sirku\ od&sazeni
+menutrans Soft\ &Tabstop Nastavit\ Soft\ &Tabstop
+menutrans Te&xt\ Width\.\.\. Sirka\ te&xtu\.\.\.
+menutrans &File\ Format\.\.\. &Format\ souboru\.\.\.
+ " {{{2 Edit -3
+menutrans C&olor\ Scheme Barevne\ s&chema
+menutrans &Keymap Klavesova\ m&apa
+menutrans Select\ Fo&nt\.\.\. Vybrat\ pis&mo\.\.\.
+" }}}1
+
+" {{{ Programming menu
+menutrans &Tools Nast&roje
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Skocit\ na\ tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T Skocit\ &zpet<Tab>^T
+menutrans Build\ &Tags\ File &Vytvorit\ soubor\ tagu
+
+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
+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!
+menutrans &Next\ Error<Tab>:cn Dalsi\ ch&yba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Predchozi\ chyba<Tab>:cp
+menutrans &Older\ List<Tab>:cold Sta&rsi\ seznam<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew N&ovejsi\ seznam<Tab>:cnew
+menutrans Error\ &Window Chybove\ o&kno
+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 &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
+" }}}
+
+" {{{ Syntax menu
+menutrans &Syntax Synta&xe
+menutrans Set\ '&syntax'\ only Nastavit\ pouze\ 'synta&x'
+menutrans Set\ '&filetype'\ too Nastavit\ take\ '&filetype'
+menutrans &Off &Vypnout
+menutrans &Manual &Rucne
+menutrans A&utomatic A&utomaticky
+menutrans on/off\ for\ &This\ file &Prepnout\ (pro\ tento\ soubor)
+menutrans o&ff\ (this\ file) vyp&nout\ (pro\ tento\ soubor)
+menutrans Co&lor\ test Test\ &barev
+menutrans &Highlight\ test &Test\ zvyraznovani
+menutrans &Convert\ to\ HTML Prevest\ &do\ HTML
+menutrans &Show\ filetypes\ in\ menu &Zobrazit\ vyber\ moznosti
+" }}}
+
+" {{{ Menu Buffers
+menutrans &Buffers &Buffery
+menutrans &Refresh\ menu &Obnovit\ menu
+menutrans &Delete Z&rusit
+menutrans &Alternate &Zmenit
+menutrans &Next &Dalsi
+menutrans &Previous &Predchozi
+menutrans [No\ File] [Zadny\ soubor]
+" }}}
+
+" {{{ Menu Window
+menutrans &Window &Okna
+menutrans &New<Tab>^Wn &Nove<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Rozdelit<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Ro&zdelit\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Rozdelit\ &vertikalne<Tab>^Wv
+menutrans Split\ File\ E&xplorer Rozdelit\ -\ File\ E&xplorer
+menutrans Move\ &To &Presun
+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 Zavri&t<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zavrit\ &ostatni<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &Dalsi<Tab>^Ww
+menutrans P&revious<Tab>^WW &Predchozi<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Stejna\ vyska<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Maximalni\ vys&ka<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ M&inimalni\ vyska<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| &Maximalni\ sirka<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimalni\ sirk&a<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR Rotovat\ na&horu<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotovat\ &dolu<Tab>^Wr
+
+" {{{ Help menu
+menutrans &Help &Napoveda
+menutrans &Overview<Tab><F1> &Prehled<Tab><F1>
+menutrans &User\ Manual &Uzivatelsky\ Manual
+menutrans &How-to\ links Ho&wto
+menutrans &GUI &Graficke\ rozhrani
+menutrans &Credits &Autori
+menutrans Co&pying &Licencni\ politika
+menutrans &Find\.\.\. &Hledat\.\.\.
+menutrans O&rphans O&sirele\ deti
+menutrans &Version &Verze
+menutrans &About &O\ aplikaci
+" }}}
+
+" {{{ The popup menu
+menutrans &Undo &Zpet
+menutrans Cu&t &Vyriznout
+menutrans &Copy &Kopirovat
+menutrans &Paste &Vlozit
+menutrans &Delete &Smazat
+menutrans Select\ Blockwise Vybrat\ blokove
+menutrans Select\ &Word Vybrat\ &slovo
+menutrans Select\ &Line Vybrat\ &radek
+menutrans Select\ &Block Vybrat\ &blok
+menutrans Select\ &All Vybrat\ &vse
+" }}}
+
+" {{{ 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
+endif
+" }}}
diff --git a/runtime/lang/menu_de.latin1.vim b/runtime/lang/menu_de.latin1.vim
new file mode 100644
index 000000000..07fee4b0a
--- /dev/null
+++ b/runtime/lang/menu_de.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: German for iso-8859-1 encoding
+
+source <sfile>:p:h/menu_de_de.latin1.vim
diff --git a/runtime/lang/menu_de.utf-8.vim b/runtime/lang/menu_de.utf-8.vim
new file mode 100644
index 000000000..a64bdd0fe
--- /dev/null
+++ b/runtime/lang/menu_de.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: German for UTF-8 encoding
+
+source <sfile>:p:h/menu_de_de.latin1.vim
diff --git a/runtime/lang/menu_de_de.latin1.vim b/runtime/lang/menu_de_de.latin1.vim
new file mode 100644
index 000000000..15ecf53d3
--- /dev/null
+++ b/runtime/lang/menu_de_de.latin1.vim
@@ -0,0 +1,279 @@
+" Menu Translations: German / Deutsch
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Originally By: Marcin Dalecki <dalecki@cs.net.pl>
+" Last Change: Sat, 20 Apr 2002 19:02:42 CEST
+" vim:set foldmethod=marker tabstop=8:
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252 and
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" {{{ FILE / DATEI
+menutrans &File &Datei
+menutrans &Open\.\.\.<Tab>:e &Öffnen\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp In\ geteiltem\ &Fenster\ Öffnen\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Neue\ Datei<Tab>:enew
+menutrans &Close<Tab>:close S&chließen<Tab>:close
+menutrans &Save<Tab>:w &Speichern<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Speichern\ &Als\.\.\.<Tab>:sav
+menutrans &Print &Drucken
+menutrans Sa&ve-Exit<Tab>:wqa Speichern\ und\ Be&enden<Tab>:wqa
+menutrans E&xit<Tab>:qa &Beenden<Tab>:qa
+
+if has("diff")
+ menutrans Split\ &Diff\ with\.\.\. D&ifferenz\ in\ geteiltem\ Fenster\ mit\.\.\.
+ menutrans Split\ Patched\ &By\.\.\. &Patch\ in\ geteiltem\ Fenster\ mit\.\.\.
+endif
+" }}} FILE / DATEI
+
+" {{{ EDIT / EDITIEREN
+menutrans &Edit &Editieren
+menutrans &Undo<Tab>u Z&urück<Tab>u
+menutrans &Redo<Tab>^R Vo&r<Tab>^R
+menutrans Rep&eat<Tab>\. &Wiederholen<Tab>\.
+menutrans Cu&t<Tab>"+x &Ausschneiden<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopieren<Tab>"+y
+menutrans &Paste<Tab>"+gP Ein&fügen<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Da&vor\ Einfügen<Tab>[p
+menutrans Put\ &After<Tab>]p Da&nach\ Einfügen<Tab>]p
+menutrans &Select\ all<Tab>ggVG Alles\ &Markieren<Tab>ggVG
+menutrans &Find\.\.\. &Suchen\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Suchen\ und\ &Ersetzen\.\.\.
+
+" [-- SETTINGS --]
+" XXX &E would conflict with 'Suchen\ und\ &Ersetzen', see above
+menutrans Settings\ &Window E&instellungen\.\.\.
+menutrans &Global\ Settings &Globale\ Einstellungen
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Hervorhebungen\ ein-\ und\ ausschalten<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Großschreibung\ &ignorieren\ oder\ benutzen<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Anzeige\ des\ passenden\ &Symbols\ ein-\ und\ ausschalten<Tab>:set\ sm!
+
+menutrans &Context\ lines &Zusammenhang
+
+menutrans &Virtual\ Edit &Virtueller\ Editier-Modus
+menutrans Never Nie
+menutrans Block\ Selection Block-Auswahl
+menutrans Insert\ mode Einfüge-Modus
+menutrans Block\ and\ Insert Block-\ und\ Einfüge-Modus
+menutrans Always Immer
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Einfüge-&Modus\ ein-\ und\ ausschalten<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Vi-Kompatibilität\ ein-\ und\ ausschalten<Tab>:set\ cp!
+
+menutrans Search\ &Path\.\.\. Such-&Pfad\.\.\.
+menutrans Ta&g\ Files\.\.\. Ta&g-Dateien\.\.\.
+
+menutrans Toggle\ &Toolbar Werkzeugleiste\ ein-\ und\ ausschalten
+menutrans Toggle\ &Bottom\ Scrollbar Unteren\ Rollbalken\ ein-\ und\ ausschalten
+menutrans Toggle\ &Left\ Scrollbar Linken\ Rollbalken\ ein-\ und\ ausschalten
+menutrans Toggle\ &Right\ Scrollbar Rechten\ Rollbalken\ ein-\ und\ ausschalten
+
+" Edit/File Settings
+menutrans F&ile\ Settings &Datei-Einstellungen
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Anzeige\ der\ Zeilen&nummer\ ein-\ und\ ausschalten<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! &List-Modus\ ein-\ und\ ausschalten<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! &Zeilenumbruch\ ein-\ und\ ausschalten<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Umbruch\ an\ &Wortgrenzen\ ein-\ und\ ausschalten<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! &Erweiterung\ von\ Tabulatoren\ ein-\ und\ ausschalten<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Automatische\ Einrückung\ ein-\ und\ ausschalten<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! &C-Einrückung\ ein-\ und\ ausschalten<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth &Schiebeweite
+menutrans Soft\ &Tabstop &Tabulator
+menutrans Te&xt\ Width\.\.\. Te&xt\ Breite\.\.\.
+menutrans &File\ Format\.\.\. &Datei\ Format\.\.\.
+menutrans C&olor\ Scheme F&arbschema\.\.\.
+menutrans &Keymap &Tastatur-Belegung
+" }}} EDIT / EDITIEREN
+
+" {{{ TOOLS / WERKZEUGE
+if has("folding")
+ menutrans &Folding Fa&ltung
+ " open close folds
+ menutrans &Enable/Disable\ folds<Tab>zi &Ein-\ und\ ausschalten<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv Momentane\ &Position\ anzeigen<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Ausschließlich\ momentane\ Position\ anzeigen<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm Faltungen\ &schließen<Tab>zm
+ menutrans &Close\ all\ folds<Tab>zM Alle\ Faltungen\ schließen<Tab>zM
+ menutrans O&pen\ more\ folds<Tab>zr Faltungen\ &öffnen<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR Alle\ Faltungen\ öffnen<Tab>zR
+ " fold method
+ menutrans Fold\ Met&hod Faltungs-&Methode
+ menutrans M&anual &Manuell
+ menutrans I&ndent &Einrückungen
+ menutrans E&xpression &Ausdruck
+ menutrans S&yntax &Syntax
+ menutrans &Diff &Differenz
+ menutrans Ma&rker Ma&rkierungen
+ " create and delete folds
+ " TODO accelerators
+ menutrans Create\ &Fold<Tab>zf Faltung\ Erzeugen<Tab>zf
+ menutrans &Delete\ Fold<Tab>zd Faltung\ Löschen<Tab>zd
+ menutrans Delete\ &All\ Folds<Tab>zD Alle\ Faltungen\ Löschen<Tab>zD
+ " moving around in folds
+ menutrans Fold\ column\ &width &Breite\ der\ Faltungs-Spalte
+endif " has folding
+
+if has("diff")
+ menutrans &Diff &Differenz
+ menutrans &Update &Aktualisieren
+ menutrans &Get\ Block Block\ &Einfügen
+ menutrans &Put\ Block Block\ &Übertragen
+endif
+
+menutrans &Tools &Werkzeuge
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Springe\ zum\ Tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T Springe\ &Zurück<Tab>^T
+menutrans Build\ &Tags\ File Erstelle\ &Tags\ Datei
+menutrans &Make<Tab>:make &Erstellen<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Fehler\ Anzeigen<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! &Hinweise\ Anzeigen<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Zum\ &Nächsten\ Fehler<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Zum\ &Vorherigen\ Fehler<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Ältere\ Liste<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Neuere\ Liste<Tab>:cnew
+
+menutrans Error\ &Window Feh&ler-Fenster
+menutrans &Set\ Compiler &Compiler
+menutrans &Update<Tab>:cwin &Aktualisieren<Tab>:cwin
+menutrans &Open<Tab>:copen &Öffnen<Tab>:copen
+menutrans &Close<Tab>:cclose &Schließen<Tab>:cclose
+
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Nach\ HE&X\ konvertieren<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Zurück\ konvertieren<Tab>:%!xxd\ -r
+" }}} TOOLS / WERKZEUGE
+
+" {{{ SYNTAX / SYNTAX
+menutrans &Syntax &Syntax
+menutrans Set\ '&syntax'\ only Nur\ '&syntax'\ Setzen
+menutrans Set\ '&filetype'\ too Auch\ '&filetype'\ Setzen
+menutrans &Off &Aus
+menutrans &Manual &Manuell
+menutrans A&utomatic A&utomatisch
+menutrans on/off\ for\ &This\ file An/Aus (diese\ &Datei)
+menutrans Co&lor\ test Test\ der\ Farben
+menutrans &Highlight\ test Test\ der\ Un&terstreichungen
+menutrans &Convert\ to\ HTML Konvertieren\ nach\ &HTML
+" }}} SYNTAX / SYNTAX
+
+" {{{ BUFFERS / PUFFER
+menutrans &Buffers &Puffer
+menutrans &Refresh\ menu &Aktualisieren
+menutrans Delete Löschen
+menutrans &Alternate &Wechseln
+menutrans &Next &Nächster
+menutrans &Previous &Vorheriger
+menutrans [No\ File] [Keine\ Datei]
+" }}} BUFFERS / PUFFER
+
+" {{{ WINDOW / ANSICHT
+menutrans &Window &Ansicht
+menutrans &New<Tab>^Wn &Neu<Tab>^Wn
+menutrans S&plit<Tab>^Ws Aufs&palten<Tab>^Ws
+menutrans Split\ &Vertically<Tab>^Wv &Vertikal\ Aufspalten<Tab>^Ws
+menutrans Split\ File\ E&xplorer Ver&zeichnis
+menutrans Sp&lit\ To\ #<Tab>^W^^ Aufspa&lten\ in\ #<Tab>^W^^
+menutrans &Close<Tab>^Wc &Schließen<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo &Andere\ Schließen<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww N&ächstes<Tab>^Ww
+menutrans P&revious<Tab>^WW Vor&heriges<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Gleiche\ Höhen<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maximale\ Höhe<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ M&inimale\ Höhe<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maximale\ &Breite<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimale\ Brei&te<Tab>^W1\|
+menutrans Move\ &To V&erschiebe\ nach
+menutrans &Top<Tab>^WK &Oben<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Unten<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Links<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Rechts<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Rotiere\ nach\ &oben<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotiere\ nach\ &unten<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Auswahl\ der\ Schriftart\.\.\.
+" }}} WINDOW / ANSICHT
+
+" {{{ HELP / HILFE
+menutrans &Help &Hilfe
+menutrans &Overview<Tab><F1> &Überblick<Tab><F1>
+menutrans &User\ Manual &Handbuch
+menutrans &How-to\ links How-to\ &Index
+menutrans &GUI &Graphische\ Oberfläche
+menutrans &Credits &Autoren
+menutrans Co&pying &Urheberrecht
+menutrans O&rphans &Waisen
+menutrans &Find\.\.\. &Suchen\.\.\. " conflicts with Edit.Find
+menutrans &Version &Version
+menutrans &About &Titelseite
+" }}} HELP / HILFE
+
+" {{{ POPUP
+menutrans &Undo &Zurück
+menutrans Cu&t Aus&schneiden
+menutrans &Copy &Kopieren
+menutrans &Paste &Einfügen
+menutrans &Delete &Löschen
+menutrans Select\ Blockwise Auswahl\ Blockartig
+menutrans Select\ &Word Auswahl\ des\ &Wortes
+menutrans Select\ &Line Auswahl\ der\ &Zeile
+menutrans Select\ &Block Auswahl\ des\ &Blocks
+menutrans Select\ &All &Alles\ Auswählen
+" }}} POPUP
+
+" {{{ TOOLBAR
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Datei Öffnen
+ tmenu ToolBar.Save Datei Speichern
+ tmenu ToolBar.SaveAll Alle Dateien Speichern
+ tmenu ToolBar.Print Drucken
+ tmenu ToolBar.Undo Zurück
+ tmenu ToolBar.Redo Wiederholen
+ tmenu ToolBar.Cut Ausschneiden
+ tmenu ToolBar.Copy Kopieren
+ tmenu ToolBar.Paste Einfügen
+ tmenu ToolBar.Find Suchen...
+ tmenu ToolBar.FindNext Suche Nächsten
+ tmenu ToolBar.FindPrev Suche Vorherigen
+ tmenu ToolBar.Replace Suchen und Ersetzen...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Neue Ansicht
+ tmenu ToolBar.WinSplit Ansicht Aufspalten
+ tmenu ToolBar.WinMax Ansicht Maximale Höhen
+ tmenu ToolBar.WinMin Ansicht Minimale Höhen
+ tmenu ToolBar.WinClose Ansicht Schließen
+ endif
+ tmenu ToolBar.LoadSesn Sitzung Laden
+ tmenu ToolBar.SaveSesn Sitzung Speichern
+ tmenu ToolBar.RunScript Vim-Skript Ausführen
+ tmenu ToolBar.Make Erstellen
+ tmenu ToolBar.Shell Shell Starten
+ tmenu ToolBar.RunCtags Erstelle Tags Datei
+ tmenu ToolBar.TagJump Springe zum Tag
+ tmenu ToolBar.Help Hilfe!
+ tmenu ToolBar.FindHelp Hilfe Durchsuchen...
+ endfun
+endif
+" }}} TOOLBAR
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Keine Datei]"
+let g:menutrans_help_dialog = "Geben Sie einen Befehl oder ein Wort ein, für das Sie Hilfe benötigen:\n\nVerwenden Sie i_ für Eingabe ('input') Befehle (z.B.: i_CTRL-X)\nVerwenden Sie c_ für Befehls-Zeilen ('command-line') Befehle (z.B.: c_<Del>)\nVerwenden Sie ' für Options-Namen (z.B.: 'shiftwidth')"
+let g:menutrans_path_dialog = "Geben Sie Such-Pfade für Dateien ein.\nTrennen Sie die Verzeichnis-Namen durch Kommata."
+let g:menutrans_tags_dialog = "Geben Sie die Namen der 'tag'-Dateien ein.\nTrennen Sie die Namen durch Kommata."
+let g:menutrans_textwidth_dialog = "Geben Sie eine neue Text-Breite ein (oder 0, um die Formatierung abzuschalten)"
+let g:menutrans_fileformat_dialog = "Wählen Sie ein Datei-Format aus"
+" }}}
diff --git a/runtime/lang/menu_de_de.utf-8.vim b/runtime/lang/menu_de_de.utf-8.vim
new file mode 100644
index 000000000..a64bdd0fe
--- /dev/null
+++ b/runtime/lang/menu_de_de.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: German for UTF-8 encoding
+
+source <sfile>:p:h/menu_de_de.latin1.vim
diff --git a/runtime/lang/menu_en_gb.latin1.vim b/runtime/lang/menu_en_gb.latin1.vim
new file mode 100644
index 000000000..7fbcf72b9
--- /dev/null
+++ b/runtime/lang/menu_en_gb.latin1.vim
@@ -0,0 +1,16 @@
+" Menu Translations: UK English
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Last Change: 2003 Feb 10
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" Note: there is no "scriptencoding" command here, all encodings should be
+" able to handle ascii characters without conversion.
+
+" Convert from American to UK spellings.
+menutrans C&olor\ Scheme C&olour\ Scheme
+menutrans Co&lor\ test Co&lour\ test
diff --git a/runtime/lang/menu_en_gb.utf-8.vim b/runtime/lang/menu_en_gb.utf-8.vim
new file mode 100644
index 000000000..b22b3bb3e
--- /dev/null
+++ b/runtime/lang/menu_en_gb.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: UK English
+
+source <sfile>:p:h/menu_en_gb.latin1.vim
diff --git a/runtime/lang/menu_english_united_kingdom.1252.vim b/runtime/lang/menu_english_united_kingdom.1252.vim
new file mode 100644
index 000000000..fe73f1651
--- /dev/null
+++ b/runtime/lang/menu_english_united_kingdom.1252.vim
@@ -0,0 +1,3 @@
+" Menu Translations: UK English for ASCII
+
+source <sfile>:p:h/menu_en_gb.latin1.vim
diff --git a/runtime/lang/menu_english_united_kingdom.ascii.vim b/runtime/lang/menu_english_united_kingdom.ascii.vim
new file mode 100644
index 000000000..fe73f1651
--- /dev/null
+++ b/runtime/lang/menu_english_united_kingdom.ascii.vim
@@ -0,0 +1,3 @@
+" Menu Translations: UK English for ASCII
+
+source <sfile>:p:h/menu_en_gb.latin1.vim
diff --git a/runtime/lang/menu_es.latin1.vim b/runtime/lang/menu_es.latin1.vim
new file mode 100644
index 000000000..b8efe51c7
--- /dev/null
+++ b/runtime/lang/menu_es.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Spanish
+
+source <sfile>:p:h/menu_es_es.latin1.vim
diff --git a/runtime/lang/menu_es.utf-8.vim b/runtime/lang/menu_es.utf-8.vim
new file mode 100644
index 000000000..ca6f75492
--- /dev/null
+++ b/runtime/lang/menu_es.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Spanish for UTF-8 encoding
+
+source <sfile>:p:h/menu_es_es.latin1.vim
diff --git a/runtime/lang/menu_es_es.latin1.vim b/runtime/lang/menu_es_es.latin1.vim
new file mode 100644
index 000000000..b3e667a0f
--- /dev/null
+++ b/runtime/lang/menu_es_es.latin1.vim
@@ -0,0 +1,296 @@
+" Menu Translations: Español
+" Maintainer: Alejandro López-Valencia <dradul@yahoo.com>
+" Last Change: 2004 May 12
+"
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252,
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+
+" Help menu
+menutrans &Help Ay&uda
+menutrans &Overview<Tab><F1> Tabla\ de\ &contenidos<Tab><F1>
+menutrans &User\ Manual &Manual\ del\ usuario
+menutrans &How-to\ links &Enlaces\ a\ ¿Cómo\ hago\.\.\.?
+menutrans &Find\.\.\. &Buscar\ en\ la\ ayuda
+menutrans &Credits &Reconocimientos
+menutrans O&rphans Ayude\ a\ los\ niños\ &huérfanos
+menutrans Co&pying &Términos\ de\ Licencia
+menutrans Sponsor/Register Benefactor/Regístrese
+menutrans &Version &Versión\ e\ \información\ de\ configuración
+menutrans &About &Acerca\ de\ Vim.
+
+" File menu
+menutrans &File &Archivo
+menutrans &Open\.\.\.<Tab>:e &Abrir\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp A&brir\ en\ otra\ ventana\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nuevo<Tab>:enew
+menutrans &Close<Tab>:close &Cerrar<Tab>:close
+menutrans &Save<Tab>:w &Guardar<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Guardar\ &como\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. &Mostrar\ diferencias\ con\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Mostrar\ &parcheado\ por\.\.\.
+menutrans &Print &Imprimir
+menutrans Sa&ve-Exit<Tab>:wqa Gua&rdar\ y\ salir<Tab>:wqa
+menutrans E&xit<Tab>:qa &Salir<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Editar
+menutrans &Undo<Tab>u &Deshacer<Tab>u
+menutrans &Redo<Tab>^R &Rehacer<Tab>^R
+menutrans Rep&eat<Tab>\. Repe&tir<Tab>\.
+menutrans Cu&t<Tab>"+x Cor&tar<Tab>"+x
+menutrans &Copy<Tab>"+y &Copiar<Tab>"+y
+menutrans &Paste<Tab>"+gP &Pegar<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Poner\ &antes<Tab>[p
+menutrans Put\ &After<Tab>]p Poner\ &después<Tab>]p
+if has("win32") || has("win16")
+ menutrans &Delete<Tab>x S&uprimir<Tab>x
+endif
+menutrans &Select\ all<Tab>ggVG &Seleccionar\ todo<Tab>ggVG
+menutrans &Find\.\.\. &Buscar\.\.\.
+menutrans &Find<Tab>/ &Buscar<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. Buscar\ y\ R&eemplazar\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Buscar\ y\ R&eemplazar<Tab>:%s
+menutrans Find\ and\ Rep&lace Buscar\ y\ R&eemplazar
+menutrans Find\ and\ Rep&lace<Tab>:s Buscar\ y\ R&eemplazar<Tab>:s
+menutrans Settings\ &Window &Ventana\ de\ opciones
+
+" Edit/Global Settings
+menutrans &Global\ Settings Opciones\ &globales
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Activar/Desactivar\ &realzado\ de\ sintaxis<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Activar/Desactivar\ &ignorar\ mayúsculas\ y\ minúsculas<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Activar/Desactivar\ &mostrar\ coincidencias<Tab>:set\ sm!
+
+menutrans &Context\ lines Líneas\ de\ &contexto
+
+menutrans &Virtual\ Edit Edición\ &virtual
+menutrans Never Nunca
+menutrans Block\ Selection Selección\ de\ bloque
+menutrans Insert\ mode Modo\ de\ inserción
+menutrans Block\ and\ Insert Bloque\ e\ inserción
+menutrans Always Siempre
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Activar/Desactivar\ modo\ de\ in&serción<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Activar/Desactivar\ compatiblidad\ con\ Vi<Tab>:set\ cp!
+
+menutrans Search\ &Path\.\.\. Ruta\ de\ &búsqueda\.\.\.
+
+menutrans Ta&g\ Files\.\.\. Ficheros\ de\ «ta&gs»\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar Ocultar/Mostrar\ barra\ de\ &herramientas
+menutrans Toggle\ &Bottom\ Scrollbar Ocultar/Mostrar\ barra\ de\ desplazamiento\ &inferior
+menutrans Toggle\ &Left\ Scrollbar Ocultar/Mostrar\ barra\ de\ desplazamiento\ i&zquierda
+menutrans Toggle\ &Right\ Scrollbar Ocultar/Mostrar\ barra\ de\ desplazamiento\ &derecha
+
+let g:menutrans_path_dialog = "Introduzca la ruta de búsqueda para los ficheros.\nSepare los nombres de los directorios con una coma."
+let g:menutrans_tags_dialog = "Introduzca los nombres de los fichero de tags.\nSepare los nombres con una coma."
+
+" Edit/File Settings
+menutrans F&ile\ Settings Opciones\ del\ &fichero
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Activar/Desactivar\ &numeración\ de\ líneas<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Activar/Desactivar\ modo\ «&list»<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Activar/Desactivar\ &quiebre\ de\ líneas<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Activar/Desactivar\ quiebre\ entre\ &palabras<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Activar/Desactivar\ &expansión\ de\ marcas\ de\ \tabulado<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Activar/Desactivar\ &auto-sangrado<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Activar/Desactivar\ sangrado\ &C<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth Anchura\ del\ &sangrado
+
+menutrans Soft\ &Tabstop &Tabulado\ «blando»
+
+menutrans Te&xt\ Width\.\.\. Anchura\ del\ te&xto\.\.\.
+let g:menutrans_textwidth_dialog = "Introduzca el nuevo ancho del texto (0 para desactivar el quiebre de línea): "
+
+menutrans &File\ Format\.\.\. &Formato\ del\ fichero\.\.\.
+let g:menutrans_fileformat_dialog = "Seleccione el formato para escribir el fichero"
+
+menutrans C&olor\ Scheme Esquema\ de\ c&olores
+menutrans blue azul
+menutrans darkblue azul\ oscuro
+menutrans default original
+menutrans desert desierto
+menutrans evening vespertino
+menutrans morning matutino
+menutrans peachpuff melocotón
+menutrans shine brillante
+
+menutrans Select\ Fo&nt\.\.\. Seleccionar\ fue&nte\.\.\.
+
+menutrans &Keymap Asociación\ de\ teclados
+menutrans None Ninguna
+menutrans accents acentos
+menutrans arabic árabe
+menutrans czech checo
+menutrans greek griego
+menutrans hebrew hebreo
+menutrans hebrewp hebreo\ fonético
+menutrans lithuanian-baltic lituano-báltico
+menutrans russian-jcuken ruso-«jcuken»
+menutrans russian-jcukenwin ruso-«jcuken»\ Windows
+menutrans russian-yawerty ruso-«yawerty»
+menutrans serbian-latin serbio-latino
+menutrans serbian serbio
+menutrans slovak eslovaco
+
+
+" Programming menu
+menutrans &Tools &Herramientas
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Saltar\ a\ este\ «tag»<Tab>g^]
+menutrans Jump\ &back<Tab>^T Saltar\ &atrás<Tab>^T
+menutrans Build\ &Tags\ File Crear\ fichero\ de\ «&tags»\
+menutrans &Diff Modo\ de\ &diferencias
+menutrans &Folding &Plegado
+menutrans &Make<Tab>:make Ejecutar\ «&Make»<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Lista\ de\ errores<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! L&ista\ de\ mensajes<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &Error\ siguiente<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Error\ p&revio<Tab>:cp
+menutrans &Older\ List<Tab>:cold Lista\ de\ &viejos\ a\ nuevos<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Lista\ de\ &nuevos\ a\ viejos<Tab>:cnew
+menutrans Error\ &Window Ven&tana\ de\ errores
+menutrans &Set\ Compiler Esco&ger\ el\ compilador\ a\ usar
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Convertir\ a\ formato\ &hexadecimal<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r &Convertir\ al\ formato\ original<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi &Activar/Desactivar\ pliegues<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Ver\ línea\ del\ cursor<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ve&r\ sólo\ la\ línea\ del\ cursor<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm C&errar\ más\ pliegues<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM &Cerrar\ todos\ los\ pliegues<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Abrir\ &más\ pliegues<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Abrir\ todos\ los\ pliegues<Tab>zR
+" fold method
+menutrans Fold\ Met&hod &Método\ de\ plegado
+" create and delete folds
+menutrans Create\ &Fold<Tab>zf Crear\ &pliegue<Tab>zf
+menutrans &Delete\ Fold<Tab>zd &Suprimir\ pliegue<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Suprimir\ &todos\ los\ pligues<Tab>zD
+" moving around in folds
+menutrans Fold\ col&umn\ width A&nchura\ de\ columna\ del\ pliegue
+
+" Tools.Diff Menu
+menutrans &Update &Actualizar
+menutrans &Get\ Block &Obtener\ bloque
+menutrans &Put\ Block &Poner\ bloque
+
+"Tools.Error Menu
+menutrans &Update<Tab>:cwin &Actualizar
+menutrans &Open<Tab>:copen A&brir
+menutrans &Close<Tab>:cclose &Cerrar
+
+" Names for buffer menu.
+menutrans &Buffers &Buffers
+menutrans &Refresh\ menu &Refrescar\ menú
+menutrans &Delete &Suprimir
+menutrans &Alternate &Alternar
+menutrans &Next Si&guiente
+menutrans &Previous &Previo
+let g:menutrans_no_file = "[Sin fichero]"
+
+" Window menu
+menutrans &Window &Ventana
+menutrans &New<Tab>^Wn Ventana\ &nueva<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Dividir\ la\ ventana<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ D&ividir\ en\ el\ marcador\ (#)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Dividir\ &verticalmente<Tab>^Wv
+menutrans Split\ File\ E&xplorer &Abrir\ el\ «Explorador\ de\ ficheros»
+menutrans &Close<Tab>^Wc &Cerrar\ esta\ ventana<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Cerrar\ &otra(s)\ ventana(s)<Tab>^Wo
+menutrans Move\ &To Mov&er\ a
+menutrans &Top<Tab>^WK &Arriba<Tab>^WK
+menutrans &Bottom<Tab>^WJ A&bajo<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Lado\ &izquierdo<Tab>^WH
+menutrans &Right\ side<Tab>^WL Lado\ &derecho<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR &Rotar\ hacia\ arriba<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotar\ hacia\ a&bajo<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= Mismo\ &tamaño<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Altura\ &máxima<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Altura\ mí&nima<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Anchura\ má&xima<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Anc&hura\ mínima<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo &Deshacer
+menutrans Cu&t Cor&tar
+menutrans &Copy &Copiar
+menutrans &Paste &Pegar
+menutrans &Delete &Borrar
+menutrans Select\ Blockwise Seleccionar\ por\ bloque
+menutrans Select\ &Word Seleccionar\ &palabra
+menutrans Select\ &Line Seleccionar\ una\ &línea
+menutrans Select\ &Block Seleccionar\ un\ &bloque
+menutrans Select\ &All Seleccionar\ &todo
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Abrir fichero
+ tmenu ToolBar.Save Guardar fichero
+ tmenu ToolBar.SaveAll Guardar todos los ficheros
+ tmenu ToolBar.Print Imprimir
+ tmenu ToolBar.Undo Deshacer
+ tmenu ToolBar.Redo Rehacer
+ tmenu ToolBar.Cut Cortar
+ tmenu ToolBar.Copy Copiar
+ tmenu ToolBar.Paste Pegar
+ tmenu ToolBar.Find Buscar...
+ tmenu ToolBar.FindNext Buscar siguiente
+ tmenu ToolBar.FindPrev Buscar precedente
+ tmenu ToolBar.Replace Buscar y reemplazar
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Ventana nueva
+ tmenu ToolBar.WinSplit Dividir ventana
+ tmenu ToolBar.WinMax Ventana máxima
+ tmenu ToolBar.WinMin Ventana mínima
+ tmenu ToolBar.WinVSplit Dividir verticalmente
+ tmenu ToolBar.WinMaxWidth Anchura máxima
+ tmenu ToolBar.WinMinWidth Anchura mínima
+ tmenu ToolBar.WinClose Cerrar ventana
+ endif
+ tmenu ToolBar.LoadSesn Cargar sesión
+ tmenu ToolBar.SaveSesn Guardar sesión
+ tmenu ToolBar.RunScript Ejecutar un «script»
+ tmenu ToolBar.Make Ejecutar «Make»
+ tmenu ToolBar.Shell Abrir una «Shell»
+ tmenu ToolBar.RunCtags Generar un fichero de «tags»
+ tmenu ToolBar.TagJump Saltar a un «tag»
+ tmenu ToolBar.Help Ayuda
+ tmenu ToolBar.FindHelp Buscar en la ayuda...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaxis
+menutrans &Show\ filetypes\ in\ menu &Mostrar\ listas\ de\ «tipo\ de\ fichero»
+menutrans Set\ '&syntax'\ only Activar\ sólo\ «sintaxis»
+menutrans Set\ '&filetype'\ too Activar\ también\ «tipo\ de\ fichero»
+menutrans &Off &Desactivar\ «sintaxis»
+menutrans &Manual «sintaxis»\ &manual
+menutrans A&utomatic «sintaxis»\ a&utomática
+menutrans on/off\ for\ &This\ file Activar/Desactivar\ en\ es&te\ fichero
+menutrans Co&lor\ test &Prueba\ de\ colores
+menutrans &Highlight\ test Prueba\ de\ &realzado
+menutrans &Convert\ to\ HTML &Convertir\ en\ HTML
+
+" 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 línea de comandos (e.g.: c_<Del>)\nAnteponga ` para un nombre de opción (e.g.: `shiftwidth`)"
diff --git a/runtime/lang/menu_es_es.utf-8.vim b/runtime/lang/menu_es_es.utf-8.vim
new file mode 100644
index 000000000..ca6f75492
--- /dev/null
+++ b/runtime/lang/menu_es_es.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Spanish for UTF-8 encoding
+
+source <sfile>:p:h/menu_es_es.latin1.vim
diff --git a/runtime/lang/menu_fr.latin1.vim b/runtime/lang/menu_fr.latin1.vim
new file mode 100644
index 000000000..064680b95
--- /dev/null
+++ b/runtime/lang/menu_fr.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: French for ISO 8859-1 encoding
+
+source <sfile>:p:h/menu_fr_fr.latin1.vim
diff --git a/runtime/lang/menu_fr.utf-8.vim b/runtime/lang/menu_fr.utf-8.vim
new file mode 100644
index 000000000..5e4190649
--- /dev/null
+++ b/runtime/lang/menu_fr.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: French for UTF-8 encoding
+
+source <sfile>:p:h/menu_fr_fr.latin1.vim
diff --git a/runtime/lang/menu_fr_fr.latin1.vim b/runtime/lang/menu_fr_fr.latin1.vim
new file mode 100644
index 000000000..efca71bee
--- /dev/null
+++ b/runtime/lang/menu_fr_fr.latin1.vim
@@ -0,0 +1,444 @@
+" Menu Translations: Francais
+" Maintainer: Adrien Beau <version.francaise@free.fr>
+" First Version: Francois Thunus <thunus@systran.fr>
+" Last Change: 2003 May 29
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252 and
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15" && &enc != "iso-8859-1"
+ scriptencoding latin1
+endif
+
+menutrans &Help &Aide
+
+menutrans &Overview<Tab><F1> &Sommaire<Tab><F1>
+menutrans &User\ Manual &Manuel\ utilisateur
+menutrans &How-to\ links &Tâches\ courantes
+menutrans &Find\.\.\. Rec&hercher\.\.\.
+" -sep1-
+menutrans &Credits &Remerciements
+menutrans Co&pying &License
+menutrans O&rphans &Orphelins
+" -sep2-
+menutrans &Version &Version
+menutrans &About À\ &propos\ de\ Vim
+
+let g:menutrans_help_dialog = "Entrez une commande ou un mot à rechercher dans l'aide.\n\nAjoutez i_ pour les commandes du mode Insertion (ex: i_CTRL-X)\nAjoutez c_ pour l'édition de la ligne de commande (ex: c_<Del>)\nEntourez les options avec des apostrophes (ex: 'shiftwidth')"
+
+
+menutrans &File &Fichier
+
+menutrans &Open\.\.\.<Tab>:e &Ouvrir\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Ouvrir\ à\ p&art\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nouveau<Tab>:enew
+menutrans &Close<Tab>:close &Fermer<Tab>:close
+" -SEP1-
+menutrans &Save<Tab>:w &Enregistrer<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Enregistrer\ &sous\.\.\.<Tab>:sav
+" -SEP2-
+menutrans Split\ &Diff\ with\.\.\. &Difference\ avec\.\.\.
+"menutrans Split\ Patched\ &By\.\.\. &Patcher\ avec\.\.\.
+menutrans Split\ Patched\ &By\.\.\. &Tester\ un\ patch\.\.\.
+" -SEP3-
+menutrans &Print &Imprimer
+" -SEP4-
+menutrans Sa&ve-Exit<Tab>:wqa En&registrer\ et\ quitter<Tab>:wqa
+menutrans E&xit<Tab>:qa &Quitter<Tab>:qa
+
+
+menutrans &Edit &Edition
+
+menutrans &Undo<Tab>u &Annuler<Tab>u
+menutrans &Redo<Tab>^R Re&faire<Tab>^R
+menutrans Rep&eat<Tab>\. R&épéter<Tab>\.
+" -SEP1-
+menutrans Cu&t<Tab>"+x Co&uper<Tab>"+x
+menutrans &Copy<Tab>"+y Cop&ier<Tab>"+y
+menutrans &Paste<Tab>"+gP C&oller<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Placer\ a&vant<Tab>[p
+menutrans Put\ &After<Tab>]p Placer\ apr&ès<Tab>]p
+menutrans &Delete<Tab>x Effa&cer<Tab>x
+menutrans &Select\ all<Tab>ggVG &Sélectionner\ tout<Tab>ggVG
+" -SEP2-
+menutrans &Find\.\.\. Rec&hercher\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Re&mplacer\.\.\.
+menutrans &Find<Tab>/ Rec&hercher<Tab>/
+menutrans Find\ and\ Rep&lace<Tab>:%s Re&mplacer<Tab>:%s
+menutrans Find\ and\ Rep&lace<Tab>:s Re&mplacer<Tab>:s
+" -SEP3-
+menutrans Settings\ &Window Fe&nêtre\ des\ réglages
+menutrans &Global\ Settings Réglages\ globau&x
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Surligner\ recherche\ on/off<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Ignorer\ casse\ on/off<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Vérifier\ parenth&èses\ on/off<Tab>:set\ sm!
+
+menutrans &Context\ lines Lignes\ &autour\ du\ curseur
+
+menutrans &Virtual\ Edit Édition\ &virtuelle
+menutrans Never &Jamais
+menutrans Block\ Selection &Sélection\ en\ bloc
+menutrans Insert\ mode &Mode\ insertion
+menutrans Block\ and\ Insert &Bloc\ et\ insertion
+menutrans Always &Toujours
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! I&nsertion\ permanente\ on/off<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! &Compatibilité\ Vi\ on/off<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Chemin\ de\ rec&herche\ des\ fichiers\.\.\.
+menutrans Ta&g\ Files\.\.\. Fichiers\ d'&étiquettes\.\.\.
+" -SEP1-
+menutrans Toggle\ &Toolbar Barre\ d'&outils\ on/off
+menutrans Toggle\ &Bottom\ Scrollbar Ascenseur\ &horizontal\ on/off
+menutrans Toggle\ &Left\ Scrollbar Ascenseur\ à\ ga&uche\ on/off
+menutrans Toggle\ &Right\ Scrollbar Ascenseur\ à\ &droite\ on/off
+
+let g:menutrans_path_dialog = "Entrez le chemin de recherche des fichiers.\nSéparez les répertoires par des virgules."
+let g:menutrans_tags_dialog = "Entrez les noms des fichiers d'étiquettes.\nSéparez les noms par des virgules."
+
+menutrans F&ile\ Settings Réglages\ fichie&r
+
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Numérotation\ on/off<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Mode\ &listing\ on/off<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! &Retour\ à\ la\ ligne\ on/off<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Retour\ sur\ &mot\ on/off<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! &Tab\.\ en\ espaces\ on/off<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Indentation\ &auto\.\ on/off<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Indent\.\ langage\ &C\ on/off<Tab>:set\ cin!
+" -SEP2-
+menutrans &Shiftwidth Largeur\ des\ in&dentations
+menutrans Soft\ &Tabstop &Pseudo-tabulations
+menutrans Te&xt\ Width\.\.\. Largeur\ du\ te&xte\.\.\.
+menutrans &File\ Format\.\.\. Format\ du\ &fichier\.\.\.
+
+let g:menutrans_textwidth_dialog = "Entrez la nouvelle largeur du texte\n(0 pour désactiver le formattage)."
+let g:menutrans_fileformat_dialog = "Choisissez le format dans lequel écrire le fichier."
+let g:menutrans_fileformat_choices = " &Unix \n &Dos \n &Mac \n &Annuler "
+
+menutrans C&olor\ Scheme &Jeu\ de\ couleurs
+menutrans &Keymap &Type\ de\ clavier
+menutrans None (aucun)
+menutrans Select\ Fo&nt\.\.\. Sélectionner\ &police\.\.\.
+
+
+menutrans &Tools &Outils
+
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Atteindre\ cette\ étiquette<Tab>g^]
+menutrans Jump\ &back<Tab>^T Repartir\ en\ arri&ère<Tab>^T
+menutrans Build\ &Tags\ File &Générer\ fichier\ d'étiquettes
+
+" -SEP1-
+menutrans &Folding &Replis
+
+menutrans &Enable/Disable\ folds<Tab>zi &Replis\ on/off<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv D&éplier\ ligne\ curseur<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Tout\ plier\ &sauf\ ligne\ curseur<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Fermer\ &plus\ de\ replis<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM F&ermer\ tous\ les\ replis<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Ouvrir\ pl&us\ de\ replis<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Ouvrir\ tous\ les\ replis<Tab>zR
+" -SEP1-
+menutrans Fold\ Met&hod &Méthode\ de\ repli
+
+menutrans M&anual &Manuelle
+menutrans I&ndent &Indentation
+menutrans E&xpression &Expression
+menutrans S&yntax &Syntaxe
+menutrans &Diff &Différence
+menutrans Ma&rker Ma&rqueurs
+
+menutrans Create\ &Fold<Tab>zf &Créer\ repli<Tab>zf
+menutrans &Delete\ Fold<Tab>zd E&ffacer\ repli<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Effacer\ &tous\ les\ replis<Tab>zD
+" -SEP2-
+menutrans Fold\ col&umn\ width &Largeur\ colonne\ replis
+
+menutrans &Diff &Différence
+
+menutrans &Update &Mettre\ à\ jour
+menutrans &Get\ Block Corriger\ &ce\ tampon
+menutrans &Put\ Block Corriger\ l'&autre\ tampon
+
+" -SEP2-
+menutrans &Make<Tab>:make Lancer\ ma&ke<Tab>:make
+menutrans &List\ Errors<Tab>:cl Lister\ &erreurs<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Lister\ &messages<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Erreur\ &suivante<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Erreur\ pr&écédente<Tab>:cp
+"menutrans &Older\ List<Tab>:cold A&ncienne\ liste<Tab>:cold
+menutrans &Older\ List<Tab>:cold Liste\ &précédente<Tab>:cold
+"menutrans N&ewer\ List<Tab>:cnew No&uvelle\ liste<Tab>:cnew
+menutrans N&ewer\ List<Tab>:cnew Liste\ suivan&te<Tab>:cnew
+
+menutrans Error\ &Window &Fenêtre\ d'erreurs
+
+menutrans &Update<Tab>:cwin &Mettre\ à\ jour<Tab>:cwin
+menutrans &Open<Tab>:copen &Ouvrir<Tab>:copen
+menutrans &Close<Tab>:cclose &Fermer<Tab>:cclose
+
+" -SEP3-
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Convertir\ en\ he&xa<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Décon&vertir<Tab>:%!xxd\ -r
+
+menutrans &Set\ Compiler Type\ de\ &compilateur
+
+
+menutrans &Buffers &Tampons
+
+menutrans Dummy Factice
+menutrans &Refresh\ menu &Mettre\ ce\ menu\ à\ jour
+menutrans &Delete &Effacer
+menutrans &Alternate &Alterner
+menutrans &Next &Suivant
+menutrans &Previous &Précédent
+" -SEP-
+
+menutrans &others au&tres
+menutrans &u-z &uvwxyz
+let g:menutrans_no_file = "[Aucun fichier]"
+
+
+menutrans &Window Fe&nêtre
+
+menutrans &New<Tab>^Wn &Nouvelle\ fenêtre<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Fractionner<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Fractionner\ p&our\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Fractionner\ &verticalement<Tab>^Wv
+menutrans Split\ File\ E&xplorer Fractionner\ &explorateur
+" -SEP1-
+menutrans &Close<Tab>^Wc Fer&mer<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Fermer\ les\ &autres<Tab>^Wo
+" -SEP2-
+menutrans Move\ &To &Déplacer\ vers\ le
+
+menutrans &Top<Tab>^WK &Haut<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Bas<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Côté\ &gauche<Tab>^WH
+menutrans &Right\ side<Tab>^WL Côté\ &droit<Tab>^WL
+
+menutrans Rotate\ &Up<Tab>^WR Rotation\ vers\ le\ &haut<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotation\ vers\ le\ &bas<Tab>^Wr
+" -SEP3-
+menutrans &Equal\ Size<Tab>^W= Égaliser\ ta&illes<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Hau&teur\ maximale<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Ha&uteur\ minimale<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| &Largeur\ maximale<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| La&rgeur\ minimale<Tab>^W1\|
+
+
+" PopUp
+
+menutrans &Undo &Annuler
+" -SEP1-
+menutrans Cu&t Co&uper
+menutrans &Copy Cop&ier
+menutrans &Paste C&oller
+" &Buffers.&Delete overwrites this one
+menutrans &Delete &Effacer
+" -SEP2-
+menutrans Select\ Blockwise Sélectionner\ &bloc
+menutrans Select\ &Word Sélectionner\ &mot
+menutrans Select\ &Line Sélectionner\ &ligne
+menutrans Select\ &Block Sélectionner\ &bloc
+menutrans Select\ &All Sélectionner\ &tout
+
+
+" ToolBar
+
+menutrans Open Ouvrir
+menutrans Save Enreg
+menutrans SaveAll EnregTout
+menutrans Print Imprimer
+" -sep1-
+menutrans Undo Annuler
+menutrans Redo Refaire
+" -sep2-
+menutrans Cut Couper
+menutrans Copy Copier
+menutrans Paste Coller
+" -sep3-
+menutrans Find Chercher
+menutrans FindNext CherchSuiv
+menutrans FindPrev CherchPrec
+menutrans Replace Remplacer
+" -sep4-
+menutrans New Nouvelle
+menutrans WinSplit FenFract
+menutrans WinMax FenMax
+menutrans WinMin FenMin
+menutrans WinVSplit FenVFract
+menutrans WinMaxWidth FenMaxLarg
+menutrans WinMinWidth FenMinLarg
+menutrans WinClose FenFerme
+" -sep5-
+menutrans LoadSesn OuvrirSess
+menutrans SaveSesn EnregSess
+menutrans RunScript LancScript
+" -sep6-
+menutrans Make Make
+menutrans RunCtags CréerEtiqu
+menutrans TagJump AllerEtiqu
+" -sep7-
+menutrans Help Aide
+menutrans FindHelp CherchAide
+
+fun! Do_toolbar_tmenu()
+ let did_toolbar_tmenu = 1
+ tmenu ToolBar.Open Ouvrir fichier
+ tmenu ToolBar.Save Enregistrer fichier courant
+ tmenu ToolBar.SaveAll Enregistrer tous les fichiers
+ tmenu ToolBar.Print Imprimer
+ tmenu ToolBar.Undo Annuler
+ tmenu ToolBar.Redo Refaire
+ tmenu ToolBar.Cut Couper
+ tmenu ToolBar.Copy Copier
+ tmenu ToolBar.Paste Coller
+ if !has("gui_athena")
+ tmenu ToolBar.Find Rechercher
+ tmenu ToolBar.FindNext Chercher suivant
+ tmenu ToolBar.FindPrev Chercher précédent
+ tmenu ToolBar.Replace Remplacer
+ endif
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nouvelle fenêtre
+ tmenu ToolBar.WinSplit Fractionner fenêtre
+ tmenu ToolBar.WinMax Maximiser fenêtre
+ tmenu ToolBar.WinMin Minimiser fenêtre
+ tmenu ToolBar.WinVSplit Fractionner verticalement
+ tmenu ToolBar.WinMaxWidth Maximiser largeur fenêtre
+ tmenu ToolBar.WinMinWidth Minimiser largeur fenêtre
+ tmenu ToolBar.WinClose Fermer fenêtre
+ endif
+ tmenu ToolBar.LoadSesn Ouvrir session
+ tmenu ToolBar.SaveSesn Enregister session courante
+ tmenu ToolBar.RunScript Lancer un script Vim
+ tmenu ToolBar.Make Lancer make
+ tmenu ToolBar.RunCtags Créer les étiquettes
+ tmenu ToolBar.TagJump Atteindre cette étiquette
+ tmenu ToolBar.Help Aide de Vim
+ tmenu ToolBar.FindHelp Rechercher dans l'aide
+endfun
+
+
+menutrans &Syntax &Syntaxe
+
+menutrans &Manual &Manuelle
+menutrans A&utomatic &Automatique
+menutrans on/off\ for\ &This\ file On/off\ pour\ &ce\ fichier
+
+" The Start Of The Syntax Menu
+menutrans ABC\ music\ notation ABC\ (notation\ musicale)
+menutrans AceDB\ model Modèle\ AceDB
+menutrans Apache\ config Config\.\ Apache
+menutrans Apache-style\ config Config\.\ style\ Apache
+menutrans ASP\ with\ VBScript ASP\ avec\ VBScript
+menutrans ASP\ with\ Perl ASP\ avec\ Perl
+menutrans Assembly Assembleur
+menutrans BC\ calculator Calculateur\ BC
+menutrans BDF\ font Fonte\ BDF
+menutrans BIND\ config Config\.\ BIND
+menutrans BIND\ zone Zone\ BIND
+menutrans Cascading\ Style\ Sheets Feuilles\ de\ style\ en\ cascade
+menutrans Cfg\ Config\ file Fichier\ de\ config\.\ \.cfg
+menutrans Cheetah\ template Patron\ Cheetah
+menutrans commit\ file Fichier\ commit
+menutrans Generic\ Config\ file Fichier\ de\ config\.\ générique
+menutrans Digital\ Command\ Lang DCL
+menutrans DNS/BIND\ zone Zone\ BIND/DNS
+menutrans Dylan\ interface Interface
+menutrans Dylan\ lid LID
+menutrans Elm\ filter\ rules Règles\ de\ filtrage\ Elm
+menutrans ERicsson\ LANGuage Erlang\ (langage\ Ericsson)
+menutrans Essbase\ script Script\ Essbase
+menutrans Eterm\ config Config\.\ Eterm
+menutrans Exim\ conf Config\.\ Exim
+menutrans Fvwm\ configuration Config\.\ Fvwm
+menutrans Fvwm2\ configuration Config\.\ Fvwm2
+menutrans Fvwm2\ configuration\ with\ M4 Config\.\ Fvwm2\ avec\ M4
+menutrans GDB\ command\ file Fichier\ de\ commandes\ GDB
+menutrans HTML\ with\ M4 HTML\ avec\ M4
+menutrans Cheetah\ HTML\ template Patron\ Cheetah\ pour\ HTML
+menutrans IDL\Generic\ IDL IDL\IDL\ générique
+menutrans IDL\Microsoft\ IDL IDL\IDL\ Microsoft
+menutrans Indent\ profile Profil\ Indent
+menutrans Inno\ setup Config\.\ Inno
+menutrans InstallShield\ script Script\ InstallShield
+menutrans KDE\ script Script\ KDE
+menutrans LFTP\ config Config\.\ LFTP
+menutrans LifeLines\ script Script\ LifeLines
+menutrans Lynx\ Style Style\ Lynx
+menutrans Lynx\ config Config\.\ Lynx
+menutrans Man\ page Page\ Man
+menutrans MEL\ (for\ Maya) MEL\ (pour\ Maya)
+menutrans 4DOS\ \.bat\ file Fichier\ \.bat\ 4DOS
+menutrans \.bat\/\.cmd\ file Fichier\ \.bat\ /\ \.cmd
+menutrans \.ini\ file Fichier\ \.ini
+menutrans Module\ Definition Définition\ de\ module
+menutrans Registry Extrait\ du\ registre
+menutrans Resource\ file Fichier\ de\ ressources
+menutrans Novell\ NCF\ batch Batch\ Novell\ NCF
+menutrans NSIS\ script Script\ NSIS
+menutrans Oracle\ config Config\.\ Oracle
+menutrans Palm\ resource\ compiler Compil\.\ de\ resources\ Palm
+menutrans PHP\ 3-4 PHP\ 3\ et\ 4
+menutrans Postfix\ main\ config Config\.\ Postfix
+menutrans Povray\ scene\ descr Scène\ Povray
+menutrans Povray\ configuration Config\.\ Povray
+menutrans Purify\ log Log\ Purify
+menutrans Readline\ config Config\.\ Readline
+menutrans RCS\ log\ output Log\ RCS
+menutrans RCS\ file Fichier\ RCS
+menutrans RockLinux\ package\ desc\. Desc\.\ pkg\.\ RockLinux
+menutrans Samba\ config Config\.\ Samba
+menutrans SGML\ catalog Catalogue\ SGML
+menutrans SGML\ DTD DTD\ SGML
+menutrans SGML\ Declaration Déclaration\ SGML
+menutrans Shell\ script Script\ shell
+menutrans sh\ and\ ksh sh\ et\ ksh
+menutrans Sinda\ compare Comparaison\ Sinda
+menutrans Sinda\ input Entrée\ Sinda
+menutrans Sinda\ output Sortie\ Sinda
+menutrans SKILL\ for\ Diva SKILL\ pour\ Diva
+menutrans Smarty\ Templates Patrons\ Smarty
+menutrans SNNS\ network Réseau\ SNNS
+menutrans SNNS\ pattern Motif\ SNNS
+menutrans SNNS\ result Résultat\ SNNS
+menutrans Snort\ Configuration Config\.\ Snort
+menutrans Squid\ config Config\.\ Squid
+menutrans Subversion\ commit Commit\ Subversion
+menutrans TAK\ compare Comparaison\ TAK
+menutrans TAK\ input Entrée\ TAK
+menutrans TAK\ output Sortie\ TAK
+menutrans TeX\ configuration Config\.\ TeX
+menutrans TF\ mud\ client TF\ (client\ MUD)
+menutrans Tidy\ configuration Config\.\ Tidy
+menutrans Trasys\ input Entrée\ Trasys
+menutrans Command\ Line Ligne\ de\ commande
+menutrans Geometry Géométrie
+menutrans Optics Optiques
+menutrans Vim\ help\ file Fichier\ d'aide\ Vim
+menutrans Vim\ script Script\ Vim
+menutrans Viminfo\ file Fichier\ Viminfo
+menutrans Virata\ config Config\.\ Virata
+menutrans Wget\ config Config\.\ wget
+menutrans Whitespace\ (add) Espaces\ et\ tabulations
+menutrans WildPackets\ EtherPeek\ Decoder Décodeur\ WildPackets\ EtherPeek
+menutrans X\ resources Resources\ X
+menutrans XXD\ hex\ dump Sortie\ hexa\.\ de\ xxd
+menutrans XFree86\ Config Config\.\ XFree86
+" The End Of The Syntax Menu
+
+menutrans &Show\ filetypes\ in\ menu &Afficher\ tout\ le\ menu
+" -SEP1-
+menutrans Set\ '&syntax'\ only Changer\ '&syntax'\ seulement
+menutrans Set\ '&filetype'\ too Changer\ '&filetype'\ aussi
+menutrans &Off &Off
+" -SEP3-
+menutrans Co&lor\ test Tester\ les\ co&uleurs
+menutrans &Highlight\ test Tester\ les\ g&roupes\ de\ surlignage
+menutrans &Convert\ to\ HTML Con&vertir\ en\ HTML
diff --git a/runtime/lang/menu_fr_fr.utf-8.vim b/runtime/lang/menu_fr_fr.utf-8.vim
new file mode 100644
index 000000000..5e4190649
--- /dev/null
+++ b/runtime/lang/menu_fr_fr.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: French for UTF-8 encoding
+
+source <sfile>:p:h/menu_fr_fr.latin1.vim
diff --git a/runtime/lang/menu_french_france.1252.vim b/runtime/lang/menu_french_france.1252.vim
new file mode 100644
index 000000000..2c5ddb51a
--- /dev/null
+++ b/runtime/lang/menu_french_france.1252.vim
@@ -0,0 +1,3 @@
+" Menu Translations: French for Windows CodePage 1252 encoding
+
+source <sfile>:p:h/menu_fr_fr.latin1.vim
diff --git a/runtime/lang/menu_german_germany.1252.vim b/runtime/lang/menu_german_germany.1252.vim
new file mode 100644
index 000000000..f40d6b517
--- /dev/null
+++ b/runtime/lang/menu_german_germany.1252.vim
@@ -0,0 +1,3 @@
+" Menu Translations: German for Windows CodePage 1252 encoding
+
+source <sfile>:p:h/menu_de_de.latin1.vim
diff --git a/runtime/lang/menu_hu.iso_8859-2.vim b/runtime/lang/menu_hu.iso_8859-2.vim
new file mode 100644
index 000000000..cd21d101f
--- /dev/null
+++ b/runtime/lang/menu_hu.iso_8859-2.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian for UTF-8 encoding
+
+source <sfile>:p:h/menu_hu_hu.iso_8859-2.vim
diff --git a/runtime/lang/menu_hu.utf-8.vim b/runtime/lang/menu_hu.utf-8.vim
new file mode 100644
index 000000000..2dd35ef4d
--- /dev/null
+++ b/runtime/lang/menu_hu.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian for UTF-8 encoding
+
+source <sfile>:p:h/menu_hu_hu.utf-8.vim
diff --git a/runtime/lang/menu_hu_hu.iso_8859-2.vim b/runtime/lang/menu_hu_hu.iso_8859-2.vim
new file mode 100644
index 000000000..d3fafce10
--- /dev/null
+++ b/runtime/lang/menu_hu_hu.iso_8859-2.vim
@@ -0,0 +1,258 @@
+" Menu Translations: Hungarian (Magyar)
+" Original Translation: Zoltán Árpádffy
+" Maintained By: Kontra Gergely <kgergely@mcl.hu>
+" Last Change: 2003 May 31
+" 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.
+" I also want to avoid g and j shortcuts, because you cannot see, wheter
+" they're underlined or not.
+" If the hotkeys are not uniq (pressing the hotkey doesn't executes the menu,
+" just one menupoint is selected), or you find any other undesired behaviour,
+" please report it to me.
+" All kind of feedback is welcome.
+"
+" Igyekeztem mindenhez gyorsbillentyût rendelni, lehetõleg nem ékezeteset.
+" További tennivaló az y és z gyorsbillentyûk kiirtása, ezenkívül a g, j
+" billentyûk irtása is, mivel ez utóbbiak aláhúzott változatát nem könnyû
+" felismerni.
+" Amennyiben valahol nem egyértelmûk a gyorsbillentyûk (a gyorsbillentyût
+" leütve nem hajtódik végre a kiszemelt menüpont, hanem csak kiválasztódik,
+" vagy másik menüpont választódik ki), vagy egyéb hibát találsz, kérlek jelezd
+" nekem a fenti email címen.
+" Mindennemû visszajelzést szívesen fogadok.
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding iso-8859-2
+
+" Help menu
+menutrans &Help &Súgó
+menutrans &Overview<Tab><F1> Á&ttekintés<Tab><F1>
+menutrans &How-to\ links &HOGYAN\ linkek
+menutrans &User\ Manual &Kézikönyv
+menutrans &Credits &Szerzõk,\ köszönetek
+menutrans Co&pying &Védjegy
+menutrans O&rphans Árvá&k
+menutrans &Find\.\.\. Ke&resés\.\.\.
+menutrans &Version &Verzió
+menutrans &About &Névjegy
+" File menu
+menutrans &File &Fájl
+menutrans &Open\.\.\.<Tab>:e Meg&nyitás\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Megnyitás\ új\ a&blakba\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew Új\ dok&umentum<Tab>:enew
+menutrans &Close<Tab>:close Be&zárás<Tab>:close
+menutrans &Save<Tab>:w &Mentés<Tab>:w
+menutrans Split\ &Diff\ with\.\.\. Össze&hasonlítás\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Összehasonlítás\ &patch\ -el\.\.\.
+menutrans Save\ &As\.\.\.<Tab>:sav Menté&s\ másként\.\.\.<Tab>:w
+menutrans &Print Nyomt&atás
+menutrans Sa&ve-Exit<Tab>:wqa Mentés\ és\ k&ilépés<Tab>:wqa
+menutrans E&xit<Tab>:qa &Kilépés<Tab>:qa
+
+" Edit menu
+menutrans &Edit S&zerkesztés
+menutrans &Undo<Tab>u &Visszavonás<Tab>u
+menutrans &Redo<Tab>^R Mé&gis<Tab>^R
+menutrans Rep&eat<Tab>\. &Ismét<Tab>\.
+menutrans Cu&t<Tab>"+x &Kivágás<Tab>"+x
+menutrans &Copy<Tab>"+y &Másolás<Tab>"+y
+menutrans &Paste<Tab>"+gP &Beillesztés<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Berakás\ e&lé<Tab>[p
+menutrans Put\ &After<Tab>]p Berakás\ &mögé<Tab>]p
+menutrans &Delete<Tab>x &Törlés<Tab>x
+menutrans &Select\ all<Tab>ggVG A&z\ összes kijelölése<Tab>ggvG
+menutrans &Find\.\.\. Ke&resés\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Keresés\ és\ c&sere\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Keresés\ és\ c&sere<Tab>:%s
+menutrans Find\ and\ Rep&lace Keresés\ és\ c&sere
+menutrans Find\ and\ Rep&lace<Tab>:s Keresés\ és\ c&sere<Tab>:s
+menutrans Settings\ &Window &Ablak\ beállításai
+menutrans &Global\ Settings Ál&talános\ beállítások
+menutrans F&ile\ Settings &Fájl\ beállítások
+menutrans C&olor\ Scheme &Színek
+menutrans &Keymap Billent&yûzetkiosztás
+
+" Edit.Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Minta\ kiemelés\ BE/KI<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Kis/nagybetû\ azonos/különbözõ<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Zárójelpár\ mutatása\ BE/KI<Tab>:set\ sm!
+menutrans &Context\ lines &Kurzor\ ablak\ szélétõl
+menutrans &Virtual\ Edit &Virtuális\ szerkesztés
+menutrans Never &Soha
+menutrans Block\ Selection &Blokk\ kijelölésekor
+menutrans Insert\ mode S&zöveg\ bevitelekor
+menutrans Block\ and\ Insert Bl&okk\ kijelölésekor\ és\ szöveg\ bevitelekor
+menutrans Always &Mindig
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! &Szövegbeviteli\ mód\ BE/KI<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! &Vi\ kompatíbilis\ mód\ BE/Ki<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Ke&resési\ útvonal\.\.\.
+menutrans Ta&g\ Files\.\.\. &Tag\ fájl\.\.\.
+menutrans Toggle\ &Toolbar &Eszköztár\ BE/KI
+menutrans Toggle\ &Bottom\ Scrollbar &Vízszintes\ Görgetõsáv\ BE/KI
+menutrans Toggle\ &Left\ Scrollbar &Bal\ görgetõsáv\ BE/KI
+menutrans Toggle\ &Right\ Scrollbar &Jobb\ görgetõsáv\ BE/KI
+menutrans None Nincs
+
+" Edit.File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Sorszá&mozás\ BE/KI<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! &Lista\ mód\ BE/KI<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Sor&törés\ BE/KI<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Sortörés\ s&zóvégeknél\ BE/KI<tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! &Tab\ kifejtés\ BE/KI<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Automatikus\ behúzás\ BE/KI<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! &C-behúzás\ BE/KI<Tab>:set\ cin!
+menutrans &Shiftwidth &Behúzás\ mértéke\ ('sw')
+menutrans Soft\ &Tabstop T&abulálás\ mértéke\ ('sts')
+menutrans Te&xt\ Width\.\.\. &Szöveg\ szélessége\.\.\.
+menutrans &File\ Format\.\.\. &Fájlformátum\.\.\.
+
+" Tools menu
+menutrans &Tools &Eszközök
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Ugrás\ a\ taghoz<Tab>g^]
+menutrans Jump\ &back<Tab>^T Ugrás\ &vissza<Tab>^T
+menutrans Build\ &Tags\ File &Tag\ fájl\ készítése
+menutrans &Folding &Behajtások
+menutrans &Make<Tab>:make &Fordítás<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Hibák\ listája<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Ü&zenetek\ listája<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &Következõ\ &hiba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Elõzõ\ hiba<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Régebbi\ lista<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Újabb\ lista<Tab>:cnew
+menutrans Error\ &Window Hibaablak
+menutrans &Update<Tab>:cwin &Frissítés<Tab>:cwin
+menutrans &Open<Tab>:copen M&egnyitás<Tab>:copen
+menutrans &Close<Tab>:cclose Be&zárás<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Normál->HEX\ nézet<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r HEX->Normál\ nézet<Tab>:%!xxd\ -r
+menutrans &Set\ Compiler Fordító\ &megadása
+
+" Tools.Folding
+menutrans &Enable/Disable\ folds<Tab>zi Behajtások\ BE&/KI<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Aktuális\ sor\ látszik<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Csak\ aktuális\ sor\ látszik<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Következõ\ szint\ be&zárása<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Összes\ hajtás\ &bezárása<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Következõ\ szint\ ki&nyitása<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Összes\ hajtás\ &kinyitása<Tab>zR
+menutrans Fold\ Met&hod Behajtások\ &létrehozása
+menutrans M&anual &Kézi
+menutrans I&ndent Be&húzás
+menutrans E&xpression Ki&fejezés
+menutrans S&yntax &Szintaxis
+menutrans &Diff &Diff-különbség
+menutrans Ma&rker &Jelölés
+menutrans Create\ &Fold<Tab>zf Ú&j\ behajtás<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Behajtás\ &törlése<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Öss&zes\ behajtás\ törlése<Tab>zD
+menutrans Fold\ col&umn\ width Behajtások\ a\ &margón\ x\ oszlopban
+
+" Tools.Diff
+menutrans &Update &Frissítés
+menutrans &Get\ Block Block\ &BE
+menutrans &Put\ Block Block\ &KI
+
+
+
+" Names for buffer menu.
+menutrans &Buffers &Pufferok
+menutrans &Refresh\ menu &Frissítés
+menutrans Delete &Törlés
+menutrans &Alternate &Csere
+menutrans &Next &Következõ
+menutrans &Previous &Elõzõ
+
+" Window menu
+menutrans &Window &Ablak
+menutrans &New<Tab>^Wn Ú&j<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Felosztás<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Felosztás\ &#-val<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Felosztás\ Fü&ggõlegesen<Tab>^Wv
+menutrans Split\ File\ E&xplorer Új\ &intézõ
+menutrans &Close<Tab>^Wc Be&zárás<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo &Többi\ bezárása<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &Következõ<Tab>^Ww
+menutrans P&revious<Tab>^WW &Elõzõ<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Azonos\ magasság<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Ma&x\ magasság<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ &Min\ magasság<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Max\ &szélesség<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Mi&n\ szélesség<Tab>^W1\|
+menutrans Move\ &To &Elmozdítás
+menutrans &Top<Tab>^WK &Fel<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Le<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Balra<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Jobbra<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Gördítés\ &felfelé<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Gördítés\ &lefelé<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. &Betûtípus\.\.\.
+
+" The popup menu
+menutrans &Undo &Visszavonás
+menutrans Cu&t &Kivágás
+menutrans &Copy &Másolás
+menutrans &Paste &Beillesztés
+menutrans &Delete &Törlés
+menutrans Select\ Blockwise Kijelölés\ blo&kként
+menutrans Select\ &Word S&zó\ kijelölése
+menutrans Select\ &Line &Sor\ kijelölése
+menutrans Select\ &Block B&lokk\ kijelölése
+menutrans Select\ &All A&z\ összes\ kijelölése
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Megnyitás
+ tmenu ToolBar.Save Mentés
+ tmenu ToolBar.SaveAll Mindet menti
+ tmenu ToolBar.Print Nyomtatás
+ tmenu ToolBar.Undo Visszavonás
+ tmenu ToolBar.Redo Mégis
+ tmenu ToolBar.Cut Kivágás
+ tmenu ToolBar.Copy Másolás
+ tmenu ToolBar.Paste Beillesztés
+ tmenu ToolBar.Find Keresés
+ tmenu ToolBar.FindNext Tovább keresés
+ tmenu ToolBar.FindPrev Keresés visszafelé
+ tmenu ToolBar.Replace Keresés/csere
+ tmenu ToolBar.LoadSesn Munkamenet beolvasás
+ tmenu ToolBar.SaveSesn Munkamenet mentés
+ tmenu ToolBar.RunScript Vim program indítás
+ tmenu ToolBar.Make Projekt építés
+ tmenu ToolBar.Shell Shell indítás
+ tmenu ToolBar.RunCtags Tag építés
+ tmenu ToolBar.TagJump Ugrás a kurzor alatti tagra
+ tmenu ToolBar.Help Vim súgó
+ tmenu ToolBar.FindHelp Keresés a Vim súgóban
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax Sz&intaxis
+menutrans &Show\ filetypes\ in\ menu Fájl&típusok\ menü
+menutrans Set\ '&syntax'\ only Csak\ '&syntax'
+menutrans Set\ '&filetype'\ too '&filetype'\ is
+menutrans &Off &Ki
+menutrans &Manual Ké&zi
+menutrans A&utomatic A&utomatikus
+menutrans on/off\ for\ &This\ file &BE/KI\ ennél\ a\ fájlnál
+menutrans Co&lor\ test &Színteszt
+menutrans &Highlight\ test Kiemelés\ &teszt
+menutrans &Convert\ to\ HTML &HTML\ oldal\ készítése
+
+" dialog texts
+let menutrans_no_file = "[Nincs file]"
+let menutrans_help_dialog = "Írd be a kívánt szót vagy parancsot:\n\n A szövegbeviteli parancsok elé írj i_-t (pl.: i_CTRL-X)\nA sorszerkeszõ parancsok elé c_-t (pl.: c_<Del>)\nA változókat a ' jellel vedd körül (pl.: 'shiftwidth')"
+let g:menutrans_path_dialog = "Írd be a keresett fájl lehetséges elérési útjait, vesszõvel elválasztva"
+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"
diff --git a/runtime/lang/menu_hu_hu.utf-8.vim b/runtime/lang/menu_hu_hu.utf-8.vim
new file mode 100644
index 000000000..83a4dca40
--- /dev/null
+++ b/runtime/lang/menu_hu_hu.utf-8.vim
@@ -0,0 +1,242 @@
+" Menu Translations: Hungarian (Magyar)
+" Original Translation: Zoltán Ãrpádffy
+" Maintained By: Kontra Gergely <kgergely@mcl.hu>
+" Last Change: 2004 Jun 10
+"
+" This file was converted from menu_hu_hu.iso_8859-2.vim. See there for
+" remarks.
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help &Súgó
+menutrans &Overview<Tab><F1> Ã&ttekintés<Tab><F1>
+menutrans &How-to\ links &HOGYAN\ linkek
+menutrans &User\ Manual &Kézikönyv
+menutrans &Credits &Szerzők,\ köszönetek
+menutrans Co&pying &Védjegy
+menutrans O&rphans Ãrvá&k
+menutrans &Find\.\.\. Ke&resés\.\.\.
+menutrans &Version &Verzió
+menutrans &About &Névjegy
+" File menu
+menutrans &File &Fájl
+menutrans &Open\.\.\.<Tab>:e Meg&nyitás\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Megnyitás\ új\ a&blakba\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew Új\ dok&umentum<Tab>:enew
+menutrans &Close<Tab>:close Be&zárás<Tab>:close
+menutrans &Save<Tab>:w &Mentés<Tab>:w
+menutrans Split\ &Diff\ with\.\.\. Össze&hasonlítás\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Összehasonlítás\ &patch\ -el\.\.\.
+menutrans Save\ &As\.\.\.<Tab>:sav Menté&s\ másként\.\.\.<Tab>:w
+menutrans &Print Nyomt&atás
+menutrans Sa&ve-Exit<Tab>:wqa Mentés\ és\ k&ilépés<Tab>:wqa
+menutrans E&xit<Tab>:qa &Kilépés<Tab>:qa
+
+" Edit menu
+menutrans &Edit S&zerkesztés
+menutrans &Undo<Tab>u &Visszavonás<Tab>u
+menutrans &Redo<Tab>^R Mé&gis<Tab>^R
+menutrans Rep&eat<Tab>\. &Ismét<Tab>\.
+menutrans Cu&t<Tab>"+x &Kivágás<Tab>"+x
+menutrans &Copy<Tab>"+y &Másolás<Tab>"+y
+menutrans &Paste<Tab>"+gP &Beillesztés<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Berakás\ e&lé<Tab>[p
+menutrans Put\ &After<Tab>]p Berakás\ &mögé<Tab>]p
+menutrans &Delete<Tab>x &Törlés<Tab>x
+menutrans &Select\ all<Tab>ggVG A&z\ összes kijelölése<Tab>ggvG
+menutrans &Find\.\.\. Ke&resés\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Keresés\ és\ c&sere\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Keresés\ és\ c&sere<Tab>:%s
+menutrans Find\ and\ Rep&lace Keresés\ és\ c&sere
+menutrans Find\ and\ Rep&lace<Tab>:s Keresés\ és\ c&sere<Tab>:s
+menutrans Settings\ &Window &Ablak\ beállításai
+menutrans &Global\ Settings Ãl&talános\ beállítások
+menutrans F&ile\ Settings &Fájl\ beállítások
+menutrans C&olor\ Scheme &Színek
+menutrans &Keymap Billent&yűzetkiosztás
+
+" Edit.Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Minta\ kiemelés\ BE/KI<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Kis/nagybetű\ azonos/különböző<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Zárójelpár\ mutatása\ BE/KI<Tab>:set\ sm!
+menutrans &Context\ lines &Kurzor\ ablak\ szélétől
+menutrans &Virtual\ Edit &Virtuális\ szerkesztés
+menutrans Never &Soha
+menutrans Block\ Selection &Blokk\ kijelölésekor
+menutrans Insert\ mode S&zöveg\ bevitelekor
+menutrans Block\ and\ Insert Bl&okk\ kijelölésekor\ és\ szöveg\ bevitelekor
+menutrans Always &Mindig
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! &Szövegbeviteli\ mód\ BE/KI<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! &Vi\ kompatíbilis\ mód\ BE/Ki<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Ke&resési\ útvonal\.\.\.
+menutrans Ta&g\ Files\.\.\. &Tag\ fájl\.\.\.
+menutrans Toggle\ &Toolbar &Eszköztár\ BE/KI
+menutrans Toggle\ &Bottom\ Scrollbar &Vízszintes\ Görgetősáv\ BE/KI
+menutrans Toggle\ &Left\ Scrollbar &Bal\ görgetősáv\ BE/KI
+menutrans Toggle\ &Right\ Scrollbar &Jobb\ görgetősáv\ BE/KI
+menutrans None Nincs
+
+" Edit.File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Sorszá&mozás\ BE/KI<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! &Lista\ mód\ BE/KI<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Sor&törés\ BE/KI<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Sortörés\ s&zóvégeknél\ BE/KI<tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! &Tab\ kifejtés\ BE/KI<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Automatikus\ behúzás\ BE/KI<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! &C-behúzás\ BE/KI<Tab>:set\ cin!
+menutrans &Shiftwidth &Behúzás\ mértéke\ ('sw')
+menutrans Soft\ &Tabstop T&abulálás\ mértéke\ ('sts')
+menutrans Te&xt\ Width\.\.\. &Szöveg\ szélessége\.\.\.
+menutrans &File\ Format\.\.\. &Fájlformátum\.\.\.
+
+" Tools menu
+menutrans &Tools &Eszközök
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Ugrás\ a\ taghoz<Tab>g^]
+menutrans Jump\ &back<Tab>^T Ugrás\ &vissza<Tab>^T
+menutrans Build\ &Tags\ File &Tag\ fájl\ készítése
+menutrans &Folding &Behajtások
+menutrans &Make<Tab>:make &Fordítás<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Hibák\ listája<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Ü&zenetek\ listája<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &Következő\ &hiba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Előző\ hiba<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Régebbi\ lista<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Újabb\ lista<Tab>:cnew
+menutrans Error\ &Window Hibaablak
+menutrans &Update<Tab>:cwin &Frissítés<Tab>:cwin
+menutrans &Open<Tab>:copen M&egnyitás<Tab>:copen
+menutrans &Close<Tab>:cclose Be&zárás<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Normál->HEX\ nézet<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r HEX->Normál\ nézet<Tab>:%!xxd\ -r
+menutrans &Set\ Compiler Fordító\ &megadása
+
+" Tools.Folding
+menutrans &Enable/Disable\ folds<Tab>zi Behajtások\ BE&/KI<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Aktuális\ sor\ látszik<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Csak\ aktuális\ sor\ látszik<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Következő\ szint\ be&zárása<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Összes\ hajtás\ &bezárása<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Következő\ szint\ ki&nyitása<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Összes\ hajtás\ &kinyitása<Tab>zR
+menutrans Fold\ Met&hod Behajtások\ &létrehozása
+menutrans M&anual &Kézi
+menutrans I&ndent Be&húzás
+menutrans E&xpression Ki&fejezés
+menutrans S&yntax &Szintaxis
+menutrans &Diff &Diff-különbség
+menutrans Ma&rker &Jelölés
+menutrans Create\ &Fold<Tab>zf Ú&j\ behajtás<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Behajtás\ &törlése<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Öss&zes\ behajtás\ törlése<Tab>zD
+menutrans Fold\ col&umn\ width Behajtások\ a\ &margón\ x\ oszlopban
+
+" Tools.Diff
+menutrans &Update &Frissítés
+menutrans &Get\ Block Block\ &BE
+menutrans &Put\ Block Block\ &KI
+
+
+
+" Names for buffer menu.
+menutrans &Buffers &Pufferok
+menutrans &Refresh\ menu &Frissítés
+menutrans Delete &Törlés
+menutrans &Alternate &Csere
+menutrans &Next &Következő
+menutrans &Previous &Előző
+
+" Window menu
+menutrans &Window &Ablak
+menutrans &New<Tab>^Wn Ú&j<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Felosztás<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Felosztás\ &#-val<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Felosztás\ Fü&ggőlegesen<Tab>^Wv
+menutrans Split\ File\ E&xplorer Új\ &intéző
+menutrans &Close<Tab>^Wc Be&zárás<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo &Többi\ bezárása<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &Következő<Tab>^Ww
+menutrans P&revious<Tab>^WW &Előző<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Azonos\ magasság<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Ma&x\ magasság<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ &Min\ magasság<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Max\ &szélesség<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Mi&n\ szélesség<Tab>^W1\|
+menutrans Move\ &To &Elmozdítás
+menutrans &Top<Tab>^WK &Fel<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Le<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Balra<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Jobbra<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Gördítés\ &felfelé<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Gördítés\ &lefelé<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. &Betűtípus\.\.\.
+
+" The popup menu
+menutrans &Undo &Visszavonás
+menutrans Cu&t &Kivágás
+menutrans &Copy &Másolás
+menutrans &Paste &Beillesztés
+menutrans &Delete &Törlés
+menutrans Select\ Blockwise Kijelölés\ blo&kként
+menutrans Select\ &Word S&zó\ kijelölése
+menutrans Select\ &Line &Sor\ kijelölése
+menutrans Select\ &Block B&lokk\ kijelölése
+menutrans Select\ &All A&z\ összes\ kijelölése
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Megnyitás
+ tmenu ToolBar.Save Mentés
+ tmenu ToolBar.SaveAll Mindet menti
+ tmenu ToolBar.Print Nyomtatás
+ tmenu ToolBar.Undo Visszavonás
+ tmenu ToolBar.Redo Mégis
+ tmenu ToolBar.Cut Kivágás
+ tmenu ToolBar.Copy Másolás
+ tmenu ToolBar.Paste Beillesztés
+ tmenu ToolBar.Find Keresés
+ tmenu ToolBar.FindNext Tovább keresés
+ tmenu ToolBar.FindPrev Keresés visszafelé
+ tmenu ToolBar.Replace Keresés/csere
+ tmenu ToolBar.LoadSesn Munkamenet beolvasás
+ tmenu ToolBar.SaveSesn Munkamenet mentés
+ tmenu ToolBar.RunScript Vim program indítás
+ tmenu ToolBar.Make Projekt építés
+ tmenu ToolBar.Shell Shell indítás
+ tmenu ToolBar.RunCtags Tag építés
+ tmenu ToolBar.TagJump Ugrás a kurzor alatti tagra
+ tmenu ToolBar.Help Vim súgó
+ tmenu ToolBar.FindHelp Keresés a Vim súgóban
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax Sz&intaxis
+menutrans &Show\ filetypes\ in\ menu Fájl&típusok\ menü
+menutrans Set\ '&syntax'\ only Csak\ '&syntax'
+menutrans Set\ '&filetype'\ too '&filetype'\ is
+menutrans &Off &Ki
+menutrans &Manual Ké&zi
+menutrans A&utomatic A&utomatikus
+menutrans on/off\ for\ &This\ file &BE/KI\ ennél\ a\ fájlnál
+menutrans Co&lor\ test &Színteszt
+menutrans &Highlight\ test Kiemelés\ &teszt
+menutrans &Convert\ to\ HTML &HTML\ oldal\ készítése
+
+" dialog texts
+let menutrans_no_file = "[Nincs file]"
+let menutrans_help_dialog = "Ãrd be a kívánt szót vagy parancsot:\n\n A szövegbeviteli parancsok elé írj i_-t (pl.: i_CTRL-X)\nA sorszerkeszÅ‘ parancsok elé c_-t (pl.: c_<Del>)\nA változókat a ' jellel vedd körül (pl.: 'shiftwidth')"
+let g:menutrans_path_dialog = "Ãrd be a keresett fájl lehetséges elérési útjait, vesszÅ‘vel elválasztva"
+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"
diff --git a/runtime/lang/menu_it.latin1.vim b/runtime/lang/menu_it.latin1.vim
new file mode 100644
index 000000000..333bb4166
--- /dev/null
+++ b/runtime/lang/menu_it.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian
+
+source <sfile>:p:h/menu_it_it.latin1.vim
diff --git a/runtime/lang/menu_it.utf-8.vim b/runtime/lang/menu_it.utf-8.vim
new file mode 100644
index 000000000..1770445ab
--- /dev/null
+++ b/runtime/lang/menu_it.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian for UTF-8 encoding
+
+source <sfile>:p:h/menu_it_it.latin1.vim
diff --git a/runtime/lang/menu_it_it.latin1.vim b/runtime/lang/menu_it_it.latin1.vim
new file mode 100644
index 000000000..7da58e1b9
--- /dev/null
+++ b/runtime/lang/menu_it_it.latin1.vim
@@ -0,0 +1,327 @@
+" Menu Translations: Italian / Italiano
+" Maintainer: Antonio Colombo <antonio.colombo@jrc.it>
+" Vlad Sandrini <sator72@libero.it>
+" Last Change: 2004 Mar 3
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding iso-8859-1
+
+" Help / Aiuto
+menut &Help &Aiuto
+menut &Overview<Tab><F1> &Panoramica<Tab><F1>
+menut &User\ Manual Manuale\ &Utente
+menut &How-to\ links Co&me\.\.\.
+"menut &GUI &GUI
+menut &Credits Cr&editi
+menut Co&pying C&opie
+menut &Sponsor/Register &Sponsor/Registrazione
+menut O&rphans O&rfani
+"menut &Find\.\.\. &Cerca\.\.\.
+"NOTA: fa conflitto con 'cerca' nel menu 'modifica'
+menut &Version &Versione
+menut &About &Intro
+
+let g:menutrans_help_dialog = "Batti un comando o una parola per cercare aiuto:\n\nPremetti i_ per comandi in modalità Input (ad.es.: i_CTRL-X)\nPremetti c_ per comandi che editano la linea-comandi (ad.es.: c_<Del>)\nPremetti ' per un nome di opzione (ad.es.: 'shiftwidth')"
+
+" File menu
+"menut &File &File
+"
+menut &Open\.\.\.<Tab>:e &Apri\.\.\.<Tab>:e
+menut Sp&lit-Open\.\.\.<Tab>:sp A&pri\ nuova\ Finestra\.\.\.<Tab>:sp
+menut &New<Tab>:enew &Nuovo<Tab>:enew
+menut &Close<Tab>:close &Chiudi<Tab>:close
+menut &Save<Tab>:w &Salva<Tab>:w
+menut Save\ &As\.\.\.<Tab>:sav Salva\ &con\ nome\.\.\.<Tab>:sav
+
+if has("diff")
+ menut Split\ &Diff\ with\.\.\. Finestra\ &Differenza\ con\.\.\.
+ menut Split\ Patched\ &By\.\.\. Finestra\ Patc&h\ da\.\.\.
+endif
+
+menut &Print S&tampa
+menut Sa&ve-Exit<Tab>:wqa Sa&lva\ ed\ esci<Tab>:wqa
+menut E&xit<Tab>:qa &Esci<Tab>:qa
+
+" Edit / Modifica
+
+menut &Edit &Modifica
+menut &Undo<Tab>u &Annulla<Tab>u
+menut &Redo<Tab>^R &Ripristina<Tab>^R
+menut Rep&eat<Tab>\. Ri&peti<Tab>\.
+menut Cu&t<Tab>"+x &Taglia<Tab>"+x
+menut &Copy<Tab>"+y &Copia<Tab>"+y
+menut &Paste<Tab>"+gP &Incolla<Tab>"+gP
+menut Put\ &Before<Tab>[p &Metti\ davanti<Tab>[p
+menut Put\ &After<Tab>]p M&etti\ dietro<Tab>]p
+menut &Delete<Tab>x Cance&lla<Tab>x
+menut &Select\ all<Tab>ggVG Seleziona\ &tutto<Tab>ggVG
+menut &Select\ All<Tab>ggVG Seleziona\ &tutto<Tab>ggVG
+menut &Find\.\.\. &Cerca\.\.\.
+menut Find\ and\ Rep&lace\.\.\. &Sostituisci\.\.\.
+menut Settings\ &Window &Finestra\ Impostazioni
+menut &Global\ Settings Impostazioni\ &globali
+menut Question Domanda
+
+" Edit / Modifica Impostazioni Globali
+menut &Global\ Settings Impostazioni\ &Globali
+menut Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Evidenzia\ ricerche\ Sì/No<Tab>:set\ hls!
+menut Toggle\ &Ignore-case<Tab>:set\ ic! &Ignora\ maiusc\.-minusc\.\ Sì/No<Tab>:set\ ic!
+menut Toggle\ &Showmatch<Tab>:set\ sm! Indica\ &Corrispondente\ Sì/No<Tab>:set\ sm!
+
+menut &Context\ lines &Linee\ di\ contesto
+menut &Virtual\ Edit &Edit\ Virtuale
+
+menut Never Mai
+menut Block\ Selection Selezione\ Blocco
+menut Insert\ mode Modalità\ Inserimento
+menut Block\ and\ Insert Selezione\ Blocco+Inserimento
+menut Always Sempre
+
+menut Toggle\ Insert\ &Mode<Tab>:set\ im! &Modalità\ Inserimento\ Sì/No<Tab>:set\ im!
+menut Toggle\ Vi\ C&ompatible<Tab>:set\ cp! C&ompatibile\ Vi\ Sì/No<Tab>:set\ cp!
+menut Search\ &Path\.\.\. Ca&mmino\ di\ ricerca\.\.\.
+menut Ta&g\ Files\.\.\. File\ Ta&g\.\.\.
+"
+" Opzioni GUI
+menut Toggle\ &Toolbar Barra\ S&trumenti\ Sì/No
+menut Toggle\ &Bottom\ Scrollbar Barra\ Scorrimento\ in\ &fondo\ Sì/No
+menut Toggle\ &Left\ Scrollbar Barra\ Scorrimento\ a\ &sinistra\ Sì/No
+menut Toggle\ &Right\ Scrollbar Barra\ Scorrimento\ a\ &destra\ Sì/No
+
+let g:menutrans_path_dialog = "Batti percorso di ricerca per i file.\nSepara fra loro i nomi di directory con una virgola."
+let g:menutrans_tags_dialog = "Batti nome dei file di tag.\nSepara fra loro i nomi di directory con una virgola."
+
+" Edit / Impostazioni File
+menut F&ile\ Settings &Impostazioni\ File
+
+" Boolean options
+menut Toggle\ Line\ &Numbering<Tab>:set\ nu! &Numerazione\ \ Sì/No<Tab>:set\ nu!
+menut Toggle\ &List\ Mode<Tab>:set\ list! Modalità\ &Lista\ Sì/No<Tab>:set\ list!
+menut Toggle\ Line\ &Wrap<Tab>:set\ wrap! Linee\ &Continuate\ Sì/No<Tab>:set\ wrap!
+menut Toggle\ W&rap\ at\ word<Tab>:set\ lbr! A\ capo\ alla\ &parola\ Sì/No<Tab>:set\ lbr!
+menut Toggle\ &expand-tab<Tab>:set\ et! &Espandi\ Tabulazione\ Sì/No<Tab>:set\ et!
+menut Toggle\ &auto-indent<Tab>:set\ ai! Indentazione\ &automatica\ Sì/No<Tab>:set ai!
+menut Toggle\ &C-indenting<Tab>:set\ cin! Indentazione\ stile\ &C\ Sì/No<Tab>:set cin!
+
+" altre opzioni
+menut &Shiftwidth &Spazi\ Rientranza
+menut Soft\ &Tabstop &Tabulazione\ Software
+menut Te&xt\ Width\.\.\. Lunghe&zza\ Riga\.\.\.
+menut &File\ Format\.\.\. Formato\ &File\.\.\.
+
+let g:menutrans_textwidth_dialog = "Batti nuova lunghezza linea (0 per inibire la formattazione): "
+
+let g:menutrans_fileformat_dialog = "Scegli formato con cui scrivere il file"
+
+menut C&olor\ Scheme Schema\ C&olori
+
+menut default normale
+menut DEFAULT NORMALE
+menut evening notturno
+menut EVENING NOTTURNO
+menut morning diurno
+menut MORNING DIURNO
+menut shine brillante
+menut SHINE BRILLANTE
+menut peachpuff pesca
+menut PEACHPUF PESCA
+
+menut &Keymap &Mappa\ tastiera
+
+menut None nessuna
+menut accents accenti
+menut ACCENTS ACCENTI
+menut hebrew ebraico
+menut HEBREW EBRAICO
+menut hebrew_iso-8859-8 ebraico_iso-8859-8
+menut hebrew_cp1255 ebraico_cp1255
+menut hebrew_utf-8 ebraico_utf-8
+menut hebrewp_iso-8859-8 ebraico_p_iso-8859-8
+menut HEBREW- EBRAICO+
+menut hebrewp EBRAICOP
+menut HEBREWP EBRAICOP
+menut russian-jcuken cirillico-jcuken
+menut russian-jcukenwin cirillico-jcuken-win
+menut RUSSIAN CIRILLICO
+menut RUSSIAN- CIRILLICO-
+
+menut Select\ Fo&nt\.\.\. Scegli\ &Font\.\.\.
+
+" Menu strumenti programmazione
+menut &Tools &Strumenti
+
+menut &Jump\ to\ this\ tag<Tab>g^] &Vai\ a\ questa\ Tag<Tab>g^]
+menut Jump\ &back<Tab>^T Torna\ &indietro<Tab>^T
+menut Build\ &Tags\ File Costruisci\ File\ &Tags\
+
+" Menu piegature / Fold
+if has("folding")
+ menut &Folding &Piegature
+ " apri e chiudi piegature
+ menut &Enable/Disable\ folds<Tab>zi Pi&egature\ Sì/No<Tab>zi
+ menut &View\ Cursor\ Line<Tab>zv &Vedi\ linea\ col\ Cursore<Tab>zv
+ menut Vie&w\ Cursor\ Line\ only<Tab>zMzx Vedi\ &solo\ linea\ col\ Cursore<Tab>zMzx
+ menut C&lose\ more\ folds<Tab>zm C&hiudi\ più\ Piegature<Tab>zm
+ menut &Close\ all\ folds<Tab>zM &Chiudi\ tutte\ le\ Piegature<Tab>zM
+ menut O&pen\ more\ folds<Tab>zr A&pri\ più\ Piegature<Tab>zr
+ menut &Open\ all\ folds<Tab>zR &Apri\ tutte\ le\ Piegature<Tab>zR
+ " metodo piegatura
+ menut Fold\ Met&hod Meto&do\ Piegatura
+ menut M&anual &Manuale
+ menut I&ndent &Nidificazione
+ menut E&xpression &Espressione\ Reg\.
+ menut S&yntax &Sintassi
+ menut &Diff &Differenza
+ menut Ma&rker Mar&catura
+ " crea e cancella piegature
+ menut Create\ &Fold<Tab>zf Crea\ &Piegatura<Tab>zf
+ menut &Delete\ Fold<Tab>zd &Leva\ Piegatura<Tab>zd
+ menut Delete\ &All\ Folds<Tab>zD Leva\ &tutte\ le\ Piegature<Tab>zD
+ " movimenti all'interno delle piegature
+ menut Fold\ col&umn\ width Larghezza\ piegat&ure\ in\ colonne
+endif " has folding
+
+if has("diff")
+ menut &Diff &Differenza
+ "
+ menut &Update &Aggiorna
+ menut &Get\ Block &Importa\ Differenze
+ menut &Put\ Block &Esporta\ Differenze
+endif " has diff
+
+menut &Make<Tab>:make Esegui\ &Make<Tab>:make
+
+menut &List\ Errors<Tab>:cl Lista\ &Errori<Tab>:cl
+menut L&ist\ Messages<Tab>:cl! Lista\ &Messaggi<Tab>:cl!
+menut &Next\ Error<Tab>:cn Errore\ S&uccessivo<Tab>:cn
+menut &Previous\ Error<Tab>:cp Errore\ &Precedente<Tab>:cp
+menut &Older\ List<Tab>:cold Lista\ men&o\ recente<Tab>:cold
+menut N&ewer\ List<Tab>:cnew Lista\ più\ rece&nte<Tab>:cnew
+
+menut Error\ &Window &Finestra\ errori
+
+menut &Update<Tab>:cwin A&ggiorna<Tab>:cwin
+menut &Open<Tab>:copen &Apri<Tab>:copen
+menut &Close<Tab>:cclose &Chiudi<Tab>:cclose
+
+menut &Convert\ to\ HEX<Tab>:%!xxd &Converti\ a\ Esadecimale<Tab>:%!xxd
+menut Conve&rt\ back<Tab>:%!xxd\ -r Conve&rti\ da\ Esadecimale<Tab>:%!xxd\ -r
+
+menut &Set\ Compiler Impo&sta\ Compilatore
+
+" Buffers / Buffer
+menut &Buffers &Buffer
+
+menut &Refresh\ menu A&ggiorna\ menu
+menut &Delete &Elimina
+menut &Alternate &Alternato
+menut &Next &Successivo
+menut &Previous &Precedente
+menut [No\ File] [Nessun\ File]
+" Syntax / Sintassi
+menut &Syntax &Sintassi
+menut &Show\ filetypes\ in\ menu Mo&stra\ tipi\ di\ file\ nel\ menu
+menut Set\ '&syntax'\ only Attiva\ solo\ \ '&syntax'
+menut Set\ '&filetype'\ too Attiva\ anche\ '&filetype'
+menut &Off &Disattiva
+menut &Manual &Manuale
+menut A&utomatic A&utomatico
+menut on/off\ for\ &This\ file Attiva\ Sì/No\ su\ ques&to\ file
+menut Co&lor\ test Test\ &Colori
+menut &Highlight\ test Test\ &Evidenziamento
+menut &Convert\ to\ HTML Converti\ ad\ &HTML
+
+let g:menutrans_no_file = "[Senza nome]"
+
+" Window / Finestra
+menut &Window &Finestra
+
+menut &New<Tab>^Wn &Nuova<Tab>^Wn
+menut S&plit<Tab>^Ws &Dividi\ lo\ schermo<Tab>^Ws
+menut Sp&lit\ To\ #<Tab>^W^^ D&ividi\ verso\ #<Tab>^W^^
+menut Split\ &Vertically<Tab>^Wv Di&vidi\ verticalmente<Tab>^Wv
+menut Split\ File\ E&xplorer Aggiungi\ finestra\ E&xplorer
+
+menut &Close<Tab>^Wc &Chiudi<Tab>^Wc
+menut Close\ &Other(s)<Tab>^Wo C&hiudi\ altra(e)<Tab>^Wo
+
+menut Move\ &To &Muovi\ verso
+
+menut &Top<Tab>^WK &Cima<Tab>^WK
+menut &Bottom<Tab>^WJ &Fondo<Tab>^WJ
+menut &Left\ side<Tab>^WH Lato\ &Sinistro<Tab>^WH
+menut &Right\ side<Tab>^WL Lato\ &Destro<Tab>^WL
+menut Rotate\ &Up<Tab>^WR Ruota\ verso\ l'&alto<Tab>^WR
+menut Rotate\ &Down<Tab>^Wr Ruota\ verso\ il\ &basso<Tab>^Wr
+
+menut &Equal\ Size<Tab>^W= &Uguale\ ampiezza<Tab>^W=
+menut &Max\ Height<Tab>^W_ &Altezza\ massima<Tab>^W_
+menut M&in\ Height<Tab>^W1_ A&ltezza\ minima<Tab>^W1_
+menut Max\ &Width<Tab>^W\| Larghezza\ massima<Tab>^W\|
+menut Min\ Widt&h<Tab>^W1\| Larghezza\ minima<Tab>^W1\|
+
+" The popup menu
+menut &Undo &Annulla
+menut Cu&t &Taglia
+menut &Copy &Copia
+menut &Paste &Incolla
+menut &Delete &Elimina
+
+menut Select\ Blockwise Seleziona\ in\ blocco
+menut Select\ &Word Seleziona\ &Parola
+menut Select\ &Line Seleziona\ &Linea
+menut Select\ &Block Seleziona\ &Blocco
+menut Select\ &All Seleziona\ T&utto
+
+" The GUI Toolbar / Barra Strumenti
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Apri
+ tmenu ToolBar.Save Salva
+ tmenu ToolBar.SaveAll Salva Tutto
+ tmenu ToolBar.Print Stampa
+ tmenu ToolBar.Undo Annulla
+ tmenu ToolBar.Redo Ripristina
+ tmenu ToolBar.Cut Taglia
+ tmenu ToolBar.Copy Copia
+ tmenu ToolBar.Paste Incolla
+
+ if !has("gui_athena")
+ tmenu ToolBar.Find Cerca
+ tmenu ToolBar.FindNext Cerca Successivo
+ tmenu ToolBar.FindPrev Cerca Precedente
+ tmenu ToolBar.Replace Sostituisci
+ endif
+
+if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nuova finestra
+ tmenu ToolBar.WinSplit Dividi finestra
+ tmenu ToolBar.WinMax Massima ampiezza
+ tmenu ToolBar.WinMin Minima ampiezza
+ tmenu ToolBar.WinVSplit Dividi verticalmente
+ tmenu ToolBar.WinMaxWidth Massima larghezza
+ tmenu ToolBar.WinMinWidth Minima larghezza
+ tmenu ToolBar.WinClose Chiudi finestra
+endif
+
+ tmenu ToolBar.LoadSesn Carica Sessione
+ tmenu ToolBar.SaveSesn Salva Sessione
+ tmenu ToolBar.RunScript Esegui Script
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell Shell
+ tmenu ToolBar.RunCtags Esegui Ctags
+ tmenu ToolBar.TagJump Vai a Tag
+ tmenu ToolBar.Help Aiuto
+ tmenu ToolBar.FindHelp Cerca in Aiuto
+ endfun
+endif
+
+" vim: set sw=2 :
diff --git a/runtime/lang/menu_it_it.utf-8.vim b/runtime/lang/menu_it_it.utf-8.vim
new file mode 100644
index 000000000..1770445ab
--- /dev/null
+++ b/runtime/lang/menu_it_it.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian for UTF-8 encoding
+
+source <sfile>:p:h/menu_it_it.latin1.vim
diff --git a/runtime/lang/menu_italian_italy.1252.vim b/runtime/lang/menu_italian_italy.1252.vim
new file mode 100644
index 000000000..b336fcb2a
--- /dev/null
+++ b/runtime/lang/menu_italian_italy.1252.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Italian for Latin1
+
+source <sfile>:p:h/menu_it_it.latin1.vim
diff --git a/runtime/lang/menu_ja.cp932.vim b/runtime/lang/menu_ja.cp932.vim
new file mode 100644
index 000000000..c761b0811
--- /dev/null
+++ b/runtime/lang/menu_ja.cp932.vim
@@ -0,0 +1,5 @@
+" Menu Translations: Japanese (for Windows)
+" Translated By: MURAOKA Taro <koron@tka.att.ne.jp>
+" Last Change: 29-Apr-2004.
+
+source <sfile>:p:h/menu_japanese_japan.932.vim
diff --git a/runtime/lang/menu_ja.utf-8.vim b/runtime/lang/menu_ja.utf-8.vim
new file mode 100644
index 000000000..105a19941
--- /dev/null
+++ b/runtime/lang/menu_ja.utf-8.vim
@@ -0,0 +1,4 @@
+" Menu Translations: Japanese
+
+" eucjp is the same as euc-jp. Source the other one from here.
+source <sfile>:p:h/menu_ja_jp.utf-8.vim
diff --git a/runtime/lang/menu_ja_jp.cp932.vim b/runtime/lang/menu_ja_jp.cp932.vim
new file mode 100644
index 000000000..c761b0811
--- /dev/null
+++ b/runtime/lang/menu_ja_jp.cp932.vim
@@ -0,0 +1,5 @@
+" Menu Translations: Japanese (for Windows)
+" Translated By: MURAOKA Taro <koron@tka.att.ne.jp>
+" Last Change: 29-Apr-2004.
+
+source <sfile>:p:h/menu_japanese_japan.932.vim
diff --git a/runtime/lang/menu_ja_jp.euc-jp.vim b/runtime/lang/menu_ja_jp.euc-jp.vim
new file mode 100644
index 000000000..06be3ff42
--- /dev/null
+++ b/runtime/lang/menu_ja_jp.euc-jp.vim
@@ -0,0 +1,315 @@
+" 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: 29-Apr-2004.
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding euc-jp
+
+" Help menu
+menutrans &Help ¥Ø¥ë¥×(&H)
+menutrans &Overview<Tab><F1> ³µÎ¬(&O)<Tab><F1>
+menutrans &User\ Manual ¥æ¡¼¥¶¥Þ¥Ë¥å¥¢¥ë(&U)
+menutrans &How-to\ links &How-to¥ê¥ó¥¯
+menutrans &Credits ¥¯¥ì¥¸¥Ã¥È(&C)
+menutrans Co&pying Ãøºî¸¢¾ðÊó(&P)
+menutrans &Sponsor/Register ¥¹¥Ý¥ó¥µ¡¼/ÅÐÏ¿(&S)
+menutrans O&rphans ¸É»ù(&R)
+menutrans &Version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó(&V)
+menutrans &About Vim¤Ë¤Ä¤¤¤Æ(&A)
+
+let g:menutrans_help_dialog = "¥Ø¥ë¥×¤ò¸¡º÷¤·¤¿¤¤¥³¥Þ¥ó¥É¤â¤·¤¯¤Ïñ¸ì¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n\nÁÞÆþ¥â¡¼¥É¤Î¥³¥Þ¥ó¥É¤Ë¤Ï i_ ¤òÀèƬ¤ËÉղä·¤Þ¤¹. (Îã: i_CTRL-X)\n¥³¥Þ¥ó¥É¥é¥¤¥óÊÔ½¸¥³¥Þ¥ó¥É¤Ë¤Ï c_ ¤òÀèƬ¤ËÉղä·¤Þ¤¹. (Îã: c_<Del>)\n¥ª¥×¥·¥ç¥ó¤Î̾Á°¤Ë¤Ï ' ¤òÉղä·¤Þ¤¹. (Îã: 'shiftwidth')"
+
+" File menu
+menutrans &File ¥Õ¥¡¥¤¥ë(&F)
+menutrans &Open\.\.\.<Tab>:e ³«¤¯(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ʬ³ä¤·¤Æ³«¤¯(&L)\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew ¿·µ¬ºîÀ®(&N)<Tab>:enew
+menutrans &Close<Tab>:close ÊĤ¸¤ë(&C)<Tab>:close
+menutrans &Save<Tab>:w Êݸ(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav ̾Á°¤òÉÕ¤±¤ÆÊݸ(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. º¹Ê¬É½¼¨(&D)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. ¥Ñ¥Ã¥Á·ë²Ì¤òɽ¼¨(&B)\.\.\.
+menutrans &Print °õºþ(&P)
+menutrans Sa&ve-Exit<Tab>:wqa Êݸ¤·¤Æ½ªÎ»(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa ½ªÎ»(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit ÊÔ½¸(&E)
+menutrans &Undo<Tab>u ¼è¤ê¾Ã¤¹(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP Ž¤êÉÕ¤±(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Á°¤ËŽ¤ë(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p ¸å¤ËŽ¤ë(&A)<Tab>]p
+menutrans &Delete<Tab>x ¾Ã¤¹(&D)<Tab>x
+menutrans &Select\ All<Tab>ggVG Á´¤ÆÁªÂò(&S)<Tab>ggvG
+menutrans &Find\.\.\. ¸¡º÷(&F)\.\.\.
+menutrans &Find<Tab>/ ¸¡º÷(&F)<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. ÃÖ´¹(&L)\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s ÃÖ´¹(&L)<Tab>:%s
+menutrans Find\ and\ Rep&lace<Tab>:s ÃÖ´¹(&L)<Tab>:s
+"menutrans Options\.\.\. ¥ª¥×¥·¥ç¥ó(&O)\.\.\.
+menutrans Settings\ &Window ÀßÄꥦ¥£¥ó¥É¥¦(&W)
+
+" Edit/Global Settings
+menutrans &Global\ Settings Á´ÂÎÀßÄê(&G)
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!
+ \ ¥Ñ¥¿¡¼¥ó¶¯Ä´ÀÚÂØ(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!
+ \ Â羮ʸ»ú¶èÊÌÀÚÂØ(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!
+ \ ¥Þ¥Ã¥Áɽ¼¨ÀÚÂØ(&S)<Tab>:set\ sm!
+menutrans &Context\ lines ¥«¡¼¥½¥ë¼þÊÕ¹Ô¿ô(&C)
+menutrans &Virtual\ Edit ²¾ÁÛÊÔ½¸(&V)
+menutrans Never ̵¸ú
+menutrans Block\ Selection ¥Ö¥í¥Ã¥¯ÁªÂò»þ
+menutrans Insert\ mode ÁÞÆþ¥â¡¼¥É»þ
+menutrans Block\ and\ Insert ¥Ö¥í¥Ã¥¯/ÁÞÆþ¥â¡¼¥É»þ
+menutrans Always ¾ï»þ
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!
+ \ ÁÞÆþ(½é¿´¼Ô)¥â¡¼¥ÉÀÚÂØ(&M)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!
+ \ Vi¸ß´¹¥â¡¼¥ÉÀÚÂØ(&O)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. ¸¡º÷¥Ñ¥¹(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. ¥¿¥°¥Õ¥¡¥¤¥ë(&G)\.\.\.
+"
+" GUI options
+menutrans Toggle\ &Toolbar ¥Ä¡¼¥ë¥Ð¡¼É½¼¨ÀÚÂØ(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ¥¹¥¯¥í¡¼¥ë¥Ð¡¼(²¼)ɽ¼¨ÀÚÂØ(&B)
+menutrans Toggle\ &Left\ Scrollbar ¥¹¥¯¥í¡¼¥ë¥Ð¡¼(º¸)ɽ¼¨ÀÚÂØ(&L)
+menutrans Toggle\ &Right\ Scrollbar ¥¹¥¯¥í¡¼¥ë¥Ð¡¼(±¦)ɽ¼¨ÀÚÂØ(&R)
+
+let g:menutrans_path_dialog = "¥Õ¥¡¥¤¥ë¤Î¸¡º÷¥Ñ¥¹¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n¥Ç¥£¥ì¥¯¥È¥ê̾¤Ï¥«¥ó¥Þ ( , ) ¤Ç¶èÀڤäƤ¯¤À¤µ¤¤."
+let g:menutrans_tags_dialog = "¥¿¥°¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n̾Á°¤Ï¥«¥ó¥Þ ( , ) ¤Ç¶èÀڤäƤ¯¤À¤µ¤¤."
+
+" Edit/File Settings
+
+" Boolean options
+menutrans F&ile\ Settings ¥Õ¥¡¥¤¥ëÀßÄê(&I)
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ \ ¹ÔÈÖ¹æɽ¼¨ÀÚÂØ(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ \ ¥ê¥¹¥È¥â¡¼¥ÉÀÚÂØ(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+ \ ¹ÔÀÞÊÖ¤·ÀÚÂØ(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!
+ \ ñ¸ìÀÞÊÖ¤·ÀÚÂØ(&R)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!
+ \ ¥¿¥ÖŸ³«ÀÚÂØ(&E)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!
+ \ ¼«Æ°»ú²¼¤²ÀÚÂØ(&A)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!
+ \ C¸À¸ì»ú²¼¤²ÀÚÂØ(&C)<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth ¥·¥Õ¥ÈÉý(&S)
+menutrans Soft\ &Tabstop ¥½¥Õ¥È¥¦¥§¥¢¥¿¥ÖÉý(&T)
+menutrans Te&xt\ Width\.\.\. ¥Æ¥­¥¹¥ÈÉý(&X)\.\.\.
+menutrans &File\ Format\.\.\. ²þ¹Ôµ­¹æÁªÂò(&F)\.\.\.
+
+let g:menutrans_textwidth_dialog = "¥Æ¥­¥¹¥È¤ÎÉý('textwidth')¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤ (0¤ÇÀ°·Á¤ò̵¸ú²½):"
+let g:menutrans_fileformat_dialog = "¥Õ¥¡¥¤¥ë½ÐÎϤκݤβþ¹Ôµ­¹æ¤Î·Á¼°¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤."
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n¥­¥ã¥ó¥»¥ë(&C)"
+
+menutrans C&olor\ Scheme ¿§¥Æ¡¼¥ÞÁªÂò(&O)
+menutrans &Keymap ¥­¡¼¥Þ¥Ã¥×(&K)
+menutrans None ¤Ê¤·
+
+" Programming menu
+menutrans &Tools ¥Ä¡¼¥ë(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ¥¿¥°¥¸¥ã¥ó¥×(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T Ìá¤ë(&B)<Tab>^T
+menutrans Build\ &Tags\ File ¥¿¥°¥Õ¥¡¥¤¥ëºîÀ®(&T)
+menutrans &Make<Tab>:make ¥á¥¤¥¯(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl ¥¨¥é¡¼¥ê¥¹¥È(&L)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ¥á¥Ã¥»¡¼¥¸¥ê¥¹¥È(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ¼¡¤Î¥¨¥é¡¼¤Ø(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Á°¤Î¥¨¥é¡¼¤Ø(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold ¸Å¤¤¥ê¥¹¥È(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew ¿·¤·¤¤¥ê¥¹¥È(&E)<Tab>:cnew
+menutrans Error\ &Window ¥¨¥é¡¼¥¦¥£¥ó¥É¥¦(&W)
+menutrans &Update<Tab>:cwin ¹¹¿·(&U)<Tab>:cwin
+menutrans &Open<Tab>:copen ³«¤¯(&O)<Tab>:copen
+menutrans &Close<Tab>:cclose ÊĤ¸¤ë(&C)<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd HEX¤ØÊÑ´¹(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r HEX¤«¤éµÕÊÑ´¹(&R)<Tab>%!xxd\ -r
+menutrans &Set\ Compiler ¥³¥ó¥Ñ¥¤¥éÀßÄê(&S)
+
+" Tools.Fold Menu
+menutrans &Folding ÀÞ¾ö¤ß(&F)
+" open close folds
+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 &Open\ all\ folds<Tab>zR Á´ÀÞ¾ö¤ß¤ò³«¤¯(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod ÀÞ¾ö¤ßÊýË¡(&H)
+menutrans M&anual ¼êÆ°(&A)
+menutrans I&ndent ¥¤¥ó¥Ç¥ó¥È(&N)
+menutrans E&xpression ¼°É¾²Á(&X)
+menutrans S&yntax ¥·¥ó¥¿¥Ã¥¯¥¹(&Y)
+menutrans &Diff º¹Ê¬(&D)
+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
+" moving around in folds
+menutrans Fold\ col&umn\ width ÀÞ¾ö¤ß¥«¥é¥àÉý(&U)
+
+menutrans &Update ¹¹¿·(&U)
+menutrans &Get\ Block ¥Ö¥í¥Ã¥¯Ãê½Ð(&G)
+menutrans &Put\ Block ¥Ö¥í¥Ã¥¯Å¬ÍÑ(&P)
+
+" Names for buffer menu.
+menutrans &Buffers ¥Ð¥Ã¥Õ¥¡(&B)
+menutrans &Refresh\ menu ¥á¥Ë¥å¡¼ºÆÆɹþ(&R)
+menutrans &Delete ºï½ü(&D)
+menutrans &Alternate ΢¤ØÀÚÂØ(&A)
+menutrans &Next ¼¡¤Î¥Ð¥Ã¥Õ¥¡(&N)
+menutrans &Previous Á°¤Î¥Ð¥Ã¥Õ¥¡(&P)
+menutrans [No\ File] [̵Âê]
+let g:menutrans_no_file = "[̵Âê]"
+
+" Window menu
+menutrans &Window ¥¦¥£¥ó¥É¥¦(&W)
+menutrans &New<Tab>^Wn ¿·µ¬ºîÀ®(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws ʬ³ä(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ΢¥Ð¥Ã¥Õ¥¡¤Øʬ³ä(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ¿âľʬ³ä(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer ¥Õ¥¡¥¤¥ë¥¨¥¯¥¹¥×¥í¡¼¥é(&X)
+menutrans &Close<Tab>^Wc ÊĤ¸¤ë(&C)<Tab>^Wc
+menutrans Move\ &To °ÜÆ°(&T)
+menutrans &Top<Tab>^WK ¾å(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ ²¼(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH º¸(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL ±¦(&R)<Tab>^WL
+menutrans Close\ &Other(s)<Tab>^Wo ¾¤òÊĤ¸¤ë(&O)<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww ¼¡¤Ø(&X)<Tab>^Ww
+menutrans P&revious<Tab>^WW Á°¤Ø(&R)<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= Ʊ¤¸¹â¤µ¤Ë(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ºÇÂç¹â¤Ë(&M)<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ ºÇ¾®¹â¤Ë(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| ºÇÂçÉý¤Ë(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| ºÇ¾®Éý¤Ë(&H)<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR ¾å¤Ë¥í¡¼¥Æ¡¼¥·¥ç¥ó(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ²¼¤Ë¥í¡¼¥Æ¡¼¥·¥ç¥ó(&D)<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. ¥Õ¥©¥ó¥ÈÀßÄê(&N)\.\.\.
+
+" The popup menu
+menutrans &Undo ¼è¤ê¾Ã¤¹(&U)
+menutrans Cu&t ÀÚ¤ê¼è¤ê(&T)
+menutrans &Copy ¥³¥Ô¡¼(&C)
+menutrans &Paste Ž¤êÉÕ¤±(&P)
+menutrans &Delete ºï½ü(&D)
+menutrans Select\ Blockwise ¶ë·Á¥Ö¥í¥Ã¥¯ÁªÂò
+menutrans Select\ &Word ñ¸ìÁªÂò(&W)
+menutrans Select\ &Line ¹ÔÁªÂò(&L)
+menutrans Select\ &Block ¥Ö¥í¥Ã¥¯ÁªÂò(&B)
+menutrans Select\ &All ¤¹¤Ù¤ÆÁªÂò(&A)
+
+" The GUI toolbar (for Win32 or GTK)
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ¥Õ¥¡¥¤¥ë¤ò³«¤¯
+ tmenu ToolBar.Save ¸½ºß¤Î¥Õ¥¡¥¤¥ë¤òÊݸ
+ tmenu ToolBar.SaveAll ¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë¤òÊݸ
+ tmenu ToolBar.Print °õºþ
+ tmenu ToolBar.Undo ¼è¤ê¾Ã¤·
+ tmenu ToolBar.Redo ¤â¤¦°ìÅÙ¤ä¤ë
+ tmenu ToolBar.Cut ¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤ØÀÚ¤ê¼è¤ê
+ tmenu ToolBar.Copy ¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤Ø¥³¥Ô¡¼
+ tmenu ToolBar.Paste ¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤éŽ¤êÉÕ¤±
+ tmenu ToolBar.Find ¸¡º÷...
+ tmenu ToolBar.FindNext ¼¡¤ò¸¡º÷
+ tmenu ToolBar.FindPrev Á°¤ò¸¡º÷
+ tmenu ToolBar.Replace ÃÖ´¹...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New ¿·µ¬¥¦¥£¥ó¥É¥¦ºîÀ®
+ tmenu ToolBar.WinSplit ¥¦¥£¥ó¥É¥¦Ê¬³ä
+ tmenu ToolBar.WinMax ¥¦¥£¥ó¥É¥¦ºÇÂç²½
+ tmenu ToolBar.WinMin ¥¦¥£¥ó¥É¥¦ºÇ¾®²½
+ tmenu ToolBar.WinClose ¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë
+ endif
+ tmenu ToolBar.LoadSesn ¥»¥Ã¥·¥ç¥óÆɹþ
+ tmenu ToolBar.SaveSesn ¥»¥Ã¥·¥ç¥óÊݸ
+ tmenu ToolBar.RunScript Vim¥¹¥¯¥ê¥×¥È¼Â¹Ô
+ tmenu ToolBar.Make ¥×¥í¥¸¥§¥¯¥È¤òMake
+ tmenu ToolBar.Shell ¥·¥§¥ë¤ò³«¤¯
+ tmenu ToolBar.RunCtags tagsºîÀ®
+ tmenu ToolBar.TagJump ¥¿¥°¥¸¥ã¥ó¥×
+ tmenu ToolBar.Help Vim¥Ø¥ë¥×
+ tmenu ToolBar.FindHelp Vim¥Ø¥ë¥×¸¡º÷
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax ¥·¥ó¥¿¥Ã¥¯¥¹(&S)
+menutrans &Show\ filetypes\ in\ menu Âбþ·Á¼°¤ò¥á¥Ë¥å¡¼¤Ëɽ¼¨(&S)
+menutrans Set\ '&syntax'\ only 'syntax'¤À¤±ÀßÄê(&S)
+menutrans Set\ '&filetype'\ too 'filetype'¤âÀßÄê(&F)
+menutrans &Off ̵¸ú²½(&O)
+menutrans &Manual ¼êÆ°ÀßÄê(&M)
+menutrans A&utomatic ¼«Æ°ÀßÄê(&U)
+menutrans on/off\ for\ &This\ file
+ \ ¥ª¥ó/¥ª¥ÕÀÚÂØ(&T)
+menutrans Co&lor\ test ¥«¥é¡¼¥Æ¥¹¥È(&L)
+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 ¥Õ¥¡¥¤¥ë(&F).-SEPICONV- <Nop>
+ an 10.396.100.100 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.100.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+ an 10.396.100.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.100.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+ an 10.396.100.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&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 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+
+ " ºÆÆɹþ
+ an 10.396.110.100 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.110.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+ an 10.396.110.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.110.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+ an 10.396.110.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+ endif
+ an 10.396.110.130 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+
+ " Êݸ
+ an 10.396.115 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..-SEP1- <Nop>
+ an 10.396.120.100 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+ if !support_jisx0213
+ an 10.396.120.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+ an 10.396.120.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+ else
+ an 10.396.120.110 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+ an 10.396.120.120 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+ endif
+ an 10.396.120.130 ¥Õ¥¡¥¤¥ë(&F).¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êݸ(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+endif
diff --git a/runtime/lang/menu_ja_jp.eucjp.vim b/runtime/lang/menu_ja_jp.eucjp.vim
new file mode 100644
index 000000000..0861315eb
--- /dev/null
+++ b/runtime/lang/menu_ja_jp.eucjp.vim
@@ -0,0 +1,6 @@
+" Menu Translations: Japanese (for UNIX)
+" Translated By: Muraoka Taro <koron@tka.att.ne.jp>
+" Last Change: 08:50:47 25-Mar-2001.
+
+" eucjp is the same as euc-jp. Source the other one from here.
+source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff --git a/runtime/lang/menu_ja_jp.ujis.vim b/runtime/lang/menu_ja_jp.ujis.vim
new file mode 100644
index 000000000..49248fc74
--- /dev/null
+++ b/runtime/lang/menu_ja_jp.ujis.vim
@@ -0,0 +1,6 @@
+" Menu Translations: Japanese (for UNIX)
+" Translated By: Muraoka Taro <koron@tka.att.ne.jp>
+" Last Change: 08:50:47 25-Mar-2001.
+
+" ujis is the same as euc-jp. Source the other one from here.
+source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff --git a/runtime/lang/menu_ja_jp.utf-8.vim b/runtime/lang/menu_ja_jp.utf-8.vim
new file mode 100644
index 000000000..7b7f8bfeb
--- /dev/null
+++ b/runtime/lang/menu_ja_jp.utf-8.vim
@@ -0,0 +1,315 @@
+" 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: 29-Apr-2004.
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help ヘルプ(&H)
+menutrans &Overview<Tab><F1> 概略(&O)<Tab><F1>
+menutrans &User\ Manual ユーザマニュアル(&U)
+menutrans &How-to\ links &How-toリンク
+menutrans &Credits クレジット(&C)
+menutrans Co&pying 著作権情報(&P)
+menutrans &Sponsor/Register スãƒãƒ³ã‚µãƒ¼/登録(&S)
+menutrans O&rphans å­¤å…(&R)
+menutrans &Version ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±(&V)
+menutrans &About Vimã«ã¤ã„ã¦(&A)
+
+let g:menutrans_help_dialog = "ヘルプを検索ã—ãŸã„コマンドもã—ãã¯å˜èªžã‚’入力ã—ã¦ãã ã•ã„:\n\n挿入モードã®ã‚³ãƒžãƒ³ãƒ‰ã«ã¯ i_ を先頭ã«ä»˜åŠ ã—ã¾ã™. (例: i_CTRL-X)\nコマンドライン編集コマンドã«ã¯ c_ を先頭ã«ä»˜åŠ ã—ã¾ã™. (例: c_<Del>)\nオプションã®åå‰ã«ã¯ ' を付加ã—ã¾ã™. (例: 'shiftwidth')"
+
+" File menu
+menutrans &File ファイル(&F)
+menutrans &Open\.\.\.<Tab>:e é–‹ã(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp 分割ã—ã¦é–‹ã(&L)\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew æ–°è¦ä½œæˆ(&N)<Tab>:enew
+menutrans &Close<Tab>:close é–‰ã˜ã‚‹(&C)<Tab>:close
+menutrans &Save<Tab>:w ä¿å­˜(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav åå‰ã‚’付ã‘ã¦ä¿å­˜(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. 差分表示(&D)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. パッãƒçµæžœã‚’表示(&B)\.\.\.
+menutrans &Print å°åˆ·(&P)
+menutrans Sa&ve-Exit<Tab>:wqa ä¿å­˜ã—ã¦çµ‚了(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa 終了(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit 編集(&E)
+menutrans &Undo<Tab>u å–り消ã™(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP 貼り付ã‘(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p å‰ã«è²¼ã‚‹(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p 後ã«è²¼ã‚‹(&A)<Tab>]p
+menutrans &Delete<Tab>x 消ã™(&D)<Tab>x
+menutrans &Select\ All<Tab>ggVG å…¨ã¦é¸æŠž(&S)<Tab>ggvG
+menutrans &Find\.\.\. 検索(&F)\.\.\.
+menutrans &Find<Tab>/ 検索(&F)<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. ç½®æ›(&L)\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s ç½®æ›(&L)<Tab>:%s
+menutrans Find\ and\ Rep&lace<Tab>:s ç½®æ›(&L)<Tab>:s
+"menutrans Options\.\.\. オプション(&O)\.\.\.
+menutrans Settings\ &Window 設定ウィンドウ(&W)
+
+" Edit/Global Settings
+menutrans &Global\ Settings 全体設定(&G)
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!
+ \ パターン強調切替(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!
+ \ 大å°æ–‡å­—区別切替(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!
+ \ マッãƒè¡¨ç¤ºåˆ‡æ›¿(&S)<Tab>:set\ sm!
+menutrans &Context\ lines カーソル周辺行数(&C)
+menutrans &Virtual\ Edit 仮想編集(&V)
+menutrans Never 無効
+menutrans Block\ Selection ブロックé¸æŠžæ™‚
+menutrans Insert\ mode 挿入モード時
+menutrans Block\ and\ Insert ブロック/挿入モード時
+menutrans Always 常時
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!
+ \ 挿入(åˆå¿ƒè€…)モード切替(&M)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!
+ \ Vi互æ›ãƒ¢ãƒ¼ãƒ‰åˆ‡æ›¿(&O)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. 検索パス(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. タグファイル(&G)\.\.\.
+"
+" GUI options
+menutrans Toggle\ &Toolbar ツールãƒãƒ¼è¡¨ç¤ºåˆ‡æ›¿(&T)
+menutrans Toggle\ &Bottom\ Scrollbar スクロールãƒãƒ¼(下)表示切替(&B)
+menutrans Toggle\ &Left\ Scrollbar スクロールãƒãƒ¼(å·¦)表示切替(&L)
+menutrans Toggle\ &Right\ Scrollbar スクロールãƒãƒ¼(å³)表示切替(&R)
+
+let g:menutrans_path_dialog = "ファイルã®æ¤œç´¢ãƒ‘スを入力ã—ã¦ãã ã•ã„:\nディレクトリåã¯ã‚«ãƒ³ãƒž ( , ) ã§åŒºåˆ‡ã£ã¦ãã ã•ã„."
+let g:menutrans_tags_dialog = "タグファイルã®åå‰ã‚’入力ã—ã¦ãã ã•ã„:\nåå‰ã¯ã‚«ãƒ³ãƒž ( , ) ã§åŒºåˆ‡ã£ã¦ãã ã•ã„."
+
+" Edit/File Settings
+
+" Boolean options
+menutrans F&ile\ Settings ファイル設定(&I)
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ \ 行番å·è¡¨ç¤ºåˆ‡æ›¿(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ \ リストモード切替(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+ \ 行折返ã—切替(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!
+ \ å˜èªžæŠ˜è¿”ã—切替(&R)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!
+ \ タブ展開切替(&E)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!
+ \ 自動字下ã’切替(&A)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!
+ \ C言語字下ã’切替(&C)<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth シフト幅(&S)
+menutrans Soft\ &Tabstop ソフトウェアタブ幅(&T)
+menutrans Te&xt\ Width\.\.\. テキスト幅(&X)\.\.\.
+menutrans &File\ Format\.\.\. 改行記å·é¸æŠž(&F)\.\.\.
+
+let g:menutrans_textwidth_dialog = "テキストã®å¹…('textwidth')を設定ã—ã¦ãã ã•ã„ (0ã§æ•´å½¢ã‚’無効化):"
+let g:menutrans_fileformat_dialog = "ファイル出力ã®éš›ã®æ”¹è¡Œè¨˜å·ã®å½¢å¼ã‚’é¸ã‚“ã§ãã ã•ã„."
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nキャンセル(&C)"
+
+menutrans C&olor\ Scheme 色テーマé¸æŠž(&O)
+menutrans &Keymap キーマップ(&K)
+menutrans None ãªã—
+
+" Programming menu
+menutrans &Tools ツール(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] タグジャンプ(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T 戻る(&B)<Tab>^T
+menutrans Build\ &Tags\ File タグファイル作æˆ(&T)
+menutrans &Make<Tab>:make メイク(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl エラーリスト(&L)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! メッセージリスト(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn 次ã®ã‚¨ãƒ©ãƒ¼ã¸(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp å‰ã®ã‚¨ãƒ©ãƒ¼ã¸(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold å¤ã„リスト(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew æ–°ã—ã„リスト(&E)<Tab>:cnew
+menutrans Error\ &Window エラーウィンドウ(&W)
+menutrans &Update<Tab>:cwin æ›´æ–°(&U)<Tab>:cwin
+menutrans &Open<Tab>:copen é–‹ã(&O)<Tab>:copen
+menutrans &Close<Tab>:cclose é–‰ã˜ã‚‹(&C)<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd HEXã¸å¤‰æ›(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r HEXã‹ã‚‰é€†å¤‰æ›(&R)<Tab>%!xxd\ -r
+menutrans &Set\ Compiler コンパイラ設定(&S)
+
+" Tools.Fold Menu
+menutrans &Folding 折畳ã¿(&F)
+" open close folds
+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 &Open\ all\ folds<Tab>zR 全折畳ã¿ã‚’é–‹ã(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod 折畳ã¿æ–¹æ³•(&H)
+menutrans M&anual 手動(&A)
+menutrans I&ndent インデント(&N)
+menutrans E&xpression å¼è©•ä¾¡(&X)
+menutrans S&yntax シンタックス(&Y)
+menutrans &Diff 差分(&D)
+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
+" moving around in folds
+menutrans Fold\ col&umn\ width 折畳ã¿ã‚«ãƒ©ãƒ å¹…(&U)
+
+menutrans &Update æ›´æ–°(&U)
+menutrans &Get\ Block ブロック抽出(&G)
+menutrans &Put\ Block ブロックé©ç”¨(&P)
+
+" Names for buffer menu.
+menutrans &Buffers ãƒãƒƒãƒ•ã‚¡(&B)
+menutrans &Refresh\ menu メニューå†èª­è¾¼(&R)
+menutrans &Delete 削除(&D)
+menutrans &Alternate è£ã¸åˆ‡æ›¿(&A)
+menutrans &Next 次ã®ãƒãƒƒãƒ•ã‚¡(&N)
+menutrans &Previous å‰ã®ãƒãƒƒãƒ•ã‚¡(&P)
+menutrans [No\ File] [無題]
+let g:menutrans_no_file = "[無題]"
+
+" Window menu
+menutrans &Window ウィンドウ(&W)
+menutrans &New<Tab>^Wn æ–°è¦ä½œæˆ(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws 分割(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ è£ãƒãƒƒãƒ•ã‚¡ã¸åˆ†å‰²(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv 垂直分割(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer ファイルエクスプローラ(&X)
+menutrans &Close<Tab>^Wc é–‰ã˜ã‚‹(&C)<Tab>^Wc
+menutrans Move\ &To 移動(&T)
+menutrans &Top<Tab>^WK 上(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ 下(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH å·¦(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL å³(&R)<Tab>^WL
+menutrans Close\ &Other(s)<Tab>^Wo ä»–ã‚’é–‰ã˜ã‚‹(&O)<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww 次ã¸(&X)<Tab>^Ww
+menutrans P&revious<Tab>^WW å‰ã¸(&R)<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= åŒã˜é«˜ã•ã«(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ 最大高ã«(&M)<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ 最å°é«˜ã«(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| 最大幅ã«(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| 最å°å¹…ã«(&H)<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR 上ã«ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr 下ã«ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³(&D)<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. フォント設定(&N)\.\.\.
+
+" The popup menu
+menutrans &Undo å–り消ã™(&U)
+menutrans Cu&t 切りå–ã‚Š(&T)
+menutrans &Copy コピー(&C)
+menutrans &Paste 貼り付ã‘(&P)
+menutrans &Delete 削除(&D)
+menutrans Select\ Blockwise 矩形ブロックé¸æŠž
+menutrans Select\ &Word å˜èªžé¸æŠž(&W)
+menutrans Select\ &Line è¡Œé¸æŠž(&L)
+menutrans Select\ &Block ブロックé¸æŠž(&B)
+menutrans Select\ &All ã™ã¹ã¦é¸æŠž(&A)
+
+" The GUI toolbar (for Win32 or GTK)
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ファイルを開ã
+ tmenu ToolBar.Save ç¾åœ¨ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜
+ tmenu ToolBar.SaveAll ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜
+ tmenu ToolBar.Print å°åˆ·
+ tmenu ToolBar.Undo å–り消ã—
+ tmenu ToolBar.Redo ã‚‚ã†ä¸€åº¦ã‚„ã‚‹
+ tmenu ToolBar.Cut クリップボードã¸åˆ‡ã‚Šå–ã‚Š
+ tmenu ToolBar.Copy クリップボードã¸ã‚³ãƒ”ー
+ tmenu ToolBar.Paste クリップボードã‹ã‚‰è²¼ã‚Šä»˜ã‘
+ tmenu ToolBar.Find 検索...
+ tmenu ToolBar.FindNext 次を検索
+ tmenu ToolBar.FindPrev å‰ã‚’検索
+ tmenu ToolBar.Replace ç½®æ›...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New æ–°è¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ä½œæˆ
+ tmenu ToolBar.WinSplit ウィンドウ分割
+ tmenu ToolBar.WinMax ウィンドウ最大化
+ tmenu ToolBar.WinMin ウィンドウ最å°åŒ–
+ tmenu ToolBar.WinClose ウィンドウを閉ã˜ã‚‹
+ endif
+ tmenu ToolBar.LoadSesn セッション読込
+ tmenu ToolBar.SaveSesn セッションä¿å­˜
+ tmenu ToolBar.RunScript Vimスクリプト実行
+ tmenu ToolBar.Make プロジェクトをMake
+ tmenu ToolBar.Shell シェルを開ã
+ tmenu ToolBar.RunCtags tags作æˆ
+ tmenu ToolBar.TagJump タグジャンプ
+ tmenu ToolBar.Help Vimヘルプ
+ tmenu ToolBar.FindHelp Vimヘルプ検索
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax シンタックス(&S)
+menutrans &Show\ filetypes\ in\ menu 対応形å¼ã‚’メニューã«è¡¨ç¤º(&S)
+menutrans Set\ '&syntax'\ only 'syntax'ã ã‘設定(&S)
+menutrans Set\ '&filetype'\ too 'filetype'も設定(&F)
+menutrans &Off 無効化(&O)
+menutrans &Manual 手動設定(&M)
+menutrans A&utomatic 自動設定(&U)
+menutrans on/off\ for\ &This\ file
+ \ オン/オフ切替(&T)
+menutrans Co&lor\ test カラーテスト(&L)
+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 ファイル(&F).-SEPICONV- <Nop>
+ an 10.396.100.100 ファイル(&F).エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.100.110 ファイル(&F).エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+ an 10.396.100.120 ファイル(&F).エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.100.110 ファイル(&F).エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+ an 10.396.100.120 ファイル(&F).エンコード指定(&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 ファイル(&F).エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+
+ " å†èª­è¾¼
+ an 10.396.110.100 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.110.110 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+ an 10.396.110.120 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.110.110 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+ an 10.396.110.120 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+ endif
+ an 10.396.110.130 ファイル(&F).エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+
+ " ä¿å­˜
+ an 10.396.115 ファイル(&F).エンコード指定(&E)\.\.\..-SEP1- <Nop>
+ an 10.396.120.100 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+ if !support_jisx0213
+ an 10.396.120.110 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+ an 10.396.120.120 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+ else
+ an 10.396.120.110 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+ an 10.396.120.120 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+ endif
+ an 10.396.120.130 ファイル(&F).エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+endif
diff --git a/runtime/lang/menu_japanese_japan.932.vim b/runtime/lang/menu_japanese_japan.932.vim
new file mode 100644
index 000000000..3fa21b6a5
--- /dev/null
+++ b/runtime/lang/menu_japanese_japan.932.vim
@@ -0,0 +1,315 @@
+" 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: 29-Apr-2004.
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp932
+
+" Help menu
+menutrans &Help ƒwƒ‹ƒv(&H)
+menutrans &Overview<Tab><F1> ŠT—ª(&O)<Tab><F1>
+menutrans &User\ Manual ƒ†[ƒUƒ}ƒjƒ…ƒAƒ‹(&U)
+menutrans &How-to\ links &How-toƒŠƒ“ƒN
+menutrans &Credits ƒNƒŒƒWƒbƒg(&C)
+menutrans Co&pying ’˜ìŒ î•ñ(&P)
+menutrans &Sponsor/Register ƒXƒ|ƒ“ƒT[/“o˜^(&S)
+menutrans O&rphans ŒÇŽ™(&R)
+menutrans &Version ƒo[ƒWƒ‡ƒ“î•ñ(&V)
+menutrans &About Vim‚ɂ‚¢‚Ä(&A)
+
+let g:menutrans_help_dialog = "ƒwƒ‹ƒv‚ðŒŸõ‚µ‚½‚¢ƒRƒ}ƒ“ƒh‚à‚µ‚­‚Í’PŒê‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢:\n\n‘}“üƒ‚[ƒh‚̃Rƒ}ƒ“ƒh‚É‚Í i_ ‚ð擪‚É•t‰Á‚µ‚Ü‚·. (—á: i_CTRL-X)\nƒRƒ}ƒ“ƒhƒ‰ƒCƒ“•ÒWƒRƒ}ƒ“ƒh‚É‚Í c_ ‚ð擪‚É•t‰Á‚µ‚Ü‚·. (—á: c_<Del>)\nƒIƒvƒVƒ‡ƒ“‚Ì–¼‘O‚É‚Í ' ‚ð•t‰Á‚µ‚Ü‚·. (—á: 'shiftwidth')"
+
+" File menu
+menutrans &File ƒtƒ@ƒCƒ‹(&F)
+menutrans &Open\.\.\.<Tab>:e ŠJ‚­(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp •ªŠ„‚µ‚ÄŠJ‚­(&L)\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew V‹Kì¬(&N)<Tab>:enew
+menutrans &Close<Tab>:close •Â‚¶‚é(&C)<Tab>:close
+menutrans &Save<Tab>:w •Û‘¶(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav –¼‘O‚ð•t‚¯‚Ä•Û‘¶(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. ·•ª•\Ž¦(&D)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. ƒpƒbƒ`Œ‹‰Ê‚ð•\Ž¦(&B)\.\.\.
+menutrans &Print ˆóü(&P)
+menutrans Sa&ve-Exit<Tab>:wqa •Û‘¶‚µ‚ÄI—¹(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa I—¹(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit •ÒW(&E)
+menutrans &Undo<Tab>u Žæ‚èÁ‚·(&U)<Tab>u
+menutrans &Redo<Tab>^R ‚à‚¤ˆê“x‚â‚é(&R)<Tab>^R
+menutrans Rep&eat<Tab>\. ŒJ‚è•Ô‚·(&E)<Tab>\.
+menutrans Cu&t<Tab>"+x Ø‚èŽæ‚è(&T)<Tab>"+x
+menutrans &Copy<Tab>"+y ƒRƒs[(&C)<Tab>"+y
+menutrans &Paste<Tab>"+gP “\‚è•t‚¯(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ‘O‚É“\‚é(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p Œã‚É“\‚é(&A)<Tab>]p
+menutrans &Delete<Tab>x Á‚·(&D)<Tab>x
+menutrans &Select\ All<Tab>ggVG ‘S‚Ä‘I‘ð(&S)<Tab>ggvG
+menutrans &Find\.\.\. ŒŸõ(&F)\.\.\.
+menutrans &Find<Tab>/ ŒŸõ(&F)<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. ’uŠ·(&L)\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s ’uŠ·(&L)<Tab>:%s
+menutrans Find\ and\ Rep&lace<Tab>:s ’uŠ·(&L)<Tab>:s
+"menutrans Options\.\.\. ƒIƒvƒVƒ‡ƒ“(&O)\.\.\.
+menutrans Settings\ &Window Ý’èƒEƒBƒ“ƒhƒE(&W)
+
+" Edit/Global Settings
+menutrans &Global\ Settings ‘S‘ÌÝ’è(&G)
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!
+ \ ƒpƒ^[ƒ“‹­’²Ø‘Ö(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!
+ \ ‘嬕¶Žš‹æ•ÊØ‘Ö(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!
+ \ ƒ}ƒbƒ`•\Ž¦Ø‘Ö(&S)<Tab>:set\ sm!
+menutrans &Context\ lines ƒJ[ƒ\ƒ‹Žü•Ós”(&C)
+menutrans &Virtual\ Edit ‰¼‘z•ÒW(&V)
+menutrans Never –³Œø
+menutrans Block\ Selection ƒuƒƒbƒN‘I‘ðŽž
+menutrans Insert\ mode ‘}“üƒ‚[ƒhŽž
+menutrans Block\ and\ Insert ƒuƒƒbƒN/‘}“üƒ‚[ƒhŽž
+menutrans Always 펞
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!
+ \ ‘}“ü(‰SŽÒ)ƒ‚[ƒhØ‘Ö(&M)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!
+ \ ViŒÝŠ·ƒ‚[ƒhØ‘Ö(&O)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. ŒŸõƒpƒX(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. ƒ^ƒOƒtƒ@ƒCƒ‹(&G)\.\.\.
+"
+" GUI options
+menutrans Toggle\ &Toolbar ƒc[ƒ‹ƒo[•\Ž¦Ø‘Ö(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ƒXƒNƒ[ƒ‹ƒo[(‰º)•\Ž¦Ø‘Ö(&B)
+menutrans Toggle\ &Left\ Scrollbar ƒXƒNƒ[ƒ‹ƒo[(¶)•\Ž¦Ø‘Ö(&L)
+menutrans Toggle\ &Right\ Scrollbar ƒXƒNƒ[ƒ‹ƒo[(‰E)•\Ž¦Ø‘Ö(&R)
+
+let g:menutrans_path_dialog = "ƒtƒ@ƒCƒ‹‚ÌŒŸõƒpƒX‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢:\nƒfƒBƒŒƒNƒgƒŠ–¼‚̓Jƒ“ƒ} ( , ) ‚Å‹æØ‚Á‚Ä‚­‚¾‚³‚¢."
+let g:menutrans_tags_dialog = "ƒ^ƒOƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢:\n–¼‘O‚̓Jƒ“ƒ} ( , ) ‚Å‹æØ‚Á‚Ä‚­‚¾‚³‚¢."
+
+" Edit/File Settings
+
+" Boolean options
+menutrans F&ile\ Settings ƒtƒ@ƒCƒ‹Ý’è(&I)
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ \ s”Ô†•\Ž¦Ø‘Ö(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ \ ƒŠƒXƒgƒ‚[ƒhØ‘Ö(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+ \ sÜ•Ô‚µØ‘Ö(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!
+ \ ’PŒêÜ•Ô‚µØ‘Ö(&R)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!
+ \ ƒ^ƒu“WŠJØ‘Ö(&E)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!
+ \ Ž©“®Žš‰º‚°Ø‘Ö(&A)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!
+ \ CŒ¾ŒêŽš‰º‚°Ø‘Ö(&C)<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth ƒVƒtƒg•(&S)
+menutrans Soft\ &Tabstop ƒ\ƒtƒgƒEƒFƒAƒ^ƒu•(&T)
+menutrans Te&xt\ Width\.\.\. ƒeƒLƒXƒg•(&X)\.\.\.
+menutrans &File\ Format\.\.\. ‰üs‹L†‘I‘ð(&F)\.\.\.
+
+let g:menutrans_textwidth_dialog = "ƒeƒLƒXƒg‚Ì•('textwidth')‚ðݒ肵‚Ä‚­‚¾‚³‚¢ (0‚Å®Œ`‚𖳌ø‰»):"
+let g:menutrans_fileformat_dialog = "ƒtƒ@ƒCƒ‹o—Í‚Ìۂ̉üs‹L†‚ÌŒ`Ž®‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢."
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nƒLƒƒƒ“ƒZƒ‹(&C)"
+
+menutrans C&olor\ Scheme Fƒe[ƒ}‘I‘ð(&O)
+menutrans &Keymap ƒL[ƒ}ƒbƒv(&K)
+menutrans None ‚È‚µ
+
+" Programming menu
+menutrans &Tools ƒc[ƒ‹(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ƒ^ƒOƒWƒƒƒ“ƒv(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T –ß‚é(&B)<Tab>^T
+menutrans Build\ &Tags\ File ƒ^ƒOƒtƒ@ƒCƒ‹ì¬(&T)
+menutrans &Make<Tab>:make ƒƒCƒN(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl ƒGƒ‰[ƒŠƒXƒg(&L)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ƒƒbƒZ[ƒWƒŠƒXƒg(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ŽŸ‚̃Gƒ‰[‚Ö(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ‘O‚̃Gƒ‰[‚Ö(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold ŒÃ‚¢ƒŠƒXƒg(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew V‚µ‚¢ƒŠƒXƒg(&E)<Tab>:cnew
+menutrans Error\ &Window ƒGƒ‰[ƒEƒBƒ“ƒhƒE(&W)
+menutrans &Update<Tab>:cwin XV(&U)<Tab>:cwin
+menutrans &Open<Tab>:copen ŠJ‚­(&O)<Tab>:copen
+menutrans &Close<Tab>:cclose •Â‚¶‚é(&C)<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd HEX‚Ö•ÏŠ·(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r HEX‚©‚ç‹t•ÏŠ·(&R)<Tab>%!xxd\ -r
+menutrans &Set\ Compiler ƒRƒ“ƒpƒCƒ‰Ý’è(&S)
+
+" Tools.Fold Menu
+menutrans &Folding Üô‚Ý(&F)
+" open close folds
+menutrans &Enable/Disable\ folds<Tab>zi —LŒø/–³ŒøØ‘Ö(&E)<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv ƒJ[ƒ\ƒ‹s‚ð•\Ž¦(&V)<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ƒJ[ƒ\ƒ‹s‚¾‚¯‚ð•\Ž¦(&W)<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Üô‚Ý‚ð•Â‚¶‚é(&L)<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM ‘SÜô‚Ý‚ð•Â‚¶‚é(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Üô‚Ý‚ðŠJ‚­(&P)<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR ‘SÜô‚Ý‚ðŠJ‚­(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod Üô‚Ý•û–@(&H)
+menutrans M&anual Žè“®(&A)
+menutrans I&ndent ƒCƒ“ƒfƒ“ƒg(&N)
+menutrans E&xpression Ž®•]‰¿(&X)
+menutrans S&yntax ƒVƒ“ƒ^ƒbƒNƒX(&Y)
+menutrans &Diff ᥻(&D)
+menutrans Ma&rker ƒ}[ƒJ[(&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 ‘SÜô‚Ýíœ(&A)<Tab>zD
+" moving around in folds
+menutrans Fold\ col&umn\ width Üô‚݃Jƒ‰ƒ€•(&U)
+
+menutrans &Update XV(&U)
+menutrans &Get\ Block ƒuƒƒbƒN’Šo(&G)
+menutrans &Put\ Block ƒuƒƒbƒN“K—p(&P)
+
+" Names for buffer menu.
+menutrans &Buffers ƒoƒbƒtƒ@(&B)
+menutrans &Refresh\ menu ƒƒjƒ…[Ä“Çž(&R)
+menutrans &Delete íœ(&D)
+menutrans &Alternate — ‚ÖØ‘Ö(&A)
+menutrans &Next ŽŸ‚̃oƒbƒtƒ@(&N)
+menutrans &Previous ‘O‚̃oƒbƒtƒ@(&P)
+menutrans [No\ File] [–³‘è]
+let g:menutrans_no_file = "[–³‘è]"
+
+" Window menu
+menutrans &Window ƒEƒBƒ“ƒhƒE(&W)
+menutrans &New<Tab>^Wn V‹Kì¬(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws •ªŠ„(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ — ƒoƒbƒtƒ@‚Ö•ªŠ„(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ‚’¼•ªŠ„(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer ƒtƒ@ƒCƒ‹ƒGƒNƒXƒvƒ[ƒ‰(&X)
+menutrans &Close<Tab>^Wc •Â‚¶‚é(&C)<Tab>^Wc
+menutrans Move\ &To ˆÚ“®(&T)
+menutrans &Top<Tab>^WK ã(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ ‰º(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH ¶(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL ‰E(&R)<Tab>^WL
+menutrans Close\ &Other(s)<Tab>^Wo ‘¼‚ð•Â‚¶‚é(&O)<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww ŽŸ‚Ö(&X)<Tab>^Ww
+menutrans P&revious<Tab>^WW ‘O‚Ö(&R)<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= “¯‚¶‚‚³‚É(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Å‘å‚‚É(&M)<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Ŭ‚‚É(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Å‘å•‚É(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Ŭ•‚É(&H)<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR ã‚Ƀ[ƒe[ƒVƒ‡ƒ“(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ‰º‚Ƀ[ƒe[ƒVƒ‡ƒ“(&D)<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. ƒtƒHƒ“ƒgÝ’è(&N)\.\.\.
+
+" The popup menu
+menutrans &Undo Žæ‚èÁ‚·(&U)
+menutrans Cu&t Ø‚èŽæ‚è(&T)
+menutrans &Copy ƒRƒs[(&C)
+menutrans &Paste “\‚è•t‚¯(&P)
+menutrans &Delete íœ(&D)
+menutrans Select\ Blockwise ‹éŒ`ƒuƒƒbƒN‘I‘ð
+menutrans Select\ &Word ’PŒê‘I‘ð(&W)
+menutrans Select\ &Line s‘I‘ð(&L)
+menutrans Select\ &Block ƒuƒƒbƒN‘I‘ð(&B)
+menutrans Select\ &All ‚·‚ׂđI‘ð(&A)
+
+" The GUI toolbar (for Win32 or GTK)
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ƒtƒ@ƒCƒ‹‚ðŠJ‚­
+ tmenu ToolBar.Save Œ»Ý‚̃tƒ@ƒCƒ‹‚ð•Û‘¶
+ tmenu ToolBar.SaveAll ‚·‚ׂẴtƒ@ƒCƒ‹‚ð•Û‘¶
+ tmenu ToolBar.Print ˆóü
+ tmenu ToolBar.Undo Žæ‚èÁ‚µ
+ tmenu ToolBar.Redo ‚à‚¤ˆê“x‚â‚é
+ tmenu ToolBar.Cut ƒNƒŠƒbƒvƒ{[ƒh‚ÖØ‚èŽæ‚è
+ tmenu ToolBar.Copy ƒNƒŠƒbƒvƒ{[ƒh‚ÖƒRƒs[
+ tmenu ToolBar.Paste ƒNƒŠƒbƒvƒ{[ƒh‚©‚ç“\‚è•t‚¯
+ tmenu ToolBar.Find ŒŸõ...
+ tmenu ToolBar.FindNext ŽŸ‚ðŒŸõ
+ tmenu ToolBar.FindPrev ‘O‚ðŒŸõ
+ tmenu ToolBar.Replace ’uŠ·...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New V‹KƒEƒBƒ“ƒhƒEì¬
+ tmenu ToolBar.WinSplit ƒEƒBƒ“ƒhƒE•ªŠ„
+ tmenu ToolBar.WinMax ƒEƒBƒ“ƒhƒEő剻
+ tmenu ToolBar.WinMin ƒEƒBƒ“ƒhƒEŬ‰»
+ tmenu ToolBar.WinClose ƒEƒBƒ“ƒhƒE‚ð•Â‚¶‚é
+ endif
+ tmenu ToolBar.LoadSesn ƒZƒbƒVƒ‡ƒ““Çž
+ tmenu ToolBar.SaveSesn ƒZƒbƒVƒ‡ƒ“•Û‘¶
+ tmenu ToolBar.RunScript VimƒXƒNƒŠƒvƒgŽÀs
+ tmenu ToolBar.Make ƒvƒƒWƒFƒNƒg‚ðMake
+ tmenu ToolBar.Shell ƒVƒFƒ‹‚ðŠJ‚­
+ tmenu ToolBar.RunCtags tagsì¬
+ tmenu ToolBar.TagJump ƒ^ƒOƒWƒƒƒ“ƒv
+ tmenu ToolBar.Help Vimƒwƒ‹ƒv
+ tmenu ToolBar.FindHelp Vimƒwƒ‹ƒvŒŸõ
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax ƒVƒ“ƒ^ƒbƒNƒX(&S)
+menutrans &Show\ filetypes\ in\ menu ‘ΉžŒ`Ž®‚ðƒƒjƒ…[‚É•\Ž¦(&S)
+menutrans Set\ '&syntax'\ only 'syntax'‚¾‚¯Ý’è(&S)
+menutrans Set\ '&filetype'\ too 'filetype'‚àÝ’è(&F)
+menutrans &Off –³Œø‰»(&O)
+menutrans &Manual Žè“®Ý’è(&M)
+menutrans A&utomatic Ž©“®Ý’è(&U)
+menutrans on/off\ for\ &This\ file
+ \ ƒIƒ“/ƒIƒtØ‘Ö(&T)
+menutrans Co&lor\ test ƒJƒ‰[ƒeƒXƒg(&L)
+menutrans &Highlight\ test ƒnƒCƒ‰ƒCƒgƒeƒXƒg(&H)
+menutrans &Convert\ to\ HTML HTML‚ÖƒRƒ“ƒo[ƒg(&C)
+
+" Japanese specific menu
+" ¬”Û‚ÍiconvŽŸ‘æA•K‚¸‚µ‚àŽw’肵‚½ƒGƒ“ƒR[ƒ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 ƒtƒ@ƒCƒ‹(&F).-SEPICONV- <Nop>
+ an 10.396.100.100 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..ŠJ‚­(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.100.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..ŠJ‚­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+ an 10.396.100.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..ŠJ‚­(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.100.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..ŠJ‚­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+ an 10.396.100.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&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 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..ŠJ‚­(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+
+ " Ä“Çž
+ an 10.396.110.100 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+ if !support_jisx0213
+ an 10.396.110.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+ an 10.396.110.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+ else
+ an 10.396.110.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+ an 10.396.110.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+ endif
+ an 10.396.110.130 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..Ä“Çž(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+
+ " •Û‘¶
+ an 10.396.115 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..-SEP1- <Nop>
+ an 10.396.120.100 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+ if !support_jisx0213
+ an 10.396.120.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+ an 10.396.120.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+ else
+ an 10.396.120.110 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+ an 10.396.120.120 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+ endif
+ an 10.396.120.130 ƒtƒ@ƒCƒ‹(&F).ƒGƒ“ƒR[ƒhŽw’è(&E)\.\.\..•Û‘¶(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+endif
diff --git a/runtime/lang/menu_ko.utf-8.vim b/runtime/lang/menu_ko.utf-8.vim
new file mode 100644
index 000000000..52efddcc3
--- /dev/null
+++ b/runtime/lang/menu_ko.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Korean
+
+source <sfile>:p:h/menu_ko_kr.utf-8.vim
diff --git a/runtime/lang/menu_ko_kr.euckr.vim b/runtime/lang/menu_ko_kr.euckr.vim
new file mode 100644
index 000000000..180a4987e
--- /dev/null
+++ b/runtime/lang/menu_ko_kr.euckr.vim
@@ -0,0 +1,243 @@
+" Menu Translations: Korean
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2003 Apr 25
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding euc-kr
+
+" Help menu
+menutrans &Help µµ¿ò¸»(&H)
+menutrans &Overview<Tab><F1> °³°ü(&O)<Tab><F1>
+menutrans &User\ Manual »ç¿ëÀÚ\ ¸Å´º¾ó(&U)
+menutrans &How-to\ links ¾îÂîÇϳª\ ¸ñ·Ï(&H)
+menutrans &GUI ±¸ÀÌ(&G)
+menutrans &Find\.\.\. ã±â(&F)\.\.\.
+menutrans &Credits °í¸¶¿î\ ºÐ(&C)
+menutrans Co&pying ÀúÀÛ±Ç(&p)
+menutrans O&rphans °í¾Æ(&r)
+menutrans &Version ¹öÀü(&V)
+menutrans &About ÀÌ\ ÇÁ·Î±×·¥Àº(&A)
+
+" File menu
+menutrans &File ÆÄÀÏ(&F)
+menutrans &Open\.\.\.<Tab>:e ¿­±â(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ³ª´²¼­\ ¿­±â(&l)\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew »õ·Î¿î(&N)<Tab>:enew
+menutrans &Close<Tab>:close ´Ý±â(&C)<Tab>:close
+menutrans &Save<Tab>:w ÀúÀå(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav ´Ù¸¥\ À̸§À¸·Î\ ÀúÀå(&A)\.\.\.<Tab>:sav
+"menutrans Split\ &Diff\ with\.\.\. Split\ &Diff\ with\.\.\.
+"menutrans Split\ Patched\ &By\.\.\. Split\ Patched\ &By\.\.\.
+menutrans &Print Àμâ(&P)
+menutrans Sa&ve-Exit<Tab>:wqa ÀúÀåÇÏ°í\ ³¡³»±â(&v)<Tab>:wqa
+menutrans E&xit<Tab>:qa ³¡³»±â(&x)<Tab>:qa
+
+" Edit menu
+menutrans &Edit ÆíÁý(&E)
+menutrans &Undo<Tab>u Ãë¼Ò(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP ºÙÀ̱â(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ¾Õ¿¡\ ºÙÀ̱â(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p µÚ¿¡\ ºÙÀ̱â(&A)<Tab>]p
+menutrans &Delete<Tab>x Áö¿ì±â(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG ¸ðµÎ\ °í¸£±â(&S)<Tab>ggVG
+menutrans &Find\.\.\. ã±â(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ã¾Æ¼­\ ¹Ù²Ù±â(&l)\.\.\.
+menutrans Settings\ &Window ¼³Á¤\ â(&W)
+
+" Edit/Global Settings
+menutrans &Global\ Settings Àü¿ª\ ¼³Á¤(&G)
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! ÆÐÅÏ\ ÇÏÀ̶óÀÌÆ®\ Åä±Û(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! ´ë¼Ò¹®ÀÚ\ ±¸ºÐ\ Åä±Û(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ Åä±Û(&S)<Tab>:set\ sm!
+menutrans &Context\ lines ÄÜÅؽºÆ®\ ÁÙ(&C)
+menutrans &Virtual\ Edit °¡»ó\ ÆíÁý(&V)
+menutrans Never »ç¿ë ¾È ÇÔ
+menutrans Block\ Selection ºí·°\ °í¸£±â
+menutrans Insert\ mode »ðÀÔ\ ¸ðµå
+menutrans Block\ and\ Insert ºí·°°ú\ »ðÀÔ
+menutrans Always Ç×»ó\ »ç¿ë
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! »ðÀÔ\ ¸ðµå\ Åä±Û(&M)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Vi\ ȣȯ\ Åä±Û(&o)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. ã±â\ °æ·Î(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. ²¿¸®Ç¥\ ÆÄÀÏ(&g)\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar µµ±¸¸·´ë\ Åä±Û(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ¹Ù´Ú\ ½ºÅ©·Ñ¹Ù\ Åä±Û(&B)
+menutrans Toggle\ &Left\ Scrollbar ¿ÞÂÊ\ ½ºÅ©·Ñ¹Ù\ Åä±Û(&L)
+menutrans Toggle\ &Right\ Scrollbar ¿À¸¥ÂÊ\ ½ºÅ©·Ñ¹Ù\ Åä±Û(&R)
+
+" Edit/File Settings
+menutrans F&ile\ Settings ÆÄÀÏ\ ¼³Á¤(&i)
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! ÁÙ\ ¹øÈ£ºÙÀ̱â\ Åä±Û(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! ¸ñ·Ï\ ¸ðµå\ Åä±Û(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! ÁÙ\ Wrap\ Åä±Û(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! ³¹¸»¿¡¼­\ Wrap\ Åä±Û(&r)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! ÅÇ\ È®Àå\ Åä±Û(&e)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! ÀÚµ¿Àε§Æ®\ Åä±Û(&a)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-Àε§ÆÃ\ Åä±Û(&C)<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth ½¬ÇÁÆ® ³Êºñ(&S)
+menutrans Soft\ &Tabstop ¼ÒÇÁÆ®\ ÅǽºÅé(&T)
+menutrans Te&xt\ Width\.\.\. ÅؽºÆ®\ ³Êºñ(&x)\.\.\.
+menutrans &File\ Format\.\.\. ÆÄÀÏ\ Çü½Ä(&F)\.\.\.
+menutrans C&olor\ Scheme Ä÷¯\ ½ºÅ´(&o)
+menutrans &Keymap Å°¸Ê(&K)
+
+menutrans Select\ Fo&nt\.\.\. ±Û²Ã\ °í¸£±â(&F)\.\.\.
+
+" Programming menu
+menutrans &Tools µµ±¸(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ÀÌ\ ²¿¸®Ç¥·Î\ °¡±â(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T µÚ·Î\ °¡±â(&b)<Tab>^T
+menutrans Build\ &Tags\ File ²¿¸®Ç¥\ ÆÄÀÏ\ ¸¸µé±â(&T)
+
+" Tools.Fold Menu
+menutrans &Folding Á¢±â(&F)
+" open close folds
+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 &Open\ all\ folds<Tab>zR Á¢Èù\ ºÎºÐ\ ¸ðµÎ\ Æì±â(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod Á¢´Â\ ¹æ¹ý(&h)
+menutrans M&anual ¼öµ¿(&a)
+menutrans I&ndent µé¿©¾²±â(&n)
+menutrans E&xpression Ç¥Çö½Ä(&x)
+menutrans S&yntax ½ÅÅýº(&y)
+"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
+" moving around in folds
+menutrans Fold\ column\ &width Á¢À»\ Ä­\ ³Êºñ(&w)
+
+"menutrans &Diff &Diff
+menutrans &Update °»½Å(&U)
+menutrans &Get\ Block ºí·°\ °¡Á®¿À±â(&G)
+menutrans &Put\ Block ºí·°\ Áý¾î³Ö±â(&P)
+
+menutrans &Make<Tab>:make Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl ¿¡·¯\ ¸ñ·Ï\ º¸±â(&L)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ¸Þ½ÃÁö\ ¸ñ·Ï\ º¸±â(&i)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ´ÙÀ½\ ¿¡·¯(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ÀÌÀü\ ¿¡·¯(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold ¿À·¡µÈ\ ¸ñ·Ï(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew »õ·Î¿î\ ¸ñ·Ï(&e)<Tab>:cnew
+menutrans Error\ &Window ¿¡·¯\ â(&W)
+menutrans &Update<Tab>:cwin °»½Å(&U)<Tab>:cwin
+menutrans &Open<Tab>:copen ¿­±â(&O)<Tab>:copen
+menutrans &Close<Tab>:cclose ´Ý±â(&C)<Tab>:cclose
+menutrans &Set\ Compiler ÄÄÆÄÀÏ·¯\ ¼³Á¤(&S)
+menutrans &Convert\ to\ HEX<Tab>:%!mc\ vim:xxd ½ÊÀ°ÁøÀ¸·Î\ º¯È¯<Tab>:%!mc\ vim:xxd
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ½ÊÀ°ÁøÀ¸·Î\ º¯È¯(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!mc\ vim:xxd\ -r ¿ø·¡´ë·Î\ º¯È¯(&r)<Tab>:%!mc\ vim:xxd\ -r
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ¿ø·¡´ë·Î\ º¯È¯(&r)<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers ¹öÆÛ(&B)
+menutrans &Refresh\ menu Â÷¸²Ç¥\ ´Ù½Ã±×¸®±â(&R)
+menutrans &Delete Áö¿ì±â(&D)
+menutrans &Alternate ±³Ã¼(&A)
+menutrans &Next ´ÙÀ½(&N)
+menutrans &Previous ÀÌÀü(&P)
+
+" Window menu
+menutrans &Window â(&W)
+menutrans &New<Tab>^Wn ț\ ̢(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws ³ª´©±â(&p)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ #À¸·Î\ ³ª´©±â(&l)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ¼¼·Î·Î\ ³ª´©±â(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer ÆÄÀÏ\ ÀͽºÇ÷η¯\ ³ª´©±â
+
+menutrans &Close<Tab>^Wc ´Ý±â(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo ´Ù¸¥\ â\ ´Ý±â(&O)<Tab>^Wo
+
+menutrans Move\ &To À̵¿(&T)
+menutrans &Top<Tab>^WK ²À´ë±â(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ ¹Ù´Ú(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH ¿ÞÂÊ(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL ¿À¸¥ÂÊ(&R)<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR À§·Î\ ȸÀü(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ¾Æ·¡·Î\ ȸÀü(&D)<Tab>^Wr
+
+menutrans &Equal\ Size<Tab>^W= °°Àº\ ³ôÀÌ·Î(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ÃÖ´ë\ ³ôÀÌ·Î(&M)<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ ÃÖ¼Ò\ ³ôÀÌ·Î(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| ÃÖ´ë\ ³ÐÀÌ·Î(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| ÃÖ¼Ò\ ³ÐÀÌ·Î(&h)<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo Ãë¼Ò(&U)
+menutrans Cu&t ÀÚ¸£±â(&t)
+menutrans &Copy º¹»ç(&C)
+menutrans &Paste ºÙÀ̱â(&P)
+menutrans &Delete Áö¿ì±â(&D)
+menutrans Select\ Blockwise »ç°¢Çü\ °í¸£±â
+menutrans Select\ &Word ³¹¸»\ °í¸£±â(&W)
+menutrans Select\ &Line ÁÙ\ °í¸£±â(&L)
+menutrans Select\ &Block ±¸È¹\ °í¸£±â(&B)
+menutrans Select\ &All ¸ðµÎ\ °í¸£±â(&A)
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ÆÄÀÏ ¿­±â
+ tmenu ToolBar.Save ÇöÀç ÆÄÀÏ ÀúÀå
+ tmenu ToolBar.SaveAll ¸ðµÎ ÀúÀå
+ tmenu ToolBar.Print Àμâ
+ tmenu ToolBar.Undo Ãë¼Ò
+ tmenu ToolBar.Redo ´Ù½Ã ½ÇÇà
+ tmenu ToolBar.Cut ÀÚ¸£±â
+ tmenu ToolBar.Copy º¹»ç
+ tmenu ToolBar.Paste ºÙÀ̱â
+ tmenu ToolBar.Find ã±â...
+ tmenu ToolBar.FindNext ´ÙÀ½ ã±â
+ tmenu ToolBar.FindPrev ÀÌÀü ã±â
+ tmenu ToolBar.Replace ¹Ù²Ù±â
+ tmenu ToolBar.LoadSesn ¼¼¼Ç Àоî¿À±â
+ tmenu ToolBar.SaveSesn ¼¼¼Ç ÀúÀå
+ tmenu ToolBar.RunScript ½ºÅ©¸³Æ® ½ÇÇà
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell ½©
+ tmenu ToolBar.RunCtags ²¿¸®Ç¥ ¸¸µé±â
+ tmenu ToolBar.TagJump ²¿¸®Ç¥·Î °¡±â
+ tmenu ToolBar.Help µµ¿ò¸»
+ tmenu ToolBar.FindHelp µµ¿ò¸» ã±â...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax ¹®¹ý(&S)
+menutrans &Show\ individual\ choices ¸ðµç\ ¼±Åð¡´ÉÇÑ\ Ç׸ñ\ º¸±â(&S)
+menutrans Set\ '&syntax'\ only 'syntax'¸¸\ ¼³Á¤(&s)
+menutrans Set\ '&filetype'\ too 'filetype'µµ\ ¼³Á¤(&f)
+menutrans &Off ²ô±â(&O)
+menutrans &Manual ¼öµ¿(&M)
+menutrans A&utomatic ÀÚµ¿(&u)
+menutrans on/off\ for\ &This\ file ÀÌ\ ÆÄÀϸ¸\ Äѱâ/²ô±â(&T)
+
+menutrans Co&lor\ test »ö\ ½ÃÇè(&l)
+menutrans &Highlight\ test Highlight\ ½ÃÇè(&H)
+menutrans &Convert\ to\ HTML HTML·Î\ º¯È¯(&C)
+
diff --git a/runtime/lang/menu_ko_kr.utf-8.vim b/runtime/lang/menu_ko_kr.utf-8.vim
new file mode 100644
index 000000000..e08d9ba93
--- /dev/null
+++ b/runtime/lang/menu_ko_kr.utf-8.vim
@@ -0,0 +1,243 @@
+" Menu Translations: Korean
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2003 Apr 25
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help ë„움ë§(&H)
+menutrans &Overview<Tab><F1> 개관(&O)<Tab><F1>
+menutrans &User\ Manual 사용ìž\ 매뉴얼(&U)
+menutrans &How-to\ links 어찌하나\ 목ë¡(&H)
+menutrans &GUI 구ì´(&G)
+menutrans &Find\.\.\. 찾기(&F)\.\.\.
+menutrans &Credits 고마운\ 분(&C)
+menutrans Co&pying 저작권(&p)
+menutrans O&rphans ê³ ì•„(&r)
+menutrans &Version 버전(&V)
+menutrans &About ì´\ 프로그램ì€(&A)
+
+" File menu
+menutrans &File 파ì¼(&F)
+menutrans &Open\.\.\.<Tab>:e 열기(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp 나눠서\ 열기(&l)\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew 새로운(&N)<Tab>:enew
+menutrans &Close<Tab>:close 닫기(&C)<Tab>:close
+menutrans &Save<Tab>:w 저장(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav 다른\ ì´ë¦„으로\ 저장(&A)\.\.\.<Tab>:sav
+"menutrans Split\ &Diff\ with\.\.\. Split\ &Diff\ with\.\.\.
+"menutrans Split\ Patched\ &By\.\.\. Split\ Patched\ &By\.\.\.
+menutrans &Print ì¸ì‡„(&P)
+menutrans Sa&ve-Exit<Tab>:wqa 저장하고\ ë내기(&v)<Tab>:wqa
+menutrans E&xit<Tab>:qa ë내기(&x)<Tab>:qa
+
+" Edit menu
+menutrans &Edit 편집(&E)
+menutrans &Undo<Tab>u 취소(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP 붙ì´ê¸°(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ì•žì—\ 붙ì´ê¸°(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p ë’¤ì—\ 붙ì´ê¸°(&A)<Tab>]p
+menutrans &Delete<Tab>x 지우기(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG 모ë‘\ 고르기(&S)<Tab>ggVG
+menutrans &Find\.\.\. 찾기(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. 찾아서\ 바꾸기(&l)\.\.\.
+menutrans Settings\ &Window 설정\ 창(&W)
+
+" Edit/Global Settings
+menutrans &Global\ Settings 전역\ 설정(&G)
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! 패턴\ 하ì´ë¼ì´íŠ¸\ 토글(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! 대소문ìž\ 구분\ 토글(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ 토글(&S)<Tab>:set\ sm!
+menutrans &Context\ lines 콘í…스트\ 줄(&C)
+menutrans &Virtual\ Edit ê°€ìƒ\ 편집(&V)
+menutrans Never 사용 안 함
+menutrans Block\ Selection 블럭\ 고르기
+menutrans Insert\ mode 삽입\ 모드
+menutrans Block\ and\ Insert 블럭과\ 삽입
+menutrans Always í•­ìƒ\ 사용
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! 삽입\ 모드\ 토글(&M)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Vi\ 호환\ 토글(&o)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. 찾기\ 경로(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. 꼬리표\ 파ì¼(&g)\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar ë„구막대\ 토글(&T)
+menutrans Toggle\ &Bottom\ Scrollbar 바닥\ 스í¬ë¡¤ë°”\ 토글(&B)
+menutrans Toggle\ &Left\ Scrollbar 왼쪽\ 스í¬ë¡¤ë°”\ 토글(&L)
+menutrans Toggle\ &Right\ Scrollbar 오른쪽\ 스í¬ë¡¤ë°”\ 토글(&R)
+
+" Edit/File Settings
+menutrans F&ile\ Settings 파ì¼\ 설정(&i)
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! 줄\ 번호붙ì´ê¸°\ 토글(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! 목ë¡\ 모드\ 토글(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! 줄\ Wrap\ 토글(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! 낱ë§ì—ì„œ\ Wrap\ 토글(&r)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! 탭\ 확장\ 토글(&e)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! ìžë™ì¸ë´íŠ¸\ 토글(&a)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-ì¸ë´íŒ…\ 토글(&C)<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth 쉬프트 너비(&S)
+menutrans Soft\ &Tabstop 소프트\ 탭스톱(&T)
+menutrans Te&xt\ Width\.\.\. í…스트\ 너비(&x)\.\.\.
+menutrans &File\ Format\.\.\. 파ì¼\ 형ì‹(&F)\.\.\.
+menutrans C&olor\ Scheme 컬러\ 스킴(&o)
+menutrans &Keymap 키맵(&K)
+
+menutrans Select\ Fo&nt\.\.\. 글꼴\ 고르기(&F)\.\.\.
+
+" Programming menu
+menutrans &Tools ë„구(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ì´\ 꼬리표로\ 가기(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T 뒤로\ 가기(&b)<Tab>^T
+menutrans Build\ &Tags\ File 꼬리표\ 파ì¼\ 만들기(&T)
+
+" Tools.Fold Menu
+menutrans &Folding 접기(&F)
+" open close folds
+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 &Open\ all\ folds<Tab>zR 접힌\ 부분\ 모ë‘\ 펴기(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod 접는\ 방법(&h)
+menutrans M&anual 수ë™(&a)
+menutrans I&ndent 들여쓰기(&n)
+menutrans E&xpression 표현ì‹(&x)
+menutrans S&yntax ì‹ íƒìŠ¤(&y)
+"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
+" moving around in folds
+menutrans Fold\ column\ &width ì ‘ì„\ 칸\ 너비(&w)
+
+"menutrans &Diff &Diff
+menutrans &Update 갱신(&U)
+menutrans &Get\ Block 블럭\ 가져오기(&G)
+menutrans &Put\ Block 블럭\ 집어넣기(&P)
+
+menutrans &Make<Tab>:make Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl ì—러\ 목ë¡\ 보기(&L)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! 메시지\ 목ë¡\ 보기(&i)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn 다ìŒ\ ì—러(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ì´ì „\ ì—러(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold 오래ëœ\ 목ë¡(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew 새로운\ 목ë¡(&e)<Tab>:cnew
+menutrans Error\ &Window ì—러\ ì°½(&W)
+menutrans &Update<Tab>:cwin 갱신(&U)<Tab>:cwin
+menutrans &Open<Tab>:copen 열기(&O)<Tab>:copen
+menutrans &Close<Tab>:cclose 닫기(&C)<Tab>:cclose
+menutrans &Set\ Compiler 컴파ì¼ëŸ¬\ 설정(&S)
+menutrans &Convert\ to\ HEX<Tab>:%!mc\ vim:xxd 십육진으로\ 변환<Tab>:%!mc\ vim:xxd
+menutrans &Convert\ to\ HEX<Tab>:%!xxd 십육진으로\ 변환(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!mc\ vim:xxd\ -r ì›ëž˜ëŒ€ë¡œ\ 변환(&r)<Tab>:%!mc\ vim:xxd\ -r
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ì›ëž˜ëŒ€ë¡œ\ 변환(&r)<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers 버í¼(&B)
+menutrans &Refresh\ menu 차림표\ 다시그리기(&R)
+menutrans &Delete 지우기(&D)
+menutrans &Alternate êµì²´(&A)
+menutrans &Next 다ìŒ(&N)
+menutrans &Previous ì´ì „(&P)
+
+" Window menu
+menutrans &Window ì°½(&W)
+menutrans &New<Tab>^Wn 새\ 창(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws 나누기(&p)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ #으로\ 나누기(&l)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv 세로로\ 나누기(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer 파ì¼\ ìµìŠ¤í”Œë¡œëŸ¬\ 나누기
+
+menutrans &Close<Tab>^Wc 닫기(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo 다른\ 창\ 닫기(&O)<Tab>^Wo
+
+menutrans Move\ &To ì´ë™(&T)
+menutrans &Top<Tab>^WK 꼭대기(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ 바닥(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH 왼쪽(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL 오른쪽(&R)<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR 위로\ 회전(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr 아래로\ 회전(&D)<Tab>^Wr
+
+menutrans &Equal\ Size<Tab>^W= ê°™ì€\ 높ì´ë¡œ(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ 최대\ 높ì´ë¡œ(&M)<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ 최소\ 높ì´ë¡œ(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| 최대\ ë„“ì´ë¡œ(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| 최소\ ë„“ì´ë¡œ(&h)<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo 취소(&U)
+menutrans Cu&t ìžë¥´ê¸°(&t)
+menutrans &Copy 복사(&C)
+menutrans &Paste 붙ì´ê¸°(&P)
+menutrans &Delete 지우기(&D)
+menutrans Select\ Blockwise 사ê°í˜•\ 고르기
+menutrans Select\ &Word 낱ë§\ 고르기(&W)
+menutrans Select\ &Line 줄\ 고르기(&L)
+menutrans Select\ &Block 구íš\ 고르기(&B)
+menutrans Select\ &All 모ë‘\ 고르기(&A)
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open íŒŒì¼ ì—´ê¸°
+ tmenu ToolBar.Save 현재 íŒŒì¼ ì €ìž¥
+ tmenu ToolBar.SaveAll ëª¨ë‘ ì €ìž¥
+ tmenu ToolBar.Print ì¸ì‡„
+ tmenu ToolBar.Undo 취소
+ tmenu ToolBar.Redo 다시 실행
+ tmenu ToolBar.Cut ìžë¥´ê¸°
+ tmenu ToolBar.Copy 복사
+ tmenu ToolBar.Paste 붙ì´ê¸°
+ tmenu ToolBar.Find 찾기...
+ tmenu ToolBar.FindNext ë‹¤ìŒ ì°¾ê¸°
+ tmenu ToolBar.FindPrev ì´ì „ 찾기
+ tmenu ToolBar.Replace 바꾸기
+ tmenu ToolBar.LoadSesn 세션 ì½ì–´ì˜¤ê¸°
+ tmenu ToolBar.SaveSesn 세션 저장
+ tmenu ToolBar.RunScript 스í¬ë¦½íŠ¸ 실행
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell 쉘
+ tmenu ToolBar.RunCtags 꼬리표 만들기
+ tmenu ToolBar.TagJump 꼬리표로 가기
+ tmenu ToolBar.Help ë„움ë§
+ tmenu ToolBar.FindHelp ë„ì›€ë§ ì°¾ê¸°...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax 문법(&S)
+menutrans &Show\ individual\ choices 모든\ ì„ íƒê°€ëŠ¥í•œ\ 항목\ 보기(&S)
+menutrans Set\ '&syntax'\ only 'syntax'만\ 설정(&s)
+menutrans Set\ '&filetype'\ too 'filetype'ë„\ 설정(&f)
+menutrans &Off ë„기(&O)
+menutrans &Manual 수ë™(&M)
+menutrans A&utomatic ìžë™(&u)
+menutrans on/off\ for\ &This\ file ì´\ 파ì¼ë§Œ\ 켜기/ë„기(&T)
+
+menutrans Co&lor\ test 색\ 시험(&l)
+menutrans &Highlight\ test Highlight\ 시험(&H)
+menutrans &Convert\ to\ HTML HTML로\ 변환(&C)
+
diff --git a/runtime/lang/menu_ko_kr.vim b/runtime/lang/menu_ko_kr.vim
new file mode 100644
index 000000000..26a959a94
--- /dev/null
+++ b/runtime/lang/menu_ko_kr.vim
@@ -0,0 +1,5 @@
+" Menu Translations: Korean
+" Translated By: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2003 Feb 24
+
+source <sfile>:p:h/menu_ko_kr.euckr.vim
diff --git a/runtime/lang/menu_nl.latin1.vim b/runtime/lang/menu_nl.latin1.vim
new file mode 100644
index 000000000..f10ec44a8
--- /dev/null
+++ b/runtime/lang/menu_nl.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Nederlands
+
+source <sfile>:p:h/menu_nl_nl.latin1.vim
diff --git a/runtime/lang/menu_nl.utf-8.vim b/runtime/lang/menu_nl.utf-8.vim
new file mode 100644
index 000000000..8e87d9607
--- /dev/null
+++ b/runtime/lang/menu_nl.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Nederlands for UTF-8 encoding
+
+source <sfile>:p:h/menu_nl_nl.latin1.vim
diff --git a/runtime/lang/menu_nl_nl.latin1.vim b/runtime/lang/menu_nl_nl.latin1.vim
new file mode 100644
index 000000000..d7f75f2fe
--- /dev/null
+++ b/runtime/lang/menu_nl_nl.latin1.vim
@@ -0,0 +1,240 @@
+" Menu Translations: Nederlands
+" Maintainer: Bram Moolenaar
+" Last Change: 2004 May 05
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252 and
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" Help menu
+menutrans &Help &Help
+menutrans &Overview<Tab><F1> &Overzicht<Tab><F1>
+menutrans &User\ Manual Gebruikershandleiding
+menutrans &How-to\ links &Hoe-doe-ik\ lijst
+"menutrans &GUI &GUI
+menutrans &Credits &Met\ dank\ aan
+menutrans Co&pying &Copyright
+menutrans &Sponsor/Register &Sponsor/Registreer
+menutrans O&rphans &Weeskinderen
+menutrans &Version &Versie
+menutrans &About &Introductiescherm
+
+" File menu
+menutrans &File &Bestand
+menutrans &Open\.\.\.<Tab>:e &Openen\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp In\ nieuw\ &Venster\ openen\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nieuw<Tab>:enew
+menutrans &Close<Tab>:close &Sluiten<Tab>:close
+menutrans &Save<Tab>:w &Bewaren<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Bewaren\ als\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Toon\ diff\ met\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Toon\ gewijzigd\ door\.\.\.
+menutrans &Print Af&drukken
+menutrans Sa&ve-Exit<Tab>:wqa Bewaren\ en\ Afsluiten<Tab>:wqa
+menutrans E&xit<Tab>:qa &Afsluiten<Tab>:qa
+
+" Edit menu
+menutrans &Edit Be&werken
+menutrans &Undo<Tab>u Terug<Tab>u
+menutrans &Redo<Tab>^R Voo&ruit<Tab>^R
+menutrans Rep&eat<Tab>\. &Herhalen<Tab>\.
+menutrans Cu&t<Tab>"+x &Knippen<Tab>"+x
+menutrans &Copy<Tab>"+y K&opiëeren<Tab>"+y
+menutrans &Paste<Tab>"+gP Plakken<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Ervoor\ invoegen<Tab>[p
+menutrans Put\ &After<Tab>]p Erachter\ invoegen<Tab>]p
+menutrans &Select\ all<Tab>ggVG Alles\ &Markeren<Tab>ggVG
+menutrans &Find\.\.\. &Zoeken\.\.\.
+menutrans &Find<Tab>/ &Zoeken<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. Zoeken\ en\ &Vervangen\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Zoeken\ en\ &Vervangen<Tab>:%s
+menutrans Find\ and\ Rep&lace Zoeken\ en\ &Vervangen
+menutrans Find\ and\ Rep&lace<Tab>:s Zoeken\ en\ &Vervangen<Tab>:s
+menutrans Settings\ &Window Optievenster
+menutrans &Global\ Settings Globale\ Opties
+menutrans F&ile\ Settings Bestandopties
+menutrans C&olor\ Scheme Kleurenschema
+menutrans &Keymap Toetsenbordindeling
+
+" Edit.Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Flip\ Patroonkleuring<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Flip\ Negeren\ hoofd/kleine\ letters<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Flip\ Showmatch<Tab>:set\ sm!
+menutrans &Context\ lines Contextregels
+menutrans &Virtual\ Edit Virtueel\ positioneren
+menutrans Never Nooit
+menutrans Block\ Selection Bij\ Blokselectie
+menutrans Insert\ mode In\ Invoegmode
+menutrans Block\ and\ Insert Bij\ Blokselectie\ en\ Invoegmode
+menutrans Always Altijd
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Flip\ Invoegmode<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Flip\ Vi\ Compatibiliteit<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Zoekpad\.\.\.
+menutrans Ta&g\ Files\.\.\. Tag\ Bestanden\.\.\.
+menutrans Toggle\ &Toolbar Toon/verberg\ Knoppenbalk
+menutrans Toggle\ &Bottom\ Scrollbar Toon/verberg\ onderste\ schuifbalk
+menutrans Toggle\ &Left\ Scrollbar Toon/verberg\ linker\ schuifbalk
+menutrans Toggle\ &Right\ Scrollbar Toon/verberg\ rechter\ schuifbalk
+menutrans None Geen
+
+" Edit.File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Flip\ regelnummers<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Flip\ list\ mode<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Flip\ regelafbreken<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Flip\ afbreken\ op\ woordgrens<tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Flip\ tabexpansie<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Flip\ automatisch\ indenteren<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Flip\ C-indenteren<Tab>:set\ cin!
+menutrans Te&xt\ Width\.\.\. Tekstbreedte\.\.\.
+menutrans &File\ Format\.\.\. Bestandsformaat\.\.\.
+
+" Tools menu
+menutrans &Tools &Gereedschap
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Spring\ naar\ Tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T Spring\ &Terug<Tab>^T
+menutrans Build\ &Tags\ File Genereer\ &Tagsbestand
+menutrans &Make<Tab>:make &Make\ uitvoeren<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Foutenlijst<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! &Berichtenlijst<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Volgende\ Fout<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Vorige\ Fout<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Oudere\ Lijst<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Nieuwere\ Lijst<Tab>:cnew
+menutrans Error\ &Window Foutenvenster
+menutrans &Update<Tab>:cwin &Aanpassen<Tab>:cwin
+menutrans &Open<Tab>:copen &Openen<Tab>:copen
+menutrans &Close<Tab>:cclose &Sluiten<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Converteer\ naar\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Converteer\ terug<Tab>:%!xxd\ -r
+menutrans &Set\ Compiler Kies\ Compiler
+
+" Tools.Folding
+menutrans &Enable/Disable\ folds<Tab>zi Flip\ tonen\ folds<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv Toon\ cursorregel<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Toon\ alleen\ cursorregel<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Sluit\ meer\ folds<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Sluit\ alle\ folds<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Open\ meer\ folds<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Open\ alle\ folds<Tab>zR
+menutrans Fold\ Met&hod Foldwijze
+menutrans M&anual Handmatig
+menutrans I&ndent Inspringing
+menutrans E&xpression Expressie
+menutrans S&yntax Syntax
+menutrans &Diff Verschillen
+menutrans Ma&rker Markeringen
+menutrans Create\ &Fold<Tab>zf maak\ Fold<Tab>zf
+menutrans &Delete\ Fold<Tab>zd verwijder\ Fold<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD verwijder\ alle\ Folds<Tab>zD
+menutrans Fold\ column\ &width Fold\ kolom\ breedte
+
+" Tools.Diff
+menutrans &Update Verversen
+menutrans &Get\ Block Blok\ ophalen\ van\ ander\ venster
+menutrans &Put\ Block Blok\ naar\ ander\ venster
+
+" Names for buffer menu.
+menutrans &Buffers &Buffer
+menutrans &Refresh\ menu Ververs\ menu
+menutrans &Delete Wissen
+menutrans &Alternate Vorige
+menutrans &Next Vooruit
+menutrans &Previous Achteruit
+
+" Window menu
+menutrans &Window &Venster
+menutrans &New<Tab>^Wn &Nieuw<Tab>^Wn
+menutrans S&plit<Tab>^Ws Splitsen<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Splits\ naar\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Splits\ &Vertikaal<Tab>^Wv
+menutrans Split\ File\ E&xplorer Splits\ Bestandverkenner
+menutrans &Close<Tab>^Wc &Sluiten<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo &Sluit\ alle\ andere<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww Volgende<Tab>^Ww
+menutrans P&revious<Tab>^WW &Vorige<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Gelijke\ afmetingen<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maximale\ hoogte<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Mi&nimale\ hoogte<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maximale\ breedte<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimale\ breedte<Tab>^W1\|
+menutrans Move\ &To Verplaats\ naar
+menutrans &Top<Tab>^WK Bovenkant<Tab>^WK
+menutrans &Bottom<Tab>^WJ Onderkant<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Linkerkant<Tab>^WH
+menutrans &Right\ side<Tab>^WL Rechterkant<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Roteren\ naar\ &boven<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Roteren\ naar\ &onder<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Selecteer\ font\.\.\.
+
+" The popup menu
+menutrans &Undo &Terug
+menutrans Cu&t Knip
+menutrans &Copy &Kopiëer
+menutrans &Paste &Plak
+menutrans &Delete &Wissen
+menutrans Select\ Blockwise Selecteer\ per\ Rechthoek
+menutrans Select\ &Word Selecteer\ een\ &Woord
+menutrans Select\ &Line Selecteer\ een\ &Regel
+menutrans Select\ &Block Selecteer\ een\ Recht&hoek
+menutrans Select\ &All Selecteer\ &Alles
+
+" The GUI toolbar (for Win32 or GTK)
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Bestand openen
+ tmenu ToolBar.Save Bestand opslaan
+ tmenu ToolBar.SaveAll Alle bestanden opslaan
+ tmenu ToolBar.Print afdrukken
+ tmenu ToolBar.Undo terug
+ tmenu ToolBar.Redo vooruit
+ tmenu ToolBar.Cut knippen
+ tmenu ToolBar.Copy Kopiëren
+ tmenu ToolBar.Paste Plakken
+ tmenu ToolBar.Find Zoeken...
+ tmenu ToolBar.FindNext Zoek volgende
+ tmenu ToolBar.FindPrev Zoek vorige
+ tmenu ToolBar.Replace Zoek en vervang...
+ tmenu ToolBar.LoadSesn Sessie Laden
+ tmenu ToolBar.SaveSesn Sessie opslaan
+ tmenu ToolBar.RunScript Vim script uitvoeren
+ tmenu ToolBar.Make Make uitvoeren
+ tmenu ToolBar.Shell Shell starten
+ tmenu ToolBar.RunCtags Tags bestand genereren
+ tmenu ToolBar.TagJump Spring naar tag
+ tmenu ToolBar.Help Help!
+ tmenu ToolBar.FindHelp Help vinden...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Syntax
+menutrans &Show\ filetypes\ in\ menu Toon\ filetypes\ in\ menu
+menutrans Set\ '&syntax'\ only Alleen\ 'syntax'\ wijzigen
+menutrans Set\ '&filetype'\ too Ook\ 'filetype'\ wijzigen
+menutrans &Off &Uit
+menutrans &Manual &Handmatig
+menutrans A&utomatic A&utomatisch
+menutrans on/off\ for\ &This\ file Aan/Uit\ voor\ dit\ Bestand
+menutrans Co&lor\ test Test\ de\ &Kleuren
+menutrans &Highlight\ test Test\ de\ Markeringen
+menutrans &Convert\ to\ HTML Converteren\ naar\ &HTML
+menutrans &Show\ individual\ choices Toon\ elke\ keuze
+
+" dialog texts
+let menutrans_no_file = "[Geen Bestand]"
+let menutrans_help_dialog = "Typ een commando of woord om help voor te vinden:\n\nVoeg i_ in voor Input mode commandos (bijv. i_CTRL-X)\nVoeg c_ in voor een commando-regel edit commando (bijv. c_<Del>)\nVoeg ' in \voor een optie naam (bijv. 'shiftwidth')"
+let g:menutrans_path_dialog = "Typ het zoekpad voor bestanden.\nGebruik commas tussen de padnamen."
+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"
diff --git a/runtime/lang/menu_nl_nl.utf-8.vim b/runtime/lang/menu_nl_nl.utf-8.vim
new file mode 100644
index 000000000..8e87d9607
--- /dev/null
+++ b/runtime/lang/menu_nl_nl.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Nederlands for UTF-8 encoding
+
+source <sfile>:p:h/menu_nl_nl.latin1.vim
diff --git a/runtime/lang/menu_no.latin1.vim b/runtime/lang/menu_no.latin1.vim
new file mode 100644
index 000000000..fa71aedcd
--- /dev/null
+++ b/runtime/lang/menu_no.latin1.vim
@@ -0,0 +1,4 @@
+" Menu Translations: Norwegian
+" menu_no.latin1.vim 289 2004-05-16 18:00:52Z sunny
+
+source <sfile>:p:h/menu_no_no.latin1.vim
diff --git a/runtime/lang/menu_no.utf-8.vim b/runtime/lang/menu_no.utf-8.vim
new file mode 100644
index 000000000..42ce8681b
--- /dev/null
+++ b/runtime/lang/menu_no.utf-8.vim
@@ -0,0 +1,4 @@
+" Menu Translations: Norwegian for UTF-8 encoding
+" menu_no.utf-8.vim 289 2004-05-16 18:00:52Z sunny
+
+source <sfile>:p:h/menu_no_no.latin1.vim
diff --git a/runtime/lang/menu_no_no.latin1.vim b/runtime/lang/menu_no_no.latin1.vim
new file mode 100644
index 000000000..f27b05c71
--- /dev/null
+++ b/runtime/lang/menu_no_no.latin1.vim
@@ -0,0 +1,233 @@
+" Menu Translations: Norwegian / Norsk (Bokmål)
+" Maintainer: Øyvind A. Holm <sunny@sunbase.org>
+" Last Change: 2004-05-16 20:00:52 +0200
+" menu_no_no.latin1.vim 289 2004-05-16 18:00:52Z sunny
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in ISO-8859-1, but they work for ISO-8859-15 and
+" CP1252 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+menutrans &File &Fil
+ menutrans &Open\.\.\.<Tab>:e &Åpne \.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp Åpne\ i\ nytt\ &vindu \.\.\.<Tab>:sp
+ menutrans &New<Tab>:enew &Ny\ fil<Tab>:enew
+ menutrans &Close<Tab>:close L&ukk<Tab>:close
+ menutrans &Save<Tab>:w &Lagre<Tab>:w
+ menutrans Save\ &As\.\.\.<Tab>:sav Lagre\ s&om \.\.\.<Tab>:sav
+ if has("diff")
+ menutrans Split\ &Diff\ with\.\.\. Sa&mmenlign\ med\ ny\ fil \.\.\.
+ menutrans Split\ Patched\ &By\.\.\. &Patch\ i\ nytt\ vindu \.\.\.
+ endif
+ menutrans &Print &Skriv\ ut
+ menutrans Sa&ve-Exit<Tab>:wqa Lagre\ o&g\ avslutt<Tab>:wqa
+ menutrans E&xit<Tab>:qa &Avslutt<Tab>:qa
+menutrans &Edit &Rediger
+ menutrans &Undo<Tab>u &Angre<Tab>u
+ menutrans &Redo<Tab>^R &Gjenopprett<Tab>^R
+ menutrans Rep&eat<Tab>\. &Repeter<Tab>\.
+ menutrans Cu&t<Tab>"+x &Klipp\ ut<Tab>"+x
+ menutrans &Copy<Tab>"+y K&opier<Tab>"+y
+ menutrans &Paste<Tab>"+gP &Lim\ inn<Tab>"+gP
+ menutrans Put\ &Before<Tab>[p Lim\ i&nn\ før\ markør<Tab>[p
+ menutrans Put\ &After<Tab>]p Lim\ inn\ &etter\ markør<Tab>]p
+ menutrans &Select\ All<Tab>ggVG &Merk\ alt<Tab>ggVG
+ menutrans &Find\.\.\. &Søk \.\.\.
+ menutrans Find\ and\ Rep&lace\.\.\. S&øk\ og\ erstatt \.\.\.
+ menutrans Settings\ &Window &Innstillinger
+ menutrans &Global\ Settings Glo&bale\ innstillinger
+ menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! &Utheving\ av\ søketekst\ av/på<Tab>:set\ hls!
+ menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Forskjell\ mellom\ store/små bokstaver\ av/på<Tab>:set\ ic!
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Indikering\ av\ samsvarende\ parentes\ av/på<Tab>:set\ sm!
+ menutrans &Context\ lines &Kontekstlinjer
+ menutrans &Virtual\ Edit Vi&rtuell\ redigering
+ menutrans Never &Aldri
+ menutrans Block\ Selection I\ &blokkmodus
+ menutrans Insert\ mode I\ &Innsettingsmodus
+ menutrans Block\ and\ Insert I\ Blokk-\ &og\ innsettingsmodus
+ menutrans Always A&lltid
+ menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Innsettings&modus\ av/på<Tab>:set\ im!
+ menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! &Vi-kompatiblitet\ av/på<Tab>:set\ cp!
+ menutrans Search\ &Path\.\.\. &Søkesti \.\.\.
+ menutrans Ta&g\ Files\.\.\. Ta&gfiler \.\.\.
+ menutrans Toggle\ &Toolbar Verkt&øylinje
+ menutrans Toggle\ &Bottom\ Scrollbar Ne&dre\ rullefelt\ av/på
+ menutrans Toggle\ &Left\ Scrollbar Ve&nstre\ rullefelt\ av/på
+ menutrans Toggle\ &Right\ Scrollbar &Høyre\ rullefelt\ av/på
+ menutrans F&ile\ Settings Filo&ppsett
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Linjenummer\ av/på<Tab>:set\ nu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list! L&istemodus\ av/på<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Li&njebryting\ av/på<Tab>:set\ wrap!
+ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Linjebryting\ ved\ &ord\ av/på<Tab>:set\ lbr!
+ menutrans Toggle\ &expand-tab<Tab>:set\ et! Utvidelse\ av\ &tabulatorer\ av/på<Tab>:set\ et!
+ menutrans Toggle\ &auto-indent<Tab>:set\ ai! A&utomatisk\ innrykk\ av/på<Tab>:set\ ai!
+ menutrans Toggle\ &C-indenting<Tab>:set\ cin! &C-innrykk\ av/på<Tab>:set\ cin!
+ menutrans &Shiftwidth &Størrelse\ på\ innrykk
+ menutrans Soft\ &Tabstop &Myke\ tabulatorstopp
+ menutrans Te&xt\ Width\.\.\. Te&kstbredde \.\.\.
+ menutrans &File\ Format\.\.\. &Filformat \.\.\.
+ menutrans C&olor\ Scheme &Fargekart
+ menutrans &Keymap &Tastaturoppsett
+ menutrans Select\ Fo&nt\.\.\. Skriftt&ype \.\.\.
+menutrans &Tools &Verktøy
+ menutrans &Jump\ to\ this\ tag<Tab>g^] &Hopp\ til\ tag\ under\ markør<Tab>g^]
+ menutrans Jump\ &back<Tab>^T Hopp\ &tilbake<Tab>^T
+ menutrans Build\ &Tags\ File Lag\ ta&gfil
+ if has("folding")
+ menutrans &Folding Fol&der
+ menutrans &Enable/Disable\ folds<Tab>zi &Folder\ av/på<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv Se\ &markørlinje<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Se\ &bare\ markørlinjen<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm L&ukk\ flere\ folder<Tab>zm
+ menutrans &Close\ all\ folds<Tab>zM Lukk\ &alle\ folder<Tab>zM
+ menutrans O&pen\ more\ folds<Tab>zr &Åpne\ flere\ folder<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR Å&pne\ alle\ folder<Tab>zR
+ menutrans Fold\ Met&hod Foldme&tode
+ menutrans M&anual &Manuell
+ menutrans I&ndent &Innrykk
+ menutrans E&xpression &Uttrykk
+ menutrans S&yntax &Syntaks
+ menutrans &Diff &Forskjeller
+ menutrans Ma&rker M&arkering
+ menutrans Create\ &Fold<Tab>zf La&g\ fold<Tab>zf
+ menutrans &Delete\ Fold<Tab>zd &Slett\ fold<Tab>zd
+ menutrans Delete\ &All\ Folds<Tab>zD Sl&ett\ alle\ folder<Tab>zD
+ menutrans Fold\ col&umn\ width Bredde\ på\ fold&kolonne
+ endif
+ if has("diff")
+ menutrans &Diff &Forskjeller
+ menutrans &Update &Oppdater
+ menutrans &Get\ Block &Hent\ blokk
+ menutrans &Put\ Block &Putt\ blokk
+ endif
+ menutrans &Make<Tab>:make &Kjør\ "make"<Tab>:make
+ menutrans &List\ Errors<Tab>:cl &List\ feil<Tab>:cl
+ menutrans L&ist\ Messages<Tab>:cl! List\ &meldinger<Tab>:cl!
+ menutrans &Next\ Error<Tab>:cn &Neste\ feil<Tab>:cn
+ menutrans &Previous\ Error<Tab>:cp Fo&rrige\ feil<Tab>:cp
+ menutrans &Older\ List<Tab>:cold &Eldre\ liste<Tab>:cold
+ menutrans N&ewer\ List<Tab>:cnew N&yere\ liste<Tab>:cnew
+ menutrans Error\ &Window Fe&ilvindu
+ menutrans &Update<Tab>:cwin &Oppdater<Tab>:cwin
+ menutrans &Open<Tab>:copen &Åpne<Tab>:copen
+ menutrans &Close<Tab>:cclose &Lukk<Tab>:cclose
+ menutrans &Set\ Compiler &Velg\ kompilator
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd Konverter\ til\ hek&sadesimal<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r K&onverter\ tilbake<Tab>:%!xxd\ -r
+menutrans &Syntax &Syntaks
+ menutrans &Show\ filetypes\ in\ menu &Vis\ filtyper\ i\ menyen
+ menutrans Set\ '&syntax'\ only Sett\ bare\ '&syntax'
+ menutrans Set\ '&filetype'\ too Sett\ '&filetype'\ også
+ menutrans &Off &Av
+ menutrans &Manual &Manuell
+ menutrans A&utomatic A&utomatisk
+ menutrans on/off\ for\ &This\ file Av/på\ for\ &denne\ filen
+ menutrans Co&lor\ test Far&getest
+ menutrans &Highlight\ test Uthevings&test
+ menutrans &Convert\ to\ HTML Konverter\ til\ &HTML
+menutrans &Buffers &Buffer
+ menutrans &Refresh\ menu &Oppdater
+ menutrans Delete &Slett
+ menutrans &Alternate &Veksle
+ menutrans &Next &Neste
+ menutrans &Previous &Forrige
+ menutrans [No\ File] [Uten\ navn]
+menutrans &Window Vi&ndu
+ menutrans &New<Tab>^Wn &Nytt<Tab>^Wn
+ menutrans S&plit<Tab>^Ws &Splitt<Tab>^Ws
+ menutrans Sp&lit\ To\ #<Tab>^W^^ Splitt\ &til\ #<Tab>^W^^
+ menutrans Split\ &Vertically<Tab>^Wv S&plitt\ loddrett<Tab>^Ws
+ menutrans Split\ File\ E&xplorer &Filbehandler
+ menutrans &Close<Tab>^Wc &Lukk<Tab>^Wc
+ menutrans Close\ &Other(s)<Tab>^Wo Lukk\ &andre<Tab>^Wo
+ menutrans Move\ &To Fl&ytt\ til
+ menutrans &Top<Tab>^WK &Toppen<Tab>^WK
+ menutrans &Bottom<Tab>^WJ &Bunnen<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH &Venstre\ side<Tab>^WH
+ menutrans &Right\ side<Tab>^WL &Høyre\ side<Tab>^WL
+ menutrans Rotate\ &Up<Tab>^WR Roter\ &opp<Tab>^WR
+ menutrans Rotate\ &Down<Tab>^Wr &Roter\ ned<Tab>^Wr
+ menutrans &Equal\ Size<Tab>^W= Lik\ st&ørrelse<Tab>^W=
+ menutrans &Max\ Height<Tab>^W_ &Maksimal\ høyde<Tab>^W_
+ menutrans M&in\ Height<Tab>^W1_ M&inimal\ høyde<Tab>^W1_
+ menutrans Max\ &Width<Tab>^W\| Ma&ksimal\ bredde<Tab>^W\|
+ menutrans Min\ Widt&h<Tab>^W1\| Minimal\ &bredde<Tab>^W1\|
+menutrans &Help &Hjelp
+ menutrans &Overview<Tab><F1> &Oversikt<Tab><F1>
+ menutrans &User\ Manual &Brukerhåndbok
+ menutrans &How-to\ links &Førstehjelp
+ menutrans &Find\.\.\. &Søk \.\.\.
+ menutrans &Credits &Kreditering
+ menutrans Co&pying &Programlisens
+ menutrans &Sponsor/Register S&tøtte/Registrering
+ menutrans O&rphans Fo&reldreløse
+ menutrans &Version &Versjon
+ menutrans &About &Om\ Vim
+
+" Popup
+ menutrans &Undo &Angre
+ menutrans Cu&t Klipp\ &ut
+ menutrans &Copy &Kopier
+ menutrans &Paste &Lim\ inn
+ menutrans &Delete &Slett
+ menutrans Select\ Blockwise Marker\ blokk&vis
+ menutrans Select\ &Word Marker\ &ord
+ menutrans Select\ &Line Marker\ lin&je
+ menutrans Select\ &Block Marker\ &blokk
+ menutrans Select\ &All Marker\ al&t
+
+" Verktøylinje
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfunction Do_toolbar_tmenu
+ endif
+ function Do_toolbar_tmenu()
+ tmenu ToolBar.Open Åpne fil
+ tmenu ToolBar.Save Lagre fil
+ tmenu ToolBar.SaveAll Lagre alle filer
+ tmenu ToolBar.Print Skriv ut
+ tmenu ToolBar.Undo Angre
+ tmenu ToolBar.Redo Gjenopprett
+ tmenu ToolBar.Cut Klipp
+ tmenu ToolBar.Copy Kopier
+ tmenu ToolBar.Paste Lim inn
+ tmenu ToolBar.Find Søk ...
+ tmenu ToolBar.FindNext Finn neste
+ tmenu ToolBar.FindPrev Finn forrige
+ tmenu ToolBar.Replace Søk og erstatt ...
+ if 0 " Disabled, they are in the Windows menu
+ tmenu ToolBar.New Nytt vindu
+ tmenu ToolBar.WinSplit Splitt vindu
+ tmenu ToolBar.WinMax Maksimal vindushøyde
+ tmenu ToolBar.WinMin Minimal vindushøyde
+ tmenu ToolBar.WinClose Lukk vindu
+ endif
+ tmenu ToolBar.LoadSesn Åpne økt
+ tmenu ToolBar.SaveSesn Lagre økt
+ tmenu ToolBar.RunScript Kjør Vim-skript
+ tmenu ToolBar.Make Kjør "make"
+ tmenu ToolBar.Shell Start skall
+ tmenu ToolBar.RunCtags Oppdater tag-fil
+ tmenu ToolBar.TagJump Hopp til tag
+ tmenu ToolBar.Help Hjelp!
+ tmenu ToolBar.FindHelp Søk i hjelpen ...
+ endfunction
+endif
+
+" Dialogmeldinger
+ let g:menutrans_no_file = "[Uten navn]"
+ let g:menutrans_help_dialog = "Skriv en kommando eller ord du vil ha hjelp om:\n\nLegg til i_ i begynnelsen for inndatametoder (f.eks.: i_CTRL-X)\nLegg til c_ i begynnelsen for kommandoer som redigerer kommandolinjen (f.eks.: c_<Del>)\nLegg til ' i begynnelsen for et valgnavn (f.eks.: 'shiftwidth')"
+ let g:menutrans_path_dialog = "Skriv søkesti for filer.\nSkill katalognavn med komma."
+ let g:menutrans_tags_dialog = "Skriv navn på tagfiler.\nSkill navnene med komma."
+ let g:menutrans_textwidth_dialog = "Velg ny tekstbredde (0 for å forhindre formatering): "
+ let g:menutrans_fileformat_dialog = "Velg filformat som filen skal lagres med"
+
+" vim: set ts=8 sw=8 :
+" vim600: set fdm=indent :
diff --git a/runtime/lang/menu_no_no.utf-8.vim b/runtime/lang/menu_no_no.utf-8.vim
new file mode 100644
index 000000000..af39cc84a
--- /dev/null
+++ b/runtime/lang/menu_no_no.utf-8.vim
@@ -0,0 +1,4 @@
+" Menu Translations: Norwegian for UTF-8 encoding
+" menu_no_no.utf-8.vim 289 2004-05-16 18:00:52Z sunny
+
+source <sfile>:p:h/menu_no_no.latin1.vim
diff --git a/runtime/lang/menu_pl.cp1250.vim b/runtime/lang/menu_pl.cp1250.vim
new file mode 100644
index 000000000..0e0fdd087
--- /dev/null
+++ b/runtime/lang/menu_pl.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Polish
+
+source <sfile>:p:h/menu_polish_poland.1250.vim
diff --git a/runtime/lang/menu_pl_pl.cp1250.vim b/runtime/lang/menu_pl_pl.cp1250.vim
new file mode 100644
index 000000000..0e0fdd087
--- /dev/null
+++ b/runtime/lang/menu_pl_pl.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Polish
+
+source <sfile>:p:h/menu_polish_poland.1250.vim
diff --git a/runtime/lang/menu_pl_pl.iso_8859-2.vim b/runtime/lang/menu_pl_pl.iso_8859-2.vim
new file mode 100644
index 000000000..6ade1d7d9
--- /dev/null
+++ b/runtime/lang/menu_pl_pl.iso_8859-2.vim
@@ -0,0 +1,263 @@
+" Menu Translations: Polish
+" Maintainer: Rafal M. Sulejman <rms@poczta.onet.pl>
+" Initial Translation: Marcin Dalecki <dalecki@cs.net.pl>
+" Last Change: 5 May 2004
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding iso-8859-2
+
+" Help menu
+menutrans &Help Po&moc
+menutrans &Overview<Tab><F1> &Spis\ tre¶ci<Tab><F1>
+menutrans &How-to\ links &Odno¶niki\ JTZ
+menutrans &Credits Po&dziêkowania
+menutrans &User\ Manual Podrêcznik\ &u¿ytkownika
+menutrans Co&pying &Kopiowanie
+menutrans &Version &Wersja
+menutrans &About o\ &Aplikacji
+menutrans &Sponsor/Register &Sponsorowanie/Rejestracja
+menutrans O&rphans K&ibaale\ Children\'s\ Center
+
+" File menu
+menutrans &File &Plik
+menutrans &Open\.\.\.<Tab>:e &Otwórz\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Otwórz\ z\ &podzia³em\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nowy<Tab>:enew
+menutrans &Close<Tab>:close &Zamknij<Tab>:close
+menutrans &Save<Tab>:w Za&pisz<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Zapisz\ &jako\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Podziel\ na\ diff-a\ miêdzy\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Podziel\ ³atane\ przez\.\.\.
+menutrans &Print &Drukuj
+menutrans Sa&ve-Exit<Tab>:wqa W&yj¶cie\ z\ zapisem<Tab>:wqa
+menutrans E&xit<Tab>:qa &Wyj¶cie<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Edycja
+menutrans &Undo<Tab>u &Cofnij<Tab>u
+menutrans &Redo<Tab>^R &Ponów<Tab>^R
+menutrans Rep&eat<Tab>\. P&owtórz<Tab>\.
+menutrans Cu&t<Tab>"+x W&ytnij<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiuj<Tab>"+y
+menutrans &Paste<Tab>"+gP &Wklej<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Wstaw\ p&rzed<Tab>[p
+menutrans Put\ &After<Tab>]p Wstaw\ p&o<Tab>]p
+menutrans &Select\ All<Tab>ggVG Z&aznacz\ ca³o¶æ<Tab>ggVG
+menutrans &Find\.\.\. &Szukaj\.\.\.
+menutrans &Find<Tab>/ &Szukaj<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. &Zamieñ\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s &Zamieñ<Tab>:%s
+menutrans Find\ and\ Rep&lace &Zamieñ
+menutrans Find\ and\ Rep&lace<Tab>:s &Zamieñ<Tab>:s
+menutrans Options\.\.\. Opcje\.\.\.
+menutrans Settings\ &Window Ustawienia
+menutrans &Global\ Settings Ustawienia\ &globalne
+menutrans F&ile\ Settings Ustawienia\ dla\ pliku
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Numerowanie\ wierszy<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Tryb\ &listowania<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Za&wijanie\ wierszy<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! £amanie\ wie&rsza<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Rozwijani&e\ tabulatorów<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Automatyczne\ wciêcia<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Wciêcia\ &C<Tab>:set\ cin!
+menutrans &Shiftwidth &Szeroko¶æ\ wciêcia
+menutrans Te&xt\ Width\.\.\. D³ugo¶æ\ linii\.\.\.
+menutrans &File\ Format\.\.\. &Format\ pliku\.\.\.
+menutrans Soft\ &Tabstop Rozmiar\ &tabulacji
+menutrans C&olor\ Scheme Zestawy\ kolorów
+menutrans &Keymap Uk³ady\ klawiatury
+menutrans None ¿aden
+menutrans accents akcenty
+menutrans hebrew hebrajski
+menutrans hebrewp hebrajski\ p
+menutrans russian-jcuken rosyjski-jcuken
+menutrans russian-jcukenwin rosyjski-jcukenwin
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Podkre¶lanie\ &wzorców<Tab>:set\ hls!
+
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Ignorowanie\ wielko¶ci<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Pokazywanie\ pasuj±cych<Tab>:set\ sm!
+
+menutrans &Context\ lines Wiersze\ &kontekstowe
+menutrans &Virtual\ Edit Obróbka\ &wirtualna
+
+menutrans Never Nigdy
+menutrans Block\ Selection Zaznaczanie\ zakresu
+menutrans Insert\ mode Tryb\ wprowadzania
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Tryb\ zg&odno¶ci\ z\ Vi<Tab>:set\ cp!
+menutrans Block\ and\ Insert Zakres\ i\ wprowadzanie
+menutrans Always Zawsze
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Tryb\ wprowadzania<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. Scie¿ka\ poszukiwania\.\.\.
+menutrans Ta&g\ Files\.\.\. Pliki\ tagów\.\.\.
+
+
+"
+" GUI options
+menutrans Toggle\ &Toolbar Pasek\ narzêdzi
+menutrans Toggle\ &Bottom\ Scrollbar Dolny\ przewijacz
+menutrans Toggle\ &Left\ Scrollbar &Lewy\ przewijacz
+menutrans Toggle\ &Right\ Scrollbar P&rawy\ przewijacz
+
+" Programming menu
+menutrans &Tools &Narzêdzia
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Skocz\ do\ taga<Tab>g^]
+menutrans Jump\ &back<Tab>^T Skok\ w\ &ty³<Tab>^T
+menutrans Build\ &Tags\ File &Twórz\ plik\ tagów
+" Folding
+menutrans &Folding &Zwijanie
+menutrans &Enable/Disable\ folds<Tab>zi &Zwiñ/rozwiñ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Linia\ kursora<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Tylko\ linia\ kursora<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Zwiñ\ wiêcej<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Z&wiñ\ wszystkie<Tab>zM
+menutrans &Open\ all\ folds<Tab>zR Rozwiñ\ wszystkie<Tab>zR
+menutrans O&pen\ more\ folds<Tab>zr R&ozwiñ\ wiêcej<Tab>zr
+
+menutrans Create\ &Fold<Tab>zf T&wórz\ zawiniêcie<Tab>zf
+menutrans &Delete\ Fold<Tab>zd U&suñ\ zawiniêcie<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD &Usuñ\ wszystkie\ zawiniêcia<Tab>zD
+menutrans Fold\ column\ &width Szeroko¶æ\ kolumny\ za&winiêæ
+menutrans Fold\ Met&hod Me&toda\ zawijania
+menutrans M&anual &Rêcznie
+menutrans I&ndent W&ciêcie
+menutrans E&xpression W&yrazenie
+menutrans S&yntax S&k³adnia
+menutrans Ma&rker Zn&acznik
+
+" Diff
+menutrans &Update &Od¶wie¿
+menutrans &Get\ Block &Pobierz\ blok
+menutrans &Put\ Block &Wstaw\ blok
+
+" Make and stuff...
+menutrans &Make<Tab>:make M&ake<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Poka¿\ b³êdy<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! W&ylicz\ powiadomienia<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &Nastêpny\ b³±d<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Poprzedni\ b³±d<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Starsza\ lista<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew N&owsza\ lista<Tab>:cnew
+menutrans Error\ &Window Okno\ komu&nikatów
+menutrans &Update<Tab>:cwin Akt&ualizuj<Tab>:cwin
+menutrans &Close<Tab>:cclose &Zamknij<Tab>:cclose
+menutrans &Open<Tab>:copen &Otwórz<Tab>:copen
+
+menutrans &Set\ Compiler U&staw\ kompilator
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Kody\ szesnastkowe<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Zwyk³y\ tekst<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &Bufory
+menutrans &Refresh\ menu Od¶wie¿
+menutrans Delete Skasuj
+menutrans &Alternate &Zmieñ
+menutrans &Next &Nastêpny
+menutrans &Previous &Poprzedni
+menutrans [No\ File] [Brak\ Pliku]
+
+" Window menu
+menutrans &Window &Widoki
+menutrans &New<Tab>^Wn &Nowy<Tab>^Wn
+menutrans S&plit<Tab>^Ws Po&dziel<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ P&odziel\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Podziel\ pionowo<Tab>^Wv
+menutrans Split\ File\ E&xplorer Otwórz\ mened¿er\ plików
+
+menutrans &Close<Tab>^Wc &Zamknij<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zamknij\ &inne<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &Nastêpny<Tab>^Ww
+menutrans P&revious<Tab>^WW &Poprzedni<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Wyrównaj\ wysoko¶ci<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Z&maksymalizuj\ wysoko¶æ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Zminim&alizuj\ wysoko¶æ<Tab>^W1_
+menutrans Max\ Width<Tab>^W\| Maksymalna\ szeroko¶æ<Tab>^W\|
+menutrans Min\ Width<Tab>^W1\| Minimalna\ szeroko¶æ<Tab>^W1\|
+menutrans Max\ &Width<Tab>^W\| Zmaksymalizuj\ szeroko¶æ<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Zminimalizuj\ szeroko¶æ<Tab>^W1\|
+menutrans Move\ &To &Id¼\ do
+menutrans &Top<Tab>^WK &Góra<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Dó³<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Lewa\ strona<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Prawa\ strona<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Obróæ\ w\ &górê<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Obróæ\ w\ &dó³<Tab>^Wr
+menutrans Split\ &Vertically<Tab>^Wv &Podziel\ w\ poziomie<Tab>^Wv
+menutrans Select\ Fo&nt\.\.\. Wybierz\ &czcionkê\.\.\.
+
+" The popup menu
+menutrans &Undo &Cofnij
+menutrans Cu&t W&ytnij
+menutrans &Copy &Kopiuj
+menutrans &Paste &Wklej
+menutrans &Delete &Skasuj
+menutrans Select\ Blockwise Zaznacz\ &blok
+menutrans Select\ &Word Zaznacz\ &s³owo
+menutrans Select\ &Line Zaznacz\ w&iersz
+menutrans Select\ &Block Zaznacz\ &blok
+menutrans Select\ &All Zaznacz\ c&a³o¶æ
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Otwórz plik
+ tmenu ToolBar.Save Zapisz bie¿±cy plik
+ tmenu ToolBar.SaveAll Zapisz wszystkie pliki
+ tmenu ToolBar.Print Drukuj
+ tmenu ToolBar.Undo Cofnij
+ tmenu ToolBar.Redo Ponów
+ tmenu ToolBar.Cut Wytnij
+ tmenu ToolBar.Copy Skopiuj
+ tmenu ToolBar.Paste Wklej
+ tmenu ToolBar.Find Szukaj...
+ tmenu ToolBar.FindNext Szukaj nastêpnego
+ tmenu ToolBar.FindPrev Szukaj poprzedniego
+ tmenu ToolBar.Replace Szukaj i zamieniaj...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nowy widok
+ tmenu ToolBar.WinSplit Podziel widok
+ tmenu ToolBar.WinMax Zmaksymalizuj widok
+ tmenu ToolBar.WinMin Zminimalizuj widok
+ tmenu ToolBar.WinClose Zamknij widok
+ endif
+ tmenu ToolBar.LoadSesn Za³aduj sesjê
+ tmenu ToolBar.SaveSesn Zachowaj bie¿±c± sesjê
+ tmenu ToolBar.RunScript Uruchom skrypt Vima
+ tmenu ToolBar.Make Wykonaj bie¿±cy projekt
+ tmenu ToolBar.Shell Otwórz pow³okê
+ tmenu ToolBar.RunCtags Twórz tagi w bie¿±cym katalogu
+ tmenu ToolBar.TagJump Skok do taga pod kursorem
+ tmenu ToolBar.Help Pomoc Vima
+ tmenu ToolBar.FindHelp Przeszukuj pomoc Vim-a
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sk³adnia
+menutrans &Show\ filetypes\ in\ menu Poka¿\ typy\ &plików\ w\ menu
+menutrans Set\ '&syntax'\ only Ustaw\ tylko\ '&syntax'
+menutrans Set\ '&filetype'\ too Ustaw\ równie¿\ '&filetype'
+menutrans &Off &Wy³±cz
+menutrans &Manual &Rêcznie
+menutrans A&utomatic A&utomatyczne
+menutrans on/off\ for\ &This\ file w³±cz/w&y³±cz\ dla\ pliku
+menutrans Co&lor\ test Test\ &kolorów
+menutrans &Highlight\ test &Test\ pod¶wietlania
+menutrans &Convert\ to\ HTML Przetwórz\ na\ &HTML
+
+" dialog texts
+let menutrans_no_file = "[Brak pliku]"
+let menutrans_help_dialog = "Wprowad¼ komendê lub s³owo, aby otrzymaæ pomoc o:\n\nPrzedrostek i_ oznacza komendê trybu Wprowadzania (np. i_CTRL-X)\nPrzedrostek c_ oznacza komendê edycji wiersza komend (np. c_<Del>)\nPrzedrostek ' oznacza nazwê opcji (np. 'shiftwidth')"
+let g:menutrans_path_dialog = "Wprowad¼ ¶cie¿kê poszukiwania plików.\nProszê rozdzielaæ nazwy katalogów przecinkiem."
+let g:menutrans_tags_dialog = "Podaj nazwy plików tagów.\nProszê rozdzielaæ nazwy przecinkiem."
+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"
diff --git a/runtime/lang/menu_polish_poland.1250.vim b/runtime/lang/menu_polish_poland.1250.vim
new file mode 100644
index 000000000..189445269
--- /dev/null
+++ b/runtime/lang/menu_polish_poland.1250.vim
@@ -0,0 +1,259 @@
+" Menu Translations: Polish
+" Maintainer: Rafal M. Sulejman <rms@poczta.onet.pl>
+" Initial Translation: Marcin Dalecki <dalecki@cs.net.pl>
+" Last Change: 06 Sep 2001
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp1250
+
+" Help menu
+menutrans &Help Po&moc
+menutrans &Overview<Tab><F1> &Spis\ Treœci<Tab><F1>
+menutrans &How-to\ links &Odnoœniki\ JTZ
+menutrans &Credits Po&dziêkowania
+menutrans &User\ Manual Podrêcznik\ &u¿ytkownika
+menutrans Co&pying &Kopiowanie
+menutrans &Version &Wersja
+menutrans &About o\ &Aplikacji
+
+" File menu
+menutrans &File &Plik
+menutrans &Open\.\.\.<Tab>:e &Otwórz\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Otwórz\ z\ &podzia³em\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nowy<Tab>:enew
+menutrans &Close<Tab>:close &Zamknij<Tab>:close
+menutrans &Save<Tab>:w Za&pisz<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Zapisz\ &jako\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Podziel\ na\ diff-a\ miêdzy\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Podziel\ ³atane\ przez\.\.\.
+menutrans &Print &Drukuj
+menutrans Sa&ve-Exit<Tab>:wqa Zapisz\ i\ w&yjdŸ<Tab>:wqa
+menutrans E&xit<Tab>:qa &Wyjœcie<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Edycja
+menutrans &Undo<Tab>u &Cofnij<Tab>u
+menutrans &Redo<Tab>^R &Ponów<Tab>^R
+menutrans Rep&eat<Tab>\. P&owtórz<Tab>\.
+menutrans Cu&t<Tab>"+x W&ytnij<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiuj<Tab>"+y
+menutrans &Paste<Tab>"+gP &Wklej<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Wstaw\ p&rzed<Tab>[p
+menutrans Put\ &After<Tab>]p Wstaw\ p&o<Tab>]p
+menutrans &Select\ all<Tab>ggVG Z&aznacz\ ca³oœæ<Tab>ggVG
+menutrans &Find\.\.\. &Szukaj\.\.\.
+menutrans &Find<Tab>/ &Szukaj<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. &Zamieñ\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s &Zamieñ<Tab>:%s
+menutrans Find\ and\ Rep&lace &Zamieñ
+menutrans Find\ and\ Rep&lace<Tab>:s &Zamieñ<Tab>:s
+menutrans Options\.\.\. Opcje\.\.\.
+menutrans Settings\ &Window Ustawienia
+menutrans &Global\ Settings Ustawienia\ &globalne
+menutrans F&ile\ Settings Ustawienia\ dla\ pliku
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! &Numerowanie\ wierszy<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Tryb\ &listowania<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Za&wijanie\ wierszy<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! £amanie\ wie&rsza<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Rozwijani&e\ tabulatorów<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! &Automatyczne\ wciêcia<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Wciêcia\ &C<Tab>:set\ cin!
+menutrans &Shiftwidth &Szerokoœæ\ wciêcia
+menutrans Te&xt\ Width\.\.\. D³ugoœæ\ linii\.\.\.
+menutrans &File\ Format\.\.\. &Format\ pliku\.\.\.
+menutrans Soft\ &Tabstop Rozmiar\ &tabulacji
+menutrans C&olor\ Scheme Zestawy\ kolorów
+menutrans &Keymap Uk³ady\ klawiatury
+menutrans None ¿aden
+menutrans accents akcenty
+menutrans hebrew hebrajski
+menutrans hebrewp hebrajski\ p
+menutrans russian-jcuken rosyjski-jcuken
+menutrans russian-jcukenwin rosyjski-jcukenwin
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Podkreœlanie\ &wzorców<Tab>:set\ hls!
+
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! &Ignorowanie\ wielkoœci<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! &Pokazywanie\ pasuj¹cych<Tab>:set\ sm!
+
+menutrans &Context\ lines Wiersze\ &kontekstowe
+menutrans &Virtual\ Edit Obróbka\ &wirtualna
+
+menutrans Never Nigdy
+menutrans Block\ Selection Zaznaczanie\ zakresu
+menutrans Insert\ mode Tryb\ wprowadzania
+menutrans Block\ and\ Insert Zakres\ i\ wprowadzanie
+menutrans Always Zawsze
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Tryb\ wprowadzania<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. Scie¿ka\ poszukiwania\.\.\.
+menutrans Ta&g\ Files\.\.\. Pliki\ tagów\.\.\.
+
+
+"
+" GUI options
+menutrans Toggle\ &Toolbar Pasek\ narzêdzi
+menutrans Toggle\ &Bottom\ Scrollbar Dolny\ przewijacz
+menutrans Toggle\ &Left\ Scrollbar &Lewy\ przewijacz
+menutrans Toggle\ &Right\ Scrollbar P&rawy\ przewijacz
+
+" Programming menu
+menutrans &Tools &Narzêdzia
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Skocz\ do\ taga<Tab>g^]
+menutrans Jump\ &back<Tab>^T Skok\ w\ &ty³<Tab>^T
+menutrans Build\ &Tags\ File &Twórz\ plik\ tagów
+" Folding
+menutrans &Folding &Zwijanie
+menutrans &Enable/Disable\ folds<Tab>zi &Zwiñ/rozwiñ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Linia\ kursora<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx &Tylko\ linia\ kursora<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Zwiñ\ wiêcej<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Z&wiñ\ wszystkie<Tab>zM
+menutrans &Open\ all\ folds<Tab>zR Rozwiñ\ wszystkie<Tab>zR
+menutrans O&pen\ more\ folds<Tab>zr R&ozwiñ\ wiêcej<Tab>zr
+
+menutrans Create\ &Fold<Tab>zf T&wórz\ zawiniêcie<Tab>zf
+menutrans &Delete\ Fold<Tab>zd U&suñ\ zawiniêcie<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD &Usuñ\ wszystkie\ zawiniêcia<Tab>zD
+menutrans Fold\ column\ &width Szerokoœæ\ kolumny\ za&winiêæ
+menutrans Fold\ Met&hod Me&toda\ zawijania
+menutrans M&anual &Rêcznie
+menutrans I&ndent W&ciêcie
+menutrans E&xpression W&yrazenie
+menutrans S&yntax S&k³adnia
+menutrans Ma&rker Zn&acznik
+
+" Diff
+menutrans &Update &Odœwie¿
+menutrans &Get\ Block &Pobierz\ blok
+menutrans &Put\ Block &Wstaw\ blok
+
+" Make and stuff...
+menutrans &Make<Tab>:make M&ake<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Poka¿\ b³êdy<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! W&ylicz\ powiadomienia<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &Nastêpny\ b³¹d<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Poprzedni\ b³¹d<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Starsza\ lista<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew N&owsza\ lista<Tab>:cnew
+menutrans Error\ &Window Okno\ komu&nikatów
+menutrans &Update<Tab>:cwin Akt&ualizuj<Tab>:cwin
+menutrans &Close<Tab>:cclose &Zamknij<Tab>:cclose
+menutrans &Open<Tab>:copen &Otwórz<Tab>:copen
+
+menutrans &Set\ Compiler U&staw\ kompilator
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Kody\ szesnastkowe<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Zwyk³y\ tekst<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &Bufory
+menutrans &Refresh\ menu Odœwie¿
+menutrans Delete Skasuj
+menutrans &Alternate &Zmieñ
+menutrans &Next &Nastêpny
+menutrans &Previous &Poprzedni
+menutrans [No\ File] [Brak\ Pliku]
+
+" Window menu
+menutrans &Window &Widoki
+menutrans &New<Tab>^Wn &Nowy<Tab>^Wn
+menutrans S&plit<Tab>^Ws Po&dziel<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ P&odziel\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Podziel\ pionowo<Tab>^Wv
+menutrans Split\ File\ E&xplorer Otwórz\ mened¿er\ plików
+
+menutrans &Close<Tab>^Wc &Zamknij<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zamknij\ &inne<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &Nastêpny<Tab>^Ww
+menutrans P&revious<Tab>^WW &Poprzedni<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Wyrównaj\ wysokoœci<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Z&maksymalizuj\ wysokoϾ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Zminim&alizuj\ wysokoϾ<Tab>^W1_
+menutrans Max\ Width<Tab>^W\| Maksymalna\ szerokoϾ<Tab>^W\|
+menutrans Min\ Width<Tab>^W1\| Minimalna\ szerokoϾ<Tab>^W1\|
+menutrans Max\ &Width<Tab>^W\| Zmaksymalizuj\ szerokoϾ<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Zminimalizuj\ szerokoϾ<Tab>^W1\|
+menutrans Move\ &To &IdŸ\ do
+menutrans &Top<Tab>^WK &Góra<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Dó³<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Lewa\ strona<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Prawa\ strona<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Obróæ\ w\ &górê<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Obróæ\ w\ &dó³<Tab>^Wr
+menutrans Split\ &Vertically<Tab>^Wv &Podziel\ w\ poziomie<Tab>^Wv
+menutrans Select\ Fo&nt\.\.\. Wybierz\ &czcionkê\.\.\.
+
+" The popup menu
+menutrans &Undo &Cofnij
+menutrans Cu&t W&ytnij
+menutrans &Copy &Kopiuj
+menutrans &Paste &Wklej
+menutrans &Delete &Skasuj
+menutrans Select\ Blockwise Zaznacz\ &blok
+menutrans Select\ &Word Zaznacz\ &s³owo
+menutrans Select\ &Line Zaznacz\ w&iersz
+menutrans Select\ &Block Zaznacz\ &blok
+menutrans Select\ &All Zaznacz\ c&a³oœæ
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Otwórz plik
+ tmenu ToolBar.Save Zapisz bie¿¹cy plik
+ tmenu ToolBar.SaveAll Zapisz wszystkie pliki
+ tmenu ToolBar.Print Drukuj
+ tmenu ToolBar.Undo Cofnij
+ tmenu ToolBar.Redo Ponów
+ tmenu ToolBar.Cut Wytnij
+ tmenu ToolBar.Copy Skopiuj
+ tmenu ToolBar.Paste Wklej
+ tmenu ToolBar.Find Szukaj...
+ tmenu ToolBar.FindNext Szukaj nastêpnego
+ tmenu ToolBar.FindPrev Szukaj poprzedniego
+ tmenu ToolBar.Replace Szukaj i zamieniaj...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nowy widok
+ tmenu ToolBar.WinSplit Podziel widok
+ tmenu ToolBar.WinMax Zmaksymalizuj widok
+ tmenu ToolBar.WinMin Zminimalizuj widok
+ tmenu ToolBar.WinClose Zamknij widok
+ endif
+ tmenu ToolBar.LoadSesn Za³aduj sesjê
+ tmenu ToolBar.SaveSesn Zachowaj bie¿¹c¹ sesjê
+ tmenu ToolBar.RunScript Uruchom skrypt Vima
+ tmenu ToolBar.Make Wykonaj bie¿¹cy projekt
+ tmenu ToolBar.Shell Otwórz pow³okê
+ tmenu ToolBar.RunCtags Twórz tagi w bie¿¹cym katalogu
+ tmenu ToolBar.TagJump Skok do taga pod kursorem
+ tmenu ToolBar.Help Pomoc Vima
+ tmenu ToolBar.FindHelp Przeszukuj pomoc Vim-a
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sk³adnia
+menutrans Set\ '&syntax'\ only Ustaw\ tylko\ '&syntax'
+menutrans Set\ '&filetype'\ too Ustaw\ równie¿\ '&filetype'
+menutrans &Off &Wy³¹cz
+menutrans &Manual &Rêcznie
+menutrans A&utomatic A&utomatyczne
+menutrans on/off\ for\ &This\ file w³¹cz/w&y³¹cz\ dla\ pliku
+menutrans Co&lor\ test Test\ &kolorów
+menutrans &Highlight\ test &Test\ podœwietlania
+menutrans &Convert\ to\ HTML Przetwórz\ na\ &HTML
+
+" dialog texts
+let menutrans_no_file = "[Brak pliku]"
+let menutrans_help_dialog = "WprowadŸ komendê lub s³owo, aby otrzymaæ pomoc o:\n\nPrzedrostek i_ oznacza komendê trybu Wprowadzania (np. i_CTRL-X)\nPrzedrostek c_ oznacza komendê edycji wiersza komend (np. c_<Del>)\nPrzedrostek ' oznacza nazwê opcji (np. 'shiftwidth')"
+let g:menutrans_path_dialog = "WprowadŸ œcie¿kê poszukiwania plików.\nProszê rozdzielaæ nazwy katalogów przecinkiem."
+let g:menutrans_tags_dialog = "Podaj nazwy plików tagów.\nProszê rozdzielaæ nazwy przecinkiem."
+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"
diff --git a/runtime/lang/menu_pt_br.latin1.vim b/runtime/lang/menu_pt_br.latin1.vim
new file mode 100644
index 000000000..bed948748
--- /dev/null
+++ b/runtime/lang/menu_pt_br.latin1.vim
@@ -0,0 +1,3 @@
+" Menu translations: Portuguese
+
+source <sfile>:p:h/menu_pt_br.vim
diff --git a/runtime/lang/menu_pt_br.utf-8.vim b/runtime/lang/menu_pt_br.utf-8.vim
new file mode 100644
index 000000000..4879c2414
--- /dev/null
+++ b/runtime/lang/menu_pt_br.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu translations: Portuguese for UTF-8 encoding
+
+source <sfile>:p:h/menu_pt_br.vim
diff --git a/runtime/lang/menu_pt_br.vim b/runtime/lang/menu_pt_br.vim
new file mode 100644
index 000000000..eaad26fb9
--- /dev/null
+++ b/runtime/lang/menu_pt_br.vim
@@ -0,0 +1,265 @@
+" Menu Translations: Português
+" Maintainer: José de Paula <jose_de_paula@ig.com.br>
+" Last Change: 2003 Jun 12
+"
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" Translations in latin1 (ISO-8859-1), and should work in
+" latin9 (ISO-8859-15)
+
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" Help menu
+menutrans &Help A&juda
+menutrans &Overview<Tab><F1> &Conteúdo
+menutrans &User\ Manual &Manual\ do\ Usuário
+menutrans &How-to\ links &Como\ fazer?
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans &Credits &Créditos
+menutrans O&rphans &Órfãos
+menutrans Co&pying &Licença
+menutrans &Version &Versão
+menutrans &About &Sobre
+
+" File menu
+menutrans &File &Arquivo
+menutrans &Open\.\.\.<Tab>:e A&brir\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Ab&rir\ em\ outra\ janela\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Novo<Tab>:enew
+menutrans &Close<Tab>:close &Fechar<Tab>:close
+menutrans &Save<Tab>:w &Salvar<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Sa&lvar\ como\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. &Exibir\ diferenças\ com\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Ex&ibir\ patcheado\ por\.\.\.
+menutrans &Print I&mprimir
+menutrans Sa&ve-Exit<Tab>:wqa Sal&var\ e\ sair<Tab>:wqa
+menutrans E&xit<Tab>:qa Sai&r<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Editar
+menutrans &Undo<Tab>u &Desfazer<Tab>u
+menutrans &Redo<Tab>^R &Refazer<Tab>u
+menutrans Rep&eat<Tab>\. Repe&tir<Tab>\.
+menutrans Cu&t<Tab>"+x Re&cortar<Tab>"+x
+menutrans &Copy<Tab>"+y Cop&iar<Tab>"+y
+menutrans &Paste<Tab>"+gP C&olar<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Colocar\ &antes<Tab>[p
+menutrans Put\ &After<Tab>]p Colocar\ &depois<Tab>]p
+menutrans &Select\ all<Tab>ggVG &Selecionar\ tudo<Tab>ggVG
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Procurar\ e\ substit&uir\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Procurar\ e\ substit&uir<Tab>:%s
+menutrans Find\ and\ Rep&lace Procurar\ e\ substit&uir
+menutrans Find\ and\ Rep&lace<Tab>:s Procurar\ e\ substituir<Tab>:s
+menutrans Settings\ &Window Op&ções
+
+" Edit/Global Settings
+menutrans &Global\ Settings Opções\ &Globais
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Ativar/Desativar\ &Realce\ de\ Padrões<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Ativar/Desativar\ &Ignorar\ maiúsculas<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Ativar/Desativar\ &coincidências<Tab>:set\ sm!
+
+menutrans &Context\ lines Linhas\ de\ C&ontexto
+
+menutrans &Virtual\ Edit Edição\ &Virtual
+menutrans Never Nunca
+menutrans Block\ Selection Seleção\ de\ Bloco
+menutrans Insert\ mode Modo\ de\ inserção
+menutrans Block\ and\ Insert Bloco\ e\ inserção
+menutrans Always Sempre
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Ativar/Desativar\ Modo\ de\ In&serção<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Ativar/Desativar\ Co&mpatibilidade\ com\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Camin&ho\ de\ Busca\.\.\.
+menutrans Ta&g\ Files\.\.\. Arquivos\ de\ Tags\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar Ocultar/Exibir\ Barra\ de\ &Ferramentas
+menutrans Toggle\ &Bottom\ Scrollbar Ocultar/Exibir\ Barra\ de\ &Rolagem\ Inferior
+menutrans Toggle\ &Left\ Scrollbar Ocultar/Exibir\ Barra\ de\ R&olagem\ Esquerda
+menutrans Toggle\ &Right\ Scrollbar Ocultar/Exibir\ Barra\ de\ Ro&lagem\ Direita
+let g:menutrans_path_dialog = "Indique um caminho de procura para os arquivos.\nSepare os nomes dos diretórios com uma vírgula."
+let g:menutrans_tags_dialog = "Indique os nomes dos arquivos de tags.\nSepare os nomes com uma vírgula."
+
+" Edit/File Settings
+menutrans F&ile\ Settings Opções\ do\ &Arquivo
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Ativar/Desativar\ &numeração\ de\ linhas<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Ativar/Desativar\ modo\ &list<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Ativar/Desativar\ &quebra\ de\ linhas<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Ativar/Desativar\ quebra\ na\ &palavra<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Ativar/Desativar\ expansão de tabs<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Ativar/Desativar\ &auto-indentação<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Ativar/Desativar\ indentação estilo &C<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth Largura\ da\ &indentação
+
+menutrans Soft\ &Tabstop &Tabulação\ com\ espaços
+
+menutrans Te&xt\ Width\.\.\. Largura\ do\ te&xto\.\.\.
+let g:menutrans_textwidth_dialog = "Digite a nova largura do texto (0 para desativar a formatação): "
+
+menutrans &File\ Format\.\.\. &Formato\ do\ arquivo\.\.\.
+let g:menutrans_fileformat_dialog = "Selecione o formato para gravar o arquivo"
+
+menutrans C&olor\ Scheme Esquema\ de\ c&ores
+menutrans default padrão
+
+menutrans Select\ Fo&nt\.\.\. Selecionar\ fo&nte\.\.\.
+
+menutrans &Keymap Mapa\ de\ teclado
+menutrans None Nenhum
+
+" Programming menu
+menutrans &Tools &Ferramentas
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Pular\ para\ este\ tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T &Voltar<Tab>^T
+menutrans Build\ &Tags\ File &Construir\ Arquivo\ de\ tags
+menutrans &Folding &Dobra
+menutrans &Make<Tab>:make &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Lista\ de\ erros<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Li&sta\ de\ mensagens<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn P&róximo\ erro<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Erro\ anterior<Tab>:cp
+menutrans &Older\ List<Tab>:cold Listar\ erros\ &antigos<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Listar\ erros\ &novos<Tab>:cnew
+menutrans Error\ &Window &Janela\ de\ erros
+menutrans &Set\ Compiler Def&inir\ Compilador
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Converter\ para\ hexadecimal<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Conver&ter\ de\ volta<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi &Ativar/Desativar\ dobras<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Ver\ linha\ do\ cursor<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ve&r\ somente\ linha\ do\ cursor<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Fechar\ mais\ dobras<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM F&echar\ todas\ as\ dobras<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr A&brir\ mais\ dobras<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Abr&ir\ todas\ as\ dobras<Tab>zR
+" fold method
+menutrans Fold\ Met&hod &Modo\ de\ dobras
+menutrans Create\ &Fold<Tab>zf Criar\ &dobras<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Remover\ d&obras<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Remover\ &todas\ as\ dobras<Tab>zD
+" moving around in folds
+menutrans Fold\ col&umn\ width &Largura\ da\ coluna\ da\ dobra
+
+" Tools.Diff Menu
+menutrans &Update &Atualizar
+menutrans &Get\ Block &Obter\ Bloco
+menutrans &Put\ Block &Pôr\ Bloco
+
+" Tools.Error Menu
+menutrans &Update<Tab>:cwin &Atualizar<Tab>:cwin
+menutrans &Open<Tab>:copen A&brir<Tab>:copen
+menutrans &Close<Tab>:cclose &Fechar<Tab>:cclose
+
+" Names for buffer menu.
+menutrans &Buffers &Buffers
+menutrans &Refresh\ menu A&tualizar\ menu
+menutrans &Delete &Apagar
+menutrans &Alternate A&lternar
+menutrans &Next P&róximo
+menutrans &Previous A&nterior
+let g:menutrans_no_file = "[Sem arquivos]"
+
+" Window menu
+menutrans &Window &Janela
+menutrans &New<Tab>^Wn N&ova<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Dividir<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ D&ividir\ para\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Dividir\ &verticalmente<Tab>^Wv
+menutrans Split\ File\ E&xplorer &Abrir\ Gerenciador\ de\ arquivos
+menutrans &Close<Tab>^Wc &Fechar<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Fechar\ &outra(s)<Tab>^Wo
+menutrans Move\ &To Mover\ &para
+menutrans &Top<Tab>^WK A&cima<Tab>^WK
+menutrans &Bottom<Tab>^WJ A&baixo<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Lado\ &esquerdo<Tab>^WH
+menutrans &Right\ side<Tab>^WL Lado\ di&reito<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR &Girar\ para\ cima<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Girar\ para\ bai&xo<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= Mesmo\ &Tamanho<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Altura\ &Máxima<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ A&ltura\ Mínima<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Larg&ura\ Máxima<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Largura\ Mí&nima<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo &Desfazer
+menutrans Cu&t Recor&tar
+menutrans &Copy &Copiar
+menutrans &Paste Co&lar
+menutrans &Delete &Apagar
+menutrans Select\ Blockwise Seleção\ de\ bloco
+menutrans Select\ &Word Selecionar\ &Palavra
+menutrans Select\ &Line Selecionar\ L&inha
+menutrans Select\ &All Selecionar\ T&udo
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Abrir Arquivo
+ tmenu ToolBar.Save Salvar Arquivo
+ tmenu ToolBar.SaveAll Salvar Todos os arquivos
+ tmenu ToolBar.Print Imprimir
+ tmenu ToolBar.Undo Desfazer
+ tmenu ToolBar.Redo Refazer
+ tmenu ToolBar.Cut Recortar
+ tmenu ToolBar.Copy Copiar
+ tmenu ToolBar.Paste Colar
+ tmenu ToolBar.Find Procurar...
+ tmenu ToolBar.FindNext Procurar Próximo
+ tmenu ToolBar.FindPrev Procurar Anterior
+ tmenu ToolBar.Replace Procurar e Substituir
+ if 0 " disable; these are in the Windoze menu
+ tmenu ToolBar.New Nova Janela
+ tmenu ToolBar.WinSplit Dividir Janela
+ tmenu ToolBar.WinMax Janela Máxima
+ tmenu ToolBar.WinMin Janela Mínima
+ tmenu ToolBar.WinVSplit Dividir Verticalmente
+ tmenu ToolBar.WinMaxWidth Largura Máxima
+ tmenu ToolBar.WinMinWidth Largura Mínima
+ tmenu ToolBar.WinClose Fechar Janela
+ endif
+ tmenu ToolBar.LoadSesn Carregar Sessão
+ tmenu ToolBar.SaveSesn Salvar Sessão
+ tmenu ToolBar.RunScript Executar script
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell Abrir um shell
+ tmenu ToolBar.RunCtags Gerar um arquivo de tags
+ tmenu ToolBar.TagJump Saltar para um tag
+ tmenu ToolBar.Help Ajuda
+ tmenu ToolBar.FindHelp Procurar na Ajuda
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaxe
+"menutrans &Show\ individual\ choices E&xibir\ escolhas\ individuais
+menutrans &Show\ filetypes\ in\ menu E&xibir\ tipos\ de\ arquivos\ no\ menu
+menutrans Set\ '&syntax'\ only Ativar\ somente\ s&intaxe
+menutrans Set\ '&filetype'\ too Ativar\ também\ &tipo\ de\ arquivo
+menutrans &Off &Desativar
+menutrans &Manual &Manual
+menutrans A&utomatic A&utomática
+menutrans on/off\ for\ &This\ file Ativar/Desativar\ neste\ &arquivo
+menutrans Co&lor\ test T&este\ de\ cores
+menutrans &Highlight\ test Teste\ de\ &realce
+menutrans &Convert\ to\ HTML &Converter\ para\ HTML
+
+" 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 opção (ex.: `shiftwidth`)"
diff --git a/runtime/lang/menu_pt_pt.latin1.vim b/runtime/lang/menu_pt_pt.latin1.vim
new file mode 100644
index 000000000..7fc73d14e
--- /dev/null
+++ b/runtime/lang/menu_pt_pt.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Português
+
+source <sfile>:p:h/menu_pt_pt.vim
diff --git a/runtime/lang/menu_pt_pt.utf-8.vim b/runtime/lang/menu_pt_pt.utf-8.vim
new file mode 100644
index 000000000..7fc73d14e
--- /dev/null
+++ b/runtime/lang/menu_pt_pt.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Português
+
+source <sfile>:p:h/menu_pt_pt.vim
diff --git a/runtime/lang/menu_pt_pt.vim b/runtime/lang/menu_pt_pt.vim
new file mode 100644
index 000000000..28b9726ff
--- /dev/null
+++ b/runtime/lang/menu_pt_pt.vim
@@ -0,0 +1,264 @@
+" Menu Translations: Português
+" adaptado de pt_br.
+" Maintainer: Duarte Henriques <duarte_henriques@myrealbox.com>
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" Translations in latin1 (ISO-8859-1), and should work in
+" latin9 (ISO-8859-15)
+
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" Help menu
+menutrans &Help A&juda
+menutrans &Overview<Tab><F1> &Conteúdo
+menutrans &User\ Manual &Manual\ do\ Utilizador
+menutrans &How-to\ links &Como\ fazer?
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans &Credits &Créditos
+menutrans O&rphans &Órfãos
+menutrans Co&pying &Licença
+menutrans &Version &Versão
+menutrans &About &Sobre
+
+" File menu
+menutrans &File &Ficheiro
+menutrans &Open\.\.\.<Tab>:e A&brir\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Abrir\ noutra\ &janela\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Novo<Tab>:enew
+menutrans &Close<Tab>:close &Fechar<Tab>:close
+menutrans &Save<Tab>:w &Guardar<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Gu&ardar\ como\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. &Exibir\ diferenças\ com\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Ex&ibir\ patcheado\ por\.\.\.
+menutrans &Print Im&primir
+menutrans Sa&ve-Exit<Tab>:wqa Gua&rdar\ e\ sair<Tab>:wqa
+menutrans E&xit<Tab>:qa Sai&r<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Editar
+menutrans &Undo<Tab>u &Desfazer<Tab>u
+menutrans &Redo<Tab>^R &Refazer<Tab>u
+menutrans Rep&eat<Tab>\. Repe&tir<Tab>\.
+menutrans Cu&t<Tab>"+x &Cortar<Tab>"+x
+menutrans &Copy<Tab>"+y Cop&iar<Tab>"+y
+menutrans &Paste<Tab>"+gP C&olar<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Colocar\ &antes<Tab>[p
+menutrans Put\ &After<Tab>]p Colocar\ &depois<Tab>]p
+menutrans &Select\ all<Tab>ggVG &Seleccionar\ tudo<Tab>ggVG
+menutrans &Find\.\.\. &Procurar\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Procurar\ e\ substit&uir\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Procurar\ e\ substit&uir<Tab>:%s
+menutrans Find\ and\ Rep&lace Procurar\ e\ substit&uir
+menutrans Find\ and\ Rep&lace<Tab>:s Procurar\ e\ substituir<Tab>:s
+menutrans Settings\ &Window Op&ções
+
+" Edit/Global Settings
+menutrans &Global\ Settings Opções\ &Globais
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Activar/Desactivar\ &Realce\ de\ Padrões<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Activar/Desactivar\ &Ignorar\ maiúsculas<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Activar/Desactivar\ &coincidências<Tab>:set\ sm!
+
+menutrans &Context\ lines Linhas\ de\ C&ontexto
+
+menutrans &Virtual\ Edit Edição\ &Virtual
+menutrans Never Nunca
+menutrans Block\ Selection Seleção\ de\ Bloco
+menutrans Insert\ mode Modo\ de\ inserção
+menutrans Block\ and\ Insert Bloco\ e\ inserção
+menutrans Always Sempre
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Activar/Desactivar\ Modo\ de\ In&serção<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Activar/Desactivar\ Co&mpatibilidade\ com\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Camin&ho\ de\ Busca\.\.\.
+menutrans Ta&g\ Files\.\.\. Arquivos\ de\ Tags\.\.\.
+
+" GUI options
+menutrans Toggle\ &Toolbar Ocultar/Exibir\ Barra\ de\ &Ferramentas
+menutrans Toggle\ &Bottom\ Scrollbar Ocultar/Exibir\ Barra\ de\ &Rolagem\ Inferior
+menutrans Toggle\ &Left\ Scrollbar Ocultar/Exibir\ Barra\ de\ R&olagem\ Esquerda
+menutrans Toggle\ &Right\ Scrollbar Ocultar/Exibir\ Barra\ de\ Ro&lagem\ Direita
+let g:menutrans_path_dialog = "Indique um caminho de procura para os arquivos.\nSepare os nomes dos diretórios com uma vírgula."
+let g:menutrans_tags_dialog = "Indique os nomes dos arquivos de tags.\nSepare os nomes com uma vírgula."
+
+" Edit/File Settings
+menutrans F&ile\ Settings Opções\ do\ &Arquivo
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Activar/Desactivar\ &numeração\ de\ linhas<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Activar/Desactivar\ modo\ &list<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Activar/Desactivar\ &quebra\ de\ linhas<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Activar/Desactivar\ quebra\ na\ &palavra<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Activar/Desactivar\ expansão de tabs<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Activar/Desactivar\ &auto-indentação<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Activar/Desactivar\ indentação estilo &C<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth Largura\ da\ &indentação
+
+menutrans Soft\ &Tabstop &Tabulação\ com\ espaços
+
+menutrans Te&xt\ Width\.\.\. Largura\ do\ te&xto\.\.\.
+let g:menutrans_textwidth_dialog = "Digite a nova largura do texto (0 para desativar a formatação): "
+
+menutrans &File\ Format\.\.\. &Formato\ do\ arquivo\.\.\.
+let g:menutrans_fileformat_dialog = "Selecione o formato para gravar o arquivo"
+
+menutrans C&olor\ Scheme Esquema\ de\ c&ores
+menutrans default padrão
+
+menutrans Select\ Fo&nt\.\.\. Seleccionar\ fo&nte\.\.\.
+
+menutrans &Keymap Mapa\ de\ teclado
+menutrans None Nenhum
+
+" Programming menu
+menutrans &Tools Fe&rramentas
+menutrans &Jump\ to\ this\ tag<Tab>g^] Saltar\ para\ esta\ &tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T &Voltar<Tab>^T
+menutrans Build\ &Tags\ File &Construir\ Arquivo\ de\ tags
+menutrans &Folding &Dobra
+menutrans &Make<Tab>:make &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl &Lista\ de\ erros<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Li&sta\ de\ mensagens<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn P&róximo\ erro<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Erro\ anterior<Tab>:cp
+menutrans &Older\ List<Tab>:cold Listar\ erros\ &antigos<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Listar\ erros\ &novos<Tab>:cnew
+menutrans Error\ &Window &Janela\ de\ erros
+menutrans &Set\ Compiler Def&inir\ Compilador
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Converter\ para\ hexadecimal<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Conver&ter\ de\ volta<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi &Activar/Desactivar\ dobras<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Ver\ linha\ do\ cursor<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ve&r\ somente\ linha\ do\ cursor<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Fechar\ mais\ dobras<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM F&echar\ todas\ as\ dobras<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr A&brir\ mais\ dobras<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Abr&ir\ todas\ as\ dobras<Tab>zR
+" fold method
+menutrans Fold\ Met&hod &Modo\ de\ dobras
+menutrans Create\ &Fold<Tab>zf Criar\ &dobras<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Remover\ d&obras<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Remover\ &todas\ as\ dobras<Tab>zD
+" moving around in folds
+menutrans Fold\ col&umn\ width &Largura\ da\ coluna\ da\ dobra
+
+" Tools.Diff Menu
+menutrans &Update &Actualizar
+menutrans &Get\ Block &Obter\ Bloco
+menutrans &Put\ Block &Pôr\ Bloco
+
+" Tools.Error Menu
+menutrans &Update<Tab>:cwin &Actualizar<Tab>:cwin
+menutrans &Open<Tab>:copen A&brir<Tab>:copen
+menutrans &Close<Tab>:cclose &Fechar<Tab>:cclose
+
+" Names for buffer menu.
+menutrans &Buffers &Buffers
+menutrans &Refresh\ menu A&ctualizar\ menu
+menutrans &Delete &Apagar
+menutrans &Alternate A&lternar
+menutrans &Next P&róximo
+menutrans &Previous A&nterior
+let g:menutrans_no_file = "[Sem arquivos]"
+
+" Window menu
+menutrans &Window &Janela
+menutrans &New<Tab>^Wn N&ova<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Dividir<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ D&ividir\ para\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Dividir\ &verticalmente<Tab>^Wv
+menutrans Split\ File\ E&xplorer &Abrir\ Gerenciador\ de\ arquivos
+menutrans &Close<Tab>^Wc &Fechar<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Fechar\ &outra(s)<Tab>^Wo
+menutrans Move\ &To Mover\ &para
+menutrans &Top<Tab>^WK A&cima<Tab>^WK
+menutrans &Bottom<Tab>^WJ A&baixo<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Lado\ &esquerdo<Tab>^WH
+menutrans &Right\ side<Tab>^WL Lado\ di&reito<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR &Girar\ para\ cima<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Girar\ para\ bai&xo<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= Mesmo\ &Tamanho<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Altura\ &Máxima<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ A&ltura\ Mínima<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Larg&ura\ Máxima<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Largura\ Mí&nima<Tab>^W1\|
+
+" The popup menu
+menutrans &Undo &Desfazer
+menutrans Cu&t Recor&tar
+menutrans &Copy &Copiar
+menutrans &Paste Co&lar
+menutrans &Delete &Apagar
+menutrans Select\ Blockwise Seleção\ de\ bloco
+menutrans Select\ &Word Seleccionar\ &Palavra
+menutrans Select\ &Line Seleccionar\ L&inha
+menutrans Select\ &All Seleccionar\ T&udo
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Abrir Arquivo
+ tmenu ToolBar.Save Salvar Arquivo
+ tmenu ToolBar.SaveAll Salvar Todos os arquivos
+ tmenu ToolBar.Print Imprimir
+ tmenu ToolBar.Undo Desfazer
+ tmenu ToolBar.Redo Refazer
+ tmenu ToolBar.Cut Recortar
+ tmenu ToolBar.Copy Copiar
+ tmenu ToolBar.Paste Colar
+ tmenu ToolBar.Find Procurar...
+ tmenu ToolBar.FindNext Procurar Próximo
+ tmenu ToolBar.FindPrev Procurar Anterior
+ tmenu ToolBar.Replace Procurar e Substituir
+ if 0 " disable; these are in the Windoze menu
+ tmenu ToolBar.New Nova Janela
+ tmenu ToolBar.WinSplit Dividir Janela
+ tmenu ToolBar.WinMax Janela Máxima
+ tmenu ToolBar.WinMin Janela Mínima
+ tmenu ToolBar.WinVSplit Dividir Verticalmente
+ tmenu ToolBar.WinMaxWidth Largura Máxima
+ tmenu ToolBar.WinMinWidth Largura Mínima
+ tmenu ToolBar.WinClose Fechar Janela
+ endif
+ tmenu ToolBar.LoadSesn Carregar Sessão
+ tmenu ToolBar.SaveSesn Salvar Sessão
+ tmenu ToolBar.RunScript Executar script
+ tmenu ToolBar.Make Make
+ tmenu ToolBar.Shell Abrir um shell
+ tmenu ToolBar.RunCtags Gerar um arquivo de tags
+ tmenu ToolBar.TagJump Saltar para um tag
+ tmenu ToolBar.Help Ajuda
+ tmenu ToolBar.FindHelp Procurar na Ajuda
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaxe
+"menutrans &Show\ individual\ choices E&xibir\ escolhas\ individuais
+menutrans &Show\ filetypes\ in\ menu E&xibir\ tipos\ de\ arquivos\ no\ menu
+menutrans Set\ '&syntax'\ only Activar\ somente\ s&intaxe
+menutrans Set\ '&filetype'\ too Activar\ também\ &tipo\ de\ arquivo
+menutrans &Off &Desactivar
+menutrans &Manual &Manual
+menutrans A&utomatic A&utomática
+menutrans on/off\ for\ &This\ file Activar/Desactivar\ neste\ &arquivo
+menutrans Co&lor\ test T&este\ de\ cores
+menutrans &Highlight\ test Teste\ de\ &realce
+menutrans &Convert\ to\ HTML &Converter\ para\ HTML
+
+" 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 opção (ex.: `shiftwidth`)"
diff --git a/runtime/lang/menu_ru.utf-8.vim b/runtime/lang/menu_ru.utf-8.vim
new file mode 100644
index 000000000..20b0b2d5a
--- /dev/null
+++ b/runtime/lang/menu_ru.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Russian
+
+source <sfile>:p:h/menu_ru_ru.vim
diff --git a/runtime/lang/menu_ru_ru.koi8-r.vim b/runtime/lang/menu_ru_ru.koi8-r.vim
new file mode 100644
index 000000000..94d78a79a
--- /dev/null
+++ b/runtime/lang/menu_ru_ru.koi8-r.vim
@@ -0,0 +1,294 @@
+" Menu Translations: Russian
+" Maintainer: vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change: 26 Apr 2004
+" URL: cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
+"
+" $Id$
+"
+" Adopted for RuVim project by Vassily Ragosin.
+" First translation: Tim Alexeevsky <realtim [at] mail.ru>,
+" based on ukrainian translation by Bohdan Vlasyuk <bohdan@vstu.edu.ua>
+"
+"
+" Quit when menu translations have already been done.
+"
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding koi8-r
+
+" Top
+menutrans &File &æÁÊÌ
+menutrans &Edit ð&ÒÁ×ËÁ
+menutrans &Tools &éÎÓÔÒÕÍÅÎÔÙ
+menutrans &Syntax &óÉÎÔÁËÓÉÓ
+menutrans &Buffers &âÕÆÅÒÙ
+menutrans &Window &ïËÎÏ
+menutrans &Help ó&ÐÒÁ×ËÁ
+"
+"
+"
+" Help menu
+menutrans &Overview<Tab><F1> &ïÂÚÏÒ<Tab><F1>
+menutrans &User\ Manual òÕËÏ×Ï&ÄÓÔ×Ï\ ÐÏÌØÚÏ×ÁÔÅÌÑ
+menutrans &How-to\ links &ëÁË\ ÜÔÏ\ ÓÄÅÌÁÔØ\.\.\.
+menutrans &Find\.\.\. &ðÏÉÓË
+"--------------------
+menutrans &Credits &âÌÁÇÏÄÁÒÎÏÓÔÉ
+menutrans Co&pying &òÁÓÐÒÏÓÔÒÁÎÅÎÉÅ
+menutrans &Sponsor/Register ðÏÍÏ&ÝØ/òÅÇÉÓÔÒÁÃÉÑ
+menutrans O&rphans &óÉÒÏÔÙ
+"--------------------
+menutrans &Version &éÎÆÏÒÍÁÃÉÑ\ Ï\ ÐÒÏÇÒÁÍÍÅ
+menutrans &About &úÁÓÔÁ×ËÁ
+"
+"
+" File menu
+menutrans &Open\.\.\.<Tab>:e &ïÔËÒÙÔØ\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ðÏ&ÄÅÌÉÔØ\ ÏËÎÏ\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &îÏ×ÙÊ<Tab>:enew
+menutrans &Close<Tab>:close &úÁËÒÙÔØ<Tab>:close
+"--------------------
+menutrans &Save<Tab>:w &óÏÈÒÁÎÉÔØ<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav óÏÈÒÁÎÉÔØ\ &ËÁË\.\.\.<Tab>:sav
+"--------------------
+menutrans Split\ &Diff\ with\.\.\. óÒ&Á×ÎÉÔØ\ Ó\.\.\.
+menutrans Split\ Patched\ &By\.\.\. óÒÁ×ÎÉÔØ\ Ó\ ÐÒÉÍÅÎÅÎÉÅÍ\ ÚÁÐ&ÌÁÔËÉ\.\.\.
+"--------------------
+menutrans &Print îÁ&ÐÅÞÁÔÁÔØ
+menutrans Sa&ve-Exit<Tab>:wqa ÷Ù&ÈÏÄ\ Ó\ ÓÏÈÒÁÎÅÎÉÅÍ<Tab>:wqa
+menutrans E&xit<Tab>:qa &÷ÙÈÏÄ<Tab>:qa
+"
+"
+" Edit menu
+menutrans &Undo<Tab>u ï&ÔÍÅÎÉÔØ<Tab>u
+menutrans &Redo<Tab>^R ÷&ÅÒÎÕÔØ<Tab>^R
+menutrans Rep&eat<Tab>\. ðÏ×ÔÏÒÉÔ&Ø<Tab>\.
+"--------------------
+menutrans Cu&t<Tab>"+x &÷ÙÒÅÚÁÔØ<Tab>"+x
+menutrans &Copy<Tab>"+y &ëÏÐÉÒÏ×ÁÔØ<Tab>"+y
+menutrans &Paste<Tab>"+gP ÷Ë&ÌÅÉÔØ<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ÷ËÌÅÉÔØ\ ÐÅÒÅ&Ä<Tab>[p
+menutrans Put\ &After<Tab>]p ÷ËÌÅÉÔØ\ ÐÏ&ÓÌÅ<Tab>]p
+menutrans &Delete<Tab>x &õÄÁÌÉÔØ<Tab>x
+menutrans &Select\ All<Tab>ggVG ÷&ÙÄÅÌÉÔØ\ ×Ó£<Tab>ggVG
+"--------------------
+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 Settings\ &Window ïËÎÏ\ ÎÁÓÔÒÏÊËÉ\ &ÏÐÃÉÊ
+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 ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ ÓÐÒ&Á×Á
+">>>->>>------------- Edit/Global settings/Virtual edit
+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 &Shiftwidth ÷ÅÌÉ&ÞÉÎÁ\ ÏÔÓÔÕÐÁ
+menutrans Soft\ &Tabstop ûÉÒÉÎÁ\ &ÔÁÂÕÌÑÃÉÉ
+menutrans Te&xt\ Width\.\.\. &ûÉÒÉÎÁ\ ÔÅËÓÔÁ\.\.\.
+menutrans &File\ Format\.\.\. &æÏÒÍÁÔ\ ÆÁÊÌÁ\.\.\.
+"
+"
+"
+" Tools menu
+menutrans &Jump\ to\ this\ tag<Tab>g^] &ðÅÒÅÈÏÄ\ Ë\ ÍÅÔËÅ<Tab>g^]
+menutrans Jump\ &back<Tab>^T &÷ÅÒÎÕÔØÓÑ\ ÎÁÚÁÄ<Tab>^T
+menutrans Build\ &Tags\ File óÏÚÄÁÔØ\ &ÆÁÊÌ\ ÍÅÔÏË
+"-------------------
+menutrans &Folding òÁÂÏÔÁ\ ÓÏ\ &ÓËÌÁÄËÁÍÉ
+menutrans &Diff &ïÔÌÉÞÉÑ\ (diff)
+"-------------------
+menutrans &Make<Tab>:make ëÏ&ÍÐÉÌÑÃÉÑ<Tab>:make
+menutrans &List\ Errors<Tab>:cl óÐÉÓÏË\ Ï&ÛÉÂÏË<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! óÐÉÓÏË\ ×ÓÅ&È\ ÏÛÉÂÏË\ É\ ÐÒÅÄÕÐÒÅÖÄÅÎÉÊ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn óÌÅÄÕ&ÀÝÁÑ\ ÏÛÉÂËÁ<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ð&ÒÅÄÙÄÕÝÁÑ\ ÏÛÉÂËÁ<Tab>:cp
+menutrans &Older\ List<Tab>:cold âÏÌÅÅ\ ÓÔÁÒ&ÙÊ\ ÓÐÉÓÏË\ ÏÛÉÂÏË<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew âÏÌÅÅ\ Ó×Å&ÖÉÊ\ ÓÐÉÓÏË\ ÏÛÉÂÏË<Tab>:cnew
+menutrans Error\ &Window ïË&ÎÏ\ ÏÛÉÂÏË
+menutrans &Set\ Compiler ÷ÙÂÏÒ\ &ËÏÍÐÉÌÑÔÏÒÁ
+"-------------------
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ð&ÅÒÅ×ÅÓÔÉ\ ×\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ðÅÒÅ×ÅÓÔÉ\ É&Ú\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Folds
+menutrans &Enable/Disable\ folds<Tab>zi ÷ËÌ/×ÙËÌ\ &ÓËÌÁÄËÉ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv ïÔËÒÙÔØ\ ÓÔÒÏËÕ\ Ó\ &ËÕÒÓÏÒÏÍ<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ïÔËÒÙÔØ\ &ÔÏÌØËÏ\ ÓÔÒÏËÕ\ Ó\ ËÕÒÓÏÒÏÍ<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm úÁËÒÙÔØ\ &ÂÏÌØÛÅ\ ÓËÌÁÄÏË<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM úÁËÒÙÔØ\ &×ÓÅ\ ÓËÌÁÄËÉ<Tab>zM
+menutrans &Open\ all\ folds<Tab>zR ïÔËÒ&ÙÔØ\ ×ÓÅ\ ÓËÌÁÄËÉ<Tab>zR
+menutrans O&pen\ more\ folds<Tab>zr ïÔË&ÒÙÔØ\ ÂÏÌØÛÅ\ ÓËÌÁÄÏË<Tab>zr
+menutrans Fold\ Met&hod &íÅÔÏÄ\ ÓËÌÁÄÏË
+menutrans Create\ &Fold<Tab>zf óÏ&ÚÄÁÔØ\ ÓËÌÁÄËÕ<Tab>zf
+menutrans &Delete\ Fold<Tab>zd õ&ÄÁÌÉÔØ\ ÓËÌÁÄËÕ<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD õÄÁÌÉÔØ\ ×Ó&Å\ ÓËÌÁÄËÉ<Tab>zD
+menutrans Fold\ column\ &width &ûÉÒÉÎÁ\ ËÏÌÏÎËÉ\ ÓËÌÁÄÏË
+">>>->>>----------- Tools/Folds/Fold Method
+menutrans M&anual ÷ÒÕ&ÞÎÕÀ
+menutrans I&ndent ï&ÔÓÔÕÐ
+menutrans E&xpression &÷ÙÒÁÖÅÎÉÅ
+menutrans Ma&rker &íÁÒËÅÒÙ
+">>>--------------- Tools/Diff
+menutrans &Update ï&ÂÎÏ×ÉÔØ
+menutrans &Get\ Block éÚÍÅÎÉÔØ\ &ÜÔÏÔ\ ÂÕÆÅÒ
+menutrans &Put\ Block éÚÍÅÎÉÔØ\ &ÄÒÕÇÏÊ\ ÂÕÆÅÒ
+">>>--------------- Tools/Diff/Error window
+menutrans &Update<Tab>:cwin ï&ÂÎÏ×ÉÔØ<Tab>:cwin
+menutrans &Close<Tab>:cclose &úÁËÒÙÔØ<Tab>:cclose
+menutrans &Open<Tab>:copen &ïÔËÒÙÔØ<Tab>:copen
+"
+"
+" Syntax menu
+"
+menutrans &Show\ filetypes\ in\ menu ðÏËÁÚÁÔØ\ ÍÅÎÀ\ ÄÌÑ\ ×ÙÂÏÒÁ\ ÔÉÐÁ\ &ÆÁÊÌÁ
+menutrans Set\ '&syntax'\ only &éÚÍÅÎÑÔØ\ ÔÏÌØËÏ\ ÚÎÁÞÅÎÉÅ\ 'syntax'
+menutrans Set\ '&filetype'\ too éÚÍÅÎÑÔØ\ &ÔÁËÖÅ\ ÚÎÁÞÅÎÉÅ\ 'filetype'
+menutrans &Off &ïÔËÌÀÞÉÔØ
+menutrans A&utomatic &á×ÔÏÍÁÔÉÞÅÓËÉ
+menutrans on/off\ for\ &This\ file ÷ËÌ/×ÙËÌ\ ÄÌÑ\ &ÜÔÏÇÏ\ ÆÁÊÌÁ
+menutrans Co&lor\ test ðÒÏ×ÅÒËÁ\ &Ã×ÅÔÏ×
+menutrans &Highlight\ test ðÒÏ×ÅÒËÁ\ ÐÏÄ&Ó×ÅÔËÉ
+menutrans &Convert\ to\ HTML ó&ÄÅÌÁÔØ\ HTML\ Ó\ ÐÏÄÓ×ÅÔËÏÊ
+"
+"
+" Buffers menu
+"
+menutrans &Refresh\ menu ï&ÂÎÏ×ÉÔØ\ ÍÅÎÀ
+menutrans Delete õ&ÄÁÌÉÔØ
+menutrans &Alternate &óÏÓÅÄÎÉÊ
+menutrans &Next ó&ÌÅÄÕÀÝÉÊ
+menutrans &Previous &ðÒÅÄÙÄÕÝÉÊ
+menutrans [No\ File] [îÅÔ\ ÆÁÊÌÁ]
+"
+"
+" Window menu
+"
+menutrans &New<Tab>^Wn &îÏ×ÏÅ\ ÏËÎÏ<Tab>^Wn
+menutrans S&plit<Tab>^Ws &òÁÚÄÅÌÉÔØ\ ÏËÎÏ<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ïÔËÒÙÔØ\ &ÓÏÓÅÄÎÉÊ\ ÆÁÊÌ\ ×\ ÎÏ×ÏÍ\ ÏËÎÅ<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv òÁÚÄÅÌÉÔØ\ ÐÏ\ &×ÅÒÔÉËÁÌÉ<Tab>^Wv
+menutrans Split\ File\ E&xplorer ïÔËÒÙÔØ\ ÐÒÏ×ÏÄÎÉË\ ÐÏ\ &ÆÁÊÌÏ×ÏÊ\ ÓÉÓÔÅÍÅ
+"
+menutrans &Close<Tab>^Wc &úÁËÒÙÔØ\ ÜÔÏ\ ÏËÎÏ<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo úÁËÒÙÔØ\ &ÏÓÔÁÌØÎÙÅ\ ÏËÎÁ<Tab>^Wo
+"
+menutrans Move\ &To &ðÅÒÅÍÅÓÔÉÔØ
+menutrans Rotate\ &Up<Tab>^WR óÄ×ÉÎÕÔØ\ ××ÅÒ&È<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr óÄ×ÉÎÕÔØ\ ×&ÎÉÚ<Tab>^Wr
+"
+menutrans &Equal\ Size<Tab>^W= ï&ÄÉÎÁËÏ×ÙÊ\ ÒÁÚÍÅÒ<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ íÁËÓÉÍÁÌØÎÁÑ\ ×&ÙÓÏÔÁ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ íÉÎÉÍÁÌØÎÁÑ\ ×ÙÓÏ&ÔÁ<Tab>^W1_
+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 &Bottom<Tab>^WJ ÷&ÎÉÚ<Tab>^WJ
+menutrans &Left\ side<Tab>^WH ÷&ÌÅ×Ï<Tab>^WH
+menutrans &Right\ side<Tab>^WL ÷&ÐÒÁ×Ï<Tab>^WL
+"
+"
+" The popup menu
+"
+"
+menutrans &Undo ï&ÔÍÅÎÉÔØ
+menutrans Cu&t &÷ÙÒÅÚÁÔØ
+menutrans &Copy &ëÏÐÉÒÏ×ÁÔØ
+menutrans &Paste ÷Ë&ÌÅÉÔØ
+menutrans &Delete &õÄÁÌÉÔØ
+menutrans Select\ Blockwise âÌÏËÏ×ÏÅ\ ×ÙÄÅÌÅÎÉÅ
+menutrans Select\ &Word ÷ÙÄÅÌÉÔØ\ &ÓÌÏ×Ï
+menutrans Select\ &Line ÷ÙÄÅÌÉÔØ\ ÓÔ&ÒÏËÕ
+menutrans Select\ &Block ÷ÙÄÅÌÉÔØ\ &ÂÌÏË
+menutrans Select\ &All ÷&ÙÄÅÌÉÔØ\ &×Ó£
+"
+" The GUI toolbar
+"
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ïÔËÒÙÔØ ÆÁÊÌ
+ tmenu ToolBar.Save óÏÈÒÁÎÉÔØ ÆÁÊÌ
+ tmenu ToolBar.SaveAll óÏÈÒÁÎÉÔØ ×ÓÅ ÆÁÊÌÙ
+ tmenu ToolBar.Print îÁÐÅÞÁÔÁÔØ
+ tmenu ToolBar.Undo ïÔÍÅÎÉÔØ
+ tmenu ToolBar.Redo ÷ÅÒÎÕÔØ
+ tmenu ToolBar.Cut ÷ÙÒÅÚÁÔØ
+ tmenu ToolBar.Copy ëÏÐÉÒÏ×ÁÔØ
+ tmenu ToolBar.Paste ÷ËÌÅÉÔØ
+ tmenu ToolBar.Find ðÏÉÓË...
+ tmenu ToolBar.FindNext ðÏÉÓË ÓÌÅÄÕÀÝÅÇÏ ÓÏÏÔ×ÅÔÓÔ×ÉÑ
+ tmenu ToolBar.FindPrev ðÏÉÓË ÐÒÅÄÙÄÕÝÅÇÏ ÓÏÏÔ×ÅÔÓÔ×ÉÑ
+ tmenu ToolBar.Replace úÁÍÅÎÉÔØ...
+ tmenu ToolBar.LoadSesn úÁÇÒÕÚÉÔØ ÓÅÁÎÓ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ
+ tmenu ToolBar.SaveSesn óÏÈÒÁÎÉÔØ ÓÅÁÎÓ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ
+ tmenu ToolBar.RunScript ÷ÙÐÏÌÎÉÔØ ÓÃÅÎÁÒÉÊ Vim
+ tmenu ToolBar.Make ëÏÍÐÉÌÑÃÉÑ
+ tmenu ToolBar.Shell ïÂÏÌÏÞËÁ
+ tmenu ToolBar.RunCtags óÏÚÄÁÔØ ÆÁÊÌ ÍÅÔÏË
+ tmenu ToolBar.TagJump ðÅÒÅÊÔÉ Ë ÍÅÔËÅ
+ tmenu ToolBar.Help óÐÒÁ×ËÁ
+ tmenu ToolBar.FindHelp îÁÊÔÉ ÓÐÒÁ×ËÕ
+ endfun
+endif
+"
+"
+" Dialog texts
+"
+" Find in help dialog
+"
+let g:menutrans_help_dialog = "÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ ÉÌÉ ÓÌÏ×Ï ÄÌÑ ÐÏÉÓËÁ:\n\näÏÂÁ×ØÔÅ i_ ÄÌÑ ÐÏÉÓËÁ ËÏÍÁÎÄ ÒÅÖÉÍÁ ÷ÓÔÁ×ËÉ (ÎÁÐÒÉÍÅÒ, i_CTRL-X)\näÏÂÁ×ØÔÅ c_ ÄÌÑ ÐÏÉÓËÁ ËÏÍÁÎÄ ïÂÙÞÎÏÇÏ ÒÅÖÉÍÁ (ÎÁÐÒÉÍÅÒ, Ó_<Del>)\näÏÂÁ×ØÔÅ ' ÄÌÑ ÐÏÉÓËÁ ÓÐÒÁ×ËÉ ÐÏ ÏÐÃÉÉ (ÎÁÐÒÉÍÅÒ, 'shiftwidth')"
+"
+" Searh path dialog
+"
+let g:menutrans_path_dialog = "õËÁÖÉÔÅ ÐÕÔØ ÄÌÑ ÐÏÉÓËÁ ÆÁÊÌÏ×.\néÍÅÎÁ ËÁÔÁÌÏÇÏ× ÒÁÚÄÅÌÑÀÔÓÑ ÚÁÐÑÔÙÍÉ."
+"
+" Tag files dialog
+"
+let g:menutrans_tags_dialog = "÷×ÅÄÉÔÅ ÉÍÅÎÁ ÆÁÊÌÏ× ÍÅÔÏË (ÞÅÒÅÚ ÚÁÐÑÔÕÀ).\n"
+"
+" Text width dialog
+"
+let g:menutrans_textwidth_dialog = "÷×ÅÄÉÔÅ ÛÉÒÉÎÕ ÔÅËÓÔÁ ÄÌÑ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÑ.\näÌÑ ÏÔÍÅÎÙ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÑ ××ÅÄÉÔÅ 0."
+"
+" File format dialog
+"
+let g:menutrans_fileformat_dialog = "÷ÙÂÅÒÉÔÅ ÆÏÒÍÁÔ ÆÁÊÌÁ."
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nï&ÔÍÅÎÁ"
+"
+let menutrans_no_file = "[îÅÔ ÆÁÊÌÁ]"
diff --git a/runtime/lang/menu_ru_ru.utf-8.vim b/runtime/lang/menu_ru_ru.utf-8.vim
new file mode 100644
index 000000000..20b0b2d5a
--- /dev/null
+++ b/runtime/lang/menu_ru_ru.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Russian
+
+source <sfile>:p:h/menu_ru_ru.vim
diff --git a/runtime/lang/menu_ru_ru.vim b/runtime/lang/menu_ru_ru.vim
new file mode 100644
index 000000000..d471fd5ef
--- /dev/null
+++ b/runtime/lang/menu_ru_ru.vim
@@ -0,0 +1,296 @@
+" Menu Translations: Russian
+" Maintainer: vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change: 26 Apr 2004
+" URL: cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
+"
+" $Id$
+"
+" Adopted for RuVim project by Vassily Ragosin.
+" First translation: Tim Alexeevsky <realtim [at] mail.ru>,
+" based on ukrainian translation by Bohdan Vlasyuk <bohdan@vstu.edu.ua>
+"
+"
+" Quit when menu translations have already been done.
+"
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding utf-8
+
+" Top
+menutrans &File &Файл
+menutrans &Edit П&равка
+menutrans &Tools &ИнÑтрументы
+menutrans &Syntax &СинтакÑиÑ
+menutrans &Buffers &Буферы
+menutrans &Window &Окно
+menutrans &Help С&правка
+"
+"
+"
+" Help menu
+menutrans &Overview<Tab><F1> &Обзор<Tab><F1>
+menutrans &User\ Manual Руково&дÑтво\ пользователÑ
+menutrans &How-to\ links &Как\ Ñто\ Ñделать\.\.\.
+menutrans &Find\.\.\. &ПоиÑк
+"--------------------
+menutrans &Credits &БлагодарноÑти
+menutrans Co&pying &РаÑпроÑтранение
+menutrans &Sponsor/Register Помо&щь/РегиÑтрациÑ
+menutrans O&rphans &Сироты
+"--------------------
+menutrans &Version &ИнформациÑ\ о\ программе
+menutrans &About &ЗаÑтавка
+"
+"
+" File menu
+menutrans &Open\.\.\.<Tab>:e &Открыть\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp По&делить\ окно\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Ðовый<Tab>:enew
+menutrans &Close<Tab>:close &Закрыть<Tab>:close
+"--------------------
+menutrans &Save<Tab>:w &Сохранить<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Сохранить\ &как\.\.\.<Tab>:sav
+"--------------------
+menutrans Split\ &Diff\ with\.\.\. Ср&авнить\ Ñ\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Сравнить\ Ñ\ применением\ зап&латки\.\.\.
+"--------------------
+menutrans &Print Ðа&печатать
+menutrans Sa&ve-Exit<Tab>:wqa Ð’Ñ‹&ход\ Ñ\ Ñохранением<Tab>:wqa
+menutrans E&xit<Tab>:qa &Выход<Tab>:qa
+"
+"
+" Edit menu
+menutrans &Undo<Tab>u О&тменить<Tab>u
+menutrans &Redo<Tab>^R В&ернуть<Tab>^R
+menutrans Rep&eat<Tab>\. Повторит&ь<Tab>\.
+"--------------------
+menutrans Cu&t<Tab>"+x &Вырезать<Tab>"+x
+menutrans &Copy<Tab>"+y &Копировать<Tab>"+y
+menutrans &Paste<Tab>"+gP Вк&леить<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Вклеить\ пере&д<Tab>[p
+menutrans Put\ &After<Tab>]p Вклеить\ по&Ñле<Tab>]p
+menutrans &Delete<Tab>x &Удалить<Tab>x
+menutrans &Select\ All<Tab>ggVG Ð’&ыделить\ вÑÑ‘<Tab>ggVG
+"--------------------
+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 Settings\ &Window Окно\ наÑтройки\ &опций
+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 ПолоÑа\ прокрутки\ Ñпр&ава
+">>>->>>------------- Edit/Global settings/Virtual edit
+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 &Shiftwidth Вели&чина\ отÑтупа
+menutrans Soft\ &Tabstop Ширина\ &табулÑции
+menutrans Te&xt\ Width\.\.\. &Ширина\ текÑта\.\.\.
+menutrans &File\ Format\.\.\. &Формат\ файла\.\.\.
+"
+"
+"
+" Tools menu
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Переход\ к\ метке<Tab>g^]
+menutrans Jump\ &back<Tab>^T &ВернутьÑÑ\ назад<Tab>^T
+menutrans Build\ &Tags\ File Создать\ &файл\ меток
+"-------------------
+menutrans &Folding Работа\ Ñо\ &Ñкладками
+menutrans &Diff &ОтличиÑ\ (diff)
+"-------------------
+menutrans &Make<Tab>:make Ко&мпилÑциÑ<Tab>:make
+menutrans &List\ Errors<Tab>:cl СпиÑок\ о&шибок<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! СпиÑок\ вÑе&Ñ…\ ошибок\ и\ предупреждений<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Следу&ющаÑ\ ошибка<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp П&редыдущаÑ\ ошибка<Tab>:cp
+menutrans &Older\ List<Tab>:cold Более\ Ñтар&ый\ ÑпиÑок\ ошибок<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Более\ Ñве&жий\ ÑпиÑок\ ошибок<Tab>:cnew
+menutrans Error\ &Window Ок&но\ ошибок
+menutrans &Set\ Compiler Выбор\ &компилÑтора
+"-------------------
+menutrans &Convert\ to\ HEX<Tab>:%!xxd П&еревеÑти\ в\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ПеревеÑти\ и&з\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Folds
+menutrans &Enable/Disable\ folds<Tab>zi Вкл/выкл\ &Ñкладки<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv Открыть\ Ñтроку\ Ñ\ &курÑором<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Открыть\ &только\ Ñтроку\ Ñ\ курÑором<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Закрыть\ &больше\ Ñкладок<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Закрыть\ &вÑе\ Ñкладки<Tab>zM
+menutrans &Open\ all\ folds<Tab>zR Откр&Ñ‹Ñ‚ÑŒ\ вÑе\ Ñкладки<Tab>zR
+menutrans O&pen\ more\ folds<Tab>zr Отк&рыть\ больше\ Ñкладок<Tab>zr
+menutrans Fold\ Met&hod &Метод\ Ñкладок
+menutrans Create\ &Fold<Tab>zf Со&здать\ Ñкладку<Tab>zf
+menutrans &Delete\ Fold<Tab>zd У&далить\ Ñкладку<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Удалить\ вÑ&е\ Ñкладки<Tab>zD
+menutrans Fold\ col&umn\ width &Ширина\ колонки\ Ñкладок
+">>>->>>----------- Tools/Folds/Fold Method
+menutrans M&anual Вру&чную
+menutrans I&ndent О&Ñ‚Ñтуп
+menutrans E&xpression &Выражение
+menutrans S&yntax &СинтакÑиÑ
+menutrans Ma&rker &Маркеры
+">>>--------------- Tools/Diff
+menutrans &Update О&бновить
+menutrans &Get\ Block Изменить\ &Ñтот\ буфер
+menutrans &Put\ Block Изменить\ &другой\ буфер
+">>>--------------- Tools/Diff/Error window
+menutrans &Update<Tab>:cwin О&бновить<Tab>:cwin
+menutrans &Close<Tab>:cclose &Закрыть<Tab>:cclose
+menutrans &Open<Tab>:copen &Открыть<Tab>:copen
+"
+"
+" Syntax menu
+"
+menutrans &Show\ filetypes\ in\ menu Показать\ меню\ длÑ\ выбора\ типа\ &файла
+menutrans Set\ '&syntax'\ only &ИзменÑÑ‚ÑŒ\ только\ значение\ 'syntax'
+menutrans Set\ '&filetype'\ too ИзменÑÑ‚ÑŒ\ &также\ значение\ 'filetype'
+menutrans &Off &Отключить
+menutrans &Manual Вру&чную
+menutrans A&utomatic &ÐвтоматичеÑки
+menutrans on/off\ for\ &This\ file Вкл/выкл\ длÑ\ &Ñтого\ файла
+menutrans Co&lor\ test Проверка\ &цветов
+menutrans &Highlight\ test Проверка\ под&Ñветки
+menutrans &Convert\ to\ HTML С&делать\ HTML\ Ñ\ подÑветкой
+"
+"
+" Buffers menu
+"
+menutrans &Refresh\ menu О&бновить\ меню
+menutrans Delete У&далить
+menutrans &Alternate &СоÑедний
+menutrans &Next С&ледующий
+menutrans &Previous &Предыдущий
+menutrans [No\ File] [Ðет\ файла]
+"
+"
+" Window menu
+"
+menutrans &New<Tab>^Wn &Ðовое\ окно<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Разделить\ окно<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Открыть\ &ÑоÑедний\ файл\ в\ новом\ окне<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Разделить\ по\ &вертикали<Tab>^Wv
+menutrans Split\ File\ E&xplorer Открыть\ проводник\ по\ &файловой\ ÑиÑтеме
+"
+menutrans &Close<Tab>^Wc &Закрыть\ Ñто\ окно<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Закрыть\ &оÑтальные\ окна<Tab>^Wo
+"
+menutrans Move\ &To &ПеремеÑтить
+menutrans Rotate\ &Up<Tab>^WR Сдвинуть\ ввер&х<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Сдвинуть\ в&низ<Tab>^Wr
+"
+menutrans &Equal\ Size<Tab>^W= О&динаковый\ размер<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ МакÑимальнаÑ\ в&Ñ‹Ñота<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ МинимальнаÑ\ выÑо&та<Tab>^W1_
+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 &Bottom<Tab>^WJ В&низ<Tab>^WJ
+menutrans &Left\ side<Tab>^WH В&лево<Tab>^WH
+menutrans &Right\ side<Tab>^WL В&право<Tab>^WL
+"
+"
+" The popup menu
+"
+"
+menutrans &Undo О&тменить
+menutrans Cu&t &Вырезать
+menutrans &Copy &Копировать
+menutrans &Paste Вк&леить
+menutrans &Delete &Удалить
+menutrans Select\ Blockwise Блоковое\ выделение
+menutrans Select\ &Word Выделить\ &Ñлово
+menutrans Select\ &Line Выделить\ ÑÑ‚&року
+menutrans Select\ &Block Выделить\ &блок
+menutrans Select\ &All Ð’&ыделить\ &вÑÑ‘
+"
+" The GUI toolbar
+"
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Открыть файл
+ tmenu ToolBar.Save Сохранить файл
+ tmenu ToolBar.SaveAll Сохранить вÑе файлы
+ tmenu ToolBar.Print Ðапечатать
+ tmenu ToolBar.Undo Отменить
+ tmenu ToolBar.Redo Вернуть
+ tmenu ToolBar.Cut Вырезать
+ tmenu ToolBar.Copy Копировать
+ tmenu ToolBar.Paste Вклеить
+ tmenu ToolBar.Find ПоиÑк...
+ tmenu ToolBar.FindNext ПоиÑк Ñледующего ÑоответÑтвиÑ
+ tmenu ToolBar.FindPrev ПоиÑк предыдущего ÑоответÑтвиÑ
+ tmenu ToolBar.Replace Заменить...
+ tmenu ToolBar.LoadSesn Загрузить ÑÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
+ tmenu ToolBar.SaveSesn Сохранить ÑÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
+ tmenu ToolBar.RunScript Выполнить Ñценарий Vim
+ tmenu ToolBar.Make КомпилÑциÑ
+ tmenu ToolBar.Shell Оболочка
+ tmenu ToolBar.RunCtags Создать файл меток
+ tmenu ToolBar.TagJump Перейти к метке
+ tmenu ToolBar.Help Справка
+ tmenu ToolBar.FindHelp Ðайти Ñправку
+ endfun
+endif
+"
+"
+" Dialog texts
+"
+" Find in help dialog
+"
+let g:menutrans_help_dialog = "Введите команду или Ñлово Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка:\n\nДобавьте i_ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка команд режима Ð’Ñтавки (например, i_CTRL-X)\nДобавьте c_ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка команд Обычного режима (например, Ñ_<Del>)\nДобавьте ' Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка Ñправки по опции (например, 'shiftwidth')"
+"
+" Searh path dialog
+"
+let g:menutrans_path_dialog = "Укажите путь Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка файлов.\nИмена каталогов разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтыми."
+"
+" Tag files dialog
+"
+let g:menutrans_tags_dialog = "Введите имена файлов меток (через запÑтую).\n"
+"
+" Text width dialog
+"
+let g:menutrans_textwidth_dialog = "Введите ширину текÑта Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ.\nÐ”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð²ÐµÐ´Ð¸Ñ‚Ðµ 0."
+"
+" File format dialog
+"
+let g:menutrans_fileformat_dialog = "Выберите формат файла."
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nО&тмена"
+"
+let menutrans_no_file = "[Ðет файла]"
diff --git a/runtime/lang/menu_sk.cp1250.vim b/runtime/lang/menu_sk.cp1250.vim
new file mode 100644
index 000000000..51b49b84b
--- /dev/null
+++ b/runtime/lang/menu_sk.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Slovak
+
+source <sfile>:p:h/menu_slovak_slovak_republic.1250.vim
diff --git a/runtime/lang/menu_sk_sk.1250.vim b/runtime/lang/menu_sk_sk.1250.vim
new file mode 100644
index 000000000..5fe378d70
--- /dev/null
+++ b/runtime/lang/menu_sk_sk.1250.vim
@@ -0,0 +1,6 @@
+" Menu Translations: Slovak
+" Translated By: Martin Lacko <lacko@host.sk>
+" Last Change: 2003 May 11
+" This is redirection to slovak menu-translations file
+
+source <sfile>:p:h/menu_slovak_slovak_republic.1250.vim
diff --git a/runtime/lang/menu_sk_sk.cp1250.vim b/runtime/lang/menu_sk_sk.cp1250.vim
new file mode 100644
index 000000000..51b49b84b
--- /dev/null
+++ b/runtime/lang/menu_sk_sk.cp1250.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Slovak
+
+source <sfile>:p:h/menu_slovak_slovak_republic.1250.vim
diff --git a/runtime/lang/menu_sk_sk.iso_8859-2.vim b/runtime/lang/menu_sk_sk.iso_8859-2.vim
new file mode 100644
index 000000000..bace7d239
--- /dev/null
+++ b/runtime/lang/menu_sk_sk.iso_8859-2.vim
@@ -0,0 +1,232 @@
+" Menu Translations: Slovak
+" Translated By: Martin Lacko <lacko@host.sk>
+" Last Change: 2003 Mar 30
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding iso-8859-2
+
+" Help menu
+menutrans &Help &Pomocník
+menutrans &Overview<Tab><F1> &Prehµad<Tab><F1>
+menutrans &User\ Manual Po&u¾ívateµský\ manuál
+menutrans &How-to\ links &Tipy
+menutrans &Find\.\.\. &Nájs»\.\.\.
+menutrans &Credits Poï&akovanie
+menutrans O&rphans Si&roty
+menutrans Co&pying &Licencia
+menutrans &Version &Verzia
+menutrans &About &O\ programe
+
+" File menu
+menutrans &File &Súbor
+menutrans &Open\.\.\.<Tab>:e &Otvori»\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Ot&vori»\ v\ novom\ okne\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nový<Tab>:enew
+menutrans &Close<Tab>:close &Zatvori»<Tab>:close
+menutrans &Save<Tab>:w &Ulo¾i»<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Ulo¾i»\ &ako\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Otvor&i»\ porovnanie\ v\ novom\ okne\ s\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Otvo&ri»\ aktualizované\ s\.\.\.
+menutrans &Print &Tlaè
+menutrans Sa&ve-Exit<Tab>:wqa U&lo¾i»-Koniec<Tab>:wqa
+menutrans E&xit<Tab>:qa &Koniec<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Úpravy
+menutrans &Undo<Tab>u &Spä»<Tab>u
+menutrans &Redo<Tab>^R Z&ru¹i»\ spä»<Tab>^R
+menutrans Rep&eat<Tab>\. &Opakova»<Tab>\.
+menutrans Cu&t<Tab>"+x &Vystrihnú»<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopírova»<Tab>"+y
+menutrans &Paste<Tab>"+gP V&lo¾i»<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Vlo¾i»\ &pred<Tab>[p
+menutrans Put\ &After<Tab>]p Vlo¾i»\ za<Tab>]p
+menutrans &Select\ all<Tab>ggVG Vy&bra»\ v¹etko<Tab>ggVG
+menutrans &Delete<Tab>x Vy&maza»<Tab>x
+menutrans &Find\.\.\. &Nájs»\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. N&ahradi»\.\.\.
+menutrans Settings\ &Window Mo&¾nosti
+menutrans &Global\ Settings &Globálne mo¾nosti
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Prepnú»\ paletu\ zvýrazòovania<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Prepnú»\ &ignorovanie veµkosti<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Prepnú»\ &ukáza»\ zhodu<Tab>:set\ sm!
+menutrans &Context\ lines &Kontextové\ riadky
+menutrans &Virtual\ Edit &Virtuálne úpravy
+menutrans Never Nikdy
+menutrans Block\ Selection Blokový\ výber
+menutrans Insert\ mode Re¾im\ vkladania
+menutrans Block\ and\ Insert Blok\ a\ vkladanie
+menutrans Always V¾dy
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Prepnú»\ re¾i&m\ vkladania<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Prepnú»\ vi\ kompatibilitu<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Cesta\ &hµadania\.\.\.
+menutrans Ta&g\ Files\.\.\. Ta&gové súbory\.\.\.
+menutrans Toggle\ &Toolbar Prepnú»\ &panel
+menutrans Toggle\ &Bottom\ Scrollbar Prepnú»\ spodný\ posuvník
+menutrans Toggle\ &Left\ Scrollbar Prepnú»\ µavý\ posuvník
+menutrans Toggle\ &Right\ Scrollbar Prepnú»\ pravý\ posuvník
+menutrans F&ile\ Settings Nastavenia\ súboru
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Prepnú»\ èíslova&nie\ riadkov<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Prepnú»\ re¾im\ &zoznamu<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Prepnú»\ z&alamovanie\ riadkov<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Prepnú»\ za&lamovanie\ slov<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Prepnú»\ roz¹ír&ené\ tabulátory<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Prepnú»\ automatické\ &odsadzovanie<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Prepnú»\ &C-odsadzovanie<Tab>:set\ cin!
+menutrans &Shiftwidth &©írka\ ¹iftu
+menutrans Soft\ &Tabstop &Softvérový\ tabulátor
+menutrans Te&xt\ Width\.\.\. ©írka\ te&xtu\.\.\.
+menutrans &File\ Format\.\.\. &Formát\ súboru\.\.\.
+menutrans C&olor\ Scheme Far&ebná\ schéma
+
+" Programming menu
+menutrans &Tools &Nástroje
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Skoèi»\ na\ znaèku<Tab>g^]
+menutrans Jump\ &back<Tab>^T Sk&oèi»\ spä»<Tab>^T
+menutrans Build\ &Tags\ File &Vytvori»\ súbor\ znaèiek
+menutrans &Folding &Vnáranie
+menutrans &Enable/Disable\ folds<Tab>zi Zapnú»/Vypnú»\ vnárani&e<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv Zobrazi»\ kurzoro&vý\ riadok<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Zobrazi»\ iba\ kurzorový\ riadok<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Zatvori»\ viac \vnorení<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Zatvor&i»\ v¹etky\ vnorenia<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr O&tvori»\ viac\ vnorení<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Otvori»\ v¹etky\ vnorenia<Tab>zR
+menutrans Fold\ Met&hod Metó&da\ vnárania
+menutrans M&anual M&anuálne
+menutrans I&ndent Odsade&nie
+menutrans E&xpression &Výraz
+menutrans S&yntax S&yntax
+menutrans &Diff Roz&diel
+menutrans Ma&rker Zna&èkovaè
+menutrans Create\ &Fold<Tab>zf Vyt&vori»\ vnorenie<Tab>zf
+menutrans &Delete\ Fold<Tab>zd V&ymaza»\ vnorenie<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Vymaza»\ v¹etky\ vnorenia<Tab>zD
+menutrans Fold\ column\ &width ©írka\ &vkladaného\ ståpca
+menutrans &Diff &Rozdiely
+menutrans &Update Akt&ualizova»
+menutrans &Get\ Block Zob&ra»\ blok
+menutrans &Put\ Block &Vlo¾i»\ blok
+menutrans Error\ &Window Chybové\ &okno
+menutrans &Update<Tab>:cwin Akt&ualizova»<Tab>:cwin
+menutrans &Open<Tab>:copen &Otvori»<Tab>:copen
+menutrans &Close<Tab>:cclose &Zatvori»<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd &Konvertova»\ do\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Konve&rtova»\ spä»<Tab>:%!xxd\ -r
+menutrans &Make<Tab>:make &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl Výpis\ &chýb<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Výp&is\ správ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Ïa&l¹ia\ chyba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Predchádzajúca\ chyba<Tab>:cp
+menutrans &Older\ List<Tab>:cold Sta&r¹í\ zoznam<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Nov¹í\ &zoznam<Tab>:cnew
+menutrans Error\ &Window<Tab>:cwin Chybové\ o&kno<Tab>:cwin
+menutrans &Set\ Compiler Vyberte\ k&ompilátor
+menutrans Convert\ to\ HEX<Tab>:%!xxd Prvies»\ do\ ¹es&tnástkového\ formátu<Tab>:%!xxd
+menutrans Convert\ back<Tab>:%!xxd\ -r Pr&evies»\ spä»<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &Vyrovnávacia\ pamä»
+menutrans &Refresh\ menu Obnovi»
+menutrans &Delete Vymaza»
+menutrans &Alternate Zmeni»
+menutrans &Next Ï&al¹ia
+menutrans &Previous &Predchádzajúca
+menutrans [No File] [®iadny\ súbor]
+
+" Window menu
+menutrans &Window &Okná
+menutrans &New<Tab>^Wn &Nové<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Rozdeli»<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Ro&zdeli»\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Rozdeli»\ &vertikálne<Tab>^Wv
+menutrans Split\ File\ E&xplorer Otvori»\ pri&eskumníka
+menutrans &Close<Tab>^Wc Zatvor&i»<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zatvori»\ i&né<Tab>^Wo
+menutrans Move\ &To Presunú&»
+menutrans &Top<Tab>^WK Na&hor<Tab>^WK
+menutrans &Bottom<Tab>^WJ Nado&l<Tab>^WJ
+menutrans &Left\ side<Tab>^WH V&µavo<Tab>^WJ
+menutrans &Right\ side<Tab>^WL Vprav&o<Tab>^WL
+menutrans Ne&xt<Tab>^Ww Ï&al¹ie<Tab>^Ww
+menutrans P&revious<Tab>^WW &Predchádzajúce<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= Rovnaká\ vý¹&ka<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maximálna\ vý¹ka<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Minimálna\ vý&¹ka<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maximálna\ ¹írka<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimálna ¹irka<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR Rotova&»\ nahor<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotova»\ na&dol<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Vy&bra»\ písmo\.\.\.
+
+" The popup menu
+menutrans &Undo &Spä»
+menutrans Cu&t &Vystrihnú»
+menutrans &Copy &Kopírova»
+menutrans &Paste V&lo¾i»
+menutrans &Delete V&ymaza»
+menutrans Select\ Blockwise Vybra»\ blokovo
+menutrans Select\ &Word Vybra»\ sl&ovo
+menutrans Select\ &Line Vybra»\ &riadok
+menutrans Select\ &Block Vybra»\ &blok
+menutrans Select\ &All Vybra»\ v¹&etko
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Otvori» súbor
+ tmenu ToolBar.Save Ulo¾i» súbor
+ tmenu ToolBar.SaveAll Ulo¾i» v¹etky
+ tmenu ToolBar.Print Tlaè
+ tmenu ToolBar.Undo Spä»
+ tmenu ToolBar.Redo Opakova»
+ tmenu ToolBar.Cut Vystrihnú»
+ tmenu ToolBar.Copy Kopírova»
+ tmenu ToolBar.Paste Vlo¾i»
+ tmenu ToolBar.Find Nájs»...
+ tmenu ToolBar.FindNext Nájs» ïal¹ie
+ tmenu ToolBar.FindPrev Nájs» predchádzajúce
+ tmenu ToolBar.Replace Nahradi»...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nové okno
+ tmenu ToolBar.WinSplit Rozdeli» okno
+ tmenu ToolBar.WinMax Maximalizova» okno
+ tmenu ToolBar.WinMin Minimalizova» okno
+ tmenu ToolBar.WinVSplit Rozdeli» okno vertikálne
+ tmenu ToolBar.WinMaxWidth Maximalizova» ¹írku okna
+ tmenu ToolBar.WinMinWidth Minimalizova» ¹írku okna
+ tmenu ToolBar.WinClose Zatvori» okno
+ endif
+ tmenu ToolBar.LoadSesn Naèíta» sedenie
+ tmenu ToolBar.SaveSesn Ulo¾i» sedenie
+ tmenu ToolBar.RunScript Spusti» skript
+ tmenu ToolBar.Make Spusti» make
+ tmenu ToolBar.Shell Spusti» ¹el
+ tmenu ToolBar.RunCtags Spusti» ctags
+ tmenu ToolBar.TagJump Skoèi» na tag pod kurzorom
+ tmenu ToolBar.Help Pomocník
+ tmenu ToolBar.FindHelp Nájs» pomocníka k...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Syntax
+menutrans Set\ '&syntax'\ only Nastavi»\ iba\ 'syntax'
+menutrans Set\ '&filetype'\ too Nastavi»\ aj\ 'filetype'
+menutrans &Off &Vypnú»
+menutrans &Manual &Ruène
+menutrans A&utomatic A&utomaticky
+" menutrans o&n\ (this\ file) &Zapnú»\ (pre\ tento\ súbor)
+" menutrans o&ff\ (this\ file) Vyp&nú»\ (pre\ tento\ súbor )
+menutrans on/off\ for\ &This\ file Zapnú»/vypnú»\ pre\ &tento\ súbor
+menutrans Co&lor\ test Test\ &farieb
+menutrans &Highlight\ test &Test\ zvýrazòovania
+menutrans &Convert\ to\ HTML &Previes»\ do\ HTML
diff --git a/runtime/lang/menu_sk_sk.vim b/runtime/lang/menu_sk_sk.vim
new file mode 100644
index 000000000..0a7504d3e
--- /dev/null
+++ b/runtime/lang/menu_sk_sk.vim
@@ -0,0 +1,9 @@
+" Menu Translations: Slovak
+" Translated By: Martin Lacko <lacko@host.sk>
+" Last Change: 2002 May 27
+
+if has("win32") || has("win16") || has("dos16") || has("dos32")
+ source <sfile>:p:h/menu_sk_sk.1250.vim
+else
+ source <sfile>:p:h/menu_sk_sk.iso_8859-2.vim
+endif
diff --git a/runtime/lang/menu_slovak_slovak_republic.1250.vim b/runtime/lang/menu_slovak_slovak_republic.1250.vim
new file mode 100644
index 000000000..950aea94d
--- /dev/null
+++ b/runtime/lang/menu_slovak_slovak_republic.1250.vim
@@ -0,0 +1,232 @@
+" Menu Translations: Slovak
+" Translated By: Martin Lacko <lacko@host.sk>
+" Last Change: 2003 Mar 30
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp1250
+
+" Help menu
+menutrans &Help &Pomocník
+menutrans &Overview<Tab><F1> &Preh¾ad<Tab><F1>
+menutrans &User\ Manual Po&užívate¾ský\ manuál
+menutrans &How-to\ links &Tipy
+menutrans &Find\.\.\. &Nájs\.\.\.
+menutrans &Credits Poï&akovanie
+menutrans O&rphans Si&roty
+menutrans Co&pying &Licencia
+menutrans &Version &Verzia
+menutrans &About &O\ programe
+
+" File menu
+menutrans &File &Súbor
+menutrans &Open\.\.\.<Tab>:e &Otvori\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Ot&vori\ v\ novom\ okne\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nový<Tab>:enew
+menutrans &Close<Tab>:close &Zatvori<Tab>:close
+menutrans &Save<Tab>:w &Uloži<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Uloži\ &ako\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Otvor&i\ porovnanie\ v\ novom\ okne\ s\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Otvo&ri\ aktualizované\ s\.\.\.
+menutrans &Print &Tlaè
+menutrans Sa&ve-Exit<Tab>:wqa U&loži-Koniec<Tab>:wqa
+menutrans E&xit<Tab>:qa &Koniec<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Úpravy
+menutrans &Undo<Tab>u &Spä<Tab>u
+menutrans &Redo<Tab>^R Z&ruši\ spä<Tab>^R
+menutrans Rep&eat<Tab>\. &Opakova<Tab>\.
+menutrans Cu&t<Tab>"+x &Vystrihnú<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopírova<Tab>"+y
+menutrans &Paste<Tab>"+gP V&loži<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Vloži\ &pred<Tab>[p
+menutrans Put\ &After<Tab>]p Vloži\ za<Tab>]p
+menutrans &Select\ all<Tab>ggVG Vy&bra\ všetko<Tab>ggVG
+menutrans &Delete<Tab>x Vy&maza<Tab>x
+menutrans &Find\.\.\. &Nájs\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. N&ahradi\.\.\.
+menutrans Settings\ &Window Mo&žnosti
+menutrans &Global\ Settings &Globálne možnosti
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Prepnú\ paletu\ zvýrazòovania<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Prepnú\ &ignorovanie ve¾kosti<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Prepnú\ &ukáza\ zhodu<Tab>:set\ sm!
+menutrans &Context\ lines &Kontextové\ riadky
+menutrans &Virtual\ Edit &Virtuálne úpravy
+menutrans Never Nikdy
+menutrans Block\ Selection Blokový\ výber
+menutrans Insert\ mode Režim\ vkladania
+menutrans Block\ and\ Insert Blok\ a\ vkladanie
+menutrans Always Vždy
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Prepnú\ reži&m\ vkladania<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! Prepnú\ vi\ kompatibilitu<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Cesta\ &h¾adania\.\.\.
+menutrans Ta&g\ Files\.\.\. Ta&gové súbory\.\.\.
+menutrans Toggle\ &Toolbar Prepnú\ &panel
+menutrans Toggle\ &Bottom\ Scrollbar Prepnú\ spodný\ posuvník
+menutrans Toggle\ &Left\ Scrollbar Prepnú\ ¾avý\ posuvník
+menutrans Toggle\ &Right\ Scrollbar Prepnú\ pravý\ posuvník
+menutrans F&ile\ Settings Nastavenia\ súboru
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Prepnú\ èíslova&nie\ riadkov<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Prepnú\ režim\ &zoznamu<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Prepnú\ z&alamovanie\ riadkov<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Prepnú\ za&lamovanie\ slov<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Prepnú\ rozšír&ené\ tabulátory<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Prepnú\ automatické\ &odsadzovanie<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Prepnú\ &C-odsadzovanie<Tab>:set\ cin!
+menutrans &Shiftwidth &Šírka\ šiftu
+menutrans Soft\ &Tabstop &Softvérový\ tabulátor
+menutrans Te&xt\ Width\.\.\. Šírka\ te&xtu\.\.\.
+menutrans &File\ Format\.\.\. &Formát\ súboru\.\.\.
+menutrans C&olor\ Scheme Far&ebná\ schéma
+
+" Programming menu
+menutrans &Tools &Nástroje
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Skoèi\ na\ znaèku<Tab>g^]
+menutrans Jump\ &back<Tab>^T Sk&oèi\ spä<Tab>^T
+menutrans Build\ &Tags\ File &Vytvori\ súbor\ znaèiek
+menutrans &Folding &Vnáranie
+menutrans &Enable/Disable\ folds<Tab>zi Zapnú/Vypnú\ vnárani&e<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv Zobrazi\ kurzoro&vý\ riadok<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Zobrazi\ iba\ kurzorový\ riadok<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Zatvori\ viac \vnorení<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Zatvor&i\ všetky\ vnorenia<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr O&tvori\ viac\ vnorení<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR &Otvori\ všetky\ vnorenia<Tab>zR
+menutrans Fold\ Met&hod Metó&da\ vnárania
+menutrans M&anual M&anuálne
+menutrans I&ndent Odsade&nie
+menutrans E&xpression &Výraz
+menutrans S&yntax S&yntax
+menutrans &Diff Roz&diel
+menutrans Ma&rker Zna&èkovaè
+menutrans Create\ &Fold<Tab>zf Vyt&vori\ vnorenie<Tab>zf
+menutrans &Delete\ Fold<Tab>zd V&ymaza\ vnorenie<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Vymaza\ všetky\ vnorenia<Tab>zD
+menutrans Fold\ column\ &width Šírka\ &vkladaného\ ståpca
+menutrans &Diff &Rozdiely
+menutrans &Update Akt&ualizova
+menutrans &Get\ Block Zob&ra\ blok
+menutrans &Put\ Block &Vloži\ blok
+menutrans Error\ &Window Chybové\ &okno
+menutrans &Update<Tab>:cwin Akt&ualizova<Tab>:cwin
+menutrans &Open<Tab>:copen &Otvori<Tab>:copen
+menutrans &Close<Tab>:cclose &Zatvori<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd &Konvertova\ do\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Konve&rtova\ spä<Tab>:%!xxd\ -r
+menutrans &Make<Tab>:make &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl Výpis\ &chýb<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Výp&is\ správ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Ïa&lšia\ chyba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &Predchádzajúca\ chyba<Tab>:cp
+menutrans &Older\ List<Tab>:cold Sta&rší\ zoznam<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Novší\ &zoznam<Tab>:cnew
+menutrans Error\ &Window<Tab>:cwin Chybové\ o&kno<Tab>:cwin
+menutrans &Set\ Compiler Vyberte\ k&ompilátor
+menutrans Convert\ to\ HEX<Tab>:%!xxd Prvies\ do\ šes&tnástkového\ formátu<Tab>:%!xxd
+menutrans Convert\ back<Tab>:%!xxd\ -r Pr&evies\ spä<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &Vyrovnávacia\ pamä
+menutrans &Refresh\ menu Obnovi
+menutrans &Delete Vymaza
+menutrans &Alternate Zmeni
+menutrans &Next Ï&alšia
+menutrans &Previous &Predchádzajúca
+menutrans [No File] [Žiadny\ súbor]
+
+" Window menu
+menutrans &Window &Okná
+menutrans &New<Tab>^Wn &Nové<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Rozdeli<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Ro&zdeli\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Rozdeli\ &vertikálne<Tab>^Wv
+menutrans Split\ File\ E&xplorer Otvori\ pri&eskumníka
+menutrans &Close<Tab>^Wc Zatvor&i<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zatvori\ i&né<Tab>^Wo
+menutrans Move\ &To Presunú&
+menutrans &Top<Tab>^WK Na&hor<Tab>^WK
+menutrans &Bottom<Tab>^WJ Nado&l<Tab>^WJ
+menutrans &Left\ side<Tab>^WH V&¾avo<Tab>^WJ
+menutrans &Right\ side<Tab>^WL Vprav&o<Tab>^WL
+menutrans Ne&xt<Tab>^Ww Ï&alšie<Tab>^Ww
+menutrans P&revious<Tab>^WW &Predchádzajúce<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= Rovnaká\ výš&ka<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maximálna\ výška<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Minimálna\ vý&ška<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maximálna\ šírka<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimálna širka<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR Rotova&\ nahor<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotova\ na&dol<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Vy&bra\ písmo\.\.\.
+
+" The popup menu
+menutrans &Undo &Spä
+menutrans Cu&t &Vystrihnú
+menutrans &Copy &Kopírova
+menutrans &Paste V&loži
+menutrans &Delete V&ymaza
+menutrans Select\ Blockwise Vybra\ blokovo
+menutrans Select\ &Word Vybra\ sl&ovo
+menutrans Select\ &Line Vybra\ &riadok
+menutrans Select\ &Block Vybra\ &blok
+menutrans Select\ &All Vybra\ vš&etko
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Otvori súbor
+ tmenu ToolBar.Save Uloži súbor
+ tmenu ToolBar.SaveAll Uloži všetky
+ tmenu ToolBar.Print Tlaè
+ tmenu ToolBar.Undo Spä
+ tmenu ToolBar.Redo Opakova
+ tmenu ToolBar.Cut Vystrihnú
+ tmenu ToolBar.Copy Kopírova
+ tmenu ToolBar.Paste Vloži
+ tmenu ToolBar.Find Nájs...
+ tmenu ToolBar.FindNext Nájs ïalšie
+ tmenu ToolBar.FindPrev Nájs predchádzajúce
+ tmenu ToolBar.Replace Nahradi...
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New Nové okno
+ tmenu ToolBar.WinSplit Rozdeli okno
+ tmenu ToolBar.WinMax Maximalizova okno
+ tmenu ToolBar.WinMin Minimalizova okno
+ tmenu ToolBar.WinVSplit Rozdeli okno vertikálne
+ tmenu ToolBar.WinMaxWidth Maximalizova šírku okna
+ tmenu ToolBar.WinMinWidth Minimalizova šírku okna
+ tmenu ToolBar.WinClose Zatvori okno
+ endif
+ tmenu ToolBar.LoadSesn Naèíta sedenie
+ tmenu ToolBar.SaveSesn Uloži sedenie
+ tmenu ToolBar.RunScript Spusti skript
+ tmenu ToolBar.Make Spusti make
+ tmenu ToolBar.Shell Spusti šel
+ tmenu ToolBar.RunCtags Spusti ctags
+ tmenu ToolBar.TagJump Skoèi na tag pod kurzorom
+ tmenu ToolBar.Help Pomocník
+ tmenu ToolBar.FindHelp Nájs pomocníka k...
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Syntax
+menutrans Set\ '&syntax'\ only Nastavi\ iba\ 'syntax'
+menutrans Set\ '&filetype'\ too Nastavi\ aj\ 'filetype'
+menutrans &Off &Vypnú
+menutrans &Manual &Ruène
+menutrans A&utomatic A&utomaticky
+" menutrans o&n\ (this\ file) &Zapnú\ (pre\ tento\ súbor)
+" menutrans o&ff\ (this\ file) Vyp&nú\ (pre\ tento\ súbor )
+menutrans on/off\ for\ &This\ file Zapnú/vypnú\ pre\ &tento\ súbor
+menutrans Co&lor\ test Test\ &farieb
+menutrans &Highlight\ test &Test\ zvýrazòovania
+menutrans &Convert\ to\ HTML &Previes\ do\ HTML
diff --git a/runtime/lang/menu_spanish_spain.850.vim b/runtime/lang/menu_spanish_spain.850.vim
new file mode 100644
index 000000000..4a96a397d
--- /dev/null
+++ b/runtime/lang/menu_spanish_spain.850.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/menu_es_es.latin1.vim
diff --git a/runtime/lang/menu_sr.utf-8.vim b/runtime/lang/menu_sr.utf-8.vim
new file mode 100644
index 000000000..915c31a58
--- /dev/null
+++ b/runtime/lang/menu_sr.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Serbian
+
+source <sfile>:p:h/menu_sr_yu.utf-8.vim
diff --git a/runtime/lang/menu_sr_yu.ascii.vim b/runtime/lang/menu_sr_yu.ascii.vim
new file mode 100644
index 000000000..14a902604
--- /dev/null
+++ b/runtime/lang/menu_sr_yu.ascii.vim
@@ -0,0 +1,258 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change: Fri, 30 May 2003 12:15:30 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" Help menu
+menutrans &Help Pomo&c
+menutrans &Overview<Tab><F1> &Pregled<Tab><F1>
+menutrans &User\ Manual &Uputstvo\ za\ korisnike
+menutrans &How-to\ links &Kako\ da\.\.\.
+menutrans &Find &Nadji
+menutrans &Credits &Zasluge
+menutrans Co&pying P&reuzimanje
+menutrans O&rphans &Sirocici
+menutrans &Version &Verzija
+menutrans &About &O\ programu
+
+" File menu
+menutrans &File &Datoteka
+menutrans &Open\.\.\.<Tab>:e &Otvori\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nova<Tab>:enew
+menutrans &Close<Tab>:close &Zatvori<Tab>:close
+menutrans &Save<Tab>:w &Sacuvaj<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Sacuvaj\ &kao\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Podeli\ i\ &uporedi\ sa\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
+menutrans &Print Sta&mpaj
+menutrans Sa&ve-Exit<Tab>:wqa Sacuvaj\ i\ za&vrsi<Tab>:wqa
+menutrans E&xit<Tab>:qa K&raj<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Uredjivanje
+menutrans &Undo<Tab>u &Vrati<Tab>u
+menutrans &Redo<Tab>^R &Povrati<Tab>^R
+menutrans Rep&eat<Tab>\. P&onovi<Tab>\.
+menutrans Cu&t<Tab>"+x Ise&ci<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP &Ubaci<Tab>"+gP
+menutrans &Paste<Tab>"+P &Ubaci<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Stavi\ pre&d<Tab>[p
+menutrans Put\ &After<Tab>]p Stavi\ &iza<Tab>]p
+menutrans &Delete<Tab>x Iz&brisi<Tab>x
+menutrans &Select\ all<Tab>ggVG Izaberi\ sv&e<Tab>ggVG
+menutrans &Find\.\.\. &Nadji\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Nadji\ i\ &zameni\.\.\.
+menutrans Settings\ &Window P&rozor\ podesavanja
+menutrans &Global\ Settings Op&sta\ podesavanja
+menutrans F&ile\ Settings Podesavanja\ za\ da&toteke
+menutrans &Shiftwidth &Pomeraj
+menutrans Soft\ &Tabstop &Meka\ tabulacija
+menutrans Te&xt\ Width\.\.\. &Sirina\ teksta\.\.\.
+menutrans &File\ Format\.\.\. &Vrsta\ datoteke\.\.\.
+menutrans C&olor\ Scheme Bo&je
+menutrans &Keymap Pres&likavanje\ tastature
+menutrans Select\ Fo&nt\.\.\. Izbor\ &fonta\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \velicinu\ &slova\ (da/ne)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ pratecu\ &zagradu\ (da/ne)<Tab>:set\ sm!
+menutrans &Context\ lines Vidljivi\ &redovi
+menutrans &Virtual\ Edit Virtuelno\ &uredjivanje
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Rezim\ u&nosa\ (da/ne)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
+menutrans Ta&g\ Files\.\.\. &Datoteke\ oznaka\.\.\.
+menutrans Toggle\ &Toolbar Linija\ sa\ &alatkama\ (da/ne)
+menutrans Toggle\ &Bottom\ Scrollbar Donja\ l&inija\ klizanja\ (da/ne)
+menutrans Toggle\ &Left\ Scrollbar &Leva\ linija\ klizanja\ (da/ne)
+menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never Nikad
+menutrans Block\ Selection Izbor\ bloka
+menutrans Insert\ mode Rezim\ unosa
+menutrans Block\ and\ Insert Blok\ i\ unos
+menutrans Always Uvek
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Rezim\ &liste\ (da/ne)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Prelomi\ &na\ rec\ (da/ne)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Auto-&uvlacenje\ (da/ne)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! &Ce-uvlacenje\ (da/ne)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None Nijedan
+
+" Tools menu
+menutrans &Tools &Alatke
+menutrans &Jump\ to\ this\ tag<Tab>g^] Skoci\ na\ &ovu\ oznaku<Tab>g^]
+menutrans Jump\ &back<Tab>^T Skoci\ &natrag<Tab>^T
+menutrans Build\ &Tags\ File Izgradi\ &datoteku\ oznaka
+menutrans &Folding &Podvijanje
+menutrans Create\ &Fold<Tab>zf S&tvori\ podvijutak<Tab>zf
+menutrans &Delete\ Fold<Tab>zd O&brisi\ podvijutak<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Obrisi\ sve\ po&dvijutke<Tab>zD
+menutrans Fold\ column\ &width Sirina\ &reda\ podvijutka
+menutrans &Diff &Uporedjivanje
+menutrans &Make<Tab>:make 'mak&e'<Tab>:make
+menutrans &List\ Errors<Tab>:cl Spisak\ &gresaka<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Sp&isak\ poruka<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn S&ledeca\ greska<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Pre&thodna\ greska<Tab>:cp
+menutrans &Older\ List<Tab>:cold Stari\ spisa&k<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew No&vi\ spisak<Tab>:cnew
+menutrans Error\ &Window Prozor\ sa\ g&reskama
+menutrans &Set\ Compiler I&zaberi\ prevodioca
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Pretvori\ u\ &HEKS<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi &Omoguci/prekini\ podvijanje<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Pokazi\ red\ sa\ kursorom<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Pokazi\ &samo\ red\ sa\ kursorom<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Zatvori\ vise\ podvijutaka<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Zatvori\ s&ve\ podvijutke<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Otvori\ vis&e\ podvijutaka<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR O&tvori\ sve\ podvijutke<Tab>zR
+menutrans Fold\ Met&hod &Nacin\ podvijanja
+
+" Tools/Folding/Fold Method
+menutrans M&anual &Rucno
+menutrans I&ndent &Uvucenost
+menutrans E&xpression &Izraz
+menutrans S&yntax &Sintaksa
+"menutrans &Diff
+menutrans Ma&rker &Oznaka
+
+" Tools/Diff
+menutrans &Update &Azuriraj
+menutrans &Get\ Block &Prihvati\ izmenu
+menutrans &Put\ Block Pre&baci\ izmenu
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin &Azuriraj<Tab>:cwin
+menutrans &Open<Tab>:copen &Otvori<Tab>:copen
+menutrans &Close<Tab>:cclose &Zatvori<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers &Baferi
+menutrans &Refresh\ menu &Azuriraj
+menutrans Delete &Obrisi
+menutrans &Alternate A&lternativni
+menutrans &Next &Sledeci
+menutrans &Previous &Prethodni
+menutrans [No\ File] [Nema\ datoteke]
+
+" Window menu
+menutrans &Window &Prozor
+menutrans &New<Tab>^Wn &Novi<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Podeli<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Podeli\ sa\ &alternativnim<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Podeli\ &uspravno<Tab>^Wv
+menutrans Split\ File\ E&xplorer Podeli\ za\ pregled\ &datoteka
+menutrans &Close<Tab>^Wc &Zatvori<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zatvori\ &ostale<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww &Sledeci<Tab>^Ww
+"menutrans P&revious<Tab>^WW P&rethodni<Tab>^WW
+menutrans Move\ &To Pre&mesti
+menutrans Rotate\ &Up<Tab>^WR &Kruzno\ nagore<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Kruzno\ nadol&e<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= &Iste\ velicine<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Maksimalna\ &visina<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Minima&lna\ visina<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maksimalna\ &sirina<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimalna\ si&rina<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK &Vrh<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Podnozje<Tab>^WJ
+menutrans &Left\ side<Tab>^WH U&levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL U&desno<Tab>^WL
+
+" The popup menu
+menutrans &Undo &Vrati
+menutrans Cu&t &Iseci
+menutrans &Copy &Kopiraj
+menutrans &Paste &Ubaci
+menutrans &Delete I&zbrisi
+menutrans Select\ Blockwise Biraj\ &pravougaono
+menutrans Select\ &Word Izaberi\ &rec
+menutrans Select\ &Line Izaberi\ r&ed
+menutrans Select\ &Block Izaberi\ &blok
+menutrans Select\ &All Izaberi\ &sve
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Ucitaj
+ tmenu ToolBar.Save Sacuvaj
+ tmenu ToolBar.SaveAll Sacuvaj sve
+ tmenu ToolBar.Print Stampaj
+ tmenu ToolBar.Undo Vrati
+ tmenu ToolBar.Redo Povrati
+ tmenu ToolBar.Cut Iseci
+ tmenu ToolBar.Copy Kopiraj
+ tmenu ToolBar.Paste Ubaci
+ tmenu ToolBar.Find Nadji
+ tmenu ToolBar.FindNext Nadji sledeci
+ tmenu ToolBar.FindPrev Nadji prethodni
+ tmenu ToolBar.Replace Zameni
+ tmenu ToolBar.New Novi
+ tmenu ToolBar.WinSplit Podeli prozor
+ tmenu ToolBar.WinMax Maksimalna visina
+ tmenu ToolBar.WinMin Minimalna visina
+ tmenu ToolBar.WinVSplit Podeli uspravno
+ tmenu ToolBar.WinMaxWidth Maksimalna sirina
+ tmenu ToolBar.WinMinWidth Minimalna sirina
+ tmenu ToolBar.WinClose Zatvori prozor
+ tmenu ToolBar.LoadSesn Ucitaj seansu
+ tmenu ToolBar.SaveSesn Sacuvaj seansu
+ tmenu ToolBar.RunScript Izvrsi spis
+ tmenu ToolBar.Make 'make'
+ tmenu ToolBar.Shell Operativno okruzenje
+ tmenu ToolBar.RunCtags Napravi oznake
+ tmenu ToolBar.TagJump Idi na oznaku
+ tmenu ToolBar.Help Pomoc
+ tmenu ToolBar.FindHelp Nadji objasnjenje
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaksa
+menutrans &Show\ filetypes\ in\ menu Izbor\ 'filetype'\ iz\ &menija
+menutrans Set\ '&syntax'\ only Pode&si\ 'syntax'\ samo
+menutrans Set\ '&filetype'\ too Podesi\ 'filetype'\ &takodje
+menutrans &Off &Iskljuceno
+menutrans &Manual &Rucno
+menutrans A&utomatic &Automatski
+menutrans on/off\ for\ &This\ file Da/ne\ za\ ovu\ &datoteku
+menutrans Co&lor\ test Provera\ &boja
+menutrans &Highlight\ test Provera\ isti&canja
+menutrans &Convert\ to\ HTML Pretvori\ &u\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "Unesite naredbu ili rec cije pojasnjenje trazite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog rezima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
+
+let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
+
+let g:menutrans_textwidth_dialog = "Unesite novu sirinu teksta (0 sprecava prelom)"
+
+let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+
+let menutrans_no_file = "[Nema datoteke]"
diff --git a/runtime/lang/menu_sr_yu.iso_8859-2.vim b/runtime/lang/menu_sr_yu.iso_8859-2.vim
new file mode 100644
index 000000000..992124c84
--- /dev/null
+++ b/runtime/lang/menu_sr_yu.iso_8859-2.vim
@@ -0,0 +1,259 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change: Fri, 30 May 2003 12:04:48 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+scriptencoding iso8859-2
+
+" Help menu
+menutrans &Help Pomo&æ
+menutrans &Overview<Tab><F1> &Pregled<Tab><F1>
+menutrans &User\ Manual &Uputstvo\ za\ korisnike
+menutrans &How-to\ links &Kako\ da\.\.\.
+menutrans &Find &Naði
+menutrans &Credits &Zasluge
+menutrans Co&pying P&reuzimanje
+menutrans O&rphans &Siroèiæi
+menutrans &Version &Verzija
+menutrans &About &O\ programu
+
+" File menu
+menutrans &File &Datoteka
+menutrans &Open\.\.\.<Tab>:e &Otvori\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Nova<Tab>:enew
+menutrans &Close<Tab>:close &Zatvori<Tab>:close
+menutrans &Save<Tab>:w &Saèuvaj<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Saèuvaj\ &kao\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Podeli\ i\ &uporedi\ sa\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
+menutrans &Print ©ta&mpaj
+menutrans Sa&ve-Exit<Tab>:wqa Saèuvaj\ i\ za&vr¹i<Tab>:wqa
+menutrans E&xit<Tab>:qa K&raj<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Ureðivanje
+menutrans &Undo<Tab>u &Vrati<Tab>u
+menutrans &Redo<Tab>^R &Povrati<Tab>^R
+menutrans Rep&eat<Tab>\. P&onovi<Tab>\.
+menutrans Cu&t<Tab>"+x Ise&ci<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP &Ubaci<Tab>"+gP
+menutrans &Paste<Tab>"+P &Ubaci<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Stavi\ pre&d<Tab>[p
+menutrans Put\ &After<Tab>]p Stavi\ &iza<Tab>]p
+menutrans &Delete<Tab>x Iz&bri¹i<Tab>x
+menutrans &Select\ all<Tab>ggVG Izaberi\ sv&e<Tab>ggVG
+menutrans &Find\.\.\. &Naði\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Naði\ i\ &zameni\.\.\.
+menutrans Settings\ &Window P&rozor\ pode¹avanja
+menutrans &Global\ Settings Op&¹ta\ pode¹avanja
+menutrans F&ile\ Settings Pode¹avanja\ za\ da&toteke
+menutrans &Shiftwidth &Pomeraj
+menutrans Soft\ &Tabstop &Meka\ tabulacija
+menutrans Te&xt\ Width\.\.\. &©irina\ teksta\.\.\.
+menutrans &File\ Format\.\.\. &Vrsta\ datoteke\.\.\.
+menutrans C&olor\ Scheme Bo&je
+menutrans &Keymap Pres&likavanje\ tastature
+menutrans Select\ Fo&nt\.\.\. Izbor\ &fonta\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \velièinu\ &slova\ (da/ne)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ prateæu\ &zagradu\ (da/ne)<Tab>:set\ sm!
+menutrans &Context\ lines Vidljivi\ &redovi
+menutrans &Virtual\ Edit Virtuelno\ &ureðivanje
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Re¾im\ u&nosa\ (da/ne)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
+menutrans Ta&g\ Files\.\.\. &Datoteke\ oznaka\.\.\.
+menutrans Toggle\ &Toolbar Linija\ sa\ &alatkama\ (da/ne)
+menutrans Toggle\ &Bottom\ Scrollbar Donja\ l&inija\ klizanja\ (da/ne)
+menutrans Toggle\ &Left\ Scrollbar &Leva\ linija\ klizanja\ (da/ne)
+menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never Nikad
+menutrans Block\ Selection Izbor\ bloka
+menutrans Insert\ mode Re¾im\ unosa
+menutrans Block\ and\ Insert Blok\ i\ unos
+menutrans Always Uvek
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Re¾im\ &liste\ (da/ne)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Prelomi\ &na\ reè\ (da/ne)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Auto-&uvlaèenje\ (da/ne)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! &Ce-uvlaèenje\ (da/ne)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None Nijedan
+
+" Tools menu
+menutrans &Tools &Alatke
+menutrans &Jump\ to\ this\ tag<Tab>g^] Skoèi\ na\ &ovu\ oznaku<Tab>g^]
+menutrans Jump\ &back<Tab>^T Skoèi\ &natrag<Tab>^T
+menutrans Build\ &Tags\ File Izgradi\ &datoteku\ oznaka
+menutrans &Folding &Podvijanje
+menutrans Create\ &Fold<Tab>zf S&tvori\ podvijutak<Tab>zf
+menutrans &Delete\ Fold<Tab>zd O&bri¹i\ podvijutak<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Obri¹i\ sve\ po&dvijutke<Tab>zD
+menutrans Fold\ column\ &width ©irina\ &reda\ podvijutka
+menutrans &Diff &Uporeðivanje
+menutrans &Make<Tab>:make 'mak&e'<Tab>:make
+menutrans &List\ Errors<Tab>:cl Spisak\ &gre¹aka<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Sp&isak\ poruka<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn S&ledeæa\ gre¹ka<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Pre&thodna\ gre¹ka<Tab>:cp
+menutrans &Older\ List<Tab>:cold Stari\ spisa&k<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew No&vi\ spisak<Tab>:cnew
+menutrans Error\ &Window Prozor\ sa\ g&re¹kama
+menutrans &Set\ Compiler I&zaberi\ prevodioca
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Pretvori\ u\ &HEKS<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi &Omoguæi/prekini\ podvijanje<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Poka¾i\ red\ sa\ kursorom<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Poka¾i\ &samo\ red\ sa\ kursorom<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Zatvori\ vi¹e\ podvijutaka<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Zatvori\ s&ve\ podvijutke<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Otvori\ vi¹&e\ podvijutaka<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR O&tvori\ sve\ podvijutke<Tab>zR
+menutrans Fold\ Met&hod &Naèin\ podvijanja
+
+" Tools/Folding/Fold Method
+menutrans M&anual &Ruèno
+menutrans I&ndent &Uvuèenost
+menutrans E&xpression &Izraz
+menutrans S&yntax &Sintaksa
+"menutrans &Diff
+menutrans Ma&rker &Oznaka
+
+" Tools/Diff
+menutrans &Update &A¾uriraj
+menutrans &Get\ Block &Prihvati\ izmenu
+menutrans &Put\ Block Pre&baci\ izmenu
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin &A¾uriraj<Tab>:cwin
+menutrans &Open<Tab>:copen &Otvori<Tab>:copen
+menutrans &Close<Tab>:cclose &Zatvori<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers &Baferi
+menutrans &Refresh\ menu &A¾uriraj
+menutrans Delete &Obri¹i
+menutrans &Alternate A&lternativni
+menutrans &Next &Sledeæi
+menutrans &Previous &Prethodni
+menutrans [No\ File] [Nema\ datoteke]
+
+" Window menu
+menutrans &Window &Prozor
+menutrans &New<Tab>^Wn &Novi<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Podeli<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Podeli\ sa\ &alternativnim<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Podeli\ &uspravno<Tab>^Wv
+menutrans Split\ File\ E&xplorer Podeli\ za\ pregled\ &datoteka
+menutrans &Close<Tab>^Wc &Zatvori<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Zatvori\ &ostale<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww &Sledeæi<Tab>^Ww
+"menutrans P&revious<Tab>^WW P&rethodni<Tab>^WW
+menutrans Move\ &To Pre&mesti
+menutrans Rotate\ &Up<Tab>^WR &Kru¾no\ nagore<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Kru¾no\ nadol&e<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= &Iste\ velièine<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ Maksimalna\ &visina<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Minima&lna\ visina<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maksimalna\ &¹irina<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimalna\ ¹i&rina<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK &Vrh<Tab>^WK
+menutrans &Bottom<Tab>^WJ &Podno¾je<Tab>^WJ
+menutrans &Left\ side<Tab>^WH U&levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL U&desno<Tab>^WL
+
+" The popup menu
+menutrans &Undo &Vrati
+menutrans Cu&t &Iseci
+menutrans &Copy &Kopiraj
+menutrans &Paste &Ubaci
+menutrans &Delete I&zbri¹i
+menutrans Select\ Blockwise Biraj\ &pravougaono
+menutrans Select\ &Word Izaberi\ &reè
+menutrans Select\ &Line Izaberi\ r&ed
+menutrans Select\ &Block Izaberi\ &blok
+menutrans Select\ &All Izaberi\ &sve
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Uèitaj
+ tmenu ToolBar.Save Saèuvaj
+ tmenu ToolBar.SaveAll Saèuvaj sve
+ tmenu ToolBar.Print ©tampaj
+ tmenu ToolBar.Undo Vrati
+ tmenu ToolBar.Redo Povrati
+ tmenu ToolBar.Cut Iseci
+ tmenu ToolBar.Copy Kopiraj
+ tmenu ToolBar.Paste Ubaci
+ tmenu ToolBar.Find Naði
+ tmenu ToolBar.FindNext Naði sledeæi
+ tmenu ToolBar.FindPrev Naði prethodni
+ tmenu ToolBar.Replace Zameni
+ tmenu ToolBar.New Novi
+ tmenu ToolBar.WinSplit Podeli prozor
+ tmenu ToolBar.WinMax Maksimalna visina
+ tmenu ToolBar.WinMin Minimalna visina
+ tmenu ToolBar.WinVSplit Podeli uspravno
+ tmenu ToolBar.WinMaxWidth Maksimalna ¹irina
+ tmenu ToolBar.WinMinWidth Minimalna ¹irina
+ tmenu ToolBar.WinClose Zatvori prozor
+ tmenu ToolBar.LoadSesn Uèitaj seansu
+ tmenu ToolBar.SaveSesn Saèuvaj seansu
+ tmenu ToolBar.RunScript Izvr¹i spis
+ tmenu ToolBar.Make 'make'
+ tmenu ToolBar.Shell Operativno okru¾enje
+ tmenu ToolBar.RunCtags Napravi oznake
+ tmenu ToolBar.TagJump Idi na oznaku
+ tmenu ToolBar.Help Pomoæ
+ tmenu ToolBar.FindHelp Naði obja¹njenje
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaksa
+menutrans &Show\ filetypes\ in\ menu Izbor\ 'filetype'\ iz\ &menija
+menutrans Set\ '&syntax'\ only Pode&si\ 'syntax'\ samo
+menutrans Set\ '&filetype'\ too Podesi\ 'filetype'\ &takoðe
+menutrans &Off &Iskljuèeno
+menutrans &Manual &Ruèno
+menutrans A&utomatic &Automatski
+menutrans on/off\ for\ &This\ file Da/ne\ za\ ovu\ &datoteku
+menutrans Co&lor\ test Provera\ &boja
+menutrans &Highlight\ test Provera\ isti&canja
+menutrans &Convert\ to\ HTML Pretvori\ &u\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "Unesite naredbu ili reè èije poja¹njenje tra¾ite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog re¾ima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
+
+let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
+
+let g:menutrans_textwidth_dialog = "Unesite novu ¹irinu teksta (0 spreèava prelom)"
+
+let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+
+let menutrans_no_file = "[Nema datoteke]"
diff --git a/runtime/lang/menu_sr_yu.iso_8859-5.vim b/runtime/lang/menu_sr_yu.iso_8859-5.vim
new file mode 100644
index 000000000..e4d322dc6
--- /dev/null
+++ b/runtime/lang/menu_sr_yu.iso_8859-5.vim
@@ -0,0 +1,259 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change: Fri, 30 May 2003 12:02:07 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+scriptencoding iso8859-5
+
+" Help menu
+menutrans &Help ¿ÞÜÞ&û
+menutrans &Overview<Tab><F1> &¿àÕÓÛÕÔ<Tab><F1>
+menutrans &User\ Manual &ÃßãâáâÒÞ\ ×Ð\ ÚÞàØáÝØÚÕ
+menutrans &How-to\ links &ºÐÚÞ\ ÔÐ\.\.\.
+menutrans &Find &½ÐòØ
+menutrans &Credits &·ÐáÛãÓÕ
+menutrans Co&pying ¿&àÕã×ØÜÐúÕ
+menutrans O&rphans &ÁØàÞçØûØ
+menutrans &Version &²Õà×ØøÐ
+menutrans &About &¾\ ßàÞÓàÐÜã
+
+" File menu
+menutrans &File &´ÐâÞâÕÚÐ
+menutrans &Open\.\.\.<Tab>:e &¾âÒÞàØ\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &¿ÞÔÕÛØ-ÞâÒÞàØ\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &½ÞÒÐ<Tab>:enew
+menutrans &Close<Tab>:close &·ÐâÒÞàØ<Tab>:close
+menutrans &Save<Tab>:w &ÁÐçãÒÐø<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav ÁÐçãÒÐø\ &ÚÐÞ\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. ¿ÞÔÕÛØ\ Ø\ &ãßÞàÕÔØ\ áÐ\.\.\.
+menutrans Split\ Patched\ &By\.\.\. ¿Þ&ÔÕÛØ\ Ø\ ßàÕßàÐÒØ\ áÐ\.\.\.
+menutrans &Print ÈâÐ&ÜßÐø
+menutrans Sa&ve-Exit<Tab>:wqa ÁÐçãÒÐø\ Ø\ ×Ð&ÒàèØ<Tab>:wqa
+menutrans E&xit<Tab>:qa º&àÐø<Tab>:qa
+
+" Edit menu
+menutrans &Edit &ÃàÕòØÒÐúÕ
+menutrans &Undo<Tab>u &²àÐâØ<Tab>u
+menutrans &Redo<Tab>^R &¿ÞÒàÐâØ<Tab>^R
+menutrans Rep&eat<Tab>\. ¿&ÞÝÞÒØ<Tab>\.
+menutrans Cu&t<Tab>"+x ¸áÕ&æØ<Tab>"+x
+menutrans &Copy<Tab>"+y &ºÞßØàÐø<Tab>"+y
+menutrans &Paste<Tab>"+gP &ÃÑÐæØ<Tab>"+gP
+menutrans &Paste<Tab>"+P &ÃÑÐæØ<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ÁâÐÒØ\ ßàÕ&Ô<Tab>[p
+menutrans Put\ &After<Tab>]p ÁâÐÒØ\ &Ø×Ð<Tab>]p
+menutrans &Delete<Tab>x ¸×&ÑàØèØ<Tab>x
+menutrans &Select\ all<Tab>ggVG ¸×ÐÑÕàØ\ áÒ&Õ<Tab>ggVG
+menutrans &Find\.\.\. &½ÐòØ\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ½ÐòØ\ Ø\ &×ÐÜÕÝØ\.\.\.
+menutrans Settings\ &Window ¿&àÞ×Þà\ ßÞÔÕèÐÒÐúÐ
+menutrans &Global\ Settings ¾ß&èâÐ\ ßÞÔÕèÐÒÐúÐ
+menutrans F&ile\ Settings ¿ÞÔÕèÐÒÐúÐ\ ×Ð\ ÔÐ&âÞâÕÚÕ
+menutrans &Shiftwidth &¿ÞÜÕàÐø
+menutrans Soft\ &Tabstop &¼ÕÚÐ\ âÐÑãÛÐæØøÐ
+menutrans Te&xt\ Width\.\.\. &ÈØàØÝÐ\ âÕÚáâÐ\.\.\.
+menutrans &File\ Format\.\.\. &²àáâÐ\ ÔÐâÞâÕÚÕ\.\.\.
+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 &´ÕáÝÐ\ ÛØÝØøÐ\ ÚÛØ×ÐúÐ\ (ÔÐ/ÝÕ)
+
+" Edit/Global Settings/Virtual Edit
+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! &ÆÕ-ãÒÛÐçÕúÕ\ (ÔÐ/ÝÕ)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None ½ØøÕÔÐÝ
+
+" Tools menu
+menutrans &Tools &°ÛÐâÚÕ
+menutrans &Jump\ to\ this\ tag<Tab>g^] ÁÚÞçØ\ ÝÐ\ &ÞÒã\ Þ×ÝÐÚã<Tab>g^]
+menutrans Jump\ &back<Tab>^T ÁÚÞçØ\ &ÝÐâàÐÓ<Tab>^T
+menutrans Build\ &Tags\ File ¸×ÓàÐÔØ\ &ÔÐâÞâÕÚã\ Þ×ÝÐÚÐ
+menutrans &Folding &¿ÞÔÒØøÐúÕ
+menutrans Create\ &Fold<Tab>zf Á&âÒÞàØ\ ßÞÔÒØøãâÐÚ<Tab>zf
+menutrans &Delete\ Fold<Tab>zd ¾&ÑàØèØ\ ßÞÔÒØøãâÐÚ<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD ¾ÑàØèØ\ áÒÕ\ ßÞ&ÔÒØøãâÚÕ<Tab>zD
+menutrans Fold\ column\ &width ÈØàØÝÐ\ &àÕÔÐ\ ßÞÔÒØøãâÚÐ
+menutrans &Diff &ÃßÞàÕòØÒÐúÕ
+menutrans &Make<Tab>:make 'mak&Õ'<Tab>:make
+menutrans &List\ Errors<Tab>:cl ÁßØáÐÚ\ &ÓàÕèÐÚÐ<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Áß&ØáÐÚ\ ßÞàãÚÐ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Á&ÛÕÔÕûÐ\ ÓàÕèÚÐ<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ¿àÕ&âåÞÔÝÐ\ ÓàÕèÚÐ<Tab>:cp
+menutrans &Older\ List<Tab>:cold ÁâÐàØ\ áßØáÐ&Ú<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew ½Þ&ÒØ\ áßØáÐÚ<Tab>:cnew
+menutrans Error\ &Window ¿àÞ×Þà\ áÐ\ Ó&àÕèÚÐÜÐ
+menutrans &Set\ Compiler ¸&×ÐÑÕàØ\ ßàÕÒÞÔØÞæÐ
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ¿àÕâÒÞàØ\ ã\ &ŵºÁ<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ²à&ÐâØ\ ã\ ßàÒÞÑØâÐÝ\ ÞÑÛØÚ<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi &¾ÜÞÓãûØ/ßàÕÚØÝØ\ ßÞÔÒØøÐúÕ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &¿ÞÚÐÖØ\ àÕÔ\ áÐ\ ÚãàáÞàÞÜ<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ¿ÞÚÐÖØ\ &áÐÜÞ\ àÕÔ\ áÐ\ ÚãàáÞàÞÜ<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &·ÐâÒÞàØ\ ÒØèÕ\ ßÞÔÒØøãâÐÚÐ<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM ·ÐâÒÞàØ\ á&ÒÕ\ ßÞÔÒØøãâÚÕ<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr ¾âÒÞàØ\ ÒØè&Õ\ ßÞÔÒØøãâÐÚÐ<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR ¾&âÒÞàØ\ áÒÕ\ ßÞÔÒØøãâÚÕ<Tab>zR
+menutrans Fold\ Met&hod &½ÐçØÝ\ ßÞÔÒØøÐúÐ
+
+" Tools/Folding/Fold Method
+menutrans M&anual &ÀãçÝÞ
+menutrans I&ndent &ÃÒãçÕÝÞáâ
+menutrans E&xpression &¸×àÐ×
+menutrans S&yntax &ÁØÝâÐÚáÐ
+"menutrans &Diff
+menutrans Ma&rker &¾×ÝÐÚÐ
+
+" Tools/Diff
+menutrans &Update &°ÖãàØàÐø
+menutrans &Get\ Block &¿àØåÒÐâØ\ Ø×ÜÕÝã
+menutrans &Put\ Block ¿àÕ&ÑÐæØ\ Ø×ÜÕÝã
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin &°ÖãàØàÐø<Tab>:cwin
+menutrans &Open<Tab>:copen &¾âÒÞàØ<Tab>:copen
+menutrans &Close<Tab>:cclose &·ÐâÒÞàØ<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers &±ÐäÕàØ
+menutrans &Refresh\ menu &°ÖãàØàÐø
+menutrans Delete &¾ÑàØèØ
+menutrans &Alternate °&ÛâÕàÝÐâØÒÝØ
+menutrans &Next &ÁÛÕÔÕûØ
+menutrans &Previous &¿àÕâåÞÔÝØ
+menutrans [No\ File] [½ÕÜÐ\ ÔÐâÞâÕÚÕ]
+
+" Window menu
+menutrans &Window &¿àÞ×Þà
+menutrans &New<Tab>^Wn &½ÞÒØ<Tab>^Wn
+menutrans S&plit<Tab>^Ws &¿ÞÔÕÛØ<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ¿ÞÔÕÛØ\ áÐ\ &ÐÛâÕàÝÐâØÒÝØÜ<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ¿ÞÔÕÛØ\ &ãáßàÐÒÝÞ<Tab>^Wv
+menutrans Split\ File\ E&xplorer ¿ÞÔÕÛØ\ ×Ð\ ßàÕÓÛÕÔ\ &ÔÐâÞâÕÚÐ
+menutrans &Close<Tab>^Wc &·ÐâÒÞàØ<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo ·ÐâÒÞàØ\ &ÞáâÐÛÕ<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww &ÁÛÕÔÕûØ<Tab>^Ww
+"menutrans P&revious<Tab>^WW ¿&àÕâåÞÔÝØ<Tab>^WW
+menutrans Move\ &To ¿àÕ&ÜÕáâØ
+menutrans Rotate\ &Up<Tab>^WR &ºàãÖÝÞ\ ÝÐÓÞàÕ<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ºàãÖÝÞ\ ÝÐÔÞÛ&Õ<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= &¸áâÕ\ ÒÕÛØçØÝÕ<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ¼ÐÚáØÜÐÛÝÐ\ &ÒØáØÝÐ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ ¼ØÝØÜÐ&ÛÝÐ\ ÒØáØÝÐ<Tab>^W1_
+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 &Bottom<Tab>^WJ &¿ÞÔÝÞÖøÕ<Tab>^WJ
+menutrans &Left\ side<Tab>^WH Ã&ÛÕÒÞ<Tab>^WH
+menutrans &Right\ side<Tab>^WL Ã&ÔÕáÝÞ<Tab>^WL
+
+" The popup menu
+menutrans &Undo &²àÐâØ
+menutrans Cu&t &¸áÕæØ
+menutrans &Copy &ºÞßØàÐø
+menutrans &Paste &ÃÑÐæØ
+menutrans &Delete ¸&×ÑàØèØ
+menutrans Select\ Blockwise ±ØàÐø\ &ßàÐÒÞãÓÐÞÝÞ
+menutrans Select\ &Word ¸×ÐÑÕàØ\ &àÕç
+menutrans Select\ &Line ¸×ÐÑÕàØ\ à&ÕÔ
+menutrans Select\ &Block ¸×ÐÑÕàØ\ &ÑÛÞÚ
+menutrans Select\ &All ¸×ÐÑÕàØ\ &áÒÕ
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ÃçØâÐø
+ tmenu ToolBar.Save ÁÐçãÒÐø
+ tmenu ToolBar.SaveAll ÁÐçãÒÐø áÒÕ
+ tmenu ToolBar.Print ÈâÐÜßÐø
+ tmenu ToolBar.Undo ²àÐâØ
+ tmenu ToolBar.Redo ¿ÞÒàÐâØ
+ tmenu ToolBar.Cut ¸áÕæØ
+ tmenu ToolBar.Copy ºÞßØàÐø
+ tmenu ToolBar.Paste ÃÑÐæØ
+ tmenu ToolBar.Find ½ÐòØ
+ tmenu ToolBar.FindNext ½ÐòØ áÛÕÔÕûØ
+ tmenu ToolBar.FindPrev ½ÐòØ ßàÕâåÞÔÝØ
+ tmenu ToolBar.Replace ·ÐÜÕÝØ
+ tmenu ToolBar.New ½ÞÒØ
+ tmenu ToolBar.WinSplit ¿ÞÔÕÛØ ßàÞ×Þà
+ tmenu ToolBar.WinMax ¼ÐÚáØÜÐÛÝÐ ÒØáØÝÐ
+ tmenu ToolBar.WinMin ¼ØÝØÜÐÛÝÐ ÒØáØÝÐ
+ tmenu ToolBar.WinVSplit ¿ÞÔÕÛØ ãáßàÐÒÝÞ
+ tmenu ToolBar.WinMaxWidth ¼ÐÚáØÜÐÛÝÐ èØàØÝÐ
+ tmenu ToolBar.WinMinWidth ¼ØÝØÜÐÛÝÐ èØàØÝÐ
+ tmenu ToolBar.WinClose ·ÐâÒÞàØ ßàÞ×Þà
+ tmenu ToolBar.LoadSesn ÃçØâÐø áÕÐÝáã
+ tmenu ToolBar.SaveSesn ÁÐçãÒÐø áÕÐÝáã
+ tmenu ToolBar.RunScript ¸×ÒàèØ áßØá
+ tmenu ToolBar.Make 'make'
+ tmenu ToolBar.Shell ¾ßÕàÐâØÒÝÞ ÞÚàãÖÕúÕ
+ tmenu ToolBar.RunCtags ½ÐßàÐÒØ Þ×ÝÐÚÕ
+ tmenu ToolBar.TagJump ¸ÔØ ÝÐ Þ×ÝÐÚã
+ tmenu ToolBar.Help ¿ÞÜÞû
+ tmenu ToolBar.FindHelp ½ÐòØ ÞÑøÐèúÕúÕ
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &ÁØÝâÐÚáÐ
+menutrans &Show\ filetypes\ in\ menu ¸×ÑÞà\ 'filetype'\ Ø×\ &ÜÕÝØøÐ
+menutrans Set\ '&syntax'\ only ¿ÞÔÕ&áØ\ 'syntax'\ áÐÜÞ
+menutrans Set\ '&filetype'\ too ¿ÞÔÕáØ\ 'filetype'\ &âÐÚÞòÕ
+menutrans &Off &¸áÚùãçÕÝÞ
+menutrans &Manual &ÀãçÝÞ
+menutrans A&utomatic &°ãâÞÜÐâáÚØ
+menutrans on/off\ for\ &This\ file ´Ð/ÝÕ\ ×Ð\ ÞÒã\ &ÔÐâÞâÕÚã
+menutrans Co&lor\ test ¿àÞÒÕàÐ\ &ÑÞøÐ
+menutrans &Highlight\ test ¿àÞÒÕàÐ\ ØáâØ&æÐúÐ
+menutrans &Convert\ to\ HTML ¿àÕâÒÞàØ\ &ã\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "ÃÝÕáØâÕ ÝÐàÕÔÑã ØÛØ àÕç çØøÕ ßÞøÐèúÕúÕ âàÐÖØâÕ:\n\n´ÞÔÐøâÕ i_ ×Ð ÝÐàÕÔÑÕ ãÝÞáÐ (Ýßà. i_CTRL-X)\n´ÞÔÐøâÕ c_ ×Ð ÝÐàÕÔÑÕ ÚÞÜÐÝÔÝÞÓ àÕÖØÜÐ (Ýßà. á_<Del>)\n´ÞÔÐøâÕ ' ×Ð ØÜÕÝÐ ÞßæØøÐ (Ýßà. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "ÃÝÕáØâÕ ßãâ ßàÕâàÐÓÕ ×Ð ÔÐâÞâÕÚÕ\nÀÐ×ÔÒÞøØâÕ ×ÐàÕ×ØÜÐ ØÜÕÝÐ ÔØàÕÚâÞàØøãÜÐ."
+
+let g:menutrans_tags_dialog = "ÃÝÕáØâÕ ØÜÕÝÐ ÔÐâÞâÕÚÐ áÐ Þ×ÝÐÚÐÜÐ\nÀÐ×ÔÒÞøØâÕ ×ÐàÕ×ØÜÐ ØÜÕÝÐ."
+
+let g:menutrans_textwidth_dialog = "ÃÝÕáØâÕ ÝÞÒã èØàØÝã âÕÚáâÐ (0 áßàÕçÐÒÐ ßàÕÛÞÜ)"
+
+let g:menutrans_fileformat_dialog = "¸×ÐÑÕàØâÕ Òàáâã ÔÐâÞâÕÚÕ"
+
+let menutrans_no_file = "[½ÕÜÐ ÔÐâÞâÕÚÕ]"
diff --git a/runtime/lang/menu_sr_yu.utf-8.vim b/runtime/lang/menu_sr_yu.utf-8.vim
new file mode 100644
index 000000000..733566387
--- /dev/null
+++ b/runtime/lang/menu_sr_yu.utf-8.vim
@@ -0,0 +1,261 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change: Fri, 30 May 2003 10:17:39 Eastern Daylight Time
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help Помо&ћ
+menutrans &Overview<Tab><F1> &Преглед<Tab><F1>
+menutrans &User\ Manual &УпутÑтво\ за\ кориÑнике
+menutrans &How-to\ links &Како\ да\.\.\.
+menutrans &Find &Ðађи
+menutrans &Credits &ЗаÑлуге
+menutrans Co&pying П&реузимање
+menutrans O&rphans &Сирочићи
+menutrans &Version &Верзија
+menutrans &About &О\ програму
+
+" File menu
+menutrans &File &Датотека
+menutrans &Open\.\.\.<Tab>:e &Отвори\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Подели-отвори\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Ðова<Tab>:enew
+menutrans &Close<Tab>:close &Затвори<Tab>:close
+menutrans &Save<Tab>:w &Сачувај<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Сачувај\ &као\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Подели\ и\ &упореди\ Ñа\.\.\.
+menutrans Split\ Patched\ &By\.\.\. По&дели\ и\ преправи\ Ñа\.\.\.
+menutrans &Print Шта&мпај
+menutrans Sa&ve-Exit<Tab>:wqa Сачувај\ и\ за&врши<Tab>:wqa
+menutrans E&xit<Tab>:qa К&рај<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Уређивање
+menutrans &Undo<Tab>u &Врати<Tab>u
+menutrans &Redo<Tab>^R &Поврати<Tab>^R
+menutrans Rep&eat<Tab>\. П&онови<Tab>\.
+menutrans Cu&t<Tab>"+x ИÑе&ци<Tab>"+x
+menutrans &Copy<Tab>"+y &Копирај<Tab>"+y
+menutrans &Paste<Tab>"+gP &Убаци<Tab>"+gP
+menutrans &Paste<Tab>"+P &Убаци<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Стави\ пре&д<Tab>[p
+menutrans Put\ &After<Tab>]p Стави\ &иза<Tab>]p
+menutrans &Delete<Tab>x Из&бриши<Tab>x
+menutrans &Select\ all<Tab>ggVG Изабери\ Ñв&е<Tab>ggVG
+menutrans &Find\.\.\. &Ðађи\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Ðађи\ и\ &замени\.\.\.
+menutrans Settings\ &Window П&розор\ подешавања
+menutrans &Global\ Settings Оп&шта\ подешавања
+menutrans F&ile\ Settings Подешавања\ за\ да&тотеке
+menutrans &Shiftwidth &Померај
+menutrans Soft\ &Tabstop &Мека\ табулација
+menutrans Te&xt\ Width\.\.\. &Ширина\ текÑта\.\.\.
+menutrans &File\ Format\.\.\. &Ð’Ñ€Ñта\ датотеке\.\.\.
+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 &ДеÑна\ линија\ клизања\ (да/не)
+
+" Edit/Global Settings/Virtual Edit
+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! &Це-увлачење\ (да/не)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None Ðиједан
+
+" Tools menu
+menutrans &Tools &Ðлатке
+menutrans &Jump\ to\ this\ tag<Tab>g^] Скочи\ на\ &ову\ ознаку<Tab>g^]
+menutrans Jump\ &back<Tab>^T Скочи\ &натраг<Tab>^T
+menutrans Build\ &Tags\ File Изгради\ &датотеку\ ознака
+menutrans &Folding &Подвијање
+menutrans Create\ &Fold<Tab>zf С&твори\ подвијутак<Tab>zf
+menutrans &Delete\ Fold<Tab>zd О&бриши\ подвијутак<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Обриши\ Ñве\ по&двијутке<Tab>zD
+menutrans Fold\ column\ &width Ширина\ &реда\ подвијутка
+menutrans &Diff &Упоређивање
+menutrans &Make<Tab>:make 'mak&е'<Tab>:make
+menutrans &List\ Errors<Tab>:cl СпиÑак\ &грешака<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Сп&иÑак\ порука<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn С&ледећа\ грешка<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Пре&тходна\ грешка<Tab>:cp
+menutrans &Older\ List<Tab>:cold Стари\ ÑпиÑа&к<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew Ðо&ви\ ÑпиÑак<Tab>:cnew
+menutrans Error\ &Window Прозор\ Ñа\ г&решкама
+menutrans &Set\ Compiler И&забери\ преводиоца
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Претвори\ у\ &ХЕКС<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Вр&ати\ у\ првобитан\ облик<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi &Омогући/прекини\ подвијање<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &Покажи\ ред\ Ñа\ курÑором<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Покажи\ &Ñамо\ ред\ Ñа\ курÑором<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm &Затвори\ више\ подвијутака<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Затвори\ Ñ&ве\ подвијутке<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Отвори\ виш&е\ подвијутака<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR О&твори\ Ñве\ подвијутке<Tab>zR
+menutrans Fold\ Met&hod &Ðачин\ подвијања
+
+" Tools/Folding/Fold Method
+menutrans M&anual &Ручно
+menutrans I&ndent &УвученоÑÑ‚
+menutrans E&xpression &Израз
+menutrans S&yntax &СинтакÑа
+"menutrans &Diff
+menutrans Ma&rker &Ознака
+
+" Tools/Diff
+menutrans &Update &Ðжурирај
+menutrans &Get\ Block &Прихвати\ измену
+menutrans &Put\ Block Пре&баци\ измену
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin &Ðжурирај<Tab>:cwin
+menutrans &Open<Tab>:copen &Отвори<Tab>:copen
+menutrans &Close<Tab>:cclose &Затвори<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers &Бафери
+menutrans &Refresh\ menu &Ðжурирај
+menutrans Delete &Обриши
+menutrans &Alternate Ð&лтернативни
+menutrans &Next &Следећи
+menutrans &Previous &Претходни
+menutrans [No\ File] [Ðема\ датотеке]
+
+" Window menu
+menutrans &Window &Прозор
+menutrans &New<Tab>^Wn &Ðови<Tab>^Wn
+menutrans S&plit<Tab>^Ws &Подели<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Подели\ Ñа\ &алтернативним<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Подели\ &уÑправно<Tab>^Wv
+menutrans Split\ File\ E&xplorer Подели\ за\ преглед\ &датотека
+menutrans &Close<Tab>^Wc &Затвори<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo Затвори\ &оÑтале<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww &Следећи<Tab>^Ww
+"menutrans P&revious<Tab>^WW П&ретходни<Tab>^WW
+menutrans Move\ &To Пре&меÑти
+menutrans Rotate\ &Up<Tab>^WR &Кружно\ нагоре<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Кружно\ надол&е<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= &ИÑте\ величине<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ МакÑимална\ &виÑина<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ Минима&лна\ виÑина<Tab>^W1_
+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 &Bottom<Tab>^WJ &Подножје<Tab>^WJ
+menutrans &Left\ side<Tab>^WH У&лево<Tab>^WH
+menutrans &Right\ side<Tab>^WL У&деÑно<Tab>^WL
+
+" The popup menu
+menutrans &Undo &Врати
+menutrans Cu&t &ИÑеци
+menutrans &Copy &Копирај
+menutrans &Paste &Убаци
+menutrans &Delete И&збриши
+menutrans Select\ Blockwise Бирај\ &правоугаоно
+menutrans Select\ &Word Изабери\ &реч
+menutrans Select\ &Line Изабери\ р&ед
+menutrans Select\ &Block Изабери\ &блок
+menutrans Select\ &All Изабери\ &Ñве
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Учитај
+ tmenu ToolBar.Save Сачувај
+ tmenu ToolBar.SaveAll Сачувај Ñве
+ tmenu ToolBar.Print Штампај
+ tmenu ToolBar.Undo Врати
+ tmenu ToolBar.Redo Поврати
+ tmenu ToolBar.Cut ИÑеци
+ tmenu ToolBar.Copy Копирај
+ tmenu ToolBar.Paste Убаци
+ tmenu ToolBar.Find Ðађи
+ tmenu ToolBar.FindNext Ðађи Ñледећи
+ tmenu ToolBar.FindPrev Ðађи претходни
+ tmenu ToolBar.Replace Замени
+ tmenu ToolBar.New Ðови
+ tmenu ToolBar.WinSplit Подели прозор
+ tmenu ToolBar.WinMax МакÑимална виÑина
+ tmenu ToolBar.WinMin Минимална виÑина
+ tmenu ToolBar.WinVSplit Подели уÑправно
+ tmenu ToolBar.WinMaxWidth МакÑимална ширина
+ tmenu ToolBar.WinMinWidth Минимална ширина
+ tmenu ToolBar.WinClose Затвори прозор
+ tmenu ToolBar.LoadSesn Учитај ÑеанÑу
+ tmenu ToolBar.SaveSesn Сачувај ÑеанÑу
+ tmenu ToolBar.RunScript Изврши ÑпиÑ
+ tmenu ToolBar.Make 'make'
+ tmenu ToolBar.Shell Оперативно окружење
+ tmenu ToolBar.RunCtags Ðаправи ознаке
+ tmenu ToolBar.TagJump Иди на ознаку
+ tmenu ToolBar.Help Помоћ
+ tmenu ToolBar.FindHelp Ðађи објашњење
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &СинтакÑа
+menutrans &Show\ filetypes\ in\ menu Избор\ 'filetype'\ из\ &менија
+menutrans Set\ '&syntax'\ only Поде&Ñи\ 'syntax'\ Ñамо
+menutrans Set\ '&filetype'\ too ПодеÑи\ 'filetype'\ &такође
+menutrans &Off &ИÑкључено
+menutrans &Manual &Ручно
+menutrans A&utomatic &ÐутоматÑки
+menutrans on/off\ for\ &This\ file Да/не\ за\ ову\ &датотеку
+menutrans Co&lor\ test Провера\ &боја
+menutrans &Highlight\ test Провера\ иÑти&цања
+menutrans &Convert\ to\ HTML Претвори\ &у\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "УнеÑите наредбу или реч чије појашњење тражите:\n\nДодајте i_ за наредбе уноÑа (нпр. i_CTRL-X)\nДодајте c_ за наредбе командног режима (нпр. Ñ_<Del>)\nДодајте ' за имена опција (нпр. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "УнеÑите пут претраге за датотеке\nРаздвојите зарезима имена директоријума."
+
+let g:menutrans_tags_dialog = "УнеÑите имена датотека Ñа ознакама\nРаздвојите зарезима имена."
+
+let g:menutrans_textwidth_dialog = "УнеÑите нову ширину текÑта (0 Ñпречава прелом)"
+
+let g:menutrans_fileformat_dialog = "Изаберите врÑту датотеке"
+
+let menutrans_no_file = "[Ðема датотеке]"
+
+" vim: tw=0 keymap=serbcyril-US
diff --git a/runtime/lang/menu_sv.latin1.vim b/runtime/lang/menu_sv.latin1.vim
new file mode 100644
index 000000000..c5c46714d
--- /dev/null
+++ b/runtime/lang/menu_sv.latin1.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Swedish
+
+source <sfile>:p:h/menu_sv_se.latin1.vim
diff --git a/runtime/lang/menu_sv.utf-8.vim b/runtime/lang/menu_sv.utf-8.vim
new file mode 100644
index 000000000..6b4f2949c
--- /dev/null
+++ b/runtime/lang/menu_sv.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Swedish for UTF-8 encoding
+
+source <sfile>:p:h/menu_sv_se.latin1.vim
diff --git a/runtime/lang/menu_sv_se.latin1.vim b/runtime/lang/menu_sv_se.latin1.vim
new file mode 100644
index 000000000..abeb562a2
--- /dev/null
+++ b/runtime/lang/menu_sv_se.latin1.vim
@@ -0,0 +1,238 @@
+" Menu Translations: Swedish
+" Maintainer: Johan Svedberg <johan@svedberg.pp.se>
+" Last Change: 2004 May 16
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+" The translations below are in latin1, but they work for cp1252 and
+" iso-8859-15 without conversion as well.
+if &enc != "cp1252" && &enc != "iso-8859-15"
+ scriptencoding latin1
+endif
+
+" Help menu
+menutrans &Help &Hjälp
+menutrans &Overview<Tab><F1> &Översikt<Tab><F1>
+menutrans &How-to\ links &Hur-göra-länkar
+menutrans &User\ Manual &Användarmanual
+"menutrans &GUI &GUI
+menutrans &Credits &Tack
+menutrans Co&pying &Kopieringsrättigheter
+menutrans &Find\.\.\. &Sök\.\.\.
+menutrans &Version &Version
+menutrans &About &Om
+
+" File menu
+menutrans &File &Arkiv
+menutrans &Open\.\.\.<Tab>:e &Öppna\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp Öppna\ i\ splitt-vy\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &Ny<Tab>:enew
+menutrans &Close<Tab>:close S&täng<Tab>:close
+menutrans &Save<Tab>:w &Spara<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Spara\ som\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. Dela\ diff\ med\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Dela\ lappad\ med\.\.\.
+menutrans &Print Skriv\ &ut
+menutrans Sa&ve-Exit<Tab>:wqa Spara\ &och\ avsluta<Tab>:wqa
+menutrans E&xit<Tab>:qa &Avsluta<Tab>:qa
+
+" Edit menu
+menutrans &Edit &Redigera
+menutrans &Undo<Tab>u &Ångra<Tab>u
+menutrans &Redo<Tab>^R &Gör\ om<Tab>^R
+menutrans Rep&eat<Tab>\. &Repetera<Tab>\.
+menutrans Cu&t<Tab>"+x Klipp\ &ut<Tab>"+x
+menutrans &Copy<Tab>"+y &Kopiera<Tab>"+y
+menutrans &Paste<Tab>"+gP Klistra &in<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Sätt\ in\ &före<Tab>[p
+menutrans Put\ &After<Tab>]p Sätt\ in\ &efter<Tab>]p
+menutrans &Select\ all<Tab>ggVG &Markera\ allt<Tab>ggVG
+menutrans &Find\.\.\. &Sök\.\.\.
+menutrans &Find<Tab>/ &Sök<Tab>/
+menutrans Find\ and\ Rep&lace\.\.\. Sök\ och\ ersätt\.\.\.
+menutrans Find\ and\ Rep&lace<Tab>:%s Sök\ och\ ersätt<Tab>:%s
+menutrans Find\ and\ Rep&lace Sök\ och\ ersätt
+menutrans Find\ and\ Rep&lace<Tab>:s Sök\ och\ ersätt<Tab>:s
+menutrans Settings\ &Window In&ställningar
+menutrans &Global\ Settings Gl&obala\ inställningar
+menutrans F&ile\ Settings Fi&linställningar
+menutrans C&olor\ Scheme F&ärgschema
+menutrans &Keymap &Tangentbordsuppsättning
+
+" Edit.Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Växla\ mönsterframhävning<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Växla\ ignorering\ av\ storlek<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Växla\ matchningsvisning<Tab>:set\ sm!
+menutrans &Context\ lines Sammanhangsrader
+menutrans &Virtual\ Edit Virtuell\ redigering
+menutrans Never Aldrig
+menutrans Block\ Selection Blockval
+menutrans Insert\ mode Infogningsläge
+menutrans Block\ and\ Insert Block\ och\ infogning
+menutrans Always Alltid
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! Växla\ infogningsläge<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. Sökväg\.\.\.
+menutrans Ta&g\ Files\.\.\. Taggfiler\.\.\.
+menutrans Toggle\ &Toolbar Växla\ verktygsrad
+menutrans Toggle\ &Bottom\ Scrollbar Växla\ rullningslista\ i\ botten
+menutrans Toggle\ &Left\ Scrollbar Växla\ vänster\ rullningslista
+menutrans Toggle\ &Right\ Scrollbar Växla\ höger\ rullningslista
+menutrans None Ingen
+
+" Edit.File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! Växla\ radnumrering<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! Växla\ listläge<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! Växla\ radbrytning<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! Växla\ radbrytning\ vid\ ord<tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! Växla\ tab-expandering<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! Växla\ auto-indentering<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! Växla\ C-indentering<Tab>:set\ cin!
+menutrans Te&xt\ Width\.\.\. Textbredd\.\.\.
+menutrans &File\ Format\.\.\. Filformat\.\.\.
+
+" Tools menu
+menutrans &Tools &Verktyg
+menutrans &Jump\ to\ this\ tag<Tab>g^] &Hoppa\ till\ den\ här\ taggen<Tab>g^]
+menutrans Jump\ &back<Tab>^T Hoppa\ tillbaka<Tab>^T
+menutrans Build\ &Tags\ File Bygg\ taggfil
+menutrans &Make<Tab>:make &Bygg<Tab>:make
+menutrans &List\ Errors<Tab>:cl Listfel<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! Listmeddelande<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn Nästa\ fel<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp Tidigare\ fel<Tab>:cp
+menutrans &Older\ List<Tab>:cold &Äldre\ lista<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &Nyare\ lista<Tab>:cnew
+menutrans Error\ &Window Felfönster
+menutrans &Update<Tab>:cwin &Uppdatera<Tab>:cwin
+menutrans &Open<Tab>:copen &Öppna<Tab>:copen
+menutrans &Close<Tab>:cclose &Stäng<Tab>:cclose
+menutrans &Convert\ to\ HEX<Tab>:%!xxd Konvertera\ till\ HEX<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Konvertera\ tillbaka<Tab>:%!xxd\ -r
+menutrans &Set\ Compiler Sätt\ kompilerare
+
+" Tools.Folding
+menutrans &Enable/Disable\ folds<Tab>zi Växla\ veck<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv Visa\ markörrad<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Visa\ bara\ markörrad<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm Stäng\ mer\ veck<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM Stäng\ alla\ veck<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Öppna\ mer\ veck<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Öppna\ mer\ veck<Tab>zR
+menutrans Fold\ Met&hod Veckmetod
+menutrans M&anual Manual
+menutrans I&ndent Indentering
+menutrans E&xpression Uttryck
+menutrans S&yntax Syntax
+menutrans &Folding Vikning
+menutrans &Diff Differans
+menutrans Ma&rker Markering
+menutrans Create\ &Fold<Tab>zf Skapa\ veck<Tab>zf
+menutrans &Delete\ Fold<Tab>zd Ta\ bort\ veck<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD Ta\ bort\ alla\ veck<Tab>zD
+menutrans Fold\ col&umn\ width Veckcolumnsbredd
+
+" Tools.Diff
+menutrans &Update Uppdatera
+menutrans &Get\ Block Hämta\ block
+menutrans &Put\ Block Lämna\ block
+
+" Names for buffer menu.
+menutrans &Buffers &Buffertar
+menutrans &Refresh\ menu Uppdatera\ meny
+menutrans &Delete Ta\ bort
+menutrans &Alternate Alternativ
+menutrans &Next &Nästa
+menutrans &Previous &Tidigare
+
+" Window menu
+menutrans &Window &Fönster
+menutrans &New<Tab>^Wn &Nytt<Tab>^Wn
+menutrans S&plit<Tab>^Ws Dela<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ Dela\ till\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv Dela\ &vertikalt<Tab>^Wv
+menutrans Split\ File\ E&xplorer Dela\ filhanterare
+menutrans &Close<Tab>^Wc &Stäng<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo &Stäng\ alla\ andra<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww Nästa<Tab>^Ww
+menutrans P&revious<Tab>^WW &Tidigare<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &Samma\ storlek<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ &Maximal\ storlek<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ M&inimal\ storlek<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| Maximal\ bredd<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| Minimal\ bredd<Tab>^W1\|
+menutrans Move\ &To Flytta\ till
+menutrans &Top<Tab>^WK Toppen<Tab>^WK
+menutrans &Bottom<Tab>^WJ Botten<Tab>^WJ
+menutrans &Left\ side<Tab>^WH &Vänstra\ sidan<Tab>^WH
+menutrans &Right\ side<Tab>^WL &Högra\ sidan<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR Rotera\ upp<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr Rotera\ ned<Tab>^Wr
+menutrans Select\ Fo&nt\.\.\. Välj\ typsnitt\.\.\.
+
+" The popup menu
+menutrans &Undo &Ångra
+menutrans Cu&t Klipp\ ut
+menutrans &Copy &Kopiera
+menutrans &Paste &Klistra\ in
+menutrans &Delete &Ta\ bort
+menutrans Select\ Blockwise Markera\ blockvis
+menutrans Select\ &Word Markera\ ord
+menutrans Select\ &Line Markera\ rad
+menutrans Select\ &Block Markera\ block
+menutrans Select\ &All Markera\ allt
+
+" The GUI toolbar (for Win32 or GTK)
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open Öppna fil
+ tmenu ToolBar.Save Spara aktuell fil
+ tmenu ToolBar.SaveAll Spara alla filer
+ tmenu ToolBar.Print Skriv ut
+ tmenu ToolBar.Undo Ångra
+ tmenu ToolBar.Redo Gör om
+ tmenu ToolBar.Cut Klipp ut
+ tmenu ToolBar.Copy Kopiera
+ tmenu ToolBar.Paste Klistra in
+ tmenu ToolBar.Find Sök...
+ tmenu ToolBar.FindNext Sök nästa
+ tmenu ToolBar.FindPrev Sök tidigare
+ tmenu ToolBar.Replace Sök och ersätt...
+ tmenu ToolBar.LoadSesn Ladda session
+ tmenu ToolBar.SaveSesn Spara session
+ tmenu ToolBar.RunScript Kör ett Vim-skript
+ tmenu ToolBar.Make Bygg aktuellt projekt
+ tmenu ToolBar.Shell Öppna ett kommandoskal
+ tmenu ToolBar.RunCtags Kör Ctags
+ tmenu ToolBar.TagJump Hoppa till tagg under markör
+ tmenu ToolBar.Help Hjälp
+ tmenu ToolBar.FindHelp Sök i hjälp
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Syntax
+menutrans Set\ '&syntax'\ only Sätt\ bara\ 'syntax'
+menutrans Set\ '&filetype'\ too Sätt\ 'filetype'\ också
+menutrans &Off &Av
+menutrans &Manual &Manual
+menutrans A&utomatic Automatiskt
+menutrans on/off\ for\ &This\ file Av/På\ för\ aktuell\ fil
+menutrans Co&lor\ test Färgtest
+menutrans &Highlight\ test Framhävningstest
+menutrans &Convert\ to\ HTML Konvertera\ till\ &HTML
+menutrans &Show\ individual\ choices Visa\ individuella\ val
+
+" dialog texts
+let menutrans_no_file = "[Ingen fil]"
+let menutrans_help_dialog = "Skriv in ett kommando eller ord som du vill söka hjälp på:\n\nBörja med i_ för infogninglägeskommandon (t.ex. i_CTRL-X)\nBörja med c_ för kommandoradredigeringskommandon (t.ex. c_<Del>)\nBörja med ' för ett inställningsnamn (t.ex. 'shiftwidth')"
+let g:menutrans_path_dialog = "Skriv in sökväg för filer.\nSeparera katalognamn med komma"
+let g:menutrans_tags_dialog = "Skriv in namn på taggfiler.\nSeparera namn med komma."
+let g:menutrans_textwidth_dialog = "Välj ny textbredd (0 för att förhindra formatering): "
+let g:menutrans_fileformat_dialog = "Välj filformat som filen ska sparas med"
diff --git a/runtime/lang/menu_sv_se.utf-8.vim b/runtime/lang/menu_sv_se.utf-8.vim
new file mode 100644
index 000000000..6b4f2949c
--- /dev/null
+++ b/runtime/lang/menu_sv_se.utf-8.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Swedish for UTF-8 encoding
+
+source <sfile>:p:h/menu_sv_se.latin1.vim
diff --git a/runtime/lang/menu_uk_ua.koi8-u.vim b/runtime/lang/menu_uk_ua.koi8-u.vim
new file mode 100644
index 000000000..6284145d2
--- /dev/null
+++ b/runtime/lang/menu_uk_ua.koi8-u.vim
@@ -0,0 +1,246 @@
+" Menu Translations: Ukrainian
+" Maintainer: Bohdan Vlasyuk <bohdan@vstu.edu.ua>
+" Last Change: 11 Oct 2001
+
+"
+" Please, see readme at htpp://www.vstu.edu.ua/~bohdan/vim before any
+" complains, and even if you won't complain, read it anyway.
+"
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+scriptencoding koi8-u
+
+" Help menu
+menutrans &Help &äÏÐÏÍÏÇÁ
+menutrans &Overview<Tab><F1> &úÁÇÁÌØÎÁ\ ¶ÎÆÏÒÍÁæÑ<Tab><F1>
+menutrans &User\ Manual &ëÅÒ¦×ÎÉÃÔ×Ï\ ÄÌÑ\ ËÏÒÉÓÔÕ×ÁÞÁ
+menutrans &How-to\ links &ñË-úÒÏÂÉÔÉ?
+"menutrans &GUI &GIU
+menutrans &Credits &ðÏÄÑËÉ
+menutrans Co&pying &òÏÚÐÏ×ÓÀÄÖÅÎÎÑ
+menutrans O&rphans &äÏÐÏÍÏÇÁ\ ÓÉÒÏÔÁÍ
+menutrans &Version &÷ÅÒÓ¦Ñ
+menutrans &About ðÒÏ\ &ÐÒÏÇÒÁÍÕ
+
+" File menu
+menutrans &File &æÁÊÌ
+menutrans &Open\.\.\.<Tab>:e &÷¦ÄËÒÉÔÉ\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &òÏÚĦÌÉÔÉ\ צËÎÏ\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew &îÏ×ÉÊ<Tab>:enew
+menutrans &Close<Tab>:close &úÁËÒÉÔÉ<Tab>:close
+menutrans &Save<Tab>:w úÁ&ÐÁÍ'ÑÔÁÔÉ<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav úÁÐÁÍ'ÑÔÁÔÉ\ &ÑË\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. ðÏ&Ò¦×ÎÑÔÉ\ Ú\.\.\.
+menutrans Split\ Patched\ &By\.\.\. úÁ&ÌÁÔÁÔÉ\.\.\.
+menutrans &Print &äÒÕËÕ×ÁÔÉ
+menutrans Sa&ve-Exit<Tab>:wqa úÁÐÉÓÁÔÉ\ ¦\ ×É&ÊÔÉ<Tab>:wqa
+menutrans E&xit<Tab>:qa &÷ÉȦÄ<Tab>:qa
+
+" Edit menu
+menutrans &Edit &òÅÄÁÇÕ×ÁÔÉ
+menutrans &Undo<Tab>u &÷¦ÄͦÎÉÔÉ<Tab>u
+menutrans &Redo<Tab>^R &ðÏ×ÅÒÎÕÔÉ<Tab>^R
+menutrans Rep&eat<Tab>\. ð&Ï×ÔÏÒÉÔÉ<Tab>\.
+menutrans Cu&t<Tab>"+x ÷É&Ò¦ÚÁÔÉ<Tab>"+x
+menutrans &Copy<Tab>"+y &ëÏЦÀ×ÁÔÉ<Tab>"+y
+menutrans &Paste<Tab>"+gP ÷&ÓÔÁ×ÉÔÉ<Tab>"+gP
+menutrans Put\ &Before<Tab>[p ÷ÓÔÁ×ÉÔÉ\ ÐÏÐÅ&ÒÅÄÕ<Tab>[p
+menutrans Put\ &After<Tab>]p ÷ÓÔÁ×ÉÔÉ\ Ð&¦ÓÌÑ<Tab>]p
+menutrans &Select\ all<Tab>ggVG ÷É&ÂÒÁÔÉ\ ÕÓÅ<Tab>ggVG
+menutrans &Find\.\.\. &úÎÁÊÔÉ\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. úÁ&ͦÎÉÔÉ\.\.\.
+menutrans Settings\ &Window ÷¦ËÎÏ\ &ÎÁÌÁÛÔÕ×ÁÎØ
+menutrans &Global\ Settings úÁÇÁÌØΦ\ ÎÁ&ÌÁÛÔÕ×ÁÎÎÑ
+menutrans F&ile\ 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 &Shiftwidth &úÓÕ×
+menutrans Te&xt\ Width\.\.\. &ûÉÒÉÎÁ\ ÔÅËÓÔÕ\.\.\.
+menutrans &File\ Format\.\.\. &æÏÒÍÁÔ\ ÆÁÊÌÕ\.\.\.
+menutrans Soft\ &Tabstop ðÏÚÉæÑ\ &ÔÁÂÕÌÑæ§
+menutrans C&olor\ Scheme &ëÏÌØÏÒÉ
+menutrans Select\ Fo&nt\.\.\. ÷ÉÂÒÁÔÉ\ &ÛÒÉÆÔ\.\.\.
+
+
+menutrans &Keymap òÅÖÉÍ\ ËÌÁצÁÔÕÒÉ
+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 Never î¦ËÏÌÉ
+menutrans Block\ Selection ÷ɦÒ\ âÌÏËÕ
+menutrans Insert\ mode òÅÖÉÍ\ ×ÓÔÁ×ËÉ
+menutrans Block\ and\ Insert ÷ɦÒ\ ¦\ ×ÓÔÁ×ËÁ
+menutrans Always úÁ×ÖÄÉ
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! òÅÖÉÍ\ &×ÓÔÁ×ËÉ<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. &ûÌÑÈ\ ÐÏÛÕËÕ\.\.\.
+menutrans Ta&g\ Files\.\.\. æÁÊÌÉ\ &ÐÏͦÔÏË\.\.\.
+
+
+"
+" GUI options
+menutrans Toggle\ &Toolbar ðÁÎÅÌØ\ &¦ÎÓÔÒÕÍÅÎÔ¦×
+menutrans Toggle\ &Bottom\ Scrollbar &îÉÖÎÑ\ ̦ΦÊËÁ\ ÚÓÕ×Õ
+menutrans Toggle\ &Left\ Scrollbar &ì¦×Á\ ̦ΦÊËÁ\ ÚÓÕ×Õ
+menutrans Toggle\ &Right\ Scrollbar &ðÒÁ×Á\ ̦ΦÊËÁ\ ÚÓÕ×Õ
+
+" Programming menu
+menutrans &Tools &¶ÎÓÔÒÕÍÅÎÔÉ
+menutrans &Jump\ to\ this\ tag<Tab>g^] &ðÅÒÅÊÔÉ\ ÄÏ\ ÐÏͦÔËÉ<Tab>g^]
+menutrans Jump\ &back<Tab>^T ðÏ&×ÅÒÎÕÔÉÓÑ<Tab>^T
+menutrans Build\ &Tags\ File &óÔ×ÏÒÉÔÉ\ ÆÁÊÌ\ ÐÏͦÔÏË
+" Folding
+menutrans &Folding &úÇÏÒÔËÉ
+menutrans &Enable/Disable\ folds<Tab>zi &äÏÚ×ÏÌÉÔÉ/ÚÁÂÏÒÏÎÉÔÉ\ ÚÇÏÒÔËÉ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv &âÁÞÉÔÉ\ ÒÑÄÏË\ Ú\ ËÕÒÓÏÒÏÍ<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx âÁÞÉÔÉ\ &ÌÉÛÅ\ ÒÑÄÏË\ Ú\ ËÕÒÓÏÒÏÍ<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm úÁËÒÉÔÉ\ &¦ÌØÛÅ\ ÚÇÏÒÔ˦×<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM úÁËÒÉÔÉ\ &ÕÓ¦\ ÚÇÏÒÔËÉ<Tab>zM
+menutrans &Open\ all\ folds<Tab>zR ÷¦ÄËÒÉÔÉ\ Õ&Ó¦\ ÚÇÏÒÔËÉ<Tab>zR
+menutrans O&pen\ more\ folds<Tab>zr ÷¦ÄËÒÉÔÉ\ Â&¦ÌØÛÅ\ ÚÇÏÒÔ˦×<Tab>zr
+
+menutrans Create\ &Fold<Tab>zf ó&Ô×ÏÒÉÔÉ\ ÚÇÏÒÔÏË<Tab>zf
+menutrans &Delete\ Fold<Tab>zd &÷ÉÄÁÌÉÔÉ\ ÚÇÏÒÔÏË<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD ÷ÉÄÁÌÉÔ&É\ ÕÓ¦\ ÚÇÏÒÔËÉ<Tab>zD
+menutrans Fold\ column\ &width &ôÏ×ÝÉÎÁ\ ÒÑÄËÁ\ ÚÇÏÒÔ˦×
+menutrans Fold\ Met&hod &íÅÔÏÄ\ ÚÇÏÒÔÁÎÎÑ
+menutrans M&anual &òÕÞÎÉÊ
+menutrans I&ndent &÷¦ÄÓÔÕÐ
+menutrans E&xpression ÷&ÉÒÁÚ
+menutrans S&yntax &óÉÎÔÁËÓÉÞÎÏ
+menutrans Ma&rker ðÏ&ÚÎÁÞËÉ
+
+" Diff
+menutrans &Diff ðÏ&Ò¦×ÎÑÎÎÑ
+menutrans &Update &ðÏÎÏ×ÉÔÉ
+menutrans &Get\ Block &úÁÐÏÚÉÞÉÔÉ\ Ò¦ÚÎÉÃÀ
+menutrans &Put\ Block &÷ÐÒÏ×ÁÄÉÔÉ\ Ò¦ÚÎÉÃÀ
+
+" Make and stuff...
+menutrans &Make<Tab>:make &âÕÄÕ×ÁÔÉ(make)<Tab>:make
+menutrans &List\ Errors<Tab>:cl &óÐÉÓÏË\ ÐÏÍÉÌÏË<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! óÐ&ÉÓÏË\ ÐÏצÄÏÍÌÅÎØ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn &îÁÓÔÕÐÎÁ\ ÐÏÍÉÌËÁ<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp &ðÏÐÅÒÅÄÎÑ\ ÐÏÍÉÌËÁ<Tab>:cp
+menutrans &Older\ List<Tab>:cold &âÕ×Û¦\ ÐÏÍÉÌËÉ<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew &íÁÊÂÕÔΦ\ ÐÏÍÉÌËÉ<Tab>:cnew
+menutrans Error\ &Window &÷¦ËÎÏ\ ÐÏÍÉÌÏË
+menutrans &Update<Tab>:cwin &ðÏÎÏ×ÉÔÉ<Tab>:cwin
+menutrans &Close<Tab>:cclose &úÁËÒÉÔÉ<Tab>:cclose
+menutrans &Open<Tab>:copen &÷¦ÄËÒÉÔÉ<Tab>:copen
+
+menutrans &Set\ Compiler ÷ÓÔÁÎÏ×ÉÔÉ\ &ËÏÍЦÌÑÔÏÒ
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ðÅÒÅ×ÅÓÔÉ\ ×\ Û¦ÓÔÎÁÄÃÑÔËÏצ\ ËÏÄÉ<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ðÏ×ÅÒÎÕÔÉ\ ×\ ÄצÊËÏ×Õ\ ÆÏÒÍÕ<Tab>:%!xxd\ -r
+
+" Names for buffer menu.
+menutrans &Buffers &âÕÆÅÒÉ
+menutrans &Refresh\ menu &ðÏÎÏ×ÉÔÉ
+menutrans Delete &÷ÉÄÁÌÉÔÉ
+menutrans &Alternate &÷ÔÏÒÉÎÎÉÊ
+menutrans &Next &ó̦ÄÕÀÞÉÊ
+menutrans &Previous &ðÏÐÅÒÅÄΦÊ
+menutrans [No\ File] [îÅÍÁ¤\ æÁÊÌÁ]
+
+" Window menu
+menutrans &Window &÷¦ËÎÏ
+menutrans &New<Tab>^Wn &îÏ×Å<Tab>^Wn
+menutrans S&plit<Tab>^Ws &òÏÚĦÌÉÔÉ<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ òÏÚĦÌÉÔÉ\ ÄÌÑ\ &×ÔÏÒÉÎÎÏÇÏ\ ÆÁÊÌÕ<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv òÏÚĦÌÉÔÉ\ &ÐÏÐÅÒÅË<Tab>^Wv
+"menutrans Split\ &Vertically<Tab>^Wv &òÏÚĦÌÉÔÉ\ ÐÏÐÅÒÅË<Tab>^Wv
+menutrans Split\ File\ E&xplorer òÏÚĦÌÉÔÉ\ ÄÌÑ\ &ÐÅÒÅÇÌÑÄÕ\ ÆÁÊ̦×
+
+menutrans &Close<Tab>^Wc &úÁËÒÉÔÉ<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo úÁËÒÉÔÉ\ ÕÓ¦\ &¦ÎÛ¦<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww &îÁÓÔÕÐÎÅ<Tab>^Ww
+menutrans P&revious<Tab>^WW &ðÏÐÅÒÅÄΤ<Tab>^WW
+menutrans &Equal\ Size<Tab>^W= &÷ÉÒ¦×ÎÑÔÉ\ ÒÏÚͦÒ<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ îÁÊ&¦ÌØÛÁ\ ×ÉÓÏÔÁ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_ îÁÊ&ÍÅÎÛÁ\ ×ÉÓÏÔÁ<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| îÁʦ&ÌØÛÁ\ ÛÉÒÉÎÁ<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| îÁÊÍÅÎ&ÛÁ\ ÛÉÒÉÎÁ<Tab>^W1\|
+menutrans Move\ &To &úͦÓÔÉÔÉ
+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
+menutrans Rotate\ &Up<Tab>^WR &ãÉË̦ÞÎÏ\ ÄÏÇÏÒÉ<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ã&ÉË̦ÞÎÏ\ ÕÎÉÚ<Tab>^Wr
+
+" The popup menu
+menutrans &Undo &÷¦ÄͦÎÉÔÉ
+menutrans Cu&t ÷É&Ò¦ÚÁÔÉ
+menutrans &Copy &ëÏЦÀ×ÁÔÉ
+menutrans &Paste ÷&ÓÔÁ×ÉÔÉ
+menutrans &Delete ÷É&ÄÁÌÉÔÉ
+menutrans Select\ &Word ÷ÉÂÒÁÔÉ\ &ÓÌÏ×Ï
+menutrans Select\ &Line ÷ÉÂÒÁÔÉ\ &ÒÑÄÏË
+menutrans Select\ &Block ÷ÉÂÒÁÔÉ\ &ÂÌÏË
+menutrans Select\ &All ÷ÉÂÒÁÔÉ\ &ÕÓÅ
+
+
+
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ÷¦ÄËÒÉÔÉ ÆÁÊÌ
+ tmenu ToolBar.Save úÁÐÁÍ'ÑÔÁÔÉ ÆÁÊÌ
+ tmenu ToolBar.SaveAll úÁÐÁÍ'ÑÔÁÔÉ ÕÓ¦ ÆÁÊÌÉ
+ tmenu ToolBar.Print äÒÕËÕ×ÁÔÉ
+ tmenu ToolBar.Undo ÷¦ÄͦÎÉÔÉ
+ tmenu ToolBar.Redo ðÏ×ÅÒÎÕÔÉ
+ tmenu ToolBar.Cut ÷ÉÒ¦ÚÁÔÉ
+ tmenu ToolBar.Copy ëÏЦÀ×ÁÔÉ
+ tmenu ToolBar.Paste ÷ÓÔÁ×ÉÔÉ
+ tmenu ToolBar.Find úÎÁÊÔÉ...
+ tmenu ToolBar.FindNext úÎÁÊÔÉ ÎÁÓÔÕÐÎÉÊ
+ tmenu ToolBar.FindPrev úÎÁÊÔÉ ÐÏÐÅÒÅÄΦÊ
+ tmenu ToolBar.Replace úÁͦÎÉÔÉ...
+ tmenu ToolBar.LoadSesn úÁ×ÁÎÔÁÖÉÔÉ ÓÅÁÎÓ ÒÅÄÁÇÕ×ÁÎÎÑ
+ tmenu ToolBar.SaveSesn úÁÐÁÍ'ÑÔÁÔÉ ÓÅÁÎÓ ÒÅÄÁÇÕ×ÁÎÎÑ
+ tmenu ToolBar.RunScript ÷ÉËÏÎÁÔÉ ÆÁÊÌ ËÏÍÁÎÄ
+ tmenu ToolBar.Make úÂÕÄÕ×ÁÔÉ ÐÒÏÅËÔ
+ tmenu ToolBar.Shell Shell
+ tmenu ToolBar.RunCtags óÔ×ÏÒÉÔÉ ÆÁÊÌ ÐÏͦÔÏË
+ tmenu ToolBar.TagJump ðÅÒÅÊÔÉ ÄÏ ÐÏͦÔËÉ
+ tmenu ToolBar.Help äÏÐÏÍÏÇÁ
+ tmenu ToolBar.FindHelp ðÏÛÕË Õ ÄÏÐÏÍÏÚ¦
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &óÉÎÔÁËÓÉÓ
+menutrans Set\ '&syntax'\ only ÷ÓÔÁÎÏ×ÌÀ×ÁÔÉ\ ÌÉÛÅ\ '&syntax'
+menutrans Set\ '&filetype'\ too ÷ÓÔÁÎÏ×ÌÀ×ÁÔÉ\ '&filetype'\ ÔÁËÏÖ
+menutrans &Off &÷ÉÍËÎÅÎÏ
+menutrans &Manual &òÕÞÎÉÊ
+menutrans A&utomatic &á×ÔÏÍÁÔÉÞÎÏ
+menutrans on/off\ for\ &This\ file ðÅÒÅÍËÎÕÔÉ\ ÄÌÑ\ ÃØÏÇÏ\ &ÆÁÊÌÁ
+menutrans Co&lor\ test ðÅÒÅצÒËÁ\ &ËÏÌØÏÒ¦×
+menutrans &Highlight\ test &ðÅÒÅצÒËÁ\ ×ÉĦÌÅÎÎÑ
+menutrans &Convert\ to\ HTML óÔ×ÏÒÉÔÉ\ &HTML
+
+" dialog texts
+let menutrans_no_file = "[îÅÍÁ¤\ æÁÊÌÁ]"
+let menutrans_help_dialog = "÷ËÁÖ¦ÔØ ËÏÍÁÎÄÕ ÁÂÏ ÓÌÏ×Ï ÄÌÑ ÐÏÛÕËÕ:\n\näÏÄÁÊÔÅ i_ ÄÌÑ ËÏÍÁÎÄ ÒÅÖÉÍÕ ×ÓÔÁ×ËÉ (ÎÁÐÒ. i_CTRL-X)\näÏÄÁÊÔÅ i_ ÄÌÑ ËÏÍÁÎÄÎÏÇÏ ÒÅÖÉÍÕ (ÎÁÐÒ. Ó_<Del>)\näÏÄÁÊÔÅ ' ÄÌÑ ÐÏÚÎÁÞÅÎÎÑ ÎÁÚ×É ÏÐæ§ (ÎÁÐÒ. 'shiftwidth')"
+let g:menutrans_path_dialog = "÷ËÁÖ¦ÔØ ÛÌÑÈ ÐÏÛÕËÕ ÆÁÊ̦×\nòÏÚĦÌÑÊÔÅ ÎÁÚ×É ÄÉÒÅËÔÏÒ¦Ê ËÏÍÁÍÉ."
+let g:menutrans_tags_dialog = "÷ËÁÖ¦ÔØ ÎÁÚ×É ÆÁÊÌ¦× ÐÏͦÔÏË\nòÏÚĦÌÑÊÔÅ ÎÁÚ×É ËÏÍÁÍÉ."
+let g:menutrans_textwidth_dialog = "÷ËÁÖ¦ÔØ ÎÏ×Õ ÛÉÒÉÎÕ ÔÅËÓÔÕ (0 ÄÌÑ ×¦ÄͦÎÉ ÆÏÍÁÔÕ×ÁÎÎÑ)"
+let g:menutrans_fileformat_dialog = "÷ÉÂÅÒ¦ÔØ ÆÏÒÍÁÔ ÆÁÊÌÕ"
+
diff --git a/runtime/lang/menu_zh.big5.vim b/runtime/lang/menu_zh.big5.vim
new file mode 100644
index 000000000..b07d8ef5f
--- /dev/null
+++ b/runtime/lang/menu_zh.big5.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/menu_chinese(taiwan)_taiwan.950.vim
diff --git a/runtime/lang/menu_zh.cp936.vim b/runtime/lang/menu_zh.cp936.vim
new file mode 100644
index 000000000..e398582b8
--- /dev/null
+++ b/runtime/lang/menu_zh.cp936.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Simplified Chinese (for Windows)
+
+source <sfile>:p:h/menu_chinese_gb.936.vim
diff --git a/runtime/lang/menu_zh.cp950.vim b/runtime/lang/menu_zh.cp950.vim
new file mode 100644
index 000000000..f437ce7c2
--- /dev/null
+++ b/runtime/lang/menu_zh.cp950.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Traditional Chinese
+
+source <sfile>:p:h/menu_chinese_taiwan.950.vim
diff --git a/runtime/lang/menu_zh.gb2312.vim b/runtime/lang/menu_zh.gb2312.vim
new file mode 100644
index 000000000..5a16e18ea
--- /dev/null
+++ b/runtime/lang/menu_zh.gb2312.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Simplified Chinese (for Windows)
+
+source <sfile>:p:h/menu_zh_cn.gb2312.vim
diff --git a/runtime/lang/menu_zh_cn.18030.vim b/runtime/lang/menu_zh_cn.18030.vim
new file mode 100644
index 000000000..99da41a9a
--- /dev/null
+++ b/runtime/lang/menu_zh_cn.18030.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Simplified Chinese
+
+source <sfile>:p:h/menu_zh_cn.gb2312.vim
diff --git a/runtime/lang/menu_zh_cn.cp936.vim b/runtime/lang/menu_zh_cn.cp936.vim
new file mode 100644
index 000000000..e398582b8
--- /dev/null
+++ b/runtime/lang/menu_zh_cn.cp936.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Simplified Chinese (for Windows)
+
+source <sfile>:p:h/menu_chinese_gb.936.vim
diff --git a/runtime/lang/menu_zh_cn.gb2312.vim b/runtime/lang/menu_zh_cn.gb2312.vim
new file mode 100644
index 000000000..b0eac38e7
--- /dev/null
+++ b/runtime/lang/menu_zh_cn.gb2312.vim
@@ -0,0 +1,230 @@
+" Menu Translations: Simplified Chinese (UNIX)
+" Translated By: Wang Jun <junw@turbolinux.com.cn>
+" Last Change: Tue Sep 4 11:26:52 CST 2001
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding gb2312
+
+" Help menu
+menutrans &Help °ïÖú(&H)
+menutrans &Overview<Tab><F1> Ô¤ÀÀ(&O)<Tab><F1>
+menutrans &User\ Manual Óû§ÊÖ²á(&U)
+menutrans &GUI ͼÐνçÃæ(&G)
+menutrans &How-to\ links HOWTOÎĵµ\.\.\.(&H)
+menutrans &Credits ×÷Õß(&C)
+menutrans Co&pying °æȨ(&P)
+menutrans &Version °æ±¾(&V)
+menutrans &About ¹ØÓÚ\ Vim(&A)
+
+" File menu
+menutrans &File Îļþ(&F)
+menutrans &Open\.\.\.<Tab>:e ´ò¿ª(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp ·Ö¸î´°¿Ú²¢´ò¿ª(&L)<Tab>:sp
+menutrans &New<Tab>:enew н¨(&N)<Tab>:enew
+menutrans &Close<Tab>:close ¹Ø±Õ(&C)<Tab>:close
+menutrans &Save<Tab>:w ±£´æ(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav Áí´æΪ(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. ·Ö¸î±È½Ï(&Diff)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. ·Ö¸î´ò²¹¶¡(&Patch)\.\.\.
+menutrans &Print ´òÓ¡(&P)
+menutrans Sa&ve-Exit<Tab>:wqa ±£´æ²¢Í˳ö(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa Í˳ö(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit ±à¼­(&E)
+menutrans &Undo<Tab>u »Ö¸´(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP Õ³Ìû(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p Ìùµ½¹â±êÇ°(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p Ìùµ½¹â±êºó(&A)<Tab>]p
+menutrans &Delete<Tab>x ɾ³ý(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG È«Ñ¡(&S)<Tab>ggvG
+menutrans &Find\.\.\. ²éÕÒ(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ²éÕÒÌæ»»(&L)\.\.\.
+menutrans Settings\ &Window É趨´°¿Ú(&W)
+menutrans &Global\ Settings È«¾ÖÉ趨(&G)
+
+" Build boolean options
+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 ÉÏÏÂÎÄÐÐÊý(&C)
+
+menutrans &Virtual\ Edit ¿ÉÊÓ»¯±à¼­Ä£Ê½(&V)
+menutrans Never ´Ó²»
+menutrans Block\ Selection ¿éÑ¡Ôñ
+menutrans Insert\ mode ²åÈëģʽ
+menutrans Block\ and\ Insert ¿éÑ¡ÔñÓë²åÈëģʽ
+menutrans Always ËùÓÐģʽ
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! ¿ª/¹Ø²åÈëģʽ<Tab>:set\ im!
+
+menutrans Search\ &Path\.\.\. ²éÕÒ·¾¶\.\.\.(&P)
+
+menutrans Ta&g\ Files\.\.\. ±êÇ©Îļþ\.\.\.(&g)
+
+" GUI options
+menutrans Toggle\ &Toolbar ¿ª/¹Ø¹¤¾ßÌõ(&T)
+menutrans Toggle\ &Bottom\ Scrollbar ¿ª/¹Øµ×²¿¹ö¶¯Ìõ(&B)
+menutrans Toggle\ &Left\ Scrollbar ¿ª/¹Ø×ó¶Ë¹ö¶¯Ìõ(&L)
+menutrans Toggle\ &Right\ Scrollbar ¿ª/¹ØÓҶ˹ö¶¯Ìõ(&R)
+
+
+" Edit/File Settings
+menutrans F&ile\ Settings ÎļþÉ趨(&i)
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! ¿ª/¹ØÏÔʾÐкÅ<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! ¿ª/¹ØÏÔʾTab<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! ¿ª/¹Øexpand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! ¿ª/¹Øauto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! ¿ª/¹ØC-indent<Tab>:set\ cin!
+
+
+" other options
+menutrans &Shiftwidth ËõÅÅ¿í¶È(&S)
+menutrans Soft\ &Tabstop αTab¿í¶È(&T)
+menutrans Te&xt\ Width\.\.\. Ò³Ãæ¿í¶È(&x)\.\.\.
+menutrans &File\ Format\.\.\. Îļþ¸ñʽ(&F)\.\.\.
+
+menutrans C&olor\ Scheme µ÷É«°å(&o)
+menutrans Select\ Fo&nt\.\.\. Ñ¡Ôñ×ÖÌå(&n)\.\.\.
+
+
+" Programming menu
+menutrans &Tools ¹¤¾ß(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] ¼ìË÷¹â±ê´¦µÄ±êÇ©¹Ø¼ü×Ö(tag)(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T Ìø»Ø¼ìË÷Ç°µÄλÖÃ(&B)<Tab>^T
+menutrans Build\ &Tags\ File ½¨Á¢±êÇ©Ë÷ÒýÎļþ\ Tags(&T)
+menutrans &Folding FoldingÉ趨(&F)
+menutrans &Diff ±È½Ï(&D)
+menutrans &Make<Tab>:make Ö´ÐÐ\ Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl Áгö±àÒë´íÎó(&E)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! ÁгöËùÓÐÐÅÏ¢(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn ÏÂÒ»¸ö±àÒë´íÎó´¦(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp ÉÏÒ»¸ö±àÒë´íÎó´¦(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold ¾É´íÎóÁбí(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew дíÎóÁбí(&E)<Tab>:cnew
+menutrans Error\ &Window ´íÎóÐÅÏ¢´°¿Ú(&W)
+menutrans &Set\ Compiler ÉèÖñàÒëÆ÷(&S)
+menutrans &Convert\ to\ HEX<Tab>:%!xxd ת»»³É16½øÖÆ<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r ´Ó16½øÖÆת»»»ØÎÄ×Ö<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi ʹÓÃ/²»Ê¹ÓÃFolding(&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 ¹Ø±ÕFolds(&L)<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM ¹Ø±ÕËùÓÐFolds(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr Õ¹¿ªFolds(&P)<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR Õ¹¿ªËùÓÐFolds(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod Fold·½Ê½(&H)
+menutrans Create\ &Fold<Tab>zf ½¨Á¢Fold(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd ɾ³ýFold(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD ɾ³ýËùÓÐFold(&A)<Tab>zD
+" moving around in folds
+menutrans Fold\ column\ &width É趨FoldÀ¸¿í(&W)
+
+" Tools.Diff Menu
+menutrans &Update ¸üÐÂ(&U)
+menutrans &Get\ Block È¡µÃ²»Í¬²¿·Ö(&G)
+menutrans &Put\ Block ½«²»Í¬²¿·ÖÓ¦Óõ½¶Ô·½(&P)
+
+
+" Names for buffer menu.
+menutrans &Buffers »º³åÇø(&B)
+menutrans &Refresh\ menu ¸üÐÂ(&R)
+menutrans &Delete ɾ³ý(&D)
+menutrans &Alternate ÐÞ¸Ä(&L)
+menutrans &Next ÏÂÒ»¸ö(&N)
+menutrans &Previous Ç°Ò»¸ö(&P)
+
+" Window menu
+menutrans &Window ´°¿Ú(&W)
+menutrans &New<Tab>^Wn н¨´°¿Ú(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws ·Ö¸î´°¿Ú(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ ·Ö¸îµ½#(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv ´¹Ö±·Ö¸î(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer Îļþä¯ÀÀÆ÷ʽ·Ö¸î(&X)
+menutrans &Close<Tab>^Wc ¹Ø±Õ´°¿Ú(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo ¹Ø±ÕÆäËü´°¿Ú(&O)<Tab>^Wo
+menutrans Move\ &To Òƶ¯µ½(&T)
+menutrans &Top<Tab>^WK ¶¥¶Ë(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ µ×¶Ë(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH ×ó±ß(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL ÓÒ±ß(&R)<Tab>^WL
+" menutrans Ne&xt<Tab>^Ww ÏÂÒ»¸ö(&X)<Tab>^Ww
+" menutrans P&revious<Tab>^WW ÉÏÒ»¸ö(&R)<Tab>^WW
+menutrans Rotate\ &Up<Tab>^WR ÉÏÒÆ´°¿Ú(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr ÏÂÒÆ´°¿Ú(&D)<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= ËùÓд°¿ÚµÈ¸ß(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ ×î´ó¸ß¶È(&M)<Tab>^W
+menutrans M&in\ Height<Tab>^W1_ ×îС¸ß¶È(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| ×î´ó¿í¶È(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| ×îС¿í¶È(&h)<Tab>^W1\|
+"
+" The popup menu
+menutrans &Undo ³·Ïú(&U)
+menutrans Cu&t ¼ôÇÐ(&T)
+menutrans &Copy ¸´ÖÆ(&C)
+menutrans &Paste Õ³Ìû(&P)
+menutrans &Delete ɾ³ý(&D)
+menutrans Select\ Blockwise BlockwiseÑ¡Ôñ
+menutrans Select\ &Word Ñ¡Ôñµ¥´Ê(&W)
+menutrans Select\ &Line Ñ¡ÔñÐÐ(&L)
+menutrans Select\ &Block Ñ¡Ôñ¿é(&B)
+menutrans Select\ &All È«Ñ¡(&A)
+"
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open ´ò¿ªÎļþ
+ tmenu ToolBar.Save ±£´æµ±Ç°Îļþ
+ tmenu ToolBar.SaveAll ±£´æÈ«²¿Îļþ
+ tmenu ToolBar.Print ´òÓ¡
+ tmenu ToolBar.Undo ³·ÏúÉÏ´ÎÐÞ¸Ä
+ tmenu ToolBar.Redo ÖØ×öÉϴγ·ÏúµÄ¶¯×÷
+ tmenu ToolBar.Cut ¼ôÇÐÖÁ¼ôÌù°å
+ tmenu ToolBar.Copy ¸´ÖƵ½¼ôÌù°å
+ tmenu ToolBar.Paste ÓɼôÌù°åÕ³Ìû
+ tmenu ToolBar.Find ²éÕÒ...
+ tmenu ToolBar.FindNext ²éÕÒÏÂÒ»¸ö
+ tmenu ToolBar.FindPrev ²éÕÒÉÏÒ»¸ö
+ tmenu ToolBar.Replace Ìæ»»...
+ tmenu ToolBar.LoadSesn ¼ÓÔػỰ
+ tmenu ToolBar.SaveSesn ±£´æµ±Ç°µÄ»á»°
+ tmenu ToolBar.RunScript ÔËÐÐVim½Å±¾
+ tmenu ToolBar.Make Ö´ÐÐ Make
+ tmenu ToolBar.Shell ´ò¿ªÒ»¸öÃüÁî´°¿Ú
+ tmenu ToolBar.RunCtags Ö´ÐÐ ctags
+ tmenu ToolBar.TagJump Ìøµ½µ±Ç°¹â±êλÖõıêÇ©
+ tmenu ToolBar.Help Vim °ïÖú
+ tmenu ToolBar.FindHelp ²éÕÒ Vim °ïÖú
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax Óï·¨(&S)
+menutrans Set\ '&syntax'\ only Ö»É趨\ 'syntax'(&s)
+menutrans Set\ '&filetype'\ too Ò²É趨\ 'filetype'(&f)
+menutrans &Off ¹Ø±Õ(&O)
+menutrans &Manual ÊÖ¶¯É趨(&M)
+menutrans A&utomatic ×Ô¶¯É趨(&U)
+menutrans on/off\ for\ &This\ file Ö»¶ÔÕâ¸öÎļþ´ò¿ª/¹Ø±Õ(&T)
+menutrans Co&lor\ test É«²ÊÏÔʾ²âÊÔ(&L)
+menutrans &Highlight\ test Ó﷨Ч¹û²âÊÔ(&H)
+menutrans &Convert\ to\ HTML ת»»³É\ HTML\ ¸ñʽ(&C)
diff --git a/runtime/lang/menu_zh_cn.gbk.vim b/runtime/lang/menu_zh_cn.gbk.vim
new file mode 100644
index 000000000..99da41a9a
--- /dev/null
+++ b/runtime/lang/menu_zh_cn.gbk.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Simplified Chinese
+
+source <sfile>:p:h/menu_zh_cn.gb2312.vim
diff --git a/runtime/lang/menu_zh_cn.utf-8.vim b/runtime/lang/menu_zh_cn.utf-8.vim
new file mode 100644
index 000000000..0dd446e10
--- /dev/null
+++ b/runtime/lang/menu_zh_cn.utf-8.vim
@@ -0,0 +1,230 @@
+" Menu Translations: Simplified Chinese (UTF-8)
+" Translated By: Wang Jun <junw@turbolinux.com.cn>
+" Last Change: Tue Sep 4 11:26:52 CST 2001
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help 帮助(&H)
+menutrans &Overview<Tab><F1> 预览(&O)<Tab><F1>
+menutrans &User\ Manual 用户手册(&U)
+menutrans &GUI 图形界é¢(&G)
+menutrans &How-to\ links HOWTO文档\.\.\.(&H)
+menutrans &Credits 作者(&C)
+menutrans Co&pying 版æƒ(&P)
+menutrans &Version 版本(&V)
+menutrans &About 关于\ Vim(&A)
+
+" File menu
+menutrans &File 文件(&F)
+menutrans &Open\.\.\.<Tab>:e 打开(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp 分割窗å£å¹¶æ‰“å¼€(&L)<Tab>:sp
+menutrans &New<Tab>:enew 新建(&N)<Tab>:enew
+menutrans &Close<Tab>:close 关闭(&C)<Tab>:close
+menutrans &Save<Tab>:w ä¿å­˜(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav å¦å­˜ä¸º(&A)\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\. 分割比较(&Diff)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. 分割打补ä¸(&Patch)\.\.\.
+menutrans &Print 打å°(&P)
+menutrans Sa&ve-Exit<Tab>:wqa ä¿å­˜å¹¶é€€å‡º(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa 退出(&X)<Tab>:qa
+
+" Edit menu
+menutrans &Edit 编辑(&E)
+menutrans &Undo<Tab>u æ¢å¤(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP 粘帖(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p 贴到光标å‰(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p 贴到光标åŽ(&A)<Tab>]p
+menutrans &Delete<Tab>x 删除(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG 全选(&S)<Tab>ggvG
+menutrans &Find\.\.\. 查找(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. 查找替æ¢(&L)\.\.\.
+menutrans Settings\ &Window 设定窗å£(&W)
+menutrans &Global\ Settings 全局设定(&G)
+
+" Build boolean options
+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 上下文行数(&C)
+
+menutrans &Virtual\ Edit å¯è§†åŒ–编辑模å¼(&V)
+menutrans Never 从ä¸
+menutrans Block\ Selection å—选择
+menutrans Insert\ mode æ’入模å¼
+menutrans Block\ and\ Insert å—选择与æ’入模å¼
+menutrans Always 所有模å¼
+
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! å¼€/å…³æ’入模å¼<Tab>:set\ im!
+
+menutrans Search\ &Path\.\.\. 查找路径\.\.\.(&P)
+
+menutrans Ta&g\ Files\.\.\. 标签文件\.\.\.(&g)
+
+" GUI options
+menutrans Toggle\ &Toolbar å¼€/关工具æ¡(&T)
+menutrans Toggle\ &Bottom\ Scrollbar å¼€/关底部滚动æ¡(&B)
+menutrans Toggle\ &Left\ Scrollbar å¼€/关左端滚动æ¡(&L)
+menutrans Toggle\ &Right\ Scrollbar å¼€/å…³å³ç«¯æ»šåŠ¨æ¡(&R)
+
+
+" Edit/File Settings
+menutrans F&ile\ Settings 文件设定(&i)
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! å¼€/关显示行å·<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! 开/关显示Tab<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! å¼€/å…³expand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! å¼€/å…³auto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! å¼€/å…³C-indent<Tab>:set\ cin!
+
+
+" other options
+menutrans &Shiftwidth 缩排宽度(&S)
+menutrans Soft\ &Tabstop 伪Tab宽度(&T)
+menutrans Te&xt\ Width\.\.\. 页é¢å®½åº¦(&x)\.\.\.
+menutrans &File\ Format\.\.\. 文件格å¼(&F)\.\.\.
+
+menutrans C&olor\ Scheme 调色æ¿(&o)
+menutrans Select\ Fo&nt\.\.\. 选择字体(&n)\.\.\.
+
+
+" Programming menu
+menutrans &Tools 工具(&T)
+menutrans &Jump\ to\ this\ tag<Tab>g^] 检索光标处的标签关键字(tag)(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T 跳回检索å‰çš„ä½ç½®(&B)<Tab>^T
+menutrans Build\ &Tags\ File 建立标签索引文件\ Tags(&T)
+menutrans &Folding Folding设定(&F)
+menutrans &Diff 比较(&D)
+menutrans &Make<Tab>:make 执行\ Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl 列出编译错误(&E)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! 列出所有信æ¯(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn 下一个编译错误处(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp 上一个编译错误处(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold 旧错误列表(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew 新错误列表(&E)<Tab>:cnew
+menutrans Error\ &Window 错误信æ¯çª—å£(&W)
+menutrans &Set\ Compiler 设置编译器(&S)
+menutrans &Convert\ to\ HEX<Tab>:%!xxd 转æ¢æˆ16进制<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r 从16进制转æ¢å›žæ–‡å­—<Tab>:%!xxd\ -r
+
+" Tools.Fold Menu
+menutrans &Enable/Disable\ folds<Tab>zi 使用/ä¸ä½¿ç”¨Folding(&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 关闭Folds(&L)<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM 关闭所有Folds(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr 展开Folds(&P)<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR 展开所有Folds(&O)<Tab>zR
+" fold method
+menutrans Fold\ Met&hod Foldæ–¹å¼(&H)
+menutrans Create\ &Fold<Tab>zf 建立Fold(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd 删除Fold(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD 删除所有Fold(&A)<Tab>zD
+" moving around in folds
+menutrans Fold\ column\ &width 设定Foldæ å®½(&W)
+
+" Tools.Diff Menu
+menutrans &Update æ›´æ–°(&U)
+menutrans &Get\ Block å–å¾—ä¸åŒéƒ¨åˆ†(&G)
+menutrans &Put\ Block å°†ä¸åŒéƒ¨åˆ†åº”用到对方(&P)
+
+
+" Names for buffer menu.
+menutrans &Buffers 缓冲区(&B)
+menutrans &Refresh\ menu æ›´æ–°(&R)
+menutrans &Delete 删除(&D)
+menutrans &Alternate 修改(&L)
+menutrans &Next 下一个(&N)
+menutrans &Previous å‰ä¸€ä¸ª(&P)
+
+" Window menu
+menutrans &Window 窗å£(&W)
+menutrans &New<Tab>^Wn 新建窗å£(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws 分割窗å£(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ 分割到#(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv 垂直分割(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer 文件æµè§ˆå™¨å¼åˆ†å‰²(&X)
+menutrans &Close<Tab>^Wc 关闭窗å£(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo 关闭其它窗å£(&O)<Tab>^Wo
+menutrans Move\ &To 移动到(&T)
+menutrans &Top<Tab>^WK 顶端(&T)<Tab>^WK
+menutrans &Bottom<Tab>^WJ 底端(&B)<Tab>^WJ
+menutrans &Left\ side<Tab>^WH 左边(&L)<Tab>^WH
+menutrans &Right\ side<Tab>^WL å³è¾¹(&R)<Tab>^WL
+" menutrans Ne&xt<Tab>^Ww 下一个(&X)<Tab>^Ww
+" menutrans P&revious<Tab>^WW 上一个(&R)<Tab>^WW
+menutrans Rotate\ &Up<Tab>^WR 上移窗å£(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr 下移窗å£(&D)<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W= 所有窗å£ç­‰é«˜(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ 最大高度(&M)<Tab>^W
+menutrans M&in\ Height<Tab>^W1_ 最å°é«˜åº¦(&i)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| 最大宽度(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| 最å°å®½åº¦(&h)<Tab>^W1\|
+"
+" The popup menu
+menutrans &Undo 撤销(&U)
+menutrans Cu&t 剪切(&T)
+menutrans &Copy å¤åˆ¶(&C)
+menutrans &Paste 粘帖(&P)
+menutrans &Delete 删除(&D)
+menutrans Select\ Blockwise Blockwise选择
+menutrans Select\ &Word 选择å•è¯(&W)
+menutrans Select\ &Line 选择行(&L)
+menutrans Select\ &Block 选择å—(&B)
+menutrans Select\ &All 全选(&A)
+"
+" The GUI toolbar
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open 打开文件
+ tmenu ToolBar.Save ä¿å­˜å½“å‰æ–‡ä»¶
+ tmenu ToolBar.SaveAll ä¿å­˜å…¨éƒ¨æ–‡ä»¶
+ tmenu ToolBar.Print 打å°
+ tmenu ToolBar.Undo 撤销上次修改
+ tmenu ToolBar.Redo é‡åšä¸Šæ¬¡æ’¤é”€çš„动作
+ tmenu ToolBar.Cut 剪切至剪贴æ¿
+ tmenu ToolBar.Copy å¤åˆ¶åˆ°å‰ªè´´æ¿
+ tmenu ToolBar.Paste 由剪贴æ¿ç²˜å¸–
+ tmenu ToolBar.Find 查找...
+ tmenu ToolBar.FindNext 查找下一个
+ tmenu ToolBar.FindPrev 查找上一个
+ tmenu ToolBar.Replace 替æ¢...
+ tmenu ToolBar.LoadSesn 加载会è¯
+ tmenu ToolBar.SaveSesn ä¿å­˜å½“å‰çš„会è¯
+ tmenu ToolBar.RunScript è¿è¡ŒVim脚本
+ tmenu ToolBar.Make 执行 Make
+ tmenu ToolBar.Shell 打开一个命令窗å£
+ tmenu ToolBar.RunCtags 执行 ctags
+ tmenu ToolBar.TagJump 跳到当å‰å…‰æ ‡ä½ç½®çš„标签
+ tmenu ToolBar.Help Vim 帮助
+ tmenu ToolBar.FindHelp 查找 Vim 帮助
+ endfun
+endif
+
+" Syntax menu
+menutrans &Syntax 语法(&S)
+menutrans Set\ '&syntax'\ only åªè®¾å®š\ 'syntax'(&s)
+menutrans Set\ '&filetype'\ too 也设定\ 'filetype'(&f)
+menutrans &Off 关闭(&O)
+menutrans &Manual 手动设定(&M)
+menutrans A&utomatic 自动设定(&U)
+menutrans on/off\ for\ &This\ file åªå¯¹è¿™ä¸ªæ–‡ä»¶æ‰“å¼€/关闭(&T)
+menutrans Co&lor\ test 色彩显示测试(&L)
+menutrans &Highlight\ test 语法效果测试(&H)
+menutrans &Convert\ to\ HTML 转æ¢æˆ\ HTML\ æ ¼å¼(&C)
diff --git a/runtime/lang/menu_zh_tw.big5.vim b/runtime/lang/menu_zh_tw.big5.vim
new file mode 100644
index 000000000..b07d8ef5f
--- /dev/null
+++ b/runtime/lang/menu_zh_tw.big5.vim
@@ -0,0 +1 @@
+source <sfile>:p:h/menu_chinese(taiwan)_taiwan.950.vim
diff --git a/runtime/lang/menu_zh_tw.cp950.vim b/runtime/lang/menu_zh_tw.cp950.vim
new file mode 100644
index 000000000..f437ce7c2
--- /dev/null
+++ b/runtime/lang/menu_zh_tw.cp950.vim
@@ -0,0 +1,3 @@
+" Menu Translations: Traditional Chinese
+
+source <sfile>:p:h/menu_chinese_taiwan.950.vim
diff --git a/runtime/lang/menu_zh_tw.utf-8.vim b/runtime/lang/menu_zh_tw.utf-8.vim
new file mode 100644
index 000000000..871cece9e
--- /dev/null
+++ b/runtime/lang/menu_zh_tw.utf-8.vim
@@ -0,0 +1,284 @@
+" Menu Translations: Traditional Chinese (for UTF-8)
+" Translated By: Hung-Teh, Lin <piaip@csie.ntu.edu.tw>
+" Last Change: Thu Apr 24 17:35:17 CST 2003
+
+" {{{ Quit when menu translations have already been done.
+if exists("did_menu_trans")
+ finish
+endif
+let did_menu_trans = 1
+" }}}
+
+scriptencoding utf-8
+
+" {{{ Help menu: complete
+menutrans &Help 輔助說明(&H)
+" ------------------------------------------------------------------------
+menutrans &Overview<Tab><F1> 說明文件總覽(&O)<Tab><F1>
+menutrans &User\ Manual 使用者手冊(&U)
+menutrans &How-to\ links 如何作\.\.\.(&H)
+menutrans &GUI 圖型界é¢(&G)
+menutrans &Credits æ„Ÿè¬(&C)
+menutrans Co&pying 版權宣告(&P)
+menutrans O&rphans 拯救孤兒(&R)
+" ------------------------------------------------------------------------
+menutrans &Version 程å¼ç‰ˆæœ¬è³‡è¨Š(&V)
+menutrans &About 關於\ Vim(&A)
+" }}}
+
+" {{{ File menu: complete
+menutrans &File 檔案(&F)
+" ------------------------------------------------------------------------
+menutrans &Open\.\.\.<Tab>:e é–‹å•Ÿ(&O)\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp 分割視窗並開啟(&L)<Tab>:sp
+menutrans &New<Tab>:enew 編輯新檔案(&N)<Tab>:enew
+menutrans &Close<Tab>:close 關閉檔案(&C)<Tab>:close
+" ------------------------------------------------------------------------
+menutrans &Save<Tab>:w 儲存(&S)<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav å¦å­˜æ–°æª”(&A)\.\.\.<Tab>:sav
+" ------------------------------------------------------------------------
+menutrans Split\ &Diff\ with\.\.\. 比較(&Diff)\.\.\.
+menutrans Split\ Patched\ &By\.\.\. 執行Patch(&B)\.\.\.
+" ------------------------------------------------------------------------
+menutrans &Print 列å°(&P)
+" ------------------------------------------------------------------------
+menutrans Sa&ve-Exit<Tab>:wqa 儲存並離開(&V)<Tab>:wqa
+menutrans E&xit<Tab>:qa 離開(&X)<Tab>:qa
+" }}}
+
+" {{{ Edit menu
+menutrans &Edit 編輯(&E)
+" ------------------------------------------------------------------------
+menutrans &Undo<Tab>u 復原(&U)<Tab>u
+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
+menutrans &Paste<Tab>"+gP 貼上(&P)<Tab>"+gP
+menutrans Put\ &Before<Tab>[p 貼到游標å‰(&B)<Tab>[p
+menutrans Put\ &After<Tab>]p 貼到游標後(&A)<Tab>]p
+menutrans &Delete<Tab>x 刪除(&D)<Tab>x
+menutrans &Select\ all<Tab>ggVG å…¨é¸(&S)<Tab>ggvG
+" ------------------------------------------------------------------------
+menutrans &Find\.\.\. 尋找(&F)\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. 尋找並å–代(&L)\.\.\.
+" ------------------------------------------------------------------------
+menutrans Settings\ &Window 設定視窗(&W)
+menutrans &Global\ Settings 全域設定(&G)
+menutrans F&ile\ Settings 設定此檔案(&I)
+menutrans C&olor\ Scheme é…色設定(&O)
+menutrans &Keymap éµç›¤å°æ‡‰(&K)
+ " "{{{ Keymap:
+ menutrans None ç„¡
+ " }}}
+menutrans Select\ Fo&nt\.\.\. 設定字型(&N)\.\.\.
+" }}}
+
+" {{{ Edit.FileSettings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu! 切æ›é¡¯ç¤ºè¡Œè™Ÿ(&N)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list! 切æ›é¡¯ç¤ºè¡Œå°¾åŠTAB(&L)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap! 切æ›è‡ªå‹•æŠ˜è¡Œé¡¯ç¤º(&W)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! 切æ›æŠ˜è¡Œé¡¯ç¤ºå¯ä»»æ„æ–·å¥(&R)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et! 切æ›å±•é–‹TAB(&E)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai! 切æ›è‡ªå‹•ç¸®æŽ’(&A)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin! 切æ›ï¼£èªžè¨€ç¸®æŽ’(&C)<Tab>:set\ cin!
+" ------------------------------------------------------------------------
+menutrans &Shiftwidth 縮排寬度(shiftwidth)(&S)
+menutrans Soft\ &Tabstop 軟體模擬TAB(softtabstop)(&T)
+menutrans Te&xt\ Width\.\.\. 文字é é¢å¯¬åº¦(textwidth)(&X)\.\.\.
+menutrans &File\ Format\.\.\. 設定檔案格å¼(å°æ‡‰ä½œæ¥­ç³»çµ±)(&F)\.\.\.
+" }}}
+
+" {{{ Edit.GlobalSettings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! 切æ›é«˜äº®åº¦æœå°‹å­—串(&H)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! 切æ›å¿½ç•¥å¤§å°å¯«(&I)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! 切æ›é¡¯ç¤ºå°æ‡‰æ‹¬è™Ÿ(&S)<Tab>:set\ sm!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! 切æ›å‚³çµ±Vi相容模å¼(&O)<Tab>:set\ cp!
+menutrans &Context\ lines 本文å‰å¾Œä¿ç•™è¡Œæ•¸(scrolloff)(&C)
+menutrans &Virtual\ Edit 游標任æ„移動(virtualedit)(&V)
+ " {{{ Edit.GlobalSettings.VirtualEdit
+ menutrans Never ä¸ä½¿ç”¨
+ menutrans Block\ Selection å€å¡Šé¸æ“‡æ™‚
+ menutrans Insert\ mode æ’入模å¼æ™‚
+ menutrans Block\ and\ Insert å€å¡Šèˆ‡æ’入模å¼
+ menutrans Always 一直開啟
+ " }}}
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! 切æ›æ’入模å¼(&M)<Tab>:set\ im!
+menutrans Search\ &Path\.\.\. æœå°‹è·¯å¾‘(&P)\.\.\.
+menutrans Ta&g\ Files\.\.\. Tag\ 標籤索引檔案(&G)\.\.\.
+" ------------------------------------------------------------------------
+menutrans Toggle\ &Toolbar 切æ›ä½¿ç”¨å·¥å…·åˆ—(&T)
+menutrans Toggle\ &Bottom\ Scrollbar 切æ›ä½¿ç”¨åº•ç«¯æ²å‹•è»¸(&B)
+menutrans Toggle\ &Left\ Scrollbar 切æ›ä½¿ç”¨å·¦ç«¯æ²å‹•è»¸(&L)
+menutrans Toggle\ &Right\ Scrollbar 切æ›ä½¿ç”¨å³ç«¯æ²å‹•è»¸(&R)
+" }}}
+
+" {{{ Tools menu: complete
+menutrans &Tools 工具(&T)
+" ------------------------------------------------------------------------
+menutrans &Jump\ to\ this\ tag<Tab>g^] 檢索游標處的標籤關éµå­—(tag)(&J)<Tab>g^]
+menutrans Jump\ &back<Tab>^T 跳回檢索å‰çš„ä½ç½®(&B)<Tab>^T
+menutrans Build\ &Tags\ File 建立標籤索引檔\ Tags(&T)
+" ------------------------------------------------------------------------
+menutrans &Folding 覆疊(Fold)設定(&F)
+ " {{{ Tools.Fold
+ menutrans &Enable/Disable\ folds<Tab>zi 切æ›ä½¿ç”¨\ Folding(&E)<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv 檢視此層\ Fold(&V)<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx åªæª¢è¦–æ­¤\ Fold(&W)<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm 收起一層\ Folds(&L)<Tab>zm
+ menutrans &Close\ all\ folds<Tab>zM 收起所有\ Folds(&C)<Tab>zM
+ menutrans O&pen\ more\ folds<Tab>zr 打開一層\ Folds(&P)<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR 打開所有\ Folds(&O)<Tab>zR
+ menutrans Fold\ Met&hod Folding\ æ–¹å¼(&H)
+ " {{{ Tools.Fold.Method
+ menutrans M&anual 手動建立(&A)
+ menutrans I&ndent ä¾ç…§ç¸®æŽ’(&N)
+ menutrans E&xpression 自訂é‹ç®—å¼(&X)
+ menutrans S&yntax ä¾ç…§èªžæ³•è¨­å®š(&Y)
+ menutrans &Diff Diff(&D)
+ menutrans Ma&rker 標記(Marker)(&R)
+ " }}}
+ " ------------------------------------------------------------------------
+ menutrans Create\ &Fold<Tab>zf 建立\ Fold(&F)<Tab>zf
+ menutrans &Delete\ Fold<Tab>zd 刪除\ Fold(&D)<Tab>zd
+ menutrans Delete\ &All\ Folds<Tab>zD 刪除所有\ Fold(&A)<Tab>zD
+ " ------------------------------------------------------------------------
+ menutrans Fold\ column\ &width 設定\ Fold欄寬(&W)
+ " }}}
+menutrans &Diff Diff(&D)
+ " {{{ Tools.Diff
+ menutrans &Update æ›´æ–°(&U)
+ menutrans &Get\ Block å–å¾—å€å¡Š(&G)
+ menutrans &Put\ Block 貼上å€å¡Š(&P)
+ " }}}
+" ------------------------------------------------------------------------
+menutrans &Make<Tab>:make 執行\ Make(&M)<Tab>:make
+menutrans &List\ Errors<Tab>:cl 列出編譯錯誤(&E)<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl! 列出所有訊æ¯(&I)<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn 下一個編譯錯誤處(&N)<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp 上一個編譯錯誤處(&P)<Tab>:cp
+menutrans &Older\ List<Tab>:cold 檢視舊錯誤列表(&O)<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew 檢視新錯誤列表(&E)<Tab>:cnew
+menutrans Error\ &Window 錯誤訊æ¯è¦–窗(&W)
+ " {{{ Tools.ErrorWindow
+ menutrans &Update<Tab>:cwin æ›´æ–°(&U)<Tab>:cwin
+ menutrans &Open<Tab>:copen é–‹å•Ÿ(&O)<Tab>:copen
+ menutrans &Close<Tab>:cclose 關閉(&C)<Tab>:cclose
+ " }}}
+menutrans &Set\ Compiler 設定編譯器Compiler(&S)
+" ------------------------------------------------------------------------
+menutrans &Convert\ to\ HEX<Tab>:%!xxd 轉æ›æˆ16進ä½ç¢¼(&C)<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r 從16進ä½ç¢¼è½‰æ›å›žæ–‡å­—(&R)<Tab>:%!xxd\ -r
+" }}}
+
+" {{{ Syntax menu: compete
+menutrans &Syntax 語法效果(&S)
+" ------------------------------------------------------------------------
+menutrans &Show\ filetypes\ in\ menu 顯示所有å¯ç”¨æª”案格å¼(&S)
+menutrans Set\ '&syntax'\ only åªä½¿ç”¨\ 'syntax'(&S)
+menutrans Set\ '&filetype'\ too 使用\ 'syntax'+'filetype'(&F)
+menutrans &Off 關閉效果(&O)
+menutrans &Manual 手動設定(&M)
+menutrans A&utomatic 自動設定(&U)
+menutrans on/off\ for\ &This\ file åªåˆ‡æ›æ­¤æª”的效果設定(&T)
+" ------------------------------------------------------------------------
+menutrans Co&lor\ test 色彩顯示測試(&L)
+menutrans &Highlight\ test 語法效果測試(&H)
+menutrans &Convert\ to\ HTML 轉æ›æˆ\ HTML\ æ ¼å¼(&C)
+" }}}
+
+" {{{ Buffers menu: complete
+menutrans &Buffers ç·©è¡å€(&B)
+" ------------------------------------------------------------------------
+menutrans &Refresh\ menu æ›´æ–°(&R)
+menutrans &Delete 刪除(&D)
+menutrans &Alternate 切æ›ä¸Šæ¬¡ç·¨è¼¯ç·©è¡å€(&A)
+menutrans &Next 下一個(&N)
+menutrans &Previous å‰ä¸€å€‹(&P)
+" ------------------------------------------------------------------------
+" menutrans [No\ file] [無檔案]
+" }}}
+
+" {{{ Window menu: complete
+menutrans &Window 視窗(&W)
+" ------------------------------------------------------------------------
+menutrans &New<Tab>^Wn 開新視窗(&N)<Tab>^Wn
+menutrans S&plit<Tab>^Ws 分割視窗(&P)<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^ 分割到#(&L)<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv 垂直分割(&V)<Tab>^Wv
+menutrans Split\ File\ E&xplorer 檔案總管å¼åˆ†å‰²(&X)
+" ------------------------------------------------------------------------
+menutrans &Close<Tab>^Wc 關閉視窗(&C)<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo 關閉其它視窗(&O)<Tab>^Wo
+" ------------------------------------------------------------------------
+menutrans Move\ &To 移至(&T)
+ " {{{ Window.MoveTo
+ menutrans &Top<Tab>^WK 頂端(&T)<Tab>^WK
+ menutrans &Bottom<Tab>^WJ 底端(&B)<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH 左邊(&L)<Tab>^WH
+ menutrans &Right\ side<Tab>^WL å³é‚Š(&R)<Tab>^WL
+ " }}}
+menutrans Rotate\ &Up<Tab>^WR 上移視窗(&U)<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr 下移視窗(&D)<Tab>^Wr
+" ------------------------------------------------------------------------
+menutrans &Equal\ Size<Tab>^W= 所有視窗等高(&E)<Tab>^W=
+menutrans &Max\ Height<Tab>^W_ 最大高度(&M)<Tab>^W
+menutrans M&in\ Height<Tab>^W1_ 最å°é«˜åº¦(&I)<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\| 最大寬度(&W)<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\| 最å°å¯¬åº¦(&H)<Tab>^W1\|
+" }}}
+
+" {{{ The popup menu: complete
+menutrans &Undo 復原(&U)
+" ------------------------------------------------------------------------
+menutrans Cu&t 剪下(&T)
+menutrans &Copy 複製(&C)
+menutrans &Paste 貼上(&P)
+menutrans &Delete 刪除(&D)
+" ------------------------------------------------------------------------
+menutrans Select\ Blockwise Blockwiseå¼é¸æ“‡
+menutrans Select\ &Word é¸æ“‡å–®å­—(&W)
+menutrans Select\ &Line é¸æ“‡è¡Œ(&L)
+menutrans Select\ &Block é¸æ“‡å€å¡Š(&B)
+menutrans Select\ &All å…¨é¸(&A)
+" }}}
+
+" {{{ The GUI toolbar: complete
+if has("toolbar")
+ if exists("*Do_toolbar_tmenu")
+ delfun Do_toolbar_tmenu
+ endif
+ fun Do_toolbar_tmenu()
+ tmenu ToolBar.Open 開啟檔案
+ tmenu ToolBar.Save 儲存目å‰ç·¨è¼¯ä¸­çš„檔案
+ tmenu ToolBar.SaveAll 儲存全部檔案
+ tmenu ToolBar.Print 列å°
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Undo 復原上次變動
+ tmenu ToolBar.Redo å–消上次復原動作
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Cut 剪下至剪貼簿
+ tmenu ToolBar.Copy 複製到剪貼簿
+ tmenu ToolBar.Paste 由剪貼簿貼上
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Find 尋找...
+ tmenu ToolBar.FindNext 找下一個
+ tmenu ToolBar.FindPrev 找上一個
+ tmenu ToolBar.Replace å–代...
+" ------------------------------------------------------------------------
+ tmenu ToolBar.LoadSesn 載入 Session
+ tmenu ToolBar.SaveSesn 儲存目å‰çš„ Session
+ tmenu ToolBar.RunScript 執行 Vim 程å¼æª”
+" ------------------------------------------------------------------------
+ tmenu ToolBar.Make 執行 Make
+ tmenu ToolBar.Shell 開啟一個命令列視窗 DosBox
+ tmenu ToolBar.RunCtags 執行 ctags
+ tmenu ToolBar.TagJump 跳到目å‰æ¸¸æ¨™ä½ç½®çš„ tag
+ tmenu ToolBar.Help Vim 輔助說明
+ tmenu ToolBar.FindHelp æœå°‹ Vim 說明文件
+ endfun
+endif
+" }}}
+
+" vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
diff --git a/runtime/macros.info b/runtime/macros.info
new file mode 100755
index 000000000..bbb0b4f16
--- /dev/null
+++ b/runtime/macros.info
Binary files differ
diff --git a/runtime/macros/README.txt b/runtime/macros/README.txt
new file mode 100644
index 000000000..61066c5a5
--- /dev/null
+++ b/runtime/macros/README.txt
@@ -0,0 +1,22 @@
+The macros in the maze, hanoi and urm directories can be used to test Vim for
+vi compatibility. They have been written for vi to show its unlimited
+possibilities. The life macros can be used for performance comparisons.
+
+hanoi Macros that solve the tower of hanoi problem.
+life Macros that run Conway's game of life.
+maze Macros that solve a maze (amazing!).
+urm Macros that simulate a simple computer: "Universal Register Machine"
+
+
+The other files contain some handy utilities. They also serve as examples for
+how to use Vi and Vim functionality.
+
+dvorak for when you use a Dvorak keyboard
+justify.vim user function for justifying text
+matchit.vim + matchit.txt make % match if-fi, HTML tags, and much more
+less.sh + less.vim make Vim work like less (or more)
+shellmenu.vim menus for editing shell scripts in the GUI version
+swapmous.vim swap left and right mouse buttons
+
+This one is only for Unix. It can be found in the extra archive:
+file_select.vim macros that make a handy file selector
diff --git a/runtime/macros/README.txt.info b/runtime/macros/README.txt.info
new file mode 100644
index 000000000..d173e72e7
--- /dev/null
+++ b/runtime/macros/README.txt.info
Binary files differ
diff --git a/runtime/macros/dvorak b/runtime/macros/dvorak
new file mode 100644
index 000000000..0c7588870
--- /dev/null
+++ b/runtime/macros/dvorak
@@ -0,0 +1,164 @@
+When using a dvorak keyboard this file may be of help to you.
+These mappings have been made by Lawrence Kesteloot <kesteloo@cs.unc.edu>.
+What they do is that the most often used keys, like hjkl, are put in a more
+easy to use position.
+It may take some time to learn using this.
+
+Put these lines in your .vimrc:
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+" Key to go into dvorak mode:
+map ,d :source ~/.dvorak
+" Key to get out of dvorak mode:
+map ,q :source ~/.qwerty
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+write these lines into the file ~/.dvorak:
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+" Dvorak keyboard, only in insert mode and ex mode.
+" You may want to add a list of map's too.
+imap! a a
+imap! b x
+imap! c j
+imap! d e
+imap! e .
+imap! f u
+imap! g i
+imap! h d
+imap! i c
+imap! j h
+imap! k t
+imap! l n
+imap! m m
+imap! n b
+imap! o r
+imap! p l
+imap! q '
+imap! r p
+imap! s o
+imap! t y
+imap! u g
+imap! v k
+imap! w ,
+imap! x q
+imap! y f
+imap! z ;
+imap! ; s
+imap! ' -
+imap! " _
+imap! , w
+imap! . v
+imap! / z
+imap! A A
+imap! B X
+imap! C J
+imap! D E
+imap! E >
+imap! F U
+imap! G I
+imap! H D
+imap! I C
+imap! J H
+imap! K T
+imap! L N
+imap! M M
+imap! N B
+imap! O R
+imap! P L
+imap! Q "
+imap! R P
+imap! S O
+imap! T Y
+imap! U G
+imap! V K
+imap! W <
+imap! X Q
+imap! Y F
+imap! Z :
+imap! < W
+imap! > V
+imap! ? Z
+imap! : S
+imap! [ /
+imap! ] =
+imap! { ?
+imap! } +
+imap! - [
+imap! _ {
+imap! = ]
+imap! + }
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+write these lines into the file ~/.qwerty
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+" Qwerty keyboard
+unmap! a
+unmap! b
+unmap! c
+unmap! d
+unmap! e
+unmap! f
+unmap! g
+unmap! h
+unmap! i
+unmap! j
+unmap! k
+unmap! l
+unmap! m
+unmap! n
+unmap! o
+unmap! p
+unmap! q
+unmap! r
+unmap! s
+unmap! t
+unmap! u
+unmap! v
+unmap! w
+unmap! x
+unmap! y
+unmap! z
+unmap! ;
+unmap! '
+unmap! \"
+unmap! ,
+unmap! .
+unmap! /
+unmap! A
+unmap! B
+unmap! C
+unmap! D
+unmap! E
+unmap! F
+unmap! G
+unmap! H
+unmap! I
+unmap! J
+unmap! K
+unmap! L
+unmap! M
+unmap! N
+unmap! O
+unmap! P
+unmap! Q
+unmap! R
+unmap! S
+unmap! T
+unmap! U
+unmap! V
+unmap! W
+unmap! X
+unmap! Y
+unmap! Z
+unmap! <
+unmap! >
+unmap! ?
+unmap! :
+unmap! [
+unmap! ]
+unmap! {
+unmap! }
+unmap! -
+unmap! _
+unmap! =
+unmap! +
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
diff --git a/runtime/macros/hanoi.info b/runtime/macros/hanoi.info
new file mode 100644
index 000000000..8072e5678
--- /dev/null
+++ b/runtime/macros/hanoi.info
Binary files differ
diff --git a/runtime/macros/hanoi/click.me b/runtime/macros/hanoi/click.me
new file mode 100644
index 000000000..24f178bfe
--- /dev/null
+++ b/runtime/macros/hanoi/click.me
@@ -0,0 +1,14 @@
+
+
+See Vim solve the towers of Hanoi!
+
+Instructions:
+ type ":so hanoi.vim<RETURN>" to load the macros
+ type "g" to start it
+
+and watch it go.
+
+ to quit type ":q!<RETURN>"
+to interrupt type CTRL-C
+
+(This text will disappear as soon as you type "g")
diff --git a/runtime/macros/hanoi/click.me.info b/runtime/macros/hanoi/click.me.info
new file mode 100644
index 000000000..f38cb5a0a
--- /dev/null
+++ b/runtime/macros/hanoi/click.me.info
Binary files differ
diff --git a/runtime/macros/hanoi/hanoi.vim b/runtime/macros/hanoi/hanoi.vim
new file mode 100644
index 000000000..834d6f2c4
--- /dev/null
+++ b/runtime/macros/hanoi/hanoi.vim
@@ -0,0 +1,64 @@
+set remap
+set noterse
+set wrapscan
+" to set the height of the tower, change the digit in the following
+" two lines to the height you want (select from 1 to 9)
+map t 7
+map! t 7
+map L 1G/t X/^0 $P1GJ$An$BGC0e$X0E0F$X/T @f @h $A1GJ@f0l$Xn$PU
+map g IL
+
+map J /^0[^t]*$
+map X x
+map P p
+map U L
+map A "fyl
+map B "hyl
+map C "fp
+map e "fy2l
+map E "hp
+map F "hy2l
+
+" initialisations:
+" KM cleanup buffer
+" Y create tower of desired height
+" NOQ copy it and inster a T
+" NO copy this one
+" S change last char into a $
+" R change last char in previous line into a n
+" T insert two lines containing a zero
+" V add a last line containing a backslash
+map I KMYNOQNOSkRTV
+
+"create empty line
+map K 1Go
+
+"delete to end of file
+map M dG
+
+"yank one line
+map N yy
+
+"put
+map O p
+
+"delete more than height-of-tower characters
+map q tllD
+
+"create a tower of desired height
+map Y o0123456789Z0q
+
+"insert a T in column 1
+map Q 0iT
+
+"substitute last character with a n
+map R $rn
+
+"substitute last character with a $
+map S $r$
+
+"insert two lines containing a zero
+map T ko0 0 
+
+"add a backslash at the end
+map V Go/
diff --git a/runtime/macros/hanoi/poster b/runtime/macros/hanoi/poster
new file mode 100644
index 000000000..dd03b2613
--- /dev/null
+++ b/runtime/macros/hanoi/poster
@@ -0,0 +1,36 @@
+Article 2913 of alt.sources:
+Path: oce-rd1!hp4nl!mcsun!uunet!munnari.oz.au!metro!cluster!swift!softway!otc!gregm
+From: gregm@otc.otca.oz.au (Greg McFarlane)
+Newsgroups: comp.sources.d,alt.sources,comp.editors
+Subject: VI SOLVES HANOI
+Message-ID: <2323@otc.otca.oz>
+Date: 19 Feb 91 01:32:14 GMT
+Sender: news@otc.otca.oz
+Reply-To: gregm@otc.otca.oz.au (Greg McFarlane)
+Organization: OTC Development Unit, Australia
+Lines: 80
+Xref: oce-rd1 comp.sources.d:5702 alt.sources:2913 comp.editors:2313
+
+Submitted-by: gregm@otc.otca.oz.au
+Archive-name: hanoi.vi.macros/part01
+
+Everyone seems to be writing stupid Tower of Hanoi programs.
+Well, here is the stupidest of them all: the hanoi solving vi macros.
+
+Save this article, unshar it, and run uudecode on hanoi.vi.macros.uu.
+This will give you the macro file hanoi.vi.macros.
+Then run vi (with no file: just type "vi") and type:
+ :so hanoi.vi.macros
+ g
+and watch it go.
+
+The default height of the tower is 7 but can be easily changed by editing
+the macro file.
+
+The disks aren't actually shown in this version, only numbers representing
+each disk, but I believe it is possible to write some macros to show the
+disks moving about as well. Any takers?
+
+(For maze solving macros, see alt.sources or comp.editors)
+
+Greg
diff --git a/runtime/macros/hanoi/poster.info b/runtime/macros/hanoi/poster.info
new file mode 100644
index 000000000..780fa35ed
--- /dev/null
+++ b/runtime/macros/hanoi/poster.info
Binary files differ
diff --git a/runtime/macros/justify.vim b/runtime/macros/justify.vim
new file mode 100644
index 000000000..41d0591fe
--- /dev/null
+++ b/runtime/macros/justify.vim
@@ -0,0 +1,316 @@
+" Function to left and rigt align text.
+"
+" Written by: Preben "Peppe" Guldberg <c928400@student.dtu.dk>
+" Created: 980806 14:13 (or around that time anyway)
+" Revised: 001103 00:36 (See "Revisions" below)
+
+
+" function Justify( [ textwidth [, maxspaces [, indent] ] ] )
+"
+" Justify() will left and right align a line by filling in an
+" appropriate amount of spaces. Extra spaces are added to existing
+" spaces starting from the right side of the line. As an example, the
+" following documentation has been justified.
+"
+" The function takes the following arguments:
+
+" textwidth argument
+" ------------------
+" If not specified, the value of the 'textwidth' option is used. If
+" 'textwidth' is zero a value of 80 is used.
+"
+" Additionally the arguments 'tw' and '' are accepted. The value of
+" 'textwidth' will be used. These are handy, if you just want to specify
+" the maxspaces argument.
+
+" maxspaces argument
+" ------------------
+" If specified, alignment will only be done, if the longest space run
+" after alignment is no longer than maxspaces.
+"
+" An argument of '' is accepted, should the user like to specify all
+" arguments.
+"
+" To aid user defined commands, negative values are accepted aswell.
+" Using a negative value specifies the default behaviour: any length of
+" space runs will be used to justify the text.
+
+" indent argument
+" ---------------
+" This argument specifies how a line should be indented. The default is
+" to keep the current indentation.
+"
+" Negative values: Keep current amount of leading whitespace.
+" Positive values: Indent all lines with leading whitespace using this
+" amount of whitespace.
+"
+" Note that the value 0, needs to be quoted as a string. This value
+" leads to a left flushed text.
+"
+" Additionally units of 'shiftwidth'/'sw' and 'tabstop'/'ts' may be
+" added. In this case, if the value of indent is positive, the amount of
+" whitespace to be added will be multiplied by the value of the
+" 'shiftwidth' and 'tabstop' settings. If these units are used, the
+" argument must be given as a string, eg. Justify('','','2sw').
+"
+" If the values of 'sw' or 'tw' are negative, they are treated as if
+" they were 0, which means that the text is flushed left. There is no
+" check if a negative number prefix is used to change the sign of a
+" negative 'sw' or 'ts' value.
+"
+" As with the other arguments, '' may be used to get the default
+" behaviour.
+
+
+" Notes:
+"
+" If the line, adjusted for space runs and leading/trailing whitespace,
+" is wider than the used textwidth, the line will be left untouched (no
+" whitespace removed). This should be equivalent to the behaviour of
+" :left, :right and :center.
+"
+" If the resulting line is shorter than the used textwidth it is left
+" untouched.
+"
+" All space runs in the line are truncated before the alignment is
+" carried out.
+"
+" If you have set 'noexpandtab', :retab! is used to replace space runs
+" with whitespace using the value of 'tabstop'. This should be
+" conformant with :left, :right and :center.
+"
+" If joinspaces is set, an extra space is added after '.', '?' and '!'.
+" If 'cpooptions' include 'j', extra space is only added after '.'.
+" (This may on occasion conflict with maxspaces.)
+
+
+" Related mappings:
+"
+" Mappings that will align text using the current text width, using at
+" most four spaces in a space run and keeping current indentation.
+nmap _j :%call Justify('tw',4)<CR>
+vmap _j :call Justify('tw',4)<CR>
+"
+" Mappings that will remove space runs and format lines (might be useful
+" prior to aligning the text).
+nmap ,gq :%s/\s\+/ /g<CR>gq1G
+vmap ,gq :s/\s\+/ /g<CR>gvgq
+
+
+" User defined command:
+"
+" The following is an ex command that works as a shortcut to the Justify
+" function. Arguments to Justify() can be added after the command.
+com! -range -nargs=* Justify <line1>,<line2>call Justify(<f-args>)
+"
+" The following commands are all equivalent:
+"
+" 1. Simplest use of Justify():
+" :call Justify()
+" :Justify
+"
+" 2. The _j mapping above via the ex command:
+" :%Justify tw 4
+"
+" 3. Justify visualised text at 72nd column while indenting all
+" previously indented text two shiftwidths
+" :'<,'>call Justify(72,'','2sw')
+" :'<,'>Justify 72 -1 2sw
+"
+" This documentation has been justified using the following command:
+":se et|kz|1;/^" function Justify(/+,'z-g/^" /s/^" //|call Justify(70,3)|s/^/" /
+
+" Revisions:
+" 001103: If 'joinspaces' was set, calculations could be wrong.
+" Tabs at start of line could also lead to errors.
+" Use setline() instead of "exec 's/foo/bar/' - safer.
+" Cleaned up the code a bit.
+"
+" Todo: Convert maps to the new script specific form
+
+" Error function
+function! Justify_error(message)
+ echohl Error
+ echo "Justify([tw, [maxspaces [, indent]]]): " . a:message
+ echohl None
+endfunction
+
+
+" Now for the real thing
+function! Justify(...) range
+
+ if a:0 > 3
+ call Justify_error("Too many arguments (max 3)")
+ return 1
+ endif
+
+ " Set textwidth (accept 'tw' and '' as arguments)
+ if a:0 >= 1
+ if a:1 =~ '^\(tw\)\=$'
+ let tw = &tw
+ elseif a:1 =~ '^\d\+$'
+ let tw = a:1
+ else
+ call Justify_error("tw must be a number (>0), '' or 'tw'")
+ return 2
+ endif
+ else
+ let tw = &tw
+ endif
+ if tw == 0
+ let tw = 80
+ endif
+
+ " Set maximum number of spaces between WORDs
+ if a:0 >= 2
+ if a:2 == ''
+ let maxspaces = tw
+ elseif a:2 =~ '^-\d\+$'
+ let maxspaces = tw
+ elseif a:2 =~ '^\d\+$'
+ let maxspaces = a:2
+ else
+ call Justify_error("maxspaces must be a number or ''")
+ return 3
+ endif
+ else
+ let maxspaces = tw
+ endif
+ if maxspaces <= 1
+ call Justify_error("maxspaces should be larger than 1")
+ return 4
+ endif
+
+ " Set the indentation style (accept sw and ts units)
+ let indent_fix = ''
+ if a:0 >= 3
+ if (a:3 == '') || a:3 =~ '^-[1-9]\d*\(shiftwidth\|sw\|tabstop\|ts\)\=$'
+ let indent = -1
+ elseif a:3 =~ '^-\=0\(shiftwidth\|sw\|tabstop\|ts\)\=$'
+ let indent = 0
+ elseif a:3 =~ '^\d\+\(shiftwidth\|sw\|tabstop\|ts\)\=$'
+ let indent = substitute(a:3, '\D', '', 'g')
+ elseif a:3 =~ '^\(shiftwidth\|sw\|tabstop\|ts\)$'
+ let indent = 1
+ else
+ call Justify_error("indent: a number with 'sw'/'ts' unit")
+ return 5
+ endif
+ if indent >= 0
+ while indent > 0
+ let indent_fix = indent_fix . ' '
+ let indent = indent - 1
+ endwhile
+ let indent_sw = 0
+ if a:3 =~ '\(shiftwidth\|sw\)'
+ let indent_sw = &sw
+ elseif a:3 =~ '\(tabstop\|ts\)'
+ let indent_sw = &ts
+ endif
+ let indent_fix2 = ''
+ while indent_sw > 0
+ let indent_fix2 = indent_fix2 . indent_fix
+ let indent_sw = indent_sw - 1
+ endwhile
+ let indent_fix = indent_fix2
+ endif
+ else
+ let indent = -1
+ endif
+
+ " Avoid substitution reports
+ let save_report = &report
+ set report=1000000
+
+ " Check 'joinspaces' and 'cpo'
+ if &js == 1
+ if &cpo =~ 'j'
+ let join_str = '\(\. \)'
+ else
+ let join_str = '\([.!?!] \)'
+ endif
+ endif
+
+ let cur = a:firstline
+ while cur <= a:lastline
+
+ let str_orig = getline(cur)
+ let save_et = &et
+ set et
+ exec cur . "retab"
+ let &et = save_et
+ let str = getline(cur)
+
+ let indent_str = indent_fix
+ let indent_n = strlen(indent_str)
+ " Shall we remember the current indentation
+ if indent < 0
+ let indent_orig = matchstr(str_orig, '^\s*')
+ if strlen(indent_orig) > 0
+ let indent_str = indent_orig
+ let indent_n = strlen(matchstr(str, '^\s*'))
+ endif
+ endif
+
+ " Trim trailing, leading and running whitespace
+ let str = substitute(str, '\s\+$', '', '')
+ let str = substitute(str, '^\s\+', '', '')
+ let str = substitute(str, '\s\+', ' ', 'g')
+ let str_n = strlen(str)
+
+ " Possible addition of space after punctuation
+ if exists("join_str")
+ let str = substitute(str, join_str, '\1 ', 'g')
+ endif
+ let join_n = strlen(str) - str_n
+
+ " Can extraspaces be added?
+ " Note that str_n may be less than strlen(str) [joinspaces above]
+ if strlen(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
+ let s_dup = s_add / s_nr
+ let s_mod = s_add % s_nr
+
+ " Test if the changed line fits with tw
+ if 0 <= (str_n + (maxspaces - 1)*s_nr + indent_n) - tw
+
+ " Duplicate spaces
+ while s_dup > 0
+ let str = substitute(str, '\( \+\)', ' \1', 'g')
+ let s_dup = s_dup - 1
+ endwhile
+
+ " Add extra spaces from the end
+ while s_mod > 0
+ let str = substitute(str, '\(\(\s\+\S\+\)\{' . s_mod . '}\)$', ' \1', '')
+ let s_mod = s_mod - 1
+ endwhile
+
+ " Indent the line
+ if indent_n > 0
+ let str = substitute(str, '^', indent_str, '' )
+ endif
+
+ " Replace the line
+ call setline(cur, str)
+
+ " Convert to whitespace
+ if &et == 0
+ exec cur . 'retab!'
+ endif
+
+ endif " Change of line
+ endif " Possible change
+
+ let cur = cur + 1
+ endwhile
+
+ norm ^
+
+ let &report = save_report
+
+endfunction
+
+" EOF vim: tw=78 ts=8 sw=4 sts=4 noet ai
diff --git a/runtime/macros/less.sh b/runtime/macros/less.sh
new file mode 100755
index 000000000..256936b5e
--- /dev/null
+++ b/runtime/macros/less.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Shell script to start Vim with less.vim.
+# Read stdin if no arguments were given.
+
+if test $# = 0; then
+ 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' "$@"
+fi
diff --git a/runtime/macros/less.vim b/runtime/macros/less.vim
new file mode 100644
index 000000000..48ee7ab11
--- /dev/null
+++ b/runtime/macros/less.vim
@@ -0,0 +1,244 @@
+" Vim script to work like "less"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Feb 19
+
+" Avoid loading this file twice, allow the user to define his own script.
+if exists("loaded_less")
+ finish
+endif
+let loaded_less = 1
+
+" If not reading from stdin, skip files that can't be read.
+" Exit if there is no file at all.
+if argc() > 0
+ let s:i = 0
+ while 1
+ if filereadable(argv(s:i))
+ if s:i != 0
+ sleep 3
+ endif
+ break
+ endif
+ if isdirectory(argv(s:i))
+ echomsg "Skipping directory " . argv(s:i)
+ elseif getftime(argv(s:i)) < 0
+ echomsg "Skipping non-existing file " . argv(s:i)
+ else
+ echomsg "Skipping unreadable file " . argv(s:i)
+ endif
+ echo "\n"
+ let s:i = s:i + 1
+ if s:i == argc()
+ quit
+ endif
+ next
+ endwhile
+endif
+
+set nocp
+syntax on
+set so=0
+set hlsearch
+set incsearch
+nohlsearch
+" Don't remember file names and positions
+set viminfo=
+set nows
+" Inhibit screen updates while searching
+let s:lz = &lz
+set lz
+
+" Used after each command: put cursor at end and display position
+if &wrap
+ noremap <SID>L L0:redraw<CR>:file<CR>
+ au VimEnter * normal! L0
+else
+ noremap <SID>L Lg0:redraw<CR>:file<CR>
+ au VimEnter * normal! Lg0
+endif
+
+" When reading from stdin don't consider the file modified.
+au VimEnter * set nomod
+
+" Can't modify the text
+set noma
+
+" Give help
+noremap h :call <SID>Help()<CR>
+map H h
+fun! s:Help()
+ echo "<Space> One page forward b One page backward"
+ echo "d Half a page forward u Half a page backward"
+ echo "<Enter> One line forward k One line backward"
+ echo "G End of file g Start of file"
+ echo "N% percentage in file"
+ echo "\n"
+ echo "/pattern Search for pattern ?pattern Search backward for pattern"
+ echo "n next pattern match N Previous pattern match"
+ echo "\n"
+ echo ":n<Enter> Next file :p<Enter> Previous file"
+ echo "\n"
+ echo "q Quit v Edit file"
+ let i = input("Hit Enter to continue")
+endfun
+
+" Scroll one page forward
+noremap <script> <Space> :call <SID>NextPage()<CR><SID>L
+map <C-V> <Space>
+map f <Space>
+map <C-F> <Space>
+map z <Space>
+map <Esc><Space> <Space>
+fun! s:NextPage()
+ if line(".") == line("$")
+ if argidx() + 1 >= argc()
+ quit
+ endif
+ next
+ 1
+ else
+ exe "normal! \<C-F>"
+ endif
+endfun
+
+" Re-read file and page forward "tail -f"
+map F :e<CR>G<SID>L:sleep 1<CR>F
+
+" Scroll half a page forward
+noremap <script> d <C-D><SID>L
+map <C-D> d
+
+" Scroll one line forward
+noremap <script> <CR> <C-E><SID>L
+map <C-N> <CR>
+map e <CR>
+map <C-E> <CR>
+map j <CR>
+map <C-J> <CR>
+
+" Scroll one page backward
+noremap <script> b <C-B><SID>L
+map <C-B> b
+map w b
+map <Esc>v b
+
+" Scroll half a page backward
+noremap <script> u <C-U><SID>L
+noremap <script> <C-U> <C-U><SID>L
+
+" Scroll one line backward
+noremap <script> k <C-Y><SID>L
+map y k
+map <C-Y> k
+map <C-P> k
+map <C-K> k
+
+" Redraw
+noremap <script> r <C-L><SID>L
+noremap <script> <C-R> <C-L><SID>L
+noremap <script> R <C-L><SID>L
+
+" Start of file
+noremap <script> g gg<SID>L
+map < g
+map <Esc>< g
+
+" End of file
+noremap <script> G G<SID>L
+map > G
+map <Esc>> G
+
+" Go to percentage
+noremap <script> % %<SID>L
+map p %
+
+" Search
+noremap <script> / H$:call <SID>Forward()<CR>/
+if &wrap
+ noremap <script> ? H0:call <SID>Backward()<CR>?
+else
+ noremap <script> ? Hg0:call <SID>Backward()<CR>?
+endif
+
+fun! s:Forward()
+ " Searching forward
+ noremap <script> n H$nzt<SID>L
+ if &wrap
+ noremap <script> N H0Nzt<SID>L
+ else
+ noremap <script> N Hg0Nzt<SID>L
+ endif
+ cnoremap <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L
+endfun
+
+fun! s:Backward()
+ " Searching backward
+ if &wrap
+ noremap <script> n H0nzt<SID>L
+ else
+ noremap <script> n Hg0nzt<SID>L
+ endif
+ noremap <script> N H$Nzt<SID>L
+ cnoremap <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L
+endfun
+
+call s:Forward()
+
+" Quitting
+noremap q :q<CR>
+
+" Switch to editing (switch off less mode)
+map v :silent call <SID>End()<CR>
+fun! s:End()
+ set ma
+ if exists(s:lz)
+ let &lz = s:lz
+ endif
+ unmap h
+ unmap H
+ unmap <Space>
+ unmap <C-V>
+ unmap f
+ unmap <C-F>
+ unmap z
+ unmap <Esc><Space>
+ unmap F
+ unmap d
+ unmap <C-D>
+ unmap <CR>
+ unmap <C-N>
+ unmap e
+ unmap <C-E>
+ unmap j
+ unmap <C-J>
+ unmap b
+ unmap <C-B>
+ unmap w
+ unmap <Esc>v
+ unmap u
+ unmap <C-U>
+ unmap k
+ unmap y
+ unmap <C-Y>
+ unmap <C-P>
+ unmap <C-K>
+ unmap r
+ unmap <C-R>
+ unmap R
+ unmap g
+ unmap <
+ unmap <Esc><
+ unmap G
+ unmap >
+ unmap <Esc>>
+ unmap %
+ unmap p
+ unmap n
+ unmap N
+ unmap q
+ unmap v
+ unmap /
+ unmap ?
+endfun
+
+" vim: sw=2
diff --git a/runtime/macros/life/click.me b/runtime/macros/life/click.me
new file mode 100644
index 000000000..c2ed4691a
--- /dev/null
+++ b/runtime/macros/life/click.me
@@ -0,0 +1,9 @@
+
+To run the "Conway's game of life" macros:
+
+ 1. Type ":so life.vim". This loads the macros.
+ 2. Type "g" to run the macros.
+ 3. Type CTRL-C to interrupt.
+ 4. Type ":q!" to get out.
+
+See life.vim for more advanced usage.
diff --git a/runtime/macros/life/click.me.info b/runtime/macros/life/click.me.info
new file mode 100644
index 000000000..f5756501f
--- /dev/null
+++ b/runtime/macros/life/click.me.info
Binary files differ
diff --git a/runtime/macros/life/life.vim b/runtime/macros/life/life.vim
new file mode 100644
index 000000000..adf4e2081
--- /dev/null
+++ b/runtime/macros/life/life.vim
@@ -0,0 +1,260 @@
+" Macros to play Conway's Game of Life in vi
+" Version 1.0m: edges wrap
+" by Eli-the-Bearded (eli@netusa.net), Sept 1996
+" This file may be free distributed so long as these credits remain unchanged.
+"
+" Modified by Bram Moolenaar (Bram@vim.org), 1996 Sept 10
+" - Made it quite a bit faster, but now needs search patterns in the text
+" - Changed the order of mappings to top-down.
+" - Made "g" run the whole thing, "C" run one generation.
+" - Added support for any uppercase character instead of 'X'
+"
+" Rules:
+" If a germ has 0 or 1 live neighbors it dies of loneliness
+" If a germ has 2 or 3 live neighbors it survives
+" If a germ has 4 to 8 live neighbors it dies of starvation
+" If an empty box has 3 live neighbors a new germ is born
+"
+" A new born germ is an "A". Every generation it gets older: B, C, etc.
+" A germ dies of old age when it reaches "Z".
+"
+" Notice the rules do not mention edges. This version has the edges wrap
+" around. I have an earlier version that offers the option of live edges or
+" dead edges. Email me if you are interested. -Eli-
+"
+" Note: This is slow! One generation may take up to ten minutes (depends on
+" your computer and the vi version).
+"
+" Quite a lot of the messy stuff is to work around the vi error "Can't yank
+" inside global/macro". Still doesn't work for all versions of vi.
+"
+" To use these macros:
+"
+" vi start vi/vim
+"
+" :so life.mac Source this file
+"
+" g 'g'o! runs everything until interrupted: "IR".
+"
+" I Initialize everything. A board will be drawn at the end
+" of the current buffer. All line references in these macros
+" are relative to the end of the file and playing the game
+" can be done safely with any file as the current buffer.
+"
+" Change the left field with spaces and uppercase letters to suit
+" your taste.
+"
+" C 'C'ompute one generation.
+" + idem, time running one generation.
+" R 'R'un 'C'ompute until interrupted.
+" i<nr><Esc>z Make a number the only thing on the current line and use
+" 'z' to time that many generations.
+"
+" Time to run 30 generations on my 233 AMD K6 (FreeBSD 3.0):
+" vim 5.4 xterm 51 sec
+" gvim 5.4 Athena 42 sec
+" gvim 5.4 Motif 42 sec
+" gvim 5.4 GTK 50 sec
+" nvi 1.79 xterm 58 sec
+" vi 3.7 xterm 2 min 30 sec
+" Elvis 2.1 xterm 7 min 50 sec
+" Elvis 2.1 X11 6 min 31 sec
+"
+" Time to run 30 generations on my 850 AMD Duron (FreeBSD 4.2):
+" vim 5.8 xterm 21 sec
+" vim 6.0 xterm 24 sec
+" vim 6.0 Motif 32 sec
+" nvi 1.79 xterm 29 sec
+" vi 3.7 xterm 32 sec
+" elvis 2.1.4 xterm 34 sec
+"
+" And now the macros, more or less in top-down order.
+"
+" ----- macros that can be used by the human -----
+"
+" 'g'o: 'I'nitialize and then 'R'un 'C'ompute recursively (used by the human)
+map g IR
+"
+"
+" 'R'un 'C'ompute recursively (used by the human and 'g'o)
+map R CV
+" work around "tail recursion" problem in vi, "V" == "R".
+map V R
+"
+"
+" 'I'nitialize the board (used by the human and 'g'o)
+map I G)0)0)0)0)1)0)0)2)0)0)0)0,ok,-11k,-,R,IIN
+"
+"
+" 'C'ompute next generation (used by the human and others)
+map C T>>>>>>>>B&
+"
+"
+" Time running one generation (used by the human)
+map + <1C<2
+"
+"
+" Time running N generations, where N is the number on the current line.
+" (used by the human)
+map z ,^,&,*,&<1,*<2
+"
+" ----- END of macros that can be used by the human -----
+"
+" ----- Initialisation -----
+"
+map ,- :s/./-/g
+map ,o oPut 'X's in the left box, then hit 'C' or 'R'
+map ,R 03stop
+"
+" Write a new line (used by 'I'nitialize board)
+map )0 o- --....................--....................-
+map )1 o- VIM --....................--....................-
+map )2 o- LIVES --....................--....................-
+"
+"
+" Initialisation of the pattern/command to execute for working out a square.
+" Pattern is: "#<germ><count>"
+" where <germ> is " " if the current germ is dead, "X" when living.
+" <count> is the number of living neighbours (including current germ)
+" expressed in X's
+"
+map ,Il8 O#XXXXXXXXXX .`a22lr 
+map ,Id8 o# XXXXXXXX .`a22lr 
+map ,Il7 o#XXXXXXXXX .`a22lr 
+map ,Id7 o# XXXXXXX .`a22lr 
+map ,Il6 o#XXXXXXXX .`a22lr 
+map ,Id6 o# XXXXXX .`a22lr 
+map ,Il5 o#XXXXXXX .`a22lr 
+map ,Id5 o# XXXXX .`a22lr 
+map ,Il4 o#XXXXXX .`a22lr 
+map ,Id4 o# XXXX .`a22lr 
+map ,Il3 o#XXXXX .,a
+map ,Id3 o# XXX .`a22lrA
+map ,Il2 o#XXXX .,a
+map ,Id2 o# XX .`a22lr 
+map ,Il1 o#XXX .`a22lr 
+map ,Id1 o# X .`a22lr 
+map ,Il0 o#XX .`a22lr 
+map ,Id0 o# .`a22lr 
+"
+" Patterns used to replace a germ with it's next generation
+map ,Iaa o=AB =BC =CD =DE =EF =FG =GH =HI =IJ =JK =KL =LM =MN =NO =OP =PQ =QR
+map ,Iab o=RS =ST =TU =UV =VW =WX =XY =YZ =Z 
+"
+" Insert the searched patterns above the board
+map ,IIN G?^top ,Il8,Id8,Il7,Id7,Il6,Id6,Il5,Id5,Il4,Id4,Il3,Id3,Il2,Id2,Il1,Id1,Il0,Id0,Iaa,Iab
+"
+" ----- END of Initialisation -----
+"
+" ----- Work out one line -----
+"
+" Work out 'T'op line (used by show next)
+map T G,c2k,!9k,@,#j>2k,$j
+"
+" Work out 'B'ottom line (used by show next)
+map B ,%k>,$
+"
+" Work out a line (used by show next, work out top and bottom lines)
+map > 0 LWWWWWWWWWWWWWWWWWW,rj
+"
+" Refresh board (used by show next)
+map & :%s/^\(-[ A-Z]*-\)\(-[ A-Z]*-\)\(-[.]*-\)$/\2\3\3/
+"
+"
+" Work around vi multiple yank/put in a single macro limitation
+" (used by work out top and/or bottom line)
+map ,$ dd
+map ,% "cp
+map ,! "byy
+map ,@ "cyy
+map ,# "bP
+map ,c c$
+"
+" ----- END of Work out one line -----
+"
+" ----- Work out one square -----
+"
+" The next three work out a square: put all nine chars around the current
+" character on the bottom line (the bottom line must be empty when starting).
+"
+" 'W'ork out a center square (used by work out line)
+map W makh,3`ah,3`ajh,3(
+"
+"
+" Work out a 'L'eft square (used by work out line)
+map L makf-h,1`ak,2`af-h,1`a,2`ajf-h,1`aj,2(
+"
+"
+" Work out a 'R'ight square (used by work out line)
+map ,r makh,2`akF-l,1`ah,2`aF-l,1`ajh,2`ajF-l,1(
+"
+" 'M'ove a character to the end of the file (used by all work out square
+" macros)
+"
+map ,1 y G$p
+map ,2 2y G$p
+map ,3 3y G$p
+"
+"
+" ----- END of Work out one square -----
+"
+" ----- Work out one germ -----
+"
+" Generate an edit command that depends on the number of living in the last
+" line, and then run the edit command. (used by work out square).
+" Leaves the cursor on the next character to be processed.
+"
+map ( ,s,i,X0i?^#A  0,df.l,Y21h
+"
+" Delete 's'paces (deads);
+" The number of remaining characters is the number of living neighbours.
+map ,s :.g/ /s///g
+"
+" Insert current character in the last line
+map ,i `ay GP
+"
+" Replace any uppercase letter with 'X';
+map ,X :.g/[A-Z]/s//X/g
+"
+" Delete and execute the rest of the line
+map ,d "qd$@q
+"
+" Yank and execute the rest of the line
+map ,Y "qy$@q
+"
+" Yank the character under the cursor
+map ,j y
+"
+" Put the current cut buffer after the cursor
+map ,m p
+"
+" Delete the character under the cursor
+map ,n x
+"
+" Replace a character by it's next, A --> B, B --> C, etc.
+map ,a `a,jGi?=,ma 0,dll,j`a21l,ml,nh
+"
+" ----- END of Work out one germ -----
+"
+" ----- timing macros -----
+"
+" Get current date (used by time a generation)
+map << :r!date
+map <1 G?^top O<<
+map <2 G?^top k<<
+"
+"
+" Turn number on current line into edit command (used by time N generations)
+map ,^ AiC
+"
+"
+" Delete current line and save current line (used by time N generations)
+map ,& 0"gd$
+"
+"
+" Run saved line (used by time N generations)
+map ,* @g
+"
+" ----- END of timing macros -----
+"
+" End of the macros.
diff --git a/runtime/macros/matchit.txt b/runtime/macros/matchit.txt
new file mode 100644
index 000000000..8ea4de5f2
--- /dev/null
+++ b/runtime/macros/matchit.txt
@@ -0,0 +1,402 @@
+*matchit.txt* Extended "%" matching
+
+For instructions on installing this file, type
+ :help matchit-install
+inside Vim.
+
+For Vim version 6.3. Last change: 2004 May 12
+
+
+ VIM REFERENCE MANUAL by Benji Fisher
+
+*matchit* *matchit.vim*
+
+1. Extended matching with "%" |matchit-intro|
+2. Activation |matchit-activate|
+3. Configuration |matchit-configure|
+4. Supporting a New Language |matchit-newlang|
+5. Known Bugs and Limitations |matchit-bugs|
+
+The functionality mentioned here is a plugin, see |add-plugin|.
+This plugin is only available if 'compatible' is not set.
+You can avoid loading this plugin by setting the "loaded_matchit" variable
+in your |vimrc| file: >
+ :let loaded_matchit = 1
+
+{Vi does not have any of this}
+
+==============================================================================
+1. Extended matching with "%" *matchit-intro*
+
+ *matchit-%*
+% Cycle forward through matching groups, such as "if", "else", "endif",
+ as specified by |b:match_words|.
+
+ *g%* *v_g%* *o_g%*
+g% Cycle backwards through matching groups, as specified by
+ |b:match_words|. For example, go from "endif" to "else" to "if".
+
+ *[%* *v_[%* *o_[%*
+[% Go to [count] previous unmatched group, as specified by
+ |b:match_words|. Similar to |[{|.
+
+ *]%* *v_]%* *o_]%*
+]% Go to [count] next unmatched group, as specified by
+ |b:match_words|. Similar to |]}|.
+
+ *v_a%*
+a% In Visual mode, select the matching group, as specified by
+ |b:match_words|, containing the cursor. Similar to |v_a[|.
+ A [count] is ignored, and only the first character of the closing
+ pattern is selected.
+
+In Vim, as in plain vi, the percent key, |%|, jumps the cursor from a brace,
+bracket, or paren to its match. This can be configured with the 'matchpairs'
+option. The matchit plugin extends this in several ways:
+
+ You can match whole words, such as "if" and "endif", not just
+ single characters. You can also specify a |regular-expression|.
+ You can define groups with more than two words, such as "if",
+ "else", "endif". Banging on the "%" key will cycle from the "if" to
+ the first "else", the next "else", ..., the closing "endif", and back
+ to the opening "if". Nested structures are skipped. Using |g%| goes
+ in the reverse direction.
+ By default, words inside comments and strings are ignored, unless
+ the cursor is inside a comment or string when you type "%". If the
+ only thing you want to do is modify the behavior of "%" so that it
+ behaves this way, you can >
+ :let b:match_words = &matchpairs
+<
+See |matchit-details| for details on what the script does, and |b:match_words|
+for how to specify matching patterns.
+
+MODES: *matchit-modes* *matchit-v_%* *matchit-o_%*
+
+Mostly, % and related motions (|g%| and |[%| and |]%|) work just like built-in
+|motion| commands in |Operator-pending| and |Visual| modes. However, you
+cannot make these motions |linewise| or |characterwise|, since the |:omap|s
+that define them start with "v" in order to make the default behavior
+inclusive. (See |o_v|.) In other words, "dV%" will not work. The
+work-around is to go through Visual mode: "V%d" will work.
+
+LANGUAGES: *matchit-languages*
+
+Currently, the following languages are supported: Ada, ASP with VBS, Csh,
+DTD, Entity, Essbase, Fortran, HTML, JSP (same as HTML), LaTeX, Lua, Pascal,
+SGML, Shell, Tcsh, Vim, XML. Other languages may already have support via
+|filetype-plugin|s.
+
+To support a new language, see |matchit-newlang| below.
+
+DETAILS: *matchit-details* *matchit-parse*
+
+Here is an outline of what matchit.vim does each time you hit the "%" key. If
+there are |backref|s in |b:match_words| then the first step is to produce a
+version in which these back references have been eliminated; if there are no
+|backref|s then this step is skipped. This step is called parsing. For
+example, "\(foo\|bar\):end\1" is parsed to yield
+"\(foo\|bar\):end\(foo\|bar\)". This can get tricky, especially if there are
+nested groups. If debugging is turned on, the parsed version is saved as
+|b:match_pat|.
+
+ *matchit-choose*
+Next, the script looks for a word on the current line that matches the pattern
+just constructed. It includes the patterns from the 'matchpairs' option.
+The goal is to do what you expect, which turns out to be a little complicated.
+The script follows these rules:
+
+ Insist on a match that ends on or after the cursor.
+ Prefer a match that includes the cursor position (that is, one that
+ starts on or before the cursor).
+ Prefer a match that starts as close to the cursor as possible.
+ Prefer a match in |b:match_words| to a match in 'matchpairs'.
+ If more than one pattern in |b:match_words| matches, choose the one
+ that is listed first.
+
+Examples:
+
+ Suppose you >
+ :let b:match_words = '<:>,<tag>:</tag>'
+< and hit "%" with the cursor on or before the "<" in "a <tag> is born".
+ The pattern '<' comes first, so it is preferred over '<tag>', which
+ also matches. If the cursor is on the "t", however, then '<tag>' is
+ preferred, because this matches a bit of text containing the cursor.
+ If the two groups of patterns were reversed then '<' would never be
+ preferred.
+
+ Suppose you >
+ :let b:match_words = 'if:end if'
+< (Note the space!) and hit "%" with the cursor at the end of "end if".
+ Then "if" matches, which is probably not what you want, but if the
+ cursor starts on the "end " then "end if" is chosen. (You can avoid
+ this problem by using a more complicated pattern.)
+
+If there is no match, the script falls back on the usual behavior of |%|. If
+debugging is turned on, the matched bit of text is saved as |b:match_match|
+and the cursor column of the start of the match is saved as |b:match_col|.
+
+Next, the script looks through |b:match_words| (original and parsed versions)
+for the group and pattern that match. If debugging is turned on, the group is
+saved as |b:match_ini| (the first pattern) and |b:match_tail| (the rest). If
+there are |backref|s then, in addition, the matching pattern is saved as
+|b:match_word| and a table of translations is saved as |b:match_table|. If
+there are |backref|s, these are determined from the matching pattern and
+|b:match_match| and substituted into each pattern in the matching group.
+
+The script decides whether to search forwards or backwards and chooses
+arguments for the |searchpair()| function. Then, the cursor is moved to the
+start of the match, and |searchpair()| is called. By default, matching
+structures inside strings and comments are ignored. This can be changed by
+setting |b:match_skip|.
+
+==============================================================================
+2. Activation *matchit-activate*
+
+You can use this script as a plugin, by copying it to your plugin directory.
+See |add-global-plugin| for instructions. You can also add a line to your
+|vimrc| file, such as >
+ :source $VIMRUNTIME/macros/matchit.vim
+or >
+ :runtime macros/matchit.vim
+Either way, the script should start working the next time you start up Vim.
+
+The script does nothing unless it finds a |buffer-variable| named
+|b:match_words|. The script contains autocommands that set this variable for
+various file types: see |matchit-languages| above. For a new language, you
+can add autocommands to the script or to your vimrc file, but the recommended
+method is to add a line such as >
+ let b:match_words = '\<foo\>:\<bar\>'
+to the |filetype-plugin| for your language. See |b:match_words| below for how
+this variable is interpreted.
+
+TROUBLESHOOTING *matchit-troubleshoot*
+
+The script should work in most installations of Vim. It may not work if Vim
+was compiled with a minimal feature set, for example if the |+syntax| option
+was not enabled. If your Vim has support for syntax compiled in, but you do
+not have |syntax| highlighting turned on, matchit.vim should work, but it may
+fail to skip matching groups in comments and strings. If the |filetype|
+mechanism is turned off, the |b:match_words| variable will probably not be
+defined automatically.
+
+==============================================================================
+3. Configuration *matchit-configure*
+
+There are several variables that govern the behavior of matchit.vim. Note
+that these are variables local to the buffer, not options, so use |:let| to
+define them, not |:set|. Some of these variables have values that matter; for
+others, it only matters whether the variable has been defined. All of these
+can be defined in the |filetype-plugin| or autocommand that defines
+|b:match_words| or "on the fly."
+
+The main variable is |b:match_words|. It is described in the section below on
+supporting a new language.
+
+ *MatchError* *matchit-hl* *matchit-highlight*
+MatchError is the highlight group for error messages from the script. By
+default, it is linked to WarningMsg. If you do not want to be bothered by
+error messages, you can define this to be something invisible. For example,
+if you use the GUI version of Vim and your command line is normally white, you
+can do >
+ :hi MatchError guifg=white guibg=white
+<
+ *b:match_ignorecase*
+If you >
+ :let b:match_ignorecase = 1
+then matchit.vim acts as if 'ignorecase' is set: for example, "end" and "END"
+are equivalent. If you >
+ :let b:match_ignorecase = 0
+then matchit.vim treats "end" and "END" differently. (There will be no
+b:match_infercase option unless someone requests it.)
+
+ *b:match_debug*
+Define b:match_debug if you want debugging information to be saved. See
+|matchit-debug|, below.
+
+ *b:match_skip*
+If b:match_skip is defined, it is passed as the skip argument to
+|searchpair()|. This controls when matching structures are skipped, or
+ignored. By default, they are ignored inside comments and strings, as
+determined by the |syntax| mechanism. (If syntax highlighting is turned off,
+nothing is skipped.) You can set b:match_skip to a string, which evaluates to
+a non-zero, numerical value if the match is to be skipped or zero if the match
+should not be skipped. In addition, the following special values are
+supported by matchit.vim:
+ s:foo becomes (current syntax item) =~ foo
+ S:foo becomes (current syntax item) !~ foo
+ r:foo becomes (line before cursor) =~ foo
+ R:foo becomes (line before cursor) !~ foo
+(The "s" is meant to suggest "syntax", and the "r" is meant to suggest
+"regular expression".)
+
+Examples:
+
+ You can get the default behavior with >
+ :let b:match_skip = 's:comment\|string'
+<
+ If you want to skip matching structures unless they are at the start
+ of the line (ignoring whitespace) then you can >
+ :let b:match_skip = 'R:^\s*'
+< Do not do this if strings or comments can span several lines, since
+ the normal syntax checking will not be done if you set b:match_skip.
+
+ In LaTeX, since "%" is used as the comment character, you can >
+ :let b:match_skip = 'r:%'
+< Unfortunately, this will skip anything after "\%", an escaped "%". To
+ allow for this, and also "\\%" (an excaped backslash followed by the
+ comment character) you can >
+ :let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%'
+<
+ See the $VIMRUNTIME/syntax/vim.vim for an example that uses both
+ syntax and a regular expression.
+
+==============================================================================
+4. Supporting a New Language *matchit-newlang*
+ *b:match_words*
+In order for matchit.vim to support a new language, you must define a suitable
+pattern for |b:match_words|. You may also want to set some of the
+|matchit-configure| variables, as described above. If your language has a
+complicated syntax, or many keywords, you will need to know something about
+Vim's |regular-expression|s.
+
+The format for |b:match_words| is similar to that of the 'matchpairs' option:
+it is a comma (,)-separated list of groups; each group is a colon(:)-separated
+list of patterns (regular expressions). It is OK to have only one group; the
+effect is undefined if a group has only one pattern. A simple example is >
+ :let b:match_words = '\<if\>:\<endif\>,'
+ \ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'
+(In Vim regular expressions, |\<| and |\>| denote word boundaries. Thus "if"
+matches the end of "endif" but "\<if\>" does not.) Then banging on the "%"
+key will bounce the cursor between "if" and the matching "endif"; and from
+"while" to any matching "continue" or "break", then to the matching "endwhile"
+and back to the "while". It is almost always easier to use |literal-string|s
+(single quotes) as above: '\<if\>' rather than "\\<if\\>" and so on.
+
+Exception: If the ":" character does not appear in b:match_words, then it is
+treated as an expression to be evaluated. For example, >
+ :let b:match_words = 'GetMatchWords()'
+allows you to define a function. This can return a different string depending
+on the current syntax, for example.
+
+Once you have defined the appropriate value of |b:match_words|, you will
+probably want to have this set automatically each time you edit the
+appropriate file type. The recommended way to do this is by adding the
+definition to a |filetype-plugin| file.
+
+Tips: Be careful that your initial pattern does not match your final pattern.
+See the example above for the use of word-boundary expressions. It is usually
+better to use ".\{-}" (as many as necessary) instead of ".*" (as many as
+possible). See |\{-|. For example, in the string "<tag>label</tag>", "<.*>"
+matches the whole string whereas "<.\{-}>" and "<[^>]*>" match "<tag>" and
+"</tag>".
+
+ *matchit-spaces* *matchit-s:notend*
+If "if" is to be paired with "end if" (Note the space!) then word boundaries
+are not enough. Instead, define a regular expression s:notend that will match
+anything but "end" and use it as follows: >
+ :let s:notend = '\%(\<end\s\+\)\@<!'
+ :let b:match_words = s:notend . '\<if\>:\<end\s\+if\>'
+< *matchit-s:sol*
+This is a simplified version of what is done for Ada. The s:notend is a
+|script-variable|. Similarly, you may want to define a start-of-line regular
+expression >
+ :let s:sol = '\%(^\|;\)\s*'
+if keywords are only recognized after the start of a line or after a
+semicolon (;), with optional white space.
+
+ *matchit-backref* *matchit-\1*
+In any group, the expressions |\1|, |\2|, ..., |\9| refer to parts of the
+INITIAL pattern enclosed in |\(|escaped parentheses|\)|. These are referred
+to as back references, or backrefs. For example, >
+ :let b:match_words = '\<b\(o\+\)\>:\(h\)\1\>'
+means that "bo" pairs with "ho" and "boo" pairs with "hoo" and so on. Note
+that "\1" does not refer to the "\(h\)" in this example. If you have
+"\(nested \(parentheses\)\) then "\d" refers to the d-th "\(" and everything
+up to and including the matching "\)": in "\(nested\(parentheses\)\)", "\1"
+refers to everything and "\2" refers to "\(parentheses\)". If you use a
+variable such as |s:notend| or |s:sol| in the previous paragraph then remember
+to count any "\(" patterns in this variable. You do not have to count groups
+defined by |\%(\)|.
+
+It should be possible to resolve back references from any pattern in the
+group. For example, >
+ :let b:match_words = '\(foo\)\(bar\):more\1:and\2:end\1\2'
+would not work because "\2" cannot be determined from "morefoo" and "\1"
+cannot be determined from "andbar". On the other hand, >
+ :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1'
+should work (and have the same effect as "foobar:barfoo:endfoobar"), although
+this has not been thoroughly tested.
+
+You can use |zero-width| patterns such as |\@<=| and |\zs|. (The latter has
+not been thouroughly tested in matchit.vim.) For example, if the keyword "if"
+must occur at the start of the line, with optional white space, you might use
+the pattern "\(^\s*\)\@<=if" so that the cursor will end on the "i" instead of
+at the start of the line. For another example, if HTML had only one tag then
+one could >
+ :let b:match_words = '<:>,<\@<=tag>:<\@<=/tag>'
+so that "%" can bounce between matching "<" and ">" pairs or (starting on
+"tag" or "/tag") between matching tags. Without the |\@<=|, the script would
+bounce from "tag" to the "<" in "</tag>", and another "%" would not take you
+back to where you started.
+
+DEBUGGING *matchit-debug* *:MatchDebug*
+
+If you are having trouble figuring out the appropriate definition of
+|b:match_words| then you can take advantage of the same information I use when
+debugging the script. This is especially true if you are not sure whether
+your patterns or my script are at fault! To make this more convenient, I have
+made the command :MatchDebug, which defines the variable |b:match_debug| and
+creates a Matchit menu. This menu makes it convenient to check the values of
+the variables described below. You will probably also want to read
+|matchit-details| above.
+
+Defining the variable |b:match_debug| causes the script to set the following
+variables, each time you hit the "%" key. Several of these are only defined
+if |b:match_words| includes |backref|s.
+
+ *b:match_pat*
+The b:match_pat variable is set to |b:match_words| with |backref|s parsed.
+ *b:match_match*
+The b:match_match variable is set to the bit of text that is recognized as a
+match.
+ *b:match_col*
+The b:match_col variable is set to the cursor column of the start of the
+matching text.
+ *b:match_wholeBR*
+The b:match_wholeBR variable is set to the comma-separated group of patterns
+that matches, with |backref|s unparsed.
+ *b:match_iniBR*
+The b:match_iniBR variable is set to the first pattern in |b:match_wholeBR|.
+ *b:match_ini*
+The b:match_ini variable is set to the first pattern in |b:match_wholeBR|,
+with |backref|s resolved from |b:match_match|.
+ *b:match_tail*
+The b:match_tail variable is set to the remaining patterns in
+|b:match_wholeBR|, with |backref|s resolved from |b:match_match|.
+ *b:match_word*
+The b:match_word variable is set to the pattern from |b:match_wholeBR| that
+matches |b:match_match|.
+ *b:match_table*
+The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in
+|b:match_word|.
+
+==============================================================================
+5. Known Bugs and Limitations *matchit-bugs*
+
+Just because I know about a bug does not mean that it is on my todo list. I
+try to respond to reports of bugs that cause real problems. If it does not
+cause serious problems, or if there is a work-around, a bug may sit there for
+a while. Moral: if a bug (known or not) bothers you, let me know.
+
+The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may
+have undesired effects in Select mode |Select-mode-mapping|. At least, if you
+want to replace the selection with any character in "ag%[]" there will be a
+pause of |'updatetime'| first.
+
+It would be nice if "\0" were recognized as the entire pattern. That is, it
+would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". I may
+try to implement this in a future version. (This is not so easy to arrange as
+you might think!)
+
+==============================================================================
+vim:tw=78:fo=tcq2:
diff --git a/runtime/macros/matchit.vim b/runtime/macros/matchit.vim
new file mode 100644
index 000000000..296099474
--- /dev/null
+++ b/runtime/macros/matchit.vim
@@ -0,0 +1,806 @@
+" matchit.vim: (global plugin) Extended "%" matching
+" Last Change: Sat May 15 11:00 AM 2004 EDT
+" Maintainer: Benji Fisher PhD <benji@member.AMS.org>
+" Version: 1.9, for Vim 6.3
+" URL: http://www.vim.org/script.php?script_id=39
+
+" Documentation:
+" The documentation is in a separate file, matchit.txt .
+
+" Credits:
+" Vim editor by Bram Moolenaar (Thanks, Bram!)
+" Original script and design by Raul Segura Acevedo
+" Support for comments by Douglas Potts
+" Support for back references and other improvements by Benji Fisher
+" Support for many languages by Johannes Zellner
+" Suggestions for improvement, bug reports, and support for additional
+" languages by Jordi-Albert Batalla, Neil Bird, Servatius Brandt, Mark
+" Collett, Stephen Wall, Dany St-Amant, and Johannes Zellner.
+
+" Debugging:
+" If you'd like to try the built-in debugging commands...
+" :MatchDebug to activate debugging for the current buffer
+" This saves the values of several key script variables as buffer-local
+" variables. See the MatchDebug() function, below, for details.
+
+" TODO: I should think about multi-line patterns for b:match_words.
+" This would require an option: how many lines to scan (default 1).
+" This would be useful for Python, maybe also for *ML.
+" TODO: Maybe I should add a menu so that people will actually use some of
+" the features that I have implemented.
+" TODO: Eliminate the MultiMatch function. Add yet another argument to
+" Match_wrapper() instead.
+" TODO: Allow :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1'
+" TODO: Make backrefs safer by using '\V' (very no-magic).
+" TODO: Add a level of indirection, so that custom % scripts can use my
+" work but extend it.
+
+" allow user to prevent loading
+" and prevent duplicate loading
+if exists("loaded_matchit") || &cp
+ finish
+endif
+let loaded_matchit = 1
+let s:last_mps = ""
+let s:last_words = ""
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+nnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'n') <CR>
+nnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'n') <CR>
+vnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'v') <CR>m'gv``
+vnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'v') <CR>m'gv``
+onoremap <silent> % v:<C-U>call <SID>Match_wrapper('',1,'o') <CR>
+onoremap <silent> g% v:<C-U>call <SID>Match_wrapper('',0,'o') <CR>
+
+" Analogues of [{ and ]} using matching patterns:
+nnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "n") <CR>
+nnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "n") <CR>
+vmap [% <Esc>[%m'gv``
+vmap ]% <Esc>]%m'gv``
+" vnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "v") <CR>m'gv``
+" vnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "v") <CR>m'gv``
+onoremap <silent> [% v:<C-U>call <SID>MultiMatch("bW", "o") <CR>
+onoremap <silent> ]% v:<C-U>call <SID>MultiMatch("W", "o") <CR>
+
+" text object:
+vmap a% <Esc>[%v]%
+
+" Auto-complete mappings: (not yet "ready for prime time")
+" TODO Read :help write-plugin for the "right" way to let the user
+" specify a key binding.
+" let g:match_auto = '<C-]>'
+" let g:match_autoCR = '<C-CR>'
+" if exists("g:match_auto")
+" execute "inoremap " . g:match_auto . ' x<Esc>"=<SID>Autocomplete()<CR>Pls'
+" endif
+" if exists("g:match_autoCR")
+" execute "inoremap " . g:match_autoCR . ' <CR><C-R>=<SID>Autocomplete()<CR>'
+" endif
+" if exists("g:match_gthhoh")
+" execute "inoremap " . g:match_gthhoh . ' <C-O>:call <SID>Gthhoh()<CR>'
+" endif " gthhoh = "Get the heck out of here!"
+
+let s:notslash = '\\\@<!\%(\\\\\)*'
+
+function! s:Match_wrapper(word, forward, mode) range
+ " In s:CleanUp(), :execute "set" restore_options .
+ let restore_options = (&ic ? " " : " no") . "ignorecase"
+ if exists("b:match_ignorecase")
+ let &ignorecase = b:match_ignorecase
+ endif
+ let restore_options = " ve=" . &ve . restore_options
+ set ve=
+ " If this function was called from Visual mode, make sure that the cursor
+ " is at the correct end of the Visual range:
+ if a:mode == "v"
+ execute "normal! gv\<Esc>"
+ endif
+ " In s:CleanUp(), we may need to check whether the cursor moved forward.
+ let startline = line(".")
+ let startcol = col(".")
+ " Use default behavior if called with a count or if no patterns are defined.
+ if v:count
+ exe "normal! " . v:count . "%"
+ return s:CleanUp(restore_options, a:mode, startline, startcol)
+ elseif !exists("b:match_words") || b:match_words == ""
+ silent! normal! %
+ return s:CleanUp(restore_options, a:mode, startline, startcol)
+ end
+
+ " First step: if not already done, set the script variables
+ " s:do_BR flag for whether there are backrefs
+ " s:pat parsed version of b:match_words
+ " s:all regexp based on s:pat and the default groups
+ "
+ " Allow b:match_words = "GetVimMatchWords()" .
+ if b:match_words =~ ":"
+ let match_words = b:match_words
+ else
+ execute "let match_words =" b:match_words
+ endif
+" Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion!
+ if (match_words != s:last_words) || (&mps != s:last_mps) ||
+ \ exists("b:match_debug")
+ let s:last_words = match_words
+ let s:last_mps = &mps
+ if match_words !~ s:notslash . '\\\d'
+ let s:do_BR = 0
+ let s:pat = match_words
+ else
+ let s:do_BR = 1
+ let s:pat = s:ParseWords(match_words)
+ endif
+ " The next several lines were here before
+ " BF started messing with this script.
+ " quote the special chars in 'matchpairs', replace [,:] with \| and then
+ " append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif)
+ " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
+ " \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
+ let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
+ \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
+ " s:all = pattern with all the keywords
+ let s:all = s:pat . (strlen(s:pat) ? "," : "") . default
+ let s:all = substitute(s:all, s:notslash . '\zs[,:]\+', '\\|', 'g')
+ let s:all = '\%(' . s:all . '\)'
+ " let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)'
+ if exists("b:match_debug")
+ let b:match_pat = s:pat
+ endif
+ endif
+
+ " Second step: set the following local variables:
+ " matchline = line on which the cursor started
+ " curcol = number of characters before match
+ " prefix = regexp for start of line to start of match
+ " suffix = regexp for end of match to end of line
+ " Require match to end on or after the cursor and prefer it to
+ " start on or before the cursor.
+ let matchline = getline(startline)
+ if a:word != ''
+ " word given
+ if a:word !~ s:all
+ echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE
+ return s:CleanUp(restore_options, a:mode, startline, startcol)
+ endif
+ let matchline = a:word
+ let curcol = 0
+ let prefix = '^\%('
+ let suffix = '\)$'
+ " Now the case when "word" is not given
+ else " Find the match that ends on or after the cursor and set curcol.
+ let regexp = s:Wholematch(matchline, s:all, startcol-1)
+ let curcol = match(matchline, regexp)
+ let suf = strlen(matchline) - matchend(matchline, regexp)
+ let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(')
+ let suffix = (suf ? '\).\{' . suf . '}$' : '\)$')
+ " If the match comes from the defaults, bail out.
+ if matchline !~ prefix .
+ \ substitute(s:pat, s:notslash.'\zs[,:]\+', '\\|', 'g') . suffix
+ silent! norm! %
+ return s:CleanUp(restore_options, a:mode, startline, startcol)
+ endif
+ endif
+ if exists("b:match_debug")
+ let b:match_match = matchstr(matchline, regexp)
+ let b:match_col = curcol+1
+ endif
+
+ " Third step: Find the group and single word that match, and the original
+ " (backref) versions of these. Then, resolve the backrefs.
+ " Set the following local variable:
+ " group = colon-separated list of patterns, one of which matches
+ " = ini:mid:fin or ini:fin
+ "
+ " Reconstruct the version with unresolved backrefs.
+ let patBR = substitute(match_words.',',
+ \ s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
+ let patBR = substitute(patBR, s:notslash.'\zs:\{2,}', ':', 'g')
+ " Now, set group and groupBR to the matching group: 'if:endif' or
+ " 'while:endwhile' or whatever. A bit of a kluge: s:Choose() returns
+ " group . "," . groupBR, and we pick it apart.
+ let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR)
+ let i = matchend(group, s:notslash . ",")
+ let groupBR = strpart(group, i)
+ let group = strpart(group, 0, i-1)
+ " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
+ if s:do_BR " Do the hard part: resolve those backrefs!
+ let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
+ endif
+ if exists("b:match_debug")
+ let b:match_wholeBR = groupBR
+ let i = matchend(groupBR, s:notslash . ":")
+ let b:match_iniBR = strpart(groupBR, 0, i-1)
+ endif
+
+ " Fourth step: Set the arguments for searchpair().
+ let i = matchend(group, s:notslash . ":")
+ let j = matchend(group, '.*' . s:notslash . ":")
+ let ini = strpart(group, 0, i-1)
+ let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g')
+ let fin = strpart(group, j)
+ " searchpair() requires that these patterns avoid \(\) groups.
+ let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g')
+ let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g')
+ let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g')
+ " Set mid. This is optimized for readability, not micro-efficiency!
+ if a:forward && matchline =~ prefix . fin . suffix
+ \ || !a:forward && matchline =~ prefix . ini . suffix
+ let mid = ""
+ endif
+ " Set flag. This is optimized for readability, not micro-efficiency!
+ if a:forward && matchline =~ prefix . fin . suffix
+ \ || !a:forward && matchline !~ prefix . ini . suffix
+ let flag = "bW"
+ else
+ let flag = "W"
+ endif
+ " Set skip.
+ if exists("b:match_skip")
+ let skip = b:match_skip
+ elseif exists("b:match_comment") " backwards compatibility and testing!
+ let skip = "r:" . b:match_comment
+ else
+ let skip = 's:comment\|string'
+ endif
+ let skip = s:ParseSkip(skip)
+ if exists("b:match_debug")
+ let b:match_ini = ini
+ let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin
+ endif
+
+ " Fifth step: actually start moving the cursor and call searchpair().
+ " Later, :execute restore_cursor to get to the original screen.
+ let restore_cursor = virtcol(".") . "|"
+ normal! g0
+ let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor
+ normal! H
+ let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
+ execute restore_cursor
+ normal! 0
+ if curcol
+ execute "normal!" . curcol . "l"
+ endif
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+ let skip = "0"
+ else
+ execute "if " . skip . "| let skip = '0' | endif"
+ endif
+ let sp_return = searchpair(ini, mid, fin, flag, skip)
+ let final_position = "call cursor(" . line(".") . "," . col(".") . ")"
+ " Restore cursor position and original screen.
+ execute restore_cursor
+ normal! m'
+ if sp_return > 0
+ execute final_position
+ endif
+ return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin)
+endfun
+
+" Restore options and do some special handling for Operator-pending mode.
+" The optional argument is the tail of the matching group.
+fun! s:CleanUp(options, mode, startline, startcol, ...)
+ execute "set" a:options
+ " Open folds, if appropriate.
+ if a:mode != "o"
+ if &foldopen =~ "percent"
+ normal! zv
+ endif
+ " In Operator-pending mode, we want to include the whole match
+ " (for example, d%).
+ " This is only a problem if we end up moving in the forward direction.
+ elseif (a:startline < line(".")) ||
+ \ (a:startline == line(".") && a:startcol < col("."))
+ if a:0
+ " Check whether the match is a single character. If not, move to the
+ " end of the match.
+ let matchline = getline(".")
+ let currcol = col(".")
+ let regexp = s:Wholematch(matchline, a:1, currcol-1)
+ let endcol = matchend(matchline, regexp)
+ if endcol > currcol " This is NOT off by one!
+ execute "normal!" . (endcol - currcol) . "l"
+ endif
+ endif " a:0
+ endif " a:mode != "o" && etc.
+ return 0
+endfun
+
+" Example (simplified HTML patterns): if
+" a:groupBR = '<\(\k\+\)>:</\1>'
+" a:prefix = '^.\{3}\('
+" a:group = '<\(\k\+\)>:</\(\k\+\)>'
+" a:suffix = '\).\{2}$'
+" a:matchline = "123<tag>12" or "123</tag>12"
+" then extract "tag" from a:matchline and return "<tag>:</tag>" .
+fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline)
+ if a:matchline !~ a:prefix .
+ \ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix
+ return a:group
+ endif
+ let i = matchend(a:groupBR, s:notslash . ':')
+ let ini = strpart(a:groupBR, 0, i-1)
+ let tailBR = strpart(a:groupBR, i)
+ let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix,
+ \ a:groupBR)
+ let i = matchend(word, s:notslash . ":")
+ let wordBR = strpart(word, i)
+ let word = strpart(word, 0, i-1)
+ " Now, a:matchline =~ a:prefix . word . a:suffix
+ if wordBR != ini
+ let table = s:Resolve(ini, wordBR, "table")
+ else
+ " let table = "----------"
+ let table = ""
+ let d = 0
+ while d < 10
+ if tailBR =~ s:notslash . '\\' . d
+ " let table[d] = d
+ let table = table . d
+ else
+ let table = table . "-"
+ endif
+ let d = d + 1
+ endwhile
+ endif
+ let d = 9
+ while d
+ if table[d] != "-"
+ let backref = substitute(a:matchline, a:prefix.word.a:suffix,
+ \ '\'.table[d], "")
+ " Are there any other characters that should be escaped?
+ let backref = escape(backref, '*,:')
+ execute s:Ref(ini, d, "start", "len")
+ let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len)
+ let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d,
+ \ escape(backref, '\\'), 'g')
+ endif
+ let d = d-1
+ endwhile
+ if exists("b:match_debug")
+ if s:do_BR
+ let b:match_table = table
+ let b:match_word = word
+ else
+ let b:match_table = ""
+ let b:match_word = ""
+ endif
+ endif
+ return ini . ":" . tailBR
+endfun
+
+" Input a comma-separated list of groups with backrefs, such as
+" a:groups = '\(foo\):end\1,\(bar\):end\1'
+" and return a comma-separated list of groups with backrefs replaced:
+" return '\(foo\):end\(foo\),\(bar\):end\(bar\)'
+fun! s:ParseWords(groups)
+ let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
+ let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g')
+ let parsed = ""
+ while groups =~ '[^,:]'
+ let i = matchend(groups, s:notslash . ':')
+ let j = matchend(groups, s:notslash . ',')
+ let ini = strpart(groups, 0, i-1)
+ let tail = strpart(groups, i, j-i-1) . ":"
+ let groups = strpart(groups, j)
+ let parsed = parsed . ini
+ let i = matchend(tail, s:notslash . ':')
+ while i != -1
+ " In 'if:else:endif', ini='if' and word='else' and then word='endif'.
+ let word = strpart(tail, 0, i-1)
+ let tail = strpart(tail, i)
+ let i = matchend(tail, s:notslash . ':')
+ let parsed = parsed . ":" . s:Resolve(ini, word, "word")
+ endwhile " Now, tail has been used up.
+ let parsed = parsed . ","
+ endwhile " groups =~ '[^,:]'
+ return parsed
+endfun
+
+" TODO I think this can be simplified and/or made more efficient.
+" TODO What should I do if a:start is out of range?
+" Return a regexp that matches all of a:string, such that
+" matchstr(a:string, regexp) represents the match for a:pat that starts
+" as close to a:start as possible, before being preferred to after, and
+" ends after a:start .
+" Usage:
+" let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1)
+" let i = match(getline("."), regexp)
+" let j = matchend(getline("."), regexp)
+" let match = matchstr(getline("."), regexp)
+fun! s:Wholematch(string, pat, start)
+ let group = '\%(' . a:pat . '\)'
+ let prefix = (a:start ? '\(^.\{,' . a:start . '}\)\zs' : '^')
+ let len = strlen(a:string)
+ let suffix = (a:start+1 < len ? '\(.\{,'.(len-a:start-1).'}$\)\@=' : '$')
+ if a:string !~ prefix . group . suffix
+ let prefix = ''
+ endif
+ return prefix . group . suffix
+endfun
+
+" No extra arguments: s:Ref(string, d) will
+" find the d'th occurrence of '\(' and return it, along with everything up
+" to and including the matching '\)'.
+" One argument: s:Ref(string, d, "start") returns the index of the start
+" of the d'th '\(' and any other argument returns the length of the group.
+" Two arguments: s:Ref(string, d, "foo", "bar") returns a string to be
+" executed, having the effect of
+" :let foo = s:Ref(string, d, "start")
+" :let bar = s:Ref(string, d, "len")
+fun! s:Ref(string, d, ...)
+ let len = strlen(a:string)
+ if a:d == 0
+ let start = 0
+ else
+ let cnt = a:d
+ let match = a:string
+ while cnt
+ let cnt = cnt - 1
+ let index = matchend(match, s:notslash . '\\(')
+ if index == -1
+ return ""
+ endif
+ let match = strpart(match, index)
+ endwhile
+ let start = len - strlen(match)
+ if a:0 == 1 && a:1 == "start"
+ return start - 2
+ endif
+ let cnt = 1
+ while cnt
+ let index = matchend(match, s:notslash . '\\(\|\\)') - 1
+ if index == -2
+ return ""
+ endif
+ " Increment if an open, decrement if a ')':
+ let cnt = cnt + (match[index]=="(" ? 1 : -1) " ')'
+ " let cnt = stridx('0(', match[index]) + cnt
+ let match = strpart(match, index+1)
+ endwhile
+ let start = start - 2
+ let len = len - start - strlen(match)
+ endif
+ if a:0 == 1
+ return len
+ elseif a:0 == 2
+ return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len
+ else
+ return strpart(a:string, start, len)
+ endif
+endfun
+
+" Count the number of disjoint copies of pattern in string.
+" If the pattern is a literal string and contains no '0' or '1' characters
+" then s:Count(string, pattern, '0', '1') should be faster than
+" s:Count(string, pattern).
+fun! s:Count(string, pattern, ...)
+ let pat = escape(a:pattern, '\\')
+ if a:0 > 1
+ let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g")
+ let foo = substitute(a:string, pat, a:2, "g")
+ let foo = substitute(foo, '[^' . a:2 . ']', "", "g")
+ return strlen(foo)
+ endif
+ let result = 0
+ let foo = a:string
+ let index = matchend(foo, pat)
+ while index != -1
+ let result = result + 1
+ let foo = strpart(foo, index)
+ let index = matchend(foo, pat)
+ endwhile
+ return result
+endfun
+
+" s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where
+" word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'. That is, the first
+" '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this
+" indicates that all other instances of '\1' in target are to be replaced
+" by '\3'. The hard part is dealing with nesting...
+" Note that ":" is an illegal character for source and target,
+" unless it is preceded by "\".
+fun! s:Resolve(source, target, output)
+ let word = a:target
+ let i = matchend(word, s:notslash . '\\\d') - 1
+ let table = "----------"
+ while i != -2 " There are back references to be replaced.
+ let d = word[i]
+ let backref = s:Ref(a:source, d)
+ " The idea is to replace '\d' with backref. Before we do this,
+ " replace any \(\) groups in backref with :1, :2, ... if they
+ " correspond to the first, second, ... group already inserted
+ " into backref. Later, replace :1 with \1 and so on. The group
+ " number w+b within backref corresponds to the group number
+ " s within a:source.
+ " w = number of '\(' in word before the current one
+ let w = s:Count(
+ \ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1')
+ let b = 1 " number of the current '\(' in backref
+ let s = d " number of the current '\(' in a:source
+ while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1')
+ \ && s < 10
+ if table[s] == "-"
+ if w + b < 10
+ " let table[s] = w + b
+ let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1)
+ endif
+ let b = b + 1
+ let s = s + 1
+ else
+ execute s:Ref(backref, b, "start", "len")
+ let ref = strpart(backref, start, len)
+ let backref = strpart(backref, 0, start) . ":". table[s]
+ \ . strpart(backref, start+len)
+ let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1')
+ endif
+ endwhile
+ let word = strpart(word, 0, i-1) . backref . strpart(word, i+1)
+ let i = matchend(word, s:notslash . '\\\d') - 1
+ endwhile
+ let word = substitute(word, s:notslash . '\zs:', '\\', 'g')
+ if a:output == "table"
+ return table
+ elseif a:output == "word"
+ return word
+ else
+ return table . word
+ endif
+endfun
+
+" Assume a:comma = ",". Then the format for a:patterns and a:1 is
+" a:patterns = "<pat1>,<pat2>,..."
+" a:1 = "<alt1>,<alt2>,..."
+" If <patn> is the first pattern that matches a:string then return <patn>
+" if no optional arguments are given; return <patn>,<altn> if a:1 is given.
+fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...)
+ let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma)
+ let i = matchend(tail, s:notslash . a:comma)
+ if a:0
+ let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma)
+ let j = matchend(alttail, s:notslash . a:comma)
+ endif
+ let current = strpart(tail, 0, i-1)
+ if a:branch == ""
+ let currpat = current
+ else
+ let currpat = substitute(current, a:branch, '\\|', 'g')
+ endif
+ while a:string !~ a:prefix . currpat . a:suffix
+ let tail = strpart(tail, i)
+ let i = matchend(tail, s:notslash . a:comma)
+ if i == -1
+ return -1
+ endif
+ let current = strpart(tail, 0, i-1)
+ if a:branch == ""
+ let currpat = current
+ else
+ let currpat = substitute(current, a:branch, '\\|', 'g')
+ endif
+ if a:0
+ let alttail = strpart(alttail, j)
+ let j = matchend(alttail, s:notslash . a:comma)
+ endif
+ endwhile
+ if a:0
+ let current = current . a:comma . strpart(alttail, 0, j-1)
+ endif
+ return current
+endfun
+
+" Call this function to turn on debugging information. Every time the main
+" script is run, buffer variables will be saved. These can be used directly
+" or viewed using the menu items below.
+if !exists(":MatchDebug")
+ command! -nargs=0 MatchDebug call s:Match_debug()
+endif
+
+fun! s:Match_debug()
+ let b:match_debug = 1 " Save debugging information.
+ " pat = all of b:match_words with backrefs parsed
+ amenu &Matchit.&pat :echo b:match_pat<CR>
+ " match = bit of text that is recognized as a match
+ amenu &Matchit.&match :echo b:match_match<CR>
+ " curcol = cursor column of the start of the matching text
+ amenu &Matchit.&curcol :echo b:match_col<CR>
+ " wholeBR = matching group, original version
+ amenu &Matchit.wh&oleBR :echo b:match_wholeBR<CR>
+ " iniBR = 'if' piece, original version
+ amenu &Matchit.ini&BR :echo b:match_iniBR<CR>
+ " ini = 'if' piece, with all backrefs resolved from match
+ amenu &Matchit.&ini :echo b:match_ini<CR>
+ " tail = 'else\|endif' piece, with all backrefs resolved from match
+ amenu &Matchit.&tail :echo b:match_tail<CR>
+ " fin = 'endif' piece, with all backrefs resolved from match
+ amenu &Matchit.&word :echo b:match_word<CR>
+ " '\'.d in ini refers to the same thing as '\'.table[d] in word.
+ amenu &Matchit.t&able :echo '0:' . b:match_table . ':9'<CR>
+endfun
+
+" Jump to the nearest unmatched "(" or "if" or "<tag>" if a:spflag == "bW"
+" or the nearest unmatched "</tag>" or "endif" or ")" if a:spflag == "W".
+" Return a "mark" for the original position, so that
+" let m = MultiMatch("bW", "n") ... execute m
+" will return to the original position. If there is a problem, do not
+" move the cursor and return "", unless a count is given, in which case
+" go up or down as many levels as possible and again return "".
+" TODO This relies on the same patterns as % matching. It might be a good
+" idea to give it its own matching patterns.
+fun! s:MultiMatch(spflag, mode)
+ if !exists("b:match_words") || b:match_words == ""
+ return ""
+ end
+ let restore_options = (&ic ? "" : "no") . "ignorecase"
+ if exists("b:match_ignorecase")
+ let &ignorecase = b:match_ignorecase
+ endif
+ let startline = line(".")
+ let startcol = col(".")
+
+ " First step: if not already done, set the script variables
+ " s:do_BR flag for whether there are backrefs
+ " s:pat parsed version of b:match_words
+ " 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\>'
+ " Allow b:match_words = "GetVimMatchWords()" .
+ if b:match_words =~ ":"
+ let match_words = b:match_words
+ else
+ execute "let match_words =" b:match_words
+ endif
+ if (match_words != s:last_words) || (&mps != s:last_mps) ||
+ \ exists("b:match_debug")
+ let s:last_words = match_words
+ let s:last_mps = &mps
+ if match_words !~ s:notslash . '\\\d'
+ let s:do_BR = 0
+ let s:pat = match_words
+ else
+ let s:do_BR = 1
+ let s:pat = s:ParseWords(match_words)
+ endif
+ let s:all = '\%(' . substitute(s:pat . (strlen(s:pat)?",":"") . default,
+ \ '[,:]\+','\\|','g') . '\)'
+ if exists("b:match_debug")
+ let b:match_pat = s:pat
+ endif
+ endif
+
+ " Second step: figure out the patterns for searchpair()
+ " and save the screen, cursor position, and 'ignorecase'.
+ " - TODO: A lot of this is copied from s:Match_wrapper().
+ " - maybe even more functionality should be split off
+ " - into separate functions!
+ let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default
+ let open = substitute(s:pat . cdefault, ':[^,]*,', '\\),\\(', 'g')
+ let open = '\(' . substitute(open, ':[^,]*$', '\\)', '')
+ let close = substitute(s:pat . cdefault, ',[^,]*:', '\\),\\(', 'g')
+ let close = substitute(close, '[^,]*:', '\\(', '') . '\)'
+ if exists("b:match_skip")
+ let skip = b:match_skip
+ elseif exists("b:match_comment") " backwards compatibility and testing!
+ let skip = "r:" . b:match_comment
+ else
+ let skip = 's:comment\|string'
+ endif
+ let skip = s:ParseSkip(skip)
+ " let restore_cursor = line(".") . "G" . virtcol(".") . "|"
+ " normal! H
+ " let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
+ let restore_cursor = virtcol(".") . "|"
+ normal! g0
+ let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor
+ normal! H
+ let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
+ execute restore_cursor
+
+ " Third step: call searchpair().
+ " Replace '\('--but not '\\('--with '\%(' and ',' with '\|'.
+ let openpat = substitute(open, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
+ let openpat = substitute(openpat, ',', '\\|', 'g')
+ let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
+ let closepat = substitute(closepat, ',', '\\|', 'g')
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+ let skip = '0'
+ else
+ execute "if " . skip . "| let skip = '0' | endif"
+ endif
+ mark '
+ let level = v:count1
+ while level
+ if searchpair(openpat, '', closepat, a:spflag, skip) < 1
+ call s:CleanUp(restore_options, a:mode, startline, startcol)
+ return ""
+ endif
+ let level = level - 1
+ endwhile
+
+ " Restore options and return a string to restore the original position.
+ call s:CleanUp(restore_options, a:mode, startline, startcol)
+ return restore_cursor
+endfun
+
+" Search backwards for "if" or "while" or "<tag>" or ...
+" and return "endif" or "endwhile" or "</tag>" or ... .
+" For now, this uses b:match_words and the same script variables
+" as s:Match_wrapper() . Later, it may get its own patterns,
+" either from a buffer variable or passed as arguments.
+" fun! s:Autocomplete()
+" echo "autocomplete not yet implemented :-("
+" if !exists("b:match_words") || b:match_words == ""
+" return ""
+" end
+" let startpos = s:MultiMatch("bW")
+"
+" if startpos == ""
+" return ""
+" endif
+" " - TODO: figure out whether 'if' or '<tag>' matched, and construct
+" " - the appropriate closing.
+" let matchline = getline(".")
+" let curcol = col(".") - 1
+" " - TODO: Change the s:all argument if there is a new set of match pats.
+" let regexp = s:Wholematch(matchline, s:all, curcol)
+" let suf = strlen(matchline) - matchend(matchline, regexp)
+" let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(')
+" let suffix = (suf ? '\).\{' . suf . '}$' : '\)$')
+" " Reconstruct the version with unresolved backrefs.
+" let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g')
+" let patBR = substitute(patBR, ':\{2,}', ':', "g")
+" " Now, set group and groupBR to the matching group: 'if:endif' or
+" " 'while:endwhile' or whatever.
+" let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR)
+" let i = matchend(group, s:notslash . ",")
+" let groupBR = strpart(group, i)
+" let group = strpart(group, 0, i-1)
+" " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
+" if s:do_BR
+" let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
+" endif
+" " let g:group = group
+"
+" " - TODO: Construct the closing from group.
+" let fake = "end" . expand("<cword>")
+" execute startpos
+" return fake
+" endfun
+
+" Close all open structures. "Get the heck out of here!"
+" fun! s:Gthhoh()
+" let close = s:Autocomplete()
+" while strlen(close)
+" put=close
+" let close = s:Autocomplete()
+" endwhile
+" endfun
+
+" Parse special strings as typical skip arguments for searchpair():
+" s:foo becomes (current syntax item) =~ foo
+" S:foo becomes (current syntax item) !~ foo
+" r:foo becomes (line before cursor) =~ foo
+" R:foo becomes (line before cursor) !~ foo
+fun! s:ParseSkip(str)
+ let skip = a:str
+ if skip[1] == ":"
+ if skip[0] == "s"
+ let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" .
+ \ strpart(skip,2) . "'"
+ elseif skip[0] == "S"
+ let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" .
+ \ strpart(skip,2) . "'"
+ elseif skip[0] == "r"
+ let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
+ elseif skip[0] == "R"
+ let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
+ endif
+ endif
+ return skip
+endfun
+
+let &cpo = s:save_cpo
+
+" vim:sts=2:sw=2:
diff --git a/runtime/macros/maze.info b/runtime/macros/maze.info
new file mode 100644
index 000000000..2ad27db5a
--- /dev/null
+++ b/runtime/macros/maze.info
Binary files differ
diff --git a/runtime/macros/maze/Makefile b/runtime/macros/maze/Makefile
new file mode 100644
index 000000000..c34e115d9
--- /dev/null
+++ b/runtime/macros/maze/Makefile
@@ -0,0 +1,7 @@
+# It's simple...
+
+maze: mazeansi.c
+ cc -o maze mazeansi.c
+
+mazeclean: mazeclean.c
+ cc -o mazeclean mazeclean.c
diff --git a/runtime/macros/maze/README.txt b/runtime/macros/maze/README.txt
new file mode 100644
index 000000000..be8e8ef20
--- /dev/null
+++ b/runtime/macros/maze/README.txt
@@ -0,0 +1,49 @@
+To run the maze macros with Vim:
+
+ vim -u maze_mac maze_5.78
+ press "g"
+
+The "-u maze.mac" loads the maze macros and skips loading your .vimrc, which
+may contain settings and mappings that get in the way.
+
+
+The original README:
+
+To prove that you can do anything in vi, I wrote a couple of macros that
+allows vi to solve mazes. It will solve any maze produced by maze.c
+that was posted to the net recently.
+
+Just follow this recipe and SEE FOR YOURSELF.
+ 1. run uudecode on the file "maze.vi.macros.uu" to
+ produce the file "maze.vi.macros"
+ (If you can't wait to see the action, jump to step 4)
+ 2. compile maze.c with "cc -o maze maze.c"
+ 3. run maze > maze.out and input a small number (for example 10 if
+ you are on a fast machine, 3-5 if slow) which
+ is the size of the maze to produce
+ 4. edit the maze (vi maze.out)
+ 5. include the macros with the vi command:
+ :so maze.vi.macros
+ 6. type the letter "g" (for "go") and watch vi solve the maze
+ 7. when vi solves the maze, you will see why it lies
+ 8. now look at maze.vi.macros and all will be revealed
+
+Tested on a sparc, a sun and a pyramid (although maze.c will not compile
+on the pyramid).
+
+Anyone who can't get the maze.c file to compile, get a new compiler,
+try maze.ansi.c which was also posted to the net.
+If you can get it to compile but the maze comes out looking like a fence
+and not a maze and you are using SysV or DOS replace the "27" on the
+last line of maze.c by "11"
+Thanks to John Tromp (tromp@piring.cwi.nl) for maze.c.
+Thanks to antonyc@nntp-server.caltech.edu (Bill T. Cat) for maze.ansi.c.
+
+Any donations should be in unmarked small denomination bills :^)=.
+
+ ACSnet: gregm@otc.otca.oz.au
+Greg McFarlane UUCP: {uunet,mcvax}!otc.otca.oz.au!gregm
+|||| OTC || Snail: OTC R&D GPO Box 7000, Sydney 2001, Australia
+ Phone: +61 2 287 3139 Fax: +61 2 287 3299
+
+
diff --git a/runtime/macros/maze/README.txt.info b/runtime/macros/maze/README.txt.info
new file mode 100644
index 000000000..263ddcd2c
--- /dev/null
+++ b/runtime/macros/maze/README.txt.info
Binary files differ
diff --git a/runtime/macros/maze/main.aap b/runtime/macros/maze/main.aap
new file mode 100644
index 000000000..ee9af21de
--- /dev/null
+++ b/runtime/macros/maze/main.aap
@@ -0,0 +1,4 @@
+# Aap recipe to build the maze program
+:program maze : mazeansi.c
+
+:program mazeclean : mazeclean.c
diff --git a/runtime/macros/maze/maze.c b/runtime/macros/maze/maze.c
new file mode 100644
index 000000000..b91745311
--- /dev/null
+++ b/runtime/macros/maze/maze.c
@@ -0,0 +1,7 @@
+char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C);
+-- E; J[ E] =T
+[E ]= E) printf("._"); for(;(A-=Z=!Z) || (printf("\n|"
+) , A = 39 ,C --
+) ; Z || printf (M ))M[Z]=Z[A-(E =A[J-Z])&&!C
+& A == T[ A]
+|6<<27<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}
diff --git a/runtime/macros/maze/maze_5.78 b/runtime/macros/maze/maze_5.78
new file mode 100644
index 000000000..dbe3d278b
--- /dev/null
+++ b/runtime/macros/maze/maze_5.78
@@ -0,0 +1,16 @@
+._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
+| ._| . . ._| | |_._._. . ._|_._._._._. ._|_. ._|_._. ._| . ._|_. | . ._._. |
+| ._|_| |_. | | | | ._._|_._|_._. . |_. | | | ._._| |_._._| | ._. ._| . . |_|
+|_._._._. | ._|_. ._._._. | | ._. |_._. . | ._._| |_. | ._._._. |_. | |_|_| |
+| | . |_._| . ._._._| ._._. ._._| | | |_| . | |_. . ._|_| ._._. |_._|_| . | |
+|_._|_._._._|_._._._|_|_._._._|_._|_._._._|_._._._|_._._._|_._._._._._._|_._|
+
+See Vim solve a maze!
+
+ type ":so maze_mac<RETURN>" to load the macros
+
+ type "g" to start
+
+to interrupt type "<CTRL-C>"
+ to quit type ":q!<RETURN>"
+
diff --git a/runtime/macros/maze/maze_5.78.info b/runtime/macros/maze/maze_5.78.info
new file mode 100644
index 000000000..fd65cef72
--- /dev/null
+++ b/runtime/macros/maze/maze_5.78.info
Binary files differ
diff --git a/runtime/macros/maze/maze_mac b/runtime/macros/maze/maze_mac
new file mode 100644
index 000000000..621aeec2b
--- /dev/null
+++ b/runtime/macros/maze/maze_mac
@@ -0,0 +1,271 @@
+" These macros 'solve' any maze produced by the a-maze-ing maze.c program.
+"
+" First, a bit of maze theory.
+" If you were put into a maze, a guaranteed method of finding your way
+" out of the maze is to put your left hand onto a wall and just keep walking,
+" never taking your hand off the wall. This technique is only guaranteed to
+" work if the maze does not have any 'islands', or if the 'exit' is on the
+" same island as your starting point. These conditions hold for the mazes
+" under consideration.
+"
+" Assuming that the maze is made up of horizontal and vertical walls spaced
+" one step apart and that you can move either north, south, east or west,
+" then you can automate this procedure by carrying out the following steps.
+"
+" 1. Put yourself somewhere in the maze near a wall.
+" 2. Check if you have a wall on your left. If so, go to step 4.
+" 3. There is no wall on your left, so turn on the spot to your left and step
+" forward by one step and repeat step 2.
+" 4. Check what is directly in front of you. If it is a wall, turn on the
+" spot to your right by 90 degrees and repeat step 4.
+" 5. There is no wall in front of you, so step forward one step and
+" go to step 2.
+"
+" In this way you will cover all the corridors of the maze (until you get back
+" to where you started from, if you do not stop).
+"
+" By examining a maze produced by the maze.c program you will see that
+" each square of the maze is one character high and two characters wide.
+" To go north or south, you move by a one character step, but to move east or
+" west you move by a two character step. Also note that in any position
+" there are four places where walls could be put - to the north, to the south,
+" to the east and to the west.
+" A wall exists to the north of you if the character to the north of
+" you is a _ (otherwise it is a space).
+" A wall exists to the east of you if the character to the east of you
+" is a | (otherwise it is a .).
+" A wall exists to the west of you if the character to the west of you
+" is a | (otherwise it is a .).
+" A wall exists to the south of you if the character where you are
+" is a _ (otherwise it is a space).
+"
+" Note the difference for direction south, where we must examine the character
+" where the cursor is rather than an adjacent cell.
+"
+" If you were implementing the above procedure is a normal computer language
+" you could use a loop with if statements and continue statements,
+" However, these constructs are not available in vi macros so I have used
+" a state machine with 8 states. Each state signifies the direction you
+" are going in and whether or not you have checked if there is a wall on
+" your left.
+"
+" The transition from state to state and the actions taken on each transition
+" are given in the state table below.
+" The names of the states are N1, N2, S1, S2, E1, E2, W1, W2, where each letter
+" stands for a direction of the compass, the number 1 indicates that the we
+" have not yet checked to see if there is a wall on our left and the number 2
+" indicates that we have checked and there is a wall on our left.
+"
+" For each state we must consider the existence or not of a wall in a
+" particular direction. This direction is given in the following table.
+"
+" NextChar table:
+" state direction vi commands
+" N1 W hF
+" N2 N kF
+" S1 E lF
+" S2 S F
+" E1 N kF
+" E2 E lF
+" W1 S F
+" W2 W hF
+"
+" where F is a macro which yanks the character under the cursor into
+" the NextChar register (n).
+"
+" State table:
+" In the 'vi commands' column is given the actions to carry out when in
+" this state and the NextChar is as given. The commands k, j, ll, hh move
+" the current position north, south, east and west respectively. The
+" command mm is used as a no-op command.
+" In the 'next state' column is given the new state of the machine after
+" the action is carried out.
+"
+" current state NextChar vi commands next state
+" N1 . hh W1
+" N1 | mm N2
+" N2 _ mm E1
+" N2 space k N1
+" S1 . ll E1
+" S1 | mm S2
+" S2 _ mm W1
+" S2 space j S1
+" E1 space k N1
+" E1 _ mm E2
+" E2 | mm S1
+" E2 . ll E1
+" W1 space j S1
+" W1 _ mm W2
+" W2 | mm N1
+" W2 . hh W1
+"
+"
+" Complaint about vi macros:
+" It seems that you cannot have more than one 'undo-able' vi command
+" in the one macro, so you have to make lots of little macros and
+" put them together.
+"
+" I'll explain what I mean by an example. Edit a file and
+" type ':map Q rXY'. This should map the Q key to 'replace the
+" character under the cursor with X and yank the line'.
+" But when I type Q, vi tells me 'Can't yank inside global/macro' and
+" goes into ex mode. However if I type ':map Q rXT' and ':map T Y',
+" everything is OK. I`m doing all this on a Sparcstation.
+" If anyone reading this has an answer to this problem, the author would
+" love to find out. Mail to gregm@otc.otca.oz.au.
+"
+" The macros:
+" The macro to run the maze solver is 'g'. This simply calls two other
+" macros: I, to initialise everything, and L, to loop forever running
+" through the state table.
+" Both of these macros are long sequences of calls to other macros. All
+" of these other macros are quite simple and so to understand how this
+" works, all you need to do is examine macros I and L and learn what they
+" do (a simple sequence of vi actions) and how L loops (by calling U, which
+" simply calls L again).
+"
+" Macro I sets up the state table and NextChar table at the end of the file.
+" Macro L then searches these tables to find out what actions to perform and
+" what state changes to make.
+"
+" The entries in the state table all begin with a key consisting of the
+" letter 's', the current state and the NextChar. After this is the
+" action to take in this state and after this is the next state to change to.
+"
+" The entries in the NextChar table begin with a key consisting of the
+" letter 'n' and the current state. After this is the action to take to
+" obtain NextChar - the character that must be examined to change state.
+"
+" One way to see what each part of the macros is doing is to type in the
+" body of the macros I and L manually (instead of typing 'g') and see
+" what happens at each step.
+"
+" Good luck.
+"
+" Registers used by the macros:
+" s (State) - holds the state the machine is in
+" c (Char) - holds the character under the current position
+" m (Macro) - holds a vi command string to be executed later
+" n (NextChar) - holds the character we must examine to change state
+" r (Second Macro) - holds a second vi command string to be executed later
+"
+set remap
+set nomagic
+set noterse
+set wrapscan
+"
+"================================================================
+" g - go runs the whole show
+" I - initialise
+" L - then loop forever
+map g IL
+"
+"================================================================
+" I - initialise everything before running the loop
+" G$?.^M - find the last . in the maze
+" ^ - replace it with an X (the goal)
+" GYKeDP - print the state table and next char table at the end of the file
+" 0S - initialise the state of the machine to E1
+" 2Gl - move to the top left cell of the maze
+map I G$?. ^GYKeDP0S2Gl
+"
+"================================================================
+" L - the loop which is executed forever
+" Q - save the current character in the Char register
+" A - replace the current character with an 'O'
+" ma - mark the current position with mark 'a'
+" GNB - on bottom line, create a command to search the NextChar table
+" for the current state
+" 0M0E@m^M - yank the command into the Macro register and execute it
+" wX - we have now found the entry in the table, now yank the
+" following word into the Macro register
+" `a@m - go back to the current position and execute the macro, this will
+" yank the NextChar in register n
+" GT$B$R - on bottom line, create a command to search the state table
+" for the current state and NextChar
+" 0M0E@m^M - yank the command into the Macro register and execute it
+" 2WS - we have now found the entry in the table, now yank the
+" next state into the State macro
+" bX - and yank the action corresponding to this state table entry
+" into the Macro register
+" GVJ - on bottom line, create a command to restore the current character
+" 0H - and save the command into the second Macro register
+" `a@r - go back to the current position and exectute the macro to restore
+" the current character
+" @m - execute the action associated with this state
+" U - and repeat
+map L QAmaGNB0M0E@m wX`a@mGT$B$R0M0E@m 2WSbXGVJ0H`a@r@mU
+"
+"================================================================
+" U - no tail recursion allowed in vi macros so cheat and set U = L
+map U L
+"
+"================================================================
+" S - yank the next two characters into the State register
+map S "sy2l
+"
+"================================================================
+" Q - save the current character in the Char register
+map Q "cyl
+"
+"================================================================
+" A - replace the current character with an 'O'
+map A rO
+"
+"================================================================
+" N - replace this line with the string 'n'
+map N C/n
+"
+"================================================================
+" B - put the current state
+map B "sp
+"
+"================================================================
+" M - yank this line into the Macro register
+map M "my$
+"
+"================================================================
+" E - delete to the end of the line
+map E d$
+"
+"================================================================
+" X - yank this word into the Macro register
+map X "myt
+"
+"================================================================
+" T - replace this line with the string 's'
+map T C/s
+"
+"================================================================
+" R - put NextChar
+map R "np
+"
+"================================================================
+" V - add the letter 'r' (the replace vi command)
+map V ar
+"
+"================================================================
+" J - restore the current character
+map J "cp
+"
+"================================================================
+" H - yank this line into the second Macro register
+map H "ry$
+"
+"================================================================
+" F - yank NextChar (this macro is called from the Macro register)
+map F "nyl
+"
+"================================================================
+" ^ - replace the current character with an 'X'
+map ^ rX
+"
+"================================================================
+" YKeDP - create the state table, NextChar table and initial state
+" Note that you have to escape the bar character, since it is special to
+" the map command (it indicates a new line).
+map Y osE1 k N1 sE1_ mm E2 sE2| mm S1 sE2. ll E1
+map K osW1 j S1 sW1_ mm W2 sW2| mm N1 sW2. hh W1
+map e osN1. hh W1 sN1| mm N2 sN2 k N1 sN2_ mm E1
+map D osS1. ll E1 sS1| mm S2 sS2 j S1 sS2_ mm W1
+map P onE1 kF nE2 lF nW1 G$JF nW2 hF nN1 hF nN2 kF nS1 lF nS2 G$JF E1
diff --git a/runtime/macros/maze/mazeansi.c b/runtime/macros/maze/mazeansi.c
new file mode 100644
index 000000000..b8e5e796c
--- /dev/null
+++ b/runtime/macros/maze/mazeansi.c
@@ -0,0 +1,7 @@
+char*M,A,Z,E=40,J[80],T[3];main(C){for(M=J+E,*J=A=scanf("%d",&
+C) ;-- E;J [E ]=M
+[E ]= E) printf("._"); for(;(A-=Z=!Z) || (printf("\n|"
+) , A = 39 ,C --
+) ; Z || printf (T ))T[Z]=Z[A-(E =A[J-Z])&&!C
+& A == M[ A]
+|6<<27<rand()||!C&!Z?J[M[E]=M[A]]=E,J[M[A]=A-Z]=A,"_.":" |"];}
diff --git a/runtime/macros/maze/mazeclean.c b/runtime/macros/maze/mazeclean.c
new file mode 100644
index 000000000..04dcebd22
--- /dev/null
+++ b/runtime/macros/maze/mazeclean.c
@@ -0,0 +1,22 @@
+/*
+ * Cleaned-up version of the maze program.
+ * Doesn't look as nice, but should work with all C compilers.
+ * Sascha Wilde, October 2003
+ */
+#include <stdio.h>
+#include <stdlib.h>
+
+char *M, A, Z, E = 40, line[80], T[3];
+int
+main (C)
+{
+ for (M = line + E, *line = A = scanf ("%d", &C); --E; line[E] = M[E] = E)
+ printf ("._");
+ for (; (A -= Z = !Z) || (printf ("\n|"), A = 39, C--); Z || printf (T))
+ T[Z] = Z[A - (E = A[line - Z]) && !C
+ & A == M[A]
+ | RAND_MAX/3 < rand ()
+ || !C & !Z ? line[M[E] = M[A]] = E, line[M[A] = A - Z] =
+ A, "_." : " |"];
+ return 0;
+}
diff --git a/runtime/macros/maze/poster b/runtime/macros/maze/poster
new file mode 100644
index 000000000..9114f598d
--- /dev/null
+++ b/runtime/macros/maze/poster
@@ -0,0 +1,37 @@
+Article 2846 of alt.sources:
+Path: oce-rd1!hp4nl!mcsun!uunet!munnari.oz.au!metro!otc!gregm
+From: gregm@otc.otca.oz.au (Greg McFarlane)
+Newsgroups: alt.sources
+Subject: VI SOLVES MAZE (commented macros)
+Message-ID: <2289@otc.otca.oz>
+Date: 10 Feb 91 23:31:02 GMT
+Sender: news@otc.otca.oz
+Reply-To: gregm@otc.otca.oz.au (Greg McFarlane)
+Organization: OTC Development Unit, Australia
+Lines: 464
+
+Submitted-by: gregm@otc.otca.oz.au
+Archive-name: maze_solving_vi_macros
+
+A real working model. See it walk the maze in front of your very own eyes.
+
+To prove that you can do anything in vi, I wrote a couple of macros that
+allows vi to solve mazes. It will solve any maze produced by maze.c
+that was posted to the alt.sources last month. (Maze.c is also included
+in this posting as well as an example of its output.)
+
+The uncommented version of the macros was sent to alt.sources last month.
+However, so many people mailed me requesting the commented version of the
+macros that I decided to post it. I have made some modifications to the
+original macros to make them easier to follow and also after I learnt
+that you can escape the special meaning of '|' in macros by using '^V|'.
+
+Save this article and unshar it. Then read maze.README.
+
+After studying these macros, anyone who cannot write an emacs emulator
+in vi macros should just curl up and :q!.
+
+Coming soon to a newsgroup near you: "Vi macros solve Tower of Hanoi",
+and a repost of the original "Turing Machine implemented in Vi macros"
+
+Anyone who has a version of these macros for edlin or nroff, please post.
diff --git a/runtime/macros/maze/poster.info b/runtime/macros/maze/poster.info
new file mode 100644
index 000000000..9a478d6a6
--- /dev/null
+++ b/runtime/macros/maze/poster.info
Binary files differ
diff --git a/runtime/macros/shellmenu.vim b/runtime/macros/shellmenu.vim
new file mode 100644
index 000000000..6175d1d9a
--- /dev/null
+++ b/runtime/macros/shellmenu.vim
@@ -0,0 +1,94 @@
+" When you're writing shell scripts and you are in doubt which test to use,
+" which shell environment variables are defined, what the syntax of the case
+" statement is, and you need to invoke 'man sh'?
+"
+" Your problems are over now!
+"
+" Attached is a Vim script file for turning gvim into a shell script editor.
+" It may also be used as an example how to use menus in Vim.
+"
+" Written by: Lennart Schultz <les@dmi.min.dk>
+
+imenu Stmts.for for in do doneki kk0elli
+imenu Stmts.case case in ) ;; esacbki k0elli
+imenu Stmts.if if then fiki kk0elli
+imenu Stmts.if-else if then else fiki kki kk0elli
+imenu Stmts.elif elif then ki kk0elli
+imenu Stmts.while while do doneki kk0elli
+imenu Stmts.break break
+imenu Stmts.continue continue
+imenu Stmts.function () { }ki k0i
+imenu Stmts.return return
+imenu Stmts.return-true return 0
+imenu Stmts.return-false return 1
+imenu Stmts.exit exit
+imenu Stmts.shift shift
+imenu Stmts.trap trap
+imenu Test.existence [ -e ]hi
+imenu Test.existence - file [ -f ]hi
+imenu Test.existence - file (not empty) [ -s ]hi
+imenu Test.existence - directory [ -d ]hi
+imenu Test.existence - executable [ -x ]hi
+imenu Test.existence - readable [ -r ]hi
+imenu Test.existence - writable [ -w ]hi
+imenu Test.String is empty [ x = "x$" ]hhi
+imenu Test.String is not empty [ x != "x$" ]hhi
+imenu Test.Strings is equal [ "" = "" ]hhhhhhhi
+imenu Test.Strings is not equal [ "" != "" ]hhhhhhhhi
+imenu Test.Values is greater than [ -gt ]hhhhhhi
+imenu Test.Values is greater equal [ -ge ]hhhhhhi
+imenu Test.Values is equal [ -eq ]hhhhhhi
+imenu Test.Values is not equal [ -ne ]hhhhhhi
+imenu Test.Values is less than [ -lt ]hhhhhhi
+imenu Test.Values is less equal [ -le ]hhhhhhi
+imenu ParmSub.Substitute word if parm not set ${:-}hhi
+imenu ParmSub.Set parm to word if not set ${:=}hhi
+imenu ParmSub.Substitute word if parm set else nothing ${:+}hhi
+imenu ParmSub.If parm not set print word and exit ${:?}hhi
+imenu SpShVars.Number of positional parameters ${#}
+imenu SpShVars.All positional parameters (quoted spaces) ${*}
+imenu SpShVars.All positional parameters (unquoted spaces) ${@}
+imenu SpShVars.Flags set ${-}
+imenu SpShVars.Return code of last command ${?}
+imenu SpShVars.Process number of this shell ${$}
+imenu SpShVars.Process number of last background command ${!}
+imenu Environ.HOME ${HOME}
+imenu Environ.PATH ${PATH}
+imenu Environ.CDPATH ${CDPATH}
+imenu Environ.MAIL ${MAIL}
+imenu Environ.MAILCHECK ${MAILCHECK}
+imenu Environ.PS1 ${PS1}
+imenu Environ.PS2 ${PS2}
+imenu Environ.IFS ${IFS}
+imenu Environ.SHACCT ${SHACCT}
+imenu Environ.SHELL ${SHELL}
+imenu Environ.LC_CTYPE ${LC_CTYPE}
+imenu Environ.LC_MESSAGES ${LC_MESSAGES}
+imenu Builtins.cd cd
+imenu Builtins.echo echo
+imenu Builtins.eval eval
+imenu Builtins.exec exec
+imenu Builtins.export export
+imenu Builtins.getopts getopts
+imenu Builtins.hash hash
+imenu Builtins.newgrp newgrp
+imenu Builtins.pwd pwd
+imenu Builtins.read read
+imenu Builtins.readonly readonly
+imenu Builtins.return return
+imenu Builtins.times times
+imenu Builtins.type type
+imenu Builtins.umask umask
+imenu Builtins.wait wait
+imenu Set.set set
+imenu Set.unset unset
+imenu Set.mark modified or modified variables set -a
+imenu Set.exit when command returns non-zero exit code set -e
+imenu Set.Disable file name generation set -f
+imenu Set.remember function commands set -h
+imenu Set.All keyword arguments are placed in the environment set -k
+imenu Set.Read commands but do not execute them set -n
+imenu Set.Exit after reading and executing one command set -t
+imenu Set.Treat unset variables as an error when substituting set -u
+imenu Set.Print shell input lines as they are read set -v
+imenu Set.Print commands and their arguments as they are executed set -x
diff --git a/runtime/macros/swapmous.vim b/runtime/macros/swapmous.vim
new file mode 100644
index 000000000..8b85be050
--- /dev/null
+++ b/runtime/macros/swapmous.vim
@@ -0,0 +1,22 @@
+" These macros swap the left and right mouse buttons (for left handed)
+" Don't forget to do ":set mouse=a" or the mouse won't work at all
+noremap <LeftMouse> <RightMouse>
+noremap <2-LeftMouse> <2-RightMouse>
+noremap <3-LeftMouse> <3-RightMouse>
+noremap <4-LeftMouse> <4-RightMouse>
+noremap <LeftDrag> <RightDrag>
+noremap <LeftRelease> <RightRelease>
+noremap <RightMouse> <LeftMouse>
+noremap <2-RightMouse> <2-LeftMouse>
+noremap <3-RightMouse> <3-LeftMouse>
+noremap <4-RightMouse> <4-LeftMouse>
+noremap <RightDrag> <LeftDrag>
+noremap <RightRelease> <LeftRelease>
+noremap g<LeftMouse> <C-RightMouse>
+noremap g<RightMouse> <C-LeftMouse>
+noremap! <LeftMouse> <RightMouse>
+noremap! <LeftDrag> <RightDrag>
+noremap! <LeftRelease> <RightRelease>
+noremap! <RightMouse> <LeftMouse>
+noremap! <RightDrag> <LeftDrag>
+noremap! <RightRelease> <LeftRelease>
diff --git a/runtime/macros/urm.info b/runtime/macros/urm.info
new file mode 100644
index 000000000..65e82348e
--- /dev/null
+++ b/runtime/macros/urm.info
Binary files differ
diff --git a/runtime/macros/urm/README.txt b/runtime/macros/urm/README.txt
new file mode 100644
index 000000000..a1ecc658c
--- /dev/null
+++ b/runtime/macros/urm/README.txt
@@ -0,0 +1,47 @@
+This is another proof that Vim is perfectly compatible with Vi.
+The URM macro package was written by Rudolf Koenig ("Rudi")
+(rudolf@koeniglich.de) for hpux-vi in August 1991.
+
+Getting started:
+
+type
+in your shell: vim urm<RETURN>
+in vim: :so urm.vim<RETURN>
+in vim: * (to load the registers and boot the URM-machine :-)
+in vim: g (for 'go') and watch the fun. Per default, 3 and 4
+ are multiplied. Watch the Program counter, it is
+ visible as a komma moving around.
+
+This is a "standard URM" (Universal register machine) interpreter. The URM
+concept is used in theoretical computer science to aid in theorem proving.
+Here it proves that vim is a general problem solver (if you bring enough
+patience).
+
+The interpreter begins with register 1 (not 0), without macros and more-lines
+capability. A dot marks the end of a program. (Bug: there must be a space
+after the dot.)
+
+The registers are the first few lines, beginning with a '>' .
+The program is the first line after the registers.
+You should always initialize the registers required by the program.
+
+Output register: line 2
+Input registers: line 2 to ...
+
+Commands:
+a<n> increment register <n>
+s<n> decrement register <n>
+<x>;<y> execute command <x> and then <y>
+(<x>)<n> execute command <x> while register <n> is nonzero
+. ("dot blank") halt the machine.
+
+Examples:
+
+Add register 2 to register 3:
+ (a2;s3)3.
+Multiply register 2 with register 3:
+ (a4;a5;s2)2; ((a2;s4)4; s3; (a1;a4;s5)5; (a5;s1)1)3.
+
+There are more (complicated) examples in the file examples.
+Note, undo may take a while after a division.
+
diff --git a/runtime/macros/urm/README.txt.info b/runtime/macros/urm/README.txt.info
new file mode 100644
index 000000000..1337937c9
--- /dev/null
+++ b/runtime/macros/urm/README.txt.info
Binary files differ
diff --git a/runtime/macros/urm/examples b/runtime/macros/urm/examples
new file mode 100644
index 000000000..9907d4aef
--- /dev/null
+++ b/runtime/macros/urm/examples
@@ -0,0 +1,16 @@
+Note that enough temporary registers should be provided for each example.
+All should be initialised to 0.
+
+Initial register values for benchmarking: 0,8,3,0,...
+
+Performed on a Xenix 386/16:
+Operation [sec, kbyte tmp space]: program
+
+Asym. Diff.[ 7, 4]: (s2;s3)3.
+Abs. Diff. [90,81]: (a1;a4;s2)2; (a2;s1)1; (a1;a5;s3)3; (a3;s1)1; (s2;s3)3; (s5;s4)4; (a2;s5)5.
+Add [ 7, 4]: (a2;s3)3.
+Mult [227, 161]: (a4;a5;s2)2; ((a2;s4)4; s3; (a1;a4;s5)5; (a5;s1)1)3.
+Copy [ 48, 25]: (a1;a3;s2)2; (a2;s1)1.
+sign [ 30, 17]: (a3;s2)2; (a2;(s3)3)3.
+!sign[ 36, 28]: (a3;s2)2; (a2;(s3)3)3; a3; (s3;s2)2; (s3;a2)3.
+Div [630,1522]: (a9;s2)2; (a2;a10;s3)3; (a3;s2)2; (a2;(s3)3)3; a3; (s3;s2)2; (s3;a2)3; (a2)2;(a2;s9)9;(a3;s10)10; (a9;a10;s2)2; (a11;a12;s3)3; (a2;s12)12; (a3;s9)9; (s2;s3)3; (a3;s2)2; (a2;(s3)3)3; a3; (s3;s2)2; (s3;a2)3; (a1;s2)2; (a2;s10)10; (a3;s11)11; ((a12;a13;s3)3; (a3;s13)13; (s2;s3)3; (a3;s12)12; a14; (s1)1; (a9;a10;s2)2; (a11;a12;s3)3; (a2;s12)12; (a3;s9)9; (s2;s3)3; (a3;s2)2; (a2;(s3)3)3; a3; (s3;s2)2; (s3;a2)3; (a1;s2)2; (a2;s10)10; (a3;s11)11)1; (s2)2; (a2;s14)14.
diff --git a/runtime/macros/urm/urm b/runtime/macros/urm/urm
new file mode 100644
index 000000000..9cbefb70a
--- /dev/null
+++ b/runtime/macros/urm/urm
@@ -0,0 +1,22 @@
+>0
+>3
+>4
+>0
+>0
+>0
+(a4;a5;s2)2; ((a2;s4)4; s3; (a1;a4;s5)5; (a5;s1)1)3.
+_________
+O ; =xp ( =x%hp ) @l a @db s @dt . =x0xkdd:ready _end_
+o 0 1 2 3 4 5 6 7 8 9 0
+_________
+INIT main(k), l, b, c, t, u, q, d
+ "kT "lT "bT "cT "tT "uT "qT "dT
+=lF'wa/O fpaw"zdt hp@z0"xD@x@k
+=2ldwhp'wiGT'wp0P0"yD@ya =xlwP >0 =x%p I k/>0 ww"ydt 0D@y
+'wa/o fwF'wpi`ar`aF'wffp0"vD@v0"vDp03x@v'wa @c 0 0 0I f0w"wdt 0D@w
+`ahmaF'wa 'aa1 > @b 0p0f>w"vdt 0D@v
+'wa/o wfbF'wpi`ar`aF'wffp0"vD@v0"vDp03x@v'wa @u 9 0 0I f9w"wdt 0D@w
+`ahmaF'wa `alr0 > @q 0p0f>w"vdt 0D@v
+`ahy2l'wa `ax >1 @t 0p0/>1 ww"idt 0D@i
+=xwhpbldwhp'wpaG$ma0"yD@y@
+
diff --git a/runtime/macros/urm/urm.vim b/runtime/macros/urm/urm.vim
new file mode 100644
index 000000000..310818078
--- /dev/null
+++ b/runtime/macros/urm/urm.vim
@@ -0,0 +1,5 @@
+map * 1G/INIT j"iT@i1G/INIT dG
+map g 1G/^[(as;.] i >,mkkmw@k
+map T y$
+map F yl
+map = 'kf,
diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim
new file mode 100644
index 000000000..690c49485
--- /dev/null
+++ b/runtime/makemenu.vim
@@ -0,0 +1,468 @@
+" Script to define the syntax menu in synmenu.vim
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 May 22
+
+" This is used by "make menu" in the src directory.
+edit <sfile>:p:h/synmenu.vim
+
+/The Start Of The Syntax Menu/+1,/The End Of The Syntax Menu/-1d
+let s:lnum = line(".") - 1
+call append(s:lnum, "")
+let s:lnum = s:lnum + 1
+
+" Use the SynMenu command and function to define all menu entries
+command! -nargs=* SynMenu call <SID>Syn(<q-args>)
+
+let s:cur_menu_name = ""
+let s:cur_menu_nr = 0
+let s:cur_menu_item = 0
+let s:cur_menu_char = ""
+
+fun! <SID>Syn(arg)
+ " isolate menu name: until the first dot
+ let i = match(a:arg, '\.')
+ let menu_name = strpart(a:arg, 0, i)
+ let r = strpart(a:arg, i + 1, 999)
+ " isolate submenu name: until the colon
+ let i = match(r, ":")
+ let submenu_name = strpart(r, 0, i)
+ " after the colon is the syntax name
+ let syntax_name = strpart(r, i + 1, 999)
+
+ if s:cur_menu_name != menu_name
+ let s:cur_menu_name = menu_name
+ let s:cur_menu_nr = s:cur_menu_nr + 10
+ let s:cur_menu_item = 100
+ let s:cur_menu_char = submenu_name[0]
+ else
+ " When starting a new letter, insert a menu separator.
+ let c = submenu_name[0]
+ if c != s:cur_menu_char
+ exe 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . ".-" . c . '- <nul>'
+ let s:cur_menu_item = s:cur_menu_item + 10
+ let s:cur_menu_char = c
+ endif
+ endif
+ call append(s:lnum, 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . "." . submenu_name . ' :cal SetSyn("' . syntax_name . '")<CR>')
+ let s:cur_menu_item = s:cur_menu_item + 10
+ let s:lnum = s:lnum + 1
+endfun
+
+SynMenu AB.Aap:aap
+SynMenu AB.Abaqus:abaqus
+SynMenu AB.ABC\ music\ notation:abc
+SynMenu AB.ABEL:abel
+SynMenu AB.AceDB\ model:acedb
+SynMenu AB.Ada:ada
+SynMenu AB.AfLex:aflex
+SynMenu AB.Altera\ AHDL:ahdl
+SynMenu AB.Amiga\ DOS:amiga
+SynMenu AB.AMPL:ampl
+SynMenu AB.Ant\ build\ file:ant
+SynMenu AB.ANTLR:antlr
+SynMenu AB.Apache\ config:apache
+SynMenu AB.Apache-style\ config:apachestyle
+SynMenu AB.Applix\ ELF:elf
+SynMenu AB.Arc\ Macro\ Language:aml
+SynMenu AB.Arch\ inventory:arch
+SynMenu AB.ART:art
+SynMenu AB.ASP\ with\ VBScript:aspvbs
+SynMenu AB.ASP\ with\ Perl:aspperl
+SynMenu AB.Assembly.680x0:asm68k
+SynMenu AB.Assembly.Flat:fasm
+SynMenu AB.Assembly.GNU:asm
+SynMenu AB.Assembly.GNU\ H-8300:asmh8300
+SynMenu AB.Assembly.Intel\ IA-64:ia64
+SynMenu AB.Assembly.Microsoft:masm
+SynMenu AB.Assembly.Netwide:nasm
+SynMenu AB.Assembly.PIC:pic
+SynMenu AB.Assembly.Turbo:tasm
+SynMenu AB.Assembly.VAX\ Macro\ Assembly:vmasm
+SynMenu AB.Assembly.Z-80:z8a
+SynMenu AB.Assembly.xa\ 6502\ cross\ assember:a65
+SynMenu AB.ASN\.1:asn
+SynMenu AB.Atlas:atlas
+SynMenu AB.Automake:automake
+SynMenu AB.Avenue:ave
+SynMenu AB.Awk:awk
+SynMenu AB.AYacc:ayacc
+
+SynMenu AB.B:b
+SynMenu AB.Baan:baan
+SynMenu AB.BASIC:basic
+SynMenu AB.BC\ calculator:bc
+SynMenu AB.BDF\ font:bdf
+SynMenu AB.BibTeX:bib
+SynMenu AB.BIND.BIND\ config:named
+SynMenu AB.BIND.BIND\ zone:bindzone
+SynMenu AB.Blank:blank
+
+SynMenu C.C:c
+SynMenu C.C++:cpp
+SynMenu C.C#:cs
+SynMenu C.Calendar:calendar
+SynMenu C.CDL:cdl
+SynMenu C.Crontab:crontab
+SynMenu C.Cyn++:cynpp
+SynMenu C.Cynlib:cynlib
+SynMenu C.Cascading\ Style\ Sheets:css
+SynMenu C.Century\ Term:cterm
+SynMenu C.CH\ script:ch
+SynMenu C.ChangeLog:changelog
+SynMenu C.Cheetah\ template:cheetah
+SynMenu C.CHILL:chill
+SynMenu C.Clean:clean
+SynMenu C.Clever:cl
+SynMenu C.Clipper:clipper
+SynMenu C.Cold\ Fusion:cf
+SynMenu C.Config.Cfg\ Config\ file:cfg
+SynMenu C.Config.Generic\ Config\ file:conf
+SynMenu C.Config.Configure\.in:config
+SynMenu C.CRM114:crm
+SynMenu C.Ctrl-H:ctrlh
+SynMenu C.Cobol:cobol
+SynMenu C.CSP:csp
+SynMenu C.CUPL.CUPL:cupl
+SynMenu C.CUPL.Simulation:cuplsim
+SynMenu C.CVS.commit\ file:cvs
+SynMenu C.CVS.cvsrc:cvsrc
+
+SynMenu DE.D:d
+SynMenu DE.Debian.Debian\ ChangeLog:debchangelog
+SynMenu DE.Debian.Debian\ Control:debcontrol
+SynMenu DE.Desktop:desktop
+SynMenu DE.Diff:diff
+SynMenu DE.Digital\ Command\ Lang:dcl
+SynMenu DE.Dircolors:dircolors
+SynMenu DE.DNS/BIND\ zone:dns
+SynMenu DE.DocBook.auto-detect:docbk
+SynMenu DE.DocBook.SGML:docbksgml
+SynMenu DE.DocBook.XML:docbkxml
+SynMenu DE.Dot:dot
+SynMenu DE.Dracula:dracula
+SynMenu DE.DSSSL:dsl
+SynMenu DE.DTD:dtd
+SynMenu DE.DTML\ (Zope):dtml
+SynMenu DE.Dylan.Dylan:dylan
+SynMenu DE.Dylan.Dylan\ interface:dylanintr
+SynMenu DE.Dylan.Dylan\ lid:dylanlid
+
+SynMenu DE.EDIF:edif
+SynMenu DE.Eiffel:eiffel
+SynMenu DE.Elinks\ config:elinks
+SynMenu DE.Elm\ filter\ rules:elmfilt
+SynMenu DE.Embedix\ Component\ Description:ecd
+SynMenu DE.ERicsson\ LANGuage:erlang
+SynMenu DE.ESQL-C:esqlc
+SynMenu DE.Essbase\ script:csc
+SynMenu DE.Eterm\ config:eterm
+SynMenu DE.Exim\ conf:exim
+SynMenu DE.Expect:expect
+SynMenu DE.Exports:exports
+
+SynMenu FG.Fetchmail:fetchmail
+SynMenu FG.Focus\ Executable:focexec
+SynMenu FG.Focus\ Master:master
+SynMenu FG.FORM:form
+SynMenu FG.Forth:forth
+SynMenu FG.Fortran:fortran
+SynMenu FG.FoxPro:foxpro
+SynMenu FG.Fstab:fstab
+SynMenu FG.Fvwm.Fvwm\ configuration:fvwm1
+SynMenu FG.Fvwm.Fvwm2\ configuration:fvwm2
+SynMenu FG.Fvwm.Fvwm2\ configuration\ with\ M4:fvwm2m4
+
+SynMenu FG.GDB\ command\ file:gdb
+SynMenu FG.GDMO:gdmo
+SynMenu FG.Gedcom:gedcom
+SynMenu FG.Gkrellmrc:gkrellmrc
+SynMenu FG.GP:gp
+SynMenu FG.GPG:gpg
+SynMenu FG.Grub:grub
+SynMenu FG.GNU\ Server\ Pages:gsp
+SynMenu FG.GNUplot:gnuplot
+SynMenu FG.GrADS\ scripts:grads
+SynMenu FG.Groff:groff
+SynMenu FG.GTKrc:gtkrc
+
+SynMenu HIJK.Haskell.Haskell:haskell
+SynMenu HIJK.Haskell.Haskell-c2hs:chaskell
+SynMenu HIJK.Haskell.Haskell-literate:lhaskell
+SynMenu HIJK.Hercules:hercules
+SynMenu HIJK.Hex\ dump.XXD:xxd
+SynMenu HIJK.Hex\ dump.Intel\ MCS51:hex
+SynMenu HIJK.HTML.HTML:html
+SynMenu HIJK.HTML.HTML\ with\ M4:htmlm4
+SynMenu HIJK.HTML.Cheetah\ HTML\ template:htmlcheetah
+SynMenu HIJK.HTML.HTML/OS:htmlos
+SynMenu HIJK.HTML.XHTML:xhtml
+SynMenu HIJK.Hyper\ Builder:hb
+SynMenu HIJK.Icewm\ menu:icemenu
+SynMenu HIJK.Icon:icon
+SynMenu HIJK.IDL\Generic\ IDL:idl
+SynMenu HIJK.IDL\Microsoft\ IDL:msidl
+SynMenu HIJK.Indent\ profile:indent
+SynMenu HIJK.Inform:inform
+SynMenu HIJK.Informix\ 4GL:fgl
+SynMenu HIJK.Inittab:inittab
+SynMenu HIJK.Inno\ setup:iss
+SynMenu HIJK.InstallShield\ script:ishd
+SynMenu HIJK.Interactive\ Data\ Lang:idlang
+SynMenu HIJK.IPfilter:ipfilter
+SynMenu HIJK.JAL:jal
+SynMenu HIJK.JAM:jam
+SynMenu HIJK.Jargon:jargon
+SynMenu HIJK.Java.Java:java
+SynMenu HIJK.Java.JavaCC:javacc
+SynMenu HIJK.Java.Java\ Server\ Pages:jsp
+SynMenu HIJK.Java.Java\ Properties:jproperties
+SynMenu HIJK.JavaScript:javascript
+SynMenu HIJK.Jess:jess
+SynMenu HIJK.Jgraph:jgraph
+SynMenu HIJK.KDE\ script:kscript
+SynMenu HIJK.Kimwitu++:kwt
+SynMenu HIJK.KixTart:kix
+
+SynMenu L-Ma.Lace:lace
+SynMenu L-Ma.LamdaProlog:lprolog
+SynMenu L-Ma.Latte:latte
+SynMenu L-Ma.LDAP\ LDIF:ldif
+SynMenu L-Ma.Lex:lex
+SynMenu L-Ma.LFTP\ config:lftp
+SynMenu L-Ma.Libao:libao
+SynMenu L-Ma.LifeLines\ script:lifelines
+SynMenu L-Ma.Lilo:lilo
+SynMenu L-Ma.Lisp:lisp
+SynMenu L-Ma.Lite:lite
+SynMenu L-Ma.Locale\ Input:fdcc
+SynMenu L-Ma.Logtalk:logtalk
+SynMenu L-Ma.LOTOS:lotos
+SynMenu L-Ma.LotusScript:lscript
+SynMenu L-Ma.Lout:lout
+SynMenu L-Ma.LPC:lpc
+SynMenu L-Ma.Lua:lua
+SynMenu L-Ma.Lynx\ Style:lss
+SynMenu L-Ma.Lynx\ config:lynx
+SynMenu L-Ma.M4:m4
+SynMenu L-Ma.MaGic\ Point:mgp
+SynMenu L-Ma.Mail:mail
+SynMenu L-Ma.Mailcap:mailcap
+SynMenu L-Ma.Makefile:make
+SynMenu L-Ma.MakeIndex:ist
+SynMenu L-Ma.Man\ page:man
+SynMenu L-Ma.Maple\ V:maple
+SynMenu L-Ma.Mason:mason
+SynMenu L-Ma.Mathematica:mma
+SynMenu L-Ma.Matlab:matlab
+
+SynMenu Me-NO.MEL\ (for\ Maya):mel
+SynMenu Me-NO.Metafont:mf
+SynMenu Me-NO.MetaPost:mp
+SynMenu Me-NO.MMIX:mmix
+SynMenu Me-NO.Modconf:modconf
+SynMenu Me-NO.Model:model
+SynMenu Me-NO.Modsim\ III:modsim3
+SynMenu Me-NO.Modula\ 2:modula2
+SynMenu Me-NO.Modula\ 3:modula3
+SynMenu Me-NO.Monk:monk
+SynMenu Me-NO.Mplayer\ config:mplayerconf
+SynMenu Me-NO.MOO:moo
+SynMenu Me-NO.MS-DOS/Windows.4DOS\ \.bat\ file:btm
+SynMenu Me-NO.MS-DOS/Windows.\.bat\/\.cmd\ file:dosbatch
+SynMenu Me-NO.MS-DOS/Windows.\.ini\ file:dosini
+SynMenu Me-NO.MS-DOS/Windows.Module\ Definition:def
+SynMenu Me-NO.MS-DOS/Windows.Registry:registry
+SynMenu Me-NO.MS-DOS/Windows.Resource\ file:rc
+SynMenu Me-NO.Msql:msql
+SynMenu Me-NO.MUSHcode:mush
+SynMenu Me-NO.Muttrc:muttrc
+SynMenu Me-NO.Nastran\ input/DMAP:nastran
+SynMenu Me-NO.Natural:natural
+SynMenu Me-NO.Novell\ NCF\ batch:ncf
+SynMenu Me-NO.Not\ Quite\ C\ (LEGO):nqc
+SynMenu Me-NO.Nroff:nroff
+SynMenu Me-NO.NSIS\ script:nsis
+SynMenu Me-NO.Objective\ C:objc
+SynMenu Me-NO.Objective\ C++:objcpp
+SynMenu Me-NO.OCAML:ocaml
+SynMenu Me-NO.Occam:occam
+SynMenu Me-NO.Omnimark:omnimark
+SynMenu Me-NO.OpenROAD:openroad
+SynMenu Me-NO.Open\ Psion\ Lang:opl
+SynMenu Me-NO.Oracle\ config:ora
+
+SynMenu PQ.Palm\ resource\ compiler:pilrc
+SynMenu PQ.Packet\ filter\ conf:pf
+SynMenu PQ.PApp:papp
+SynMenu PQ.Pascal:pascal
+SynMenu PQ.PCCTS:pccts
+SynMenu PQ.PPWizard:ppwiz
+SynMenu PQ.Perl.Perl:perl
+SynMenu PQ.Perl.Perl\ POD:pod
+SynMenu PQ.Perl.Perl\ XS:xs
+SynMenu PQ.PHP.PHP\ 3-4:php
+SynMenu PQ.PHP.Phtml\ (PHP\ 2):phtml
+SynMenu PQ.Pike:pike
+SynMenu PQ.Pine\ RC:pine
+SynMenu PQ.Pinfo\ RC:pinfo
+SynMenu PQ.PL/M:plm
+SynMenu PQ.PL/SQL:plsql
+SynMenu PQ.PLP:plp
+SynMenu PQ.PO\ (GNU\ gettext):po
+SynMenu PQ.Postfix\ main\ config:pfmain
+SynMenu PQ.PostScript.PostScript:postscr
+SynMenu PQ.PostScript.PostScript\ Printer\ Description:ppd
+SynMenu PQ.Povray.Povray\ scene\ descr:pov
+SynMenu PQ.Povray.Povray\ configuration:povini
+SynMenu PQ.Printcap:pcap
+SynMenu PQ.Procmail:procmail
+SynMenu PQ.Product\ Spec\ File:psf
+SynMenu PQ.Progress:progress
+SynMenu PQ.Prolog:prolog
+SynMenu PQ.Purify\ log:purifylog
+SynMenu PQ.Pyrex:pyrex
+SynMenu PQ.Python:python
+SynMenu PQ.Quake:quake
+SynMenu PQ.Quickfix\ window:qf
+
+SynMenu R-Sg.R:r
+SynMenu R-Sg.Radiance:radiance
+SynMenu R-Sg.Ratpoison:ratpoison
+SynMenu R-Sg.RCS.RCS\ log\ output:rcslog
+SynMenu R-Sg.RCS.RCS\ file:rcs
+SynMenu R-Sg.Readline\ config:readline
+SynMenu R-Sg.Rebol:rebol
+SynMenu R-Sg.Remind:remind
+SynMenu R-Sg.Relax\ NG\ compact:rnc
+SynMenu R-Sg.Renderman.Renderman\ Shader\ Lang:sl
+SynMenu R-Sg.Renderman.Renderman\ Interface\ Bytestream:rib
+SynMenu R-Sg.Resolv\.conf:resolv
+SynMenu R-Sg.Rexx:rexx
+SynMenu R-Sg.Robots\.txt:robots
+SynMenu R-Sg.RockLinux\ package\ desc\.:desc
+SynMenu R-Sg.Rpcgen:rpcgen
+SynMenu R-Sg.RPL/2:rpl
+SynMenu R-Sg.ReStructuredText:rst
+SynMenu R-Sg.RTF:rtf
+SynMenu R-Sg.Ruby:ruby
+SynMenu R-Sg.S-Lang:slang
+SynMenu R-Sg.Samba\ config:samba
+SynMenu R-Sg.SAS:sas
+SynMenu R-Sg.Sather:sather
+SynMenu R-Sg.Scheme:scheme
+SynMenu R-Sg.Scilab:scilab
+SynMenu R-Sg.Screen\ RC:screen
+SynMenu R-Sg.SDL:sdl
+SynMenu R-Sg.Sed:sed
+SynMenu R-Sg.Sendmail\.cf:sm
+SynMenu R-Sg.Send-pr:sendpr
+SynMenu R-Sg.SGML.SGML\ catalog:catalog
+SynMenu R-Sg.SGML.SGML\ DTD:sgml
+SynMenu R-Sg.SGML.SGML\ Declaration:sgmldecl
+SynMenu R-Sg.SGML.SGML-linuxdoc:sgmllnx
+
+SynMenu Sh-S.Shell\ script.sh\ and\ ksh:sh
+SynMenu Sh-S.Shell\ script.csh:csh
+SynMenu Sh-S.Shell\ script.tcsh:tcsh
+SynMenu Sh-S.Shell\ script.zsh:zsh
+SynMenu Sh-S.SiCAD:sicad
+SynMenu Sh-S.Simula:simula
+SynMenu Sh-S.Sinda.Sinda\ compare:sindacmp
+SynMenu Sh-S.Sinda.Sinda\ input:sinda
+SynMenu Sh-S.Sinda.Sinda\ output:sindaout
+SynMenu Sh-S.SKILL.SKILL:skill
+SynMenu Sh-S.SKILL.SKILL\ for\ Diva:diva
+SynMenu Sh-S.Slice:slice
+SynMenu Sh-S.SLRN.Slrn\ rc:slrnrc
+SynMenu Sh-S.SLRN.Slrn\ score:slrnsc
+SynMenu Sh-S.SmallTalk:st
+SynMenu Sh-S.Smarty\ Templates:smarty
+SynMenu Sh-S.SMIL:smil
+SynMenu Sh-S.SMITH:smith
+SynMenu Sh-S.SNMP\ MIB:mib
+SynMenu Sh-S.SNNS.SNNS\ network:snnsnet
+SynMenu Sh-S.SNNS.SNNS\ pattern:snnspat
+SynMenu Sh-S.SNNS.SNNS\ result:snnsres
+SynMenu Sh-S.Snobol4:snobol4
+SynMenu Sh-S.Snort\ Configuration:hog
+SynMenu Sh-S.SPEC\ (Linux\ RPM):spec
+SynMenu Sh-S.Specman:specman
+SynMenu Sh-S.Spice:spice
+SynMenu Sh-S.Spyce:spyce
+SynMenu Sh-S.Speedup:spup
+SynMenu Sh-S.Splint:splint
+SynMenu Sh-S.Squid\ config:squid
+SynMenu Sh-S.SQL.MySQL:mysql
+SynMenu Sh-S.SQL.SQL:sql
+SynMenu Sh-S.SQL.SQL\ Forms:sqlforms
+SynMenu Sh-S.SQL.SQLJ:sqlj
+SynMenu Sh-S.SQR:sqr
+SynMenu Sh-S.Ssh.ssh_config:sshconfig
+SynMenu Sh-S.Ssh.sshd_config:sshdconfig
+SynMenu Sh-S.Standard\ ML:sml
+SynMenu Sh-S.Stored\ Procedures:stp
+SynMenu Sh-S.Strace:strace
+SynMenu Sh-S.Subversion\ commit:svn
+
+SynMenu TUV.TADS:tads
+SynMenu TUV.Tags:tags
+SynMenu TUV.TAK.TAK\ compare:takcmp
+SynMenu TUV.TAK.TAK\ input:tak
+SynMenu TUV.TAK.TAK\ output:takout
+SynMenu TUV.Tcl/Tk:tcl
+SynMenu TUV.TealInfo:tli
+SynMenu TUV.Telix\ Salt:tsalt
+SynMenu TUV.Termcap/Printcap:ptcap
+SynMenu TUV.Terminfo:terminfo
+SynMenu TUV.TeX.TeX:tex
+SynMenu TUV.TeX.TeX\ configuration:texmf
+SynMenu TUV.TeX.Texinfo:texinfo
+SynMenu TUV.TF\ mud\ client:tf
+SynMenu TUV.Tidy\ configuration:tidy
+SynMenu TUV.Tilde:tilde
+SynMenu TUV.Trasys\ input:trasys
+SynMenu TUV.TSS.Command\ Line:tsscl
+SynMenu TUV.TSS.Geometry:tssgm
+SynMenu TUV.TSS.Optics:tssop
+SynMenu TUV.UIT/UIL:uil
+SynMenu TUV.UnrealScript:uc
+SynMenu TUV.Valgrind:valgrind
+SynMenu TUV.Verilog\ HDL:verilog
+SynMenu TUV.Vgrindefs:vgrindefs
+SynMenu TUV.VHDL:vhdl
+SynMenu TUV.Vim.Vim\ help\ file:help
+SynMenu TUV.Vim.Vim\ script:vim
+SynMenu TUV.Vim.Viminfo\ file:viminfo
+SynMenu TUV.Virata\ config:virata
+SynMenu TUV.Visual\ Basic:vb
+SynMenu TUV.VRML:vrml
+SynMenu TUV.VSE\ JCL:vsejcl
+
+SynMenu WXYZ.WEB.CWEB:cweb
+SynMenu WXYZ.WEB.WEB:web
+SynMenu WXYZ.WEB.WEB\ Changes:change
+SynMenu WXYZ.Webmacro:webmacro
+SynMenu WXYZ.Website\ MetaLanguage:wml
+SynMenu WXYZ.wDiff:wdiff
+SynMenu WXYZ.Wget\ config:wget
+SynMenu WXYZ.Whitespace\ (add):whitespace
+SynMenu WXYZ.WildPackets\ EtherPeek\ Decoder:dcd
+SynMenu WXYZ.WinBatch/Webbatch:winbatch
+SynMenu WXYZ.Windows\ Scripting\ Host:wsh
+SynMenu WXYZ.WvDial:wvdial
+SynMenu WXYZ.X\ Keyboard\ Extension:xkb
+SynMenu WXYZ.X\ Pixmap:xpm
+SynMenu WXYZ.X\ Pixmap\ (2):xpm2
+SynMenu WXYZ.X\ resources:xdefaults
+SynMenu WXYZ.Xmodmap:xmodmap
+SynMenu WXYZ.Xmath:xmath
+SynMenu WXYZ.XML:xml
+SynMenu WXYZ.XML\ Schema\ (XSD):xsd
+SynMenu WXYZ.Xslt:xslt
+SynMenu WXYZ.XFree86\ Config:xf86conf
+SynMenu WXYZ.YAML:yaml
+SynMenu WXYZ.Yacc:yacc
+
+call append(s:lnum, "")
+
+wq
diff --git a/runtime/menu.vim b/runtime/menu.vim
new file mode 100644
index 000000000..db5dc9259
--- /dev/null
+++ b/runtime/menu.vim
@@ -0,0 +1,974 @@
+" Vim support file to define the default menus
+" You can also use this as a start for your own set of menus.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 May 26
+
+" 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.
+
+" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
+" <CR> would not be recognized. See ":help 'cpoptions'".
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Avoid installing the menus twice
+if !exists("did_install_default_menus")
+let did_install_default_menus = 1
+
+
+if exists("v:lang") || &langmenu != ""
+ " Try to find a menu translation file for the current language.
+ if &langmenu != ""
+ if &langmenu =~ "none"
+ let s:lang = ""
+ else
+ let s:lang = &langmenu
+ endif
+ else
+ let s:lang = v:lang
+ endif
+ " A language name must be at least two characters, don't accept "C"
+ if strlen(s:lang) > 1
+ " When the language does not include the charset add 'encoding'
+ if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
+ let s:lang = s:lang . '.' . &enc
+ endif
+
+ " We always use a lowercase name.
+ " Change "iso-8859" to "iso_8859" and "iso8859" to "iso_8859", some
+ " systems appear to use this.
+ " Change spaces to underscores.
+ let s:lang = substitute(tolower(s:lang), '\.iso-', ".iso_", "")
+ let s:lang = substitute(s:lang, '\.iso8859', ".iso_8859", "")
+ let s:lang = substitute(s:lang, " ", "_", "g")
+ " Remove "@euro", otherwise "LC_ALL=de_DE@euro gvim" will show English menus
+ let s:lang = substitute(s:lang, "@euro", "", "")
+ " Change "iso_8859-1" and "iso_8859-15" to "latin1", we always use the
+ " same menu file for them.
+ let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
+ menutrans clear
+ exe "runtime! lang/menu_" . s:lang . ".vim"
+
+ if !exists("did_menu_trans")
+ " There is no exact match, try matching with a wildcard added
+ " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
+ let s:lang = substitute(s:lang, '\.[^.]*', "", "")
+ exe "runtime! lang/menu_" . s:lang . "*.vim"
+
+ if !exists("did_menu_trans") && strlen($LANG) > 1
+ " On windows locale names are complicated, try using $LANG, it might
+ " have been set by set_init_1().
+ exe "runtime! lang/menu_" . tolower($LANG) . "*.vim"
+ endif
+ endif
+ endif
+endif
+
+
+" Help menu
+an 9999.10 &Help.&Overview<Tab><F1> :help<CR>
+an 9999.20 &Help.&User\ Manual :help usr_toc<CR>
+an 9999.30 &Help.&How-to\ links :help how-to<CR>
+an <silent> 9999.40 &Help.&Find\.\.\. :call <SID>Helpfind()<CR>
+an 9999.45 &Help.-sep1- <Nop>
+an 9999.50 &Help.&Credits :help credits<CR>
+an 9999.60 &Help.Co&pying :help copying<CR>
+an 9999.70 &Help.&Sponsor/Register :help sponsor<CR>
+an 9999.70 &Help.O&rphans :help kcc<CR>
+an 9999.75 &Help.-sep2- <Nop>
+an 9999.80 &Help.&Version :version<CR>
+an 9999.90 &Help.&About :intro<CR>
+
+fun! s:Helpfind()
+ if !exists("g:menutrans_help_dialog")
+ let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
+ endif
+ let h = inputdialog(g:menutrans_help_dialog)
+ if h != ""
+ let v:errmsg = ""
+ silent! exe "help " . h
+ if v:errmsg != ""
+ echo v:errmsg
+ endif
+ endif
+endfun
+
+" File menu
+an 10.310 &File.&Open\.\.\.<Tab>:e :browse confirm e<CR>
+an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp :browse sp<CR>
+an 10.325 &File.&New<Tab>:enew :confirm enew<CR>
+an <silent> 10.330 &File.&Close<Tab>:close
+ \ :if winheight(2) < 0 <Bar>
+ \ confirm enew <Bar>
+ \ else <Bar>
+ \ confirm close <Bar>
+ \ endif<CR>
+an 10.335 &File.-SEP1- <Nop>
+an <silent> 10.340 &File.&Save<Tab>:w :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
+an 10.350 &File.Save\ &As\.\.\.<Tab>:sav :browse confirm saveas<CR>
+
+if has("diff")
+ an 10.400 &File.-SEP2- <Nop>
+ an 10.410 &File.Split\ &Diff\ with\.\.\. :browse vert diffsplit<CR>
+ an 10.420 &File.Split\ Patched\ &By\.\.\. :browse vert diffpatch<CR>
+endif
+
+if has("printer")
+ an 10.500 &File.-SEP3- <Nop>
+ an 10.510 &File.&Print :hardcopy<CR>
+ vunmenu &File.&Print
+ vnoremenu &File.&Print :hardcopy<CR>
+elseif has("unix")
+ an 10.500 &File.-SEP3- <Nop>
+ an 10.510 &File.&Print :w !lpr<CR>
+ vunmenu &File.&Print
+ vnoremenu &File.&Print :w !lpr<CR>
+endif
+an 10.600 &File.-SEP4- <Nop>
+an 10.610 &File.Sa&ve-Exit<Tab>:wqa :confirm wqa<CR>
+an 10.620 &File.E&xit<Tab>:qa :confirm qa<CR>
+
+" Pasting blockwise and linewise selections is not possible in Insert and
+" Visual mode without the +virtualedit feature. They are pasted as if they
+" were characterwise instead. Add to that some tricks to leave the cursor in
+" the right position, also for "gi".
+" Note: the same stuff appears in mswin.vim.
+if has("virtualedit")
+ nnoremap <silent> <script> <SID>Paste :call <SID>Paste()<CR>
+ func! <SID>Paste()
+ let ove = &ve
+ set ve=all
+ normal `^
+ if @+ != ''
+ normal "+gP
+ endif
+ let c = col(".")
+ normal i
+ if col(".") < c " compensate for i<ESC> moving the cursor left
+ normal l
+ endif
+ let &ve = ove
+ endfunc
+else
+ nnoremap <silent> <script> <SID>Paste "=@+.'xy'<CR>gPFx"_2x
+endif
+
+" Use maps for items that are present both in Edit, Popup and Toolbar menu.
+if has("virtualedit")
+ vnoremap <script> <SID>vPaste "-c<Esc><SID>Paste
+ inoremap <script> <SID>iPaste <Esc><SID>Pastegi
+else
+ vnoremap <script> <SID>vPaste "-c<Esc>gix<Esc><SID>Paste"_x
+ inoremap <script> <SID>iPaste x<Esc><SID>Paste"_s
+endif
+
+func! <SID>SelectAll()
+ exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
+endfunc
+
+
+" Edit menu
+an 20.310 &Edit.&Undo<Tab>u u
+an 20.320 &Edit.&Redo<Tab>^R <C-R>
+an 20.330 &Edit.Rep&eat<Tab>\. .
+
+an 20.335 &Edit.-SEP1- <Nop>
+vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x
+vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y
+cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
+nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
+cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
+vnoremenu <script> &Edit.&Paste<Tab>"+gP <SID>vPaste
+inoremenu <script> &Edit.&Paste<Tab>"+gP <SID>iPaste
+nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
+inoremenu &Edit.Put\ &Before<Tab>[p <C-O>[p
+nnoremenu 20.380 &Edit.Put\ &After<Tab>]p ]p
+inoremenu &Edit.Put\ &After<Tab>]p <C-O>]p
+if has("win32") || has("win16")
+ vnoremenu 20.390 &Edit.&Delete<Tab>x x
+endif
+noremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG :<C-U>call <SID>SelectAll()<CR>
+inoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-O>:call <SID>SelectAll()<CR>
+cnoremenu <script> <silent> 20.400 &Edit.&Select\ All<Tab>ggVG <C-U>call <SID>SelectAll()<CR>
+
+an 20.405 &Edit.-SEP2- <Nop>
+if has("win32") || has("win16") || has("gui_gtk") || has("gui_motif")
+ an 20.410 &Edit.&Find\.\.\. :promptfind<CR>
+ vunmenu &Edit.&Find\.\.\.
+ vnoremenu &Edit.&Find\.\.\. y:promptfind <C-R>"<CR>
+ an 20.420 &Edit.Find\ and\ Rep&lace\.\.\. :promptrepl<CR>
+ vunmenu &Edit.Find\ and\ Rep&lace\.\.\.
+ vnoremenu &Edit.Find\ and\ Rep&lace\.\.\. y:promptrepl <C-R>"<CR>
+else
+ an 20.410 &Edit.&Find<Tab>/ /
+ an 20.420 &Edit.Find\ and\ Rep&lace<Tab>:%s :%s/
+ vunmenu &Edit.Find\ and\ Rep&lace<Tab>:%s
+ vnoremenu &Edit.Find\ and\ Rep&lace<Tab>:s :s/
+endif
+
+an 20.425 &Edit.-SEP3- <Nop>
+an 20.430 &Edit.Settings\ &Window :options<CR>
+
+" Edit/Global Settings
+an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls! :set hls! hls?<CR>
+an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Ignore-case<Tab>:set\ ic! :set ic! ic?<CR>
+an 20.440.110 &Edit.&Global\ Settings.Toggle\ &Showmatch<Tab>:set\ sm! :set sm! sm?<CR>
+
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 1\ :set so=1<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 2\ :set so=2<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 3\ :set so=3<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 4\ :set so=4<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 5\ :set so=5<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 7\ :set so=7<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 10\ :set so=10<CR>
+an 20.440.120 &Edit.&Global\ Settings.&Context\ lines.\ 100\ :set so=100<CR>
+
+an 20.440.130.40 &Edit.&Global\ Settings.&Virtual\ Edit.Never :set ve=<CR>
+an 20.440.130.50 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ Selection :set ve=block<CR>
+an 20.440.130.60 &Edit.&Global\ Settings.&Virtual\ Edit.Insert\ mode :set ve=insert<CR>
+an 20.440.130.70 &Edit.&Global\ Settings.&Virtual\ Edit.Block\ and\ Insert :set ve=block,insert<CR>
+an 20.440.130.80 &Edit.&Global\ Settings.&Virtual\ Edit.Always :set ve=all<CR>
+an 20.440.140 &Edit.&Global\ Settings.Toggle\ Insert\ &Mode<Tab>:set\ im! :set im!<CR>
+an 20.440.145 &Edit.&Global\ Settings.Toggle\ Vi\ C&ompatible<Tab>:set\ cp! :set cp!<CR>
+an <silent> 20.440.150 &Edit.&Global\ Settings.Search\ &Path\.\.\. :call <SID>SearchP()<CR>
+an <silent> 20.440.160 &Edit.&Global\ Settings.Ta&g\ Files\.\.\. :call <SID>TagFiles()<CR>
+"
+" GUI options
+an 20.440.300 &Edit.&Global\ Settings.-SEP1- <Nop>
+an <silent> 20.440.310 &Edit.&Global\ Settings.Toggle\ &Toolbar :call <SID>ToggleGuiOption("T")<CR>
+an <silent> 20.440.320 &Edit.&Global\ Settings.Toggle\ &Bottom\ Scrollbar :call <SID>ToggleGuiOption("b")<CR>
+an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar :call <SID>ToggleGuiOption("l")<CR>
+an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
+
+fun! s:SearchP()
+ if !exists("g:menutrans_path_dialog")
+ let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
+ endif
+ let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
+ if n != ""
+ let &path = substitute(n, ' ', '\\ ', 'g')
+ endif
+endfun
+
+fun! s:TagFiles()
+ if !exists("g:menutrans_tags_dialog")
+ let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
+ endif
+ let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
+ if n != ""
+ let &tags = substitute(n, ' ', '\\ ', 'g')
+ endif
+endfun
+
+fun! s:ToggleGuiOption(option)
+ " If a:option is already set in guioptions, then we want to remove it
+ if match(&guioptions, "\\C" . a:option) > -1
+ exec "set go-=" . a:option
+ else
+ exec "set go+=" . a:option
+ endif
+endfun
+
+" Edit/File Settings
+
+" Boolean options
+an 20.440.100 &Edit.F&ile\ Settings.Toggle\ Line\ &Numbering<Tab>:set\ nu! :set nu! nu?<CR>
+an 20.440.110 &Edit.F&ile\ Settings.Toggle\ &List\ Mode<Tab>:set\ list! :set list! list?<CR>
+an 20.440.120 &Edit.F&ile\ Settings.Toggle\ Line\ &Wrap<Tab>:set\ wrap! :set wrap! wrap?<CR>
+an 20.440.130 &Edit.F&ile\ Settings.Toggle\ W&rap\ at\ word<Tab>:set\ lbr! :set lbr! lbr?<CR>
+an 20.440.160 &Edit.F&ile\ Settings.Toggle\ &expand-tab<Tab>:set\ et! :set et! et?<CR>
+an 20.440.170 &Edit.F&ile\ Settings.Toggle\ &auto-indent<Tab>:set\ ai! :set ai! ai?<CR>
+an 20.440.180 &Edit.F&ile\ Settings.Toggle\ &C-indenting<Tab>:set\ cin! :set cin! cin?<CR>
+
+" other options
+an 20.440.600 &Edit.F&ile\ Settings.-SEP2- <Nop>
+an 20.440.610.20 &Edit.F&ile\ Settings.&Shiftwidth.2 :set sw=2 sw?<CR>
+an 20.440.610.30 &Edit.F&ile\ Settings.&Shiftwidth.3 :set sw=3 sw?<CR>
+an 20.440.610.40 &Edit.F&ile\ Settings.&Shiftwidth.4 :set sw=4 sw?<CR>
+an 20.440.610.50 &Edit.F&ile\ Settings.&Shiftwidth.5 :set sw=5 sw?<CR>
+an 20.440.610.60 &Edit.F&ile\ Settings.&Shiftwidth.6 :set sw=6 sw?<CR>
+an 20.440.610.80 &Edit.F&ile\ Settings.&Shiftwidth.8 :set sw=8 sw?<CR>
+
+an 20.440.620.20 &Edit.F&ile\ Settings.Soft\ &Tabstop.2 :set sts=2 sts?<CR>
+an 20.440.620.30 &Edit.F&ile\ Settings.Soft\ &Tabstop.3 :set sts=3 sts?<CR>
+an 20.440.620.40 &Edit.F&ile\ Settings.Soft\ &Tabstop.4 :set sts=4 sts?<CR>
+an 20.440.620.50 &Edit.F&ile\ Settings.Soft\ &Tabstop.5 :set sts=5 sts?<CR>
+an 20.440.620.60 &Edit.F&ile\ Settings.Soft\ &Tabstop.6 :set sts=6 sts?<CR>
+an 20.440.620.80 &Edit.F&ile\ Settings.Soft\ &Tabstop.8 :set sts=8 sts?<CR>
+
+an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\. :call <SID>TextWidth()<CR>
+an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\. :call <SID>FileFormat()<CR>
+fun! s:TextWidth()
+ if !exists("g:menutrans_textwidth_dialog")
+ let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
+ 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*", "", "")
+ endif
+endfun
+
+fun! s:FileFormat()
+ if !exists("g:menutrans_fileformat_dialog")
+ let g:menutrans_fileformat_dialog = "Select format for writing the file"
+ endif
+ if !exists("g:menutrans_fileformat_choices")
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
+ endif
+ if &ff == "dos"
+ let def = 2
+ elseif &ff == "mac"
+ let def = 3
+ else
+ let def = 1
+ endif
+ let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
+ if n == 1
+ set ff=unix
+ elseif n == 2
+ set ff=dos
+ elseif n == 3
+ set ff=mac
+ endif
+endfun
+
+" Setup the Edit.Color Scheme submenu
+let s:n = globpath(&runtimepath, "colors/*.vim")
+let s:idx = 100
+while strlen(s:n) > 0
+ let s:i = stridx(s:n, "\n")
+ if s:i < 0
+ let s:name = s:n
+ let s:n = ""
+ else
+ let s:name = strpart(s:n, 0, s:i)
+ let s:n = strpart(s:n, s:i + 1, 19999)
+ endif
+ " Ignore case for VMS and windows
+ let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
+ exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " . s:name . "<CR>"
+ unlet s:name
+ unlet s:i
+ let s:idx = s:idx + 10
+endwhile
+unlet s:n
+unlet s:idx
+
+" Setup the Edit.Keymap submenu
+if has("keymap")
+ let s:n = globpath(&runtimepath, "keymap/*.vim")
+ if s:n != ""
+ let s:idx = 100
+ an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
+ while strlen(s:n) > 0
+ let s:i = stridx(s:n, "\n")
+ if s:i < 0
+ let s:name = s:n
+ let s:n = ""
+ else
+ let s:name = strpart(s:n, 0, s:i)
+ let s:n = strpart(s:n, s:i + 1, 19999)
+ endif
+ " Ignore case for VMS and windows
+ let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
+ exe "an 20.460." . s:idx . ' &Edit.&Keymap.' . s:name . " :set keymap=" . s:name . "<CR>"
+ unlet s:name
+ unlet s:i
+ let s:idx = s:idx + 10
+ endwhile
+ unlet s:idx
+ endif
+ unlet s:n
+endif
+if has("win32") || has("win16") || has("gui_gtk") || has("gui_photon")
+ an 20.470 &Edit.Select\ Fo&nt\.\.\. :set guifont=*<CR>
+endif
+
+" Programming menu
+if !exists("g:ctags_command")
+ if has("vms")
+ let g:ctags_command = "mc vim:ctags ."
+ else
+ let g:ctags_command = "ctags -R ."
+ endif
+endif
+
+an 40.300 &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
+vunmenu &Tools.&Jump\ to\ this\ tag<Tab>g^]
+vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]>
+an 40.310 &Tools.Jump\ &back<Tab>^T <C-T>
+an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR>
+
+" Tools.Fold Menu
+if has("folding")
+ an 40.330 &Tools.-SEP1- <Nop>
+ " open close folds
+ an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi
+ an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv
+ an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx zMzx
+ an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm zm
+ an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM zM
+ an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr zr
+ an 40.340.160 &Tools.&Folding.&Open\ all\ folds<Tab>zR zR
+ " fold method
+ an 40.340.200 &Tools.&Folding.-SEP1- <Nop>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.M&anual :set fdm=manual<CR>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.I&ndent :set fdm=indent<CR>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.E&xpression :set fdm=expr<CR>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.S&yntax :set fdm=syntax<CR>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.&Diff :set fdm=diff<CR>
+ an 40.340.210 &Tools.&Folding.Fold\ Met&hod.Ma&rker :set fdm=marker<CR>
+ " create and delete folds
+ vnoremenu 40.340.220 &Tools.&Folding.Create\ &Fold<Tab>zf zf
+ an 40.340.230 &Tools.&Folding.&Delete\ Fold<Tab>zd zd
+ an 40.340.240 &Tools.&Folding.Delete\ &All\ Folds<Tab>zD zD
+ " moving around in folds
+ an 40.340.300 &Tools.&Folding.-SEP2- <Nop>
+ an 40.340.310.10 &Tools.&Folding.Fold\ col&umn\ width.\ &0\ :set fdc=0<CR>
+ an 40.340.310.20 &Tools.&Folding.Fold\ col&umn\ width.\ &2\ :set fdc=2<CR>
+ an 40.340.310.30 &Tools.&Folding.Fold\ col&umn\ width.\ &3\ :set fdc=3<CR>
+ an 40.340.310.40 &Tools.&Folding.Fold\ col&umn\ width.\ &4\ :set fdc=4<CR>
+ an 40.340.310.50 &Tools.&Folding.Fold\ col&umn\ width.\ &5\ :set fdc=5<CR>
+ an 40.340.310.60 &Tools.&Folding.Fold\ col&umn\ width.\ &6\ :set fdc=6<CR>
+ an 40.340.310.70 &Tools.&Folding.Fold\ col&umn\ width.\ &7\ :set fdc=7<CR>
+ an 40.340.310.80 &Tools.&Folding.Fold\ col&umn\ width.\ &8\ :set fdc=8<CR>
+endif " has folding
+
+if has("diff")
+ an 40.350.100 &Tools.&Diff.&Update :diffupdate<CR>
+ an 40.350.110 &Tools.&Diff.&Get\ Block :diffget<CR>
+ vunmenu &Tools.&Diff.&Get\ Block
+ vnoremenu &Tools.&Diff.&Get\ Block :diffget<CR>
+ an 40.350.120 &Tools.&Diff.&Put\ Block :diffput<CR>
+ vunmenu &Tools.&Diff.&Put\ Block
+ vnoremenu &Tools.&Diff.&Put\ Block :diffput<CR>
+endif
+
+an 40.358 &Tools.-SEP2- <Nop>
+an 40.360 &Tools.&Make<Tab>:make :make<CR>
+an 40.370 &Tools.&List\ Errors<Tab>:cl :cl<CR>
+an 40.380 &Tools.L&ist\ Messages<Tab>:cl! :cl!<CR>
+an 40.390 &Tools.&Next\ Error<Tab>:cn :cn<CR>
+an 40.400 &Tools.&Previous\ Error<Tab>:cp :cp<CR>
+an 40.410 &Tools.&Older\ List<Tab>:cold :colder<CR>
+an 40.420 &Tools.N&ewer\ List<Tab>:cnew :cnewer<CR>
+an 40.430.50 &Tools.Error\ &Window.&Update<Tab>:cwin :cwin<CR>
+an 40.430.60 &Tools.Error\ &Window.&Open<Tab>:copen :copen<CR>
+an 40.430.70 &Tools.Error\ &Window.&Close<Tab>:cclose :cclose<CR>
+
+an 40.520 &Tools.-SEP3- <Nop>
+an <silent> 40.530 &Tools.&Convert\ to\ HEX<Tab>:%!xxd
+ \ :call <SID>XxdConv()<CR>
+an <silent> 40.540 &Tools.Conve&rt\ back<Tab>:%!xxd\ -r
+ \ :call <SID>XxdBack()<CR>
+
+" Use a function to do the conversion, so that it also works with 'insertmode'
+" set.
+func! s:XxdConv()
+ let mod = &mod
+ if has("vms")
+ %!mc vim:xxd
+ else
+ call s:XxdFind()
+ exe '%!"' . g:xxdprogram . '"'
+ endif
+ if getline(1) =~ "^0000000:" " only if it worked
+ set ft=xxd
+ endif
+ let &mod = mod
+endfun
+
+func! s:XxdBack()
+ let mod = &mod
+ if has("vms")
+ %!mc vim:xxd -r
+ else
+ call s:XxdFind()
+ exe '%!"' . g:xxdprogram . '" -r'
+ endif
+ set ft=
+ doautocmd filetypedetect BufReadPost
+ let &mod = mod
+endfun
+
+func! s:XxdFind()
+ if !exists("g:xxdprogram")
+ " On the PC xxd may not be in the path but in the install directory
+ if (has("win32") || has("dos32")) && !executable("xxd")
+ let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
+ else
+ let g:xxdprogram = "xxd"
+ endif
+ endif
+endfun
+
+" Setup the Tools.Compiler submenu
+let s:n = globpath(&runtimepath, "compiler/*.vim")
+let s:idx = 100
+while strlen(s:n) > 0
+ let s:i = stridx(s:n, "\n")
+ if s:i < 0
+ let s:name = s:n
+ let s:n = ""
+ else
+ let s:name = strpart(s:n, 0, s:i)
+ let s:n = strpart(s:n, s:i + 1, 19999)
+ endif
+ " Ignore case for VMS and windows
+ let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
+ exe "an 30.440." . s:idx . ' &Tools.&Set\ Compiler.' . s:name . " :compiler " . s:name . "<CR>"
+ unlet s:name
+ unlet s:i
+ let s:idx = s:idx + 10
+endwhile
+unlet s:n
+unlet s:idx
+
+if !exists("no_buffers_menu")
+
+" Buffer list menu -- Setup functions & actions
+
+" wait with building the menu until after loading 'session' files. Makes
+" startup faster.
+let s:bmenu_wait = 1
+
+if !exists("bmenu_priority")
+ let bmenu_priority = 60
+endif
+
+func! s:BMAdd()
+ if s:bmenu_wait == 0
+ " when adding too many buffers, redraw in short format
+ if s:bmenu_count == &menuitems && s:bmenu_short == 0
+ call s:BMShow()
+ else
+ call <SID>BMFilename(expand("<afile>"), expand("<abuf>"))
+ let s:bmenu_count = s:bmenu_count + 1
+ endif
+ endif
+endfunc
+
+func! s:BMRemove()
+ if s:bmenu_wait == 0
+ let name = expand("<afile>")
+ if isdirectory(name)
+ return
+ endif
+ let munge = <SID>BMMunge(name, expand("<abuf>"))
+
+ if s:bmenu_short == 0
+ exe 'silent! aun &Buffers.' . munge
+ else
+ exe 'silent! aun &Buffers.' . <SID>BMHash2(munge) . munge
+ endif
+ let s:bmenu_count = s:bmenu_count - 1
+ endif
+endfunc
+
+" Create the buffer menu (delete an existing one first).
+func! s:BMShow(...)
+ let s:bmenu_wait = 1
+ let s:bmenu_short = 1
+ let s:bmenu_count = 0
+ "
+ " get new priority, if exists
+ if a:0 == 1
+ let g:bmenu_priority = a:1
+ endif
+
+ " remove old menu, if exists; keep one entry to avoid a torn off menu to
+ " disappear.
+ silent! unmenu &Buffers
+ exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
+ silent! unmenu! &Buffers
+
+ " create new menu; set 'cpo' to include the <CR>
+ let cpo_save = &cpo
+ set cpo&vim
+ exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
+ exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
+ exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
+ exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
+ exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
+ exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
+ let &cpo = cpo_save
+ unmenu &Buffers.Dummy
+
+ " figure out how many buffers there are
+ let buf = 1
+ while buf <= bufnr('$')
+ if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
+ \ && !getbufvar(buf, "&bufsecret")
+ let s:bmenu_count = s:bmenu_count + 1
+ endif
+ let buf = buf + 1
+ endwhile
+ if s:bmenu_count <= &menuitems
+ let s:bmenu_short = 0
+ endif
+
+ " iterate through buffer list, adding each buffer to the menu:
+ let buf = 1
+ while buf <= bufnr('$')
+ if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf)
+ \ && !getbufvar(buf, "&bufsecret")
+ call <SID>BMFilename(bufname(buf), buf)
+ endif
+ let buf = buf + 1
+ endwhile
+ let s:bmenu_wait = 0
+ aug buffer_list
+ au!
+ au BufCreate,BufFilePost * call <SID>BMAdd()
+ au BufDelete,BufFilePre * call <SID>BMRemove()
+ aug END
+endfunc
+
+func! s:BMHash(name)
+ " Make name all upper case, so that chars are between 32 and 96
+ let nm = substitute(a:name, ".*", '\U\0', "")
+ if has("ebcdic")
+ " HACK: Replace all non alphabetics with 'Z'
+ " Just to make it work for now.
+ let nm = substitute(nm, "[^A-Z]", 'Z', "g")
+ let sp = char2nr('A') - 1
+ else
+ let sp = char2nr(' ')
+ endif
+ " convert first six chars into a number for sorting:
+ return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
+endfunc
+
+func! s:BMHash2(name)
+ let nm = substitute(a:name, ".", '\L\0', "")
+ " Not exactly right for EBCDIC...
+ if nm[0] < 'a' || nm[0] > 'z'
+ return '&others.'
+ elseif nm[0] <= 'd'
+ return '&abcd.'
+ elseif nm[0] <= 'h'
+ return '&efgh.'
+ elseif nm[0] <= 'l'
+ return '&ijkl.'
+ elseif nm[0] <= 'p'
+ return '&mnop.'
+ elseif nm[0] <= 't'
+ return '&qrst.'
+ else
+ return '&u-z.'
+ endif
+endfunc
+
+" insert a buffer name into the buffer menu:
+func! s:BMFilename(name, num)
+ if isdirectory(a:name)
+ return
+ endif
+ let munge = <SID>BMMunge(a:name, a:num)
+ let hash = <SID>BMHash(munge)
+ if s:bmenu_short == 0
+ let name = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
+ else
+ let name = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . <SID>BMHash2(munge) . munge
+ endif
+ " set 'cpo' to include the <CR>
+ let cpo_save = &cpo
+ set cpo&vim
+ exe name . ' :confirm b' . a:num . '<CR>'
+ let &cpo = cpo_save
+endfunc
+
+" Truncate a long path to fit it in a menu item.
+if !exists("g:bmenu_max_pathlen")
+ let g:bmenu_max_pathlen = 35
+endif
+func! s:BMTruncName(fname)
+ let name = a:fname
+ if g:bmenu_max_pathlen < 5
+ let name = ""
+ else
+ let len = strlen(name)
+ if len > g:bmenu_max_pathlen
+ let amountl = (g:bmenu_max_pathlen / 2) - 2
+ let amountr = g:bmenu_max_pathlen - amountl - 3
+ let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
+ let left = substitute(name, pattern, '\1', '')
+ let right = substitute(name, pattern, '\2', '')
+ if strlen(left) + strlen(right) < len
+ let name = left . '...' . right
+ endif
+ endif
+ endif
+ return name
+endfunc
+
+func! s:BMMunge(fname, bnum)
+ let name = a:fname
+ if name == ''
+ if !exists("g:menutrans_no_file")
+ let g:menutrans_no_file = "[No file]"
+ endif
+ let name = g:menutrans_no_file
+ else
+ let name = fnamemodify(name, ':p:~')
+ endif
+ " detach file name and separate it out:
+ let name2 = fnamemodify(name, ':t')
+ if a:bnum >= 0
+ let name2 = name2 . ' (' . a:bnum . ')'
+ endif
+ let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
+ let name = escape(name, "\\. \t|")
+ let name = substitute(name, "&", "&&", "g")
+ let name = substitute(name, "\n", "^@", "g")
+ return name
+endfunc
+
+" When just starting Vim, load the buffer menu later
+if has("vim_starting")
+ augroup LoadBufferMenu
+ au! VimEnter * if !exists("no_buffers_menu") | call <SID>BMShow() | endif
+ au VimEnter * au! LoadBufferMenu
+ augroup END
+else
+ call <SID>BMShow()
+endif
+
+endif " !exists("no_buffers_menu")
+
+" Window menu
+an 70.300 &Window.&New<Tab>^Wn <C-W>n
+an 70.310 &Window.S&plit<Tab>^Ws <C-W>s
+an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^>
+an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v
+if has("vertsplit")
+ an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR>
+ if !exists("*MenuExplOpen")
+ fun MenuExplOpen()
+ if @% == ""
+ 20vsp .
+ else
+ exe "20vsp " . expand("%:p:h")
+ endif
+ endfun
+ endif
+endif
+an 70.335 &Window.-SEP1- <Nop>
+an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR>
+an 70.345 &Window.Close\ &Other(s)<Tab>^Wo :confirm only<CR>
+an 70.350 &Window.-SEP2- <Nop>
+an 70.355 &Window.Move\ &To.&Top<Tab>^WK <C-W>K
+an 70.355 &Window.Move\ &To.&Bottom<Tab>^WJ <C-W>J
+an 70.355 &Window.Move\ &To.&Left\ side<Tab>^WH <C-W>H
+an 70.355 &Window.Move\ &To.&Right\ side<Tab>^WL <C-W>L
+an 70.360 &Window.Rotate\ &Up<Tab>^WR <C-W>R
+an 70.362 &Window.Rotate\ &Down<Tab>^Wr <C-W>r
+an 70.365 &Window.-SEP3- <Nop>
+an 70.370 &Window.&Equal\ Size<Tab>^W= <C-W>=
+an 70.380 &Window.&Max\ Height<Tab>^W_ <C-W>_
+an 70.390 &Window.M&in\ Height<Tab>^W1_ <C-W>1_
+an 70.400 &Window.Max\ &Width<Tab>^W\| <C-W>\|
+an 70.410 &Window.Min\ Widt&h<Tab>^W1\| <C-W>1\|
+
+" The popup menu
+an 1.10 PopUp.&Undo u
+an 1.15 PopUp.-SEP1- <Nop>
+vnoremenu 1.20 PopUp.Cu&t "+x
+vnoremenu 1.30 PopUp.&Copy "+y
+cnoremenu 1.30 PopUp.&Copy <C-Y>
+nnoremenu 1.40 PopUp.&Paste "+gP
+cnoremenu 1.40 PopUp.&Paste <C-R>+
+vnoremenu <script> 1.40 PopUp.&Paste <SID>vPaste
+inoremenu <script> 1.40 PopUp.&Paste <SID>iPaste
+vnoremenu 1.50 PopUp.&Delete x
+an 1.55 PopUp.-SEP2- <Nop>
+vnoremenu 1.60 PopUp.Select\ Blockwise <C-V>
+an 1.70 PopUp.Select\ &Word vaw
+an 1.80 PopUp.Select\ &Line V
+an 1.90 PopUp.Select\ &Block <C-V>
+noremenu <script> <silent> 1.100 PopUp.Select\ &All :<C-U>call <SID>SelectAll()<CR>
+inoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-O>:call <SID>SelectAll()<CR>
+cnoremenu <script> <silent> 1.100 PopUp.Select\ &All <C-U>call <SID>SelectAll()<CR>
+
+
+" The GUI toolbar (for MS-Windows and GTK)
+if has("toolbar")
+ an 1.10 ToolBar.Open :browse confirm e<CR>
+ an <silent> 1.20 ToolBar.Save :if expand("%") == ""<Bar>browse confirm w<Bar>else<Bar>confirm w<Bar>endif<CR>
+ an 1.30 ToolBar.SaveAll :browse confirm wa<CR>
+
+ if has("printer")
+ an 1.40 ToolBar.Print :hardcopy<CR>
+ vunmenu ToolBar.Print
+ vnoremenu ToolBar.Print :hardcopy<CR>
+ elseif has("unix")
+ an 1.40 ToolBar.Print :w !lpr<CR>
+ vunmenu ToolBar.Print
+ vnoremenu ToolBar.Print :w !lpr<CR>
+ endif
+
+ an 1.45 ToolBar.-sep1- <Nop>
+ an 1.50 ToolBar.Undo u
+ an 1.60 ToolBar.Redo <C-R>
+
+ an 1.65 ToolBar.-sep2- <Nop>
+ vnoremenu 1.70 ToolBar.Cut "+x
+ vnoremenu 1.80 ToolBar.Copy "+y
+ cnoremenu 1.80 ToolBar.Copy <C-Y>
+ nnoremenu 1.90 ToolBar.Paste "+gP
+ cnoremenu ToolBar.Paste <C-R>+
+ vnoremenu <script> ToolBar.Paste <SID>vPaste
+ inoremenu <script> ToolBar.Paste <SID>iPaste
+
+ if !has("gui_athena")
+ an 1.95 ToolBar.-sep3- <Nop>
+ an 1.100 ToolBar.Find :promptfind<CR>
+ vunmenu ToolBar.Find
+ vnoremenu ToolBar.Find y:promptfind <C-R>"<CR>
+ an 1.110 ToolBar.FindNext n
+ an 1.120 ToolBar.FindPrev N
+ an 1.130 ToolBar.Replace :promptrepl<CR>
+ vunmenu ToolBar.Replace
+ vnoremenu ToolBar.Replace y:promptrepl <C-R>"<CR>
+ endif
+
+if 0 " disabled; These are in the Windows menu
+ an 1.135 ToolBar.-sep4- <Nop>
+ an 1.140 ToolBar.New <C-W>n
+ an 1.150 ToolBar.WinSplit <C-W>s
+ an 1.160 ToolBar.WinMax :resize 200<CR>
+ an 1.170 ToolBar.WinMin :resize 1<CR>
+ an 1.180 ToolBar.WinVSplit <C-W>v
+ an 1.190 ToolBar.WinMaxWidth <C-W>500>
+ an 1.200 ToolBar.WinMinWidth <C-W>1\|
+ an 1.210 ToolBar.WinClose :close<CR>
+endif
+
+ an 1.215 ToolBar.-sep5- <Nop>
+ an <silent> 1.220 ToolBar.LoadSesn :call <SID>LoadVimSesn()<CR>
+ an <silent> 1.230 ToolBar.SaveSesn :call <SID>SaveVimSesn()<CR>
+ an 1.240 ToolBar.RunScript :browse so<CR>
+
+ an 1.245 ToolBar.-sep6- <Nop>
+ an 1.250 ToolBar.Make :make<CR>
+ an 1.270 ToolBar.RunCtags :exe "!" . g:ctags_command<CR>
+ an 1.280 ToolBar.TagJump g<C-]>
+
+ an 1.295 ToolBar.-sep7- <Nop>
+ an 1.300 ToolBar.Help :help<CR>
+ an <silent> 1.310 ToolBar.FindHelp :call <SID>Helpfind()<CR>
+
+" Only set the tooltips here if not done in a language menu file
+if exists("*Do_toolbar_tmenu")
+ call Do_toolbar_tmenu()
+else
+ let did_toolbar_tmenu = 1
+ tmenu ToolBar.Open Open file
+ tmenu ToolBar.Save Save current file
+ tmenu ToolBar.SaveAll Save all files
+ tmenu ToolBar.Print Print
+ tmenu ToolBar.Undo Undo
+ tmenu ToolBar.Redo Redo
+ tmenu ToolBar.Cut Cut to clipboard
+ tmenu ToolBar.Copy Copy to clipboard
+ tmenu ToolBar.Paste Paste from Clipboard
+ if !has("gui_athena")
+ tmenu ToolBar.Find Find...
+ tmenu ToolBar.FindNext Find Next
+ tmenu ToolBar.FindPrev Find Previous
+ tmenu ToolBar.Replace Find / Replace...
+ endif
+ if 0 " disabled; These are in the Windows menu
+ tmenu ToolBar.New New Window
+ tmenu ToolBar.WinSplit Split Window
+ tmenu ToolBar.WinMax Maximise Window
+ tmenu ToolBar.WinMin Minimise Window
+ tmenu ToolBar.WinVSplit Split Window Vertically
+ tmenu ToolBar.WinMaxWidth Maximise Window Width
+ tmenu ToolBar.WinMinWidth Minimise Window Width
+ tmenu ToolBar.WinClose Close Window
+ endif
+ tmenu ToolBar.LoadSesn Load session
+ tmenu ToolBar.SaveSesn Save current session
+ tmenu ToolBar.RunScript Run a Vim Script
+ tmenu ToolBar.Make Make current project
+ tmenu ToolBar.RunCtags Build tags in current directory tree
+ tmenu ToolBar.TagJump Jump to tag under cursor
+ tmenu ToolBar.Help Vim Help
+ tmenu ToolBar.FindHelp Search Vim Help
+endif
+
+" Select a session to load; default to current session name if present
+fun! s:LoadVimSesn()
+ if strlen(v:this_session) > 0
+ let name = v:this_session
+ else
+ let name = "Session.vim"
+ endif
+ execute "browse so " . name
+endfun
+
+" Select a session to save; default to current session name if present
+fun! s:SaveVimSesn()
+ if strlen(v:this_session) == 0
+ let v:this_session = "Session.vim"
+ endif
+ execute "browse mksession! " . v:this_session
+endfun
+
+endif
+
+endif " !exists("did_install_default_menus")
+
+" Define these items always, so that syntax can be switched on when it wasn't.
+" But skip them when the Syntax menu was disabled by the user.
+if !exists("did_install_syntax_menu")
+ an 50.212 &Syntax.&Manual :syn manual<CR>
+ an 50.214 &Syntax.A&utomatic :syn on<CR>
+ an <silent> 50.216 &Syntax.on/off\ for\ &This\ file :call <SID>SynOnOff()<CR>
+ if !exists("*s:SynOnOff")
+ fun s:SynOnOff()
+ if has("syntax_items")
+ syn clear
+ else
+ if !exists("g:syntax_on")
+ syn manual
+ endif
+ set syn=ON
+ endif
+ endfun
+ endif
+endif
+
+
+" Install the Syntax menu only when filetype.vim has been loaded or when
+" manual syntax highlighting is enabled.
+" Avoid installing the Syntax menu twice.
+if (exists("did_load_filetypes") || exists("syntax_on"))
+ \ && !exists("did_install_syntax_menu")
+ let did_install_syntax_menu = 1
+
+" Skip setting up the individual syntax selection menus unless
+" do_syntax_sel_menu is defined (it takes quite a bit of time).
+if exists("do_syntax_sel_menu")
+ runtime! synmenu.vim
+else
+ an 50.10 &Syntax.&Show\ filetypes\ in\ menu :let do_syntax_sel_menu = 1<Bar>runtime! synmenu.vim<Bar>aunmenu &Syntax.&Show\ filetypes\ in\ menu<CR>
+ an 50.195 &Syntax.-SEP1- <Nop>
+endif
+
+an 50.210 &Syntax.&Off :syn off<CR>
+an 50.700 &Syntax.-SEP3- <Nop>
+an 50.710 &Syntax.Co&lor\ test :sp $VIMRUNTIME/syntax/colortest.vim<Bar>so %<CR>
+an 50.720 &Syntax.&Highlight\ test :runtime syntax/hitest.vim<CR>
+an 50.730 &Syntax.&Convert\ to\ HTML :runtime syntax/2html.vim<CR>
+
+endif " !exists("did_install_syntax_menu")
+
+" Restore the previous value of 'cpoptions'.
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=2 :
diff --git a/runtime/mswin.vim b/runtime/mswin.vim
new file mode 100644
index 000000000..4072af1c6
--- /dev/null
+++ b/runtime/mswin.vim
@@ -0,0 +1,115 @@
+" Set options and add mapping such that Vim behaves a lot like MS-Windows
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2004 May 26
+
+" set the 'cpoptions' to its Vim default
+if 1 " only do this when compiled with expression evaluation
+ let s:save_cpo = &cpoptions
+endif
+set cpo&vim
+
+" set 'selection', 'selectmode', 'mousemodel' and 'keymodel' for MS-Windows
+behave mswin
+
+" backspace and cursor keys wrap to previous/next line
+set backspace=indent,eol,start whichwrap+=<,>,[,]
+
+" backspace in Visual mode deletes selection
+vnoremap <BS> d
+
+" CTRL-X and SHIFT-Del are Cut
+vnoremap <C-X> "+x
+vnoremap <S-Del> "+x
+
+" CTRL-C and CTRL-Insert are Copy
+vnoremap <C-C> "+y
+vnoremap <C-Insert> "+y
+
+" CTRL-V and SHIFT-Insert are Paste
+map <C-V> "+gP
+map <S-Insert> "+gP
+
+cmap <C-V> <C-R>+
+cmap <S-Insert> <C-R>+
+
+" Pasting blockwise and linewise selections is not possible in Insert and
+" Visual mode without the +virtualedit feature. They are pasted as if they
+" were characterwise instead.
+" Note: the same stuff appears in menu.vim.
+if has("virtualedit")
+ nnoremap <silent> <SID>Paste :call <SID>Paste()<CR>
+ func! <SID>Paste()
+ let ove = &ve
+ set ve=all
+ normal `^
+ if @+ != ''
+ normal "+gP
+ endif
+ let c = col(".")
+ normal i
+ if col(".") < c " compensate for i<ESC> moving the cursor left
+ normal l
+ endif
+ let &ve = ove
+ endfunc
+ inoremap <script> <C-V> x<BS><Esc><SID>Pastegi
+ vnoremap <script> <C-V> "-c<Esc><SID>Paste
+else
+ nnoremap <silent> <SID>Paste "=@+.'xy'<CR>gPFx"_2x
+ inoremap <script> <C-V> x<Esc><SID>Paste"_s
+ vnoremap <script> <C-V> "-c<Esc>gix<Esc><SID>Paste"_x
+endif
+imap <S-Insert> <C-V>
+vmap <S-Insert> <C-V>
+
+" Use CTRL-Q to do what CTRL-V used to do
+noremap <C-Q> <C-V>
+
+" Use CTRL-S for saving, also in Insert mode
+noremap <C-S> :update<CR>
+vnoremap <C-S> <C-C>:update<CR>
+inoremap <C-S> <C-O>:update<CR>
+
+" For CTRL-V to work autoselect must be off.
+" On Unix we have two selections, autoselect can be used.
+if !has("unix")
+ set guioptions-=a
+endif
+
+" CTRL-Z is Undo; not in cmdline though
+noremap <C-Z> u
+inoremap <C-Z> <C-O>u
+
+" CTRL-Y is Redo (although not repeat); not in cmdline though
+noremap <C-Y> <C-R>
+inoremap <C-Y> <C-O><C-R>
+
+" Alt-Space is System menu
+if has("gui")
+ noremap <M-Space> :simalt ~<CR>
+ inoremap <M-Space> <C-O>:simalt ~<CR>
+ cnoremap <M-Space> <C-C>:simalt ~<CR>
+endif
+
+" CTRL-A is Select all
+noremap <C-A> gggH<C-O>G
+inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
+cnoremap <C-A> <C-C>gggH<C-O>G
+
+" CTRL-Tab is Next window
+noremap <C-Tab> <C-W>w
+inoremap <C-Tab> <C-O><C-W>w
+cnoremap <C-Tab> <C-C><C-W>w
+
+" CTRL-F4 is Close window
+noremap <C-F4> <C-W>c
+inoremap <C-F4> <C-O><C-W>c
+cnoremap <C-F4> <C-C><C-W>c
+
+" restore 'cpoptions'
+set cpo&
+if 1
+ let &cpoptions = s:save_cpo
+ unlet s:save_cpo
+endif
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
new file mode 100644
index 000000000..d5f45115d
--- /dev/null
+++ b/runtime/optwin.vim
@@ -0,0 +1,1193 @@
+" These commands create the option window.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 May 04
+
+" If there already is an option window, jump to that one.
+if bufwinnr("option-window") > 0
+ let s:thiswin = winnr()
+ while 1
+ if @% == "option-window"
+ finish
+ endif
+ exe "norm! \<C-W>w"
+ if s:thiswin == winnr()
+ break
+ endif
+ endwhile
+endif
+
+" Make sure the '<' flag is not included in 'cpoptions', otherwise <CR> would
+" not be recognized. See ":help 'cpoptions'".
+let s:cpo_save = &cpo
+set cpo&vim
+
+" function to be called when <CR> is hit in the option-window
+fun! <SID>CR()
+
+ " If on a continued comment line, go back to the first comment line
+ let lnum = line(".")
+ 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
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ exe line
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ " <CR> on a "option" line shows help for that option
+ elseif match(line, "^[a-z]") >= 0
+ let name = substitute(line, '\([^\t]*\).*', '\1', "")
+ exe "help '" . name . "'"
+
+ " <CR> on an index line jumps to the group
+ elseif match(line, '^ \=[0-9]') >= 0
+ exe "norm! /" . line . "\<CR>zt"
+ endif
+endfun
+
+" function to be called when <Space> is hit in the option-window
+fun! <SID>Space()
+
+ let lnum = line(".")
+ let line = getline(lnum)
+
+ " <Space> on a "set" line refreshes the option line
+ if match(line, "^ \tset ") >= 0
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ endif
+endfun
+
+" find the window in which the option applies
+" returns 0 for global option, 1 for local option, -1 for error
+fun! <SID>Find(lnum)
+ if getline(a:lnum - 1) =~ "(local to"
+ let local = 1
+ let thiswin = winnr()
+ exe "norm! \<C-W>p"
+ if exists("b:current_syntax") && b:current_syntax == "help"
+ exe "norm! \<C-W>j"
+ if winnr() == thiswin
+ exe "norm! \<C-W>j"
+ endif
+ endif
+ else
+ let local = 0
+ endif
+ if local && (winnr() == thiswin || (exists("b:current_syntax")
+ \ && b:current_syntax == "help"))
+ echo "Don't know in which window"
+ let local = -1
+ endif
+ return local
+endfun
+
+" Update a "set" line in the option window
+fun! <SID>Update(lnum, line, local, thiswin)
+ " get the new value of the option and update the option window line
+ if match(a:line, "=") >= 0
+ let name = substitute(a:line, '^ \tset \([^=]*\)=.*', '\1', "")
+ else
+ let name = substitute(a:line, '^ \tset \(no\)\=\([a-z]*\).*', '\2', "")
+ endif
+ if name == "pt" && &pt =~ "\x80"
+ let val = <SID>PTvalue()
+ else
+ exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+ endif
+ if a:local
+ exe "norm! " . a:thiswin . "\<C-W>w"
+ endif
+ if match(a:line, "=") >= 0 || (val != "0" && val != "1")
+ call setline(a:lnum, " \tset " . name . "=" . val)
+ else
+ if val
+ call setline(a:lnum, " \tset " . name . "\tno" . name)
+ else
+ call setline(a:lnum, " \tset no" . name . "\t" . name)
+ endif
+ endif
+ set nomodified
+endfun
+
+" Reset 'title' and 'icon' to make it work faster.
+let s:old_title = &title
+let s:old_icon = &icon
+let s:old_sc = &sc
+let s:old_ru = &ru
+set notitle noicon nosc noru
+
+" If the current window is a help window, try finding a non-help window.
+" 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"
+ if s:thiswin == winnr()
+ break
+ endif
+endwhile
+
+" Open the window
+new option-window
+setlocal ts=15 tw=0
+
+" 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).')
+call append(1, '" Hit <CR> on a "set" line to execute it.')
+call append(2, '" A boolean option will be toggled.')
+call append(3, '" For other options you can edit the value.')
+call append(4, '" Hit <CR> on a help line to open a help window on this option.')
+call append(5, '" Hit <CR> on an index line to jump there.')
+call append(6, '" Hit <Space> on a "set" line to refresh it.')
+
+" These functions are called often below. Keep them fast!
+
+" Init a local binary option
+fun! <SID>BinOptionL(name)
+ exe "norm! \<C-W>p"
+ exe "let val = &" . a:name
+ exe "norm! \<C-W>p"
+ call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
+ \!val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a global binary option
+fun! <SID>BinOptionG(name, val)
+ call append("$", substitute(substitute(" \tset " . a:val . a:name . "\t" .
+ \!a:val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" 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"
+ 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"))
+endfun
+
+let s:idx = 1
+let s:lnum = line("$")
+call append("$", "")
+
+fun! <SID>Header(text)
+ let line = s:idx . " " . a:text
+ if s:idx < 10
+ let line = " " . line
+ endif
+ call append("$", "")
+ call append("$", line)
+ call append("$", "")
+ call append(s:lnum, line)
+ let s:idx = s:idx + 1
+ let s:lnum = s:lnum + 1
+endfun
+
+" Get the value of 'pastetoggle'. It could be a special key.
+fun! <SID>PTvalue()
+ redir @a
+ silent set pt
+ redir END
+ return substitute(@a, '[^=]*=\(.*\)', '\1', "")
+endfun
+
+" Restore the previous value of 'cpoptions' here, it's used below.
+let &cpo = s:cpo_save
+
+" List of all options, organized by function.
+" The text should be sufficient to know what the option is used for.
+
+call <SID>Header("important")
+call append("$", "compatible\tbehave very Vi compatible (not advisable)")
+call <SID>BinOptionG("cp", &cp)
+call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
+call <SID>OptionG("cpo", &cpo)
+call append("$", "insertmode\tuse Insert mode as the default mode")
+call <SID>BinOptionG("im", &im)
+call append("$", "paste\tpaste mode, insert typed text literally")
+call <SID>BinOptionG("paste", &paste)
+call append("$", "pastetoggle\tkey sequence to toggle paste mode")
+if &pt =~ "\x80"
+ call append("$", " \tset pt=" . <SID>PTvalue())
+else
+ call <SID>OptionG("pt", &pt)
+endif
+call append("$", "runtimepath\tlist of directories used for runtime files and plugins")
+call <SID>OptionG("rtp", &rtp)
+call append("$", "helpfile\tname of the main help file")
+call <SID>OptionG("hf", &hf)
+
+
+call <SID>Header("moving around, searching and patterns")
+call append("$", "whichwrap\tlist of flags specifying which commands wrap to another line")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ww")
+call append("$", "startofline\tmany jump commands move the cursor to the first non-blank")
+call append("$", "\tcharacter of a line")
+call <SID>BinOptionG("sol", &sol)
+call append("$", "paragraphs\tnroff macro names that separate paragraphs")
+call <SID>OptionG("para", &para)
+call append("$", "sections\tnroff macro names that separate sections")
+call <SID>OptionG("sect", &sect)
+call append("$", "path\tlist of directory names used for file searching")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("pa", &pa)
+call append("$", "cdpath\tlist of directory names used for :cd")
+call <SID>OptionG("cd", &cd)
+if has("netbeans_intg") || has("sun_workshop")
+ call append("$", "autochdir\tchange to directory of file in buffer")
+ call <SID>BinOptionG("acd", &acd)
+endif
+call append("$", "wrapscan\tsearch commands wrap around the end of the buffer")
+call <SID>BinOptionG("ws", &ws)
+call append("$", "incsearch\tshow match for partly typed search command")
+call <SID>BinOptionG("is", &is)
+call append("$", "magic\tchange the way backslashes are used in search patterns")
+call <SID>BinOptionG("magic", &magic)
+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")
+call <SID>BinOptionG("scs", &scs)
+call append("$", "casemap\tWhat method to use for changing case of letters")
+call <SID>OptionG("cmp", &cmp)
+call append("$", "define\tpattern for a macro definition line")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("def", &def)
+if has("find_in_path")
+ call append("$", "include\tpattern for an include-file line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inc")
+ call append("$", "includeexpr\texpression used to transform an include line to a file name")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inex")
+endif
+
+
+call <SID>Header("tags")
+call append("$", "tagbsearch\tuse binary searching in tags files")
+call <SID>BinOptionG("tbs", &tbs)
+call append("$", "taglength\tnumber of significant characters in a tag name or zero")
+call append("$", " \tset tl=" . &tl)
+call append("$", "tags\tlist of file names to search for tags")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("tag", &tag)
+call append("$", "tagrelative\tfile names in a tags file are relative to the tags file")
+call <SID>BinOptionG("tr", &tr)
+call append("$", "tagstack\ta :tag command will use the tagstack")
+call <SID>BinOptionG("tgst", &tgst)
+call append("$", "showfulltag\twhen completing tags in Insert mode show more info")
+call <SID>BinOptionG("sft", &sft)
+if has("cscope")
+ call append("$", "cscopeprg\tcommand for executing cscope")
+ call <SID>OptionG("csprg", &csprg)
+ call append("$", "cscopetag\tuse cscope for tag commands")
+ call <SID>BinOptionG("cst", &cst)
+ call append("$", "cscopetagorder\t0 or 1; the order in which \":cstag\" performs a search")
+ call append("$", " \tset csto=" . &csto)
+ call append("$", "cscopeverbose\tgive messages when adding a cscope database")
+ call <SID>BinOptionG("csverb", &csverb)
+ call append("$", "cscopepathcomp\thow many components of the path to show")
+ call append("$", " \tset cspc=" . &cspc)
+ call append("$", "cscopequickfix\tWhen to open a quickfix window for cscope")
+ call <SID>OptionG("csqf", &csqf)
+endif
+
+
+call <SID>Header("displaying text")
+call append("$", "scroll\tnumber of lines to scroll for CTRL-U and CTRL-D")
+call append("$", "\t(local to window)")
+call <SID>OptionL("scr")
+call append("$", "scrolloff\tnumber of screen lines to show around the cursor")
+call append("$", " \tset so=" . &so)
+call append("$", "wrap\tlong lines wrap")
+call <SID>BinOptionG("wrap", &wrap)
+call append("$", "linebreak\twrap long lines at a character in 'breakat'")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("lbr")
+call append("$", "breakat\twhich characters might cause a line break")
+call <SID>OptionG("brk", &brk)
+call append("$", "showbreak\tstring to put before wrapped screen lines")
+call <SID>OptionG("sbr", &sbr)
+call append("$", "sidescroll\tminimal number of columns to scroll horizontally")
+call append("$", " \tset ss=" . &ss)
+call append("$", "sidescrolloff\tminimal number of columns to keep left and right of the cursor")
+call append("$", " \tset siso=" . &siso)
+call append("$", "display\tinclude \"lastline\" to show the last line even if it doesn't fit")
+call append("$", "\tinclude \"uhex\" to show unprintable characters as a hex number")
+call <SID>OptionG("dy", &dy)
+call append("$", "fillchars\tcharacters to use for the status line, folds and filler lines")
+call <SID>OptionG("fcs", &fcs)
+call append("$", "cmdheight\tnumber of lines used for the command-line")
+call append("$", " \tset ch=" . &ch)
+call append("$", "columns\twidth of the display")
+call append("$", " \tset co=" . &co)
+call append("$", "lines\tnumber of lines in the display")
+call append("$", " \tset lines=" . &lines)
+call append("$", "lazyredraw\tdon't redraw while executing macros")
+call <SID>BinOptionG("lz", &lz)
+call append("$", "writedelay\tdelay in msec for each char written to the display")
+call append("$", "\t(for debugging)")
+call append("$", " \tset wd=" . &wd)
+call append("$", "list\tshow <Tab> as ^I and end-of-line as $")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("list")
+call append("$", "listchars\tlist of strings used for list mode")
+call <SID>OptionG("lcs", &lcs)
+call append("$", "number\tshow the line number for each line")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("nu")
+
+
+call <SID>Header("syntax and highlighting")
+call append("$", "background\t\"dark\" or \"light\"; the background color brightness")
+call <SID>OptionG("bg", &bg)
+if has("autocmd")
+ call append("$", "filetype\ttype of file; triggers the FileType event when set")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("ft")
+endif
+if has("syntax")
+ call append("$", "syntax\tname of syntax highlighting used")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("syn")
+endif
+call append("$", "highlight\twhich highlighting to use for various occasions")
+call <SID>OptionG("hl", &hl)
+call append("$", "hlsearch\thighlight all matches for the last used search pattern")
+call <SID>BinOptionG("hls", &hls)
+
+
+call <SID>Header("multiple windows")
+call append("$", "laststatus\t0, 1 or 2; when to use a status line for the last window")
+call append("$", " \tset ls=" . &ls)
+if has("statusline")
+ call append("$", "statusline\talternate format to be used for a status line")
+ call <SID>OptionG("stl", &stl)
+endif
+call append("$", "equalalways\tmake all windows the same size when adding/removing windows")
+call <SID>BinOptionG("ea", &ea)
+if has("vertsplit")
+ call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
+ call <SID>OptionG("ead", &ead)
+endif
+call append("$", "winheight\tminimal number of lines used for the current window")
+call append("$", " \tset wh=" . &wh)
+call append("$", "winminheight\tminimal number of lines used for any window")
+call append("$", " \tset wmh=" . &wmh)
+call append("$", "winfixheight\tkeep the height of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfh")
+if has("vertsplit")
+ call append("$", "winwidth\tminimal number of columns used for the current window")
+ call append("$", " \tset wiw=" . &wiw)
+ call append("$", "winminwidth\tminimal number of columns used for any window")
+ call append("$", " \tset wmw=" . &wmw)
+endif
+call append("$", "helpheight\tinitial height of the help window")
+call append("$", " \tset hh=" . &hh)
+if has("quickfix")
+ call append("$", "previewheight\tdefault height for the preview window")
+ call append("$", " \tset pvh=" . &pvh)
+ call append("$", "previewwindow\tidentifies the preview window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("pvw")
+endif
+call append("$", "hidden\tdon't unload a buffer when no longer shown in a window")
+call <SID>BinOptionG("hid", &hid)
+call append("$", "switchbuf\t\"useopen\" and/or \"split\"; which window to use when jumping")
+call append("$", "\tto a buffer")
+call <SID>OptionG("swb", &swb)
+call append("$", "splitbelow\ta new window is put below the current one")
+call <SID>BinOptionG("sb", &sb)
+if has("vertsplit")
+ call append("$", "splitright\ta new window is put right of the current one")
+ call <SID>BinOptionG("spr", &spr)
+endif
+if has("scrollbind")
+ call append("$", "scrollbind\tthis window scrolls together with other bound windows")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("scb")
+ call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
+ call <SID>OptionG("sbo", &sbo)
+endif
+
+
+call <SID>Header("terminal")
+call append("$", "term\tname of the used terminal")
+call <SID>OptionG("term", &term)
+call append("$", "ttytype\talias for 'term'")
+call <SID>OptionG("tty", &tty)
+call append("$", "ttybuiltin\tcheck built-in termcaps first")
+call <SID>BinOptionG("tbi", &tbi)
+call append("$", "ttyfast\tterminal connection is fast")
+call <SID>BinOptionG("tf", &tf)
+call append("$", "weirdinvert\tterminal that requires extra redrawing")
+call <SID>BinOptionG("wiv", &wiv)
+call append("$", "esckeys\trecognize keys that start with <Esc> in Insert mode")
+call <SID>BinOptionG("ek", &ek)
+call append("$", "scrolljump\tminimal number of lines to scroll at a time")
+call append("$", " \tset sj=" . &sj)
+call append("$", "ttyscroll\tmaximum number of lines to use scrolling instead of redrawing")
+call append("$", " \tset tsl=" . &tsl)
+if has("gui") || has("msdos") || has("win32")
+ call append("$", "guicursor\tspecifies what the cursor looks like in different modes")
+ call <SID>OptionG("gcr", &gcr)
+endif
+if has("title")
+ let &title = s:old_title
+ call append("$", "title\tshow info in the window title")
+ call <SID>BinOptionG("title", &title)
+ set notitle
+ call append("$", "titlelen\tpercentage of 'columns' used for the window title")
+ call append("$", " \tset titlelen=" . &titlelen)
+ call append("$", "titlestring\twhen not empty, string to be used for the window title")
+ call <SID>OptionG("titlestring", &titlestring)
+ call append("$", "titleold\tstring to restore the title to when exiting Vim")
+ call <SID>OptionG("titleold", &titleold)
+ let &icon = s:old_icon
+ call append("$", "icon\tset the text of the icon for this window")
+ call <SID>BinOptionG("icon", &icon)
+ set noicon
+ call append("$", "iconstring\twhen not empty, text for the icon of this window")
+ call <SID>OptionG("iconstring", &iconstring)
+endif
+if has("win32")
+ call append("$", "restorescreen\trestore the screen contents when exiting Vim")
+ call <SID>BinOptionG("rs", &rs)
+endif
+
+
+call <SID>Header("using the mouse")
+call append("$", "mouse\tlist of flags for using the mouse")
+call <SID>OptionG("mouse", &mouse)
+if has("gui")
+ call append("$", "mousefocus\tthe window with the mouse pointer becomes the current one")
+ call <SID>BinOptionG("mousef", &mousef)
+ call append("$", "mousehide\thide the mouse pointer while typing")
+ call <SID>BinOptionG("mh", &mh)
+endif
+call append("$", "mousemodel\t\"extend\", \"popup\" or \"popup_setpos\"; what the right")
+call append("$", "\tmouse button is used for")
+call <SID>OptionG("mousem", &mousem)
+call append("$", "mousetime\tmaximum time in msec to recognize a double-click")
+call append("$", " \tset mouset=" . &mouset)
+call append("$", "ttymouse\t\"xterm\", \"xterm2\", \"dec\" or \"netterm\"; type of mouse")
+call <SID>OptionG("ttym", &ttym)
+if has("mouseshape")
+ call append("$", "mouseshape\twhat the mouse pointer looks like in different modes")
+ call <SID>OptionG("mouses", &mouses)
+endif
+
+
+if has("gui")
+ call <SID>Header("GUI")
+ call append("$", "guifont\tlist of font names to be used in the GUI")
+ call <SID>OptionG("gfn", &gfn)
+ if has("xfontset")
+ call append("$", "guifontset\tpair of fonts to be used, for multibyte editing")
+ call <SID>OptionG("gfs", &gfs)
+ endif
+ call append("$", "guifontwide\tlist of font names to be used for double-wide characters")
+ call <SID>OptionG("gfw", &gfw)
+ if has("mac")
+ call append("$", "antialias\tuse smooth, antialiased fonts")
+ call <SID>BinOptionG("anti", &anti)
+ endif
+ call append("$", "guioptions\tlist of flags that specify how the GUI works")
+ call <SID>OptionG("go", &go)
+ if has("gui_gtk")
+ call append("$", "toolbar\t\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar")
+ call <SID>OptionG("tb", &tb)
+ if has("gui_gtk2")
+ call append("$", "toolbariconsize\tSize of toolbar icons")
+ call <SID>OptionG("tbis", &tbis)
+ endif
+ call append("$", "guiheadroom\troom (in pixels) left above/below the window")
+ call append("$", " \tset ghr=" . &ghr)
+ endif
+ call append("$", "guipty\tuse a pseudo-tty for I/O to external commands")
+ call <SID>BinOptionG("guipty", &guipty)
+ if has("browse")
+ call append("$", "browsedir\t\"last\", \"buffer\" or \"current\": which directory used for the file browser")
+ call <SID>OptionG("bsdir", &bsdir)
+ endif
+ if has("multi_lang")
+ call append("$", "langmenu\tlanguage to be used for the menus")
+ call <SID>OptionG("langmenu", &lm)
+ endif
+ call append("$", "menuitems\tmaximum number of items in one menu")
+ call append("$", " \tset mis=" . &mis)
+ if has("winaltkeys")
+ call append("$", "winaltkeys\t\"no\", \"yes\" or \"menu\"; how to use the ALT key")
+ call <SID>OptionG("wak", &wak)
+ endif
+ call append("$", "linespace\tnumber of pixel lines to use between characters")
+ call append("$", " \tset lsp=" . &lsp)
+ if has("balloon_eval")
+ call append("$", "balloondelay\tdelay in milliseconds before a balloon may pop up")
+ call append("$", " \tset bdlay=" . &bdlay)
+ if has("sun_workshop")
+ call append("$", "ballooneval\twhether the balloon evaluation is to be used")
+ call <SID>BinOptionG("beval", &beval)
+ endif
+ endif
+endif
+
+if has("printer")
+ call <SID>Header("printing")
+ call append("$", "printdevice\tname of the printer to be used for :hardcopy")
+ call <SID>OptionG("pdev", &pdev)
+ call append("$", "printencoding\tencoding used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("penc", &penc)
+ call append("$", "printexpr\texpression used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("pexpr", &pexpr)
+ call append("$", "printfont\tname of the font to be used for :hardcopy")
+ call <SID>OptionG("pfn", &pfn)
+ call append("$", "printheader\tformat of the header used for :hardcopy")
+ call <SID>OptionG("pheader", &pheader)
+ call append("$", "printoptions\tlist of items that control the format of :hardcopy output")
+ call <SID>OptionG("popt", &popt)
+endif
+
+call <SID>Header("messages and info")
+call append("$", "terse\tadd 's' flag in 'shortmess' (don't show search message)")
+call <SID>BinOptionG("terse", &terse)
+call append("$", "shortmess\tlist of flags to make messages shorter")
+call <SID>OptionG("shm", &shm)
+call append("$", "showcmd\tshow (partial) command keys in the status line")
+let &sc = s:old_sc
+call <SID>BinOptionG("sc", &sc)
+set nosc
+call append("$", "showmode\tdisplay the current mode in the status line")
+call <SID>BinOptionG("smd", &smd)
+call append("$", "ruler\tshow cursor position below each window")
+let &ru = s:old_ru
+call <SID>BinOptionG("ru", &ru)
+set noru
+if has("statusline")
+ call append("$", "rulerformat\talternate format to be used for the ruler")
+ call <SID>OptionG("ruf", &ruf)
+endif
+call append("$", "report\tthreshold for reporting number of changed lines")
+call append("$", " \tset report=" . &report)
+call append("$", "verbose\tthe higher the more messages are given")
+call append("$", " \tset vbs=" . &vbs)
+call append("$", "more\tpause listings when the screen is full")
+call <SID>BinOptionG("more", &more)
+if has("dialog_con") || has("dialog_gui")
+ call append("$", "confirm\tstart a dialog when a command fails")
+ call <SID>BinOptionG("cf", &cf)
+endif
+call append("$", "errorbells\tring the bell for error messages")
+call <SID>BinOptionG("eb", &eb)
+call append("$", "visualbell\tuse a visual bell instead of beeping")
+call <SID>BinOptionG("vb", &vb)
+if has("multi_lang")
+ call append("$", "helplang\tlist of preferred languages for finding help")
+ call <SID>OptionG("hlg", &hlg)
+endif
+
+
+call <SID>Header("selecting text")
+call append("$", "selection\t\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves")
+call <SID>OptionG("sel", &sel)
+call append("$", "selectmode\t\"mouse\", \"key\" and/or \"cmd\"; when to start Select mode")
+call append("$", "\tinstead of Visual mode")
+call <SID>OptionG("slm", &slm)
+if has("clipboard")
+ call append("$", "clipboard\t\"unnamed\" to use the * register like unnamed register")
+ call append("$", "\t\"autoselect\" to always put selected text on the clipboard")
+ call <SID>OptionG("cb", &cb)
+endif
+call append("$", "keymodel\t\"startsel\" and/or \"stopsel\"; what special keys can do")
+call <SID>OptionG("km", &km)
+
+
+call <SID>Header("editing text")
+call append("$", "undolevels\tmaximum number of changes that can be undone")
+call append("$", " \tset ul=" . &ul)
+call append("$", "modified\tchanges have been made and not written to a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("mod")
+call append("$", "readonly\tbuffer is not to be written")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ro")
+call append("$", "modifiable\tchanges to the text are not possible")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ma")
+call append("$", "textwidth\tline length above which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("tw")
+call append("$", "wrapmargin\tmargin from the right in which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("wm")
+call append("$", "backspace\tspecifies what <BS>, CTRL-W, etc. can do in Insert mode")
+call append("$", " \tset bs=" . &bs)
+call append("$", "comments\tdefinition of what comment lines look like")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("com")
+call append("$", "formatoptions\tlist of flags that tell how automatic formatting works")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("fo")
+if has("insert_expand")
+ call append("$", "complete\tspecifies how Insert mode completion works")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cpt")
+ call append("$", "dictionary\tlist of dictionary files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("dict", &dict)
+ call append("$", "thesaurus\tlist of thesaurus files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("tsr", &tsr)
+endif
+call append("$", "infercase\tadjust case of a keyword completion match")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("inf")
+if has("digraphs")
+ call append("$", "digraph\tenable entering digraps with c1 <BS> c2")
+ call <SID>BinOptionG("dg", &dg)
+endif
+call append("$", "tildeop\tthe \"~\" command behaves like an operator")
+call <SID>BinOptionG("top", &top)
+call append("$", "showmatch\tWhen inserting a bracket, briefly jump to its match")
+call <SID>BinOptionG("sm", &sm)
+call append("$", "matchtime\ttenth of a second to show a match for 'showmatch'")
+call append("$", " \tset mat=" . &mat)
+call append("$", "matchpairs\tlist of pairs that match for the \"%\" command")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("mps")
+call append("$", "joinspaces\tuse two spaces after '.' when joining a line")
+call <SID>BinOptionG("js", &js)
+call append("$", "nrformats\t\"alpha\", \"octal\" and/or \"hex\"; number formats recognized for")
+call append("$", "\tCTRL-A and CTRL-X commands")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("nf")
+
+
+call <SID>Header("tabs and indenting")
+call append("$", "tabstop\tnumber of spaces a <Tab> in the text stands for")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ts")
+call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sw")
+call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces")
+call <SID>BinOptionG("sta", &sta)
+call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sts")
+call append("$", "shiftround\tround to 'shiftwidth' for \"<<\" and \">>\"")
+call <SID>BinOptionG("sr", &sr)
+call append("$", "expandtab\texpand <Tab> to spaces in Insert mode")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("et")
+call append("$", "autoindent\tautomatically set the indent of a new line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ai")
+if has("smartindent")
+ call append("$", "smartindent\tdo clever autoindenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("si")
+endif
+if has("cindent")
+ call append("$", "cindent\tenable specific indenting for C code")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("cin")
+ call append("$", "cinoptions\toptions for C-indenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cino")
+ call append("$", "cinkeys\tkeys that trigger C-indenting in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cink")
+ call append("$", "cinwords\tlist of words that cause more C-indent")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cinw")
+ call append("$", "indentexpr\texpression used to obtain the indent of a line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inde")
+ call append("$", "indentkeys\tkeys that trigger indenting with 'indentexpr' in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("indk")
+endif
+call append("$", "copyindent\tCopy whitespace for indenting from previous line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ci")
+call append("$", "preserveindent\tPreserve kind of whitespace when changing indent")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("pi")
+if has("lispindent")
+ call append("$", "lisp\tenable lisp mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("lisp")
+ call append("$", "lispwords\twords that change how lisp indenting works")
+ call <SID>OptionG("lw", &lw)
+endif
+
+
+if has("folding")
+ call <SID>Header("folding")
+ call append("$", "foldenable\tset to display all folds open")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("fen")
+ call append("$", "foldlevel\tfolds with a level higher than this number will be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdl")
+ call append("$", "foldlevelstart\tvalue for 'foldlevel' when starting to edit a file")
+ call append("$", " \tset fdls=" . &fdls)
+ call append("$", "foldcolumn\twidth of the column used to indicate folds")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdc")
+ call append("$", "foldtext\texpression used to display the text of a closed fold")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdt")
+ call append("$", "foldclose\tset to \"all\" to close a fold when the cursor leaves it")
+ call <SID>OptionG("fcl", &fcl)
+ call append("$", "foldopen\tspecifies for which commands a fold will be opened")
+ call <SID>OptionG("fdo", &fdo)
+ call append("$", "foldminlines\tminimum number of screen lines for a fold to be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fml")
+ call append("$", "commentstring\ttemplate for comments; used to put the marker in")
+ call <SID>OptionL("cms")
+ call append("$", "foldmethod\tfolding type: \"manual\", \"indent\", \"expr\", \"marker\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdm")
+ call append("$", "foldexpr\texpression used when 'foldmethod' is \"expr\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fde")
+ call append("$", "foldignore\tused to ignore lines when 'foldmethod' is \"indent\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdi")
+ call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fmr")
+ call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod is \"indent\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdn")
+endif
+
+
+if has("diff")
+ call <SID>Header("diff mode")
+ call append("$", "diff\tuse diff mode for the current window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("diff")
+ call append("$", "diffopt\toptions for using diff mode")
+ call <SID>OptionG("dip", &dip)
+ call append("$", "diffexpr\texpression used to obtain a diff file")
+ call <SID>OptionG("dex", &dex)
+ call append("$", "patchexpr\texpression used to patch a file")
+ call <SID>OptionG("pex", &pex)
+endif
+
+
+call <SID>Header("mapping")
+call append("$", "maxmapdepth\tmaximum depth of mapping")
+call append("$", " \tset mmd=" . &mmd)
+call append("$", "remap\trecognize mappings in mapped keys")
+call <SID>BinOptionG("remap", &remap)
+call append("$", "timeout\tallow timing out halfway into a mapping")
+call <SID>BinOptionG("to", &to)
+call append("$", "ttimeout\tallow timing out halfway into a key code")
+call <SID>BinOptionG("ttimeout", &ttimeout)
+call append("$", "timeoutlen\ttime in msec for 'timeout'")
+call append("$", " \tset tm=" . &tm)
+call append("$", "ttimeoutlen\ttime in msec for 'ttimeout'")
+call append("$", " \tset ttm=" . &ttm)
+
+
+call <SID>Header("reading and writing files")
+call append("$", "modeline\tenable using settings from modelines when reading a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ml")
+call append("$", "modelines\tnumber of lines to check for modelines")
+call append("$", " \tset mls=" . &mls)
+call append("$", "binary\tbinary file editing")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bin")
+call append("$", "endofline\tlast line in the file has an end-of-line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("eol")
+if has("multi_byte")
+ call append("$", "bomb\tPrepend a Byte Order Mark to the file")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("bomb")
+endif
+call append("$", "fileformat\tend-of-line format: \"dos\", \"unix\" or \"mac\"")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ff")
+call append("$", "fileformats\tlist of file formats to look for when editing a file")
+call <SID>OptionG("ffs", &ffs)
+call append("$", "textmode\tobsolete, use 'fileformat'")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("tx")
+call append("$", "textauto\tobsolete, use 'fileformats'")
+call <SID>BinOptionG("ta", &ta)
+call append("$", "write\twriting files is allowed")
+call <SID>BinOptionG("write", &write)
+call append("$", "writebackup\twrite a backup file before overwriting a file")
+call <SID>BinOptionG("wb", &wb)
+call append("$", "backup\tkeep a backup after overwriting a file")
+call <SID>BinOptionG("bk", &bk)
+call append("$", "backupskip\tpatterns that specify for which files a backup is not made")
+call append("$", " \tset bsk=" . &bsk)
+call append("$", "backupcopy\twhether to make the backup as a copy or rename the existing file")
+call append("$", " \tset bkc=" . &bkc)
+call append("$", "backupdir\tlist of directories to put backup files in")
+call <SID>OptionG("bdir", &bdir)
+call append("$", "backupext\tfile name extension for the backup file")
+call <SID>OptionG("bex", &bex)
+call append("$", "autowrite\tautomatically write a file when leaving a modified buffer")
+call <SID>BinOptionG("aw", &aw)
+call append("$", "autowriteall\tas 'autowrite', but works with more commands")
+call <SID>BinOptionG("awa", &awa)
+call append("$", "writeany\talways write without asking for confirmation")
+call <SID>BinOptionG("wa", &wa)
+call append("$", "autoread\tautomatically read a file when it was modified outside of Vim")
+call append("$", "\t(global or local to buffer)")
+call <SID>BinOptionG("ar", &ar)
+call append("$", "patchmode\tkeep oldest version of a file; specifies file name extension")
+call <SID>OptionG("pm", &pm)
+if !has("msdos")
+ call append("$", "shortname\tuse 8.3 file names")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("sn")
+endif
+
+
+call <SID>Header("the swap file")
+call append("$", "directory\tlist of directories for the swap file")
+call <SID>OptionG("dir", &dir)
+call append("$", "swapfile\tuse a swap file for this buffer")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("swf")
+call append("$", "swapsync\t\"sync\", \"fsync\" or empty; how to flush a swap file to disk")
+call <SID>OptionG("sws", &sws)
+call append("$", "updatecount\tnumber of characters typed to cause a swap file update")
+call append("$", " \tset uc=" . &uc)
+call append("$", "updatetime\ttime in msec after which the swap file will be updated")
+call append("$", " \tset ut=" . &ut)
+call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
+call append("$", " \tset mm=" . &mm)
+call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
+call append("$", " \tset mmt=" . &mmt)
+
+
+call <SID>Header("command line editing")
+call append("$", "history\thow many command lines are remembered ")
+call append("$", " \tset hi=" . &hi)
+call append("$", "wildchar\tkey that triggers command-line expansion")
+call append("$", " \tset wc=" . &wc)
+call append("$", "wildcharm\tlike 'wildchar' but can also be used in a mapping")
+call append("$", " \tset wcm=" . &wcm)
+call append("$", "wildmode\tspecifies how command line completion works")
+call <SID>OptionG("wim", &wim)
+call append("$", "suffixes\tlist of file name extensions that have a lower priority")
+call <SID>OptionG("su", &su)
+if has("file_in_path")
+ call append("$", "suffixesadd\tlist of file name extensions added when searching for a file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("sua")
+endif
+if has("wildignore")
+ call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
+ call <SID>OptionG("wig", &wig)
+endif
+if has("wildmenu")
+ call append("$", "wildmenu\tcommand-line completion shows a list of matches")
+ call <SID>BinOptionG("wmnu", &wmnu)
+endif
+if has("vertsplit")
+ call append("$", "cedit\tkey used to open the command-line window")
+ call <SID>OptionG("cedit", &cedit)
+ call append("$", "cmdwinheight\theight of the command-line window")
+ call <SID>OptionG("cwh", &cwh)
+endif
+
+
+call <SID>Header("executing external commands")
+call append("$", "shell\tname of the shell program used for external commands")
+call <SID>OptionG("sh", &sh)
+if has("amiga")
+ call append("$", "shelltype\twhen to use the shell or directly execute a command")
+ call append("$", " \tset st=" . &st)
+endif
+call append("$", "shellquote\tcharacter(s) to enclose a shell command in")
+call <SID>OptionG("shq", &shq)
+call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
+call <SID>OptionG("sxq", &sxq)
+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")
+call <SID>OptionG("srr", &srr)
+call append("$", "equalprg\tprogram used for \"=\" command")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("ep", &ep)
+call append("$", "formatprg\tprogram used to format lines with \"gq\" command")
+call <SID>OptionG("fp", &fp)
+call append("$", "keywordprg\tprogram used for the \"K\" command")
+call <SID>OptionG("kp", &kp)
+call append("$", "warn\twarn when using a shell command and a buffer has changes")
+call <SID>BinOptionG("warn", &warn)
+
+
+if has("quickfix")
+ call <SID>Header("running make and jumping to errors")
+ call append("$", "errorfile\tname of the file that contains error messages")
+ call <SID>OptionG("ef", &ef)
+ call append("$", "errorformat\tlist of formats for error messages")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("efm", &efm)
+ call append("$", "makeprg\tprogram used for the \":make\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("mp", &mp)
+ call append("$", "shellpipe\tstring used to put the output of \":make\" in the error file")
+ call <SID>OptionG("sp", &sp)
+ call append("$", "makeef\tname of the errorfile for the 'makeprg' command")
+ call <SID>OptionG("mef", &mef)
+ call append("$", "grepprg\tprogram used for the \":grep\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("gp", &gp)
+ call append("$", "grepformat\tlist of formats for output of 'grepprg'")
+ call <SID>OptionG("gfm", &gfm)
+endif
+
+
+if has("msdos") || has("os2") || has("win16") || has("win32") || has("osfiletype")
+ call <SID>Header("system specific")
+ if has("msdos")
+ call append("$", "bioskey\tcall the BIOS to get a keyoard character")
+ call <SID>BinOptionG("biosk", &biosk)
+ call append("$", "conskey\tuse direct console I/O to get a keyboard character")
+ call <SID>BinOptionG("consk", &consk)
+ endif
+ if has("osfiletype")
+ call append("$", "osfiletype\tOS-specific information about the type of file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("oft")
+ endif
+ if has("msdos") || has("os2") || has("win16") || has("win32")
+ call append("$", "shellslash\tuse forward slashes in file names; for Unix-like shells")
+ call <SID>BinOptionG("ssl", &ssl)
+ endif
+endif
+
+
+call <SID>Header("language specific")
+call append("$", "isfname\tspecifies the characters in a file name")
+call <SID>OptionG("isf", &isf)
+call append("$", "isident\tspecifies the characters in an identifier")
+call <SID>OptionG("isi", &isi)
+call append("$", "iskeyword\tspecifies the characters in a keyword")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("isk")
+call append("$", "isprint\tspecifies printable characters")
+call <SID>OptionG("isp", &isp)
+if has("rightleft")
+ call append("$", "rightleft\tdisplay the buffer right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("rl")
+ call append("$", "rightleftcmd\tWhen to edit the command-line right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("rlc")
+ call append("$", "revins\tInsert characters backwards")
+ call <SID>BinOptionG("ri", &ri)
+ call append("$", "allowrevins\tAllow CTRL-_ in Insert and Command-line mode to toggle 'revins'")
+ call <SID>BinOptionG("ari", &ari)
+ call append("$", "aleph\tthe ASCII code for the first letter of the Hebrew alphabet")
+ call append("$", " \tset al=" . &al)
+ call append("$", "hkmap\tuse Hebrew keyboard mapping")
+ call <SID>BinOptionG("hk", &hk)
+ call append("$", "hkmapp\tuse phonetic Hebrew keyboard mapping")
+ call <SID>BinOptionG("hkp", &hkp)
+endif
+if has("farsi")
+ call append("$", "altkeymap\tuse Farsi as the second language when 'revins' is set")
+ call <SID>BinOptionG("akm", &akm)
+ call append("$", "fkmap\tuse Farsi keyboard mapping")
+ call <SID>BinOptionG("fk", &fk)
+endif
+if has("arabic")
+ call append("$", "arabic\tPrepare for editing Arabic text")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("arab")
+ call append("$", "arabicshape\tPerform shaping of Arabic characters")
+ call <SID>BinOptionG("arshape", &arshape)
+ call append("$", "termbidi\tTerminal will perform bidi handling")
+ call <SID>BinOptionG("tbidi", &tbidi)
+endif
+if has("keymap")
+ call append("$", "keymap\tname of a keyboard mappping")
+ call <SID>OptionL("kmp")
+endif
+if has("langmap")
+ call append("$", "langmap\ttranslate characters for Normal mode")
+ call <SID>OptionG("lmap", &lmap)
+endif
+if has("xim")
+ call append("$", "imdisable\twhen set never use IM; overrules following IM options")
+ call <SID>BinOptionG("imd", &imd)
+endif
+call append("$", "iminsert\tin Insert mode: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("imi")
+call append("$", "imsearch\tentering a search pattern: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ims")
+if has("xim")
+ call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
+ call <SID>BinOptionG("imc", &imc)
+endif
+
+
+if has("multi_byte")
+ call <SID>Header("multi-byte characters")
+ call append("$", "encoding\tcharacter encoding used in Vim: \"latin1\", \"utf-8\"")
+ call append("$", "\t\"euc-jp\", \"big5\", etc.")
+ call <SID>OptionG("enc", &enc)
+ call append("$", "fileencoding\tcharacter encoding for the current file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("fenc")
+ call append("$", "fileencodings\tautomatically detected character encodings")
+ call <SID>OptionG("fencs", &fencs)
+ call append("$", "termencoding\tcharacter encoding used by the terminal")
+ call <SID>OptionG("tenc", &tenc)
+ call append("$", "charconvert\texpression used for character encoding conversion")
+ call <SID>OptionG("ccv", &ccv)
+ call append("$", "delcombine\tDelete combining (composing) characters on their own")
+ call <SID>BinOptionG("deco", &deco)
+ if has("xim") && has("gui_gtk")
+ call append("$", "imactivatekey\tkey that activates the X input method")
+ call <SID>OptionG("imak", &imak)
+ endif
+ call append("$", "ambiwidth\tWidth of ambiguous width characters")
+ call <SID>OptionG("ambw", &ambw)
+endif
+
+
+call <SID>Header("various")
+if has("virtualedit")
+ call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
+ call <SID>OptionG("ve", &ve)
+endif
+if has("autocmd")
+ call append("$", "eventignore\tlist of autocommand events which are to be ignored")
+ call <SID>OptionG("ei", &ei)
+endif
+call append("$", "loadplugins\tload plugin scripts when starting up")
+call <SID>BinOptionG("lpl", &lpl)
+call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory")
+call <SID>BinOptionG("ex", &ex)
+call append("$", "secure\tsafer working with script files in the current directory")
+call <SID>BinOptionG("secure", &secure)
+call append("$", "gdefault\tuse the 'g' flag for \":substitute\"")
+call <SID>BinOptionG("gd", &gd)
+call append("$", "edcompatible\t'g' and 'c' flags of \":substitute\" toggle")
+call <SID>BinOptionG("ed", &ed)
+ call append("$", "maxfuncdepth\tmaximum depth of function calls")
+ call append("$", " \tset mfd=" . &mfd)
+if has("mksession")
+ call append("$", "sessionoptions\tlist of words that specifies what to put in a session file")
+ call <SID>OptionG("ssop", &ssop)
+ call append("$", "viewoptions\tlist of words that specifies what to save for :mkview")
+ call <SID>OptionG("vop", &vop)
+ call append("$", "viewdir\tdirectory where to store files with :mkview")
+ call <SID>OptionG("vdir", &vdir)
+endif
+if has("viminfo")
+ call append("$", "viminfo\tlist that specifies what to write in the viminfo file")
+ call <SID>OptionG("vi", &vi)
+endif
+if has("quickfix")
+ call append("$", "bufhidden\twhat happens with a buffer when it's no longer in a window")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bh")
+ call append("$", "buftype\t\"\", \"nofile\", \"nowrite\" or \"quickfix\": type of buffer")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bt")
+endif
+call append("$", "buflisted\twhether the buffer shows up in the buffer list")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bl")
+call append("$", "debug\tset to \"msg\" to see all error messages")
+call append("$", " \tset debug=" . &debug)
+
+set cpo&vim
+
+" go to first line
+1
+
+" reset 'modified', so that ":q" can be used to close the window
+setlocal nomodified
+
+if has("syntax")
+ " Use Vim highlighting, with some additional stuff
+ setlocal ft=vim
+ syn match optwinHeader "^ \=[0-9].*"
+ syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+ syn match optwinComment ".*" contained
+ syn match optwinComment "^\t.*"
+ if !exists("did_optwin_syntax_inits")
+ let did_optwin_syntax_inits = 1
+ hi link optwinHeader Title
+ hi link optwinName Identifier
+ hi link optwinComment Comment
+ endif
+endif
+
+" Install autocommands to enable mappings in option-window
+noremap <silent> <buffer> <CR> <C-\><C-N>:call <SID>CR()<CR>
+inoremap <silent> <buffer> <CR> <Esc>:call <SID>CR()<CR>
+noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+
+" Make the buffer be deleted when the window is closed.
+setlocal buftype=nofile bufhidden=delete noswapfile
+
+augroup optwin
+ au! BufUnload,BufHidden option-window nested
+ \ call <SID>unload() | delfun <SID>unload
+augroup END
+
+fun! <SID>unload()
+ delfun <SID>CR
+ delfun <SID>Space
+ delfun <SID>Find
+ delfun <SID>Update
+ delfun <SID>OptionL
+ delfun <SID>OptionG
+ delfun <SID>BinOptionL
+ delfun <SID>BinOptionG
+ delfun <SID>Header
+ au! optwin
+endfun
+
+" Restore the previous value of 'title' and 'icon'.
+let &title = s:old_title
+let &icon = s:old_icon
+let &ru = s:old_ru
+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
diff --git a/runtime/plugin/README.txt b/runtime/plugin/README.txt
new file mode 100644
index 000000000..489ebf613
--- /dev/null
+++ b/runtime/plugin/README.txt
@@ -0,0 +1,9 @@
+The plugin directory is for standard Vim plugin scripts.
+
+All files here ending in .vim will be sourced by Vim when it starts up.
+
+Standard plugins:
+explorer.vim file browser
+gzip.vim edit compressed files
+netrw.vim edit files over a network
+rrhelper.vim used for --remote-wait editing
diff --git a/runtime/plugin/explorer.vim b/runtime/plugin/explorer.vim
new file mode 100644
index 000000000..4a5b6057f
--- /dev/null
+++ b/runtime/plugin/explorer.vim
@@ -0,0 +1,1326 @@
+"=============================================================================
+" File: explorer.vim
+" Author: M A Aziz Ahmed (aziz@acorn-networks.com - doesn't work)
+" Last Change: 2004 May 13
+" Version: 2.5 + changes
+" Additions by Mark Waggoner (waggoner@aracnet.com) et al.
+"-----------------------------------------------------------------------------
+" This file implements a file explorer.
+"-----------------------------------------------------------------------------
+" Normally, this file will reside in the plugins directory and be
+" automatically sourced. If not, you must manually source this file
+" using :source explorer.vim
+"
+" To use it, just edit a directory (vi dirname) or type :Explore to
+" launch the file explorer in the current window, or :Sexplore to split
+" the current window and launch explorer there.
+"
+" If the current buffer is modified, the window is always split.
+"
+" It is also possible to delete files and rename files within explorer.
+" See :help file-explorer for more details
+"
+"-----------------------------------------------------------------------------
+" Update history removed, it's not very interesting.
+" Contributors were: Doug Potts, Bram Moolenaar, Thomas Köhler
+"=============================================================================
+
+" Has this already been loaded?
+if exists("loaded_explorer")
+ finish
+endif
+let loaded_explorer=1
+
+" Line continuation used here
+let s:cpo_save = &cpo
+set cpo&vim
+
+"---
+" Default settings for global configuration variables
+
+" Split vertically instead of horizontally?
+if !exists("g:explVertical")
+ let g:explVertical=0
+endif
+
+" How big to make the window? Set to "" to avoid resizing
+if !exists("g:explWinSize")
+ let g:explWinSize=15
+endif
+
+" When opening a new file/directory, split below current window (or
+" above)? 1 = below, 0 = to above
+if !exists("g:explSplitBelow")
+ let g:explSplitBelow = &splitbelow
+endif
+
+" Split to right of current window (or to left)?
+" 1 = to right, 0 = to left
+if !exists("g:explSplitRight")
+ let g:explSplitRight = &splitright
+endif
+
+" Start the first explorer window...
+" Defaults to be the same as explSplitBelow
+if !exists("g:explStartBelow")
+ let g:explStartBelow = g:explSplitBelow
+endif
+
+" Start the first explorer window...
+" Defaults to be the same as explSplitRight
+if !exists("g:explStartRight")
+ let g:explStartRight = g:explSplitRight
+endif
+
+" Show detailed help?
+if !exists("g:explDetailedHelp")
+ let g:explDetailedHelp=0
+endif
+
+" Show file size and dates?
+if !exists("g:explDetailedList")
+ let g:explDetailedList=0
+endif
+
+" Format for the date
+if !exists("g:explDateFormat")
+ let g:explDateFormat="%d %b %Y %H:%M"
+endif
+
+" Files to hide
+if !exists("g:explHideFiles")
+ let g:explHideFiles=''
+endif
+
+" Field to sort by
+if !exists("g:explSortBy")
+ let g:explSortBy='name'
+endif
+
+" Segregate directories? 1, 0, or -1
+if !exists("g:explDirsFirst")
+ let g:explDirsFirst=1
+endif
+
+" Segregate items in suffixes option? 1, 0, or -1
+if !exists("g:explSuffixesLast")
+ let g:explSuffixesLast=1
+endif
+
+" Include separator lines between directories, files, and suffixes?
+if !exists("g:explUseSeparators")
+ let g:explUseSeparators=0
+endif
+
+" Execute file handler
+if !exists("g:explFileHandler")
+ if has("win32")
+ " for Win32 use rundll32
+ function! s:explFileHandlerWin32(fn)
+ exec 'silent !start rundll32 url.dll,FileProtocolHandler "'
+ \ . escape(a:fn, '%#') . '"'
+ endfunction
+ let g:explFileHandler = "<SID>explFileHandlerWin32"
+
+ elseif has("unix")
+ " for KDE use kfmclient, for GNUME use gnome-open
+ if executable("kfmclient")
+ let g:explFileHandlerCmd = "kfmclient exec"
+ elseif executable("gnome-open")
+ let g:explFileHandlerCmd = "gnome-open"
+ else
+ let g:explFileHandlerCmd = ""
+ endif
+ if g:explFileHandlerCmd != ""
+ function! s:explFileHandlerUnix(fn)
+ if &shellredir =~ "%s"
+ let redir = substitute(&shellredir, "%s", "/dev/null", "")
+ else
+ let redir = &shellredir . "/dev/null"
+ endif
+ " Need to escape % and # but not spaces.
+ exec "silent !" . g:explFileHandlerCmd . " '" . escape(a:fn, '%#') . "'" . redir
+ endfunction
+ let g:explFileHandler = "<SID>explFileHandlerUnix"
+ endif
+ endif
+endif
+
+"---
+" script variables - these are the same across all
+" explorer windows
+
+" characters that must be escaped for a regular expression
+let s:escregexp = '/*^$.~\'
+
+" characters that must be escaped for filenames
+if has("dos16") || has("dos32") || has("win16") || has("win32") || has("os2")
+ let s:escfilename = ' %#'
+else
+ let s:escfilename = ' \%#[]'
+endif
+
+
+" A line to use for separating sections
+let s:separator='"---------------------------------------------------'
+
+"---
+" Create commands
+
+if !exists(':Explore')
+ command -n=? -complete=dir Explore :call s:StartExplorer(0, '<a>')
+endif
+if !exists(':Sexplore')
+ command -n=? -complete=dir Sexplore :call s:StartExplorer(1, '<a>')
+endif
+
+"---
+" Start the explorer using the preferences from the global variables
+"
+function! s:StartExplorer(split, start_dir)
+ let startcmd = "edit"
+ if a:start_dir != ""
+ let fname=a:start_dir
+ else
+ let fname = expand("%:p:h")
+ endif
+ if fname == ""
+ let fname = getcwd()
+ endif
+
+ " Create a variable to use if splitting vertically
+ let splitMode = ""
+ if g:explVertical == 1
+ let splitMode = "vertical"
+ endif
+
+ " Save the user's settings for splitbelow and splitright
+ let savesplitbelow = &splitbelow
+ let savesplitright = &splitright
+
+ if a:split || &modified
+ let startcmd = splitMode . " " . g:explWinSize . "new " . fname
+ let &splitbelow = g:explStartBelow
+ let &splitright = g:explStartRight
+ else
+ let startcmd = "edit " . fname
+ endif
+ silent execute startcmd
+ let &splitbelow = savesplitbelow
+ let &splitright = savesplitright
+endfunction
+
+"---
+" This is the main entry for 'editing' a directory
+"
+function! s:EditDir()
+ " Get out of here right away if this isn't a directory!
+ let name = expand("%")
+ if name == ""
+ let name = expand("%:p")
+ endif
+ if !isdirectory(name)
+ return
+ endif
+
+ " Turn off the swapfile, set the buffer type so that it won't get
+ " written, and so that it will get deleted when it gets hidden.
+ setlocal noreadonly modifiable
+ setlocal noswapfile
+ setlocal buftype=nowrite
+ setlocal bufhidden=delete
+ " Don't wrap around long lines
+ setlocal nowrap
+
+ " No need for any insertmode abbreviations, since we don't allow
+ " insertions anyway!
+ iabc <buffer>
+
+ " Long or short listing? Use the global variable the first time
+ " explorer is called, after that use the script variable as set by
+ " the interactive user.
+ if exists("s:longlist")
+ let w:longlist = s:longlist
+ else
+ let w:longlist = g:explDetailedList
+ endif
+
+ " Show keyboard shortcuts?
+ if exists("s:longhelp")
+ let w:longhelp = s:longhelp
+ else
+ let w:longhelp = g:explDetailedHelp
+ endif
+
+ " Set the sort based on the global variables the first time. If you
+ " later change the sort order, it will be retained in the s:sortby
+ " variable for the next time you open explorer
+ let w:sortdirection=1
+ let w:sortdirlabel = ""
+ let w:sorttype = ""
+ if exists("s:sortby")
+ let sortby=s:sortby
+ else
+ let sortby=g:explSortBy
+ endif
+ if sortby =~ "reverse"
+ let w:sortdirection=-1
+ let w:sortdirlabel = "reverse "
+ endif
+ if sortby =~ "date"
+ let w:sorttype = "date"
+ elseif sortby =~ "size"
+ let w:sorttype = "size"
+ else
+ let w:sorttype = "name"
+ endif
+ call s:SetSuffixesLast()
+
+ " If directory is already loaded, don't open it again!
+ if line('$') > 1
+ setlocal readonly nomodifiable
+ return
+ endif
+
+ " Get the complete path to the directory to look at with a slash at
+ " the end. This also removes "/../" and "/./" things.
+ let b:completePath = s:Path(expand("%:p"))
+
+ " Add a slash at the end
+ if b:completePath !~ '/$'
+ let b:completePath = b:completePath . '/'
+ endif
+
+ " escape special characters for exec commands
+ let b:completePathEsc = escape(b:completePath, s:escfilename)
+ let b:parentDirEsc = substitute(b:completePathEsc, '/[^/]*/$', '/', 'g')
+
+ " Set up syntax highlighting
+ " Something wrong with the evaluation of the conditional though...
+ if has("syntax") && exists("g:syntax_on") && !has("syntax_items")
+ syn match browseSynopsis "^\"[ -].*"
+ syn match browseDirectory "[^\"].*/ "
+ syn match browseDirectory "[^\"].*/$"
+ syn match browseCurDir "^\"= .*$"
+ syn match browseSortBy "^\" Sorted by .*$" contains=browseSuffixInfo
+ syn match browseSuffixInfo "(.*)$" contained
+ syn match browseFilter "^\" Not Showing:.*$"
+ syn match browseFiletime "««\d\+$"
+ exec('syn match browseSuffixes "' . b:suffixesHighlight . '"')
+
+ "hi def link browseSynopsis PreProc
+ hi def link browseSynopsis Special
+ hi def link browseDirectory Directory
+ hi def link browseCurDir Statement
+ hi def link browseSortBy String
+ hi def link browseSuffixInfo Type
+ hi def link browseFilter String
+ hi def link browseFiletime Ignore
+ hi def link browseSuffixes Type
+ endif
+
+ " Set filter for hiding files
+ let b:filterFormula=substitute(g:explHideFiles, '\([^\\]\),', '\1\\|', 'g')
+ if b:filterFormula != ''
+ let b:filtering="\nNot showing: " . b:filterFormula
+ else
+ let b:filtering=""
+ endif
+
+ " Show the files
+ call s:ShowDirectory()
+
+ " Set up mappings for this buffer
+ let cpo_save = &cpo
+ set cpo&vim
+ nnoremap <buffer> <cr> :call <SID>EditEntry("","edit")<cr>
+ nnoremap <buffer> - :exec ("silent e " . b:parentDirEsc)<cr>
+ if exists("g:explFileHandler")
+ nnoremap <buffer> x :call <SID>ExecuteEntry()<cr>
+ endif
+ nnoremap <buffer> o :call <SID>OpenEntry()<cr>
+ nnoremap <buffer> O :call <SID>OpenEntryPrevWindow()<cr>
+ nnoremap <buffer> p :call <SID>EditEntry("","pedit")<cr>
+ nnoremap <buffer> ? :call <SID>ToggleHelp()<cr>
+ nnoremap <buffer> a :call <SID>ShowAllFiles()<cr>
+ nnoremap <buffer> R :call <SID>RenameFile()<cr>
+ nnoremap <buffer> D :. call <SID>DeleteFile()<cr>
+ vnoremap <buffer> D :call <SID>DeleteFile()<cr>
+ nnoremap <buffer> i :call <SID>ToggleLongList()<cr>
+ nnoremap <buffer> s :call <SID>SortSelect()<cr>
+ nnoremap <buffer> r :call <SID>SortReverse()<cr>
+ nnoremap <buffer> c :exec "cd ".b:completePathEsc<cr>
+ nnoremap <buffer> <2-leftmouse> :call <SID>DoubleClick()<cr>
+ if exists("*ExplorerCustomMap")
+ call ExplorerCustomMap()
+ endif
+ let &cpo = cpo_save
+
+ " prevent the buffer from being modified
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Determine the number of windows open to this buffer number.
+" Care of Yegappan Lakshman. Thanks!
+fun! s:BufInWindows(bnum)
+ let cnt = 0
+ let winnum = 1
+ while 1
+ let bufnum = winbufnr(winnum)
+ if bufnum < 0
+ break
+ endif
+ if bufnum == a:bnum
+ let cnt = cnt + 1
+ endif
+ let winnum = winnum + 1
+ endwhile
+
+ return cnt
+endfunction
+
+" If this is the only window, open file in a new window
+" Otherwise, open file in the most recently visited window
+"
+function! s:OpenEntryPrevWindow()
+ " Figure out if there are any other windows
+ let n = winnr()
+ wincmd p
+ " No other window? Then open a new one
+ if n == winnr()
+ call s:OpenEntry()
+ " Other windows exist
+ else
+ " Check if the previous buffer is modified - ask if they want to save!
+ " Was it modified, and is it the only window open to this file
+ if &modified && s:BufInWindows(winbufnr(winnr())) < 2
+ let bufname = bufname(winbufnr(winnr()))
+
+ let action=confirm("Save Changes in " . bufname . "?","&Yes\n&No\n&Cancel")
+ " Yes - try to save - if there is an error, cancel
+ if action == 1
+ let v:errmsg = ""
+ silent w
+ if v:errmsg != ""
+ echoerr "Unable to write buffer!"
+ wincmd p
+ return
+ endif
+ " No, abandon changes
+ elseif action == 2
+ set nomodified
+ echomsg "Warning, abandoning changes in " . bufname
+ " Cancel (or any other result), don't do the open
+ else
+ wincmd p
+ return
+ endif
+ endif
+ wincmd p
+ call s:EditEntry("wincmd p","edit")
+ endif
+endfunction
+
+
+"---
+" Open a file or directory in a new window.
+" Use g:explSplitBelow and g:explSplitRight to decide where to put the
+" split window, and resize the original explorer window if it is
+" larger than g:explWinSize
+"
+function! s:OpenEntry()
+ " Are we on a line with a file name?
+ let l = getline(".")
+ if l =~ '^"'
+ return
+ endif
+
+ " Copy window settings to script settings
+ let s:sortby=w:sortdirlabel . w:sorttype
+ let s:longhelp = w:longhelp
+ let s:longlist = w:longlist
+
+ " Get the window number of the explorer window
+ let n = winnr()
+
+ " Save the user's settings for splitbelow and splitright
+ let savesplitbelow=&splitbelow
+ let savesplitright=&splitright
+
+ " Figure out how to do the split based on the user's preferences.
+ " We want to split to the (left,right,top,bottom) of the explorer
+ " window, but we want to extract the screen real-estate from the
+ " window next to the explorer if possible.
+ "
+ " 'there' will be set to a command to move from the split window
+ " back to the explorer window
+ "
+ " 'back' will be set to a command to move from the explorer window
+ " back to the newly split window
+ "
+ " 'right' and 'below' will be set to the settings needed for
+ " splitbelow and splitright IF the explorer is the only window.
+ "
+ if g:explVertical
+ if g:explSplitRight
+ let there="wincmd h"
+ let back ="wincmd l"
+ let right=1
+ let below=0
+ else
+ let there="wincmd l"
+ let back ="wincmd h"
+ let right=0
+ let below=0
+ endif
+ else
+ if g:explSplitBelow
+ let there="wincmd k"
+ let back ="wincmd j"
+ let right=0
+ let below=1
+ else
+ let there="wincmd j"
+ let back ="wincmd k"
+ let right=0
+ let below=0
+ endif
+ endif
+
+ " Get the file name
+ let fn=s:GetFullFileName()
+
+ " Attempt to go to adjacent window
+ exec(back)
+ " If no adjacent window, set splitright and splitbelow appropriately
+ if n == winnr()
+ let &splitright=right
+ let &splitbelow=below
+ else
+ " found adjacent window - invert split direction
+ let &splitright=!right
+ let &splitbelow=!below
+ endif
+
+ " Create a variable to use if splitting vertically
+ let splitMode = ""
+ if g:explVertical == 1
+ let splitMode = "vertical"
+ endif
+
+ " Is it a directory? If so, get a real path to it instead of
+ " relative path. This also removes "/../" and "/./" things.
+ if isdirectory(fn)
+ let fn = fnamemodify(fn, ":p")
+ endif
+
+ " Open the new window
+ exec("silent " . splitMode." sp " . escape(fn,s:escfilename))
+
+ " resize the explorer window if it is larger than the requested size
+ exec(there)
+ if g:explWinSize =~ '[0-9]\+' && winheight("") > g:explWinSize
+ exec("silent ".splitMode." resize ".g:explWinSize)
+ endif
+ exec(back)
+
+ " Restore splitmode settings
+ let &splitbelow=savesplitbelow
+ let &splitright=savesplitright
+
+endfunction
+
+function! s:ExecuteEntry()
+ " Are we on a line with a file name?
+ let l = getline(".")
+ if l =~ '^"'
+ return
+ endif
+
+ " Get the file name
+ let fn = s:GetFullFileName()
+ if has("win32") && fn =~ '^//'
+ let fn = substitute(fn, '/', '\\', 'g')
+ endif
+ exec "call " . g:explFileHandler . "(fn)"
+endfunction
+
+"---
+" Double click with the mouse
+"
+function s:DoubleClick()
+ if expand("<cfile>") =~ '[\\/]$'
+ call s:EditEntry("","edit") " directory: open in this window
+ else
+ call s:OpenEntryPrevWindow() " file: open in another window
+ endif
+endfun
+
+"---
+" Open file or directory in the same window as the explorer is
+" currently in
+"
+function! s:EditEntry(movefirst,editcmd)
+ " Are we on a line with a file name?
+ let l = getline(".")
+ if l =~ '^"'
+ return
+ endif
+
+ " Copy window settings to script settings
+ let s:sortby=w:sortdirlabel . w:sorttype
+ let s:longhelp = w:longhelp
+ let s:longlist = w:longlist
+
+ " Get the file name
+ let fn = s:GetFullFileName()
+ if isdirectory(fn)
+ " This removes "/../" and "/./" things.
+ let fn = fnamemodify(fn, ":p")
+ endif
+
+ " Move to desired window if needed
+ exec(a:movefirst)
+ " Edit the file/dir
+ exec(a:editcmd . " " . escape(fn,s:escfilename))
+endfunction
+
+
+"---
+" Create a regular expression out of the suffixes option for sorting
+" and set a string to indicate whether we are sorting with the
+" suffixes at the end (or the beginning)
+"
+function! s:SetSuffixesLast()
+ let b:suffixesRegexp = '\(' . substitute(escape(&suffixes,s:escregexp),',','\\|','g') . '\)$'
+ let b:suffixesHighlight = '^[^"].*\(' . substitute(escape(&suffixes,s:escregexp),',','\\|','g') . '\)\( \|$\)'
+ if has("fname_case")
+ let b:suffixesRegexp = '\C' . b:suffixesRegexp
+ let b:suffixesHighlight = '\C' . b:suffixesHighlight
+ else
+ let b:suffixesRegexp = '\c' . b:suffixesRegexp
+ let b:suffixesHighlight = '\c' . b:suffixesHighlight
+ endif
+ if g:explSuffixesLast > 0 && &suffixes != ""
+ let b:suffixeslast=" (" . &suffixes . " at end of list)"
+ elseif g:explSuffixesLast < 0 && &suffixes != ""
+ let b:suffixeslast=" (" . &suffixes . " at start of list)"
+ else
+ let b:suffixeslast=" ('suffixes' mixed with files)"
+ endif
+endfunction
+
+"---
+" Show the header and contents of the directory
+"
+function! s:ShowDirectory()
+ "Delete all lines
+ 1,$d _
+ " Prevent a report of our actions from showing up
+ let oldRep=&report
+ let save_sc = &sc
+ set report=10000 nosc
+
+ " Add the header
+ call s:AddHeader()
+ $d _
+
+ " Display the files
+
+ " Get a list of all the files
+ let files = s:Path(glob(b:completePathEsc . "*"))
+ if files != "" && files !~ "\n$"
+ let files = files . "\n"
+ endif
+
+ " Add the dot files now, making sure "." is not included!
+ let files = files . substitute(s:Path(glob(b:completePathEsc . ".*")), "[^\n]*/./\\=\n", '' , '')
+ if files != "" && files !~ "\n$"
+ let files = files . "\n"
+ endif
+
+ " Are there any files left after filtering?
+ if files != ""
+ normal! mt
+ put =files
+ let b:maxFileLen = 0
+ 0
+ /^"=/+1,$g/^/call s:MarkDirs()
+ normal! `t
+ call s:AddFileInfo()
+ endif
+
+ normal! zz
+
+ " Move to first directory in the listing
+ 0
+ /^"=/+1
+
+ " Do the sort
+ call s:SortListing("Loaded contents of ".b:completePath.". ")
+
+ " Move to first directory in the listing
+ 0
+ /^"=/+1
+
+ let &report=oldRep
+ let &sc = save_sc
+
+endfunction
+
+"---
+" Mark which items are directories - called once for each file name
+" must be used only when size/date is not displayed
+"
+function! s:MarkDirs()
+ let oldRep=&report
+ set report=1000
+ "Remove slashes if added
+ s;/$;;e
+ "Removes all the leading slashes and adds slashes at the end of directories
+ s;^.*\\\([^\\]*\)$;\1;e
+ s;^.*/\([^/]*\)$;\1;e
+ "normal! ^
+ let currLine=getline(".")
+ if isdirectory(b:completePath . currLine)
+ s;$;/;
+ let fileLen=strlen(currLine)+1
+ else
+ let fileLen=strlen(currLine)
+ if (b:filterFormula!="") && (currLine =~ b:filterFormula)
+ " Don't show the file if it is to be filtered.
+ d _
+ endif
+ endif
+ if fileLen > b:maxFileLen
+ let b:maxFileLen=fileLen
+ endif
+ let &report=oldRep
+endfunction
+
+"---
+" Make sure a path has proper form
+"
+function! s:Path(p)
+ if has("dos16") || has("dos32") || has("win16") || has("win32") || has("os2")
+ return substitute(a:p,'\\','/','g')
+ else
+ return a:p
+ endif
+endfunction
+
+"---
+" Extract the file name from a line in several different forms
+"
+function! s:GetFullFileNameEsc()
+ return s:EscapeFilename(s:GetFullFileName())
+endfunction
+
+function! s:GetFileNameEsc()
+ return s:EscapeFilename(s:GetFileName())
+endfunction
+
+function! s:EscapeFilename(name)
+ return escape(a:name,s:escfilename)
+endfunction
+
+
+function! s:GetFullFileName()
+ return s:ExtractFullFileName(getline("."))
+endfunction
+
+function! s:GetFileName()
+ return s:ExtractFileName(getline("."))
+endfunction
+
+function! s:ExtractFullFileName(line)
+ let fn=s:ExtractFileName(a:line)
+ if fn == '/'
+ return b:completePath
+ else
+ return b:completePath . s:ExtractFileName(a:line)
+ endif
+endfunction
+
+function! s:ExtractFileName(line)
+ return substitute(strpart(a:line,0,b:maxFileLen),'\s\+$','','')
+endfunction
+
+"---
+" Get the size of the file
+function! s:ExtractFileSize(line)
+ if (w:longlist==0)
+ return getfsize(s:ExtractFileName(a:line))
+ else
+ return strpart(a:line,b:maxFileLen+2,b:maxFileSizeLen)
+ endif
+endfunction
+
+"---
+" Get the date of the file as a number
+function! s:ExtractFileDate(line)
+ if w:longlist==0
+ return getftime(s:ExtractFileName(a:line))
+ else
+ return strpart(matchstr(strpart(a:line,b:maxFileLen+b:maxFileSizeLen+4),"««.*"),2) + 0
+ endif
+endfunction
+
+
+"---
+" Add the header with help information
+"
+function! s:AddHeader()
+ let save_f=@f
+ 1
+ if w:longhelp==1
+ let @f="\" <enter> : open file or directory\n"
+ \."\" o : open new window for file/directory\n"
+ \."\" O : open file in previously visited window\n"
+ \."\" p : preview the file\n"
+ if exists("g:explFileHandler")
+ let @f=@f."\" x : execute file or directory\n"
+ endif
+ let @f=@f
+ \."\" i : toggle size/date listing\n"
+ \."\" s : select sort field r : reverse sort\n"
+ \."\" - : go up one level c : cd to this dir\n"
+ \."\" R : rename file D : delete file\n"
+ \."\" :help file-explorer for detailed help\n"
+ else
+ let @f="\" Press ? for keyboard shortcuts\n"
+ endif
+ let @f=@f."\" Sorted by ".w:sortdirlabel.w:sorttype.b:suffixeslast.b:filtering."\n"
+ let @f=@f."\"= ".b:completePath."\n"
+ put! f
+ let @f=save_f
+endfunction
+
+
+"---
+" Show the size and date for each file
+"
+function! s:AddFileInfo()
+ let save_sc = &sc
+ set nosc
+
+ " Mark our starting point
+ normal! mt
+
+ call s:RemoveSeparators()
+
+ " Remove all info
+ 0
+ /^"=/+1,$g/^/call setline(line("."),s:GetFileName())
+
+ " Add info if requested
+ if w:longlist==1
+ " Add file size and calculate maximum length of file size field
+ let b:maxFileSizeLen = 0
+ 0
+ /^"=/+1,$g/^/let fn=s:GetFullFileName() |
+ \let fileSize=getfsize(fn) |
+ \let fileSizeLen=strlen(fileSize) |
+ \if fileSizeLen > b:maxFileSizeLen |
+ \ let b:maxFileSizeLen = fileSizeLen |
+ \endif |
+ \exec "normal! ".(b:maxFileLen-strlen(getline("."))+2)."A \<esc>" |
+ \exec 's/$/'.fileSize.'/'
+
+ " Right justify the file sizes and
+ " add file modification date
+ 0
+ /^"=/+1,$g/^/let fn=s:GetFullFileName() |
+ \exec "normal! A \<esc>$b".(b:maxFileLen+b:maxFileSizeLen-strlen(getline("."))+3)."i \<esc>\"_x" |
+ \exec 's/$/ '.escape(s:FileModDate(fn), '/').'/'
+ setlocal nomodified
+ endif
+
+ call s:AddSeparators()
+
+ " return to start
+ normal! `t
+
+ let &sc = save_sc
+endfunction
+
+
+"----
+" Get the modification time for a file
+"
+function! s:FileModDate(name)
+ let filetime=getftime(a:name)
+ if filetime > 0
+ return strftime(g:explDateFormat,filetime) . " ««" . filetime
+ else
+ return ""
+ endif
+endfunction
+
+"---
+" Delete a file or files
+"
+function! s:DeleteFile() range
+ let oldRep = &report
+ let &report = 1000
+
+ let filesDeleted = 0
+ let stopDel = 0
+ let delAll = 0
+ let currLine = a:firstline
+ let lastLine = a:lastline
+ setlocal noreadonly modifiable
+
+ while ((currLine <= lastLine) && (stopDel==0))
+ exec(currLine)
+ let fileName=s:GetFullFileName()
+ if isdirectory(fileName)
+ echo fileName." : Directory deletion not supported yet"
+ let currLine = currLine + 1
+ else
+ if delAll == 0
+ let sure=input("Delete ".fileName." (y/n/a/q)? ")
+ if sure=="a"
+ let delAll = 1
+ endif
+ endif
+ if (sure=="y") || (sure=="a")
+ let success=delete(fileName)
+ if success!=0
+ exec (" ")
+ echo "\nCannot delete ".fileName
+ let currLine = currLine + 1
+ else
+ d _
+ let filesDeleted = filesDeleted + 1
+ let lastLine = lastLine - 1
+ endif
+ elseif sure=="q"
+ let stopDel = 1
+ elseif sure=="n"
+ let currLine = currLine + 1
+ endif
+ endif
+ endwhile
+ echo "\n".filesDeleted." files deleted"
+ let &report = oldRep
+ setlocal nomodified
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Rename a file
+"
+function! s:RenameFile()
+ let fileName=s:GetFullFileName()
+ setlocal noreadonly modifiable
+ if isdirectory(fileName)
+ echo "Directory renaming not supported yet"
+ elseif filereadable(fileName)
+ let altName=input("Rename ".fileName." to : ")
+ echo " "
+ if altName==""
+ setlocal readonly nomodifiable
+ return
+ endif
+ let success=rename(fileName, b:completePath.altName)
+ if success!=0
+ echo "Cannot rename ".fileName. " to ".altName
+ else
+ echo "Renamed ".fileName." to ".altName
+ let oldRep=&report
+ set report=1000
+ e!
+ let &report=oldRep
+ endif
+ endif
+ setlocal nomodified
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Toggle between short and long help
+"
+function! s:ToggleHelp()
+ if exists("w:longhelp") && w:longhelp==0
+ let w:longhelp=1
+ let s:longhelp=1
+ else
+ let w:longhelp=0
+ let s:longhelp=0
+ endif
+ " Allow modification
+ setlocal noreadonly modifiable
+ call s:UpdateHeader()
+ " Disallow modification
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Update the header
+"
+function! s:UpdateHeader()
+ let oldRep=&report
+ set report=10000
+ " Save position
+ normal! mt
+ " Remove old header
+ 0
+ 1,/^"=/ d _
+ " Add new header
+ call s:AddHeader()
+ " Go back where we came from if possible
+ 0
+ if line("'t") != 0
+ normal! `t
+ endif
+
+ let &report=oldRep
+ setlocal nomodified
+endfunction
+
+"---
+" Toggle long vs. short listing
+"
+function! s:ToggleLongList()
+ setlocal noreadonly modifiable
+ if exists("w:longlist") && w:longlist==1
+ let w:longlist=0
+ let s:longlist=0
+ else
+ let w:longlist=1
+ let s:longlist=1
+ endif
+ call s:AddFileInfo()
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Show all files - remove filtering
+"
+function! s:ShowAllFiles()
+ setlocal noreadonly modifiable
+ let b:filterFormula=""
+ let b:filtering=""
+ call s:ShowDirectory()
+ setlocal readonly nomodifiable
+endfunction
+
+"---
+" Figure out what section we are in
+"
+function! s:GetSection()
+ let fn=s:GetFileName()
+ let section="file"
+ if fn =~ '/$'
+ let section="directory"
+ elseif fn =~ b:suffixesRegexp
+ let section="suffixes"
+ endif
+ return section
+endfunction
+
+"---
+" Remove section separators
+"
+function! s:RemoveSeparators()
+ if !g:explUseSeparators
+ return
+ endif
+ 0
+ silent! exec '/^"=/+1,$g/^' . s:separator . "/d _"
+endfunction
+
+"---
+" Add section separators
+" between directories and files if they are separated
+" between files and 'suffixes' files if they are separated
+function! s:AddSeparators()
+ if !g:explUseSeparators
+ return
+ endif
+ 0
+ /^"=/+1
+ let lastsec=s:GetSection()
+ +1
+ .,$g/^/let sec=s:GetSection() |
+ \if g:explDirsFirst != 0 && sec != lastsec &&
+ \ (lastsec == "directory" || sec == "directory") |
+ \ exec "normal! I" . s:separator . "\n\<esc>" |
+ \elseif g:explSuffixesLast != 0 && sec != lastsec &&
+ \ (lastsec == "suffixes" || sec == "suffixes") |
+ \ exec "normal! I" . s:separator . "\n\<esc>" |
+ \endif |
+ \let lastsec=sec
+endfunction
+
+"---
+" General string comparison function
+"
+function! s:StrCmp(line1, line2, direction)
+ if a:line1 < a:line2
+ return -a:direction
+ elseif a:line1 > a:line2
+ return a:direction
+ else
+ return 0
+ endif
+endfunction
+
+"---
+" Function for use with Sort(), to compare the file names
+" Default sort is to put in alphabetical order, but with all directory
+" names before all file names
+"
+function! s:FileNameCmp(line1, line2, direction)
+ let f1=s:ExtractFileName(a:line1)
+ let f2=s:ExtractFileName(a:line2)
+
+ " Put directory names before file names
+ if (g:explDirsFirst != 0) && (f1 =~ '\/$') && (f2 !~ '\/$')
+ return -g:explDirsFirst
+ elseif (g:explDirsFirst != 0) && (f1 !~ '\/$') && (f2 =~ '\/$')
+ return g:explDirsFirst
+ elseif (g:explSuffixesLast != 0) && (f1 =~ b:suffixesRegexp) && (f2 !~ b:suffixesRegexp)
+ return g:explSuffixesLast
+ elseif (g:explSuffixesLast != 0) && (f1 !~ b:suffixesRegexp) && (f2 =~ b:suffixesRegexp)
+ return -g:explSuffixesLast
+ else
+ return s:StrCmp(substitute(f1, "/$", "", ""), substitute(f2, "/$", "", ""), a:direction)
+ endif
+
+endfunction
+
+"---
+" Function for use with Sort(), to compare the file modification dates
+" Default sort is to put NEWEST files first. Reverse will put oldest
+" files first
+"
+function! s:FileDateCmp(line1, line2, direction)
+ let f1=s:ExtractFileName(a:line1)
+ let f2=s:ExtractFileName(a:line2)
+ let t1=s:ExtractFileDate(a:line1)
+ let t2=s:ExtractFileDate(a:line2)
+
+ " Put directory names before file names
+ if (g:explDirsFirst != 0) && (f1 =~ '\/$') && (f2 !~ '\/$')
+ return -g:explDirsFirst
+ elseif (g:explDirsFirst != 0) && (f1 !~ '\/$') && (f2 =~ '\/$')
+ return g:explDirsFirst
+ elseif (g:explSuffixesLast != 0) && (f1 =~ b:suffixesRegexp) && (f2 !~ b:suffixesRegexp)
+ return g:explSuffixesLast
+ elseif (g:explSuffixesLast != 0) && (f1 !~ b:suffixesRegexp) && (f2 =~ b:suffixesRegexp)
+ return -g:explSuffixesLast
+ elseif t1 > t2
+ return -a:direction
+ elseif t1 < t2
+ return a:direction
+ else
+ return s:StrCmp(substitute(f1, "/$", "", ""), substitute(f2, "/$", "", ""), 1)
+ endif
+endfunction
+
+"---
+" Function for use with Sort(), to compare the file sizes
+" Default sort is to put largest files first. Reverse will put
+" smallest files first
+"
+function! s:FileSizeCmp(line1, line2, direction)
+ let f1=s:ExtractFileName(a:line1)
+ let f2=s:ExtractFileName(a:line2)
+ let s1=s:ExtractFileSize(a:line1)
+ let s2=s:ExtractFileSize(a:line2)
+
+ if (g:explDirsFirst != 0) && (f1 =~ '\/$') && (f2 !~ '\/$')
+ return -g:explDirsFirst
+ elseif (g:explDirsFirst != 0) && (f1 !~ '\/$') && (f2 =~ '\/$')
+ return g:explDirsFirst
+ elseif (g:explSuffixesLast != 0) && (f1 =~ b:suffixesRegexp) && (f2 !~ b:suffixesRegexp)
+ return g:explSuffixesLast
+ elseif (g:explSuffixesLast != 0) && (f1 !~ b:suffixesRegexp) && (f2 =~ b:suffixesRegexp)
+ return -g:explSuffixesLast
+ elseif s1 > s2
+ return -a:direction
+ elseif s1 < s2
+ return a:direction
+ else
+ return s:StrCmp(substitute(f1, "/$", "", ""), substitute(f2, "/$", "", ""), 1)
+ endif
+endfunction
+
+"---
+" Sort lines. SortR() is called recursively.
+"
+function! s:SortR(start, end, cmp, direction)
+
+ " Bottom of the recursion if start reaches end
+ if a:start >= a:end
+ return
+ endif
+ "
+ let partition = a:start - 1
+ let middle = partition
+ let partStr = getline((a:start + a:end) / 2)
+ let i = a:start
+ while (i <= a:end)
+ let str = getline(i)
+ exec "let result = " . a:cmp . "(str, partStr, " . a:direction . ")"
+ if result <= 0
+ " Need to put it before the partition. Swap lines i and partition.
+ let partition = partition + 1
+ if result == 0
+ let middle = partition
+ endif
+ if i != partition
+ let str2 = getline(partition)
+ call setline(i, str2)
+ call setline(partition, str)
+ endif
+ endif
+ let i = i + 1
+ endwhile
+
+ " Now we have a pointer to the "middle" element, as far as partitioning
+ " goes, which could be anywhere before the partition. Make sure it is at
+ " the end of the partition.
+ if middle != partition
+ let str = getline(middle)
+ let str2 = getline(partition)
+ call setline(middle, str2)
+ call setline(partition, str)
+ endif
+ call s:SortR(a:start, partition - 1, a:cmp,a:direction)
+ call s:SortR(partition + 1, a:end, a:cmp,a:direction)
+endfunction
+
+"---
+" To Sort a range of lines, pass the range to Sort() along with the name of a
+" function that will compare two lines.
+"
+function! s:Sort(cmp,direction) range
+ call s:SortR(a:firstline, a:lastline, a:cmp, a:direction)
+endfunction
+
+"---
+" Reverse the current sort order
+"
+function! s:SortReverse()
+ if exists("w:sortdirection") && w:sortdirection == -1
+ let w:sortdirection = 1
+ let w:sortdirlabel = ""
+ else
+ let w:sortdirection = -1
+ let w:sortdirlabel = "reverse "
+ endif
+ let s:sortby=w:sortdirlabel . w:sorttype
+ call s:SortListing("")
+endfunction
+
+"---
+" Toggle through the different sort orders
+"
+function! s:SortSelect()
+ " Select the next sort option
+ if !exists("w:sorttype")
+ let w:sorttype="name"
+ elseif w:sorttype == "name"
+ let w:sorttype="size"
+ elseif w:sorttype == "size"
+ let w:sorttype="date"
+ else
+ let w:sorttype="name"
+ endif
+ let s:sortby=w:sortdirlabel . w:sorttype
+ call s:SortListing("")
+endfunction
+
+"---
+" Sort the file listing
+"
+function! s:SortListing(msg)
+ " Save the line we start on so we can go back there when done
+ " sorting
+ let startline = getline(".")
+ let col=col(".")
+ let lin=line(".")
+
+ " Allow modification
+ setlocal noreadonly modifiable
+
+ " Send a message about what we're doing
+ " Don't really need this - it can cause hit return prompts
+" echo a:msg . "Sorting by" . w:sortdirlabel . w:sorttype
+
+ " Create a regular expression out of the suffixes option in case
+ " we need it.
+ call s:SetSuffixesLast()
+
+ " Remove section separators
+ call s:RemoveSeparators()
+
+ " Do the sort
+ 0
+ if w:sorttype == "size"
+ /^"=/+1,$call s:Sort("s:FileSizeCmp",w:sortdirection)
+ elseif w:sorttype == "date"
+ /^"=/+1,$call s:Sort("s:FileDateCmp",w:sortdirection)
+ else
+ /^"=/+1,$call s:Sort("s:FileNameCmp",w:sortdirection)
+ endif
+
+ " Replace the header with updated information
+ call s:UpdateHeader()
+
+ " Restore section separators
+ call s:AddSeparators()
+
+ " Return to the position we started on
+ 0
+ if search('\m^'.escape(startline,s:escregexp),'W') <= 0
+ execute lin
+ endif
+ execute "normal!" col . "|"
+
+ " Disallow modification
+ setlocal nomodified
+ setlocal readonly nomodifiable
+
+endfunction
+
+"---
+" Setup for editing directories after starting up by going to each window.
+" Required for "vim -o filename dirname"
+"
+function! s:EditAll()
+ if winbufnr(2) == -1
+ return
+ endif
+ let cmd = winrestcmd()
+ let curwin = winnr()
+ while 1
+ wincmd w
+ if winnr() == curwin
+ break
+ endif
+ call s:EditDir()
+ endwhile
+ exe cmd
+endfunction
+
+"---
+" Set up the autocommand to allow directories to be edited
+"
+augroup fileExplorer
+ au!
+ " Fill the window when entering the buffer; ":edit dir".
+ au BufEnter * call s:EditDir()
+ " Set the window variables after a split; ":split".
+ au WinEnter * if !exists("w:sortdirection") | call s:EditDir() | endif
+ " Fill the windows after Vim has started up.
+ au VimEnter * call s:EditAll()
+augroup end
+
+" restore 'cpo'
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim
new file mode 100644
index 000000000..39b0cbc36
--- /dev/null
+++ b/runtime/plugin/gzip.vim
@@ -0,0 +1,157 @@
+" Vim plugin for editing compressed files.
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Jan 12
+
+" Exit quickly when:
+" - this plugin was already loaded
+" - when 'compatible' is set
+" - some autocommands are already taking care of compressed files
+if exists("loaded_gzip") || &cp || exists("#BufReadPre#*.gz")
+ finish
+endif
+let loaded_gzip = 1
+
+augroup gzip
+ " Remove all gzip autocommands
+ au!
+
+ " Enable editing of gzipped files
+ " set binary mode before reading the file
+ " use "gzip -d", gunzip isn't always available
+ autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin
+ autocmd BufReadPost,FileReadPost *.gz call s:read("gzip -dn")
+ autocmd BufReadPost,FileReadPost *.bz2 call s:read("bzip2 -d")
+ autocmd BufReadPost,FileReadPost *.Z call s:read("uncompress")
+ autocmd BufWritePost,FileWritePost *.gz call s:write("gzip")
+ autocmd BufWritePost,FileWritePost *.bz2 call s:write("bzip2")
+ autocmd BufWritePost,FileWritePost *.Z call s:write("compress -f")
+ autocmd FileAppendPre *.gz call s:appre("gzip -dn")
+ autocmd FileAppendPre *.bz2 call s:appre("bzip2 -d")
+ autocmd FileAppendPre *.Z call s:appre("uncompress")
+ autocmd FileAppendPost *.gz call s:write("gzip")
+ autocmd FileAppendPost *.bz2 call s:write("bzip2")
+ autocmd FileAppendPost *.Z call s:write("compress -f")
+augroup END
+
+" Function to check that executing "cmd [-f]" works.
+" The result is cached in s:have_"cmd" for speed.
+fun s:check(cmd)
+ let name = substitute(a:cmd, '\(\S*\).*', '\1', '')
+ if !exists("s:have_" . name)
+ let e = executable(name)
+ if e < 0
+ let r = system(name . " --version")
+ let e = (r !~ "not found" && r != "")
+ endif
+ exe "let s:have_" . name . "=" . e
+ endif
+ exe "return s:have_" . name
+endfun
+
+" After reading compressed file: Uncompress text in buffer with "cmd"
+fun s:read(cmd)
+ " don't do anything if the cmd is not supported
+ if !s:check(a:cmd)
+ return
+ endif
+ " make 'patchmode' empty, we don't want a copy of the written file
+ let pm_save = &pm
+ set pm=
+ " remove 'a' and 'A' from 'cpo' to avoid the alternate file changes
+ let cpo_save = &cpo
+ set cpo-=a cpo-=A
+ " set 'modifiable'
+ let ma_save = &ma
+ setlocal ma
+ " when filtering the whole buffer, it will become empty
+ let empty = line("'[") == 1 && line("']") == line("$")
+ let tmp = tempname()
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+ execute "silent '[,']w " . tmpe
+ " uncompress the temp file: call system("gzip -dn tmp.gz")
+ call system(a:cmd . " " . tmpe)
+ " delete the compressed lines; remember the line number
+ let l = line("'[") - 1
+ if exists(":lockmarks")
+ lockmarks '[,']d _
+ else
+ '[,']d _
+ endif
+ " read in the uncompressed lines "'[-1r tmp"
+ setlocal nobin
+ if exists(":lockmarks")
+ execute "silent lockmarks " . l . "r " . tmp
+ else
+ execute "silent " . l . "r " . tmp
+ endif
+
+ " if buffer became empty, delete trailing blank line
+ if empty
+ silent $delete _
+ 1
+ endif
+ " delete the temp file and the used buffers
+ call delete(tmp)
+ silent! exe "bwipe " . tmp
+ silent! exe "bwipe " . tmpe
+ let &pm = pm_save
+ let &cpo = cpo_save
+ let &l:ma = ma_save
+ " When uncompressed the whole buffer, do autocommands
+ if empty
+ if &verbose >= 8
+ execute "doau BufReadPost " . expand("%:r")
+ else
+ execute "silent! doau BufReadPost " . expand("%:r")
+ endif
+ endif
+endfun
+
+" After writing compressed file: Compress written file with "cmd"
+fun s:write(cmd)
+ " don't do anything if the cmd is not supported
+ if s:check(a:cmd)
+ " Rename the file before compressing it.
+ let nm = expand("<afile>")
+ let nmt = s:tempname(nm)
+ if rename(nm, nmt) == 0
+ call system(a:cmd . " " . nmt)
+ call rename(nmt . "." . expand("<afile>:e"), nm)
+ endif
+ endif
+endfun
+
+" Before appending to compressed file: Uncompress file with "cmd"
+fun s:appre(cmd)
+ " don't do anything if the cmd is not supported
+ if s:check(a:cmd)
+ " Rename to a weird name to avoid the risk of overwriting another file
+ let nm = expand("<afile>")
+ let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
+ let nmte = nmt . "." . expand("<afile>:e")
+ if rename(nm, nmte) == 0
+ if &patchmode != "" && getfsize(nm . &patchmode) == -1
+ " Create patchmode file by creating the decompressed file new
+ call system(a:cmd . " -c " . nmte . " > " . nmt)
+ call rename(nmte, nm . &patchmode)
+ else
+ call system(a:cmd . " " . nmte)
+ endif
+ call rename(nmt, nm)
+ endif
+ endif
+endfun
+
+" find a file name for the file to be compressed. Use "name" without an
+" extension if possible. Otherwise use a weird name to avoid overwriting an
+" existing file.
+fun s:tempname(name)
+ let fn = fnamemodify(a:name, ":r")
+ if !filereadable(fn) && !isdirectory(fn)
+ return fn
+ endif
+ return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
+endfun
+
+" vim: set sw=2 :
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
new file mode 100644
index 000000000..d3058c55d
--- /dev/null
+++ b/runtime/plugin/netrw.vim
@@ -0,0 +1,1160 @@
+" netrw.vim: (global plugin) Handles file transfer across a network
+" Last Change: Jun 04, 2004
+" Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz>
+" Version: 44
+" License: Vim License (see vim's :help license)
+"
+" But be doers of the word, and not only hearers, deluding your own selves
+" (James 1:22 RSV)
+" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+" Exit quickly when already loaded or when 'compatible' is set.
+if exists("loaded_netrw") || &cp
+ finish
+endif
+let loaded_netrw = "v44"
+let s:save_cpo = &cpo
+set cpo&vim
+
+" ---------------------------------------------------------------------
+" Default values for global netrw variables {{{1
+if !exists("g:netrw_ftpmode")
+ let g:netrw_ftpmode= "binary"
+endif
+if !exists("g:netrw_win95ftp")
+ let g:netrw_win95ftp= 1
+endif
+if !exists("g:netrw_cygwin")
+ if has("win32")
+ let g:netrw_cygwin= 1
+ else
+ let g:netrw_cygwin= 0
+ endif
+endif
+
+" ---------------------------------------------------------------------
+" Default values for global protocol variables {{{1
+if !exists("g:netrw_rcp_cmd")
+ let g:netrw_rcp_cmd = "rcp"
+endif
+if !exists("g:netrw_ftp_cmd")
+ let g:netrw_ftp_cmd = "ftp"
+endif
+if !exists("g:netrw_scp_cmd")
+ let g:netrw_scp_cmd = "scp -q"
+endif
+if !exists("g:netrw_sftp_cmd")
+ let g:netrw_sftp_cmd = "sftp"
+endif
+if !exists("g:netrw_http_cmd")
+ if executable("wget")
+ let g:netrw_http_cmd = "wget -q -O"
+ elseif executable("fetch")
+ let g:netrw_http_cmd = "fetch -o"
+ else
+ let g:netrw_http_cmd = ""
+ endif
+endif
+if !exists("g:netrw_dav_cmd")
+ let g:netrw_dav_cmd = "cadaver"
+endif
+if !exists("g:netrw_rsync_cmd")
+ let g:netrw_rsync_cmd = "rsync"
+endif
+if !exists("g:netrw_fetch_cmd")
+ if executable("fetch")
+ let g:netrw_fetch_cmd = "fetch -o"
+ else
+ let g:netrw_fetch_cmd = ""
+ endif
+endif
+
+if has("win32")
+ \ && exists("g:netrw_use_nt_rcp")
+ \ && g:netrw_use_nt_rcp
+ \ && executable( $SystemRoot .'/system32/rcp.exe')
+ let s:netrw_has_nt_rcp = 1
+ let s:netrw_rcpmode = '-b'
+ else
+ let s:netrw_has_nt_rcp = 0
+ let s:netrw_rcpmode = ''
+endif
+
+" ---------------------------------------------------------------------
+" Transparency Support: {{{1
+" Auto-detection for ftp://*, rcp://*, scp://*, sftp://*, http://*, dav://*,
+" and rsync://*
+" Should make file transfers across networks transparent. Currently I haven't
+" supported appends. Hey, gotta leave something for a future <netrw.vim>!
+if version >= 600
+ augroup Network
+ au!
+ if has("win32")
+ au BufReadCmd file://* exe "doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+ else
+ au BufReadCmd file:///* exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+ au BufReadCmd file://localhost/* exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+ endif
+ au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
+ au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "doau BufReadPre ".expand("<afile>")|exe "Nread " .expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
+ au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "Nwrite " .expand("<afile>")|call <SID>NetRestorePosn()
+ augroup END
+endif
+
+" ------------------------------------------------------------------------
+" Commands: :Nread, :Nwrite, and :NetUserPass {{{1
+com! -nargs=* Nread call <SID>NetSavePosn()<bar>call <SID>NetRead(<f-args>)<bar>call <SID>NetRestorePosn()
+com! -range=% -nargs=* Nwrite call <SID>NetSavePosn()<bar><line1>,<line2>call <SID>NetWrite(<f-args>)<bar>call <SID>NetRestorePosn()
+com! -nargs=* NetUserPass call NetUserPass(<f-args>)
+
+" ------------------------------------------------------------------------
+" NetSavePosn: saves position of cursor on screen {{{1
+fun! s:NetSavePosn()
+" call Dfunc("NetSavePosn()")
+ " Save current line and column
+ let s:netrw_winnr= winnr()
+ let s:netrw_line = line(".")
+ let s:netrw_col = virtcol(".")
+
+ " Save top-of-screen line
+ norm! H0
+ let s:netrw_hline= line(".")
+
+ call s:NetRestorePosn()
+" call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+endfun
+
+" ------------------------------------------------------------------------
+" NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
+fun! <SID>NetRestorePosn()
+" call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+
+ exe "silent! ".s:netrw_winnr."wincmd w"
+ if v:shell_error == 0
+ " as suggested by Bram M: redraw on no error
+ " allows protocol error messages to remain visible
+ redraw!
+ endif
+ " restore top-of-screen line
+ exe "norm! ".s:netrw_hline."G0z\<CR>"
+ " restore position
+ exe "norm! ".s:netrw_line."G0".s:netrw_col."\<bar>"
+
+" call Dret("NetRestorePosn")
+endfun
+
+" ------------------------------------------------------------------------
+" NetRead: responsible for reading a file over the net {{{1
+fun! s:NetRead(...)
+" call Dfunc("NetRead(a:1<".a:1.">)")
+
+ " save options
+ call s:NetOptionSave()
+
+ " get name of a temporary file
+ let tmpfile= tempname()
+
+ " Special Exception: if a file is named "0r", then
+ " "0r" will be used to read the
+ " following files instead of "r"
+ if a:0 == 0
+ let readcmd= "r"
+ let ichoice= 0
+ elseif a:1 == "0r"
+ let readcmd = "0r"
+ let ichoice = 2
+ else
+ let readcmd = "r"
+ let ichoice = 1
+ endif
+
+ while ichoice <= a:0
+
+ " 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
+" call Decho("NetRead1: choice<" . choice . ">")
+
+ " Reconstruct Choice if choice starts with '"'
+ if match(choice,"?") == 0
+ echo 'NetRead Usage:'
+ echo ':Nread machine:path uses rcp'
+ echo ':Nread "machine path" uses ftp with <.netrc>'
+ echo ':Nread "machine id password path" uses ftp'
+ echo ':Nread dav://machine[:port]/path uses cadaver'
+ echo ':Nread fetch://machine/path uses fetch'
+ echo ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
+ echo ':Nread http://[user@]machine/path uses http wget'
+ echo ':Nread rcp://[user@]machine/path uses rcp'
+ echo ':Nread rsync://machine[:port]/path uses rsync'
+ echo ':Nread scp://[user@]machine[[:#]port]/path uses scp'
+ echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+ break
+ elseif match(choice,"^\"") != -1
+" 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 = ""
+
+ while match(choice,"\"$") == -1
+ let wholechoice = wholechoice . " " . choice
+ let ichoice = ichoice + 1
+ if ichoice > a:0
+ echoerr "Unbalanced string in filename '". wholechoice ."'"
+" call Dret("NetRead")
+ return
+ endif
+ let choice= a:{ichoice}
+ endwhile
+ let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+ endif
+ endif
+ endif
+" call Decho("NetRead2: choice<" . choice . ">")
+ let ichoice= ichoice + 1
+
+ " fix up windows urls
+ if has("win32")
+ let choice = substitute(choice,'\\','/','ge')
+" call Decho("fixing up windows url to <".choice.">")
+ exe 'lcd ' . fnamemodify(tmpfile,':h')
+ let tmpfile = fnamemodify(tmpfile,':t')
+ endif
+
+ " Determine method of read (ftp, rcp, etc)
+ call s:NetMethod(choice)
+
+ " ============
+ " Perform Read
+ " ============
+
+ ".........................................
+ " rcp: Method #1
+ if b:netrw_method == 1 " read with rcp
+" call Decho("read via rcp (method #1)")
+ " ER: noting 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
+ endif
+ endif
+" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe "!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + <.netrc>: Method #2
+ elseif b:netrw_method == 2 " read with ftp + <.netrc>
+" call Decho("read via ftp+.netrc (method #2)")
+ let netrw_fname= b:netrw_fname
+ new
+ set ff=unix
+ exe "put ='".g:netrw_ftpmode."'"
+ exe "put ='get ".netrw_fname." ".tmpfile."'"
+ if exists("g:netrw_port") && g:netrw_port != ""
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+ exe "%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+ else
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+ exe "%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+ endif
+ " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+ if getline(1) !~ "^$"
+ echoerr getline(1)
+ endif
+ bd!
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + machine,id,passwd,filename: Method #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= b:netrw_fname
+ new
+ set ff=unix
+ if exists("g:netrw_port") && g:netrw_port != ""
+ put ='open '.g:netrw_machine.' '.g:netrw_port
+ else
+ put ='open '.g:netrw_machine
+ endif
+
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ put =g:netrw_uid
+ put =g:netrw_passwd
+ else
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+ endif
+
+ if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+ put =g:netrw_ftpmode
+ endif
+ put ='get '.netrw_fname.' '.tmpfile
+
+ " 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
+" call Decho('performing ftp -i -n')
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+ exe "%!".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) !~ "^$"
+ echoerr getline(1)
+ endif
+ bd!
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " scp: Method #4
+ 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= " -P ".g:netrw_port
+ else
+ let useport= ""
+ endif
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe "!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe "!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ elseif b:netrw_method == 5 " read with http (wget)
+" call Decho("read via http (method #5)")
+ if g:netrw_http_cmd == ""
+ echoerr "neither wget nor fetch command is available"
+ exit
+ endif
+
+ if match(b:netrw_fname,"#") == -1
+ " simple wget
+" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+
+ else
+ " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+ 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("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
+ exe "!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
+ let result = s:NetGetFile(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
+
+ ".........................................
+ " cadaver: Method #6
+ elseif b:netrw_method == 6 " read with cadaver
+" call Decho("read via cadaver (method #6)")
+
+ " Construct execution string (four lines) which will be passed through filter
+ let netrw_fname= b:netrw_fname
+ new
+ set ff=unix
+ if exists("g:netrw_port") && g:netrw_port != ""
+ put ='open '.g:netrw_machine.' '.g:netrw_port
+ else
+ put ='open '.g:netrw_machine
+ endif
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+ put ='get '.netrw_fname.' '.cygtmpfile
+ else
+ put ='get '.netrw_fname.' '.tmpfile
+ endif
+
+ " perform cadaver operation:
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_dav_cmd)
+ exe "%!".g:netrw_dav_cmd
+ bd!
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " rsync: Method #7
+ elseif b:netrw_method == 7 " read with rsync
+" call Decho("read via rsync (method #7)")
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe "!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe "!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " fetch: Method #8
+ " fetch://[user@]host[:http]/path
+ elseif b:netrw_method == 8 " read with fetch
+ if g:netrw_fetch_cmd == ""
+ echoerr "fetch command not available"
+ exit
+ endif
+ if exists("g:netrw_option") && g:netrw_option == ":http"
+ 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("g:netrw_passwd") && g:netrw_passwd != ""
+" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+ endif
+
+ let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " sftp: Method #9
+ elseif b:netrw_method == 9 " read with sftp
+" call Decho("read via sftp (method #4)")
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ else " Complain
+ echo "***warning*** unable to comply with your request<" . choice . ">"
+ endif
+ endwhile
+
+ " cleanup
+" call Decho("cleanup")
+ if exists("b:netrw_method")
+ unlet b:netrw_method
+ unlet g:netrw_machine
+ unlet b:netrw_fname
+ endif
+ call s:NetOptionRestore()
+
+" call Dret("NetRead")
+endfun
+" end of NetRead
+
+" ------------------------------------------------------------------------
+" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
+fun! s:NetGetFile(readcmd, fname, method)
+" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
+
+ if exists("*NetReadFixup")
+ " for the use of NetReadFixup (not otherwise used internally)
+ let line2= line("$")
+ endif
+
+ " transform paths from / to \ for Windows, unless the shell is bash
+ if &term == "win32"
+ if &shell == "bash"
+ let fname=a:fname
+" call Decho("(win32 && bash) fname<".fname.">")
+ else
+ let fname=substitute(a:fname,'/','\\\\','ge')
+" call Decho("(win32 && !bash) fname<".fname.">")
+ endif
+ else
+ let fname= a:fname
+" call Decho("(copied) fname<".fname.">")
+ endif
+
+ " get the file, but disable undo when reading a new buffer
+ if a:readcmd[0] == '0'
+ let use_e_cmd = 0 " 1 when using ':edit'
+ let delline = 0 " 1 when have to delete empty last line
+ if line("$") == 1 && getline(1) == ""
+ " Now being asked to 0r a file into an empty file.
+ " Safe to :e it instead, unless there is another window on the same buffer.
+ let curbufnr = bufnr("%")
+ let use_e_cmd = 1
+ let delline = 1
+ " Loop over all windows,
+ " reset use_e_cmd when another one is editing the current buffer.
+ let i = 1
+ while 1
+ if i != winnr() && winbufnr(i) == curbufnr
+ let use_e_cmd = 0
+ break
+ endif
+ let i = i + 1
+ if winbufnr(i) < 0
+ break
+ endif
+ endwhile
+ endif
+
+ if use_e_cmd > 0
+ " ':edit' the temp file, wipe out the old buffer and rename the buffer
+ let curfilename = expand("%")
+
+ let binlocal = &l:bin
+ let binglobal = &g:bin
+ if binlocal
+ setglobal bin " Need to set 'bin' globally for ":e" command.
+ endif
+ silent exe "e! ".v:cmdarg." ".fname
+ if binlocal && !binglobal
+ setglobal nobin
+ setlocal bin
+ endif
+
+ exe curbufnr . "bwipe!"
+ exe "f ".curfilename
+ " the ":f newname" apparently leaves the temporary file as the alternate
+ " file in the buffer list (see :ls!). The following command wipes it out.
+ exe bufnr("#")."bwipe!"
+ else
+ let oldul= &ul
+ set ul=-1
+ exe a:readcmd." ".v:cmdarg." ".fname
+ if delline > 0
+ " wipe out last line, which should be a blank line anyway
+ $del
+ endif
+ let &ul= oldul
+ endif
+ else
+ exe a:readcmd." ".v:cmdarg." ".fname
+ endif
+
+ " User-provided (ie. optional) fix-it-up command
+ if exists("*NetReadFixup")
+ let line1= line(".")
+ if a:readcmd == "r"
+ let line2= line("$") - line2 + line1
+ else
+ let line2= line("$") - line2
+ endif
+" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+ call NetReadFixup(a:method, line1, line2)
+ endif
+" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
+
+" insure that we have the right filetype and that its being displayed
+ filetype detect
+ redraw!
+" call Dret("NetGetFile")
+endfun
+
+" ------------------------------------------------------------------------
+" NetWrite: responsible for writing a file over the net {{{1
+fun! s:NetWrite(...) range
+" call Dfunc("NetWrite(a:0=".a:0.")")
+
+ " option handling
+ let mod= 0
+ call s:NetOptionSave()
+
+ " Get Temporary Filename
+ let tmpfile= tempname()
+
+ if a:0 == 0
+ let ichoice = 0
+ else
+ let ichoice = 1
+ endif
+
+ " write (selected portion of) file to temporary
+ silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
+
+ while ichoice <= a:0
+
+ " 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
+
+ " Reconstruct Choice if choice starts with '"'
+ if match(choice,"?") == 0
+ echo 'NetWrite Usage:"'
+ echo ':Nwrite machine:path uses rcp'
+ echo ':Nwrite "machine path" uses ftp with <.netrc>'
+ echo ':Nwrite "machine id password path" uses ftp'
+ echo ':Nwrite dav://[user@]machine/path uses cadaver'
+ echo ':Nwrite fetch://[user@]machine/path uses fetch'
+ echo ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
+ echo ':Nwrite rcp://machine/path uses rcp'
+ echo ':Nwrite rsync://[user@]machine/path uses rsync'
+ echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+ echo ':Nwrite sftp://[user@]machine/path uses sftp'
+ break
+
+ 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
+ echoerr "Unbalanced string in filename '". wholechoice ."'"
+" call Dret("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
+" call Decho("choice<" . choice . ">")
+ let ichoice= ichoice + 1
+
+ " fix up windows urls
+ if has("win32")
+ let choice= substitute(choice,'\\','/','ge')
+ "ER: see NetRead()
+ exe 'lcd ' . fnamemodify(tmpfile,':h')
+ let tmpfile = fnamemodify(tmpfile,':t')
+ endif
+
+ " Determine method of read (ftp, rcp, etc)
+ call s:NetMethod(choice)
+
+ " =============
+ " Perform Write
+ " =============
+
+ ".........................................
+ " rcp: Method #1
+ if b:netrw_method == 1 " write with rcp
+" 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." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + <.netrc>: Method #2
+ elseif b:netrw_method == 2 " write with ftp + <.netrc>
+ let netrw_fname = b:netrw_fname
+ new
+ set ff=unix
+ exe "put ='".g:netrw_ftpmode."'"
+" call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
+ exe "put ='put ".tmpfile." ".netrw_fname."'"
+" call Decho("put ='put ".tmpfile." ".netrw_fname."'")
+ if exists("g:netrw_port") && g:netrw_port != ""
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+ exe "%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+ else
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+ exe "%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+ endif
+ " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+ if getline(1) !~ "^$"
+ echoerr getline(1)
+ let mod=1
+ endif
+ bd!
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + machine, id, passwd, filename: Method #3
+ elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
+ let netrw_fname= b:netrw_fname
+ new
+ set ff=unix
+ if exists("g:netrw_port") && g:netrw_port != ""
+ put ='open '.g:netrw_machine.' '.g:netrw_port
+ else
+ put ='open '.g:netrw_machine
+ endif
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ put =g:netrw_uid
+ put =g:netrw_passwd
+ else
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+ endif
+ put ='put '.tmpfile.' '.netrw_fname
+ " 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
+" call Decho('performing ftp -i -n')
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+ exe "%!".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) !~ "^$"
+ echoerr getline(1)
+ let mod=1
+ endif
+ bd!
+
+ ".........................................
+ " scp: Method #4
+ elseif b:netrw_method == 4 " write with scp
+ if exists("g:netrw_port") && g:netrw_port != ""
+ let useport= " -P ".g:netrw_port
+ else
+ let useport= ""
+ endif
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ endif
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " http: Method #5
+ elseif b:netrw_method == 5
+ echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
+
+ ".........................................
+ " dav: Method #6
+ elseif b:netrw_method == 6 " write with cadaver
+" call Decho("write via cadaver (method #6)")
+
+ " Construct execution string (four lines) which will be passed through filter
+ let netrw_fname= b:netrw_fname
+ new
+ set ff=unix
+ if exists("g:netrw_port") && g:netrw_port != ""
+ put ='open '.g:netrw_machine.' '.g:netrw_port
+ else
+ put ='open '.g:netrw_machine
+ endif
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+ put ='put '.cygtmpfile.' '.netrw_fname
+ else
+ put ='put '.tmpfile.' '.netrw_fname
+ endif
+
+ " perform cadaver operation:
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_dav_cmd)
+ exe "%!".g:netrw_dav_cmd
+ bd!
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " rsync: Method #7
+ elseif b:netrw_method == 7 " write with rsync
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe "!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ endif
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " scp: Method #9
+ elseif b:netrw_method == 9 " write with sftp
+ let netrw_fname= b:netrw_fname
+ 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
+ new
+ set ff=unix
+ put ='put '.tmpfile.' '.netrw_fname
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
+ exe "%!".g:netrw_sftp_cmd.' '.uid_machine
+ bd!
+ let b:netrw_lastfile= choice
+
+ ".........................................
+ else " Complain
+ echo "***warning*** unable to comply with your request<" . choice . ">"
+ endif
+ endwhile
+
+ " cleanup
+" call Decho("cleanup")
+ let result=delete(tmpfile)
+ call s:NetOptionRestore()
+
+ if a:firstline == 1 && a:lastline == line("$")
+ let &mod= mod " usually equivalent to set nomod
+ endif
+
+" call Dret("NetWrite")
+endfun
+" end of NetWrite
+
+" ------------------------------------------------------------------------
+" NetMethod: determine method of transfer {{{1
+" method == 1: rcp
+" 2: ftp + <.netrc>
+" 3: ftp + machine, id, password, and [path]filename
+" 4: scp
+" 5: http (wget)
+" 6: cadaver
+" 7: rsync
+" 8: fetch
+" 9: sftp
+fun! s:NetMethod(choice) " globals: method machine id passwd fname
+" call Dfunc("NetMethod(a:choice<".a:choice.">)")
+
+ " initialization
+ let b:netrw_method = 0
+ let g:netrw_machine = ""
+ let b:netrw_fname = ""
+ let g:netrw_port = ""
+
+ " Patterns:
+ " mipf : a:machine a:id password filename Use ftp
+ " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
+ " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g: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://host[:port]/path Use cadaver
+ " 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 = '\(\([^@]\{-}\)@\)\=\(\I\i*\):\(\S\+\)'
+ let scpurm = 'scp://\([^/]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+ let httpurm = 'http://\([^/]\{-}\)\(/.*\)\=$'
+ let davurm = 'dav://\([^/]\{-}\)/\(.*\)\=$'
+ 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,'\2',"")
+ let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
+ let b:netrw_fname = substitute(a:choice,rcpurm,'\4',"")
+ if userid != ""
+ let g:netrw_uid= userid
+ endif
+
+ " 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 b:netrw_port = substitute(a:choice,scpurm,'\2',"")
+ let b:netrw_fname = substitute(a:choice,scpurm,'\3',"")
+
+ " 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',"")
+
+ " dav://hostname[:port]/..path-to-file..
+ elseif match(a:choice,davurm) == 0
+" call Decho("dav://...")
+ let b:netrw_method= 6
+ let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
+ let b:netrw_fname = substitute(a:choice,davurm,'\2',"")
+
+ " 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',"")
+
+ " 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',"")
+ if g:netrw_port != ""
+ let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
+ endif
+ if userid != ""
+ let g:netrw_uid= userid
+ endif
+ if exists("g:netrw_uid") && exists("g:netrw_passwd")
+ let b:netrw_method = 3
+ else
+ if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
+ let b:netrw_method= 2
+ else
+ if !exists("g:netrw_uid") || g:netrw_uid == ""
+ call NetUserPass()
+ elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
+ call NetUserPass(g:netrw_uid)
+ " else just use current g:netrw_uid and g:netrw_passwd
+ endif
+ let b:netrw_method= 3
+ 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',"")
+
+ " 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 g:netrw_passwd = substitute(a:choice,mipf,'\3',"")
+ let b:netrw_fname = substitute(a:choice,mipf,'\4',"")
+
+ " Issue an ftp: "hostname [path/]filename"
+ elseif match(a:choice,mf) == 0
+" call Decho("(ftp) host file")
+ if exists("g:netrw_uid") && exists("g: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',"")
+
+ elseif 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
+
+ " 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',"")
+
+ " Issue an rcp: hostname:filename" (this one should be last)
+ elseif match(a:choice,rcphf) == 0
+" call Decho("(rcp) host:file)")
+ 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',"")
+ if userid != ""
+ let g:netrw_uid= userid
+ endif
+ if has("win32")
+ " don't let PCs try <.netrc>
+ let b:netrw_method = 3
+ endif
+
+ else
+ echoerr "***error*** cannot determine method"
+ let b:netrw_method = -1
+ endif
+
+" 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("g:netrw_passwd") "Decho
+" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
+" endif "Decho
+" call Decho("b:netrw_fname <".b:netrw_fname.">")
+" call Dret("NetMethod")
+endfun
+" end of NetMethod
+
+" ------------------------------------------------------------------------
+" NetUserPass: set username and password for subsequent ftp transfer {{{1
+" 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(...)
+
+ " 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: ')
+ 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 g:netrw_passwd= inputsecret("Enter Password: ")
+ else " from command line
+" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+ let g:netrw_passwd=a:2
+ endif
+" call Dret("NetUserPass")
+endfun
+" end NetUserPass
+
+" ------------------------------------------------------------------------
+" NetOptionSave: save options and set to "standard" form {{{1
+fun!s:NetOptionSave()
+" call Dfunc("NetOptionSave()")
+
+ " Get Temporary Filename
+ let s:aikeep = &ai
+ let s:cinkeep = &cin
+ let s:cinokeep = &cino
+ let s:comkeep = &com
+ let s:cpokeep = &cpo
+ let s:dirkeep = getcwd()
+ let s:gdkeep = &gd
+ let s:twkeep = &tw
+ set cino =
+ set com =
+ set cpo -=aA
+ set nocin noai
+ set tw =0
+ if has("win32") && !has("win95")
+ let s:swfkeep= &swf
+ set noswf
+" call Decho("setting s:swfkeep to <".&swf.">")
+ endif
+
+" call Dret("NetOptionSave")
+endfun
+
+" ------------------------------------------------------------------------
+" NetOptionRestore: restore options {{{1
+fun! s:NetOptionRestore()
+" call Dfunc("NetOptionRestore()")
+
+ let &ai = s:aikeep
+ let &cin = s:cinkeep
+ let &cino = s:cinokeep
+ let &com = s:comkeep
+ let &cpo = s:cpokeep
+ exe "lcd ".s:dirkeep
+ let &gd = s:gdkeep
+ let &tw = s:twkeep
+ if exists("s:swfkeep")
+ let &swf= s:swfkeep
+ unlet s:swfkeep
+ endif
+ unlet s:aikeep
+ unlet s:cinkeep
+ unlet s:cinokeep
+ unlet s:comkeep
+ unlet s:cpokeep
+ unlet s:gdkeep
+ unlet s:twkeep
+ unlet s:dirkeep
+
+" call Dret("NetOptionRestore")
+endfun
+
+" ------------------------------------------------------------------------
+" NetReadFixup: this sort of function is typically written by the user {{{1
+" 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") && g:netrw_win95ftp
+ fun! NetReadFixup(method, line1, line2)
+" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+ if method == 3 " ftp (no <.netrc>)
+ let fourblanklines= line2 - 3
+ silent fourblanklines.",".line2."g/^\s*/d"
+ endif
+" call Dret("NetReadFixup")
+ endfun
+endif
+
+" ------------------------------------------------------------------------
+" Restore {{{1
+let &cpo= s:save_cpo
+unlet s:save_cpo
+" vim:ts=8 fdm=marker
diff --git a/runtime/plugin/rrhelper.vim b/runtime/plugin/rrhelper.vim
new file mode 100644
index 000000000..05090b59c
--- /dev/null
+++ b/runtime/plugin/rrhelper.vim
@@ -0,0 +1,47 @@
+" Vim plugin with helper function(s) for --remote-wait
+" Maintainer: Flemming Madsen <fma@cci.dk>
+" Last Change: 2004 May 30
+
+" Has this already been loaded?
+if exists("loaded_rrhelper")
+ finish
+endif
+let loaded_rrhelper = 1
+
+" Setup answers for a --remote-wait client who will assume
+" a SetupRemoteReplies() function in the command server
+
+if has("clientserver")
+ function SetupRemoteReplies()
+ let cnt = 0
+ let max = argc()
+
+ let id = expand("<client>")
+ if id == 0
+ return
+ endif
+ while cnt < max
+ " Handle same file from more clients and file being more than once
+ " on the command line by encoding this stuff in the group name
+ let uniqueGroup = "RemoteReply_".id."_".cnt
+
+ " Path separators are always forward slashes for the autocommand pattern.
+ " Escape special characters with a backslash.
+ let f = escape(substitute(argv(cnt), '\\', '/', "g"), ' *,?[{')
+ execute "augroup ".uniqueGroup
+ execute "autocmd ".uniqueGroup." BufUnload ". f ." call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')"
+ let cnt = cnt + 1
+ endwhile
+ augroup END
+ endfunc
+
+ function DoRemoteReply(id, cnt, group, file)
+ call server2client(a:id, a:cnt)
+ execute 'autocmd! '.a:group.' BufUnload '.a:file
+ execute 'augroup! '.a:group
+ endfunc
+
+endif
+
+
+" vim: set sw=2 sts=2 :
diff --git a/runtime/plugin/tohtml.vim b/runtime/plugin/tohtml.vim
new file mode 100644
index 000000000..9914bed6d
--- /dev/null
+++ b/runtime/plugin/tohtml.vim
@@ -0,0 +1,27 @@
+" Vim plugin for converting a syntax highlighted file to HTML.
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Apr 06
+
+" Don't do this when:
+" - when 'compatible' is set
+" - this plugin was already loaded
+" - user commands are not available.
+if !&cp && !exists(":TOhtml") && has("user_commands")
+ command -range=% TOhtml :call Convert2HTML(<line1>, <line2>)
+
+ func Convert2HTML(line1, line2)
+ if a:line2 >= a:line1
+ let g:html_start_line = a:line1
+ let g:html_end_line = a:line2
+ else
+ let g:html_start_line = a:line2
+ let g:html_end_line = a:line1
+ endif
+
+ runtime syntax/2html.vim
+
+ unlet g:html_start_line
+ unlet g:html_end_line
+ endfunc
+
+endif
diff --git a/runtime/print/cp1250.ps b/runtime/print/cp1250.ps
new file mode 100644
index 000000000..9e733cc76
--- /dev/null
+++ b/runtime/print/cp1250.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1250
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1250[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /tilde /.notdef
+/Euro /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
+/.notdef /perthousand /Scaron /guilsinglleft /Sacute /Tcaron /Zcaron /Zacute
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/.notdef /trademark /scaron /guilsinglright /sacute /tcaron /zcaron /zacute
+/space /caron /breve /Lslash /currency /Aogonek /brokenbar /section
+/dieresis /copyright /Scedilla /guillemotleft /logicalnot /hyphen /registered /Zdotaccent
+/degree /plusminus /ogonek /lslash /acute /mu /paragraph /periodcentered
+/cedilla /aogonek /scedilla /guillemotright /Lcaron /hungarumlaut /lcaron /zdotaccent
+/Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+/Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+/Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+/Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcedilla /germandbls
+/racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+/ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+/dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+/rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1251.ps b/runtime/print/cp1251.ps
new file mode 100644
index 000000000..7137504e7
--- /dev/null
+++ b/runtime/print/cp1251.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1251
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1251[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/afii10051 /afii10052 /quotesinglbase /afii10100 /quotedblbase /ellipsis /dagger /daggerdbl
+/Euro /perthousand /afii10058 /guilsinglleft /afii10059 /afii10061 /afii10060 /afii10145
+/afii10099 /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/.notdef /trademark /afii10106 /guilsinglright /afii10107 /afii10109 /afii10108 /afii10193
+/space /afii10062 /afii10110 /afii10057 /currency /afii10050 /brokenbar /section
+/afii10023 /copyright /afii10053 /guillemotleft /logicalnot /hyphen /registered /afii10056
+/degree /plusminus /afii10055 /afii10103 /afii10098 /mu /paragraph /periodcentered
+/afii10071 /afii61352 /afii10101 /guillemotright /afii10105 /afii10054 /afii10102 /afii10104
+/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
+/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
+/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
+/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
+/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
+/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
+/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
+/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1252.ps b/runtime/print/cp1252.ps
new file mode 100644
index 000000000..a4dd7e675
--- /dev/null
+++ b/runtime/print/cp1252.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1252
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1252[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/Euro /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
+/circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /Zcaron /.notdef
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/tilde /trademark /scaron /guilsinglright /oe /.notdef /zcaron /Ydieresis
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1253.ps b/runtime/print/cp1253.ps
new file mode 100644
index 000000000..0482232af
--- /dev/null
+++ b/runtime/print/cp1253.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1253
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1253[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
+/.notdef /perthousand /.notdef /guilsinglleft /.notdef /.notdef /.notdef /.notdef
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/.notdef /trademark /.notdef /guilsinglright /.notdef /.notdef /.notdef /.notdef
+/space /dieresistonos /Alphatonos /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /emdash
+/degree /plusminus /twosuperior /threesuperior /tonos /mu /paragraph /periodcentered
+/Epsilontonos /Etatonos /Iotatonos /guillemotright /Omicrontonos /onehalf /Upsilontonos /Omegatonos
+/iotadieresistonos /Alpha /Beta /Gamma /Delta /Epsilon /Zeta /Eta
+/Theta /Iota /Kappa /Lambda /Mu /Nu /Xi /Omicron
+/Pi /Rho /.notdef /Sigma /Tau /Upsilon /Phi /Chi
+/Psi /Omega /Iotadieresis /Upsilondieresis /alphatonos /epsilontonos /etatonos /iotatonos
+/upsilondieresistonos /alpha /beta /gamma /delta /epsilon /zeta /eta
+/theta /iota /kappa /lambda /mu /nu /xi /omicron
+/pi /rho /sigma1 /sigma /tau /upsilon /phi /chi
+/psi /omega /iotadieresis /upsilondieresis /omicrontonos /upsilontonos /omegatonos /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1254.ps b/runtime/print/cp1254.ps
new file mode 100644
index 000000000..9fe7e4771
--- /dev/null
+++ b/runtime/print/cp1254.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1254
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1254[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/Euro /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
+/circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /Zcaron /.notdef
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/tilde /trademark /scaron /guilsinglright /oe /.notdef /zcaron /Ydieresis
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Gbreve /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Idotaccent /Scedilla /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/gbreve /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /dotlessi /scedilla /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1255.ps b/runtime/print/cp1255.ps
new file mode 100644
index 000000000..cd82f46a0
--- /dev/null
+++ b/runtime/print/cp1255.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1255
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1255[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
+/circumflex /perthousand /.notdef /guilsinglleft /.notdef /.notdef /.notdef /.notdef
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/tilde /trademark /.notdef /guilsinglright /.notdef /.notdef /.notdef /.notdef
+/space /.notdef /cent /sterling /newsheqelsign /yen /brokenbar /section
+/dieresis /copyright /.notdef /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/.notdef /onesuperior /.notdef /guillemotright /onequarter /onehalf /threequarters /.notdef
+/sheva /hatafsegol /hatafpatah /hatafqamats /hiriq /tsere /segol /patah
+/qamats /holam /.notdef /qubuts /dagesh /meteg /maqaf /rafe
+/paseq /shindot /sindot /sofpasuq /doublevav /vavyod /doubleyod /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/alef /bet /gimel /dalet /he /vav /zayin /het
+/tet /yod /finalkaf /kaf /lamed /finalmem /mem /finalnun
+/nun /samekh /ayin /finalpe /pe /finaltsadi /tsadi /qof
+/resh /shin /tav /.notdef /.notdef /.notdef /.notdef /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/cp1257.ps b/runtime/print/cp1257.ps
new file mode 100644
index 000000000..2e5d7a7b2
--- /dev/null
+++ b/runtime/print/cp1257.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-cp1257
+%%Version: 1.0 0
+%%EndComments
+/VIM-cp1257[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
+/.notdef /perthousand /.notdef /guilsinglleft /.notdef /.notdef /.notdef /.notdef
+/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/.notdef /trademark /.notdef /guilsinglright /.notdef /.notdef /.notdef /.notdef
+/space /caron /breve /sterling /currency /.notdef /brokenbar /section
+/dieresis /copyright /Rcedilla /guillemotleft /logicalnot /hyphen /registered /AE
+/degree /plusminus /ogonek /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /rcedilla /guillemotright /onequarter /onehalf /threequarters /ae
+/Aogonek /Iogonek /Amacron /Cacute /Adieresis /Aring /Eogonek /Emacron
+/Ccaron /Eacute /Zacute /Edot /Gcedilla /Kcedilla /Imacron /Lcedilla
+/Scaron /Nacute /Ncedilla /Oacute /Omacron /Otilde /Odieresis /multiply
+/Uogonek /Lslash /Sacute /Umacron /Udieresis /Zdotaccent /Zcaron /germandbls
+/aogonek /iogonek /amacron /cacute /adieresis /aring /eogonek /emacron
+/ccaron /eacute /zacute /edot /gcedilla /kcedilla /imacron /lcedilla
+/scaron /nacute /ncedilla /oacute /omacron /otilde /odieresis /divide
+/uogonek /lslash /sacute /umacron /udieresis /zdotaccent /zcaron /dotaccent]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/dec-mcs.ps b/runtime/print/dec-mcs.ps
new file mode 100644
index 000000000..34702b727
--- /dev/null
+++ b/runtime/print/dec-mcs.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-dec-mcs
+%%Version: 1.0 0
+%%EndComments
+/VIM-dec-mcs[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /exclamdown /cent /sterling /.notdef /yen /.notdef /section
+/currency /copyright /ordfeminine /guillemotleft /.notdef /.notdef /.notdef /.notdef
+/degree /plusminus /twosuperior /threesuperior /.notdef /mu /paragraph /periodcentered
+/.notdef /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /.notdef /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/.notdef /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Ydieresis /.notdef /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/.notdef /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+/oslash /ugrave /uacute /ucircumflex /udieresis /ydieresis /.notdef /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/ebcdic-uk.ps b/runtime/print/ebcdic-uk.ps
new file mode 100644
index 000000000..1070074bf
--- /dev/null
+++ b/runtime/print/ebcdic-uk.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-ebcdic-uk
+%%Version: 1.0 0
+%%EndComments
+/VIM-ebcdic-uk[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /dollar /period /less /parenleft /plus /bar
+/ampersand /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /exclam /sterling /asterisk /parenright /semicolon /logicalnot
+/minus /slash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /brokenbar /comma /percent /underscore /greater /question
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /quotereversed /colon /numbersign /at /quoteright /equal /quotedbl
+/.notdef /a /b /c /d /e /f /g
+/h /i /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /j /k /l /m /n /o /p
+/q /r /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /macron /s /t /u /v /w /x
+/y /z /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/braceleft /A /B /C /D /E /F /G
+/H /I /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/braceright /J /K /L /M /N /O /P
+/Q /R /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/backslash /.notdef /S /T /U /V /W /X
+/Y /Z /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/zero /one /two /three /four /five /six /seven
+/eight /nine /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/hp-roman8.ps b/runtime/print/hp-roman8.ps
new file mode 100644
index 000000000..d71b876db
--- /dev/null
+++ b/runtime/print/hp-roman8.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-hp-roman8
+%%Version: 1.0 0
+%%EndComments
+/VIM-hp-roman8[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Agrave /Acircumflex /Egrave /Ecircumflex /Edieresis /Icircumflex /Idieresis
+/acute /grave /circumflex /dieresis /tilde /Ugrave /Ucircumflex /lira
+/macron /Yacute /yacute /degree /Ccedilla /ccedilla /Ntilde /ntilde
+/exclamdown /questiondown /currency /sterling /yen /section /florin /cent
+/acircumflex /ecircumflex /ocircumflex /ucircumflex /aacute /eacute /oacute /uacute
+/agrave /egrave /ograve /ugrave /adieresis /edieresis /odieresis /udieresis
+/Aring /icircumflex /Oslash /AE /aring /iacute /oslash /ae
+/Adieresis /igrave /Odieresis /Udieresis /Eacute /idieresis /germandbls /Ocircumflex
+/Aacute /Atilde /atilde /Eth /eth /Iacute /Igrave /Oacute
+/Ograve /Otilde /otilde /Scaron /scaron /Uacute /Ydieresis /ydieresis
+/Thorn /thorn /periodcentered /mu /paragraph /threequarters /hyphen /onequarter
+/onehalf /ordfeminine /ordmasculine /guillemotleft /filledbox /guillemotright /plusminus /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-10.ps b/runtime/print/iso-8859-10.ps
new file mode 100644
index 000000000..7d8e2a0f9
--- /dev/null
+++ b/runtime/print/iso-8859-10.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-10
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-10[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Aogonek /Emacron /Gcedilla /Imacron /Itilde /Kcedilla /section
+/Lcedilla /Dcroat /Scaron /Tbar /Zcaron /endash /Umacron /Eng
+/degree /aogonek /emacron /gcedilla /imacron /itilde /kcedilla /periodcentered
+/lcedilla /dcroat /scaron /tbar /zcaron /emdash /umacron /eng
+/Amacron /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Iogonek
+/Ccaron /Eacute /Eogonek /Edieresis /Edot /Iacute /Icircumflex /Idieresis
+/Eth /Ncedilla /Omacron /Oacute /Ocircumflex /Otilde /Odieresis /Utilde
+/Oslash /Uogonek /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/amacron /aacute /acircumflex /atilde /adieresis /aring /ae /iogonek
+/ccaron /eacute /eogonek /edieresis /edot /iacute /icircumflex /idieresis
+/eth /ncedilla /omacron /oacute /ocircumflex /otilde /odieresis /utilde
+/oslash /uogonek /uacute /ucircumflex /udieresis /yacute /thorn /kgreenlandic]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-11.ps b/runtime/print/iso-8859-11.ps
new file mode 100644
index 000000000..78f775bef
--- /dev/null
+++ b/runtime/print/iso-8859-11.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-11
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-11[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /uni0E01 /uni0E02 /uni0E03 /uni0E04 /uni0E05 /uni0E06 /uni0E07
+/uni0E08 /uni0E09 /uni0E0A /uni0E0B /uni0E0C /uni0E0D /uni0E0E /uni0E0F
+/uni0E10 /uni0E11 /uni0E12 /uni0E13 /uni0E14 /uni0E15 /uni0E16 /uni0E17
+/uni0E18 /uni0E19 /uni0E1A /uni0E1B /uni0E1C /uni0E1D /uni0E1E /uni0E1F
+/uni0E20 /uni0E21 /uni0E22 /uni0E23 /uni0E24 /uni0E25 /uni0E26 /uni0E27
+/uni0E28 /uni0E29 /uni0E2A /uni0E2B /uni0E2C /uni0E2D /uni0E2E /uni0E2F
+/uni0E30 /uni0E31 /uni0E32 /uni0E33 /uni0E34 /uni0E35 /uni0E36 /uni0E37
+/uni0E38 /uni0E39 /uni0E3A /.notdef /space /.notdef /.notdef /uni0E3F
+/uni0E40 /uni0E41 /uni0E42 /uni0E43 /uni0E44 /uni0E45 /uni0E46 /uni0E47
+/uni0E48 /uni0E49 /uni0E4A /uni0E4B /uni0E4C /uni0E4D /uni0E4E /uni0E4F
+/uni0E50 /uni0E51 /uni0E52 /uni0E53 /uni0E54 /uni0E55 /uni0E56 /uni0E57
+ /uni0E58 /uni0E59 /uni0E5A /.notdef /.notdef /.notdef /.notdef /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-13.ps b/runtime/print/iso-8859-13.ps
new file mode 100644
index 000000000..b4348f661
--- /dev/null
+++ b/runtime/print/iso-8859-13.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-13
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-13[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /quotedblright /cent /sterling /currency /quotedblbase /brokenbar /section
+/Oslash /copyright /Rcedilla /guillemotleft /logicalnot /hyphen /registered /AE
+/degree /plusminus /twosuperior /threesuperior /quotedblleft /mu /paragraph /periodcentered
+/oslash /onesuperior /rcedilla /guillemotright /onequarter /onehalf /threequarters /ae
+/Aogonek /Iogonek /Amacron /Cacute /Adieresis /Aring /Eogonek /Emacron
+/Ccaron /Eacute /Zacute /Edot /Gcedilla /Kcedilla /Imacron /Lcedilla
+/Scaron /Nacute /Ncedilla /Oacute /Omacron /Otilde /Odieresis /multiply
+/Uogonek /Lslash /Sacute /Umacron /Udieresis /Zdotaccent /Zcaron /germandbls
+/aogonek /iogonek /amacron /cacute /adieresis /aring /eogonek /emacron
+/ccaron /eacute /zacute /edot /gcedilla /kcedilla /imacron /lcedilla
+/scaron /nacute /ncedilla /oacute /omacron /otilde /odieresis /divide
+/uogonek /lslash /sacute /umacron /udieresis /zdotaccent /zcaron /quoteright]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-14.ps b/runtime/print/iso-8859-14.ps
new file mode 100644
index 000000000..cdfe04268
--- /dev/null
+++ b/runtime/print/iso-8859-14.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-14
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-14[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /uni1E02 /uni1E03 /sterling /Cdotaccent /cdotaccent /uni1E0A /section
+/Wgrave /copyright /Wacute /uni1E0B /Ygrave /hyphen /registered /Ydieresis
+/uni1E1E /uni1E1F /Gdotaccent /gdotaccent /uni1E40 /uni1E41 /paragraph /uni1E56
+/wgrave /uni1E57 /wacute /uni1E60 /ygrave /Wdieresis /wdieresis /uni1E61
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Wcircumflex /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /uni1E6A
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Ycircumflex /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/wcircumflex /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /uni1E6B
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /ycircumflex /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-15.ps b/runtime/print/iso-8859-15.ps
new file mode 100644
index 000000000..46ea691ff
--- /dev/null
+++ b/runtime/print/iso-8859-15.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-15
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-15[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /Euro /yen /Scaron /section
+/scaron /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /Zcaron /mu /paragraph /periodcentered
+/zcaron /onesuperior /ordmasculine /guillemotright /OE /oe /Ydieresis /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-2.ps b/runtime/print/iso-8859-2.ps
new file mode 100644
index 000000000..f6e1933be
--- /dev/null
+++ b/runtime/print/iso-8859-2.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-2
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-2[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section
+/dieresis /Scaron /Scedilla /Tcaron /Zacute /hyphen /Zcaron /Zdotaccent
+/degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron
+/cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent
+/Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+/Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+/Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+/Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcedilla /germandbls
+/racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+/ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+/dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+/rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-3.ps b/runtime/print/iso-8859-3.ps
new file mode 100644
index 000000000..b5a3474fb
--- /dev/null
+++ b/runtime/print/iso-8859-3.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-3
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-3[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Hbar /breve /sterling /currency /.notdef /Hcircumflex /section
+/dieresis /Idot /Scedilla /Gbreve /Jcircumflex /hyphen /.notdef /Zdotaccent
+/degree /hbar /twosuperior /threesuperior /acute /mu /hcircumflex /periodcentered
+/cedilla /dotlessi /scedilla /gbreve /jcircumflex /onehalf /.notdef /zdotaccent
+/Agrave /Aacute /Acircumflex /.notdef /Adieresis /Cdotaccent /Ccircumflex /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/.notdef /Ntilde /Ograve /Oacute /Ocircumflex /Gdotaccent /Odieresis /multiply
+/Gcircumflex /Ugrave /Uacute /Ucircumflex /Udieresis /Ubreve /Scircumflex /germandbls
+/agrave /aacute /acircumflex /.notdef /adieresis /cdotaccent /ccircumflex /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/.notdef /ntilde /ograve /oacute /ocircumflex /gdotaccent /odieresis /divide
+/gcircumflex /ugrave /uacute /ucircumflex /udieresis /ubreve /scircumflex /dotaccent]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-4.ps b/runtime/print/iso-8859-4.ps
new file mode 100644
index 000000000..c917d1ff3
--- /dev/null
+++ b/runtime/print/iso-8859-4.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-4
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-4[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /Aogonek /kgreenlandic /Rcedilla /currency /Itilde /Lcedilla /section
+/dieresis /Scaron /Emacron /Gcedilla /Tbar /.notdef /Zcaron /macron
+/degree /aogonek /ogonek /rcedilla /acute /itilde /lcedilla /caron
+/cedilla /scaron /emacron /gcedilla /tbar /Eng /zcaron /eng
+/Amacron /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Iogonek
+/Ccaron /Eacute /Eogonek /Edieresis /Edot /Iacute /Icircumflex /Imacron
+/Dcroat /Ncedilla /Omacron /Kcedilla /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Uogonek /Uacute /Ucircumflex /Udieresis /Utilde /Umacron /germandbls
+/amacron /aacute /acircumflex /atilde /adieresis /aring /ae /iogonek
+/ccaron /eacute /eogonek /edieresis /edot /iacute /icircumflex /imacron
+/dcroat /ncedilla /omacron /kcedilla /ocircumflex /otilde /odieresis /divide
+/oslash /uogonek /uacute /ucircumflex /udieresis /utilde /umacron /dotaccent]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-5.ps b/runtime/print/iso-8859-5.ps
new file mode 100644
index 000000000..dbe962890
--- /dev/null
+++ b/runtime/print/iso-8859-5.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-5
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-5[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /afii10023 /afii10051 /afii10052 /afii10053 /afii10054 /afii10055 /afii10056
+/afii10057 /afii10058 /afii10059 /afii10060 /afii10061 /.notdef /afii10062 /afii10145
+/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
+/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
+/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
+/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
+/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
+/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
+/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
+/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
+/afii61352 /afii10071 /afii10099 /afii10100 /afii10101 /afii10102 /afii10103 /afii10104
+/afii10105 /afii10106 /afii10107 /afii10108 /afii10109 /section /afii10110 /afii10193]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-7.ps b/runtime/print/iso-8859-7.ps
new file mode 100644
index 000000000..fc16bf1a6
--- /dev/null
+++ b/runtime/print/iso-8859-7.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-7
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-7[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /quotereversed /quoteright /sterling /.notdef /.notdef /brokenbar /section
+/dieresis /copyright /.notdef /guillemotleft /logicalnot /.notdef /.notdef /emdash
+/degree /plusminus /twosuperior /threesuperior /tonos /dieresistonos /Alphatonos /periodcentered
+/Epsilontonos /Etatonos /Iotatonos /guillemotright /Omicrontonos /onehalf /Upsilontonos /Omegatonos
+/iotadieresistonos /Alpha /Beta /Gamma /Delta /Epsilon /Zeta /Eta
+/Theta /Iota /Kappa /Lambda /Mu /Nu /Xi /Omicron
+/Pi /Rho /.notdef /Sigma /Tau /Upsilon /Phi /Chi
+/Psi /Omega /Iotadieresis /Upsilondieresis /alphatonos /epsilontonos /etatonos /iotatonos
+/upsilondieresistonos /alpha /beta /gamma /delta /epsilon /zeta /eta
+/theta /iota /kappa /lambda /mu /nu /xi /omicron
+/pi /rho /sigma1 /sigma /tau /upsilon /phi /chi
+/psi /omega /iotadieresis /upsilondieresis /omicrontonos /upsilontonos /omegatonos /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-8.ps b/runtime/print/iso-8859-8.ps
new file mode 100644
index 000000000..15193cc8e
--- /dev/null
+++ b/runtime/print/iso-8859-8.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-8
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-8[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /.notdef /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /multiply /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /divide /guillemotright /onequarter /onehalf /threequarters /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /underscoredbl
+/alef /bet /gimel /dalet /he /vav /zayin /het
+/tet /yod /finalkaf /kaf /lamed /finalmem /mem /finalnun
+/nun /samekh /ayin /finalpe /pe /finaltsadi /tsadi /qof
+/resh /shin /tav /.notdef /.notdef /.notdef /.notdef /.notdef]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/iso-8859-9.ps b/runtime/print/iso-8859-9.ps
new file mode 100644
index 000000000..d40f6e986
--- /dev/null
+++ b/runtime/print/iso-8859-9.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-iso-8859-9
+%%Version: 1.0 0
+%%EndComments
+/VIM-iso-8859-9[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Gbreve /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Idotaccent /Scedilla /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/gbreve /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /dotlessi /scedilla /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/koi8-r.ps b/runtime/print/koi8-r.ps
new file mode 100644
index 000000000..d42daabb4
--- /dev/null
+++ b/runtime/print/koi8-r.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-koi8-r
+%%Version: 1.0 0
+%%EndComments
+/VIM-koi8-r[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000
+/SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock
+/ltshade /shade /dkshade /integraltp /filledbox /bullet /radical /approxequal
+/lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide
+/SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000
+/SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000
+/SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000
+/SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright
+/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068
+/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080
+/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067
+/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092
+/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020
+/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032
+/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019
+/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/koi8-u.ps b/runtime/print/koi8-u.ps
new file mode 100644
index 000000000..53631049f
--- /dev/null
+++ b/runtime/print/koi8-u.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-koi8-u
+%%Version: 1.0 0
+%%EndComments
+/VIM-koi8-u[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000
+/SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock
+/ltshade /shade /dkshade /integraltp /filledbox /bullet /radical /approxequal
+/lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide
+/SF430000 /SF240000 /SF510000 /afii10071 /afii10101 /SF390000 /afii10103 /afii10104
+/SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /afii10098 /SF260000 /SF360000
+/SF370000 /SF420000 /SF190000 /afii10023 /afii10053 /SF230000 /afii10055 /afii10056
+/SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /afii10050 /SF440000 /copyright
+/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068
+/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080
+/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067
+/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092
+/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020
+/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032
+/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019
+/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/latin1.ps b/runtime/print/latin1.ps
new file mode 100644
index 000000000..569db9bfe
--- /dev/null
+++ b/runtime/print/latin1.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-latin1
+%%Version: 1.0 0
+%%EndComments
+/VIM-latin1[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/mac-roman.ps b/runtime/print/mac-roman.ps
new file mode 100644
index 000000000..b0941be65
--- /dev/null
+++ b/runtime/print/mac-roman.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-Encoding
+%%Title: VIM-mac-roman
+%%Version: 1.0 0
+%%EndComments
+/VIM-mac-roman[
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /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 /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /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 /braceleft /bar /braceright /asciitilde /.notdef
+/Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute
+/agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave
+/ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute
+/ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis
+/dagger /degree /cent /sterling /section /bullet /paragraph /germandbls
+/registered /copyright /trademark /acute /dieresis /notequal /AE /Oslash
+/infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation
+/Pi /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash
+/questiondown /exclamdown /logicalnot /radical /florin /approxequal /delta /guillemotleft
+/guillemotright /ellipsis /space /Agrave /Atilde /Otilde /OE /oe
+/endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge
+/ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl
+/daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute
+/Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex
+/heart /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde
+/macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron]
+/Encoding defineresource pop
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/print/prolog.ps b/runtime/print/prolog.ps
new file mode 100644
index 000000000..0230999e6
--- /dev/null
+++ b/runtime/print/prolog.ps
@@ -0,0 +1,40 @@
+%!PS-Adobe-3.0 Resource-ProcSet
+%%Title: VIM-Prolog
+%%Version: 1.3 1
+%%EndComments
+% Editing of this file is NOT RECOMMENDED. You run a very good risk of causing
+% all PostScript printing from VIM failing if you do. PostScript is not called
+% a write-only language for nothing!
+/bd{bind def}bind def/ld{load def}bd/ed{exch def}bd/d/def ld
+/db{dict begin}bd/cde{currentdict end}bd
+/T true d/F false d
+/SO null d/sv{/SO save d}bd/re{SO restore}bd
+/L2 systemdict/languagelevel 2 copy known{get exec}{pop pop 1}ifelse 2 ge d
+/m{moveto}bd/s{show}bd/ms{m s}bd/g{setgray}bd/r{setrgbcolor}bd/sp{showpage}bd
+/gs{gsave}bd/gr{grestore}bd/cp{currentpoint}bd
+/ul{gs UW setlinewidth cp UO add 2 copy newpath m 3 1 roll add exch lineto
+stroke gr}bd
+/bg{gs r cp BO add 4 -2 roll rectfill gr}bd
+/sl{90 rotate 0 exch translate}bd
+L2{
+/sspd{mark exch{setpagedevice}stopped cleartomark}bd
+/nc{1 db/NumCopies ed cde sspd}bd
+/sps{3 db/Orientation ed[3 1 roll]/PageSize ed/ImagingBBox null d cde sspd}bd
+/dt{2 db/Tumble ed/Duplex ed cde sspd}bd
+/c{1 db/Collate ed cde sspd}bd
+}{
+/nc{/#copies ed}bd
+/sps{statusdict/setpage get exec}bd
+/dt{statusdict/settumble 2 copy known{get exec}{pop pop pop}ifelse
+statusdict/setduplexmode 2 copy known{get exec}{pop pop pop}ifelse}bd
+/c{pop}bd
+}ifelse
+/ffs{findfont exch scalefont d}bd/sf{setfont}bd
+/ref{1 db findfont dup maxlength dict/NFD ed{exch dup/FID ne{exch NFD 3 1 roll
+put}{pop pop}ifelse}forall/Encoding findresource dup length 256 eq{NFD/Encoding
+3 -1 roll put}{pop}ifelse NFD dup/FontType get 3 ne{/CharStrings}{/CharProcs}
+ifelse 2 copy known{2 copy get dup maxlength dict copy[/questiondown/space]{2
+copy known{2 copy get 2 index/.notdef 3 -1 roll put pop exit}if pop}forall put
+}{pop pop}ifelse dup NFD/FontName 3 -1 roll put NFD definefont pop end}bd
+% vim:ff=unix:
+%%EOF
diff --git a/runtime/rgb.txt b/runtime/rgb.txt
new file mode 100644
index 000000000..5bc2baa3d
--- /dev/null
+++ b/runtime/rgb.txt
@@ -0,0 +1,753 @@
+! $XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp $
+255 250 250 snow
+248 248 255 ghost white
+248 248 255 GhostWhite
+245 245 245 white smoke
+245 245 245 WhiteSmoke
+220 220 220 gainsboro
+255 250 240 floral white
+255 250 240 FloralWhite
+253 245 230 old lace
+253 245 230 OldLace
+250 240 230 linen
+250 235 215 antique white
+250 235 215 AntiqueWhite
+255 239 213 papaya whip
+255 239 213 PapayaWhip
+255 235 205 blanched almond
+255 235 205 BlanchedAlmond
+255 228 196 bisque
+255 218 185 peach puff
+255 218 185 PeachPuff
+255 222 173 navajo white
+255 222 173 NavajoWhite
+255 228 181 moccasin
+255 248 220 cornsilk
+255 255 240 ivory
+255 250 205 lemon chiffon
+255 250 205 LemonChiffon
+255 245 238 seashell
+240 255 240 honeydew
+245 255 250 mint cream
+245 255 250 MintCream
+240 255 255 azure
+240 248 255 alice blue
+240 248 255 AliceBlue
+230 230 250 lavender
+255 240 245 lavender blush
+255 240 245 LavenderBlush
+255 228 225 misty rose
+255 228 225 MistyRose
+255 255 255 white
+ 0 0 0 black
+ 47 79 79 dark slate gray
+ 47 79 79 DarkSlateGray
+ 47 79 79 dark slate grey
+ 47 79 79 DarkSlateGrey
+105 105 105 dim gray
+105 105 105 DimGray
+105 105 105 dim grey
+105 105 105 DimGrey
+112 128 144 slate gray
+112 128 144 SlateGray
+112 128 144 slate grey
+112 128 144 SlateGrey
+119 136 153 light slate gray
+119 136 153 LightSlateGray
+119 136 153 light slate grey
+119 136 153 LightSlateGrey
+190 190 190 gray
+190 190 190 grey
+211 211 211 light grey
+211 211 211 LightGrey
+211 211 211 light gray
+211 211 211 LightGray
+ 25 25 112 midnight blue
+ 25 25 112 MidnightBlue
+ 0 0 128 navy
+ 0 0 128 navy blue
+ 0 0 128 NavyBlue
+100 149 237 cornflower blue
+100 149 237 CornflowerBlue
+ 72 61 139 dark slate blue
+ 72 61 139 DarkSlateBlue
+106 90 205 slate blue
+106 90 205 SlateBlue
+123 104 238 medium slate blue
+123 104 238 MediumSlateBlue
+132 112 255 light slate blue
+132 112 255 LightSlateBlue
+ 0 0 205 medium blue
+ 0 0 205 MediumBlue
+ 65 105 225 royal blue
+ 65 105 225 RoyalBlue
+ 0 0 255 blue
+ 30 144 255 dodger blue
+ 30 144 255 DodgerBlue
+ 0 191 255 deep sky blue
+ 0 191 255 DeepSkyBlue
+135 206 235 sky blue
+135 206 235 SkyBlue
+135 206 250 light sky blue
+135 206 250 LightSkyBlue
+ 70 130 180 steel blue
+ 70 130 180 SteelBlue
+176 196 222 light steel blue
+176 196 222 LightSteelBlue
+173 216 230 light blue
+173 216 230 LightBlue
+176 224 230 powder blue
+176 224 230 PowderBlue
+175 238 238 pale turquoise
+175 238 238 PaleTurquoise
+ 0 206 209 dark turquoise
+ 0 206 209 DarkTurquoise
+ 72 209 204 medium turquoise
+ 72 209 204 MediumTurquoise
+ 64 224 208 turquoise
+ 0 255 255 cyan
+224 255 255 light cyan
+224 255 255 LightCyan
+ 95 158 160 cadet blue
+ 95 158 160 CadetBlue
+102 205 170 medium aquamarine
+102 205 170 MediumAquamarine
+127 255 212 aquamarine
+ 0 100 0 dark green
+ 0 100 0 DarkGreen
+ 85 107 47 dark olive green
+ 85 107 47 DarkOliveGreen
+143 188 143 dark sea green
+143 188 143 DarkSeaGreen
+ 46 139 87 sea green
+ 46 139 87 SeaGreen
+ 60 179 113 medium sea green
+ 60 179 113 MediumSeaGreen
+ 32 178 170 light sea green
+ 32 178 170 LightSeaGreen
+152 251 152 pale green
+152 251 152 PaleGreen
+ 0 255 127 spring green
+ 0 255 127 SpringGreen
+124 252 0 lawn green
+124 252 0 LawnGreen
+ 0 255 0 green
+127 255 0 chartreuse
+ 0 250 154 medium spring green
+ 0 250 154 MediumSpringGreen
+173 255 47 green yellow
+173 255 47 GreenYellow
+ 50 205 50 lime green
+ 50 205 50 LimeGreen
+154 205 50 yellow green
+154 205 50 YellowGreen
+ 34 139 34 forest green
+ 34 139 34 ForestGreen
+107 142 35 olive drab
+107 142 35 OliveDrab
+189 183 107 dark khaki
+189 183 107 DarkKhaki
+240 230 140 khaki
+238 232 170 pale goldenrod
+238 232 170 PaleGoldenrod
+250 250 210 light goldenrod yellow
+250 250 210 LightGoldenrodYellow
+255 255 224 light yellow
+255 255 224 LightYellow
+255 255 0 yellow
+255 215 0 gold
+238 221 130 light goldenrod
+238 221 130 LightGoldenrod
+218 165 32 goldenrod
+184 134 11 dark goldenrod
+184 134 11 DarkGoldenrod
+188 143 143 rosy brown
+188 143 143 RosyBrown
+205 92 92 indian red
+205 92 92 IndianRed
+139 69 19 saddle brown
+139 69 19 SaddleBrown
+160 82 45 sienna
+205 133 63 peru
+222 184 135 burlywood
+245 245 220 beige
+245 222 179 wheat
+244 164 96 sandy brown
+244 164 96 SandyBrown
+210 180 140 tan
+210 105 30 chocolate
+178 34 34 firebrick
+165 42 42 brown
+233 150 122 dark salmon
+233 150 122 DarkSalmon
+250 128 114 salmon
+255 160 122 light salmon
+255 160 122 LightSalmon
+255 165 0 orange
+255 140 0 dark orange
+255 140 0 DarkOrange
+255 127 80 coral
+240 128 128 light coral
+240 128 128 LightCoral
+255 99 71 tomato
+255 69 0 orange red
+255 69 0 OrangeRed
+255 0 0 red
+255 105 180 hot pink
+255 105 180 HotPink
+255 20 147 deep pink
+255 20 147 DeepPink
+255 192 203 pink
+255 182 193 light pink
+255 182 193 LightPink
+219 112 147 pale violet red
+219 112 147 PaleVioletRed
+176 48 96 maroon
+199 21 133 medium violet red
+199 21 133 MediumVioletRed
+208 32 144 violet red
+208 32 144 VioletRed
+255 0 255 magenta
+238 130 238 violet
+221 160 221 plum
+218 112 214 orchid
+186 85 211 medium orchid
+186 85 211 MediumOrchid
+153 50 204 dark orchid
+153 50 204 DarkOrchid
+148 0 211 dark violet
+148 0 211 DarkViolet
+138 43 226 blue violet
+138 43 226 BlueViolet
+160 32 240 purple
+147 112 219 medium purple
+147 112 219 MediumPurple
+216 191 216 thistle
+255 250 250 snow1
+238 233 233 snow2
+205 201 201 snow3
+139 137 137 snow4
+255 245 238 seashell1
+238 229 222 seashell2
+205 197 191 seashell3
+139 134 130 seashell4
+255 239 219 AntiqueWhite1
+238 223 204 AntiqueWhite2
+205 192 176 AntiqueWhite3
+139 131 120 AntiqueWhite4
+255 228 196 bisque1
+238 213 183 bisque2
+205 183 158 bisque3
+139 125 107 bisque4
+255 218 185 PeachPuff1
+238 203 173 PeachPuff2
+205 175 149 PeachPuff3
+139 119 101 PeachPuff4
+255 222 173 NavajoWhite1
+238 207 161 NavajoWhite2
+205 179 139 NavajoWhite3
+139 121 94 NavajoWhite4
+255 250 205 LemonChiffon1
+238 233 191 LemonChiffon2
+205 201 165 LemonChiffon3
+139 137 112 LemonChiffon4
+255 248 220 cornsilk1
+238 232 205 cornsilk2
+205 200 177 cornsilk3
+139 136 120 cornsilk4
+255 255 240 ivory1
+238 238 224 ivory2
+205 205 193 ivory3
+139 139 131 ivory4
+240 255 240 honeydew1
+224 238 224 honeydew2
+193 205 193 honeydew3
+131 139 131 honeydew4
+255 240 245 LavenderBlush1
+238 224 229 LavenderBlush2
+205 193 197 LavenderBlush3
+139 131 134 LavenderBlush4
+255 228 225 MistyRose1
+238 213 210 MistyRose2
+205 183 181 MistyRose3
+139 125 123 MistyRose4
+240 255 255 azure1
+224 238 238 azure2
+193 205 205 azure3
+131 139 139 azure4
+131 111 255 SlateBlue1
+122 103 238 SlateBlue2
+105 89 205 SlateBlue3
+ 71 60 139 SlateBlue4
+ 72 118 255 RoyalBlue1
+ 67 110 238 RoyalBlue2
+ 58 95 205 RoyalBlue3
+ 39 64 139 RoyalBlue4
+ 0 0 255 blue1
+ 0 0 238 blue2
+ 0 0 205 blue3
+ 0 0 139 blue4
+ 30 144 255 DodgerBlue1
+ 28 134 238 DodgerBlue2
+ 24 116 205 DodgerBlue3
+ 16 78 139 DodgerBlue4
+ 99 184 255 SteelBlue1
+ 92 172 238 SteelBlue2
+ 79 148 205 SteelBlue3
+ 54 100 139 SteelBlue4
+ 0 191 255 DeepSkyBlue1
+ 0 178 238 DeepSkyBlue2
+ 0 154 205 DeepSkyBlue3
+ 0 104 139 DeepSkyBlue4
+135 206 255 SkyBlue1
+126 192 238 SkyBlue2
+108 166 205 SkyBlue3
+ 74 112 139 SkyBlue4
+176 226 255 LightSkyBlue1
+164 211 238 LightSkyBlue2
+141 182 205 LightSkyBlue3
+ 96 123 139 LightSkyBlue4
+198 226 255 SlateGray1
+185 211 238 SlateGray2
+159 182 205 SlateGray3
+108 123 139 SlateGray4
+202 225 255 LightSteelBlue1
+188 210 238 LightSteelBlue2
+162 181 205 LightSteelBlue3
+110 123 139 LightSteelBlue4
+191 239 255 LightBlue1
+178 223 238 LightBlue2
+154 192 205 LightBlue3
+104 131 139 LightBlue4
+224 255 255 LightCyan1
+209 238 238 LightCyan2
+180 205 205 LightCyan3
+122 139 139 LightCyan4
+187 255 255 PaleTurquoise1
+174 238 238 PaleTurquoise2
+150 205 205 PaleTurquoise3
+102 139 139 PaleTurquoise4
+152 245 255 CadetBlue1
+142 229 238 CadetBlue2
+122 197 205 CadetBlue3
+ 83 134 139 CadetBlue4
+ 0 245 255 turquoise1
+ 0 229 238 turquoise2
+ 0 197 205 turquoise3
+ 0 134 139 turquoise4
+ 0 255 255 cyan1
+ 0 238 238 cyan2
+ 0 205 205 cyan3
+ 0 139 139 cyan4
+151 255 255 DarkSlateGray1
+141 238 238 DarkSlateGray2
+121 205 205 DarkSlateGray3
+ 82 139 139 DarkSlateGray4
+127 255 212 aquamarine1
+118 238 198 aquamarine2
+102 205 170 aquamarine3
+ 69 139 116 aquamarine4
+193 255 193 DarkSeaGreen1
+180 238 180 DarkSeaGreen2
+155 205 155 DarkSeaGreen3
+105 139 105 DarkSeaGreen4
+ 84 255 159 SeaGreen1
+ 78 238 148 SeaGreen2
+ 67 205 128 SeaGreen3
+ 46 139 87 SeaGreen4
+154 255 154 PaleGreen1
+144 238 144 PaleGreen2
+124 205 124 PaleGreen3
+ 84 139 84 PaleGreen4
+ 0 255 127 SpringGreen1
+ 0 238 118 SpringGreen2
+ 0 205 102 SpringGreen3
+ 0 139 69 SpringGreen4
+ 0 255 0 green1
+ 0 238 0 green2
+ 0 205 0 green3
+ 0 139 0 green4
+127 255 0 chartreuse1
+118 238 0 chartreuse2
+102 205 0 chartreuse3
+ 69 139 0 chartreuse4
+192 255 62 OliveDrab1
+179 238 58 OliveDrab2
+154 205 50 OliveDrab3
+105 139 34 OliveDrab4
+202 255 112 DarkOliveGreen1
+188 238 104 DarkOliveGreen2
+162 205 90 DarkOliveGreen3
+110 139 61 DarkOliveGreen4
+255 246 143 khaki1
+238 230 133 khaki2
+205 198 115 khaki3
+139 134 78 khaki4
+255 236 139 LightGoldenrod1
+238 220 130 LightGoldenrod2
+205 190 112 LightGoldenrod3
+139 129 76 LightGoldenrod4
+255 255 224 LightYellow1
+238 238 209 LightYellow2
+205 205 180 LightYellow3
+139 139 122 LightYellow4
+255 255 0 yellow1
+238 238 0 yellow2
+205 205 0 yellow3
+139 139 0 yellow4
+255 215 0 gold1
+238 201 0 gold2
+205 173 0 gold3
+139 117 0 gold4
+255 193 37 goldenrod1
+238 180 34 goldenrod2
+205 155 29 goldenrod3
+139 105 20 goldenrod4
+255 185 15 DarkGoldenrod1
+238 173 14 DarkGoldenrod2
+205 149 12 DarkGoldenrod3
+139 101 8 DarkGoldenrod4
+255 193 193 RosyBrown1
+238 180 180 RosyBrown2
+205 155 155 RosyBrown3
+139 105 105 RosyBrown4
+255 106 106 IndianRed1
+238 99 99 IndianRed2
+205 85 85 IndianRed3
+139 58 58 IndianRed4
+255 130 71 sienna1
+238 121 66 sienna2
+205 104 57 sienna3
+139 71 38 sienna4
+255 211 155 burlywood1
+238 197 145 burlywood2
+205 170 125 burlywood3
+139 115 85 burlywood4
+255 231 186 wheat1
+238 216 174 wheat2
+205 186 150 wheat3
+139 126 102 wheat4
+255 165 79 tan1
+238 154 73 tan2
+205 133 63 tan3
+139 90 43 tan4
+255 127 36 chocolate1
+238 118 33 chocolate2
+205 102 29 chocolate3
+139 69 19 chocolate4
+255 48 48 firebrick1
+238 44 44 firebrick2
+205 38 38 firebrick3
+139 26 26 firebrick4
+255 64 64 brown1
+238 59 59 brown2
+205 51 51 brown3
+139 35 35 brown4
+255 140 105 salmon1
+238 130 98 salmon2
+205 112 84 salmon3
+139 76 57 salmon4
+255 160 122 LightSalmon1
+238 149 114 LightSalmon2
+205 129 98 LightSalmon3
+139 87 66 LightSalmon4
+255 165 0 orange1
+238 154 0 orange2
+205 133 0 orange3
+139 90 0 orange4
+255 127 0 DarkOrange1
+238 118 0 DarkOrange2
+205 102 0 DarkOrange3
+139 69 0 DarkOrange4
+255 114 86 coral1
+238 106 80 coral2
+205 91 69 coral3
+139 62 47 coral4
+255 99 71 tomato1
+238 92 66 tomato2
+205 79 57 tomato3
+139 54 38 tomato4
+255 69 0 OrangeRed1
+238 64 0 OrangeRed2
+205 55 0 OrangeRed3
+139 37 0 OrangeRed4
+255 0 0 red1
+238 0 0 red2
+205 0 0 red3
+139 0 0 red4
+255 20 147 DeepPink1
+238 18 137 DeepPink2
+205 16 118 DeepPink3
+139 10 80 DeepPink4
+255 110 180 HotPink1
+238 106 167 HotPink2
+205 96 144 HotPink3
+139 58 98 HotPink4
+255 181 197 pink1
+238 169 184 pink2
+205 145 158 pink3
+139 99 108 pink4
+255 174 185 LightPink1
+238 162 173 LightPink2
+205 140 149 LightPink3
+139 95 101 LightPink4
+255 130 171 PaleVioletRed1
+238 121 159 PaleVioletRed2
+205 104 137 PaleVioletRed3
+139 71 93 PaleVioletRed4
+255 52 179 maroon1
+238 48 167 maroon2
+205 41 144 maroon3
+139 28 98 maroon4
+255 62 150 VioletRed1
+238 58 140 VioletRed2
+205 50 120 VioletRed3
+139 34 82 VioletRed4
+255 0 255 magenta1
+238 0 238 magenta2
+205 0 205 magenta3
+139 0 139 magenta4
+255 131 250 orchid1
+238 122 233 orchid2
+205 105 201 orchid3
+139 71 137 orchid4
+255 187 255 plum1
+238 174 238 plum2
+205 150 205 plum3
+139 102 139 plum4
+224 102 255 MediumOrchid1
+209 95 238 MediumOrchid2
+180 82 205 MediumOrchid3
+122 55 139 MediumOrchid4
+191 62 255 DarkOrchid1
+178 58 238 DarkOrchid2
+154 50 205 DarkOrchid3
+104 34 139 DarkOrchid4
+155 48 255 purple1
+145 44 238 purple2
+125 38 205 purple3
+ 85 26 139 purple4
+171 130 255 MediumPurple1
+159 121 238 MediumPurple2
+137 104 205 MediumPurple3
+ 93 71 139 MediumPurple4
+255 225 255 thistle1
+238 210 238 thistle2
+205 181 205 thistle3
+139 123 139 thistle4
+ 0 0 0 gray0
+ 0 0 0 grey0
+ 3 3 3 gray1
+ 3 3 3 grey1
+ 5 5 5 gray2
+ 5 5 5 grey2
+ 8 8 8 gray3
+ 8 8 8 grey3
+ 10 10 10 gray4
+ 10 10 10 grey4
+ 13 13 13 gray5
+ 13 13 13 grey5
+ 15 15 15 gray6
+ 15 15 15 grey6
+ 18 18 18 gray7
+ 18 18 18 grey7
+ 20 20 20 gray8
+ 20 20 20 grey8
+ 23 23 23 gray9
+ 23 23 23 grey9
+ 26 26 26 gray10
+ 26 26 26 grey10
+ 28 28 28 gray11
+ 28 28 28 grey11
+ 31 31 31 gray12
+ 31 31 31 grey12
+ 33 33 33 gray13
+ 33 33 33 grey13
+ 36 36 36 gray14
+ 36 36 36 grey14
+ 38 38 38 gray15
+ 38 38 38 grey15
+ 41 41 41 gray16
+ 41 41 41 grey16
+ 43 43 43 gray17
+ 43 43 43 grey17
+ 46 46 46 gray18
+ 46 46 46 grey18
+ 48 48 48 gray19
+ 48 48 48 grey19
+ 51 51 51 gray20
+ 51 51 51 grey20
+ 54 54 54 gray21
+ 54 54 54 grey21
+ 56 56 56 gray22
+ 56 56 56 grey22
+ 59 59 59 gray23
+ 59 59 59 grey23
+ 61 61 61 gray24
+ 61 61 61 grey24
+ 64 64 64 gray25
+ 64 64 64 grey25
+ 66 66 66 gray26
+ 66 66 66 grey26
+ 69 69 69 gray27
+ 69 69 69 grey27
+ 71 71 71 gray28
+ 71 71 71 grey28
+ 74 74 74 gray29
+ 74 74 74 grey29
+ 77 77 77 gray30
+ 77 77 77 grey30
+ 79 79 79 gray31
+ 79 79 79 grey31
+ 82 82 82 gray32
+ 82 82 82 grey32
+ 84 84 84 gray33
+ 84 84 84 grey33
+ 87 87 87 gray34
+ 87 87 87 grey34
+ 89 89 89 gray35
+ 89 89 89 grey35
+ 92 92 92 gray36
+ 92 92 92 grey36
+ 94 94 94 gray37
+ 94 94 94 grey37
+ 97 97 97 gray38
+ 97 97 97 grey38
+ 99 99 99 gray39
+ 99 99 99 grey39
+102 102 102 gray40
+102 102 102 grey40
+105 105 105 gray41
+105 105 105 grey41
+107 107 107 gray42
+107 107 107 grey42
+110 110 110 gray43
+110 110 110 grey43
+112 112 112 gray44
+112 112 112 grey44
+115 115 115 gray45
+115 115 115 grey45
+117 117 117 gray46
+117 117 117 grey46
+120 120 120 gray47
+120 120 120 grey47
+122 122 122 gray48
+122 122 122 grey48
+125 125 125 gray49
+125 125 125 grey49
+127 127 127 gray50
+127 127 127 grey50
+130 130 130 gray51
+130 130 130 grey51
+133 133 133 gray52
+133 133 133 grey52
+135 135 135 gray53
+135 135 135 grey53
+138 138 138 gray54
+138 138 138 grey54
+140 140 140 gray55
+140 140 140 grey55
+143 143 143 gray56
+143 143 143 grey56
+145 145 145 gray57
+145 145 145 grey57
+148 148 148 gray58
+148 148 148 grey58
+150 150 150 gray59
+150 150 150 grey59
+153 153 153 gray60
+153 153 153 grey60
+156 156 156 gray61
+156 156 156 grey61
+158 158 158 gray62
+158 158 158 grey62
+161 161 161 gray63
+161 161 161 grey63
+163 163 163 gray64
+163 163 163 grey64
+166 166 166 gray65
+166 166 166 grey65
+168 168 168 gray66
+168 168 168 grey66
+171 171 171 gray67
+171 171 171 grey67
+173 173 173 gray68
+173 173 173 grey68
+176 176 176 gray69
+176 176 176 grey69
+179 179 179 gray70
+179 179 179 grey70
+181 181 181 gray71
+181 181 181 grey71
+184 184 184 gray72
+184 184 184 grey72
+186 186 186 gray73
+186 186 186 grey73
+189 189 189 gray74
+189 189 189 grey74
+191 191 191 gray75
+191 191 191 grey75
+194 194 194 gray76
+194 194 194 grey76
+196 196 196 gray77
+196 196 196 grey77
+199 199 199 gray78
+199 199 199 grey78
+201 201 201 gray79
+201 201 201 grey79
+204 204 204 gray80
+204 204 204 grey80
+207 207 207 gray81
+207 207 207 grey81
+209 209 209 gray82
+209 209 209 grey82
+212 212 212 gray83
+212 212 212 grey83
+214 214 214 gray84
+214 214 214 grey84
+217 217 217 gray85
+217 217 217 grey85
+219 219 219 gray86
+219 219 219 grey86
+222 222 222 gray87
+222 222 222 grey87
+224 224 224 gray88
+224 224 224 grey88
+227 227 227 gray89
+227 227 227 grey89
+229 229 229 gray90
+229 229 229 grey90
+232 232 232 gray91
+232 232 232 grey91
+235 235 235 gray92
+235 235 235 grey92
+237 237 237 gray93
+237 237 237 grey93
+240 240 240 gray94
+240 240 240 grey94
+242 242 242 gray95
+242 242 242 grey95
+245 245 245 gray96
+245 245 245 grey96
+247 247 247 gray97
+247 247 247 grey97
+250 250 250 gray98
+250 250 250 grey98
+252 252 252 gray99
+252 252 252 grey99
+255 255 255 gray100
+255 255 255 grey100
+169 169 169 dark grey
+169 169 169 DarkGrey
+169 169 169 dark gray
+169 169 169 DarkGray
+0 0 139 dark blue
+0 0 139 DarkBlue
+0 139 139 dark cyan
+0 139 139 DarkCyan
+139 0 139 dark magenta
+139 0 139 DarkMagenta
+139 0 0 dark red
+139 0 0 DarkRed
+144 238 144 light green
+144 238 144 LightGreen
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
new file mode 100644
index 000000000..1b506b3f6
--- /dev/null
+++ b/runtime/scripts.vim
@@ -0,0 +1,316 @@
+" Vim support file to detect file types in scripts
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2004 Apr 18
+
+" 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
+" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
+
+
+" Only do the rest when the FileType autocommand has not been triggered yet.
+if did_filetype()
+ finish
+endif
+
+" Load the user defined scripts file first
+" Only do this when the FileType autocommand has not been triggered yet
+if exists("myscriptsfile") && file_readable(expand(myscriptsfile))
+ execute "source " . myscriptsfile
+ if did_filetype()
+ finish
+ endif
+endif
+
+" Line continuation is used here, remove 'C' from 'cpoptions'
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:line1 = getline(1)
+
+if s:line1 =~ "^#!"
+ " A script that starts with "#!".
+
+ " Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
+ " "#!/usr/bin/bash" to make matching easier.
+ if s:line1 =~ '^#!\s*\S*\<env\s'
+ let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
+ let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
+ endif
+
+ " Get the program name.
+ " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
+ " If there is no path use the first word: "#!perl [path/args]".
+ " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
+ if s:line1 =~ '^#!\s*\a:[/\\]'
+ let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
+ elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
+ let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
+ else
+ let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
+ endif
+
+ " Bourne-like shell scripts: sh ksh bash bash2
+ if s:name =~ '^\(bash\|bash2\|ksh\|sh\)\>'
+ call SetFileTypeSH(s:line1) " defined in filetype.vim
+
+ " csh scripts
+ elseif s:name =~ '^csh\>'
+ if exists("g:filetype_csh")
+ let &ft = g:filetype_csh
+ else
+ set ft=csh
+ endif
+
+ " tcsh scripts
+ elseif s:name =~ '^tcsh\>'
+ set ft=tcsh
+
+ " Z shell scripts
+ elseif s:name =~ '^zsh\>'
+ set ft=zsh
+
+ " TCL scripts
+ elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
+ set ft=tcl
+
+ " Expect scripts
+ elseif s:name =~ '^expect\>'
+ set ft=expect
+
+ " Gnuplot scripts
+ elseif s:name =~ '^gnuplot\>'
+ set ft=gnuplot
+
+ " Makefiles
+ elseif s:name =~ 'make\>'
+ set ft=make
+
+ " Perl
+ elseif s:name =~ 'perl'
+ set ft=perl
+
+ " PHP
+ elseif s:name =~ 'php'
+ set ft=php
+
+ " Python
+ elseif s:name =~ 'python'
+ set ft=python
+
+ " Groovy
+ elseif s:name =~ '^groovy\>'
+ set ft=groovy
+
+ " Ruby
+ elseif s:name =~ 'ruby'
+ set ft=ruby
+
+ " BC calculator
+ elseif s:name =~ '^bc\>'
+ set ft=bc
+
+ " sed
+ elseif s:name =~ 'sed\>'
+ set ft=sed
+
+ " OCaml-scripts
+ elseif s:name =~ 'ocaml'
+ set ft=ocaml
+
+ " Awk scripts
+ elseif s:name =~ 'awk\>'
+ set ft=awk
+
+ " Website MetaLanguage
+ elseif s:name =~ 'wml'
+ set ft=wml
+
+ " Scheme scripts
+ elseif s:name =~ 'scheme'
+ set ft=scheme
+
+ endif
+ unlet s:name
+
+else
+ " File does not start with "#!".
+
+ let s:line2 = getline(2)
+ let s:line3 = getline(3)
+ let s:line4 = getline(4)
+ let s:line5 = getline(5)
+
+ " Bourne-like shell scripts: sh ksh bash bash2
+ if s:line1 =~ '^:$'
+ call SetFileTypeSH(s:line1) " defined in filetype.vim
+
+ " Z shell scripts
+ elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
+ set ft=zsh
+
+ " ELM Mail files
+ elseif s:line1 =~ '^From [a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\= .*[12][09]\d\d$'
+ set ft=mail
+
+ " Mason
+ elseif s:line1 =~ '^<[%&].*>'
+ set ft=mason
+
+ " Vim scripts (must have '" vim' as the first line to trigger this)
+ elseif s:line1 =~ '^" *[vV]im$'
+ set ft=vim
+
+ " MOO
+ elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
+ set ft=moo
+
+ " Diff file:
+ " - "diff" in first line (context diff)
+ " - "Only in " in first line
+ " - "--- " in first line and "+++ " in second line (unified diff).
+ " - "*** " in first line and "--- " in second line (context diff).
+ " - "# It was generated by makepatch " in the second line (makepatch diff).
+ " - "Index: <filename>" in the first line (CVS file)
+ elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
+ \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
+ \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
+ set ft=diff
+
+ " PostScript Files (must have %!PS as the first line, like a2ps output)
+ elseif s:line1 =~ '^%![ \t]*PS'
+ set ft=postscr
+
+ " M4 scripts: Guess there is a line that starts with "dnl".
+ elseif s:line1 =~ '^\s*dnl\>'
+ \ || s:line2 =~ '^\s*dnl\>'
+ \ || s:line3 =~ '^\s*dnl\>'
+ \ || s:line4 =~ '^\s*dnl\>'
+ \ || s:line5 =~ '^\s*dnl\>'
+ set ft=m4
+
+ " AmigaDos scripts
+ elseif $TERM == "amiga"
+ \ && (s:line1 =~ "^;" || s:line1 =~ '^\.[bB][rR][aA]')
+ set ft=amiga
+
+ " SiCAD scripts (must have procn or procd as the first line to trigger this)
+ elseif s:line1 =~? '^ *proc[nd] *$'
+ set ft=sicad
+
+ " Purify log files start with "**** Purify"
+ elseif s:line1 =~ '^\*\*\*\* Purify'
+ set ft=purifylog
+
+ " XML
+ elseif s:line1 =~ '<?\s*xml.*?>'
+ set ft=xml
+
+ " XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
+ elseif s:line1 =~ '\<DTD\s\+XHTML\s'
+ set ft=xhtml
+
+ " XXD output
+ elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
+ set ft=xxd
+
+ " RCS/CVS log output
+ elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
+ set ft=rcslog
+
+ " CVS commit
+ elseif s:line2 =~ '^CVS:'
+ set ft=cvs
+
+ " Send-pr
+ elseif s:line1 =~ '^SEND-PR:'
+ set ft=sendpr
+
+ " SNNS files
+ elseif s:line1 =~ '^SNNS network definition file'
+ set ft=snnsnet
+ elseif s:line1 =~ '^SNNS pattern definition file'
+ set ft=snnspat
+ elseif s:line1 =~ '^SNNS result file'
+ set ft=snnsres
+
+ " Virata
+ elseif s:line1 =~ '^%.\{-}[Vv]irata'
+ \ || s:line2 =~ '^%.\{-}[Vv]irata'
+ \ || s:line3 =~ '^%.\{-}[Vv]irata'
+ \ || s:line4 =~ '^%.\{-}[Vv]irata'
+ \ || s:line5 =~ '^%.\{-}[Vv]irata'
+ set ft=virata
+
+ " Strace
+ elseif s:line1 =~ '^[0-9]* *execve('
+ set ft=strace
+
+ " VSE JCL
+ elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
+ set ft=vsejcl
+
+ " TAK and SINDA
+ elseif s:line4 =~ 'K & K Associates' || s:line2 =~ 'TAK 2000'
+ set ft=takout
+ elseif s:line3 =~ 'S Y S T E M S I M P R O V E D '
+ set ft=sindaout
+ elseif getline(6) =~ 'Run Date: '
+ set ft=takcmp
+ elseif getline(9) =~ 'Node File 1'
+ set ft=sindacmp
+
+ " DNS zone files
+ elseif s:line1.s:line2 =~ '$ORIGIN\|$TTL\|IN\s*SOA'
+ \ || s:line1.s:line2.s:line3.s:line4 =~ 'BIND.*named'
+ set ft=dns
+
+ " BAAN
+ elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
+ \ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
+ set ft=baan
+
+ " Valgrind
+ elseif s:line1 =~ '^==\d\+== valgrind'
+ set ft=valgrind
+
+ " Renderman Interface Bytestream
+ elseif s:line1 =~ '^##RenderMan'
+ set ft=rib
+
+ " Scheme scripts
+ elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
+ set ft=scheme
+
+ " CVS diff
+ else
+ let lnum = 1
+ while getline(lnum) =~ "^? " && lnum < line("$")
+ let lnum = lnum + 1
+ endwhile
+ if getline(lnum) =~ '^Index:\s\+\f\+$'
+ set ft=diff
+
+ " locale input files: Formal Definitions of Cultural Conventions
+ " filename must be like en_US, fr_FR@euro or en_US.UTF-8
+ elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
+ let lnum = 1
+ while lnum < 100 && lnum < line("$")
+ if getline(lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
+ setf fdcc
+ break
+ endif
+ let lnum = lnum + 1
+ endwhile
+ endif
+
+ endif
+
+ unlet s:line2 s:line3 s:line4 s:line5
+
+endif
+
+" Restore 'cpoptions'
+let &cpo = s:cpo_save
+
+unlet s:cpo_save s:line1
diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim
new file mode 100644
index 000000000..f6e5823b3
--- /dev/null
+++ b/runtime/synmenu.vim
@@ -0,0 +1,450 @@
+" Vim support file to define the syntax selection menu
+" This file is normally sourced from menu.vim.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Jun 22
+
+" Define the SetSyn function, used for the Syntax menu entries.
+" Set 'filetype' and also 'syntax' if it is manually selected.
+fun! SetSyn(name)
+ if a:name == "fvwm1"
+ let use_fvwm_1 = 1
+ let use_fvwm_2 = 0
+ let name = "fvwm"
+ elseif a:name == "fvwm2"
+ let use_fvwm_2 = 1
+ let use_fvwm_1 = 0
+ let name = "fvwm"
+ else
+ let name = a:name
+ endif
+ if !exists("s:syntax_menu_synonly")
+ exe "set ft=" . name
+ if exists("g:syntax_manual")
+ exe "set syn=" . name
+ endif
+ else
+ exe "set syn=" . name
+ endif
+endfun
+
+" The following menu items are generated by makemenu.vim.
+" The Start Of The Syntax Menu
+
+an 50.10.100 &Syntax.AB.Aap :cal SetSyn("aap")<CR>
+an 50.10.110 &Syntax.AB.Abaqus :cal SetSyn("abaqus")<CR>
+an 50.10.120 &Syntax.AB.ABC\ music\ notation :cal SetSyn("abc")<CR>
+an 50.10.130 &Syntax.AB.ABEL :cal SetSyn("abel")<CR>
+an 50.10.140 &Syntax.AB.AceDB\ model :cal SetSyn("acedb")<CR>
+an 50.10.150 &Syntax.AB.Ada :cal SetSyn("ada")<CR>
+an 50.10.160 &Syntax.AB.AfLex :cal SetSyn("aflex")<CR>
+an 50.10.170 &Syntax.AB.Altera\ AHDL :cal SetSyn("ahdl")<CR>
+an 50.10.180 &Syntax.AB.Amiga\ DOS :cal SetSyn("amiga")<CR>
+an 50.10.190 &Syntax.AB.AMPL :cal SetSyn("ampl")<CR>
+an 50.10.200 &Syntax.AB.Ant\ build\ file :cal SetSyn("ant")<CR>
+an 50.10.210 &Syntax.AB.ANTLR :cal SetSyn("antlr")<CR>
+an 50.10.220 &Syntax.AB.Apache\ config :cal SetSyn("apache")<CR>
+an 50.10.230 &Syntax.AB.Apache-style\ config :cal SetSyn("apachestyle")<CR>
+an 50.10.240 &Syntax.AB.Applix\ ELF :cal SetSyn("elf")<CR>
+an 50.10.250 &Syntax.AB.Arc\ Macro\ Language :cal SetSyn("aml")<CR>
+an 50.10.260 &Syntax.AB.Arch\ inventory :cal SetSyn("arch")<CR>
+an 50.10.270 &Syntax.AB.ART :cal SetSyn("art")<CR>
+an 50.10.280 &Syntax.AB.ASP\ with\ VBScript :cal SetSyn("aspvbs")<CR>
+an 50.10.290 &Syntax.AB.ASP\ with\ Perl :cal SetSyn("aspperl")<CR>
+an 50.10.300 &Syntax.AB.Assembly.680x0 :cal SetSyn("asm68k")<CR>
+an 50.10.310 &Syntax.AB.Assembly.Flat :cal SetSyn("fasm")<CR>
+an 50.10.320 &Syntax.AB.Assembly.GNU :cal SetSyn("asm")<CR>
+an 50.10.330 &Syntax.AB.Assembly.GNU\ H-8300 :cal SetSyn("asmh8300")<CR>
+an 50.10.340 &Syntax.AB.Assembly.Intel\ IA-64 :cal SetSyn("ia64")<CR>
+an 50.10.350 &Syntax.AB.Assembly.Microsoft :cal SetSyn("masm")<CR>
+an 50.10.360 &Syntax.AB.Assembly.Netwide :cal SetSyn("nasm")<CR>
+an 50.10.370 &Syntax.AB.Assembly.PIC :cal SetSyn("pic")<CR>
+an 50.10.380 &Syntax.AB.Assembly.Turbo :cal SetSyn("tasm")<CR>
+an 50.10.390 &Syntax.AB.Assembly.VAX\ Macro\ Assembly :cal SetSyn("vmasm")<CR>
+an 50.10.400 &Syntax.AB.Assembly.Z-80 :cal SetSyn("z8a")<CR>
+an 50.10.410 &Syntax.AB.Assembly.xa\ 6502\ cross\ assember :cal SetSyn("a65")<CR>
+an 50.10.420 &Syntax.AB.ASN\.1 :cal SetSyn("asn")<CR>
+an 50.10.430 &Syntax.AB.Atlas :cal SetSyn("atlas")<CR>
+an 50.10.440 &Syntax.AB.Automake :cal SetSyn("automake")<CR>
+an 50.10.450 &Syntax.AB.Avenue :cal SetSyn("ave")<CR>
+an 50.10.460 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
+an 50.10.470 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
+an 50.10.490 &Syntax.AB.B :cal SetSyn("b")<CR>
+an 50.10.500 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
+an 50.10.510 &Syntax.AB.BASIC :cal SetSyn("basic")<CR>
+an 50.10.520 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
+an 50.10.530 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
+an 50.10.540 &Syntax.AB.BibTeX :cal SetSyn("bib")<CR>
+an 50.10.550 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
+an 50.10.560 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
+an 50.10.570 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
+an 50.20.100 &Syntax.C.C :cal SetSyn("c")<CR>
+an 50.20.110 &Syntax.C.C++ :cal SetSyn("cpp")<CR>
+an 50.20.120 &Syntax.C.C# :cal SetSyn("cs")<CR>
+an 50.20.130 &Syntax.C.Calendar :cal SetSyn("calendar")<CR>
+an 50.20.140 &Syntax.C.CDL :cal SetSyn("cdl")<CR>
+an 50.20.150 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
+an 50.20.160 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
+an 50.20.170 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
+an 50.20.180 &Syntax.C.Cascading\ Style\ Sheets :cal SetSyn("css")<CR>
+an 50.20.190 &Syntax.C.Century\ Term :cal SetSyn("cterm")<CR>
+an 50.20.200 &Syntax.C.CH\ script :cal SetSyn("ch")<CR>
+an 50.20.210 &Syntax.C.ChangeLog :cal SetSyn("changelog")<CR>
+an 50.20.220 &Syntax.C.Cheetah\ template :cal SetSyn("cheetah")<CR>
+an 50.20.230 &Syntax.C.CHILL :cal SetSyn("chill")<CR>
+an 50.20.240 &Syntax.C.Clean :cal SetSyn("clean")<CR>
+an 50.20.250 &Syntax.C.Clever :cal SetSyn("cl")<CR>
+an 50.20.260 &Syntax.C.Clipper :cal SetSyn("clipper")<CR>
+an 50.20.270 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
+an 50.20.280 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+an 50.20.290 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+an 50.20.300 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
+an 50.20.310 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
+an 50.20.320 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
+an 50.20.330 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
+an 50.20.340 &Syntax.C.CSP :cal SetSyn("csp")<CR>
+an 50.20.350 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
+an 50.20.360 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+an 50.20.370 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
+an 50.20.380 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+an 50.30.100 &Syntax.DE.D :cal SetSyn("d")<CR>
+an 50.30.110 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
+an 50.30.120 &Syntax.DE.Debian.Debian\ Control :cal SetSyn("debcontrol")<CR>
+an 50.30.130 &Syntax.DE.Desktop :cal SetSyn("desktop")<CR>
+an 50.30.140 &Syntax.DE.Diff :cal SetSyn("diff")<CR>
+an 50.30.150 &Syntax.DE.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
+an 50.30.160 &Syntax.DE.Dircolors :cal SetSyn("dircolors")<CR>
+an 50.30.170 &Syntax.DE.DNS/BIND\ zone :cal SetSyn("dns")<CR>
+an 50.30.180 &Syntax.DE.DocBook.auto-detect :cal SetSyn("docbk")<CR>
+an 50.30.190 &Syntax.DE.DocBook.SGML :cal SetSyn("docbksgml")<CR>
+an 50.30.200 &Syntax.DE.DocBook.XML :cal SetSyn("docbkxml")<CR>
+an 50.30.210 &Syntax.DE.Dot :cal SetSyn("dot")<CR>
+an 50.30.220 &Syntax.DE.Dracula :cal SetSyn("dracula")<CR>
+an 50.30.230 &Syntax.DE.DSSSL :cal SetSyn("dsl")<CR>
+an 50.30.240 &Syntax.DE.DTD :cal SetSyn("dtd")<CR>
+an 50.30.250 &Syntax.DE.DTML\ (Zope) :cal SetSyn("dtml")<CR>
+an 50.30.260 &Syntax.DE.Dylan.Dylan :cal SetSyn("dylan")<CR>
+an 50.30.270 &Syntax.DE.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
+an 50.30.280 &Syntax.DE.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
+an 50.30.300 &Syntax.DE.EDIF :cal SetSyn("edif")<CR>
+an 50.30.310 &Syntax.DE.Eiffel :cal SetSyn("eiffel")<CR>
+an 50.30.320 &Syntax.DE.Elinks\ config :cal SetSyn("elinks")<CR>
+an 50.30.330 &Syntax.DE.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
+an 50.30.340 &Syntax.DE.Embedix\ Component\ Description :cal SetSyn("ecd")<CR>
+an 50.30.350 &Syntax.DE.ERicsson\ LANGuage :cal SetSyn("erlang")<CR>
+an 50.30.360 &Syntax.DE.ESQL-C :cal SetSyn("esqlc")<CR>
+an 50.30.370 &Syntax.DE.Essbase\ script :cal SetSyn("csc")<CR>
+an 50.30.380 &Syntax.DE.Eterm\ config :cal SetSyn("eterm")<CR>
+an 50.30.390 &Syntax.DE.Exim\ conf :cal SetSyn("exim")<CR>
+an 50.30.400 &Syntax.DE.Expect :cal SetSyn("expect")<CR>
+an 50.30.410 &Syntax.DE.Exports :cal SetSyn("exports")<CR>
+an 50.40.100 &Syntax.FG.Fetchmail :cal SetSyn("fetchmail")<CR>
+an 50.40.110 &Syntax.FG.Focus\ Executable :cal SetSyn("focexec")<CR>
+an 50.40.120 &Syntax.FG.Focus\ Master :cal SetSyn("master")<CR>
+an 50.40.130 &Syntax.FG.FORM :cal SetSyn("form")<CR>
+an 50.40.140 &Syntax.FG.Forth :cal SetSyn("forth")<CR>
+an 50.40.150 &Syntax.FG.Fortran :cal SetSyn("fortran")<CR>
+an 50.40.160 &Syntax.FG.FoxPro :cal SetSyn("foxpro")<CR>
+an 50.40.170 &Syntax.FG.Fstab :cal SetSyn("fstab")<CR>
+an 50.40.180 &Syntax.FG.Fvwm.Fvwm\ configuration :cal SetSyn("fvwm1")<CR>
+an 50.40.190 &Syntax.FG.Fvwm.Fvwm2\ configuration :cal SetSyn("fvwm2")<CR>
+an 50.40.200 &Syntax.FG.Fvwm.Fvwm2\ configuration\ with\ M4 :cal SetSyn("fvwm2m4")<CR>
+an 50.40.220 &Syntax.FG.GDB\ command\ file :cal SetSyn("gdb")<CR>
+an 50.40.230 &Syntax.FG.GDMO :cal SetSyn("gdmo")<CR>
+an 50.40.240 &Syntax.FG.Gedcom :cal SetSyn("gedcom")<CR>
+an 50.40.250 &Syntax.FG.Gkrellmrc :cal SetSyn("gkrellmrc")<CR>
+an 50.40.260 &Syntax.FG.GP :cal SetSyn("gp")<CR>
+an 50.40.270 &Syntax.FG.GPG :cal SetSyn("gpg")<CR>
+an 50.40.280 &Syntax.FG.Grub :cal SetSyn("grub")<CR>
+an 50.40.290 &Syntax.FG.GNU\ Server\ Pages :cal SetSyn("gsp")<CR>
+an 50.40.300 &Syntax.FG.GNUplot :cal SetSyn("gnuplot")<CR>
+an 50.40.310 &Syntax.FG.GrADS\ scripts :cal SetSyn("grads")<CR>
+an 50.40.320 &Syntax.FG.Groff :cal SetSyn("groff")<CR>
+an 50.40.330 &Syntax.FG.GTKrc :cal SetSyn("gtkrc")<CR>
+an 50.50.100 &Syntax.HIJK.Haskell.Haskell :cal SetSyn("haskell")<CR>
+an 50.50.110 &Syntax.HIJK.Haskell.Haskell-c2hs :cal SetSyn("chaskell")<CR>
+an 50.50.120 &Syntax.HIJK.Haskell.Haskell-literate :cal SetSyn("lhaskell")<CR>
+an 50.50.130 &Syntax.HIJK.Hercules :cal SetSyn("hercules")<CR>
+an 50.50.140 &Syntax.HIJK.Hex\ dump.XXD :cal SetSyn("xxd")<CR>
+an 50.50.150 &Syntax.HIJK.Hex\ dump.Intel\ MCS51 :cal SetSyn("hex")<CR>
+an 50.50.160 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
+an 50.50.170 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
+an 50.50.180 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
+an 50.50.190 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
+an 50.50.200 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
+an 50.50.210 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
+an 50.50.230 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
+an 50.50.240 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
+an 50.50.250 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
+an 50.50.260 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
+an 50.50.270 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
+an 50.50.280 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
+an 50.50.290 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
+an 50.50.300 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
+an 50.50.310 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.320 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
+an 50.50.330 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
+an 50.50.340 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
+an 50.50.360 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
+an 50.50.370 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
+an 50.50.380 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
+an 50.50.390 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
+an 50.50.400 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
+an 50.50.410 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
+an 50.50.420 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
+an 50.50.430 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
+an 50.50.440 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
+an 50.50.450 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
+an 50.50.470 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.480 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.490 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.60.100 &Syntax.L-Ma.Lace :cal SetSyn("lace")<CR>
+an 50.60.110 &Syntax.L-Ma.LamdaProlog :cal SetSyn("lprolog")<CR>
+an 50.60.120 &Syntax.L-Ma.Latte :cal SetSyn("latte")<CR>
+an 50.60.130 &Syntax.L-Ma.LDAP\ LDIF :cal SetSyn("ldif")<CR>
+an 50.60.140 &Syntax.L-Ma.Lex :cal SetSyn("lex")<CR>
+an 50.60.150 &Syntax.L-Ma.LFTP\ config :cal SetSyn("lftp")<CR>
+an 50.60.160 &Syntax.L-Ma.Libao :cal SetSyn("libao")<CR>
+an 50.60.170 &Syntax.L-Ma.LifeLines\ script :cal SetSyn("lifelines")<CR>
+an 50.60.180 &Syntax.L-Ma.Lilo :cal SetSyn("lilo")<CR>
+an 50.60.190 &Syntax.L-Ma.Lisp :cal SetSyn("lisp")<CR>
+an 50.60.200 &Syntax.L-Ma.Lite :cal SetSyn("lite")<CR>
+an 50.60.210 &Syntax.L-Ma.Locale\ Input :cal SetSyn("fdcc")<CR>
+an 50.60.220 &Syntax.L-Ma.Logtalk :cal SetSyn("logtalk")<CR>
+an 50.60.230 &Syntax.L-Ma.LOTOS :cal SetSyn("lotos")<CR>
+an 50.60.240 &Syntax.L-Ma.LotusScript :cal SetSyn("lscript")<CR>
+an 50.60.250 &Syntax.L-Ma.Lout :cal SetSyn("lout")<CR>
+an 50.60.260 &Syntax.L-Ma.LPC :cal SetSyn("lpc")<CR>
+an 50.60.270 &Syntax.L-Ma.Lua :cal SetSyn("lua")<CR>
+an 50.60.280 &Syntax.L-Ma.Lynx\ Style :cal SetSyn("lss")<CR>
+an 50.60.290 &Syntax.L-Ma.Lynx\ config :cal SetSyn("lynx")<CR>
+an 50.60.310 &Syntax.L-Ma.M4 :cal SetSyn("m4")<CR>
+an 50.60.320 &Syntax.L-Ma.MaGic\ Point :cal SetSyn("mgp")<CR>
+an 50.60.330 &Syntax.L-Ma.Mail :cal SetSyn("mail")<CR>
+an 50.60.340 &Syntax.L-Ma.Mailcap :cal SetSyn("mailcap")<CR>
+an 50.60.350 &Syntax.L-Ma.Makefile :cal SetSyn("make")<CR>
+an 50.60.360 &Syntax.L-Ma.MakeIndex :cal SetSyn("ist")<CR>
+an 50.60.370 &Syntax.L-Ma.Man\ page :cal SetSyn("man")<CR>
+an 50.60.380 &Syntax.L-Ma.Maple\ V :cal SetSyn("maple")<CR>
+an 50.60.390 &Syntax.L-Ma.Mason :cal SetSyn("mason")<CR>
+an 50.60.400 &Syntax.L-Ma.Mathematica :cal SetSyn("mma")<CR>
+an 50.60.410 &Syntax.L-Ma.Matlab :cal SetSyn("matlab")<CR>
+an 50.70.100 &Syntax.Me-NO.MEL\ (for\ Maya) :cal SetSyn("mel")<CR>
+an 50.70.110 &Syntax.Me-NO.Metafont :cal SetSyn("mf")<CR>
+an 50.70.120 &Syntax.Me-NO.MetaPost :cal SetSyn("mp")<CR>
+an 50.70.130 &Syntax.Me-NO.MMIX :cal SetSyn("mmix")<CR>
+an 50.70.140 &Syntax.Me-NO.Modconf :cal SetSyn("modconf")<CR>
+an 50.70.150 &Syntax.Me-NO.Model :cal SetSyn("model")<CR>
+an 50.70.160 &Syntax.Me-NO.Modsim\ III :cal SetSyn("modsim3")<CR>
+an 50.70.170 &Syntax.Me-NO.Modula\ 2 :cal SetSyn("modula2")<CR>
+an 50.70.180 &Syntax.Me-NO.Modula\ 3 :cal SetSyn("modula3")<CR>
+an 50.70.190 &Syntax.Me-NO.Monk :cal SetSyn("monk")<CR>
+an 50.70.200 &Syntax.Me-NO.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
+an 50.70.210 &Syntax.Me-NO.MOO :cal SetSyn("moo")<CR>
+an 50.70.220 &Syntax.Me-NO.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
+an 50.70.230 &Syntax.Me-NO.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
+an 50.70.240 &Syntax.Me-NO.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
+an 50.70.250 &Syntax.Me-NO.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
+an 50.70.260 &Syntax.Me-NO.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
+an 50.70.270 &Syntax.Me-NO.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
+an 50.70.280 &Syntax.Me-NO.Msql :cal SetSyn("msql")<CR>
+an 50.70.290 &Syntax.Me-NO.MUSHcode :cal SetSyn("mush")<CR>
+an 50.70.300 &Syntax.Me-NO.Muttrc :cal SetSyn("muttrc")<CR>
+an 50.70.320 &Syntax.Me-NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR>
+an 50.70.330 &Syntax.Me-NO.Natural :cal SetSyn("natural")<CR>
+an 50.70.340 &Syntax.Me-NO.Novell\ NCF\ batch :cal SetSyn("ncf")<CR>
+an 50.70.350 &Syntax.Me-NO.Not\ Quite\ C\ (LEGO) :cal SetSyn("nqc")<CR>
+an 50.70.360 &Syntax.Me-NO.Nroff :cal SetSyn("nroff")<CR>
+an 50.70.370 &Syntax.Me-NO.NSIS\ script :cal SetSyn("nsis")<CR>
+an 50.70.390 &Syntax.Me-NO.Objective\ C :cal SetSyn("objc")<CR>
+an 50.70.400 &Syntax.Me-NO.Objective\ C++ :cal SetSyn("objcpp")<CR>
+an 50.70.410 &Syntax.Me-NO.OCAML :cal SetSyn("ocaml")<CR>
+an 50.70.420 &Syntax.Me-NO.Occam :cal SetSyn("occam")<CR>
+an 50.70.430 &Syntax.Me-NO.Omnimark :cal SetSyn("omnimark")<CR>
+an 50.70.440 &Syntax.Me-NO.OpenROAD :cal SetSyn("openroad")<CR>
+an 50.70.450 &Syntax.Me-NO.Open\ Psion\ Lang :cal SetSyn("opl")<CR>
+an 50.70.460 &Syntax.Me-NO.Oracle\ config :cal SetSyn("ora")<CR>
+an 50.80.100 &Syntax.PQ.Palm\ resource\ compiler :cal SetSyn("pilrc")<CR>
+an 50.80.110 &Syntax.PQ.Packet\ filter\ conf :cal SetSyn("pf")<CR>
+an 50.80.120 &Syntax.PQ.PApp :cal SetSyn("papp")<CR>
+an 50.80.130 &Syntax.PQ.Pascal :cal SetSyn("pascal")<CR>
+an 50.80.140 &Syntax.PQ.PCCTS :cal SetSyn("pccts")<CR>
+an 50.80.150 &Syntax.PQ.PPWizard :cal SetSyn("ppwiz")<CR>
+an 50.80.160 &Syntax.PQ.Perl.Perl :cal SetSyn("perl")<CR>
+an 50.80.170 &Syntax.PQ.Perl.Perl\ POD :cal SetSyn("pod")<CR>
+an 50.80.180 &Syntax.PQ.Perl.Perl\ XS :cal SetSyn("xs")<CR>
+an 50.80.190 &Syntax.PQ.PHP.PHP\ 3-4 :cal SetSyn("php")<CR>
+an 50.80.200 &Syntax.PQ.PHP.Phtml\ (PHP\ 2) :cal SetSyn("phtml")<CR>
+an 50.80.210 &Syntax.PQ.Pike :cal SetSyn("pike")<CR>
+an 50.80.220 &Syntax.PQ.Pine\ RC :cal SetSyn("pine")<CR>
+an 50.80.230 &Syntax.PQ.Pinfo\ RC :cal SetSyn("pinfo")<CR>
+an 50.80.240 &Syntax.PQ.PL/M :cal SetSyn("plm")<CR>
+an 50.80.250 &Syntax.PQ.PL/SQL :cal SetSyn("plsql")<CR>
+an 50.80.260 &Syntax.PQ.PLP :cal SetSyn("plp")<CR>
+an 50.80.270 &Syntax.PQ.PO\ (GNU\ gettext) :cal SetSyn("po")<CR>
+an 50.80.280 &Syntax.PQ.Postfix\ main\ config :cal SetSyn("pfmain")<CR>
+an 50.80.290 &Syntax.PQ.PostScript.PostScript :cal SetSyn("postscr")<CR>
+an 50.80.300 &Syntax.PQ.PostScript.PostScript\ Printer\ Description :cal SetSyn("ppd")<CR>
+an 50.80.310 &Syntax.PQ.Povray.Povray\ scene\ descr :cal SetSyn("pov")<CR>
+an 50.80.320 &Syntax.PQ.Povray.Povray\ configuration :cal SetSyn("povini")<CR>
+an 50.80.330 &Syntax.PQ.Printcap :cal SetSyn("pcap")<CR>
+an 50.80.340 &Syntax.PQ.Procmail :cal SetSyn("procmail")<CR>
+an 50.80.350 &Syntax.PQ.Product\ Spec\ File :cal SetSyn("psf")<CR>
+an 50.80.360 &Syntax.PQ.Progress :cal SetSyn("progress")<CR>
+an 50.80.370 &Syntax.PQ.Prolog :cal SetSyn("prolog")<CR>
+an 50.80.380 &Syntax.PQ.Purify\ log :cal SetSyn("purifylog")<CR>
+an 50.80.390 &Syntax.PQ.Pyrex :cal SetSyn("pyrex")<CR>
+an 50.80.400 &Syntax.PQ.Python :cal SetSyn("python")<CR>
+an 50.80.420 &Syntax.PQ.Quake :cal SetSyn("quake")<CR>
+an 50.80.430 &Syntax.PQ.Quickfix\ window :cal SetSyn("qf")<CR>
+an 50.90.100 &Syntax.R-Sg.R :cal SetSyn("r")<CR>
+an 50.90.110 &Syntax.R-Sg.Radiance :cal SetSyn("radiance")<CR>
+an 50.90.120 &Syntax.R-Sg.Ratpoison :cal SetSyn("ratpoison")<CR>
+an 50.90.130 &Syntax.R-Sg.RCS.RCS\ log\ output :cal SetSyn("rcslog")<CR>
+an 50.90.140 &Syntax.R-Sg.RCS.RCS\ file :cal SetSyn("rcs")<CR>
+an 50.90.150 &Syntax.R-Sg.Readline\ config :cal SetSyn("readline")<CR>
+an 50.90.160 &Syntax.R-Sg.Rebol :cal SetSyn("rebol")<CR>
+an 50.90.170 &Syntax.R-Sg.Remind :cal SetSyn("remind")<CR>
+an 50.90.180 &Syntax.R-Sg.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
+an 50.90.190 &Syntax.R-Sg.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
+an 50.90.200 &Syntax.R-Sg.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
+an 50.90.210 &Syntax.R-Sg.Resolv\.conf :cal SetSyn("resolv")<CR>
+an 50.90.220 &Syntax.R-Sg.Rexx :cal SetSyn("rexx")<CR>
+an 50.90.230 &Syntax.R-Sg.Robots\.txt :cal SetSyn("robots")<CR>
+an 50.90.240 &Syntax.R-Sg.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
+an 50.90.250 &Syntax.R-Sg.Rpcgen :cal SetSyn("rpcgen")<CR>
+an 50.90.260 &Syntax.R-Sg.RPL/2 :cal SetSyn("rpl")<CR>
+an 50.90.270 &Syntax.R-Sg.ReStructuredText :cal SetSyn("rst")<CR>
+an 50.90.280 &Syntax.R-Sg.RTF :cal SetSyn("rtf")<CR>
+an 50.90.290 &Syntax.R-Sg.Ruby :cal SetSyn("ruby")<CR>
+an 50.90.310 &Syntax.R-Sg.S-Lang :cal SetSyn("slang")<CR>
+an 50.90.320 &Syntax.R-Sg.Samba\ config :cal SetSyn("samba")<CR>
+an 50.90.330 &Syntax.R-Sg.SAS :cal SetSyn("sas")<CR>
+an 50.90.340 &Syntax.R-Sg.Sather :cal SetSyn("sather")<CR>
+an 50.90.350 &Syntax.R-Sg.Scheme :cal SetSyn("scheme")<CR>
+an 50.90.360 &Syntax.R-Sg.Scilab :cal SetSyn("scilab")<CR>
+an 50.90.370 &Syntax.R-Sg.Screen\ RC :cal SetSyn("screen")<CR>
+an 50.90.380 &Syntax.R-Sg.SDL :cal SetSyn("sdl")<CR>
+an 50.90.390 &Syntax.R-Sg.Sed :cal SetSyn("sed")<CR>
+an 50.90.400 &Syntax.R-Sg.Sendmail\.cf :cal SetSyn("sm")<CR>
+an 50.90.410 &Syntax.R-Sg.Send-pr :cal SetSyn("sendpr")<CR>
+an 50.90.420 &Syntax.R-Sg.SGML.SGML\ catalog :cal SetSyn("catalog")<CR>
+an 50.90.430 &Syntax.R-Sg.SGML.SGML\ DTD :cal SetSyn("sgml")<CR>
+an 50.90.440 &Syntax.R-Sg.SGML.SGML\ Declaration :cal SetSyn("sgmldecl")<CR>
+an 50.90.450 &Syntax.R-Sg.SGML.SGML-linuxdoc :cal SetSyn("sgmllnx")<CR>
+an 50.100.100 &Syntax.Sh-S.Shell\ script.sh\ and\ ksh :cal SetSyn("sh")<CR>
+an 50.100.110 &Syntax.Sh-S.Shell\ script.csh :cal SetSyn("csh")<CR>
+an 50.100.120 &Syntax.Sh-S.Shell\ script.tcsh :cal SetSyn("tcsh")<CR>
+an 50.100.130 &Syntax.Sh-S.Shell\ script.zsh :cal SetSyn("zsh")<CR>
+an 50.100.140 &Syntax.Sh-S.SiCAD :cal SetSyn("sicad")<CR>
+an 50.100.150 &Syntax.Sh-S.Simula :cal SetSyn("simula")<CR>
+an 50.100.160 &Syntax.Sh-S.Sinda.Sinda\ compare :cal SetSyn("sindacmp")<CR>
+an 50.100.170 &Syntax.Sh-S.Sinda.Sinda\ input :cal SetSyn("sinda")<CR>
+an 50.100.180 &Syntax.Sh-S.Sinda.Sinda\ output :cal SetSyn("sindaout")<CR>
+an 50.100.190 &Syntax.Sh-S.SKILL.SKILL :cal SetSyn("skill")<CR>
+an 50.100.200 &Syntax.Sh-S.SKILL.SKILL\ for\ Diva :cal SetSyn("diva")<CR>
+an 50.100.210 &Syntax.Sh-S.Slice :cal SetSyn("slice")<CR>
+an 50.100.220 &Syntax.Sh-S.SLRN.Slrn\ rc :cal SetSyn("slrnrc")<CR>
+an 50.100.230 &Syntax.Sh-S.SLRN.Slrn\ score :cal SetSyn("slrnsc")<CR>
+an 50.100.240 &Syntax.Sh-S.SmallTalk :cal SetSyn("st")<CR>
+an 50.100.250 &Syntax.Sh-S.Smarty\ Templates :cal SetSyn("smarty")<CR>
+an 50.100.260 &Syntax.Sh-S.SMIL :cal SetSyn("smil")<CR>
+an 50.100.270 &Syntax.Sh-S.SMITH :cal SetSyn("smith")<CR>
+an 50.100.280 &Syntax.Sh-S.SNMP\ MIB :cal SetSyn("mib")<CR>
+an 50.100.290 &Syntax.Sh-S.SNNS.SNNS\ network :cal SetSyn("snnsnet")<CR>
+an 50.100.300 &Syntax.Sh-S.SNNS.SNNS\ pattern :cal SetSyn("snnspat")<CR>
+an 50.100.310 &Syntax.Sh-S.SNNS.SNNS\ result :cal SetSyn("snnsres")<CR>
+an 50.100.320 &Syntax.Sh-S.Snobol4 :cal SetSyn("snobol4")<CR>
+an 50.100.330 &Syntax.Sh-S.Snort\ Configuration :cal SetSyn("hog")<CR>
+an 50.100.340 &Syntax.Sh-S.SPEC\ (Linux\ RPM) :cal SetSyn("spec")<CR>
+an 50.100.350 &Syntax.Sh-S.Specman :cal SetSyn("specman")<CR>
+an 50.100.360 &Syntax.Sh-S.Spice :cal SetSyn("spice")<CR>
+an 50.100.370 &Syntax.Sh-S.Spyce :cal SetSyn("spyce")<CR>
+an 50.100.380 &Syntax.Sh-S.Speedup :cal SetSyn("spup")<CR>
+an 50.100.390 &Syntax.Sh-S.Splint :cal SetSyn("splint")<CR>
+an 50.100.400 &Syntax.Sh-S.Squid\ config :cal SetSyn("squid")<CR>
+an 50.100.410 &Syntax.Sh-S.SQL.MySQL :cal SetSyn("mysql")<CR>
+an 50.100.420 &Syntax.Sh-S.SQL.SQL :cal SetSyn("sql")<CR>
+an 50.100.430 &Syntax.Sh-S.SQL.SQL\ Forms :cal SetSyn("sqlforms")<CR>
+an 50.100.440 &Syntax.Sh-S.SQL.SQLJ :cal SetSyn("sqlj")<CR>
+an 50.100.450 &Syntax.Sh-S.SQR :cal SetSyn("sqr")<CR>
+an 50.100.460 &Syntax.Sh-S.Ssh.ssh_config :cal SetSyn("sshconfig")<CR>
+an 50.100.470 &Syntax.Sh-S.Ssh.sshd_config :cal SetSyn("sshdconfig")<CR>
+an 50.100.480 &Syntax.Sh-S.Standard\ ML :cal SetSyn("sml")<CR>
+an 50.100.490 &Syntax.Sh-S.Stored\ Procedures :cal SetSyn("stp")<CR>
+an 50.100.500 &Syntax.Sh-S.Strace :cal SetSyn("strace")<CR>
+an 50.100.510 &Syntax.Sh-S.Subversion\ commit :cal SetSyn("svn")<CR>
+an 50.110.100 &Syntax.TUV.TADS :cal SetSyn("tads")<CR>
+an 50.110.110 &Syntax.TUV.Tags :cal SetSyn("tags")<CR>
+an 50.110.120 &Syntax.TUV.TAK.TAK\ compare :cal SetSyn("takcmp")<CR>
+an 50.110.130 &Syntax.TUV.TAK.TAK\ input :cal SetSyn("tak")<CR>
+an 50.110.140 &Syntax.TUV.TAK.TAK\ output :cal SetSyn("takout")<CR>
+an 50.110.150 &Syntax.TUV.Tcl/Tk :cal SetSyn("tcl")<CR>
+an 50.110.160 &Syntax.TUV.TealInfo :cal SetSyn("tli")<CR>
+an 50.110.170 &Syntax.TUV.Telix\ Salt :cal SetSyn("tsalt")<CR>
+an 50.110.180 &Syntax.TUV.Termcap/Printcap :cal SetSyn("ptcap")<CR>
+an 50.110.190 &Syntax.TUV.Terminfo :cal SetSyn("terminfo")<CR>
+an 50.110.200 &Syntax.TUV.TeX.TeX :cal SetSyn("tex")<CR>
+an 50.110.210 &Syntax.TUV.TeX.TeX\ configuration :cal SetSyn("texmf")<CR>
+an 50.110.220 &Syntax.TUV.TeX.Texinfo :cal SetSyn("texinfo")<CR>
+an 50.110.230 &Syntax.TUV.TF\ mud\ client :cal SetSyn("tf")<CR>
+an 50.110.240 &Syntax.TUV.Tidy\ configuration :cal SetSyn("tidy")<CR>
+an 50.110.250 &Syntax.TUV.Tilde :cal SetSyn("tilde")<CR>
+an 50.110.260 &Syntax.TUV.Trasys\ input :cal SetSyn("trasys")<CR>
+an 50.110.270 &Syntax.TUV.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
+an 50.110.280 &Syntax.TUV.TSS.Geometry :cal SetSyn("tssgm")<CR>
+an 50.110.290 &Syntax.TUV.TSS.Optics :cal SetSyn("tssop")<CR>
+an 50.110.310 &Syntax.TUV.UIT/UIL :cal SetSyn("uil")<CR>
+an 50.110.320 &Syntax.TUV.UnrealScript :cal SetSyn("uc")<CR>
+an 50.110.340 &Syntax.TUV.Valgrind :cal SetSyn("valgrind")<CR>
+an 50.110.350 &Syntax.TUV.Verilog\ HDL :cal SetSyn("verilog")<CR>
+an 50.110.360 &Syntax.TUV.Vgrindefs :cal SetSyn("vgrindefs")<CR>
+an 50.110.370 &Syntax.TUV.VHDL :cal SetSyn("vhdl")<CR>
+an 50.110.380 &Syntax.TUV.Vim.Vim\ help\ file :cal SetSyn("help")<CR>
+an 50.110.390 &Syntax.TUV.Vim.Vim\ script :cal SetSyn("vim")<CR>
+an 50.110.400 &Syntax.TUV.Vim.Viminfo\ file :cal SetSyn("viminfo")<CR>
+an 50.110.410 &Syntax.TUV.Virata\ config :cal SetSyn("virata")<CR>
+an 50.110.420 &Syntax.TUV.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.110.430 &Syntax.TUV.VRML :cal SetSyn("vrml")<CR>
+an 50.110.440 &Syntax.TUV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
+an 50.120.100 &Syntax.WXYZ.WEB.CWEB :cal SetSyn("cweb")<CR>
+an 50.120.110 &Syntax.WXYZ.WEB.WEB :cal SetSyn("web")<CR>
+an 50.120.120 &Syntax.WXYZ.WEB.WEB\ Changes :cal SetSyn("change")<CR>
+an 50.120.130 &Syntax.WXYZ.Webmacro :cal SetSyn("webmacro")<CR>
+an 50.120.140 &Syntax.WXYZ.Website\ MetaLanguage :cal SetSyn("wml")<CR>
+an 50.120.160 &Syntax.WXYZ.wDiff :cal SetSyn("wdiff")<CR>
+an 50.120.180 &Syntax.WXYZ.Wget\ config :cal SetSyn("wget")<CR>
+an 50.120.190 &Syntax.WXYZ.Whitespace\ (add) :cal SetSyn("whitespace")<CR>
+an 50.120.200 &Syntax.WXYZ.WildPackets\ EtherPeek\ Decoder :cal SetSyn("dcd")<CR>
+an 50.120.210 &Syntax.WXYZ.WinBatch/Webbatch :cal SetSyn("winbatch")<CR>
+an 50.120.220 &Syntax.WXYZ.Windows\ Scripting\ Host :cal SetSyn("wsh")<CR>
+an 50.120.230 &Syntax.WXYZ.WvDial :cal SetSyn("wvdial")<CR>
+an 50.120.250 &Syntax.WXYZ.X\ Keyboard\ Extension :cal SetSyn("xkb")<CR>
+an 50.120.260 &Syntax.WXYZ.X\ Pixmap :cal SetSyn("xpm")<CR>
+an 50.120.270 &Syntax.WXYZ.X\ Pixmap\ (2) :cal SetSyn("xpm2")<CR>
+an 50.120.280 &Syntax.WXYZ.X\ resources :cal SetSyn("xdefaults")<CR>
+an 50.120.290 &Syntax.WXYZ.Xmodmap :cal SetSyn("xmodmap")<CR>
+an 50.120.300 &Syntax.WXYZ.Xmath :cal SetSyn("xmath")<CR>
+an 50.120.310 &Syntax.WXYZ.XML :cal SetSyn("xml")<CR>
+an 50.120.320 &Syntax.WXYZ.XML\ Schema\ (XSD) :cal SetSyn("xsd")<CR>
+an 50.120.330 &Syntax.WXYZ.Xslt :cal SetSyn("xslt")<CR>
+an 50.120.340 &Syntax.WXYZ.XFree86\ Config :cal SetSyn("xf86conf")<CR>
+an 50.120.360 &Syntax.WXYZ.YAML :cal SetSyn("yaml")<CR>
+an 50.120.370 &Syntax.WXYZ.Yacc :cal SetSyn("yacc")<CR>
+
+" The End Of The Syntax Menu
+
+
+an 50.195 &Syntax.-SEP1- <Nop>
+
+an <silent> 50.200 &Syntax.Set\ '&syntax'\ only :call <SID>Setsynonly()<CR>
+fun! s:Setsynonly()
+ let s:syntax_menu_synonly = 1
+endfun
+an <silent> 50.202 &Syntax.Set\ '&filetype'\ too :call <SID>Nosynonly()<CR>
+fun! s:Nosynonly()
+ if exists("s:syntax_menu_synonly")
+ unlet s:syntax_menu_synonly
+ endif
+endfun
+
diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim
new file mode 100644
index 000000000..2afc09f93
--- /dev/null
+++ b/runtime/syntax/2html.vim
@@ -0,0 +1,411 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 May 31
+" (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
+" (XHTML support by Panagiotis Issaris <takis@lumumba.luc.ac.be>)
+
+" Transform a file into HTML, using the current syntax highlighting.
+
+" Number lines when explicitely requested or when `number' is set
+if exists("html_number_lines")
+ let s:numblines = html_number_lines
+else
+ let s:numblines = &number
+endif
+
+" When not in gui we can only guess the colors.
+if has("gui_running")
+ let s:whatterm = "gui"
+else
+ let s:whatterm = "cterm"
+ if &t_Co == 8
+ let s:cterm_color0 = "#808080"
+ let s:cterm_color1 = "#ff6060"
+ let s:cterm_color2 = "#00ff00"
+ let s:cterm_color3 = "#ffff00"
+ let s:cterm_color4 = "#8080ff"
+ let s:cterm_color5 = "#ff40ff"
+ let s:cterm_color6 = "#00ffff"
+ let s:cterm_color7 = "#ffffff"
+ else
+ let s:cterm_color0 = "#000000"
+ let s:cterm_color1 = "#c00000"
+ let s:cterm_color2 = "#008000"
+ let s:cterm_color3 = "#804000"
+ let s:cterm_color4 = "#0000c0"
+ let s:cterm_color5 = "#c000c0"
+ let s:cterm_color6 = "#008080"
+ let s:cterm_color7 = "#c0c0c0"
+ let s:cterm_color8 = "#808080"
+ let s:cterm_color9 = "#ff6060"
+ let s:cterm_color10 = "#00ff00"
+ let s:cterm_color11 = "#ffff00"
+ let s:cterm_color12 = "#8080ff"
+ let s:cterm_color13 = "#ff40ff"
+ let s:cterm_color14 = "#00ffff"
+ let s:cterm_color15 = "#ffffff"
+ endif
+endif
+
+" Return good color specification: in GUI no transformation is done, in
+" terminal return RGB values of known colors and empty string on unknown
+if s:whatterm == "gui"
+ function! s:HtmlColor(color)
+ return a:color
+ endfun
+else
+ function! s:HtmlColor(color)
+ if exists("s:cterm_color" . a:color)
+ execute "return s:cterm_color" . a:color
+ else
+ return ""
+ endif
+ endfun
+endif
+
+if !exists("html_use_css")
+ " Return opening HTML tag for given highlight id
+ function! s:HtmlOpening(id)
+ 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 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
+ let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+ if x != "" | let a = a . '<font color="' . x . '">' | endif
+ endif
+ if synIDattr(a:id, "bold") | let a = a . "<b>" | endif
+ if synIDattr(a:id, "italic") | let a = a . "<i>" | endif
+ if synIDattr(a:id, "underline") | let a = a . "<u>" | endif
+ return a
+ endfun
+
+ " Return closing HTML tag for given highlight id
+ function s:HtmlClosing(id)
+ let a = ""
+ if synIDattr(a:id, "underline") | let a = a . "</u>" | endif
+ if synIDattr(a:id, "italic") | let a = a . "</i>" | endif
+ if synIDattr(a:id, "bold") | let a = a . "</b>" | endif
+ if synIDattr(a:id, "inverse")
+ let a = a . '</font></span>'
+ else
+ 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
+ endif
+ return a
+ endfun
+endif
+
+" Return CSS style describing given highlight id (can be empty)
+function! s:CSS1(id)
+ 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, "bg#", s:whatterm))
+ let a = a . "color: " . ( x != "" ? x : s:bgc ) . "; "
+ let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+ let a = a . "background-color: " . ( x != "" ? x : s:fgc ) . "; "
+ else
+ 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
+ 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
+ if synIDattr(a:id, "underline") | let a = a . "text-decoration: underline; " | endif
+ return a
+endfun
+
+" Figure out proper MIME charset from the 'encoding' option.
+if exists("html_use_encoding")
+ let s:html_encoding = html_use_encoding
+else
+ let s:vim_encoding = &encoding
+ if s:vim_encoding =~ '^8bit\|^2byte'
+ let s:vim_encoding = substitute(s:vim_encoding, '^8bit-\|^2byte-', '', '')
+ endif
+ if s:vim_encoding == 'latin1'
+ let s:html_encoding = 'iso-8859-1'
+ elseif s:vim_encoding =~ "^cp12"
+ let s:html_encoding = substitute(s:vim_encoding, 'cp', 'windows-', '')
+ elseif s:vim_encoding == 'sjis'
+ let s:html_encoding = 'Shift_JIS'
+ elseif s:vim_encoding == 'euc-cn'
+ let s:html_encoding = 'GB_2312-80'
+ elseif s:vim_encoding == 'euc-tw'
+ let s:html_encoding = ""
+ elseif s:vim_encoding =~ '^euc\|^iso\|^koi'
+ let s:html_encoding = substitute(s:vim_encoding, '.*', '\U\0', '')
+ elseif s:vim_encoding == 'cp949'
+ let s:html_encoding = 'KS_C_5601-1987'
+ elseif s:vim_encoding == 'cp936'
+ let s:html_encoding = 'GBK'
+ elseif s:vim_encoding =~ '^ucs\|^utf'
+ let s:html_encoding = 'UTF-8'
+ else
+ let s:html_encoding = ""
+ endif
+endif
+
+
+" Set some options to make it work faster.
+" Expand tabs in original buffer to get 'tabstop' correctly used.
+" Don't report changes for :substitute, there will be many of them.
+let s:old_title = &title
+let s:old_icon = &icon
+let s:old_et = &l:et
+let s:old_report = &report
+let s:old_search = @/
+set notitle noicon
+setlocal et
+set report=1000000
+
+" Split window to create a buffer with the HTML file.
+let s:orgbufnr = winbufnr(0)
+if expand("%") == ""
+ new Untitled.html
+else
+ new %.html
+endif
+let s:newwin = winnr()
+let s:orgwin = bufwinnr(s:orgbufnr)
+
+set modifiable
+%d
+let s:old_paste = &paste
+set paste
+let s:old_magic = &magic
+set magic
+
+if exists("use_xhtml")
+ exe "normal! a<?xml version=\"1.0\"?>\n\e"
+ let tag_close = '/>'
+else
+ let tag_close = '>'
+endif
+
+" HTML header, with the title and generator ;-). Left free space for the CSS,
+" to be filled at the end.
+exe "normal! a<html>\n<head>\n<title>\e"
+exe "normal! a" . expand("%:p:~") . "</title>\n\e"
+exe "normal! a<meta name=\"Generator\" content=\"Vim/" . v:version/100 . "." . v:version %100 . '"' . tag_close . "\n\e"
+if s:html_encoding != ""
+ exe "normal! a<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:html_encoding . '"' . tag_close . "\n\e"
+endif
+if exists("html_use_css")
+ exe "normal! a<style type=\"text/css\">\n<!--\n-->\n</style>\n\e"
+endif
+if exists("html_no_pre")
+ exe "normal! a</head>\n<body>\n\e"
+else
+ exe "normal! a</head>\n<body>\n<pre>\n\e"
+endif
+
+exe s:orgwin . "wincmd w"
+
+" List of all id's
+let s:idlist = ","
+
+let s:expandedtab = ' '
+while strlen(s:expandedtab) < &ts
+ let s:expandedtab = s:expandedtab . ' '
+endwhile
+
+" Loop over all lines in the original text.
+" Use html_start_line and html_end_line if they are set.
+if exists("html_start_line")
+ let s:lnum = html_start_line
+ if s:lnum < 1 || s:lnum > line("$")
+ let s:lnum = 1
+ endif
+else
+ let s:lnum = 1
+endif
+if exists("html_end_line")
+ let s:end = html_end_line
+ if s:end < s:lnum || s:end > line("$")
+ let s:end = line("$")
+ endif
+else
+ let s:end = line("$")
+endif
+
+while s:lnum <= s:end
+
+ " Get the current line
+ let s:line = getline(s:lnum)
+ let s:len = strlen(s:line)
+ let s:new = ""
+
+ if s:numblines
+ let s:new = '<span class="lnr">' . strpart(' ', 0, strlen(line("$")) - strlen(s:lnum)) . s:lnum . '</span> '
+ endif
+
+ " Loop over each character in the line
+ let s:col = 1
+ while s:col <= s:len
+ let s:startcol = s:col " The start column for processing text
+ let s:id = synID(s:lnum, s:col, 1)
+ let s:col = s:col + 1
+ " Speed loop (it's small - that's the trick)
+ " Go along till we find a change in synID
+ while s:col <= s:len && s:id == synID(s:lnum, s:col, 1) | let s:col = s:col + 1 | endwhile
+
+ " Output the text with the same synID, with class set to {s:id_name}
+ let s:id = synIDtrans(s:id)
+ let s:id_name = synIDattr(s:id, "name", s:whatterm)
+ let s:new = s:new . '<span class="' . s:id_name . '">' . substitute(substitute(substitute(substitute(substitute(strpart(s:line, s:startcol - 1, s:col - s:startcol), '&', '\&amp;', 'g'), '<', '\&lt;', 'g'), '>', '\&gt;', 'g'), '"', '\&quot;', 'g'), "\x0c", '<hr class="PAGE-BREAK">', 'g') . '</span>'
+ " Add the class to class list if it's not there yet
+ if stridx(s:idlist, "," . s:id . ",") == -1
+ let s:idlist = s:idlist . s:id . ","
+ endif
+
+ if s:col > s:len
+ break
+ endif
+ endwhile
+
+ " Expand tabs
+ let s:pad=0
+ let s:start = 0
+ let s:idx = stridx(s:line, "\t")
+ while s:idx >= 0
+ let s:i = &ts - ((s:start + s:pad + s:idx) % &ts)
+ let s:new = substitute(s:new, '\t', strpart(s:expandedtab, 0, s:i), '')
+ let s:pad = s:pad + s:i - 1
+ let s:start = s:start + s:idx + 1
+ let s:idx = stridx(strpart(s:line, s:start), "\t")
+ endwhile
+
+ if exists("html_no_pre")
+ if exists("use_xhtml")
+ let s:new = substitute(s:new, ' ', '\&#x20;\&#x20;', 'g') . '<br/>'
+ else
+ let s:new = substitute(s:new, ' ', '\&nbsp;\&nbsp;', 'g') . '<br>'
+ endif
+ endif
+ exe s:newwin . "wincmd w"
+ exe "normal! a" . strtrans(s:new) . "\n\e"
+ exe s:orgwin . "wincmd w"
+ let s:lnum = s:lnum + 1
+ +
+endwhile
+" Finish with the last line
+exe s:newwin . "wincmd w"
+if exists("html_no_pre")
+ exe "normal! a\n</body>\n</html>\e"
+else
+ exe "normal! a</pre>\n</body>\n</html>\e"
+endif
+
+
+" Now, when we finally know which, we define the colors and styles
+if exists("html_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 exists("html_use_css")
+ if exists("html_no_pre")
+ execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: Courier, monospace; }\e"
+ else
+ execute "normal! A\npre { color: " . s:fgc . "; background-color: " . s:bgc . "; }\e"
+ yank
+ put
+ execute "normal! ^cwbody\e"
+ endif
+else
+ if exists("html_no_pre")
+ execute '%s:<body>:<body ' . 'bgcolor="' . s:bgc . '" text="' . s:fgc . '" style="font-family\: Courier, monospace;">'
+ else
+ execute '%s:<body>:<body ' . 'bgcolor="' . s:bgc . '" text="' . s:fgc . '">'
+ endif
+endif
+
+" Line numbering attributes
+if s:numblines
+ if exists("html_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
+let s:idlist = strpart(s:idlist, 1)
+while s:idlist != ""
+ let s:attr = ""
+ let s:col = stridx(s:idlist, ",")
+ let s:id = strpart(s:idlist, 0, s:col)
+ let s:idlist = strpart(s:idlist, s:col + 1)
+ 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 exists("html_use_css")
+ execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
+ else
+ execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+g'
+ endif
+ else
+ execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+g'
+ if exists("html_use_css")
+ 1;/<style type="text/+1
+ endif
+ endif
+endwhile
+
+" Add hyperlinks
+%s+\(http://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\)+<A HREF="\1">\1</A>\2+ge
+
+" The DTD
+if exists("html_use_css")
+ exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\e"
+endif
+
+" Cleanup
+%s:\s\+$::e
+
+" Restore old settings
+let &report = s:old_report
+let &title = s:old_title
+let &icon = s:old_icon
+let &paste = s:old_paste
+let &magic = s:old_magic
+let @/ = s:old_search
+exe s:orgwin . "wincmd w"
+let &l:et = s:old_et
+exe s:newwin . "wincmd w"
+
+" Save a little bit of memory (worth doing?)
+unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
+unlet s:whatterm s:idlist s:lnum s:end s:fgc s:bgc s:old_magic
+unlet! s:col s:id s:attr s:len s:line s:new s:did_retab s:numblines
+unlet s:orgwin s:newwin s:orgbufnr
+delfunc s:HtmlColor
+delfunc s:CSS1
+if !exists("html_use_css")
+ delfunc s:HtmlOpening
+ delfunc s:HtmlClosing
+endif
diff --git a/runtime/syntax/README.txt b/runtime/syntax/README.txt
new file mode 100644
index 000000000..d88bd7ed5
--- /dev/null
+++ b/runtime/syntax/README.txt
@@ -0,0 +1,38 @@
+This directory contains Vim scripts for syntax highlighting.
+
+These scripts are not for a language, but are used by Vim itself:
+
+syntax.vim Used for the ":syntax on" command. Uses synload.vim.
+
+manual.vim Used for the ":syntax manual" command. Uses synload.vim.
+
+synload.vim Contains autocommands to load a language file when a certain
+ file name (extension) is used. And sets up the Syntax menu
+ for the GUI.
+
+nosyntax.vim Used for the ":syntax off" command. Undo the loading of
+ synload.vim.
+
+
+A few special files:
+
+2html.vim Converts any highlighted file to HTML (GUI only).
+colortest.vim Check for color names and actual color on screen.
+hitest.vim View the current highlight settings.
+whitespace.vim View Tabs and Spaces.
+
+
+If you want to write a syntax file, read the docs at ":help usr_44.txt".
+
+If you make a new syntax file which would be useful for others, please send it
+to Bram@vim.org. Include instructions for detecting the file type for this
+language, by file name extension or by checking a few lines in the file.
+And please write the file in a portable way, see ":help 44.12".
+
+If you have remarks about an existing file, send them to the maintainer of
+that file. Only when you get no response send a message to Bram@vim.org.
+
+If you are the maintainer of a syntax file and make improvements, send the new
+version to Bram@vim.org.
+
+For further info see ":help syntax" in Vim.
diff --git a/runtime/syntax/a65.vim b/runtime/syntax/a65.vim
new file mode 100644
index 000000000..dbf1cdb46
--- /dev/null
+++ b/runtime/syntax/a65.vim
@@ -0,0 +1,166 @@
+" Vim syntax file
+" Language: xa 6502 cross assembler
+" Maintainer: Clemens Kirchgatterer <clemens@thf.ath.cx>
+" Last Change: 2003 May 03
+
+" 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
+
+" Opcodes
+syn match a65Opcode "\<PHP\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PLA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PLX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PLY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<SEC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CLD\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<SED\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CLI\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BVC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BVS\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BCS\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BCC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<DEY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<DEC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CMP\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CPX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BIT\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<ROL\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<ROR\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<ASL\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TXA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TYA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TSX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TXS\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<LDA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<LDX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<LDY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<STA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PLP\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BRK\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<RTI\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<NOP\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<SEI\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CLV\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PHA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PHX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BRA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<JMP\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<JSR\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<RTS\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CPY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BNE\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BEQ\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BMI\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<LSR\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<INX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<INY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<INC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<ADC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<SBC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<AND\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<ORA\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<STX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<STY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<STZ\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<EOR\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<DEX\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BPL\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<CLC\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<PHY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TRB\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BBR\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<BBS\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<RMB\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<SMB\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TAY\($\|\s\)" nextgroup=a65Address
+syn match a65Opcode "\<TAX\($\|\s\)" nextgroup=a65Address
+
+" Addresses
+syn match a65Address "\s*!\=$[0-9A-F]\{2}\($\|\s\)"
+syn match a65Address "\s*!\=$[0-9A-F]\{4}\($\|\s\)"
+syn match a65Address "\s*!\=$[0-9A-F]\{2},X\($\|\s\)"
+syn match a65Address "\s*!\=$[0-9A-F]\{4},X\($\|\s\)"
+syn match a65Address "\s*!\=$[0-9A-F]\{2},Y\($\|\s\)"
+syn match a65Address "\s*!\=$[0-9A-F]\{4},Y\($\|\s\)"
+syn match a65Address "\s*($[0-9A-F]\{2})\($\|\s\)"
+syn match a65Address "\s*($[0-9A-F]\{4})\($\|\s\)"
+syn match a65Address "\s*($[0-9A-F]\{2},X)\($\|\s\)"
+syn match a65Address "\s*($[0-9A-F]\{2}),Y\($\|\s\)"
+
+" Numbers
+syn match a65Number "#\=[0-9]*\>"
+syn match a65Number "#\=$[0-9A-F]*\>"
+syn match a65Number "#\=&[0-7]*\>"
+syn match a65Number "#\=%[01]*\>"
+
+syn case match
+
+" Types
+syn match a65Type "\(^\|\s\)\.byt\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.word\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.asc\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.dsb\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.fopt\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.text\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.data\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.bss\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.zero\($\|\s\)"
+syn match a65Type "\(^\|\s\)\.align\($\|\s\)"
+
+" Blocks
+syn match a65Section "\(^\|\s\)\.(\($\|\s\)"
+syn match a65Section "\(^\|\s\)\.)\($\|\s\)"
+
+" Strings
+syn match a65String "\".*\""
+
+" Programm Counter
+syn region a65PC start="\*=" end="\>" keepend
+
+" HI/LO Byte
+syn region a65HiLo start="#[<>]" end="$\|\s" contains=a65Comment keepend
+
+" Comments
+syn keyword a65Todo TODO XXX FIXME BUG contained
+syn match a65Comment ";.*"hs=s+1 contains=a65Todo
+syn region a65Comment start="/\*" end="\*/" contains=a65Todo,a65Comment
+
+" Preprocessor
+syn region a65PreProc start="^#" end="$" contains=a65Comment,a65Continue
+syn match a65End excludenl /end$/ contained
+syn match a65Continue "\\$" contained
+
+" 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_a65_syntax_inits")
+ if version < 508
+ let did_a65_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink a65Section Special
+ HiLink a65Address Special
+ HiLink a65Comment Comment
+ HiLink a65PreProc PreProc
+ HiLink a65Number Number
+ HiLink a65String String
+ HiLink a65Type Statement
+ HiLink a65Opcode Type
+ HiLink a65PC Error
+ HiLink a65Todo Todo
+ HiLink a65HiLo Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "a65"
diff --git a/runtime/syntax/aap.vim b/runtime/syntax/aap.vim
new file mode 100644
index 000000000..8399a4d22
--- /dev/null
+++ b/runtime/syntax/aap.vim
@@ -0,0 +1,158 @@
+" Vim syntax file
+" Language: A-A-P recipe
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Jun 13
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn include @aapPythonScript syntax/python.vim
+
+syn match aapVariable /$[-+?*="'\\!]*[a-zA-Z0-9_.]*/
+syn match aapVariable /$[-+?*="'\\!]*([a-zA-Z0-9_.]*)/
+syn keyword aapTodo contained TODO Todo
+syn match aapString +'[^']\{-}'+
+syn match aapString +"[^"]\{-}"+
+
+syn match aapCommand '^\s*:action\>'
+syn match aapCommand '^\s*:add\>'
+syn match aapCommand '^\s*:addall\>'
+syn match aapCommand '^\s*:asroot\>'
+syn match aapCommand '^\s*:assertpkg\>'
+syn match aapCommand '^\s*:attr\>'
+syn match aapCommand '^\s*:attribute\>'
+syn match aapCommand '^\s*:autodepend\>'
+syn match aapCommand '^\s*:buildcheck\>'
+syn match aapCommand '^\s*:cd\>'
+syn match aapCommand '^\s*:chdir\>'
+syn match aapCommand '^\s*:checkin\>'
+syn match aapCommand '^\s*:checkout\>'
+syn match aapCommand '^\s*:child\>'
+syn match aapCommand '^\s*:chmod\>'
+syn match aapCommand '^\s*:commit\>'
+syn match aapCommand '^\s*:commitall\>'
+syn match aapCommand '^\s*:conf\>'
+syn match aapCommand '^\s*:copy\>'
+syn match aapCommand '^\s*:del\>'
+syn match aapCommand '^\s*:deldir\>'
+syn match aapCommand '^\s*:delete\>'
+syn match aapCommand '^\s*:delrule\>'
+syn match aapCommand '^\s*:dll\>'
+syn match aapCommand '^\s*:do\>'
+syn match aapCommand '^\s*:error\>'
+syn match aapCommand '^\s*:execute\>'
+syn match aapCommand '^\s*:exit\>'
+syn match aapCommand '^\s*:export\>'
+syn match aapCommand '^\s*:fetch\>'
+syn match aapCommand '^\s*:fetchall\>'
+syn match aapCommand '^\s*:filetype\>'
+syn match aapCommand '^\s*:finish\>'
+syn match aapCommand '^\s*:global\>'
+syn match aapCommand '^\s*:import\>'
+syn match aapCommand '^\s*:include\>'
+syn match aapCommand '^\s*:installpkg\>'
+syn match aapCommand '^\s*:lib\>'
+syn match aapCommand '^\s*:local\>'
+syn match aapCommand '^\s*:log\>'
+syn match aapCommand '^\s*:ltlib\>'
+syn match aapCommand '^\s*:mkdir\>'
+syn match aapCommand '^\s*:mkdownload\>'
+syn match aapCommand '^\s*:move\>'
+syn match aapCommand '^\s*:pass\>'
+syn match aapCommand '^\s*:popdir\>'
+syn match aapCommand '^\s*:produce\>'
+syn match aapCommand '^\s*:program\>'
+syn match aapCommand '^\s*:progsearch\>'
+syn match aapCommand '^\s*:publish\>'
+syn match aapCommand '^\s*:publishall\>'
+syn match aapCommand '^\s*:pushdir\>'
+syn match aapCommand '^\s*:quit\>'
+syn match aapCommand '^\s*:recipe\>'
+syn match aapCommand '^\s*:refresh\>'
+syn match aapCommand '^\s*:remove\>'
+syn match aapCommand '^\s*:removeall\>'
+syn match aapCommand '^\s*:require\>'
+syn match aapCommand '^\s*:revise\>'
+syn match aapCommand '^\s*:reviseall\>'
+syn match aapCommand '^\s*:route\>'
+syn match aapCommand '^\s*:rule\>'
+syn match aapCommand '^\s*:start\>'
+syn match aapCommand '^\s*:symlink\>'
+syn match aapCommand '^\s*:sys\>'
+syn match aapCommand '^\s*:sysdepend\>'
+syn match aapCommand '^\s*:syspath\>'
+syn match aapCommand '^\s*:system\>'
+syn match aapCommand '^\s*:tag\>'
+syn match aapCommand '^\s*:tagall\>'
+syn match aapCommand '^\s*:toolsearch\>'
+syn match aapCommand '^\s*:totype\>'
+syn match aapCommand '^\s*:touch\>'
+syn match aapCommand '^\s*:tree\>'
+syn match aapCommand '^\s*:unlock\>'
+syn match aapCommand '^\s*:update\>'
+syn match aapCommand '^\s*:usetool\>'
+syn match aapCommand '^\s*:variant\>'
+syn match aapCommand '^\s*:verscont\>'
+
+syn match aapCommand '^\s*:print\>' nextgroup=aapPipeEnd
+syn match aapPipeCmd '\s*:print\>' nextgroup=aapPipeEnd contained
+syn match aapCommand '^\s*:cat\>' nextgroup=aapPipeEnd
+syn match aapPipeCmd '\s*:cat\>' nextgroup=aapPipeEnd contained
+syn match aapCommand '^\s*:syseval\>' nextgroup=aapPipeEnd
+syn match aapPipeCmd '\s*:syseval\>' nextgroup=aapPipeEnd contained
+syn match aapPipeCmd '\s*:assign\>' contained
+syn match aapCommand '^\s*:eval\>' nextgroup=aapPipeEnd
+syn match aapPipeCmd '\s*:eval\>' nextgroup=aapPipeEndPy contained
+syn match aapPipeCmd '\s*:tee\>' nextgroup=aapPipeEnd contained
+syn match aapPipeCmd '\s*:log\>' nextgroup=aapPipeEnd contained
+syn match aapPipeEnd '[^|]*|' nextgroup=aapPipeCmd contained skipnl
+syn match aapPipeEndPy '[^|]*|' nextgroup=aapPipeCmd contained skipnl contains=@aapPythonScript
+syn match aapPipeStart '^\s*|' nextgroup=aapPipeCmd
+
+"
+" A Python line starts with @. Can be continued with a trailing backslash.
+syn region aapPythonRegion start="\s*@" skip='\\$' end=+$+ contains=@aapPythonScript keepend
+"
+" A Python block starts with ":python" and continues so long as the indent is
+" bigger.
+syn region aapPythonRegion matchgroup=aapCommand start="\z(\s*\):python" skip='\n\z1\s\|\n\s*\n' end=+$+ contains=@aapPythonScript
+
+" A Python expression is enclosed in backticks.
+syn region aapPythonRegion start="`" skip="``" end="`" contains=@aapPythonScript
+
+" TODO: There is something wrong with line continuation.
+syn match aapComment '#.*' contains=aapTodo
+syn match aapComment '#.*\(\\\n.*\)' contains=aapTodo
+
+syn match aapSpecial '$#'
+syn match aapSpecial '$\$'
+syn match aapSpecial '$(.)'
+
+" A heredoc assignment.
+syn region aapHeredoc start="^\s*\k\+\s*$\=+\=?\=<<\s*\z(\S*\)"hs=e+1 end="^\s*\z1\s*$"he=s-1
+
+" Syncing is needed for ":python" and "VAR << EOF". Don't use Python syncing
+syn sync clear
+syn sync fromstart
+
+" The default highlighting.
+hi def link aapTodo Todo
+hi def link aapString String
+hi def link aapComment Comment
+hi def link aapSpecial Special
+hi def link aapVariable Identifier
+hi def link aapPipeCmd aapCommand
+hi def link aapCommand Statement
+hi def link aapHeredoc Constant
+
+let b:current_syntax = "aap"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/abaqus.vim b/runtime/syntax/abaqus.vim
new file mode 100644
index 000000000..cf4b0828f
--- /dev/null
+++ b/runtime/syntax/abaqus.vim
@@ -0,0 +1,48 @@
+" Vim syntax file
+" Language: Abaqus finite element input file (www.hks.com)
+" Maintainer: Carl Osterwisch <osterwischc@asme.org>
+" Last Change: 2002 Feb 24
+" Remark: Huge improvement in folding performance--see filetype plugin
+
+" 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
+
+" Abaqus comment lines
+syn match abaqusComment "^\*\*.*$"
+
+" Abaqus keyword lines
+syn match abaqusKeywordLine "^\*\h.*" contains=abaqusKeyword,abaqusParameter,abaqusValue display
+syn match abaqusKeyword "^\*\h[^,]*" contained display
+syn match abaqusParameter ",[^,=]\+"lc=1 contained display
+syn match abaqusValue "=\s*[^,]*"lc=1 contained display
+
+" Illegal syntax
+syn match abaqusBadLine "^\s\+\*.*" display
+
+" 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_abaqus_syn_inits")
+ if version < 508
+ let did_abaqus_syn_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 abaqusComment Comment
+ HiLink abaqusKeyword Statement
+ HiLink abaqusParameter Identifier
+ HiLink abaqusValue Constant
+ HiLink abaqusBadLine Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "abaqus"
diff --git a/runtime/syntax/abc.vim b/runtime/syntax/abc.vim
new file mode 100644
index 000000000..3dc098e73
--- /dev/null
+++ b/runtime/syntax/abc.vim
@@ -0,0 +1,64 @@
+" Vim syntax file
+" Language: abc music notation language
+" Maintainer: James Allwright <J.R.Allwright@westminster.ac.uk>
+" URL: http://perun.hscs.wmin.ac.uk/~jra/vim/syntax/abc.vim
+" Last Change: 27th April 2001
+
+" 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
+
+" tags
+syn region abcGuitarChord start=+"[A-G]+ end=+"+ contained
+syn match abcNote "z[1-9]*[0-9]*" contained
+syn match abcNote "z[1-9]*[0-9]*/[248]\=" contained
+syn match abcNote "[=_\^]\{,2}[A-G],*[1-9]*[0-9]*" contained
+syn match abcNote "[=_\^]\{,2}[A-G],*[1-9]*[0-9]*/[248]\=" contained
+syn match abcNote "[=_\^]\{,2}[a-g]'*[1-9]*[0-9]*" contained
+syn match abcNote "[=_\^]\{,2}[a-g]'*[1-9]*[0-9]*/[248]\=" contained
+syn match abcBar "|" contained
+syn match abcBar "[:|][:|]" contained
+syn match abcBar ":|2" contained
+syn match abcBar "|1" contained
+syn match abcBar "\[[12]" contained
+syn match abcTuple "([1-9]\+:\=[0-9]*:\=[0-9]*" contained
+syn match abcBroken "<\|<<\|<<<\|>\|>>\|>>>" contained
+syn match abcTie "-"
+syn match abcHeadField "^[A-EGHIK-TVWXZ]:.*$" contained
+syn match abcBodyField "^[KLMPQWVw]:.*$" contained
+syn region abcHeader start="^X:" end="^K:.*$" contained contains=abcHeadField,abcComment keepend
+syn region abcTune start="^X:" end="^ *$" contains=abcHeader,abcComment,abcBar,abcNote,abcBodyField,abcGuitarChord,abcTuple,abcBroken,abcTie
+syn match abcComment "%.*$"
+
+
+" 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_abc_syn_inits")
+ if version < 508
+ let did_abc_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink abcComment Comment
+ HiLink abcHeadField Type
+ HiLink abcBodyField Special
+ HiLink abcBar Statement
+ HiLink abcTuple Statement
+ HiLink abcBroken Statement
+ HiLink abcTie Statement
+ HiLink abcGuitarChord Identifier
+ HiLink abcNote Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "abc"
+
+" vim: ts=4
diff --git a/runtime/syntax/abel.vim b/runtime/syntax/abel.vim
new file mode 100644
index 000000000..fde9be3dd
--- /dev/null
+++ b/runtime/syntax/abel.vim
@@ -0,0 +1,167 @@
+" Vim syntax file
+" Language: ABEL
+" Maintainer: John Cook <john.cook@kla-tencor.com>
+" Last Change: 2001 Sep 2
+
+" 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
+
+" this language is oblivious to case
+syn case ignore
+
+" A bunch of keywords
+syn keyword abelHeader module title device options
+syn keyword abelSection declarations equations test_vectors end
+syn keyword abelDeclaration state truth_table state_diagram property
+syn keyword abelType pin node attribute constant macro library
+
+syn keyword abelTypeId com reg neg pos buffer dc reg_d reg_t contained
+syn keyword abelTypeId reg_sr reg_jk reg_g retain xor invert contained
+
+syn keyword abelStatement when then else if with endwith case endcase
+syn keyword abelStatement fuses expr trace
+
+" option to omit obsolete statements
+if exists("abel_obsolete_ok")
+ syn keyword abelStatement enable flag in
+else
+ syn keyword abelError enable flag in
+endif
+
+" directives
+syn match abelDirective "@alternate"
+syn match abelDirective "@standard"
+syn match abelDirective "@const"
+syn match abelDirective "@dcset"
+syn match abelDirective "@include"
+syn match abelDirective "@page"
+syn match abelDirective "@radix"
+syn match abelDirective "@repeat"
+syn match abelDirective "@irp"
+syn match abelDirective "@expr"
+syn match abelDirective "@if"
+syn match abelDirective "@ifb"
+syn match abelDirective "@ifnb"
+syn match abelDirective "@ifdef"
+syn match abelDirective "@ifndef"
+syn match abelDirective "@ifiden"
+syn match abelDirective "@ifniden"
+
+syn keyword abelTodo contained TODO XXX FIXME
+
+" wrap up type identifiers to differentiate them from normal strings
+syn region abelSpecifier start='istype' end=';' contains=abelTypeIdChar,abelTypeId,abelTypeIdEnd keepend
+syn match abelTypeIdChar "[,']" contained
+syn match abelTypeIdEnd ";" contained
+
+" string contstants and special characters within them
+syn match abelSpecial contained "\\['\\]"
+syn region abelString start=+'+ skip=+\\"+ end=+'+ contains=abelSpecial
+
+" valid integer number formats (decimal, binary, octal, hex)
+syn match abelNumber "\<[-+]\=[0-9]\+\>"
+syn match abelNumber "\^d[0-9]\+\>"
+syn match abelNumber "\^b[01]\+\>"
+syn match abelNumber "\^o[0-7]\+\>"
+syn match abelNumber "\^h[0-9a-f]\+\>"
+
+" special characters
+" (define these after abelOperator so ?= overrides ?)
+syn match abelSpecialChar "[\[\](){},;:?]"
+
+" operators
+syn match abelLogicalOperator "[!#&$]"
+syn match abelRangeOperator "\.\."
+syn match abelAlternateOperator "[/*+]"
+syn match abelAlternateOperator ":[+*]:"
+syn match abelArithmeticOperator "[-%]"
+syn match abelArithmeticOperator "<<"
+syn match abelArithmeticOperator ">>"
+syn match abelRelationalOperator "[<>!=]="
+syn match abelRelationalOperator "[<>]"
+syn match abelAssignmentOperator "[:?]\=="
+syn match abelAssignmentOperator "?:="
+syn match abelTruthTableOperator "->"
+
+" signal extensions
+syn match abelExtension "\.aclr\>"
+syn match abelExtension "\.aset\>"
+syn match abelExtension "\.clk\>"
+syn match abelExtension "\.clr\>"
+syn match abelExtension "\.com\>"
+syn match abelExtension "\.fb\>"
+syn match abelExtension "\.[co]e\>"
+syn match abelExtension "\.l[eh]\>"
+syn match abelExtension "\.fc\>"
+syn match abelExtension "\.pin\>"
+syn match abelExtension "\.set\>"
+syn match abelExtension "\.[djksrtq]\>"
+syn match abelExtension "\.pr\>"
+syn match abelExtension "\.re\>"
+syn match abelExtension "\.a[pr]\>"
+syn match abelExtension "\.s[pr]\>"
+
+" special constants
+syn match abelConstant "\.[ckudfpxz]\."
+syn match abelConstant "\.sv[2-9]\."
+
+" one-line comments
+syn region abelComment start=+"+ end=+"\|$+ contains=abelNumber,abelTodo
+" option to prevent C++ style comments
+if !exists("abel_cpp_comments_illegal")
+ syn region abelComment start=+//+ end=+$+ contains=abelNumber,abelTodo
+endif
+
+syn sync minlines=1
+
+" 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_abel_syn_inits")
+ if version < 508
+ let did_abel_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink abelHeader abelStatement
+ HiLink abelSection abelStatement
+ HiLink abelDeclaration abelStatement
+ HiLink abelLogicalOperator abelOperator
+ HiLink abelRangeOperator abelOperator
+ HiLink abelAlternateOperator abelOperator
+ HiLink abelArithmeticOperator abelOperator
+ HiLink abelRelationalOperator abelOperator
+ HiLink abelAssignmentOperator abelOperator
+ HiLink abelTruthTableOperator abelOperator
+ HiLink abelSpecifier abelStatement
+ HiLink abelOperator abelStatement
+ HiLink abelStatement Statement
+ HiLink abelIdentifier Identifier
+ HiLink abelTypeId abelType
+ HiLink abelTypeIdChar abelType
+ HiLink abelType Type
+ HiLink abelNumber abelString
+ HiLink abelString String
+ HiLink abelConstant Constant
+ HiLink abelComment Comment
+ HiLink abelExtension abelSpecial
+ HiLink abelSpecialChar abelSpecial
+ HiLink abelTypeIdEnd abelSpecial
+ HiLink abelSpecial Special
+ HiLink abelDirective PreProc
+ HiLink abelTodo Todo
+ HiLink abelError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "abel"
+" vim:ts=8
diff --git a/runtime/syntax/acedb.vim b/runtime/syntax/acedb.vim
new file mode 100644
index 000000000..114e4aba9
--- /dev/null
+++ b/runtime/syntax/acedb.vim
@@ -0,0 +1,123 @@
+" Vim syntax file
+" Language: AceDB model files
+" Maintainer: Stewart Morris (Stewart.Morris@ed.ac.uk)
+" Last change: Thu Apr 26 10:38:01 BST 2001
+" URL: http://www.ed.ac.uk/~swmorris/vim/acedb.vim
+
+" Syntax file to handle all $ACEDB/wspec/*.wrm files, primarily models.wrm
+" AceDB software is available from http://www.acedb.org
+
+" 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 keyword acedbXref XREF
+syn keyword acedbModifier UNIQUE REPEAT
+
+syn case ignore
+syn keyword acedbModifier Constraints
+syn keyword acedbType DateType Int Text Float
+
+" Magic tags from: http://genome.cornell.edu/acedocs/magic/summary.html
+syn keyword acedbMagic pick_me_to_call No_cache Non_graphic Title
+syn keyword acedbMagic Flipped Centre Extent View Default_view
+syn keyword acedbMagic From_map Minimal_view Main_Marker Map Includes
+syn keyword acedbMagic Mapping_data More_data Position Ends Left Right
+syn keyword acedbMagic Multi_Position Multi_Ends With Error Relative
+syn keyword acedbMagic Min Anchor Gmap Grid_map Grid Submenus Cambridge
+syn keyword acedbMagic No_buttons Columns Colour Surround_colour Tag
+syn keyword acedbMagic Scale_unit Cursor Cursor_on Cursor_unit
+syn keyword acedbMagic Locator Magnification Projection_lines_on
+syn keyword acedbMagic Marker_points Marker_intervals Contigs
+syn keyword acedbMagic Physical_genes Two_point Multi_point Likelihood
+syn keyword acedbMagic Point_query Point_yellow Point_width
+syn keyword acedbMagic Point_pne Point_pe Point_nne Point_ne
+syn keyword acedbMagic Derived_tags DT_query DT_width DT_no_duplicates
+syn keyword acedbMagic RH_data RH_query RH_spacing RH_show_all
+syn keyword acedbMagic Names_on Width Symbol Colours Pne Pe Nne pMap
+syn keyword acedbMagic Sequence Gridded FingerPrint In_Situ Cosmid_grid
+syn keyword acedbMagic Layout Lines_at Space_at No_stagger A1_labelling
+syn keyword acedbMagic DNA Structure From Source Source_Exons
+syn keyword acedbMagic Coding CDS Transcript Assembly_tags Allele
+syn keyword acedbMagic Display Colour Frame_sensitive Strand_sensitive
+syn keyword acedbMagic Score_bounds Percent Bumpable Width Symbol
+syn keyword acedbMagic Blixem_N Address E_mail Paper Reference Title
+syn keyword acedbMagic Point_1 Point_2 Calculation Full One_recombinant
+syn keyword acedbMagic Tested Selected_trans Backcross Back_one
+syn keyword acedbMagic Dom_semi Dom_let Direct Complex_mixed Calc
+syn keyword acedbMagic Calc_upper_conf Item_1 Item_2 Results A_non_B
+syn keyword acedbMagic Score Score_by_offset Score_by_width
+syn keyword acedbMagic Right_priority Blastn Blixem Blixem_X
+syn keyword acedbMagic Journal Year Volume Page Author
+syn keyword acedbMagic Selected One_all Recs_all One_let
+syn keyword acedbMagic Sex_full Sex_one Sex_cis Dom_one Dom_selected
+syn keyword acedbMagic Calc_distance Calc_lower_conf Canon_for_cosmid
+syn keyword acedbMagic Reversed_physical Points Positive Negative
+syn keyword acedbMagic Point_error_scale Point_segregate_ordered
+syn keyword acedbMagic Point_symbol Interval_JTM Interval_RD
+syn keyword acedbMagic EMBL_feature Homol Feature
+syn keyword acedbMagic DT_tag Spacer Spacer_colour Spacer_width
+syn keyword acedbMagic RH_positive RH_negative RH_contradictory Query
+syn keyword acedbMagic Clone Y_remark PCR_remark Hybridizes_to
+syn keyword acedbMagic Row Virtual_row Mixed In_pool Subpool B_non_A
+syn keyword acedbMagic Interval_SRK Point_show_marginal Subsequence
+syn keyword acedbMagic Visible Properties Transposon
+
+syn match acedbClass "^?\w\+\|^#\w\+"
+syn match acedbComment "//.*"
+syn region acedbComment start="/\*" end="\*/"
+syn match acedbComment "^#\W.*"
+syn match acedbHelp "^\*\*\w\+$"
+syn match acedbTag "[^^]?\w\+\|[^^]#\w\+"
+syn match acedbBlock "//#.\+#$"
+syn match acedbOption "^_[DVH]\S\+"
+syn match acedbFlag "\s\+-\h\+"
+syn match acedbSubclass "^Class"
+syn match acedbSubtag "^Visible\|^Is_a_subclass_of\|^Filter\|^Hidden"
+syn match acedbNumber "\<\d\+\>"
+syn match acedbNumber "\<\d\+\.\d\+\>"
+syn match acedbHyb "\<Positive_\w\+\>\|\<Negative\w\+\>"
+syn region acedbString start=/"/ end=/"/ skip=/\\"/ oneline
+
+" Rest of syntax highlighting rules start here
+
+" 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_acedb_syn_inits")
+ if version < 508
+ let did_acedb_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink acedbMagic Special
+ HiLink acedbHyb Special
+ HiLink acedbType Type
+ HiLink acedbOption Type
+ HiLink acedbSubclass Type
+ HiLink acedbSubtag Include
+ HiLink acedbFlag Include
+ HiLink acedbTag Include
+ HiLink acedbClass Todo
+ HiLink acedbHelp Todo
+ HiLink acedbXref Identifier
+ HiLink acedbModifier Label
+ HiLink acedbComment Comment
+ HiLink acedbBlock ModeMsg
+ HiLink acedbNumber Number
+ HiLink acedbString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "acedb"
+
+" The structure of the model.wrm file is sensitive to mixed tab and space
+" indentation and assumes tabs are 8 so...
+se ts=8
diff --git a/runtime/syntax/ada.vim b/runtime/syntax/ada.vim
new file mode 100644
index 000000000..7a7b2a077
--- /dev/null
+++ b/runtime/syntax/ada.vim
@@ -0,0 +1,287 @@
+" Vim syntax file
+" Language: Ada (95)
+" Maintainer: David A. Wheeler <dwheeler@dwheeler.com>
+" URL: http://www.dwheeler.com/vim
+" Last Change: 2001-11-02
+
+" Former Maintainer: Simon Bradley <simon.bradley@pitechnology.com>
+" (was <sib93@aber.ac.uk>)
+" Other contributors: Preben Randhol.
+" The formal spec of Ada95 (ARM) is the "Ada95 Reference Manual".
+" For more Ada95 info, see http://www.gnuada.org and http://www.adapower.com.
+
+" This vim syntax file works on vim 5.6, 5.7, 5.8 and 6.x.
+" It implements Bram Moolenaar's April 25, 2001 recommendations to make
+" the syntax file maximally portable across different versions of vim.
+" If vim 6.0+ is available,
+" this syntax file takes advantage of the vim 6.0 advanced pattern-matching
+" functions to avoid highlighting uninteresting leading spaces in
+" some expressions containing "with" and "use".
+
+" 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
+
+" Ada is entirely case-insensitive.
+syn case ignore
+
+" We don't need to look backwards to highlight correctly;
+" this speeds things up greatly.
+syn sync minlines=1 maxlines=1
+
+" Highlighting commands. There are 69 reserved words in total in Ada95.
+" Some keywords are used in more than one way. For example:
+" 1. "end" is a general keyword, but "end if" ends a Conditional.
+" 2. "then" is a conditional, but "and then" is an operator.
+
+
+" Standard Exceptions (including I/O).
+" We'll highlight the standard exceptions, similar to vim's Python mode.
+" It's possible to redefine the standard exceptions as something else,
+" but doing so is very bad practice, so simply highlighting them makes sense.
+syn keyword adaException Constraint_Error Program_Error Storage_Error
+syn keyword adaException Tasking_Error
+syn keyword adaException Status_Error Mode_Error Name_Error Use_Error
+syn keyword adaException Device_Error End_Error Data_Error Layout_Error
+syn keyword adaException Length_Error Pattern_Error Index_Error
+syn keyword adaException Translation_Error
+syn keyword adaException Time_Error Argument_Error
+syn keyword adaException Tag_Error
+syn keyword adaException Picture_Error
+" Interfaces
+syn keyword adaException Terminator_Error Conversion_Error
+syn keyword adaException Pointer_Error Dereference_Error Update_Error
+" This isn't in the Ada spec, but a GNAT extension.
+syn keyword adaException Assert_Failure
+" We don't list ALL exceptions defined in particular compilers (e.g., GNAT),
+" because it's quite reasonable to define those phrases as non-exceptions.
+
+
+" We don't normally highlight types in package Standard
+" (Integer, Character, Float, etc.). I don't think it looks good
+" with the other type keywords, and many Ada programs define
+" so many of their own types that it looks inconsistent.
+" However, if you want this highlighting, turn on "ada_standard_types".
+" For package Standard's definition, see ARM section A.1.
+
+if exists("ada_standard_types")
+ syn keyword adaBuiltinType Boolean Integer Natural Positive Float
+ syn keyword adaBuiltinType Character Wide_Character
+ syn keyword adaBuiltinType String Wide_String
+ syn keyword adaBuiltinType Duration
+ " These aren't listed in ARM section A.1's code, but they're noted as
+ " options in ARM sections 3.5.4 and 3.5.7:
+ syn keyword adaBuiltinType Short_Integer Short_Short_Integer
+ syn keyword adaBuiltinType Long_Integer Long_Long_Integer
+ syn keyword adaBuiltinType Short_Float Short_Short_Float
+ syn keyword adaBuiltinType Long_Float Long_Long_Float
+endif
+
+" There are MANY other predefined types; they've not been added, because
+" determining when they're a type requires context in general.
+" One potential addition would be Unbounded_String.
+
+
+syn keyword adaLabel others
+
+syn keyword adaOperator abs mod not rem xor
+syn match adaOperator "\<and\>"
+syn match adaOperator "\<and\s\+then\>"
+syn match adaOperator "\<or\>"
+syn match adaOperator "\<or\s\+else\>"
+syn match adaOperator "[-+*/<>&]"
+syn keyword adaOperator **
+syn match adaOperator "[/<>]="
+syn keyword adaOperator =>
+syn match adaOperator "\.\."
+syn match adaOperator "="
+
+" We won't map "adaAssignment" by default, but we need to map ":=" to
+" something or the "=" inside it will be mislabelled as an operator.
+" Note that in Ada, assignment (:=) is not considered an operator.
+syn match adaAssignment ":="
+
+" Handle the box, <>, specially:
+syn keyword adaSpecial <>
+
+" Numbers, including floating point, exponents, and alternate bases.
+syn match adaNumber "\<\d[0-9_]*\(\.\d[0-9_]*\)\=\([Ee][+-]\=\d[0-9_]*\)\=\>"
+syn match adaNumber "\<\d\d\=#\x[0-9A-Fa-f_]*\(\.\x[0-9A-Fa-f_]*\)\=#\([Ee][+-]\=\d[0-9_]*\)\="
+
+" Identify leading numeric signs. In "A-5" the "-" is an operator,
+" but in "A:=-5" the "-" is a sign. This handles "A3+-5" (etc.) correctly.
+" This assumes that if you put a don't put a space after +/- when it's used
+" as an operator, you won't put a space before it either -- which is true
+" in code I've seen.
+syn match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1
+
+" Labels for the goto statement.
+syn region adaLabel start="<<" end=">>"
+
+" Boolean Constants.
+syn keyword adaBoolean true false
+
+" Warn people who try to use C/C++ notation erroneously:
+syn match adaError "//"
+syn match adaError "/\*"
+syn match adaError "=="
+
+
+if exists("ada_space_errors")
+ if !exists("ada_no_trail_space_error")
+ syn match adaSpaceError excludenl "\s\+$"
+ endif
+ if !exists("ada_no_tab_space_error")
+ syn match adaSpaceError " \+\t"me=e-1
+ endif
+endif
+
+" Unless special ("end loop", "end if", etc.), "end" marks the end of a
+" begin, package, task etc. Assiging it to adaEnd.
+syn match adaEnd "\<end\>"
+
+syn keyword adaPreproc pragma
+
+syn keyword adaRepeat exit for loop reverse while
+syn match adaRepeat "\<end\s\+loop\>"
+
+syn keyword adaStatement accept delay goto raise requeue return
+syn keyword adaStatement terminate
+syn match adaStatement "\<abort\>"
+
+" Handle Ada's record keywords.
+" 'record' usually starts a structure, but "with null record;" does not,
+" and 'end record;' ends a structure. The ordering here is critical -
+" 'record;' matches a "with null record", so make it a keyword (this can
+" match when the 'with' or 'null' is on a previous line).
+" We see the "end" in "end record" before the word record, so we match that
+" pattern as adaStructure (and it won't match the "record;" pattern).
+syn match adaStructure "\<record\>"
+syn match adaStructure "\<end\s\+record\>"
+syn match adaKeyword "\<record;"me=e-1
+
+syn keyword adaStorageClass abstract access aliased array at constant delta
+syn keyword adaStorageClass digits limited of private range tagged
+syn keyword adaTypedef subtype type
+
+" Conditionals. "abort" after "then" is a conditional of its own.
+syn match adaConditional "\<then\>"
+syn match adaConditional "\<then\s\+abort\>"
+syn match adaConditional "\<else\>"
+syn match adaConditional "\<end\s\+if\>"
+syn match adaConditional "\<end\s\+case\>"
+syn match adaConditional "\<end\s\+select\>"
+syn keyword adaConditional if case select
+syn keyword adaConditional elsif when
+
+syn keyword adaKeyword all do exception in is new null out
+syn keyword adaKeyword separate until
+
+" These keywords begin various constructs, and you _might_ want to
+" highlight them differently.
+syn keyword adaBegin begin body declare entry function generic
+syn keyword adaBegin package procedure protected renames task
+
+
+if exists("ada_withuse_ordinary")
+" Don't be fancy. Display "with" and "use" as ordinary keywords in all cases.
+ syn keyword adaKeyword with use
+else
+ " Highlight "with" and "use" clauses like C's "#include" when they're used
+ " to reference other compilation units; otherwise they're ordinary keywords.
+ " If we have vim 6.0 or later, we'll use its advanced pattern-matching
+ " capabilities so that we won't match leading spaces.
+ syn match adaKeyword "\<with\>"
+ syn match adaKeyword "\<use\>"
+ if version < 600
+ syn match adaBeginWith "^\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc
+ syn match adaSemiWith ";\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>"lc=1 contains=adaInc
+ else
+ syn match adaBeginWith "^\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc
+ syn match adaSemiWith ";\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc
+ endif
+ syn match adaInc "\<with\>" contained contains=NONE
+ syn match adaInc "\<with\s\+type\>" contained contains=NONE
+ syn match adaInc "\<use\>" contained contains=NONE
+ " Recognize "with null record" as a keyword (even the "record").
+ syn match adaKeyword "\<with\s\+null\s\+record\>"
+ " Consider generic formal parameters of subprograms and packages as keywords.
+ if version < 600
+ syn match adaKeyword ";\s*with\s\+\(function\|procedure\|package\)\>"
+ syn match adaKeyword "^\s*with\s\+\(function\|procedure\|package\)\>"
+ else
+ syn match adaKeyword ";\s*\zswith\s\+\(function\|procedure\|package\)\>"
+ syn match adaKeyword "^\s*\zswith\s\+\(function\|procedure\|package\)\>"
+ endif
+endif
+
+
+" String and character constants.
+syn region adaString start=+"+ skip=+""+ end=+"+
+syn match adaCharacter "'.'"
+
+" Todo (only highlighted in comments)
+syn keyword adaTodo contained TODO FIXME XXX
+
+" Comments.
+syn region adaComment oneline contains=adaTodo start="--" end="$"
+
+
+
+" 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_ada_syn_inits")
+ if version < 508
+ let did_ada_syn_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 adaCharacter Character
+ HiLink adaComment Comment
+ HiLink adaConditional Conditional
+ HiLink adaKeyword Keyword
+ HiLink adaLabel Label
+ HiLink adaNumber Number
+ HiLink adaSign Number
+ HiLink adaOperator Operator
+ HiLink adaPreproc PreProc
+ HiLink adaRepeat Repeat
+ HiLink adaSpecial Special
+ HiLink adaStatement Statement
+ HiLink adaString String
+ HiLink adaStructure Structure
+ HiLink adaTodo Todo
+ HiLink adaType Type
+ HiLink adaTypedef Typedef
+ HiLink adaStorageClass StorageClass
+ HiLink adaBoolean Boolean
+ HiLink adaException Exception
+ HiLink adaInc Include
+ HiLink adaError Error
+ HiLink adaSpaceError Error
+ HiLink adaBuiltinType Type
+
+ if exists("ada_begin_preproc")
+ " This is the old default display:
+ HiLink adaBegin PreProc
+ HiLink adaEnd PreProc
+ else
+ " This is the new default display:
+ HiLink adaBegin Keyword
+ HiLink adaEnd Keyword
+ endif
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ada"
+
+" vim: ts=8
diff --git a/runtime/syntax/aflex.vim b/runtime/syntax/aflex.vim
new file mode 100644
index 000000000..592c98e4f
--- /dev/null
+++ b/runtime/syntax/aflex.vim
@@ -0,0 +1,100 @@
+
+" Vim syntax file
+" Language: AfLex (from Lex syntax file)
+" Maintainer: Mathieu Clabaut <mathieu.clabaut@free.fr>
+" LastChange: 02 May 2001
+" Original: Lex, maintained by Dr. Charles E. Campbell, Jr.
+" Comment: Replaced sourcing c.vim file by ada.vim and rename lex*
+" in aflex*
+
+" 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 Ada syntax to start with
+if version < 600
+ so <sfile>:p:h/ada.vim
+else
+ runtime! syntax/ada.vim
+ unlet b:current_syntax
+endif
+
+
+" --- AfLex stuff ---
+
+"I'd prefer to use aflex.* , but it doesn't handle forward definitions yet
+syn cluster aflexListGroup contains=aflexAbbrvBlock,aflexAbbrv,aflexAbbrv,aflexAbbrvRegExp,aflexInclude,aflexPatBlock,aflexPat,aflexBrace,aflexPatString,aflexPatTag,aflexPatTag,aflexPatComment,aflexPatCodeLine,aflexMorePat,aflexPatSep,aflexSlashQuote,aflexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2
+syn cluster aflexListPatCodeGroup contains=aflexAbbrvBlock,aflexAbbrv,aflexAbbrv,aflexAbbrvRegExp,aflexInclude,aflexPatBlock,aflexPat,aflexBrace,aflexPatTag,aflexPatTag,aflexPatComment,aflexPatCodeLine,aflexMorePat,aflexPatSep,aflexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2
+
+" Abbreviations Section
+syn region aflexAbbrvBlock start="^\([a-zA-Z_]\+\t\|%{\)" end="^%%$"me=e-2 skipnl nextgroup=aflexPatBlock contains=aflexAbbrv,aflexInclude,aflexAbbrvComment
+syn match aflexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=aflexAbbrvRegExp
+syn match aflexAbbrv "^%[sx]" contained
+syn match aflexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=aflexAbbrv,aflexInclude
+syn region aflexInclude matchgroup=aflexSep start="^%{" end="%}" contained contains=ALLBUT,@aflexListGroup
+syn region aflexAbbrvComment start="^\s\+/\*" end="\*/"
+
+"%% : Patterns {Actions}
+syn region aflexPatBlock matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite contains=aflexPat,aflexPatTag,aflexPatComment
+syn region aflexPat start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 contained nextgroup=aflexMorePat,aflexPatSep contains=aflexPatString,aflexSlashQuote,aflexBrace
+syn region aflexBrace start="\[" skip=+\\\\\|\\+ end="]" contained
+syn region aflexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained
+syn match aflexPatTag "^<\I\i*\(,\I\i*\)*>*" contained nextgroup=aflexPat,aflexPatTag,aflexMorePat,aflexPatSep
+syn match aflexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=aflexPat,aflexPatTag,aflexMorePat,aflexPatSep
+syn region aflexPatComment start="^\s*/\*" end="\*/" skipnl contained contains=cTodo nextgroup=aflexPatComment,aflexPat,aflexPatString,aflexPatTag
+syn match aflexPatCodeLine ".*$" contained contains=ALLBUT,@aflexListGroup
+syn match aflexMorePat "\s*|\s*$" skipnl contained nextgroup=aflexPat,aflexPatTag,aflexPatComment
+syn match aflexPatSep "\s\+" contained nextgroup=aflexMorePat,aflexPatCode,aflexPatCodeLine
+syn match aflexSlashQuote +\(\\\\\)*\\"+ contained
+syn region aflexPatCode matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" skipnl contained contains=ALLBUT,@aflexListPatCodeGroup
+
+syn keyword aflexCFunctions BEGIN input unput woutput yyleng yylook yytext
+syn keyword aflexCFunctions ECHO output winput wunput yyless yymore yywrap
+
+" <c.vim> includes several ALLBUTs; these have to be treated so as to exclude aflex* groups
+syn cluster cParenGroup add=aflex.*
+syn cluster cDefineGroup add=aflex.*
+syn cluster cPreProcGroup add=aflex.*
+syn cluster cMultiGroup add=aflex.*
+
+" Synchronization
+syn sync clear
+syn sync minlines=300
+syn sync match aflexSyncPat grouphere aflexPatBlock "^%[a-zA-Z]"
+syn sync match aflexSyncPat groupthere aflexPatBlock "^<$"
+syn sync match aflexSyncPat groupthere aflexPatBlock "^%%$"
+
+" 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_aflex_syntax_inits")
+ if version < 508
+ let did_aflex_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink aflexSlashQuote aflexPat
+ HiLink aflexBrace aflexPat
+ HiLink aflexAbbrvComment aflexPatComment
+
+ HiLink aflexAbbrv SpecialChar
+ HiLink aflexAbbrvRegExp Macro
+ HiLink aflexCFunctions Function
+ HiLink aflexMorePat SpecialChar
+ HiLink aflexPat Function
+ HiLink aflexPatComment Comment
+ HiLink aflexPatString Function
+ HiLink aflexPatTag Special
+ HiLink aflexSep Delimiter
+ delcommand HiLink
+endif
+
+let b:current_syntax = "aflex"
+
+" vim:ts=10
diff --git a/runtime/syntax/ahdl.vim b/runtime/syntax/ahdl.vim
new file mode 100644
index 000000000..b1417c374
--- /dev/null
+++ b/runtime/syntax/ahdl.vim
@@ -0,0 +1,94 @@
+" Vim syn file
+" Language: Altera AHDL
+" Maintainer: John Cook <john.cook@kla-tencor.com>
+" Last Change: 2001 Apr 25
+
+" 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
+
+"this language is oblivious to case.
+syn case ignore
+
+" a bunch of keywords
+syn keyword ahdlKeyword assert begin bidir bits buried case clique
+syn keyword ahdlKeyword connected_pins constant defaults define design
+syn keyword ahdlKeyword device else elsif end for function generate
+syn keyword ahdlKeyword gnd help_id if in include input is machine
+syn keyword ahdlKeyword node of options others output parameters
+syn keyword ahdlKeyword returns states subdesign table then title to
+syn keyword ahdlKeyword tri_state_node variable vcc when with
+
+" a bunch of types
+syn keyword ahdlIdentifier carry cascade dffe dff exp global
+syn keyword ahdlIdentifier jkffe jkff latch lcell mcell memory opendrn
+syn keyword ahdlIdentifier soft srffe srff tffe tff tri wire x
+
+syn keyword ahdlMegafunction lpm_and lpm_bustri lpm_clshift lpm_constant
+syn keyword ahdlMegafunction lpm_decode lpm_inv lpm_mux lpm_or lpm_xor
+syn keyword ahdlMegafunction busmux mux
+
+syn keyword ahdlMegafunction divide lpm_abs lpm_add_sub lpm_compare
+syn keyword ahdlMegafunction lpm_counter lpm_mult
+
+syn keyword ahdlMegafunction altdpram csfifo dcfifo scfifo csdpram lpm_ff
+syn keyword ahdlMegafunction lpm_latch lpm_shiftreg lpm_ram_dq lpm_ram_io
+syn keyword ahdlMegafunction lpm_rom lpm_dff lpm_tff clklock pll ntsc
+
+syn keyword ahdlTodo contained TODO
+
+" String contstants
+syn region ahdlString start=+"+ skip=+\\"+ end=+"+
+
+" valid integer number formats (decimal, binary, octal, hex)
+syn match ahdlNumber '\<\d\+\>'
+syn match ahdlNumber '\<b"\(0\|1\|x\)\+"'
+syn match ahdlNumber '\<\(o\|q\)"\o\+"'
+syn match ahdlNumber '\<\(h\|x\)"\x\+"'
+
+" operators
+syn match ahdlOperator "[!&#$+\-<>=?:\^]"
+syn keyword ahdlOperator not and nand or nor xor xnor
+syn keyword ahdlOperator mod div log2 used ceil floor
+
+" one line and multi-line comments
+" (define these after ahdlOperator so -- overrides -)
+syn match ahdlComment "--.*" contains=ahdlNumber,ahdlTodo
+syn region ahdlComment start="%" end="%" contains=ahdlNumber,ahdlTodo
+
+" other special characters
+syn match ahdlSpecialChar "[\[\]().,;]"
+
+syn sync minlines=1
+
+" 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_ahdl_syn_inits")
+ if version < 508
+ let did_ahdl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink ahdlNumber ahdlString
+ HiLink ahdlMegafunction ahdlIdentifier
+ HiLink ahdlSpecialChar SpecialChar
+ HiLink ahdlKeyword Statement
+ HiLink ahdlString String
+ HiLink ahdlComment Comment
+ HiLink ahdlIdentifier Identifier
+ HiLink ahdlOperator Operator
+ HiLink ahdlTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ahdl"
+" vim:ts=8
diff --git a/runtime/syntax/amiga.vim b/runtime/syntax/amiga.vim
new file mode 100644
index 000000000..21e88aeab
--- /dev/null
+++ b/runtime/syntax/amiga.vim
@@ -0,0 +1,101 @@
+" Vim syntax file
+" Language: AmigaDos
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 4
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+" Amiga Devices
+syn match amiDev "\(par\|ser\|prt\|con\|nil\):"
+
+" Amiga aliases and paths
+syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:"
+syn match amiAlias "\<[a-zA-Z][a-zA-Z0-9]\+:[a-zA-Z0-9/]*/"
+
+" strings
+syn region amiString start=+"+ end=+"+ oneline
+
+" numbers
+syn match amiNumber "\<\d\+\>"
+
+" Logic flow
+syn region amiFlow matchgroup=Statement start="if" matchgroup=Statement end="endif" contains=ALL
+syn keyword amiFlow skip endskip
+syn match amiError "else\|endif"
+syn keyword amiElse contained else
+
+syn keyword amiTest contained not warn error fail eq gt ge val exists
+
+" echo exception
+syn region amiEcho matchgroup=Statement start="\<echo\>" end="$" oneline contains=amiComment
+syn region amiEcho matchgroup=Statement start="^\.[bB][rR][aA]" end="$" oneline
+syn region amiEcho matchgroup=Statement start="^\.[kK][eE][tT]" end="$" oneline
+
+" commands
+syn keyword amiKey addbuffers copy fault join pointer setdate
+syn keyword amiKey addmonitor cpu filenote keyshow printer setenv
+syn keyword amiKey alias date fixfonts lab printergfx setfont
+syn keyword amiKey ask delete fkey list printfiles setmap
+syn keyword amiKey assign dir font loadwb prompt setpatch
+syn keyword amiKey autopoint diskchange format lock protect sort
+syn keyword amiKey avail diskcopy get magtape quit stack
+syn keyword amiKey binddrivers diskdoctor getenv makedir relabel status
+syn keyword amiKey bindmonitor display graphicdump makelink remrad time
+syn keyword amiKey blanker iconedit more rename type
+syn keyword amiKey break ed icontrol mount resident unalias
+syn keyword amiKey calculator edit iconx newcli run unset
+syn keyword amiKey cd endcli ihelp newshell say unsetenv
+syn keyword amiKey changetaskpri endshell info nocapslock screenmode version
+syn keyword amiKey clock eval initprinter nofastmem search wait
+syn keyword amiKey cmd exchange input overscan serial wbpattern
+syn keyword amiKey colors execute install palette set which
+syn keyword amiKey conclip failat iprefs path setclock why
+
+" comments
+syn cluster amiCommentGroup contains=amiTodo,@Spell
+syn case ignore
+syn keyword amiTodo contained todo
+syn case match
+syn match amiComment ";.*$" contains=amiCommentGroup
+
+" sync
+syn sync lines=50
+
+" 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_amiga_syn_inits")
+ if version < 508
+ let did_amiga_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink amiAlias Type
+ HiLink amiComment Comment
+ HiLink amiDev Type
+ HiLink amiEcho String
+ HiLink amiElse Statement
+ HiLink amiError Error
+ HiLink amiKey Statement
+ HiLink amiNumber Number
+ HiLink amiString String
+ HiLink amiTest Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "amiga"
+
+" vim:ts=15
diff --git a/runtime/syntax/aml.vim b/runtime/syntax/aml.vim
new file mode 100644
index 000000000..7cb16f1c1
--- /dev/null
+++ b/runtime/syntax/aml.vim
@@ -0,0 +1,157 @@
+" Vim syntax file
+" Language: AML (ARC/INFO Arc Macro Language)
+" Written By: Nikki Knuit <Nikki.Knuit@gems3.gov.bc.ca>
+" Maintainer: Todd Glover <todd.glover@gems9.gov.bc.ca>
+" Last Change: 2001 May 10
+
+" FUTURE CODING: Bold application commands after &sys, &tty
+" Only highlight aml Functions at the beginning
+" of [], in order to avoid -read highlighted,
+" or [quote] strings highlighted
+
+" 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
+
+" ARC, ARCEDIT, ARCPLOT, LIBRARIAN, GRID, SCHEMAEDIT reserved words,
+" defined as keywords.
+
+syn keyword amlArcCmd contained 2button abb abb[reviations] abs ac acos acosh add addc[ogoatt] addcogoatt addf[eatureclass] addh[istory] addi addim[age] addindexatt addit[em] additem addressb[uild] addressc[reate] addresse[rrors] addressedit addressm[atch] addressp[arse] addresst[est] addro[utemeasure] addroutemeasure addte[xt] addto[stack] addw[orktable] addx[y] adj[ust] adm[inlicense] adr[ggrid] ads adsa[rc] ae af ag[gregate] ai ai[request] airequest al alia[s] alig[n] alt[erarchive] am[sarc] and annoa[lignment] annoadd annocapture annocl[ip] annoco[verage] annocurve annoe[dit] annoedit annof annofeature annofit annoitem annola[yer] annole[vel] annolevel annoline annooffset annop[osition] annoplace annos[ize] annoselectfeatur annoset annosum annosymbol annot annot[ext] annotext annotype ao ap apm[ode] app[end] arc arcad[s] arcar[rows] arcc[ogo] arcdf[ad] arcdi[me] arcdl[g] arcdx[f] arced[it] arcedit arcen[dtext] arcf[ont] arcigd[s] arcige[s] arcla[bel] arcli[nes] arcma[rkers] arcmo[ss]
+syn keyword amlArcCmd contained arcpl[ot] arcplot arcpo[int] arcr[oute] arcs arcsc[itex] arcse[ction] arcsh[ape] arcsl[f] arcsn[ap] arcsp[ot] arcte[xt] arctig[er] arctin arcto[ols] arctools arcty[pe] area areaq[uery] arm arrow arrows[ize] arrowt[ype] as asc asciig[rid] asciih[elp] asciihelp asco[nnect] asconnect asd asda[tabase] asdi[sconnect] asdisconnect asel[ect] asex[ecute] asf asin asinh asp[ect] asr[eadlocks] ast[race] at atan atan2 atanh atusage aud[ittrail] autoi[ncrement] autol[ink] axis axish[atch] axisl[abels] axisr[uler] axist[ext] bac[klocksymbol] backcoverage backenvironment backnodeangleite backsymbolitem backtextitem base[select] basi[n] bat[ch] bc be be[lls] blackout blockmaj[ority] blockmax blockmea[n] blockmed[ian] blockmin blockmino[rity] blockr[ange] blockst[d] blocksu[m] blockv[ariety] bnai bou[ndaryclean] box br[ief] bsi bti buf[fer] bug[form] bugform build builds[ta] buildv[at] calco[mp] calcomp calcu[late] cali[brateroutes] calibrateroutes can[d] cartr[ead] cartread
+syn keyword amlArcCmd contained cartw[rite] cartwrite cei[l] cel[lvalue] cen[troidlabels] cgm cgme[scape] cha[nge] checkin checkinrel checkout checkoutrel chm[od] chown chownt[ransaction] chowntran chowntransaction ci ci[rcle] cir class classp[rob] classs[ig] classsample clean clear clears[elect] clip clipg[raphextent] clipm[apextent] clo[sedatabase] cntvrt co cod[efind] cog[oinverse] cogocom cogoenv cogomenu coll[ocate] color color2b[lue] color2g[reen] color2h[ue] color2r[ed] color2s[at] color2v[al] colorchart coloredit colorh[cbs] colorhcbs colu[mns] comb[ine] comm[ands] commands con connect connectu[ser] cons[ist] conto[ur] contr[olpoints] convertd[oc] convertdoc converti[mage] convertla[yer] convertli[brary] convertr[emap] convertw[orkspace] coo[rdinate] coordinate coordinates copy copyf[eatures] copyi[nfo] copyl[ayer] copyo copyo[ut] copyout copys[tack] copyw[orkspace] copyworkspace cor corr[idor] correlation cos cosh costa[llocation] costb[acklink] costd[istance] costp[ath] cou[ntvertices]
+syn keyword amlArcCmd contained countvertices cpw cr create create2[dindex] createa[ttributes] createca[talog] createco[go] createcogo createf[eature] createind[ex] createinf[otable] createlab[els] createlay[er] createli[brary] createn[etindex] creater[emap] creates[ystables] createta[blespace] createti[n] createw[orkspace] createworkspace cs culdesac curs[or] curv[ature] curve3pt cut[fill] cutoff cw cx[or] da dar[cyflow] dat[aset] dba[seinfo] dbmsc dbmsc[ursor] dbmscursor dbmse[xecute] dbmsi[nfo] dbmss[et] de delete deletea[rrows] deletet[ic] deletew[orkspace] deleteworkspace demg[rid] deml[attice] dend[rogram] densify densifya[rc] describe describea[rchive] describel[attice] describeti[n] describetr[ans] describetrans dev df[adarc] dg dif[f] digi[tizer] digt[est] dim[earc] dir dir[ectory] directory disa[blepanzoom] disconnect disconnectu[ser] disp disp[lay] display dissolve dissolvee[vents] dissolveevents dista[nce] distr[ibutebuild] div dl[garc] do doce[ll] docu[ment] document dogroup drag
+syn keyword amlArcCmd contained draw drawenvironment draworder draws[ig] drawselect drawt[raverses] drawz[oneshape] drop2[dindex] dropa[rchive] dropfeaturec[lass] dropfeatures dropfr[omstack] dropgroup droph[istory] dropind[ex] dropinf[otable] dropit[em] dropla[yer] droplib[rary] droplin[e] dropline dropn[etindex] dropt[ablespace] dropw[orktable] ds dt[edgrid] dtrans du[plicate] duplicatearcs dw dxf dxfa[rc] dxfi[nfo] dynamicpan dynpan ebe ec ed edg[esnap] edgematch editboundaryerro edit[coverage] editdistance editf editfeature editp[lot] editplot edits[ig] editsymbol ef el[iminate] em[f] en[d] envrst envsav ep[s] eq equ[alto] er[ase] es et et[akarc] euca[llocation] eucdir[ection] eucdis[tance] eval eventa[rc] evente[nds] eventh[atch] eventi[nfo] eventlinee[ndtext] eventlines eventlinet[ext] eventlis[t] eventma[rkers] eventme[nu] eventmenu eventpoint eventpointt[ext] eventse[ction] eventso[urce] eventt[ransform] eventtransform exi[t] exp exp1[0] exp2 expa[nd] expo[rt] exten[d] external externala[ll]
+syn keyword amlArcCmd contained fd[convert] featuregroup fg fie[lddata] file fill filt[er] fix[ownership] flip flipa[ngle] float floatg[rid] floo[r] flowa[ccumulation] flowd[irection] flowl[ength] fm[od] focalf[low] focalmaj[ority] focalmax focalmea[n] focalmed[ian] focalmin focalmino[rity] focalr[ange] focalst[d] focalsu[m] focalv[ariety] fonta[rc] fontco[py] fontcr[eate] fontd[elete] fontdump fontl[oad] fontload forc[e] form[edit] formedit forms fr[equency] ge geary general[ize] generat[e] gerbera[rc] gerberr[ead] gerberread gerberw[rite] gerberwrite get getz[factor] gi gi[rasarc] gnds grai[n] graphb[ar] graphe[xtent] graphi[cs] graphicimage graphicview graphlim[its] graphlin[e] graphp[oint] graphs[hade] gray[shade] gre[aterthan] grid grida[scii] gridcl[ip] gridclip gridco[mposite] griddesk[ew] griddesp[eckle] griddi[rection] gride[dit] gridfli[p] gridflo[at] gridim[age] gridin[sert] gridl[ine] gridma[jority] gridmi[rror] gridmo[ss] gridn[et] gridnodatasymbol gridpa[int] gridpoi[nt] gridpol[y]
+syn keyword amlArcCmd contained gridq[uery] gridr[otate] gridshad[es] gridshap[e] gridshi[ft] gridw[arp] group groupb[y] gt gv gv[tolerance] ha[rdcopy] he[lp] help hid[densymbol] hig[hlow] hil[lshade] his[togram] historicalview ho[ldadjust] hpgl hpgl2 hsv2b[lue] hsv2g[reen] hsv2r[ed] ht[ml] hview ia ided[it] identif[y] identit[y] idw if igdsa[rc] igdsi[nfo] ige[sarc] il[lustrator] illustrator image imageg[rid] imagep[lot] imageplot imageview imp[ort] in index indexi[tem] info infodba[se] infodbm[s] infof[ile] init90[00] init9100 init9100b init91[00] init95[00] int intersect intersectarcs intersecte[rr] isn[ull] iso[cluster] it[ems] iview j[oinitem] join keeps keepselect keyan[gle] keyar[ea] keyb[ox] keyf[orms] keyl[ine] keym keym[arker] keymap keyp[osition] keyse[paration] keysh[ade] keyspot kill killm[ap] kr[iging] la labela[ngle] labele[rrors] labelm[arkers] labels labelsc[ale] labelsp[ot] labelt[ext] lal latticecl[ip] latticeco[ntour] latticed[em] latticem[erge] latticemarkers latticeo[perate]
+syn keyword amlArcCmd contained latticep[oly] latticerep[lace] latticeres[ample] lattices[pot] latticet[in] latticetext layer layera[nno] layerca[lculate] layerco[lumns] layerde[lete] layerdo[ts] layerdr[aw] layere[xport] layerf[ilter] layerid[entify] layerim[port] layerio[mode] layerli[st] layerloc[k] layerlog[file] layerq[uery] layerse[arch] layersp[ot] layert[ext] lc ldbmst le leadera[rrows] leaders leadersy[mbol] leadert[olerance] len[gth] les[sthan] lf lg lh li lib librari[an] library limitadjust limitautolink line line2pt linea[djustment] linecl[osureangle] linecolor linecolorr[amp] linecopy linecopyl[ayer] linedelete linedeletel[ayer] lineden[sity] linedir[ection] linedis[t] lineedit lineg[rid] lineh[ollow] lineinf[o] lineint[erval] linel[ayer] linelist linem[iterangle] lineo[ffset] linepa[ttern] linepe[n] linepu[t] linesa[ve] linesc[ale] linese[t] linesi[ze] linest[ats] linesy[mbol] linete[mplate]
+syn keyword amlArcCmd contained linety[pe] link[s] linkfeatures list listarchives listatt listc[overages] listcoverages listdbmstables listg[rids] listgrids listhistory listi[mages] listimages listinfotables listlayers listlibraries listo[utput] listse[lect] listst[acks] liststacks listtablespaces listti[ns] listtins listtr[averses] listtran listtransactions listw[orkspaces] listworkspaces lit ll ll[sfit] lla lm ln load loada[djacent] loadcolormap locko[nly] locks[ymbol] log log1[0] log2 logf[ile] logg[ing] loo[kup] lot[area] lp[os] lstk lt lts lw madditem majority majorityf[ilter] makere[gion] makero[ute] makese[ction] makest[ack] mal[ign] map mapa[ngle] mape[xtent] mapextent mapi[nfo] mapj[oin] mapl[imits] mappo[sition] mappr[ojection] mapsc[ale] mapsh[ift] mapu[nits] mapw[arp] mapz[oom] marker markera[ngle] markercolor markercolorr[amp] markercopy markercopyl[ayer] markerdelete markerdeletel[aye] markeredit markerf[ont] markeri[nfo] markerl[ayer] markerlist markerm[ask] markero[ffset]
+syn keyword amlArcCmd contained markerpa[ttern] markerpe[n] markerpu[t] markersa[ve] markersc[ale] markerse[t] markersi[ze] markersy[mbol] mas[elect] matchc[over] matchn[ode] max mb[egin] mc[opy] md[elete] me mean measure measurer[oute] measureroute med mend menu[cover] menuedit menv[ironment] merge mergeh[istory] mergev[at] mfi[t] mfr[esh] mg[roup] miadsa[rc] miadsr[ead] miadsread min minf[o] mino[rity] mir[ror] mitems mjoin ml[classify] mma[sk] mmo[ve] mn[select] mod mor[der] moran mosa[ic] mossa[rc] mossg[rid] move movee[nd] movei[tem] mp[osition] mr mr[otate] msc[ale] mse[lect] mselect mt[olerance] mu[nselect] multcurve multinv multipleadditem multipleitems multiplejoin multipleselect multprop mw[ho] nai ne near neatline neatlineg[rid] neatlineh[atch] neatlinel[abels] neatlinet[ics] new next ni[bble] nodeangleitem nodec[olor] nodee[rrors] nodem[arkers] nodep[oint] nodes nodesi[ze] nodesn[ap] nodesp[ot] nodet[ext] nor[mal] not ns[elect] oe ogrid ogridt[ool] oldwindow oo[ps] op[endatabase] or
+syn keyword amlArcCmd contained osymbol over overflow overflowa[rea] overflowp[osition] overflows[eparati] overl[ayevents] overlapsymbol overlayevents overp[ost] pagee[xtent] pages[ize] pageu[nits] pal[info] pan panview par[ticletrack] patc[h] path[distance] pe[nsize] pi[ck] pli[st] plot plotcopy plotg[erber] ploti[con] plotmany plotpanel plotsc[itex] plotsi[f] pointde[nsity] pointdist pointdista[nce] pointdo[ts] pointg[rid] pointi[nterp] pointm[arkers] pointn[ode] points pointsp[ot] pointst[ats] pointt[ext] polygonb[ordertex] polygond[ots] polygone[vents] polygonevents polygonl[ines] polygons polygonsh[ades] polygonsi[zelimit] polygonsp[ot] polygont[ext] polygr[id] polyr[egion] pop[ularity] por[ouspuff] pos pos[tscript] positions postscript pow prec[ision] prep[are] princ[omp] print product producti[nfo] project projectcom[pare] projectcop[y] projectd[efine] pul[litems] pur[gehistory] put pv q q[uit] quit rand rang[e] rank rb rc re readg[raphic] reads[elect] reb[ox] recl[ass] recoverdb rect[ify]
+syn keyword amlArcCmd contained red[o] refreshview regionb[uffer] regioncla[ss] regioncle[an] regiondi[ssolve] regiondo[ts] regione[rrors] regiong[roup] regionj[oin] regionl[ines] regionpoly regionpolyc[ount] regionpolycount regionpolyl[ist] regionpolylist regionq[uery] regions regionse[lect] regionsh[ades] regionsp[ot] regiont[ext] regionxa[rea] regionxarea regionxt[ab] regionxtab register registerd[bms] regr[ession] reindex rej[ects] rela[te] rele[ase] rem remapgrid reme[asure] remo[vescalar] remove removeback removecover removeedit removesnap removetransfer rename renamew[orkspace] renameworkspace reno[de] rep[lace] reposition resa[mple] resel[ect] reset resh[ape] restore restorearce[dit] restorearch[ive] resu[me] rgb2h[ue] rgb2s[at] rgb2v[al] rotate rotatep[lot] routea[rc] routeends routeendt[ext] routeer[rors] routeev[entspot] routeh[atch] routel[ines] routes routesp[ot] routest[ats] routet[ext] rp rs rt rt[l] rtl rv rw sa sai sample samples[ig] sav[e] savecolormap sc scal[ar] scat[tergram]
+syn keyword amlArcCmd contained scenefog sceneformat scenehaze sceneoversample sceneroll scenesave scenesize scenesky scitexl[ine] scitexpoi[nt] scitexpol[y] scitexr[ead] scitexread scitexw[rite] scitexwrite sco screenr[estore] screens[ave] sd sds sdtse[xport] sdtsim[port] sdtsin[fo] sdtsl[ist] se sea[rchtolerance] sectiona[rc] sectionends sectionendt[ext] sectionh[atch] sectionl[ines] sections sectionsn[ap] sectionsp[ot] sectiont[ext] sel select selectb[ox] selectc[ircle] selectg[et] selectm[ask] selectmode selectpoi[nt] selectpol[ygon] selectpu[t] selectt[ype] selectw[ithin] semivariogram sep[arator] separator ser[verstatus] setan[gle] setar[row] setce[ll] setcoa[lesce] setcon[nectinfo] setd[bmscheckin] setdrawsymbol sete[ditmode] setincrement setm[ask] setn[ull] setools setreference setsymbol setturn setw[indow] sext sf sfmt sfo sha shade shadea[ngle] shadeb[ackcolor] shadecolor shadecolorr[amp] shadecopy shadecopyl[ayer] shadedelete shadedeletel[ayer] shadeedit shadegrid shadei[nfo] shadela[yer]
+syn keyword amlArcCmd contained shadeli[nepattern] shadelist shadeo[ffset] shadepa[ttern] shadepe[n] shadepu[t] shadesa[ve] shadesc[ale] shadesep[aration] shadeset shadesi[ze] shadesy[mbol] shadet[ype] shapea[rc] shapef[ile] shapeg[rid] shi[ft] show showconstants showe[ditmode] shr[ink] si sin sinfo sing[leuser] sinh sink sit[e] sl slf[arc] sli[ce] slo[pe] sm smartanno snap snapc[over] snapcover snapcoverage snapenvironment snapfeatures snapitems snapo[rder] snappi[ng] snappo[ur] so[rt] sobs sos spi[der] spiraltrans spline splinem[ethod] split spot spoto[ffset] spots[ize] sproj sqr sqrt sra sre srl ss ssc ssh ssi ssky ssz sta stackh[istogram] stackprofile stacksc[attergram] stackshade stackst[ats] stati[stics] statu[s] statuscogo std stra[ighten] streamline streamlink streamo[rder] stri[pmap] subm[it] subs[elect] sum surface surfaceabbrev surfacecontours surfacedefaults surfacedrape surfaceextent surfaceinfo surfacel[ength] surfacelimits surfacemarker surfacemenu surfaceobserver surfaceprofile
+syn keyword amlArcCmd contained surfaceprojectio surfacerange surfaceresolutio surfacesave surfacescene surfaceshade surfacesighting surfacetarget surfacevalue surfaceviewfield surfaceviewshed surfacevisibility surfacexsection surfacezoom surfacezscale sv svfd svs sxs symboldump symboli[tem] symbolsa[ve] symbolsc[ale] symbolse[t] symbolset sz tab[les] tal[ly] tan tanh tc te tes[t] text textal[ignment] textan[gle] textcolor textcolorr[amp] textcop[y] textde[lete] textdi[rection] textedit textfil[e] textfit textfo[nt] textin[fo] textit[em] textj[ustificatio] textlist textm[ask] texto[ffset] textpe[n] textpr[ecision] textpu[t] textq[uality] textsa[ve] textsc[ale] textse[t] textset textsi[ze] textsl[ant] textspa[cing] textspl[ine] textst[yle] textsy[mbol] tf th thie[ssen] thin ti tics tict[ext] tigera[rc] tigert[ool] tigertool til[es] timped tin tina[rc] tinc[ontour] tinerrors tinhull tinl[attice] tinlines tinmarkers tins[pot] tinshades tintext tinv[rml] tl tm tol[erance] top[ogrid] topogridtool
+syn keyword amlArcCmd contained transa[ction] transfe[r] transfercoverage transferfeature transferitems transfersymbol transfo[rm] travrst travsav tre[nd] ts tsy tt tur[ntable] turnimpedance tut[orial] una[ry] unde[lete] undo ungenerate ungeneratet[in] unio[n] unit[s] unr[egisterdbms] unse[lect] unsp[lit] update updatei[nfoschema] updatel[abels] upo[s] us[age] v va[riety] vcgl vcgl2 veri[fy] vers[ion] vertex viewrst viewsav vip visd[ecode] visdecode vise[ncode] visencode visi[bility] vo[lume] vpfe[xport] vpfi[mport] vpfl[ist] vpft[ile] w war[p] wat[ershed] weedd[raw] weedo[perator] weedt[olerance] weedtolerance whe[re] whi[le] who wi[ndows] wm[f] wo[rkspace] workspace writec[andidates] writeg[raphic] writes[elect] wt x[or] ze[ta] zeta zi zo zonala[rea] zonalc[entroid] zonalf[ill] zonalg[eometry] zonalmaj[ority] zonalmax zonalmea[n] zonalmed[ian] zonalmin zonalmino[rity] zonalp[erimeter] zonalr[ange] zonalsta[ts] zonalstd zonalsu[m] zonalt[hickness] zonalv[ariety] zoomview zv
+
+" FORMEDIT reserved words, defined as keywords.
+
+syn keyword amlFormedCmd contained button choice display help input slider text
+
+" TABLES reserved words, defined as keywords.
+
+syn keyword amlTabCmd contained add additem alter asciihelp aselect at calc calculate change commands commit copy define directory dropindex dropitem erase external get help indexitem items kill list move nselect purge quit redefine rename reselect rollback save select show sort statistics unload update usagecontained
+
+" INFO reserved words, defined as keywords.
+
+syn keyword amlInfoCmd contained accept add adir alter dialog alter alt directory aret arithmetic expressions aselect automatic return calculate cchr change options change comi cominput commands list como comoutput compile concatenate controlling defaults copy cursor data delete data entry data manipulate data retrieval data update date format datafile create datafile management decode define delimiter dfmt directory management directory display do doend documentation done end environment erase execute exiting expand export external fc files first format forms control get goto help import input form ipf internal item types items label lchar list logical expressions log merge modify options modify move next nselect output password prif print programming program protect purge query quit recase redefine relate relate release notes remark rename report options reporting report reselect reserved words restrictions run save security select set sleep sort special form spool stop items system variables take terminal types terminal time topics list type update upf
+
+" VTRACE reserved words, defined as keywords.
+
+syn keyword amlVtrCmd contained add al arcscan arrowlength arrowwidth as aw backtrack branch bt cj clearjunction commands cs dash endofline endofsession eol eos fan fg foreground gap generalizetolerance gtol help hole js junctionsensitivity linesymbol linevariation linewidth ls lv lw markersymbol mode ms raster regionofinterest reset restore retrace roi save searchradius skip sr sta status stc std str straightenangle straightencorner straightendistance straightenrange vt vtrace
+
+" The AML reserved words, defined as keywords.
+
+syn keyword amlFunction contained abs access acos after angrad asin atan before calc close copy cos cover coverage cvtdistance date delete dignum dir directory entryname exist[s] exp extract file filelist format formatdate full getchar getchoice getcover getdatabase getdeflayers getfile getgrid getimage getitem getlayercols getlibrary getstack getsymbol gettin getunique iacclose iacconnect iacdisconnect iacopen iacrequest index indexed info invangle invdistance iteminfo joinfile keyword length listfile listitem listunique locase log max menu min mod noecho null okangle okdistance open pathname prefix query quote quoteexists r radang random read rename response round scratchname search show sin sort sqrt subst substr suffix tan task token translate trim truncate type unquote upcase username value variable verify write
+
+syn keyword amlDir contained abbreviations above all aml amlpath append arc args atool brief by call canvas cc center cl codepage commands conv_watch_to_aml coordinates cr create current cursor cwta dalines data date_format delete delvar describe dfmt digitizer display do doend dv echo else enable encode encrypt end error expansion fail file flushpoints force form format frame fullscreen function getlastpoint getpoint goto iacreturn if ignore info inform key keypad label lc left lf lg list listchar listfiles listglobal listheader listlocal listprogram listvar ll lp lr lv map matrix menu menupath menutype mess message[s] modal mouse nopaging off on others page pause pinaction popup position pt pulldown push pushpoint r repeat return right routine run runwatch rw screen seconds select self setchar severity show sidebar single size staggered station stop stripe sys system tablet tb terminal test then thread to top translate tty ty type uc ul until ur usage w warning watch when while window workspace
+
+syn keyword amlDir2 contained delvar dv s set setvar sv
+
+syn keyword amlOutput contained inform warning error pause stop tty ty type
+
+
+" AML Directives:
+syn match amlDirSym "&"
+syn match amlDirective "&[a-zA-Z]*" contains=amlDir,amlDir2,amlDirSym
+
+" AML Functions
+syn region amlFunc start="\[ *[a-zA-Z]*" end="\]" contains=amlFunction,amlVar
+syn match amlFunc2 "\[.*\[.*\].*\]" contains=amlFunction,amlVar
+
+" Numbers:
+"syn match amlNumber "-\=\<[0-9]*\.\=[0-9_]\>"
+
+" Quoted Strings:
+syn region amlQuote start=+"+ skip=+\\"+ end=+"+ contains=amlVar
+syn region amlQuote start=+'+ skip=+\\'+ end=+'+
+
+" ARC Application Commands only selected at the beginning of the line,
+" or after a one line &if &then statement
+syn match amlAppCmd "^ *[a-zA-Z]*" contains=amlArcCmd,amlInfoCmd,amlTabCmd,amlVtrCmd,amlFormedCmd
+syn region amlAppCmd start="&then" end="$" contains=amlArcCmd,amlFormedCmd,amlInfoCmd,amlTabCmd,amlVtrCmd,amlFunction,amlDirective,amlVar2,amlSkip,amlVar,amlComment
+
+" Variables
+syn region amlVar start="%" end="%"
+syn region amlVar start="%" end="%" contained
+syn match amlVar2 "&s [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+syn match amlVar2 "&sv [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+syn match amlVar2 "&set [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+syn match amlVar2 "&setvar [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+syn match amlVar2 "&dv [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+syn match amlVar2 "&delvar [a-zA-Z_.0-9]*" contains=amlDir2,amlDirSym
+
+" Formedit 2 word commands
+syn match amlFormed "^ *check box"
+syn match amlFormed "^ *data list"
+syn match amlFormed "^ *symbol list"
+
+" Tables 2 word commands
+syn match amlTab "^ *q stop"
+syn match amlTab "^ *quit stop"
+
+" Comments:
+syn match amlComment "/\*.*"
+
+" Regions for skipping over (not highlighting) program output strings:
+syn region amlSkip matchgroup=amlOutput start="&call" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&routine" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&inform" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&return &inform" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&return &warning" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&return &error" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&pause" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&stop" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&tty" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&ty" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&typ" end="$" contains=amlVar
+syn region amlSkip matchgroup=amlOutput start="&type" end="$" contains=amlVar
+
+" 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_aml_syntax_inits")
+ if version < 508
+ let did_aml_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink amlComment Comment
+ HiLink amlNumber Number
+ HiLink amlQuote String
+ HiLink amlVar Identifier
+ HiLink amlVar2 Identifier
+ HiLink amlFunction PreProc
+ HiLink amlDir Statement
+ HiLink amlDir2 Statement
+ HiLink amlDirSym Statement
+ HiLink amlOutput Statement
+ HiLink amlArcCmd ModeMsg
+ HiLink amlFormedCmd amlArcCmd
+ HiLink amlTabCmd amlArcCmd
+ HiLink amlInfoCmd amlArcCmd
+ HiLink amlVtrCmd amlArcCmd
+ HiLink amlFormed amlArcCmd
+ HiLink amlTab amlArcCmd
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "aml"
diff --git a/runtime/syntax/ampl.vim b/runtime/syntax/ampl.vim
new file mode 100644
index 000000000..7f4dfa994
--- /dev/null
+++ b/runtime/syntax/ampl.vim
@@ -0,0 +1,150 @@
+" Language: ampl (A Mathematical Programming Language)
+" Maintainer: Krief David <david.krief@etu.enseeiht.fr> or <david_krief@hotmail.com>
+" Last Change: 2003 May 11
+
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+
+
+"--
+syn match amplEntityKeyword "\(subject to\)\|\(subj to\)\|\(s\.t\.\)"
+syn keyword amplEntityKeyword minimize maximize objective
+
+syn keyword amplEntityKeyword coeff coef cover obj default
+syn keyword amplEntityKeyword from to to_come net_in net_out
+syn keyword amplEntityKeyword dimen dimension
+
+
+
+"--
+syn keyword amplType integer binary set param var
+syn keyword amplType node ordered circular reversed symbolic
+syn keyword amplType arc
+
+
+
+"--
+syn keyword amplStatement check close \display drop include
+syn keyword amplStatement print printf quit reset restore
+syn keyword amplStatement solve update write shell model
+syn keyword amplStatement data option let solution fix
+syn keyword amplStatement unfix end function pipe format
+
+
+
+"--
+syn keyword amplConditional if then else and or
+syn keyword amplConditional exists forall in not within
+
+
+
+"--
+syn keyword amplRepeat while repeat for
+
+
+
+"--
+syn keyword amplOperators union diff difference symdiff sum
+syn keyword amplOperators inter intersect intersection cross setof
+syn keyword amplOperators by less mod div product
+"syn keyword amplOperators min max
+"conflict between functions max, min and operators max, min
+
+syn match amplBasicOperators "||\|<=\|==\|\^\|<\|=\|!\|-\|\.\.\|:="
+syn match amplBasicOperators "&&\|>=\|!=\|\*\|>\|:\|/\|+\|\*\*"
+
+
+
+
+"--
+syn match amplComment "\#.*"
+syn region amplComment start=+\/\*+ end=+\*\/+
+
+syn region amplStrings start=+\'+ skip=+\\'+ end=+\'+
+syn region amplStrings start=+\"+ skip=+\\"+ end=+\"+
+
+syn match amplNumerics "[+-]\=\<\d\+\(\.\d\+\)\=\([dDeE][-+]\=\d\+\)\=\>"
+syn match amplNumerics "[+-]\=Infinity"
+
+
+"--
+syn keyword amplSetFunction card next nextw prev prevw
+syn keyword amplSetFunction first last member ord ord0
+
+syn keyword amplBuiltInFunction abs acos acosh alias asin
+syn keyword amplBuiltInFunction asinh atan atan2 atanh ceil
+syn keyword amplBuiltInFunction cos exp floor log log10
+syn keyword amplBuiltInFunction max min precision round sin
+syn keyword amplBuiltInFunction sinh sqrt tan tanh trunc
+
+syn keyword amplRandomGenerator Beta Cauchy Exponential Gamma Irand224
+syn keyword amplRandomGenerator Normal Poisson Uniform Uniform01
+
+
+
+"-- to highlight the 'dot-suffixes'
+syn match amplDotSuffix "\h\w*\.\(lb\|ub\)"hs=e-2
+syn match amplDotSuffix "\h\w*\.\(lb0\|lb1\|lb2\|lrc\|ub0\)"hs=e-3
+syn match amplDotSuffix "\h\w*\.\(ub1\|ub2\|urc\|val\|lbs\|ubs\)"hs=e-3
+syn match amplDotSuffix "\h\w*\.\(init\|body\|dinit\|dual\)"hs=e-4
+syn match amplDotSuffix "\h\w*\.\(init0\|ldual\|slack\|udual\)"hs=e-5
+syn match amplDotSuffix "\h\w*\.\(lslack\|uslack\|dinit0\)"hs=e-6
+
+
+
+"--
+syn match amplPiecewise "<<\|>>"
+
+
+
+"-- Todo.
+syn keyword amplTodo contained TODO FIXME XXX
+
+
+
+
+
+
+
+
+
+
+if version >= 508 || !exists("did_ampl_syntax_inits")
+ if version < 508
+ let did_ampl_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 amplEntityKeyword Keyword
+ HiLink amplType Type
+ HiLink amplStatement Statement
+ HiLink amplOperators Operator
+ HiLink amplBasicOperators Operator
+ HiLink amplConditional Conditional
+ HiLink amplRepeat Repeat
+ HiLink amplStrings String
+ HiLink amplNumerics Number
+ HiLink amplSetFunction Function
+ HiLink amplBuiltInFunction Function
+ HiLink amplRandomGenerator Function
+ HiLink amplComment Comment
+ HiLink amplDotSuffix Special
+ HiLink amplPiecewise Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ampl"
+
+" vim: ts=8
+
+
diff --git a/runtime/syntax/ant.vim b/runtime/syntax/ant.vim
new file mode 100644
index 000000000..6846ec6bd
--- /dev/null
+++ b/runtime/syntax/ant.vim
@@ -0,0 +1,97 @@
+" Vim syntax file
+" Language: ANT build file (xml)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue Apr 27 13:05:59 CEST 2004
+" Filenames: build.xml
+" $Id$
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:ant_cpo_save = &cpo
+set cpo&vim
+
+runtime! syntax/xml.vim
+
+syn case ignore
+
+if !exists('*AntSyntaxScript')
+ fun AntSyntaxScript(tagname, synfilename)
+ unlet b:current_syntax
+ let s:include = expand("<sfile>:p:h").'/'.a:synfilename
+ if filereadable(s:include)
+ exe 'syn include @ant'.a:tagname.' '.s:include
+ else
+ exe 'syn include @ant'.a:tagname." $VIMRUNTIME/syntax/".a:synfilename
+ endif
+
+ exe 'syn region ant'.a:tagname
+ \." start=#<script[^>]\\{-}language\\s*=\\s*['\"]".a:tagname."['\"]\\(>\\|[^>]*[^/>]>\\)#"
+ \.' end=#</script>#'
+ \.' fold'
+ \.' contains=@ant'.a:tagname.',xmlCdataStart,xmlCdataEnd,xmlTag,xmlEndTag'
+ \.' keepend'
+ exe 'syn cluster xmlRegionHook add=ant'.a:tagname
+ endfun
+endif
+
+" TODO: add more script languages here ?
+call AntSyntaxScript('javascript', 'javascript.vim')
+call AntSyntaxScript('jpython', 'python.vim')
+
+
+syn cluster xmlTagHook add=antElement
+
+syn keyword antElement display WsdlToDotnet addfiles and ant antcall antstructure apply archives arg argument
+syn keyword antElement display assertions attrib attribute available basename bcc blgenclient bootclasspath
+syn keyword antElement display borland bottom buildnumber buildpath buildpathelement bunzip2 bzip2 cab
+syn keyword antElement display catalogpath cc cccheckin cccheckout cclock ccmcheckin ccmcheckintask ccmcheckout
+syn keyword antElement display ccmcreatetask ccmkattr ccmkbl ccmkdir ccmkelem ccmklabel ccmklbtype
+syn keyword antElement display ccmreconfigure ccrmtype ccuncheckout ccunlock ccupdate checksum chgrp chmod
+syn keyword antElement display chown classconstants classes classfileset classpath commandline comment
+syn keyword antElement display compilerarg compilerclasspath concat concatfilter condition copy copydir
+syn keyword antElement display copyfile coveragepath csc custom cvs cvschangelog cvspass cvstagdiff cvsversion
+syn keyword antElement display daemons date defaultexcludes define delete deletecharacters deltree depend
+syn keyword antElement display depends dependset depth description different dirname dirset disable dname
+syn keyword antElement display doclet doctitle dtd ear echo echoproperties ejbjar element enable entity entry
+syn keyword antElement display env equals escapeunicode exclude excludepackage excludesfile exec execon
+syn keyword antElement display existing expandproperties extdirs extension extensionSet extensionset factory
+syn keyword antElement display fail filelist filename filepath fileset filesmatch filetokenizer filter
+syn keyword antElement display filterchain filterreader filters filterset filtersfile fixcrlf footer format
+syn keyword antElement display from ftp generic genkey get gjdoc grant group gunzip gzip header headfilter http
+syn keyword antElement display ignoreblank ilasm ildasm import importtypelib include includesfile input iplanet
+syn keyword antElement display iplanet-ejbc isfalse isreference isset istrue jar jarlib-available
+syn keyword antElement display jarlib-manifest jarlib-resolve java javac javacc javadoc javadoc2 jboss jdepend
+syn keyword antElement display jjdoc jjtree jlink jonas jpcoverage jpcovmerge jpcovreport jsharpc jspc
+syn keyword antElement display junitreport jvmarg lib libfileset linetokenizer link loadfile loadproperties
+syn keyword antElement display location macrodef mail majority manifest map mapper marker mergefiles message
+syn keyword antElement display metainf method mimemail mkdir mmetrics modified move mparse none not options or
+syn keyword antElement display os outputproperty package packageset parallel param patch path pathconvert
+syn keyword antElement display pathelement patternset permissions prefixlines present presetdef project
+syn keyword antElement display property propertyfile propertyref propertyset pvcs pvcsproject record reference
+syn keyword antElement display regexp rename renameext replace replacefilter replaceregex replaceregexp
+syn keyword antElement display replacestring replacetoken replacetokens replacevalue replyto report resource
+syn keyword antElement display revoke rmic root rootfileset rpm scp section selector sequential serverdeploy
+syn keyword antElement display setproxy signjar size sleep socket soscheckin soscheckout sosget soslabel source
+syn keyword antElement display sourcepath sql src srcfile srcfilelist srcfiles srcfileset sshexec stcheckin
+syn keyword antElement display stcheckout stlabel stlist stringtokenizer stripjavacomments striplinebreaks
+syn keyword antElement display striplinecomments style subant substitution support symlink sync sysproperty
+syn keyword antElement display syspropertyset tabstospaces tag taglet tailfilter tar tarfileset target
+syn keyword antElement display targetfile targetfilelist targetfileset taskdef tempfile test testlet text title
+syn keyword antElement display to token tokenfilter touch transaction translate triggers trim tstamp type
+syn keyword antElement display typedef unjar untar unwar unzip uptodate url user vbc vssadd vsscheckin
+syn keyword antElement display vsscheckout vsscp vsscreate vssget vsshistory vsslabel waitfor war wasclasspath
+syn keyword antElement display webapp webinf weblogic weblogictoplink websphere whichresource wlclasspath
+syn keyword antElement display wljspc wsdltodotnet xmlcatalog xmlproperty xmlvalidate xslt zip zipfileset
+syn keyword antElement display zipgroupfileset
+
+hi def link antElement Statement
+
+let b:current_syntax = "ant"
+
+let &cpo = s:ant_cpo_save
+unlet s:ant_cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/antlr.vim b/runtime/syntax/antlr.vim
new file mode 100644
index 000000000..19000293f
--- /dev/null
+++ b/runtime/syntax/antlr.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Antlr: ANTLR, Another Tool For Language Recognition <www.antlr.org>
+" Maintainer: Mathieu Clabaut <mathieu.clabaut@free.fr>
+" LastChange: 02 May 2001
+" Original: Comes from JavaCC.vim
+
+" 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
+
+" This syntac file is a first attempt. It is far from perfect...
+
+" Uses java.vim, and adds a few special things for JavaCC Parser files.
+" Those files usually have the extension *.jj
+
+" source the java.vim file
+if version < 600
+ so <sfile>:p:h/java.vim
+else
+ runtime! syntax/java.vim
+ unlet b:current_syntax
+endif
+
+"remove catching errors caused by wrong parenthesis (does not work in antlr
+"files) (first define them in case they have not been defined in java)
+syn match javaParen "--"
+syn match javaParenError "--"
+syn match javaInParen "--"
+syn match javaError2 "--"
+syn clear javaParen
+syn clear javaParenError
+syn clear javaInParen
+syn clear javaError2
+
+" remove function definitions (they look different) (first define in
+" in case it was not defined in java.vim)
+"syn match javaFuncDef "--"
+"syn clear javaFuncDef
+"syn match javaFuncDef "[a-zA-Z][a-zA-Z0-9_. \[\]]*([^-+*/()]*)[ \t]*:" contains=javaType
+" syn region javaFuncDef start=+t[a-zA-Z][a-zA-Z0-9_. \[\]]*([^-+*/()]*,[ ]*+ end=+)[ \t]*:+
+
+syn keyword antlrPackages options language buildAST
+syn match antlrPackages "PARSER_END([^)]*)"
+syn match antlrPackages "PARSER_BEGIN([^)]*)"
+syn match antlrSpecToken "<EOF>"
+" the dot is necessary as otherwise it will be matched as a keyword.
+syn match antlrSpecToken ".LOOKAHEAD("ms=s+1,me=e-1
+syn match antlrSep "[|:]\|\.\."
+syn keyword antlrActionToken TOKEN SKIP MORE SPECIAL_TOKEN
+syn keyword antlrError DEBUG IGNORE_IN_BNF
+
+if version >= 508 || !exists("did_antlr_syntax_inits")
+ if version < 508
+ let did_antlr_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink antlrSep Statement
+ HiLink antlrPackages Statement
+ delcommand HiLink
+endif
+
+let b:current_syntax = "antlr"
+
+" vim: ts=8
diff --git a/runtime/syntax/apache.vim b/runtime/syntax/apache.vim
new file mode 100644
index 000000000..4fe9e8e0b
--- /dev/null
+++ b/runtime/syntax/apache.vim
@@ -0,0 +1,275 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: Apache configuration (httpd.conf, srm.conf, access.conf, .htaccess)
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-10-15
+" URL: http://trific.ath.cx/Ftp/vim/syntax/apache.vim
+" Note: define apache_version to your Apache version, e.g. "1.3", "2", "2.0.39"
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if exists("apache_version")
+ let s:av = apache_version
+else
+ let s:av = "1.3"
+endif
+let s:av = substitute(s:av, "[^.0-9]", "", "g")
+let s:av = substitute(s:av, "^\\d\\+$", "\\0.999", "")
+let s:av = substitute(s:av, "^\\d\\+\\.\\d\\+$", "\\0.999", "")
+let s:av = substitute(s:av, "\\<\\d\\>", "0\\0", "g")
+let s:av = substitute(s:av, "\\<\\d\\d\\>", "0\\0", "g")
+let s:av = substitute(s:av, "[.]", "", "g")
+
+syn case ignore
+
+" Base constructs
+syn match apacheComment "^\s*#.*$" contains=apacheFixme
+if s:av >= "002000000"
+ syn match apacheUserID "#-\?\d\+\>"
+endif
+syn case match
+syn keyword apacheFixme FIXME TODO XXX NOT
+syn case ignore
+syn match apacheAnything "\s[^>]*" contained
+syn match apacheError "\w\+" contained
+syn region apacheString start=+"+ end=+"+ skip=+\\\\\|\\\"+
+
+" Core and mpm
+syn keyword apacheDeclaration AccessFileName AddDefaultCharset AllowOverride AuthName AuthType ContentDigest DefaultType DocumentRoot ErrorDocument ErrorLog HostNameLookups IdentityCheck Include KeepAlive KeepAliveTimeout LimitRequestBody LimitRequestFields LimitRequestFieldsize LimitRequestLine LogLevel MaxKeepAliveRequests NameVirtualHost Options Require RLimitCPU RLimitMEM RLimitNPROC Satisfy ScriptInterpreterSource ServerAdmin ServerAlias ServerName ServerPath ServerRoot ServerSignature ServerTokens TimeOut UseCanonicalName
+if s:av < "002000000"
+ syn keyword apacheDeclaration AccessConfig AddModule BindAddress BS2000Account ClearModuleList CoreDumpDirectory Group Listen ListenBacklog LockFile MaxClients MaxRequestsPerChild MaxSpareServers MinSpareServers PidFile Port ResourceConfig ScoreBoardFile SendBufferSize ServerType StartServers ThreadsPerChild ThreadStackSize User
+endif
+if s:av >= "002000000"
+ syn keyword apacheDeclaration AcceptPathInfo CGIMapExtension EnableMMAP FileETag ForceType LimitXMLRequestBody SetHandler SetInputFilter SetOutputFilter
+ syn keyword apacheOption INode MTime Size
+endif
+syn keyword apacheOption Any All On Off Double EMail DNS Min Minimal OS Prod ProductOnly Full
+syn keyword apacheOption emerg alert crit error warn notice info debug
+syn keyword apacheOption registry script inetd standalone
+syn match apacheOptionOption "[+-]\?\<\(ExecCGI\|FollowSymLinks\|Includes\|IncludesNoExec\|Indexes\|MultiViews\|SymLinksIfOwnerMatch\)\>"
+syn keyword apacheOption user group valid-user
+syn case match
+syn keyword apacheMethodOption GET POST PUT DELETE CONNECT OPTIONS TRACE PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK contained
+syn case ignore
+syn match apacheSection "<\/\=\(Directory\|DirectoryMatch\|Files\|FilesMatch\|IfModule\|IfDefine\|Location\|LocationMatch\|VirtualHost\)\+.*>" contains=apacheAnything
+syn match apacheLimitSection "<\/\=\(Limit\|LimitExcept\)\+.*>" contains=apacheLimitSectionKeyword,apacheMethodOption,apacheError
+syn keyword apacheLimitSectionKeyword Limit LimitExcept contained
+syn match apacheAuthType "AuthType\s.*$" contains=apacheAuthTypeValue
+syn keyword apacheAuthTypeValue Basic Digest
+syn match apacheAllowOverride "AllowOverride\s.*$" contains=apacheAllowOverrideValue,apacheComment
+syn keyword apacheAllowOverrideValue AuthConfig FileInfo Indexes Limit Options contained
+if s:av >= "002000000"
+ syn keyword apacheDeclaration CoreDumpDirectory Group Listen ListenBacklog LockFile MaxClients MaxMemFree MaxRequestsPerChild MaxSpareThreads MaxSpareThreadsPerChild MinSpareThreads NumServers PidFile ScoreBoardFile SendBufferSize ServerLimit StartServers StartThreads ThreadLimit ThreadsPerChild User
+ syn keyword apacheDeclaration MaxThreads ThreadStackSize
+ syn keyword apacheDeclaration AssignUserId ChildPerUserId
+ syn keyword apacheDeclaration AcceptMutex MaxSpareServers MinSpareServers
+ syn keyword apacheOption flock fcntl sysvsem pthread
+endif
+
+" Modules
+syn match apacheAllowDeny "Allow\s\+from.*$" contains=apacheAllowDenyValue,apacheComment
+syn match apacheAllowDeny "Deny\s\+from.*$" contains=apacheAllowDenyValue,apacheComment
+syn keyword apacheAllowDenyValue All None contained
+syn match apacheOrder "^\s*Order\s.*$" contains=apacheOrderValue,apacheComment
+syn keyword apacheOrderValue Deny Allow contained
+syn keyword apacheDeclaration Action Script
+syn keyword apacheDeclaration Alias AliasMatch Redirect RedirectMatch RedirectTemp RedirectPermanent ScriptAlias ScriptAliasMatch
+syn keyword apacheOption permanent temp seeother gone
+syn keyword apacheDeclaration AuthAuthoritative AuthGroupFile AuthUserFile
+syn keyword apacheDeclaration Anonymous Anonymous_Authoritative Anonymous_LogEmail Anonymous_MustGiveEmail Anonymous_NoUserID Anonymous_VerifyEmail
+if s:av < "002000000"
+ syn keyword apacheDeclaration AuthDBGroupFile AuthDBUserFile AuthDBAuthoritative
+endif
+syn keyword apacheDeclaration AuthDBMGroupFile AuthDBMUserFile AuthDBMAuthoritative
+if s:av >= "002000000"
+ syn keyword apacheDeclaration AuthDBMType
+ syn keyword apacheOption default SDBM GDBM NDBM DB
+endif
+syn keyword apacheDeclaration AuthDigestAlgorithm AuthDigestDomain AuthDigestFile AuthDigestGroupFile AuthDigestNcCheck AuthDigestNonceFormat AuthDigestNonceLifetime AuthDigestQop
+syn keyword apacheOption none auth auth-int MD5 MD5-sess
+if s:av >= "002000000"
+ syn keyword apacheDeclaration AuthLDAPAuthoritative AuthLDAPBindON AuthLDAPBindPassword AuthLDAPCompareDNOnServer AuthLDAPDereferenceAliases AuthLDAPEnabled AuthLDAPFrontPageHack AuthLDAPGroupAttribute AuthLDAPGroupAttributeIsDN AuthLDAPRemoteUserIsDN AuthLDAPStartTLS AuthLDAPUrl
+ syn keyword apacheOption always never searching finding
+endif
+if s:av < "002000000"
+ syn keyword apacheDeclaration FancyIndexing
+endif
+syn keyword apacheDeclaration AddAlt AddAltByEncoding AddAltByType AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon HeaderName IndexIgnore IndexOptions IndexOrderDefault ReadmeName
+syn keyword apacheOption DescriptionWidth FancyIndexing FoldersFirst IconHeight IconsAreLinks IconWidth NameWidth ScanHTMLTitles SuppressColumnSorting SuppressDescription SuppressHTMLPreamble SuppressLastModified SuppressSize TrackModified
+syn keyword apacheOption Ascending Descending Name Date Size Description
+if s:av >= "002000000"
+ syn keyword apacheOption HTMLTable SupressIcon SupressRules VersionSort
+endif
+if s:av < "002000000"
+ syn keyword apacheDeclaration BrowserMatch BrowserMatchNoCase
+endif
+if s:av >= "002000000"
+ syn keyword apacheDeclaration CacheDefaultExpire CacheEnable CacheForceCompletion CacheIgnoreCacheControl CacheIgnoreNoLastMod CacheLastModifiedFactor CacheMaxExpire CacheMaxStreamingBuffer
+endif
+syn keyword apacheDeclaration MetaFiles MetaDir MetaSuffix
+syn keyword apacheDeclaration ScriptLog ScriptLogLength ScriptLogBuffer
+if s:av >= "002000000"
+ syn keyword apacheDeclaration ScriptStock
+ syn keyword apacheDeclaration CharsetDefault CharsetOptions CharsetSourceEnc
+ syn keyword apacheOption DebugLevel ImplicitAdd NoImplicitAdd
+endif
+syn keyword apacheDeclaration Dav DavDepthInfinity DavLockDB DavMinTimeout
+if s:av < "002000000"
+ syn keyword apacheDeclaration Define
+end
+if s:av >= "002000000"
+ syn keyword apacheDeclaration DeflateBufferSize DeflateFilterNote DeflateMemLevel DeflateWindowSize
+endif
+if s:av < "002000000"
+ syn keyword apacheDeclaration AuthDigestFile
+endif
+syn keyword apacheDeclaration DirectoryIndex
+if s:av >= "002000000"
+ syn keyword apacheDeclaration ProtocolEcho
+endif
+syn keyword apacheDeclaration PassEnv SetEnv UnsetEnv
+syn keyword apacheDeclaration Example
+syn keyword apacheDeclaration ExpiresActive ExpiresByType ExpiresDefault
+if s:av >= "002000000"
+ syn keyword apacheDeclaration ExtFilterDefine ExtFilterOptions
+ syn keyword apacheOption PreservesContentLength DebugLevel LogStderr NoLogStderr
+ syn keyword apacheDeclaration CacheFile MMapFile
+endif
+syn keyword apacheDeclaration Header
+if s:av >= "002000000"
+ syn keyword apacheDeclaration RequestHeader
+endif
+syn keyword apacheOption set unset append add
+syn keyword apacheDeclaration ImapMenu ImapDefault ImapBase
+syn keyword apacheOption none formatted semiformatted unformatted
+syn keyword apacheOption nocontent referer error map
+syn keyword apacheDeclaration XBitHack
+if s:av >= "002000000"
+ syn keyword apacheDeclaration SSIEndTag SSIErrorMsg SSIStartTag SSITimeFormat SSIUndefinedEcho
+endif
+syn keyword apacheOption on off full
+syn keyword apacheDeclaration AddModuleInfo
+syn keyword apacheDeclaration ISAPIReadAheadBuffer ISAPILogNotSupported ISAPIAppendLogToErrors ISAPIAppendLogToQuery
+if s:av >= "002000000"
+ syn keyword apacheDeclaration ISAPICacheFile ISAIPFakeAsync
+ syn keyword apacheDeclaration LDAPCacheEntries LDAPCacheTTL LDAPCertDBPath LDAPOpCacheEntries LDAPOpCacheTTL LDAPSharedCacheSize
+endif
+if s:av < "002000000"
+ syn keyword apacheDeclaration AgentLog
+endif
+syn keyword apacheDeclaration CookieLog CustomLog LogFormat TransferLog
+if s:av < "002000000"
+ syn keyword apacheDeclaration RefererIgnore RefererLog
+endif
+if s:av >= "002000000"
+endif
+syn keyword apacheDeclaration AddCharset AddEncoding AddHandler AddLanguage AddType DefaultLanguage RemoveEncoding RemoveHandler RemoveType TypesConfig
+if s:av < "002000000"
+ syn keyword apacheDeclaration ForceType SetHandler
+endif
+if s:av >= "002000000"
+ syn keyword apacheDeclaration AddInputFilter AddOutputFilter ModMimeUsePathInfo MultiviewsMatch RemoveInputFilter RemoveOutputFilter
+endif
+syn keyword apacheDeclaration MimeMagicFile
+syn keyword apacheDeclaration MMapFile
+syn keyword apacheDeclaration CacheNegotiatedDocs LanguagePriority
+if s:av >= "002000000"
+ syn keyword apacheDeclaration ForceLanguagePriority
+endif
+syn keyword apacheDeclaration PerlModule PerlRequire PerlTaintCheck PerlWarn
+syn keyword apacheDeclaration PerlSetVar PerlSetEnv PerlPassEnv PerlSetupEnv
+syn keyword apacheDeclaration PerlInitHandler PerlPostReadRequestHandler PerlHeaderParserHandler
+syn keyword apacheDeclaration PerlTransHandler PerlAccessHandler PerlAuthenHandler PerlAuthzHandler
+syn keyword apacheDeclaration PerlTypeHandler PerlFixupHandler PerlHandler PerlLogHandler
+syn keyword apacheDeclaration PerlCleanupHandler PerlChildInitHandler PerlChildExitHandler
+syn keyword apacheDeclaration PerlRestartHandler PerlDispatchHandler
+syn keyword apacheDeclaration PerlFreshRestart PerlSendHeader
+syn keyword apacheDeclaration php_value php_flag php_admin_value php_admin_flag
+syn keyword apacheDeclaration AllowCONNECT NoProxy ProxyBlock ProxyDomain ProxyPass ProxyPassReverse ProxyReceiveBufferSize ProxyRemote ProxyRequests ProxyVia
+if s:av < "002000000"
+ syn keyword apacheDeclaration CacheRoot CacheSize CacheMaxExpire CacheDefaultExpire CacheLastModifiedFactor CacheGcInterval CacheDirLevels CacheDirLength CacheForceCompletion NoCache
+ syn keyword apacheOption block
+endif
+if s:av >= "002000000"
+ syn match apacheSection "<\/\=\(Proxy\|ProxyMatch\)\+.*>" contains=apacheAnything
+ syn keyword apacheDeclaration ProxyErrorOverride ProxyIOBufferSize ProxyMaxForwards ProxyPreserveHost ProxyRemoteMatch ProxyTimeout
+endif
+syn keyword apacheDeclaration RewriteEngine RewriteOptions RewriteLog RewriteLogLevel RewriteLock RewriteMap RewriteBase RewriteCond RewriteRule
+syn keyword apacheOption inherit
+if s:av < "002000000"
+ syn keyword apacheDeclaration RoamingAlias
+endif
+syn keyword apacheDeclaration BrowserMatch BrowserMatchNoCase SetEnvIf SetEnvIfNoCase
+syn keyword apacheDeclaration LoadFile LoadModule
+syn keyword apacheDeclaration CheckSpelling
+syn keyword apacheDeclaration SSLCACertificateFile SSLCACertificatePath SSLCARevocationFile SSLCARevocationPath SSLCertificateChainFile SSLCertificateFile SSLCertificateKeyFile SSLCipherSuite SSLEngine SSLMutex SSLOptions SSLPassPhraseDialog SSLProtocol SSLRandomSeed SSLRequire SSLRequireSSL SSLSessionCache SSLSessionCacheTimeout SSLVerifyClient SSLVerifyDepth
+if s:av < "002000000"
+ syn keyword apacheDeclaration SSLLog SSLLogLevel
+endif
+if s:av >= "002000000"
+ syn keyword apacheDeclaration SSLProxyCACertificateFile SSLProxyCACertificatePath SSLProxyCARevocationFile SSLProxyCARevocationPath SSLProxyCipherSuite SSLProxyEngine SSLProxyMachineCertificateFile SSLProxyMachineCertificatePath SSLProxyProtocol SSLProxyVerify SSLProxyVerifyDepth
+endif
+syn match apacheOption "[+-]\?\<\(StdEnvVars\|CompatEnvVars\|ExportCertData\|FakeBasicAuth\|StrictRequire\|OptRenegotiate\)\>"
+syn keyword apacheOption builtin sem
+syn match apacheOption "\(file\|exec\|egd\|dbm\|shm\):"
+if s:av < "002000000"
+ syn match apacheOption "[+-]\?\<\(SSLv2\|SSLv3\|TLSv1\)\>"
+endif
+if s:av >= "002000000"
+ syn match apacheOption "[+-]\?\<\(SSLv2\|SSLv3\|TLSv1\|kRSA\|kHDr\|kDHd\|kEDH\|aNULL\|aRSA\|aDSS\|aRH\|eNULL\|DES\|3DES\|RC2\|RC4\|IDEA\|MD5\|SHA1\|SHA\|EXP\|EXPORT40\|EXPORT56\|LOW\|MEDIUM\|HIGH\|RSA\|DH\|EDH\|ADH\|DSS\|NULL\)\>"
+endif
+syn keyword apacheOption optional require optional_no_ca
+syn keyword apacheDeclaration ExtendedStatus
+if s:av >= "002000000"
+ syn keyword apacheDeclaration SuexecUserGroup
+endif
+syn keyword apacheDeclaration UserDir
+syn keyword apacheDeclaration CookieExpires CookieName CookieTracking
+if s:av >= "002000000"
+ syn keyword apacheDeclaration CookieDomain CookieStyle
+ syn keyword apacheOption Netscape Cookie Cookie2 RFC2109 RFC2965
+endif
+syn keyword apacheDeclaration VirtualDocumentRoot VirtualDocumentRootIP VirtualScriptAlias VirtualScriptAliasIP
+
+" Define the default highlighting
+if version >= 508 || !exists("did_apache_syntax_inits")
+ if version < 508
+ let did_apache_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink apacheAllowOverride apacheDeclaration
+ HiLink apacheAllowOverrideValue apacheOption
+ HiLink apacheAuthType apacheDeclaration
+ HiLink apacheAuthTypeValue apacheOption
+ HiLink apacheOptionOption apacheOption
+ HiLink apacheDeclaration Function
+ HiLink apacheAnything apacheOption
+ HiLink apacheOption Number
+ HiLink apacheComment Comment
+ HiLink apacheFixme Todo
+ HiLink apacheLimitSectionKeyword apacheLimitSection
+ HiLink apacheLimitSection apacheSection
+ HiLink apacheSection Label
+ HiLink apacheMethodOption Type
+ HiLink apacheAllowDeny Include
+ HiLink apacheAllowDenyValue Identifier
+ HiLink apacheOrder Special
+ HiLink apacheOrderValue String
+ HiLink apacheString String
+ HiLink apacheError Error
+ HiLink apacheUserID Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "apache"
diff --git a/runtime/syntax/apachestyle.vim b/runtime/syntax/apachestyle.vim
new file mode 100644
index 000000000..375fc70a9
--- /dev/null
+++ b/runtime/syntax/apachestyle.vim
@@ -0,0 +1,65 @@
+" Vim syntax file
+" Language: Apache-Style configuration files (proftpd.conf/apache.conf/..)
+" Maintainer: Christian Hammers <ch@westend.com>
+" URL: none
+" ChangeLog:
+" 2001-05-04,ch
+" adopted Vim 6.0 syntax style
+" 1999-10-28,ch
+" initial release
+
+" The following formats are recognised:
+" Apache-style .conf
+" # Comment
+" Option value
+" Option value1 value2
+" Option = value1 value2 #not apache but also allowed
+" <Section Name?>
+" Option value
+" <SubSection Name?>
+" </SubSection>
+" </Section>
+
+" 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
+
+syn match apComment /^\s*#.*$/
+syn match apOption /^\s*[^ \t#<=]*/
+"syn match apLastValue /[^ \t<=#]*$/ contains=apComment ugly
+
+" tags
+syn region apTag start=/</ end=/>/ contains=apTagOption,apTagError
+" the following should originally be " [^<>]+" but this didn't work :(
+syn match apTagOption contained / [-\/_\.:*a-zA-Z0-9]\+/ms=s+1
+syn match apTagError contained /[^>]</ms=s+1
+
+" 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_apachestyle_syn_inits")
+ if version < 508
+ let did_apachestyle_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink apComment Comment
+ HiLink apOption Keyword
+ "HiLink apLastValue Identifier ugly?
+ HiLink apTag Special
+ HiLink apTagOption Identifier
+ HiLink apTagError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "apachestyle"
+" vim: ts=8
diff --git a/runtime/syntax/arch.vim b/runtime/syntax/arch.vim
new file mode 100644
index 000000000..d2593fd7e
--- /dev/null
+++ b/runtime/syntax/arch.vim
@@ -0,0 +1,60 @@
+" Vim syntax file
+" Language: GNU Arch inventory file.
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/arch/
+" Latest Revision: 2004-05-22
+" arch-tag: 529d60c4-53d8-4d3a-80d6-54ada86d9932
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,_,-
+delcommand SetIsk
+
+" Todo
+syn keyword archTodo TODO FIXME XXX NOTE
+
+" Comment
+syn region archComment matchgroup=archComment start='^\%(#\|\s\)' end='$' contains=archTodo
+
+" Keywords
+syn keyword archKeyword implicit tagline explicit names
+syn keyword archKeyword untagged-source
+syn keyword archKeyword exclude junk backup precious unrecognized source skipwhite nextgroup=archRegex
+
+" Regexes
+syn match archRegex contained '\s*\zs.*'
+
+" 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_arch_syn_inits")
+ if version < 508
+ let did_arch_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink archTodo Todo
+ HiLink archComment Comment
+ HiLink archKeyword Keyword
+ HiLink archRegex String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "arch"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/art.vim b/runtime/syntax/art.vim
new file mode 100644
index 000000000..c1faddb1e
--- /dev/null
+++ b/runtime/syntax/art.vim
@@ -0,0 +1,44 @@
+" Vim syntax file
+" 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
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+syn keyword artspform => and assert bind
+syn keyword artspform declare def-art-fun deffacts defglobal defrule defschema do
+syn keyword artspform else for if in$ not or
+syn keyword artspform progn retract salience schema test then while
+
+syn match artvariable "?[^ \t";()|&~]\+"
+
+syn match artglobalvar "?\*[^ \t";()|&~]\+\*"
+
+syn match artinstance "![^ \t";()|&~]\+"
+
+syn match delimiter "[()|&~]"
+
+syn region string start=/"/ skip=/\\[\\"]/ end=/"/
+
+syn match number "\<[-+]\=\([0-9]\+\(\.[0-9]*\)\=\|\.[0-9]\+\)\>"
+
+syn match comment ";.*$"
+
+syn match comment "#+:\=ignore" nextgroup=artignore skipwhite skipnl
+
+syn region artignore start="(" end=")" contained contains=artignore,comment
+
+syn region artignore start=/"/ skip=/\\[\\"]/ end=/"/ contained
+
+hi def link artinstance type
+hi def link artglobalvar preproc
+hi def link artignore comment
+hi def link artspform statement
+hi def link artvariable function
+
+let b:current_syntax = "art"
diff --git a/runtime/syntax/asm.vim b/runtime/syntax/asm.vim
new file mode 100644
index 000000000..09bfe4fac
--- /dev/null
+++ b/runtime/syntax/asm.vim
@@ -0,0 +1,103 @@
+" Vim syntax file
+" Language: GNU Assembler
+" Maintainer: Kevin Dahlhausen <kdahlhaus@yahoo.com>
+" Last Change: 2002 Sep 19
+
+" 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
+
+
+" storage types
+syn match asmType "\.long"
+syn match asmType "\.ascii"
+syn match asmType "\.asciz"
+syn match asmType "\.byte"
+syn match asmType "\.double"
+syn match asmType "\.float"
+syn match asmType "\.hword"
+syn match asmType "\.int"
+syn match asmType "\.octa"
+syn match asmType "\.quad"
+syn match asmType "\.short"
+syn match asmType "\.single"
+syn match asmType "\.space"
+syn match asmType "\.string"
+syn match asmType "\.word"
+
+syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1
+syn match asmIdentifier "[a-z_][a-z0-9_]*"
+
+" 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:
+syn match decNumber "0\+[1-7]\=[\t\n$,; ]"
+syn match decNumber "[1-9]\d*"
+syn match octNumber "0[0-7][0-7]\+"
+syn match hexNumber "0[xX][0-9a-fA-F]\+"
+syn match binNumber "0[bB][0-1]*"
+
+
+syn match asmSpecialComment ";\*\*\*.*"
+syn match asmComment ";.*"hs=s+1
+
+syn match asmInclude "\.include"
+syn match asmCond "\.if"
+syn match asmCond "\.else"
+syn match asmCond "\.endif"
+syn match asmMacro "\.macro"
+syn match asmMacro "\.endm"
+
+syn match asmDirective "\.[a-z][a-z]\+"
+
+
+syn case match
+
+" 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_asm_syntax_inits")
+ if version < 508
+ let did_asm_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 asmSection Special
+ HiLink asmLabel Label
+ HiLink asmComment Comment
+ HiLink asmDirective Statement
+
+ HiLink asmInclude Include
+ HiLink asmCond PreCondit
+ HiLink asmMacro Macro
+
+ HiLink hexNumber Number
+ HiLink decNumber Number
+ HiLink octNumber Number
+ HiLink binNumber Number
+
+ HiLink asmSpecialComment Comment
+ HiLink asmIdentifier Identifier
+ HiLink asmType Type
+
+ " My default color overrides:
+ " hi asmSpecialComment ctermfg=red
+ " hi asmIdentifier ctermfg=lightcyan
+ " hi asmType ctermbg=black ctermfg=brown
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "asm"
+
+" vim: ts=8
diff --git a/runtime/syntax/asm68k.vim b/runtime/syntax/asm68k.vim
new file mode 100644
index 000000000..8463e487e
--- /dev/null
+++ b/runtime/syntax/asm68k.vim
@@ -0,0 +1,391 @@
+" Vim syntax file
+" Language: Motorola 68000 Assembler
+" Maintainer: Steve Wall
+" Last change: 2001 May 01
+"
+" This is incomplete. In particular, support for 68020 and
+" up and 68851/68881 co-processors is partial or non-existant.
+" Feel free to contribute...
+"
+
+" 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
+
+" Partial list of register symbols
+syn keyword asm68kReg a0 a1 a2 a3 a4 a5 a6 a7 d0 d1 d2 d3 d4 d5 d6 d7
+syn keyword asm68kReg pc sr ccr sp usp ssp
+
+" MC68010
+syn keyword asm68kReg vbr sfc sfcr dfc dfcr
+
+" MC68020
+syn keyword asm68kReg msp isp zpc cacr caar
+syn keyword asm68kReg za0 za1 za2 za3 za4 za5 za6 za7
+syn keyword asm68kReg zd0 zd1 zd2 zd3 zd4 zd5 zd6 zd7
+
+" MC68030
+syn keyword asm68kReg crp srp tc ac0 ac1 acusr tt0 tt1 mmusr
+
+" MC68040
+syn keyword asm68kReg dtt0 dtt1 itt0 itt1 urp
+
+" MC68851 registers
+syn keyword asm68kReg cal val scc crp srp drp tc ac psr pcsr
+syn keyword asm68kReg bac0 bac1 bac2 bac3 bac4 bac5 bac6 bac7
+syn keyword asm68kReg bad0 bad1 bad2 bad3 bad4 bad5 bad6 bad7
+
+" MC68881/82 registers
+syn keyword asm68kReg fp0 fp1 fp2 fp3 fp4 fp5 fp6 fp7
+syn keyword asm68kReg control status iaddr fpcr fpsr fpiar
+
+" M68000 opcodes - order is important!
+syn match asm68kOpcode "\<abcd\(\.b\)\=\s"
+syn match asm68kOpcode "\<adda\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<addi\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<addq\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<addx\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<add\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<andi\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<and\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<as[lr]\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<b[vc][cs]\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<beq\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bg[et]\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<b[hm]i\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bl[est]\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bne\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bpl\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bchg\(\.[bl]\)\=\s"
+syn match asm68kOpcode "\<bclr\(\.[bl]\)\=\s"
+syn match asm68kOpcode "\<bfchg\s"
+syn match asm68kOpcode "\<bfclr\s"
+syn match asm68kOpcode "\<bfexts\s"
+syn match asm68kOpcode "\<bfextu\s"
+syn match asm68kOpcode "\<bfffo\s"
+syn match asm68kOpcode "\<bfins\s"
+syn match asm68kOpcode "\<bfset\s"
+syn match asm68kOpcode "\<bftst\s"
+syn match asm68kOpcode "\<bkpt\s"
+syn match asm68kOpcode "\<bra\(\.[bwls]\)\=\s"
+syn match asm68kOpcode "\<bset\(\.[bl]\)\=\s"
+syn match asm68kOpcode "\<bsr\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<btst\(\.[bl]\)\=\s"
+syn match asm68kOpcode "\<callm\s"
+syn match asm68kOpcode "\<cas2\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<cas\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<chk2\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<chk\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<clr\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<cmpa\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<cmpi\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<cmpm\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<cmp2\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<cmp\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<db[cv][cs]\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbeq\(\.w\)\=\s"
+syn match asm68kOpcode "\<db[ft]\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbg[et]\(\.w\)\=\s"
+syn match asm68kOpcode "\<db[hm]i\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbl[est]\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbne\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbpl\(\.w\)\=\s"
+syn match asm68kOpcode "\<dbra\(\.w\)\=\s"
+syn match asm68kOpcode "\<div[su]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<div[su]l\(\.l\)\=\s"
+syn match asm68kOpcode "\<eori\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<eor\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<exg\(\.l\)\=\s"
+syn match asm68kOpcode "\<extb\(\.l\)\=\s"
+syn match asm68kOpcode "\<ext\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<illegal\>"
+syn match asm68kOpcode "\<jmp\(\.[ls]\)\=\s"
+syn match asm68kOpcode "\<jsr\(\.[ls]\)\=\s"
+syn match asm68kOpcode "\<lea\(\.l\)\=\s"
+syn match asm68kOpcode "\<link\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<ls[lr]\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<movea\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<movec\(\.l\)\=\s"
+syn match asm68kOpcode "\<movem\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<movep\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<moveq\(\.l\)\=\s"
+syn match asm68kOpcode "\<moves\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<move\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<mul[su]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<nbcd\(\.b\)\=\s"
+syn match asm68kOpcode "\<negx\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<neg\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<nop\>"
+syn match asm68kOpcode "\<not\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<ori\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<or\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<pack\s"
+syn match asm68kOpcode "\<pea\(\.l\)\=\s"
+syn match asm68kOpcode "\<reset\>"
+syn match asm68kOpcode "\<ro[lr]\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<rox[lr]\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<rt[dm]\s"
+syn match asm68kOpcode "\<rt[ers]\>"
+syn match asm68kOpcode "\<sbcd\(\.b\)\=\s"
+syn match asm68kOpcode "\<s[cv][cs]\(\.b\)\=\s"
+syn match asm68kOpcode "\<seq\(\.b\)\=\s"
+syn match asm68kOpcode "\<s[ft]\(\.b\)\=\s"
+syn match asm68kOpcode "\<sg[et]\(\.b\)\=\s"
+syn match asm68kOpcode "\<s[hm]i\(\.b\)\=\s"
+syn match asm68kOpcode "\<sl[est]\(\.b\)\=\s"
+syn match asm68kOpcode "\<sne\(\.b\)\=\s"
+syn match asm68kOpcode "\<spl\(\.b\)\=\s"
+syn match asm68kOpcode "\<suba\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<subi\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<subq\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<subx\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<sub\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<swap\(\.w\)\=\s"
+syn match asm68kOpcode "\<tas\(\.b\)\=\s"
+syn match asm68kOpcode "\<tdiv[su]\(\.l\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=eq\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=[ft]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=g[et]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=[hm]i\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=l[est]\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=ne\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=pl\(\.[wl]\)\=\s"
+syn match asm68kOpcode "\<t\(rap\)\=v\>"
+syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\>"
+syn match asm68kOpcode "\<t\(rap\)\=eq\>"
+syn match asm68kOpcode "\<t\(rap\)\=[ft]\>"
+syn match asm68kOpcode "\<t\(rap\)\=g[et]\>"
+syn match asm68kOpcode "\<t\(rap\)\=[hm]i\>"
+syn match asm68kOpcode "\<t\(rap\)\=l[est]\>"
+syn match asm68kOpcode "\<t\(rap\)\=ne\>"
+syn match asm68kOpcode "\<t\(rap\)\=pl\>"
+syn match asm68kOpcode "\<trap\s"
+syn match asm68kOpcode "\<tst\(\.[bwl]\)\=\s"
+syn match asm68kOpcode "\<unlk\s"
+syn match asm68kOpcode "\<unpk\s"
+
+" Valid labels
+syn match asm68kLabel "^[a-z_?.][a-z0-9_?.$]*$"
+syn match asm68kLabel "^[a-z_?.][a-z0-9_?.$]*\s"he=e-1
+syn match asm68kLabel "^\s*[a-z_?.][a-z0-9_?.$]*:"he=e-1
+
+" Various number formats
+syn match hexNumber "\$[0-9a-fA-F]\+\>"
+syn match hexNumber "\<[0-9][0-9a-fA-F]*H\>"
+syn match octNumber "@[0-7]\+\>"
+syn match octNumber "\<[0-7]\+[QO]\>"
+syn match binNumber "%[01]\+\>"
+syn match binNumber "\<[01]\+B\>"
+syn match decNumber "\<[0-9]\+D\=\>"
+syn match floatE "_*E_*" contained
+syn match floatExponent "_*E_*[-+]\=[0-9]\+" contained contains=floatE
+syn match floatNumber "[-+]\=[0-9]\+_*E_*[-+]\=[0-9]\+" contains=floatExponent
+syn match floatNumber "[-+]\=[0-9]\+\.[0-9]\+\(E[-+]\=[0-9]\+\)\=" contains=floatExponent
+syn match floatNumber ":\([0-9a-f]\+_*\)\+"
+
+" Character string constants
+syn match asm68kStringError "'[ -~]*'"
+syn match asm68kStringError "'[ -~]*$"
+syn region asm68kString start="'" skip="''" end="'" oneline contains=asm68kCharError
+syn match asm68kCharError "[^ -~]" contained
+
+" Immediate data
+syn match asm68kImmediate "#\$[0-9a-fA-F]\+" contains=hexNumber
+syn match asm68kImmediate "#[0-9][0-9a-fA-F]*H" contains=hexNumber
+syn match asm68kImmediate "#@[0-7]\+" contains=octNumber
+syn match asm68kImmediate "#[0-7]\+[QO]" contains=octNumber
+syn match asm68kImmediate "#%[01]\+" contains=binNumber
+syn match asm68kImmediate "#[01]\+B" contains=binNumber
+syn match asm68kImmediate "#[0-9]\+D\=" contains=decNumber
+syn match asm68kSymbol "[a-z_?.][a-z0-9_?.$]*" contained
+syn match asm68kImmediate "#[a-z_?.][a-z0-9_?.]*" contains=asm68kSymbol
+
+" Special items for comments
+syn keyword asm68kTodo contained TODO
+
+" Operators
+syn match asm68kOperator "[-+*/]" " Must occur before Comments
+syn match asm68kOperator "\.SIZEOF\."
+syn match asm68kOperator "\.STARTOF\."
+syn match asm68kOperator "<<" " shift left
+syn match asm68kOperator ">>" " shift right
+syn match asm68kOperator "&" " bit-wise logical and
+syn match asm68kOperator "!" " bit-wise logical or
+syn match asm68kOperator "!!" " exclusive or
+syn match asm68kOperator "<>" " inequality
+syn match asm68kOperator "=" " must be before other ops containing '='
+syn match asm68kOperator ">="
+syn match asm68kOperator "<="
+syn match asm68kOperator "==" " operand existance - used in macro definitions
+
+" Condition code style operators
+syn match asm68kOperator "<[CV][CS]>"
+syn match asm68kOperator "<EQ>"
+syn match asm68kOperator "<G[TE]>"
+syn match asm68kOperator "<[HM]I>"
+syn match asm68kOperator "<L[SET]>"
+syn match asm68kOperator "<NE>"
+syn match asm68kOperator "<PL>"
+
+" Comments
+syn match asm68kComment ";.*" contains=asm68kTodo
+syn match asm68kComment "\s!.*"ms=s+1 contains=asm68kTodo
+syn match asm68kComment "^\s*[*!].*" contains=asm68kTodo
+
+" Include
+syn match asm68kInclude "\<INCLUDE\s"
+
+" Standard macros
+syn match asm68kCond "\<IF\(\.[BWL]\)\=\s"
+syn match asm68kCond "\<THEN\(\.[SL]\)\=\>"
+syn match asm68kCond "\<ELSE\(\.[SL]\)\=\>"
+syn match asm68kCond "\<ENDI\>"
+syn match asm68kCond "\<BREAK\(\.[SL]\)\=\>"
+syn match asm68kRepeat "\<FOR\(\.[BWL]\)\=\s"
+syn match asm68kRepeat "\<DOWNTO\s"
+syn match asm68kRepeat "\<TO\s"
+syn match asm68kRepeat "\<BY\s"
+syn match asm68kRepeat "\<DO\(\.[SL]\)\=\>"
+syn match asm68kRepeat "\<ENDF\>"
+syn match asm68kRepeat "\<NEXT\(\.[SL]\)\=\>"
+syn match asm68kRepeat "\<REPEAT\>"
+syn match asm68kRepeat "\<UNTIL\(\.[BWL]\)\=\s"
+syn match asm68kRepeat "\<WHILE\(\.[BWL]\)\=\s"
+syn match asm68kRepeat "\<ENDW\>"
+
+" Macro definition
+syn match asm68kMacro "\<MACRO\>"
+syn match asm68kMacro "\<LOCAL\s"
+syn match asm68kMacro "\<MEXIT\>"
+syn match asm68kMacro "\<ENDM\>"
+syn match asm68kMacroParam "\\[0-9]"
+
+" Conditional assembly
+syn match asm68kPreCond "\<IFC\s"
+syn match asm68kPreCond "\<IFDEF\s"
+syn match asm68kPreCond "\<IFEQ\s"
+syn match asm68kPreCond "\<IFGE\s"
+syn match asm68kPreCond "\<IFGT\s"
+syn match asm68kPreCond "\<IFLE\s"
+syn match asm68kPreCond "\<IFLT\s"
+syn match asm68kPreCond "\<IFNC\>"
+syn match asm68kPreCond "\<IFNDEF\s"
+syn match asm68kPreCond "\<IFNE\s"
+syn match asm68kPreCond "\<ELSEC\>"
+syn match asm68kPreCond "\<ENDC\>"
+
+" Loop control
+syn match asm68kPreCond "\<REPT\s"
+syn match asm68kPreCond "\<IRP\s"
+syn match asm68kPreCond "\<IRPC\s"
+syn match asm68kPreCond "\<ENDR\>"
+
+" Directives
+syn match asm68kDirective "\<ALIGN\s"
+syn match asm68kDirective "\<CHIP\s"
+syn match asm68kDirective "\<COMLINE\s"
+syn match asm68kDirective "\<COMMON\(\.S\)\=\s"
+syn match asm68kDirective "\<DC\(\.[BWLSDXP]\)\=\s"
+syn match asm68kDirective "\<DC\.\\[0-9]\s"me=e-3 " Special use in a macro def
+syn match asm68kDirective "\<DCB\(\.[BWLSDXP]\)\=\s"
+syn match asm68kDirective "\<DS\(\.[BWLSDXP]\)\=\s"
+syn match asm68kDirective "\<END\>"
+syn match asm68kDirective "\<EQU\s"
+syn match asm68kDirective "\<FEQU\(\.[SDXP]\)\=\s"
+syn match asm68kDirective "\<FAIL\>"
+syn match asm68kDirective "\<FOPT\s"
+syn match asm68kDirective "\<\(NO\)\=FORMAT\>"
+syn match asm68kDirective "\<IDNT\>"
+syn match asm68kDirective "\<\(NO\)\=LIST\>"
+syn match asm68kDirective "\<LLEN\s"
+syn match asm68kDirective "\<MASK2\>"
+syn match asm68kDirective "\<NAME\s"
+syn match asm68kDirective "\<NOOBJ\>"
+syn match asm68kDirective "\<OFFSET\s"
+syn match asm68kDirective "\<OPT\>"
+syn match asm68kDirective "\<ORG\(\.[SL]\)\=\>"
+syn match asm68kDirective "\<\(NO\)\=PAGE\>"
+syn match asm68kDirective "\<PLEN\s"
+syn match asm68kDirective "\<REG\s"
+syn match asm68kDirective "\<RESTORE\>"
+syn match asm68kDirective "\<SAVE\>"
+syn match asm68kDirective "\<SECT\(\.S\)\=\s"
+syn match asm68kDirective "\<SECTION\(\.S\)\=\s"
+syn match asm68kDirective "\<SET\s"
+syn match asm68kDirective "\<SPC\s"
+syn match asm68kDirective "\<TTL\s"
+syn match asm68kDirective "\<XCOM\s"
+syn match asm68kDirective "\<XDEF\s"
+syn match asm68kDirective "\<XREF\(\.S\)\=\s"
+
+syn case match
+
+" 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_asm68k_syntax_inits")
+ if version < 508
+ let did_asm68k_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
+ " Comment Constant Error Identifier PreProc Special Statement Todo Type
+ "
+ " Constant Boolean Character Number String
+ " Identifier Function
+ " PreProc Define Include Macro PreCondit
+ " Special Debug Delimiter SpecialChar SpecialComment Tag
+ " Statement Conditional Exception Keyword Label Operator Repeat
+ " Type StorageClass Structure Typedef
+
+ HiLink asm68kComment Comment
+ HiLink asm68kTodo Todo
+
+ HiLink hexNumber Number " Constant
+ HiLink octNumber Number " Constant
+ HiLink binNumber Number " Constant
+ HiLink decNumber Number " Constant
+ HiLink floatNumber Number " Constant
+ HiLink floatExponent Number " Constant
+ HiLink floatE SpecialChar " Statement
+ "HiLink floatE Number " Constant
+
+ HiLink asm68kImmediate SpecialChar " Statement
+ "HiLink asm68kSymbol Constant
+
+ HiLink asm68kString String " Constant
+ HiLink asm68kCharError Error
+ HiLink asm68kStringError Error
+
+ HiLink asm68kReg Identifier
+ HiLink asm68kOperator Identifier
+
+ HiLink asm68kInclude Include " PreProc
+ HiLink asm68kMacro Macro " PreProc
+ HiLink asm68kMacroParam Keyword " Statement
+
+ HiLink asm68kDirective Special
+ HiLink asm68kPreCond Special
+
+
+ HiLink asm68kOpcode Statement
+ HiLink asm68kCond Conditional " Statement
+ HiLink asm68kRepeat Repeat " Statement
+
+ HiLink asm68kLabel Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "asm68k"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/asmh8300.vim b/runtime/syntax/asmh8300.vim
new file mode 100644
index 000000000..48699d89c
--- /dev/null
+++ b/runtime/syntax/asmh8300.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Hitachi H-8300h specific syntax for GNU Assembler
+" Maintainer: Kevin Dahlhausen <kdahlhaus@yahoo.com>
+" Last Change: 2002 Sep 19
+
+" 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
+
+syn match asmDirective "\.h8300[h]*"
+
+"h8300[h] registers
+syn match asmReg "e\=r[0-7][lh]\="
+
+"h8300[h] opcodes - order is important!
+syn match asmOpcode "add\.[lbw]"
+syn match asmOpcode "add[sx :]"
+syn match asmOpcode "and\.[lbw]"
+syn match asmOpcode "bl[deots]"
+syn match asmOpcode "cmp\.[lbw]"
+syn match asmOpcode "dec\.[lbw]"
+syn match asmOpcode "divx[us].[bw]"
+syn match asmOpcode "ext[su]\.[lw]"
+syn match asmOpcode "inc\.[lw]"
+syn match asmOpcode "mov\.[lbw]"
+syn match asmOpcode "mulx[su]\.[bw]"
+syn match asmOpcode "neg\.[lbw]"
+syn match asmOpcode "not\.[lbw]"
+syn match asmOpcode "or\.[lbw]"
+syn match asmOpcode "pop\.[wl]"
+syn match asmOpcode "push\.[wl]"
+syn match asmOpcode "rotx\=[lr]\.[lbw]"
+syn match asmOpcode "sha[lr]\.[lbw]"
+syn match asmOpcode "shl[lr]\.[lbw]"
+syn match asmOpcode "sub\.[lbw]"
+syn match asmOpcode "xor\.[lbw]"
+syn keyword asmOpcode "andc" "band" "bcc" "bclr" "bcs" "beq" "bf" "bge" "bgt"
+syn keyword asmOpcode "bhi" "bhs" "biand" "bild" "bior" "bist" "bixor" "bmi"
+syn keyword asmOpcode "bne" "bnot" "bnp" "bor" "bpl" "bpt" "bra" "brn" "bset"
+syn keyword asmOpcode "bsr" "btst" "bst" "bt" "bvc" "bvs" "bxor" "cmp" "daa"
+syn keyword asmOpcode "das" "eepmov" "eepmovw" "inc" "jmp" "jsr" "ldc" "movfpe"
+syn keyword asmOpcode "movtpe" "mov" "nop" "orc" "rte" "rts" "sleep" "stc"
+syn keyword asmOpcode "sub" "trapa" "xorc"
+
+syn case match
+
+
+" Read the general asm syntax
+if version < 600
+ source <sfile>:p:h/asm.vim
+else
+ runtime! syntax/asm.vim
+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_hitachi_syntax_inits")
+ if version < 508
+ let did_hitachi_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink asmOpcode Statement
+ HiLink asmRegister Identifier
+
+ " My default-color overrides:
+ "hi asmOpcode ctermfg=yellow
+ "hi asmReg ctermfg=lightmagenta
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "asmh8300"
+
+" vim: ts=8
diff --git a/runtime/syntax/asn.vim b/runtime/syntax/asn.vim
new file mode 100644
index 000000000..9fc3d2468
--- /dev/null
+++ b/runtime/syntax/asn.vim
@@ -0,0 +1,81 @@
+" Vim syntax file
+" Language: ASN.1
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/asn.vim
+" Last Change: 2001 Apr 26
+
+" 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
+
+" keyword definitions
+syn keyword asnExternal DEFINITIONS BEGIN END IMPORTS EXPORTS FROM
+syn match asnExternal "\<IMPLICIT\s\+TAGS\>"
+syn match asnExternal "\<EXPLICIT\s\+TAGS\>"
+syn keyword asnFieldOption DEFAULT OPTIONAL
+syn keyword asnTagModifier IMPLICIT EXPLICIT
+syn keyword asnTypeInfo ABSENT PRESENT SIZE UNIVERSAL APPLICATION PRIVATE
+syn keyword asnBoolValue TRUE FALSE
+syn keyword asnNumber MIN MAX
+syn match asnNumber "\<PLUS-INFINITY\>"
+syn match asnNumber "\<MINUS-INFINITY\>"
+syn keyword asnType INTEGER REAL STRING BIT BOOLEAN OCTET NULL EMBEDDED PDV
+syn keyword asnType BMPString IA5String TeletexString GeneralString GraphicString ISO646String NumericString PrintableString T61String UniversalString VideotexString VisibleString
+syn keyword asnType ANY DEFINED
+syn match asnType "\.\.\."
+syn match asnType "OBJECT\s\+IDENTIFIER"
+syn match asnType "TYPE-IDENTIFIER"
+syn keyword asnType UTF8String
+syn keyword asnStructure CHOICE SEQUENCE SET OF ENUMERATED CONSTRAINED BY WITH COMPONENTS CLASS
+
+" Strings and constants
+syn match asnSpecial contained "\\\d\d\d\|\\."
+syn region asnString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=asnSpecial
+syn match asnCharacter "'[^\\]'"
+syn match asnSpecialCharacter "'\\.'"
+syn match asnNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
+syn match asnLineComment "--.*"
+syn match asnLineComment "--.*--"
+
+syn match asnDefinition "^\s*[a-zA-Z][-a-zA-Z0-9_.\[\] \t{}]* *::="me=e-3 contains=asnType
+syn match asnBraces "[{}]"
+
+syn sync ccomment asnComment
+
+" 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_asn_syn_inits")
+ if version < 508
+ let did_asn_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink asnDefinition Function
+ HiLink asnBraces Function
+ HiLink asnStructure Statement
+ HiLink asnBoolValue Boolean
+ HiLink asnSpecial Special
+ HiLink asnString String
+ HiLink asnCharacter Character
+ HiLink asnSpecialCharacter asnSpecial
+ HiLink asnNumber asnValue
+ HiLink asnComment Comment
+ HiLink asnLineComment asnComment
+ HiLink asnType Type
+ HiLink asnTypeInfo PreProc
+ HiLink asnValue Number
+ HiLink asnExternal Include
+ HiLink asnTagModifier Function
+ HiLink asnFieldOption Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "asn"
+
+" vim: ts=8
diff --git a/runtime/syntax/aspperl.vim b/runtime/syntax/aspperl.vim
new file mode 100644
index 000000000..0f7ef4687
--- /dev/null
+++ b/runtime/syntax/aspperl.vim
@@ -0,0 +1,33 @@
+" Vim syntax file
+" Language: Active State's PerlScript (ASP)
+" Maintainer: Aaron Hope <edh@brioforge.com>
+" URL: http://nim.dhs.org/~edh/aspperl.vim
+" Last Change: 2001 May 09
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'perlscript'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+ syn include @AspPerlScript <sfile>:p:h/perl.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+ syn include @AspPerlScript syntax/perl.vim
+endif
+
+syn cluster htmlPreproc add=AspPerlScriptInsideHtmlTags
+
+syn region AspPerlScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<%=\=+ skip=+".*%>.*"+ end=+%>+ contains=@AspPerlScript
+syn region AspPerlScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<script\s\+language="\=perlscript"\=[^>]*>+ end=+</script>+ contains=@AspPerlScript
+
+let b:current_syntax = "aspperl"
diff --git a/runtime/syntax/aspvbs.vim b/runtime/syntax/aspvbs.vim
new file mode 100644
index 000000000..502791c75
--- /dev/null
+++ b/runtime/syntax/aspvbs.vim
@@ -0,0 +1,196 @@
+" Vim syntax file
+" Language: Microsoft VBScript Web Content (ASP)
+" Maintainer: Devin Weaver <ktohg@tritarget.com>
+" URL: http://tritarget.com/pub/vim/syntax/aspvbs.vim
+" Last Change: 2003 Apr 25
+" Version: $Revision$
+" Thanks to Jay-Jay <vim@jay-jay.net> for a syntax sync hack, hungarian
+" notation, and extra highlighting.
+" Thanks to patrick dehne <patrick@steidle.net> for the folding code.
+" Thanks to Dean Hall <hall@apt7.com> for testing the use of classes in
+" VBScripts which I've been too scared to do.
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'aspvbs'
+endif
+
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+unlet b:current_syntax
+
+syn cluster htmlPreProc add=AspVBScriptInsideHtmlTags
+
+
+" Colored variable names, if written in hungarian notation
+hi def AspVBSVariableSimple term=standout ctermfg=3 guifg=#99ee99
+hi def AspVBSVariableComplex term=standout ctermfg=3 guifg=#ee9900
+syn match AspVBSVariableSimple contained "\<\(bln\|byt\|dtm\=\|dbl\|int\|str\)\u\w*"
+syn match AspVBSVariableComplex contained "\<\(arr\|obj\)\u\w*"
+
+
+" Functions and methods that are in VB but will cause errors in an ASP page
+" This is helpfull if your porting VB code to ASP
+" I removed (Count, Item) because these are common variable names in AspVBScript
+syn keyword AspVBSError contained Val Str CVar CVDate DoEvents GoSub Return GoTo
+syn keyword AspVBSError contained Stop LinkExecute Add Type LinkPoke
+syn keyword AspVBSError contained LinkRequest LinkSend Declare Optional Sleep
+syn keyword AspVBSError contained ParamArray Static Erl TypeOf Like LSet RSet Mid StrConv
+" It may seem that most of these can fit into a keyword clause but keyword takes
+" priority over all so I can't get the multi-word matches
+syn match AspVBSError contained "\<Def[a-zA-Z0-9_]\+\>"
+syn match AspVBSError contained "^\s*Open\s\+"
+syn match AspVBSError contained "Debug\.[a-zA-Z0-9_]*"
+syn match AspVBSError contained "^\s*[a-zA-Z0-9_]\+:"
+syn match AspVBSError contained "[a-zA-Z0-9_]\+![a-zA-Z0-9_]\+"
+syn match AspVBSError contained "^\s*#.*$"
+syn match AspVBSError contained "\<As\s\+[a-zA-Z0-9_]*"
+syn match AspVBSError contained "\<End\>\|\<Exit\>"
+syn match AspVBSError contained "\<On\s\+Error\>\|\<On\>\|\<Error\>\|\<Resume\s\+Next\>\|\<Resume\>"
+syn match AspVBSError contained "\<Option\s\+\(Base\|Compare\|Private\s\+Module\)\>"
+" This one I want 'cause I always seem to mis-spell it.
+syn match AspVBSError contained "Respon\?ce\.\S*"
+syn match AspVBSError contained "Respose\.\S*"
+" When I looked up the VBScript syntax it mentioned that Property Get/Set/Let
+" statements are illegal, however, I have recived reports that they do work.
+" So I commented it out for now.
+" syn match AspVBSError contained "\<Property\s\+\(Get\|Let\|Set\)\>"
+
+" AspVBScript Reserved Words.
+syn match AspVBSStatement contained "\<On\s\+Error\s\+\(Resume\s\+Next\|goto\s\+0\)\>\|\<Next\>"
+syn match AspVBSStatement contained "\<End\s\+\(If\|For\|Select\|Class\|Function\|Sub\|With\)\>"
+syn match AspVBSStatement contained "\<Exit\s\+\(Do\|For\|Sub\|Function\)\>"
+syn match AspVBSStatement contained "\<Option\s\+Explicit\>"
+syn match AspVBSStatement contained "\<For\s\+Each\>\|\<For\>"
+syn match AspVBSStatement contained "\<Set\>"
+syn keyword AspVBSStatement contained Call Class Const Default Dim Do Loop Erase And
+syn keyword AspVBSStatement contained Function If Then Else ElseIf Or
+syn keyword AspVBSStatement contained Private Public Randomize ReDim
+syn keyword AspVBSStatement contained Select Case Sub While With Wend Not
+
+" AspVBScript Functions
+syn keyword AspVBSFunction contained Abs Array Asc Atn CBool CByte CCur CDate CDbl
+syn keyword AspVBSFunction contained Chr CInt CLng Cos CreateObject CSng CStr Date
+syn keyword AspVBSFunction contained DateAdd DateDiff DatePart DateSerial DateValue
+syn keyword AspVBSFunction contained Date Day Exp Filter Fix FormatCurrency
+syn keyword AspVBSFunction contained FormatDateTime FormatNumber FormatPercent
+syn keyword AspVBSFunction contained GetObject Hex Hour InputBox InStr InStrRev Int
+syn keyword AspVBSFunction contained IsArray IsDate IsEmpty IsNull IsNumeric
+syn keyword AspVBSFunction contained IsObject Join LBound LCase Left Len LoadPicture
+syn keyword AspVBSFunction contained Log LTrim Mid Minute Month MonthName MsgBox Now
+syn keyword AspVBSFunction contained Oct Replace RGB Right Rnd Round RTrim
+syn keyword AspVBSFunction contained ScriptEngine ScriptEngineBuildVersion
+syn keyword AspVBSFunction contained ScriptEngineMajorVersion
+syn keyword AspVBSFunction contained ScriptEngineMinorVersion Second Sgn Sin Space
+syn keyword AspVBSFunction contained Split Sqr StrComp StrReverse String Tan Time Timer
+syn keyword AspVBSFunction contained TimeSerial TimeValue Trim TypeName UBound UCase
+syn keyword AspVBSFunction contained VarType Weekday WeekdayName Year
+
+" AspVBScript Methods
+syn keyword AspVBSMethods contained Add AddFolders BuildPath Clear Close Copy
+syn keyword AspVBSMethods contained CopyFile CopyFolder CreateFolder CreateTextFile
+syn keyword AspVBSMethods contained Delete DeleteFile DeleteFolder DriveExists
+syn keyword AspVBSMethods contained Exists FileExists FolderExists
+syn keyword AspVBSMethods contained GetAbsolutePathName GetBaseName GetDrive
+syn keyword AspVBSMethods contained GetDriveName GetExtensionName GetFile
+syn keyword AspVBSMethods contained GetFileName GetFolder GetParentFolderName
+syn keyword AspVBSMethods contained GetSpecialFolder GetTempName Items Keys Move
+syn keyword AspVBSMethods contained MoveFile MoveFolder OpenAsTextStream
+syn keyword AspVBSMethods contained OpenTextFile Raise Read ReadAll ReadLine Remove
+syn keyword AspVBSMethods contained RemoveAll Skip SkipLine Write WriteBlankLines
+syn keyword AspVBSMethods contained WriteLine
+syn match AspVBSMethods contained "Response\.\S*"
+" Colorize boolean constants:
+syn keyword AspVBSMethods contained true false
+
+" AspVBScript Number Contstants
+" Integer number, or floating point number without a dot.
+syn match AspVBSNumber contained "\<\d\+\>"
+" Floating point number, with dot
+syn match AspVBSNumber contained "\<\d\+\.\d*\>"
+" Floating point number, starting with a dot
+syn match AspVBSNumber contained "\.\d\+\>"
+
+" String and Character Contstants
+" removed (skip=+\\\\\|\\"+) because VB doesn't have backslash escaping in
+" strings (or does it?)
+syn region AspVBSString contained start=+"+ end=+"+ keepend
+
+" AspVBScript Comments
+syn region AspVBSComment contained start="^REM\s\|\sREM\s" end="$" contains=AspVBSTodo keepend
+syn region AspVBSComment contained start="^'\|\s'" end="$" contains=AspVBSTodo keepend
+" misc. Commenting Stuff
+syn keyword AspVBSTodo contained TODO FIXME
+
+" Cosmetic syntax errors commanly found in VB but not in AspVBScript
+" AspVBScript doesn't use line numbers
+syn region AspVBSError contained start="^\d" end="\s" keepend
+" AspVBScript also doesn't have type defining variables
+syn match AspVBSError contained "[a-zA-Z0-9_][\$&!#]"ms=s+1
+" Since 'a%' is a VB variable with a type and in AspVBScript you can have 'a%>'
+" I have to make a special case so 'a%>' won't show as an error.
+syn match AspVBSError contained "[a-zA-Z0-9_]%\($\|[^>]\)"ms=s+1
+
+" Top Cluster
+syn cluster AspVBScriptTop contains=AspVBSStatement,AspVBSFunction,AspVBSMethods,AspVBSNumber,AspVBSString,AspVBSComment,AspVBSError,AspVBSVariableSimple,AspVBSVariableComplex
+
+" Folding
+syn region AspVBSFold start="^\s*\(class\)\s\+.*$" end="^\s*end\s\+\(class\)\>.*$" fold contained transparent keepend
+syn region AspVBSFold start="^\s*\(private\|public\)\=\(\s\+default\)\=\s\+\(sub\|function\)\s\+.*$" end="^\s*end\s\+\(function\|sub\)\>.*$" fold contained transparent keepend
+
+" Define AspVBScript delimeters
+" <%= func("string_with_%>_in_it") %> This is illegal in ASP syntax.
+syn region AspVBScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<%=\=+ end=+%>+ contains=@AspVBScriptTop, AspVBSFold
+syn region AspVBScriptInsideHtmlTags keepend matchgroup=Delimiter start=+<script\s\+language="\=vbscript"\=[^>]*\s\+runatserver[^>]*>+ end=+</script>+ contains=@AspVBScriptTop
+
+
+" Synchronization
+" syn sync match AspVBSSyncGroup grouphere AspVBScriptInsideHtmlTags "<%"
+" This is a kludge so the HTML will sync properly
+syn sync match htmlHighlight grouphere htmlTag "%>"
+
+
+
+" 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_aspvbs_syn_inits")
+ if version < 508
+ let did_aspvbs_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ "HiLink AspVBScript Special
+ HiLink AspVBSLineNumber Comment
+ HiLink AspVBSNumber Number
+ HiLink AspVBSError Error
+ HiLink AspVBSStatement Statement
+ HiLink AspVBSString String
+ HiLink AspVBSComment Comment
+ HiLink AspVBSTodo Todo
+ HiLink AspVBSFunction Identifier
+ HiLink AspVBSMethods PreProc
+ HiLink AspVBSEvents Special
+ HiLink AspVBSTypeSpecifier Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "aspvbs"
+
+if main_syntax == 'aspvbs'
+ unlet main_syntax
+endif
+
+" vim: ts=8:sw=2:sts=0:noet
diff --git a/runtime/syntax/atlas.vim b/runtime/syntax/atlas.vim
new file mode 100644
index 000000000..b8fe4356b
--- /dev/null
+++ b/runtime/syntax/atlas.vim
@@ -0,0 +1,98 @@
+" Vim syntax file
+" Language: ATLAS
+" Maintainer: Inaki Saez <jisaez@sfe.indra.es>
+" Last Change: 2001 May 09
+
+" 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
+
+syn keyword atlasStatement begin terminate
+syn keyword atlasStatement fill calculate compare
+syn keyword atlasStatement setup connect close open disconnect reset
+syn keyword atlasStatement initiate read fetch
+syn keyword atlasStatement apply measure verify remove
+syn keyword atlasStatement perform leave finish output delay
+syn keyword atlasStatement prepare execute
+syn keyword atlasStatement do
+syn match atlasStatement "\<go[ ]\+to\>"
+syn match atlasStatement "\<wait[ ]\+for\>"
+
+syn keyword atlasInclude include
+syn keyword atlasDefine define require declare identify
+
+"syn keyword atlasReserved true false go nogo hi lo via
+syn keyword atlasReserved true false
+
+syn keyword atlasStorageClass external global
+
+syn keyword atlasConditional if then else end
+syn keyword atlasRepeat while for thru
+
+" Flags BEF and statement number
+syn match atlasSpecial "^[BE ][ 0-9]\{,6}\>"
+
+" Number formats
+syn match atlasHexNumber "\<X'[0-9A-F]\+'"
+syn match atlasOctalNumber "\<O'[0-7]\+'"
+syn match atlasBinNumber "\<B'[01]\+'"
+syn match atlasNumber "\<\d\+\>"
+"Floating point number part only
+syn match atlasDecimalNumber "\.\d\+\([eE][-+]\=\d\)\=\>"
+
+syn region atlasFormatString start=+((+ end=+\())\)\|\()[ ]*\$\)+me=e-1
+syn region atlasString start=+\<C'+ end=+'+ oneline
+
+syn region atlasComment start=+^C+ end=+\$+
+syn region atlasComment2 start=+\$.\++ms=s+1 end=+$+ oneline
+
+syn match atlasIdentifier "'[A-Za-z0-9 ._-]\+'"
+
+"Synchronization with Statement terminator $
+syn sync match atlasTerminator grouphere atlasComment "^C"
+syn sync match atlasTerminator groupthere NONE "\$"
+syn sync maxlines=100
+
+
+" 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_atlas_syntax_inits")
+ if version < 508
+ let did_atlas_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink atlasConditional Conditional
+ HiLink atlasRepeat Repeat
+ HiLink atlasStatement Statement
+ HiLink atlasNumber Number
+ HiLink atlasHexNumber Number
+ HiLink atlasOctalNumber Number
+ HiLink atlasBinNumber Number
+ HiLink atlasDecimalNumber Float
+ HiLink atlasFormatString String
+ HiLink atlasString String
+ HiLink atlasComment Comment
+ HiLink atlasComment2 Comment
+ HiLink atlasInclude Include
+ HiLink atlasDefine Macro
+ HiLink atlasReserved PreCondit
+ HiLink atlasStorageClass StorageClass
+ HiLink atlasIdentifier NONE
+ HiLink atlasSpecial Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "atlas"
+
+" vim: ts=8
diff --git a/runtime/syntax/automake.vim b/runtime/syntax/automake.vim
new file mode 100644
index 000000000..ea09927e2
--- /dev/null
+++ b/runtime/syntax/automake.vim
@@ -0,0 +1,79 @@
+" Vim syntax file
+" Language: automake Makefile.am
+" Maintainer: John Williams <jrw@pobox.com>
+" Last change: 2001 May 09
+
+
+" This script adds support for automake's Makefile.am format. It highlights
+" Makefile variables significant to automake as well as highlighting
+" autoconf-style @variable@ substitutions . Subsitutions are marked as errors
+" when they are used in an inappropriate place, such as in defining
+" EXTRA_SOURCES.
+
+
+" Read the Makefile syntax to start with
+if version < 600
+ source <sfile>:p:h/make.vim
+else
+ 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\)\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 automakeSubst "@[a-zA-Z0-9_]\+@"
+syn match automakeSubst "^\s*@[a-zA-Z0-9_]\+@"
+syn match automakeComment1 "#.*$" contains=automakeSubst
+syn match automakeComment2 "##.*$"
+
+syn match automakeMakeError "$[{(][^})]*[^a-zA-Z0-9_})][^})]*[})]" " GNU make function call
+
+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 automakeMakeDString start=+"+ skip=+\\"+ end=+"+ contains=makeIdent,automakeSubstitution
+syn region automakeMakeSString start=+'+ skip=+\\'+ end=+'+ contains=makeIdent,automakeSubstitution
+syn region automakeMakeBString start=+`+ skip=+\\`+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine,automakeSubstitution
+
+" 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_automake_syntax_inits")
+ if version < 508
+ let did_automake_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink automakePrimary Statement
+ HiLink automakeSecondary Type
+ HiLink automakeExtra Special
+ HiLink automakeOptions Special
+ HiLink automakeClean Special
+ HiLink automakeSubdirs Statement
+ HiLink automakeConditional PreProc
+ HiLink automakeSubst PreProc
+ HiLink automakeComment1 makeComment
+ HiLink automakeComment2 makeComment
+ HiLink automakeMakeError makeError
+ HiLink automakeBadSubst makeError
+ HiLink automakeMakeDString makeDString
+ HiLink automakeMakeSString makeSString
+ HiLink automakeMakeBString makeBString
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "automake"
+
+" vi: ts=8 sw=4 sts=4
diff --git a/runtime/syntax/ave.vim b/runtime/syntax/ave.vim
new file mode 100644
index 000000000..2a0a9d85a
--- /dev/null
+++ b/runtime/syntax/ave.vim
@@ -0,0 +1,92 @@
+" Vim syntax file
+" Copyright by Jan-Oliver Wagner
+" Language: avenue
+" Maintainer: Jan-Oliver Wagner <Jan-Oliver.Wagner@intevation.de>
+" Last change: 2001 May 10
+
+" Avenue is the ArcView built-in language. ArcView is
+" a desktop GIS by ESRI. Though it is a built-in language
+" and a built-in editor is provided, the use of VIM increases
+" development speed.
+" I use some technologies to automatically load avenue scripts
+" into ArcView.
+
+" 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
+
+" Avenue is entirely case-insensitive.
+syn case ignore
+
+" The keywords
+
+syn keyword aveStatement if then elseif else end break exit return
+syn keyword aveStatement for each in continue while
+
+" String
+
+syn region aveString start=+"+ end=+"+
+
+" Integer number
+syn match aveNumber "[+-]\=\<[0-9]\+\>"
+
+" Operator
+
+syn keyword aveOperator or and max min xor mod by
+" 'not' is a kind of a problem: Its an Operator as well as a method
+" 'not' is only marked as an Operator if not applied as method
+syn match aveOperator "[^\.]not[^a-zA-Z]"
+
+" Variables
+
+syn keyword aveFixVariables av nil self false true nl tab cr tab
+syn match globalVariables "_[a-zA-Z][a-zA-Z0-9]*"
+syn match aveVariables "[a-zA-Z][a-zA-Z0-9_]*"
+syn match aveConst "#[A-Z][A-Z_]+"
+
+" Comments
+
+syn match aveComment "'.*"
+
+" Typical Typos
+
+" for C programmers:
+syn match aveTypos "=="
+syn match aveTypos "!="
+
+" 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_ave_syn_inits")
+ if version < 508
+ let did_ave_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink aveStatement Statement
+
+ HiLink aveString String
+ HiLink aveNumber Number
+
+ HiLink aveFixVariables Special
+ HiLink aveVariables Identifier
+ HiLink globalVariables Special
+ HiLink aveConst Special
+
+ HiLink aveClassMethods Function
+
+ HiLink aveOperator Operator
+ HiLink aveComment Comment
+
+ HiLink aveTypos Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ave"
diff --git a/runtime/syntax/awk.vim b/runtime/syntax/awk.vim
new file mode 100644
index 000000000..00a689d46
--- /dev/null
+++ b/runtime/syntax/awk.vim
@@ -0,0 +1,216 @@
+" Vim syntax file
+" Language: awk, nawk, gawk, mawk
+" Maintainer: Antonio Colombo <antonio.colombo@jrc.it>
+" Last Change: 2002 Jun 23
+
+" AWK ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
+" The AWK Programming Language, Addison-Wesley, 1988
+
+" GAWK ref. is: Arnold D. Robbins
+" Effective AWK Programming, Third Edition, O'Reilly, 2001
+
+" MAWK is a "new awk" meaning it implements AWK ref.
+" mawk conforms to the Posix 1003.2 (draft 11.3)
+" definition of the AWK language which contains a few features
+" not described in the AWK book, and mawk provides a small number of extensions.
+
+" TODO:
+" Dig into the commented out syntax expressions below.
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" A bunch of useful Awk keywords
+" AWK ref. p. 188
+syn keyword awkStatement break continue delete exit
+syn keyword awkStatement function getline next
+syn keyword awkStatement print printf return
+" GAWK ref. p. 117
+syn keyword awkStatement nextfile
+" AWK ref. p. 42, GAWK ref. p. 142-166
+syn keyword awkFunction atan2 close cos exp fflush int log rand sin sqrt srand
+syn keyword awkFunction gsub index length match split sprintf sub
+syn keyword awkFunction substr system
+" GAWK ref. p. 142-166
+syn keyword awkFunction asort gensub mktime strftime strtonum systime
+syn keyword awkFunction tolower toupper
+syn keyword awkFunction and or xor compl lshift rshift
+syn keyword awkFunction dcgettext bindtextdomain
+
+syn keyword awkConditional if else
+syn keyword awkRepeat while for
+
+syn keyword awkTodo contained TODO
+
+syn keyword awkPatterns BEGIN END
+" AWK ref. p. 36
+syn keyword awkVariables ARGC ARGV FILENAME FNR FS NF NR
+syn keyword awkVariables OFMT OFS ORS RLENGTH RS RSTART SUBSEP
+" GAWK ref. p. 120-126
+syn keyword awkVariables ARGIND BINMODE CONVFMT ENVIRON ERRNO
+syn keyword awkVariables FIELDWIDTHS IGNORECASE LINT PROCINFO
+syn keyword awkVariables RT RLENGTH TEXTDOMAIN
+
+syn keyword awkRepeat do
+
+" Octal format character.
+syn match awkSpecialCharacter display contained "\\[0-7]\{1,3\}"
+syn keyword awkStatement func nextfile
+" Hex format character.
+syn match awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+"
+
+syn match awkFieldVars "\$\d\+"
+
+"catch errors caused by wrong parenthesis
+syn region awkParen transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass
+syn match awkParenError display ")"
+syn match awkInParen display contained "[{}]"
+
+" 64 lines for complex &&'s, and ||'s in a big "if"
+syn sync ccomment awkParen maxlines=64
+
+" Search strings & Regular Expressions therein.
+syn region awkSearch oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
+syn region awkBrackets contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass
+syn region awkSearch oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
+
+syn match awkCharClass contained "\[:[^:\]]*:\]"
+syn match awkBrktRegExp contained "\\.\|.\-[^]]"
+syn match awkRegExp contained "/\^"ms=s+1
+syn match awkRegExp contained "\$/"me=e-1
+syn match awkRegExp contained "[?.*{}|+]"
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn region awkString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=awkSpecialCharacter,awkSpecialPrintf
+syn match awkSpecialCharacter contained "\\."
+
+" Some of these combinations may seem weird, but they work.
+syn match awkSpecialPrintf contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]"
+
+" Numbers, allowing signs (both -, and +)
+" Integer number.
+syn match awkNumber display "[+-]\=\<\d\+\>"
+" Floating point number.
+syn match awkFloat display "[+-]\=\<\d\+\.\d+\>"
+" Floating point number, starting with a dot.
+syn match awkFloat display "[+-]\=\<.\d+\>"
+syn case ignore
+"floating point number, with dot, optional exponent
+syn match awkFloat display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match awkFloat display "\.\d\+\(e[-+]\=\d\+\)\=\>"
+"floating point number, without dot, with exponent
+syn match awkFloat display "\<\d\+e[-+]\=\d\+\>"
+syn case match
+
+"syn match awkIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+
+" Arithmetic operators: +, and - take care of ++, and --
+"syn match awkOperator "+\|-\|\*\|/\|%\|="
+"syn match awkOperator "+=\|-=\|\*=\|/=\|%="
+"syn match awkOperator "^\|^="
+
+" Comparison expressions.
+"syn match awkExpression "==\|>=\|=>\|<=\|=<\|\!="
+"syn match awkExpression "\~\|\!\~"
+"syn match awkExpression "?\|:"
+"syn keyword awkExpression in
+
+" Boolean Logic (OR, AND, NOT)
+"syn match awkBoolLogic "||\|&&\|\!"
+
+" This is overridden by less-than & greater-than.
+" 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.
+" File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
+"syn match awkFileIO contained ">"
+"syn match awkFileIO contained "<"
+
+" Expression separators: ';' and ','
+syn match awkSemicolon ";"
+syn match awkComma ","
+
+syn match awkComment "#.*" contains=awkTodo
+
+syn match awkLineSkip "\\$"
+
+" Highlight array element's (recursive arrays allowed).
+" Keeps nested array names' separate from normal array elements.
+" Keeps numbers separate from normal array elements (variables).
+syn match awkArrayArray contained "[^][, \t]\+\["me=e-1
+syn match awkArrayElement contained "[^][, \t]\+"
+syn region awkArray transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat
+
+" 10 should be enough.
+" (for the few instances where it would be more than "oneline")
+syn sync ccomment awkArray maxlines=10
+
+" 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
+if version >= 508 || !exists("did_awk_syn_inits")
+ if version < 508
+ let did_awk_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink awkConditional Conditional
+ HiLink awkFunction Function
+ HiLink awkRepeat Repeat
+ HiLink awkStatement Statement
+
+ HiLink awkString String
+ HiLink awkSpecialPrintf Special
+ HiLink awkSpecialCharacter Special
+
+ HiLink awkSearch String
+ HiLink awkBrackets awkRegExp
+ HiLink awkBrktRegExp awkNestRegExp
+ HiLink awkCharClass awkNestRegExp
+ HiLink awkNestRegExp Keyword
+ HiLink awkRegExp Special
+
+ HiLink awkNumber Number
+ HiLink awkFloat Float
+
+ HiLink awkFileIO Special
+ "HiLink awkOperator Special
+ "HiLink awkExpression Special
+ HiLink awkBoolLogic Special
+
+ HiLink awkPatterns Special
+ HiLink awkVariables Special
+ HiLink awkFieldVars Special
+
+ HiLink awkLineSkip Special
+ HiLink awkSemicolon Special
+ HiLink awkComma Special
+ "HiLink awkIdentifier Identifier
+
+ HiLink awkComment Comment
+ HiLink awkTodo Todo
+
+ " Change this if you want nested array names to be highlighted.
+ HiLink awkArrayArray awkArray
+ HiLink awkArrayElement Special
+
+ HiLink awkParenError awkError
+ HiLink awkInParen awkError
+ HiLink awkError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "awk"
+
+" vim: ts=8
diff --git a/runtime/syntax/ayacc.vim b/runtime/syntax/ayacc.vim
new file mode 100644
index 000000000..be91e2f7e
--- /dev/null
+++ b/runtime/syntax/ayacc.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: AYacc
+" Maintainer: Mathieu Clabaut <mathieu.clabaut@free.fr>
+" LastChange: 02 May 2001
+" Original: Yacc, maintained by Dr. Charles E. Campbell, Jr.
+" Comment: Replaced sourcing c.vim file by ada.vim and rename yacc*
+" in ayacc*
+
+" 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 Ada syntax to start with
+if version < 600
+ so <sfile>:p:h/ada.vim
+else
+ runtime! syntax/ada.vim
+ unlet b:current_syntax
+endif
+
+" 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
+
+" Yacc stuff
+syn match ayaccDelim "^[ \t]*[:|;]"
+syn match ayaccOper "@\d\+"
+
+syn match ayaccKey "^[ \t]*%\(token\|type\|left\|right\|start\|ident\)\>"
+syn match ayaccKey "[ \t]%\(prec\|expect\|nonassoc\)\>"
+syn match ayaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
+syn keyword ayaccKeyActn yyerrok yyclearin
+
+syn match ayaccUnionStart "^%union" skipwhite skipnl nextgroup=ayaccUnion
+syn region ayaccUnion contained matchgroup=ayaccCurly start="{" matchgroup=ayaccCurly end="}" contains=@ayaccUnionGroup
+syn region ayaccUnionCurly contained matchgroup=ayaccCurly start="{" matchgroup=ayaccCurly end="}" contains=@ayaccUnionGroup
+syn match ayaccBrkt contained "[<>]"
+syn match ayaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=ayaccBrkt
+syn match ayaccDefinition "^[A-Za-z][A-Za-z0-9_]*[ \t]*:"
+
+" special Yacc separators
+syn match ayaccSectionSep "^[ \t]*%%"
+syn match ayaccSep "^[ \t]*%{"
+syn match ayaccSep "^[ \t]*%}"
+
+" I'd really like to highlight just the outer {}. Any suggestions???
+syn match ayaccCurlyError "[{}]"
+syn region ayaccAction matchgroup=ayaccCurly start="{" end="}" contains=ALLBUT,@ayaccActionGroup
+
+if version >= 508 || !exists("did_ayacc_syntax_inits")
+ if version < 508
+ let did_ayacc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Internal ayacc highlighting links
+ HiLink ayaccBrkt ayaccStmt
+ HiLink ayaccKey ayaccStmt
+ HiLink ayaccOper ayaccStmt
+ HiLink ayaccUnionStart ayaccKey
+
+ " External ayacc highlighting links
+ HiLink ayaccCurly Delimiter
+ HiLink ayaccCurlyError Error
+ HiLink ayaccDefinition Function
+ HiLink ayaccDelim Function
+ HiLink ayaccKeyActn Special
+ HiLink ayaccSectionSep Todo
+ HiLink ayaccSep Delimiter
+ HiLink ayaccStmt Statement
+ HiLink ayaccType Type
+
+ " since Bram doesn't like my Delimiter :|
+ HiLink Delimiter Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ayacc"
+
+" vim: ts=15
diff --git a/runtime/syntax/b.vim b/runtime/syntax/b.vim
new file mode 100644
index 000000000..e97669175
--- /dev/null
+++ b/runtime/syntax/b.vim
@@ -0,0 +1,142 @@
+" Vim syntax file
+" Language: B (A Formal Method with refinement and mathematical proof)
+" Maintainer: Mathieu Clabaut <mathieu.clabaut@free.fr>
+" LastChange: 25 Apr 2001
+
+
+" 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
+
+
+" A bunch of useful B keywords
+syn keyword bStatement MACHINE SEES OPERATIONS INCLUDES DEFINITIONS CONSTRAINTS CONSTANTS VARIABLES CONCRETE_CONSTANTS CONCRETE_VARIABLES ABSTRACT_CONSTANTS ABSTRACT_VARIABLES HIDDEN_CONSTANTS HIDDEN_VARIABLES ASSERT ASSERTIONS EXTENDS IMPLEMENTATION REFINEMENT IMPORTS USES INITIALISATION INVARIANT PROMOTES PROPERTIES REFINES SETS VALUES VARIANT VISIBLE_CONSTANTS VISIBLE_VARIABLES THEORY
+syn keyword bLabel CASE IN EITHER OR CHOICE DO OF
+syn keyword bConditional IF ELSE SELECT ELSIF THEN WHEN
+syn keyword bRepeat WHILE FOR
+syn keyword bOps bool card conc closure closure1 dom first fnc front not or id inter iseq iseq1 iterate last max min mod perm pred prj1 prj2 ran rel rev seq seq1 size skip succ tail union
+syn keyword bKeywords LET VAR BE IN BEGIN END POW POW1 FIN FIN1 PRE SIGMA STRING UNION IS ANY WHERE
+syn match bKeywords "||"
+
+syn keyword bBoolean TRUE FALSE bfalse btrue
+syn keyword bConstant PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES
+syn keyword bGuard binhyp band bnot bguard bsearch bflat bfresh bguardi bget bgethyp barith bgetresult bresult bgoal bmatch bmodr bnewv bnum btest bpattern bprintf bwritef bsubfrm bvrb blvar bcall bappend bclose
+
+syn keyword bLogic or not
+syn match bLogic "\&\|=>\|<=>"
+
+syn keyword cTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match bSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
+syn region bString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial
+syn match bCharacter "'[^\\]'"
+syn match bSpecialCharacter "'\\.'"
+syn match bSpecialCharacter "'\\[0-7][0-7]'"
+syn match bSpecialCharacter "'\\[0-7][0-7][0-7]'"
+
+"catch errors caused by wrong parenthesis
+syn region bParen transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField
+syn match bParenError ")"
+syn match bInParen contained "[{}]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match bNumber "\<[0-9]\+\>"
+"syn match bIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+
+if exists("b_comment_strings")
+ " A comment can contain bString, bCharacter and bNumber.
+ " But a "*/" inside a bString in a bComment DOES end the comment! So we
+ " need to use a special type of bString: bCommentString, 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 bCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region bCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=bSpecial,bCommentSkip
+ syntax region bComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=bSpecial
+ syntax region bComment start="/\*" end="\*/" contains=bTodo,bCommentString,bCharacter,bNumber,bFloat
+ syntax region bComment start="/\?\*" end="\*\?/" contains=bTodo,bCommentString,bCharacter,bNumber,bFloat
+ syntax match bComment "//.*" contains=bTodo,bComment2String,bCharacter,bNumber
+else
+ syn region bComment start="/\*" end="\*/" contains=bTodo
+ syn region bComment start="/\?\*" end="\*\?/" contains=bTodo
+ syn match bComment "//.*" contains=bTodo
+endif
+syntax match bCommentError "\*/"
+
+syn keyword bType INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1
+
+syn region bPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError
+syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match bIncluded contained "<[^>]*>"
+syn match bInclude "^\s*#\s*include\>\s*["<]" contains=bIncluded
+
+syn region bDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
+syn region bPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
+
+
+syn sync ccomment bComment minlines=10
+
+" 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_b_syntax_inits")
+ if version < 508
+ let did_b_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 bLabel Label
+ HiLink bUserLabel Label
+ HiLink bConditional Conditional
+ HiLink bRepeat Repeat
+ HiLink bLogic Special
+ HiLink bCharacter Character
+ HiLink bSpecialCharacter bSpecial
+ HiLink bNumber Number
+ HiLink bFloat Float
+ HiLink bOctalError bError
+ HiLink bParenError bError
+" HiLink bInParen bError
+ HiLink bCommentError bError
+ HiLink bBoolean Identifier
+ HiLink bConstant Identifier
+ HiLink bGuard Identifier
+ HiLink bOperator Operator
+ HiLink bKeywords Operator
+ HiLink bOps Identifier
+ HiLink bStructure Structure
+ HiLink bStorageClass StorageClass
+ HiLink bInclude Include
+ HiLink bPreProc PreProc
+ HiLink bDefine Macro
+ HiLink bIncluded bString
+ HiLink bError Error
+ HiLink bStatement Statement
+ HiLink bPreCondit PreCondit
+ HiLink bType Type
+ HiLink bCommentError bError
+ HiLink bCommentString bString
+ HiLink bComment2String bString
+ HiLink bCommentSkip bComment
+ HiLink bString String
+ HiLink bComment Comment
+ HiLink bSpecial SpecialChar
+ HiLink bTodo Todo
+ "hi link bIdentifier Identifier
+ delcommand HiLink
+endif
+
+let current_syntax = "b"
+
+" vim: ts=8
diff --git a/runtime/syntax/baan.vim b/runtime/syntax/baan.vim
new file mode 100644
index 000000000..2efa8dea6
--- /dev/null
+++ b/runtime/syntax/baan.vim
@@ -0,0 +1,247 @@
+" Vim syntax file"
+" Language: Baan
+" Maintainer: Erwin Smit / Her van de Vliert
+" Last change: 30-10-2001"
+
+" 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
+
+"************************************* 3GL ************************************"
+syn match baan3gl "#ident"
+syn match baan3gl "#include"
+syn match baan3gl "#define"
+syn match baan3gl "#undef"
+syn match baan3gl "#pragma"
+syn keyword baanConditional if then else case endif while endwhile endfor endcase
+syn keyword baan3gl at based break bset call common const continue default double
+syn keyword baan3gl empty extern fixed function ge global goto gt le lt mb
+syn keyword baan3gl multibyte ne ofr prompt ref repeat static step stop string
+syn keyword baan3gl true false until void wherebind
+syn keyword baan3gl and or to not in
+syn keyword baan3gl domain table eq input end long dim return at base print
+syn match baan3gl "\<for\>" contains=baansql
+syn match baan3gl "on case"
+syn match baan3gl "e\=n\=d\=dllusage"
+
+"************************************* SQL ************************************"
+syn keyword baansqlh where reference selecterror selectbind selectdo selectempty
+syn keyword baansqlh selecteos whereused endselect unref setunref clearunref
+syn keyword baansqlh from select clear skip rows
+syn keyword baansql between inrange having
+syn match baansql "as set with \d\+ rows"
+syn match baansql "as prepared set"
+syn match baansql "as prepared set with \d\+ rows"
+syn match baansql "refers to"
+syn match baansql "with retry"
+syn match baansql "with retry repeat last row"
+syn match baansql "for update"
+syn match baansql "order by"
+syn match baansql "group by"
+syn match baansql "commit\.transaction()"
+syn match baansql "abort\.transaction()"
+syn match baansql "db\.columns\.to\.record"
+syn match baansql "db\.record\.to\.columns"
+syn match baansql "db\.bind"
+syn match baansql "db\.change\.order"
+syn match baansql "\<db\.eq"
+syn match baansql "\<db\.first"
+syn match baansql "\<db\.gt"
+syn match baansql "\<db\.ge"
+syn match baansql "\<db\.le"
+syn match baansql "\<db\.next"
+syn match baansql "\<db\.prev"
+syn match baansql "\<db\.insert"
+syn match baansql "\<db\.delete"
+syn match baansql "\<db\.update"
+syn match baansql "\<db\.create\.table"
+syn match baansql "db\.set\.to\.default"
+syn match baansql "db\.retry"
+syn match baansql "DB\.RETRY"
+syn match baansql "db\.delayed\.lock"
+syn match baansql "db\.retry\.point()"
+syn match baansql "db\.retry\.hit()"
+syn match baansql "db\.return\.dupl"
+syn match baansql "db\.skip\.dupl"
+syn match baansql "db\.row\.length"
+
+"************************************* 4GL ************************************"
+" Program section
+syn match baan4glh "declaration:"
+syn match baan4glh "functions:"
+syn match baan4glh "before\.program:"
+syn match baan4glh "on\.error:"
+syn match baan4glh "after\.program:"
+syn match baan4glh "after\.update.db.commit:"
+syn match baan4glh "before\.display\.object:"
+
+" Form section
+syn match baan4glh "form\.\d\+:"
+syn match baan4glh "form\.all:"
+syn match baan4glh "form\.other:"
+syn match baan4gl "init\.form:"
+syn match baan4gl "before\.form:"
+syn match baan4gl "after\.form:"
+
+" Choice section
+syn match baan4glh "choice\.start\.set:"
+syn match baan4glh "choice\.first\.view:"
+syn match baan4glh "choice\.next\.view:"
+syn match baan4glh "choice\.prev\.view:"
+syn match baan4glh "choice\.last\.view:"
+syn match baan4glh "choice\.def\.find:"
+syn match baan4glh "choice\.find\.data:"
+syn match baan4glh "choice\.first\.set:"
+syn match baan4glh "choice\.next\.set:"
+syn match baan4glh "choice\.display\.set:"
+syn match baan4glh "choice\.prev\.set:"
+syn match baan4glh "choice\.rotate\.curr:"
+syn match baan4glh "choice\.last\.set:"
+syn match baan4glh "choice\.add\.set:"
+syn match baan4glh "choice\.update\.db:"
+syn match baan4glh "choice\.dupl\.occur:"
+syn match baan4glh "choice\.recover\.set:"
+syn match baan4glh "choice\.mark\.delete:"
+syn match baan4glh "choice\.mark\.occur:"
+syn match baan4glh "choice\.change\.order:"
+syn match baan4glh "choice\.modify\.set:"
+syn match baan4glh "choice\.restart\.input:"
+syn match baan4glh "choice\.print\.data:"
+syn match baan4glh "choice\.create\.job:"
+syn match baan4glh "choice\.form\.tab\.change:"
+syn match baan4glh "choice\.first\.frm:"
+syn match baan4glh "choice\.next\.frm:"
+syn match baan4glh "choice\.prev\.frm:"
+syn match baan4glh "choice\.last\.frm:"
+syn match baan4glh "choice\.resize\.frm:"
+syn match baan4glh "choice\.cmd\.options:"
+syn match baan4glh "choice\.zoom:"
+syn match baan4glh "choice\.interrupt:"
+syn match baan4glh "choice\.end\.program:"
+syn match baan4glh "choice\.abort\.program:"
+syn match baan4glh "choice\.cont\.process:"
+syn match baan4glh "choice\.text\.manager:"
+syn match baan4glh "choice\.run\.job:"
+syn match baan4glh "choice\.global\.delete:"
+syn match baan4glh "choice\.global\.copy:"
+syn match baan4glh "choice\.save\.defaults"
+syn match baan4glh "choice\.get\.defaults:"
+syn match baan4glh "choice\.start\.chart:"
+syn match baan4glh "choice\.start\.query:"
+syn match baan4glh "choice\.user\.\d:"
+syn match baan4glh "choice\.ask\.helpinfo:"
+syn match baan4glh "choice\.calculator:"
+syn match baan4glh "choice\.calendar:"
+syn match baan4glh "choice\.bms:"
+syn match baan4glh "choice\.cmd\.whats\.this:"
+syn match baan4glh "choice\.help\.index:"
+syn match baan4gl "before\.choice:"
+syn match baan4gl "on\.choice:"
+syn match baan4gl "after\.choice:"
+
+" Field section
+syn match baan4glh "field\.\l\{5}\d\{3}\.\l\{4}\.\=c\=:"
+syn match baan4glh "field\.e\..\+:"
+syn match baan4glh "field\.all:"
+syn match baan4glh "field\.other:"
+syn match baan4gl "init\.field:"
+syn match baan4gl "before\.field:"
+syn match baan4gl "before\.input:"
+syn match baan4gl "before\.display:"
+syn match baan4gl "before\.zoom:"
+syn match baan4gl "before\.checks:"
+syn match baan4gl "domain\.error:"
+syn match baan4gl "ref\.input:"
+syn match baan4gl "ref\.display:"
+syn match baan4gl "check\.input:"
+syn match baan4gl "on\.input:"
+syn match baan4gl "when\.field\.changes:"
+syn match baan4gl "after\.zoom:"
+syn match baan4gl "after\.input:"
+syn match baan4gl "after\.display:"
+syn match baan4gl "after\.field:"
+
+" Group section
+syn match baan4glh "group\.\d\+:"
+syn match baan4gl "init\.group:"
+syn match baan4gl "before\.group:"
+syn match baan4gl "after\.group:"
+
+" Zoom section
+syn match baan4glh "zoom\.from\..\+:"
+syn match baan4gl "on\.entry:"
+syn match baan4gl "on\.exit:"
+" Main table section
+syn match baan4glh "main\.table\.io:"
+syn match baan4gl "before\.read:"
+syn match baan4gl "after\.read:"
+syn match baan4gl "before\.write:"
+syn match baan4gl "after\.write:"
+syn match baan4gl "after\.skip\.write:"
+syn match baan4gl "before\.rewrite:"
+syn match baan4gl "after\.rewrite:"
+syn match baan4gl "after\.skip\.rewrite:"
+syn match baan4gl "before\.delete:"
+syn match baan4gl "after\.delete:"
+syn match baan4gl "after\.skip\.delete:"
+syn match baan4gl "read\.view:"
+
+"number without a dot."
+syn match baanNumber "\<\-\=\d\+\>"
+"number with dot"
+syn match baanNumber "\<\-\=\d\+\.\d*\>"
+"number starting with a dot"
+syn match baanNumber "\<\-\=\.\d\+\>"
+
+" String"
+syn region baanString start=+"+ skip=+""+ end=+"+
+" Comment"
+syn match baanComment "|$"
+syn match baanComment "|.$"
+syn match baanComment "|[^ ]"
+syn match baanComment "|[^#].*[^ ]"
+syn match baanCommenth "^|#lra.*$"
+syn match baanCommenth "^|#mdm.*$"
+syn match baanCommenth "^|#[0-9][0-9][0-9][0-9][0-9].*$"
+syn match baanCommenth "^|#N\=o\=Include.*$"
+syn region baanComment start="dllusage" end="enddllusage"
+" Oldcode"
+syn match baanUncommented "^|[^*#].*[^ ]"
+" SpaceError"
+syn match BaanSpaces " "
+syn match baanSpaceError "\s*$"
+syn match baanSpaceError " "
+
+" 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_baan_syn_inits")
+ if version < 508
+ let did_c_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink baanConditional Conditional
+ HiLink baan3gl Statement
+ HiLink baan4gl Statement
+ HiLink baan4glh Statement
+ HiLink baansql Statement
+ HiLink baansqlh Statement
+ HiLink baanNumber Number
+ HiLink baanString String
+ HiLink baanComment Comment
+ HiLink baanCommenth Comment
+ HiLink baanUncommented Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "baan"
+
+" vim: ts=8
diff --git a/runtime/syntax/basic.vim b/runtime/syntax/basic.vim
new file mode 100644
index 000000000..ee500178c
--- /dev/null
+++ b/runtime/syntax/basic.vim
@@ -0,0 +1,174 @@
+" Vim syntax file
+" Language: BASIC
+" Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
+" Last Change: Tue Sep 14 14:24:23 BST 1999
+
+" First version based on Micro$soft QBASIC circa 1989, as documented in
+" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
+" This syntax file not a complete implementation yet. Send suggestions to the
+" maintainer.
+
+" 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
+
+" 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
+syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
+syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
+syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
+syn keyword basicStatement COM com Com COMMON common Common
+syn keyword basicStatement CONST const Const DATA data Data
+syn keyword basicStatement DECLARE declare Declare DEF def Def
+syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
+syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
+syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
+syn keyword basicStatement DO do Do LOOP loop Loop
+syn keyword basicStatement DRAW draw Draw END end End
+syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
+syn keyword basicStatement ERROR error Error EXIT exit Exit
+syn keyword basicStatement FIELD field Field FILES files Files
+syn keyword basicStatement FOR for For NEXT next Next
+syn keyword basicStatement FUNCTION function Function GET get Get
+syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
+syn keyword basicStatement IF if If THEN then Then ELSE else Else
+syn keyword basicStatement INPUT input Input INPUT# input# Input#
+syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
+syn keyword basicStatement KILL kill Kill LET let Let
+syn keyword basicStatement LINE line Line LOCATE locate Locate
+syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
+syn keyword basicStatement LPRINT lprint Lprint USING using Using
+syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
+syn keyword basicStatement NAME name Name ON on On
+syn keyword basicStatement ERROR error Error OPEN open Open
+syn keyword basicStatement OPTION option Option BASE base Base
+syn keyword basicStatement OUT out Out PAINT paint Paint
+syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
+syn keyword basicStatement PEN pen Pen PLAY play Play
+syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
+syn keyword basicStatement PRESET preset Preset PRINT print Print
+syn keyword basicStatement PRINT# print# Print# USING using Using
+syn keyword basicStatement PSET pset Pset PUT put Put
+syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
+syn keyword basicStatement REDIM redim Redim RESET reset Reset
+syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
+syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
+syn keyword basicStatement RSET rset Rset RUN run Run
+syn keyword basicStatement SEEK seek Seek SELECT select Select
+syn keyword basicStatement CASE case Case SHARED shared Shared
+syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
+syn keyword basicStatement SOUND sound Sound STATIC static Static
+syn keyword basicStatement STOP stop Stop STRIG strig Strig
+syn keyword basicStatement SUB sub Sub SWAP swap Swap
+syn keyword basicStatement SYSTEM system System TIMER timer Timer
+syn keyword basicStatement TROFF troff Troff TRON tron Tron
+syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
+syn keyword basicStatement VIEW view View WAIT wait Wait
+syn keyword basicStatement WHILE while While WEND wend Wend
+syn keyword basicStatement WIDTH width Width WINDOW window Window
+syn keyword basicStatement WRITE write Write DATE$ date$ Date$
+syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
+
+syn keyword basicFunction ABS abs Abs ASC asc Asc
+syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
+syn keyword basicFunction CINT cint Cint CLNG clng Clng
+syn keyword basicFunction COS cos Cos CSNG csng Csng
+syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
+syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
+syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
+syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
+syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
+syn keyword basicFunction ERR err Err EXP exp Exp
+syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
+syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
+syn keyword basicFunction INP inp Inp INSTR instr Instr
+syn keyword basicFunction INT int Int LBOUND lbound Lbound
+syn keyword basicFunction LEN len Len LOC loc Loc
+syn keyword basicFunction LOF lof Lof LOG log Log
+syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
+syn keyword basicFunction PEN pen Pen POINT point Point
+syn keyword basicFunction POS pos Pos RND rnd Rnd
+syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
+syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
+syn keyword basicFunction SGN sgn Sgn SIN sin Sin
+syn keyword basicFunction SPC spc Spc SQR sqr Sqr
+syn keyword basicFunction STICK stick Stick STRIG strig Strig
+syn keyword basicFunction TAB tab Tab TAN tan Tan
+syn keyword basicFunction UBOUND ubound Ubound VAL val Val
+syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
+syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
+syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
+syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
+syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
+syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
+syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
+syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
+syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
+syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
+syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
+syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
+syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
+syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
+syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
+syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
+syn keyword basicTodo contained TODO
+
+"integer number, or floating point number without a dot.
+syn match basicNumber "\<\d\+\>"
+"floating point number, with dot
+syn match basicNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match basicNumber "\.\d\+\>"
+
+" String and Character contstants
+syn match basicSpecial contained "\\\d\d\d\|\\."
+syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
+
+syn region basicComment start="REM" end="$" contains=basicTodo
+syn region basicComment start="^[ \t]*'" end="$" contains=basicTodo
+syn region basicLineNumber start="^\d" end="\s"
+syn match basicTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
+" Used with OPEN statement
+syn match basicFilenumber "#\d\+"
+"syn sync ccomment basicComment
+" syn match basicMathsOperator "[<>+\*^/\\=-]"
+syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
+
+" 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_basic_syntax_inits")
+ if version < 508
+ let did_basic_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink basicLabel Label
+ HiLink basicConditional Conditional
+ HiLink basicRepeat Repeat
+ HiLink basicLineNumber Comment
+ HiLink basicNumber Number
+ HiLink basicError Error
+ HiLink basicStatement Statement
+ HiLink basicString String
+ HiLink basicComment Comment
+ HiLink basicSpecial Special
+ HiLink basicTodo Todo
+ HiLink basicFunction Identifier
+ HiLink basicTypeSpecifier Type
+ HiLink basicFilenumber basicTypeSpecifier
+ "hi basicMathsOperator term=bold cterm=bold gui=bold
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "basic"
+
+" vim: ts=8
diff --git a/runtime/syntax/bc.vim b/runtime/syntax/bc.vim
new file mode 100644
index 000000000..dcfaf486a
--- /dev/null
+++ b/runtime/syntax/bc.vim
@@ -0,0 +1,78 @@
+" Vim syntax file
+" Language: bc - An arbitrary precision calculator language
+" Maintainer: Vladimir Scholtz <vlado@gjh.sk>
+" Last change: 2001 Sep 02
+" Available on: www.gjh.sk/~vlado/bc.vim
+
+" 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
+
+" Keywords
+syn keyword bcKeyword if else while for break continue return limits halt quit
+syn keyword bcKeyword define
+syn keyword bcKeyword length read sqrt print
+
+" Variable
+syn keyword bcType auto
+
+" Constant
+syn keyword bcConstant scale ibase obase last
+syn keyword bcConstant BC_BASE_MAX BC_DIM_MAX BC_SCALE_MAX BC_STRING_MAX
+syn keyword bcConstant BC_ENV_ARGS BC_LINE_LENGTH
+
+" Any other stuff
+syn match bcIdentifier "[a-z_][a-z0-9_]*"
+
+" String
+ syn match bcString "\"[^"]*\""
+
+" Number
+syn match bcNumber "[0-9]\+"
+
+" Comment
+syn match bcComment "\#.*"
+syn region bcComment start="/\*" end="\*/"
+
+" Parent ()
+syn cluster bcAll contains=bcList,bcIdentifier,bcNumber,bcKeyword,bcType,bcConstant,bcString,bcParentError
+syn region bcList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=@bcAll
+syn region bcList matchgroup=Delimiter start="\[" skip="|.\{-}|" matchgroup=Delimiter end="\]" contains=@bcAll
+syn match bcParenError "]"
+syn match bcParenError ")"
+
+
+
+syn case match
+
+" 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_bc_syntax_inits")
+ if version < 508
+ let did_bc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink bcKeyword Statement
+ HiLink bcType Type
+ HiLink bcConstant Constant
+ HiLink bcNumber Number
+ HiLink bcComment Comment
+ HiLink bcString String
+ HiLink bcSpecialChar SpecialChar
+ HiLink bcParenError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "bc"
+" vim: ts=8
diff --git a/runtime/syntax/bdf.vim b/runtime/syntax/bdf.vim
new file mode 100644
index 000000000..3fc404a86
--- /dev/null
+++ b/runtime/syntax/bdf.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: BDF Font definition
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/bdf/
+" Latest Revision: 2004-05-06
+" arch-tag: b696b6ba-af24-41ba-b4eb-d248495eca68
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" numbers
+syn match bdfNumber display "\<\(\x\+\|\d\+\.\d\+\)\>"
+
+" comments
+syn region bdfComment start="^COMMENT\>" end="$" contains=bdfTodo
+
+" todo
+syn keyword bdfTodo contained TODO FIXME XXX NOTE
+
+" strings
+syn region bdfString start=+"+ skip=+""+ end=+"+
+
+" properties
+syn keyword bdfProperties contained FONT SIZE FONTBOUNDINGBOX CHARS
+
+" X11 properties
+syn keyword bdfXProperties contained FONT_ASCENT FONT_DESCENT DEFAULT_CHAR
+syn keyword bdfXProperties contained FONTNAME_REGISTRY FOUNDRY FAMILY_NAME
+syn keyword bdfXProperties contained WEIGHT_NAME SLANT SETWIDTH_NAME PIXEL_SIZE
+syn keyword bdfXProperties contained POINT_SIZE RESOLUTION_X RESOLUTION_Y SPACING
+syn keyword bdfXProperties contained CHARSET_REGISTRY CHARSET_ENCODING COPYRIGHT
+syn keyword bdfXProperties contained ADD_STYLE_NAME WEIGHT RESOLUTION X_HEIGHT
+syn keyword bdfXProperties contained QUAD_WIDTH FONT AVERAGE_WIDTH
+
+syn region bdfDefinition transparent matchgroup=bdfDelim start="^STARTPROPERTIES\>" end="^ENDPROPERTIES\>" contains=bdfXProperties,bdfNumber,bdfString
+
+" characters
+syn keyword bdfCharProperties contained ENCODING SWIDTH DWIDTH BBX ATTRIBUTES BITMAP
+
+syn match bdfCharName contained display "\<[0-9a-zA-Z]\{1,14}\>"
+syn match bdfCharNameError contained display "\<[0-9a-zA-Z]\{15,}\>"
+
+syn region bdfStartChar transparent matchgroup=bdfDelim start="\<STARTCHAR\>" end="$" contains=bdfCharName,bdfCharNameError
+
+syn region bdfCharDefinition transparent start="^STARTCHAR\>" matchgroup=bdfDelim end="^ENDCHAR\>" contains=bdfCharProperties,bdfNumber,bdfStartChar
+
+" font
+syn region bdfFontDefinition transparent matchgroup=bdfDelim start="^STARTFONT\>" end="^ENDFONT\>" contains=bdfProperties,bdfDefinition,bdfCharDefinition,bdfNumber,bdfComment
+
+if exists("bdf_minlines")
+ let b:bdf_minlines = bdf_minlines
+else
+ let b:bdf_minlines = 50
+endif
+exec "syn sync minlines=" . b:bdf_minlines
+
+" 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_bdf_syn_inits")
+ if version < 508
+ let did_bdf_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink bdfComment Comment
+ HiLink bdfTodo Todo
+ HiLink bdfNumber Number
+ HiLink bdfString String
+ HiLink bdfProperties Keyword
+ HiLink bdfXProperties Keyword
+ HiLink bdfCharProperties Structure
+ HiLink bdfDelim Delimiter
+ HiLink bdfCharName String
+ HiLink bdfCharNameError Error
+ delcommand HiLink
+endif
+
+let b:current_syntax = "bdf"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/bib.vim b/runtime/syntax/bib.vim
new file mode 100644
index 000000000..a98f281d3
--- /dev/null
+++ b/runtime/syntax/bib.vim
@@ -0,0 +1,92 @@
+" Vim syntax file
+" Language: BibTeX (bibliographic database format for (La)TeX)
+" Maintainer: Bernd Feige <Bernd.Feige@gmx.net>
+" Filenames: *.bib
+" Last Change: Apr 26, 2001
+" URL: http://home.t-online.de/home/Bernd.Feige/bib.vim
+
+" Thanks to those who pointed out problems with this file or supplied fixes!
+
+" Initialization
+" ==============
+" 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
+
+" Ignore case
+syn case ignore
+
+" Keywords
+" ========
+syn keyword bibType contained article book booklet conference inbook
+syn keyword bibType contained incollection inproceedings manual
+syn keyword bibType contained mastersthesis misc phdthesis
+syn keyword bibType contained proceedings techreport unpublished
+syn keyword bibType contained string
+
+syn keyword bibEntryKw contained address annote author booktitle chapter
+syn keyword bibEntryKw contained crossref edition editor howpublished
+syn keyword bibEntryKw contained institution journal key month note
+syn keyword bibEntryKw contained number organization pages publisher
+syn keyword bibEntryKw contained school series title type volume year
+" Non-standard:
+syn keyword bibNSEntryKw contained abstract isbn issn keywords url
+
+" Clusters
+" ========
+syn cluster bibVarContents contains=bibUnescapedSpecial,bibBrace,bibParen
+" This cluster is empty but things can be added externally:
+"syn cluster bibCommentContents
+
+" Matches
+" =======
+syn match bibUnescapedSpecial contained /[^\\][%&]/hs=s+1
+syn match bibKey contained /\s*[^ \t}="]\+,/hs=s,he=e-1 nextgroup=bibField
+syn match bibVariable contained /[^{}," \t=]/
+syn region bibComment start=/^/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
+syn region bibQuote contained start=/"/ end=/"/ skip=/\(\\"\)/ contains=@bibVarContents
+syn region bibBrace contained start=/{/ end=/}/ skip=/\(\\[{}]\)/ contains=@bibVarContents
+syn region bibParen contained start=/(/ end=/)/ skip=/\(\\[()]\)/ contains=@bibVarContents
+syn region bibField contained start="\S\+\s*=\s*" end=/[}),]/me=e-1 contains=bibEntryKw,bibNSEntryKw,bibBrace,bibParen,bibQuote,bibVariable
+syn region bibEntryData contained start=/[{(]/ms=e+1 end=/[})]/me=e-1 contains=bibKey,bibField
+" 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
+else
+ syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
+endif
+
+" Synchronization
+" ===============
+syn sync match All grouphere bibEntry /^\s*@/
+syn sync maxlines=200
+syn sync minlines=50
+
+" Highlighting defaults
+" =====================
+" 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_bib_syn_inits")
+ if version < 508
+ let did_bib_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink bibType Identifier
+ HiLink bibEntryKw Statement
+ HiLink bibNSEntryKw PreProc
+ HiLink bibKey Special
+ HiLink bibVariable Constant
+ HiLink bibUnescapedSpecial Error
+ HiLink bibComment Comment
+ delcommand HiLink
+endif
+
+let b:current_syntax = "bib"
diff --git a/runtime/syntax/bindzone.vim b/runtime/syntax/bindzone.vim
new file mode 100644
index 000000000..3c23e219f
--- /dev/null
+++ b/runtime/syntax/bindzone.vim
@@ -0,0 +1,98 @@
+" Vim syntax file
+" Language: BIND 8.x zone files (RFC1035)
+" Maintainer: glory hump <rnd@web-drive.ru>
+" Last change: Thu Apr 26 02:16:18 SAMST 2001
+" Filenames: /var/named/*
+" URL: http://rnd.web-drive.ru/vim/syntax/bindzone.vim
+" $Id$
+
+" 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 match
+
+if version >= 600
+ setlocal iskeyword=.,-,48-58,A-Z,a-z,_
+else
+ set iskeyword=.,-,48-58,A-Z,a-z,_
+endif
+
+
+" Master File Format (rfc 1035)
+
+" directives
+syn region zoneRRecord start=+^+ end=+$+ contains=zoneLHSDomain,zoneLHSIP,zoneIllegalDom,zoneWhitespace,zoneComment,zoneParen,zoneSpecial
+syn match zoneDirective /\$ORIGIN\s\+/ nextgroup=zoneDomain,zoneIllegalDom
+syn match zoneDirective /\$TTL\s\+/ nextgroup=zoneTTL
+syn match zoneDirective /\$INCLUDE\s\+/
+syn match zoneDirective /\$GENERATE\s/
+
+syn match zoneWhitespace contained /^\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
+syn match zoneError "\s\+$"
+syn match zoneSpecial contained /^[@.]\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
+syn match zoneSpecial contained /@$/
+
+" domains and IPs
+syn match zoneLHSDomain contained /^[-0-9A-Za-z.]\+\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
+syn match zoneLHSIP contained /^[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\s\+/ nextgroup=zoneTTL,zoneClass,zoneRRType
+syn match zoneIPaddr contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
+syn match zoneDomain contained /\<[0-9A-Za-z][-0-9A-Za-z.]\+\>/
+
+syn match zoneIllegalDom contained /\S*[^-A-Za-z0-9.[:space:]]\S*\>/
+"syn match zoneIllegalDom contained /[0-9]\S*[-A-Za-z]\S*/
+
+" keywords
+syn keyword zoneClass IN CHAOS nextgroup=zoneRRType
+
+syn match zoneTTL contained /\<[0-9HhWwDd]\+\s\+/ nextgroup=zoneClass,zoneRRType
+syn match zoneRRType contained /\s*\<\(NS\|HINFO\)\s\+/ nextgroup=zoneSpecial,zoneDomain
+syn match zoneRRType contained /\s*\<CNAME\s\+/ nextgroup=zoneDomain,zoneSpecial
+syn match zoneRRType contained /\s*\<SOA\s\+/ nextgroup=zoneDomain,zoneIllegalDom
+syn match zoneRRType contained /\s*\<PTR\s\+/ nextgroup=zoneDomain,zoneIllegalDom
+syn match zoneRRType contained /\s*\<MX\s\+/ nextgroup=zoneMailPrio
+syn match zoneRRType contained /\s*\<A\s\+/ nextgroup=zoneIPaddr,zoneIllegalDom
+
+" FIXME: catchup serial number
+syn match zoneSerial contained /\<[0-9]\{9}\>/
+
+syn match zoneMailPrio contained /\<[0-9]\+\s*/ nextgroup=zoneDomain,zoneIllegalDom
+syn match zoneErrParen /)/
+syn region zoneParen contained start=+(+ end=+)+ contains=zoneSerial,zoneTTL,zoneComment
+syn match zoneComment ";.*"
+
+" 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_bind_zone_syn_inits")
+ if version < 508
+ let did_bind_zone_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink zoneComment Comment
+ HiLink zoneDirective Macro
+ HiLink zoneLHSDomain Statement
+ HiLink zoneLHSIP Statement
+ HiLink zoneClass Include
+ HiLink zoneSpecial Special
+ HiLink zoneRRType Type
+ HiLink zoneError Error
+ HiLink zoneErrParen Error
+ HiLink zoneIllegalDom Error
+ HiLink zoneSerial Todo
+ HiLink zoneIPaddr Number
+ HiLink zoneDomain Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "bindzone"
+
+" vim: ts=17
diff --git a/runtime/syntax/blank.vim b/runtime/syntax/blank.vim
new file mode 100644
index 000000000..855433995
--- /dev/null
+++ b/runtime/syntax/blank.vim
@@ -0,0 +1,46 @@
+" Vim syntax file
+" Language: Blank 1.4.1
+" Maintainer: Rafal M. Sulejman <unefunge@friko2.onet.pl>
+" Last change: 21 Jul 2000
+
+" 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
+
+" Blank instructions
+syn match blankInstruction "{[:;,\.+\-*$#@/\\`'"!\|><{}\[\]()?xspo\^&\~=_%]}"
+
+" Common strings
+syn match blankString "\~[^}]"
+
+" Numbers
+syn match blankNumber "\[[0-9]\+\]"
+
+syn case match
+
+" 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_blank_syntax_inits")
+ if version < 508
+ let did_blank_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink blankInstruction Statement
+ HiLink blankNumber Number
+ HiLink blankString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "blank"
+" vim: ts=8
diff --git a/runtime/syntax/btm.vim b/runtime/syntax/btm.vim
new file mode 100644
index 000000000..4fd5b2db9
--- /dev/null
+++ b/runtime/syntax/btm.vim
@@ -0,0 +1,229 @@
+" Vim syntax file
+" Language: 4Dos batch file
+" Maintainer: John Leo Spetz <jls11@po.cwru.edu>
+" Last Change: 2001 May 09
+
+"//Issues to resolve:
+"//- Boolean operators surrounded by period are recognized but the
+"// periods are not highlighted. The only way to do that would
+"// be separate synmatches for each possibility otherwise a more
+"// general \.\i\+\. will highlight anything delimited by dots.
+"//- After unary operators like "defined" can assume token type.
+"// Should there be more of these?
+
+" 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
+
+syn keyword btmStatement call off
+syn keyword btmConditional if iff endiff then else elseiff not errorlevel
+syn keyword btmConditional gt lt eq ne ge le
+syn match btmConditional transparent "\.\i\+\." contains=btmDotBoolOp
+syn keyword btmDotBoolOp contained and or xor
+syn match btmConditional "=="
+syn match btmConditional "!="
+syn keyword btmConditional defined errorlevel exist isalias
+syn keyword btmConditional isdir direxist isinternal islabel
+syn keyword btmRepeat for in do enddo
+
+syn keyword btmTodo contained TODO
+
+" String
+syn cluster btmVars contains=btmVariable,btmArgument,btmBIFMatch
+syn region btmString start=+"+ end=+"+ contains=@btmVars
+syn match btmNumber "\<\d\+\>"
+
+"syn match btmIdentifier "\<\h\w*\>"
+
+" If you don't like tabs
+"syn match btmShowTab "\t"
+"syn match btmShowTabc "\t"
+"syn match btmComment "^\ *rem.*$" contains=btmTodo,btmShowTabc
+
+" Some people use this as a comment line
+" In fact this is a Label
+"syn match btmComment "^\ *:\ \+.*$" contains=btmTodo
+
+syn match btmComment "^\ *rem.*$" contains=btmTodo
+syn match btmComment "^\ *::.*$" contains=btmTodo
+
+syn match btmLabelMark "^\ *:[0-9a-zA-Z_\-]\+\>"
+syn match btmLabelMark "goto [0-9a-zA-Z_\-]\+\>"lc=5
+syn match btmLabelMark "gosub [0-9a-zA-Z_\-]\+\>"lc=6
+
+" syn match btmCmdDivider ">[>&][>&]\="
+syn match btmCmdDivider ">[>&]*"
+syn match btmCmdDivider ">>&>"
+syn match btmCmdDivider "|&\="
+syn match btmCmdDivider "%+"
+syn match btmCmdDivider "\^"
+
+syn region btmEcho start="echo" skip="echo" matchgroup=btmCmdDivider end="%+" end="$" end="|&\=" end="\^" end=">[>&]*" contains=@btmEchos oneline
+syn cluster btmEchos contains=@btmVars,btmEchoCommand,btmEchoParam
+syn keyword btmEchoCommand contained echo echoerr echos echoserr
+syn keyword btmEchoParam contained on off
+
+" this is also a valid Label. I don't use it.
+"syn match btmLabelMark "^\ *:\ \+[0-9a-zA-Z_\-]\+\>"
+
+" //Environment variable can be expanded using notation %var in 4DOS
+syn match btmVariable "%[0-9a-z_\-]\+" contains=@btmSpecialVars
+" //Environment variable can be expanded using notation %var%
+syn match btmVariable "%[0-9a-z_\-]*%" contains=@btmSpecialVars
+" //The following are special variable in 4DOS
+syn match btmVariable "%[=#]" contains=@btmSpecialVars
+syn match btmVariable "%??\=" contains=@btmSpecialVars
+" //Environment variable can be expanded using notation %[var] in 4DOS
+syn match btmVariable "%\[[0-9a-z_\-]*\]"
+" //After some keywords next word should be an environment variable
+syn match btmVariable "defined\s\i\+"lc=8
+syn match btmVariable "set\s\i\+"lc=4
+" //Parameters to batchfiles take the format %<digit>
+syn match btmArgument "%\d\>"
+" //4DOS allows format %<digit>& meaning batchfile parameters digit and up
+syn match btmArgument "%\d\>&"
+" //Variable used by FOR loops sometimes use %%<letter> in batchfiles
+syn match btmArgument "%%\a\>"
+
+" //Show 4DOS built-in functions specially
+syn match btmBIFMatch "%@\w\+\["he=e-1 contains=btmBuiltInFunc
+syn keyword btmBuiltInFunc contained alias ascii attrib cdrom
+syn keyword btmBuiltInFunc contained char clip comma convert
+syn keyword btmBuiltInFunc contained date day dec descript
+syn keyword btmBuiltInFunc contained device diskfree disktotal
+syn keyword btmBuiltInFunc contained diskused dosmem dow dowi
+syn keyword btmBuiltInFunc contained doy ems eval exec execstr
+syn keyword btmBuiltInFunc contained expand ext extended
+syn keyword btmBuiltInFunc contained fileage fileclose filedate
+syn keyword btmBuiltInFunc contained filename fileopen fileread
+syn keyword btmBuiltInFunc contained files fileseek fileseekl
+syn keyword btmBuiltInFunc contained filesize filetime filewrite
+syn keyword btmBuiltInFunc contained filewriteb findclose
+syn keyword btmBuiltInFunc contained findfirst findnext format
+syn keyword btmBuiltInFunc contained full if inc index insert
+syn keyword btmBuiltInFunc contained instr int label left len
+syn keyword btmBuiltInFunc contained lfn line lines lower lpt
+syn keyword btmBuiltInFunc contained makeage makedate maketime
+syn keyword btmBuiltInFunc contained master month name numeric
+syn keyword btmBuiltInFunc contained path random readscr ready
+syn keyword btmBuiltInFunc contained remote removable repeat
+syn keyword btmBuiltInFunc contained replace right search
+syn keyword btmBuiltInFunc contained select sfn strip substr
+syn keyword btmBuiltInFunc contained time timer trim truename
+syn keyword btmBuiltInFunc contained unique upper wild word
+syn keyword btmBuiltInFunc contained words xms year
+
+syn cluster btmSpecialVars contains=btmBuiltInVar,btmSpecialVar
+
+" //Show specialized variables specially
+" syn match btmSpecialVar contained "+"
+syn match btmSpecialVar contained "="
+syn match btmSpecialVar contained "#"
+syn match btmSpecialVar contained "??\="
+syn keyword btmSpecialVar contained cmdline colordir comspec
+syn keyword btmSpecialVar contained copycmd dircmd temp temp4dos
+syn keyword btmSpecialVar contained filecompletion path prompt
+
+" //Show 4DOS built-in variables specially specially
+syn keyword btmBuiltInVar contained _4ver _alias _ansi
+syn keyword btmBuiltInVar contained _apbatt _aplife _apmac _batch
+syn keyword btmBuiltInVar contained _batchline _batchname _bg
+syn keyword btmBuiltInVar contained _boot _ci _cmdproc _co
+syn keyword btmBuiltInVar contained _codepage _column _columns
+syn keyword btmBuiltInVar contained _country _cpu _cwd _cwds _cwp
+syn keyword btmBuiltInVar contained _cwps _date _day _disk _dname
+syn keyword btmBuiltInVar contained _dos _dosver _dow _dowi _doy
+syn keyword btmBuiltInVar contained _dpmi _dv _env _fg _hlogfile
+syn keyword btmBuiltInVar contained _hour _kbhit _kstack _lastdisk
+syn keyword btmBuiltInVar contained _logfile _minute _monitor
+syn keyword btmBuiltInVar contained _month _mouse _ndp _row _rows
+syn keyword btmBuiltInVar contained _second _shell _swapping
+syn keyword btmBuiltInVar contained _syserr _time _transient
+syn keyword btmBuiltInVar contained _video _win _wintitle _year
+
+" //Commands in 4DOS and/or DOS
+syn match btmCommand "\s?"
+syn match btmCommand "^?"
+syn keyword btmCommand alias append assign attrib
+syn keyword btmCommand backup beep break cancel case
+syn keyword btmCommand cd cdd cdpath chcp chdir
+syn keyword btmCommand chkdsk cls color comp copy
+syn keyword btmCommand ctty date debug default defrag
+syn keyword btmCommand del delay describe dir
+syn keyword btmCommand dirhistory dirs diskcomp
+syn keyword btmCommand diskcopy doskey dosshell
+syn keyword btmCommand drawbox drawhline drawvline
+"syn keyword btmCommand echo echoerr echos echoserr
+syn keyword btmCommand edit edlin emm386 endlocal
+syn keyword btmCommand endswitch erase eset except
+syn keyword btmCommand exe2bin exit expand fastopen
+syn keyword btmCommand fc fdisk ffind find format
+syn keyword btmCommand free global gosub goto
+syn keyword btmCommand graftabl graphics help history
+syn keyword btmCommand inkey input join keyb keybd
+syn keyword btmCommand keystack label lh list loadbtm
+syn keyword btmCommand loadhigh lock log md mem
+syn keyword btmCommand memory mirror mkdir mode more
+syn keyword btmCommand move nlsfunc on option path
+syn keyword btmCommand pause popd print prompt pushd
+syn keyword btmCommand quit rd reboot recover ren
+syn keyword btmCommand rename replace restore return
+syn keyword btmCommand rmdir scandisk screen scrput
+syn keyword btmCommand select set setdos setlocal
+syn keyword btmCommand setver share shift sort subst
+syn keyword btmCommand swapping switch sys tee text
+syn keyword btmCommand time timer touch tree truename
+syn keyword btmCommand type unalias undelete unformat
+syn keyword btmCommand unlock unset ver verify vol
+syn keyword btmCommand vscrput y
+
+" 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_btm_syntax_inits")
+ if version < 508
+ let did_btm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink btmLabel Special
+ HiLink btmLabelMark Special
+ HiLink btmCmdDivider Special
+ HiLink btmConditional btmStatement
+ HiLink btmDotBoolOp btmStatement
+ HiLink btmRepeat btmStatement
+ HiLink btmEchoCommand btmStatement
+ HiLink btmEchoParam btmStatement
+ HiLink btmStatement Statement
+ HiLink btmTodo Todo
+ HiLink btmString String
+ HiLink btmNumber Number
+ HiLink btmComment Comment
+ HiLink btmArgument Identifier
+ HiLink btmVariable Identifier
+ HiLink btmEcho String
+ HiLink btmBIFMatch btmStatement
+ HiLink btmBuiltInFunc btmStatement
+ HiLink btmBuiltInVar btmStatement
+ HiLink btmSpecialVar btmStatement
+ HiLink btmCommand btmStatement
+
+ "optional highlighting
+ "HiLink btmShowTab Error
+ "HiLink btmShowTabc Error
+ "hiLink btmIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "btm"
+
+" vim: ts=8
diff --git a/runtime/syntax/c.vim b/runtime/syntax/c.vim
new file mode 100644
index 000000000..759bebb68
--- /dev/null
+++ b/runtime/syntax/c.vim
@@ -0,0 +1,345 @@
+" Vim syntax file
+" Language: C
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2004 Feb 04
+
+" 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
+
+" A bunch of useful C keywords
+syn keyword cStatement goto break return continue asm
+syn keyword cLabel case default
+syn keyword cConditional if else switch
+syn keyword cRepeat while for do
+
+syn keyword cTodo contained TODO FIXME XXX
+
+" cCommentGroup allows adding matches for special things in comments
+syn cluster cCommentGroup contains=cTodo
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+if !exists("c_no_utf")
+ 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
+ " cCppString: same as cString, but ends at end of line
+ syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
+else
+ syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+ syn match cFormat display "%%" contained
+ syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+ " cCppString: same as cString, but ends at end of line
+ syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+endif
+
+syn match cCharacter "L\='[^\\]'"
+syn match cCharacter "L'[^']*'" contains=cSpecial
+if exists("c_gnu")
+ syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'"
+ syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
+else
+ syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'"
+ syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
+endif
+syn match cSpecialCharacter display "L\='\\\o\{1,3}'"
+syn match cSpecialCharacter display "'\\x\x\{1,2}'"
+syn match cSpecialCharacter display "L'\\x\x\+'"
+
+"when wanted, highlight trailing white space
+if exists("c_space_errors")
+ if !exists("c_no_trail_space_error")
+ syn match cSpaceError display excludenl "\s\+$"
+ endif
+ if !exists("c_no_tab_space_error")
+ syn match cSpaceError display " \+\t"me=e-1
+ endif
+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,cCommentSkip,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
+if 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 "[{}]\|<%\|%>"
+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
+ " 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
+
+"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
+" Same, but without octal error (for comments)
+syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
+syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
+syn match cOctalZero display contained "\<0"
+syn match cFloat display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match cFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match cFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+if !exists("c_no_c99")
+ "hexadecimal floating point number, optional leading digits, with dot, with exponent
+ syn match cFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
+ "hexadecimal floating point number, with leading digits, optional dot, with exponent
+ syn match cFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
+endif
+
+" flag an octal number with wrong digits
+syn match cOctalError display contained "0\o*[89]\d*"
+syn case match
+
+if exists("c_comment_strings")
+ " A comment can contain cString, cCharacter and cNumber.
+ " But a "*/" inside a cString in a cComment DOES end the comment! So we
+ " 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
+ syntax region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell
+else
+ syn region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
+ syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell
+endif
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match cCommentError display "\*/"
+syntax match cCommentStartError display "/\*"me=e-1 contained
+
+syn keyword cOperator sizeof
+if exists("c_gnu")
+ syn keyword cStatement __asm__
+ syn keyword cOperator typeof __real__ __imag__
+endif
+syn keyword cType int long short char void
+syn keyword cType signed unsigned float double
+if !exists("c_no_ansi") || exists("c_ansi_typedefs")
+ syn keyword cType size_t ssize_t wchar_t ptrdiff_t sig_atomic_t fpos_t
+ syn keyword cType clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
+ 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 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
+ syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t
+ syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t
+ syn keyword cType uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
+ syn keyword cType intptr_t uintptr_t
+ syn keyword cType intmax_t uintmax_t
+endif
+if exists("c_gnu")
+ syn keyword cType __label__ __complex__ __volatile__
+endif
+
+syn keyword cStructure struct union enum typedef
+syn keyword cStorageClass static register auto volatile extern const
+if exists("c_gnu")
+ syn keyword cStorageClass inline __attribute__
+endif
+if !exists("c_no_c99")
+ syn keyword cStorageClass inline restrict
+endif
+
+if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
+ if exists("c_gnu")
+ syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__
+ endif
+ syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__
+ syn keyword cConstant __STDC_VERSION__
+ syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX
+ syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX
+ syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN
+ syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX
+ syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN
+ syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX
+ if !exists("c_no_c99")
+ syn keyword cConstant LLONG_MAX ULLONG_MAX
+ syn keyword cConstant INT8_MIN INT16_MIN INT32_MIN INT64_MIN
+ syn keyword cConstant INT8_MAX INT16_MAX INT32_MAX INT64_MAX
+ syn keyword cConstant UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
+ syn keyword cConstant INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
+ syn keyword cConstant INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
+ syn keyword cConstant UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
+ syn keyword cConstant INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
+ syn keyword cConstant INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
+ syn keyword cConstant UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
+ syn keyword cConstant INTPTR_MIN INTPTR_MAX UINTPTR_MAX
+ syn keyword cConstant INTMAX_MIN INTMAX_MAX UINTMAX_MAX
+ syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX
+ syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX
+ endif
+ syn keyword cConstant FLT_RADIX FLT_ROUNDS
+ syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON
+ syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON
+ syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON
+ syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP
+ syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP
+ syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP
+ syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP
+ syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP
+ syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP
+ syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL
+ syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY
+ syn keyword cConstant LC_NUMERIC LC_TIME
+ syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN
+ syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM
+ " Add POSIX signals as well...
+ syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP
+ syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV
+ syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU
+ syn keyword cConstant SIGUSR1 SIGUSR2
+ syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF
+ syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam
+ syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
+ syn keyword cConstant TMP_MAX stderr stdin stdout
+ syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
+ " Add POSIX errors as well
+ syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
+ syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
+ syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR
+ syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV
+ syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS
+ syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM
+ syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV
+ " math.h
+ syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4
+ syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2
+endif
+if !exists("c_no_c99") " ISO C99
+ syn keyword cConstant true false
+endif
+
+" Accept %: for # (C99)
+syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+if !exists("c_no_if0")
+ syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
+ 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
+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 region cDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 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
+" 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
+syn match cUserCont display ";\s*\I\i*\s*:$" contains=@cLabelGroup
+syn match cUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
+syn match cUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
+
+syn match cUserLabel display "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match cBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match cBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+if exists("c_minlines")
+ let b:c_minlines = c_minlines
+else
+ if !exists("c_no_if0")
+ let b:c_minlines = 50 " #if 0 constructs can be long
+ else
+ let b:c_minlines = 15 " mostly for () constructs
+ endif
+endif
+exec "syn sync ccomment cComment minlines=" . b:c_minlines
+
+" 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_c_syn_inits")
+ if version < 508
+ let did_c_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cFormat cSpecial
+ HiLink cCppString cString
+ HiLink cCommentL cComment
+ HiLink cCommentStart cComment
+ HiLink cLabel Label
+ HiLink cUserLabel Label
+ HiLink cConditional Conditional
+ HiLink cRepeat Repeat
+ HiLink cCharacter Character
+ HiLink cSpecialCharacter cSpecial
+ HiLink cNumber Number
+ HiLink cOctal Number
+ HiLink cOctalZero PreProc " link this to Error if you want
+ HiLink cFloat Float
+ HiLink cOctalError cError
+ HiLink cParenError cError
+ HiLink cErrInParen cError
+ HiLink cErrInBracket cError
+ HiLink cCommentError cError
+ HiLink cCommentStartError cError
+ HiLink cSpaceError cError
+ HiLink cSpecialError cError
+ HiLink cOperator Operator
+ HiLink cStructure Structure
+ HiLink cStorageClass StorageClass
+ HiLink cInclude Include
+ HiLink cPreProc PreProc
+ HiLink cDefine Macro
+ HiLink cIncluded cString
+ HiLink cError Error
+ HiLink cStatement Statement
+ HiLink cPreCondit PreCondit
+ HiLink cType Type
+ HiLink cConstant Constant
+ HiLink cCommentString cString
+ HiLink cComment2String cString
+ HiLink cCommentSkip cComment
+ HiLink cString String
+ HiLink cComment Comment
+ HiLink cSpecial SpecialChar
+ HiLink cTodo Todo
+ HiLink cCppSkip cCppOut
+ HiLink cCppOut2 cCppOut
+ HiLink cCppOut Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "c"
+
+" vim: ts=8
diff --git a/runtime/syntax/calendar.vim b/runtime/syntax/calendar.vim
new file mode 100644
index 000000000..9834267ae
--- /dev/null
+++ b/runtime/syntax/calendar.vim
@@ -0,0 +1,104 @@
+" Vim syntax file
+" Language: calendar(1) file.
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/calendar/
+" Latest Revision: 2004-05-06
+" arch-tag: d714127d-469d-43bd-9c79-c2a46ec54535
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword calendarTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region calendarComment matchgroup=calendarComment start='/\*' end='\*/' contains=calendarTodo
+
+" Strings
+syn region calendarCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=calendarSpecial
+syn match calendarSpecial display contained '\\\%(x\x\+\|\o\{1,3}\|.\|$\)'
+syn match calendarSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)"
+
+" cpp(1) Preprocessor directives (adapted from syntax/c.vim)
+
+syn region calendarPreCondit start='^\s*#\s*\%(if\|ifdef\|ifndef\|elif\)\>' skip='\\$' end='$' contains=calendarComment,calendarCppString
+syn match calendarPreCondit display '^\s*#\s*\%(else\|endif\)\>'
+syn region calendarCppOut start='^\s*#\s*if\s\+0\+' end='.\@=\|$' contains=calendarCppOut2
+syn region calendarCppOut2 contained start='0' end='^\s*#\s*\%(endif\|else\|elif\)\>' contains=calendarSpaceError,calendarCppSkip
+syn region calendarCppSkip contained start='^\s*#\s*\%(if\|ifdef\|ifndef\)\>' skip='\\$' end='^\s*#\s*endif\>' contains=calendarSpaceError,calendarCppSkip
+syn region calendarIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match calendarIncluded display contained '<[^>]*>'
+syn match calendarInclude display '^\s*#\s*include\>\s*["<]' contains=calendarIncluded
+syn cluster calendarPreProcGroup contains=calendarPreCondit,calendarIncluded,calendarInclude,calendarDefine,calendarCppOut,calendarCppOut2,calendarCppSkip,calendarString,calendarSpecial,calendarTodo
+syn region calendarDefine start='^\s*#\s*\%(define\|undef\)\>' skip='\\$' end='$' contains=ALLBUT,@calendarPreProcGroup
+syn region calendarPreProc start='^\s*#\s*\%(pragma\|line\|warning\|warn\|error\)\>' skip='\\$' end='$' keepend contains=ALLBUT,@calendarPreProcGroup
+
+" Keywords
+syn keyword calendarKeyword CHARSET BODUN LANG
+syn case ignore
+syn keyword calendarKeyword Easter Pashka
+syn case match
+
+" Dates
+syn case ignore
+syn match calendarNumber '\<\d\+\>'
+syn keyword calendarMonth Jan[uary] Feb[ruary] Mar[ch] Apr[il] May Jun[e]
+syn keyword calendarMonth Jul[y] Aug[ust] Sep[tember] Oct[ober]
+syn keyword calendarMonth Nov[ember] Dec[ember]
+syn match calendarMonth '\<\%(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)\.'
+syn keyword calendarWeekday Mon[day] Tue[sday] Wed[nesday] Thu[rsday]
+syn keyword calendarWeekday Fri[day] Sat[urday] Sun[day]
+syn match calendarWeekday '\<\%(Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Sun\)\.' nextgroup=calendarWeekdayMod
+syn match calendarWeekdayMod '[+-]\d\+\>'
+syn case match
+
+" Times
+syn match calendarTime '\<\%([01]\=\d\|2[0-3]\):[0-5]\d\%(:[0-5]\d\)\='
+syn match calendarTime '\<\%(0\=[1-9]\|1[0-2]\):[0-5]\d\%(:[0-5]\d\)\=\s*[AaPp][Mm]'
+
+" Variables
+syn match calendarVariable '\*'
+
+let b:c_minlines = 50 " #if 0 constructs can be long
+exec "syn sync ccomment calendarComment minlines=" . b:c_minlines
+
+" 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_calendar_syn_inits")
+ if version < 508
+ let did_calendar_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink calendarTodo Todo
+ HiLink calendarComment Comment
+ HiLink calendarCppString String
+ HiLink calendarSpecial SpecialChar
+ HiLink calendarPreCondit PreCondit
+ HiLink calendarCppOut Comment
+ HiLink calendarCppOut2 calendarCppOut
+ HiLink calendarCppSkip calendarCppOut
+ HiLink calendarIncluded String
+ HiLink calendarInclude Include
+ HiLink calendarDefine Macro
+ HiLink calendarPreProc PreProc
+ HiLink calendarKeyword Keyword
+ HiLink calendarNumber Number
+ HiLink calendarMonth String
+ HiLink calendarWeekday String
+ HiLink calendarWeekdayMod Special
+ HiLink calendarTime Number
+ HiLink calendarVariable Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "calendar"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/catalog.vim b/runtime/syntax/catalog.vim
new file mode 100644
index 000000000..2f8e388eb
--- /dev/null
+++ b/runtime/syntax/catalog.vim
@@ -0,0 +1,30 @@
+" Vim syntax file
+" Language: sgml catalog file
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" Filenames: /etc/sgml.catalog
+" $Id$
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+" strings
+syn region catalogString start=+"+ skip=+\\\\\|\\"+ end=+"+ keepend
+syn region catalogString start=+'+ skip=+\\\\\|\\'+ end=+'+ keepend
+
+syn region catalogComment start=+--+ end=+--+ contains=catalogTodo
+syn keyword catalogTodo TODO FIXME XXX contained display
+syn keyword catalogKeyword DOCTYPE OVERRIDE PUBLIC DTDDECL ENTITY display
+
+
+" The default highlighting.
+hi def link catalogString String
+hi def link catalogComment Comment
+hi def link catalogTodo Todo
+hi def link catalogKeyword Statement
+
+let b:current_syntax = "catalog"
diff --git a/runtime/syntax/cdl.vim b/runtime/syntax/cdl.vim
new file mode 100644
index 000000000..69f124bdd
--- /dev/null
+++ b/runtime/syntax/cdl.vim
Binary files differ
diff --git a/runtime/syntax/cf.vim b/runtime/syntax/cf.vim
new file mode 100644
index 000000000..6cf111d99
--- /dev/null
+++ b/runtime/syntax/cf.vim
@@ -0,0 +1,151 @@
+" Vim syntax file
+" Language: Cold Fusion
+" Maintainer: Jeff Lanzarotta (jefflanzarotta@yahoo.com)
+" URL: http://lanzarotta.tripod.com/vim/syntax/cf.vim.zip
+" Last Change: October 15, 2001
+" Usage: Since Cold Fusion has its own version of html comments,
+" make sure that you put
+" 'let html_wrong_comments=1' in your _vimrc file.
+
+" 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
+
+" Use all the stuff from the original html syntax file.
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+
+" Tag names.
+syn keyword cfTagName contained cfabort cfapplet cfapplication cfassociate
+syn keyword cfTagName contained cfauthenticate cfbreak cfcache cfcol
+syn keyword cfTagName contained cfcollection cfcontent cfcookie cfdirectory
+syn keyword cfTagName contained cferror cfexit cffile cfform cfftp cfgrid
+syn keyword cfTagName contained cfgridcolumn cfgridrow cfgridupdate cfheader
+syn keyword cfTagName contained cfhtmlhead cfhttp cfhttpparam
+syn keyword cfTagName contained cfif cfelseif cfelse
+syn keyword cfTagName contained cfinclude cfindex cfinput cfinsert
+syn keyword cfTagName contained cfldap cflocation cflock cfloop cfmail
+syn keyword cfTagName contained cfmodule cfobject cfoutput cfparam cfpop
+syn keyword cfTagName contained cfprocparam cfprocresult cfquery cfregistry
+syn keyword cfTagName contained cfreport cfschedule cfscript cfsearch cfselect
+syn keyword cfTagName contained cfset cfsetting cfslider cfstoredproc
+syn keyword cfTagName contained cfswitch cfcase cfdefaultcase
+syn keyword cfTagName contained cftable cftextinput cfthrow cftransaction
+syn keyword cfTagName contained cftree cftreeitem
+syn keyword cfTagName contained cftry cfcatch
+syn keyword cfTagName contained cfupdate cfwddx
+
+" Legal arguments.
+syn keyword cfArg contained accept action addnewline addtoken agentname align
+syn keyword cfArg contained appendkey applicationtimeout attachmentpath
+syn keyword cfArg contained attributecollection attributes basetag bgcolor
+syn keyword cfArg contained blockfactor body bold border branch cachedafter
+syn keyword cfArg contained cachedwithin cc cfsqltype checked class clientmanagement
+syn keyword cfArg contained clientstorage colheaderalign colheaderbold colheaderfont
+syn keyword cfArg contained colheaderfontsize colheaderitalic colheaders collection
+syn keyword cfArg contained colspacing columns completepath connection context
+syn keyword cfArg contained criteria custom1 custom2 data dataalign datacollection
+syn keyword cfArg contained datasource dbname dbserver dbtype dbvarname debug default
+syn keyword cfArg contained delete deletebutton deletefile delimiter destination detail
+syn keyword cfArg contained directory display dn domain enablecab enablecfoutputonly
+syn keyword cfArg contained enctype enddate endtime entry errorcode expand expires
+syn keyword cfArg contained expireurl expression extendedinfo extensions external
+syn keyword cfArg contained file filefield filter font fontsize formfields formula
+syn keyword cfArg contained from grid griddataalign gridlines groovecolor group header
+syn keyword cfArg contained headeralign headerbold headerfont headerfontsize headeritalic
+syn keyword cfArg contained headerlines height highlighthref href hrefkey hscroll hspace
+syn keyword cfArg contained htmltable img imgopen imgstyle index input insert insertbutton
+syn keyword cfArg contained interval isolation italic key keyonly label language mailerid
+syn keyword cfArg contained mailto maxlength maxrows message messagenumber method
+syn keyword cfArg contained mimeattach mode multiple name namecomplict newdirectory
+syn keyword cfArg contained notsupported null numberformat onerror onsubmit onvalidate
+syn keyword cfArg contained operation orderby output parrent passthrough password path
+syn keyword cfArg contained picturebar port procedure protocol provider providerdsn
+syn keyword cfArg contained proxybypass proxyserver publish query queryasroot range
+syn keyword cfArg contained recurse refreshlabel report requesttimeout required reset
+syn keyword cfArg contained resoleurl resultset retrycount returncode rowheaderalign
+syn keyword cfArg contained rowheaderbold rowheaderfont rowheaderfontsize rowheaderitalic
+syn keyword cfArg contained rowheaders rowheaderwidth rowheight scale scope secure
+syn keyword cfArg contained securitycontext select selectcolor selected selectmode server
+syn keyword cfArg contained sessionmanagement sessiontimeout setclientcookies setcookie
+syn keyword cfArg contained showdebugoutput showerror size sort sortascendingbutton
+syn keyword cfArg contained sortdescendingbutton source sql start startdate startrow starttime
+syn keyword cfArg contained step stoponerror subject tablename tableowner tablequalifier
+syn keyword cfArg contained target task template text textcolor textqualifier
+syn keyword cfArg contained throwonfailure throwontimeout timeout title to toplevelvariable
+syn keyword cfArg contained type url urlpath username usetimezoneinfo validate value
+syn keyword cfArg contained variable vscroll vspace width
+
+" Cold Fusion Functions.
+syn keyword cfFunctionName contained Abs ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt
+syn keyword cfFunctionName contained ArrayInsertAt ArrayIsEmpty ArrayLen ArrayMax
+syn keyword cfFunctionName contained ArrayMin ArrayNew ArrayPrepend ArrayResize ArraySet
+syn keyword cfFunctionName contained ArraySort ArraySum ArraySwap ArrayToList Asc Atn
+syn keyword cfFunctionName contained BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot
+syn keyword cfFunctionName contained BitOr BitSHLN BitSHRN BitXor CJustify Ceiling Chr
+syn keyword cfFunctionName contained Compare CompareNoCase Cos CreateDate CreateDateTime
+syn keyword cfFunctionName contained CreateODBCDate CreateODBCDateTime CreateODBCTime
+syn keyword cfFunctionName contained CreateTime CreateTimeSpan DE DateAdd DateCompare DateDiff
+syn keyword cfFunctionName contained DateFormat DatePart Day DayOfWeek DayOfWeekAsString
+syn keyword cfFunctionName contained DayOfYear DaysInMonth DaysInYear DecimalFormat DecrementValue
+syn keyword cfFunctionName contained Decrypt DeleteClientVariable DirectoryExists DollarFormat
+syn keyword cfFunctionName contained Encrypt Evaluate Exp ExpandPath FileExists Find FindNoCase
+syn keyword cfFunctionName contained FindOneOf FirstDayOfMonth Fix FormatBaseN GetBaseTagData
+syn keyword cfFunctionName contained GetBaseTagList GetClientVariablesList GetDirectoryFromPath
+syn keyword cfFunctionName contained GetFileFromPath GetLocale GetTempDirectory GetTempFile
+syn keyword cfFunctionName contained GetTemplatePath GetTickCount GetToken HTMLCodeFormat
+syn keyword cfFunctionName contained HTMLEditFormat Hour IIf IncrementValue InputBaseN Insert
+syn keyword cfFunctionName contained Int IsArray IsAuthenticated IsAuthorized IsBoolean IsDate
+syn keyword cfFunctionName contained IsDebugMode IsDefined IsLeapYear IsNumeric IsNumericDate
+syn keyword cfFunctionName contained IsQuery IsSimpleValue IsStruct LCase LJustify LSCurrencyFormat
+syn keyword cfFunctionName contained LSDateFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat
+syn keyword cfFunctionName contained LSParseCurrency LSParseDateTime LSParseNumber LSTimeFormat
+syn keyword cfFunctionName contained LTrim Left Len ListAppend ListChangeDelims ListContains
+syn keyword cfFunctionName contained ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst
+syn keyword cfFunctionName contained ListGetAt ListInsertAt ListLast ListLen ListPrepend ListRest
+syn keyword cfFunctionName contained ListSetAt ListToArray Log Log10 Max Mid Min Minute Month
+syn keyword cfFunctionName contained MonthAsString Now NumberFormat ParagraphFormat ParameterExists
+syn keyword cfFunctionName contained ParseDateTime Pi PreserveSingleQuotes Quarter QueryAddRow
+syn keyword cfFunctionName contained QueryNew QuerySetCell QuotedValueList REFind REFindNoCase
+syn keyword cfFunctionName contained REReplace REReplaceNoCase RJustify RTrim Rand RandRange
+syn keyword cfFunctionName contained Randomize RemoveChars RepeatString Replace ReplaceList
+syn keyword cfFunctionName contained ReplaceNoCase Reverse Right Round Second SetLocale SetVariable
+syn keyword cfFunctionName contained Sgn Sin SpanExcluding SpanIncluding Sqr StripCR StructClear
+syn keyword cfFunctionName contained StructCopy StructCount StructDelete StructFind StructInsert
+syn keyword cfFunctionName contained StructIsEmpty StructKeyExists StructNew StructUpdate Tan
+syn keyword cfFunctionName contained TimeFormat Trim UCase URLEncodedFormat Val ValueList Week
+syn keyword cfFunctionName contained WriteOutput Year YesNoFormat
+
+syn cluster htmlTagNameCluster add=cfTagName
+syn cluster htmlArgCluster add=cfArg,cfFunctionName
+
+syn region cfFunctionRegion start='#' end='#' contains=cfFunctionName
+
+" Define the default highlighting.
+" For version 5.x and earlier, only when not done already.
+" For version 5.8 and later, only when and item doesn't have highlighting yet.
+if version >= 508 || !exists("did_cf_syn_inits")
+ if version < 508
+ let did_cf_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cfTagName Statement
+ HiLink cfArg Type
+ HiLink cfFunctionName Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cf"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/cfg.vim b/runtime/syntax/cfg.vim
new file mode 100644
index 000000000..c6e8b2953
--- /dev/null
+++ b/runtime/syntax/cfg.vim
@@ -0,0 +1,60 @@
+" Vim syntax file
+" Language: Good old CFG files
+" Maintainer: Igor N. Prischepoff (igor@tyumbit.ru, pri_igor@mail.ru)
+" Last change: 2001 Sep 02
+
+" 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
+
+" case off
+syn case ignore
+syn keyword CfgOnOff ON OFF YES NO TRUE FALSE contained
+syn match UncPath "\\\\\p*" contained
+"Dos Drive:\Path
+syn match CfgDirectory "[a-zA-Z]:\\\p*" contained
+"Parameters
+syn match CfgParams ".*="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
+
+" Sections
+syn match CfgSection "\[.*\]"
+syn match CfgSection "{.*}"
+
+" String
+syn match CfgString "\".*\"" contained
+syn match CfgString "'.*'" contained
+
+" Comments (Everything before '#' or '//' or ';')
+syn match CfgComment "#.*"
+syn match CfgComment ";.*"
+syn match CfgComment "\/\/.*"
+
+" Define the default hightlighting.
+" 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_cfg_syn_inits")
+ if version < 508
+ let did_cfg_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink CfgOnOff Label
+ HiLink CfgComment Comment
+ HiLink CfgSection Type
+ HiLink CfgString String
+ HiLink CfgParams Keyword
+ HiLink CfgValues Constant
+ HiLink CfgDirectory Directory
+ HiLink UncPath Directory
+
+ delcommand HiLink
+endif
+let b:current_syntax = "cfg"
+" vim:ts=8
diff --git a/runtime/syntax/ch.vim b/runtime/syntax/ch.vim
new file mode 100644
index 000000000..2e787c8cc
--- /dev/null
+++ b/runtime/syntax/ch.vim
@@ -0,0 +1,53 @@
+" Vim syntax file
+" Language: Ch
+" Maintainer: SoftIntegration, Inc. <info@softintegration.com>
+" URL: http://www.softintegration.com/download/vim/syntax/ch.vim
+" Last change: 2004 May 16
+" Created based on cpp.vim
+"
+" Ch is a C/C++ interpreter with many high level extensions
+"
+
+" 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
+if version < 600
+ so <sfile>:p:h/c.vim
+else
+ runtime! syntax/c.vim
+ unlet b:current_syntax
+endif
+
+" Ch extentions
+
+syn keyword chStatement new delete this
+syn keyword chAccess public private
+syn keyword chStorageClass __declspec(global) __declspec(local)
+syn keyword chStructure class
+syn keyword chType string_t array
+
+" Default highlighting
+if version >= 508 || !exists("did_ch_syntax_inits")
+ if version < 508
+ let did_ch_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink chAccess chStatement
+ HiLink chExceptions Exception
+ HiLink chStatement Statement
+ HiLink chType Type
+ HiLink chStructure Structure
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ch"
+
+" vim: ts=8
diff --git a/runtime/syntax/change.vim b/runtime/syntax/change.vim
new file mode 100644
index 000000000..e9bf88b9d
--- /dev/null
+++ b/runtime/syntax/change.vim
@@ -0,0 +1,42 @@
+" Vim syntax file
+" Language: WEB Changes
+" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: April 25, 2001
+
+" Details of the change mechanism of the WEB and CWEB languages can be found
+" in the articles by Donald E. Knuth and Silvio Levy cited in "web.vim" and
+" "cweb.vim" respectively.
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" We distinguish two groups of material, (a) stuff between @x..@y, and
+" (b) stuff between @y..@z. WEB/CWEB ignore everything else in a change file.
+syn region changeFromMaterial start="^@x.*$"ms=e+1 end="^@y.*$"me=s-1
+syn region changeToMaterial start="^@y.*$"ms=e+1 end="^@z.*$"me=s-1
+
+" 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_change_syntax_inits")
+ if version < 508
+ let did_change_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink changeFromMaterial String
+ HiLink changeToMaterial Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "change"
+
+" vim: ts=8
diff --git a/runtime/syntax/changelog.vim b/runtime/syntax/changelog.vim
new file mode 100644
index 000000000..a3eddda5f
--- /dev/null
+++ b/runtime/syntax/changelog.vim
@@ -0,0 +1,78 @@
+" Vim syntax file
+" Language: generic ChangeLog file
+" Written By: Gediminas Paulauskas <menesis@delfi.lt>
+" Maintainer: Corinna Vinschen <vinschen@redhat.com>
+" Last Change: June 1, 2003
+
+" 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
+
+if exists('b:changelog_spacing_errors')
+ let s:spacing_errors = b:changelog_spacing_errors
+elseif exists('g:changelog_spacing_errors')
+ let s:spacing_errors = g:changelog_spacing_errors
+else
+ let s:spacing_errors = 1
+endif
+
+if s:spacing_errors
+ syn match changelogError "^ \+"
+endif
+
+syn match changelogText "^\s.*$" contains=changelogMail,changelogNumber,changelogMonth,changelogDay,changelogError
+syn match changelogHeader "^\S.*$" contains=changelogNumber,changelogMonth,changelogDay,changelogMail
+if version < 600
+ syn region changelogFiles start="^\s\+[+*]\s" end=":\s" end="^$" contains=changelogBullet,changelogColon,changelogError keepend
+ syn region changelogFiles start="^\s\+[([]" end=":\s" end="^$" contains=changelogBullet,changelogColon,changelogError keepend
+ syn match changelogColon contained ":\s"
+else
+ syn region changelogFiles start="^\s\+[+*]\s" end=":" end="^$" contains=changelogBullet,changelogColon,changeLogFuncs,changelogError keepend
+ syn region changelogFiles start="^\s\+[([]" end=":" end="^$" contains=changelogBullet,changelogColon,changeLogFuncs,changelogError keepend
+ syn match changeLogFuncs contained "(.\{-})" extend
+ syn match changeLogFuncs contained "\[.\{-}]" extend
+ syn match changelogColon contained ":"
+endif
+syn match changelogBullet contained "^\s\+[+*]\s" contains=changelogError
+syn match changelogMail contained "<[A-Za-z0-9\._:+-]\+@[A-Za-z0-9\._-]\+>"
+syn keyword changelogMonth contained jan feb mar apr may jun jul aug sep oct nov dec
+syn keyword changelogDay contained mon tue wed thu fri sat sun
+syn match changelogNumber contained "[.-]*[0-9]\+"
+
+" 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_changelog_syntax_inits")
+ if version < 508
+ let did_changelog_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink changelogText Normal
+ HiLink changelogBullet Type
+ HiLink changelogColon Type
+ HiLink changelogFiles Comment
+ if version >= 600
+ HiLink changelogFuncs Comment
+ endif
+ HiLink changelogHeader Statement
+ HiLink changelogMail Special
+ HiLink changelogNumber Number
+ HiLink changelogMonth Number
+ HiLink changelogDay Number
+ HiLink changelogError Folded
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "changelog"
+
+" vim: ts=8
diff --git a/runtime/syntax/chaskell.vim b/runtime/syntax/chaskell.vim
new file mode 100644
index 000000000..3f764d0e8
--- /dev/null
+++ b/runtime/syntax/chaskell.vim
@@ -0,0 +1,18 @@
+" Vim syntax file
+" Language: Haskell supporting c2hs binding hooks
+" Maintainer: Armin Sander <armin@mindwalker.org>
+" Last Change: 2001 November 1
+"
+" 2001 November 1: Changed commands for sourcing haskell.vim
+
+" Enable binding hooks
+let b:hs_chs=1
+
+" Include standard Haskell highlighting
+if version < 600
+ source <sfile>:p:h/haskell.vim
+else
+ runtime! syntax/haskell.vim
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/cheetah.vim b/runtime/syntax/cheetah.vim
new file mode 100644
index 000000000..7eb17567c
--- /dev/null
+++ b/runtime/syntax/cheetah.vim
@@ -0,0 +1,60 @@
+" Vim syntax file
+" Language: Cheetah template engine
+" Maintainer: Max Ischenko <mfi@ukr.net>
+" Last Change: 2003-05-11
+"
+" Missing features:
+" match invalid syntax, like bad variable ref. or unmatched closing tag
+" PSP-style tags: <% .. %> (obsoleted feature)
+" doc-strings and header comments (rarely used feature)
+
+" 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
+
+syntax case match
+
+syn keyword cheetahKeyword contained if else unless elif for in not
+syn keyword cheetahKeyword contained while repeat break continue pass end
+syn keyword cheetahKeyword contained set del attr def global include raw echo
+syn keyword cheetahKeyword contained import from extends implements
+syn keyword cheetahKeyword contained assert raise try catch finally
+syn keyword cheetahKeyword contained errorCatcher breakpoint silent cache filter
+syn match cheetahKeyword contained "\<compiler-settings\>"
+
+" Matches cached placeholders
+syn match cheetahPlaceHolder "$\(\*[0-9.]\+[wdhms]\?\*\|\*\)\?\h\w*\(\.\h\w*\)*" display
+syn match cheetahPlaceHolder "$\(\*[0-9.]\+[wdhms]\?\*\|\*\)\?{\h\w*\(\.\h\w*\)*}" display
+syn match cheetahDirective "^\s*#[^#].*$" contains=cheetahPlaceHolder,cheetahKeyword,cheetahComment display
+
+syn match cheetahContinuation "\\$"
+syn match cheetahComment "##.*$" display
+syn region cheetahMultiLineComment start="#\*" end="\*#"
+
+" 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_cheetah_syn_inits")
+ if version < 508
+ let did_cheetah_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cheetahPlaceHolder Identifier
+ HiLink cheetahDirective PreCondit
+ HiLink cheetahKeyword Define
+ HiLink cheetahContinuation Special
+ HiLink cheetahComment Comment
+ HiLink cheetahMultiLineComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cheetah"
+
diff --git a/runtime/syntax/chill.vim b/runtime/syntax/chill.vim
new file mode 100644
index 000000000..ca00cd95e
--- /dev/null
+++ b/runtime/syntax/chill.vim
@@ -0,0 +1,191 @@
+" Vim syntax file
+" Language: CHILL
+" Maintainer: YoungSang Yoon <image@lgic.co.kr>
+" Last change: 2004 Jan 21
+"
+
+" first created by image@lgic.co.kr & modified by paris@lgic.co.kr
+
+" CHILL (CCITT High Level Programming Language) is used for
+" developing software of ATM switch at LGIC (LG Information
+" & Communications LTd.)
+
+
+" 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
+
+" A bunch of useful CHILL keywords
+syn keyword chillStatement goto GOTO return RETURN returns RETURNS
+syn keyword chillLabel CASE case ESAC esac
+syn keyword chillConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi
+syn keyword chillLogical NOT not
+syn keyword chillRepeat while WHILE for FOR do DO od OD TO to
+syn keyword chillProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop
+syn keyword chillBlock PROC proc PROCESS process
+syn keyword chillSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT peristent SET set EVER ever
+
+syn keyword chillTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match chillSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$"
+syn region chillString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chillSpecial
+syn match chillCharacter "'[^\\]'"
+syn match chillSpecialCharacter "'\\.'"
+syn match chillSpecialCharacter "'\\\o\{1,3\}'"
+
+"when wanted, highlight trailing white space
+if exists("chill_space_errors")
+ syn match chillSpaceError "\s*$"
+ syn match chillSpaceError " \+\t"me=e-1
+endif
+
+"catch errors caused by wrong parenthesis
+syn cluster chillParenGroup contains=chillParenError,chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
+syn region chillParen transparent start='(' end=')' contains=ALLBUT,@chillParenGroup
+syn match chillParenError ")"
+syn match chillInParen contained "[{}]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match chillNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match chillFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match chillFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match chillFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match chillNumber "\<0x\x\+\(u\=l\=\|lu\)\>"
+"syn match chillIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+" flag an octal number with wrong digits
+syn match chillOctalError "\<0\o*[89]"
+
+if exists("chill_comment_strings")
+ " A comment can contain chillString, chillCharacter and chillNumber.
+ " But a "*/" inside a chillString in a chillComment DOES end the comment! So we
+ " need to use a special type of chillString: chillCommentString, 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 chillCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region chillCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chillSpecial,chillCommentSkip
+ syntax region chillComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chillSpecial
+ syntax region chillComment start="/\*" end="\*/" contains=chillTodo,chillCommentString,chillCharacter,chillNumber,chillFloat,chillSpaceError
+ syntax match chillComment "//.*" contains=chillTodo,chillComment2String,chillCharacter,chillNumber,chillSpaceError
+else
+ syn region chillComment start="/\*" end="\*/" contains=chillTodo,chillSpaceError
+ syn match chillComment "//.*" contains=chillTodo,chillSpaceError
+endif
+syntax match chillCommentError "\*/"
+
+syn keyword chillOperator SIZE size
+syn keyword chillType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance
+syn keyword chillStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE
+"syn keyword chillStorageClass
+syn keyword chillBlock PROC proc END end
+syn keyword chillScope GRANT grant SEIZE seize
+syn keyword chillEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE
+syn keyword chillBoolConst true TRUE false FALSE
+
+syn region chillPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chillComment,chillString,chillCharacter,chillNumber,chillCommentError,chillSpaceError
+syn region chillIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match chillIncluded contained "<[^>]*>"
+syn match chillInclude "^\s*#\s*include\>\s*["<]" contains=chillIncluded
+"syn match chillLineSkip "\\$"
+syn cluster chillPreProcGroup contains=chillPreCondit,chillIncluded,chillInclude,chillDefine,chillInParen,chillUserLabel
+syn region chillDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
+syn region chillPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
+
+" Highlight User Labels
+syn cluster chillMultiGroup contains=chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
+syn region chillMulti transparent start='?' end=':' contains=ALLBUT,@chillMultiGroup
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn match chillUserCont "^\s*\I\i*\s*:$" contains=chillUserLabel
+syn match chillUserCont ";\s*\I\i*\s*:$" contains=chillUserLabel
+syn match chillUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
+syn match chillUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
+
+syn match chillUserLabel "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match chillBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match chillBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+syn match chillBracket contained "[<>]"
+if !exists("chill_minlines")
+ let chill_minlines = 15
+endif
+exec "syn sync ccomment chillComment minlines=" . chill_minlines
+
+" 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_ch_syntax_inits")
+ if version < 508
+ let did_ch_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink chillLabel Label
+ HiLink chillUserLabel Label
+ HiLink chillConditional Conditional
+ " hi chillConditional term=bold ctermfg=red guifg=red gui=bold
+
+ HiLink chillRepeat Repeat
+ HiLink chillProcess Repeat
+ HiLink chillSignal Repeat
+ HiLink chillCharacter Character
+ HiLink chillSpecialCharacter chillSpecial
+ HiLink chillNumber Number
+ HiLink chillFloat Float
+ HiLink chillOctalError chillError
+ HiLink chillParenError chillError
+ HiLink chillInParen chillError
+ HiLink chillCommentError chillError
+ HiLink chillSpaceError chillError
+ HiLink chillOperator Operator
+ HiLink chillStructure Structure
+ HiLink chillBlock Operator
+ HiLink chillScope Operator
+ "hi chillEDML term=underline ctermfg=DarkRed guifg=Red
+ HiLink chillEDML PreProc
+ "hi chillBoolConst term=bold ctermfg=brown guifg=brown
+ HiLink chillBoolConst Constant
+ "hi chillLogical term=bold ctermfg=brown guifg=brown
+ HiLink chillLogical Constant
+ HiLink chillStorageClass StorageClass
+ HiLink chillInclude Include
+ HiLink chillPreProc PreProc
+ HiLink chillDefine Macro
+ HiLink chillIncluded chillString
+ HiLink chillError Error
+ HiLink chillStatement Statement
+ HiLink chillPreCondit PreCondit
+ HiLink chillType Type
+ HiLink chillCommentError chillError
+ HiLink chillCommentString chillString
+ HiLink chillComment2String chillString
+ HiLink chillCommentSkip chillComment
+ HiLink chillString String
+ HiLink chillComment Comment
+ " hi chillComment term=None ctermfg=lightblue guifg=lightblue
+ HiLink chillSpecial SpecialChar
+ HiLink chillTodo Todo
+ HiLink chillBlock Statement
+ "HiLink chillIdentifier Identifier
+ HiLink chillBracket Delimiter
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "chill"
+
+" vim: ts=8
diff --git a/runtime/syntax/cl.vim b/runtime/syntax/cl.vim
new file mode 100644
index 000000000..3c6f41ba8
--- /dev/null
+++ b/runtime/syntax/cl.vim
@@ -0,0 +1,105 @@
+" Vim syntax file
+" Language: cl ("Clever Language" by Multibase, http://www.mbase.com.au)
+" Filename extensions: *.ent, *.eni
+" Maintainer: Philip Uren <philu@system77.com>
+" Last update: Wed May 2 10:30:30 EST 2001
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,-,
+else
+ set iskeyword=@,48-57,_,-,
+endif
+
+syn case ignore
+
+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\>"
+
+" If and while regions
+syn region clLoop transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
+syn region clIf transparent matchgroup=clConditional start="\<if\>" matchgroup=clConditional end="\<endif\>" contains=ALLBUT,clBreak,clProcedure
+
+" Make those TODO notes and debugging stand out!
+syn keyword clTodo contained TODO BUG DEBUG FIX
+syn keyword clDebug contained debug
+
+syn match clComment "#.*$" contains=clTodo,clNeedsWork
+syn region clProcedure oneline start="^\s*[{}]" end="$"
+syn match clInclude "^\s*include\s.*"
+
+" We don't put "debug" in the clSetOptions;
+" we contain it in clSet so we can make it stand out.
+syn keyword clSetOptions transparent aauto abort align convert E fill fnum goback hangup justify null_exit output rauto rawprint rawdisplay repeat skip tab trim
+syn match clSet "^\s*set\s.*" contains=clSetOptions,clDebug
+
+syn match clPreProc "^\s*#P.*"
+
+syn keyword clConditional else elsif
+syn keyword clWhile continue endloop
+" 'break' needs to be a region so we can sync on it above.
+syn region clBreak oneline start="^\s*break" end="$"
+
+syn match clOperator "[!;|)(:.><+*=-]"
+
+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 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
+
+syn keyword clFunction asc asize chr name random slen srandom day getarg getcgi getenv lcase scat sconv sdel skey smult srep substr sword trim ucase match
+
+syn keyword clStatement clear clear_eol clear_eos close copy create unique with where empty define define ldefine delay_form delete escape exit_block exit_do exit_process field fork format get getfile getnext getprev goto head join maintain message no_join on_eop on_key on_exit on_delete openin openout openapp pause popenin popenout popenio print put range read redisplay refresh restart_block screen select sleep text unlock write and not or do
+
+" 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_cl_syntax_inits")
+ if version < 508
+ let did_cl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink clifError Error
+ HiLink clWhile Repeat
+ HiLink clConditional Conditional
+ HiLink clDebug Debug
+ HiLink clNeedsWork Todo
+ HiLink clTodo Todo
+ HiLink clComment Comment
+ HiLink clProcedure Procedure
+ HiLink clBreak Procedure
+ HiLink clInclude Include
+ HiLink clSetOption Statement
+ HiLink clSet Identifier
+ HiLink clPreProc PreProc
+ HiLink clOperator Operator
+ HiLink clNumber Number
+ HiLink clString String
+ HiLink clQuote Delimiter
+ HiLink clReserved Identifier
+ HiLink clFunction Function
+ HiLink clStatement Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cl"
+
+" vim: ts=4 sw=4
diff --git a/runtime/syntax/clean.vim b/runtime/syntax/clean.vim
new file mode 100644
index 000000000..233ecbda1
--- /dev/null
+++ b/runtime/syntax/clean.vim
@@ -0,0 +1,94 @@
+" Vim syntax file
+" 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
+
+" 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
+
+" 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
+syn keyword cleanSpecialType World ProcId Void Files File
+syn keyword cleanModuleSystem module implementation definition system
+syn keyword cleanTypeClass class instance export
+
+" To do some Denotation Highlighting
+syn keyword cleanBoolDenot True False
+syn region cleanStringDenot start=+"+ end=+"+
+syn match cleanCharDenot "'.'"
+syn match cleanCharsDenot "'[^'\\]*\(\\.[^'\\]\)*'" contained
+syn match cleanIntegerDenot "[+-~]\=\<\(\d\+\|0[0-7]\+\|0x[0-9A-Fa-f]\+\)\>"
+syn match cleanRealDenot "[+-~]\=\<\d\+\.\d+\(E[+-~]\=\d+\)\="
+
+" To highlight the use of lists, tuples and arrays
+syn region cleanList start="\[" end="\]" contains=ALL
+syn region cleanRecord start="{" end="}" contains=ALL
+syn region cleanArray start="{:" end=":}" contains=ALL
+syn match cleanTuple "([^=]*,[^=]*)" contains=ALL
+
+" To do some Comment Highlighting
+syn region cleanComment start="/\*" end="\*/" contains=cleanComment
+syn match cleanComment "//.*"
+
+" Now for some useful typedefinitionrecognition
+syn match cleanFuncTypeDef "\([a-zA-Z].*\|(\=[-~@#$%^?!+*<>\/|&=:]\+)\=\)[ \t]*\(infix[lr]\=\)\=[ \t]*\d\=[ \t]*::.*->.*" contains=cleanSpecial
+
+" 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_clean_syntax_init")
+ if version < 508
+ let did_clean_syntax_init = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Comments
+ HiLink cleanComment Comment
+ " Constants and denotations
+ HiLink cleanCharsDenot String
+ HiLink cleanStringDenot String
+ HiLink cleanCharDenot Character
+ HiLink cleanIntegerDenot Number
+ HiLink cleanBoolDenot Boolean
+ HiLink cleanRealDenot Float
+ " Identifiers
+ " Statements
+ HiLink cleanTypeClass Keyword
+ HiLink cleanConditional Conditional
+ HiLink cleanLabel Label
+ HiLink cleanKeyword Keyword
+ " Generic Preprocessing
+ HiLink cleanInclude Include
+ HiLink cleanModuleSystem PreProc
+ " Type
+ HiLink cleanBasicType Type
+ HiLink cleanSpecialType Type
+ HiLink cleanFuncTypeDef Typedef
+ " Special
+ HiLink cleanSpecial Special
+ HiLink cleanList Special
+ HiLink cleanArray Special
+ HiLink cleanRecord Special
+ HiLink cleanTuple Special
+ " Error
+ " Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "clean"
+
+" vim: ts=4
diff --git a/runtime/syntax/clipper.vim b/runtime/syntax/clipper.vim
new file mode 100644
index 000000000..989b257f7
--- /dev/null
+++ b/runtime/syntax/clipper.vim
@@ -0,0 +1,143 @@
+" Vim syntax file:
+" 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
+
+" 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
+
+" 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_]*\>"
+syn match clipperUserVariable "\<[a-z]\>"
+
+" Clipper is case insensitive ( see "exception" above )
+syn case ignore
+
+" Clipper keywords ( in no particular order )
+syn keyword clipperStatement ACCEPT APPEND BLANK FROM AVERAGE CALL CANCEL
+syn keyword clipperStatement CLEAR ALL GETS MEMORY TYPEAHEAD CLOSE
+syn keyword clipperStatement COMMIT CONTINUE SHARED NEW PICT
+syn keyword clipperStatement COPY FILE STRUCTURE STRU EXTE TO COUNT
+syn keyword clipperStatement CREATE FROM NIL
+syn keyword clipperStatement DELETE FILE DIR DISPLAY EJECT ERASE FIND GO
+syn keyword clipperStatement INDEX INPUT VALID WHEN
+syn keyword clipperStatement JOIN KEYBOARD LABEL FORM LIST LOCATE MENU TO
+syn keyword clipperStatement NOTE PACK QUIT READ
+syn keyword clipperStatement RECALL REINDEX RELEASE RENAME REPLACE REPORT
+syn keyword clipperStatement RETURN FORM RESTORE
+syn keyword clipperStatement RUN SAVE SEEK SELECT
+syn keyword clipperStatement SKIP SORT STORE SUM TEXT TOTAL TYPE UNLOCK
+syn keyword clipperStatement UPDATE USE WAIT ZAP
+syn keyword clipperStatement BEGIN SEQUENCE
+syn keyword clipperStatement SET ALTERNATE BELL CENTURY COLOR CONFIRM CONSOLE
+syn keyword clipperStatement CURSOR DATE DECIMALS DEFAULT DELETED DELIMITERS
+syn keyword clipperStatement DEVICE EPOCH ESCAPE EXACT EXCLUSIVE FILTER FIXED
+syn keyword clipperStatement FORMAT FUNCTION INTENSITY KEY MARGIN MESSAGE
+syn keyword clipperStatement ORDER PATH PRINTER PROCEDURE RELATION SCOREBOARD
+syn keyword clipperStatement SOFTSEEK TYPEAHEAD UNIQUE WRAP
+syn keyword clipperStatement BOX CLEAR GET PROMPT SAY ? ??
+syn keyword clipperStatement DELETE TAG GO RTLINKCMD TMP DBLOCKINFO
+syn keyword clipperStatement DBEVALINFO DBFIELDINFO DBFILTERINFO DBFUNCTABLE
+syn keyword clipperStatement DBOPENINFO DBORDERCONDINFO DBORDERCREATEINF
+syn keyword clipperStatement DBORDERINFO DBRELINFO DBSCOPEINFO DBSORTINFO
+syn keyword clipperStatement DBSORTITEM DBTRANSINFO DBTRANSITEM WORKAREA
+
+" Conditionals
+syn keyword clipperConditional CASE OTHERWISE ENDCASE
+syn keyword clipperConditional IF ELSE ENDIF IIF IFDEF IFNDEF
+
+" Loops
+syn keyword clipperRepeat DO WHILE ENDDO
+syn keyword clipperRepeat FOR TO NEXT STEP
+
+" Visibility
+syn keyword clipperStorageClass ANNOUNCE STATIC
+syn keyword clipperStorageClass DECLARE EXTERNAL LOCAL MEMVAR PARAMETERS
+syn keyword clipperStorageClass PRIVATE PROCEDURE PUBLIC REQUEST STATIC
+syn keyword clipperStorageClass FIELD FUNCTION
+syn keyword clipperStorageClass EXIT PROCEDURE INIT PROCEDURE
+
+" Operators
+syn match clipperOperator "$\|%\|&\|+\|-\|->\|!"
+syn match clipperOperator "\.AND\.\|\.NOT\.\|\.OR\."
+syn match clipperOperator ":=\|<\|<=\|<>\|!=\|#\|=\|==\|>\|>=\|@"
+syn match clipperOperator "*"
+
+" Numbers
+syn match clipperNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+
+" Includes
+syn region clipperIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match clipperIncluded contained "<[^>]*>"
+syn match clipperInclude "^\s*#\s*include\>\s*["<]" contains=clipperIncluded
+
+" String and Character constants
+syn region clipperString start=+"+ end=+"+
+syn region clipperString start=+'+ end=+'+
+
+" Delimiters
+syn match ClipperDelimiters "[()]\|[\[\]]\|[{}]\|[||]"
+
+" Special
+syn match clipperLineContinuation ";"
+
+" This is from Bram Moolenaar:
+if exists("c_comment_strings")
+ " A comment can contain cString, cCharacter and cNumber.
+ " But a "*/" inside a cString in a clipperComment DOES end the comment!
+ " So we need to use a special type of cString: clipperCommentString, 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 clipperCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region clipperCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=clipperCommentSkip
+ syntax region clipperComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$"
+ syntax region clipperComment start="/\*" end="\*/" contains=clipperCommentString,clipperCharacter,clipperNumber,clipperString
+ syntax match clipperComment "//.*" contains=clipperComment2String,clipperCharacter,clipperNumber
+else
+ syn region clipperComment start="/\*" end="\*/"
+ syn match clipperComment "//.*"
+endif
+syntax match clipperCommentError "\*/"
+
+" Lines beggining with an "*" are comments too
+syntax match clipperComment "^\*.*"
+
+
+" 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_clipper_syntax_inits")
+ if version < 508
+ let did_clipper_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink clipperConditional Conditional
+ HiLink clipperRepeat Repeat
+ HiLink clipperNumber Number
+ HiLink clipperInclude Include
+ HiLink clipperComment Comment
+ HiLink clipperOperator Operator
+ HiLink clipperStorageClass StorageClass
+ HiLink clipperStatement Statement
+ HiLink clipperString String
+ HiLink clipperFunction Function
+ HiLink clipperLineContinuation Special
+ HiLink clipperDelimiters Delimiter
+ HiLink clipperUserVariable Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "clipper"
+
+" vim: ts=4
diff --git a/runtime/syntax/cobol.vim b/runtime/syntax/cobol.vim
new file mode 100644
index 000000000..0b59f720b
--- /dev/null
+++ b/runtime/syntax/cobol.vim
@@ -0,0 +1,177 @@
+" Vim syntax file
+" Language: COBOL
+" Maintainers: Davyd Ondrejko <vondraco@columbus.rr.com>
+" (formerly Sitaram Chamarty <sitaram@diac.com> and
+" James Mitchell <james_mitchell@acm.org>)
+" Last change: 2001 Sep 02
+
+" 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
+
+" MOST important - else most of the keywords wont work!
+if version < 600
+ set isk=@,48-57,-
+else
+ setlocal isk=@,48-57,-
+endif
+
+syn case ignore
+
+syn match cobolKeys "^\a\{1,6\}" contains=cobolReserved
+syn keyword cobolReserved contained ACCEPT ACCESS ADD ADDRESS ADVANCING AFTER ALPHABET ALPHABETIC
+syn keyword cobolReserved contained ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED ALS
+syn keyword cobolReserved contained ALTERNATE AND ANY ARE AREA AREAS ASCENDING ASSIGN AT AUTHOR BEFORE BINARY
+syn keyword cobolReserved contained BLANK BLOCK BOTTOM BY CANCEL CBLL CD CF CH CHARACTER CHARACTERS CLASS
+syn keyword cobolReserved contained CLOCK-UNITS CLOSE COBOL CODE CODE-SET COLLATING COLUMN COMMA COMMON
+syn keyword cobolReserved contained COMMUNICATIONS COMPUTATIONAL COMPUTE CONFIGURATION CONTENT CONTINUE
+syn keyword cobolReserved contained CONTROL CONVERTING CORR CORRESPONDING COUNT CURRENCY DATA DATE DATE-COMPILED
+syn keyword cobolReserved contained DATE-WRITTEN DAY DAY-OF-WEEK DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE
+syn keyword cobolReserved contained DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING DECIMAL-POINT
+syn keyword cobolReserved contained DELARATIVES DELETE DELIMITED DELIMITER DEPENDING DESCENDING DESTINATION
+syn keyword cobolReserved contained DETAIL DISABLE DISPLAY DIVIDE DIVISION DOWN DUPLICATES DYNAMIC EGI ELSE EMI
+syn keyword cobolReserved contained ENABLE END-ADD END-COMPUTE END-DELETE END-DIVIDE END-EVALUATE END-IF
+syn keyword cobolReserved contained END-MULTIPLY END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN
+syn keyword cobolReserved contained END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING
+syn keyword cobolReserved contained END-WRITE ENVIRONMENT EQUAL ERROR ESI EVALUATE EVERY EXCEPTION EXIT
+syn keyword cobolReserved contained EXTEND EXTERNAL FALSE FD FILE FILE-CONTROL FILLER FINAL FIRST FOOTING FOR FROM
+syn keyword cobolReserved contained GENERATE GIVING GLOBAL GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES I-O
+syn keyword cobolReserved contained I-O-CONTROL IDENTIFICATION IN INDEX INDEXED INDICATE INITIAL INITIALIZE
+syn keyword cobolReserved contained INITIATE INPUT INPUT-OUTPUT INSPECT INSTALLATION INTO IS JUST
+syn keyword cobolReserved contained JUSTIFIED KEY LABEL LAST LEADING LEFT LENGTH LOCK MEMORY
+syn keyword cobolReserved contained MERGE MESSAGE MODE MODULES MOVE MULTIPLE MULTIPLY NATIVE NEGATIVE NEXT NO NOT
+syn keyword cobolReserved contained NUMBER NUMERIC NUMERIC-EDITED OBJECT-COMPUTER OCCURS OF OFF OMITTED ON OPEN
+syn keyword cobolReserved contained OPTIONAL OR ORDER ORGANIZATION OTHER OUTPUT OVERFLOW PACKED-DECIMAL PADDING
+syn keyword cobolReserved contained PAGE PAGE-COUNTER PERFORM PF PH PIC PICTURE PLUS POINTER POSITION POSITIVE
+syn keyword cobolReserved contained PRINTING PROCEDURE PROCEDURES PROCEDD PROGRAM PROGRAM-ID PURGE QUEUE QUOTES
+syn keyword cobolReserved contained RANDOM RD READ RECEIVE RECORD RECORDS REDEFINES REEL REFERENCE REFERENCES
+syn keyword cobolReserved contained RELATIVE RELEASE REMAINDER REMOVAL REPLACE REPLACING REPORT REPORTING
+syn keyword cobolReserved contained REPORTS RERUN RESERVE RESET RETURN RETURNING REVERSED REWIND REWRITE RF RH
+syn keyword cobolReserved contained RIGHT ROUNDED RUN SAME SD SEARCH SECTION SECURITY SEGMENT SEGMENT-LIMITED
+syn keyword cobolReserved contained SELECT SEND SENTENCE SEPARATE SEQUENCE SEQUENTIAL SET SIGN SIZE SORT
+syn keyword cobolReserved contained SORT-MERGE SOURCE SOURCE-COMPUTER SPECIAL-NAMES STANDARD
+syn keyword cobolReserved contained STANDARD-1 STANDARD-2 START STATUS STOP STRING SUB-QUEUE-1 SUB-QUEUE-2
+syn keyword cobolReserved contained SUB-QUEUE-3 SUBTRACT SUM SUPPRESS SYMBOLIC SYNC SYNCHRONIZED TABLE TALLYING
+syn keyword cobolReserved contained TAPE TERMINAL TERMINATE TEST TEXT THAN THEN THROUGH THRU TIME TIMES TO TOP
+syn keyword cobolReserved contained TRAILING TRUE TYPE UNIT UNSTRING UNTIL UP UPON USAGE USE USING VALUE VALUES
+syn keyword cobolReserved contained VARYING WHEN WITH WORDS WORKING-STORAGE WRITE
+syn match cobolReserved contained "\<CONTAINS\>"
+syn match cobolReserved contained "\<\(IF\|INVALID\|END\|EOP\)\>"
+syn match cobolReserved contained "\<ALL\>"
+
+syn keyword cobolConstant SPACE SPACES NULL ZERO ZEROES ZEROS LOW-VALUE LOW-VALUES
+
+syn match cobolMarker "^.\{6\}"
+syn match cobolBadLine "^.\{6\}[^ D\-*$/].*"hs=s+6
+
+" If comment mark somehow gets into column past Column 7.
+syn match cobolBadLine "^.\{6\}\s\+\*.*"
+
+syn match cobolNumber "\<-\=\d*\.\=\d\+\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<S*9\+\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<$*\.\=9\+\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<Z*\.\=9\+\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<V9\+\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<9\+V\>" contains=cobolMarker,cobolComment
+syn match cobolPic "\<-\+[Z9]\+\>" contains=cobolMarker,cobolComment
+syn match cobolTodo "todo" contained
+syn match cobolComment "^.\{6\}\*.*"hs=s+6 contains=cobolTodo,cobolMarker
+syn match cobolComment "^.\{6\}/.*"hs=s+6 contains=cobolTodo,cobolMarker
+syn match cobolComment "^.\{6\}C.*"hs=s+6 contains=cobolTodo,cobolMarker
+syn match cobolCompiler "^.\{6\}$.*"hs=s+6
+
+" For MicroFocus or other inline comments, include this line.
+" syn region cobolComment start="*>" end="$" contains=cobolTodo,cobolMarker
+
+syn keyword cobolGoTo GO GOTO
+syn keyword cobolCopy COPY
+
+" cobolBAD: things that are BAD NEWS!
+syn keyword cobolBAD ALTER ENTER RENAMES
+
+" cobolWatch: things that are important when trying to understand a program
+syn keyword cobolWatch OCCURS DEPENDING VARYING BINARY COMP REDEFINES
+syn keyword cobolWatch REPLACING RUN
+syn match cobolWatch "COMP-[123456XN]"
+
+syn keyword cobolEXECs EXEC END-EXEC
+
+
+syn match cobolDecl "^.\{6} \{1,4}\(0\=1\|77\|78\) "hs=s+7,he=e-1 contains=cobolMarker
+syn match cobolDecl "^.\{6} \+[1-4]\d "hs=s+7,he=e-1 contains=cobolMarker
+syn match cobolDecl "^.\{6} \+0\=[2-9] "hs=s+7,he=e-1 contains=cobolMarker
+syn match cobolDecl "^.\{6} \+66 "hs=s+7,he=e-1 contains=cobolMarker
+
+syn match cobolWatch "^.\{6} \+88 "hs=s+7,he=e-1 contains=cobolMarker
+
+syn match cobolBadID "\k\+-\($\|[^-A-Z0-9]\)"
+
+syn keyword cobolCALLs CALL CANCEL GOBACK PERFORM INVOKE
+syn match cobolCALLs "EXIT \+PROGRAM"
+syn match cobolExtras /\<VALUE \+\d\+\./hs=s+6,he=e-1
+
+syn match cobolString /"[^"]*\("\|$\)/
+syn match cobolString /'[^']*\('\|$\)/
+
+syn region cobolLine start="^.\{6} " end="$" contains=ALL
+
+if exists("cobol_legacy_code")
+syn region cobolCondFlow contains=ALLBUT,cobolLine start="\<\(IF\|INVALID\|END\|EOP\)\>" skip=/\('\|"\)[^"]\{-}\("\|'\|$\)/ end="\." keepend
+endif
+
+if ! exists("cobol_legacy_code")
+ " catch junk in columns 1-6 for modern code
+ syn match cobolBAD "^ \{0,5\}[^ ].*"
+endif
+
+" many legacy sources have junk in columns 1-6: must be before others
+" Stuff after column 72 is in error - must be after all other "match" entries
+if exists("cobol_legacy_code")
+ syn match cobolBadLine "^.\{6}[^*/].\{66,\}"
+else
+ syn match cobolBadLine "^.\{6}.\{67,\}"
+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_cobol_syntax_inits")
+ if version < 508
+ let did_cobol_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cobolBAD Error
+ HiLink cobolBadID Error
+ HiLink cobolBadLine Error
+ HiLink cobolMarker Comment
+ HiLink cobolCALLs Function
+ HiLink cobolComment Comment
+ HiLink cobolKeys Comment
+ HiLink cobolAreaB Special
+ HiLink cobolCompiler PreProc
+ HiLink cobolCondFlow Special
+ HiLink cobolCopy PreProc
+ HiLink cobolDecl Type
+ HiLink cobolExtras Special
+ HiLink cobolGoTo Special
+ HiLink cobolConstant Constant
+ HiLink cobolNumber Constant
+ HiLink cobolPic Constant
+ HiLink cobolReserved Statement
+ HiLink cobolString Constant
+ HiLink cobolTodo Todo
+ HiLink cobolWatch Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cobol"
+
+" vim: ts=6 nowrap
diff --git a/runtime/syntax/colortest.vim b/runtime/syntax/colortest.vim
new file mode 100644
index 000000000..b08b21f95
--- /dev/null
+++ b/runtime/syntax/colortest.vim
@@ -0,0 +1,65 @@
+" Vim script for testing colors
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Contributors: Rafael Garcia-Suarez, Charles Campbell
+" Last Change: 2001 Jul 28
+
+" edit this file, then do ":source %", and check if the colors match
+
+" black black_on_white white_on_black
+" black_on_black black_on_black
+" darkred darkred_on_white white_on_darkred
+" darkred_on_black black_on_darkred
+" darkgreen darkgreen_on_white white_on_darkgreen
+" darkgreen_on_black black_on_darkgreen
+" brown brown_on_white white_on_brown
+" brown_on_black black_on_brown
+" darkblue darkblue_on_white white_on_darkblue
+" darkblue_on_black black_on_darkblue
+" darkmagenta darkmagenta_on_white white_on_darkmagenta
+" darkmagenta_on_black black_on_darkmagenta
+" darkcyan darkcyan_on_white white_on_darkcyan
+" darkcyan_on_black black_on_darkcyan
+" lightgray lightgray_on_white white_on_lightgray
+" lightgray_on_black black_on_lightgray
+" darkgray darkgray_on_white white_on_darkgray
+" darkgray_on_black black_on_darkgray
+" red red_on_white white_on_red
+" red_on_black black_on_red
+" green green_on_white white_on_green
+" green_on_black black_on_green
+" yellow yellow_on_white white_on_yellow
+" yellow_on_black black_on_yellow
+" blue blue_on_white white_on_blue
+" blue_on_black black_on_blue
+" magenta magenta_on_white white_on_magenta
+" magenta_on_black black_on_magenta
+" cyan cyan_on_white white_on_cyan
+" cyan_on_black black_on_cyan
+" white white_on_white white_on_white
+" white_on_black black_on_white
+" grey grey_on_white white_on_grey
+" grey_on_black black_on_grey
+" lightred lightred_on_white white_on_lightred
+" lightred_on_black black_on_lightred
+" lightgreen lightgreen_on_white white_on_lightgreen
+" lightgreen_on_black black_on_lightgreen
+" lightyellow lightyellow_on_white white_on_lightyellow
+" lightyellow_on_black black_on_lightyellow
+" lightblue lightblue_on_white white_on_lightblue
+" lightblue_on_black black_on_lightblue
+" lightmagenta lightmagenta_on_white white_on_lightmagenta
+" lightmagenta_on_black black_on_lightmagenta
+" lightcyan lightcyan_on_white white_on_lightcyan
+" lightcyan_on_black black_on_lightcyan
+
+syn clear
+8
+while search("_on_", "W") < 55
+ let col1 = substitute(expand("<cword>"), '\(\a\+\)_on_\a\+', '\1', "")
+ let col2 = substitute(expand("<cword>"), '\a\+_on_\(\a\+\)', '\1', "")
+ exec 'hi col_'.col1.'_'.col2.' ctermfg='.col1.' guifg='.col1.' ctermbg='.col2.' guibg='.col2
+ exec 'syn keyword col_'.col1.'_'.col2.' '.col1.'_on_'.col2
+endwhile
+8,55g/^" \a/exec 'hi col_'.expand("<cword>").' ctermfg='.expand("<cword>").' guifg='.expand("<cword>")|
+ \ exec 'syn keyword col_'.expand("<cword>")." ".expand("<cword>")
+nohlsearch
diff --git a/runtime/syntax/conf.vim b/runtime/syntax/conf.vim
new file mode 100644
index 000000000..d08de4f76
--- /dev/null
+++ b/runtime/syntax/conf.vim
@@ -0,0 +1,41 @@
+" Vim syntax file
+" Language: generic configure file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Apr 25
+
+" 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 keyword confTodo contained TODO FIXME XXX
+" Avoid matching "text#text", used in /etc/disktab and /etc/gettytab
+syn match confComment "^#.*" contains=confTodo
+syn match confComment "\s#.*"ms=s+1 contains=confTodo
+syn region confString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline
+syn region confString start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline
+
+" 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_conf_syntax_inits")
+ if version < 508
+ let did_conf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink confComment Comment
+ HiLink confTodo Todo
+ HiLink confString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "conf"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/config.vim b/runtime/syntax/config.vim
new file mode 100644
index 000000000..c02799d32
--- /dev/null
+++ b/runtime/syntax/config.vim
@@ -0,0 +1,57 @@
+" Vim syntax file
+" Language: configure.in script: M4 with sh
+" Maintainer: Christian Hammesr <ch@lathspell.westend.com>
+" Last Change: 2001 May 09
+
+" Well, I actually even do not know much about m4. This explains why there
+" is probably very much missing here, yet !
+" But I missed a good hilighting when editing my GNU autoconf/automake
+" script, so I wrote this quick and dirty patch.
+
+
+" 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
+
+" define the config syntax
+syn match configdelimiter "[()\[\];,]"
+syn match configoperator "[=|&\*\+\<\>]"
+syn match configcomment "\(dnl.*\)\|\(#.*\)"
+syn match configfunction "\<[A-Z_][A-Z0-9_]*\>"
+syn match confignumber "[-+]\=\<\d\+\(\.\d*\)\=\>"
+syn keyword configkeyword if then else fi test for in do done
+syn keyword configspecial cat rm eval
+syn region configstring start=+"+ skip=+\\"+ end=+"+
+syn region configstring start=+`+ skip=+\\'+ end=+'+
+syn region configstring start=+`+ skip=+\\'+ end=+`+
+
+" 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_config_syntax_inits")
+ if version < 508
+ let did_config_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink configdelimiter Delimiter
+ HiLink configoperator Operator
+ HiLink configcomment Comment
+ HiLink configfunction Function
+ HiLink confignumber Number
+ HiLink configkeyword Keyword
+ HiLink configspecial Special
+ HiLink configstring String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "config"
+
+" vim: ts=4
diff --git a/runtime/syntax/cpp.vim b/runtime/syntax/cpp.vim
new file mode 100644
index 000000000..feb89ee61
--- /dev/null
+++ b/runtime/syntax/cpp.vim
@@ -0,0 +1,62 @@
+" Vim syntax file
+" Language: C++
+" Maintainer: Ken Shan <ccshan@post.harvard.edu>
+" Last Change: 2002 Jul 15
+
+" 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
+if version < 600
+ so <sfile>:p:h/c.vim
+else
+ runtime! syntax/c.vim
+ unlet b:current_syntax
+endif
+
+" C++ extentions
+syn keyword cppStatement new delete this friend using
+syn keyword cppAccess public protected private
+syn keyword cppType inline virtual explicit export bool wchar_t
+syn keyword cppExceptions throw try catch
+syn keyword cppOperator operator typeid
+syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
+syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
+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
+
+" The minimum and maximum operators in GNU C++
+syn match cppMinMax "[<>]?"
+
+" Default highlighting
+if version >= 508 || !exists("did_cpp_syntax_inits")
+ if version < 508
+ let did_cpp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink cppAccess cppStatement
+ HiLink cppCast cppStatement
+ HiLink cppExceptions Exception
+ HiLink cppOperator Operator
+ HiLink cppStatement Statement
+ HiLink cppType Type
+ HiLink cppStorageClass StorageClass
+ HiLink cppStructure Structure
+ HiLink cppNumber Number
+ HiLink cppBoolean Boolean
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cpp"
+
+" vim: ts=8
diff --git a/runtime/syntax/crm.vim b/runtime/syntax/crm.vim
new file mode 100644
index 000000000..4a1e3bc41
--- /dev/null
+++ b/runtime/syntax/crm.vim
@@ -0,0 +1,61 @@
+" Vim syntax file
+" Language: CRM114
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/crm/
+" Latest Revision: 2004-05-22
+" arch-tag: a3d3eaaf-4700-44ff-b332-f6c42c036883
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword crmTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region crmComment matchgroup=crmComment start='#' end='$' end='\\#' contains=crmTodo
+
+" Variables
+syn match crmVariable ':[*#@]:[^:]\{-1,}:'
+
+" Special Characters
+syn match crmSpecial '\\\%(x\x\x\|o\o\o\o\|[]nrtabvf0>)};/\\]\)'
+
+" Statements
+syn keyword crmStatement insert noop accept alius alter classify eval exit
+syn keyword crmStatement fail fault goto hash intersect isolate input learn
+syn keyword crmStatement liaf match output syscall trap union window
+
+" Regexes
+syn region crmRegex matchgroup=crmRegex start='/' skip='\\/' end='/' contains=crmVariable
+
+" Labels
+syn match crmLabel '^\s*:[[:graph:]]\+:'
+
+" 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_crm_syn_inits")
+ if version < 508
+ let did_crm_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink crmTodo Todo
+ HiLink crmComment Comment
+ HiLink crmVariable Identifier
+ HiLink crmSpecial SpecialChar
+ HiLink crmStatement Statement
+ HiLink crmRegex String
+ HiLink crmLabel Label
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "crm"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/crontab.vim b/runtime/syntax/crontab.vim
new file mode 100644
index 000000000..b7b8ef6f1
--- /dev/null
+++ b/runtime/syntax/crontab.vim
@@ -0,0 +1,69 @@
+" Vim syntax file
+" Language: crontab 2.3.3
+" Maintainer: John Hoelzel johnh51@users.sourceforge.net
+" Last change: Mon Jun 9 2003
+" Filenames: /tmp/crontab.* used by "crontab -e"
+" URL: http://johnh51.get.to/vim/syntax/crontab.vim
+"
+" crontab line format:
+" Minutes Hours Days Months Days_of_Week Commands # comments
+
+" 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
+
+syntax match crontabMin "\_^[0-9\-\/\,\.]\{}\>\|\*" nextgroup=crontabHr skipwhite
+syntax match crontabHr "\<[0-9\-\/\,\.]\{}\>\|\*" nextgroup=crontabDay skipwhite contained
+syntax match crontabDay "\<[0-9\-\/\,\.]\{}\>\|\*" nextgroup=crontabMnth skipwhite contained
+
+syntax match crontabMnth "\<[a-z0-9\-\/\,\.]\{}\>\|\*" nextgroup=crontabDow skipwhite contained
+syntax keyword crontabMnth12 contained jan feb mar apr may jun jul aug sep oct nov dec
+
+syntax match crontabDow "\<[a-z0-9\-\/\,\.]\{}\>\|\*" nextgroup=crontabCmd skipwhite contained
+syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
+
+" syntax region crontabCmd start="\<[a-z0-9\/\(]" end="$" nextgroup=crontabCmnt skipwhite contained contains=crontabCmnt keepend
+
+syntax region crontabCmd start="\S" end="$" nextgroup=crontabCmnt skipwhite contained contains=crontabCmnt keepend
+syntax match crontabCmnt /#.*/
+
+" 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_crontab_syn_inits")
+ if version < 508
+ let did_crontab_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink crontabMin Number
+ HiLink crontabHr PreProc
+ HiLink crontabDay Type
+
+ HiLink crontabMnth Number
+ HiLink crontabMnth12 Number
+ HiLink crontabMnthS Number
+ HiLink crontabMnthN Number
+
+ HiLink crontabDow PreProc
+ HiLink crontabDow7 PreProc
+ HiLink crontabDowS PreProc
+ HiLink crontabDowN PreProc
+
+" comment out next line for to suppress unix commands coloring.
+ HiLink crontabCmd Type
+
+ HiLink crontabCmnt Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "crontab"
+
+" vim: ts=8
diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim
new file mode 100644
index 000000000..99844b965
--- /dev/null
+++ b/runtime/syntax/cs.vim
@@ -0,0 +1,145 @@
+" Vim syntax file
+" Language: C#
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 09 Mar 2004 14:32:13 CET
+" Filenames: *.cs
+" $Id$
+"
+" REFERENCES:
+" [1] ECMA TC39: C# Language Specification (WD13Oct01.doc)
+
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cs_cpo_save = &cpo
+set cpo&vim
+
+
+" type
+syn keyword csType bool byte char decimal double float int long object sbyte short string uint ulong ushort void
+" storage
+syn keyword csStorage class delegate enum interface namespace struct
+" repeate / condition / label
+syn keyword csRepeat break continue do for foreach goto return while
+syn keyword csConditional else if switch
+syn keyword csLabel case default
+" there's no :: operator in C#
+syn match csOperatorError display +::+
+" user labels (see [1] 8.6 Statements)
+syn match csLabel display +^\s*\I\i*\s*:\([^:]\)\@=+
+" modifier
+syn keyword csModifier abstract const extern internal override private protected public readonly sealed static virtual volatile
+" constant
+syn keyword csConstant false null true
+" exception
+syn keyword csException try catch finally throw
+
+" TODO:
+syn keyword csUnspecifiedStatement as base checked event fixed in is lock new operator out params ref sizeof stackalloc this typeof unchecked unsafe using
+" TODO:
+syn keyword csUnsupportedStatement get set add remove value
+" TODO:
+syn keyword csUnspecifiedKeyword explicit implicit
+
+
+
+" Comments
+"
+" PROVIDES: @csCommentHook
+"
+" TODO: include strings ?
+"
+syn keyword csTodo contained TODO FIXME XXX NOTE
+syn region csComment start="/\*" end="\*/" contains=@csCommentHook,csTodo
+syn match csComment "//.*$" contains=@csCommentHook,csTodo
+
+" xml markup inside '///' comments
+syn cluster xmlRegionHook add=csXmlCommentLeader
+syn cluster xmlCdataHook add=csXmlCommentLeader
+syn cluster xmlStartTagHook add=csXmlCommentLeader
+syn keyword csXmlTag contained Libraries Packages Types Excluded ExcludedTypeName ExcludedLibraryName
+syn keyword csXmlTag contained ExcludedBucketName TypeExcluded Type TypeKind TypeSignature AssemblyInfo
+syn keyword csXmlTag contained AssemblyName AssemblyPublicKey AssemblyVersion AssemblyCulture Base
+syn keyword csXmlTag contained BaseTypeName Interfaces Interface InterfaceName Attributes Attribute
+syn keyword csXmlTag contained AttributeName Members Member MemberSignature MemberType MemberValue
+syn keyword csXmlTag contained ReturnValue ReturnType Parameters Parameter MemberOfPackage
+syn keyword csXmlTag contained ThreadingSafetyStatement Docs devdoc example overload remarks returns summary
+syn keyword csXmlTag contained threadsafe value internalonly nodoc exception param permission platnote
+syn keyword csXmlTag contained seealso b c i pre sub sup block code note paramref see subscript superscript
+syn keyword csXmlTag contained list listheader item term description altcompliant altmember
+
+syn cluster xmlTagHook add=csXmlTag
+
+syn match csXmlCommentLeader +\/\/\/+ contained
+syn match csXmlComment +\/\/\/.*$+ contains=csXmlCommentLeader,@csXml
+syntax include @csXml <sfile>:p:h/xml.vim
+hi def link xmlRegion Comment
+
+
+" [1] 9.5 Pre-processing directives
+syn region csPreCondit
+ \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|region\|endregion\)"
+ \ skip="\\$" end="$" contains=csComment keepend
+
+
+
+" Strings and constants
+syn match csSpecialError contained "\\."
+syn match csSpecialCharError contained "[^']"
+" [1] 9.4.4.4 Character literals
+syn match csSpecialChar contained +\\["\\'0abfnrtvx]+
+" unicode characters
+syn match csUnicodeNumber +\\\(u\x\{4}\|U\x\{8}\)+ contained contains=csUnicodeSpecifier
+syn match csUnicodeSpecifier +\\[uU]+ contained
+syn region csVerbatimString start=+@"+ end=+"+ end=+$+ contains=csVerbatimSpec
+syn match csVerbatimSpec +@"+he=s+1 contained
+syn region csString start=+"+ end=+"+ end=+$+ contains=csSpecialChar,csSpecialError,csUnicodeNumber
+syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError
+syn match csCharacter "'\\''" contains=csSpecialChar
+syn match csCharacter "'[^\\]'"
+syn match csNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
+syn match csNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+syn match csNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+
+" The default highlighting.
+hi def link csType Type
+hi def link csStorage StorageClass
+hi def link csRepeat Repeat
+hi def link csConditional Conditional
+hi def link csLabel Label
+hi def link csModifier StorageClass
+hi def link csConstant Constant
+hi def link csException Exception
+hi def link csUnspecifiedStatement Statement
+hi def link csUnsupportedStatement Statement
+hi def link csUnspecifiedKeyword Keyword
+hi def link csOperatorError Error
+
+hi def link csTodo Todo
+hi def link csComment Comment
+
+hi def link csSpecialError Error
+hi def link csSpecialCharError Error
+hi def link csString String
+hi def link csVerbatimString String
+hi def link csVerbatimSpec SpecialChar
+hi def link csPreCondit PreCondit
+hi def link csCharacter Character
+hi def link csSpecialChar SpecialChar
+hi def link csNumber Number
+hi def link csUnicodeNumber SpecialChar
+hi def link csUnicodeSpecifier SpecialChar
+
+" xml markup
+hi def link csXmlCommentLeader Comment
+hi def link csXmlComment Comment
+hi def link csXmlTag Statement
+
+let b:current_syntax = "cs"
+
+let &cpo = s:cs_cpo_save
+unlet s:cs_cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/csc.vim b/runtime/syntax/csc.vim
new file mode 100644
index 000000000..8d67334aa
--- /dev/null
+++ b/runtime/syntax/csc.vim
@@ -0,0 +1,199 @@
+" Vim syntax file
+" Language: Essbase script
+" Maintainer: Raul Segura Acevedo <raulseguraaceved@netscape.net>
+" Last change: 2001 Sep 25
+
+" 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
+
+" folds: fix/endfix and comments
+sy region EssFold start="\<Fix" end="EndFix" transparent fold
+
+sy keyword cscTodo contained TODO FIXME XXX
+
+" cscCommentGroup allows adding matches for special things in comments
+sy cluster cscCommentGroup contains=cscTodo
+
+" Strings in quotes
+sy match cscError '"'
+sy match cscString '"[^"]*"'
+
+"when wanted, highlight trailing white space
+if exists("csc_space_errors")
+ if !exists("csc_no_trail_space_error")
+ sy match cscSpaceE "\s\+$"
+ endif
+ if !exists("csc_no_tab_space_error")
+ sy match cscSpaceE " \+\t"me=e-1
+ endif
+endif
+
+"catch errors caused by wrong parenthesis and brackets
+sy cluster cscParenGroup contains=cscParenE,@cscCommentGroup,cscUserCont,cscBitField,cscFormat,cscNumber,cscFloat,cscOctal,cscNumbers,cscIfError,cscComW,cscCom,cscFormula,cscBPMacro
+sy region cscParen transparent start='(' end=')' contains=ALLBUT,@cscParenGroup
+sy match cscParenE ")"
+
+"integer number, or floating point number without a dot and with "f".
+sy case ignore
+sy match cscNumbers transparent "\<\d\|\.\d" contains=cscNumber,cscFloat,cscOctal
+sy match cscNumber contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+sy match cscNumber contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+sy match cscOctal contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>"
+sy match cscFloat contained "\d\+f"
+"floating point number, with dot, optional exponent
+sy match cscFloat contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+sy match cscFloat contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+sy match cscFloat contained "\d\+e[-+]\=\d\+[fl]\=\>"
+
+sy region cscComment start="/\*" end="\*/" contains=@cscCommentGroup,cscSpaceE fold
+sy match cscCommentE "\*/"
+
+sy keyword cscIfError IF ELSE ENDIF ELSEIF
+sy keyword cscCondition contained IF ELSE ENDIF ELSEIF
+sy keyword cscFunction contained VARPER VAR UDA TRUNCATE SYD SUMRANGE SUM
+sy keyword cscFunction contained STDDEVRANGE STDDEV SPARENTVAL SLN SIBLINGS SHIFT
+sy keyword cscFunction contained SANCESTVAL RSIBLINGS ROUND REMAINDER RELATIVE PTD
+sy keyword cscFunction contained PRIOR POWER PARENTVAL NPV NEXT MOD MINRANGE MIN
+sy keyword cscFunction contained MDSHIFT MDPARENTVAL MDANCESTVAL MAXRANGE MAX MATCH
+sy keyword cscFunction contained LSIBLINGS LEVMBRS LEV
+sy keyword cscFunction contained ISUDA ISSIBLING ISSAMELEV ISSAMEGEN ISPARENT ISMBR
+sy keyword cscFunction contained ISLEV ISISIBLING ISIPARENT ISIDESC ISICHILD ISIBLINGS
+sy keyword cscFunction contained ISIANCEST ISGEN ISDESC ISCHILD ISANCEST ISACCTYPE
+sy keyword cscFunction contained IRSIBLINGS IRR INTEREST INT ILSIBLINGS IDESCENDANTS
+sy keyword cscFunction contained ICHILDREN IANCESTORS IALLANCESTORS
+sy keyword cscFunction contained GROWTH GENMBRS GEN FACTORIAL DISCOUNT DESCENDANTS
+sy keyword cscFunction contained DECLINE CHILDREN CURRMBRRANGE CURLEV CURGEN
+sy keyword cscFunction contained COMPOUNDGROWTH COMPOUND AVGRANGE AVG ANCESTVAL
+sy keyword cscFunction contained ANCESTORS ALLANCESTORS ACCUM ABS
+sy keyword cscFunction contained @VARPER @VAR @UDA @TRUNCATE @SYD @SUMRANGE @SUM
+sy keyword cscFunction contained @STDDEVRANGE @STDDEV @SPARENTVAL @SLN @SIBLINGS @SHIFT
+sy keyword cscFunction contained @SANCESTVAL @RSIBLINGS @ROUND @REMAINDER @RELATIVE @PTD
+sy keyword cscFunction contained @PRIOR @POWER @PARENTVAL @NPV @NEXT @MOD @MINRANGE @MIN
+sy keyword cscFunction contained @MDSHIFT @MDPARENTVAL @MDANCESTVAL @MAXRANGE @MAX @MATCH
+sy keyword cscFunction contained @LSIBLINGS @LEVMBRS @LEV
+sy keyword cscFunction contained @ISUDA @ISSIBLING @ISSAMELEV @ISSAMEGEN @ISPARENT @ISMBR
+sy keyword cscFunction contained @ISLEV @ISISIBLING @ISIPARENT @ISIDESC @ISICHILD @ISIBLINGS
+sy keyword cscFunction contained @ISIANCEST @ISGEN @ISDESC @ISCHILD @ISANCEST @ISACCTYPE
+sy keyword cscFunction contained @IRSIBLINGS @IRR @INTEREST @INT @ILSIBLINGS @IDESCENDANTS
+sy keyword cscFunction contained @ICHILDREN @IANCESTORS @IALLANCESTORS
+sy keyword cscFunction contained @GROWTH @GENMBRS @GEN @FACTORIAL @DISCOUNT @DESCENDANTS
+sy keyword cscFunction contained @DECLINE @CHILDREN @CURRMBRRANGE @CURLEV @CURGEN
+sy keyword cscFunction contained @COMPOUNDGROWTH @COMPOUND @AVGRANGE @AVG @ANCESTVAL
+sy keyword cscFunction contained @ANCESTORS @ALLANCESTORS @ACCUM @ABS
+sy match cscFunction contained "@"
+sy match cscError "@\s*\a*" contains=cscFunction
+
+sy match cscStatement "&"
+sy keyword cscStatement AGG ARRAY VAR CCONV CLEARDATA DATACOPY
+
+sy match cscComE contained "^\s*CALC.*"
+sy match cscComE contained "^\s*CLEARBLOCK.*"
+sy match cscComE contained "^\s*SET.*"
+sy match cscComE contained "^\s*FIX"
+sy match cscComE contained "^\s*ENDFIX"
+sy match cscComE contained "^\s*ENDLOOP"
+sy match cscComE contained "^\s*LOOP"
+" sy keyword cscCom FIX ENDFIX LOOP ENDLOOP
+
+sy match cscComW "^\s*CALC.*"
+sy match cscCom "^\s*CALC\s*ALL"
+sy match cscCom "^\s*CALC\s*AVERAGE"
+sy match cscCom "^\s*CALC\s*DIM"
+sy match cscCom "^\s*CALC\s*FIRST"
+sy match cscCom "^\s*CALC\s*LAST"
+sy match cscCom "^\s*CALC\s*TWOPASS"
+
+sy match cscComW "^\s*CLEARBLOCK.*"
+sy match cscCom "^\s*CLEARBLOCK\s\+ALL"
+sy match cscCom "^\s*CLEARBLOCK\s\+UPPER"
+sy match cscCom "^\s*CLEARBLOCK\s\+NONINPUT"
+
+sy match cscComW "^\s*\<SET.*"
+sy match cscCom "^\s*\<SET\s\+Commands"
+sy match cscCom "^\s*\<SET\s\+AGGMISSG"
+sy match cscCom "^\s*\<SET\s\+CACHE"
+sy match cscCom "^\s*\<SET\s\+CALCHASHTBL"
+sy match cscCom "^\s*\<SET\s\+CLEARUPDATESTATUS"
+sy match cscCom "^\s*\<SET\s\+FRMLBOTTOMUP"
+sy match cscCom "^\s*\<SET\s\+LOCKBLOCK"
+sy match cscCom "^\s*\<SET\s\+MSG"
+sy match cscCom "^\s*\<SET\s\+NOTICE"
+sy match cscCom "^\s*\<SET\s\+UPDATECALC"
+sy match cscCom "^\s*\<SET\s\+UPTOLOCAL"
+
+sy keyword cscBPMacro contained !LoopOnAll !LoopOnLevel !LoopOnSelected
+sy keyword cscBPMacro contained !CurrentMember !LoopOnDimensions !CurrentDimension
+sy keyword cscBPMacro contained !CurrentOtherLoopDimension !LoopOnOtherLoopDimensions
+sy keyword cscBPMacro contained !EndLoop !AllMembers !SelectedMembers !If !Else !EndIf
+sy keyword cscBPMacro contained LoopOnAll LoopOnLevel LoopOnSelected
+sy keyword cscBPMacro contained CurrentMember LoopOnDimensions CurrentDimension
+sy keyword cscBPMacro contained CurrentOtherLoopDimension LoopOnOtherLoopDimensions
+sy keyword cscBPMacro contained EndLoop AllMembers SelectedMembers If Else EndIf
+sy match cscBPMacro contained "!"
+sy match cscBPW "!\s*\a*" contains=cscBPmacro
+
+" when wanted, highlighting lhs members or erros in asignments (may lag the editing)
+if version >= 600 && exists("csc_asignment")
+ sy match cscEqError '\("[^"]*"\s*\|[^][\t !%()*+,--/:;<=>{}~]\+\s*\|->\s*\)*=\([^=]\@=\|$\)'
+ sy region cscFormula transparent matchgroup=cscVarName start='\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\s*=\([^=]\@=\|\n\)' skip='"[^"]*"' end=';' contains=ALLBUT,cscFormula,cscFormulaIn,cscBPMacro,cscCondition
+ sy region cscFormulaIn matchgroup=cscVarName transparent start='\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\(->\("[^"]*"\|[^][\t !%()*+,--/:;<=>{}~]\+\)\)*\s*=\([^=]\@=\|$\)' skip='"[^"]*"' end=';' contains=ALLBUT,cscFormula,cscFormulaIn,cscBPMacro,cscCondition contained
+ sy match cscEq "=="
+endif
+
+if !exists("csc_minlines")
+ let csc_minlines = 50 " mostly for () constructs
+endif
+exec "sy sync ccomment cscComment minlines=" . csc_minlines
+
+" 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_csc_syntax_inits")
+ if version < 508
+ let did_csc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ hi cscVarName term=bold ctermfg=9 gui=bold guifg=blue
+
+ HiLink cscNumber Number
+ HiLink cscOctal Number
+ HiLink cscFloat Float
+ HiLink cscParenE Error
+ HiLink cscCommentE Error
+ HiLink cscSpaceE Error
+ HiLink cscError Error
+ HiLink cscString String
+ HiLink cscComment Comment
+ HiLink cscTodo Todo
+ HiLink cscStatement Statement
+ HiLink cscIfError Error
+ HiLink cscEqError Error
+ HiLink cscFunction Statement
+ HiLink cscCondition Statement
+ HiLink cscWarn WarningMsg
+
+ HiLink cscComE Error
+ HiLink cscCom Statement
+ HiLink cscComW WarningMsg
+
+ HiLink cscBPMacro Identifier
+ HiLink cscBPW WarningMsg
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "csc"
+
+" vim: ts=8
diff --git a/runtime/syntax/csh.vim b/runtime/syntax/csh.vim
new file mode 100644
index 000000000..de3d3e2c9
--- /dev/null
+++ b/runtime/syntax/csh.vim
@@ -0,0 +1,160 @@
+" Vim syntax file
+" Language: C-shell (csh)
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Version: 8
+" Last Change: Sep 02, 2003
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+" clusters:
+syn cluster cshQuoteList contains=cshDblQuote,cshSnglQuote,cshBckQuote
+syn cluster cshVarList contains=cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst
+
+" Variables which affect the csh itself
+syn match cshSetVariables contained "argv\|histchars\|ignoreeof\|noglob\|prompt\|status"
+syn match cshSetVariables contained "cdpath\|history\|mail\|nonomatch\|savehist\|time"
+syn match cshSetVariables contained "cwd\|home\|noclobber\|path\|shell\|verbose"
+syn match cshSetVariables contained "echo"
+
+syn case ignore
+syn keyword cshTodo contained todo
+syn case match
+
+" Variable Name Expansion Modifiers
+syn match cshModifier contained ":\(h\|t\|r\|q\|x\|gh\|gt\|gr\)"
+
+" Strings and Comments
+syn match cshNoEndlineDQ contained "[^\"]\(\\\\\)*$"
+syn match cshNoEndlineSQ contained "[^\']\(\\\\\)*$"
+syn match cshNoEndlineBQ contained "[^\`]\(\\\\\)*$"
+
+syn region cshDblQuote start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote
+syn region cshSnglQuote start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ
+syn region cshBckQuote start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ
+syn region cshDblQuote start=+^"+ skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ
+syn region cshSnglQuote start=+^'+ skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ
+syn region cshBckQuote start=+^`+ skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ
+syn cluster cshCommentGroup contains=cshTodo,@Spell
+syn match cshComment "#.*$" contains=@cshCommentGroup
+
+" A bunch of useful csh keywords
+syn keyword cshStatement alias end history onintr setenv unalias
+syn keyword cshStatement cd eval kill popd shift unhash
+syn keyword cshStatement chdir exec login pushd source
+syn keyword cshStatement continue exit logout rehash time unsetenv
+syn keyword cshStatement dirs glob nice repeat umask wait
+syn keyword cshStatement echo goto nohup
+
+syn keyword cshConditional break case else endsw switch
+syn keyword cshConditional breaksw default endif
+syn keyword cshRepeat foreach
+
+" Special environment variables
+syn keyword cshShellVariables HOME LOGNAME PATH TERM USER
+
+" Modifiable Variables without {}
+syn match cshExtVar "\$[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier
+syn match cshSelector "\$[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier
+syn match cshQtyWord "\$#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier
+syn match cshArgv "\$\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier
+syn match cshArgv "\$\*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier
+
+" Modifiable Variables with {}
+syn match cshExtVar "\${[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier
+syn match cshSelector "\${[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier
+syn match cshQtyWord "\${#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier
+syn match cshArgv "\${\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier
+
+" UnModifiable Substitutions
+syn match cshSubstError "\$?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)"
+syn match cshSubstError "\${?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)}"
+syn match cshSubstError "\$?[0$<]:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)"
+syn match cshSubst "\$?[a-zA-Z_][a-zA-Z0-9_]*"
+syn match cshSubst "\${?[a-zA-Z_][a-zA-Z0-9_]*}"
+syn match cshSubst "\$?[0$<]"
+
+" I/O redirection
+syn match cshRedir ">>&!\|>&!\|>>&\|>>!\|>&\|>!\|>>\|<<\|>\|<"
+
+" Handle set expressions
+syn region cshSetExpr matchgroup=cshSetStmt start="\<set\>\|\<unset\>" end="$\|;" contains=cshComment,cshSetStmt,cshSetVariables,@cshQuoteList
+
+" Operators and Expression-Using constructs
+"syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|\|%\|&\|+\|-\|/\|<\|>\||"
+syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||"
+syn match cshOperator contained "[(){}]"
+syn region cshTest matchgroup=cshStatement start="\<if\>\|\<while\>" skip="\\$" matchgroup=cshStatement end="\<then\>\|$" contains=cshComment,cshOperator,@cshQuoteList,@cshVarLIst
+
+" Highlight special characters (those which have a backslash) differently
+syn match cshSpecial contained "\\\d\d\d\|\\[abcfnrtv\\]"
+syn match cshNumber "-\=\<\d\+\>"
+
+" All other identifiers
+"syn match cshIdentifier "\<[a-zA-Z._][a-zA-Z0-9._]*\>"
+
+" Shell Input Redirection (Here Documents)
+if version < 600
+ syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**END[a-zA-Z_0-9]*\**" matchgroup=cshRedir end="^END[a-zA-Z_0-9]*$"
+ syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**EOF\**" matchgroup=cshRedir end="^EOF$"
+else
+ syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**\z(\h\w*\)\**" matchgroup=cshRedir end="^\z1$"
+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_csh_syntax_inits")
+ if version < 508
+ let did_csh_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cshArgv cshVariables
+ HiLink cshBckQuote cshCommand
+ HiLink cshDblQuote cshString
+ HiLink cshExtVar cshVariables
+ HiLink cshHereDoc cshString
+ HiLink cshNoEndlineBQ cshNoEndline
+ HiLink cshNoEndlineDQ cshNoEndline
+ HiLink cshNoEndlineSQ cshNoEndline
+ HiLink cshQtyWord cshVariables
+ HiLink cshRedir cshOperator
+ HiLink cshSelector cshVariables
+ HiLink cshSetStmt cshStatement
+ HiLink cshSetVariables cshVariables
+ HiLink cshSnglQuote cshString
+ HiLink cshSubst cshVariables
+
+ HiLink cshCommand Statement
+ HiLink cshComment Comment
+ HiLink cshConditional Conditional
+ HiLink cshIdentifier Error
+ HiLink cshModifier Special
+ HiLink cshNoEndline Error
+ HiLink cshNumber Number
+ HiLink cshOperator Operator
+ HiLink cshRedir Statement
+ HiLink cshRepeat Repeat
+ HiLink cshShellVariables Special
+ HiLink cshSpecial Special
+ HiLink cshStatement Statement
+ HiLink cshString String
+ HiLink cshSubstError Error
+ HiLink cshTodo Todo
+ HiLink cshVariables Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "csh"
+
+" vim: ts=18
diff --git a/runtime/syntax/csp.vim b/runtime/syntax/csp.vim
new file mode 100644
index 000000000..bd6213efd
--- /dev/null
+++ b/runtime/syntax/csp.vim
@@ -0,0 +1,195 @@
+" Vim syntax file
+" Language: CSP (Communication Sequential Processes, using FDR input syntax)
+" Maintainer: Jan Bredereke <brederek@tzi.de>
+" Version: 0.6.0
+" Last change: Mon Mar 25, 2002
+" URL: http://www.tzi.de/~brederek/vim/
+" Copying: You may distribute and use this file freely, in the same
+" way as the vim editor itself.
+"
+" To Do: - Probably I missed some keywords or operators, please
+" fix them and notify me, the maintainer.
+" - Currently, we do lexical highlighting only. It would be
+" nice to have more actual syntax checks, including
+" highlighting of wrong syntax.
+" - The additional syntax for the RT-Tester (pseudo-comments)
+" should be optional.
+
+" 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
+
+" case is significant to FDR:
+syn case match
+
+" Block comments in CSP are between {- and -}
+syn region cspComment start="{-" end="-}" contains=cspTodo
+" Single-line comments start with --
+syn region cspComment start="--" end="$" contains=cspTodo,cspOldRttComment,cspSdlRttComment keepend
+
+" Numbers:
+syn match cspNumber "\<\d\+\>"
+
+" Conditionals:
+syn keyword cspConditional if then else
+
+" Operators on processes:
+" -> ? : ! ' ; /\ \ [] |~| [> & [[..<-..]] ||| [|..|] || [..<->..] ; : @ |||
+syn match cspOperator "->"
+syn match cspOperator "/\\"
+syn match cspOperator "[^/]\\"lc=1
+syn match cspOperator "\[\]"
+syn match cspOperator "|\~|"
+syn match cspOperator "\[>"
+syn match cspOperator "\[\["
+syn match cspOperator "\]\]"
+syn match cspOperator "<-"
+syn match cspOperator "|||"
+syn match cspOperator "[^|]||[^|]"lc=1,me=e-1
+syn match cspOperator "[^|{\~]|[^|}\~]"lc=1,me=e-1
+syn match cspOperator "\[|"
+syn match cspOperator "|\]"
+syn match cspOperator "\[[^>]"me=e-1
+syn match cspOperator "\]"
+syn match cspOperator "<->"
+syn match cspOperator "[?:!';@]"
+syn match cspOperator "&"
+syn match cspOperator "\."
+
+" (not on processes:)
+" syn match cspDelimiter "{|"
+" syn match cspDelimiter "|}"
+" syn match cspDelimiter "{[^-|]"me=e-1
+" syn match cspDelimiter "[^-|]}"lc=1
+
+" Keywords:
+syn keyword cspKeyword length null head tail concat elem
+syn keyword cspKeyword union inter diff Union Inter member card
+syn keyword cspKeyword empty set Set Seq
+syn keyword cspKeyword true false and or not within let
+syn keyword cspKeyword nametype datatype diamond normal
+syn keyword cspKeyword sbisim tau_loop_factor model_compress
+syn keyword cspKeyword explicate
+syn match cspKeyword "transparent"
+syn keyword cspKeyword external chase prioritize
+syn keyword cspKeyword channel Events
+syn keyword cspKeyword extensions productions
+syn keyword cspKeyword Bool Int
+
+" Reserved keywords:
+syn keyword cspReserved attribute embed module subtype
+
+" Include:
+syn region cspInclude matchgroup=cspIncludeKeyword start="^include" end="$" keepend contains=cspIncludeArg
+syn region cspIncludeArg start='\s\+\"' end= '\"\s*' contained
+
+" Assertions:
+syn keyword cspAssert assert deterministic divergence free deadlock
+syn keyword cspAssert livelock
+syn match cspAssert "\[T="
+syn match cspAssert "\[F="
+syn match cspAssert "\[FD="
+syn match cspAssert "\[FD\]"
+syn match cspAssert "\[F\]"
+
+" Types and Sets
+" (first char a capital, later at least one lower case, no trailing underscore):
+syn match cspType "\<_*[A-Z][A-Z_0-9]*[a-z]\(\|[A-Za-z_0-9]*[A-Za-z0-9]\)\>"
+
+" Processes (all upper case, no trailing underscore):
+" (For identifiers that could be types or sets, too, this second rule set
+" wins.)
+syn match cspProcess "\<[A-Z_][A-Z_0-9]*[A-Z0-9]\>"
+syn match cspProcess "\<[A-Z_]\>"
+
+" reserved identifiers for tool output (ending in underscore):
+syn match cspReservedIdentifier "\<[A-Za-z_][A-Za-z_0-9]*_\>"
+
+" ToDo markers:
+syn match cspTodo "FIXME" contained
+syn match cspTodo "TODO" contained
+syn match cspTodo "!!!" contained
+
+" RT-Tester pseudo comments:
+" (The now obsolete syntax:)
+syn match cspOldRttComment "^--\$\$AM_UNDEF"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_ERROR"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_WARNING"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_SET_TIMER"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_RESET_TIMER"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_ELAPSED_TIMER"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_OUTPUT"lc=2 contained
+syn match cspOldRttComment "^--\$\$AM_INPUT"lc=2 contained
+" (The current syntax:)
+syn region cspRttPragma matchgroup=cspRttPragmaKeyword start="^pragma\s\+" end="\s*$" oneline keepend contains=cspRttPragmaArg,cspRttPragmaSdl
+syn keyword cspRttPragmaArg AM_ERROR AM_WARNING AM_SET_TIMER contained
+syn keyword cspRttPragmaArg AM_RESET_TIMER AM_ELAPSED_TIMER contained
+syn keyword cspRttPragmaArg AM_OUTPUT AM_INPUT AM_INTERNAL contained
+" the "SDL_MATCH" extension:
+syn region cspRttPragmaSdl matchgroup=cspRttPragmaKeyword start="SDL_MATCH\s\+" end="\s*$" contains=cspRttPragmaSdlArg contained
+syn keyword cspRttPragmaSdlArg TRANSLATE nextgroup=cspRttPragmaSdlTransName contained
+syn keyword cspRttPragmaSdlArg PARAM SKIP OPTIONAL CHOICE ARRAY nextgroup=cspRttPragmaSdlName contained
+syn match cspRttPragmaSdlName "\s*\S\+\s*" nextgroup=cspRttPragmaSdlTail contained
+syn region cspRttPragmaSdlTail start="" end="\s*$" contains=cspRttPragmaSdlTailArg contained
+syn keyword cspRttPragmaSdlTailArg SUBSET_USED DEFAULT_VALUE Present contained
+syn match cspRttPragmaSdlTransName "\s*\w\+\s*" nextgroup=cspRttPragmaSdlTransTail contained
+syn region cspRttPragmaSdlTransTail start="" end="\s*$" contains=cspRttPragmaSdlTransTailArg contained
+syn keyword cspRttPragmaSdlTransTailArg sizeof contained
+syn match cspRttPragmaSdlTransTailArg "\*" contained
+syn match cspRttPragmaSdlTransTailArg "(" contained
+syn match cspRttPragmaSdlTransTailArg ")" contained
+
+" temporary syntax extension for commented-out "pragma SDL_MATCH":
+syn match cspSdlRttComment "pragma\s\+SDL_MATCH\s\+" nextgroup=cspRttPragmaSdlArg contained
+
+syn sync lines=250
+
+" 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_csp_syn_inits")
+ if version < 508
+ let did_csp_syn_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
+ " (For vim version <=5.7, the command groups are defined in
+ " $VIMRUNTIME/syntax/synload.vim )
+ HiLink cspComment Comment
+ HiLink cspNumber Number
+ HiLink cspConditional Conditional
+ HiLink cspOperator Delimiter
+ HiLink cspKeyword Keyword
+ HiLink cspReserved SpecialChar
+ HiLink cspInclude Error
+ HiLink cspIncludeKeyword Include
+ HiLink cspIncludeArg Include
+ HiLink cspAssert PreCondit
+ HiLink cspType Type
+ HiLink cspProcess Function
+ HiLink cspTodo Todo
+ HiLink cspOldRttComment Define
+ HiLink cspRttPragmaKeyword Define
+ HiLink cspSdlRttComment Define
+ HiLink cspRttPragmaArg Define
+ HiLink cspRttPragmaSdlArg Define
+ HiLink cspRttPragmaSdlName Default
+ HiLink cspRttPragmaSdlTailArg Define
+ HiLink cspRttPragmaSdlTransName Default
+ HiLink cspRttPragmaSdlTransTailArg Define
+ HiLink cspReservedIdentifier Error
+ " (Currently unused vim method: Debug)
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "csp"
+
+" vim: ts=8
diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim
new file mode 100644
index 000000000..953f224f3
--- /dev/null
+++ b/runtime/syntax/css.vim
@@ -0,0 +1,274 @@
+" Vim syntax file
+" Language: Cascading Style Sheets
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/css.vim
+" Last Change: 2002 Oct 19
+" CSS2 by Nikolai Weibull
+" Full CSS2, HTML4 support by Yeti
+
+" For version 5.x: Clear all syntax items
+" For version 6.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 = 'css'
+endif
+
+syn case ignore
+
+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
+syn keyword cssTagName dfn dir div dl dt em fieldset font form frame
+syn keyword cssTagName frameset h1 h2 h3 h4 h5 h6 head hr html img i
+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 textarea tfoot th thead title tr tt ul u var
+syn match cssTagName "\<table\>"
+syn match cssTagName "\*"
+
+syn match cssTagName "@page\>" nextgroup=cssDefinition
+
+syn match cssSelectorOp "[+>.]"
+syn match cssSelectorOp2 "[~|]\?=" contained
+syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
+
+syn match cssIdentifier "#\i\+"
+
+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 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 cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)"
+syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)"
+syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)"
+
+syn match cssFontDescriptor "@font-face\>" nextgroup=cssFontDescriptorBlock skipwhite skipnl
+syn region cssFontDescriptorBlock contained transparent matchgroup=cssBraces start="{" end="}" contains=cssComment,cssError,cssUnicodeEscape,cssFontProp,cssFontAttr,cssCommonAttr,cssStringQ,cssStringQQ,cssFontDescriptorProp,cssValue.*,cssFontDescriptorFunction,cssUnicodeRange,cssFontDescriptorAttr
+syn match cssFontDescriptorProp contained "\<\(unicode-range\|unit-per-em\|panose-1\|cap-height\|x-height\|definition-src\)\>"
+syn keyword cssFontDescriptorProp contained src stemv stemh slope ascent descent widths bbox baseline centerline mathline topline
+syn keyword cssFontDescriptorAttr contained all
+syn region cssFontDescriptorFunction contained matchgroup=cssFunctionName start="\<\(uri\|url\|local\|format\)\s*(" end=")" contains=cssStringQ,cssStringQQ oneline keepend
+syn match cssUnicodeRange contained "U+[0-9A-Fa-f?]\+"
+syn match cssUnicodeRange contained "U+\x\+-\x\+"
+
+syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
+" 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 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 keyword cssCommonAttr contained top bottom
+syn keyword cssCommonAttr contained medium normal
+
+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\)\>\)\="
+syn match cssFontAttr contained "\<x\{1,2\}-\(large\|small\)\>"
+syn match cssFontAttr contained "\<message-box\>"
+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 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 match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
+syn match cssGeneratedContentProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
+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 cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
+syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>"
+syn keyword cssAuralProp contained volume during azimuth elevation stress richness
+syn match cssAuralAttr contained "\<\(x-\)\=\(soft\|loud\)\>"
+syn keyword cssAuralAttr contained silent
+syn match cssAuralAttr contained "\<spell-out\>"
+syn keyword cssAuralAttr contained non mix
+syn match cssAuralAttr contained "\<\(left\|right\)-side\>"
+syn match cssAuralAttr contained "\<\(far\|center\)-\(left\|center\|right\)\>"
+syn keyword cssAuralAttr contained leftwards rightwards behind
+syn keyword cssAuralAttr contained below level above higher
+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 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 match cssBraceError "}"
+
+syn match cssPseudoClass ":\S*" contains=cssPseudoClassId,cssUnicodeEscape
+syn keyword cssPseudoClassId contained link visited active hover focus before after left right
+syn match cssPseudoClassId contained "\<first\(-\(line\|letter\|child\)\)\=\>"
+syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline
+
+syn region cssComment start="/\*" end="\*/"
+
+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
+
+if main_syntax == "css"
+ syn sync minlines=10
+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_css_syn_inits")
+ if version < 508
+ let did_css_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cssComment Comment
+ HiLink cssTagName Statement
+ HiLink cssSelectorOp Special
+ HiLink cssSelectorOp2 Special
+ HiLink cssFontProp StorageClass
+ HiLink cssColorProp StorageClass
+ HiLink cssTextProp StorageClass
+ HiLink cssBoxProp StorageClass
+ HiLink cssRenderProp StorageClass
+ HiLink cssAuralProp StorageClass
+ HiLink cssRenderProp StorageClass
+ HiLink cssGeneratedContentProp StorageClass
+ HiLink cssPagingProp StorageClass
+ HiLink cssTableProp StorageClass
+ HiLink cssUIProp StorageClass
+ HiLink cssFontAttr Type
+ HiLink cssColorAttr Type
+ HiLink cssTextAttr Type
+ HiLink cssBoxAttr Type
+ HiLink cssRenderAttr Type
+ HiLink cssAuralAttr Type
+ HiLink cssGeneratedContentAttr Type
+ HiLink cssPagingAttr Type
+ HiLink cssTableAttr Type
+ HiLink cssUIAttr Type
+ HiLink cssCommonAttr Type
+ HiLink cssPseudoClassId PreProc
+ HiLink cssPseudoClassLang Constant
+ HiLink cssValueLength Number
+ HiLink cssValueInteger Number
+ HiLink cssValueNumber Number
+ HiLink cssValueAngle Number
+ HiLink cssValueTime Number
+ HiLink cssValueFrequency Number
+ HiLink cssFunction Constant
+ HiLink cssURL String
+ HiLink cssFunctionName Function
+ HiLink cssColor Constant
+ HiLink cssIdentifier Function
+ HiLink cssInclude Include
+ HiLink cssImportant Special
+ HiLink cssBraces Function
+ HiLink cssBraceError Error
+ HiLink cssError Error
+ HiLink cssInclude Include
+ HiLink cssUnicodeEscape Special
+ HiLink cssStringQQ String
+ HiLink cssStringQ String
+ HiLink cssMedia Special
+ HiLink cssMediaType Special
+ HiLink cssMediaComma Normal
+ HiLink cssFontDescriptor Special
+ HiLink cssFontDescriptorFunction Constant
+ HiLink cssFontDescriptorProp StorageClass
+ HiLink cssFontDescriptorAttr Type
+ HiLink cssUnicodeRange Constant
+ delcommand HiLink
+endif
+
+let b:current_syntax = "css"
+
+if main_syntax == 'css'
+ unlet main_syntax
+endif
+
+" vim: ts=8
+
diff --git a/runtime/syntax/cterm.vim b/runtime/syntax/cterm.vim
new file mode 100644
index 000000000..139a0d5e1
--- /dev/null
+++ b/runtime/syntax/cterm.vim
@@ -0,0 +1,190 @@
+" Vim syntax file
+" Language: Century Term Command Script
+" Maintainer: Sean M. McKee <mckee@misslink.net>
+" Last Change: 2002 Apr 13
+" Version Info: @(#)cterm.vim 1.7 97/12/15 09:23:14
+
+" 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
+
+"FUNCTIONS
+syn keyword ctermFunction abort addcr addlf answer at attr batch baud
+syn keyword ctermFunction break call capture cd cdelay charset cls color
+syn keyword ctermFunction combase config commect copy cread
+syn keyword ctermFunction creadint devprefix dialer dialog dimint
+syn keyword ctermFunction dimlog dimstr display dtimeout dwait edit
+syn keyword ctermFunction editor emulate erase escloop fcreate
+syn keyword ctermFunction fflush fillchar flags flush fopen fread
+syn keyword ctermFunction freadln fseek fwrite fwriteln get hangup
+syn keyword ctermFunction help hiwait htime ignore init itime
+syn keyword ctermFunction keyboard lchar ldelay learn lockfile
+syn keyword ctermFunction locktime log login logout lowait
+syn keyword ctermFunction lsend ltime memlist menu mkdir mode
+syn keyword ctermFunction modem netdialog netport noerror pages parity
+syn keyword ctermFunction pause portlist printer protocol quit rcv
+syn keyword ctermFunction read readint readn redial release
+syn keyword ctermFunction remote rename restart retries return
+syn keyword ctermFunction rmdir rtime run runx scrollback send
+syn keyword ctermFunction session set setcap setcolor setkey
+syn keyword ctermFunction setsym setvar startserver status
+syn keyword ctermFunction stime stopbits stopserver tdelay
+syn keyword ctermFunction terminal time trans type usend version
+syn keyword ctermFunction vi vidblink vidcard vidout vidunder wait
+syn keyword ctermFunction wildsize wclose wopen wordlen wru wruchar
+syn keyword ctermFunction xfer xmit xprot
+syn match ctermFunction "?"
+"syn keyword ctermFunction comment remark
+
+"END FUNCTIONS
+"INTEGER FUNCTIONS
+syn keyword ctermIntFunction asc atod eval filedate filemode filesize ftell
+syn keyword ctermIntFunction len termbits opsys pos sum time val mdmstat
+"END INTEGER FUNCTIONS
+
+"STRING FUNCTIONS
+syn keyword ctermStrFunction cdate ctime chr chrdy chrin comin getenv
+syn keyword ctermStrFunction gethomedir left midstr right str tolower
+syn keyword ctermStrFunction toupper uniq comst exists feof hascolor
+
+"END STRING FUNCTIONS
+
+"PREDEFINED TERM VARIABLES R/W
+syn keyword ctermPreVarRW f _escloop _filename _kermiteol _obufsiz
+syn keyword ctermPreVarRW _port _rcvsync _cbaud _reval _turnchar
+syn keyword ctermPreVarRW _txblksiz _txwindow _vmin _vtime _cparity
+syn keyword ctermPreVarRW _cnumber false t true _cwordlen _cstopbits
+syn keyword ctermPreVarRW _cmode _cemulate _cxprot _clogin _clogout
+syn keyword ctermPreVarRW _cstartsrv _cstopsrv _ccmdfile _cwru
+syn keyword ctermPreVarRW _cprotocol _captfile _cremark _combufsiz
+syn keyword ctermPreVarRW logfile
+"END PREDEFINED TERM VARIABLES R/W
+
+"PREDEFINED TERM VARIABLES R/O
+syn keyword ctermPreVarRO _1 _2 _3 _4 _5 _6 _7 _8 _9 _cursess
+syn keyword ctermPreVarRO _lockfile _baud _errno _retval _sernum
+syn keyword ctermPreVarRO _timeout _row _col _version
+"END PREDEFINED TERM VARIABLES R/O
+
+syn keyword ctermOperator not mod eq ne gt le lt ge xor and or shr not shl
+
+"SYMBOLS
+syn match CtermSymbols "|"
+"syn keyword ctermOperators + - * / % = != > < >= <= & | ^ ! << >>
+"END SYMBOLS
+
+"STATEMENT
+syn keyword ctermStatement off
+syn keyword ctermStatement disk overwrite append spool none
+syn keyword ctermStatement echo view wrap
+"END STATEMENT
+
+"TYPE
+"syn keyword ctermType
+"END TYPE
+
+"USERLIB FUNCTIONS
+"syn keyword ctermLibFunc
+"END USERLIB FUNCTIONS
+
+"LABEL
+syn keyword ctermLabel case default
+"END LABEL
+
+"CONDITIONAL
+syn keyword ctermConditional on endon
+syn keyword ctermConditional proc endproc
+syn keyword ctermConditional for in do endfor
+syn keyword ctermConditional if else elseif endif iferror
+syn keyword ctermConditional switch endswitch
+syn keyword ctermConditional repeat until
+"END CONDITIONAL
+
+"REPEAT
+syn keyword ctermRepeat while
+"END REPEAT
+
+" Function arguments (eg $1 $2 $3)
+syn match ctermFuncArg "\$[1-9]"
+
+syn keyword ctermTodo contained TODO
+
+syn match ctermNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match ctermNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match ctermNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match ctermNumber "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match ctermNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+
+syn match ctermComment "![^=].*$" contains=ctermTodo
+syn match ctermComment "!$"
+syn match ctermComment "\*.*$" contains=ctermTodo
+syn region ctermComment start="comment" end="$" contains=ctermTodo
+syn region ctermComment start="remark" end="$" contains=ctermTodo
+
+syn region ctermVar start="\$(" end=")"
+
+" String and Character contstants
+" Highlight special characters (those which have a backslash) differently
+syn match ctermSpecial contained "\\\d\d\d\|\\."
+syn match ctermSpecial contained "\^."
+syn region ctermString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=ctermSpecial,ctermVar,ctermSymbols
+syn match ctermCharacter "'[^\\]'"
+syn match ctermSpecialCharacter "'\\.'"
+
+" 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_cterm_syntax_inits")
+ if version < 508
+ let did_cterm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ctermStatement Statement
+ HiLink ctermFunction Statement
+ HiLink ctermStrFunction Statement
+ HiLink ctermIntFunction Statement
+ HiLink ctermLabel Statement
+ HiLink ctermConditional Statement
+ HiLink ctermRepeat Statement
+ HiLink ctermLibFunc UserDefFunc
+ HiLink ctermType Type
+ HiLink ctermFuncArg PreCondit
+
+ HiLink ctermPreVarRO PreCondit
+ HiLink ctermPreVarRW PreConditBold
+ HiLink ctermVar Type
+
+ HiLink ctermComment Comment
+
+ HiLink ctermCharacter SpecialChar
+ HiLink ctermSpecial Special
+ HiLink ctermSpecialCharacter SpecialChar
+ HiLink ctermSymbols Special
+ HiLink ctermString String
+ HiLink ctermTodo Todo
+ HiLink ctermOperator Statement
+ HiLink ctermNumber Number
+
+ " redefine the colors
+ "hi PreConditBold term=bold ctermfg=1 cterm=bold guifg=Purple gui=bold
+ "hi Special term=bold ctermfg=6 guifg=SlateBlue gui=underline
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cterm"
+
+" vim: ts=8
diff --git a/runtime/syntax/ctrlh.vim b/runtime/syntax/ctrlh.vim
new file mode 100644
index 000000000..715c2c00e
--- /dev/null
+++ b/runtime/syntax/ctrlh.vim
@@ -0,0 +1,33 @@
+" Vim syntax file
+" Language: CTRL-H (e.g., ASCII manpages)
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Apr 25
+
+" Existing syntax is kept, this file can be used as an addition
+
+" Recognize underlined text: _^Hx
+syntax match CtrlHUnderline /_\b./ contains=CtrlHHide
+
+" Recognize bold text: x^Hx
+syntax match CtrlHBold /\(.\)\b\1/ contains=CtrlHHide
+
+" Hide the CTRL-H (backspace)
+syntax match CtrlHHide /.\b/ contained
+
+" 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_ctrlh_syntax_inits")
+ if version < 508
+ let did_ctrlh_syntax_inits = 1
+ hi link CtrlHHide Ignore
+ hi CtrlHUnderline term=underline cterm=underline gui=underline
+ hi CtrlHBold term=bold cterm=bold gui=bold
+ else
+ hi def link CtrlHHide Ignore
+ hi def CtrlHUnderline term=underline cterm=underline gui=underline
+ hi def CtrlHBold term=bold cterm=bold gui=bold
+ endif
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/cupl.vim b/runtime/syntax/cupl.vim
new file mode 100644
index 000000000..9f804c76c
--- /dev/null
+++ b/runtime/syntax/cupl.vim
@@ -0,0 +1,130 @@
+" Vim syntax file
+" Language: CUPL
+" Maintainer: John Cook <john.cook@kla-tencor.com>
+" Last Change: 2001 Apr 25
+
+" 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
+
+" this language is oblivious to case.
+syn case ignore
+
+" A bunch of keywords
+syn keyword cuplHeader name partno date revision rev designer company nextgroup=cuplHeaderContents
+syn keyword cuplHeader assembly assy location device nextgroup=cuplHeaderContents
+
+syn keyword cuplTodo contained TODO XXX FIXME
+
+" cuplHeaderContents uses default highlighting except for numbers
+syn match cuplHeaderContents ".\+;"me=e-1 contains=cuplNumber contained
+
+" String contstants
+syn region cuplString start=+'+ end=+'+
+syn region cuplString start=+"+ end=+"+
+
+syn keyword cuplStatement append condition
+syn keyword cuplStatement default else
+syn keyword cuplStatement field fld format function fuse
+syn keyword cuplStatement group if jump loc
+syn keyword cuplStatement macro min node out
+syn keyword cuplStatement pin pinnode present table
+syn keyword cuplStatement sequence sequenced sequencejk sequencers sequencet
+
+syn keyword cuplFunction log2 log8 log16 log
+
+" Valid integer number formats (decimal, binary, octal, hex)
+syn match cuplNumber "\<[-+]\=[0-9]\+\>"
+syn match cuplNumber "'d'[0-9]\+\>"
+syn match cuplNumber "'b'[01x]\+\>"
+syn match cuplNumber "'o'[0-7x]\+\>"
+syn match cuplNumber "'h'[0-9a-fx]\+\>"
+
+" operators
+syn match cuplLogicalOperator "[!#&$]"
+syn match cuplArithmeticOperator "[-+*/%]"
+syn match cuplArithmeticOperator "\*\*"
+syn match cuplAssignmentOperator ":\=="
+syn match cuplEqualityOperator ":"
+syn match cuplTruthTableOperator "=>"
+
+" Signal extensions
+syn match cuplExtension "\.[as][pr]\>"
+syn match cuplExtension "\.oe\>"
+syn match cuplExtension "\.oemux\>"
+syn match cuplExtension "\.[dlsrjk]\>"
+syn match cuplExtension "\.ck\>"
+syn match cuplExtension "\.dq\>"
+syn match cuplExtension "\.ckmux\>"
+syn match cuplExtension "\.tec\>"
+syn match cuplExtension "\.cnt\>"
+
+syn match cuplRangeOperator "\.\." contained
+
+" match ranges like memadr:[0000..1FFF]
+" and highlight both the numbers and the .. operator
+syn match cuplNumberRange "\<\x\+\.\.\x\+\>" contains=cuplRangeOperator
+
+" match vectors of type [name3..0] (decimal numbers only)
+" but assign them no special highlighting except for the .. operator
+syn match cuplBitVector "\<\a\+\d\+\.\.\d\+\>" contains=cuplRangeOperator
+
+" other special characters
+syn match cuplSpecialChar "[\[\](){},;]"
+
+" directives
+" (define these after cuplOperator so $xxx overrides $)
+syn match cuplDirective "\$msg"
+syn match cuplDirective "\$macro"
+syn match cuplDirective "\$mend"
+syn match cuplDirective "\$repeat"
+syn match cuplDirective "\$repend"
+syn match cuplDirective "\$define"
+syn match cuplDirective "\$include"
+
+" multi-line comments
+syn region cuplComment start=+/\*+ end=+\*/+ contains=cuplNumber,cuplTodo
+
+syn sync minlines=1
+
+" 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_cupl_syn_inits")
+ if version < 508
+ let did_cupl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink cuplHeader cuplStatement
+ HiLink cuplLogicalOperator cuplOperator
+ HiLink cuplRangeOperator cuplOperator
+ HiLink cuplArithmeticOperator cuplOperator
+ HiLink cuplAssignmentOperator cuplOperator
+ HiLink cuplEqualityOperator cuplOperator
+ HiLink cuplTruthTableOperator cuplOperator
+ HiLink cuplOperator cuplStatement
+ HiLink cuplFunction cuplStatement
+ HiLink cuplStatement Statement
+ HiLink cuplNumberRange cuplNumber
+ HiLink cuplNumber cuplString
+ HiLink cuplString String
+ HiLink cuplComment Comment
+ HiLink cuplExtension cuplSpecial
+ HiLink cuplSpecialChar cuplSpecial
+ HiLink cuplSpecial Special
+ HiLink cuplDirective PreProc
+ HiLink cuplTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cupl"
+" vim:ts=8
diff --git a/runtime/syntax/cuplsim.vim b/runtime/syntax/cuplsim.vim
new file mode 100644
index 000000000..18a30ce25
--- /dev/null
+++ b/runtime/syntax/cuplsim.vim
@@ -0,0 +1,80 @@
+" Vim syntax file
+" Language: CUPL simulation
+" Maintainer: John Cook <john.cook@kla-tencor.com>
+" Last Change: 2001 Apr 25
+
+" 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 CUPL syntax to start with
+if version < 600
+ source <sfile>:p:h/cupl.vim
+else
+ runtime! syntax/cupl.vim
+ unlet b:current_syntax
+endif
+
+" omit definition-specific stuff
+syn clear cuplStatement
+syn clear cuplFunction
+syn clear cuplLogicalOperator
+syn clear cuplArithmeticOperator
+syn clear cuplAssignmentOperator
+syn clear cuplEqualityOperator
+syn clear cuplTruthTableOperator
+syn clear cuplExtension
+
+" simulation order statement
+syn match cuplsimOrder "order:" nextgroup=cuplsimOrderSpec skipempty
+syn region cuplsimOrderSpec start="." end=";"me=e-1 contains=cuplComment,cuplsimOrderFormat,cuplBitVector,cuplSpecialChar,cuplLogicalOperator,cuplCommaOperator contained
+
+" simulation base statement
+syn match cuplsimBase "base:" nextgroup=cuplsimBaseSpec skipempty
+syn region cuplsimBaseSpec start="." end=";"me=e-1 contains=cuplComment,cuplsimBaseType contained
+syn keyword cuplsimBaseType octal decimal hex contained
+
+" simulation vectors statement
+syn match cuplsimVectors "vectors:"
+
+" simulator format control
+syn match cuplsimOrderFormat "%\d\+\>" contained
+
+" simulator control
+syn match cuplsimStimulus "[10ckpx]\+"
+syn match cuplsimStimulus +'\(\x\|x\)\+'+
+syn match cuplsimOutput "[lhznx*]\+"
+syn match cuplsimOutput +"\x\+"+
+
+syn sync minlines=1
+
+" 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_cuplsim_syn_inits")
+ if version < 508
+ let did_cuplsim_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " append to the highlighting links in cupl.vim
+ " The default highlighting.
+ HiLink cuplsimOrder cuplStatement
+ HiLink cuplsimBase cuplStatement
+ HiLink cuplsimBaseType cuplStatement
+ HiLink cuplsimVectors cuplStatement
+ HiLink cuplsimStimulus cuplNumber
+ HiLink cuplsimOutput cuplNumber
+ HiLink cuplsimOrderFormat cuplNumber
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cuplsim"
+" vim:ts=8
diff --git a/runtime/syntax/cvs.vim b/runtime/syntax/cvs.vim
new file mode 100644
index 000000000..94b2a809e
--- /dev/null
+++ b/runtime/syntax/cvs.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language: CVS commit file
+" Maintainer: Matt Dunford (zoot@zotikos.com)
+" URL: http://www.zotikos.com/downloads/cvs.vim
+" Last Change: Sat Nov 24 23:25:11 CET 2001
+
+" 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 region cvsLine start="^CVS: " end="$" contains=cvsFile,cvsCom,cvsFiles,cvsTag
+syn match cvsFile contained " \t\(\(\S\+\) \)\+"
+syn match cvsTag contained " Tag:"
+syn match cvsFiles contained "\(Added\|Modified\|Removed\) Files:"
+syn region cvsCom start="Committing in" end="$" contains=cvsDir contained extend keepend
+syn match cvsDir contained "\S\+$"
+
+" 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_cvs_syn_inits")
+ if version < 508
+ let did_cvs_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cvsLine Comment
+ HiLink cvsDir cvsFile
+ HiLink cvsFile Constant
+ HiLink cvsFiles cvsCom
+ HiLink cvsTag cvsCom
+ HiLink cvsCom Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cvs"
diff --git a/runtime/syntax/cvsrc.vim b/runtime/syntax/cvsrc.vim
new file mode 100644
index 000000000..d55197950
--- /dev/null
+++ b/runtime/syntax/cvsrc.vim
@@ -0,0 +1,49 @@
+" Vim syntax file
+" Language: CVS RC File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/syntax/pcp/cvsrc/
+" Latest Revision: 2004-05-06
+" arch-tag: 1910f2a8-66f4-4dde-9d1a-297566934535
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" strings
+syn region cvsrcString start=+"+ skip=+\\\\\|\\\\"+ end=+"\|$+
+syn region cvsrcString start=+'+ skip=+\\\\\|\\\\'+ end=+'\|$+
+
+" numbers
+syn match cvsrcNumber "\<\d\+\>"
+
+" commands
+syn match cvsrcBegin "^" nextgroup=cvsrcCommand skipwhite
+
+syn region cvsrcCommand contained transparent matchgroup=cvsrcCommand start="add\|admin\|checkout\|commit\|cvs\|diff\|export\|history\|import\|init\|log\|rdiff\|release\|remove\|rtag\|status\|tag\|update" end="$" contains=cvsrcOption,cvsrcString,cvsrcNumber keepend
+
+" options
+syn match cvsrcOption "-\a\+"
+
+" 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_cvsrc_syn_inits")
+ if version < 508
+ let did_cvsrc_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cvsrcString String
+ HiLink cvsrcNumber Number
+ HiLink cvsrcCommand Keyword
+ HiLink cvsrcOption Identifier
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cvsrc"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/cweb.vim b/runtime/syntax/cweb.vim
new file mode 100644
index 000000000..4062b0a4e
--- /dev/null
+++ b/runtime/syntax/cweb.vim
@@ -0,0 +1,80 @@
+" Vim syntax file
+" Language: CWEB
+" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: April 30, 2001
+
+" 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
+" file "cwebman.tex" in the standard CWEB distribution, available for
+" anonymous ftp at ftp://labrea.stanford.edu/pub/cweb/.
+
+" TODO: Section names and C/C++ comments should be treated as TeX material.
+" TODO: The current version switches syntax highlighting off for section
+" TODO: names, and leaves C/C++ comments as such. (On the other hand,
+" TODO: switching to TeX mode in C/C++ comments might be colour overkill.)
+
+" 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
+
+" For starters, read the TeX syntax; TeX syntax items are allowed at the top
+" level in the CWEB syntax, e.g., in the preamble. In general, a CWEB source
+" code can be seen as a normal TeX document with some C/C++ material
+" interspersed in certain defined regions.
+if version < 600
+ source <sfile>:p:h/tex.vim
+else
+ runtime! syntax/tex.vim
+ unlet b:current_syntax
+endif
+
+" Read the C/C++ syntax too; C/C++ syntax items are treated as such in the
+" C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
+syntax include @webIncludedC <sfile>:p:h/cpp.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
+" that an ICC begins either at the start of a line or after some white space.
+syntax region webInnerCcontext start="\(^\|[ \t\~`(]\)|" end="|" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
+
+" Genuine C/C++ material. This syntactic region covers both the definition
+" part and the C/C++ part of a CWEB section; it is ended by the TeX part of
+" the next section.
+syntax region webCpart start="@[dfscp<(]" end="@[ \*]" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
+
+" Section names contain C/C++ material only in inner context.
+syntax region webSectionName start="@[<(]" end="@>" contains=webInnerCcontext contained
+
+" The contents of "control texts" is not treated as TeX material, because in
+" non-trivial cases this completely clobbers the syntax recognition. Instead,
+" we highlight these elements as "strings".
+syntax region webRestrictedTeX start="@[\^\.:t=q]" end="@>" oneline
+
+" Double-@ means single-@, anywhere in the CWEB source. (This allows e-mail
+" address <someone@@fsf.org> without going into C/C++ mode.)
+syntax match webIgnoredStuff "@@"
+
+" 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_cweb_syntax_inits")
+ if version < 508
+ let did_cweb_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink webRestrictedTeX String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cweb"
+
+" vim: ts=8
diff --git a/runtime/syntax/cynlib.vim b/runtime/syntax/cynlib.vim
new file mode 100644
index 000000000..a9985074d
--- /dev/null
+++ b/runtime/syntax/cynlib.vim
@@ -0,0 +1,91 @@
+" Vim syntax file
+" Language: Cynlib(C++)
+" Maintainer: Phil Derrick <phild@forteds.com>
+" Last change: 2001 Sep 02
+" URL http://www.derrickp.freeserve.co.uk/vim/syntax/cynlib.vim
+"
+" Language Information
+"
+" Cynlib is a library of C++ classes to allow hardware
+" modelling in C++. Combined with a simulation kernel,
+" the compiled and linked executable forms a hardware
+" simulation of the described design.
+"
+" Further information can be found from www.forteds.com
+
+
+" Remove any old syntax stuff hanging around
+" 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 - this includes the C syntax
+if version < 600
+ source <sfile>:p:h/cpp.vim
+else
+ runtime! syntax/cpp.vim
+endif
+unlet b:current_syntax
+
+" Cynlib extensions
+
+syn keyword cynlibMacro Default CYNSCON
+syn keyword cynlibMacro Case CaseX EndCaseX
+syn keyword cynlibType CynData CynSignedData CynTime
+syn keyword cynlibType In Out InST OutST
+syn keyword cynlibType Struct
+syn keyword cynlibType Int Uint Const
+syn keyword cynlibType Long Ulong
+syn keyword cynlibType OneHot
+syn keyword cynlibType CynClock Cynclock0
+syn keyword cynlibFunction time configure my_name
+syn keyword cynlibFunction CynModule epilog execute_on
+syn keyword cynlibFunction my_name
+syn keyword cynlibFunction CynBind bind
+syn keyword cynlibFunction CynWait CynEvent
+syn keyword cynlibFunction CynSetName
+syn keyword cynlibFunction CynTick CynRun
+syn keyword cynlibFunction CynFinish
+syn keyword cynlibFunction Cynprintf CynSimTime
+syn keyword cynlibFunction CynVcdFile
+syn keyword cynlibFunction CynVcdAdd CynVcdRemove
+syn keyword cynlibFunction CynVcdOn CynVcdOff
+syn keyword cynlibFunction CynVcdScale
+syn keyword cynlibFunction CynBgnName CynEndName
+syn keyword cynlibFunction CynClock configure time
+syn keyword cynlibFunction CynRedAnd CynRedNand
+syn keyword cynlibFunction CynRedOr CynRedNor
+syn keyword cynlibFunction CynRedXor CynRedXnor
+syn keyword cynlibFunction CynVerify
+
+
+syn match cynlibOperator "<<="
+syn keyword cynlibType In Out InST OutST Int Uint Const Cynclock
+
+" 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_cynlib_syntax_inits")
+ if version < 508
+ let did_cynlib_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cynlibOperator Operator
+ HiLink cynlibMacro Statement
+ HiLink cynlibFunction Statement
+ HiLink cynlibppMacro Statement
+ HiLink cynlibType Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cynlib"
diff --git a/runtime/syntax/cynpp.vim b/runtime/syntax/cynpp.vim
new file mode 100644
index 000000000..b984bace3
--- /dev/null
+++ b/runtime/syntax/cynpp.vim
@@ -0,0 +1,68 @@
+" Vim syntax file
+" Language: Cyn++
+" Maintainer: Phil Derrick <phild@forteds.com>
+" Last change: 2001 Sep 02
+"
+" Language Information
+"
+" Cynpp (Cyn++) is a macro language to ease coding in Cynlib.
+" Cynlib is a library of C++ classes to allow hardware
+" modelling in C++. Combined with a simulation kernel,
+" the compiled and linked executable forms a hardware
+" simulation of the described design.
+"
+" Cyn++ is designed to be HDL-like.
+"
+" Further information can be found from www.forteds.com
+
+
+
+
+
+" Remove any old syntax stuff hanging around
+" 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 Cynlib syntax to start with - this includes the C++ syntax
+if version < 600
+ source <sfile>:p:h/cynlib.vim
+else
+ runtime! syntax/cynlib.vim
+endif
+unlet b:current_syntax
+
+
+
+" Cyn++ extensions
+
+syn keyword cynppMacro Always EndAlways
+syn keyword cynppMacro Module EndModule
+syn keyword cynppMacro Initial EndInitial
+syn keyword cynppMacro Posedge Negedge Changed
+syn keyword cynppMacro At
+syn keyword cynppMacro Thread EndThread
+syn keyword cynppMacro Instantiate
+
+" 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_cynpp_syntax_inits")
+ if version < 508
+ let did_cynpp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cLabel Label
+ HiLink cynppMacro Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cynpp"
diff --git a/runtime/syntax/d.vim b/runtime/syntax/d.vim
new file mode 100644
index 000000000..51ecc43ae
--- /dev/null
+++ b/runtime/syntax/d.vim
@@ -0,0 +1,219 @@
+" Vim syntax file for the D programming language (version 0.90).
+"
+" Language: D
+" Maintainer: Jason Mills<jmills@cs.mun.ca>
+" URL:
+" Last Change: 2004 May 21
+" Version: 0.8
+"
+" Options:
+" d_comment_strings - set to highlight strings and numbers in comments
+"
+" d_hl_operator_overload - set to highlight D's specially named functions
+" that when overloaded implement unary and binary operators (e.g. cmp).
+"
+" Todo:
+" - Allow user to set sync minlines
+"
+" - Several keywords (namely, in and out) are both storage class and
+" statements, depending on their context. Must use some matching to figure
+" out which and highlight appropriately. For now I have made such keywords
+" statements.
+"
+" - Mark contents of the asm statement body as special
+"
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" Keyword definitions
+"
+syn keyword dExternal import module extern
+syn keyword dConditional if else switch
+syn keyword dBranch goto break continue
+syn keyword dRepeat while for do foreach
+syn keyword dBoolean true false
+syn keyword dConstant null
+syn keyword dTypedef alias typedef
+syn keyword dStructure template interface class enum struct union
+syn keyword dOperator new delete typeof cast align is
+syn keyword dOperator this super
+if exists("d_hl_operator_overload")
+ syn keyword dOpOverload opNeg opCom opPostInc opPostDec 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 opCmp opCmp opCmp
+ syn keyword dOpOverload opAddAssign opSubAssign opMulAssign opDivAssign
+ syn keyword dOpOverload opModAssign opAndAssign opOrAssign opXorAssign
+ syn keyword dOpOverload opShlAssign opShrAssign opUShrAssign opCatAssign
+ syn keyword dOpOverload opIndex opCall opSlice
+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
+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 invariant body
+syn keyword dStatement in out inout asm mixin
+syn keyword dStatement function delegate
+syn keyword dStorageClass auto static override final const abstract volatile
+syn keyword dStorageClass synchronized
+syn keyword dPragma pragma
+
+
+" Assert is a statement and a module name.
+syn match dAssert "^assert\>"
+syn match dAssert "[^.]\s*\<assert\>"ms=s+1
+
+" 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
+
+" 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
+syn keyword dLabel case default
+
+" Comments
+"
+syn keyword dTodo contained TODO FIXME TEMP XXX
+syn match dCommentStar contained "^\s*\*[^/]"me=e-1
+syn match dCommentStar contained "^\s*\*$"
+syn match dCommentPlus contained "^\s*+[^/]"me=e-1
+syn match dCommentPlus contained "^\s*+$"
+if exists("d_comment_strings")
+ 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 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 match dLineComment "//.*" contains=dLineCommentString,dTodo,@Spell
+endif
+
+hi link dLineCommentString dBlockCommentString
+hi link dBlockCommentString dString
+hi link dNestedCommentString dString
+hi link dCommentStar dBlockComment
+hi link dCommentPlus dNestedComment
+
+syn sync minlines=25
+
+" Characters
+"
+syn match dSpecialCharError contained "[^']"
+
+" Escape sequences (oct,specal char,hex,wchar). These are not contained
+" because they are considered string litterals
+syn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
+syn match dCharacter "'[^']*'" contains=dEscSequence,dSpecialCharError
+syn match dCharacter "'\\''" contains=dEscSequence
+syn match dCharacter "'[^\\]'"
+
+" Unicode characters
+"
+syn match dUnicode "\\u\d\{4\}"
+
+" String.
+"
+syn region dString start=+"+ end=+"+ contains=dEscSequence,@Spell
+syn region dRawString start=+`+ skip=+\\`+ end=+`+ contains=@Spell
+syn region dRawString start=+r"+ skip=+\\"+ end=+"+ contains=@Spell
+syn region dHexString start=+x"+ skip=+\\"+ end=+"+
+
+" Numbers
+"
+syn case ignore
+syn match dInt display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
+" Hex number
+syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
+syn match dHex display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>"
+" Flag the first zero of an octal number as something special
+syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero
+syn match dOctalZero display contained "\<0"
+
+"floating point without the dot
+syn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
+"floating point number, with dot, optional exponent
+syn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
+"floating point number, starting with a dot, optional exponent
+syn match dFloat display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
+"floating point number, without dot, with exponent
+"syn match dFloat display "\<\d\+e[-+]\=\d\+[fl]\=\>"
+syn match dFloat display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
+
+"floating point without the dot
+syn match dHexFloat display "\<0x\x\+\(fi\=\|l\=i\)\>"
+"floating point number, with dot, optional exponent
+syn match dHexFloat display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\="
+"floating point number, without dot, with exponent
+syn match dHexFloat display "\<0x\x\+p[-+]\=\x\+[fl]\=\>"
+
+" binary numbers
+syn match dBinary display "\<0b[01_]\+\>"
+" flag an octal number with wrong digits
+syn match dOctalError display "0\o*[89]\d*"
+syn case match
+
+" Pragma (preprocessor) support
+" TODO: Highlight following Integer and optional Filespec.
+syn region dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
+
+
+" The default highlighting.
+"
+hi def link dBinary Number
+hi def link dInt 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 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 Operator
+hi def link dConstant Constant
+hi def link dTypedef Typedef
+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
+
+let b:current_syntax = "d"
+
+" vim: ts=8
diff --git a/runtime/syntax/dcd.vim b/runtime/syntax/dcd.vim
new file mode 100644
index 000000000..a566745fb
--- /dev/null
+++ b/runtime/syntax/dcd.vim
@@ -0,0 +1,64 @@
+" Vim syntax file
+" Language: WildPackets EtherPeek Decoder (.dcd) file
+" Maintainer: Christopher Shinn <christopher@lucent.com>
+" Last Change: 2003 Apr 25
+
+" 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
+
+" Keywords
+syn keyword dcdFunction DCod TRTS TNXT CRLF
+syn match dcdFunction display "\(STR\)\#"
+syn keyword dcdLabel LABL
+syn region dcdLabel start="[A-Z]" end=";"
+syn keyword dcdConditional CEQU CNEQ CGTE CLTE CBIT CLSE
+syn keyword dcdConditional LSTS LSTE LSTZ
+syn keyword dcdConditional TYPE TTST TEQU TNEQ TGTE TLTE TBIT TLSE TSUB SKIP
+syn keyword dcdConditional MARK WHOA
+syn keyword dcdConditional SEQU SNEQ SGTE SLTE SBIT
+syn match dcdConditional display "\(CST\)\#" "\(TST\)\#"
+syn keyword dcdDisplay HBIT DBIT BBIT
+syn keyword dcdDisplay HBYT DBYT BBYT
+syn keyword dcdDisplay HWRD DWRD BWRD
+syn keyword dcdDisplay HLNG DLNG BLNG
+syn keyword dcdDisplay D64B
+syn match dcdDisplay display "\(HEX\)\#" "\(CHR\)\#" "\(EBC\)\#"
+syn keyword dcdDisplay HGLB DGLB BGLB
+syn keyword dcdDisplay DUMP
+syn keyword dcdStatement IPLG IPV6 ATLG AT03 AT01 ETHR TRNG PRTO PORT
+syn keyword dcdStatement TIME OSTP PSTR CSTR NBNM DMPE FTPL CKSM FCSC
+syn keyword dcdStatement GBIT GBYT GWRD GLNG
+syn keyword dcdStatement MOVE ANDG ORRG NOTG ADDG SUBG MULG DIVG MODG INCR DECR
+syn keyword dcdSpecial PRV1 PRV2 PRV3 PRV4 PRV5 PRV6 PRV7 PRV8
+
+" Comment
+syn region dcdComment start="\*" end="\;"
+
+" 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_dcd_syntax_inits")
+ if version < 508
+ let did_dcd_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dcdFunction Identifier
+ HiLink dcdLabel Constant
+ HiLink dcdConditional Conditional
+ HiLink dcdDisplay Type
+ HiLink dcdStatement Statement
+ HiLink dcdSpecial Special
+ HiLink dcdComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dcd"
diff --git a/runtime/syntax/dcl.vim b/runtime/syntax/dcl.vim
new file mode 100644
index 000000000..0d67a712c
--- /dev/null
+++ b/runtime/syntax/dcl.vim
@@ -0,0 +1,164 @@
+" Vim syntax file
+" Language: DCL (Digital Command Language - vms)
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 3
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+if version < 600
+ set iskeyword=$,@,48-57,_
+else
+ setlocal iskeyword=$,@,48-57,_
+endif
+
+syn case ignore
+syn keyword dclInstr accounting del[ete] gen[cat] mou[nt] run
+syn keyword dclInstr all[ocate] dep[osit] gen[eral] ncp run[off]
+syn keyword dclInstr ana[lyze] dia[gnose] gos[ub] ncs sca
+syn keyword dclInstr app[end] dif[ferences] got[o] on sea[rch]
+syn keyword dclInstr ass[ign] dir[ectory] hel[p] ope[n] set
+syn keyword dclInstr att[ach] dis[able] ico[nv] pas[cal] sho[w]
+syn keyword dclInstr aut[horize] dis[connect] if pas[sword] sor[t]
+syn keyword dclInstr aut[ogen] dis[mount] ini[tialize] pat[ch] spa[wn]
+syn keyword dclInstr bac[kup] dpm[l] inq[uire] pca sta[rt]
+syn keyword dclInstr cal[l] dqs ins[tall] pho[ne] sto[p]
+syn keyword dclInstr can[cel] dsr job pri[nt] sub[mit]
+syn keyword dclInstr cc dst[graph] lat[cp] pro[duct] sub[routine]
+syn keyword dclInstr clo[se] dtm lib[rary] psw[rap] swx[cr]
+syn keyword dclInstr cms dum[p] lic[ense] pur[ge] syn[chronize]
+syn keyword dclInstr con[nect] edi[t] lin[k] qde[lete] sys[gen]
+syn keyword dclInstr con[tinue] ena[ble] lmc[p] qse[t] sys[man]
+syn keyword dclInstr con[vert] end[subroutine] loc[ale] qsh[ow] tff
+syn keyword dclInstr cop[y] eod log[in] rea[d] then
+syn keyword dclInstr cre[ate] eoj log[out] rec[all] typ[e]
+syn keyword dclInstr cxx exa[mine] lse[dit] rec[over] uil
+syn keyword dclInstr cxx[l_help] exc[hange] mac[ro] ren[ame] unl[ock]
+syn keyword dclInstr dea[llocate] exi[t] mai[l] rep[ly] ves[t]
+syn keyword dclInstr dea[ssign] fdl mer[ge] req[uest] vie[w]
+syn keyword dclInstr deb[ug] flo[wgraph] mes[sage] ret[urn] wai[t]
+syn keyword dclInstr dec[k] fon[t] mms rms wri[te]
+syn keyword dclInstr def[ine] for[tran]
+
+syn keyword dclLexical f$context f$edit f$getjpi f$message f$setprv
+syn keyword dclLexical f$csid f$element f$getqui f$mode f$string
+syn keyword dclLexical f$cvsi f$environment f$getsyi f$parse f$time
+syn keyword dclLexical f$cvtime f$extract f$identifier f$pid f$trnlnm
+syn keyword dclLexical f$cvui f$fao f$integer f$privilege f$type
+syn keyword dclLexical f$device f$file_attributes f$length f$process f$user
+syn keyword dclLexical f$directory f$getdvi f$locate f$search f$verify
+
+syn match dclMdfy "/\I\i*" nextgroup=dclMdfySet,dclMdfySetString
+syn match dclMdfySet "=[^ \t"]*" contained
+syn region dclMdfySet matchgroup=dclMdfyBrkt start="=\[" matchgroup=dclMdfyBrkt end="]" contains=dclMdfySep
+syn region dclMdfySetString start='="' skip='""' end='"' contained
+syn match dclMdfySep "[:,]" contained
+
+" Numbers
+syn match dclNumber "\d\+"
+
+" Varname (mainly to prevent dclNumbers from being recognized when part of a dclVarname)
+syn match dclVarname "\I\i*"
+
+" Filenames (devices, paths)
+syn match dclDevice "\I\i*\(\$\I\i*\)\=:[^=]"me=e-1 nextgroup=dclDirPath,dclFilename
+syn match dclDirPath "\[\(\I\i*\.\)*\I\i*\]" contains=dclDirSep nextgroup=dclFilename
+syn match dclFilename "\I\i*\$\(\I\i*\)\=\.\(\I\i*\)*\(;\d\+\)\=" contains=dclDirSep
+syn match dclFilename "\I\i*\.\(\I\i*\)\=\(;\d\+\)\=" contains=dclDirSep contained
+syn match dclDirSep "[[\].;]"
+
+" Strings
+syn region dclString start='"' skip='""' end='"'
+
+" $ stuff and comments
+syn cluster dclCommentGroup contains=dclStart,dclTodo,@Spell
+syn match dclStart "^\$" skipwhite nextgroup=dclExe
+syn match dclContinue "-$"
+syn match dclComment "^\$!.*$" contains=@dclCommentGroup
+syn match dclExe "\I\i*" contained
+syn match dclTodo "DEBUG\|TODO" contained
+
+" Assignments and Operators
+syn match dclAssign ":==\="
+syn match dclAssign "="
+syn match dclOper "--\|+\|\*\|/"
+syn match dclLogOper "\.[a-zA-Z][a-zA-Z][a-zA-Z]\=\." contains=dclLogical,dclLogSep
+syn keyword dclLogical contained and ge gts lt nes
+syn keyword dclLogical contained eq ges le lts not
+syn keyword dclLogical contained eqs gt les ne or
+syn match dclLogSep "\." contained
+
+" @command procedures
+syn match dclCmdProcStart "@" nextgroup=dclCmdProc
+syn match dclCmdProc "\I\i*\(\.\I\i*\)\=" contained
+syn match dclCmdProc "\I\i*:" contained nextgroup=dclCmdDirPath,dclCmdProc
+syn match dclCmdDirPath "\[\(\I\i*\.\)*\I\i*\]" contained nextgroup=delCmdProc
+
+" labels
+syn match dclGotoLabel "^\$\s*\I\i*:\s*$" contains=dclStart
+
+" parameters
+syn match dclParam "'\I[a-zA-Z0-9_$]*'\="
+
+" () matching (the clusters are commented out until a vim/vms comes out for v5.2+)
+"syn cluster dclNextGroups contains=dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo
+"syn region dclFuncList matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,@dclNextGroups
+syn region dclFuncList matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo
+syn match dclError ")"
+
+" 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_dcl_syntax_inits")
+ if version < 508
+ let did_dcl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dclLogOper dclError
+ HiLink dclLogical dclOper
+ HiLink dclLogSep dclSep
+
+ HiLink dclAssign Operator
+ HiLink dclCmdProc Special
+ HiLink dclCmdProcStart Operator
+ HiLink dclComment Comment
+ HiLink dclContinue Statement
+ HiLink dclDevice Identifier
+ HiLink dclDirPath Identifier
+ HiLink dclDirPath Identifier
+ HiLink dclDirSep Delimiter
+ HiLink dclError Error
+ HiLink dclExe Statement
+ HiLink dclFilename NONE
+ HiLink dclGotoLabel Label
+ HiLink dclInstr Statement
+ HiLink dclLexical Function
+ HiLink dclMdfy Type
+ HiLink dclMdfyBrkt Delimiter
+ HiLink dclMdfySep Delimiter
+ HiLink dclMdfySet Type
+ HiLink dclMdfySetString String
+ HiLink dclNumber Number
+ HiLink dclOper Operator
+ HiLink dclParam Special
+ HiLink dclSep Delimiter
+ HiLink dclStart Delimiter
+ HiLink dclString String
+ HiLink dclTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dcl"
+
+" vim: ts=16
diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim
new file mode 100644
index 000000000..577b48d3e
--- /dev/null
+++ b/runtime/syntax/debchangelog.vim
@@ -0,0 +1,54 @@
+" Vim syntax file
+" Language: Debian changelog files
+" Maintainer: Wichert Akkerman <wakkerma@debian.org>
+" Last Change: 30 April 2001
+
+" Standard syntax initialization
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Case doesn't matter for us
+syn case ignore
+
+" Define some common expressions we can use later on
+syn match debchangelogName contained "^[[:alpha:]][[:alnum:].+-]\+ "
+syn match debchangelogUrgency contained "; urgency=\(low\|medium\|high\|critical\)"
+syn match debchangelogTarget contained "\( stable\| frozen\| unstable\| experimental\)\+"
+syn match debchangelogVersion contained "(.\{-})"
+syn match debchangelogCloses contained "closes:\s*\(bug\)\=#\s\=\d\+\(,\s*\(bug\)\=#\s\=\d\+\)*"
+syn match debchangelogEmail contained "[_=[:alnum:].+-]\+@[[:alnum:]./\-]\+"
+syn match debchangelogEmail contained "<.\{-}>"
+
+" Define the entries that make up the changelog
+syn region debchangelogHeader start="^[^ ]" end="$" contains=debchangelogName,debchangelogUrgency,debchangelogTarget,debchangelogVersion oneline
+syn region debchangelogFooter start="^ [^ ]" end="$" contains=debchangelogEmail oneline
+syn region debchangelogEntry start="^ " end="$" contains=debchangelogCloses oneline
+
+" Associate our matches and regions with pretty colours
+if version >= 508 || !exists("did_debchangelog_syn_inits")
+ if version < 508
+ let did_debchangelog_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink debchangelogHeader Error
+ HiLink debchangelogFooter Identifier
+ HiLink debchangelogEntry Normal
+ HiLink debchangelogCloses Statement
+ HiLink debchangelogUrgency Identifier
+ HiLink debchangelogName Comment
+ HiLink debchangelogVersion Identifier
+ HiLink debchangelogTarget Identifier
+ HiLink debchangelogEmail Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "debchangelog"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim
new file mode 100644
index 000000000..d580fdb93
--- /dev/null
+++ b/runtime/syntax/debcontrol.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Language: Debian control files
+" Maintainer: Wichert Akkerman <wakkerma@debian.org>
+" Last Change: October 28, 2001
+
+" Standard syntax initialization
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Everything that is not explicitly matched by the rules below
+syn match debcontrolElse "^.*$"
+
+" Common seperators
+syn match debControlComma ", *"
+syn match debControlSpace " "
+
+" Define some common expressions we can use later on
+syn match debcontrolArchitecture contained "\(all\|any\|alpha\|arm\|hppa\|ia64\|i386\|m68k\|mipsel\|mips\|powerpc\|sh\|sheb\|sparc\|hurd-i386\)"
+syn match debcontrolName contained "[a-z][a-z0-9+-]*"
+syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
+syn match debcontrolSection contained "\(\(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\)/\)\=\(admin\|base\|comm\|devel\|doc\|editors\|electronics\|games\|graphics\|hamradio\|interpreters\|libs\|mail\|math\|misc\|net\|news\|oldlibs\|otherosfs\|science\|shells\|sound\|text\|tex\|utils\|web\|x11\|debian-installer\)"
+syn match debcontrolVariable contained "\${.\{-}}"
+
+" An email address
+syn match debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
+syn match debcontrolEmail "<.\{-}>"
+
+" List of all legal keys
+syn match debcontrolKey contained "^\(Source\|Package\|Section\|Priority\|Maintainer\|Uploaders\|Build-Depends\|Build-Conflicts\|Build-Depends-Indep\|Build-Conflicts-Indep\|Standards-Version\|Pre-Depends\|Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Essential\|Architecture\|Description\|Bugs\|Origin\): *"
+
+" Fields for which we do strict syntax checking
+syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace 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
+
+" Catch-all for the other legal fields
+syn region debcontrolField start="^\(Maintainer\|Build-Depends\|Build-Conflicts\|Build-Depends-Indep\|Build-Conflicts-Indep\|Standards-Version\|Pre-Depends\|Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Essential\|Bugs\|Origin\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
+syn region debcontrolMultiField start="^\(Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ ]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable
+
+" Associate our matches and regions with pretty colours
+if version >= 508 || !exists("did_debcontrol_syn_inits")
+ if version < 508
+ let did_debcontrol_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink debcontrolKey Keyword
+ HiLink debcontrolField Normal
+ HiLink debcontrolStrictField Error
+ HiLink debcontrolMultiField Normal
+ HiLink debcontrolArchitecture Normal
+ HiLink debcontrolName Normal
+ HiLink debcontrolPriority Normal
+ HiLink debcontrolSection Normal
+ HiLink debcontrolVariable Identifier
+ HiLink debcontrolEmail Identifier
+ HiLink debcontrolElse Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "debcontrol"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/def.vim b/runtime/syntax/def.vim
new file mode 100644
index 000000000..a360022b2
--- /dev/null
+++ b/runtime/syntax/def.vim
@@ -0,0 +1,57 @@
+" Vim syntax file
+" Language: Microsoft Module-Definition (.def) File
+" Maintainer: Rob Brady <robb@datatone.com>
+" Last Change: $Date$
+" URL: http://www.datatone.com/~robb/vim/syntax/def.vim
+" $Revision$
+
+" 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
+
+syn match defComment ";.*"
+
+syn keyword defKeyword LIBRARY STUB EXETYPE DESCRIPTION CODE WINDOWS DOS
+syn keyword defKeyword RESIDENTNAME PRIVATE EXPORTS IMPORTS SEGMENTS
+syn keyword defKeyword HEAPSIZE DATA
+syn keyword defStorage LOADONCALL MOVEABLE DISCARDABLE SINGLE
+syn keyword defStorage FIXED PRELOAD
+
+syn match defOrdinal "@\d\+"
+
+syn region defString start=+'+ end=+'+
+
+syn match defNumber "\d+"
+syn match defNumber "0x\x\+"
+
+
+" 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_def_syntax_inits")
+ if version < 508
+ let did_def_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink defComment Comment
+ HiLink defKeyword Keyword
+ HiLink defStorage StorageClass
+ HiLink defString String
+ HiLink defNumber Number
+ HiLink defOrdinal Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "def"
+
+" vim: ts=8
diff --git a/runtime/syntax/desc.vim b/runtime/syntax/desc.vim
new file mode 100644
index 000000000..0d0dbbda4
--- /dev/null
+++ b/runtime/syntax/desc.vim
@@ -0,0 +1,100 @@
+" Vim syntax file
+" Language: ROCKLinux .desc
+" Maintainer: Piotr Esden-Tempski <esden@rocklinux.org>
+" Last Change: 2002 Apr 23
+
+" 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
+
+" syntax definitions
+
+setl iskeyword+=-
+syn keyword descFlag DIETLIBC contained
+syn keyword descLicense Unknown GPL LGPL FDL MIT BSD OpenSource Free-to-use Commercial contained
+
+" tags
+syn match descTag /^\[\(I\|TITLE\)\]/
+syn match descTag /^\[\(T\|TEXT\)\]/ contained
+syn match descTag /^\[\(U\|URL\)\]/
+syn match descTag /^\[\(A\|AUTHOR\)\]/
+syn match descTag /^\[\(M\|MAINTAINER\)\]/
+syn match descTag /^\[\(C\|CATEGORY\)\]/ contained
+syn match descTag /^\[\(F\|FLAG\)\]/ contained
+syn match descTag /^\[\(E\|DEP\|DEPENDENCY\)\]/
+syn match descTag /^\[\(R\|ARCH\|ARCHITECTURE\)\]/
+syn match descTag /^\[\(L\|LICENSE\)\]/ contained
+syn match descTag /^\[\(S\|STATUS\)\]/
+syn match descTag /^\[\(V\|VER\|VERSION\)\]/
+syn match descTag /^\[\(P\|PRI\|PRIORITY\)\]/ nextgroup=descInstall skipwhite
+syn match descTag /^\[\(D\|DOWN\|DOWNLOAD\)\]/ nextgroup=descSum skipwhite
+
+" misc
+syn match descUrl /\w\+:\/\/\S\+/
+syn match descCategory /\w\+\/\w\+/ contained
+syn match descEmail /<\w\+@[\.A-Za-z0-9]\+>/
+
+" priority tag
+syn match descInstallX /X/ contained
+syn match descInstallO /O/ contained
+syn match descInstall /[OX]/ contained contains=descInstallX,descInstallO nextgroup=descStage skipwhite
+syn match descDash /-/ contained
+syn match descDigit /\d/ contained
+syn match descStage /[\-0][\-1][\-2][\-3][\-4][\-5][\-6][\-7][\-8][\-9]/ contained contains=descDash,descDigit nextgroup=descCompilePriority skipwhite
+syn match descCompilePriority /\d\{3}\.\d\{3}/ contained
+
+" download tag
+syn match descSum /\d\+/ contained nextgroup=descTarball skipwhite
+syn match descTarball /\S\+/ contained nextgroup=descUrl skipwhite
+
+
+" tag regions
+syn region descText start=/^\[\(T\|TEXT\)\]/ end=/$/ contains=descTag,descUrl,descEmail
+
+syn region descTagRegion start=/^\[\(C\|CATEGORY\)\]/ end=/$/ contains=descTag,descCategory
+
+syn region descTagRegion start=/^\[\(F\|FLAG\)\]/ end=/$/ contains=descTag,descFlag
+
+syn region descTagRegion start=/^\[\(L\|LICENSE\)\]/ end=/$/ contains=descTag,descLicense
+
+" For version 5.7 and earlier: only when not done already
+" Define the default highlighting.
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_desc_syntax_inits")
+ if version < 508
+ let did_desc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink descFlag Identifier
+ HiLink descLicense Identifier
+ HiLink descCategory Identifier
+
+ HiLink descTag Type
+ HiLink descUrl Underlined
+ HiLink descEmail Underlined
+
+ " priority tag colors
+ HiLink descInstallX Boolean
+ HiLink descInstallO Type
+ HiLink descDash Operator
+ HiLink descDigit Number
+ HiLink descCompilePriority Number
+
+ " download tag colors
+ HiLink descSum Number
+ HiLink descTarball Underlined
+
+ " tag region colors
+ HiLink descText Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "desc"
diff --git a/runtime/syntax/desktop.vim b/runtime/syntax/desktop.vim
new file mode 100644
index 000000000..5b71e5119
--- /dev/null
+++ b/runtime/syntax/desktop.vim
@@ -0,0 +1,119 @@
+" Vim syntax file
+" Language: .desktop, .directory files
+" according to freedesktop.org specification 0.9.4
+" http://pdx.freedesktop.org/Standards/desktop-entry-spec/desktop-entry-spec-0.9.4.html
+" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
+" Last Change: 2004 May 16
+" Version Info: desktop.vim 0.9.4-1.2
+
+" 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
+
+" This syntax file can be used to all *nix configuration files similar to dos
+" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. But
+" you can also enforce strict following of freedesktop.org standard for
+" .desktop and .directory files . Set (eg. in vimrc)
+" let enforce_freedesktop_standard = 1
+" and nonstandard extensions not following X- notation will not be highlighted.
+if exists("enforce_freedesktop_standard")
+ let b:enforce_freedesktop_standard = 1
+else
+ let b:enforce_freedesktop_standard = 0
+endif
+
+" case on
+syn case match
+
+" General
+if b:enforce_freedesktop_standard == 0
+ syn match dtNotStLabel "^.\{-}=\@=" nextgroup=dtDelim
+endif
+
+syn match dtGroup /^\s*\[.*\]/
+syn match dtComment /^\s*#.*$/
+syn match dtDelim /=/ contained
+
+" Locale
+syn match dtLocale /^\s*\<\(Name\|GenericName\|Comment\|SwallowTitle\|Icon\|UnmountIcon\)\>.*/ contains=dtLocaleKey,dtLocaleName,dtDelim transparent
+syn keyword dtLocaleKey Name GenericName Comment SwallowTitle Icon UnmountIcon nextgroup=dtLocaleName containedin=dtLocale
+syn match dtLocaleName /\(\[.\{-}\]\s*=\@=\|\)/ nextgroup=dtDelim containedin=dtLocale contained
+
+" Numeric
+syn match dtNumeric /^\s*\<Version\>/ contains=dtNumericKey,dtDelim
+syn keyword dtNumericKey Version nextgroup=dtDelim containedin=dtNumeric contained
+
+" Boolean
+syn match dtBoolean /^\s*\<\(StartupNotify\|ReadOnly\|Terminal\|Hidden\|NoDisplay\)\>.*/ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent
+syn keyword dtBooleanKey StartupNotify ReadOnly Terminal Hidden NoDisplay nextgroup=dtDelim containedin=dtBoolean contained
+syn keyword dtBooleanValue true false containedin=dtBoolean contained
+
+" String
+syn match dtString /^\s*\<\(Encoding\|Icon\|Path\|Actions\|FSType\|MountPoint\|UnmountIcon\|URL\|Categories\|OnlyShowIn\|NotShowIn\|StartupWMClass\|FilePattern\|MimeType\)\>.*/ contains=dtStringKey,dtDelim transparent
+syn keyword dtStringKey Type Encoding TryExec Exec Path Actions FSType MountPoint URL Categories OnlyShowIn NotShowIn StartupWMClass FilePattern MimeType nextgroup=dtDelim containedin=dtString contained
+
+" Exec
+syn match dtExec /^\s*\<\(Exec\|TryExec\|SwallowExec\)\>.*/ contains=dtExecKey,dtDelim,dtExecParam transparent
+syn keyword dtExecKey Exec TryExec SwallowExec nextgroup=dtDelim containedin=dtExec contained
+syn match dtExecParam /%[fFuUnNdDickv]/ containedin=dtExec contained
+
+" Type
+syn match dtType /^\s*\<Type\>.*/ contains=dtTypeKey,dtDelim,dtTypeValue transparent
+syn keyword dtTypeKey Type nextgroup=dtDelim containedin=dtType contained
+syn keyword dtTypeValue Application Link FSDevice Directory containedin=dtType contained
+
+" X-Addition
+syn match dtXAdd /^\s*X-.*/ contains=dtXAddKey,dtDelim transparent
+syn match dtXAddKey /^\s*X-.\{-}\s*=\@=/ nextgroup=dtDelim containedin=dtXAdd contains=dtXLocale contained
+
+" Locale for X-Addition
+syn match dtXLocale /\[.\{-}\]\s*=\@=/ containedin=dtXAddKey contained
+
+" Locale for all
+syn match dtALocale /\[.\{-}\]\s*=\@=/ containedin=ALL
+
+
+" 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_desktop_syntax_inits")
+ if version < 508
+ let did_dosini_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dtGroup Special
+ HiLink dtComment Comment
+ HiLink dtDelim String
+
+ HiLink dtLocaleKey Type
+ HiLink dtLocaleName Identifier
+ HiLink dtXLocale Identifier
+ HiLink dtALocale Identifier
+
+ HiLink dtNumericKey Type
+
+ HiLink dtBooleanKey Type
+ HiLink dtBooleanValue Constant
+
+ HiLink dtStringKey Type
+
+ HiLink dtExecKey Type
+ HiLink dtExecParam Special
+ HiLink dtTypeKey Type
+ HiLink dtTypeValue Constant
+ HiLink dtNotStLabel Type
+ HiLink dtXAddKey Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "desktop"
+
+" vim:ts=8
diff --git a/runtime/syntax/diff.vim b/runtime/syntax/diff.vim
new file mode 100644
index 000000000..2461abebb
--- /dev/null
+++ b/runtime/syntax/diff.vim
@@ -0,0 +1,78 @@
+" Vim syntax file
+" Language: Diff (context or unified)
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2003 Apr 02
+
+" 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 match diffOnly "^Only in .*"
+syn match diffIdentical "^Files .* and .* are identical$"
+syn match diffDiffer "^Files .* and .* differ$"
+syn match diffBDiffer "^Binary files .* and .* differ$"
+syn match diffIsA "^File .* is a .* while file .* is a .*"
+syn match diffNoEOL "^No newline at end of file .*"
+syn match diffCommon "^Common subdirectories: .*"
+
+syn match diffRemoved "^-.*"
+syn match diffRemoved "^<.*"
+syn match diffAdded "^+.*"
+syn match diffAdded "^>.*"
+syn match diffChanged "^! .*"
+
+syn match diffSubname " @@..*"ms=s+3 contained
+syn match diffLine "^@.*" contains=diffSubname
+syn match diffLine "^\<\d\+\>.*"
+syn match diffLine "^\*\*\*\*.*"
+
+"Some versions of diff have lines like "#c#" and "#d#" (where # is a number)
+syn match diffLine "^\d\+\(,\d\+\)\=[cda]\d\+\>.*"
+
+syn match diffFile "^diff.*"
+syn match diffFile "^+++ .*"
+syn match diffFile "^Index: .*$"
+syn match diffFile "^==== .*$"
+syn match diffOldFile "^\*\*\* .*"
+syn match diffNewFile "^--- .*"
+
+syn match diffComment "^#.*"
+
+" 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_diff_syntax_inits")
+ if version < 508
+ let did_diff_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink diffOldFile diffFile
+ HiLink diffNewFile diffFile
+ HiLink diffFile Type
+ HiLink diffOnly Constant
+ HiLink diffIdentical Constant
+ HiLink diffDiffer Constant
+ HiLink diffBDiffer Constant
+ HiLink diffIsA Constant
+ HiLink diffNoEOL Constant
+ HiLink diffCommon Constant
+ HiLink diffRemoved Special
+ HiLink diffChanged PreProc
+ HiLink diffAdded Identifier
+ HiLink diffLine Statement
+ HiLink diffSubname PreProc
+ HiLink diffComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "diff"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/dircolors.vim b/runtime/syntax/dircolors.vim
new file mode 100644
index 000000000..ade52fc6f
--- /dev/null
+++ b/runtime/syntax/dircolors.vim
@@ -0,0 +1,106 @@
+" Vim syntax file
+" Language: dircolors(1) input file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/dircolors/
+" Latest Revision: 2004-05-22
+" arch-tag: 995e2983-2a7a-4f1e-b00d-3fdf8e076b40
+" Color definition coloring implemented my Mikolaj Machowski <mikmach@wp.pl>
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" todo
+syn keyword dircolorsTodo contained FIXME TODO XXX NOTE
+
+" comments
+syn region dircolorsComment start="#" end="$" contains=dircolorsTodo
+
+" numbers
+syn match dircolorsNumber "\<\d\+\>"
+
+" keywords
+syn keyword dircolorsKeyword TERM NORMAL NORM FILE DIR LNK LINK SYMLINK
+syn keyword dircolorsKeyword ORPHAN MISSING FIFO PIPE SOCK BLK BLOCK CHR
+syn keyword dircolorsKeyword CHAR DOOR EXEC LEFT LEFTCODE RIGHT RIGHTCODE
+syn keyword dircolorsKeyword END ENDCODE
+if exists("dircolors_is_slackware")
+ syn keyword dircolorsKeyword COLOR OPTIONS EIGHTBIT
+endif
+
+" extensions
+syn match dircolorsExtension "^\s*\zs[.*]\S\+"
+
+" colors
+syn match dircolors01 "\<01\>"
+syn match dircolors04 "\<04\>"
+syn match dircolors05 "\<05\>"
+syn match dircolors07 "\<07\>"
+syn match dircolors08 "\<08\>"
+syn match dircolors30 "\<30\>"
+syn match dircolors31 "\<31\>"
+syn match dircolors32 "\<32\>"
+syn match dircolors33 "\<33\>"
+syn match dircolors34 "\<34\>"
+syn match dircolors35 "\<35\>"
+syn match dircolors36 "\<36\>"
+syn match dircolors37 "\<37\>"
+syn match dircolors40 "\<40\>"
+syn match dircolors41 "\<41\>"
+syn match dircolors42 "\<42\>"
+syn match dircolors43 "\<43\>"
+syn match dircolors44 "\<44\>"
+syn match dircolors45 "\<45\>"
+syn match dircolors46 "\<46\>"
+syn match dircolors47 "\<47\>"
+
+" 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_dircolors_syn_inits")
+ if version < 508
+ let did_dircolors_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ HiDef hi <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ HiDef hi def <args>
+ endif
+
+ HiLink dircolorsTodo Todo
+ HiLink dircolorsComment Comment
+ HiLink dircolorsNumber Number
+ HiLink dircolorsKeyword Keyword
+ HiLink dircolorsExtension Keyword
+
+ HiDef dircolors01 term=bold cterm=bold gui=bold
+ HiDef dircolors04 term=underline cterm=underline gui=underline
+ " HiDef dircolors05
+ HiDef dircolors07 term=reverse cterm=reverse gui=reverse
+ HiLink dircolors08 Ignore
+ HiDef dircolors30 ctermfg=Black guifg=Black
+ HiDef dircolors31 ctermfg=Red guifg=Red
+ HiDef dircolors32 ctermfg=Green guifg=Green
+ HiDef dircolors33 ctermfg=Yellow guifg=Yellow
+ HiDef dircolors34 ctermfg=Blue guifg=Blue
+ HiDef dircolors35 ctermfg=Magenta guifg=Magenta
+ HiDef dircolors36 ctermfg=Cyan guifg=Cyan
+ HiDef dircolors37 ctermfg=White guifg=White
+ HiDef dircolors40 ctermbg=Black ctermfg=White guibg=Black guifg=White
+ HiDef dircolors41 ctermbg=DarkRed guibg=DarkRed
+ HiDef dircolors42 ctermbg=DarkGreen guibg=DarkGreen
+ HiDef dircolors43 ctermbg=DarkYellow guibg=DarkYellow
+ HiDef dircolors44 ctermbg=DarkBlue guibg=DarkBlue
+ HiDef dircolors45 ctermbg=DarkMagenta guibg=DarkMagenta
+ HiDef dircolors46 ctermbg=DarkCyan guibg=DarkCyan
+ HiDef dircolors47 ctermbg=White ctermfg=Black guibg=White guifg=Black
+
+ delcommand HiLink
+ delcommand HiDef
+endif
+
+let b:current_syntax = "dircolors"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/diva.vim b/runtime/syntax/diva.vim
new file mode 100644
index 000000000..78668fd85
--- /dev/null
+++ b/runtime/syntax/diva.vim
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language: SKILL for Diva
+" Maintainer: Toby Schaffer <jtschaff@eos.ncsu.edu>
+" Last Change: 2001 May 09
+" Comments: SKILL is a Lisp-like programming language for use in EDA
+" tools from Cadence Design Systems. It allows you to have
+" a programming environment within the Cadence environment
+" that gives you access to the complete tool set and design
+" database. These items are for Diva verification rules decks.
+
+" Don't remove any old syntax stuff hanging around! We need stuff
+" from skill.vim.
+if !exists("did_skill_syntax_inits")
+ if version < 600
+ so <sfile>:p:h/skill.vim
+ else
+ runtime! syntax/skill.vim
+ endif
+endif
+
+syn keyword divaDRCKeywords area enc notch ovlp sep width
+syn keyword divaDRCKeywords app diffNet length lengtha lengthb
+syn keyword divaDRCKeywords notParallel only_perp opposite parallel
+syn keyword divaDRCKeywords sameNet shielded with_perp
+syn keyword divaDRCKeywords edge edgea edgeb fig figa figb
+syn keyword divaDRCKeywords normalGrow squareGrow message raw
+syn keyword divaMeasKeywords perimeter length bends_all bends_full
+syn keyword divaMeasKeywords bends_part corners_all corners_full
+syn keyword divaMeasKeywords corners_part angles_all angles_full
+syn keyword divaMeasKeywords angles_part fig_count butting coincident
+syn keyword divaMeasKeywords over not_over outside inside enclosing
+syn keyword divaMeasKeywords figure one_net two_net three_net grounded
+syn keyword divaMeasKeywords polarized limit keep ignore
+syn match divaCtrlFunctions "(ivIf\>"hs=s+1
+syn match divaCtrlFunctions "\<ivIf("he=e-1
+syn match divaCtrlFunctions "(switch\>"hs=s+1
+syn match divaCtrlFunctions "\<switch("he=e-1
+syn match divaCtrlFunctions "(and\>"hs=s+1
+syn match divaCtrlFunctions "\<and("he=e-1
+syn match divaCtrlFunctions "(or\>"hs=s+1
+syn match divaCtrlFunctions "\<or("he=e-1
+syn match divaCtrlFunctions "(null\>"hs=s+1
+syn match divaCtrlFunctions "\<null("he=e-1
+syn match divaExtFunctions "(save\(Interconnect\|Property\|Parameter\|Recognition\)\>"hs=s+1
+syn match divaExtFunctions "\<save\(Interconnect\|Property\|Parameter\|Recognition\)("he=e-1
+syn match divaExtFunctions "(\(save\|measure\|attach\|multiLevel\|calculate\)Parasitic\>"hs=s+1
+syn match divaExtFunctions "\<\(save\|measure\|attach\|multiLevel\|calculate\)Parasitic("he=e-1
+syn match divaExtFunctions "(\(calculate\|measure\)Parameter\>"hs=s+1
+syn match divaExtFunctions "\<\(calculate\|measure\)Parameter("he=e-1
+syn match divaExtFunctions "(measure\(Resistance\|Fringe\)\>"hs=s+1
+syn match divaExtFunctions "\<measure\(Resistance\|Fringe\)("he=e-1
+syn match divaExtFunctions "(extract\(Device\|MOS\)\>"hs=s+1
+syn match divaExtFunctions "\<extract\(Device\|MOS\)("he=e-1
+syn match divaDRCFunctions "(checkAllLayers\>"hs=s+1
+syn match divaDRCFunctions "\<checkAllLayers("he=e-1
+syn match divaDRCFunctions "(checkLayer\>"hs=s+1
+syn match divaDRCFunctions "\<checkLayer("he=e-1
+syn match divaDRCFunctions "(drc\>"hs=s+1
+syn match divaDRCFunctions "\<drc("he=e-1
+syn match divaDRCFunctions "(drcAntenna\>"hs=s+1
+syn match divaDRCFunctions "\<drcAntenna("he=e-1
+syn match divaFunctions "(\(drcExtract\|lvs\)Rules\>"hs=s+1
+syn match divaFunctions "\<\(drcExtract\|lvs\)Rules("he=e-1
+syn match divaLayerFunctions "(saveDerived\>"hs=s+1
+syn match divaLayerFunctions "\<saveDerived("he=e-1
+syn match divaLayerFunctions "(copyGraphics\>"hs=s+1
+syn match divaLayerFunctions "\<copyGraphics("he=e-1
+syn match divaChkFunctions "(dubiousData\>"hs=s+1
+syn match divaChkFunctions "\<dubiousData("he=e-1
+syn match divaChkFunctions "(offGrid\>"hs=s+1
+syn match divaChkFunctions "\<offGrid("he=e-1
+syn match divaLVSFunctions "(compareDeviceProperty\>"hs=s+1
+syn match divaLVSFunctions "\<compareDeviceProperty("he=e-1
+syn match divaLVSFunctions "(ignoreTerminal\>"hs=s+1
+syn match divaLVSFunctions "\<ignoreTerminal("he=e-1
+syn match divaLVSFunctions "(parameterMatchType\>"hs=s+1
+syn match divaLVSFunctions "\<parameterMatchType("he=e-1
+syn match divaLVSFunctions "(\(permute\|prune\|remove\)Device\>"hs=s+1
+syn match divaLVSFunctions "\<\(permute\|prune\|remove\)Device("he=e-1
+syn match divaGeomFunctions "(geom\u\a\+\(45\|90\)\=\>"hs=s+1
+syn match divaGeomFunctions "\<geom\u\a\+\(45\|90\)\=("he=e-1
+
+" 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_diva_syntax_inits")
+ if version < 508
+ let did_diva_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink divaDRCKeywords Statement
+ HiLink divaMeasKeywords Statement
+ HiLink divaCtrlFunctions Conditional
+ HiLink divaExtFunctions Function
+ HiLink divaDRCFunctions Function
+ HiLink divaFunctions Function
+ HiLink divaLayerFunctions Function
+ HiLink divaChkFunctions Function
+ HiLink divaLVSFunctions Function
+ HiLink divaGeomFunctions Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "diva"
+
+" vim:ts=4
diff --git a/runtime/syntax/dns.vim b/runtime/syntax/dns.vim
new file mode 100644
index 000000000..844b96f4c
--- /dev/null
+++ b/runtime/syntax/dns.vim
@@ -0,0 +1,47 @@
+" Vim syntax file
+" Language: DNS/BIND Zone File
+" Maintainer: jehsom@jehsom.com
+" URL: http://scripts.jehsom.com
+" Last Change: 2001 Sep 02
+
+" 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
+
+" Last match is taken!
+syn match dnsKeyword "\<\(IN\|A\|SOA\|NS\|CNAME\|MX\|PTR\|SOA\|MB\|MG\|MR\|NULL\|WKS\|HINFO\|TXT\|CS\|CH\|CPU\|OS\)\>"
+syn match dnsRecordName "^[^ ]*"
+syn match dnsPreProc "^\$[^ ]*"
+syn match dnsComment ";.*$"
+syn match dnsDataFQDN "\<[^ ]*\.[ ]*$"
+syn match dnsConstant "\<\([0-9][0-9.]*\|[0-9.]*[0-9]\)\>"
+syn match dnsIPaddr "\<\(\([0-2]\)\{0,1}\([0-9]\)\{1,2}\.\)\{3}\([0-2]\)\{0,1}\([0-9]\)\{1,2}\>[ ]*$"
+
+" 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_dns_syntax_inits")
+ if version < 508
+ let did_dns_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dnsComment Comment
+ HiLink dnsDataFQDN Identifier
+ HiLink dnsPreProc PreProc
+ HiLink dnsKeyword Keyword
+ HiLink dnsRecordName Type
+ HiLink dnsIPaddr Type
+ HiLink dnsIPerr Error
+ HiLink dnsConstant Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dns"
diff --git a/runtime/syntax/docbk.vim b/runtime/syntax/docbk.vim
new file mode 100644
index 000000000..9391ec1a8
--- /dev/null
+++ b/runtime/syntax/docbk.vim
@@ -0,0 +1,150 @@
+" Vim syntax file
+" Language: DocBook
+" Maintainer: Devin Weaver <vim@tritarget.com>
+" URL: http://tritarget.com/pub/vim/syntax/docbk.vim
+" Last Change: 2002 Sep 04
+" Version: $Revision$
+" Thanks to Johannes Zellner <johannes@zellner.org> for the default to XML
+" suggestion.
+
+" REFERENCES:
+" http://docbook.org/
+" http://www.open-oasis.org/docbook/
+"
+
+" 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
+
+" Auto detect added by Bram Moolenaar
+if !exists('b:docbk_type')
+ if expand('%:e') == "sgml"
+ let b:docbk_type = 'sgml'
+ else
+ let b:docbk_type = 'xml'
+ endif
+endif
+if 'xml' == b:docbk_type
+ doau FileType xml
+ syn cluster xmlTagHook add=docbkKeyword
+ syn cluster xmlRegionHook add=docbkRegion,docbkTitle,docbkRemark,docbkCite
+ syn case match
+elseif 'sgml' == b:docbk_type
+ doau FileType sgml
+ syn cluster sgmlTagHook add=docbkKeyword
+ syn cluster sgmlRegionHook add=docbkRegion,docbkTitle,docbkRemark,docbkCite
+ 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 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 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 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 varargs variablelist varlistentry varname contained
+syn keyword docbkKeyword videodata videoobject void volumenum warning contained
+syn keyword docbkKeyword wordasword xref year contained
+
+" 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
+syn region docbkTitle start="<title>"lc=7 end="</title>"me=e-8 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
+syn region docbkRemark start="<remark>"lc=8 end="</remark>"me=e-9 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
+syn region docbkRemark start="<comment>"lc=9 end="</comment>"me=e-10 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
+syn region docbkCite start="<citation>"lc=10 end="</citation>"me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
+
+" 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_docbk_syn_inits")
+ if version < 508
+ let did_docbk_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ hi DocbkBold term=bold cterm=bold gui=bold
+ else
+ command -nargs=+ HiLink hi def link <args>
+ hi def DocbkBold term=bold cterm=bold gui=bold
+ endif
+
+ HiLink docbkKeyword Statement
+ HiLink docbkRegion DocbkBold
+ HiLink docbkTitle Title
+ HiLink docbkRemark Comment
+ HiLink docbkCite Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "docbk"
+
+" vim: ts=8
diff --git a/runtime/syntax/docbksgml.vim b/runtime/syntax/docbksgml.vim
new file mode 100644
index 000000000..544f3d290
--- /dev/null
+++ b/runtime/syntax/docbksgml.vim
@@ -0,0 +1,7 @@
+" Vim syntax file
+" Language: DocBook SGML
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Sam, 07 Sep 2002 17:20:46 CEST
+
+let b:docbk_type="sgml"
+runtime syntax/docbk.vim
diff --git a/runtime/syntax/docbkxml.vim b/runtime/syntax/docbkxml.vim
new file mode 100644
index 000000000..181af2cc8
--- /dev/null
+++ b/runtime/syntax/docbkxml.vim
@@ -0,0 +1,7 @@
+" Vim syntax file
+" Language: DocBook XML
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Sam, 07 Sep 2002 17:20:12 CEST
+
+let b:docbk_type="xml"
+runtime syntax/docbk.vim
diff --git a/runtime/syntax/dosbatch.vim b/runtime/syntax/dosbatch.vim
new file mode 100644
index 000000000..e27310cc9
--- /dev/null
+++ b/runtime/syntax/dosbatch.vim
@@ -0,0 +1,158 @@
+" Vim syntax file
+" Language: MSDOS batch file (with NT command extensions)
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Filenames: *.bat
+" Last Change: 16th March 2004
+" Web Page: http://www.eandem.co.uk/mrw/vim
+"
+" Options Flags:
+" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default]
+"
+
+" 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
+
+" Set default highlighting to Win2k
+if !exists("dosbatch_cmdextversion")
+ let dosbatch_cmdextversion = 2
+endif
+
+" DOS bat files are case insensitive but case preserving!
+syn case ignore
+
+syn keyword dosbatchTodo contained TODO
+
+" Dosbat keywords
+syn keyword dosbatchStatement goto call exit
+syn keyword dosbatchConditional if else
+syn keyword dosbatchRepeat for
+
+" Some operators - first lot are case sensitive!
+syn case match
+syn keyword dosbatchOperator EQU NEQ LSS LEQ GTR GEQ
+syn case ignore
+syn match dosbatchOperator "\s[-+\*/%]\s"
+syn match dosbatchOperator "="
+syn match dosbatchOperator "[-+\*/%]="
+syn match dosbatchOperator "\s\(&\||\|^\|<<\|>>\)=\=\s"
+syn match dosbatchIfOperator "if\s\+\(\(not\)\=\s\+\)\=\(exist\|defined\|errorlevel\|cmdextversion\)\="lc=2
+
+" String - using "'s is a convenience rather than a requirement outside of FOR
+syn match dosbatchString "\"[^"]*\"" contains=dosbatchVariable,dosBatchArgument,@dosbatchNumber
+syn match dosbatchString "\<echo[^)>|]*"lc=4 contains=dosbatchVariable,dosbatchArgument,@dosbatchNumber
+syn match dosbatchEchoOperator "\<echo\s\+\(on\|off\)\s*$"lc=4
+
+" For embedded commands
+syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator
+
+" Numbers - surround with ws to not include in dir and filenames
+syn match dosbatchInteger "[[:space:]=(/:]\d\+"lc=1
+syn match dosbatchHex "[[:space:]=(/:]0x\x\+"lc=1
+syn match dosbatchBinary "[[:space:]=(/:]0b[01]\+"lc=1
+syn match dosbatchOctal "[[:space:]=(/:]0\o\+"lc=1
+syn cluster dosbatchNumber contains=dosbatchInteger,dosbatchHex,dosbatchBinary,dosbatchOctal
+
+" Command line switches
+syn match dosbatchSwitch "/\(\a\+\|?\)"
+
+" Various special escaped char formats
+syn match dosbatchSpecialChar "\^[&|()<>^]"
+syn match dosbatchSpecialChar "\$[a-hl-npqstv_$+]"
+syn match dosbatchSpecialChar "%%"
+
+" Environment variables
+syn match dosbatchIdentifier contained "\s\h\w*\>"
+syn match dosbatchVariable "%\h\w*%"
+syn match dosbatchVariable "%\h\w*:\*\=[^=]*=[^%]*%"
+syn match dosbatchVariable "%\h\w*:\~\d\+,\d\+%" contains=dosbatchInteger
+syn match dosbatchVariable "!\h\w*!"
+syn match dosbatchVariable "!\h\w*:\*\=[^=]*=[^%]*!"
+syn match dosbatchVariable "!\h\w*:\~\d\+,\d\+!" contains=dosbatchInteger
+syn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator
+
+" Args to bat files and for loops, etc
+syn match dosbatchArgument "%\(\d\|\*\)"
+syn match dosbatchArgument "%%[a-z]\>"
+if dosbatch_cmdextversion == 1
+ syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>"
+else
+ syn match dosbatchArgument "%\~[fdpnxsatz]\+\(\($PATH:\)\=[a-z]\|\d\)\>"
+endif
+
+" Line labels
+syn match dosbatchLabel "^\s*:\s*\h\w*\>"
+syn match dosbatchLabel "\<\(goto\|call\)\s\+:\h\w*\>"lc=4
+syn match dosbatchLabel "\<goto\s\+\h\w*\>"lc=4
+syn match dosbatchLabel ":\h\w*\>"
+
+" Comments - usual rem but also two colons as first non-space is an idiom
+syn match dosbatchComment "^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument
+syn match dosbatchComment "\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument
+syn match dosbatchComment "\s*:\s*:.*$" contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument
+
+" Comments in ()'s - still to handle spaces before rem
+syn match dosbatchComment "(rem[^)]*"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument
+
+syn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir
+syn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy
+syn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal
+syn keyword dosbatchImplicit erase fc find findstr format ftype
+syn keyword dosbatchImplicit graftabl help keyb label md mkdir mode more move
+syn keyword dosbatchImplicit path pause popd print prompt pushd rd recover rem
+syn keyword dosbatchImplicit ren rename replace restore rmdir set setlocal shift
+syn keyword dosbatchImplicit sort start subst time title tree type ver verify
+syn keyword dosbatchImplicit vol xcopy
+
+" 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_dosbatch_syntax_inits")
+ if version < 508
+ let did_dosbatch_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dosbatchTodo Todo
+
+ HiLink dosbatchStatement Statement
+ HiLink dosbatchCommands dosbatchStatement
+ HiLink dosbatchLabel Label
+ HiLink dosbatchConditional Conditional
+ HiLink dosbatchRepeat Repeat
+
+ HiLink dosbatchOperator Operator
+ HiLink dosbatchEchoOperator dosbatchOperator
+ HiLink dosbatchIfOperator dosbatchOperator
+
+ HiLink dosbatchArgument Identifier
+ HiLink dosbatchIdentifier Identifier
+ HiLink dosbatchVariable dosbatchIdentifier
+
+ HiLink dosbatchSpecialChar SpecialChar
+ HiLink dosbatchString String
+ HiLink dosbatchNumber Number
+ HiLink dosbatchInteger dosbatchNumber
+ HiLink dosbatchHex dosbatchNumber
+ HiLink dosbatchBinary dosbatchNumber
+ HiLink dosbatchOctal dosbatchNumber
+
+ HiLink dosbatchComment Comment
+ HiLink dosbatchImplicit Function
+
+ HiLink dosbatchSwitch Special
+
+ HiLink dosbatchCmd PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dosbatch"
+
+" vim: ts=8
diff --git a/runtime/syntax/dosini.vim b/runtime/syntax/dosini.vim
new file mode 100644
index 000000000..73744183a
--- /dev/null
+++ b/runtime/syntax/dosini.vim
@@ -0,0 +1,42 @@
+" Vim syntax file
+" Language: Configuration File (ini file) for MSDOS/MS Windows
+" Maintainer: Sean M. McKee <mckee@misslink.net>
+" Last Change: 2001 May 09
+" Version Info: @(#)dosini.vim 1.6 97/12/15 08:54: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
+
+" shut case off
+syn case ignore
+
+syn match dosiniLabel "^.\{-}="
+syn region dosiniHeader start="\[" end="\]"
+syn match dosiniComment "^;.*$"
+
+" 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_dosini_syntax_inits")
+ if version < 508
+ let did_dosini_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dosiniHeader Special
+ HiLink dosiniComment Comment
+ HiLink dosiniLabel Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dosini"
+
+" vim:ts=8
diff --git a/runtime/syntax/dot.vim b/runtime/syntax/dot.vim
new file mode 100644
index 000000000..a2947aad9
--- /dev/null
+++ b/runtime/syntax/dot.vim
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language: Dot
+" Filenames: *.dot
+" Maintainer: Markus Mottl <markus@oefai.at>
+" URL: http://www.ai.univie.ac.at/~markus/vim/syntax/dot.vim
+" Last Change: 2003 May 11
+" 2001 May 04 - initial version
+
+" 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
+
+" Errors
+syn match dotParErr ")"
+syn match dotBrackErr "]"
+syn match dotBraceErr "}"
+
+" Enclosing delimiters
+syn region dotEncl transparent matchgroup=dotParEncl start="(" matchgroup=dotParEncl end=")" contains=ALLBUT,dotParErr
+syn region dotEncl transparent matchgroup=dotBrackEncl start="\[" matchgroup=dotBrackEncl end="\]" contains=ALLBUT,dotBrackErr
+syn region dotEncl transparent matchgroup=dotBraceEncl start="{" matchgroup=dotBraceEncl end="}" contains=ALLBUT,dotBraceErr
+
+" Comments
+syn region dotComment start="//" end="$" contains=dotComment,dotTodo
+syn region dotComment start="/\*" end="\*/" contains=dotComment,dotTodo
+syn keyword dotTodo contained TODO FIXME XXX
+
+" Strings
+syn region dotString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+" General keywords
+syn keyword dotKeyword digraph node edge subgraph
+
+" Graph attributes
+syn keyword dotType center layers margin mclimit name nodesep nslimit
+syn keyword dotType ordering page pagedir rank rankdir ranksep ratio
+syn keyword dotType rotate size
+
+" Node attributes
+syn keyword dotType distortion fillcolor fontcolor fontname fontsize
+syn keyword dotType height layer orientation peripheries regular
+syn keyword dotType shape shapefile sides skew width
+
+" Edge attributes
+syn keyword dotType arrowhead arrowsize arrowtail constraint decorateP
+syn keyword dotType dir headclip headlabel labelangle labeldistance
+syn keyword dotType labelfontcolor labelfontname labelfontsize
+syn keyword dotType minlen port_label_distance samehead sametail
+syn keyword dotType tailclip taillabel weight
+
+" Shared attributes (graphs, nodes, edges)
+syn keyword dotType color
+
+" Shared attributes (graphs and edges)
+syn keyword dotType bgcolor label URL
+
+" Shared attributes (nodes and edges)
+syn keyword dotType fontcolor fontname fontsize layer style
+
+" Special chars
+syn match dotKeyChar "="
+syn match dotKeyChar ";"
+syn match dotKeyChar "->"
+
+" Identifier
+syn match dotIdentifier /\<\w\+\>/
+
+" Synchronization
+syn sync minlines=50
+syn sync maxlines=500
+
+" 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_dot_syntax_inits")
+ if version < 508
+ let did_dot_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dotParErr Error
+ HiLink dotBraceErr Error
+ HiLink dotBrackErr Error
+
+ HiLink dotComment Comment
+ HiLink dotTodo Todo
+
+ HiLink dotParEncl Keyword
+ HiLink dotBrackEncl Keyword
+ HiLink dotBraceEncl Keyword
+
+ HiLink dotKeyword Keyword
+ HiLink dotType Type
+ HiLink dotKeyChar Keyword
+
+ HiLink dotString String
+ HiLink dotIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dot"
+
+" vim: ts=8
diff --git a/runtime/syntax/dracula.vim b/runtime/syntax/dracula.vim
new file mode 100644
index 000000000..6a3806028
--- /dev/null
+++ b/runtime/syntax/dracula.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Dracula
+" Maintainer: Scott Bordelon <slb@artisan.com>
+" Last change: Wed Apr 25 18:50:01 PDT 2001
+" Extensions: drac.*,*.drac,*.drc,*.lvs,*.lpe
+" Comment: Dracula is an industry-standard language created by CADENCE (a
+" company specializing in Electronics Design Automation), for
+" the purposes of Design Rule Checking, Layout vs. Schematic
+" verification, and Layout Parameter Extraction.
+
+" 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
+
+" Ignore case
+syn case ignore
+
+" A bunch of useful Dracula keywords
+
+"syn match draculaIdentifier
+
+syn keyword draculaStatement indisk primary outdisk printfile system
+syn keyword draculaStatement mode scale resolution listerror keepdata
+syn keyword draculaStatement datatype by lt gt output label range touch
+syn keyword draculaStatement inside outside within overlap outlib
+syn keyword draculaStatement schematic model unit parset
+syn match draculaStatement "flag-\(non45\|acuteangle\|offgrid\)"
+syn match draculaStatement "text-pri-only"
+syn match draculaStatement "[=&]"
+syn match draculaStatement "\[[^,]*\]"
+syn match draculastatement "^ *\(sel\|width\|ext\|enc\|area\|shrink\|grow\|length\)"
+syn match draculastatement "^ *\(or\|not\|and\|select\|size\|connect\|sconnect\|int\)"
+syn match draculastatement "^ *\(softchk\|stamp\|element\|parasitic cap\|attribute cap\)"
+syn match draculastatement "^ *\(flagnon45\|lextract\|equation\|lpeselect\|lpechk\|attach\)"
+syn match draculaStatement "\(temporary\|connect\)-layer"
+syn match draculaStatement "program-dir"
+syn match draculaStatement "status-command"
+syn match draculaStatement "batch-queue"
+syn match draculaStatement "cnames-csen"
+syn match draculaStatement "filter-lay-opt"
+syn match draculaStatement "filter-sch-opt"
+syn match draculaStatement "power-node"
+syn match draculaStatement "ground-node"
+syn match draculaStatement "subckt-name"
+
+syn match draculaType "\*description"
+syn match draculaType "\*input-layer"
+syn match draculaType "\*operation"
+syn match draculaType "\*end"
+
+syn match draculaComment ";.*"
+
+syn match draculaPreProc "^#.*"
+
+"Modify the following as needed. The trade-off is performance versus
+"functionality.
+syn sync lines=50
+
+" 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_dracula_syn_inits")
+ if version < 508
+ let did_dracula_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink draculaIdentifier Identifier
+ HiLink draculaStatement Statement
+ HiLink draculaType Type
+ HiLink draculaComment Comment
+ HiLink draculaPreProc PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dracula"
+
+" vim: ts=8
diff --git a/runtime/syntax/dsl.vim b/runtime/syntax/dsl.vim
new file mode 100644
index 000000000..9b3cb56f5
--- /dev/null
+++ b/runtime/syntax/dsl.vim
@@ -0,0 +1,38 @@
+" Vim syntax file
+" Language: DSSSL
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" Filenames: *.dsl
+" $Id$
+
+if exists("b:current_syntax") | finish | endif
+
+runtime syntax/xml.vim
+syn cluster xmlRegionHook add=dslRegion,dslComment
+syn cluster xmlCommentHook add=dslCond
+
+" EXAMPLE:
+" <![ %output.html; [
+" <!-- some comment -->
+" (define html-manifest #f)
+" ]]>
+"
+" NOTE: 'contains' the same as xmlRegion, except xmlTag / xmlEndTag
+syn region dslCond matchgroup=dslCondDelim start="\[\_[^[]\+\[" end="]]" contains=xmlCdata,@xmlRegionCluster,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook
+
+" NOTE, that dslRegion and dslComment do both NOT have a 'contained'
+" argument, so this will also work in plain dsssl documents.
+
+syn region dslRegion matchgroup=Delimiter start=+(+ end=+)+ contains=dslRegion,dslString,dslComment
+syn match dslString +"\_[^"]*"+ contained
+syn match dslComment +;.*$+ contains=dslTodo
+syn keyword dslTodo contained TODO FIXME XXX display
+
+" The default highlighting.
+hi def link dslTodo Todo
+hi def link dslString String
+hi def link dslComment Comment
+" compare the following with xmlCdataStart / xmlCdataEnd
+hi def link dslCondDelim Type
+
+let b:current_syntax = "dsl"
diff --git a/runtime/syntax/dtd.vim b/runtime/syntax/dtd.vim
new file mode 100644
index 000000000..0f80e199c
--- /dev/null
+++ b/runtime/syntax/dtd.vim
@@ -0,0 +1,181 @@
+" Vim syntax file
+" Language: DTD (Document Type Definition for XML)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Author and previous maintainer:
+" Daniel Amyot <damyot@site.uottawa.ca>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" Filenames: *.dtd
+"
+" REFERENCES:
+" http://www.w3.org/TR/html40/
+" http://www.w3.org/TR/NOTE-html-970421
+"
+" 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
+endif
+
+if !exists("dtd_ignore_case")
+ " I prefer having the case takes into consideration.
+ syn case match
+else
+ syn case ignore
+endif
+
+
+" the following line makes the opening <! and
+" closing > highlighted using 'dtdFunction'.
+"
+" PROVIDES: @dtdTagHook
+"
+syn region dtdTag matchgroup=dtdFunction
+ \ start=+<!+ end=+>+ matchgroup=NONE
+ \ contains=dtdTag,dtdTagName,dtdError,dtdComment,dtdString,dtdAttrType,dtdAttrDef,dtdEnum,dtdParamEntityInst,dtdParamEntityDecl,dtdCard,@dtdTagHook
+
+if !exists("dtd_no_tag_errors")
+ " mark everything as an error which starts with a <!
+ " and is not overridden later. If this is annoying,
+ " it can be switched off by setting the variable
+ " dtd_no_tag_errors.
+ syn region dtdError contained start=+<!+lc=2 end=+>+
+endif
+
+" if this is a html like comment hightlight also
+" the opening <! and the closing > as Comment.
+syn region dtdComment start=+<![ \t]*--+ end=+-->+ contains=dtdTodo
+
+
+" proper DTD comment
+syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo
+
+
+" Start tags (keywords). This is contained in dtdFunction.
+" Note that everything not contained here will be marked
+" as error.
+syn match dtdTagName contained +<!\(ATTLIST\|DOCTYPE\|ELEMENT\|ENTITY\|NOTATION\|SHORTREF\|USEMAP\|\[\)+lc=2,hs=s+2
+
+
+" wildcards and operators
+syn match dtdCard contained "|"
+syn match dtdCard contained ","
+" evenutally overridden by dtdEntity
+syn match dtdCard contained "&"
+syn match dtdCard contained "?"
+syn match dtdCard contained "\*"
+syn match dtdCard contained "+"
+
+" ...and finally, special cases.
+syn match dtdCard "ANY"
+syn match dtdCard "EMPTY"
+
+if !exists("dtd_no_param_entities")
+
+ " highlight parameter entity declarations
+ " and instances. Note that the closing `;'
+ " is optional.
+
+ " instances
+ syn region dtdParamEntityInst oneline matchgroup=dtdParamEntityPunct
+ \ start="%[-_a-zA-Z0-9.]\+"he=s+1,rs=s+1
+ \ skip=+[-_a-zA-Z0-9.]+
+ \ end=";\|\>"
+ \ matchgroup=NONE contains=dtdParamEntityPunct
+ syn match dtdParamEntityPunct contained "\."
+
+ " declarations
+ " syn region dtdParamEntityDecl oneline matchgroup=dtdParamEntityDPunct start=+<!ENTITY % +lc=8 skip=+[-_a-zA-Z0-9.]+ matchgroup=NONE end="\>" contains=dtdParamEntityDPunct
+ syn match dtdParamEntityDecl +<!ENTITY % [-_a-zA-Z0-9.]*+lc=8 contains=dtdParamEntityDPunct
+ syn match dtdParamEntityDPunct contained "%\|\."
+
+endif
+
+" &entities; compare with xml
+syn match dtdEntity "&[^; \t]*;" contains=dtdEntityPunct
+syn match dtdEntityPunct contained "[&.;]"
+
+" Strings are between quotes
+syn region dtdString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
+syn region dtdString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
+
+" Enumeration of elements or data between parenthesis
+"
+" PROVIDES: @dtdEnumHook
+"
+syn region dtdEnum matchgroup=dtdType start="(" end=")" matchgroup=NONE contains=dtdEnum,dtdParamEntityInst,dtdCard,@dtdEnumHook
+
+"Attribute types
+syn keyword dtdAttrType NMTOKEN ENTITIES NMTOKENS ID CDATA
+syn keyword dtdAttrType IDREF IDREFS
+" ENTITY has to treated special for not overriding <!ENTITY
+syn match dtdAttrType +[^!]\<ENTITY+
+
+"Attribute Definitions
+syn match dtdAttrDef "#REQUIRED"
+syn match dtdAttrDef "#IMPLIED"
+syn match dtdAttrDef "#FIXED"
+
+syn case match
+" define some common keywords to mark TODO
+" and important sections inside comments.
+syn keyword dtdTodo contained TODO FIXME XXX
+
+syn sync lines=250
+
+" 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_dtd_syn_inits")
+ if version < 508
+ let did_dtd_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink dtdFunction Function
+ HiLink dtdTag Normal
+ HiLink dtdType Type
+ HiLink dtdAttrType dtdType
+ HiLink dtdAttrDef dtdType
+ HiLink dtdConstant Constant
+ HiLink dtdString dtdConstant
+ HiLink dtdEnum dtdConstant
+ HiLink dtdCard dtdFunction
+
+ HiLink dtdEntity Statement
+ HiLink dtdEntityPunct dtdType
+ HiLink dtdParamEntityInst dtdConstant
+ HiLink dtdParamEntityPunct dtdType
+ HiLink dtdParamEntityDecl dtdType
+ HiLink dtdParamEntityDPunct dtdComment
+
+ HiLink dtdComment Comment
+ HiLink dtdTagName Statement
+ HiLink dtdError Error
+ HiLink dtdTodo Todo
+
+ 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 b:current_syntax = "dtd"
+
+" vim: ts=8
diff --git a/runtime/syntax/dtml.vim b/runtime/syntax/dtml.vim
new file mode 100644
index 000000000..7de722aab
--- /dev/null
+++ b/runtime/syntax/dtml.vim
@@ -0,0 +1,225 @@
+" DTML syntax file
+" Language: Zope's Dynamic Template Markup Language
+" Maintainer: Jean Jordaan <jean@upfrontsystems.co.za> (njj)
+" Last change: 2001 Sep 02
+
+" These are used with Claudio Fleiner's html.vim in the standard distribution.
+"
+" Still very hackish. The 'dtml attributes' and 'dtml methods' have been
+" hacked out of the Zope Quick Reference in case someone finds something
+" sensible to do with them. I certainly haven't.
+
+" 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
+
+" First load the HTML syntax
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+
+syn case match
+
+" This doesn't have any effect. Does it need to be moved to above/
+" if !exists("main_syntax")
+" let main_syntax = 'dtml'
+" endif
+
+" dtml attributes
+syn keyword dtmlAttribute ac_inherited_permissions access_debug_info contained
+syn keyword dtmlAttribute acquiredRolesAreUsedBy all_meta_types assume_children AUTH_TYPE contained
+syn keyword dtmlAttribute AUTHENTICATED_USER AUTHENTICATION_PATH BASE0 batch-end-index batch-size contained
+syn keyword dtmlAttribute batch-start-index bobobase_modification_time boundary branches contained
+syn keyword dtmlAttribute branches_expr capitalize cb_dataItems cb_dataValid cb_isCopyable contained
+syn keyword dtmlAttribute cb_isMoveable changeClassId classDefinedAndInheritedPermissions contained
+syn keyword dtmlAttribute classDefinedPermissions classInheritedPermissions collapse-all column contained
+syn keyword dtmlAttribute connected connectionIsValid CONTENT_LENGTH CONTENT_TYPE cook cookies contained
+syn keyword dtmlAttribute COPY count- createInObjectManager da_has_single_argument dav__allprop contained
+syn keyword dtmlAttribute dav__init dav__propnames dav__propstat dav__validate default contained
+syn keyword dtmlAttribute delClassAttr DELETE Destination DestinationURL digits discard contained
+syn keyword dtmlAttribute disposition document_src e encode enter etc expand-all expr File contained
+syn keyword dtmlAttribute filtered_manage_options filtered_meta_types first- fmt footer form contained
+syn keyword dtmlAttribute GATEWAY_INTERFACE get_local_roles get_local_roles_for_userid contained
+syn keyword dtmlAttribute get_request_var_or_attr get_size get_size get_valid_userids getAttribute contained
+syn keyword dtmlAttribute getAttributeNode getAttributes getChildNodes getClassAttr getContentType contained
+syn keyword dtmlAttribute getData getDocType getDocumentElement getElementsByTagName getFirstChild contained
+syn keyword dtmlAttribute getImplementation getLastChild getLength getName getNextSibling contained
+syn keyword dtmlAttribute getNodeName getNodeType getNodeValue getOwnerDocument getParentNode contained
+syn keyword dtmlAttribute getPreviousSibling getProperty getPropertyType getSize getSize getSize contained
+syn keyword dtmlAttribute get_size getTagName getUser getUserName getUserNames getUsers contained
+syn keyword dtmlAttribute has_local_roles hasChildNodes hasProperty HEAD header hexdigits HTML contained
+syn keyword dtmlAttribute html_quote HTMLFile id index_html index_objects indexes contained
+syn keyword dtmlAttribute inheritedAttribute items last- leave leave_another leaves letters LOCK contained
+syn keyword dtmlAttribute locked_in_version lower lowercase mailfrom mailhost mailhost_list mailto contained
+syn keyword dtmlAttribute manage manage_ methods manage_access manage_acquiredPermissions contained
+syn keyword dtmlAttribute manage_addConferaTopic manage_addDocument manage_addDTMLDocument contained
+syn keyword dtmlAttribute manage_addDTMLMethod manage_addFile manage_addFolder manage_addImage contained
+syn keyword dtmlAttribute manage_addLocalRoles manage_addMailHost manage_addPermission contained
+syn keyword dtmlAttribute manage_addPrincipiaFactory manage_addProduct manage_addProperty contained
+syn keyword dtmlAttribute manage_addUserFolder manage_addZClass manage_addZGadflyConnection contained
+syn keyword dtmlAttribute manage_addZGadflyConnectionForm manage_advanced manage_afterAdd contained
+syn keyword dtmlAttribute manage_afterClone manage_beforeDelete manage_changePermissions contained
+syn keyword dtmlAttribute manage_changeProperties manage_clone manage_CopyContainerFirstItem contained
+syn keyword dtmlAttribute manage_copyObjects manage_cutObjects manage_defined_roles contained
+syn keyword dtmlAttribute manage_delLocalRoles manage_delObjects manage_delProperties contained
+syn keyword dtmlAttribute manage_distribute manage_edit manage_editedDialog manage_editProperties contained
+syn keyword dtmlAttribute manage_editRoles manage_exportObject manage_FTPget manage_FTPlist contained
+syn keyword dtmlAttribute manage_FTPstat manage_get_product_readme__ manage_getPermissionMapping contained
+syn keyword dtmlAttribute manage_haveProxy manage_help manage_importObject manage_listLocalRoles contained
+syn keyword dtmlAttribute manage_options manage_pasteObjects manage_permission contained
+syn keyword dtmlAttribute manage_propertiesForm manage_proxy manage_renameObject manage_role contained
+syn keyword dtmlAttribute manage_setLocalRoles manage_setPermissionMapping contained
+syn keyword dtmlAttribute manage_subclassableClassNames manage_test manage_testForm contained
+syn keyword dtmlAttribute manage_undo_transactions manage_upload manage_users manage_workspace contained
+syn keyword dtmlAttribute management_interface mapping math max- mean- median- meta_type min- contained
+syn keyword dtmlAttribute MKCOL modified_in_version MOVE multiple name navigate_filter new_version contained
+syn keyword dtmlAttribute newline_to_br next next-batches next-sequence next-sequence-end-index contained
+syn keyword dtmlAttribute next-sequence-size next-sequence-start-index no manage_access None contained
+syn keyword dtmlAttribute nonempty normalize nowrap null Object Manager objectIds objectItems contained
+syn keyword dtmlAttribute objectMap objectValues octdigits only optional OPTIONS orphan overlap contained
+syn keyword dtmlAttribute PARENTS PATH_INFO PATH_TRANSLATED permission_settings contained
+syn keyword dtmlAttribute permissionMappingPossibleValues permissionsOfRole pi port contained
+syn keyword dtmlAttribute possible_permissions previous previous-batches previous-sequence contained
+syn keyword dtmlAttribute previous-sequence-end-index previous-sequence-size contained
+syn keyword dtmlAttribute previous-sequence-start-index PrincipiaFind PrincipiaSearchSource contained
+syn keyword dtmlAttribute propdict propertyIds propertyItems propertyLabel propertyMap propertyMap contained
+syn keyword dtmlAttribute propertyValues PROPFIND PROPPATCH PUT query_day query_month QUERY_STRING contained
+syn keyword dtmlAttribute query_year quoted_input quoted_report raise_standardErrorMessage random contained
+syn keyword dtmlAttribute read read_raw REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER REQUEST contained
+syn keyword dtmlAttribute REQUESTED_METHOD required RESPONSE reverse rolesOfPermission save schema contained
+syn keyword dtmlAttribute SCRIPT_NAME sequence-end sequence-even sequence-index contained
+syn keyword dtmlAttribute sequence-index-var- sequence-item sequence-key sequence-Letter contained
+syn keyword dtmlAttribute sequence-letter sequence-number sequence-odd sequence-query contained
+syn keyword dtmlAttribute sequence-roman sequence-Roman sequence-start sequence-step-end-index contained
+syn keyword dtmlAttribute sequence-step-size sequence-step-start-index sequence-var- SERVER_NAME contained
+syn keyword dtmlAttribute SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE setClassAttr setName single contained
+syn keyword dtmlAttribute size skip_unauthorized smtphost sort spacify sql_quote SQLConnectionIDs contained
+syn keyword dtmlAttribute standard-deviation- standard-deviation-n- standard_html_footer contained
+syn keyword dtmlAttribute standard_html_header start String string subject SubTemplate superValues contained
+syn keyword dtmlAttribute tabs_path_info tag test_url_ text_content this thousands_commas title contained
+syn keyword dtmlAttribute title_and_id title_or_id total- tpURL tpValues TRACE translate tree-c contained
+syn keyword dtmlAttribute tree-colspan tree-e tree-item-expanded tree-item-url tree-level contained
+syn keyword dtmlAttribute tree-root-url tree-s tree-state type undoable_transactions UNLOCK contained
+syn keyword dtmlAttribute update_data upper uppercase url url_quote URLn user_names contained
+syn keyword dtmlAttribute userdefined_roles valid_property_id valid_roles validate_roles contained
+syn keyword dtmlAttribute validClipData validRoles values variance- variance-n- view_image_or_file contained
+syn keyword dtmlAttribute where whitespace whrandom xml_namespace zclass_candidate_view_actions contained
+syn keyword dtmlAttribute ZClassBaseClassNames ziconImage ZopeFind ZQueryIds contained
+
+syn keyword dtmlMethod abs absolute_url ac_inherited_permissions aCommon contained
+syn keyword dtmlMethod aCommonZ acos acquiredRolesAreUsedBy aDay addPropertySheet aMonth AMPM contained
+syn keyword dtmlMethod ampm AMPMMinutes appendChild appendData appendHeader asin atan atan2 contained
+syn keyword dtmlMethod atof atoi betavariate capatilize capwords catalog_object ceil center contained
+syn keyword dtmlMethod choice chr cloneNode COPY cos cosh count createInObjectManager contained
+syn keyword dtmlMethod createSQLInput cunifvariate Date DateTime Day day dayOfYear dd default contained
+syn keyword dtmlMethod DELETE deleteData delPropertySheet divmod document_id document_title dow contained
+syn keyword dtmlMethod earliestTime enter equalTo exp expireCookie expovariate fabs fCommon contained
+syn keyword dtmlMethod fCommonZ filtered_manage_options filtered_meta_types find float floor contained
+syn keyword dtmlMethod fmod frexp gamma gauss get get_local_roles_for_userid get_size getattr contained
+syn keyword dtmlMethod getAttribute getAttributeNode getClassAttr getDomains contained
+syn keyword dtmlMethod getElementsByTagName getHeader getitem getNamedItem getobject contained
+syn keyword dtmlMethod getObjectsInfo getpath getProperty getRoles getStatus getUser contained
+syn keyword dtmlMethod getUserName greaterThan greaterThanEqualTo h_12 h_24 has_key contained
+syn keyword dtmlMethod has_permission has_role hasattr hasFeature hash hasProperty HEAD hex contained
+syn keyword dtmlMethod hour hypot index index_html inheritedAttribute insertBefore insertData contained
+syn keyword dtmlMethod int isCurrentDay isCurrentHour isCurrentMinute isCurrentMonth contained
+syn keyword dtmlMethod isCurrentYear isFuture isLeadYear isPast item join latestTime ldexp contained
+syn keyword dtmlMethod leave leave_another len lessThan lessThanEqualTo ljust log log10 contained
+syn keyword dtmlMethod lognormvariate lower lstrip maketrans manage manage_access contained
+syn keyword dtmlMethod manage_acquiredPermissions manage_addColumn manage_addDocument contained
+syn keyword dtmlMethod manage_addDTMLDocument manage_addDTMLMethod manage_addFile contained
+syn keyword dtmlMethod manage_addFolder manage_addImage manage_addIndex manage_addLocalRoles contained
+syn keyword dtmlMethod manage_addMailHost manage_addPermission manage_addPrincipiaFactory contained
+syn keyword dtmlMethod manage_addProduct manage_addProperty manage_addPropertySheet contained
+syn keyword dtmlMethod manage_addUserFolder manage_addZCatalog manage_addZClass contained
+syn keyword dtmlMethod manage_addZGadflyConnection manage_addZGadflyConnectionForm contained
+syn keyword dtmlMethod manage_advanced manage_catalogClear manage_catalogFoundItems contained
+syn keyword dtmlMethod manage_catalogObject manage_catalogReindex manage_changePermissions contained
+syn keyword dtmlMethod manage_changeProperties manage_clone manage_CopyContainerFirstItem contained
+syn keyword dtmlMethod manage_copyObjects manage_createEditor manage_createView contained
+syn keyword dtmlMethod manage_cutObjects manage_defined_roles manage_delColumns contained
+syn keyword dtmlMethod manage_delIndexes manage_delLocalRoles manage_delObjects contained
+syn keyword dtmlMethod manage_delProperties manage_Discard__draft__ manage_distribute contained
+syn keyword dtmlMethod manage_edit manage_edit manage_editedDialog manage_editProperties contained
+syn keyword dtmlMethod manage_editRoles manage_exportObject manage_importObject contained
+syn keyword dtmlMethod manage_makeChanges manage_pasteObjects manage_permission contained
+syn keyword dtmlMethod manage_propertiesForm manage_proxy manage_renameObject manage_role contained
+syn keyword dtmlMethod manage_Save__draft__ manage_setLocalRoles manage_setPermissionMapping contained
+syn keyword dtmlMethod manage_test manage_testForm manage_uncatalogObject contained
+syn keyword dtmlMethod manage_undo_transactions manage_upload manage_users manage_workspace contained
+syn keyword dtmlMethod mange_createWizard max min minute MKCOL mm modf month Month MOVE contained
+syn keyword dtmlMethod namespace new_version nextObject normalvariate notEqualTo objectIds contained
+syn keyword dtmlMethod objectItems objectValues oct OPTIONS ord paretovariate parts pCommon contained
+syn keyword dtmlMethod pCommonZ pDay permissionsOfRole pMonth pow PreciseAMPM PreciseTime contained
+syn keyword dtmlMethod previousObject propertyInfo propertyLabel PROPFIND PROPPATCH PUT quit contained
+syn keyword dtmlMethod raise_standardErrorMessage randint random read read_raw redirect contained
+syn keyword dtmlMethod removeAttribute removeAttributeNode removeChild replace replaceChild contained
+syn keyword dtmlMethod replaceData rfc822 rfind rindex rjust rolesOfPermission round rstrip contained
+syn keyword dtmlMethod save searchResults second seed set setAttribute setAttributeNode setBase contained
+syn keyword dtmlMethod setCookie setHeader setStatus sin sinh split splitText sqrt str strip contained
+syn keyword dtmlMethod substringData superValues swapcase tabs_path_info tan tanh Time contained
+syn keyword dtmlMethod TimeMinutes timeTime timezone title title_and_id title_or_id toXML contained
+syn keyword dtmlMethod toZone uncatalog_object undoable_transactions uniform uniqueValuesFor contained
+syn keyword dtmlMethod update_data upper valid_property_id validate_roles vonmisesvariate contained
+syn keyword dtmlMethod weibullvariate year yy zfill ZopeFind contained
+
+" DTML tags
+syn keyword dtmlTagName var if elif else unless in with let call raise try except tag comment tree sqlvar sqltest sqlgroup sendmail mime transparent contained
+
+syn keyword dtmlEndTagName if unless in with let raise try tree sendmail transparent contained
+
+" Own additions
+syn keyword dtmlTODO TODO FIXME contained
+
+syn region dtmlComment start=+<dtml-comment>+ end=+</dtml-comment>+ contains=dtmlTODO
+
+" All dtmlTagNames are contained by dtmlIsTag.
+syn match dtmlIsTag "dtml-[A-Za-z]\+" contains=dtmlTagName
+
+" 'var' tag entity syntax: &dtml-variableName;
+" - with attributes: &dtml.attribute1[.attribute2]...-variableName;
+syn match dtmlSpecialChar "&dtml[.0-9A-Za-z_]\{-}-[0-9A-Za-z_.]\+;"
+
+" Redefine to allow inclusion of DTML within HTML strings.
+syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
+syn region htmlLink start="<a\>[^>]*href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc
+syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,dtmlSpecialChar,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+syn region htmlString contained start=+"+ end=+"+ contains=dtmlSpecialChar,htmlSpecialChar,javaScriptExpression,dtmlIsTag,dtmlAttribute,dtmlMethod,@htmlPreproc
+syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,dtmlIsTag,dtmlAttribute,dtmlMethod,@htmlTagNameCluster
+syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,dtmlIsTag,dtmlAttribute,dtmlMethod,@htmlTagNameCluster
+
+" 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_dtml_syntax_inits")
+ if version < 508
+ let did_dtml_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dtmlIsTag PreProc
+ HiLink dtmlAttribute Identifier
+ HiLink dtmlMethod Function
+ HiLink dtmlComment Comment
+ HiLink dtmlTODO Todo
+ HiLink dtmlSpecialChar Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dtml"
+
+" if main_syntax == 'dtml'
+" unlet main_syntax
+" endif
+
+" vim: ts=4
diff --git a/runtime/syntax/dylan.vim b/runtime/syntax/dylan.vim
new file mode 100644
index 000000000..14262d53d
--- /dev/null
+++ b/runtime/syntax/dylan.vim
@@ -0,0 +1,109 @@
+" Vim syntax file
+" Language: Dylan
+" Authors: Justus Pendleton <justus@acm.org>
+" Brent A. Fulgham <bfulgham@debian.org>
+" Last Change: Fri Sep 29 13:45:55 PDT 2000
+"
+" This syntax file is based on the Haskell, Perl, Scheme, and C
+" syntax files.
+
+" Part 1: Syntax definition
+" 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
+
+if version < 600
+ set lisp
+else
+ setlocal lisp
+endif
+
+" Highlight special characters (those that have backslashes) differently
+syn match dylanSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+
+" Keywords
+syn keyword dylanBlock afterwards begin block cleanup end
+syn keyword dylanClassMods abstract concrete primary inherited virtual
+syn keyword dylanException exception handler signal
+syn keyword dylanParamDefs method class function library macro interface
+syn keyword dylanSimpleDefs constant variable generic primary
+syn keyword dylanOther above below from by in instance local slot subclass then to
+syn keyword dylanConditional if when select case else elseif unless finally otherwise then
+syn keyword dylanRepeat begin for until while from to
+syn keyword dylanStatement define let
+syn keyword dylanImport use import export exclude rename create
+syn keyword dylanMiscMods open sealed domain singleton sideways inline functional
+
+" Matching rules for special forms
+syn match dylanOperator "\s[-!%&\*\+/=\?@\\^|~:]\+[-#!>%&:\*\+/=\?@\\^|~]*"
+syn match dylanOperator "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./=\?@\\^|~:]*"
+" Numbers
+syn match dylanNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
+syn match dylanNumber "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
+" Booleans
+syn match dylanBoolean "#t\|#f"
+" Comments
+syn match dylanComment "//.*"
+syn region dylanComment start="/\*" end="\*/"
+" Strings
+syn region dylanString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=dySpecial
+syn match dylanCharacter "'[^\\]'"
+" Constants, classes, and variables
+syn match dylanConstant "$\<[a-zA-Z0-9\-]\+\>"
+syn match dylanClass "<\<[a-zA-Z0-9\-]\+\>>"
+syn match dylanVariable "\*\<[a-zA-Z0-9\-]\+\>\*"
+" Preconditions
+syn region dylanPrecondit start="^\s*#\s*\(if\>\|else\>\|endif\>\)" skip="\\$" end="$"
+
+" These appear at the top of files (usually). I like to highlight the whole line
+" so that the definition stands out. They should probably really be keywords, but they
+" don't generally appear in the middle of a line of code.
+syn region dylanHeader start="^[Mm]odule:" end="^$"
+
+" 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_dylan_syntax_inits")
+ if version < 508
+ let did_dylan_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dylanBlock PreProc
+ HiLink dylanBoolean Boolean
+ HiLink dylanCharacter Character
+ HiLink dylanClass Structure
+ HiLink dylanClassMods StorageClass
+ HiLink dylanComment Comment
+ HiLink dylanConditional Conditional
+ HiLink dylanConstant Constant
+ HiLink dylanException Exception
+ HiLink dylanHeader Macro
+ HiLink dylanImport Include
+ HiLink dylanLabel Label
+ HiLink dylanMiscMods StorageClass
+ HiLink dylanNumber Number
+ HiLink dylanOther Keyword
+ HiLink dylanOperator Operator
+ HiLink dylanParamDefs Keyword
+ HiLink dylanPrecondit PreCondit
+ HiLink dylanRepeat Repeat
+ HiLink dylanSimpleDefs Keyword
+ HiLink dylanStatement Macro
+ HiLink dylanString String
+ HiLink dylanVariable Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dylan"
+
+" vim:ts=8
diff --git a/runtime/syntax/dylanintr.vim b/runtime/syntax/dylanintr.vim
new file mode 100644
index 000000000..11ef81668
--- /dev/null
+++ b/runtime/syntax/dylanintr.vim
@@ -0,0 +1,52 @@
+" Vim syntax file
+" Language: Dylan
+" Authors: Justus Pendleton <justus@acm.org>
+" Last Change: Fri Sep 29 13:53:27 PDT 2000
+"
+
+" 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
+
+syn region dylanintrInfo matchgroup=Statement start="^" end=":" oneline
+syn match dylanintrInterface "define interface"
+syn match dylanintrClass "<.*>"
+syn region dylanintrType start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+syn region dylanintrIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match dylanintrIncluded contained "<[^>]*>"
+syn match dylanintrInclude "^\s*#\s*include\>\s*["<]" contains=intrIncluded
+
+"syn keyword intrMods pointer struct
+
+" 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_dylan_intr_syntax_inits")
+ if version < 508
+ let did_dylan_intr_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dylanintrInfo Special
+ HiLink dylanintrInterface Operator
+ HiLink dylanintrMods Type
+ HiLink dylanintrClass StorageClass
+ HiLink dylanintrType Type
+ HiLink dylanintrIncluded String
+ HiLink dylanintrInclude Include
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dylanintr"
+
+" vim:ts=8
diff --git a/runtime/syntax/dylanlid.vim b/runtime/syntax/dylanlid.vim
new file mode 100644
index 000000000..ec7b40114
--- /dev/null
+++ b/runtime/syntax/dylanlid.vim
@@ -0,0 +1,42 @@
+" Vim syntax file
+" Language: Dylan Library Interface Files
+" Authors: Justus Pendleton <justus@acm.org>
+" Brent Fulgham <bfulgham@debian.org>
+" Last Change: Fri Sep 29 13:50:20 PDT 2000
+"
+
+" 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
+
+syn region dylanlidInfo matchgroup=Statement start="^" end=":" oneline
+syn region dylanlidEntry matchgroup=Statement start=":%" end="$" oneline
+
+syn sync lines=50
+
+" 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_dylan_lid_syntax_inits")
+ if version < 508
+ let did_dylan_lid_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink dylanlidInfo Type
+ HiLink dylanlidEntry String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "dylanlid"
+
+" vim:ts=8
diff --git a/runtime/syntax/ecd.vim b/runtime/syntax/ecd.vim
new file mode 100644
index 000000000..fff7a4b88
--- /dev/null
+++ b/runtime/syntax/ecd.vim
@@ -0,0 +1,56 @@
+" Vim syntax file
+" Language: ecd (Embedix Component Description) files
+" Maintainer: John Beppu <beppu@opensource.lineo.com>
+" URL: http://opensource.lineo.com/~beppu/prose/ecd_vim.html
+" Last Change: 2001 Sep 27
+
+" An ECD file contains meta-data for packages in the Embedix Linux distro.
+" This syntax file was derived from apachestyle.vim
+" by Christian Hammers <ch@westend.com>
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+" specials
+syn match ecdComment "^\s*#.*"
+
+" options and values
+syn match ecdAttr "^\s*[a-zA-Z]\S*\s*[=].*$" contains=ecdAttrN,ecdAttrV
+syn match ecdAttrN contained "^.*="me=e-1
+syn match ecdAttrV contained "=.*$"ms=s+1
+
+" tags
+syn region ecdTag start=+<+ end=+>+ contains=ecdTagN,ecdTagError
+syn match ecdTagN contained +<[/\s]*[-a-zA-Z0-9_]\++ms=s+1
+syn match ecdTagError contained "[^>]<"ms=s+1
+
+" 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_ecd_syn_inits")
+ if version < 508
+ let did_ecd_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ecdComment Comment
+ HiLink ecdAttr Type
+ HiLink ecdAttrN Statement
+ HiLink ecdAttrV Value
+ HiLink ecdTag Function
+ HiLink ecdTagN Statement
+ HiLink ecdTagError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ecd"
+" vim: ts=8
diff --git a/runtime/syntax/edif.vim b/runtime/syntax/edif.vim
new file mode 100644
index 000000000..0c1783494
--- /dev/null
+++ b/runtime/syntax/edif.vim
@@ -0,0 +1,64 @@
+" Vim syntax file
+" Language: EDIF (Electronic Design Interchange Format)
+" Maintainer: Artem Zankovich <z_artem@hotbox.ru>
+" Last Change: Oct 14, 2002
+"
+" Supported standarts are:
+" ANSI/EIA Standard 548-1988 (EDIF Version 2 0 0)
+" IEC 61690-1 (EDIF Version 3 0 0)
+" IEC 61690-2 (EDIF Version 4 0 0)
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+if version >= 600
+ setlocal iskeyword=48-57,-,+,A-Z,a-z,_,&
+else
+ set iskeyword=A-Z,a-z,_,&
+endif
+
+syn region edifList matchgroup=Delimiter start="(" end=")" contains=edifList,edifKeyword,edifString,edifNumber
+
+" Strings
+syn match edifInStringError /%/ contained
+syn match edifInString /%\s*\d\+\s*%/ contained
+syn region edifString start=/"/ end=/"/ contains=edifInString,edifInStringError contained
+
+" Numbers
+syn match edifNumber "\<[-+]\=[0-9]\+\>"
+
+" Keywords
+syn match edifKeyword "(\@<=\s*[a-zA-Z&][a-zA-Z_0-9]*\>" contained
+
+syn match edifError ")"
+
+" synchronization
+if version < 600
+ syntax sync maxlines=250
+else
+ syntax sync fromstart
+endif
+
+" Define the default highlighting.
+if version >= 508 || !exists("did_edif_syntax_inits")
+ if version < 508
+ let did_edif_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink edifInString SpecialChar
+ HiLink edifKeyword Keyword
+ HiLink edifNumber Number
+ HiLink edifInStringError edifError
+ HiLink edifError Error
+ HiLink edifString String
+ delcommand HiLink
+endif
+
+let b:current_syntax = "edif"
diff --git a/runtime/syntax/eiffel.vim b/runtime/syntax/eiffel.vim
new file mode 100644
index 000000000..af6eee98a
--- /dev/null
+++ b/runtime/syntax/eiffel.vim
@@ -0,0 +1,196 @@
+" 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
+
+" 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
+
+" Option handling
+
+if exists("eiffel_ignore_case")
+ syn case ignore
+else
+ syn case match
+ if exists("eiffel_pedantic") || exists("eiffel_strict")
+ syn keyword eiffelError current void result precursor none
+ syn keyword eiffelError CURRENT VOID RESULT PRECURSOR None
+ syn keyword eiffelError TRUE FALSE
+ endif
+ if exists("eiffel_pedantic")
+ syn keyword eiffelError true false
+ syn match eiffelError "\<[a-z_]\+[A-Z][a-zA_Z_]*\>"
+ syn match eiffelError "\<[A-Z][a-z_]*[A-Z][a-zA-Z_]*\>"
+ endif
+ if exists("eiffel_lower_case_predef")
+ syn keyword eiffelPredefined current void result precursor
+ endif
+endif
+
+if exists("eiffel_hex_constants")
+ syn match eiffelNumber "\d[0-9a-fA-F]*[xX]"
+endif
+
+" Keyword definitions
+
+syn keyword eiffelTopStruct 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
+syn match eiffelBrackets "[[\]]"
+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 eiffelCreate "\<create\>"
+ syn match eiffelTopStruct contained "\<create\>"
+ 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 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 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 eiffelAssertion variant
+syn match eiffelAssertion "\<invariant\>"
+syn match eiffelTopStruct "^invariant\>"
+syn keyword eiffelException rescue retry
+
+syn keyword eiffelPredefined Current Void Result Precursor
+
+" Operators
+syn match eiffelOperator "\<and\(\s\+then\)\=\>"
+syn match eiffelOperator "\<or\(\s\+else\)\=\>"
+syn keyword eiffelOperator xor implies not
+syn keyword eiffelOperator strip old
+syn keyword eiffelOperator Strip
+syn match eiffelOperator "\$"
+syn match eiffelCreation "!"
+syn match eiffelExport "[{}]"
+syn match eiffelArray "<<"
+syn match eiffelArray ">>"
+syn match eiffelConstraint "->"
+syn match eiffelOperator "[@#|&][^ \e\t\b%]*"
+
+" Special classes
+syn keyword eiffelAnchored like
+syn keyword eiffelBitType BIT
+
+" Constants
+if !exists("eiffel_pedantic")
+ syn keyword eiffelBool true false
+endif
+syn keyword eiffelBool True False
+syn region eiffelString start=+"+ skip=+%"+ end=+"+ contains=eiffelStringEscape,eiffelStringError
+syn match eiffelStringEscape contained "%[^/]"
+syn match eiffelStringEscape contained "%/\d\+/"
+syn match eiffelStringEscape contained "^[ \t]*%"
+syn match eiffelStringEscape contained "%[ \t]*$"
+syn match eiffelStringError contained "%/[^0-9]"
+syn match eiffelStringError contained "%/\d\+[^0-9/]"
+syn match eiffelBadConstant "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
+syn match eiffelBadConstant "''"
+syn match eiffelCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=eiffelStringEscape
+syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\>"
+syn match eiffelNumber "\<[01]\+[bB]\>"
+syn match eiffelNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
+syn match eiffelNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
+syn match eiffelComment "--.*" contains=eiffelTodo
+
+syn case match
+
+" Case sensitive stuff
+
+syn keyword eiffelTodo contained TODO XXX FIXME
+syn match eiffelClassName "\<[A-Z][A-Z0-9_]*\>"
+
+" Catch mismatched parentheses
+syn match eiffelParenError ")"
+syn region eiffelParen transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
+
+" Should suffice for even very long strings and expressions
+syn sync lines=40
+
+" 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_eiffel_syntax_inits")
+ if version < 508
+ let did_eiffel_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink eiffelKeyword Statement
+ HiLink eiffelProperty Statement
+ HiLink eiffelInheritClause Statement
+ HiLink eiffelStatement Statement
+ HiLink eiffelDeclaration Statement
+ HiLink eiffelAssertion Statement
+ HiLink eiffelDebug Statement
+ HiLink eiffelException Statement
+ HiLink eiffelGenericCreate Statement
+
+
+ HiLink eiffelTopStruct PreProc
+
+ HiLink eiffelAll Special
+ HiLink eiffelAnchored Special
+ HiLink eiffelBitType Special
+
+
+ HiLink eiffelBool Boolean
+ HiLink eiffelString String
+ HiLink eiffelCharacter Character
+ HiLink eiffelClassName Type
+ HiLink eiffelNumber Number
+
+ HiLink eiffelStringEscape Special
+
+ HiLink eiffelOperator Special
+ HiLink eiffelArray Special
+ HiLink eiffelExport Special
+ HiLink eiffelCreation Special
+ HiLink eiffelBrackets Special
+ HiLink eiffelGeneric Special
+ HiLink eiffelGenericDecl Special
+ HiLink eiffelConstraint Special
+ HiLink eiffelCreate Special
+
+ HiLink eiffelPredefined Constant
+
+ HiLink eiffelComment Comment
+
+ HiLink eiffelError Error
+ HiLink eiffelBadConstant Error
+ HiLink eiffelStringError Error
+ HiLink eiffelParenError Error
+ HiLink eiffelBracketError Error
+
+ HiLink eiffelTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "eiffel"
+
+" vim: ts=8
diff --git a/runtime/syntax/elf.vim b/runtime/syntax/elf.vim
new file mode 100644
index 000000000..678048968
--- /dev/null
+++ b/runtime/syntax/elf.vim
@@ -0,0 +1,95 @@
+" Vim syntax file
+" Language: ELF
+" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de>
+" Last Change: Son 22 Jun 2003 20:43:14 CEST
+" Filenames: *.ab,*.am
+" URL: http://www.cvjb.de/comp/vim/elf.vim
+" $Id$
+"
+" ELF: Extensible Language Facility
+" This is the Applix Inc., Macro and Builder programming language.
+" It has nothing in common with the binary format called ELF.
+
+" 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
+
+" Case does not matter
+syn case ignore
+
+" Environments
+syn region elfEnvironment transparent matchgroup=Special start="{" matchgroup=Special end="}" contains=ALLBUT,elfBraceError
+
+" Unmatched braces
+syn match elfBraceError "}"
+
+" All macros must have at least one of these definitions
+syn keyword elfSpecial endmacro
+syn region elfSpecial transparent matchgroup=Special start="^\(\(macro\)\|\(set\)\) \S\+$" matchgroup=Special end="^\(\(endmacro\)\|\(endset\)\)$" contains=ALLBUT,elfBraceError
+
+" Preprocessor Commands
+syn keyword elfPPCom define include
+
+" Some keywords
+syn keyword elfKeyword false true null
+syn keyword elfKeyword var format object function endfunction
+
+" Conditionals and loops
+syn keyword elfConditional if else case of endcase for to next while until return goto
+
+" All built-in elf macros end with an '@'
+syn match elfMacro "[0-9_A-Za-z]\+@"
+
+" Strings and characters
+syn region elfString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+" Numbers
+syn match elfNumber "-\=\<[0-9]*\.\=[0-9_]\>"
+
+" Comments
+syn region elfComment start="/\*" end="\*/"
+syn match elfComment "\'.*$"
+
+syn sync ccomment elfComment
+
+" Parenthesis
+syn match elfParens "[\[\]()]"
+
+" Punctuation
+syn match elfPunct "[,;]"
+
+" 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_elf_syn_inits")
+ if version < 508
+ let did_elf_syn_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 elfComment Comment
+ HiLink elfPPCom Include
+ HiLink elfKeyword Keyword
+ HiLink elfSpecial Special
+ HiLink elfEnvironment Special
+ HiLink elfBraceError Error
+ HiLink elfConditional Conditional
+ HiLink elfMacro Function
+ HiLink elfNumber Number
+ HiLink elfString String
+ HiLink elfParens Delimiter
+ HiLink elfPunct Delimiter
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "elf"
+
+" vim:ts=8:sw=4:nocindent:smartindent:
diff --git a/runtime/syntax/elinks.vim b/runtime/syntax/elinks.vim
new file mode 100644
index 000000000..0392c0858
--- /dev/null
+++ b/runtime/syntax/elinks.vim
@@ -0,0 +1,207 @@
+" Vim syntax file
+" Language: elinks(1) configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/
+" Latest Revision: 2004-05-22
+" arch-tag: 74eaff55-cdb5-4d31-805b-9627eb6535f1
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,_,-
+delcommand SetIsk
+
+" Todo
+syn keyword elinksTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region elinksComment matchgroup=elinksComment start='#' end='$' contains=elinksTodo
+
+" Numbers
+syn match elinksNumber '\<\d\+\>'
+
+" Strings
+syn region elinksString matchgroup=elinksString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@elinksColor
+
+" Keywords
+syn keyword elinksKeyword set bind
+
+" Options
+syn keyword elinksPrefix bookmarks
+syn keyword elinksOptions file_format
+
+syn keyword elinksPrefix config
+syn keyword elinksOptions comments indentation saving_style i18n
+syn keyword elinksOptions saving_style_w show_template
+
+syn keyword elinksPrefix connection ssl client_cert
+syn keyword elinksOptions enable file cert_verify async_dns max_connections
+syn keyword elinksOptions max_connections_to_host receive_timeout retries
+syn keyword elinksOptions unrestartable_receive_timeout
+
+syn keyword elinksPrefix cookies
+syn keyword elinksOptions accept_policy max_age paranoid_security save resave
+
+syn keyword elinksPrefix document browse accesskey forms images links
+syn keyword elinksPrefix active_link colors search cache codepage colors
+syn keyword elinksPrefix format memory download dump history global html
+syn keyword elinksPrefix plain
+syn keyword elinksOptions auto_follow priority auto_submit confirm_submit
+syn keyword elinksOptions input_size show_formhist file_tags
+syn keyword elinksOptions image_link_tagging image_link_prefix
+syn keyword elinksOptions image_link_suffix show_as_links show_any_as_links
+syn keyword elinksOptions background text enable_color bold invert underline
+syn keyword elinksOptions color_dirs numbering use_tabindex
+syn keyword elinksOptions number_keys_select_link wraparound case regex
+syn keyword elinksOptions show_hit_top_bottom wraparound show_not_found
+syn keyword elinksOptions margin_width refresh minimum_refresh_time
+syn keyword elinksOptions scroll_margin scroll_step table_move_order size
+syn keyword elinksOptions size cache_redirects ignore_cache_control assume
+syn keyword elinksOptions force_assumed text background link vlink dirs
+syn keyword elinksOptions allow_dark_on_black ensure_contrast
+syn keyword elinksOptions use_document_colors directory set_original_time
+syn keyword elinksOptions overwrite notify_bell codepage width enable
+syn keyword elinksOptions max_items display_type write_interval
+syn keyword elinksOptions keep_unhistory display_frames display_tables
+syn keyword elinksOptions expand_table_columns display_subs display_sups
+syn keyword elinksOptions link_display underline_links wrap_nbsp
+syn keyword elinksOptions display_links compress_empty_lines
+
+syn keyword elinksPrefix mime extension handler mailcap mimetypes type
+syn keyword elinksOptions ask block program enable path ask description
+syn keyword elinksOptions prioritize enable path default_type
+
+syn keyword elinksPrefix protocol file cgi ftp proxy http bugs proxy
+syn keyword elinksPrefix referer https proxy rewrite dumb smart
+syn keyword elinksOptions path policy allow_special_files show_hidden_files
+syn keyword elinksOptions try_encoding_extensions host anon_passwd use_pasv
+syn keyword elinksOptions use_epsv accept_charset allow_blacklist
+syn keyword elinksOptions broken_302_redirect post_no_keepalive http10 host
+syn keyword elinksOptions user passwd policy fake accept_language
+syn keyword elinksOptions accept_ui_language trace user_agent host
+syn keyword elinksOptions enable-dumb enable-smart
+
+syn keyword elinksPrefix terminal
+syn keyword elinksOptions type m11_hack utf_8_io restrict_852 block_cursor
+syn keyword elinksOptions colors transparency underline charset
+
+syn keyword elinksPrefix ui colors color mainmenu normal selected hotkey
+syn keyword elinksPrefix menu marked hotkey frame dialog generic frame
+syn keyword elinksPrefix scrollbar scrollbar-selected title text checkbox
+syn keyword elinksPrefix checkbox-label button button-selected field
+syn keyword elinksPrefix field-text meter shadow title title-bar title-text
+syn keyword elinksPrefix status status-bar status-text tabs unvisited normal
+syn keyword elinksPrefix loading separator searched mono
+syn keyword elinksOptions text background
+
+syn keyword elinksPrefix ui dialogs leds sessions tabs timer
+syn keyword elinksOptions listbox_min_height shadows underline_hotkeys enable
+syn keyword elinksOptions auto_save auto_restore auto_save_foldername
+syn keyword elinksOptions homepage show_bar wraparound confirm_close enable
+syn keyword elinksOptions duration action language show_status_bar
+syn keyword elinksOptions show_title_bar startup_goto_dialog success_msgbox
+syn keyword elinksOptions window_title
+
+syn keyword elinksOptions secure_file_saving
+
+" Colors
+syn cluster elinksColor contains=elinksColorBlack,elinksColorDarkRed,elinksColorDarkGreen,elinksColorDarkYellow,elinksColorDarkBlue,elinksColorDarkMagenta,elinksColorDarkCyan,elinksColorGray,elinksColorDarkGray,elinksColorRed,elinksColorGreen,elinksColorYellow,elinksColorBlue,elinksColorMagenta,elinksColorCyan,elinksColorWhite
+
+syn keyword elinksColorBlack black contained
+syn keyword elinksColorDarkRed darkred sandybrown maroon crimson firebrick contained
+syn keyword elinksColorDarkGreen darkgreen darkolivegreen darkseagreen contained
+syn keyword elinksColorDarkGreen forestgreen mediumspringgreen seagreen contained
+syn keyword elinksColorDarkYellow brown blanchedalmond chocolate darkorange contained
+syn keyword elinksColorDarkYellow darkgoldenrod orange rosybrown saddlebrown contained
+syn keyword elinksColorDarkYellow peru olive olivedrab sienna contained
+syn keyword elinksColorDarkBlue darkblue cadetblue cornflowerblue contained
+syn keyword elinksColorDarkBlue darkslateblue deepskyblue midnightblue contained
+syn keyword elinksColorDarkBlue royalblue steelblue navy contained
+syn keyword elinksColorDarkMagenta darkmagenta mediumorchid mediumpurple contained
+syn keyword elinksColorDarkMagenta mediumslateblue slateblue deeppink hotpink contained
+syn keyword elinksColorDarkMagenta darkorchid orchid purple indigo contained
+syn keyword elinksColorDarkCyan darkcyan mediumaquamarine mediumturquoise contained
+syn keyword elinksColorDarkCyan darkturquoise teal contained
+syn keyword elinksColorGray silver dimgray lightslategray slategray contained
+syn keyword elinksColorGray lightgrey burlywood plum tan thistle contained
+
+syn keyword elinksColorDarkGray gray darkgray darkslategray darksalmon contained
+syn keyword elinksColorRed red indianred orangered tomato lightsalmon contained
+syn keyword elinksColorRed salmon coral lightcoral contained
+syn keyword elinksColorGreen green greenyellow lawngreen lightgreen contained
+syn keyword elinksColorGreen lightseagreen limegreen mediumseagreen contained
+syn keyword elinksColorGreen springgreen yellowgreen palegreen lime contained
+syn keyword elinksColorGreen chartreuse contained
+syn keyword elinksColorYellow yellow beige darkkhaki lightgoldenrodyellow contained
+syn keyword elinksColorYellow palegoldenrod gold goldenrod khaki contained
+syn keyword elinksColorYellow lightyellow contained
+syn keyword elinksColorBlue blue aliceblue aqua aquamarine azure contained
+syn keyword elinksColorBlue dodgerblue lightblue lightskyblue contained
+syn keyword elinksColorBlue lightsteelblue mediumblue contained
+syn keyword elinksColorMagenta magenta darkviolet blueviolet lightpink contained
+syn keyword elinksColorMagenta mediumvioletred palevioletred violet pink contained
+syn keyword elinksColorMagenta fuchsia contained
+syn keyword elinksColorCyan cyan lightcyan powderblue skyblue turquoise contained
+syn keyword elinksColorCyan paleturquoise contained
+syn keyword elinksColorWhite white antiquewhite floralwhite ghostwhite contained
+syn keyword elinksColorWhite navajowhite whitesmoke linen lemonchiffon contained
+syn keyword elinksColorWhite cornsilk lavender lavenderblush seashell contained
+syn keyword elinksColorWhite mistyrose ivory papayawhip bisque gainsboro contained
+syn keyword elinksColorWhite honeydew mintcream moccasin oldlace contained
+syn keyword elinksColorWhite peachpuff snow wheat contained
+
+" 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_elinks_syn_inits")
+ if version < 508
+ let did_elinks_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ HiDef hi <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ HiDef hi def <args>
+ endif
+
+ HiLink elinksTodo Todo
+ HiLink elinksComment Comment
+ HiLink elinksNumber Number
+ HiLink elinksString String
+ HiLink elinksKeyword Keyword
+ HiLink elinksPrefix Identifier
+ HiLink elinksOptions Identifier
+ HiDef elinksColorBlack ctermfg=Black guifg=Black
+ HiDef elinksColorDarkRed ctermfg=DarkRed guifg=DarkRed
+ HiDef elinksColorDarkGreen ctermfg=DarkGreen guifg=DarkGreen
+ HiDef elinksColorDarkYellow ctermfg=DarkYellow guifg=DarkYellow
+ HiDef elinksColorDarkBlue ctermfg=DarkBlue guifg=DarkBlue
+ HiDef elinksColorDarkMagenta ctermfg=DarkMagenta guifg=DarkMagenta
+ HiDef elinksColorDarkCyan ctermfg=DarkCyan guifg=DarkCyan
+ HiDef elinksColorGray ctermfg=Gray guifg=Gray
+ HiDef elinksColorDarkGray ctermfg=DarkGray guifg=DarkGray
+ HiDef elinksColorRed ctermfg=Red guifg=Red
+ HiDef elinksColorGreen ctermfg=Green guifg=Green
+ HiDef elinksColorYellow ctermfg=Yellow guifg=Yellow
+ HiDef elinksColorBlue ctermfg=Blue guifg=Blue
+ HiDef elinksColorMagenta ctermfg=Magenta guifg=Magenta
+ HiDef elinksColorCyan ctermfg=Cyan guifg=Cyan
+ HiDef elinksColorWhite ctermfg=White guifg=White
+
+ delcommand HiLink
+ delcommand HiDef
+endif
+
+let b:current_syntax = "elinks"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/elmfilt.vim b/runtime/syntax/elmfilt.vim
new file mode 100644
index 000000000..20f22d39b
--- /dev/null
+++ b/runtime/syntax/elmfilt.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Language: Elm Filter rules
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 3
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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 cluster elmfiltIfGroup contains=elmfiltCond,elmfiltOper,elmfiltOperKey,,elmfiltNumber,elmfiltOperKey
+
+syn match elmfiltParenError "[()]"
+syn match elmfiltMatchError "/"
+syn region elmfiltIf start="\<if\>" end="\<then\>" contains=elmfiltParen,elmfiltParenError skipnl skipwhite nextgroup=elmfiltAction
+syn region elmfiltParen contained matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=elmfiltParen,@elmfiltIfGroup,elmfiltThenError
+syn region elmfiltMatch contained matchgroup=Delimiter start="/" skip="\\/" matchgroup=Delimiter end="/" skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey
+syn match elmfiltThenError "\<then.*$"
+syn match elmfiltComment "^#.*$" contains=@Spell
+
+syn keyword elmfiltAction contained delete execute executec forward forwardc leave save savecopy skipnl skipwhite nextgroup=elmfiltString
+syn match elmfiltArg contained "[^\\]%[&0-9dDhmrsSty&]"lc=1
+
+syn match elmfiltOperKey contained "\<contains\>" skipnl skipwhite nextgroup=elmfiltString
+syn match elmfiltOperKey contained "\<matches\s" nextgroup=elmfiltMatch,elmfiltSpaceError
+syn keyword elmfiltCond contained cc bcc lines always subject sender from to lines received skipnl skipwhite nextgroup=elmfiltString
+syn match elmfiltNumber contained "\d\+"
+syn keyword elmfiltOperKey contained and not skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,elmfiltString
+syn match elmfiltOper contained "\~" skipnl skipwhite nextgroup=elmfiltMatch
+syn match elmfiltOper contained "<=\|>=\|!=\|<\|<\|=" skipnl skipwhite nextgroup=elmfiltString,elmfiltCond,elmfiltOperKey
+syn region elmfiltString contained start='"' skip='"\(\\\\\)*\\["%]' end='"' contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey
+syn region elmfiltString contained start="'" skip="'\(\\\\\)*\\['%]" end="'" contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey
+syn match elmfiltSpaceError contained "\s.*$"
+
+" 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_elmfilt_syntax_inits")
+ if version < 508
+ let did_elmfilt_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink elmfiltAction Statement
+ HiLink elmfiltArg Special
+ HiLink elmfiltComment Comment
+ HiLink elmfiltCond Statement
+ HiLink elmfiltIf Statement
+ HiLink elmfiltMatch Special
+ HiLink elmfiltMatchError Error
+ HiLink elmfiltNumber Number
+ HiLink elmfiltOper Operator
+ HiLink elmfiltOperKey Type
+ HiLink elmfiltParenError Error
+ HiLink elmfiltSpaceError Error
+ HiLink elmfiltString String
+ HiLink elmfiltThenError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "elmfilt"
+" vim: ts=9
diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim
new file mode 100644
index 000000000..a8ffb3939
--- /dev/null
+++ b/runtime/syntax/erlang.vim
@@ -0,0 +1,224 @@
+" Vim syntax file
+" Language: erlang (ERicsson LANGuage)
+" http://www.erlang.se
+" http://www.erlang.org
+" Maintainer: Kre¹imir Mar¾iæ (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
+" Last update: Fri, 15-Feb-2002
+" Filenames: .erl
+" URL: http://www.srk.fer.hr/~kmarzic/vim/syntax/erlang.vim
+
+
+" 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
+
+
+" 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
+
+
+" Case sensitive
+syn case match
+
+
+if ! exists ("erlang_characters")
+ " Basic elements
+ syn match erlangComment +%.*$+
+ 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
+ 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 erlangNumberFloat4 "[+-]\=[eE][+-]\=\d\+" contains=erlangSeparator
+ syn match erlangNumberHex "$\x\+" contains=erlangSeparator
+
+ " Ignore '_' and '-' in words
+ syn match erlangWord "\w\+[_-]\+\w\+"
+
+ " Ignore numbers in words
+ syn match erlangWord "\w\+\d\+\(\(.\d\+\)\=\(\w\+\)\=\)\="
+endif
+
+if ! exists ("erlang_functions")
+ " Functions call
+ syn match erlangFCall "\w\+\(\s\+\)\=[:@]\(\s\+\)\=\w\+" contains=ALLBUT,erlangFunction,erlangBIF,erlangWord
+
+ " 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
+
+if ! exists ("erlang_keywords")
+ " Constants and Directives
+ syn match erlangDirective "-compile\|-define\|-else\|-endif\|-export\|-file"
+ syn match erlangDirective "-ifdef\|-ifndef\|-import\|-include\|-include_lib"
+ syn match erlangDirective "-module\|-record\|-undef"
+
+ syn match erlangConstant "-author\|-copyright\|-doc"
+
+ " 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
+
+ " 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
+
+ " Extras
+ syn keyword erlangExtra badarg nocookie false fun true
+
+ " Signals
+ syn keyword erlangSignal badsig kill killed exit normal
+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_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 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
+ HiLink erlangExtra Statement
+ HiLink erlangSignal Statement
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "erlang"
+
+" eof
diff --git a/runtime/syntax/esqlc.vim b/runtime/syntax/esqlc.vim
new file mode 100644
index 000000000..6ad167a7e
--- /dev/null
+++ b/runtime/syntax/esqlc.vim
@@ -0,0 +1,75 @@
+" Vim syntax file
+" Language: ESQL-C
+" Maintainer: Jonathan A. George <jageorge@tel.gte.com>
+" Last Change: 2001 May 09
+
+" 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
+if version < 600
+ source <sfile>:p:h/cpp.vim
+else
+ runtime! syntax/cpp.vim
+endif
+
+" ESQL-C extentions
+
+syntax keyword esqlcPreProc EXEC SQL INCLUDE
+
+syntax case ignore
+
+syntax keyword esqlcPreProc begin end declare section database open execute
+syntax keyword esqlcPreProc prepare fetch goto continue found sqlerror work
+
+syntax keyword esqlcKeyword access add as asc by check cluster column
+syntax keyword esqlcKeyword compress connect current decimal
+syntax keyword esqlcKeyword desc exclusive file from group
+syntax keyword esqlcKeyword having identified immediate increment index
+syntax keyword esqlcKeyword initial into is level maxextents mode modify
+syntax keyword esqlcKeyword nocompress nowait of offline on online start
+syntax keyword esqlcKeyword successful synonym table then to trigger uid
+syntax keyword esqlcKeyword unique user validate values view whenever
+syntax keyword esqlcKeyword where with option order pctfree privileges
+syntax keyword esqlcKeyword public resource row rowlabel rownum rows
+syntax keyword esqlcKeyword session share size smallint
+
+syntax keyword esqlcOperator not and or
+syntax keyword esqlcOperator in any some all between exists
+syntax keyword esqlcOperator like escape
+syntax keyword esqlcOperator intersect minus
+syntax keyword esqlcOperator prior distinct
+syntax keyword esqlcOperator sysdate
+
+syntax keyword esqlcStatement alter analyze audit comment commit create
+syntax keyword esqlcStatement delete drop explain grant insert lock noaudit
+syntax keyword esqlcStatement rename revoke rollback savepoint select set
+syntax keyword esqlcStatement truncate update
+
+" 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_esqlc_syntax_inits")
+ if version < 508
+ let did_esqlc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink esqlcOperator Operator
+ HiLink esqlcStatement Statement
+ HiLink esqlcKeyword esqlcSpecial
+ HiLink esqlcSpecial Special
+ HiLink esqlcPreProc PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "esqlc"
+
diff --git a/runtime/syntax/eterm.vim b/runtime/syntax/eterm.vim
new file mode 100644
index 000000000..9cf38fe14
--- /dev/null
+++ b/runtime/syntax/eterm.vim
@@ -0,0 +1,200 @@
+" Vim syntax file
+" Language: Eterm configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/eterm/
+" Latest Revision: 2004-05-06
+" arch-tag: f4c58caf-2b91-4fc4-96af-e3cad7c70e6b
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" magic number
+syn match etermMagic display "^<Eterm-[0-9.]\+>$"
+
+" comments
+syn region etermComment matchgroup=etermComment start="^#" end="$" contains=etermTodo
+
+" todo
+syn keyword etermTodo contained TODO FIXME XXX NOTE
+
+" numbers
+syn match etermNumber contained display "\<\(\d\+\|0x\x\{1,2}\)\>"
+
+" strings
+syn region etermString contained display oneline start=+"+ skip=+\\"+ end=+"+
+
+" booleans
+syn keyword etermBoolean contained on off true false yes no
+
+" colors (not pretty, but can't figure out better way...)
+syn match etermColor contained display "\s\+#\x\{6}\>"
+syn keyword etermColor contained white black
+
+" preproc
+syn match etermPreProc contained "%\(appname\|exec\|get\|put\|random\|version\|include\|preproc\)("he=e-1
+
+" functions
+syn match etermFunctions contained "\<\(copy\|exit\|kill\|nop\|paste\|save\|scroll\|search\|spawn\)("
+
+" and make it easy to refer to the above...
+syn cluster etermGeneral contains=etermComment,etermNumber,etermString,etermBoolean,etermColor,etermFunction,etermPreProc
+
+" key modifiers
+syn keyword etermKeyMod contained ctrl shift lock mod1 mod2 mod3 mod4 mod5 alt meta anymod
+syn keyword etermKeyMod contained button1 button2 button3 button4 button5
+
+" color context
+syn region etermColorOptions contained oneline matchgroup=etermOption start="^\s*video\>" matchgroup=etermType end="\<\(normal\|reverse\)\>"
+syn region etermColorOptions contained oneline matchgroup=etermOption start="^\s*color\>" matchgroup=etermType end="\<\(bd\|ul\|[0-9]\|1[0-5]\)\>"
+syn keyword etermColorOptions contained foreground background cursor cursor_text pointer
+
+syn region etermColorContext fold transparent matchgroup=etermContext start="^\s*begin\s\+color\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermColorOptions
+
+" attributes context
+syn region etermAttrOptions contained oneline matchgroup=etermOption start="^\s*geometry\>" matchgroup=etermType end="\<\d\+x\d\++\d\++\d\+\>"
+syn region etermAttrOptions contained oneline matchgroup=etermOption start="^\s*scrollbar_type\>" matchgroup=etermType end="\<\(motif\|xterm\|next\)\>"
+syn region etermAttrOptions contained oneline matchgroup=etermOption start="^\s*font\>" matchgroup=etermType end="\<\(bold\|default\|proportional\|fx\|[0-5]\)\>"
+syn keyword etermAttrOptions contained title name iconname desktop scrollbar_width
+
+syn region etermAttrContext fold transparent matchgroup=etermContext start="^\s*begin\s\+attributes\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermAttrOptions
+
+" image context
+" image types
+syn keyword etermImageTypes contained background trough anchor up_arrow
+syn keyword etermImageTypes contained left_arrow right_arrow menu menuitem
+syn keyword etermImageTypes contained submenu button buttonbar down_arrow
+syn region etermImageOptions contained transparent oneline matchgroup=etermOption start="^\s*type\>" end="$" contains=etermImageTypes
+" image modes
+syn keyword etermImageModes contained image trans viewport auto solid
+syn keyword etermImageModesAllow contained allow
+syn region etermImageOptions contained transparent oneline matchgroup=etermOption start="^\s*mode\>" end="$" contains=etermImageModes,etermImageModesAllow
+" image states
+syn region etermImageOptions contained transparent oneline matchgroup=etermOption start="^\s*state\>" matchgroup=etermType end="\<\(normal\|selected\|clicked\|disabled\)\>"
+" image geometry
+syn region etermImageOptions contained transparent oneline matchgroup=etermOption start="^\s*geom\>" matchgroup=etermType end="\s\+\(\d\+x\d\++\d\++\d\+\)\=:\(\(tile\|scale\|hscale\|vscale\|propscale\)d\=\)\="
+" image color modification
+syn region etermImageOptions contained transparent oneline matchgroup=etermOption start="^\s*\(cmod\|colormod\)\>" matchgroup=etermType end="\<\(image\|red\|green\|blue\)\>"
+" other keywords
+syn keyword etermImageOptions contained file padding border bevel color
+
+syn region etermImageContext contained transparent fold matchgroup=etermContext start="^\s*begin\s\+image\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermImageOptions
+
+" imageclasses context
+syn keyword etermIClassOptions contained icon cache path anim
+
+syn region etermIClassContext fold transparent matchgroup=etermContext start="^\s*begin\s\+imageclasses\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermImageContext,etermIClassOptions
+
+" menuitem context
+syn region etermMenuItemOptions contained transparent oneline matchgroup=etermOption start="^\s*action\>" matchgroup=etermType end="\<string\|echo\|submenu\|script\|separator\>"
+syn keyword etermMenuItemOptions contained text rtext
+
+syn region etermMenuItemContext fold transparent matchgroup=etermContext start="^\s*begin\s\+menuitem\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermMenuItemOptions
+
+" menu context (should contain - as well, but no...)
+syn keyword etermMenuOptions contained title font_name sep
+
+syn region etermMenuContext fold transparent matchgroup=etermContext start="^\s*begin\s\+menu\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermMenuOptions,etermMenuItemContext
+
+" action context
+syn match etermActionDef contained "\<\(to\|string\|echo\|menu\|script\)\>"
+syn region etermActionsOptions contained transparent oneline matchgroup=etermOption start="^\s*bind\>" end="$" contains=etermActionDef,etermKeyMod
+
+syn region etermActionsContext fold transparent matchgroup=etermContext start="^\s*begin\s\+actions\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermActionsOptions
+
+" button bar context
+syn match etermButtonDef contained "\<\(action\|string\|echo\|menu\|scrupt\)\>"
+syn region etermButtonOptions contained transparent oneline matchgroup=etermOption start="^\s*button\>" end="$" contains=etermButtonDef
+syn keyword etermButtonOptions contained font visible dock
+
+syn region etermButtonContext fold transparent matchgroup=etermContext start="^\s*begin\s\+button_bar\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermButtonOptions
+
+" multichar context
+syn keyword etermMultiOptions contained encoding font
+
+syn region etermMultiContext fold transparent matchgroup=etermContext start="^\s*begin\s\+multichar\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermMultiOptions
+
+" xim context
+syn keyword etermXimOptions contained input_method preedit_type
+
+syn region etermXimContext fold transparent matchgroup=etermContext start="^\s*begin\s\+xim\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermXimOptions
+
+" toggles context
+syn keyword etermTogOptions contained map_alert visual_bell login_shell scrollbar utmp_logging meta8 iconic no_input
+syn keyword etermTogOptions contained home_on_output home_on_input scrollbar_floating scrollbar_right scrollbar_popup
+syn keyword etermTogOptions contained borderless double_buffer no_cursor pause xterm_select select_line
+syn keyword etermTogOptions contained select_trailing_spaces report_as_keysyms itrans immotile_trans buttonbar
+syn keyword etermTogOptions contained resize_gravity
+
+syn region etermTogContext fold transparent matchgroup=etermContext start="^\s*begin\s\+toggles\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermTogOptions
+
+" keyboard context
+syn keyword etermKeyboardOptions contained smallfont_key bigfont_key keysym meta_mod alt_mod
+syn keyword etermKeyboardOptions contained greek numlock_mod app_keypad app_cursor
+
+syn region etermKeyboardContext fold transparent matchgroup=etermContext start="^\s*begin\s\+keyboard\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermKeyboardOptions
+
+" misc context
+syn keyword etermMiscOptions contained print_pipe save_lines cut_chars min_anchor_size
+syn keyword etermMiscOptions contained border_width line_space finished_title term_name
+syn keyword etermMiscOptions contained finished_text exec
+
+syn region etermMiscContext fold transparent matchgroup=etermContext start="^\s*begin\s\+misc\s*$" end="^\s*end\>\(\s\+.\{-0,}\)\=$" contains=@etermGeneral,etermMiscOptions
+
+if exists("eterm_minlines")
+ let b:eterm_minlines = eterm_minlines
+else
+ let b:eterm_minlines = 30
+endif
+exec "syn sync minlines=" . b:eterm_minlines
+
+" 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_eterm_syn_inits")
+ if version < 508
+ let did_eterm_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink etermMagic Special
+ HiLink etermComment Comment
+ HiLink etermTodo Todo
+ HiLink etermNumber Number
+ HiLink etermString String
+ HiLink etermBoolean Boolean
+ HiLink etermColor Number
+ HiLink etermPreProc PreProc
+ HiLink etermFunctions Function
+ HiLink etermKeyMod Special
+ HiLink etermContext Keyword
+ HiLink etermOption Keyword
+ HiLink etermType Type
+ HiLink etermColorOptions Keyword
+ HiLink etermAttrOptions Keyword
+ HiLink etermIClassOptions Keyword
+ HiLink etermImageTypes Type
+ HiLink etermImageModes Type
+ HiLink etermImageModesAllow Keyword
+ HiLink etermImageOptions Keyword
+ HiLink etermMenuOptions Keyword
+ HiLink etermMenuItemOptions Keyword
+ HiLink etermActionDef Type
+ HiLink etermActionsOptions Keyword
+ HiLink etermButtonDef Type
+ HiLink etermButtonOptions Keyword
+ HiLink etermMultiOptions Keyword
+ HiLink etermXimOptions Keyword
+ HiLink etermTogOptions Keyword
+ HiLink etermKeyboardOptions Keyword
+ HiLink etermMiscOptions Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "eterm"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/exim.vim b/runtime/syntax/exim.vim
new file mode 100644
index 000000000..ff8066f8a
--- /dev/null
+++ b/runtime/syntax/exim.vim
@@ -0,0 +1,117 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: Exim configuration file exim.conf
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-10-15
+" URL: http://trific.ath.cx/Ftp/vim/syntax/exim.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+syn case match
+
+" Base constructs
+syn match eximComment "^\s*#.*$" contains=eximFixme
+syn match eximComment "\s#.*$" contains=eximFixme
+syn keyword eximFixme FIXME TODO XXX NOT contained
+syn keyword eximConstant true false yes no
+syn match eximNumber "\<\d\+[KM]\?\>"
+syn match eximNumber "\<0[xX]\x\+\>"
+syn match eximNumber "\<\d\+\(\.\d\{,3}\)\?\>"
+syn match eximTime "\<\(\d\+[wdhms]\)\+\>"
+syn match eximSpecialChar "\\[\\nrt]\|\\\o\{1,3}\|\\x\x\{1,2}"
+syn region eximMacroDefinition matchgroup=eximMacroName start="^[A-Z]\i*\s*=" end="$" skip="\\\s*$" transparent
+
+syn match eximDriverName "\<\(aliasfile\|appendfile\|autoreply\|domainlist\|forwardfile\|ipliteral\|iplookup\|lmtp\|localuser\|lookuphost\|pipe\|queryprogram\|smartuser\|smtp\)\>"
+syn match eximTransport "^\s*\i\+:"
+
+" Options
+syn keyword eximEnd end
+syn keyword eximKeyword accept_8bitmime accept_timeout admin_groups allow_mx_to_ip always_bcc auth_always_advertise auth_hosts auth_over_tls_hosts auto_thaw bi_command check_log_inodes check_log_space check_spool_inodes check_spool_space collapse_source_routes daemon_smtp_port daemon_smtp_service debug_level delay_warning delay_warning_condition deliver_load_max deliver_queue_load_max delivery_date_remove dns_again_means_nonexist dns_check_names dns_check_names_pattern dns_retrans dns_ipv4_lookup dns_retry envelope_to_remove errmsg_text errmsg_file errors_address errors_copy errors_reply_to exim_group exim_path exim_user extract_addresses_remove_arguments finduser_retries forbid_domain_literals freeze_tell_mailmaster gecos_name gecos_pattern headers_check_syntax headers_checks_fail headers_sender_verify headers_sender_verify_errmsg helo_accept_junk_hosts helo_strict_syntax helo_verify hold_domains host_accept_relay host_auth_accept_relay host_lookup host_reject host_reject_recipients hosts_treat_as_local ignore_errmsg_errors ignore_errmsg_errors_after ignore_fromline_hosts ignore_fromline_local keep_malformed kill_ip_options ldap_default_servers local_domains local_domains_include_host local_domains_include_host_literals local_from_check local_from_prefix local_from_suffix local_interfaces localhost_number locally_caseless log_all_parents log_arguments log_file_path log_incoming_port log_ip_options log_level log_queue_run_level log_received_recipients log_received_sender log_refused_recipients log_rewrites log_sender_on_delivery log_smtp_confirmation log_smtp_connections log_smtp_syntax_errors log_subject lookup_open_max max_username_length message_body_visible message_filter message_filter_directory_transport message_filter_directory2_transport message_filter_file_transport message_filter_group message_filter_pipe_transport message_filter_reply_transport message_filter_user message_id_header_text message_size_limit message_size_limit_count_recipients move_frozen_messages mysql_servers never_users nobody_group nobody_user percent_hack_domains perl_at_start perl_startup pgsql_servers pid_file_path preserve_message_logs primary_hostname print_topbitchars prod_requires_admin prohibition_message qualify_domain qualify_recipient queue_list_requires_admin queue_only queue_only_file queue_only_load queue_remote_domains queue_run_in_order queue_run_max queue_smtp_domains rbl_domains rbl_hosts rbl_log_headers rbl_log_rcpt_count rbl_reject_recipients rbl_warn_header received_header_text received_headers_max receiver_try_verify receiver_unqualified_hosts receiver_verify receiver_verify_addresses receiver_verify_hosts receiver_verify_senders recipients_max recipients_max_reject recipients_reject_except recipients_reject_except_senders refuse_ip_options relay_domains relay_domains_include_local_mx relay_match_host_or_sender remote_max_parallel remote_sort retry_data_expire retry_interval_max return_path_remove return_size_limit rfc1413_hosts rfc1413_query_timeout security sender_address_relay sender_address_relay_hosts sender_reject sender_reject_recipients sender_try_verify sender_unqualified_hosts sender_verify sender_verify_batch sender_verify_callback_domains sender_verify_callback_timeout sender_verify_fixup sender_verify_hosts sender_verify_hosts_callback sender_verify_max_retry_rate sender_verify_reject smtp_accept_keepalive smtp_accept_max smtp_accept_max_per_host smtp_accept_queue smtp_accept_queue_per_connection smtp_accept_reserve smtp_banner smtp_check_spool_space smtp_connect_backlog smtp_etrn_command smtp_etrn_hosts smtp_etrn_serialize smtp_expn_hosts smtp_load_reserve smtp_receive_timeout smtp_reserve_hosts smtp_verify split_spool_directory spool_directory strip_excess_angle_brackets strip_trailing_dot syslog_timestamp timeout_frozen_after timestamps_utc timezone tls_advertise_hosts tls_certificate tls_dhparam tls_host_accept_relay tls_hosts tls_log_cipher tls_log_peerdn tls_privatekey tls_verify_certificates tls_verify_ciphers tls_verify_hosts trusted_groups trusted_users unknown_login unknown_username untrusted_set_sender uucp_from_pattern uucp_from_sender warnmsg_file
+syn keyword eximKeyword no_accept_8bitmime no_allow_mx_to_ip no_always_bcc no_auth_always_advertise no_collapse_source_routes no_delivery_date_remove no_dns_check_names no_envelope_to_remove no_extract_addresses_remove_arguments no_forbid_domain_literals no_freeze_tell_mailmaster no_headers_check_syntax no_headers_checks_fail no_headers_sender_verify no_headers_sender_verify_errmsg no_helo_strict_syntax no_ignore_errmsg_errors no_ignore_fromline_local no_kill_ip_options no_local_domains_include_host no_local_domains_include_host_literals no_local_from_check no_locally_caseless no_log_all_parents no_log_arguments no_log_incoming_port no_log_ip_options no_log_received_recipients no_log_received_sender no_log_refused_recipients no_log_rewrites no_log_sender_on_delivery no_log_smtp_confirmation no_log_smtp_connections no_log_smtp_syntax_errors no_log_subject no_message_size_limit_count_recipients no_move_frozen_messages no_preserve_message_logs no_print_topbitchars no_prod_requires_admin no_queue_list_requires_admin no_queue_only no_rbl_log_headers no_rbl_log_rcpt_count no_rbl_reject_recipients no_receiver_try_verify no_receiver_verify no_recipients_max_reject no_refuse_ip_options no_relay_domains_include_local_mx no_relay_match_host_or_sender no_return_path_remove no_sender_try_verify no_sender_verify no_sender_verify_batch no_sender_verify_fixup no_sender_verify_reject no_smtp_accept_keepalive no_smtp_check_spool_space no_smtp_etrn_serialize no_smtp_verify no_split_spool_directory no_strip_excess_angle_brackets no_strip_trailing_dot no_syslog_timestamp no_timestamps_utc no_tls_log_cipher no_tls_log_peerdn no_untrusted_set_sender
+syn keyword eximKeyword not_accept_8bitmime not_allow_mx_to_ip not_always_bcc not_auth_always_advertise not_collapse_source_routes not_delivery_date_remove not_dns_check_names not_envelope_to_remove not_extract_addresses_remove_arguments not_forbid_domain_literals not_freeze_tell_mailmaster not_headers_check_syntax not_headers_checks_fail not_headers_sender_verify not_headers_sender_verify_errmsg not_helo_strict_syntax not_ignore_errmsg_errors not_ignore_fromline_local not_kill_ip_options not_local_domains_include_host not_local_domains_include_host_literals not_local_from_check not_locally_caseless not_log_all_parents not_log_arguments not_log_incoming_port not_log_ip_options not_log_received_recipients not_log_received_sender not_log_refused_recipients not_log_rewrites not_log_sender_on_delivery not_log_smtp_confirmation not_log_smtp_connections not_log_smtp_syntax_errors not_log_subject not_message_size_limit_count_recipients not_move_frozen_messages not_preserve_message_logs not_print_topbitchars not_prod_requires_admin not_queue_list_requires_admin not_queue_only not_rbl_log_headers not_rbl_log_rcpt_count not_rbl_reject_recipients not_receiver_try_verify not_receiver_verify not_recipients_max_reject not_refuse_ip_options not_relay_domains_include_local_mx not_relay_match_host_or_sender not_return_path_remove not_sender_try_verify not_sender_verify not_sender_verify_batch not_sender_verify_fixup not_sender_verify_reject not_smtp_accept_keepalive not_smtp_check_spool_space not_smtp_etrn_serialize not_smtp_verify not_split_spool_directory not_strip_excess_angle_brackets not_strip_trailing_dot not_syslog_timestamp not_timestamps_utc not_tls_log_cipher not_tls_log_peerdn not_untrusted_set_sender
+syn keyword eximKeyword body_only debug_print delivery_date_add driver envelope_to_add headers_add headers_only headers_remove headers_rewrite message_size_limit return_path return_path_add shadow_condition shadow_transport transport_filter
+syn keyword eximKeyword no_body_only no_delivery_date_add no_envelope_to_add no_headers_only no_return_path_add
+syn keyword eximKeyword not_body_only not_delivery_date_add not_envelope_to_add not_headers_only not_return_path_add
+syn keyword eximKeyword allow_fifo allow_symlink batch batch_max bsmtp bsmtp_helo check_group check_owner check_string create_directory create_file current_directory directory directory_mode escape_string file file_format file_must_exist from_hack group lock_fcntl_timeout lock_interval lock_retries lockfile_mode lockfile_timeout maildir_format maildir_retries maildir_tag mailstore_format mailstore_prefix mailstore_suffix mbx_format mode mode_fail_narrower notify_comsat prefix quota quota_filecount quota_is_inclusive quota_size_regex quota_warn_message quota_warn_threshold require_lockfile retry_use_local_part suffix use_crlf use_fcntl_lock use_lockfile use_mbx_lock user
+syn keyword eximKeyword no_allow_fifo no_allow_symlink no_bsmtp_helo no_check_group no_check_owner no_create_directory no_file_must_exist no_from_hack no_maildir_format no_mailstore_format no_mbx_format no_mode_fail_narrower no_notify_comsat no_quota_is_inclusive no_require_lockfile no_retry_use_local_part no_use_crlf no_use_fcntl_lock no_use_lockfile no_use_mbx_lock
+syn keyword eximKeyword not_allow_fifo not_allow_symlink not_bsmtp_helo not_check_group not_check_owner not_create_directory not_file_must_exist not_from_hack not_maildir_format not_mailstore_format not_mbx_format not_mode_fail_narrower not_notify_comsat not_quota_is_inclusive not_require_lockfile not_retry_use_local_part not_use_crlf not_use_fcntl_lock not_use_lockfile not_use_mbx_lock
+syn keyword eximKeyword bcc cc file file_expand file_optional from group headers initgroups log mode once once_file_size once_repeat reply_to return_message subject text to user
+syn keyword eximKeyword no_file_expand no_file_optional no_initgroups no_return_message
+syn keyword eximKeyword not_file_expand not_file_optional not_initgroups not_return_message
+syn keyword eximKeyword batch batch_max command group initgroups retry_use_local_part timeout user
+syn keyword eximKeyword no_initgroups
+syn keyword eximKeyword not_initgroups
+syn keyword eximKeyword allow_commands batch batch_max bsmtp bsmtp_helo check_string command current_directory environment escape_string freeze_exec_fail from_hack group home_directory ignore_status initgroups log_defer_output log_fail_output log_output max_output path pipe_as_creator prefix restrict_to_path retry_use_local_part return_fail_output return_output suffix temp_errors timeout umask use_crlf use_shell user
+syn keyword eximKeyword no_bsmtp_helo no_freeze_exec_fail no_from_hack no_ignore_status no_log_defer_output no_log_fail_output no_log_output no_pipe_as_creator no_restrict_to_path no_return_fail_output no_return_output no_use_crlf no_use_shell
+syn keyword eximKeyword not_bsmtp_helo not_freeze_exec_fail not_from_hack not_ignore_status not_log_defer_output not_log_fail_output not_log_output not_pipe_as_creator not_restrict_to_path not_return_fail_output not_return_output not_use_crlf not_use_shell
+syn keyword eximKeyword allow_localhost authenticate_hosts batch_max command_timeout connect_timeout data_timeout delay_after_cutoff dns_qualify_single dns_search_parents fallback_hosts final_timeout gethostbyname helo_data hosts hosts_avoid_tls hosts_require_tls hosts_override hosts_max_try hosts_randomize interface keepalive max_rcpt multi_domain mx_domains port protocol retry_include_ip_address serialize_hosts service size_addition tls_certificate tls_privatekey tls_verify_certificates tls_verify_ciphers
+syn keyword eximKeyword no_allow_localhost no_delay_after_cutoff no_dns_qualify_single no_dns_search_parents no_gethostbyname no_hosts_override no_hosts_randomize no_keepalive no_multi_domain no_retry_include_ip_address
+syn keyword eximKeyword not_allow_localhost not_delay_after_cutoff not_dns_qualify_single not_dns_search_parents not_gethostbyname not_hosts_override not_hosts_randomize not_keepalive not_multi_domain not_retry_include_ip_address
+syn keyword eximKeyword condition debug_print domains driver errors_to fail_verify fail_verify_recipient fail_verify_sender fallback_hosts group headers_add headers_remove initgroups local_parts more require_files senders transport unseen user verify verify_only verify_recipient verify_sender
+syn keyword eximKeyword no_fail_verify no_fail_verify_recipient no_fail_verify_sender no_initgroups no_more no_unseen no_verify no_verify_only no_verify_recipient no_verify_sender
+syn keyword eximKeyword not_fail_verify not_fail_verify_recipient not_fail_verify_sender not_initgroups not_more not_unseen not_verify not_verify_only not_verify_recipient not_verify_sender
+syn keyword eximKeyword current_directory expn home_directory new_director prefix prefix_optional suffix suffix_optional
+syn keyword eximKeyword no_expn no_prefix_optional no_suffix_optional
+syn keyword eximKeyword not_expn not_prefix_optional not_suffix_optional
+syn keyword eximKeyword check_ancestor directory_transport directory2_transport file_transport forbid_file forbid_include forbid_pipe freeze_missing_include hide_child_in_errmsg modemask one_time owners owngroups pipe_transport qualify_preserve_domain rewrite skip_syntax_errors syntax_errors_text syntax_errors_to
+syn keyword eximKeyword no_check_ancestor no_forbid_file no_forbid_include no_forbid_pipe no_freeze_missing_include no_hide_child_in_errmsg no_one_time no_qualify_preserve_domain no_rewrite no_skip_syntax_errors
+syn keyword eximKeyword not_check_ancestor not_forbid_file not_forbid_include not_forbid_pipe not_freeze_missing_include not_hide_child_in_errmsg not_one_time not_qualify_preserve_domain not_rewrite not_skip_syntax_errors
+syn keyword eximKeyword expand file forbid_special include_domain optional queries query search_type
+syn keyword eximKeyword no_expand no_forbid_special no_include_domain no_optional
+syn keyword eximKeyword not_expand not_forbid_special not_include_domain not_optional
+syn keyword eximKeyword allow_system_actions check_group check_local_user data file file_directory filter forbid_filter_existstest forbid_filter_logwrite forbid_filter_lookup forbid_filter_perl forbid_filter_reply ignore_eacces ignore_enotdir match_directory reply_transport seteuid
+syn keyword eximKeyword no_allow_system_actions no_check_local_user no_forbid_filter_reply no_forbid_filter_existstest no_forbid_filter_logwrite no_forbid_filter_lookup no_forbid_filter_perl no_forbid_filter_reply no_ignore_eacces no_ignore_enotdir no_seteuid
+syn keyword eximKeyword not_allow_system_actions not_check_local_user not_forbid_filter_reply not_forbid_filter_existstest not_forbid_filter_logwrite not_forbid_filter_lookup not_forbid_filter_perl not_forbid_filter_reply not_ignore_eacces not_ignore_enotdir not_seteuid
+syn keyword eximKeyword match_directory
+syn keyword eximKeyword directory_transport directory2_transport file_transport forbid_file forbid_pipe hide_child_in_errmsg new_address panic_expansion_fail pipe_transport qualify_preserve_domain rewrite
+syn keyword eximKeyword no_forbid_file no_forbid_pipe no_hide_child_in_errmsg no_panic_expansion_fail no_qualify_preserve_domain no_rewrite
+syn keyword eximKeyword not_forbid_file not_forbid_pipe not_hide_child_in_errmsg not_panic_expansion_fail not_qualify_preserve_domain not_rewrite
+syn keyword eximKeyword ignore_target_hosts pass_on_timeout self translate_ip_address
+syn keyword eximKeyword no_pass_on_timeout
+syn keyword eximKeyword not_pass_on_timeout
+syn keyword eximKeyword host_find_failed hosts_randomize modemask owners owngroups qualify_single route_file route_list route_queries route_query search_parents search_type
+syn keyword eximKeyword no_hosts_randomize no_qualify_single no_search_parents
+syn keyword eximKeyword not_hosts_randomize not_qualify_single not_search_parents
+syn keyword eximKeyword hosts optional port protocol query reroute response_pattern service timeout
+syn keyword eximKeyword no_optional
+syn keyword eximKeyword not_optional
+syn keyword eximKeyword check_secondary_mx gethostbyname mx_domains qualify_single rewrite_headers search_parents widen_domains
+syn keyword eximKeyword no_check_secondary_mx no_gethostbyname no_qualify_single no_search_parents
+syn keyword eximKeyword not_check_secondary_mx not_gethostbyname not_qualify_single not_search_parents
+syn keyword eximKeyword command command_group command_user current_directory timeout
+syn keyword eximKeyword driver public_name server_set_id server_mail_auth_condition
+syn keyword eximKeyword server_prompts server_condition client_send
+syn keyword eximKeyword server_secret client_name client_secret
+
+" Define the default highlighting
+if version >= 508 || !exists("did_exim_syntax_inits")
+ if version < 508
+ let did_exim_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink eximComment Comment
+ HiLink eximFixme Todo
+ HiLink eximEnd Keyword
+ HiLink eximNumber Number
+ HiLink eximDriverName Constant
+ HiLink eximConstant Constant
+ HiLink eximTime Constant
+ HiLink eximKeyword Type
+ HiLink eximSpecialChar Special
+ HiLink eximMacroName Preproc
+ HiLink eximTransport Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "exim"
diff --git a/runtime/syntax/expect.vim b/runtime/syntax/expect.vim
new file mode 100644
index 000000000..1886e2b3e
--- /dev/null
+++ b/runtime/syntax/expect.vim
@@ -0,0 +1,113 @@
+" Vim syntax file
+" Language: Expect
+" Maintainer: Ralph Jennings <knowbudy@oro.net>
+" Last Change: 2001 May 09
+
+" 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
+
+" Reserved Expect variable prefixes.
+syn match expectVariables "\$exp[a-zA-Z0-9_]*\|\$inter[a-zA-Z0-9_]*"
+syn match expectVariables "\$spawn[a-zA-Z0-9_]*\|\$timeout[a-zA-Z0-9_]*"
+
+" Normal Expect variables.
+syn match expectVariables "\$env([^)]*)"
+syn match expectVariables "\$any_spawn_id\|\$argc\|\$argv\d*"
+syn match expectVariables "\$user_spawn_id\|\$spawn_id\|\$timeout"
+
+" Expect variable arrays.
+syn match expectVariables "\$\(expect\|interact\)_out([^)]*)" contains=expectOutVar
+
+" User defined variables.
+syn match expectVariables "\$[a-zA-Z_][a-zA-Z0-9_]*"
+
+" Reserved Expect command prefixes.
+syn match expectCommand "exp_[a-zA-Z0-9_]*"
+
+" Normal Expect commands.
+syn keyword expectStatement close debug disconnect
+syn keyword expectStatement exit exp_continue exp_internal exp_open
+syn keyword expectStatement exp_pid exp_version
+syn keyword expectStatement fork inter_return interpreter
+syn keyword expectStatement log_file log_user match_max overlay
+syn keyword expectStatement parity remove_nulls return
+syn keyword expectStatement send send_error send_log send_user
+syn keyword expectStatement sleep spawn strace stty system
+syn keyword expectStatement timestamp trace trap wait
+
+" Tcl commands recognized and used by Expect.
+syn keyword expectCommand proc
+syn keyword expectConditional if else
+syn keyword expectRepeat while for foreach
+
+" Expect commands with special arguments.
+syn keyword expectStatement expect expect_after expect_background nextgroup=expectExpectOpts
+syn keyword expectStatement expect_before expect_user interact nextgroup=expectExpectOpts
+
+syn match expectSpecial contained "\\."
+
+" Options for "expect", "expect_after", "expect_background",
+" "expect_before", "expect_user", and "interact".
+syn keyword expectExpectOpts default eof full_buffer null return timeout
+
+syn keyword expectOutVar contained spawn_id seconds seconds_total
+syn keyword expectOutVar contained string start end buffer
+
+" Numbers (Tcl style).
+syn case ignore
+ syn match expectNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+ "floating point number, with dot, optional exponent
+ syn match expectNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+ "floating point number, starting with a dot, optional exponent
+ syn match expectNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+ "floating point number, without dot, with exponent
+ syn match expectNumber "\<\d\+e[-+]\=\d\+[fl]\=\>"
+ "hex number
+ syn match expectNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+ "syn match expectIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+
+syn region expectString start=+"+ end=+"+ contains=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
+
+" 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_expect_syntax_inits")
+ if version < 508
+ let did_expect_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink expectVariables Special
+ HiLink expectCommand Function
+ HiLink expectStatement Statement
+ HiLink expectConditional Conditional
+ HiLink expectRepeat Repeat
+ HiLink expectExpectOpts Keyword
+ HiLink expectOutVar Special
+ HiLink expectSpecial Special
+ HiLink expectNumber Number
+
+ HiLink expectString String
+
+ HiLink expectComment Comment
+ HiLink expectTodo Todo
+ "HiLink expectIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "expect"
+
+" vim: ts=8
diff --git a/runtime/syntax/exports.vim b/runtime/syntax/exports.vim
new file mode 100644
index 000000000..d44cc9f78
--- /dev/null
+++ b/runtime/syntax/exports.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Language: exports
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 3
+" Notes: This file includes both SysV and BSD 'isms
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+" Options: -word
+syn keyword exportsKeyOptions contained alldirs nohide ro wsync
+syn keyword exportsKeyOptions contained kerb o rw
+syn match exportsOptError contained "[a-z]\+"
+
+" Settings: word=
+syn keyword exportsKeySettings contained access anon root rw
+syn match exportsSetError contained "[a-z]\+"
+
+" OptSet: -word=
+syn keyword exportsKeyOptSet contained mapall maproot mask network
+syn match exportsOptSetError contained "[a-z]\+"
+
+" options and settings
+syn match exportsSettings "[a-z]\+=" contains=exportsKeySettings,exportsSetError
+syn match exportsOptions "-[a-z]\+" contains=exportsKeyOptions,exportsOptError
+syn match exportsOptSet "-[a-z]\+=" contains=exportsKeyOptSet,exportsOptSetError
+
+" Separators
+syn match exportsSeparator "[,:]"
+
+" comments
+syn match exportsComment "^\s*#.*$" contains=@Spell
+
+" 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_exports_syntax_inits")
+ if version < 508
+ let did_exports_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink exportsKeyOptSet exportsKeySettings
+ HiLink exportsOptSet exportsSettings
+
+ HiLink exportsComment Comment
+ HiLink exportsKeyOptions Type
+ HiLink exportsKeySettings Keyword
+ HiLink exportsOptions Constant
+ HiLink exportsSeparator Constant
+ HiLink exportsSettings Constant
+
+ HiLink exportsOptError Error
+ HiLink exportsOptSetError Error
+ HiLink exportsSetError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "exports"
+" vim: ts=10
diff --git a/runtime/syntax/fasm.vim b/runtime/syntax/fasm.vim
new file mode 100644
index 000000000..01bdc8311
--- /dev/null
+++ b/runtime/syntax/fasm.vim
@@ -0,0 +1,145 @@
+" Vim syntax file
+" Language: Flat Assembler (FASM)
+" Maintainer: Ron Aaron <ron@ronware.org>
+" Last Change: 2004 May 16
+" Vim URL: http://www.vim.org/lang.html
+" FASM Home: http://flatassembler.net/
+" FASM Version: 1.52
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+setlocal iskeyword=a-z,A-Z,48-57,.,_
+setlocal isident=a-z,A-Z,48-57,.,_
+syn case ignore
+
+syn keyword fasmRegister ah al ax bh bl bp bx ch cl cr0 cr1 cr2 cr3 cr4 cr5 cr6
+syn keyword fasmRegister cr7 cs cx dh di dl dr0 dr1 dr2 dr3 dr4 dr5 dr6 dr7 ds dx
+syn keyword fasmRegister eax ebp ebx ecx edi edx es esi esp fs gs mm0 mm1 mm2 mm3
+syn keyword fasmRegister mm4 mm5 mm6 mm7 si sp ss st st0 st1 st2 st3 st4 st5 st6
+syn keyword fasmRegister st7 tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7 xmm0 xmm1 xmm2 xmm3
+syn keyword fasmRegister xmm4 xmm5 xmm6 xmm7
+syn keyword fasmAddressSizes byte dqword dword fword pword qword tword word
+syn keyword fasmDataDirectives db dd df dp dq dt du dw file rb rd rf rp rq rt rw
+syn keyword fasmInstr aaa aad aam aas adc add addpd addps addsd addss addsubpd
+syn keyword fasmInstr addsubps and andnpd andnps andpd andps arpl bound bsf bsr
+syn keyword fasmInstr bswap bt btc btr bts call cbw cdq clc cld clflush cli clts
+syn keyword fasmInstr cmc cmova cmovae cmovb cmovbe cmovc cmove cmovg cmovge cmovl
+syn keyword fasmInstr cmovle cmovna cmovnae cmovnb cmovnbe cmovnc cmovne cmovng
+syn keyword fasmInstr cmovnge cmovnl cmovnle cmovno cmovnp cmovns cmovnz cmovo cmovp
+syn keyword fasmInstr cmovpe cmovpo cmovs cmovz cmp cmpeqpd cmpeqps cmpeqsd cmpeqss
+syn keyword fasmInstr cmplepd cmpleps cmplesd cmpless cmpltpd cmpltps cmpltsd cmpltss
+syn keyword fasmInstr cmpneqpd cmpneqps cmpneqsd cmpneqss cmpnlepd cmpnleps cmpnlesd
+syn keyword fasmInstr cmpnless cmpnltpd cmpnltps cmpnltsd cmpnltss cmpordpd cmpordps
+syn keyword fasmInstr cmpordsd cmpordss cmppd cmpps cmps cmpsb cmpsd cmpss cmpsw
+syn keyword fasmInstr cmpunordpd cmpunordps cmpunordsd cmpunordss cmpxchg cmpxchg8b
+syn keyword fasmInstr comisd comiss cpuid cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps
+syn keyword fasmInstr cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtsd2si cvtsd2ss
+syn keyword fasmInstr cvtsi2sd cvtsi2ss cvtss2sd cvtss2si cvttpd2dq cvttpd2pi cvttps2dq
+syn keyword fasmInstr cvttps2pi cvttsd2si cvttss2si cwd cwde daa das data dec div
+syn keyword fasmInstr divpd divps divsd divss else emms end enter extrn f2xm1 fabs
+syn keyword fasmInstr fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb
+syn keyword fasmInstr fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp
+syn keyword fasmInstr fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree
+syn keyword fasmInstr ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp
+syn keyword fasmInstr finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv
+syn keyword fasmInstr fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi
+syn keyword fasmInstr fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem
+syn keyword fasmInstr fprem1 fptan frndint frstor frstpm fsave fscale fsetpm fsin
+syn keyword fasmInstr fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr
+syn keyword fasmInstr fsubrp ftst fucom fucomi fucomip fucomp fucompp fwait fxam
+syn keyword fasmInstr fxch fxrstor fxsave fxtract fyl2x fyl2xp1 haddpd haddps heap
+syn keyword fasmInstr hlt hsubpd hsubps idiv if imul in inc ins insb insd insw int
+syn keyword fasmInstr int3 into invd invlpg iret iretd iretw ja jae jb jbe jc jcxz
+syn keyword fasmInstr je jecxz jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge
+syn keyword fasmInstr jnl jnle jno jnp jns jnz jo jp jpe jpo js jz lahf lar lddqu
+syn keyword fasmInstr ldmxcsr lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw
+syn keyword fasmInstr load loadall286 loadall386 lock lods lodsb lodsd lodsw loop
+syn keyword fasmInstr loopd loope looped loopew loopne loopned loopnew loopnz loopnzd
+syn keyword fasmInstr loopnzw loopw loopz loopzd loopzw lsl lss ltr maskmovdqu maskmovq
+syn keyword fasmInstr maxpd maxps maxsd maxss mfence minpd minps minsd minss monitor
+syn keyword fasmInstr mov movapd movaps movd movddup movdq2q movdqa movdqu movhlps
+syn keyword fasmInstr movhpd movhps movlhps movlpd movlps movmskpd movmskps movntdq
+syn keyword fasmInstr movnti movntpd movntps movntq movq movq2dq movs movsb movsd
+syn keyword fasmInstr movshdup movsldup movss movsw movsx movupd movups movzx mul
+syn keyword fasmInstr mulpd mulps mulsd mulss mwait neg nop not or org orpd orps
+syn keyword fasmInstr out outs outsb outsd outsw packssdw packsswb packuswb paddb
+syn keyword fasmInstr paddd paddq paddsb paddsw paddusb paddusw paddw pand pandn
+syn keyword fasmInstr pause pavgb pavgusb pavgw pcmpeqb pcmpeqd pcmpeqw pcmpgtb
+syn keyword fasmInstr pcmpgtd pcmpgtw pextrw pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge
+syn keyword fasmInstr pfcmpgt pfmax pfmin pfmul pfnacc pfpnacc pfrcp pfrcpit1 pfrcpit2
+syn keyword fasmInstr pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pi2fw pinsrw pmaddwd pmaxsw
+syn keyword fasmInstr pmaxub pminsw pminub pmovmskb pmulhrw pmulhuw pmulhw pmullw
+syn keyword fasmInstr pmuludq pop popa popad popaw popd popf popfd popfw popw por
+syn keyword fasmInstr prefetch prefetchnta prefetcht0 prefetcht1 prefetcht2 prefetchw
+syn keyword fasmInstr psadbw pshufd pshufhw pshuflw pshufw pslld pslldq psllq psllw
+syn keyword fasmInstr psrad psraw psrld psrldq psrlq psrlw psubb psubd psubq psubsb
+syn keyword fasmInstr psubsw psubusb psubusw psubw pswapd punpckhbw punpckhdq punpckhqdq
+syn keyword fasmInstr punpckhwd punpcklbw punpckldq punpcklqdq punpcklwd push pusha
+syn keyword fasmInstr pushad pushaw pushd pushf pushfd pushfw pushw pxor rcl rcpps
+syn keyword fasmInstr rcpss rcr rdmsr rdpmc rdtsc rep repe repne repnz repz ret
+syn keyword fasmInstr retd retf retfd retfw retn retnd retnw retw rol ror rsm rsqrtps
+syn keyword fasmInstr rsqrtss sahf sal salc sar sbb scas scasb scasd scasw seta
+syn keyword fasmInstr setae setalc setb setbe setc sete setg setge setl setle setna
+syn keyword fasmInstr setnae setnb setnbe setnc setne setng setnge setnl setnle
+syn keyword fasmInstr setno setnp setns setnz seto setp setpe setpo sets setz sfence
+syn keyword fasmInstr sgdt shl shld shr shrd shufpd shufps sidt sldt smsw sqrtpd
+syn keyword fasmInstr sqrtps sqrtsd sqrtss stc std sti stmxcsr store stos stosb
+syn keyword fasmInstr stosd stosw str sub subpd subps subsd subss sysenter sysexit
+syn keyword fasmInstr test ucomisd ucomiss ud2 unpckhpd unpckhps unpcklpd unpcklps
+syn keyword fasmInstr verr verw wait wbinvd wrmsr xadd xchg xlat xlatb xor xorpd
+syn keyword fasmPreprocess common equ fix forward include local macro purge restore
+syn keyword fasmPreprocess reverse struc
+syn keyword fasmDirective align binary code coff console discardable display dll
+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 fasmOperator as at defined eq eqtype from mod on ptr rva used
+
+syn match fasmNumericOperator "[+-/*]"
+syn match fasmLogicalOperator "[=|&~<>]\|<=\|>=\|<>"
+" numbers
+syn match fasmBinaryNumber "\<[01]\+b\>"
+syn match fasmHexNumber "\<\d\x*h\>"
+syn match fasmHexNumber "\<\(0x\|$\)\x*\>"
+syn match fasmFPUNumber "\<\d\+\(\.\d*\)\=\(e[-+]\=\d*\)\=\>"
+syn match fasmOctalNumber "\<\(0\o\+o\=\|\o\+o\)\>"
+syn match fasmDecimalNumber "\<\(0\|[1-9]\d*\)\>"
+syn region fasmComment start=";" end="$"
+syn region fasmString start="\"" end="\"\|$"
+syn region fasmString start="'" end="'\|$"
+syn match fasmSymbol "[()|\[\]:]"
+syn match fasmSpecial "[#?%$,]"
+syn match fasmLabel "^\s*[^; \t]\+:"
+
+hi def link fasmAddressSizes type
+hi def link fasmNumericOperator fasmOperator
+hi def link fasmLogicalOperator fasmOperator
+
+hi def link fasmBinaryNumber fasmNumber
+hi def link fasmHexNumber fasmNumber
+hi def link fasmFPUNumber fasmNumber
+hi def link fasmOctalNumber fasmNumber
+hi def link fasmDecimalNumber fasmNumber
+
+hi def link fasmSymbols fasmRegister
+hi def link fasmPreprocess fasmDirective
+
+" link to standard syn groups so the 'colorschemes' work:
+hi def link fasmOperator operator
+hi def link fasmComment comment
+hi def link fasmDirective preproc
+hi def link fasmRegister type
+hi def link fasmNumber constant
+hi def link fasmSymbol structure
+hi def link fasmString String
+hi def link fasmSpecial special
+hi def link fasmInstr keyword
+hi def link fasmLabel label
+hi def link fasmPrefix preproc
+let b:current_syntax = "fasm"
+" vim: ts=8 sw=8 :
diff --git a/runtime/syntax/fdcc.vim b/runtime/syntax/fdcc.vim
new file mode 100644
index 000000000..38717ebfb
--- /dev/null
+++ b/runtime/syntax/fdcc.vim
@@ -0,0 +1,114 @@
+" Vim syntax file
+" Language: fdcc or locale files
+" Maintainer: Dwayne Bailey <dwayne@translate.org.za>
+" Last Change: 2004 May 16
+" Remarks: FDCC (Formal Definitions of Cultural Conventions) see ISO TR 14652
+
+" 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 sync minlines=150
+setlocal iskeyword+=-
+
+" Numbers
+syn match fdccNumber /[0-9]*/ contained
+
+" Unicode codings and strings
+syn match fdccUnicodeInValid /<[^<]*>/ contained
+syn match fdccUnicodeValid /<U[0-9A-F][0-9A-F][0-9A-F][0-9A-F]>/ contained
+syn region fdccString start=/"/ end=/"/ contains=fdccUnicodeInValid,fdccUnicodeValid
+
+" Valid LC_ Keywords
+syn keyword fdccKeyword escape_char comment_char
+syn keyword fdccKeywordIdentification title source address contact email tel fax language territory revision date category
+syn keyword fdccKeywordCtype copy space translit_start include translit_end outdigit class
+syn keyword fdccKeywordCollate copy script order_start order_end collating-symbol reorder-after reorder-end collating-element symbol-equivalence
+syn keyword fdccKeywordMonetary copy int_curr_symbol currency_symbol mon_decimal_point mon_thousands_sep mon_grouping positive_sign negative_sign int_frac_digits frac_digits p_cs_precedes p_sep_by_space n_cs_precedes n_sep_by_space p_sign_posn n_sign_posn int_p_cs_precedes int_p_sep_by_space int_n_cs_precedes int_n_sep_by_space int_p_sign_posn int_n_sign_posn
+syn keyword fdccKeywordNumeric copy decimal_point thousands_sep grouping
+syn keyword fdccKeywordTime copy abday day abmon mon d_t_fmt d_fmt t_fmt am_pm t_fmt_ampm date_fmt era_d_fmt first_weekday first_workday week cal_direction time_zone era alt_digits era_d_t_fmt
+syn keyword fdccKeywordMessages copy yesexpr noexpr yesstr nostr
+syn keyword fdccKeywordPaper copy height width
+syn keyword fdccKeywordTelephone copy tel_int_fmt int_prefix tel_dom_fmt int_select
+syn keyword fdccKeywordMeasurement copy measurement
+syn keyword fdccKeywordName copy name_fmt name_gen name_mr name_mrs name_miss name_ms
+syn keyword fdccKeywordAddress copy postal_fmt country_name country_post country_ab2 country_ab3 country_num country_car country_isbn lang_name lang_ab lang_term lang_lib
+
+" Comments
+syn keyword fdccTodo TODO FIXME contained
+syn match fdccVariable /%[a-zA-Z]/ contained
+syn match fdccComment /[#%].*/ contains=fdccTodo,fdccVariable
+
+" LC_ Groups
+syn region fdccBlank matchgroup=fdccLCIdentification start=/^LC_IDENTIFICATION$/ end=/^END LC_IDENTIFICATION$/ contains=fdccKeywordIdentification,fdccString,fdccComment
+syn region fdccBlank matchgroup=fdccLCCtype start=/^LC_CTYPE$/ end=/^END LC_CTYPE$/ contains=fdccKeywordCtype,fdccString,fdccComment,fdccUnicodeInValid,fdccUnicodeValid
+syn region fdccBlank matchgroup=fdccLCCollate start=/^LC_COLLATE$/ end=/^END LC_COLLATE$/ contains=fdccKeywordCollate,fdccString,fdccComment,fdccUnicodeInValid,fdccUnicodeValid
+syn region fdccBlank matchgroup=fdccLCMonetary start=/^LC_MONETARY$/ end=/^END LC_MONETARY$/ contains=fdccKeywordMonetary,fdccString,fdccComment,fdccNumber
+syn region fdccBlank matchgroup=fdccLCNumeric start=/^LC_NUMERIC$/ end=/^END LC_NUMERIC$/ contains=fdccKeywordNumeric,fdccString,fdccComment,fdccNumber
+syn region fdccBlank matchgroup=fdccLCTime start=/^LC_TIME$/ end=/^END LC_TIME$/ contains=fdccKeywordTime,fdccString,fdccComment,fdccNumber
+syn region fdccBlank matchgroup=fdccLCMessages start=/^LC_MESSAGES$/ end=/^END LC_MESSAGES$/ contains=fdccKeywordMessages,fdccString,fdccComment
+syn region fdccBlank matchgroup=fdccLCPaper start=/^LC_PAPER$/ end=/^END LC_PAPER$/ contains=fdccKeywordPaper,fdccString,fdccComment,fdccNumber
+syn region fdccBlank matchgroup=fdccLCTelephone start=/^LC_TELEPHONE$/ end=/^END LC_TELEPHONE$/ contains=fdccKeywordTelephone,fdccString,fdccComment
+syn region fdccBlank matchgroup=fdccLCMeasurement start=/^LC_MEASUREMENT$/ end=/^END LC_MEASUREMENT$/ contains=fdccKeywordMeasurement,fdccString,fdccComment,fdccNumber
+syn region fdccBlank matchgroup=fdccLCName start=/^LC_NAME$/ end=/^END LC_NAME$/ contains=fdccKeywordName,fdccString,fdccComment
+syn region fdccBlank matchgroup=fdccLCAddress start=/^LC_ADDRESS$/ end=/^END LC_ADDRESS$/ contains=fdccKeywordAddress,fdccString,fdccComment,fdccNumber
+
+
+" 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_fdcc_syn_inits")
+ if version < 508
+ let did_fdcc_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink fdccBlank Blank
+
+ HiLink fdccTodo Todo
+ HiLink fdccComment Comment
+ HiLink fdccVariable Type
+
+ HiLink fdccLCIdentification Statement
+ HiLink fdccLCCtype Statement
+ HiLink fdccLCCollate Statement
+ HiLink fdccLCMonetary Statement
+ HiLink fdccLCNumeric Statement
+ HiLink fdccLCTime Statement
+ HiLink fdccLCMessages Statement
+ HiLink fdccLCPaper Statement
+ HiLink fdccLCTelephone Statement
+ HiLink fdccLCMeasurement Statement
+ HiLink fdccLCName Statement
+ HiLink fdccLCAddress Statement
+
+ HiLink fdccUnicodeInValid Error
+ HiLink fdccUnicodeValid String
+ HiLink fdccString String
+ HiLink fdccNumber Blank
+
+ HiLink fdccKeywordIdentification fdccKeyword
+ HiLink fdccKeywordCtype fdccKeyword
+ HiLink fdccKeywordCollate fdccKeyword
+ HiLink fdccKeywordMonetary fdccKeyword
+ HiLink fdccKeywordNumeric fdccKeyword
+ HiLink fdccKeywordTime fdccKeyword
+ HiLink fdccKeywordMessages fdccKeyword
+ HiLink fdccKeywordPaper fdccKeyword
+ HiLink fdccKeywordTelephone fdccKeyword
+ HiLink fdccKeywordMeasurement fdccKeyword
+ HiLink fdccKeywordName fdccKeyword
+ HiLink fdccKeywordAddress fdccKeyword
+ HiLink fdccKeyword Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fdcc"
+
+" vim: ts=8
diff --git a/runtime/syntax/fetchmail.vim b/runtime/syntax/fetchmail.vim
new file mode 100644
index 000000000..c586ee7c5
--- /dev/null
+++ b/runtime/syntax/fetchmail.vim
@@ -0,0 +1,88 @@
+" Vim syntax file
+" Language: fetchmail(1) RC File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/fetchmail/
+" Latest Revision: 2004-05-06
+" arch-tag: 59d8adac-6e59-45f6-88cb-f9ba1e009c1f
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" todo
+syn keyword fetchmailTodo contained FIXME TODO XXX NOTE
+
+" comments
+syn region fetchmailComment start="#" end="$" contains=fetchmailTodo
+
+" numbers
+syn match fetchmailNumber "\<\d\+\>"
+
+" strings
+syn region fetchmailString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=fetchmailStringEsc
+syn region fetchmailString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=fetchmailStringEsc
+
+" escape characters in strings
+syn match fetchmailStringEsc "\\\([ntb]\|0\d*\|x\x\+\)"
+
+" server entries
+syn region fetchmailKeyword transparent matchgroup=fetchmailKeyword start="\<poll\|skip\|defaults\>" end="\<poll\|skip\|defaults\>" contains=ALLBUT,fetchmailOptions,fetchmailSet
+
+" server options
+syn keyword fetchmailServerOpts contained via proto[col] local[domains] port auth[enticate]
+syn keyword fetchmailServerOpts contained timeout envelope qvirtual aka interface monitor
+syn keyword fetchmailServerOpts contained plugin plugout dns checkalias uidl interval netsec
+syn keyword fetchmailServerOpts contained principal esmtpname esmtppassword
+syn match fetchmailServerOpts contained "\<no\_s\+\(envelope\|dns\|checkalias\|uidl\)"
+
+" user options
+syn keyword fetchmailUserOpts contained user[name] is to pass[word] ssl sslcert sslkey sslproto folder
+syn keyword fetchmailUserOpts contained smtphost fetchdomains smtpaddress smtpname antispam mda bsmtp
+syn keyword fetchmailUserOpts contained preconnect postconnect keep flush fetchall rewrite stripcr
+syn keyword fetchmailUserOpts contained forcecr pass8bits dropstatus dropdelivered mimedecode idle
+syn keyword fetchmailUserOpts contained limit warnings batchlimit fetchlimit expunge tracepolls properties
+syn match fetchmailUserOpts contained "\<no\_s\+\(keep\|flush\|fetchall\|rewrite\|stripcr\|forcecr\|pass8bits\|dropstatus\|dropdelivered\|mimedecode\|noidle\)"
+
+syn keyword fetchmailSpecial contained here there
+
+
+" noise keywords
+syn keyword fetchmailNoise and with has wants options
+syn match fetchmailNoise "[:;,]"
+
+" options
+syn keyword fetchmailSet nextgroup=fetchmailOptions skipwhite skipnl set
+
+syn keyword fetchmailOptions daemon postmaster bouncemail spambounce logfile idfile syslog nosyslog properties
+syn match fetchmailOptions "\<no\_s\+\(bouncemail\|spambounce\)"
+
+" 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_fetchmail_syn_inits")
+ if version < 508
+ let did_fetchmail_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink fetchmailComment Comment
+ HiLink fetchmailTodo Todo
+ HiLink fetchmailNumber Number
+ HiLink fetchmailString String
+ HiLink fetchmailStringEsc SpecialChar
+ HiLink fetchmailKeyword Keyword
+ HiLink fetchmailServerOpts Identifier
+ HiLink fetchmailUserOpts Identifier
+ HiLink fetchmailSpecial Special
+ HiLink fetchmailSet Keyword
+ HiLink fetchmailOptions Identifier
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fetchmail"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/fgl.vim b/runtime/syntax/fgl.vim
new file mode 100644
index 000000000..1b2fe19a8
--- /dev/null
+++ b/runtime/syntax/fgl.vim
@@ -0,0 +1,147 @@
+" Vim syntax file
+" Language: Informix 4GL
+" Maintainer: Rafal M. Sulejman <rms@poczta.onet.pl>
+" Update: 26 Sep 2002
+" Changes:
+" - Dynamic 4GL/FourJs/4GL 7.30 pseudo comment directives (Julian Bridle)
+" - Conditionally allow case insensitive keywords (Julian Bridle)
+"
+
+" 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
+
+if exists("fgl_ignore_case")
+ syntax case ignore
+else
+ syntax case match
+endif
+syn keyword fglKeyword ABORT ABS ABSOLUTE ACCEPT ACCESS ACOS ADD AFTER ALL
+syn keyword fglKeyword ALLOCATE ALTER AND ANSI ANY APPEND ARG_VAL ARRAY ARR_COUNT
+syn keyword fglKeyword ARR_CURR AS ASC ASCENDING ASCII ASIN AT ATAN ATAN2 ATTACH
+syn keyword fglKeyword ATTRIBUTE ATTRIBUTES AUDIT AUTHORIZATION AUTO AUTONEXT AVERAGE AVG
+syn keyword fglKeyword BEFORE BEGIN BETWEEN BLACK BLINK BLUE BOLD BORDER BOTH BOTTOM
+syn keyword fglKeyword BREAK BUFFERED BY BYTE
+syn keyword fglKeyword CALL CASCADE CASE CHAR CHARACTER CHARACTER_LENGTH CHAR_LENGTH
+syn keyword fglKeyword CHECK CLASS_ORIGIN CLEAR CLIPPED CLOSE CLUSTER COLOR
+syn keyword fglKeyword COLUMN COLUMNS COMMAND COMMENT COMMENTS COMMIT COMMITTED
+syn keyword fglKeyword COMPOSITES COMPRESS CONCURRENT CONNECT CONNECTION
+syn keyword fglKeyword CONNECTION_ALIAS CONSTRAINED CONSTRAINT CONSTRAINTS CONSTRUCT
+syn keyword fglKeyword CONTINUE CONTROL COS COUNT CREATE CURRENT CURSOR CYAN
+syn keyword fglKeyword DATA DATABASE DATASKIP DATE DATETIME DAY DBA DBINFO DBSERVERNAME
+syn keyword fglKeyword DEALLOCATE DEBUG DEC DECIMAL DECLARE DEFAULT DEFAULTS DEFER
+syn keyword fglKeyword DEFERRED DEFINE DELETE DELIMITER DELIMITERS DESC DESCENDING
+syn keyword fglKeyword DESCRIBE DESCRIPTOR DETACH DIAGNOSTICS DIM DIRTY DISABLED
+syn keyword fglKeyword DISCONNECT DISPLAY DISTINCT DISTRIBUTIONS DO DORMANT DOUBLE
+syn keyword fglKeyword DOWN DOWNSHIFT DROP
+syn keyword fglKeyword EACH ELIF ELSE ENABLED END ENTRY ERROR ERRORLOG ERR_GET
+syn keyword fglKeyword ERR_PRINT ERR_QUIT ESC ESCAPE EVERY EXCEPTION EXCLUSIVE
+syn keyword fglKeyword EXEC EXECUTE EXISTS EXIT EXP EXPLAIN EXPRESSION EXTEND EXTENT
+syn keyword fglKeyword EXTERN EXTERNAL
+syn keyword fglKeyword F1 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F2 F20 F21 F22 F23
+syn keyword fglKeyword F24 F25 F26 F27 F28 F29 F3 F30 F31 F32 F33 F34 F35 F36 F37 F38
+syn keyword fglKeyword F39 F4 F40 F41 F42 F43 F44 F45 F46 F47 F48 F49 F5 F50 F51 F52
+syn keyword fglKeyword F53 F54 F55 F56 F57 F58 F59 F6 F60 F61 F62 F63 F64 F7 F8 F9
+syn keyword fglKeyword FALSE FETCH FGL_GETENV FGL_KEYVAL FGL_LASTKEY FIELD FIELD_TOUCHED
+syn keyword fglKeyword FILE FILLFACTOR FILTERING FINISH FIRST FLOAT FLUSH FOR
+syn keyword fglKeyword FOREACH FOREIGN FORM FORMAT FORMONLY FORTRAN FOUND FRACTION
+syn keyword fglKeyword FRAGMENT FREE FROM FUNCTION GET_FLDBUF GLOBAL GLOBALS GO GOTO
+syn keyword fglKeyword GRANT GREEN GROUP HAVING HEADER HELP HEX HIDE HIGH HOLD HOUR
+syn keyword fglKeyword IDATA IF ILENGTH IMMEDIATE IN INCLUDE INDEX INDEXES INDICATOR
+syn keyword fglKeyword INFIELD INIT INITIALIZE INPUT INSERT INSTRUCTIONS INT INTEGER
+syn keyword fglKeyword INTERRUPT INTERVAL INTO INT_FLAG INVISIBLE IS ISAM ISOLATION
+syn keyword fglKeyword ITYPE
+syn keyword fglKeyword KEY LABEL
+syn keyword fglKeyword LANGUAGE LAST LEADING LEFT LENGTH LET LIKE LINE
+syn keyword fglKeyword LINENO LINES LOAD LOCATE LOCK LOG LOG10 LOGN LONG LOW
+syn keyword fglKeyword MAGENTA MAIN MARGIN MATCHES MAX MDY MEDIUM MEMORY MENU MESSAGE
+syn keyword fglKeyword MESSAGE_LENGTH MESSAGE_TEXT MIN MINUTE MOD MODE MODIFY MODULE
+syn keyword fglKeyword MONEY MONTH MORE
+syn keyword fglKeyword NAME NCHAR NEED NEW NEXT NEXTPAGE NO NOCR NOENTRY NONE NORMAL
+syn keyword fglKeyword NOT NOTFOUND NULL NULLABLE NUMBER NUMERIC NUM_ARGS NVARCHAR
+syn keyword fglKeyword OCTET_LENGTH OF OFF OLD ON ONLY OPEN OPTIMIZATION OPTION OPTIONS
+syn keyword fglKeyword OR ORDER OTHERWISE OUTER OUTPUT
+syn keyword fglKeyword PAGE PAGENO PAUSE PDQPRIORITY PERCENT PICTURE PIPE POW PRECISION
+syn keyword fglKeyword PREPARE PREVIOUS PREVPAGE PRIMARY PRINT PRINTER PRIOR PRIVATE
+syn keyword fglKeyword PRIVILEGES PROCEDURE PROGRAM PROMPT PUBLIC PUT
+syn keyword fglKeyword QUIT QUIT_FLAG
+syn keyword fglKeyword RAISE RANGE READ READONLY REAL RECORD RECOVER RED REFERENCES
+syn keyword fglKeyword REFERENCING REGISTER RELATIVE REMAINDER REMOVE RENAME REOPTIMIZATION
+syn keyword fglKeyword REPEATABLE REPORT REQUIRED RESOLUTION RESOURCE RESTRICT
+syn keyword fglKeyword RESUME RETURN RETURNED_SQLSTATE RETURNING REVERSE REVOKE RIGHT
+syn keyword fglKeyword ROBIN ROLE ROLLBACK ROLLFORWARD ROOT ROUND ROW ROWID ROWIDS
+syn keyword fglKeyword ROWS ROW_COUNT RUN
+syn keyword fglKeyword SCALE SCHEMA SCREEN SCROLL SCR_LINE SECOND SECTION SELECT
+syn keyword fglKeyword SERIAL SERIALIZABLE SERVER_NAME SESSION SET SET_COUNT SHARE
+syn keyword fglKeyword SHORT SHOW SITENAME SIZE SIZEOF SKIP SLEEP SMALLFLOAT SMALLINT
+syn keyword fglKeyword SOME SPACE SPACES SQL SQLAWARN SQLCA SQLCODE SQLERRD SQLERRM
+syn keyword fglKeyword SQLERROR SQLERRP SQLSTATE SQLWARNING SQRT STABILITY START
+syn keyword fglKeyword STARTLOG STATIC STATISTICS STATUS STDEV STEP STOP STRING STRUCT
+syn keyword fglKeyword SUBCLASS_ORIGIN SUM SWITCH SYNONYM SYSTEM
+syn keyword fglKeyword SysBlobs SysChecks SysColAuth SysColDepend SysColumns
+syn keyword fglKeyword SysConstraints SysDefaults SysDepend SysDistrib SysFragAuth
+syn keyword fglKeyword SysFragments SysIndexes SysObjState SysOpClstr SysProcAuth
+syn keyword fglKeyword SysProcBody SysProcPlan SysProcedures SysReferences SysRoleAuth
+syn keyword fglKeyword SysSynTable SysSynonyms SysTabAuth SysTables SysTrigBody
+syn keyword fglKeyword SysTriggers SysUsers SysViews SysViolations
+syn keyword fglKeyword TAB TABLE TABLES TAN TEMP TEXT THEN THROUGH THRU TIME TO
+syn keyword fglKeyword TODAY TOP TOTAL TRACE TRAILER TRAILING TRANSACTION TRIGGER
+syn keyword fglKeyword TRIGGERS TRIM TRUE TRUNC TYPE TYPEDEF
+syn keyword fglKeyword UNCOMMITTED UNCONSTRAINED UNDERLINE UNION UNIQUE UNITS UNLOAD
+syn keyword fglKeyword UNLOCK UNSIGNED UP UPDATE UPSHIFT USER USING
+syn keyword fglKeyword VALIDATE VALUE VALUES VARCHAR VARIABLES VARIANCE VARYING
+syn keyword fglKeyword VERIFY VIEW VIOLATIONS
+syn keyword fglKeyword WAIT WAITING WARNING WEEKDAY WHEN WHENEVER WHERE WHILE WHITE
+syn keyword fglKeyword WINDOW WITH WITHOUT WORDWRAP WORK WRAP WRITE
+syn keyword fglKeyword YEAR YELLOW
+syn keyword fglKeyword ZEROFILL
+
+" Strings and characters:
+syn region fglString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region fglString start=+'+ skip=+\\\\\|\\"+ end=+'+
+
+" Numbers:
+syn match fglNumber "-\=\<[0-9]*\.\=[0-9_]\>"
+
+" Comments:
+syn region fglComment start="{" end="}"
+syn match fglComment "--.*"
+syn match fglComment "#.*"
+
+" Not a comment even though it looks like one (Dynamic 4GL/FourJs directive)
+syn match fglSpecial "--#"
+syn match fglSpecial "--@"
+
+syn sync ccomment fglComment
+
+" 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_fgl_syntax_inits")
+ if version < 508
+ let did_fgl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink fglComment Comment
+ "HiLink fglKeyword fglSpecial
+ HiLink fglKeyword fglStatement
+ HiLink fglNumber Number
+ HiLink fglOperator fglStatement
+ HiLink fglSpecial Special
+ HiLink fglStatement Statement
+ HiLink fglString String
+ HiLink fglType Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fgl"
+
+" vim: ts=8
diff --git a/runtime/syntax/focexec.vim b/runtime/syntax/focexec.vim
new file mode 100644
index 000000000..884c37ebf
--- /dev/null
+++ b/runtime/syntax/focexec.vim
@@ -0,0 +1,101 @@
+" Vim syntax file
+" Language: Focus Executable
+" Maintainer: Rob Brady <robb@datatone.com>
+" Last Change: $Date$
+" URL: http://www.datatone.com/~robb/vim/syntax/focexec.vim
+" $Revision$
+
+" this is a very simple syntax file - I will be improving it
+" one thing is how to do computes
+" I don't like that &vars and FUSE() functions highlight to the same color
+" I think some of these things should get different hilights -
+" should MODIFY commands look different than TABLE?
+
+" 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 match
+
+" A bunch of useful keywords
+syn keyword focexecTable TABLE SUM BY ACROSS END PRINT HOLD LIST NOPRINT
+syn keyword focexecTable SUBFOOT SUBHEAD HEADING FOOTING PAGE-BREAK AS
+syn keyword focexecTable WHERE AND OR NOSPLIT FORMAT
+syn keyword focexecModify MODIFY DATA ON FIXFORM PROMPT MATCH COMPUTE
+syn keyword focexecModify GOTO CASE ENDCASE TYPE NOMATCH REJECT INCLUDE
+syn keyword focexecModify CONTINUE FROM
+syn keyword focexecNormal CHECK FILE CREATE EX SET IF FILEDEF DEFINE
+syn keyword focexecNormal REBUILD IF RECORDLIMIT FI EQ JOIN
+syn keyword focexecJoin IN TO
+syn keyword focexecFileDef DISK
+syn keyword focexecSet MSG ALL
+syn match focexecDash "-RUN"
+syn match focexecDash "-PROMPT"
+syn match focexecDash "-WINFORM"
+
+" String and Character constants
+syn region focexecString1 start=+"+ end=+"+
+syn region focexecString2 start=+'+ end=+'+
+
+"amper variables
+syn match focexecAmperVar "&&\=[A-Z_]\+"
+
+"fuse functions
+syn keyword focexecFuse GETUSER GETUSR WHOAMI FEXERR ASIS GETTOK UPCASE LOCASE
+syn keyword focexecFuse SUBSTR TODAY TODAYI POSIT HHMMSS BYTVAL EDAUT1 BITVAL
+syn keyword focexecFuse BITSON FGETENV FPUTENV HEXBYT SPAWN YM YMI JULDAT
+syn keyword focexecFuse JULDATI DOWK DOWKI DOWKLI CHGDAT CHGDATI FTOA ATODBL
+syn keyword focexecFuse SOUNDEX RJUST REVERSE PARAG OVRLAY LJUST CTRFLD CTRAN
+syn keyword focexecFuse CHKFMT ARGLEN GREGDT GREGDTI DTYMD DTYMDI DTDMY DTDMYI
+syn keyword focexecFuse DTYDM DTYDMI DTMYD DTMYDI DTDYM DTDYMI DAYMD DAYMDI
+syn keyword focexecFuse DAMDY DAMDYI DADMY DADMYI AYM AYMI AYMD AYMDI CHKPCK
+syn keyword focexecFuse IMOD FMOD DMOD PCKOUT EXP BAR SPELLNM SPELLNUM RTCIVP
+syn keyword focexecFuse PRDUNI PRDNOR RDNORM RDUNIF LCWORD ITOZ RLPHLD IBIPRO
+syn keyword focexecFuse IBIPRW IBIPRC IBIPRU IBIRCP PTHDAT ITOPACK ITONUM
+syn keyword focexecFuse DSMEXEC DSMEVAL DSMERRC MSMEXEC MSMEVAL MSMERRC EXTDXI
+syn keyword focexecFuse BAANHASH EDAYSI DTOG GTOD HSETPT HPART HTIME HNAME
+syn keyword focexecFuse HADD HDIFF HDATE HGETC HCNVRT HDTTM HMIDNT TEMPPATH
+syn keyword focexecFuse DATEADD DATEDIF DATEMOV DATECVT EURHLD EURXCH FINDFOC
+syn keyword focexecFuse FERRMES CNCTUSR CURRPATH USERPATH SYSTEM ASKYN
+syn keyword focexecFuse FUSEMENU POPEDIT POPFILE
+
+syn match focexecNumber "\<\d\+\>"
+syn match focexecNumber "\<\d\+\.\d*\>"
+
+syn match focexecComment "-\*.*"
+
+" 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_focexec_syntax_inits")
+ if version < 508
+ let did_focexec_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink focexecString1 String
+ HiLink focexecString2 String
+ HiLink focexecNumber Number
+ HiLink focexecComment Comment
+ HiLink focexecTable Keyword
+ HiLink focexecModify Keyword
+ HiLink focexecNormal Keyword
+ HiLink focexecSet Keyword
+ HiLink focexecDash Keyword
+ HiLink focexecFileDef Keyword
+ HiLink focexecJoin Keyword
+ HiLink focexecAmperVar Identifier
+ HiLink focexecFuse Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "focexec"
+
+" vim: ts=8
diff --git a/runtime/syntax/form.vim b/runtime/syntax/form.vim
new file mode 100644
index 000000000..726bf4756
--- /dev/null
+++ b/runtime/syntax/form.vim
@@ -0,0 +1,101 @@
+" Vim syntax file
+" Language: FORM
+" Maintainer: Michael M. Tung <michael.tung@uni-mainz.de>
+" Last Change: 2001 May 10
+
+" First public release based on 'Symbolic Manipulation with FORM'
+" by J.A.M. Vermaseren, CAN, Netherlands, 1991.
+" This syntax file is still in development. Please send suggestions
+" to the maintainer.
+
+" 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
+
+" A bunch of useful FORM keywords
+syn keyword formType global local
+syn keyword formHeaderStatement symbol symbols cfunction cfunctions
+syn keyword formHeaderStatement function functions vector vectors
+syn keyword formHeaderStatement set sets index indices
+syn keyword formHeaderStatement dimension dimensions unittrace
+syn keyword formStatement id identify drop skip
+syn keyword formStatement write nwrite
+syn keyword formStatement format print nprint load save
+syn keyword formStatement bracket brackets
+syn keyword formStatement multiply count match only discard
+syn keyword formStatement trace4 traceN contract symmetrize antisymmetrize
+syn keyword formConditional if else endif while
+syn keyword formConditional repeat endrepeat label goto
+
+" some special functions
+syn keyword formStatement g_ gi_ g5_ g6_ g7_ 5_ 6_ 7_
+syn keyword formStatement e_ d_ delta_ theta_ sum_ sump_
+
+" pattern matching for keywords
+syn match formComment "^\ *\*.*$"
+syn match formComment "\;\ *\*.*$"
+syn region formString start=+"+ end=+"+
+syn region formString start=+'+ end=+'+
+syn match formPreProc "^\=\#[a-zA-z][a-zA-Z0-9]*\>"
+syn match formNumber "\<\d\+\>"
+syn match formNumber "\<\d\+\.\d*\>"
+syn match formNumber "\.\d\+\>"
+syn match formNumber "-\d" contains=Number
+syn match formNumber "-\.\d" contains=Number
+syn match formNumber "i_\+\>"
+syn match formNumber "fac_\+\>"
+syn match formDirective "^\=\.[a-zA-z][a-zA-Z0-9]*\>"
+
+" hi User Labels
+syn sync ccomment formComment minlines=10
+
+" 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_form_syn_inits")
+ if version < 508
+ let did_form_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink formConditional Conditional
+ HiLink formNumber Number
+ HiLink formStatement Statement
+ HiLink formComment Comment
+ HiLink formPreProc PreProc
+ HiLink formDirective PreProc
+ HiLink formType Type
+ HiLink formString String
+
+ if !exists("form_enhanced_color")
+ HiLink formHeaderStatement Statement
+ else
+ " enhanced color mode
+ HiLink formHeaderStatement HeaderStatement
+ " dark and a light background for local types
+ if &background == "dark"
+ hi HeaderStatement term=underline ctermfg=LightGreen guifg=LightGreen gui=bold
+ else
+ hi HeaderStatement term=underline ctermfg=DarkGreen guifg=SeaGreen gui=bold
+ endif
+ " change slightly the default for dark gvim
+ if has("gui_running") && &background == "dark"
+ hi Conditional guifg=LightBlue gui=bold
+ hi Statement guifg=LightYellow
+ endif
+ endif
+
+ delcommand HiLink
+endif
+
+ let b:current_syntax = "form"
+
+" vim: ts=8
diff --git a/runtime/syntax/forth.vim b/runtime/syntax/forth.vim
new file mode 100644
index 000000000..6e737d319
--- /dev/null
+++ b/runtime/syntax/forth.vim
@@ -0,0 +1,235 @@
+" Vim syntax file
+" Language: FORTH
+" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de>
+" Last Change: Son 22 Jun 2003 20:42:55 CEST
+" Filenames: *.fs,*.ft
+" URL: http://www.cvjb.de/comp/vim/forth.vim
+
+" $Id$
+
+" The list of keywords is incomplete, compared with the offical ANS
+" wordlist. If you use this language, please improve it, and send me
+" the patches.
+
+" Many Thanks to...
+"
+" 2003-05-10:
+" Andrew Gaul <andrew at gaul.org> send me a patch for
+" forthOperators.
+"
+" 2003-04-03:
+" Ron Aaron <ron at ronware.org> made updates for an
+" improved Win32Forth support.
+"
+" 2002-04-22:
+" Charles Shattuck <charley at forth.org> helped me to settle up with the
+" binary and hex number highlighting.
+"
+" 2002-04-20:
+" Charles Shattuck <charley at forth.org> send me some code for correctly
+" highlighting char and [char] followed by an opening paren. He also added
+" some words for operators, conditionals, and definitions; and added the
+" highlighting for s" and c".
+"
+" 2000-03-28:
+" John Providenza <john at probo.com> made improvements for the
+" highlighting of strings, and added the code for highlighting hex numbers.
+"
+
+
+" 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
+
+" Synchronization method
+syn sync ccomment maxlines=200
+
+" I use gforth, so I set this to case ignore
+syn case ignore
+
+" Some special, non-FORTH keywords
+syn keyword forthTodo contained TODO FIXME XXX
+syn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\='
+
+" Characters allowed in keywords
+" I don't know if 128-255 are allowed in ANS-FORHT
+if version >= 600
+ setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
+else
+ set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
+endif
+
+
+" Keywords
+
+" basic mathematical and logical operators
+syn keyword forthOperators + - * / MOD /MOD NEGATE ABS MIN MAX
+syn keyword forthOperators AND OR XOR NOT INVERT 2* 2/ 1+ 1- 2+ 2- 8*
+syn keyword forthOperators M+ */ */MOD M* UM* M*/ UM/MOD FM/MOD SM/REM
+syn keyword forthOperators D+ D- DNEGATE DABS DMIN DMAX
+syn keyword forthOperators F+ F- F* F/ FNEGATE FABS FMAX FMIN FLOOR FROUND
+syn keyword forthOperators F** FSQRT FEXP FEXPM1 FLN FLNP1 FLOG FALOG FSIN
+syn keyword forthOperators FCOS FSINCOS FTAN FASIN FACOS FATAN FATAN2 FSINH
+syn keyword forthOperators FCOSH FTANH FASINH FACOSH FATANH
+syn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >=
+syn keyword forthOperators ?NEGATE ?DNEGATE
+
+" stack manipulations
+syn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL
+syn keyword forthStack 2DROP 2NIP 2DUP 2OVER 2TUCK 2SWAP 2ROT
+syn keyword forthStack 3DUP 4DUP
+syn keyword forthRStack >R R> R@ RDROP 2>R 2R> 2R@ 2RDROP
+syn keyword forthFStack FDROP FNIP FDUP FOVER FTUCK FSWAP FROT
+
+" stack pointer manipulations
+syn keyword forthSP SP@ SP! FP@ FP! RP@ RP! LP@ LP!
+
+" address operations
+syn keyword forthMemory @ ! +! C@ C! 2@ 2! F@ F! SF@ SF! DF@ DF!
+syn keyword forthAdrArith CHARS CHAR+ CELLS CELL+ CELL ALIGN ALIGNED FLOATS
+syn keyword forthAdrArith FLOAT+ FLOAT FALIGN FALIGNED SFLOATS SFLOAT+
+syn keyword forthAdrArith SFALIGN SFALIGNED DFLOATS DFLOAT+ DFALIGN DFALIGNED
+syn keyword forthAdrArith MAXALIGN MAXALIGNED CFALIGN CFALIGNED
+syn keyword forthAdrArith ADDRESS-UNIT-BITS ALLOT ALLOCATE HERE
+syn keyword forthMemBlks MOVE ERASE CMOVE CMOVE> FILL BLANK
+
+" conditionals
+syn keyword forthCond IF ELSE ENDIF THEN CASE OF ENDOF ENDCASE ?DUP-IF
+syn keyword forthCond ?DUP-0=-IF AHEAD CS-PICK CS-ROLL CATCH THROW WITHIN
+
+" iterations
+syn keyword forthLoop BEGIN WHILE REPEAT UNTIL AGAIN
+syn keyword forthLoop ?DO LOOP I J K +DO U+DO -DO U-DO DO +LOOP -LOOP
+syn keyword forthLoop UNLOOP LEAVE ?LEAVE EXIT DONE FOR NEXT
+
+" new words
+syn match forthColonDef '\<:m\?\s*[^ \t]\+\>'
+syn keyword forthEndOfColonDef ; ;M ;m
+syn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE CREATE
+syn keyword forthDefine USER VALUE TO DEFER IS DOES> IMMEDIATE COMPILE-ONLY
+syn keyword forthDefine COMPILE RESTRICT INTERPRET POSTPONE EXECUTE LITERAL
+syn keyword forthDefine CREATE-INTERPRET/COMPILE INTERPRETATION> <INTERPRETATION
+syn keyword forthDefine COMPILATION> <COMPILATION ] LASTXT COMP' POSTPONE,
+syn keyword forthDefine FIND-NAME NAME>INT NAME?INT NAME>COMP NAME>STRING STATE
+syn keyword forthDefine C; CVARIABLE
+syn match forthDefine "\[COMP']"
+syn match forthDefine "'"
+syn match forthDefine '\<\[\>'
+syn match forthDefine "\[']"
+syn match forthDefine '\[COMPILE]'
+syn match forthClassDef '\<:class\s*[^ \t]\+\>'
+syn match forthObjectDef '\<:object\s*[^ \t]\+\>'
+syn keyword forthEndOfClassDef ';class'
+syn keyword forthEndOfObjectDef ';object'
+
+" debugging
+syn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE
+syn match forthDebug "\<\~\~\>"
+
+" Assembler
+syn keyword forthAssembler ASSEMBLER CODE END-CODE ;CODE FLUSH-ICACHE C,
+
+" basic character operations
+syn keyword forthCharOps (.) CHAR EXPECT FIND WORD TYPE -TRAILING EMIT KEY
+syn keyword forthCharOps KEY? TIB CR
+" recognize 'char (' or '[char] (' correctly, so it doesn't
+" highlight everything after the paren as a comment till a closing ')'
+syn match forthCharOps '\<char\s\S\s'
+syn match forthCharOps '\<\[char\]\s\S\s'
+syn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+
+
+" char-number conversion
+syn keyword forthConversion <# # #> #S (NUMBER) (NUMBER?) CONVERT D>F D>S DIGIT
+syn keyword forthConversion DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER
+
+" interptreter, wordbook, compiler
+syn keyword forthForth (LOCAL) BYE COLD ABORT >BODY >NEXT >LINK CFA >VIEW HERE
+syn keyword forthForth PAD WORDS VIEW VIEW> N>LINK NAME> LINK> L>NAME FORGET
+syn keyword forthForth BODY>
+syn region forthForth start=+ABORT"\s+ skip=+\\"+ end=+"+
+
+" vocabularies
+syn keyword forthVocs ONLY FORTH ALSO ROOT SEAL VOCS ORDER CONTEXT #VOCS
+syn keyword forthVocs VOCABULARY DEFINITIONS
+
+" numbers
+syn keyword forthMath DECIMAL HEX BASE
+syn match forthInteger '\<-\=[0-9.]*[0-9.]\+\>'
+" recognize hex and binary numbers, the '$' and '%' notation is for gforth
+syn match forthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess
+syn match forthInteger '\<\x*\d\x*\>' " *2* --- this order!
+syn match forthInteger '\<%[0-1]*[0-1]\+\>'
+syn match forthFloat '\<-\=\d*[.]\=\d\+[Ee]\d\+\>'
+
+" Strings
+syn region forthString start=+\.*\"+ end=+"+ end=+$+
+" XXX
+syn region forthString start=+s\"+ end=+"+ end=+$+
+syn region forthString start=+c\"+ end=+"+ end=+$+
+
+" Comments
+syn match forthComment '\\\s.*$' contains=forthTodo
+syn region forthComment start='\\S\s' end='.*' contains=forthTodo
+syn match forthComment '\.(\s[^)]*)' contains=forthTodo
+syn region forthComment start='(\s' skip='\\)' end=')' contains=forthTodo
+syn region forthComment start='/\*' end='\*/' contains=forthTodo
+"syn match forthComment '(\s[^\-]*\-\-[^\-]*)' contains=forthTodo
+
+" Include files
+syn match forthInclude '^INCLUDE\s\+\k\+'
+syn match forthInclude '^fload\s\+'
+syn match forthInclude '^needs\s\+'
+
+" 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_forth_syn_inits")
+ if version < 508
+ let did_forth_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default methods for highlighting. Can be overriden later.
+ HiLink forthTodo Todo
+ HiLink forthOperators Operator
+ HiLink forthMath Number
+ HiLink forthInteger Number
+ HiLink forthFloat Float
+ HiLink forthStack Special
+ HiLink forthRstack Special
+ HiLink forthFStack Special
+ HiLink forthSP Special
+ HiLink forthMemory Function
+ HiLink forthAdrArith Function
+ HiLink forthMemBlks Function
+ HiLink forthCond Conditional
+ HiLink forthLoop Repeat
+ HiLink forthColonDef Define
+ HiLink forthEndOfColonDef Define
+ HiLink forthDefine Define
+ HiLink forthDebug Debug
+ HiLink forthAssembler Include
+ HiLink forthCharOps Character
+ HiLink forthConversion String
+ HiLink forthForth Statement
+ HiLink forthVocs Statement
+ HiLink forthString String
+ HiLink forthComment Comment
+ HiLink forthClassDef Define
+ HiLink forthEndOfClassDef Define
+ HiLink forthObjectDef Define
+ HiLink forthEndOfObjectDef Define
+ HiLink forthInclude Include
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "forth"
+
+" vim:ts=8:sw=4:nocindent:smartindent:
diff --git a/runtime/syntax/fortran.vim b/runtime/syntax/fortran.vim
new file mode 100644
index 000000000..ae1fa8b19
--- /dev/null
+++ b/runtime/syntax/fortran.vim
@@ -0,0 +1,526 @@
+" Vim syntax file
+" Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
+" Version: 0.86
+" URL: http://www.unb.ca/chem/ajit/syntax/fortran.vim
+" Last Change: 2003 Mar. 12
+" Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+" Usage: Do :help fortran-syntax from Vim
+" Credits:
+" Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and
+" Preben Guldberg. Useful suggestions were made by: Andrej Panjkov,
+" Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
+" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
+" and Andrew Griffiths. For instructions on use, do :help fortran from vim
+
+" 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")
+ 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
+
+" 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
+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
+ 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
+ let b:fortran_fixed_source = 0
+ elseif exists("fortran_fixed_source")
+ " User guarantees fixed source form for all f90 and f95 files
+ let b:fortran_fixed_source = 1
+ else
+ " f90 and f95 allow 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 b:lmax lines.
+ " Detection becomes more accurate and time-consuming if more lines
+ " are checked. Increase the limit below if you keep lots of comments at
+ " the very top of each file and you have a fast computer.
+ let b:lmax = 25
+ if ( b:lmax > line("$") )
+ let b:lmax = line("$")
+ endif
+ let b:fortran_fixed_source = 1
+ let b:ln=1
+ while b:ln <= b:lmax
+ let b:test = strpart(getline(b:ln),0,5)
+ if b:test[0] !~ '[Cc*!#]' && b:test !~ '^ \+[!#]' && b:test =~ '[^ 0-9\t]'
+ let b:fortran_fixed_source = 0
+ break
+ endif
+ let b:ln = b:ln + 1
+ endwhile
+ unlet b:lmax b:ln b:test
+ endif
+endif
+
+syn case ignore
+
+if b:fortran_dialect == "f77"
+ syn match fortranIdentifier "\<\a\(\a\|\d\)*\>" contains=fortranSerialNumber
+else
+ syn match fortran90Identifier "\<\a\w*\>" contains=fortranSerialNumber
+ 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
+endif
+
+syn match fortranUnitHeader "\<end\>"
+
+syn keyword fortranType character complex integer
+syn keyword fortranType intrinsic
+syn match fortranType "\<implicit\>"
+syn keyword fortranStructure dimension
+syn keyword fortranStorageClass parameter save
+syn match fortranUnitHeader "\<subroutine\>"
+syn keyword fortranCall call
+syn match fortranUnitHeader "\<function\>"
+syn match fortranUnitHeader "\<program\>"
+syn keyword fortranStatement return stop
+syn keyword fortranConditional else then
+syn match fortranConditional "\<if\>"
+syn match fortranRepeat "\<do\>"
+
+syn keyword fortranTodo contained todo fixme
+
+"Catch errors caused by too many right parentheses
+syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded
+syn match fortranParenError ")"
+
+syn match fortranOperator "\.\s*n\=eqv\s*\."
+syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
+syn match fortranOperator "\(+\|-\|/\|\*\)"
+
+syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
+
+syn keyword fortranReadWrite backspace close inquire open rewind endfile
+syn keyword fortranReadWrite read write print
+
+"If tabs are allowed then the left margin checks do not work
+if exists("fortran_have_tabs")
+ syn match fortranTab "\t" transparent
+else
+ syn match fortranTab "\t"
+endif
+
+syn keyword fortranIO unit file iostat access blank fmt form
+syn keyword fortranIO recl status exist opened number named name
+syn keyword fortranIO sequential direct rec
+syn keyword fortranIO formatted unformatted nextrec
+
+syn keyword fortran66Intrinsic cabs ccos cexp clog csin csqrt
+syn keyword fortran66Intrinsic dacos dasin datan datan2 dcos dcosh
+syn keyword fortran66Intrinsic ddim dexp dint dlog dlog10 dmod dabs
+syn keyword fortran66Intrinsic dnint dsign dsin dsinh dsqrt dtan
+syn keyword fortran66Intrinsic dtanh iabs idim idnint isign idint ifix
+syn keyword fortran66Intrinsic amax0 amax1 dmax1 max0 max1
+syn keyword fortran66Intrinsic amin0 amin1 dmin1 min0 min1
+syn keyword fortran66Intrinsic amod float sngl alog alog10
+
+" Intrinsics provided by some vendors
+syn keyword fortranExtraIntrinsic cdabs cdcos cdexp cdlog cdsin cdsqrt
+syn keyword fortranExtraIntrinsic cqabs cqcos cqexp cqlog cqsin cqsqrt
+syn keyword fortranExtraIntrinsic qacos qasin qatan qatan2 qcos qcosh
+syn keyword fortranExtraIntrinsic qdim qexp iqint qlog qlog10 qmod qabs
+syn keyword fortranExtraIntrinsic qnint qsign qsin qsinh qsqrt qtan
+syn keyword fortranExtraIntrinsic qtanh qmax1 qmin1
+syn keyword fortranExtraIntrinsic dimag qimag dcmplx qcmplx dconjg qconjg
+syn keyword fortranExtraIntrinsic gamma dgamma qgamma algama dlgama qlgama
+syn keyword fortranExtraIntrinsic erf derf qerf erfc derfc qerfc
+syn keyword fortranExtraIntrinsic dfloat
+
+syn keyword fortran77Intrinsic abs acos aimag aint anint asin atan atan2
+syn keyword fortran77Intrinsic cos sin tan sinh cosh tanh exp log log10
+syn keyword fortran77Intrinsic sign sqrt int cmplx nint min max conjg
+syn keyword fortran77Intrinsic char ichar index
+syn match fortran77Intrinsic "\<len\s*[(,]"me=s+3
+syn match fortran77Intrinsic "\<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 fortranType "\<implicit\s\+logical"
+syn match fortranType "^\s*logical\>"
+
+"Numbers of various sorts
+" Integers
+syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
+" floating point number, without a decimal point
+syn match fortranFloatNoDec display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+" floating point number, starting with a decimal point
+syn match fortranFloatIniDec display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number, no digits after decimal
+syn match fortranFloatEndDec display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number, D or Q exponents
+syn match fortranFloatDExp display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number
+syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" Numbers in formats
+syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
+syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
+syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
+syn match fortranFormatSpec display "\d\+x\>"
+" The next match cannot be used because it would pick up identifiers as well
+" syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
+
+" Numbers as labels
+syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
+syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
+syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
+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")
+ " 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 keyword fortranStatementEx continue
+syn match fortranStatementEx "\<go\s*to\>"
+syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod
+syn keyword fortranStatementOb assign pause to
+
+if b:fortran_dialect != "f77"
+
+ syn keyword fortranType type 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 fortranStatement 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
+ syn keyword fortran90Intrinsic associated bit_size btest ceiling
+ syn keyword fortran90Intrinsic count cshift date_and_time
+ syn keyword fortran90Intrinsic digits dot_product eoshift epsilon exponent
+ syn keyword fortran90Intrinsic floor fraction huge iand ibclr ibits ibset ieor
+ syn keyword fortran90Intrinsic ior ishft ishftc lbound len_trim
+ syn keyword fortran90Intrinsic matmul maxexponent maxloc maxval merge
+ syn keyword fortran90Intrinsic minexponent minloc minval modulo mvbits nearest
+ syn keyword fortran90Intrinsic pack present product radix random_number
+ syn match fortran90Intrinsic "\<not\>\(\s*\.\)\@!"me=s+3
+ syn keyword fortran90Intrinsic random_seed range repeat reshape rrspacing scale
+ syn keyword fortran90Intrinsic selected_int_kind selected_real_kind scan
+ syn keyword fortran90Intrinsic shape size spacing spread set_exponent
+ syn keyword fortran90Intrinsic tiny transpose trim ubound unpack verify
+ syn keyword fortran90Intrinsic precision sum system_clock
+ 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 keyword fortranInclude include
+ syn keyword fortran90StorageClassR sequence
+endif
+
+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 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"
+ 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
+endif
+
+syn cluster fortranCommentGroup contains=fortranTodo
+
+if (b:fortran_fixed_source == 1)
+ if !exists("fortran_have_tabs")
+ "Flag items beyond column 72
+ syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
+ "Flag left margin errors
+ syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
+ syn match fortranLabelError "^.\{4}\d\S"
+ endif
+ syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup
+ syn match fortranLeftMargin transparent "^ \{5}"
+ syn match fortranContinueMark display "^.\{5}\S"lc=5
+else
+ syn match fortranContinueMark display "&"
+endif
+
+if b:fortran_dialect != "f77"
+ syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup
+endif
+
+"cpp is often used with Fortran
+syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
+syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
+syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
+syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
+syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+syn match cIncluded contained "<[^>]*>"
+syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
+
+"Synchronising limits assume that comment and continuation lines are not mixed
+if (b:fortran_fixed_source == 0)
+ syn sync linecont "&" maxlines=40
+else
+ syn sync minlines=20
+endif
+
+if version >= 600 && exists("fortran_fold")
+
+ syn sync fromstart
+ 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
+ syn region fortranModule transparent fold keepend start="^\s*module\s\+\(procedure\)\@!\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
+ syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*function\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
+ syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
+ syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
+ syn region fortranInterface transparent fold keepend extend start="^\s*interface\>" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
+ else
+ syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
+ syn region fortranModule transparent fold keepend start="^\s*module\s\+\(procedure\)\@!\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
+ syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*function\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
+ syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
+ syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
+ syn region fortranInterface transparent fold keepend extend start="^\s*interface\>" skip="^\s*[!#].*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
+ endif
+
+ if exists("fortran_fold_conditionals")
+ if (b:fortran_fixed_source == 1)
+ syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ else
+ syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\s*[!#].*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
+ endif
+ endif
+
+ if exists("fortran_fold_multilinecomments")
+ if (b:fortran_fixed_source == 1)
+ syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
+ else
+ syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
+ endif
+ endif
+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 fortranStatement Statement
+ HiLink fortranConstructName Special
+ HiLink fortranConditional Conditional
+ HiLink fortranRepeat Repeat
+ HiLink fortranTodo Todo
+ HiLink fortranContinueMark Todo
+ HiLink fortranString String
+ HiLink fortranNumber Number
+ HiLink fortranOperator Operator
+ HiLink fortranBoolean Boolean
+ HiLink fortranLabelError Error
+ HiLink fortranObsolete Todo
+ HiLink fortranType Type
+ HiLink fortranStructure Type
+ HiLink fortranStorageClass StorageClass
+ HiLink fortranCall fortranUnitHeader
+ HiLink fortranUnitHeader fortranPreCondit
+ HiLink fortranReadWrite fortran90Intrinsic
+ HiLink fortranIO fortran90Intrinsic
+ HiLink fortran95Intrinsic fortran90Intrinsic
+ HiLink fortran77Intrinsic fortran90Intrinsic
+ HiLink fortran90Intrinsic Special
+
+ if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
+ HiLink fortranStatementOb 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 fortranStatementOb Statement
+ 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 fortranStatementEx 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 fortranStatementEx fortranStatement
+ HiLink fortranStringEx fortranString
+ HiLink fortran77IntrinsicEx fortran90Intrinsic
+ HiLink fortranUnitHeaderEx fortranUnitHeader
+ HiLink fortranConditionalEx fortranConditional
+ HiLink fortran90IntrinsicEx fortran90Intrinsic
+ endif
+
+ HiLink fortranFloat Float
+ HiLink fortran90Identifier fortranIdentifier
+ "Uncomment the next line if you want all fortran variables to be highlighted
+ "HiLink fortranIdentifier Identifier
+ 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 Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fortran"
+
+" vim: ts=8 tw=132
diff --git a/runtime/syntax/foxpro.vim b/runtime/syntax/foxpro.vim
new file mode 100644
index 000000000..8fabd2325
--- /dev/null
+++ b/runtime/syntax/foxpro.vim
@@ -0,0 +1,692 @@
+" Vim syntax file
+" Language: FoxPro for DOS v2.x
+" Maintainer: Powing Tse <powing@hkem.com>
+" Last Change: 06 September 2001
+
+" 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
+
+syntax case ignore
+
+" Highlight special characters
+syn match foxproSpecial "^\s*!"
+syn match foxproSpecial "&"
+syn match foxproSpecial ";\s*$"
+syn match foxproSpecial "^\s*="
+syn match foxproSpecial "^\s*\\"
+syn match foxproSpecial "^\s*\\\\"
+syn match foxproSpecial "^\s*?"
+syn match foxproSpecial "^\s*??"
+syn match foxproSpecial "^\s*???"
+syn match foxproSpecial "\<m\>\."
+
+" @ Statements
+syn match foxproAtSymbol contained "^\s*@"
+syn match foxproAtCmd contained "\<say\>\|\<get\>\|\<edit\>\|\<box\>\|\<clea\%[r]\>\|\<fill\>\|\<menu\>\|\<prom\%[pt]\>\|\<scro\%[ll]\>\|\<to\>"
+syn match foxproAtStart transparent "^\s*@.*" contains=ALL
+
+" preprocessor directives
+syn match foxproPreProc "^\s*#\s*\(\<if\>\|\<elif\>\|\<else\>\|\<endi\%[f]\>\)"
+syn match foxproPreProc "^\s*#\s*\(\<defi\%[ne]\>\|\<unde\%[f]\>\)"
+syn match foxproPreProc "^\s*#\s*\<regi\%[on]\>"
+
+" Functions
+syn match foxproFunc "\<abs\>\s*("me=e-1
+syn match foxproFunc "\<acop\%[y]\>\s*("me=e-1
+syn match foxproFunc "\<acos\>\s*("me=e-1
+syn match foxproFunc "\<adel\>\s*("me=e-1
+syn match foxproFunc "\<adir\>\s*("me=e-1
+syn match foxproFunc "\<aele\%[ment]\>\s*("me=e-1
+syn match foxproFunc "\<afie\%[lds]\>\s*("me=e-1
+syn match foxproFunc "\<afon\%[t]\>\s*("me=e-1
+syn match foxproFunc "\<ains\>\s*("me=e-1
+syn match foxproFunc "\<alen\>\s*("me=e-1
+syn match foxproFunc "\<alia\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<allt\%[rim]\>\s*("me=e-1
+syn match foxproFunc "\<ansi\%[tooem]\>\s*("me=e-1
+syn match foxproFunc "\<asc\>\s*("me=e-1
+syn match foxproFunc "\<asca\%[n]\>\s*("me=e-1
+syn match foxproFunc "\<asin\>\s*("me=e-1
+syn match foxproFunc "\<asor\%[t]\>\s*("me=e-1
+syn match foxproFunc "\<asub\%[script]\>\s*("me=e-1
+syn match foxproFunc "\<at\>\s*("me=e-1
+syn match foxproFunc "\<atan\>\s*("me=e-1
+syn match foxproFunc "\<atc\>\s*("me=e-1
+syn match foxproFunc "\<atcl\%[ine]\>\s*("me=e-1
+syn match foxproFunc "\<atli\%[ne]\>\s*("me=e-1
+syn match foxproFunc "\<atn2\>\s*("me=e-1
+syn match foxproFunc "\<bar\>\s*("me=e-1
+syn match foxproFunc "\<barc\%[ount]\>\s*("me=e-1
+syn match foxproFunc "\<barp\%[rompt]\>\s*("me=e-1
+syn match foxproFunc "\<betw\%[een]\>\s*("me=e-1
+syn match foxproFunc "\<bof\>\s*("me=e-1
+syn match foxproFunc "\<caps\%[lock]\>\s*("me=e-1
+syn match foxproFunc "\<cdow\>\s*("me=e-1
+syn match foxproFunc "\<cdx\>\s*("me=e-1
+syn match foxproFunc "\<ceil\%[ing]\>\s*("me=e-1
+syn match foxproFunc "\<chr\>\s*("me=e-1
+syn match foxproFunc "\<chrs\%[aw]\>\s*("me=e-1
+syn match foxproFunc "\<chrt\%[ran]\>\s*("me=e-1
+syn match foxproFunc "\<cmon\%[th]\>\s*("me=e-1
+syn match foxproFunc "\<cntb\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<cntp\%[ad]\>\s*("me=e-1
+syn match foxproFunc "\<col\>\s*("me=e-1
+syn match foxproFunc "\<cos\>\s*("me=e-1
+syn match foxproFunc "\<cpco\%[nvert]\>\s*("me=e-1
+syn match foxproFunc "\<cpcu\%[rrent]\>\s*("me=e-1
+syn match foxproFunc "\<cpdb\%[f]\>\s*("me=e-1
+syn match foxproFunc "\<ctod\>\s*("me=e-1
+syn match foxproFunc "\<curd\%[ir]\>\s*("me=e-1
+syn match foxproFunc "\<date\>\s*("me=e-1
+syn match foxproFunc "\<day\>\s*("me=e-1
+syn match foxproFunc "\<dbf\>\s*("me=e-1
+syn match foxproFunc "\<ddea\%[borttrans]\>\s*("me=e-1
+syn match foxproFunc "\<ddea\%[dvise]\>\s*("me=e-1
+syn match foxproFunc "\<ddee\%[nabled]\>\s*("me=e-1
+syn match foxproFunc "\<ddee\%[xecute]\>\s*("me=e-1
+syn match foxproFunc "\<ddei\%[nitiate]\>\s*("me=e-1
+syn match foxproFunc "\<ddel\%[asterror]\>\s*("me=e-1
+syn match foxproFunc "\<ddep\%[oke]\>\s*("me=e-1
+syn match foxproFunc "\<dder\%[equest]\>\s*("me=e-1
+syn match foxproFunc "\<ddes\%[etoption]\>\s*("me=e-1
+syn match foxproFunc "\<ddes\%[etservice]\>\s*("me=e-1
+syn match foxproFunc "\<ddes\%[ettopic]\>\s*("me=e-1
+syn match foxproFunc "\<ddet\%[erminate]\>\s*("me=e-1
+syn match foxproFunc "\<dele\%[ted]\>\s*("me=e-1
+syn match foxproFunc "\<desc\%[ending]\>\s*("me=e-1
+syn match foxproFunc "\<diff\%[erence]\>\s*("me=e-1
+syn match foxproFunc "\<disk\%[space]\>\s*("me=e-1
+syn match foxproFunc "\<dmy\>\s*("me=e-1
+syn match foxproFunc "\<dow\>\s*("me=e-1
+syn match foxproFunc "\<dtoc\>\s*("me=e-1
+syn match foxproFunc "\<dtor\>\s*("me=e-1
+syn match foxproFunc "\<dtos\>\s*("me=e-1
+syn match foxproFunc "\<empt\%[y]\>\s*("me=e-1
+syn match foxproFunc "\<eof\>\s*("me=e-1
+syn match foxproFunc "\<erro\%[r]\>\s*("me=e-1
+syn match foxproFunc "\<eval\%[uate]\>\s*("me=e-1
+syn match foxproFunc "\<exp\>\s*("me=e-1
+syn match foxproFunc "\<fchs\%[ize]\>\s*("me=e-1
+syn match foxproFunc "\<fclo\%[se]\>\s*("me=e-1
+syn match foxproFunc "\<fcou\%[nt]\>\s*("me=e-1
+syn match foxproFunc "\<fcre\%[ate]\>\s*("me=e-1
+syn match foxproFunc "\<fdat\%[e]\>\s*("me=e-1
+syn match foxproFunc "\<feof\>\s*("me=e-1
+syn match foxproFunc "\<ferr\%[or]\>\s*("me=e-1
+syn match foxproFunc "\<fflu\%[sh]\>\s*("me=e-1
+syn match foxproFunc "\<fget\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<fiel\%[d]\>\s*("me=e-1
+syn match foxproFunc "\<file\>\s*("me=e-1
+syn match foxproFunc "\<filt\%[er]\>\s*("me=e-1
+syn match foxproFunc "\<fkla\%[bel]\>\s*("me=e-1
+syn match foxproFunc "\<fkma\%[x]\>\s*("me=e-1
+syn match foxproFunc "\<fldl\%[ist]\>\s*("me=e-1
+syn match foxproFunc "\<floc\%[k]\>\s*("me=e-1
+syn match foxproFunc "\<floo\%[r]\>\s*("me=e-1
+syn match foxproFunc "\<font\%[metric]\>\s*("me=e-1
+syn match foxproFunc "\<fope\%[n]\>\s*("me=e-1
+syn match foxproFunc "\<for\>\s*("me=e-1
+syn match foxproFunc "\<foun\%[d]\>\s*("me=e-1
+syn match foxproFunc "\<fput\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<frea\%[d]\>\s*("me=e-1
+syn match foxproFunc "\<fsee\%[k]\>\s*("me=e-1
+syn match foxproFunc "\<fsiz\%[e]\>\s*("me=e-1
+syn match foxproFunc "\<ftim\%[e]\>\s*("me=e-1
+syn match foxproFunc "\<full\%[path]\>\s*("me=e-1
+syn match foxproFunc "\<fv\>\s*("me=e-1
+syn match foxproFunc "\<fwri\%[te]\>\s*("me=e-1
+syn match foxproFunc "\<getb\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<getd\%[ir]\>\s*("me=e-1
+syn match foxproFunc "\<gete\%[nv]\>\s*("me=e-1
+syn match foxproFunc "\<getf\%[ile]\>\s*("me=e-1
+syn match foxproFunc "\<getf\%[ont]\>\s*("me=e-1
+syn match foxproFunc "\<getp\%[ad]\>\s*("me=e-1
+syn match foxproFunc "\<gomo\%[nth]\>\s*("me=e-1
+syn match foxproFunc "\<head\%[er]\>\s*("me=e-1
+syn match foxproFunc "\<home\>\s*("me=e-1
+syn match foxproFunc "\<idxc\%[ollate]\>\s*("me=e-1
+syn match foxproFunc "\<iif\>\s*("me=e-1
+syn match foxproFunc "\<inke\%[y]\>\s*("me=e-1
+syn match foxproFunc "\<inli\%[st]\>\s*("me=e-1
+syn match foxproFunc "\<insm\%[ode]\>\s*("me=e-1
+syn match foxproFunc "\<int\>\s*("me=e-1
+syn match foxproFunc "\<isal\%[pha]\>\s*("me=e-1
+syn match foxproFunc "\<isbl\%[ank]\>\s*("me=e-1
+syn match foxproFunc "\<isco\%[lor]\>\s*("me=e-1
+syn match foxproFunc "\<isdi\%[git]\>\s*("me=e-1
+syn match foxproFunc "\<islo\%[wer]\>\s*("me=e-1
+syn match foxproFunc "\<isre\%[adonly]\>\s*("me=e-1
+syn match foxproFunc "\<isup\%[per]\>\s*("me=e-1
+syn match foxproFunc "\<key\>\s*("me=e-1
+syn match foxproFunc "\<keym\%[atch]\>\s*("me=e-1
+syn match foxproFunc "\<last\%[key]\>\s*("me=e-1
+syn match foxproFunc "\<left\>\s*("me=e-1
+syn match foxproFunc "\<len\>\s*("me=e-1
+syn match foxproFunc "\<like\>\s*("me=e-1
+syn match foxproFunc "\<line\%[no]\>\s*("me=e-1
+syn match foxproFunc "\<locf\%[ile]\>\s*("me=e-1
+syn match foxproFunc "\<lock\>\s*("me=e-1
+syn match foxproFunc "\<log\>\s*("me=e-1
+syn match foxproFunc "\<log1\%[0]\>\s*("me=e-1
+syn match foxproFunc "\<look\%[up]\>\s*("me=e-1
+syn match foxproFunc "\<lowe\%[r]\>\s*("me=e-1
+syn match foxproFunc "\<ltri\%[m]\>\s*("me=e-1
+syn match foxproFunc "\<lupd\%[ate]\>\s*("me=e-1
+syn match foxproFunc "\<max\>\s*("me=e-1
+syn match foxproFunc "\<mcol\>\s*("me=e-1
+syn match foxproFunc "\<mdow\%[n]\>\s*("me=e-1
+syn match foxproFunc "\<mdx\>\s*("me=e-1
+syn match foxproFunc "\<mdy\>\s*("me=e-1
+syn match foxproFunc "\<meml\%[ines]\>\s*("me=e-1
+syn match foxproFunc "\<memo\%[ry]\>\s*("me=e-1
+syn match foxproFunc "\<menu\>\s*("me=e-1
+syn match foxproFunc "\<mess\%[age]\>\s*("me=e-1
+syn match foxproFunc "\<min\>\s*("me=e-1
+syn match foxproFunc "\<mlin\%[e]\>\s*("me=e-1
+syn match foxproFunc "\<mod\>\s*("me=e-1
+syn match foxproFunc "\<mont\%[h]\>\s*("me=e-1
+syn match foxproFunc "\<mrkb\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<mrkp\%[ad]\>\s*("me=e-1
+syn match foxproFunc "\<mrow\>\s*("me=e-1
+syn match foxproFunc "\<mwin\%[dow]\>\s*("me=e-1
+syn match foxproFunc "\<ndx\>\s*("me=e-1
+syn match foxproFunc "\<norm\%[alize]\>\s*("me=e-1
+syn match foxproFunc "\<numl\%[ock]\>\s*("me=e-1
+syn match foxproFunc "\<objn\%[um]\>\s*("me=e-1
+syn match foxproFunc "\<objv\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<occu\%[rs]\>\s*("me=e-1
+syn match foxproFunc "\<oemt\%[oansi]\>\s*("me=e-1
+syn match foxproFunc "\<on\>\s*("me=e-1
+syn match foxproFunc "\<orde\%[r]\>\s*("me=e-1
+syn match foxproFunc "\<os\>\s*("me=e-1
+syn match foxproFunc "\<pad\>\s*("me=e-1
+syn match foxproFunc "\<padc\>\s*("me=e-1
+syn match foxproFunc "\<padl\>\s*("me=e-1
+syn match foxproFunc "\<padr\>\s*("me=e-1
+syn match foxproFunc "\<para\%[meters]\>\s*("me=e-1
+syn match foxproFunc "\<paym\%[ent]\>\s*("me=e-1
+syn match foxproFunc "\<pcol\>\s*("me=e-1
+syn match foxproFunc "\<pi\>\s*("me=e-1
+syn match foxproFunc "\<popu\%[p]\>\s*("me=e-1
+syn match foxproFunc "\<prin\%[tstatus]\>\s*("me=e-1
+syn match foxproFunc "\<prmb\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<prmp\%[ad]\>\s*("me=e-1
+syn match foxproFunc "\<prog\%[ram]\>\s*("me=e-1
+syn match foxproFunc "\<prom\%[pt]\>\s*("me=e-1
+syn match foxproFunc "\<prop\%[er]\>\s*("me=e-1
+syn match foxproFunc "\<prow\>\s*("me=e-1
+syn match foxproFunc "\<prti\%[nfo]\>\s*("me=e-1
+syn match foxproFunc "\<putf\%[ile]\>\s*("me=e-1
+syn match foxproFunc "\<pv\>\s*("me=e-1
+syn match foxproFunc "\<rand\>\s*("me=e-1
+syn match foxproFunc "\<rat\>\s*("me=e-1
+syn match foxproFunc "\<ratl\%[ine]\>\s*("me=e-1
+syn match foxproFunc "\<rdle\%[vel]\>\s*("me=e-1
+syn match foxproFunc "\<read\%[key]\>\s*("me=e-1
+syn match foxproFunc "\<recc\%[ount]\>\s*("me=e-1
+syn match foxproFunc "\<recn\%[o]\>\s*("me=e-1
+syn match foxproFunc "\<recs\%[ize]\>\s*("me=e-1
+syn match foxproFunc "\<rela\%[tion]\>\s*("me=e-1
+syn match foxproFunc "\<repl\%[icate]\>\s*("me=e-1
+syn match foxproFunc "\<rgbs\%[cheme]\>\s*("me=e-1
+syn match foxproFunc "\<righ\%[t]\>\s*("me=e-1
+syn match foxproFunc "\<rloc\%[k]\>\s*("me=e-1
+syn match foxproFunc "\<roun\%[d]\>\s*("me=e-1
+syn match foxproFunc "\<row\>\s*("me=e-1
+syn match foxproFunc "\<rtod\>\s*("me=e-1
+syn match foxproFunc "\<rtri\%[m]\>\s*("me=e-1
+syn match foxproFunc "\<sche\%[me]\>\s*("me=e-1
+syn match foxproFunc "\<scol\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<seco\%[nds]\>\s*("me=e-1
+syn match foxproFunc "\<seek\>\s*("me=e-1
+syn match foxproFunc "\<sele\%[ct]\>\s*("me=e-1
+syn match foxproFunc "\<set\>\s*("me=e-1
+syn match foxproFunc "\<sign\>\s*("me=e-1
+syn match foxproFunc "\<sin\>\s*("me=e-1
+syn match foxproFunc "\<skpb\%[ar]\>\s*("me=e-1
+syn match foxproFunc "\<skpp\%[ad]\>\s*("me=e-1
+syn match foxproFunc "\<soun\%[dex]\>\s*("me=e-1
+syn match foxproFunc "\<spac\%[e]\>\s*("me=e-1
+syn match foxproFunc "\<sqrt\>\s*("me=e-1
+syn match foxproFunc "\<srow\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<str\>\s*("me=e-1
+syn match foxproFunc "\<strt\%[ran]\>\s*("me=e-1
+syn match foxproFunc "\<stuf\%[f]\>\s*("me=e-1
+syn match foxproFunc "\<subs\%[tr]\>\s*("me=e-1
+syn match foxproFunc "\<sysm\%[etric]\>\s*("me=e-1
+syn match foxproFunc "\<sys\>\s*("me=e-1
+syn match foxproFunc "\<tag\>\s*("me=e-1
+syn match foxproFunc "\<tagc\%[ount]\>\s*("me=e-1
+syn match foxproFunc "\<tagn\%[o]\>\s*("me=e-1
+syn match foxproFunc "\<tan\>\s*("me=e-1
+syn match foxproFunc "\<targ\%[et]\>\s*("me=e-1
+syn match foxproFunc "\<time\>\s*("me=e-1
+syn match foxproFunc "\<tran\%[sform]\>\s*("me=e-1
+syn match foxproFunc "\<trim\>\s*("me=e-1
+syn match foxproFunc "\<txtw\%[idth]\>\s*("me=e-1
+syn match foxproFunc "\<type\>\s*("me=e-1
+syn match foxproFunc "\<uniq\%[ue]\>\s*("me=e-1
+syn match foxproFunc "\<upda\%[ted]\>\s*("me=e-1
+syn match foxproFunc "\<uppe\%[r]\>\s*("me=e-1
+syn match foxproFunc "\<used\>\s*("me=e-1
+syn match foxproFunc "\<val\>\s*("me=e-1
+syn match foxproFunc "\<varr\%[ead]\>\s*("me=e-1
+syn match foxproFunc "\<vers\%[ion]\>\s*("me=e-1
+syn match foxproFunc "\<wbor\%[der]\>\s*("me=e-1
+syn match foxproFunc "\<wchi\%[ld]\>\s*("me=e-1
+syn match foxproFunc "\<wcol\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<wexi\%[st]\>\s*("me=e-1
+syn match foxproFunc "\<wfon\%[t]\>\s*("me=e-1
+syn match foxproFunc "\<wlas\%[t]\>\s*("me=e-1
+syn match foxproFunc "\<wlco\%[l]\>\s*("me=e-1
+syn match foxproFunc "\<wlro\%[w]\>\s*("me=e-1
+syn match foxproFunc "\<wmax\%[imum]\>\s*("me=e-1
+syn match foxproFunc "\<wmin\%[imum]\>\s*("me=e-1
+syn match foxproFunc "\<wont\%[op]\>\s*("me=e-1
+syn match foxproFunc "\<wout\%[put]\>\s*("me=e-1
+syn match foxproFunc "\<wpar\%[ent]\>\s*("me=e-1
+syn match foxproFunc "\<wrea\%[d]\>\s*("me=e-1
+syn match foxproFunc "\<wrow\%[s]\>\s*("me=e-1
+syn match foxproFunc "\<wtit\%[le]\>\s*("me=e-1
+syn match foxproFunc "\<wvis\%[ible]\>\s*("me=e-1
+syn match foxproFunc "\<year\>\s*("me=e-1
+
+" Commands
+syn match foxproCmd "^\s*\<acce\%[pt]\>"
+syn match foxproCmd "^\s*\<acti\%[vate]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<acti\%[vate]\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<acti\%[vate]\>\s*\<scre\%[en]\>"
+syn match foxproCmd "^\s*\<acti\%[vate]\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<appe\%[nd]\>"
+syn match foxproCmd "^\s*\<appe\%[nd]\>\s*\<from\>"
+syn match foxproCmd "^\s*\<appe\%[nd]\>\s*\<from\>\s*\<arra\%[y]\>"
+syn match foxproCmd "^\s*\<appe\%[nd]\>\s*\<gene\%[ral]\>"
+syn match foxproCmd "^\s*\<appe\%[nd]\>\s*\<memo\>"
+syn match foxproCmd "^\s*\<assi\%[st]\>"
+syn match foxproCmd "^\s*\<aver\%[age]\>"
+syn match foxproCmd "^\s*\<blan\%[k]\>"
+syn match foxproCmd "^\s*\<brow\%[se]\>"
+syn match foxproCmd "^\s*\<buil\%[d]\>\s*\<app\>"
+syn match foxproCmd "^\s*\<buil\%[d]\>\s*\<exe\>"
+syn match foxproCmd "^\s*\<buil\%[d]\>\s*\<proj\%[ect]\>"
+syn match foxproCmd "^\s*\<calc\%[ulate]\>"
+syn match foxproCmd "^\s*\<call\>"
+syn match foxproCmd "^\s*\<canc\%[el]\>"
+syn match foxproCmd "^\s*\<chan\%[ge]\>"
+syn match foxproCmd "^\s*\<clea\%[r]\>"
+syn match foxproCmd "^\s*\<clos\%[e]\>"
+syn match foxproCmd "^\s*\<clos\%[e]\>\s*\<memo\>"
+syn match foxproCmd "^\s*\<comp\%[ile]\>"
+syn match foxproCmd "^\s*\<cont\%[inue]\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<file\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<inde\%[xes]\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<memo\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<stru\%[cture]\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<stru\%[cture]\>\s*\<exte\%[nded]\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<tag\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<to\>"
+syn match foxproCmd "^\s*\<copy\>\s*\<to\>\s*\<arra\%[y]\>"
+syn match foxproCmd "^\s*\<coun\%[t]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<colo\%[r]\>\s*\<set\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<curs\%[or]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<from\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<labe\%[l]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<proj\%[ect]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<quer\%[y]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<repo\%[rt]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<scre\%[en]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<tabl\%[e]\>"
+syn match foxproCmd "^\s*\<crea\%[te]\>\s*\<view\>"
+syn match foxproCmd "^\s*\<dde\>"
+syn match foxproCmd "^\s*\<deac\%[tivate]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<deac\%[tivate]\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<deac\%[tivate]\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<decl\%[are]\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<bar\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<box\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<pad\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<defi\%[ne]\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<dele\%[te]\>"
+syn match foxproCmd "^\s*\<dele\%[te]\>\s*\<file\>"
+syn match foxproCmd "^\s*\<dele\%[te]\>\s*\<tag\>"
+syn match foxproCmd "^\s*\<dime\%[nsion]\>"
+syn match foxproCmd "^\s*\<dire\%[ctory]\>"
+syn match foxproCmd "^\s*\<disp\%[lay]\>"
+syn match foxproCmd "^\s*\<disp\%[lay]\>\s*\<file\%[s]\>"
+syn match foxproCmd "^\s*\<disp\%[lay]\>\s*\<memo\%[ry]\>"
+syn match foxproCmd "^\s*\<disp\%[lay]\>\s*\<stat\%[us]\>"
+syn match foxproCmd "^\s*\<disp\%[lay]\>\s*\<stru\%[cture]\>"
+syn match foxproCmd "^\s*\<do\>"
+syn match foxproCmd "^\s*\<edit\>"
+syn match foxproCmd "^\s*\<ejec\%[t]\>"
+syn match foxproCmd "^\s*\<ejec\%[t]\>\s*\<page\>"
+syn match foxproCmd "^\s*\<eras\%[e]\>"
+syn match foxproCmd "^\s*\<exit\>"
+syn match foxproCmd "^\s*\<expo\%[rt]\>"
+syn match foxproCmd "^\s*\<exte\%[rnal]\>"
+syn match foxproCmd "^\s*\<file\%[r]\>"
+syn match foxproCmd "^\s*\<find\>"
+syn match foxproCmd "^\s*\<flus\%[h]\>"
+syn match foxproCmd "^\s*\<func\%[tion]\>"
+syn match foxproCmd "^\s*\<gath\%[er]\>"
+syn match foxproCmd "^\s*\<gete\%[xpr]\>"
+syn match foxproCmd "^\s*\<go\>"
+syn match foxproCmd "^\s*\<goto\>"
+syn match foxproCmd "^\s*\<help\>"
+syn match foxproCmd "^\s*\<hide\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<hide\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<hide\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<impo\%[rt]\>"
+syn match foxproCmd "^\s*\<inde\%[x]\>"
+syn match foxproCmd "^\s*\<inpu\%[t]\>"
+syn match foxproCmd "^\s*\<inse\%[rt]\>"
+syn match foxproCmd "^\s*\<join\>"
+syn match foxproCmd "^\s*\<keyb\%[oard]\>"
+syn match foxproCmd "^\s*\<labe\%[l]\>"
+syn match foxproCmd "^\s*\<list\>"
+syn match foxproCmd "^\s*\<load\>"
+syn match foxproCmd "^\s*\<loca\%[te]\>"
+syn match foxproCmd "^\s*\<loop\>"
+syn match foxproCmd "^\s*\<menu\>"
+syn match foxproCmd "^\s*\<menu\>\s*\<to\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<comm\%[and]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<file\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<gene\%[ral]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<labe\%[l]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<memo\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<proj\%[ect]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<quer\%[y]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<repo\%[rt]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<scre\%[en]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<stru\%[cture]\>"
+syn match foxproCmd "^\s*\<modi\%[fy]\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<move\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<move\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<note\>"
+syn match foxproCmd "^\s*\<on\>\s*\<apla\%[bout]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<bar\>"
+syn match foxproCmd "^\s*\<on\>\s*\<erro\%[r]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<esca\%[pe]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<exit\>\s*\<bar\>"
+syn match foxproCmd "^\s*\<on\>\s*\<exit\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<on\>\s*\<exit\>\s*\<pad\>"
+syn match foxproCmd "^\s*\<on\>\s*\<exit\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<key\>"
+syn match foxproCmd "^\s*\<on\>\s*\<key\>\s*\<=\>"
+syn match foxproCmd "^\s*\<on\>\s*\<key\>\s*\<labe\%[l]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<mach\%[elp]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<pad\>"
+syn match foxproCmd "^\s*\<on\>\s*\<page\>"
+syn match foxproCmd "^\s*\<on\>\s*\<read\%[error]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<sele\%[ction]\>\s*\<bar\>"
+syn match foxproCmd "^\s*\<on\>\s*\<sele\%[ction]\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<on\>\s*\<sele\%[ction]\>\s*\<pad\>"
+syn match foxproCmd "^\s*\<on\>\s*\<sele\%[ction]\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<on\>\s*\<shut\%[down]\>"
+syn match foxproCmd "^\s*\<pack\>"
+syn match foxproCmd "^\s*\<para\%[meters]\>"
+syn match foxproCmd "^\s*\<play\>\s*\<macr\%[o]\>"
+syn match foxproCmd "^\s*\<pop\>\s*\<key\>"
+syn match foxproCmd "^\s*\<pop\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<pop\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<priv\%[ate]\>"
+syn match foxproCmd "^\s*\<proc\%[edure]\>"
+syn match foxproCmd "^\s*\<publ\%[ic]\>"
+syn match foxproCmd "^\s*\<push\>\s*\<key\>"
+syn match foxproCmd "^\s*\<push\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<push\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<quit\>"
+syn match foxproCmd "^\s*\<read\>"
+syn match foxproCmd "^\s*\<read\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<reca\%[ll]\>"
+syn match foxproCmd "^\s*\<rein\%[dex]\>"
+syn match foxproCmd "^\s*\<rele\%[ase]\>"
+syn match foxproCmd "^\s*\<rele\%[ase]\>\s*\<modu\%[le]\>"
+syn match foxproCmd "^\s*\<rena\%[me]\>"
+syn match foxproCmd "^\s*\<repl\%[ace]\>"
+syn match foxproCmd "^\s*\<repl\%[ace]\>\s*\<from\>\s*\<arra\%[y]\>"
+syn match foxproCmd "^\s*\<repo\%[rt]\>"
+syn match foxproCmd "^\s*\<rest\%[ore]\>\s*\<from\>"
+syn match foxproCmd "^\s*\<rest\%[ore]\>\s*\<macr\%[os]\>"
+syn match foxproCmd "^\s*\<rest\%[ore]\>\s*\<scre\%[en]\>"
+syn match foxproCmd "^\s*\<rest\%[ore]\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<resu\%[me]\>"
+syn match foxproCmd "^\s*\<retr\%[y]\>"
+syn match foxproCmd "^\s*\<retu\%[rn]\>"
+syn match foxproCmd "^\s*\<run\>"
+syn match foxproCmd "^\s*\<run\>\s*\/n"
+syn match foxproCmd "^\s*\<runs\%[cript]\>"
+syn match foxproCmd "^\s*\<save\>\s*\<macr\%[os]\>"
+syn match foxproCmd "^\s*\<save\>\s*\<scre\%[en]\>"
+syn match foxproCmd "^\s*\<save\>\s*\<to\>"
+syn match foxproCmd "^\s*\<save\>\s*\<wind\%[ows]\>"
+syn match foxproCmd "^\s*\<scat\%[ter]\>"
+syn match foxproCmd "^\s*\<scro\%[ll]\>"
+syn match foxproCmd "^\s*\<seek\>"
+syn match foxproCmd "^\s*\<sele\%[ct]\>"
+syn match foxproCmd "^\s*\<set\>"
+syn match foxproCmd "^\s*\<set\>\s*\<alte\%[rnate]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<ansi\>"
+syn match foxproCmd "^\s*\<set\>\s*\<apla\%[bout]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<auto\%[save]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<bell\>"
+syn match foxproCmd "^\s*\<set\>\s*\<blin\%[k]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<bloc\%[ksize]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<bord\%[er]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<brst\%[atus]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<carr\%[y]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<cent\%[ury]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<clea\%[r]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<cloc\%[k]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<coll\%[ate]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<colo\%[r]\>\s*\<of\>"
+syn match foxproCmd "^\s*\<set\>\s*\<colo\%[r]\>\s*\<of\>\s*\<sche\%[me]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<colo\%[r]\>\s*\<set\>"
+syn match foxproCmd "^\s*\<set\>\s*\<colo\%[r]\>\s*\<to\>"
+syn match foxproCmd "^\s*\<set\>\s*\<comp\%[atible]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<conf\%[irm]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<cons\%[ole]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<curr\%[ency]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<curs\%[or]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<date\>"
+syn match foxproCmd "^\s*\<set\>\s*\<debu\%[g]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<deci\%[mals]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<defa\%[ult]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<dele\%[ted]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<deli\%[miters]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<deve\%[lopment]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<devi\%[ce]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<disp\%[lay]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<dohi\%[story]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<echo\>"
+syn match foxproCmd "^\s*\<set\>\s*\<esca\%[pe]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<exac\%[t]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<excl\%[usive]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<fiel\%[ds]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<filt\%[er]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<fixe\%[d]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<form\%[at]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<full\%[path]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<func\%[tion]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<head\%[ings]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<help\>"
+syn match foxproCmd "^\s*\<set\>\s*\<help\%[filter]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<hour\%[s]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<inde\%[x]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<inte\%[nsity]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<key\>"
+syn match foxproCmd "^\s*\<set\>\s*\<keyc\%[omp]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<libr\%[ary]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<lock\>"
+syn match foxproCmd "^\s*\<set\>\s*\<loge\%[rrors]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<macd\%[esktop]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mach\%[elp]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mack\%[ey]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<marg\%[in]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mark\>\s*\<of\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mark\>\s*\<to\>"
+syn match foxproCmd "^\s*\<set\>\s*\<memo\%[width]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mess\%[age]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mous\%[e]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<mult\%[ilocks]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<near\>"
+syn match foxproCmd "^\s*\<set\>\s*\<nocp\%[trans]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<noti\%[fy]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<odom\%[eter]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<opti\%[mize]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<orde\%[r]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<pale\%[tte]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<path\>"
+syn match foxproCmd "^\s*\<set\>\s*\<pdse\%[tup]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<poin\%[t]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<prin\%[ter]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<proc\%[edure]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<read\%[border]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<refr\%[esh]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<rela\%[tion]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<rela\%[tion]\>\s*\<off\>"
+syn match foxproCmd "^\s*\<set\>\s*\<repr\%[ocess]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<reso\%[urce]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<safe\%[ty]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<scor\%[eboard]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<sepa\%[rator]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<shad\%[ows]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<skip\>"
+syn match foxproCmd "^\s*\<set\>\s*\<skip\>\s*\<of\>"
+syn match foxproCmd "^\s*\<set\>\s*\<spac\%[e]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<stat\%[us]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<stat\%[us]\>\s*\<bar\>"
+syn match foxproCmd "^\s*\<set\>\s*\<step\>"
+syn match foxproCmd "^\s*\<set\>\s*\<stic\%[ky]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<sysm\%[enu]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<talk\>"
+syn match foxproCmd "^\s*\<set\>\s*\<text\%[merge]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<text\%[merge]\>\s*\<deli\%[miters]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<topi\%[c]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<trbe\%[tween]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<type\%[ahead]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<udfp\%[arms]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<uniq\%[ue]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<view\>"
+syn match foxproCmd "^\s*\<set\>\s*\<volu\%[me]\>"
+syn match foxproCmd "^\s*\<set\>\s*\<wind\%[ow]\>\s*\<of\>\s*\<memo\>"
+syn match foxproCmd "^\s*\<set\>\s*\<xcmd\%[file]\>"
+syn match foxproCmd "^\s*\<show\>\s*\<get\>"
+syn match foxproCmd "^\s*\<show\>\s*\<gets\>"
+syn match foxproCmd "^\s*\<show\>\s*\<menu\>"
+syn match foxproCmd "^\s*\<show\>\s*\<obje\%[ct]\>"
+syn match foxproCmd "^\s*\<show\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<show\>\s*\<wind\%[ow]\>"
+syn match foxproCmd "^\s*\<size\>\s*\<popu\%[p]\>"
+syn match foxproCmd "^\s*\<skip\>"
+syn match foxproCmd "^\s*\<sort\>"
+syn match foxproCmd "^\s*\<stor\%[e]\>"
+syn match foxproCmd "^\s*\<sum\>"
+syn match foxproCmd "^\s*\<susp\%[end]\>"
+syn match foxproCmd "^\s*\<tota\%[l]\>"
+syn match foxproCmd "^\s*\<type\>"
+syn match foxproCmd "^\s*\<unlo\%[ck]\>"
+syn match foxproCmd "^\s*\<upda\%[te]\>"
+syn match foxproCmd "^\s*\<use\>"
+syn match foxproCmd "^\s*\<wait\>"
+syn match foxproCmd "^\s*\<zap\>"
+syn match foxproCmd "^\s*\<zoom\>\s*\<wind\%[ow]\>"
+
+" Enclosed Block
+syn match foxproEnBlk "^\s*\<do\>\s*\<case\>"
+syn match foxproEnBlk "^\s*\<case\>"
+syn match foxproEnBlk "^\s*\<othe\%[rwise]\>"
+syn match foxproEnBlk "^\s*\<endc\%[ase]\>"
+syn match foxproEnBlk "^\s*\<do\>\s*\<whil\%[e]\>"
+syn match foxproEnBlk "^\s*\<endd\%[o]\>"
+syn match foxproEnBlk "^\s*\<for\>"
+syn match foxproEnBlk "^\s*\<endf\%[or]\>"
+syn match foxproEnBlk "^\s*\<next\>"
+syn match foxproEnBlk "^\s*\<if\>"
+syn match foxproEnBlk "^\s*\<else\>"
+syn match foxproEnBlk "^\s*\<endi\%[f]\>"
+syn match foxproEnBlk "^\s*\<prin\%[tjob]\>"
+syn match foxproEnBlk "^\s*\<endp\%[rintjob]\>"
+syn match foxproEnBlk "^\s*\<scan\>"
+syn match foxproEnBlk "^\s*\<ends\%[can]\>"
+syn match foxproEnBlk "^\s*\<text\>"
+syn match foxproEnBlk "^\s*\<endt\%[ext]\>"
+
+" System Variables
+syn keyword foxproSysVar _alignment _assist _beautify _box _calcmem _calcvalue
+syn keyword foxproSysVar _cliptext _curobj _dblclick _diarydate _dos _foxdoc
+syn keyword foxproSysVar _foxgraph _gengraph _genmenu _genpd _genscrn _genxtab
+syn keyword foxproSysVar _indent _lmargin _mac _mline _padvance _pageno _pbpage
+syn keyword foxproSysVar _pcolno _pcopies _pdriver _pdsetup _pecode _peject _pepage
+syn keyword foxproSysVar _plength _plineno _ploffset _ppitch _pquality _pretext
+syn keyword foxproSysVar _pscode _pspacing _pwait _rmargin _shell _spellchk
+syn keyword foxproSysVar _startup _tabs _tally _text _throttle _transport _unix
+syn keyword foxproSysVar _windows _wrap
+
+" Strings
+syn region foxproString start=+"+ end=+"+ oneline
+syn region foxproString start=+'+ end=+'+ oneline
+syn region foxproString start=+\[+ end=+\]+ oneline
+
+" Constants
+syn match foxproConst "\.t\."
+syn match foxproConst "\.f\."
+
+"integer number, or floating point number without a dot and with "f".
+syn match foxproNumber "\<[0-9]\+\>"
+"floating point number, with dot, optional exponent
+syn match foxproFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match foxproFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
+"floating point number, without dot, with exponent
+syn match foxproFloat "\<[0-9]\+e[-+]\=[0-9]\+\>"
+
+syn match foxproComment "^\s*\*.*"
+syn match foxproComment "&&.*"
+
+"catch errors caused by wrong parenthesis
+syn region foxproParen transparent start='(' end=')' contains=ALLBUT,foxproParenErr
+syn match foxproParenErr ")"
+
+syn sync minlines=1 maxlines=3
+
+" 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_foxpro_syn_inits")
+ if version < 508
+ let did_foxpro_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink foxproSpecial Special
+ HiLink foxproAtSymbol Special
+ HiLink foxproAtCmd Statement
+ HiLink foxproPreProc PreProc
+ HiLink foxproFunc Identifier
+ HiLink foxproCmd Statement
+ HiLink foxproEnBlk Type
+ HiLink foxproSysVar String
+ HiLink foxproString String
+ HiLink foxproConst Constant
+ HiLink foxproNumber Number
+ HiLink foxproFloat Float
+ HiLink foxproComment Comment
+ HiLink foxproParenErr Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "foxpro"
diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim
new file mode 100644
index 000000000..c765f33b3
--- /dev/null
+++ b/runtime/syntax/fstab.vim
@@ -0,0 +1,208 @@
+" Vim syntax file
+" Language: fstab file
+" Maintaner: Radu Dineiu <littledragon@altern.org>
+" URL: http://ld.yi.org/vim/fstab.vim
+" ChangeLog: http://ld.yi.org/vim/fstab.ChangeLog
+" Last Change: 2003 Apr 30
+" Version: 0.61
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" General
+syn cluster fsGeneralCluster contains=fsComment
+syn match fsComment /\s*#.*/
+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
+syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
+syn match fsDeviceLabel contained /=[^ \t]\+/hs=s+1 contains=fsOperator
+
+" Mount Point
+syn cluster fsMountPointCluster contains=fsMountPointKeyword,fsMountPointError
+syn match fsMountPointError /\%([^ \ta-zA-Z0-9_\/#@]\|\s\+\zs\w\{-}\ze\s\)/ contained
+syn keyword fsMountPointKeyword contained none swap
+
+" Type
+syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeError
+syn match fsTypeError /\s\+\zs\w\+/ contained
+syn keyword fsTypeKeyword contained adfs affs auto autofs cd9660 coda cramfs devfs devpts efs ext2 ext3 fdesc hfs hpfs iso9660 kernfs linprocfs mfs minix msdos ncpfs nfs ntfs nwfs null portal proc procfs qnx4 reiserfs romfs smbfs std sysv swap tmpfs udf ufs umap umsdos union vfat xfs
+
+" Options
+" -------
+" Options: General
+syn cluster fsOptionsCluster contains=fsOperator,fsOptionsGeneral,fsOptionsKeywords,fsTypeError
+syn match fsOptionsNumber /\d\+/
+syn match fsOptionsNumberOctal /[0-8]\+/
+syn match fsOptionsString /[a-zA-Z0-9_-]\+/
+syn keyword fsOptionsYesNo yes no
+syn cluster fsOptionsCheckCluster contains=fsOptionsExt2Check,fsOptionsFatCheck
+syn keyword fsOptionsSize 512 1024 2048
+syn keyword fsOptionsGeneral async atime auto current defaults dev exec force fstab noatime noauto noclusterr noclusterw nodev noexec nosuid nosymfollow nouser owner ro rdonly rw rq sw xx suid suiddir sync kudzu union update user supermount
+syn match fsOptionsGeneral /_netdev/
+
+" Options: adfs
+syn match fsOptionsKeywords contained /\%([ug]id\|o\%(wn\|th\)mask\)=/ nextgroup=fsOptionsNumber
+
+" Options: affs
+syn match fsOptionsKeywords contained /\%(set[ug]id\|mode\|reserved\)=/ nextgroup=fsOptionsNumber
+syn match fsOptionsKeywords contained /\%(prefix\|volume\|root\)=/ nextgroup=fsOptionsString
+syn match fsOptionsKeywords contained /bs=/ nextgroup=fsOptionsSize
+syn keyword fsOptionsKeywords contained protect usemp verbose
+
+" Options: cd9660
+syn keyword fsOptionsKeywords contained extatt gens norrip nostrictjoilet
+
+" Options: devpts
+" -- everything already defined
+
+" Options: ext2
+syn match fsOptionsKeywords contained /check=*/ nextgroup=@fsOptionsCheckCluster
+syn match fsOptionsKeywords contained /errors=/ nextgroup=fsOptionsExt2Errors
+syn match fsOptionsKeywords contained /\%(res[gu]id\|sb\)=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsExt2Check contained none normal strict
+syn keyword fsOptionsExt2Errors contained continue panic
+syn match fsOptionsExt2Errors contained /remount-ro/
+syn keyword fsOptionsKeywords contained bsddf minixdf debug grpid bsdgroups nocheck nogrpid sysvgroups nouid32
+
+" Options: ext3
+syn match fsOptionsKeywords contained /journal=/ nextgroup=fsOptionsExt3Journal
+syn match fsOptionsKeywords contained /data=/ nextgroup=fsOptionsExt3Data
+syn keyword fsOptionsExt3Journal contained update inum
+syn keyword fsOptionsExt3Data contained journal ordered writeback
+syn keyword fsOptionsKeywords contained noload
+
+" Options: fat
+syn match fsOptionsKeywords contained /blocksize=/ nextgroup=fsOptionsSize
+syn match fsOptionsKeywords contained /\%([dfu]mask\|codepage\)=/ nextgroup=fsOptionsNumberOctal
+syn match fsOptionsKeywords contained /\%(cvf_\%(format\|option\)\|iocharset\)=/ nextgroup=fsOptionsString
+syn match fsOptionsKeywords contained /check=/ nextgroup=@fsOptionsCheckCluster
+syn match fsOptionsKeywords contained /conv=*/ nextgroup=fsOptionsConv
+syn match fsOptionsKeywords contained /fat=/ nextgroup=fsOptionsFatType
+syn match fsOptionsKeywords contained /dotsOK=/ nextgroup=fsOptionsYesNo
+syn keyword fsOptionsFatCheck contained r n s relaxed normal strict
+syn keyword fsOptionsConv contained b t a binary text auto
+syn keyword fsOptionsFatType contained 12 16 32
+syn keyword fsOptionsKeywords contained quiet sys_immutable showexec dots nodots
+
+" Options: hpfs
+syn match fsOptionsKeywords contained /case=/ nextgroup=fsOptionsHpfsCase
+syn keyword fsOptionsHpfsCase contained lower asis
+
+" Options: iso9660
+syn match fsOptionsKeywords contained /map=/ nextgroup=fsOptionsIsoMap
+syn match fsOptionsKeywords contained /block=/ nextgroup=fsOptionsSize
+syn match fsOptionsKeywords contained /\%(session\|sbsector\)=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsIsoMap contained n o a normal off acorn
+syn keyword fsOptionsKeywords contained norock nojoilet unhide cruft
+syn keyword fsOptionsConv contained m mtext
+
+" Options: nfs
+syn match fsOptionsKeywords contained /\%(rsize\|wsize\|timeo\|retrans\|acregmin\|acregmax\|acdirmin\|acdirmax\|actimeo\|retry\|port\|mountport\|mounthost\|mountprog\|mountvers\|nfsprog\|nfsvers\|namelen\)=/ nextgroup=fsOptionsString
+syn keyword fsOptionsKeywords contained bg fg soft hard intr cto ac tcp udp lock nobg nofg nosoft nohard nointr noposix nocto noac notcp noudp nolock
+
+" Options: ntfs
+syn match fsOptionsKeywords contained /\%(posix=*\|uni_xlate=\)/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsKeywords contained utf8
+
+" Options: proc
+" -- everything already defined
+
+" Options: reiserfs
+syn match fsOptionsKeywords contained /hash=/ nextgroup=fsOptionsReiserHash
+syn match fsOptionsKeywords contained /resize=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsReiserHash contained rupasov tea r5 detect
+syn keyword fsOptionsKeywords contained hashed_relocation noborder nolog notail no_unhashed_relocation replayonly
+
+" Options: udf
+syn match fsOptionsKeywords contained /\%(anchor\|partition\|lastblock\|fileset\|rootdir\)=/ nextgroup=fsOptionsString
+syn keyword fsOptionsKeywords contained unhide undelete strict novrs
+
+" Options: ufs
+syn match fsOptionsKeywords contained /ufstype=/ nextgroup=fsOptionsUfsType
+syn match fsOptionsKeywords contained /onerror=/ nextgroup=fsOptionsUfsError
+syn keyword fsOptionsUfsType contained old 44bsd sun sunx86 nextstep openstep
+syn match fsOptionsUfsType contained /nextstep-cd/
+syn keyword fsOptionsUfsError contained panic lock umount repair
+
+" Options: vfat
+syn keyword fsOptionsKeywords contained nonumtail posix utf8
+syn match fsOptionsKeywords contained /shortname=/ nextgroup=fsOptionsVfatShortname
+syn keyword fsOptionsVfatShortname contained lower win95 winnt mixed
+
+" Options: xfs
+syn match fsOptionsKeywords contained /\%(biosize\|logbufs\|logbsize\|logdev\|rtdev\|sunit\|swidth\)=/ nextgroup=fsOptionsString
+syn keyword fsOptionsKeywords contained dmapi xdsm noalign noatime norecovery osyncisdsync quota usrquota uquoenforce grpquota gquoenforce
+
+" Frequency / Pass No.
+syn cluster fsFreqPassCluster contains=fsFreqPassNumber,fsFreqPassError
+syn match fsFreqPassError /\s\+\zs\%(\D.*\|\S.*\|\d\+\s\+[^012]\)\ze/ contained
+syn match fsFreqPassNumber /\d\+\s\+[012]\s*/ contained
+
+" Groups
+syn match fsDevice /^\s*\zs.\{-1,}\s/me=e-1 nextgroup=fsMountPoint contains=@fsDeviceCluster,@fsGeneralCluster
+syn match fsMountPoint /\s\+.\{-}\s/me=e-1 nextgroup=fsType contains=@fsMountPointCluster,@fsGeneralCluster contained
+syn match fsType /\s\+.\{-}\s/me=e-1 nextgroup=fsOptions contains=@fsTypeCluster,@fsGeneralCluster contained
+syn match fsOptions /\s\+.\{-}\s/me=e-1 nextgroup=fsFreqPass contains=@fsOptionsCluster,@fsGeneralCluster contained
+syn match fsFreqPass /\s\+.\{-}$/ contains=@fsFreqPassCluster,@fsGeneralCluster contained
+
+" Whole line comments
+syn match fsCommentLine /^#.*$/
+
+if version >= 508 || !exists("did_config_syntax_inits")
+ if version < 508
+ let did_config_syntax_inits = 1
+ command! -nargs=+ HiLink hi link <args>
+ else
+ command! -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink fsOperator Operator
+ HiLink fsComment Comment
+ HiLink fsCommentLine Comment
+
+ HiLink fsTypeKeyword Type
+ HiLink fsDeviceKeyword Identifier
+ HiLink fsDeviceLabel String
+ HiLink fsFreqPassNumber Number
+
+ HiLink fsTypeError Error
+ HiLink fsDeviceError Error
+ HiLink fsMountPointError Error
+ HiLink fsMountPointKeyword Keyword
+ HiLink fsFreqPassError Error
+
+ HiLink fsOptionsGeneral Type
+ HiLink fsOptionsKeywords Keyword
+ HiLink fsOptionsNumber Number
+ HiLink fsOptionsNumberOctal Number
+ HiLink fsOptionsString String
+ HiLink fsOptionsSize Number
+ HiLink fsOptionsExt2Check String
+ HiLink fsOptionsExt2Errors String
+ HiLink fsOptionsExt3Journal String
+ HiLink fsOptionsExt3Data String
+ HiLink fsOptionsFatCheck String
+ HiLink fsOptionsConv String
+ HiLink fsOptionsFatType Number
+ HiLink fsOptionsYesNo String
+ HiLink fsOptionsHpfsCase String
+ HiLink fsOptionsIsoMap String
+ HiLink fsOptionsReiserHash String
+ HiLink fsOptionsUfsType String
+ HiLink fsOptionsUfsError String
+
+ HiLink fsOptionsVfatShortname String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fstab"
+
+" vim: ts=8 ft=vim
diff --git a/runtime/syntax/fvwm.vim b/runtime/syntax/fvwm.vim
new file mode 100644
index 000000000..ff1b78399
--- /dev/null
+++ b/runtime/syntax/fvwm.vim
@@ -0,0 +1,349 @@
+" Vim syntax file
+" Language: Fvwm{1,2} configuration file
+" Maintainer: Haakon Riiser <hakonrk@fys.uio.no>
+" Last Change: 2002 Jun 2
+"
+" Thanks to David Necas (Yeti) for adding Fvwm 2.4 support.
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Fvwm configuration files are case insensitive
+syn case ignore
+
+" Identifiers in Fvwm can contain most characters, so we only
+" include the most common ones here.
+if version >= 600
+ setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57
+else
+ set iskeyword=_,-,+,.,a-z,A-Z,48-57
+endif
+
+" Read system colors from the color database (rgb.txt)
+if exists("rgb_file")
+ " We don't want any hit-return prompts, so we make sure that
+ " &shortmess is set to `O'
+ let __fvwm_oldshm = &shortmess
+ set shortmess=O
+
+ " And we set &report to a huge number, so that no hit-return prompts
+ " will be given
+ let __fvwm_oldreport = &report
+ set report=10000
+
+ " Append the color database to the fvwm configuration, and read the
+ " colors from this buffer
+ let __fvwm_i = line("$") + 1
+ exe "$r" rgb_file
+ let __fvwm_lastline = line("$")
+ while __fvwm_i <= __fvwm_lastline
+ let __fvwm_s = matchstr(getline(__fvwm_i), '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\h.*$')
+ if __fvwm_s != ""
+ exe "syn keyword fvwmColors ".substitute(__fvwm_s, '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\h.*\)$', '\1', "")
+ endif
+ let __fvwm_i = __fvwm_i + 1
+ endwhile
+
+ " Remove the appended data
+ undo
+
+ " Goto first line again
+ 1
+
+ " and restore the old values of the variables
+ let &shortmess = __fvwm_oldshm
+ let &report = __fvwm_oldreport
+ unlet __fvwm_i __fvwm_s __fvwm_lastline __fvwm_oldshm __fvwm_oldreport
+endif
+" done reading colors
+
+syn match fvwmWhitespace "\s\+" contained
+syn match fvwmEnvVar "\$\w\+"
+syn match fvwmModConf "^\s*\*\a\+" contains=fvwmWhitespace
+syn match fvwmString '".\{-}"'
+syn match fvwmRGBValue "#\x\{3}"
+syn match fvwmRGBValue "#\x\{6}"
+syn match fvwmRGBValue "#\x\{9}"
+syn match fvwmRGBValue "#\x\{12}"
+syn match fvwmRGBValue "rgb:\x\{1,4}/\x\{1,4}/\x\{1,4}"
+syn match fvwmPath "\<IconPath\s.*$"lc=8 contains=fvwmEnvVar
+syn match fvwmPath "\<ModulePath\s.*$"lc=10 contains=fvwmEnvVar
+syn match fvwmPath "\<PixmapPath\s.*$"lc=10 contains=fvwmEnvVar
+syn match fvwmModule "\<Module\s\+\w\+"he=s+6
+syn match fvwmKey "\<Key\s\+\w\+"he=s+3
+syn keyword fvwmExec Exec
+syn match fvwmComment "^#.*$"
+
+if (exists("b:fvwm_version") && b:fvwm_version == 1) || (exists("use_fvwm_1") && use_fvwm_1)
+ syn match fvwmEnvVar "\$(\w\+)"
+ syn region fvwmStyle matchgroup=fvwmFunction start="^\s*Style\>"hs=e-5 end="$" oneline keepend contains=fvwmString,fvwmKeyword,fvwmWhiteSpace
+
+ syn keyword fvwmFunction AppsBackingStore AutoRaise BackingStore
+ syn keyword fvwmFunction Beep BoundaryWidth ButtonStyle
+ syn keyword fvwmFunction CenterOnCirculate CirculateDown
+ syn keyword fvwmFunction CirculateHit CirculateSkip
+ syn keyword fvwmFunction CirculateSkipIcons CirculateUp
+ syn keyword fvwmFunction ClickTime ClickToFocus Close Cursor
+ syn keyword fvwmFunction CursorMove DecorateTransients Delete
+ syn keyword fvwmFunction Desk DeskTopScale DeskTopSize Destroy
+ syn keyword fvwmFunction DontMoveOff EdgeResistance EdgeScroll
+ syn keyword fvwmFunction EndFunction EndMenu EndPopup Focus
+ syn keyword fvwmFunction Font Function GotoPage HiBackColor
+ syn keyword fvwmFunction HiForeColor Icon IconBox IconFont
+ syn keyword fvwmFunction Iconify IconPath Key Lenience Lower
+ syn keyword fvwmFunction Maximize MenuBackColor MenuForeColor
+ syn keyword fvwmFunction MenuStippleColor Module ModulePath Mouse
+ syn keyword fvwmFunction Move MWMBorders MWMButtons MWMDecorHints
+ syn keyword fvwmFunction MWMFunctionHints MWMHintOverride MWMMenus
+ syn keyword fvwmFunction NoBorder NoBoundaryWidth Nop NoPPosition
+ syn keyword fvwmFunction NoTitle OpaqueMove OpaqueResize Pager
+ syn keyword fvwmFunction PagerBackColor PagerFont PagerForeColor
+ syn keyword fvwmFunction PagingDefault PixmapPath Popup Quit Raise
+ syn keyword fvwmFunction RaiseLower RandomPlacement Refresh Resize
+ syn keyword fvwmFunction Restart SaveUnders Scroll SloppyFocus
+ syn keyword fvwmFunction SmartPlacement StartsOnDesk StaysOnTop
+ syn keyword fvwmFunction StdBackColor StdForeColor Stick Sticky
+ syn keyword fvwmFunction StickyBackColor StickyForeColor
+ syn keyword fvwmFunction StickyIcons StubbornIconPlacement
+ syn keyword fvwmFunction StubbornIcons StubbornPlacement
+ syn keyword fvwmFunction SuppressIcons Title TogglePage Wait Warp
+ syn keyword fvwmFunction WindowFont WindowList WindowListSkip
+ syn keyword fvwmFunction WindowsDesk WindowShade XORvalue
+
+ " These keywords are only used after the "Style" command. To avoid
+ " name collision with several commands, they are contained.
+ syn keyword fvwmKeyword BackColor BorderWidth BoundaryWidth contained
+ syn keyword fvwmKeyword Button CirculateHit CirculateSkip Color contained
+ syn keyword fvwmKeyword DoubleClick ForeColor Handles HandleWidth contained
+ syn keyword fvwmKeyword Icon IconTitle NoBorder NoBoundaryWidth contained
+ syn keyword fvwmKeyword NoButton NoHandles NoIcon NoIconTitle contained
+ syn keyword fvwmKeyword NoTitle Slippery StartIconic StartNormal contained
+ syn keyword fvwmKeyword StartsAnyWhere StartsOnDesk StaysOnTop contained
+ syn keyword fvwmKeyword StaysPut Sticky Title WindowListHit contained
+ syn keyword fvwmKeyword WindowListSkip contained
+elseif (exists("b:fvwm_version") && b:fvwm_version == 2) || (exists("use_fvwm_2") && use_fvwm_2)
+ syn match fvwmEnvVar "\${\w\+}"
+ syn match fvwmEnvVar "\$\[[^]]\+\]"
+ syn match fvwmEnvVar "\$[$0-9*]"
+ syn match fvwmDef '^\s*+\s*".\{-}"' contains=fvwmMenuString,fvwmWhitespace
+ syn match fvwmIcon '%.\{-}%' contained
+ syn match fvwmIcon '\*.\{-}\*' contained
+ syn match fvwmMenuString '".\{-}"' contains=fvwmIcon,fvwmShortcutKey contained
+ syn match fvwmShortcutKey "&." contained
+ syn match fvwmModule "\<KillModule\s\+\w\+"he=s+10 contains=fvwmModuleName
+ syn match fvwmModule "\<SendToModule\s\+\w\+"he=s+12 contains=fvwmModuleName
+ syn match fvwmModule "\<DestroyModuleConfig\s\+\w\+"he=s+19 contains=fvwmModuleName
+
+ syn keyword fvwmFunction AddButtonStyle AddTitleStyle AddToDecor AddToFunc
+ syn keyword fvwmFunction AddToMenu AnimatedMove Beep BorderStyle BugOpts
+ syn keyword fvwmFunction BusyCursor ButtonState ButtonStyle ChangeDecor
+ syn keyword fvwmFunction ChangeMenuStyle ClickTime Close ColorLimit
+ syn keyword fvwmFunction ColormapFocus CopyMenuStyle Current CursorMove
+ syn keyword fvwmFunction CursorStyle DefaultColors DefaultColorset
+ syn keyword fvwmFunction DefaultFont DefaultIcon DefaultLayers Delete Desk
+ syn keyword fvwmFunction DeskTopSize Destroy DestroyDecor DestroyFunc
+ syn keyword fvwmFunction DestroyMenu DestroyMenuStyle Direction Echo
+ syn keyword fvwmFunction EdgeResistance EdgeScroll EdgeThickness Emulate
+ syn keyword fvwmFunction EscapeFunc Exec ExecUseShell ExitFunction
+ syn keyword fvwmFunction FakeClick FlipFocus Focus Function GlobalOpts
+ syn keyword fvwmFunction GnomeButton GotoDesk GotoDeskAndPage GotoPage
+ syn keyword fvwmFunction HideGeometryWindow HilightColor HilightColorset
+ syn keyword fvwmFunction IconFont IconPath Iconify IgnoreModifiers
+ syn keyword fvwmFunction ImagePath Key Layer Lower Maximize Menu MenuStyle
+ syn keyword fvwmFunction ModulePath ModuleSynchronous ModuleTimeout
+ syn keyword fvwmFunction Mouse Move MoveThreshold MoveToDesk MoveToPage
+ syn keyword fvwmFunction MoveToScreen Next None Nop OpaqueMoveSize
+ syn keyword fvwmFunction PipeRead PixmapPath PlaceAgain PointerKey
+ syn keyword fvwmFunction Popup Prev Quit QuitScreen QuitSession Raise
+ syn keyword fvwmFunction RaiseLower Read Recapture RecaptureWindow
+ syn keyword fvwmFunction Refresh RefreshWindow Resize ResizeMove
+ syn keyword fvwmFunction Restart SaveQuitSession SaveSession Scroll
+ syn keyword fvwmFunction SetAnimation SetEnv SetMenuDelay SetMenuStyle
+ syn keyword fvwmFunction Silent SnapAttraction SnapGrid Stick Stroke
+ syn keyword fvwmFunction StrokeFunc Style Title TitleStyle UnsetEnv
+ syn keyword fvwmFunction UpdateDecor UpdateStyles Wait WarpToWindow
+ syn keyword fvwmFunction WindowFont WindowId WindowList WindowShade
+ syn keyword fvwmFunction WindowShadeAnimate WindowsDesk Xinerama
+ syn keyword fvwmFunction XineramaPrimaryScreen XineramaSls XineramaSlsSize
+ syn keyword fvwmFunction XorPixmap XorValue
+
+ syn keyword fvwmKeyword Active ActiveColorset ActiveDown
+ syn keyword fvwmKeyword ActiveFore ActiveForeOff ActivePlacement
+ syn keyword fvwmKeyword ActivePlacementHonorsStartsOnPage
+ syn keyword fvwmKeyword ActivePlacementIgnoresStartsOnPage ActiveUp All
+ syn keyword fvwmKeyword AllowRestack Alphabetic Anim Animated Animation
+ syn keyword fvwmKeyword AnimationOff AutomaticHotkeys AutomaticHotkeysOff
+ syn keyword fvwmKeyword BGradient BackColor Background BackingStore
+ syn keyword fvwmKeyword BackingStoreOff BorderColorset BorderWidth
+ syn keyword fvwmKeyword Bottom Button Button0 Button1 Button2 Button3
+ syn keyword fvwmKeyword Button4 Button5 Button6 Button7 Button8
+ syn keyword fvwmKeyword Button9 CGradient CaptureHonorsStartsOnPage
+ syn keyword fvwmKeyword CaptureIgnoresStartsOnPage CascadePlacement
+ syn keyword fvwmKeyword Centered CirculateHit CirculateHitIcon
+ syn keyword fvwmKeyword CirculateHitShaded CirculateSkip
+ syn keyword fvwmKeyword CirculateSkipIcon CirculateSkipShaded Clear
+ syn keyword fvwmKeyword ClickToFocus ClickToFocusDoesntPassClick
+ syn keyword fvwmKeyword ClickToFocusDoesntRaise ClickToFocusPassesClick
+ syn keyword fvwmKeyword ClickToFocusPassesClickOff ClickToFocusRaises
+ syn keyword fvwmKeyword ClickToFocusRaisesOff Color Colorset Context
+ syn keyword fvwmKeyword CurrentDesk CurrentPage CurrentPageAnyDesk
+ syn keyword fvwmKeyword DGradient DecorateTransient Default
+ syn keyword fvwmKeyword DepressableBorder Desk DontLowerTransient
+ syn keyword fvwmKeyword DontRaiseTransient DontStackTransientParent
+ syn keyword fvwmKeyword DoubleClickTime Down DumbPlacement DynamicMenu
+ syn keyword fvwmKeyword DynamicPopDownAction DynamicPopUpAction
+ syn keyword fvwmKeyword East Expect FVWM FirmBorder Fixed
+ syn keyword fvwmKeyword FixedPosition Flat FlickeringMoveWorkaround
+ syn keyword fvwmKeyword FlickeringQtDialogsWorkaround FocusFollowsMouse
+ syn keyword fvwmKeyword FollowsFocus FollowsMouse Font ForeColor
+ syn keyword fvwmKeyword Foreground Function Fvwm FvwmBorder
+ syn keyword fvwmKeyword FvwmButtons GNOMEIgnoreHints GNOMEUseHints
+ syn keyword fvwmKeyword GrabFocus GrabFocusOff GrabFocusTransient
+ syn keyword fvwmKeyword GrabFocusTransientOff Greyed GreyedColorset
+ syn keyword fvwmKeyword HGradient HandleWidth Handles Height
+ syn keyword fvwmKeyword HiddenHandles Hilight3DOff Hilight3DThick
+ syn keyword fvwmKeyword Hilight3DThickness Hilight3DThin HilightBack
+ syn keyword fvwmKeyword HilightBackOff HilightBorderColorset
+ syn keyword fvwmKeyword HilightColorset HilightFore HintOverride
+ syn keyword fvwmKeyword HoldSubmenus Icon IconBox IconFill IconFont
+ syn keyword fvwmKeyword IconGrid IconOverride IconTitle Iconic
+ syn keyword fvwmKeyword IconifyWindowGroups IconifyWindowGroupsOff
+ syn keyword fvwmKeyword Icons IgnoreRestack Inactive Interior Item
+ syn keyword fvwmKeyword ItemFormat KeepWindowGroupsOnDesk Layer Left
+ syn keyword fvwmKeyword LeftJustified Lenience LowerTransient MWM
+ syn keyword fvwmKeyword MWMBorder MWMButtons MWMDecor MWMDecorMax
+ syn keyword fvwmKeyword MWMDecorMenu MWMDecorMin MWMFunctions
+ syn keyword fvwmKeyword ManualPlacement ManualPlacementHonorsStartsOnPage
+ syn keyword fvwmKeyword ManualPlacementIgnoresStartsOnPage MaxWindowSize
+ syn keyword fvwmKeyword Maximized Menu MenuColorset MenuFace
+ syn keyword fvwmKeyword MinOverlapPercentPlacement MinOverlapPlacement
+ syn keyword fvwmKeyword MiniIcon MixedVisualWorkaround ModalityIsEvil
+ syn keyword fvwmKeyword ModuleSynchronous Mouse MouseFocus
+ syn keyword fvwmKeyword MouseFocusClickDoesntRaise MouseFocusClickRaises
+ syn keyword fvwmKeyword MouseFocusClickRaisesOff Move Mwm MwmBorder
+ syn keyword fvwmKeyword MwmButtons MwmDecor MwmFunctions NakedTransient
+ syn keyword fvwmKeyword Never NeverFocus NoActiveIconOverride NoButton
+ syn keyword fvwmKeyword NoDecorHint NoDeskSort NoFuncHint NoGeometry
+ syn keyword fvwmKeyword NoGeometryWithInfo NoHandles NoHotkeys NoIcon
+ syn keyword fvwmKeyword NoIconOverride NoIconPosition NoIconTitle
+ syn keyword fvwmKeyword NoIcons NoInset NoLenience NoNormal
+ syn keyword fvwmKeyword NoOLDecor NoOnBottom NoOnTop NoOverride
+ syn keyword fvwmKeyword NoPPosition NoResizeOverride NoSticky
+ syn keyword fvwmKeyword NoStipledTitles NoTitle NoTransientPPosition
+ syn keyword fvwmKeyword NoTransientUSPosition NoUSPosition
+ syn keyword fvwmKeyword NoWarp Normal North Northeast Northwest
+ syn keyword fvwmKeyword NotAlphabetic OLDecor OnBottom OnTop Once
+ syn keyword fvwmKeyword OnlyIcons OnlyListSkip OnlyNormal OnlyOnBottom
+ syn keyword fvwmKeyword OnlyOnTop OnlySticky Opacity ParentalRelativity
+ syn keyword fvwmKeyword Pixmap PopdownDelayed PopdownDelay PopupDelay
+ syn keyword fvwmKeyword PopupAsRootMenu PopupAsSubmenu PopdownImmediately
+ syn keyword fvwmKeyword PopupDelayed PopupImmediately PopupOffset
+ syn keyword fvwmKeyword Quiet RGradient RaiseOverNativeWindows
+ syn keyword fvwmKeyword RaiseOverUnmanaged RaiseTransient
+ syn keyword fvwmKeyword Raised Read RecaptureHonorsStartsOnPage
+ syn keyword fvwmKeyword RecaptureIgnoresStartsOnPage Rectangle
+ syn keyword fvwmKeyword RemoveSubmenus Reset Resize ResizeHintOverride
+ syn keyword fvwmKeyword ResizeOpaque ResizeOutline ReverseOrder
+ syn keyword fvwmKeyword Right RightJustified Root SGradient SameType
+ syn keyword fvwmKeyword SaveUnder SaveUnderOff ScatterWindowGroups
+ syn keyword fvwmKeyword Screen SelectInPlace SelectOnRelease
+ syn keyword fvwmKeyword SelectWarp SeparatorsLong SeparatorsShort
+ syn keyword fvwmKeyword ShowMapping SideColor SidePic Simple
+ syn keyword fvwmKeyword SkipMapping Slippery SlipperyIcon SloppyFocus
+ syn keyword fvwmKeyword SmartPlacement SmartPlacementIsNormal
+ syn keyword fvwmKeyword SmartPlacementIsReallySmart Solid South
+ syn keyword fvwmKeyword Southeast Southwest StackTransientParent
+ syn keyword fvwmKeyword StartIconic StartNormal StartsAnyWhere
+ syn keyword fvwmKeyword StartsLowered StartsOnDesk StartsOnPage
+ syn keyword fvwmKeyword StartsOnPageIgnoresTransients
+ syn keyword fvwmKeyword StartsOnPageIncludesTransients StartsOnScreen
+ syn keyword fvwmKeyword StartsRaised StaysOnBottom StaysOnTop StaysPut
+ syn keyword fvwmKeyword Sticky StickyIcon StipledTitles StippledTitle
+ syn keyword fvwmKeyword StippledTitleOff SubmenusLeft SubmenusRight Sunk
+ syn keyword fvwmKeyword This TileCascadePlacement TileManualPlacement
+ syn keyword fvwmKeyword TiledPixmap Timeout Title TitleAtBottom
+ syn keyword fvwmKeyword TitleAtTop TitleUnderlines0 TitleUnderlines1
+ syn keyword fvwmKeyword TitleUnderlines2 TitleWarp TitleWarpOff Top
+ syn keyword fvwmKeyword Transient TrianglesRelief TrianglesSolid
+ syn keyword fvwmKeyword Up UseBorderStyle UseDecor UseIconName
+ syn keyword fvwmKeyword UseIconPosition UseListSkip UsePPosition
+ syn keyword fvwmKeyword UseStyle UseTitleStyle UseTransientPPosition
+ syn keyword fvwmKeyword UseTransientUSPosition UseUSPosition VGradient
+ syn keyword fvwmKeyword VariablePosition Vector VerticalItemSpacing
+ syn keyword fvwmKeyword VerticalTitleSpacing WIN Wait Warp WarpTitle
+ syn keyword fvwmKeyword West Win Window WindowListHit WindowListSkip
+ syn keyword fvwmKeyword WindowShadeScrolls WindowShadeShrinks
+ syn keyword fvwmKeyword WindowShadeSteps Windows XineramaRoot YGradient
+ syn keyword fvwmKeyword bottomright default pointer prev quiet
+ syn keyword fvwmKeyword True False Toggle
+
+ syn keyword fvwmConditionName AcceptsFocus CurrentDesk CurrentGlobalPage
+ syn keyword fvwmConditionName CurrentGlobalPageAnyDesk CurrentPage
+ syn keyword fvwmConditionName CurrentPageAnyDesk CurrentScreen Iconic Layer
+ syn keyword fvwmConditionName Maximized PlacedByButton3 PlacedByFvwm Raised
+ syn keyword fvwmConditionName Shaded Sticky Transient Visible
+
+ syn keyword fvwmContextName BOTTOM BOTTOM_EDGE BOTTOM_LEFT BOTTOM_RIGHT
+ syn keyword fvwmContextName DEFAULT DESTROY LEFT LEFT_EDGE MENU MOVE
+ syn keyword fvwmContextName RESIZE RIGHT RIGHT_EDGE ROOT SELECT STROKE SYS
+ syn keyword fvwmContextName TITLE TOP TOP_EDGE TOP_LEFT TOP_RIGHT WAIT
+ syn keyword fvwmContextName POSITION
+
+ syn keyword fvwmFunctionName contained FvwmAnimate FvwmAudio FvwmAuto
+ syn keyword fvwmFunctionName contained FvwmBacker FvwmBanner FvwmButtons
+ syn keyword fvwmFunctionName contained FvwmCascade FvwmCommandS
+ syn keyword fvwmFunctionName contained FvwmConsole FvwmConsoleC FvwmCpp
+ syn keyword fvwmFunctionName contained FvwmDebug FvwmDragWell FvwmEvent
+ syn keyword fvwmFunctionName contained FvwmForm FvwmGtk FvwmIconBox
+ syn keyword fvwmFunctionName contained FvwmIconMan FvwmIdent FvwmM4
+ syn keyword fvwmFunctionName contained FvwmPager FvwmRearrange FvwmSave
+ syn keyword fvwmFunctionName contained FvwmSaveDesk FvwmScript FvwmScroll
+ syn keyword fvwmFunctionName contained FvwmTalk FvwmTaskBar FvwmTheme
+ syn keyword fvwmFunctionName contained FvwmTile FvwmWharf FvwmWinList
+
+ syn keyword fvwmFunctionName StartFunction InitFunction RestartFunction
+ syn keyword fvwmFunctionName ExitFunction SessionInitFunction
+ syn keyword fvwmFunctionName SessionRestartFunction SessionExitFunction
+ syn keyword fvwmFunctionName MissingSubmenuFunction
+endif
+
+if version >= 508 || !exists("did_fvwm_syntax_inits")
+ if version < 508
+ let did_fvwm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink fvwmComment Comment
+ HiLink fvwmEnvVar Macro
+ HiLink fvwmExec Function
+ HiLink fvwmFunction Function
+ HiLink fvwmFunctionName Special
+ HiLink fvwmContextName Function
+ HiLink fvwmConditionName Function
+ HiLink fvwmIcon Comment
+ HiLink fvwmKey Function
+ HiLink fvwmKeyword Keyword
+ HiLink fvwmMenuString String
+ HiLink fvwmModConf Macro
+ HiLink fvwmModule Function
+ HiLink fvwmModuleName Special
+ HiLink fvwmRGBValue Type
+ HiLink fvwmShortcutKey SpecialChar
+ HiLink fvwmString String
+
+ if exists("rgb_file")
+ HiLink fvwmColors Type
+ endif
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fvwm"
+" vim: sts=4 sw=4 ts=8
diff --git a/runtime/syntax/fvwm2m4.vim b/runtime/syntax/fvwm2m4.vim
new file mode 100644
index 000000000..243da18fa
--- /dev/null
+++ b/runtime/syntax/fvwm2m4.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language: FvwmM4 preprocessed Fvwm2 configuration files
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-06-02
+" URI: http://physics.muni.cz/~yeti/download/syntax/fvwmm4.vim
+
+" Setup
+if version >= 600
+ if exists('b:current_syntax')
+ finish
+ endif
+else
+ syntax clear
+endif
+
+" Let included files know they are included
+if !exists('main_syntax')
+ let main_syntax = 'fvwm2m4'
+endif
+
+" Include M4 syntax
+if version >= 600
+ runtime! syntax/m4.vim
+else
+ so <sfile>:p:h/m4.vim
+endif
+unlet b:current_syntax
+
+" Include Fvwm2 syntax (Fvwm1 doesn't have M4 preprocessor)
+if version >= 600
+ runtime! syntax/fvwm.vim
+else
+ so <sfile>:p:h/fvwm.vim
+endif
+unlet b:current_syntax
+
+" That's all!
+let b:current_syntax = 'fvwm2m4'
+
+if main_syntax == 'fvwm2m4'
+ unlet main_syntax
+endif
+
diff --git a/runtime/syntax/gdb.vim b/runtime/syntax/gdb.vim
new file mode 100644
index 000000000..c874a0465
--- /dev/null
+++ b/runtime/syntax/gdb.vim
@@ -0,0 +1,111 @@
+" Vim syntax file
+" Language: GDB command files
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/gdb.vim
+" Last Change: 2003 Jan 04
+
+" 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 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
+syn keyword gdbInfo contained source sources stack symbol target terminal threads
+syn keyword gdbInfo contained syn keyword tracepoints types udot variables warranty watchpoints
+syn match gdbInfo contained "all-registers"
+
+
+syn keyword gdbStatement contained actions apply attach awatch backtrace break bt call catch cd clear collect commands
+syn keyword gdbStatement contained complete condition continue delete detach directory disable disassemble display down
+syn keyword gdbStatement contained echo else enable end file finish frame handle hbreak help if ignore
+syn keyword gdbStatement contained inspect jump kill list load maintenance make next nexti ni output overlay
+syn keyword gdbStatement contained passcount path print printf ptype pwd quit rbreak remote return run rwatch
+syn keyword gdbStatement contained search section set sharedlibrary shell show si signal source step stepi stepping
+syn keyword gdbStatement contained stop target tbreak tdump tfind thbreak thread tp trace tstart tstatus tstop
+syn keyword gdbStatement contained tty undisplay unset until up watch whatis where while ws x
+syn match gdbFuncDef "\<define\>.*"
+syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
+syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty
+
+" some commonly used abreviations
+syn keyword gdbStatement c disp undisp disas p
+
+syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end$"
+
+syn match gdbStatement "\<add-shared-symbol-files\>"
+syn match gdbStatement "\<add-symbol-file\>"
+syn match gdbStatement "\<core-file\>"
+syn match gdbStatement "\<dont-repeat\>"
+syn match gdbStatement "\<down-silently\>"
+syn match gdbStatement "\<exec-file\>"
+syn match gdbStatement "\<forward-search\>"
+syn match gdbStatement "\<reverse-search\>"
+syn match gdbStatement "\<save-tracepoints\>"
+syn match gdbStatement "\<select-frame\>"
+syn match gdbStatement "\<symbol-file\>"
+syn match gdbStatement "\<up-silently\>"
+syn match gdbStatement "\<while-stepping\>"
+
+syn keyword gdbSet annotate architecture args check complaints confirm editing endian
+syn keyword gdbSet environment gnutarget height history language listsize print prompt
+syn keyword gdbSet radix remotebaud remotebreak remotecache remotedebug remotedevice remotelogbase
+syn keyword gdbSet remotelogfile remotetimeout remotewritesize targetdebug variable verbose
+syn keyword gdbSet watchdog width write
+syn match gdbSet "\<auto-solib-add\>"
+syn match gdbSet "\<solib-absolute-prefix\>"
+syn match gdbSet "\<solib-search-path\>"
+syn match gdbSet "\<stop-on-solib-events\>"
+syn match gdbSet "\<symbol-reloading\>"
+syn match gdbSet "\<input-radix\>"
+syn match gdbSet "\<demangle-style\>"
+syn match gdbSet "\<output-radix\>"
+
+syn match gdbComment "^\s*#.*"
+
+syn match gdbVariable "\$\K\k*"
+
+" Strings and constants
+syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match gdbCharacter "'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError
+syn match gdbCharacter "'\\''" contains=gdbSpecialChar
+syn match gdbCharacter "'[^\\]'"
+syn match gdbNumber "\<[0-9_]\+\>"
+syn match gdbNumber "\<0x[0-9a-fA-F_]\+\>"
+
+
+if !exists("gdb_minlines")
+ let gdb_minlines = 10
+endif
+exec "syn sync ccomment gdbComment minlines=" . gdb_minlines
+
+" 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_gdb_syn_inits")
+ if version < 508
+ let did_gdb_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink gdbFuncDef Function
+ HiLink gdbComment Comment
+ HiLink gdbStatement Statement
+ HiLink gdbString String
+ HiLink gdbCharacter Character
+ HiLink gdbVariable Identifier
+ HiLink gdbSet Constant
+ HiLink gdbInfo Type
+ HiLink gdbDocument Special
+ HiLink gdbNumber Number
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gdb"
+
+" vim: ts=8
diff --git a/runtime/syntax/gdmo.vim b/runtime/syntax/gdmo.vim
new file mode 100644
index 000000000..08a6b357f
--- /dev/null
+++ b/runtime/syntax/gdmo.vim
@@ -0,0 +1,96 @@
+" 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
+
+" 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
+
+" keyword definitions
+syn match gdmoCategory "MANAGED\s\+OBJECT\s\+CLASS"
+syn keyword gdmoCategory NOTIFICATION ATTRIBUTE BEHAVIOUR PACKAGE ACTION
+syn match gdmoCategory "NAME\s\+BINDING"
+syn match gdmoRelationship "DERIVED\s\+FROM"
+syn match gdmoRelationship "SUPERIOR\s\+OBJECT\s\+CLASS"
+syn match gdmoRelationship "SUBORDINATE\s\+OBJECT\s\+CLASS"
+syn match gdmoExtension "AND\s\+SUBCLASSES"
+syn match gdmoDefinition "DEFINED\s\+AS"
+syn match gdmoDefinition "REGISTERED\s\+AS"
+syn match gdmoExtension "ORDER\s\+BY"
+syn match gdmoReference "WITH\s\+ATTRIBUTE"
+syn match gdmoReference "WITH\s\+INFORMATION\s\+SYNTAX"
+syn match gdmoReference "WITH\s\+REPLY\s\+SYNTAX"
+syn match gdmoReference "WITH\s\+ATTRIBUTE\s\+SYNTAX"
+syn match gdmoExtension "AND\s\+ATTRIBUTE\s\+IDS"
+syn match gdmoExtension "MATCHES\s\+FOR"
+syn match gdmoReference "CHARACTERIZED\s\+BY"
+syn match gdmoReference "CONDITIONAL\s\+PACKAGES"
+syn match gdmoExtension "PRESENT\s\+IF"
+syn match gdmoExtension "DEFAULT\s\+VALUE"
+syn match gdmoExtension "PERMITTED\s\+VALUES"
+syn match gdmoExtension "REQUIRED\s\+VALUES"
+syn match gdmoExtension "NAMED\s\+BY"
+syn keyword gdmoReference ATTRIBUTES NOTIFICATIONS ACTIONS
+syn keyword gdmoExtension DELETE CREATE
+syn keyword gdmoExtension EQUALITY SUBSTRINGS ORDERING
+syn match gdmoExtension "REPLACE-WITH-DEFAULT"
+syn match gdmoExtension "GET"
+syn match gdmoExtension "GET-REPLACE"
+syn match gdmoExtension "ADD-REMOVE"
+syn match gdmoExtension "WITH-REFERENCE-OBJECT"
+syn match gdmoExtension "WITH-AUTOMATIC-INSTANCE-NAMING"
+syn match gdmoExtension "ONLY-IF-NO-CONTAINED-OBJECTS"
+
+
+" Strings and constants
+syn match gdmoSpecial contained "\\\d\d\d\|\\."
+syn region gdmoString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gdmoSpecial
+syn match gdmoCharacter "'[^\\]'"
+syn match gdmoSpecialCharacter "'\\.'"
+syn match gdmoNumber "0[xX][0-9a-fA-F]\+\>"
+syn match gdmoLineComment "--.*"
+syn match gdmoLineComment "--.*--"
+
+syn match gdmoDefinition "^\s*[a-zA-Z][-a-zA-Z0-9_.\[\] \t{}]* *::="me=e-3
+syn match gdmoBraces "[{}]"
+
+syn sync ccomment gdmoComment
+
+" 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_gdmo_syntax_inits")
+ if version < 508
+ let did_gdmo_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gdmoCategory Structure
+ HiLink gdmoRelationship Macro
+ HiLink gdmoDefinition Statement
+ HiLink gdmoReference Type
+ HiLink gdmoExtension Operator
+ HiLink gdmoBraces Function
+ HiLink gdmoSpecial Special
+ HiLink gdmoString String
+ HiLink gdmoCharacter Character
+ HiLink gdmoSpecialCharacter gdmoSpecial
+ HiLink gdmoComment Comment
+ HiLink gdmoLineComment gdmoComment
+ HiLink gdmoType Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gdmo"
+
+" vim: ts=8
diff --git a/runtime/syntax/gedcom.vim b/runtime/syntax/gedcom.vim
new file mode 100644
index 000000000..98851cc94
--- /dev/null
+++ b/runtime/syntax/gedcom.vim
@@ -0,0 +1,66 @@
+" Vim syntax file
+" Language: Gedcom
+" Maintainer: Paul Johnson (pjcj@transeda.com)
+" Version 1.059 - 23rd December 1999
+
+" 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
+
+syntax case match
+
+syntax keyword gedcom_record ABBR ADDR ADOP ADR1 ADR2 AFN AGE AGNC ALIA ANCE
+syntax keyword gedcom_record ANCI ANUL ASSO AUTH BAPL BAPM BARM BASM BIRT BLES
+syntax keyword gedcom_record BLOB BURI CALN CAST CAUS CENS CHAN CHAR CHIL CHR
+syntax keyword gedcom_record CHRA CITY CONC CONF CONL CONT COPR CORP CREM CTRY
+syntax keyword gedcom_record DATA DEAT DESC DESI DEST DIV DIVF DSCR EDUC EMIG
+syntax keyword gedcom_record ENDL ENGA EVEN FAM FAMC FAMF FAMS FCOM FILE FORM
+syntax keyword gedcom_record GEDC GIVN GRAD HEAD HUSB IDNO IMMI INDI LANG MARB
+syntax keyword gedcom_record MARC MARL MARR MARS MEDI NATI NATU NCHI NICK NMR
+syntax keyword gedcom_record NOTE NPFX NSFX OBJE OCCU ORDI ORDN PAGE PEDI PHON
+syntax keyword gedcom_record PLAC POST PROB PROP PUBL QUAY REFN RELA RELI REPO
+syntax keyword gedcom_record RESI RESN RETI RFN RIN ROLE SEX SLGC SLGS SOUR
+syntax keyword gedcom_record SPFX SSN STAE STAT SUBM SUBN SURN TEMP TEXT TIME
+syntax keyword gedcom_record TITL TRLR TYPE VERS WIFE WILL
+syntax keyword gedcom_record DATE nextgroup=gedcom_date
+syntax keyword gedcom_record NAME nextgroup=gedcom_name
+
+syntax case ignore
+
+syntax region gedcom_id start="@" end="@" oneline contains=gedcom_ii, gedcom_in
+syntax match gedcom_ii "\I\+" contained nextgroup=gedcom_in
+syntax match gedcom_in "\d\+" contained
+syntax region gedcom_name start="" end="$" skipwhite oneline contains=gedcom_cname, gedcom_surname contained
+syntax match gedcom_cname "\i\+" contained
+syntax match gedcom_surname "/\(\i\|\s\)*/" contained
+syntax match gedcom_date "\d\{1,2}\s\+\(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\)\s\+\d\+"
+syntax match gedcom_date ".*" contained
+
+" 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_gedcom_syntax_inits")
+ if version < 508
+ let did_gedcom_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gedcom_record Statement
+ HiLink gedcom_id Comment
+ HiLink gedcom_ii PreProc
+ HiLink gedcom_in Type
+ HiLink gedcom_name PreProc
+ HiLink gedcom_cname Type
+ HiLink gedcom_surname Identifier
+ HiLink gedcom_date Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gedcom"
diff --git a/runtime/syntax/gkrellmrc.vim b/runtime/syntax/gkrellmrc.vim
new file mode 100644
index 000000000..6ce123841
--- /dev/null
+++ b/runtime/syntax/gkrellmrc.vim
@@ -0,0 +1,91 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: gkrellm theme files `gkrellmrc'
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003-04-30
+" URL: http://trific.ath.cx/Ftp/vim/syntax/gkrellmrc.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if version >= 600
+ setlocal iskeyword=_,-,a-z,A-Z,48-57
+else
+ set iskeyword=_,-,a-z,A-Z,48-57
+endif
+
+syn case match
+
+" Base constructs
+syn match gkrellmrcComment "#.*$" contains=gkrellmrcFixme
+syn keyword gkrellmrcFixme FIXME TODO XXX NOT contained
+syn region gkrellmrcString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline
+syn match gkrellmrcNumber "^-\=\(\d\+\)\=\.\=\d\+"
+syn match gkrellmrcNumber "\W-\=\(\d\+\)\=\.\=\d\+"lc=1
+syn keyword gkrellmrcConstant none
+syn match gkrellmrcRGBColor "#\(\x\{12}\|\x\{9}\|\x\{6}\|\x\{3}\)\>"
+
+" Keywords
+syn keyword gkrellmrcBuiltinExt cpu_nice_color cpu_nice_grid_color krell_depth krell_expand krell_left_margin krell_right_margin krell_x_hot krell_yoff mem_krell_buffers_depth mem_krell_buffers_expand mem_krell_buffers_x_hot mem_krell_buffers_yoff mem_krell_cache_depth mem_krell_cache_expand mem_krell_cache_x_hot mem_krell_cache_yoff sensors_bg_volt timer_bg_timer
+syn keyword gkrellmrcGlobal allow_scaling author chart_width_ref theme_alternatives
+syn keyword gkrellmrcSetCmd set_image_border set_integer set_string
+syn keyword gkrellmrcGlobal bg_slider_meter_border bg_slider_panel_border
+syn keyword gkrellmrcGlobal frame_bottom_height frame_left_width frame_right_width frame_top_height frame_left_chart_overlap frame_right_chart_overlap frame_left_panel_overlap frame_right_panel_overlap frame_left_spacer_overlap frame_right_spacer_overlap spacer_overlap_off cap_images_off
+syn keyword gkrellmrcGlobal frame_bottom_border frame_left_border frame_right_border frame_top_border spacer_top_border spacer_bottom_border frame_left_chart_border frame_right_chart_border frame_left_panel_border frame_right_panel_border
+syn keyword gkrellmrcGlobal chart_in_color chart_in_color_grid chart_out_color chart_out_color_grid
+syn keyword gkrellmrcGlobal bg_separator_height bg_grid_mode
+syn keyword gkrellmrcGlobal rx_led_x rx_led_y tx_led_x tx_led_y
+syn keyword gkrellmrcGlobal decal_mail_frames decal_mail_delay
+syn keyword gkrellmrcGlobal decal_alarm_frames decal_warn_frames
+syn keyword gkrellmrcGlobal krell_slider_depth krell_slider_expand krell_slider_x_hot
+syn keyword gkrellmrcGlobal button_panel_border button_meter_border
+syn keyword gkrellmrcGlobal large_font normal_font small_font
+syn keyword gkrellmrcGlobal spacer_bottom_height spacer_top_height spacer_bottom_height_chart spacer_top_height_chart spacer_bottom_height_meter spacer_top_height_meter
+syn keyword gkrellmrcExpandMode left right bar-mode left-scaled right-scaled bar-mode-scaled
+syn keyword gkrellmrcMeterName apm cal clock fs host mail mem swap timer sensors uptime
+syn keyword gkrellmrcChartName cpu proc disk inet and net
+syn match gkrellmrcSpecialClassName "\*"
+syn keyword gkrellmrcStyleCmd StyleMeter StyleChart StylePanel
+syn keyword gkrellmrcStyleItem textcolor alt_textcolor font alt_font transparency border label_position margin margins left_margin right_margin top_margin bottom_margin krell_depth krell_yoff krell_x_hot krell_expand krell_left_margin krell_right_margin
+
+" Define the default highlighting
+if version >= 508 || !exists("did_gtkrc_syntax_inits")
+ if version < 508
+ let did_gtkrc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gkrellmrcComment Comment
+ HiLink gkrellmrcFixme Todo
+
+ HiLink gkrellmrcString gkrellmrcConstant
+ HiLink gkrellmrcNumber gkrellmrcConstant
+ HiLink gkrellmrcRGBColor gkrellmrcConstant
+ HiLink gkrellmrcExpandMode gkrellmrcConstant
+ HiLink gkrellmrcConstant Constant
+
+ HiLink gkrellmrcMeterName gkrellmrcClass
+ HiLink gkrellmrcChartName gkrellmrcClass
+ HiLink gkrellmrcSpecialClassName gkrellmrcClass
+ HiLink gkrellmrcClass Type
+
+ HiLink gkrellmrcGlobal gkrellmrcItem
+ HiLink gkrellmrcBuiltinExt gkrellmrcItem
+ HiLink gkrellmrcStyleItem gkrellmrcItem
+ HiLink gkrellmrcItem Function
+
+ HiLink gkrellmrcSetCmd Special
+ HiLink gkrellmrcStyleCmd Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gkrellmrc"
diff --git a/runtime/syntax/gnuplot.vim b/runtime/syntax/gnuplot.vim
new file mode 100644
index 000000000..a6fa716e2
--- /dev/null
+++ b/runtime/syntax/gnuplot.vim
@@ -0,0 +1,198 @@
+" Vim syntax file
+" Language: gnuplot 3.8i.0
+" Maintainer: John Hoelzel johnh51@users.sourceforge.net
+" Last Change: Mon May 26 02:33:33 UTC 2003
+" Filenames: *.gpi *.gih scripts: #!*gnuplot
+" URL: http://johnh51.get.to/vim/syntax/gnuplot.vim
+"
+
+" thanks to "David Necas (Yeti)" <yeti@physics.muni.cz> for heads up - working on more changes .
+" *.gpi = GnuPlot Input - what I use because there is no other guideline. jeh 11/2000
+" *.gih = makes using cut/pasting from gnuplot.gih easier ...
+" #!*gnuplot = for Linux bash shell scripts of gnuplot commands.
+" emacs used a suffix of '<gp?>'
+" gnuplot demo files show no preference.
+" I will post mail and newsgroup comments on a standard suffix in 'URL' directory.
+
+" 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
+
+" some shortened names to make demo files look clean... jeh. 11/2000
+" demos -> 3.8i ... jeh. 5/2003 - a work in progress...
+
+" commands
+
+syn keyword gnuplotStatement cd call clear exit set unset plot splot help
+syn keyword gnuplotStatement load pause quit fit rep[lot] if
+syn keyword gnuplotStatement FIT_LIMIT FIT_MAXITER FIT_START_LAMBDA
+syn keyword gnuplotStatement FIT_LAMBDA_FACTOR FIT_LOG FIT_SCRIPT
+syn keyword gnuplotStatement print pwd reread reset save show test ! functions var
+syn keyword gnuplotConditional if
+" if is cond + stmt - ok?
+
+" numbers fm c.vim
+
+" integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match gnuplotNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>"
+" floating point number, with dot, optional exponent
+syn match gnuplotFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match gnuplotFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
+" floating point number, without dot, with exponent
+syn match gnuplotFloat "\<[0-9]\+e[-+]\=[0-9]\+[fl]\=\>"
+" hex number
+syn match gnuplotNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+syn case match
+" flag an octal number with wrong digits by not hilighting
+syn match gnuplotOctalError "\<0[0-7]*[89]"
+
+" plot args
+
+syn keyword gnuplotType u[sing] tit[le] notit[le] wi[th] steps fs[teps]
+syn keyword gnuplotType title notitle t
+syn keyword gnuplotType with w
+syn keyword gnuplotType li[nes] l
+" t - too much? w - too much? l - too much?
+syn keyword gnuplotType linespoints via
+
+" funcs
+
+syn keyword gnuplotFunc abs acos acosh arg asin asinh atan atanh atan2
+syn keyword gnuplotFunc besj0 besj1 besy0 besy1
+syn keyword gnuplotFunc ceil column cos cosh erf erfc exp floor gamma
+syn keyword gnuplotFunc ibeta inverf igamma imag invnorm int lgamma
+syn keyword gnuplotFunc log log10 norm rand real sgn sin sinh sqrt tan
+syn keyword gnuplotFunc lambertw
+syn keyword gnuplotFunc tanh valid
+syn keyword gnuplotFunc tm_hour tm_mday tm_min tm_mon tm_sec
+syn keyword gnuplotFunc tm_wday tm_yday tm_year
+
+" set vars
+
+syn keyword gnuplotType xdata timefmt grid noytics ytics fs
+syn keyword gnuplotType logscale time notime mxtics nomxtics style mcbtics
+syn keyword gnuplotType nologscale
+syn keyword gnuplotType axes x1y2 unique acs[plines]
+syn keyword gnuplotType size origin multiplot xtics xr[ange] yr[ange] square nosquare ratio noratio
+syn keyword gnuplotType binary matrix index every thru sm[ooth]
+syn keyword gnuplotType all angles degrees radians
+syn keyword gnuplotType arrow noarrow autoscale noautoscale arrowstyle
+" autoscale args = x y xy z t ymin ... - too much?
+" needs code to: using title vs autoscale t
+syn keyword gnuplotType x y z zcb
+syn keyword gnuplotType linear cubicspline bspline order level[s]
+syn keyword gnuplotType auto disc[rete] incr[emental] from to head nohead
+syn keyword gnuplotType graph base both nosurface table out[put] data
+syn keyword gnuplotType bar border noborder boxwidth
+syn keyword gnuplotType clabel noclabel clip noclip cntrp[aram]
+syn keyword gnuplotType contour nocontour
+syn keyword gnuplotType dgrid3d nodgrid3d dummy encoding format
+" set encoding args not included - yet.
+syn keyword gnuplotType function grid nogrid hidden[3d] nohidden[3d] isosample[s] key nokey
+syn keyword gnuplotType historysize nohistorysize
+syn keyword gnuplotType defaults offset nooffset trianglepattern undefined noundefined altdiagonal bentover noaltdiagonal nobentover
+syn keyword gnuplotType left right top bottom outside below samplen spacing width height box nobox linestyle ls linetype lt linewidth lw
+syn keyword gnuplotType Left Right autotitles noautotitles enhanced noenhanced
+syn keyword gnuplotType isosamples
+syn keyword gnuplotType label nolabel logscale nolog[scale] missing center font locale
+syn keyword gnuplotType mapping margin bmargin lmargin rmargin tmargin spherical cylindrical cartesian
+syn keyword gnuplotType linestyle nolinestyle linetype lt linewidth lw pointtype pt pointsize ps
+syn keyword gnuplotType mouse nomouse
+syn keyword gnuplotType nooffsets data candlesticks financebars linespoints lp vector nosurface
+syn keyword gnuplotType term[inal] linux aed767 aed512 gpic
+syn keyword gnuplotType regis tek410x tek40 vttek kc-tek40xx
+syn keyword gnuplotType km-tek40xx selanar bitgraph xlib x11 X11
+" x11 args
+syn keyword gnuplotType aifm cgm dumb fig gif small large size nofontlist winword6 corel dxf emf
+syn keyword gnuplotType hpgl
+" syn keyword gnuplotType transparent hp2623a hp2648 hp500c pcl5 why jeh
+syn keyword gnuplotType hp2623a hp2648 hp500c pcl5
+syn match gnuplotType "\<transparent\>"
+syn keyword gnuplotType hpljii hpdj hppj imagen mif pbm png svg
+syn keyword gnuplotType postscript enhanced_postscript qms table
+" postscript editing values?
+syn keyword gnuplotType tgif tkcanvas epson-180dpi epson-60dpi
+syn keyword gnuplotType epson-lx800 nec-cp6 okidata starc
+syn keyword gnuplotType tandy-60dpi latex emtex pslatex pstex epslatex
+syn keyword gnuplotType eepic tpic pstricks texdraw mf metafont mpost mp
+syn keyword gnuplotType timestamp notimestamp
+syn keyword gnuplotType variables version
+syn keyword gnuplotType x2data y2data ydata zdata
+syn keyword gnuplotType reverse writeback noreverse nowriteback
+syn keyword gnuplotType axis mirror autofreq nomirror rotate autofreq norotate
+syn keyword gnuplotType update
+syn keyword gnuplotType multiplot nomultiplot mytics
+syn keyword gnuplotType nomytics mztics nomztics mx2tics nomx2tics
+syn keyword gnuplotType my2tics nomy2tics offsets origin output
+syn keyword gnuplotType para[metric] nopara[metric] pointsize polar nopolar
+syn keyword gnuplotType zrange x2range y2range rrange cbrange
+syn keyword gnuplotType trange urange vrange sample[s] size
+syn keyword gnuplotType bezier boxerrorbars boxes bargraph bar[s]
+syn keyword gnuplotType boxxy[errorbars] csplines dots fsteps histeps impulses
+syn keyword gnuplotType line[s] linesp[oints] points poiinttype sbezier splines steps
+" w lt lw ls = optional
+syn keyword gnuplotType vectors xerr[orbars] xyerr[orbars] yerr[orbars] financebars candlesticks vector
+syn keyword gnuplotType errorb[ars surface
+syn keyword gnuplotType filledcurve[s] pm3d x1 x2 y1 y2 xy closed
+syn keyword gnuplotType at pi front
+syn keyword gnuplotType errorlines xerrorlines yerrorlines xyerrorlines
+syn keyword gnuplotType tics ticslevel ticscale time timefmt view
+syn keyword gnuplotType xdata xdtics noxdtics ydtics noydtics
+syn keyword gnuplotType zdtics nozdtics x2dtics nox2dtics y2dtics noy2dtics
+syn keyword gnuplotType xlab[el] ylab[el] zlab[el] cblab[el] x2label y2label xmtics
+syn keyword gnuplotType xmtics noxmtics ymtics noymtics zmtics nozmtics
+syn keyword gnuplotType x2mtics nox2mtics y2mtics noy2mtics
+syn keyword gnuplotType cbdtics nocbdtics cbmtics nocbmtics cbtics nocbtics
+syn keyword gnuplotType xtics noxtics ytics noytics
+syn keyword gnuplotType ztics noztics x2tics nox2tics
+syn keyword gnuplotType y2tics noy2tics zero nozero zeroaxis nozeroaxis
+syn keyword gnuplotType xzeroaxis noxzeroaxis yzeroaxis noyzeroaxis
+syn keyword gnuplotType x2zeroaxis nox2zeroaxis y2zeroaxis noy2zeroaxis
+syn keyword gnuplotType angles one two fill empty solid pattern
+syn keyword gnuplotType default
+syn keyword gnuplotType scansautomatic flush b[egin] noftriangles implicit
+" b too much? - used in demo
+syn keyword gnuplotType palette positive negative ps_allcF nops_allcF maxcolors
+syn keyword gnuplotType push fontfile pop
+syn keyword gnuplotType rgbformulae defined file color model gradient colornames
+syn keyword gnuplotType RGB HSV CMY YIQ XYZ
+syn keyword gnuplotType colorbox vertical horizontal user bdefault
+syn keyword gnuplotType loadpath fontpath decimalsign in out
+
+" comments + strings
+syn region gnuplotComment start="#" end="$"
+syn region gnuplotComment start=+"+ skip=+\\"+ end=+"+
+syn region gnuplotComment start=+'+ end=+'+
+
+" 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_gnuplot_syntax_inits")
+ if version < 508
+ let did_gnuplot_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gnuplotStatement Statement
+ HiLink gnuplotConditional Conditional
+ HiLink gnuplotNumber Number
+ HiLink gnuplotFloat Float
+ HiLink gnuplotOctalError Error
+ HiLink gnuplotFunc Type
+ HiLink gnuplotType Type
+ HiLink gnuplotComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gnuplot"
+
+" vim: ts=8
diff --git a/runtime/syntax/gp.vim b/runtime/syntax/gp.vim
new file mode 100644
index 000000000..1999749c0
--- /dev/null
+++ b/runtime/syntax/gp.vim
@@ -0,0 +1,79 @@
+" Vim syntax file
+" Language: gp (version 2.1)
+" Maintainer: Karim Belabas <Karim.Belabas@math.u-psud.fr>
+" Last change: 2001 Sep 02
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" some control statements
+syntax keyword gpStatement break return next
+syntax keyword gpConditional if
+syntax keyword gpRepeat until while for fordiv forprime forstep forvec
+syntax keyword gpScope local global
+
+syntax keyword gpInterfaceKey buffersize colors compatible debug debugmem
+syntax keyword gpInterfaceKey echo format help histsize log logfile output
+syntax keyword gpInterfaceKey parisize path primelimit prompt psfile
+syntax keyword gpInterfaceKey realprecision seriesprecision simplify
+syntax keyword gpInterfaceKey strictmatch timer
+
+syntax match gpInterface "^\s*\\[a-z].*"
+syntax keyword gpInterface default
+syntax keyword gpInput read input
+
+" functions
+syntax match gpFunRegion "^\s*[a-zA-Z][_a-zA-Z0-9]*(.*)\s*=\s*[^ \t=]"me=e-1 contains=gpFunction,gpArgs
+syntax match gpFunRegion "^\s*[a-zA-Z][_a-zA-Z0-9]*(.*)\s*=\s*$" contains=gpFunction,gpArgs
+syntax match gpArgs contained "[a-zA-Z][_a-zA-Z0-9]*"
+syntax match gpFunction contained "^\s*[a-zA-Z][_a-zA-Z0-9]*("me=e-1
+
+" String and Character constants
+" Highlight special (backslash'ed) characters differently
+syntax match gpSpecial contained "\\[ent\\]"
+syntax region gpString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gpSpecial
+
+"comments
+syntax region gpComment start="/\*" end="\*/" contains=gpTodo
+syntax match gpComment "\\\\.*" contains=gpTodo
+syntax keyword gpTodo contained TODO
+syntax sync ccomment gpComment minlines=10
+
+"catch errors caused by wrong parenthesis
+syntax region gpParen transparent start='(' end=')' contains=ALLBUT,gpParenError,gpTodo,gpFunction,gpArgs,gpSpecial
+syntax match gpParenError ")"
+syntax match gpInParen contained "[{}]"
+
+if version >= 508 || !exists("did_gp_syn_inits")
+ if version < 508
+ let did_gp_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gpConditional Conditional
+ HiLink gpRepeat Repeat
+ HiLink gpError Error
+ HiLink gpParenError gpError
+ HiLink gpInParen gpError
+ HiLink gpStatement Statement
+ HiLink gpString String
+ HiLink gpComment Comment
+ HiLink gpInterface Type
+ HiLink gpInput Type
+ HiLink gpInterfaceKey Statement
+ HiLink gpFunction Function
+ HiLink gpScope Type
+ " contained ones
+ HiLink gpSpecial Special
+ HiLink gpTodo Todo
+ HiLink gpArgs Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gp"
+" vim: ts=8
diff --git a/runtime/syntax/gpg.vim b/runtime/syntax/gpg.vim
new file mode 100644
index 000000000..23401969a
--- /dev/null
+++ b/runtime/syntax/gpg.vim
@@ -0,0 +1,72 @@
+" Vim syntax file
+" Language: GnuPG Configuration File.
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/gpg/
+" Latest Revision: 2004-05-06
+" arch-tag: 602305f7-d8ae-48ef-a68f-4d54f12af70a
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk 48-57,65-90,97-122,-
+delcommand SetIsk
+
+" comments
+syn region gpgComment contained display oneline start="#" end="$" contains=gpgTodo,gpgID
+
+" todo
+syn keyword gpgTodo contained FIXME TODO XXX NOTE
+
+" ids
+syn match gpgID contained display "\<\(0x\)\=\x\{8,}\>"
+
+syn match gpgBegin "^" skipwhite nextgroup=gpgComment,gpgOption,gpgCommand
+
+" commands that take args
+syn keyword gpgCommand contained skipwhite nextgroup=gpgArg check-sigs decrypt decrypt-files delete-key delete-secret-and-public-key delete-secret-key edit-key encrypt-files export export-all export-ownertrust export-secret-keys export-secret-subkeys fast-import fingerprint gen-prime gen-random import import-ownertrust list-keys list-public-keys list-secret-keys list-sigs lsign-key nrsign-key print-md print-mds recv-keys search-keys send-keys sign-key verify verify-files
+" commands that take no args
+syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError check-trustdb clearsign desig-revoke detach-sign encrypt gen-key gen-revoke help list-packets rebuild-keydb-caches sign store symmetric update-trustdb version warranty
+
+" options that take args
+syn keyword gpgOption contained skipwhite nextgroup=gpgArg attribute-fd cert-digest-algo charset cipher-algo command-fd comment completes-needed compress compress-algo debug default-cert-check-level default-key default-preference-list default-recipient digest-algo disable-cipher-algo disable-pubkey-algo encrypt-to exec-path export-options group homedir import-options keyring keyserver keyserver-options load-extension local-user logger-fd marginals-needed max-cert-depth notation-data options output override-session-key passphrase-fd personal-cipher-preferences personal-compress-preferences 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
+" options that take no args
+syn keyword gpgOption contained skipwhite nextgroup=gpgArgError allow-freeform-uid allow-non-selfsigned-uid allow-secret-key-import always-trust armor ask-cert-expire ask-sig-expire auto-check-trustdb batch debug-all default-comment default-recipient-self dry-run emit-version emulate-md-encode-bug enable-special-filenames escape-from-lines expert fast-list-mode fixed-list-mode for-your-eyes-only force-mdc force-v3-sigs force-v4-certs gpg-agent-info ignore-crc-error ignore-mdc-error ignore-time-conflict ignore-valid-from interactive list-only lock-multiple lock-never lock-once merge-only no no-allow-non-selfsigned-uid no-armor no-ask-cert-expire no-ask-sig-expire no-auto-check-trustdb no-batch no-comment no-default-keyring no-default-recipient no-encrypt-to no-expensive-trust-checks no-expert no-for-your-eyes-only no-force-v3-sigs no-force-v4-certs no-greeting no-literal no-mdc-warning no-options no-permission-warning no-pgp2 no-pgp6 no-pgp7 no-random-seed-file no-secmem-warning no-show-notation no-show-photos no-show-policy-url no-sig-cache no-sig-create-check no-sk-comments no-tty no-utf8-strings no-verbose no-version not-dash-escaped openpgp pgp2 pgp6 pgp7 preserve-permissions quiet rfc1991 set-filesize show-keyring show-notation show-photos show-policy-url show-session-key simple-sk-checksum sk-comments skip-verify textmode throw-keyid try-all-secrets use-agent use-embedded-filename utf8-strings verbose with-colons with-fingerprint with-key-data yes
+
+" arguments to commands and options
+syn match gpgArg contained display "\S\+\(\s\+\S\+\)*" contains=gpgID
+syn match gpgArgError contained display "\S\+\(\s\+\S\+\)*"
+
+" 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_gpg_syn_inits")
+ if version < 508
+ let did_gpg_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gpgComment Comment
+ HiLink gpgTodo Todo
+ HiLink gpgID Number
+ HiLink gpgOption Keyword
+ HiLink gpgCommand Error
+ HiLink gpgArgError Error
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gpg"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/grads.vim b/runtime/syntax/grads.vim
new file mode 100644
index 000000000..0b88549d4
--- /dev/null
+++ b/runtime/syntax/grads.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: grads (GrADS scripts)
+" Maintainer: Stefan Fronzek (sfronzek at gmx dot net)
+" Last change: 13 Feb 2004
+
+" Grid Analysis and Display System (GrADS); http://grads.iges.org/grads
+" This syntax file defines highlighting for only very few features of
+" the GrADS scripting language.
+
+" 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
+
+" GrADS is entirely case-insensitive.
+syn case ignore
+
+" The keywords
+
+syn keyword gradsStatement if else endif break exit return
+syn keyword gradsStatement while endwhile say prompt pull function
+syn keyword gradsStatement subwrd sublin substr read write close
+" String
+
+syn region gradsString start=+'+ end=+'+
+
+" Integer number
+syn match gradsNumber "[+-]\=\<[0-9]\+\>"
+
+" Operator
+
+"syn keyword gradsOperator | ! % & != >=
+"syn match gradsOperator "[^\.]not[^a-zA-Z]"
+
+" Variables
+
+syn keyword gradsFixVariables lat lon lev result rec rc
+syn match gradsglobalVariables "_[a-zA-Z][a-zA-Z0-9]*"
+syn match gradsVariables "[a-zA-Z][a-zA-Z0-9]*"
+syn match gradsConst "#[A-Z][A-Z_]+"
+
+" Comments
+
+syn match gradsComment "\*.*"
+
+" Typical Typos
+
+" for C programmers:
+" syn match gradsTypos "=="
+" syn match gradsTypos "!="
+
+" 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 hgs highlighting+yet
+if version >= 508 || !exists("did_gs_syn_inits")
+ if version < 508
+ let did_gs_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gradsStatement Statement
+
+ HiLink gradsString String
+ HiLink gradsNumber Number
+
+ HiLink gradsFixVariables Special
+ HiLink gradsVariables Identifier
+ HiLink gradsglobalVariables Special
+ HiLink gradsConst Special
+
+ HiLink gradsClassMethods Function
+
+ HiLink gradsOperator Operator
+ HiLink gradsComment Comment
+
+ HiLink gradsTypos Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "grads"
diff --git a/runtime/syntax/groff.vim b/runtime/syntax/groff.vim
new file mode 100644
index 000000000..d4dc0cc4f
--- /dev/null
+++ b/runtime/syntax/groff.vim
@@ -0,0 +1,10 @@
+" VIM syntax file
+" Language: groff
+" Maintainer: Alejandro López-Valencia <dradul@yahoo.com>
+" URL: http://dradul.tripod.com/vim
+" Last Change: 2003-05-08-12:41:13 GMT-5.
+
+" This uses the nroff.vim syntax file.
+let b:main_syntax = "nroff"
+let b:nroff_is_groff = 1
+runtime! syntax/nroff.vim
diff --git a/runtime/syntax/grub.vim b/runtime/syntax/grub.vim
new file mode 100644
index 000000000..e87a8d93e
--- /dev/null
+++ b/runtime/syntax/grub.vim
@@ -0,0 +1,77 @@
+" Vim syntax file
+" Language: GRUB Configuration File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/grub/
+" Latest Revision: 2004-05-06
+" arch-tag: 7a56ddd0-e551-44bc-b8c0-235fedbdf3c0
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" comments
+syn region grubComment display oneline start="^#" end="$" contains=grubTodo
+
+" todo
+syn keyword grubTodo contained TODO FIXME XXX NOTE
+
+" devices
+syn match grubDevice display "(\([fh]d\d\|\d\+\|0x\x\+\)\(,\d\+\)\=\(,\l\)\=)"
+
+" block lists
+syn match grubBlock display "\(\d\+\)\=+\d\+\(,\(\d\+\)\=+\d\+\)*"
+
+" numbers
+syn match grubNumbers display "+\=\<\d\+\|0x\x\+\>"
+
+syn match grubBegin display "^" nextgroup=grubCommand,grubComment skipwhite
+
+" menu commands
+syn keyword grubCommand contained default fallback hiddenmenu timeout title
+
+" general commands
+syn keyword grubCommand contained bootp color device dhcp hide ifconfig pager
+syn keyword grubCommand contained partnew parttype password rarp serial setkey
+syn keyword grubCommand contained terminal tftpserver unhide blocklist boot cat
+syn keyword grubCommand contained chainloader cmp configfile debug displayapm
+syn keyword grubCommand contained displaymem embed find fstest geometry halt help
+syn keyword grubCommand contained impsprobe initrd install ioprobe kernel lock
+syn keyword grubCommand contained makeactive map md5crypt module modulenounzip pause
+syn keyword grubCommand contained quit reboot read root rootnoverify savedefault
+syn keyword grubCommand contained setup testload testvbe uppermem vbeprobe
+
+" colors
+syn match grubColor "\(blink-\)\=\(black\|blue\|green\|cyan\|red\|magenta\|brown\|yellow\|white\)"
+syn match grubColor "\<\(blink-\)\=light-\(gray\|blue\|green\|cyan\|red\|magenta\)"
+syn match grubColor "\<\(blink-\)\=dark-gray"
+
+" specials
+syn keyword grubSpecial saved
+
+" 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_grub_syn_inits")
+ if version < 508
+ let did_grub_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink grubComment Comment
+ HiLink grubTodo Todo
+ HiLink grubNumbers Number
+ HiLink grubDevice Identifier
+ HiLink grubBlock Identifier
+ HiLink grubCommand Keyword
+ HiLink grubColor Identifier
+ HiLink grubSpecial Special
+ delcommand HiLink
+endif
+
+let b:current_syntax = "grub"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/gsp.vim b/runtime/syntax/gsp.vim
new file mode 100644
index 000000000..e7766c5b5
--- /dev/null
+++ b/runtime/syntax/gsp.vim
@@ -0,0 +1,59 @@
+" Vim syntax file
+" Language: GSP - GNU Server Pages (v. 0.86)
+" Created By: Nathaniel Harward nharward@yahoo.com
+" Last Changed: Dec. 12, 2000
+" Filenames: *.gsp
+" URL: http://www.constructicon.com/~nharward/vim/syntax/gsp.vim
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'gsp'
+endif
+
+" Source HTML syntax
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+unlet b:current_syntax
+
+syn case match
+
+" Include Java syntax
+if version < 600
+ syn include @gspJava <sfile>:p:h/java.vim
+else
+ syn include @gspJava syntax/java.vim
+endif
+
+" Add <java> as an HTML tag name along with its args
+syn keyword htmlTagName contained java
+syn keyword htmlArg contained type file page
+
+" Redefine some HTML things to include (and highlight) gspInLine code in
+" places where it's likely to be found
+syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,gspInLine
+syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,gspInLine
+syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc,gspInLine
+syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError,gspInLine
+syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,gspInLine
+syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster,gspInLine
+syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster,gspInLine
+
+" Define the GSP java code blocks
+syn region gspJavaBlock start="<java\>[^>]*\>" end="</java>"me=e-7 contains=@gspJava,htmlTag
+syn region gspInLine matchgroup=htmlError start="`" end="`" contains=@gspJava
+
+let b:current_syntax = "gsp"
+
+if main_syntax == 'gsp'
+ unlet main_syntax
+endif
diff --git a/runtime/syntax/gtkrc.vim b/runtime/syntax/gtkrc.vim
new file mode 100644
index 000000000..57054a21d
--- /dev/null
+++ b/runtime/syntax/gtkrc.vim
@@ -0,0 +1,142 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: Gtk+ theme files `gtkrc'
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-10-31
+" URL: http://trific.ath.cx/Ftp/vim/syntax/gtkrc.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if version >= 600
+ setlocal iskeyword=_,-,a-z,A-Z,48-57
+else
+ set iskeyword=_,-,a-z,A-Z,48-57
+endif
+
+syn case match
+
+" Base constructs
+syn match gtkrcComment "#.*$" contains=gtkrcFixme
+syn keyword gtkrcFixme FIXME TODO XXX NOT contained
+syn region gtkrcACString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=gtkrcWPathSpecial,gtkrcClassName,gtkrcClassNameGnome contained
+syn region gtkrcBString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline contains=gtkrcKeyMod contained
+syn region gtkrcString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gtkrcStockName,gtkrcPathSpecial,gtkrcRGBColor
+syn match gtkrcPathSpecial "<parent>" contained
+syn match gtkrcWPathSpecial "[*?.]" contained
+syn match gtkrcNumber "^\(\d\+\)\=\.\=\d\+"
+syn match gtkrcNumber "\W\(\d\+\)\=\.\=\d\+"lc=1
+syn match gtkrcRGBColor "#\(\x\{12}\|\x\{9}\|\x\{6}\|\x\{3}\)" contained
+syn cluster gtkrcPRIVATE add=gtkrcFixme,gtkrcPathSpecial,gtkrcWPathSpecial,gtkrcRGBColor,gtkrcACString
+
+" Keywords
+syn keyword gtkrcInclude include
+syn keyword gtkrcPathSet module_path pixmap_path
+syn keyword gtkrcTop binding style
+syn keyword gtkrcTop widget widget_class nextgroup=gtkrcACString skipwhite
+syn keyword gtkrcTop class nextgroup=gtkrcACString skipwhite
+syn keyword gtkrcBind bind nextgroup=gtkrcBString skipwhite
+syn keyword gtkrcStateName NORMAL INSENSITIVE PRELIGHT ACTIVE SELECTED
+syn keyword gtkrcPriorityName HIGHEST RC APPLICATION GTK LOWEST
+syn keyword gtkrcPriorityName highest rc application gtk lowest
+syn keyword gtkrcTextDirName LTR RTL
+syn keyword gtkrcStyleKeyword fg bg fg_pixmap bg_pixmap bg_text base font font_name fontset stock text
+syn match gtkrcKeyMod "<\(alt\|ctrl\|control\|mod[1-5]\|release\|shft\|shift\)>" contained
+syn cluster gtkrcPRIVATE add=gtkrcKeyMod
+
+" Enums and engine words
+syn keyword gtkrcKeyword engine image
+syn keyword gtkrcImage arrow_direction border detail file gap_border gap_end_border gap_end_file gap_file gap_side gap_side gap_start_border gap_start_file orientation overlay_border overlay_file overlay_stretch recolorable shadow state stretch thickness
+syn keyword gtkrcConstant TRUE FALSE NONE IN OUT LEFT RIGHT TOP BOTTOM UP DOWN VERTICAL HORIZONTAL ETCHED_IN ETCHED_OUT
+syn keyword gtkrcFunction function nextgroup=gtkrcFunctionEq skipwhite
+syn match gtkrcFunctionEq "=" nextgroup=gtkrcFunctionName contained skipwhite
+syn keyword gtkrcFunctionName ARROW BOX BOX_GAP CHECK CROSS DIAMOND EXTENSION FLAT_BOX FOCUS HANDLE HLINE OPTION OVAL POLYGON RAMP SHADOW SHADOW_GAP SLIDER STRING TAB VLINE contained
+syn cluster gtkrcPRIVATE add=gtkrcFunctionName,gtkrcFunctionEq
+
+" Class names
+syn keyword gtkrcClassName GtkAccelLabel GtkAdjustment GtkAlignment GtkArrow GtkAspectFrame GtkBin GtkBox GtkButton GtkButtonBox GtkCList GtkCTree GtkCalendar GtkCheckButton GtkCheckMenuItem GtkColorSelection GtkColorSelectionDialog GtkCombo GtkContainer GtkCurve GtkData GtkDialog GtkDrawingArea GtkEditable GtkEntry GtkEventBox GtkFileSelection GtkFixed GtkFontSelection GtkFontSelectionDialog GtkFrame GtkGammaCurve GtkHBox GtkHButtonBox GtkHPaned GtkHRuler GtkHScale GtkHScrollbar GtkHSeparator GtkHandleBox GtkImage GtkImageMenuItem GtkInputDialog GtkInvisible GtkItem GtkItemFactory GtkLabel GtkLayout GtkList GtkListItem GtkMenu GtkMenuBar GtkMenuItem GtkMenuShell GtkMessageDialog GtkMisc GtkNotebook GtkObject GtkOptionMenu GtkPacker GtkPaned GtkPixmap GtkPlug GtkPreview GtkProgress GtkProgressBar GtkRadioButton GtkRadioMenuItem GtkRange GtkRuler GtkScale GtkScrollbar GtkScrolledWindow GtkSeparatorMenuItem GtkSocket GtkSpinButton GtkStatusbar GtkTable GtkTearoffMenuItem GtkText GtkTextBuffer GtkTextMark GtkTextTag GtkTextView GtkTipsQuery GtkToggleButton GtkToolbar GtkTooltips GtkTree GtkTreeView GtkTreeItem GtkVBox GtkVButtonBox GtkVPaned GtkVRuler GtkVScale GtkVScrollbar GtkVSeparator GtkViewport GtkWidget GtkWindow GtkWindowGroup contained
+syn keyword gtkrcClassName AccelLabel Adjustment Alignment Arrow AspectFrame Bin Box Button ButtonBox CList CTree Calendar CheckButton CheckMenuItem ColorSelection ColorSelectionDialog Combo Container Curve Data Dialog DrawingArea Editable Entry EventBox FileSelection Fixed FontSelection FontSelectionDialog Frame GammaCurve HBox HButtonBox HPaned HRuler HScale HScrollbar HSeparator HandleBox Image ImageMenuItem InputDialog Invisible Item ItemFactory Label Layout List ListItem Menu MenuBar MenuItem MenuShell MessageDialog Misc Notebook Object OptionMenu Packer Paned Pixmap Plug Preview Progress ProgressBar RadioButton RadioMenuItem Range Ruler Scale Scrollbar ScrolledWindow SeparatorMenuItem Socket SpinButton Statusbar Table TearoffMenuItem Text TextBuffer TextMark TextTag TextView TipsQuery ToggleButton Toolbar Tooltips Tree TreeView TreeItem VBox VButtonBox VPaned VRuler VScale VScrollbar VSeparator Viewport Widget Window WindowGroup contained
+syn keyword gtkrcClassNameGnome GnomeAbout GnomeAnimator GnomeApp GnomeAppBar GnomeCalculator GnomeCanvas GnomeCanvasEllipse GnomeCanvasGroup GnomeCanvasImage GnomeCanvasItem GnomeCanvasLine GnomeCanvasPolygon GnomeCanvasRE GnomeCanvasRect GnomeCanvasText GnomeCanvasWidget GnomeClient GnomeColorPicker GnomeDEntryEdit GnomeDateEdit GnomeDialog GnomeDock GnomeDockBand GnomeDockItem GnomeDockLayout GnomeDruid GnomeDruidPage GnomeDruidPageFinish GnomeDruidPageStandard GnomeDruidPageStart GnomeEntry GnomeFileEntry GnomeFontPicker GnomeFontSelector GnomeHRef GnomeIconEntry GnomeIconList GnomeIconSelection GnomeIconTextItem GnomeLess GnomeMDI GnomeMDIChild GnomeMDIGenericChild GnomeMessageBox GnomeNumberEntry GnomePaperSelector GnomePixmap GnomePixmapEntry GnomeProcBar GnomePropertyBox GnomeScores GnomeSpell GnomeStock GtkClock GtkDial GtkPixmapMenuItem GtkTed contained
+syn cluster gtkrcPRIVATE add=gtkrcClassName,gtkrcClassNameGnome
+
+" Stock item names
+syn keyword gtkrcStockName gtk-add gtk-apply gtk-bold gtk-cancel gtk-cdrom gtk-clear gtk-close gtk-convert gtk-copy gtk-cut gtk-delete gtk-dialog-error gtk-dialog-info gtk-dialog-question gtk-dialog-warning gtk-dnd gtk-dnd-multiple gtk-execute gtk-find gtk-find-and-replace gtk-floppy gtk-goto-bottom gtk-goto-first gtk-goto-last gtk-goto-top gtk-go-back gtk-go-down gtk-go-forward gtk-go-up gtk-help gtk-home gtk-index gtk-italic gtk-jump-to gtk-justify-center gtk-justify-fill gtk-justify-left gtk-justify-right gtk-missing-image gtk-new gtk-no gtk-ok gtk-open gtk-paste gtk-preferences gtk-print gtk-print-preview gtk-properties gtk-quit gtk-redo gtk-refresh gtk-remove gtk-revert-to-saved gtk-save gtk-save-as gtk-select-color gtk-select-font gtk-sort-ascending gtk-sort-descending gtk-spell-check gtk-stop gtk-strikethrough gtk-undelete gtk-underline gtk-undo gtk-yes gtk-zoom-100 gtk-zoom-fit gtk-zoom-in gtk-zoom-out contained
+syn cluster gtkrcPRIVATE add=gtkrcStockName
+
+" Gtk Settings
+syn keyword gtkrcSettingsName gtk-double-click-time gtk-cursor-blink gtk-cursor-blink-time gtk-split-cursor gtk-theme-name gtk-key-theme-name gtk-menu-bar-accel gtk-dnd-drag-threshold gtk-font-name gtk-color-palette gtk-entry-select-on-focus gtk-can-change-accels gtk-toolbar-style gtk-toolbar-icon-size
+syn cluster gtkrcPRIVATE add=gtkrcSettingsName
+
+" Catch errors caused by wrong parenthesization
+syn region gtkrcParen start='(' end=')' transparent contains=ALLBUT,gtkrcParenError,@gtkrcPRIVATE
+syn match gtkrcParenError ")"
+syn region gtkrcBrace start='{' end='}' transparent contains=ALLBUT,gtkrcBraceError,@gtkrcPRIVATE
+syn match gtkrcBraceError "}"
+syn region gtkrcBracket start='\[' end=']' transparent contains=ALLBUT,gtkrcBracketError,@gtkrcPRIVATE
+syn match gtkrcBracketError "]"
+
+" Synchronization
+syn sync minlines=50
+syn sync match gtkrcSyncClass groupthere NONE "^\s*class\>"
+
+" Define the default highlighting
+if version >= 508 || !exists("did_gtkrc_syntax_inits")
+ if version < 508
+ let did_gtkrc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink gtkrcComment Comment
+ HiLink gtkrcFixme Todo
+
+ HiLink gtkrcInclude Preproc
+
+ HiLink gtkrcACString gtkrcString
+ HiLink gtkrcBString gtkrcString
+ HiLink gtkrcString String
+ HiLink gtkrcNumber Number
+ HiLink gtkrcStateName gtkrcConstant
+ HiLink gtkrcPriorityName gtkrcConstant
+ HiLink gtkrcTextDirName gtkrcConstant
+ HiLink gtkrcSettingsName Function
+ HiLink gtkrcStockName Function
+ HiLink gtkrcConstant Constant
+
+ HiLink gtkrcPathSpecial gtkrcSpecial
+ HiLink gtkrcWPathSpecial gtkrcSpecial
+ HiLink gtkrcRGBColor gtkrcSpecial
+ HiLink gtkrcKeyMod gtkrcSpecial
+ HiLink gtkrcSpecial Special
+
+ HiLink gtkrcTop gtkrcKeyword
+ HiLink gtkrcPathSet gtkrcKeyword
+ HiLink gtkrcStyleKeyword gtkrcKeyword
+ HiLink gtkrcFunction gtkrcKeyword
+ HiLink gtkrcBind gtkrcKeyword
+ HiLink gtkrcKeyword Keyword
+
+ HiLink gtkrcClassNameGnome gtkrcGtkClass
+ HiLink gtkrcClassName gtkrcGtkClass
+ HiLink gtkrcFunctionName gtkrcGtkClass
+ HiLink gtkrcGtkClass Type
+
+ HiLink gtkrcImage gtkrcOtherword
+ HiLink gtkrcOtherword Function
+
+ HiLink gtkrcParenError gtkrcError
+ HiLink gtkrcBraceError gtkrcError
+ HiLink gtkrcBracketError gtkrcError
+ HiLink gtkrcError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "gtkrc"
diff --git a/runtime/syntax/haskell.vim b/runtime/syntax/haskell.vim
new file mode 100644
index 000000000..21fcf81f5
--- /dev/null
+++ b/runtime/syntax/haskell.vim
@@ -0,0 +1,193 @@
+" Vim syntax file
+" Language: Haskell
+" Maintainer: Haskell Cafe mailinglist <haskell-cafe@haskell.org>
+" Last Change: 2004 Feb 23
+" Original Author: John Williams <jrw@pobox.com>
+"
+" Thanks to Ryan Crumley for suggestions and John Meacham for
+" pointing out bugs. Also thanks to Ian Lynagh and Donald Bruce Stewart
+" for providing the inspiration for the inclusion of the handling
+" of C preprocessor directives, and for pointing out a bug in the
+" end-of-line comment handling.
+"
+" Options-assign a value to these variables to turn the option on:
+"
+" hs_highlight_delimiters - Highlight delimiter characters--users
+" with a light-colored background will
+" probably want to turn this on.
+" hs_highlight_boolean - Treat True and False as keywords.
+" hs_highlight_types - Treat names of primitive types as keywords.
+" hs_highlight_more_types - Treat names of other common types as keywords.
+" hs_highlight_debug - Highlight names of debugging functions.
+" hs_allow_hash_operator - Don't highlight seemingly incorrect C
+" preprocessor directives but assume them to be
+" operators
+"
+" 2004 Feb 19: Added C preprocessor directive handling, corrected eol comments
+" cleaned away literate haskell support (should be entirely in
+" lhaskell.vim)
+" 2004 Feb 20: Cleaned up C preprocessor directive handling, fixed single \
+" in eol comment character class
+" 2004 Feb 23: Made the leading comments somewhat clearer where it comes
+" to attribution of work.
+
+" Remove any old syntax stuff hanging around
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" (Qualified) identifiers (no default highlighting)
+syn match ConId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[A-Z][a-zA-Z0-9_']*\>"
+syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[a-z][a-zA-Z0-9_']*\>"
+
+" Infix operators--most punctuation characters and any (qualified) identifier
+" enclosed in `backquotes`. An operator starting with : is a constructor,
+" others are variables (e.g. functions).
+syn match hsVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*"
+syn match hsConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*"
+syn match hsVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`"
+syn match hsConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`"
+
+" Reserved symbols--cannot be overloaded.
+syn match hsDelimiter "(\|)\|\[\|\]\|,\|;\|_\|{\|}"
+
+" Strings and constants
+syn match hsSpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)"
+syn match hsSpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)"
+syn match hsSpecialCharError contained "\\&\|'''\+"
+syn region hsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=hsSpecialChar
+syn match hsCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=hsSpecialChar,hsSpecialCharError
+syn match hsCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=hsSpecialChar,hsSpecialCharError
+syn match hsNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
+syn match hsFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
+
+" Keyword definitions. These must be patters instead of keywords
+" because otherwise they would match as keywords at the start of a
+" "literate" comment (see lhs.vim).
+syn match hsModule "\<module\>"
+syn match hsImport "\<import\>.*"he=s+6 contains=hsImportMod
+syn match hsImportMod contained "\<\(as\|qualified\|hiding\)\>"
+syn match hsInfix "\<\(infix\|infixl\|infixr\)\>"
+syn match hsStructure "\<\(class\|data\|deriving\|instance\|default\|where\)\>"
+syn match hsTypedef "\<\(type\|newtype\)\>"
+syn match hsStatement "\<\(do\|case\|of\|let\|in\)\>"
+syn match hsConditional "\<\(if\|then\|else\)\>"
+
+" Not real keywords, but close.
+if exists("hs_highlight_boolean")
+ " Boolean constants from the standard prelude.
+ syn match hsBoolean "\<\(True\|False\)\>"
+endif
+if exists("hs_highlight_types")
+ " Primitive types from the standard prelude and libraries.
+ syn match hsType "\<\(Int\|Integer\|Char\|Bool\|Float\|Double\|IO\|Void\|Addr\|Array\|String\)\>"
+endif
+if exists("hs_highlight_more_types")
+ " Types from the standard prelude libraries.
+ syn match hsType "\<\(Maybe\|Either\|Ratio\|Complex\|Ordering\|IOError\|IOResult\|ExitCode\)\>"
+ syn match hsMaybe "\<Nothing\>"
+ syn match hsExitCode "\<\(ExitSuccess\)\>"
+ syn match hsOrdering "\<\(GT\|LT\|EQ\)\>"
+endif
+if exists("hs_highlight_debug")
+ " Debugging functions from the standard prelude.
+ syn match hsDebug "\<\(undefined\|error\|trace\)\>"
+endif
+
+
+" Comments
+syn match hsLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$"
+syn region hsBlockComment start="{-" end="-}" contains=hsBlockComment
+syn region hsPragma start="{-#" end="#-}"
+
+" C Preprocessor directives. Shamelessly ripped from c.vim and trimmed
+" First, see whether to flag directive-like lines or not
+if (!exists("hs_allow_hash_operator"))
+ syn match cError display "^\s*\(%:\|#\).*$"
+endif
+" Accept %: for # (C99)
+syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCommentError
+syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
+syn region cCppOut2 contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cCppSkip
+syn region cCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cCppSkip
+syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match cIncluded display contained "<[^>]*>"
+syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
+syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cCppOut,cCppOut2,cCppSkip,cCommentStartError
+syn region cDefine matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$"
+syn region cPreProc matchgroup=cPreCondit start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend
+
+syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=cCommentStartError,cSpaceError contained
+syntax match cCommentError display "\*/" contained
+syntax match cCommentStartError display "/\*"me=e-1 contained
+syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial contained
+
+" 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_hs_syntax_inits")
+ if version < 508
+ let did_hs_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink hsModule hsStructure
+ HiLink hsImport Include
+ HiLink hsImportMod hsImport
+ HiLink hsInfix PreProc
+ HiLink hsStructure Structure
+ HiLink hsStatement Statement
+ HiLink hsConditional Conditional
+ HiLink hsSpecialChar SpecialChar
+ HiLink hsTypedef Typedef
+ HiLink hsVarSym hsOperator
+ HiLink hsConSym hsOperator
+ HiLink hsOperator Operator
+ if exists("hs_highlight_delimiters")
+ " Some people find this highlighting distracting.
+ HiLink hsDelimiter Delimiter
+ endif
+ HiLink hsSpecialCharError Error
+ HiLink hsString String
+ HiLink hsCharacter Character
+ HiLink hsNumber Number
+ HiLink hsFloat Float
+ HiLink hsConditional Conditional
+ HiLink hsLiterateComment hsComment
+ HiLink hsBlockComment hsComment
+ HiLink hsLineComment hsComment
+ HiLink hsComment Comment
+ HiLink hsPragma SpecialComment
+ HiLink hsBoolean Boolean
+ HiLink hsType Type
+ HiLink hsMaybe hsEnumConst
+ HiLink hsOrdering hsEnumConst
+ HiLink hsEnumConst Constant
+ HiLink hsDebug Debug
+
+ HiLink cCppString hsString
+ HiLink cCommentStart hsComment
+ HiLink cCommentError hsError
+ HiLink cCommentStartError hsError
+ HiLink cInclude Include
+ HiLink cPreProc PreProc
+ HiLink cDefine Macro
+ HiLink cIncluded hsString
+ HiLink cError Error
+ HiLink cPreCondit PreCondit
+ HiLink cComment Comment
+ HiLink cCppSkip cCppOut
+ HiLink cCppOut2 cCppOut
+ HiLink cCppOut Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "haskell"
+
+" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim
diff --git a/runtime/syntax/hb.vim b/runtime/syntax/hb.vim
new file mode 100644
index 000000000..6df30543b
--- /dev/null
+++ b/runtime/syntax/hb.vim
@@ -0,0 +1,97 @@
+" Vim syntax file
+" Language: Hyper Builder
+" Maintainer: Alejandro Forero Cuervo
+" URL: http://bachue.com/hb/vim/syntax/hb.vim
+" Last Change: 2001 Sep 02
+
+" 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 HTML syntax to start with
+"syn include @HTMLStuff <sfile>:p:h/htmlhb.vim
+
+"this would be nice but we are supposed not to do it
+"set mps=<:>
+
+"syn region HBhtmlString contained start=+"+ end=+"+ contains=htmlSpecialChar
+"syn region HBhtmlString contained start=+'+ end=+'+ contains=htmlSpecialChar
+
+"syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"
+
+syn match htmlSpecialChar "&[^;]*;" contained
+
+syn match HBhtmlTagSk contained "[A-Za-z]*"
+
+syn match HBhtmlTagS contained "<\s*\(hb\s*\.\s*\(sec\|min\|hour\|day\|mon\|year\|input\|html\|time\|getcookie\|streql\|url-enc\)\|wall\s*\.\s*\(show\|info\|id\|new\|rm\|count\)\|auth\s*\.\s*\(chk\|add\|find\|user\)\|math\s*\.\s*exp\)\s*\([^.A-Za-z0-9]\|$\)" contains=HBhtmlTagSk transparent
+
+syn match HBhtmlTagN contained "[A-Za-z0-9\/\-]\+"
+
+syn match HBhtmlTagB contained "<\s*[A-Za-z0-9\/\-]\+\(\s*\.\s*[A-Za-z0-9\/\-]\+\)*" contains=HBhtmlTagS,HBhtmlTagN
+
+syn region HBhtmlTag contained start=+<+ end=+>+ contains=HBhtmlTagB,HBDirectiveError
+
+syn match HBFileName ".*" contained
+
+syn match HBDirectiveKeyword ":\s*\(include\|lib\|set\|out\)\s\+" contained
+
+syn match HBDirectiveError "^:.*$" contained
+
+"syn match HBDirectiveBlockEnd "^:\s*$" contained
+
+"syn match HBDirectiveOutHead "^:\s*out\s\+\S\+.*" contained contains=HBDirectiveKeyword,HBFileName
+
+"syn match HBDirectiveSetHead "^:\s*set\s\+\S\+.*" contained contains=HBDirectiveKeyword,HBFileName
+
+syn match HBInvalidLine "^.*$"
+
+syn match HBDirectiveInclude "^:\s*include\s\+\S\+.*$" contains=HBFileName,HBDirectiveKeyword
+
+syn match HBDirectiveLib "^:\s*lib\s\+\S\+.*$" contains=HBFileName,HBDirectiveKeyword
+
+syn region HBText matchgroup=HBDirectiveKeyword start=/^:\(set\|out\)\s*\S\+.*$/ end=/^:\s*$/ contains=HBDirectiveError,htmlSpecialChar,HBhtmlTag keepend
+
+"syn match HBLine "^:.*$" contains=HBDirectiveInclude,HBDirectiveLib,HBDirectiveError,HBDirectiveSet,HBDirectiveOut
+
+syn match HBComment "^#.*$"
+
+" 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_hb_syntax_inits")
+ if version < 508
+ let did_hb_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink HBhtmlString String
+ HiLink HBhtmlTagN Function
+ HiLink htmlSpecialChar String
+
+ HiLink HBInvalidLine Error
+ HiLink HBFoobar Comment
+ hi HBFileName guibg=lightgray guifg=black
+ HiLink HBDirectiveError Error
+ HiLink HBDirectiveBlockEnd HBDirectiveKeyword
+ hi HBDirectiveKeyword guibg=lightgray guifg=darkgreen
+ HiLink HBComment Comment
+ HiLink HBhtmlTagSk Statement
+
+ delcommand HiLink
+endif
+
+syn sync match Normal grouphere NONE "^:\s*$"
+syn sync match Normal grouphere NONE "^:\s*lib\s\+[^ \t]\+$"
+syn sync match Normal grouphere NONE "^:\s*include\s\+[^ \t]\+$"
+"syn sync match Block grouphere HBDirectiveSet "^#:\s*set\s\+[^ \t]\+"
+"syn sync match Block grouphere HBDirectiveOut "^#:\s*out\s\+[^ \t]\+"
+
+let b:current_syntax = "hb"
+
+" vim: ts=8
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
new file mode 100644
index 000000000..0e7a550d3
--- /dev/null
+++ b/runtime/syntax/help.vim
@@ -0,0 +1,187 @@
+" Vim syntax file
+" Language: Vim help file
+" Maintainer: Bram Moolenaar (Bram@vim.org)
+" Last Change: 2004 May 17
+
+" 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 match helpHeadline "^[A-Z ]\+[ ]\+\*"me=e-1
+syn match helpSectionDelim "^=\{3,}.*===$"
+syn match helpSectionDelim "^-\{3,}.*--$"
+syn region helpExample matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
+if has("ebcdic")
+ syn match helpHyperTextJump "\\\@<!|[^"*|]\+|"
+ syn match helpHyperTextEntry "\*[^"*|]\+\*\s"he=e-1
+ syn match helpHyperTextEntry "\*[^"*|]\+\*$"
+else
+ syn match helpHyperTextJump "\\\@<!|[#-)!+-~]\+|"
+ syn match helpHyperTextEntry "\*[#-)!+-~]\+\*\s"he=e-1
+ syn match helpHyperTextEntry "\*[#-)!+-~]\+\*$"
+endif
+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 helpHeader "\s*\zs.\{-}\ze\s\=\~$" nextgroup=helpIgnore
+syn match helpIgnore "." contained
+syn keyword helpNote note Note NOTE note: Note: NOTE: Notes Notes:
+syn match helpSpecial "\<N\>"
+syn match helpSpecial "\<N\.$"me=e-1
+syn match helpSpecial "\<N\.\s"me=e-2
+syn match helpSpecial "(N\>"ms=s+1
+syn match helpSpecial "\[N]"
+" avoid highlighting N N in help.txt
+syn match helpSpecial "N N"he=s+1
+syn match helpSpecial "Nth"me=e-2
+syn match helpSpecial "N-1"me=e-2
+syn match helpSpecial "{[-a-zA-Z0-9'":%#=[\]<>.,]\+}"
+syn match helpSpecial "{[-a-zA-Z0-9'"*+/:%#=[\]<>.,]\+}"
+syn match helpSpecial "\s\[[-a-z^A-Z0-9_]\{2,}]"ms=s+1
+syn match helpSpecial "<[-a-zA-Z0-9_]\+>"
+syn match helpSpecial "<[SCM]-.>"
+syn match helpNormal "<---*>"
+syn match helpSpecial "\[range]"
+syn match helpSpecial "\[line]"
+syn match helpSpecial "\[count]"
+syn match helpSpecial "\[offset]"
+syn match helpSpecial "\[cmd]"
+syn match helpSpecial "\[num]"
+syn match helpSpecial "\[+num]"
+syn match helpSpecial "\[-num]"
+syn match helpSpecial "\[+cmd]"
+syn match helpSpecial "\[++opt]"
+syn match helpSpecial "\[arg]"
+syn match helpSpecial "\[arguments]"
+syn match helpSpecial "\[ident]"
+syn match helpSpecial "\[addr]"
+syn match helpSpecial "\[group]"
+syn match helpSpecial "CTRL-."
+syn match helpSpecial "CTRL-Break"
+syn match helpSpecial "CTRL-PageUp"
+syn match helpSpecial "CTRL-PageDown"
+syn match helpSpecial "CTRL-Insert"
+syn match helpSpecial "CTRL-Del"
+syn match helpSpecial "CTRL-{char}"
+syn region helpNotVi start="{Vi[: ]" start="{not" start="{only" end="}" contains=helpLeadBlank,helpHyperTextJump
+syn match helpLeadBlank "^\s\+" contained
+
+" Highlight group items in their own color.
+syn match helpComment "\t[* ]Comment\t\+[a-z].*"
+syn match helpConstant "\t[* ]Constant\t\+[a-z].*"
+syn match helpString "\t[* ]String\t\+[a-z].*"
+syn match helpCharacter "\t[* ]Character\t\+[a-z].*"
+syn match helpNumber "\t[* ]Number\t\+[a-z].*"
+syn match helpBoolean "\t[* ]Boolean\t\+[a-z].*"
+syn match helpFloat "\t[* ]Float\t\+[a-z].*"
+syn match helpIdentifier "\t[* ]Identifier\t\+[a-z].*"
+syn match helpFunction "\t[* ]Function\t\+[a-z].*"
+syn match helpStatement "\t[* ]Statement\t\+[a-z].*"
+syn match helpConditional "\t[* ]Conditional\t\+[a-z].*"
+syn match helpRepeat "\t[* ]Repeat\t\+[a-z].*"
+syn match helpLabel "\t[* ]Label\t\+[a-z].*"
+syn match helpOperator "\t[* ]Operator\t\+["a-z].*"
+syn match helpKeyword "\t[* ]Keyword\t\+[a-z].*"
+syn match helpException "\t[* ]Exception\t\+[a-z].*"
+syn match helpPreProc "\t[* ]PreProc\t\+[a-z].*"
+syn match helpInclude "\t[* ]Include\t\+[a-z].*"
+syn match helpDefine "\t[* ]Define\t\+[a-z].*"
+syn match helpMacro "\t[* ]Macro\t\+[a-z].*"
+syn match helpPreCondit "\t[* ]PreCondit\t\+[a-z].*"
+syn match helpType "\t[* ]Type\t\+[a-z].*"
+syn match helpStorageClass "\t[* ]StorageClass\t\+[a-z].*"
+syn match helpStructure "\t[* ]Structure\t\+[a-z].*"
+syn match helpTypedef "\t[* ]Typedef\t\+[Aa-z].*"
+syn match helpSpecial "\t[* ]Special\t\+[a-z].*"
+syn match helpSpecialChar "\t[* ]SpecialChar\t\+[a-z].*"
+syn match helpTag "\t[* ]Tag\t\+[a-z].*"
+syn match helpDelimiter "\t[* ]Delimiter\t\+[a-z].*"
+syn match helpSpecialComment "\t[* ]SpecialComment\t\+[a-z].*"
+syn match helpDebug "\t[* ]Debug\t\+[a-z].*"
+syn match helpUnderlined "\t[* ]Underlined\t\+[a-z].*"
+syn match helpError "\t[* ]Error\t\+[a-z].*"
+syn match helpTodo "\t[* ]Todo\t\+[a-z].*"
+
+
+" Additionally load a language-specific syntax file "help_ab.vim".
+let i = match(expand("%"), '\.\a\ax$')
+if i > 0
+ exe "runtime syntax/help_" . strpart(expand("%"), i + 1, 2) . ".vim"
+endif
+
+syn sync minlines=40
+
+
+" 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_help_syntax_inits")
+ if version < 508
+ let did_help_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink helpExampleStart helpIgnore
+ HiLink helpIgnore Ignore
+ HiLink helpHyperTextJump Subtitle
+ HiLink helpHyperTextEntry String
+ HiLink helpHeadline Statement
+ HiLink helpHeader PreProc
+ HiLink helpSectionDelim PreProc
+ HiLink helpVim Identifier
+ HiLink helpExample Comment
+ HiLink helpOption Type
+ HiLink helpNotVi Special
+ HiLink helpSpecial Special
+ HiLink helpNote Todo
+ HiLink Subtitle Identifier
+
+ HiLink helpComment Comment
+ HiLink helpConstant Constant
+ HiLink helpString String
+ HiLink helpCharacter Character
+ HiLink helpNumber Number
+ HiLink helpBoolean Boolean
+ HiLink helpFloat Float
+ HiLink helpIdentifier Identifier
+ HiLink helpFunction Function
+ HiLink helpStatement Statement
+ HiLink helpConditional Conditional
+ HiLink helpRepeat Repeat
+ HiLink helpLabel Label
+ HiLink helpOperator Operator
+ HiLink helpKeyword Keyword
+ HiLink helpException Exception
+ HiLink helpPreProc PreProc
+ HiLink helpInclude Include
+ HiLink helpDefine Define
+ HiLink helpMacro Macro
+ HiLink helpPreCondit PreCondit
+ HiLink helpType Type
+ HiLink helpStorageClass StorageClass
+ HiLink helpStructure Structure
+ HiLink helpTypedef Typedef
+ HiLink helpSpecialChar SpecialChar
+ HiLink helpTag Tag
+ HiLink helpDelimiter Delimiter
+ HiLink helpSpecialComment SpecialComment
+ HiLink helpDebug Debug
+ HiLink helpUnderlined Underlined
+ HiLink helpError Error
+ HiLink helpTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "help"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/hercules.vim b/runtime/syntax/hercules.vim
new file mode 100644
index 000000000..02d8e9bb7
--- /dev/null
+++ b/runtime/syntax/hercules.vim
@@ -0,0 +1,133 @@
+" Vim syntax file
+" Language: Hercules
+" Maintainer: Dana Edwards <Dana_Edwards@avanticorp.com>
+" Extensions: *.vc,*.ev,*.rs
+" Last change: Nov. 9, 2001
+" Comment: Hercules physical IC design verification software ensures
+" that an IC's physical design matches its logical design and
+" satisfies manufacturing rules.
+
+" 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
+
+" Ignore case
+syn case ignore
+
+" Hercules runset sections
+syn keyword herculesType header assign_property alias assign
+syn keyword herculesType options preprocess_options
+syn keyword herculesType explode_options technology_options
+syn keyword herculesType drc_options database_options
+syn keyword herculesType text_options lpe_options evaccess_options
+syn keyword herculesType check_point compare_group environment
+syn keyword herculesType grid_check include layer_stats load_group
+syn keyword herculesType restart run_only self_intersect set snap
+syn keyword herculesType system variable waiver
+
+" Hercules commands
+syn keyword herculesStatement attach_property boolean cell_extent
+syn keyword herculesStatement common_hierarchy connection_points
+syn keyword herculesStatement copy data_filter alternate delete
+syn keyword herculesStatement explode explode_all fill_pattern find_net
+syn keyword herculesStatement flatten
+syn keyword herculesStatement level negate polygon_features push
+syn keyword herculesStatement rectangles relocate remove_overlap reverse select
+syn keyword herculesStatement select_cell select_contains select_edge select_net size
+syn keyword herculesStatement text_polygon text_property vertex area cut
+syn keyword herculesStatement density enclose external inside_edge
+syn keyword herculesStatement internal notch vectorize center_to_center
+syn keyword herculesStatement length mask_align moscheck rescheck
+syn keyword herculesStatement analysis buildsub init_lpe_db capacitor
+syn keyword herculesStatement device gendev nmos pmos diode npn pnp
+syn keyword herculesStatement resistor set_param save_property
+syn keyword herculesStatement connect disconnect text text_boolean
+syn keyword herculesStatement replace_text create_ports label graphics
+syn keyword herculesStatement save_netlist_database lpe_stats netlist
+syn keyword herculesStatement spice graphics_property graphics_netlist
+syn keyword herculesStatement write_milkyway multi_rule_enclose
+syn keyword herculesStatement if error_property equate compare
+syn keyword herculesStatement antenna_fix c_thru dev_connect_check
+syn keyword herculesStatement dev_net_count device_count net_filter
+syn keyword herculesStatement net_path_check ratio process_text_opens
+
+" Hercules keywords
+syn keyword herculesStatement black_box_file block compare_dir equivalence
+syn keyword herculesStatement format gdsin_dir group_dir group_dir_usage
+syn keyword herculesStatement inlib layout_path outlib output_format
+syn keyword herculesStatement output_layout_path schematic schematic_format
+syn keyword herculesStatement scheme_file output_block else
+syn keyword herculesStatement and or not xor andoverlap inside outside by to
+syn keyword herculesStatement with connected connected_all texted_with texted
+syn keyword herculesStatement by_property cutting edge_touch enclosing inside
+syn keyword herculesStatement inside_hole interact touching vertex
+
+" Hercules comments
+syn region herculesComment start="/\*" skip="/\*" end="\*/" contains=herculesTodo
+syn match herculesComment "//.*" contains=herculesTodo
+
+" Preprocessor directives
+syn match herculesPreProc "^#.*"
+syn match herculesPreProc "^@.*"
+syn match herculesPreProc "macros"
+
+" Hercules COMMENT option
+syn match herculesCmdCmnt "comment.*=.*"
+
+" Spacings, Resolutions, Ranges, Ratios, etc.
+syn match herculesNumber "-\=\<[0-9]\+L\=\>\|0[xX][0-9]\+\>"
+
+" Parenthesis sanity checker
+syn region herculesZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,herculesError,herculesBraceError,herculesCurlyError
+syn region herculesZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,herculesError,herculesBraceError,herculesParenError
+syn region herculesZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,herculesError,herculesCurlyError,herculesParenError
+syn match herculesError "[)\]}]"
+syn match herculesBraceError "[)}]" contained
+syn match herculesCurlyError "[)\]]" contained
+syn match herculesParenError "[\]}]" contained
+
+" Hercules output format
+"syn match herculesOutput "([0-9].*)"
+"syn match herculesOutput "([0-9].*\;.*)"
+syn match herculesOutput "perm\s*=.*(.*)"
+syn match herculesOutput "temp\s*=\s*"
+syn match herculesOutput "error\s*=\s*(.*)"
+
+"Modify the following as needed. The trade-off is performance versus functionality.
+syn sync lines=100
+
+" 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_hercules_syntax_inits")
+ if version < 508
+ let did_hercules_syntax_inits = 1
+ " Default methods for highlighting.
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink herculesStatement Statement
+ HiLink herculesType Type
+ HiLink herculesComment Comment
+ HiLink herculesPreProc PreProc
+ HiLink herculesTodo Todo
+ HiLink herculesOutput Include
+ HiLink herculesCmdCmnt Identifier
+ HiLink herculesNumber Number
+ HiLink herculesBraceError herculesError
+ HiLink herculesCurlyError herculesError
+ HiLink herculesParenError herculesError
+ HiLink herculesError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "hercules"
+
+" vim: ts=8
diff --git a/runtime/syntax/hex.vim b/runtime/syntax/hex.vim
new file mode 100644
index 000000000..40c655395
--- /dev/null
+++ b/runtime/syntax/hex.vim
@@ -0,0 +1,57 @@
+" Vim syntax file
+" Language: Intel hex MCS51
+" Maintainer: Sams Ricahrd <sams@ping.at>
+" Last Change: 2003 Apr 25
+
+" 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
+
+" storage types
+
+syn match hexChecksum "[0-9a-fA-F]\{2}$"
+syn match hexAdress "^:[0-9a-fA-F]\{6}" contains=hexDataByteCount
+syn match hexRecType "^:[0-9a-fA-F]\{8}" contains=hexAdress
+syn match hexDataByteCount contained "^:[0-9a-fA-F]\{2}" contains=hexStart
+syn match hexStart contained "^:"
+syn match hexExtAdrRec "^:02000002[0-9a-fA-F]\{4}" contains=hexSpecRec
+syn match hexExtLinAdrRec "^:02000004[0-9a-fA-F]\{4}" contains=hexSpecRec
+syn match hexSpecRec contained "^:0[02]00000[124]" contains=hexStart
+syn match hexEOF "^:00000001" contains=hexStart
+
+syn case match
+
+" 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_hex_syntax_inits")
+ if version < 508
+ let did_hex_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 hexStart SpecialKey
+ HiLink hexDataByteCount Constant
+ HiLink hexAdress Comment
+ HiLink hexRecType WarningMsg
+ HiLink hexChecksum Search
+ HiLink hexExtAdrRec hexAdress
+ HiLink hexEOF hexSpecRec
+ HiLink hexExtLinAdrRec hexAdress
+ HiLink hexSpecRec DiffAdd
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "hex"
+
+" vim: ts=8
diff --git a/runtime/syntax/hitest.vim b/runtime/syntax/hitest.vim
new file mode 100644
index 000000000..748910106
--- /dev/null
+++ b/runtime/syntax/hitest.vim
@@ -0,0 +1,149 @@
+" Vim syntax file
+" Language: none; used to see highlighting
+" Maintainer: Ronald Schild <rs@scutum.de>
+" Last Change: 2001 Sep 02
+" Version: 5.4n.1
+
+" To see your current highlight settings, do
+" :so $VIMRUNTIME/syntax/hitest.vim
+
+" save global options and registers
+let s:hidden = &hidden
+let s:lazyredraw = &lazyredraw
+let s:more = &more
+let s:report = &report
+let s:shortmess = &shortmess
+let s:wrapscan = &wrapscan
+let s:register_a = @a
+let s:register_se = @/
+
+" set global options
+set hidden lazyredraw nomore report=99999 shortmess=aoOstTW wrapscan
+
+" print current highlight settings into register a
+redir @a
+highlight
+redir END
+
+" Open a new window if the current one isn't empty
+if line("$") != 1 || getline(1) != ""
+ new
+endif
+
+" edit temporary file
+edit Highlight\ test
+
+" set local options
+setlocal autoindent noexpandtab formatoptions=t shiftwidth=16 noswapfile tabstop=16
+let &textwidth=&columns
+
+" insert highlight settings
+% delete
+put a
+
+" remove the colored xxx items
+g/xxx /s///e
+
+" remove color settings (not needed here)
+global! /links to/ substitute /\s.*$//e
+
+" move linked groups to the end of file
+global /links to/ move $
+
+" move linked group names to the matching preferred groups
+% substitute /^\(\w\+\)\s*\(links to\)\s*\(\w\+\)$/\3\t\2 \1/e
+global /links to/ normal mz3ElD0#$p'zdd
+
+" delete empty lines
+global /^ *$/ delete
+
+" precede syntax command
+% substitute /^[^ ]*/syn keyword &\t&/
+
+" execute syntax commands
+syntax clear
+% yank a
+@a
+
+" remove syntax commands again
+% substitute /^syn keyword //
+
+" pretty formatting
+global /^/ exe "normal Wi\<CR>\t\eAA\ex"
+global /^\S/ join
+
+" find out first syntax highlighting
+let b:various = &highlight.',:Normal,:Cursor,:,'
+let b:i = 1
+while b:various =~ ':'.substitute(getline(b:i), '\s.*$', ',', '')
+ let b:i = b:i + 1
+ if b:i > line("$") | break | endif
+endwhile
+
+" insert headlines
+call append(0, "Highlighting groups for various occasions")
+call append(1, "-----------------------------------------")
+
+if b:i < line("$")-1
+ let b:synhead = "Syntax highlighting groups"
+ if exists("hitest_filetypes")
+ redir @a
+ let
+ redir END
+ let @a = substitute(@a, 'did_\(\w\+\)_syn\w*_inits\s*#1', ', \1', 'g')
+ let @a = substitute(@a, "\n\\w[^\n]*", '', 'g')
+ let @a = substitute(@a, "\n", '', 'g')
+ let @a = substitute(@a, '^,', '', 'g')
+ if @a != ""
+ let b:synhead = b:synhead." - filetype"
+ if @a =~ ','
+ let b:synhead = b:synhead."s"
+ endif
+ let b:synhead = b:synhead.":".@a
+ endif
+ endif
+ call append(b:i+1, "")
+ call append(b:i+2, b:synhead)
+ call append(b:i+3, substitute(b:synhead, '.', '-', 'g'))
+endif
+
+" remove 'hls' highlighting
+nohlsearch
+normal 0
+
+" add autocommands to remove temporary file from buffer list
+aug highlighttest
+ au!
+ au BufUnload Highlight\ test if expand("<afile>") == "Highlight test"
+ au BufUnload Highlight\ test bdelete! Highlight\ test
+ au BufUnload Highlight\ test endif
+ au VimLeavePre * if bufexists("Highlight test")
+ au VimLeavePre * bdelete! Highlight\ test
+ au VimLeavePre * endif
+aug END
+
+" we don't want to save this temporary file
+set nomodified
+
+" the following trick avoids the "Press RETURN ..." prompt
+0 append
+.
+
+" restore global options and registers
+let &hidden = s:hidden
+let &lazyredraw = s:lazyredraw
+let &more = s:more
+let &report = s:report
+let &shortmess = s:shortmess
+let &wrapscan = s:wrapscan
+let @a = s:register_a
+
+" restore last search pattern
+call histdel("search", -1)
+let @/ = s:register_se
+
+" remove variables
+unlet s:hidden s:lazyredraw s:more s:report s:shortmess
+unlet s:wrapscan s:register_a s:register_se
+
+" vim: ts=8
diff --git a/runtime/syntax/hog.vim b/runtime/syntax/hog.vim
new file mode 100644
index 000000000..f39c171d3
--- /dev/null
+++ b/runtime/syntax/hog.vim
@@ -0,0 +1,350 @@
+" Snort syntax file
+" Language: Snort Configuration File (see: http://www.snort.org)
+" Maintainer: Phil Wood, cornett@arpa.net
+" Last Change: $Date$
+" Filenames: *.hog *.rules snort.conf vision.conf
+" URL: http://home.lanl.gov/cpw/vim/syntax/hog.vim
+" Snort Version: 1.8 By Martin Roesch (roesch@clark.net, www.snort.org)
+" TODO include all 1.8 syntax
+
+" For version 5.x: Clear all syntax items
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+" For version 6.x: Quit when a syntax file was already loaded
+ finish
+endif
+
+syn match hogComment +\s\#[^\-:.%#=*].*$+lc=1 contains=hogTodo,hogCommentString
+syn region hogCommentString contained oneline start='\S\s\+\#+'ms=s+1 end='\#'
+
+syn match hogJunk "\<\a\+|\s\+$"
+syn match hogNumber contained "\<\d\+\>"
+syn region hogText contained oneline start='\S' end=',' skipwhite
+syn region hogTexts contained oneline start='\S' end=';' skipwhite
+
+" Environment Variables
+" =====================
+"syn match hogEnvvar contained "[\!]\=\$\I\i*"
+"syn match hogEnvvar contained "[\!]\=\${\I\i*}"
+syn match hogEnvvar contained "\$\I\i*"
+syn match hogEnvvar contained "[\!]\=\${\I\i*}"
+
+
+" String handling lifted from vim.vim written by Dr. Charles E. Campbell, Jr.
+" Try to catch strings, if nothing else matches (therefore it must precede the others!)
+" vmEscapeBrace handles ["] []"] (ie. stays as string)
+syn region hogEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\^\=\]\=" skip="\\\\\|\\\]" end="\]"me=e-1
+syn match hogPatSep contained "\\[|()]"
+syn match hogNotPatSep contained "\\\\"
+syn region hogString oneline start=+[^:a-zA-Z\->!\\]"+hs=e+1 skip=+\\\\\|\\"+ end=+"\s*;+he=s-1 contains=hogEscapeBrace,hogPatSep,hogNotPatSep oneline
+""syn region hogString oneline start=+[^:a-zA-Z>!\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+ contains=hogEscapeBrace,vimPatSep,hogNotPatSep
+"syn region hogString oneline start=+=!+lc=1 skip=+\\\\\|\\!+ end=+!+ contains=hogEscapeBrace,hogPatSep,hogNotPatSep
+"syn region hogString oneline start="=+"lc=1 skip="\\\\\|\\+" end="+" contains=hogEscapeBrace,hogPatSep,hogNotPatSep
+"syn region hogString oneline start="[^\\]+\s*[^a-zA-Z0-9.]"lc=1 skip="\\\\\|\\+" end="+" contains=hogEscapeBrace,hogPatSep,hogNotPatSep
+"syn region hogString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=hogEscapeBrace,hogPatSep,hogNotPatSep
+"syn match hogString contained +"[^"]*\\$+ skipnl nextgroup=hogStringCont
+"syn match hogStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
+
+
+" Beginners - Patterns that involve ^
+"
+syn match hogLineComment +^[ \t]*#.*$+ contains=hogTodo,hogCommentString,hogCommentTitle
+syn match hogCommentTitle '#\s*\u\a*\(\s\+\u\a*\)*:'ms=s+1 contained
+syn keyword hogTodo contained TODO
+
+" Rule keywords
+syn match hogARPCOpt contained "\d\+,\*,\*"
+syn match hogARPCOpt contained "\d\+,\d\+,\*"
+syn match hogARPCOpt contained "\d\+,\*,\d\+"
+syn match hogARPCOpt contained "\d\+,\d\+,\d"
+syn match hogATAGOpt contained "session"
+syn match hogATAGOpt contained "host"
+syn match hogATAGOpt contained "dst"
+syn match hogATAGOpt contained "src"
+syn match hogATAGOpt contained "seconds"
+syn match hogATAGOpt contained "packets"
+syn match hogATAGOpt contained "bytes"
+syn keyword hogARespOpt contained rst_snd rst_rcv rst_all skipwhite
+syn keyword hogARespOpt contained icmp_net icmp_host icmp_port icmp_all skipwhite
+syn keyword hogAReactOpt contained block warn msg skipwhite
+syn match hogAReactOpt contained "proxy\d\+" skipwhite
+syn keyword hogAFOpt contained logto content_list skipwhite
+syn keyword hogAIPOptVal contained eol nop ts sec lsrr lsrre satid ssrr rr skipwhite
+syn keyword hogARefGrps contained arachnids skipwhite
+syn keyword hogARefGrps contained bugtraq skipwhite
+syn keyword hogARefGrps contained cve skipwhite
+syn keyword hogSessionVal contained printable all skipwhite
+syn match hogAFlagOpt contained "[0FSRPAUfsrpau21]\+" skipwhite
+syn match hogAFragOpt contained "[DRMdrm]\+" skipwhite
+"
+" Output syslog options
+" Facilities
+syn keyword hogSysFac contained LOG_AUTH LOG_AUTHPRIV LOG_DAEMON LOG_LOCAL0
+syn keyword hogSysFac contained LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
+syn keyword hogSysFac contained LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_USER
+" Priorities
+syn keyword hogSysPri contained LOG_EMERG ALERT LOG_CRIT LOG_ERR
+syn keyword hogSysPri contained LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG
+" Options
+syn keyword hogSysOpt contained LOG_CONS LOG_NDELAY LOG_PERROR
+syn keyword hogSysOpt contained LOG_PID
+" RuleTypes
+syn keyword hogRuleType contained log pass alert activate dynamic
+
+" Output log_database arguments and parameters
+" Type of database followed by ,
+" syn keyword hogDBSQL contained mysql postgresql unixodbc
+" Parameters param=constant
+" are just various constants assigned to parameter names
+
+" Output log_database arguments and parameters
+" Type of database followed by ,
+syn keyword hogDBType contained alert log
+syn keyword hogDBSRV contained mysql postgresql unixodbc
+" Parameters param=constant
+" are just various constants assigned to parameter names
+syn keyword hogDBParam contained dbname host port user password sensor_name
+
+" Output xml arguments and parameters
+" xml args
+syn keyword hogXMLArg contained log alert
+syn keyword hogXMLParam contained file protocol host port cert key ca server sanitize encoding detail
+"
+" hog rule handler '(.*)'
+syn region hogAOpt contained oneline start="rpc" end=":"me=e-1 nextgroup=hogARPCOptGrp skipwhite
+syn region hogARPCOptGrp contained oneline start="."hs=s+1 end=";"me=e-1 contains=hogARPCOpt skipwhite
+
+syn region hogAOpt contained oneline start="tag" end=":"me=e-1 nextgroup=hogATAGOptGrp skipwhite
+syn region hogATAGOptGrp contained oneline start="."hs=s+1 skip="," end=";"me=e-1 contains=hogATAGOpt,hogNumber skipwhite
+"
+syn region hogAOpt contained oneline start="nocase\|sameip" end=";"me=e-1 skipwhite oneline keepend
+"
+syn region hogAOpt contained start="resp" end=":"me=e-1 nextgroup=hogARespOpts skipwhite
+syn region hogARespOpts contained oneline start="." end="[,;]" contains=hogARespOpt skipwhite nextgroup=hogARespOpts
+"
+syn region hogAOpt contained start="react" end=":"me=e-1 nextgroup=hogAReactOpts skipwhite
+syn region hogAReactOpts contained oneline start="." end="[,;]" contains=hogAReactOpt skipwhite nextgroup=hogAReactOpts
+
+syn region hogAOpt contained oneline start="depth\|seq\|ttl\|ack\|icmp_seq\|activates\|activated_by\|dsize\|icode\|icmp_id\|count\|itype\|tos\|id\|offset" end=":"me=e-1 nextgroup=hogANOptGrp skipwhite
+syn region hogANOptGrp contained oneline start="."hs=s+1 end=";"me=e-1 contains=hogNumber skipwhite oneline keepend
+
+syn region hogAOpt contained oneline start="classtype" end=":"me=e-1 nextgroup=hogAFileGrp skipwhite
+
+syn region hogAOpt contained oneline start="regex\|msg\|content" end=":"me=e-1 nextgroup=hogAStrGrp skipwhite
+"syn region hogAStrGrp contained oneline start=+:\s*"+hs=s+1 skip="\\;" end=+"\s*;+he=s-1 contains=hogString skipwhite oneline keepend
+syn region hogAStrGrp contained oneline start=+:\s*"\|:"+hs=s+1 skip="\\;" end=+"\s*;+he=s-1 contains=hogString skipwhite oneline keepend
+
+syn region hogAOpt contained oneline start="logto\|content-list" end=":"me=e-1 nextgroup=hogAFileGrp skipwhite
+syn region hogAFileGrp contained oneline start="."hs=s+1 end=";"me=e-1 contains=hogFileName skipwhite
+
+syn region hogAOpt contained oneline start="reference" end=":"me=e-1 nextgroup=hogARefGrp skipwhite
+syn region hogARefGrp contained oneline start="."hs=s+1 end=","me=e-1 contains=hogARefGrps nextgroup=hogARefName skipwhite
+syn region hogARefName contained oneline start="."hs=s+1 end=";"me=e-1 contains=hogString,hogFileName,hogNumber skipwhite
+
+syn region hogAOpt contained oneline start="flags" end=":"he=s-1 nextgroup=hogAFlagOpt skipwhite oneline keepend
+
+syn region hogAOpt contained oneline start="fragbits" end=":"he=s-1 nextgroup=hogAFlagOpt skipwhite oneline keepend
+
+syn region hogAOpt contained oneline start="ipopts" end=":"he=s-1 nextgroup=hogAIPOptVal skipwhite oneline keepend
+
+"syn region hogAOpt contained oneline start="." end=":"he=s-1 contains=hogAFOpt nextgroup=hogFileName skipwhite
+
+syn region hogAOpt contained oneline start="session" end=":"he=s-1 nextgroup=hogSessionVal skipwhite
+
+syn match nothing "$"
+syn region hogRules oneline contains=nothing start='$' end="$"
+syn region hogRules oneline contains=hogRule start='('ms=s+1 end=")\s*$" skipwhite
+syn region hogRule contained oneline start="." skip="\\;" end=";"he=s-1 contains=hogAOpts, skipwhite keepend
+"syn region hogAOpts contained oneline start="." end="[;]"he=s-1 contains=hogAOpt skipwhite
+syn region hogAOpts contained oneline start="." end="[;]"me=e-1 contains=hogAOpt skipwhite
+
+
+" ruletype command
+syn keyword hogRTypeStart skipwhite ruletype nextgroup=hogRuleName skipwhite
+syn region hogRuleName contained start="." end="\s" contains=hogFileName nextgroup=hogRTypeRegion
+" type ruletype sub type
+syn region hogRtypeRegion contained start="{" end="}" nextgroup=hogRTypeStart
+syn keyword hogRTypeStart skipwhite type nextgroup=hogRuleTypes skipwhite
+syn region hogRuleTypes contained start="." end="\s" contains=hogRuleType nextgroup=hogOutStart
+
+
+" var command
+syn keyword hogVarStart skipwhite var nextgroup=hogVarIdent skipwhite
+syn region hogVarIdent contained start="."hs=e+1 end="\s\+"he=s-1 contains=hogEnvvar nextgroup=hogVarRegion skipwhite
+syn region hogVarRegion contained oneline start="." contains=hogIPaddr,hogEnvvar,hogNumber,hogString,hogFileName end="$"he=s-1 keepend skipwhite
+
+" config command
+syn keyword hogConfigStart config skipwhite nextgroup=hogConfigType
+syn match hogConfigType contained "\<classification\>" nextgroup=hogConfigTypeRegion skipwhite
+syn region hogConfigTypeRegion contained oneline start=":"ms=s+1 end="$" contains=hogNumber,hogText keepend skipwhite
+
+
+" include command
+syn keyword hogIncStart include skipwhite nextgroup=hogIncRegion
+syn region hogIncRegion contained oneline start="\>" contains=hogFileName,hogEnvvar end="$" keepend
+
+" preprocessor command
+" http_decode, minfrag, portscan[-ignorehosts]
+syn keyword hogPPrStart preprocessor skipwhite nextgroup=hogPPr
+syn match hogPPr contained "\<spade\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-homenet\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-threshlearn\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-adapt\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-adapt2\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-adapt3\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<spade-survey\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<defrag\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<telnet_decode\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<rpc_decode\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<bo\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<stream\>" nextgroup=hogStreamRegion skipwhite
+syn match hogPPr contained "\<stream2\>" nextgroup=hogStreamRegion skipwhite
+syn match hogPPr contained "\<stream3\>" nextgroup=hogStreamRegion skipwhite
+syn match hogPPr contained "\<http_decode\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<minfrag\>" nextgroup=hogPPrRegion skipwhite
+syn match hogPPr contained "\<portscan[-ignorehosts]*\>" nextgroup=hogPPrRegion skipwhite
+syn region hogPPrRegion contained oneline start="$" end="$" keepend
+syn region hogPPrRegion contained oneline start=":" end="$" contains=hogNumber,hogIPaddr,hogEnvvar,hogFileName keepend
+syn keyword hogStreamArgs contained timeout ports maxbytes
+syn region hogStreamRegion contained oneline start=":" end="$" contains=hogStreamArgs,hogNumber
+
+" output command
+syn keyword hogOutStart output nextgroup=hogOut skipwhite
+"
+" alert_syslog
+syn match hogOut contained "\<alert_syslog\>" nextgroup=hogSyslogRegion skipwhite
+syn region hogSyslogRegion contained start=":" end="$" contains=hogSysFac,hogSysPri,hogSysOpt,hogEnvvar oneline skipwhite keepend
+"
+" alert_fast (full,smb,unixsock, and tcpdump)
+syn match hogOut contained "\<alert_fast\|alert_full\|alert_smb\|alert_unixsock\|log_tcpdump\>" nextgroup=hogLogFileRegion skipwhite
+syn region hogLogFileRegion contained start=":" end="$" contains=hogFileName,hogEnvvar oneline skipwhite keepend
+"
+" database
+syn match hogOut contained "\<database\>" nextgroup=hogDBTypes skipwhite
+syn region hogDBTypes contained start=":" end="," contains=hogDBType,hogEnvvar nextgroup=hogDBSRVs skipwhite
+syn region hogDBSRVs contained start="\s\+" end="," contains=hogDBSRV nextgroup=hogDBParams skipwhite
+syn region hogDBParams contained start="." end="="me=e-1 contains=hogDBParam nextgroup=hogDBValues
+syn region hogDBValues contained start="." end="\>" contains=hogNumber,hogEnvvar,hogAscii nextgroup=hogDBParams oneline skipwhite
+syn match hogAscii contained "\<\a\+"
+"
+" log_tcpdump
+syn match hogOut contained "\<log_tcpdump\>" nextgroup=hogLogRegion skipwhite
+syn region hogLogRegion oneline start=":" skipwhite end="$" contains=hogEnvvar,hogFileName keepend
+"
+" xml
+syn keyword hogXMLTrans contained http https tcp iap
+syn match hogOut contained "\<xml\>" nextgroup=hogXMLRegion skipwhite
+syn region hogXMLRegion contained start=":" end="," contains=hogXMLArg,hogEnvvar nextgroup=hogXMLParams skipwhite
+"syn region hogXMLParams contained start="." end="="me=e-1 contains=hogXMLProto nextgroup=hogXMLProtos
+"syn region hogXMLProtos contained start="." end="\>" contains=hogXMLTrans nextgroup=hogXMLParams
+syn region hogXMLParams contained start="." end="="me=e-1 contains=hogXMLParam nextgroup=hogXMLValue
+syn region hogXMLValue contained start="." end="\>" contains=hogNumber,hogIPaddr,hogEnvvar,hogAscii,hogFileName nextgroup=hogXMLParams oneline skipwhite keepend
+"
+" Filename
+syn match hogFileName contained "[-./[:alnum:]_~]\+"
+syn match hogFileName contained "[-./[:alnum:]_~]\+"
+" IP address
+syn match hogIPaddr "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>"
+syn match hogIPaddr "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/\d\{1,2}\>"
+
+syn keyword hogProto tcp TCP ICMP icmp udp UDP
+
+" hog alert address port pairs
+" hog IPaddresses
+syn match hogIPaddrAndPort contained "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>" skipwhite nextgroup=hogPort
+syn match hogIPaddrAndPort contained "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/\d\{1,2}\>" skipwhite nextgroup=hogPort
+syn match hogIPaddrAndPort contained "\<any\>" skipwhite nextgroup=hogPort
+syn match hogIPaddrAndPort contained "\$\I\i*" nextgroup=hogPort skipwhite
+syn match hogIPaddrAndPort contained "\${\I\i*}" nextgroup=hogPort skipwhite
+"syn match hogPort contained "[\!]\=[\:]\=\d\+L\=\>" skipwhite
+syn match hogPort contained "[\:]\=\d\+\>"
+syn match hogPort contained "[\!]\=\<any\>" skipwhite
+syn match hogPort contained "[\!]\=\d\+L\=:\d\+L\=\>" skipwhite
+
+" action commands
+syn keyword hog7Functions activate skipwhite nextgroup=hogActRegion
+syn keyword hog7Functions dynamic skipwhite nextgroup=hogActRegion
+syn keyword hogActStart alert skipwhite nextgroup=hogActRegion
+syn keyword hogActStart log skipwhite nextgroup=hogActRegion
+syn keyword hogActStart pass skipwhite nextgroup=hogActRegion
+
+syn region hogActRegion contained oneline start="tcp\|TCP\|udp\|UDP\|icmp\|ICMP" end="\s\+"me=s-1 nextgroup=hogActSource oneline keepend skipwhite
+syn region hogActSource contained oneline contains=hogIPaddrAndPort start="\s\+"ms=e+1 end="->\|<>"me=e-2 oneline keepend skipwhite nextgroup=hogActDest
+syn region hogActDest contained oneline contains=hogIPaddrAndPort start="->\|<>" end="$" oneline keepend
+syn region hogActDest contained oneline contains=hogIPaddrAndPort start="->\|<>" end="("me=e-1 oneline keepend skipwhite nextgroup=hogRules
+
+
+" ====================
+if version >= 508 || !exists("did_hog_syn_inits")
+ if version < 508
+ let did_hog_syn_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 hogComment Comment
+ HiLink hogLineComment Comment
+ HiLink hogAscii Constant
+ HiLink hogCommentString Constant
+ HiLink hogFileName Constant
+ HiLink hogIPaddr Constant
+ HiLink hogNotPatSep Constant
+ HiLink hogNumber Constant
+ HiLink hogText Constant
+ HiLink hogString Constant
+ HiLink hogSysFac Constant
+ HiLink hogSysOpt Constant
+ HiLink hogSysPri Constant
+" HiLink hogAStrGrp Error
+ HiLink hogJunk Error
+ HiLink hogEnvvar Identifier
+ HiLink hogIPaddrAndPort Identifier
+ HiLink hogVarIdent Identifier
+ HiLink hogATAGOpt PreProc
+ HiLink hogAIPOptVal PreProc
+ HiLink hogARespOpt PreProc
+ HiLink hogAReactOpt PreProc
+ HiLink hogAFlagOpt PreProc
+ HiLink hogAFragOpt PreProc
+ HiLink hogCommentTitle PreProc
+ HiLink hogDBType PreProc
+ HiLink hogDBSRV PreProc
+ HiLink hogPort PreProc
+ HiLink hogARefGrps PreProc
+ HiLink hogSessionVal PreProc
+ HiLink hogXMLArg PreProc
+ HiLink hogARPCOpt PreProc
+ HiLink hogPatSep Special
+ HiLink hog7Functions Statement
+ HiLink hogActStart Statement
+ HiLink hogIncStart Statement
+ HiLink hogConfigStart Statement
+ HiLink hogOutStart Statement
+ HiLink hogPPrStart Statement
+ HiLink hogVarStart Statement
+ HiLink hogRTypeStart Statement
+ HiLink hogTodo Todo
+ HiLink hogRuleType Type
+ HiLink hogAFOpt Type
+ HiLink hogANoVal Type
+ HiLink hogAStrOpt Type
+ HiLink hogANOpt Type
+ HiLink hogAOpt Type
+ HiLink hogDBParam Type
+ HiLink hogStreamArgs Type
+ HiLink hogOut Type
+ HiLink hogPPr Type
+ HiLink hogConfigType Type
+ HiLink hogActRegion Type
+ HiLink hogProto Type
+ HiLink hogXMLParam Type
+ HiLink resp Todo
+ HiLink cLabel Label
+ delcommand HiLink
+endif
+
+let b:current_syntax = "hog"
+
+" hog: cpw=59
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
new file mode 100644
index 000000000..772babe78
--- /dev/null
+++ b/runtime/syntax/html.vim
@@ -0,0 +1,291 @@
+" Vim syntax file
+" Language: HTML
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/html.vim
+" Last Change: 2004 May 16
+
+" Please check :help html.vim for some comments and a description of the options
+
+" For version 5.x: Clear all syntax items
+" For version 6.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 = 'html'
+endif
+
+" don't use standard HiLink, it will not work with included syntax files
+if version < 508
+ command! -nargs=+ HtmlHiLink hi link <args>
+else
+ command! -nargs=+ HtmlHiLink hi def link <args>
+endif
+
+
+syn case ignore
+
+" mark illegal characters
+syn match htmlError "[<>&]"
+
+
+" tags
+syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
+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 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
+
+
+" tag names
+syn keyword htmlTagName contained address applet area a base basefont
+syn keyword htmlTagName contained big blockquote br caption center
+syn keyword htmlTagName contained cite code dd dfn dir div dl dt font
+syn keyword htmlTagName contained form hr html img
+syn keyword htmlTagName contained input isindex kbd li link map menu
+syn keyword htmlTagName contained meta ol option param pre p samp span
+syn keyword htmlTagName contained select small strike sub sup
+syn keyword htmlTagName contained table td textarea th tr tt ul var xmp
+syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>"
+
+" new html 4.0 tags
+syn keyword htmlTagName contained abbr acronym bdo button col label
+syn keyword htmlTagName contained colgroup del fieldset iframe ins legend
+syn keyword htmlTagName contained object optgroup q s tbody tfoot thead
+
+" legal arg names
+syn keyword htmlArg contained action
+syn keyword htmlArg contained align alink alt archive background bgcolor
+syn keyword htmlArg contained border bordercolor cellpadding
+syn keyword htmlArg contained cellspacing checked class clear code codebase color
+syn keyword htmlArg contained cols colspan content coords enctype face
+syn keyword htmlArg contained gutter height hspace id
+syn keyword htmlArg contained link lowsrc marginheight
+syn keyword htmlArg contained marginwidth maxlength method name prompt
+syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape
+syn keyword htmlArg contained size src start target text type url
+syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap
+syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1
+
+" Netscape extensions
+syn keyword htmlTagName contained frame noframes frameset nobr blink
+syn keyword htmlTagName contained layer ilayer nolayer spacer
+syn keyword htmlArg contained frameborder noresize pagex pagey above below
+syn keyword htmlArg contained left top visibility clip id noshade
+syn match htmlArg contained "\<z-index\>"
+
+" Microsoft extensions
+syn keyword htmlTagName contained marquee
+
+" html 4.0 arg names
+syn match htmlArg contained "\<\(accept-charset\|label\)\>"
+syn keyword htmlArg contained abbr accept accesskey axis char charoff charset
+syn keyword htmlArg contained cite classid codetype compact data datetime
+syn keyword htmlArg contained declare defer dir disabled for frame
+syn keyword htmlArg contained headers hreflang lang language longdesc
+syn keyword htmlArg contained multiple nohref nowrap object profile readonly
+syn keyword htmlArg contained rules scheme scope span standby style
+syn keyword htmlArg contained summary tabindex valuetype version
+
+" special characters
+syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
+
+" Comments (the real ones or the old netscape ones)
+if exists("html_wrong_comments")
+ syn region htmlComment start=+<!--+ end=+--\s*>+
+else
+ syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError
+ syn match htmlCommentError contained "[^><!]"
+ syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc
+endif
+syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
+
+" server-parsed commands
+syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr
+syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>"
+syn match htmlPreError contained "<!--#\S*"ms=s+4
+syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName
+syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend
+syn match htmlPreProcAttrError contained "\w\+="he=e-1
+syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1
+
+if !exists("html_no_rendering")
+ " rendering
+ syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
+
+ syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
+ syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+ syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
+ syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
+ syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
+
+ syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
+ syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
+ syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
+ syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold
+ syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold
+ syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+ syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+ syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
+ syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+
+ syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
+ syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
+ syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
+ syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
+ syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
+ syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
+ 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 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
+ syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
+ syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
+ syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
+ syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc
+ syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+endif
+
+syn keyword htmlTagName contained noscript
+syn keyword htmlSpecialTagName contained script style
+if main_syntax != 'java' || exists("java_javascript")
+ " JAVA SCRIPT
+ syn include @htmlJavaScript <sfile>:p:h/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
+ HtmlHiLink htmlScriptTag htmlTag
+
+ " html events (i.e. arguments that include javascript commands)
+ if exists("html_extended_events")
+ syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ
+ syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ
+ else
+ syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ
+ syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ
+ endif
+ syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript
+ syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript
+ HtmlHiLink htmlEventSQ htmlEvent
+ HtmlHiLink htmlEventDQ htmlEvent
+
+ " a javascript expression is used as an arg value
+ syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc
+endif
+
+if main_syntax != 'java' || exists("java_vb")
+ " VB SCRIPT
+ syn include @htmlVbScript <sfile>:p:h/vb.vim
+ unlet b:current_syntax
+ syn region javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+endif
+
+syn cluster htmlJavaScript add=@htmlPreproc
+
+if main_syntax != 'java' || exists("java_css")
+ " embedded style sheets
+ syn keyword htmlArg contained media
+ syn include @htmlCss <sfile>:p:h/css.vim
+ unlet b:current_syntax
+ syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc
+ syn match htmlCssStyleComment contained "\(<!--\|-->\)"
+ syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc
+ HtmlHiLink htmlStyleArg htmlString
+endif
+
+if main_syntax == "html"
+ " synchronizing (does not always work if a comment includes legal
+ " html tags, but doing it right would mean to always start
+ " at the first line, which is too slow)
+ syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]"
+ syn sync match htmlHighlight groupthere javaScript "<script"
+ syn sync match htmlHighlightSkip "^.*['\"].*$"
+ syn sync minlines=10
+endif
+
+" The default highlighting.
+if version >= 508 || !exists("did_html_syn_inits")
+ if version < 508
+ let did_html_syn_inits = 1
+ endif
+ HtmlHiLink htmlTag Function
+ HtmlHiLink htmlEndTag Identifier
+ HtmlHiLink htmlArg Type
+ HtmlHiLink htmlTagName htmlStatement
+ HtmlHiLink htmlSpecialTagName Exception
+ HtmlHiLink htmlValue String
+ HtmlHiLink htmlSpecialChar Special
+
+ if !exists("html_no_rendering")
+ HtmlHiLink htmlH1 Title
+ HtmlHiLink htmlH2 htmlH1
+ HtmlHiLink htmlH3 htmlH2
+ HtmlHiLink htmlH4 htmlH3
+ HtmlHiLink htmlH5 htmlH4
+ HtmlHiLink htmlH6 htmlH5
+ HtmlHiLink htmlHead PreProc
+ HtmlHiLink htmlTitle Title
+ HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic
+ HtmlHiLink htmlUnderlineBold htmlBoldUnderline
+ HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic
+ HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic
+ HtmlHiLink htmlItalicUnderline htmlUnderlineItalic
+ HtmlHiLink htmlItalicBold htmlBoldItalic
+ HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic
+ HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic
+ HtmlHiLink htmlLink Underlined
+ 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
+ hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+ hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
+ hi def htmlUnderline term=underline cterm=underline gui=underline
+ hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
+ hi def htmlItalic term=italic cterm=italic gui=italic
+ endif
+ endif
+
+ HtmlHiLink htmlPreStmt PreProc
+ HtmlHiLink htmlPreError Error
+ HtmlHiLink htmlPreProc PreProc
+ HtmlHiLink htmlPreAttr String
+ HtmlHiLink htmlPreProcAttrName PreProc
+ HtmlHiLink htmlPreProcAttrError Error
+ HtmlHiLink htmlSpecial Special
+ HtmlHiLink htmlSpecialChar Special
+ HtmlHiLink htmlString String
+ HtmlHiLink htmlStatement Statement
+ HtmlHiLink htmlComment Comment
+ HtmlHiLink htmlCommentPart Comment
+ HtmlHiLink htmlValue String
+ HtmlHiLink htmlCommentError htmlError
+ HtmlHiLink htmlTagError htmlError
+ HtmlHiLink htmlEvent javaScript
+ HtmlHiLink htmlError Error
+
+ HtmlHiLink javaScript Special
+ HtmlHiLink javaScriptExpression javaScript
+ HtmlHiLink htmlCssStyleComment Comment
+ HtmlHiLink htmlCssDefinition Special
+endif
+
+delcommand HtmlHiLink
+
+let b:current_syntax = "html"
+
+if main_syntax == 'html'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/htmlcheetah.vim b/runtime/syntax/htmlcheetah.vim
new file mode 100644
index 000000000..f57df90de
--- /dev/null
+++ b/runtime/syntax/htmlcheetah.vim
@@ -0,0 +1,32 @@
+" Vim syntax file
+" Language: HTML with Cheetah tags
+" Maintainer: Max Ischenko <mfi@ukr.net>
+" Last Change: 2003-05-11
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'html'
+endif
+
+if version < 600
+ so <sfile>:p:h/cheetah.vim
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/cheetah.vim
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syntax cluster htmlPreproc add=cheetahPlaceHolder
+syntax cluster htmlString add=cheetahPlaceHolder
+
+let b:current_syntax = "htmlcheetah"
+
+
diff --git a/runtime/syntax/htmlm4.vim b/runtime/syntax/htmlm4.vim
new file mode 100644
index 000000000..3119d2d1a
--- /dev/null
+++ b/runtime/syntax/htmlm4.vim
@@ -0,0 +1,41 @@
+" Vim syntax file
+" Language: HTML and M4
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/htmlm4.vim
+" Last Change: 2001 Apr 30
+
+" 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
+
+" we define it here so that included files can test for it
+if !exists("main_syntax")
+ let main_syntax='htmlm4'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+unlet b:current_syntax
+syn case match
+
+if version < 600
+ so <sfile>:p:h/m4.vim
+else
+ runtime! syntax/m4.vim
+endif
+unlet b:current_syntax
+syn cluster htmlPreproc add=@m4Top
+syn cluster m4StringContents add=htmlTag,htmlEndTag
+
+let b:current_syntax = "htmlm4"
+
+if main_syntax == 'htmlm4'
+ unlet main_syntax
+endif
diff --git a/runtime/syntax/htmlos.vim b/runtime/syntax/htmlos.vim
new file mode 100644
index 000000000..f31b9f654
--- /dev/null
+++ b/runtime/syntax/htmlos.vim
@@ -0,0 +1,166 @@
+" Vim syntax file
+" Language: HTML/OS by Aestiva
+" Maintainer: Jason Rust <jrust@westmont.edu>
+" URL: http://www.rustyparts.com/vim/syntax/htmlos.vim
+" Info: http://www.rustyparts.com/scripts.php
+" Last Change: 2003 May 11
+"
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'htmlos'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syn cluster htmlPreproc add=htmlosRegion
+
+syn case ignore
+
+" Function names
+syn keyword htmlosFunctions expand sleep getlink version system ascii getascii syslock sysunlock cr lf clean postprep listtorow split listtocol coltolist rowtolist tabletolist contained
+syn keyword htmlosFunctions cut \display cutall cutx cutallx length reverse lower upper proper repeat left right middle trim trimleft trimright count countx locate locatex replace replacex replaceall replaceallx paste pasteleft pasteleftx pasteleftall pasteleftallx pasteright pasterightall pasterightallx chopleft chopleftx chopright choprightx format concat contained
+syn keyword htmlosFunctions goto exitgoto contained
+syn keyword htmlosFunctions layout cols rows row items getitem putitem switchitems gettable delrow delrows delcol delcols append merge fillcol fillrow filltable pastetable getcol getrow fillindexcol insindexcol dups nodups maxtable mintable maxcol mincol maxrow minrow avetable avecol averow mediantable mediancol medianrow producttable productcol productrow sumtable sumcol sumrow sumsqrtable sumsqrcol sumsqrrow reversecols reverserows switchcols switchrows inscols insrows insfillcol sortcol reversesortcol sortcoln reversesortcoln sortrow sortrown reversesortrow reversesortrown getcoleq getcoleqn getcolnoteq getcolany getcolbegin getcolnotany getcolnotbegin getcolge getcolgt getcolle getcollt getcolgen getcolgtn getcollen getcoltn getcolend getcolnotend getrowend getrownotend getcolin getcolnotin getcolinbegin getcolnotinbegin getcolinend getcolnotinend getrowin getrownotin getrowinbegin getrownotinbegin getrowinend getrownotinend contained
+syn keyword htmlosFunctions dbcreate dbadd dbedit dbdelete dbsearch dbsearchsort dbget dbgetsort dbstatus dbindex dbimport dbfill dbexport dbsort dbgetrec dbremove dbpurge dbfind dbfindsort dbunique dbcopy dbmove dbkill dbtransfer dbpoke dbsearchx dbgetx contained
+syn keyword htmlosFunctions syshtmlosname sysstartname sysfixfile fileinfo filelist fileindex domainname page browser regdomain username usernum getenv httpheader copy file ts row sysls syscp sysmv sysmd sysrd filepush filepushlink dirname contained
+syn keyword htmlosFunctions mail to address subject netmail netmailopen netmailclose mailfilelist netweb netwebresults webpush netsockopen netsockread netsockwrite netsockclose contained
+syn keyword htmlosFunctions today time systime now yesterday tomorrow getday getmonth getyear getminute getweekday getweeknum getyearday getdate gettime getamorpm gethour addhours addminutes adddays timebetween timetill timefrom datetill datefrom mixedtimebetween mixeddatetill mixedtimetill mixedtimefrom mixeddatefrom nextdaybyweekfromdate nextdaybyweekfromtoday nextdaybymonthfromdate nextdaybymonthfromtoday nextdaybyyearfromdate nextdaybyyearfromtoday offsetdaybyweekfromdate offsetdaybyweekfromtoday offsetdaybymonthfromdate offsetdaybymonthfromtoday contained
+syn keyword htmlosFunctions isprivate ispublic isfile isdir isblank iserror iserror iseven isodd istrue isfalse islogical istext istag isnumber isinteger isdate istableeq istableeqx istableeqn isfuture ispast istoday isweekday isweekend issamedate iseq isnoteq isge isle ismod10 isvalidstring contained
+syn keyword htmlosFunctions celtof celtokel ftocel ftokel keltocel keltof cmtoin intocm fttom mtoft fttomile miletoft kmtomile miletokm mtoyd ydtom galtoltr ltrtogal ltrtoqt qttoltr gtooz oztog kgtolb lbtokg mttoton tontomt contained
+syn keyword htmlosFunctions max min abs sign inverse square sqrt cube roundsig round ceiling roundup floor rounddown roundeven rounddowneven roundupeven roundodd roundupodd rounddownodd random factorial summand fibonacci remainder mod radians degrees cos sin tan cotan secant cosecant acos asin atan exp power power10 ln log10 log sinh cosh tanh contained
+syn keyword htmlosFunctions xmldelete xmldeletex xmldeleteattr xmldeleteattrx xmledit xmleditx xmleditvalue xmleditvaluex xmleditattr xmleditattrx xmlinsertbefore xmlinsertbeforex smlinsertafter xmlinsertafterx xmlinsertattr xmlinsertattrx smlget xmlgetx xmlgetvalue xmlgetvaluex xmlgetattrvalue xmlgetattrvaluex xmlgetrec xmlgetrecx xmlgetrecattrvalue xmlgetrecattrvaluex xmlchopleftbefore xmlchopleftbeforex xmlchoprightbefore xmlchoprightbeforex xmlchopleftafter xmlchopleftafterx xmlchoprightafter xmlchoprightafterx xmllocatebefore xmllocatebeforex xmllocateafter xmllocateafterx contained
+
+" Type
+syn keyword htmlosType int str dol flt dat grp contained
+
+" StorageClass
+syn keyword htmlosStorageClass locals contained
+
+" Operator
+syn match htmlosOperator "[-=+/\*!]" contained
+syn match htmlosRelation "[~]" contained
+syn match htmlosRelation "[=~][&!]" contained
+syn match htmlosRelation "[!=<>]=" contained
+syn match htmlosRelation "[<>]" contained
+
+" Comment
+syn region htmlosComment start="#" end="/#" contained
+
+" Conditional
+syn keyword htmlosConditional if then /if to else elif contained
+syn keyword htmlosConditional and or nand nor xor not contained
+" Repeat
+syn keyword htmlosRepeat while do /while for /for contained
+
+" Keyword
+syn keyword htmlosKeyword name value step do rowname colname rownum contained
+
+" Repeat
+syn keyword htmlosLabel case matched /case switch contained
+
+" Statement
+syn keyword htmlosStatement break exit return continue contained
+
+" Identifier
+syn match htmlosIdentifier "\h\w*[\.]*\w*" contained
+
+" Special identifier
+syn match htmlosSpecialIdentifier "[\$@]" contained
+
+" Define
+syn keyword htmlosDefine function overlay contained
+
+" Boolean
+syn keyword htmlosBoolean true false contained
+
+" String
+syn region htmlosStringDouble keepend matchgroup=None start=+"+ end=+"+ contained
+syn region htmlosStringSingle keepend matchgroup=None start=+'+ end=+'+ contained
+
+" Number
+syn match htmlosNumber "-\=\<\d\+\>" contained
+
+" Float
+syn match htmlosFloat "\(-\=\<\d+\|-\=\)\.\d\+\>" contained
+
+" Error
+syn match htmlosError "ERROR" contained
+
+" Parent
+syn match htmlosParent "[({[\]})]" contained
+
+" Todo
+syn keyword htmlosTodo TODO Todo todo contained
+
+syn cluster htmlosInside contains=htmlosComment,htmlosFunctions,htmlosIdentifier,htmlosSpecialIdentifier,htmlosConditional,htmlosRepeat,htmlosLabel,htmlosStatement,htmlosOperator,htmlosRelation,htmlosStringSingle,htmlosStringDouble,htmlosNumber,htmlosFloat,htmlosError,htmlosKeyword,htmlosType,htmlosBoolean,htmlosParent
+
+syn cluster htmlosTop contains=@htmlosInside,htmlosDefine,htmlosError,htmlosStorageClass
+
+syn region htmlosRegion keepend matchgroup=Delimiter start="<<" skip=+".\{-}?>.\{-}"\|'.\{-}?>.\{-}'\|/\*.\{-}?>.\{-}\*/+ end=">>" contains=@htmlosTop
+syn region htmlosRegion keepend matchgroup=Delimiter start="\[\[" skip=+".\{-}?>.\{-}"\|'.\{-}?>.\{-}'\|/\*.\{-}?>.\{-}\*/+ end="\]\]" contains=@htmlosTop
+
+
+" sync
+if exists("htmlos_minlines")
+ exec "syn sync minlines=" . htmlos_minlines
+else
+ syn sync minlines=100
+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_htmlos_syn_inits")
+ if version < 508
+ let did_htmlos_syn_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 htmlosSpecialIdentifier Operator
+ HiLink htmlosIdentifier Identifier
+ HiLink htmlosStorageClass StorageClass
+ HiLink htmlosComment Comment
+ HiLink htmlosBoolean Boolean
+ HiLink htmlosStringSingle String
+ HiLink htmlosStringDouble String
+ HiLink htmlosNumber Number
+ HiLink htmlosFloat Float
+ HiLink htmlosFunctions Function
+ HiLink htmlosRepeat Repeat
+ HiLink htmlosConditional Conditional
+ HiLink htmlosLabel Label
+ HiLink htmlosStatement Statement
+ HiLink htmlosKeyword Statement
+ HiLink htmlosType Type
+ HiLink htmlosDefine Define
+ HiLink htmlosParent Delimiter
+ HiLink htmlosError Error
+ HiLink htmlosTodo Todo
+ HiLink htmlosOperator Operator
+ HiLink htmlosRelation Operator
+
+ delcommand HiLink
+endif
+let b:current_syntax = "htmlos"
+
+if main_syntax == 'htmlos'
+ unlet main_syntax
+endif
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/ia64.vim b/runtime/syntax/ia64.vim
new file mode 100644
index 000000000..d6292ce63
--- /dev/null
+++ b/runtime/syntax/ia64.vim
@@ -0,0 +1,312 @@
+" Vim syntax file
+" Language: IA-64 (Itanium) assembly language
+" Maintainer: Parth Malwankar <pmalwankar@yahoo.com>
+" URL: http://www.geocities.com/pmalwankar (Home Page with link to my Vim page)
+" http://www.geocities.com/pmalwankar/vim.htm (for VIM)
+" File Version: 0.7
+" Last Change: 2004 May 04
+
+" 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
+
+
+"ignore case for assembly
+syn case ignore
+
+" Identifier Keyword characters (defines \k)
+if version >= 600
+ setlocal iskeyword=@,48-57,#,$,.,:,?,@-@,_,~
+else
+ set iskeyword=@,48-57,#,$,.,:,?,@-@,_,~
+endif
+
+syn sync minlines=5
+
+" Read the MASM syntax to start with
+" This is needed as both IA-64 as well as IA-32 instructions are supported
+source <sfile>:p:h/masm.vim
+
+syn region ia64Comment start="//" end="$" contains=ia64Todo
+syn region ia64Comment start="/\*" end="\*/" contains=ia64Todo
+
+syn match ia64Identifier "[a-zA-Z_$][a-zA-Z0-9_$]*"
+syn match ia64Directive "\.[a-zA-Z_$][a-zA-Z_$.]\+"
+syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=:\>"he=e-1
+syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=::\>"he=e-2
+syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=#\>"he=e-1
+syn region ia64string start=+L\="+ skip=+\\\\\|\\"+ end=+"+
+syn match ia64Octal "0[0-7_]*\>"
+syn match ia64Binary "0[bB][01_]*\>"
+syn match ia64Hex "0[xX][0-9a-fA-F_]*\>"
+syn match ia64Decimal "[1-9_][0-9_]*\>"
+syn match ia64Float "[0-9_]*\.[0-9_]*\([eE][+-]\=[0-9_]*\)\=\>"
+
+"simple instructions
+syn keyword ia64opcode add adds addl addp4 alloc and andcm cover epc
+syn keyword ia64opcode fabs fand fandcm fc flushrs fneg fnegabs for
+syn keyword ia64opcode fpabs fpack fpneg fpnegabs fselect fand fabdcm
+syn keyword ia64opcode fc fwb fxor loadrs movl mux1 mux2 or padd4
+syn keyword ia64opcode pavgsub1 pavgsub2 popcnt psad1 pshl2 pshl4 pshladd2
+syn keyword ia64opcode pshradd2 psub4 rfi rsm rum shl shladd shladdp4
+syn keyword ia64opcode shrp ssm sub sum sync.i tak thash
+syn keyword ia64opcode tpa ttag xor
+
+"put to override these being recognized as floats. They are orignally from masm.vim
+"put here to avoid confusion with float
+syn match ia64Directive "\.186"
+syn match ia64Directive "\.286"
+syn match ia64Directive "\.286c"
+syn match ia64Directive "\.286p"
+syn match ia64Directive "\.287"
+syn match ia64Directive "\.386"
+syn match ia64Directive "\.386c"
+syn match ia64Directive "\.386p"
+syn match ia64Directive "\.387"
+syn match ia64Directive "\.486"
+syn match ia64Directive "\.486c"
+syn match ia64Directive "\.486p"
+syn match ia64Directive "\.8086"
+syn match ia64Directive "\.8087"
+
+
+
+"delimiters
+syn match ia64delimiter ";;"
+
+"operators
+syn match ia64operators "[\[\]()#,]"
+syn match ia64operators "\(+\|-\|=\)"
+
+"TODO
+syn match ia64Todo "\(TODO\|XXX\|FIXME\|NOTE\)"
+
+"What follows is a long list of regular expressions for parsing the
+"ia64 instructions that use many completers
+
+"br
+syn match ia64opcode "br\(\(\.\(cond\|call\|ret\|ia\|cloop\|ctop\|cexit\|wtop\|wexit\)\)\=\(\.\(spnt\|dpnt\|sptk\|dptk\)\)\=\(\.few\|\.many\)\=\(\.clr\)\=\)\=\>"
+"break
+syn match ia64opcode "break\(\.[ibmfx]\)\=\>"
+"brp
+syn match ia64opcode "brp\(\.\(sptk\|dptk\|loop\|exit\)\)\(\.imp\)\=\>"
+syn match ia64opcode "brp\.ret\(\.\(sptk\|dptk\)\)\{1}\(\.imp\)\=\>"
+"bsw
+syn match ia64opcode "bsw\.[01]\>"
+"chk
+syn match ia64opcode "chk\.\(s\(\.[im]\)\=\)\>"
+syn match ia64opcode "chk\.a\.\(clr\|nc\)\>"
+"clrrrb
+syn match ia64opcode "clrrrb\(\.pr\)\=\>"
+"cmp/cmp4
+syn match ia64opcode "cmp4\=\.\(eq\|ne\|l[te]\|g[te]\|[lg]tu\|[lg]eu\)\(\.unc\)\=\>"
+syn match ia64opcode "cmp4\=\.\(eq\|[lgn]e\|[lg]t\)\.\(\(or\(\.andcm\|cm\)\=\)\|\(and\(\(\.or\)\=cm\)\=\)\)\>"
+"cmpxchg
+syn match ia64opcode "cmpxchg[1248]\.\(acq\|rel\)\(\.nt1\|\.nta\)\=\>"
+"czx
+syn match ia64opcode "czx[12]\.[lr]\>"
+"dep
+syn match ia64opcode "dep\(\.z\)\=\>"
+"extr
+syn match ia64opcode "extr\(\.u\)\=\>"
+"fadd
+syn match ia64opcode "fadd\(\.[sd]\)\=\(\.s[0-3]\)\=\>"
+"famax/famin
+syn match ia64opcode "fa\(max\|min\)\(\.s[0-3]\)\=\>"
+"fchkf/fmax/fmin
+syn match ia64opcode "f\(chkf\|max\|min\)\(\.s[0-3]\)\=\>"
+"fclass
+syn match ia64opcode "fclass\(\.n\=m\)\(\.unc\)\=\>"
+"fclrf/fpamax
+syn match ia64opcode "f\(clrf\|pamax\|pamin\)\(\.s[0-3]\)\=\>"
+"fcmp
+syn match ia64opcode "fcmp\.\(n\=[lg][te]\|n\=eq\|\(un\)\=ord\)\(\.unc\)\=\(\.s[0-3]\)\=\>"
+"fcvt/fcvt.xf/fcvt.xuf.pc.sf
+syn match ia64opcode "fcvt\.\(\(fxu\=\(\.trunc\)\=\(\.s[0-3]\)\=\)\|\(xf\|xuf\(\.[sd]\)\=\(\.s[0-3]\)\=\)\)\>"
+"fetchadd
+syn match ia64opcode "fetchadd[48]\.\(acq\|rel\)\(\.nt1\|\.nta\)\=\>"
+"fma/fmpy/fms
+syn match ia64opcode "fm\([as]\|py\)\(\.[sd]\)\=\(\.s[0-3]\)\=\>"
+"fmerge/fpmerge
+syn match ia64opcode "fp\=merge\.\(ns\|se\=\)\>"
+"fmix
+syn match ia64opcode "fmix\.\(lr\|[lr]\)\>"
+"fnma/fnorm/fnmpy
+syn match ia64opcode "fn\(ma\|mpy\|orm\)\(\.[sd]\)\=\(\.s[0-3]\)\=\>"
+"fpcmp
+syn match ia64opcode "fpcmp\.\(n\=[lg][te]\|n\=eq\|\(un\)\=ord\)\(\.s[0-3]\)\=\>"
+"fpcvt
+syn match ia64opcode "fpcvt\.fxu\=\(\(\.trunc\)\=\(\.s[0-3]\)\=\)\>"
+"fpma/fpmax/fpmin/fpmpy/fpms/fpnma/fpnmpy/fprcpa/fpsqrta
+syn match ia64opcode "fp\(max\=\|min\|n\=mpy\|ms\|nma\|rcpa\|sqrta\)\(\.s[0-3]\)\=\>"
+"frcpa/frsqrta
+syn match ia64opcode "fr\(cpa\|sqrta\)\(\.s[0-3]\)\=\>"
+"fsetc/famin/fchkf
+syn match ia64opcode "f\(setc\|amin\|chkf\)\(\.s[0-3]\)\=\>"
+"fsub
+syn match ia64opcode "fsub\(\.[sd]\)\=\(\.s[0-3]\)\=\>"
+"fswap
+syn match ia64opcode "fswap\(\.n[lr]\=\)\=\>"
+"fsxt
+syn match ia64opcode "fsxt\.[lr]\>"
+"getf
+syn match ia64opcode "getf\.\([sd]\|exp\|sig\)\>"
+"invala
+syn match ia64opcode "invala\(\.[ae]\)\=\>"
+"itc/itr
+syn match ia64opcode "it[cr]\.[id]\>"
+"ld
+syn match ia64opcode "ld[1248]\>\|ld[1248]\(\.\(sa\=\|a\|c\.\(nc\|clr\(\.acq\)\=\)\|acq\|bias\)\)\=\(\.nt[1a]\)\=\>"
+syn match ia64opcode "ld8\.fill\(\.nt[1a]\)\=\>"
+"ldf
+syn match ia64opcode "ldf[sde8]\(\(\.\(sa\=\|a\|c\.\(nc\|clr\)\)\)\=\(\.nt[1a]\)\=\)\=\>"
+syn match ia64opcode "ldf\.fill\(\.nt[1a]\)\=\>"
+"ldfp
+syn match ia64opcode "ldfp[sd8]\(\(\.\(sa\=\|a\|c\.\(nc\|clr\)\)\)\=\(\.nt[1a]\)\=\)\=\>"
+"lfetch
+syn match ia64opcode "lfetch\(\.fault\(\.excl\)\=\|\.excl\)\=\(\.nt[12a]\)\=\>"
+"mf
+syn match ia64opcode "mf\(\.a\)\=\>"
+"mix
+syn match ia64opcode "mix[124]\.[lr]\>"
+"mov
+syn match ia64opcode "mov\(\.[im]\)\=\>"
+syn match ia64opcode "mov\(\.ret\)\=\(\(\.sptk\|\.dptk\)\=\(\.imp\)\=\)\=\>"
+"nop
+syn match ia64opcode "nop\(\.[ibmfx]\)\=\>"
+"pack
+syn match ia64opcode "pack\(2\.[su]ss\|4\.sss\)\>"
+"padd //padd4 added to keywords
+syn match ia64opcode "padd[12]\(\.\(sss\|uus\|uuu\)\)\=\>"
+"pavg
+syn match ia64opcode "pavg[12]\(\.raz\)\=\>"
+"pcmp
+syn match ia64opcode "pcmp[124]\.\(eq\|gt\)\>"
+"pmax/pmin
+syn match ia64opcode "pm\(ax\|in\)\(\(1\.u\)\|2\)\>"
+"pmpy
+syn match ia64opcode "pmpy2\.[rl]\>"
+"pmpyshr
+syn match ia64opcode "pmpyshr2\(\.u\)\=\>"
+"probe
+syn match ia64opcode "probe\.[rw]\>"
+syn match ia64opcode "probe\.\(\(r\|w\|rw\)\.fault\)\>"
+"pshr
+syn match ia64opcode "pshr[24]\(\.u\)\=\>"
+"psub
+syn match ia64opcode "psub[12]\(\.\(sss\|uu[su]\)\)\=\>"
+"ptc
+syn match ia64opcode "ptc\.\(l\|e\|ga\=\)\>"
+"ptr
+syn match ia64opcode "ptr\.\(d\|i\)\>"
+"setf
+syn match ia64opcode "setf\.\(s\|d\|exp\|sig\)\>"
+"shr
+syn match ia64opcode "shr\(\.u\)\=\>"
+"srlz
+syn match ia64opcode "srlz\(\.[id]\)\>"
+"st
+syn match ia64opcode "st[1248]\(\.rel\)\=\(\.nta\)\=\>"
+syn match ia64opcode "st8\.spill\(\.nta\)\=\>"
+"stf
+syn match ia64opcode "stf[1248]\(\.nta\)\=\>"
+syn match ia64opcode "stf\.spill\(\.nta\)\=\>"
+"sxt
+syn match ia64opcode "sxt[124]\>"
+"tbit/tnat
+syn match ia64opcode "t\(bit\|nat\)\(\.nz\|\.z\)\=\(\.\(unc\|or\(\.andcm\|cm\)\=\|and\(\.orcm\|cm\)\=\)\)\=\>"
+"unpack
+syn match ia64opcode "unpack[124]\.[lh]\>"
+"xchq
+syn match ia64opcode "xchg[1248]\(\.nt[1a]\)\=\>"
+"xma/xmpy
+syn match ia64opcode "xm\(a\|py\)\.[lh]u\=\>"
+"zxt
+syn match ia64opcode "zxt[124]\>"
+
+
+"The regex for different ia64 registers are given below
+
+"limits the rXXX and fXXX and cr suffix in the range 0-127
+syn match ia64registers "\([fr]\|cr\)\([0-9]\|[1-9][0-9]\|1[0-1][0-9]\|12[0-7]\)\{1}\>"
+"branch ia64registers
+syn match ia64registers "b[0-7]\>"
+"predicate ia64registers
+syn match ia64registers "p\([0-9]\|[1-5][0-9]\|6[0-3]\)\>"
+"application ia64registers
+syn match ia64registers "ar\.\(fpsr\|mat\|unat\|rnat\|pfs\|bsp\|bspstore\|rsc\|lc\|ec\|ccv\|itc\|k[0-7]\)\>"
+"ia32 AR's
+syn match ia64registers "ar\.\(eflag\|fcr\|csd\|ssd\|cflg\|fsr\|fir\|fdr\)\>"
+"sp/gp/pr/pr.rot/rp
+syn keyword ia64registers sp gp pr pr.rot rp ip tp
+"in/out/local
+syn match ia64registers "\(in\|out\|loc\)\([0-9]\|[1-8][0-9]\|9[0-5]\)\>"
+"argument ia64registers
+syn match ia64registers "farg[0-7]\>"
+"return value ia64registers
+syn match ia64registers "fret[0-7]\>"
+"psr
+syn match ia64registers "psr\(\.\(l\|um\)\)\=\>"
+"cr
+syn match ia64registers "cr\.\(dcr\|itm\|iva\|pta\|ipsr\|isr\|ifa\|iip\|itir\|iipa\|ifs\|iim\|iha\|lid\|ivr\|tpr\|eoi\|irr[0-3]\|itv\|pmv\|lrr[01]\|cmcv\)\>"
+"Indirect registers
+syn match ia64registers "\(cpuid\|dbr\|ibr\|pkr\|pmc\|pmd\|rr\|itr\|dtr\)\>"
+"MUX permutations for 8-bit elements
+syn match ia64registers "\(@rev\|@mix\|@shuf\|@alt\|@brcst\)\>"
+"floating point classes
+syn match ia64registers "\(@nat\|@qnan\|@snan\|@pos\|@neg\|@zero\|@unorm\|@norm\|@inf\)\>"
+"link relocation operators
+syn match ia64registers "\(@\(\(\(gp\|sec\|seg\|image\)rel\)\|ltoff\|fptr\|ptloff\|ltv\|section\)\)\>"
+
+"Data allocation syntax
+syn match ia64data "data[1248]\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>"
+syn match ia64data "real\([48]\|1[06]\)\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>"
+syn match ia64data "stringz\=\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>"
+
+" 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_ia64_syn_inits")
+ if version < 508
+ let did_ia64_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ "put masm groups with our groups
+ HiLink masmOperator ia64operator
+ HiLink masmDirective ia64Directive
+ HiLink masmOpcode ia64Opcode
+ HiLink masmIdentifier ia64Identifier
+ HiLink masmFloat ia64Float
+
+ "ia64 specific stuff
+ HiLink ia64Label Define
+ HiLink ia64Comment Comment
+ HiLink ia64Directive Type
+ HiLink ia64opcode Statement
+ HiLink ia64registers Operator
+ HiLink ia64string String
+ HiLink ia64Hex Number
+ HiLink ia64Binary Number
+ HiLink ia64Octal Number
+ HiLink ia64Float Float
+ HiLink ia64Decimal Number
+ HiLink ia64Identifier Identifier
+ HiLink ia64data Type
+ HiLink ia64delimiter Delimiter
+ HiLink ia64operator Operator
+ HiLink ia64Todo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ia64"
+
+" vim: ts=8 sw=2
+
diff --git a/runtime/syntax/icemenu.vim b/runtime/syntax/icemenu.vim
new file mode 100644
index 000000000..99109388a
--- /dev/null
+++ b/runtime/syntax/icemenu.vim
@@ -0,0 +1,36 @@
+" Vim syntax file
+" Language: Icewm Menu
+" Maintainer: James Mahler <jmahler@purdue.edu>
+" Last Change: Tue Dec 9 21:08:22 EST 2003
+" Extensions: ~/.icewm/menu
+" Comment: Icewm is a lightweight window manager. This adds syntax
+" highlighting when editing your user's menu file (~/.icewm/menu).
+
+" clear existing syntax
+if version < 600
+ syntax clear
+elseif exists("bLcurrent_syntax")
+ finish
+endif
+
+" not case sensitive
+syntax case ignore
+
+" icons .xpm .png and .gif
+syntax match _icon /"\=\/.*\.xpm"\=/
+syntax match _icon /"\=\/.*\.png"\=/
+syntax match _icon /"\=\/.*\.gif"\=/
+syntax match _icon /"\-"/
+
+" separator
+syntax keyword _rules separator
+
+" prog and menu
+syntax keyword _ids menu prog
+
+" highlights
+highlight link _rules Underlined
+highlight link _ids Type
+highlight link _icon Special
+
+let b:current_syntax = "IceMenu"
diff --git a/runtime/syntax/icon.vim b/runtime/syntax/icon.vim
new file mode 100644
index 000000000..1a73c43d8
--- /dev/null
+++ b/runtime/syntax/icon.vim
@@ -0,0 +1,212 @@
+" Vim syntax file
+" Language: Icon
+" Maintainer: Wendell Turner <wendell@adsi-m4.com>
+" URL: ftp://ftp.halcyon.com/pub/users/wturner/icon.vim
+" Last Change: 2003 May 11
+
+" 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 keyword iconFunction abs acos any args asin atan bal
+syn keyword iconFunction callout center char chdir close collect copy
+syn keyword iconFunction cos cset delay delete detab display dtor
+syn keyword iconFunction entab errorclear exit exp find flush function
+syn keyword iconFunction get getch getche getenv iand icom image
+syn keyword iconFunction insert integer ior ishift ixor kbhit key
+syn keyword iconFunction left list loadfunc log many map match
+syn keyword iconFunction member move name numeric open ord pop
+syn keyword iconFunction pos proc pull push put read reads
+syn keyword iconFunction real remove rename repl reverse right rtod
+syn keyword iconFunction runerr save seek seq set sin sort
+syn keyword iconFunction sortf sqrt stop string system tab table
+syn keyword iconFunction tan trim type upto variable where write writes
+
+" Keywords
+syn match iconKeyword "&allocated"
+syn match iconKeyword "&ascii"
+syn match iconKeyword "&clock"
+syn match iconKeyword "&collections"
+syn match iconKeyword "&cset"
+syn match iconKeyword "&current"
+syn match iconKeyword "&date"
+syn match iconKeyword "&dateline"
+syn match iconKeyword "&digits"
+syn match iconKeyword "&dump"
+syn match iconKeyword "&e"
+syn match iconKeyword "&error"
+syn match iconKeyword "&errornumber"
+syn match iconKeyword "&errortext"
+syn match iconKeyword "&errorvalue"
+syn match iconKeyword "&errout"
+syn match iconKeyword "&fail"
+syn match iconKeyword "&features"
+syn match iconKeyword "&file"
+syn match iconKeyword "&host"
+syn match iconKeyword "&input"
+syn match iconKeyword "&lcase"
+syn match iconKeyword "&letters"
+syn match iconKeyword "&level"
+syn match iconKeyword "&line"
+syn match iconKeyword "&main"
+syn match iconKeyword "&null"
+syn match iconKeyword "&output"
+syn match iconKeyword "&phi"
+syn match iconKeyword "&pi"
+syn match iconKeyword "&pos"
+syn match iconKeyword "&progname"
+syn match iconKeyword "&random"
+syn match iconKeyword "&regions"
+syn match iconKeyword "&source"
+syn match iconKeyword "&storage"
+syn match iconKeyword "&subject"
+syn match iconKeyword "&time"
+syn match iconKeyword "&trace"
+syn match iconKeyword "&ucase"
+syn match iconKeyword "&version"
+
+" Reserved words
+syn keyword iconReserved break by case create default do
+syn keyword iconReserved else end every fail if
+syn keyword iconReserved initial link next not of
+syn keyword iconReserved procedure repeat return suspend
+syn keyword iconReserved then to until while
+
+" Storage class reserved words
+syn keyword iconStorageClass global static local record
+
+syn keyword iconTodo contained TODO FIXME XXX BUG
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match iconSpecial contained "\\x\x\{2}\|\\\o\{3\}\|\\[bdeflnrtv\"\'\\]\|\\^c[a-zA-Z0-9]\|\\$"
+syn region iconString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=iconSpecial
+syn region iconCset start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=iconSpecial
+syn match iconCharacter "'[^\\]'"
+
+" not sure about these
+"syn match iconSpecialCharacter "'\\[bdeflnrtv]'"
+"syn match iconSpecialCharacter "'\\\o\{3\}'"
+"syn match iconSpecialCharacter "'\\x\x\{2}'"
+"syn match iconSpecialCharacter "'\\^c\[a-zA-Z0-9]'"
+
+"when wanted, highlight trailing white space
+if exists("icon_space_errors")
+ syn match iconSpaceError "\s*$"
+ syn match iconSpaceError " \+\t"me=e-1
+endif
+
+"catch errors caused by wrong parenthesis
+syn cluster iconParenGroup contains=iconParenError,iconIncluded,iconSpecial,iconTodo,iconUserCont,iconUserLabel,iconBitField
+
+syn region iconParen transparent start='(' end=')' contains=ALLBUT,@iconParenGroup
+syn match iconParenError ")"
+syn match iconInParen contained "[{}]"
+
+
+syn case ignore
+
+"integer number, or floating point number without a dot
+syn match iconNumber "\<\d\+\>"
+
+"floating point number, with dot, optional exponent
+syn match iconFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
+
+"floating point number, starting with a dot, optional exponent
+syn match iconFloat "\.\d\+\(e[-+]\=\d\+\)\=\>"
+
+"floating point number, without dot, with exponent
+syn match iconFloat "\<\d\+e[-+]\=\d\+\>"
+
+"radix number
+syn match iconRadix "\<\d\{1,2}[rR][a-zA-Z0-9]\+\>"
+
+
+" syn match iconIdentifier "\<[a-z_][a-z0-9_]*\>"
+
+syn case match
+
+" Comment
+syn match iconComment "#.*" contains=iconTodo,iconSpaceError
+
+syn region iconPreCondit start="^\s*$\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=iconComment,iconString,iconCharacter,iconNumber,iconCommentError,iconSpaceError
+
+syn region iconIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match iconIncluded contained "<[^>]*>"
+syn match iconInclude "^\s*$\s*include\>\s*["<]" contains=iconIncluded
+"syn match iconLineSkip "\\$"
+
+syn cluster iconPreProcGroup contains=iconPreCondit,iconIncluded,iconInclude,iconDefine,iconInParen,iconUserLabel
+
+syn region iconDefine start="^\s*$\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@iconPreProcGroup
+
+"wt:syn region iconPreProc "start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" "end="$" contains=ALLBUT,@iconPreProcGroup
+
+" Highlight User Labels
+
+" syn cluster iconMultiGroup contains=iconIncluded,iconSpecial,iconTodo,iconUserCont,iconUserLabel,iconBitField
+
+if !exists("icon_minlines")
+ let icon_minlines = 15
+endif
+exec "syn sync ccomment iconComment minlines=" . icon_minlines
+
+" 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
+if version >= 508 || !exists("did_icon_syn_inits")
+ if version < 508
+ let did_icon_syn_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 iconSpecialCharacter iconSpecial
+
+ HiLink iconOctalError iconError
+ HiLink iconParenError iconError
+ HiLink iconInParen iconError
+ HiLink iconCommentError iconError
+ HiLink iconSpaceError iconError
+ HiLink iconCommentError iconError
+ HiLink iconIncluded iconString
+ HiLink iconCommentString iconString
+ HiLink iconComment2String iconString
+ HiLink iconCommentSkip iconComment
+
+ HiLink iconUserLabel Label
+ HiLink iconCharacter Character
+ HiLink iconNumber Number
+ HiLink iconRadix Number
+ HiLink iconFloat Float
+ HiLink iconInclude Include
+ HiLink iconPreProc PreProc
+ HiLink iconDefine Macro
+ HiLink iconError Error
+ HiLink iconStatement Statement
+ HiLink iconPreCondit PreCondit
+ HiLink iconString String
+ HiLink iconCset String
+ HiLink iconComment Comment
+ HiLink iconSpecial SpecialChar
+ HiLink iconTodo Todo
+ HiLink iconStorageClass StorageClass
+ HiLink iconFunction Statement
+ HiLink iconReserved Label
+ HiLink iconKeyword Operator
+
+ "HiLink iconIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "icon"
+
diff --git a/runtime/syntax/idl.vim b/runtime/syntax/idl.vim
new file mode 100644
index 000000000..84cf08b59
--- /dev/null
+++ b/runtime/syntax/idl.vim
@@ -0,0 +1,203 @@
+" Vim syntax file
+" Language: IDL (Interface Description Language)
+" Maintainer: Jody Goldberg <jgoldberg@home.com>
+" Last Change: 2001 May 09
+
+" This is an experiment. IDL's structure is simple enough to permit a full
+" grammar based approach to rather than using a few heuristics. The result
+" is large and somewhat repetative but seems to work.
+
+" 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
+
+" Misc basic
+syn match idlId contained "[a-zA-Z][a-zA-Z0-9_]*"
+syn match idlSemiColon contained ";"
+syn match idlCommaArg contained "," skipempty skipwhite nextgroup=idlSimpDecl
+syn region idlArraySize1 contained start=:\[: end=:\]: skipempty skipwhite nextgroup=idlArraySize1,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+syn match idlSimpDecl contained "[a-zA-Z][a-zA-Z0-9_]*" skipempty skipwhite nextgroup=idlSemiColon,idlCommaArg,idlArraySize1
+syn region idlSting contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+
+syn match idlLiteral contained "[1-9]\d*\(\.\d*\)\="
+syn match idlLiteral contained "\.\d\+"
+syn keyword idlLiteral contained TRUE FALSE
+
+" Comments
+syn keyword idlTodo contained TODO FIXME XXX
+syn region idlComment start="/\*" end="\*/" contains=idlTodo
+syn match idlComment "//.*" contains=idlTodo
+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=idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+syn match idlModuleName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlModuleContent,idlSemiColon
+syn keyword idlModule module skipempty skipwhite nextgroup=idlModuleName
+
+" Interfaces
+syn region idlInterfaceContent contained start="{" end="}" skipempty skipwhite nextgroup=idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlComment,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef
+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,idlSemiColon
+syn keyword idlInterface interface skipempty skipwhite nextgroup=idlInterfaceName
+
+
+" Raises
+syn keyword idlRaises contained raises skipempty skipwhite nextgroup=idlRaises,idlContext,idlSemiColon
+
+" Context
+syn keyword idlContext contained context skipempty skipwhite nextgroup=idlRaises,idlContext,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
+
+syn region idlOpContents contained start="(" end=")" skipempty skipwhite nextgroup=idlRaises,idlContext,idlSemiColon contains=idlOpParms
+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=idlSemiColon, idlSimpDecl contains=idlId,idlComment
+syn match idlEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlEnumContents
+syn keyword idlEnum enum skipempty skipwhite nextgroup=idlEnumName
+
+" Typedef
+syn keyword idlTypedef typedef skipempty skipwhite nextgroup=idlBaseType, idlBaseTypeInt, idlSeqType
+
+" Struct
+syn region idlStructContent contained start="{" end="}" skipempty skipwhite nextgroup=idlSemiColon, idlSimpDecl contains=idlBaseType, idlBaseTypeInt, idlSeqType,idlComment, 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=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
+
+syn sync lines=200
+
+" 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_idl_syntax_inits")
+ if version < 508
+ let did_idl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ 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 idlModule Keyword
+ HiLink idlInterface Keyword
+ HiLink idlEnum Keyword
+ HiLink idlStruct Keyword
+ HiLink idlUnion Keyword
+ HiLink idlTypedef Keyword
+ HiLink idlException 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 StorageClass
+ HiLink idlParmName Identifier
+ HiLink idlInheritFrom Identifier
+
+ HiLink idlId Constant
+ "HiLink idlCase Keyword
+ HiLink idlCaseLabel Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "idl"
+
+" vim: ts=8
diff --git a/runtime/syntax/idlang.vim b/runtime/syntax/idlang.vim
new file mode 100644
index 000000000..9d567e5f8
--- /dev/null
+++ b/runtime/syntax/idlang.vim
@@ -0,0 +1,253 @@
+" Interactive Data Language syntax file (IDL, too [:-)]
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last change: 2003 Apr 25
+" Created by: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
+
+" Remove any old syntax stuff hanging around
+" 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
+
+syntax case ignore
+
+syn match idlangStatement "^\s*pro\s"
+syn match idlangStatement "^\s*function\s"
+syn keyword idlangStatement return continue mod do break
+syn keyword idlangStatement compile_opt forward_function goto
+syn keyword idlangStatement begin common end of
+syn keyword idlangStatement inherits on_ioerror begin
+
+syn keyword idlangConditional if else then for while case switch
+syn keyword idlangConditional endcase endelse endfor endswitch
+syn keyword idlangConditional endif endrep endwhile repeat until
+
+syn match idlangOperator "\ and\ "
+syn match idlangOperator "\ eq\ "
+syn match idlangOperator "\ ge\ "
+syn match idlangOperator "\ gt\ "
+syn match idlangOperator "\ le\ "
+syn match idlangOperator "\ lt\ "
+syn match idlangOperator "\ ne\ "
+syn match idlangOperator /\(\ \|(\)not\ /hs=e-3
+syn match idlangOperator "\ or\ "
+syn match idlangOperator "\ xor\ "
+
+syn keyword idlangStop stop pause
+
+syn match idlangStrucvar "\h\w*\(\.\h\w*\)\+"
+syn match idlangStrucvar "[),\]]\(\.\h\w*\)\+"hs=s+1
+
+syn match idlangSystem "\!\a\w*\(\.\w*\)\="
+
+syn match idlangKeyword "\([(,]\s*\(\$\_s*\)\=\)\@<=/\h\w*"
+syn match idlangKeyword "\([(,]\s*\(\$\_s*\)\=\)\@<=\h\w*\s*="
+
+syn keyword idlangTodo contained TODO
+
+syn region idlangString start=+"+ end=+"+
+syn region idlangString start=+'+ end=+'+
+
+syn match idlangPreCondit "^\s*@\w*\(\.\a\{3}\)\="
+
+syn match idlangRealNumber "\<\d\+\(\.\=\d*e[+-]\=\d\+\|\.\d*d\|\.\d*\|d\)"
+syn match idlangRealNumber "\.\d\+\(d\|e[+-]\=\d\+\)\="
+
+syn match idlangNumber "\<\.\@!\d\+\.\@!\(b\|u\|us\|s\|l\|ul\|ll\|ull\)\=\>"
+
+syn match idlangComment "[\;].*$" contains=idlangTodo
+
+syn match idlangContinueLine "\$\s*\($\|;\)"he=s+1 contains=idlangComment
+syn match idlangContinueLine "&\s*\(\h\|;\)"he=s+1 contains=ALL
+
+syn match idlangDblCommaError "\,\s*\,"
+
+" List of standard routines as of IDL version 5.4.
+syn match idlangRoutine "EOS_\a*"
+syn match idlangRoutine "HDF_\a*"
+syn match idlangRoutine "CDF_\a*"
+syn match idlangRoutine "NCDF_\a*"
+syn match idlangRoutine "QUERY_\a*"
+syn match idlangRoutine "\<MAX\s*("he=e-1
+syn match idlangRoutine "\<MIN\s*("he=e-1
+
+syn keyword idlangRoutine A_CORRELATE ABS ACOS ADAPT_HIST_EQUAL ALOG ALOG10
+syn keyword idlangRoutine AMOEBA ANNOTATE ARG_PRESENT ARRAY_EQUAL ARROW
+syn keyword idlangRoutine ASCII_TEMPLATE ASIN ASSOC ATAN AXIS BAR_PLOT
+syn keyword idlangRoutine BESELI BESELJ BESELK BESELY BETA BILINEAR BIN_DATE
+syn keyword idlangRoutine BINARY_TEMPLATE BINDGEN BINOMIAL BLAS_AXPY BLK_CON
+syn keyword idlangRoutine BOX_CURSOR BREAK BREAKPOINT BROYDEN BYTARR BYTE
+syn keyword idlangRoutine BYTEORDER BYTSCL C_CORRELATE CALDAT CALENDAR
+syn keyword idlangRoutine CALL_EXTERNAL CALL_FUNCTION CALL_METHOD
+syn keyword idlangRoutine CALL_PROCEDURE CATCH CD CEIL CHEBYSHEV CHECK_MATH
+syn keyword idlangRoutine CHISQR_CVF CHISQR_PDF CHOLDC CHOLSOL CINDGEN
+syn keyword idlangRoutine CIR_3PNT CLOSE CLUST_WTS CLUSTER COLOR_CONVERT
+syn keyword idlangRoutine COLOR_QUAN COLORMAP_APPLICABLE COMFIT COMMON
+syn keyword idlangRoutine COMPLEX COMPLEXARR COMPLEXROUND
+syn keyword idlangRoutine COMPUTE_MESH_NORMALS COND CONGRID CONJ
+syn keyword idlangRoutine CONSTRAINED_MIN CONTOUR CONVERT_COORD CONVOL
+syn keyword idlangRoutine COORD2TO3 CORRELATE COS COSH CRAMER CREATE_STRUCT
+syn keyword idlangRoutine CREATE_VIEW CROSSP CRVLENGTH CT_LUMINANCE CTI_TEST
+syn keyword idlangRoutine CURSOR CURVEFIT CV_COORD CVTTOBM CW_ANIMATE
+syn keyword idlangRoutine CW_ANIMATE_GETP CW_ANIMATE_LOAD CW_ANIMATE_RUN
+syn keyword idlangRoutine CW_ARCBALL CW_BGROUP CW_CLR_INDEX CW_COLORSEL
+syn keyword idlangRoutine CW_DEFROI CW_FIELD CW_FILESEL CW_FORM CW_FSLIDER
+syn keyword idlangRoutine CW_LIGHT_EDITOR CW_LIGHT_EDITOR_GET
+syn keyword idlangRoutine CW_LIGHT_EDITOR_SET CW_ORIENT CW_PALETTE_EDITOR
+syn keyword idlangRoutine CW_PALETTE_EDITOR_GET CW_PALETTE_EDITOR_SET
+syn keyword idlangRoutine CW_PDMENU CW_RGBSLIDER CW_TMPL CW_ZOOM DBLARR
+syn keyword idlangRoutine DCINDGEN DCOMPLEX DCOMPLEXARR DEFINE_KEY DEFROI
+syn keyword idlangRoutine DEFSYSV DELETE_SYMBOL DELLOG DELVAR DERIV DERIVSIG
+syn keyword idlangRoutine DETERM DEVICE DFPMIN DIALOG_MESSAGE
+syn keyword idlangRoutine DIALOG_PICKFILE DIALOG_PRINTERSETUP
+syn keyword idlangRoutine DIALOG_PRINTJOB DIALOG_READ_IMAGE
+syn keyword idlangRoutine DIALOG_WRITE_IMAGE DIGITAL_FILTER DILATE DINDGEN
+syn keyword idlangRoutine DISSOLVE DIST DLM_LOAD DLM_REGISTER
+syn keyword idlangRoutine DO_APPLE_SCRIPT DOC_LIBRARY DOUBLE DRAW_ROI EFONT
+syn keyword idlangRoutine EIGENQL EIGENVEC ELMHES EMPTY ENABLE_SYSRTN EOF
+syn keyword idlangRoutine ERASE ERODE ERRORF ERRPLOT EXECUTE EXIT EXP EXPAND
+syn keyword idlangRoutine EXPAND_PATH EXPINT EXTRAC EXTRACT_SLICE F_CVF
+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 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
+syn keyword idlangRoutine GET_DRIVE_LIST GET_KBRD GET_LUN GET_SCREEN_SIZE
+syn keyword idlangRoutine GET_SYMBOL GETENV GOTO GRID_TPS GRID3 GS_ITER
+syn keyword idlangRoutine H_EQ_CT H_EQ_INT HANNING HEAP_GC HELP HILBERT
+syn keyword idlangRoutine HIST_2D HIST_EQUAL HISTOGRAM HLS HOUGH HQR HSV
+syn keyword idlangRoutine IBETA IDENTITY IDL_Container IDLanROI
+syn keyword idlangRoutine IDLanROIGroup IDLffDICOM IDLffDXF IDLffLanguageCat
+syn keyword idlangRoutine IDLffShape IDLgrAxis IDLgrBuffer IDLgrClipboard
+syn keyword idlangRoutine IDLgrColorbar IDLgrContour IDLgrFont IDLgrImage
+syn keyword idlangRoutine IDLgrLegend IDLgrLight IDLgrModel IDLgrMPEG
+syn keyword idlangRoutine IDLgrPalette IDLgrPattern IDLgrPlot IDLgrPolygon
+syn keyword idlangRoutine IDLgrPolyline IDLgrPrinter IDLgrROI IDLgrROIGroup
+syn keyword idlangRoutine IDLgrScene IDLgrSurface IDLgrSymbol
+syn keyword idlangRoutine IDLgrTessellator IDLgrText IDLgrView
+syn keyword idlangRoutine IDLgrViewgroup IDLgrVolume IDLgrVRML IDLgrWindow
+syn keyword idlangRoutine IGAMMA IMAGE_CONT IMAGE_STATISTICS IMAGINARY
+syn keyword idlangRoutine INDGEN INT_2D INT_3D INT_TABULATED INTARR INTERPOL
+syn keyword idlangRoutine INTERPOLATE INVERT IOCTL ISHFT ISOCONTOUR
+syn keyword idlangRoutine ISOSURFACE JOURNAL JULDAY KEYWORD_SET KRIG2D
+syn keyword idlangRoutine KURTOSIS KW_TEST L64INDGEN LABEL_DATE LABEL_REGION
+syn keyword idlangRoutine LADFIT LAGUERRE LEEFILT LEGENDRE LINBCG LINDGEN
+syn keyword idlangRoutine LINFIT LINKIMAGE LIVE_CONTOUR LIVE_CONTROL
+syn keyword idlangRoutine LIVE_DESTROY LIVE_EXPORT LIVE_IMAGE LIVE_INFO
+syn keyword idlangRoutine LIVE_LINE LIVE_LOAD LIVE_OPLOT LIVE_PLOT
+syn keyword idlangRoutine LIVE_PRINT LIVE_RECT LIVE_STYLE LIVE_SURFACE
+syn keyword idlangRoutine LIVE_TEXT LJLCT LL_ARC_DISTANCE LMFIT LMGR LNGAMMA
+syn keyword idlangRoutine LNP_TEST LOADCT LOCALE_GET LON64ARR LONARR LONG
+syn keyword idlangRoutine LONG64 LSODE LU_COMPLEX LUDC LUMPROVE LUSOL
+syn keyword idlangRoutine M_CORRELATE MACHAR MAKE_ARRAY MAKE_DLL MAP_2POINTS
+syn keyword idlangRoutine MAP_CONTINENTS MAP_GRID MAP_IMAGE MAP_PATCH
+syn keyword idlangRoutine MAP_PROJ_INFO MAP_SET MATRIX_MULTIPLY MD_TEST MEAN
+syn keyword idlangRoutine MEANABSDEV MEDIAN MEMORY MESH_CLIP MESH_DECIMATE
+syn keyword idlangRoutine MESH_ISSOLID MESH_MERGE MESH_NUMTRIANGLES MESH_OBJ
+syn keyword idlangRoutine MESH_SMOOTH MESH_SURFACEAREA MESH_VALIDATE
+syn keyword idlangRoutine MESH_VOLUME MESSAGE MIN_CURVE_SURF MK_HTML_HELP
+syn keyword idlangRoutine MODIFYCT MOMENT MORPH_CLOSE MORPH_DISTANCE
+syn keyword idlangRoutine MORPH_GRADIENT MORPH_HITORMISS MORPH_OPEN
+syn keyword idlangRoutine MORPH_THIN MORPH_TOPHAT MPEG_CLOSE MPEG_OPEN
+syn keyword idlangRoutine MPEG_PUT MPEG_SAVE MSG_CAT_CLOSE MSG_CAT_COMPILE
+syn keyword idlangRoutine MSG_CAT_OPEN MULTI N_ELEMENTS N_PARAMS N_TAGS
+syn keyword idlangRoutine NEWTON NORM OBJ_CLASS OBJ_DESTROY OBJ_ISA OBJ_NEW
+syn keyword idlangRoutine OBJ_VALID OBJARR ON_ERROR ON_IOERROR ONLINE_HELP
+syn keyword idlangRoutine OPEN OPENR OPENW OPLOT OPLOTERR P_CORRELATE
+syn keyword idlangRoutine PARTICLE_TRACE PCOMP PLOT PLOT_3DBOX PLOT_FIELD
+syn keyword idlangRoutine PLOTERR PLOTS PNT_LINE POINT_LUN POLAR_CONTOUR
+syn keyword idlangRoutine POLAR_SURFACE POLY POLY_2D POLY_AREA POLY_FIT
+syn keyword idlangRoutine POLYFILL POLYFILLV POLYSHADE POLYWARP POPD POWELL
+syn keyword idlangRoutine PRIMES PRINT PRINTF PRINTD PROFILE PROFILER
+syn keyword idlangRoutine PROFILES PROJECT_VOL PS_SHOW_FONTS PSAFM PSEUDO
+syn keyword idlangRoutine PTR_FREE PTR_NEW PTR_VALID PTRARR PUSHD QROMB
+syn keyword idlangRoutine QROMO QSIMP R_CORRELATE R_TEST RADON RANDOMN
+syn keyword idlangRoutine RANDOMU RANKS RDPIX READ READF READ_ASCII
+syn keyword idlangRoutine READ_BINARY READ_BMP READ_DICOM READ_IMAGE
+syn keyword idlangRoutine READ_INTERFILE READ_JPEG READ_PICT READ_PNG
+syn keyword idlangRoutine READ_PPM READ_SPR READ_SRF READ_SYLK READ_TIFF
+syn keyword idlangRoutine READ_WAV READ_WAVE READ_X11_BITMAP READ_XWD READS
+syn keyword idlangRoutine READU REBIN RECALL_COMMANDS RECON3 REDUCE_COLORS
+syn keyword idlangRoutine REFORM REGRESS REPLICATE REPLICATE_INPLACE
+syn keyword idlangRoutine RESOLVE_ALL RESOLVE_ROUTINE RESTORE RETALL RETURN
+syn keyword idlangRoutine REVERSE REWIND RK4 ROBERTS ROT ROTATE ROUND
+syn keyword idlangRoutine ROUTINE_INFO RS_TEST S_TEST SAVE SAVGOL SCALE3
+syn keyword idlangRoutine SCALE3D SEARCH2D SEARCH3D SET_PLOT SET_SHADING
+syn keyword idlangRoutine SET_SYMBOL SETENV SETLOG SETUP_KEYS SFIT
+syn keyword idlangRoutine SHADE_SURF SHADE_SURF_IRR SHADE_VOLUME SHIFT SHOW3
+syn keyword idlangRoutine SHOWFONT SIN SINDGEN SINH SIZE SKEWNESS SKIPF
+syn keyword idlangRoutine SLICER3 SLIDE_IMAGE SMOOTH SOBEL SOCKET SORT SPAWN
+syn keyword idlangRoutine SPH_4PNT SPH_SCAT SPHER_HARM SPL_INIT SPL_INTERP
+syn keyword idlangRoutine SPLINE SPLINE_P SPRSAB SPRSAX SPRSIN SPRSTP SQRT
+syn keyword idlangRoutine STANDARDIZE STDDEV STOP STRARR STRCMP STRCOMPRESS
+syn keyword idlangRoutine STREAMLINE STREGEX STRETCH STRING STRJOIN STRLEN
+syn keyword idlangRoutine STRLOWCASE STRMATCH STRMESSAGE STRMID STRPOS
+syn keyword idlangRoutine STRPUT STRSPLIT STRTRIM STRUCT_ASSIGN STRUCT_HIDE
+syn keyword idlangRoutine STRUPCASE SURFACE SURFR SVDC SVDFIT SVSOL
+syn keyword idlangRoutine SWAP_ENDIAN SWITCH SYSTIME T_CVF T_PDF T3D
+syn keyword idlangRoutine TAG_NAMES TAN TANH TAPRD TAPWRT TEK_COLOR
+syn keyword idlangRoutine TEMPORARY TETRA_CLIP TETRA_SURFACE TETRA_VOLUME
+syn keyword idlangRoutine THIN THREED TIME_TEST2 TIMEGEN TM_TEST TOTAL TRACE
+syn keyword idlangRoutine TRANSPOSE TRI_SURF TRIANGULATE TRIGRID TRIQL
+syn keyword idlangRoutine TRIRED TRISOL TRNLOG TS_COEF TS_DIFF TS_FCAST
+syn keyword idlangRoutine TS_SMOOTH TV TVCRS TVLCT TVRD TVSCL UINDGEN UINT
+syn keyword idlangRoutine UINTARR UL64INDGEN ULINDGEN ULON64ARR ULONARR
+syn keyword idlangRoutine ULONG ULONG64 UNIQ USERSYM VALUE_LOCATE VARIANCE
+syn keyword idlangRoutine VAX_FLOAT VECTOR_FIELD VEL VELOVECT VERT_T3D VOIGT
+syn keyword idlangRoutine VORONOI VOXEL_PROJ WAIT WARP_TRI WATERSHED WDELETE
+syn keyword idlangRoutine WEOF WF_DRAW WHERE WIDGET_BASE WIDGET_BUTTON
+syn keyword idlangRoutine WIDGET_CONTROL WIDGET_DRAW WIDGET_DROPLIST
+syn keyword idlangRoutine WIDGET_EVENT WIDGET_INFO WIDGET_LABEL WIDGET_LIST
+syn keyword idlangRoutine WIDGET_SLIDER WIDGET_TABLE WIDGET_TEXT WINDOW
+syn keyword idlangRoutine WRITE_BMP WRITE_IMAGE WRITE_JPEG WRITE_NRIF
+syn keyword idlangRoutine WRITE_PICT WRITE_PNG WRITE_PPM WRITE_SPR WRITE_SRF
+syn keyword idlangRoutine WRITE_SYLK WRITE_TIFF WRITE_WAV WRITE_WAVE WRITEU
+syn keyword idlangRoutine WSET WSHOW WTN WV_APPLET WV_CW_WAVELET WV_CWT
+syn keyword idlangRoutine WV_DENOISE WV_DWT WV_FN_COIFLET WV_FN_DAUBECHIES
+syn keyword idlangRoutine WV_FN_GAUSSIAN WV_FN_HAAR WV_FN_MORLET WV_FN_PAUL
+syn keyword idlangRoutine WV_FN_SYMLET WV_IMPORT_DATA WV_IMPORT_WAVELET
+syn keyword idlangRoutine WV_PLOT3D_WPS WV_PLOT_MULTIRES WV_PWT
+syn keyword idlangRoutine WV_TOOL_DENOISE XBM_EDIT XDISPLAYFILE XDXF XFONT
+syn keyword idlangRoutine XINTERANIMATE XLOADCT XMANAGER XMNG_TMPL XMTOOL
+syn keyword idlangRoutine XOBJVIEW XPALETTE XPCOLOR XPLOT3D XREGISTERED XROI
+syn keyword idlangRoutine XSQ_TEST XSURFACE XVAREDIT XVOLUME XVOLUME_ROTATE
+syn keyword idlangRoutine XVOLUME_WRITE_IMAGE XYOUTS ZOOM ZOOM_24
+
+" 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_idlang_syn_inits")
+ if version < 508
+ let did_idlang_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+else
+ command -nargs=+ HiLink hi def link <args>
+endif
+
+ HiLink idlangConditional Conditional
+ HiLink idlangRoutine Type
+ HiLink idlangStatement Statement
+ HiLink idlangContinueLine Todo
+ HiLink idlangRealNumber Float
+ HiLink idlangNumber Number
+ HiLink idlangString String
+ HiLink idlangOperator Operator
+ HiLink idlangComment Comment
+ HiLink idlangTodo Todo
+ HiLink idlangPreCondit Identifier
+ HiLink idlangDblCommaError Error
+ HiLink idlangStop Error
+ HiLink idlangStrucvar PreProc
+ HiLink idlangSystem Identifier
+ HiLink idlangKeyword Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "idlang"
+" vim: ts=18
diff --git a/runtime/syntax/indent.vim b/runtime/syntax/indent.vim
new file mode 100644
index 000000000..b9f3c7e7c
--- /dev/null
+++ b/runtime/syntax/indent.vim
@@ -0,0 +1,101 @@
+" Vim syntax file
+" Language: indent RC File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/indent/
+" Latest Revision: 2004-05-22
+" arch-tag: 23c11190-79fa-4493-9fc5-36435402a20d
+" TODO: is the deny-all (a la lilo.vim nice or no?)...
+" irritating to be wrong to the last char...
+" would be sweet if right until one char fails
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk 48-57,65-90,97-122,-,_
+delcommand SetIsk
+
+" errors
+syn match indentError "\S\+"
+
+" todo
+syn keyword indentTodo contained TODO FIXME XXX NOTE
+
+" comments
+syn region indentComment matchgroup=indentComment start="/\*" end="\*/" contains=indentTodo
+
+" keywords (command-line switches)
+syn match indentOptions "\<--\(no-\)\=blank-\(before-sizeof\|Bill-Shannon\|lines-\(after-\(commas\|declarations\|procedures\)\|before-block-comments\)\)\>"
+syn match indentOptions "\<--brace-indent\s*\d\+\>"
+syn match indentOptions "\<--braces-\(after\|on\)-\(if\|struct-decl\)-line\>"
+syn match indentOptions "\<--break-\(\(after\|before\)-boolean-operator\|function-decl-args\)\>"
+syn match indentOptions "\<--\(case\(-brace\)\=\|comment\|continuation\|declaration\|line-comments\|parameter\|paren\|struct-brace\)-indentation\s*\d\+\>"
+syn match indentOptions "\<--\(no-\)\=comment-delimiters-on-blank-lines\>"
+syn match indentOptions "\<--\(dont-\)\=cuddle-\(do-while\|else\)\>"
+syn match indentOptions "\<--\(declaration-comment\|else-endif\)-column\s*\d\+\>"
+syn match indentOptions "\<--dont-break-\(function-decl-args\|procedure-type\)\>"
+syn match indentOptions "\<--\(dont-\)\=\(format\(-first-column\)\=\|star\)-comments\>"
+syn match indentOptions "\<--\(honour\|ignore\)-newlines\>"
+syn match indentOptions "\<--\(indent-level\|\(comment-\)\=line-length\)\s*\d\+\>"
+syn match indentOptions "\<--\(leave\|remove\)-preprocessor-space\>"
+"not 100%, since casts\= should always be cast if no- isn't given
+syn match indentOptions "\<--\(no-\)\=space-after-\(parentheses\|casts\=\|for\|if\|while\)\>"
+syn match indentOptions "\<--\(dont-\)\=space-special-semicolon\>"
+syn match indentOptions "\<--\(leave\|swallow\)-optional-blank-lines\>"
+syn match indentOptions "\<--tab-size\s*\d\+\>"
+syn match indentOptions "\<--\(no\|use\)-tabs\>"
+syn keyword indentOptions --gnu-style --ignore-profile --k-and-r-style --original
+syn keyword indentOptions --preserve-mtime --no-verbosity --verbose --output-file
+syn keyword indentOptions --no-parameter-indentation --procnames-start-lines
+syn keyword indentOptions --standard-output --start-left-side-of-comments
+syn keyword indentOptions --space-after-procedure-calls
+" this also here since the gnu indent fellas aren't consistent. (ever read
+" the code to `indent'? you'll know what i mean if you have)
+syn match indentOptions "\<-\(bli\|cbi\|cd\|ci\|cli\|c\|cp\|di\|d\|i\|ip\|l\|lc\|pi\|sbi\|ts\)\s*\d\+\>"
+syn match indentOptions "\<-T\s\+\w\+\>"
+syn keyword indentOptions --format-all-comments --continue-at-parentheses --dont-line-up-parentheses
+syn keyword indentOptions --no-space-after-function-call-names
+syn keyword indentOptions -bad -bap -bbb -bbo -bc -bfda -bl -br -bs -nbs -cdb -cdw -ce -cs -dce -fc1 -fca
+syn keyword indentOptions -gnu -hnl -kr -lp -lps -nbad -nbap -nbbb -nbbo -nbc -nbfda -ncdb -ncdw -nprs
+syn keyword indentOptions -nce -ncs -nfc1 -nfca -nhnl -nip -nlp -nlps -npcs -npmt -npro -npsl -nsaf -nsai
+syn keyword indentOptions -nsaw -nsc -nsob -nss -nv -o -orig -pcs -pmt -prs -psl -saf -sai -saw -sc
+syn keyword indentOptions -sob -ss -st -v -version -bls -brs -ut -nut
+
+if exists("indent_minlines")
+ let b:indent_minlines = indent_minlines
+else
+ let b:indent_minlines = 50
+endif
+exec "syn sync minlines=" . b:indent_minlines
+
+" 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_indent_syn_inits")
+ if version < 508
+ let did_indent_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink indentError Error
+ HiLink indentComment Comment
+ HiLink indentTodo Todo
+ HiLink indentOptions Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "indent"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/inform.vim b/runtime/syntax/inform.vim
new file mode 100644
index 000000000..11901639c
--- /dev/null
+++ b/runtime/syntax/inform.vim
@@ -0,0 +1,408 @@
+" Vim syntax file
+" Language: Inform
+" Maintainer: Stephen Thomas (informvim@stephenthomas.uklinux.net)
+" URL: http://www.stephenthomas.uklinux.net/informvim
+" Last Change: 2004 May 16
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" A bunch of useful Inform keywords. First, case insensitive stuff
+
+syn case ignore
+
+syn keyword informDefine Constant
+
+syn keyword informType Array Attribute Class Nearby
+syn keyword informType Object Property String Routine
+syn match informType "\<Global\>"
+
+syn keyword informInclude Import Include Link Replace System_file
+
+syn keyword informPreCondit End Endif Ifdef Ifndef Iftrue Iffalse Ifv3 Ifv5
+syn keyword informPreCondit Ifnot
+
+syn keyword informPreProc Abbreviate Default Fake_action Lowstring
+syn keyword informPreProc Message Release Serial Statusline Stub Switches
+syn keyword informPreProc Trace Zcharacter
+
+syn region informGlobalRegion matchgroup=informType start="\<Global\>" matchgroup=NONE skip=+!.*$\|".*"\|'.*'+ end=";" contains=ALLBUT,informGramPreProc,informPredicate,informGrammar,informAsm,informAsmObsolete
+
+syn keyword informGramPreProc contained Verb Extend
+
+if !exists("inform_highlight_simple")
+ syn keyword informLibAttrib absent animate clothing concealed container
+ syn keyword informLibAttrib door edible enterable female general light
+ syn keyword informLibAttrib lockable locked male moved neuter on open
+ syn keyword informLibAttrib openable pluralname proper scenery scored
+ syn keyword informLibAttrib static supporter switchable talkable
+ syn keyword informLibAttrib visited workflag worn
+ syn match informLibAttrib "\<transparent\>"
+
+ syn keyword informLibProp e_to se_to s_to sw_to w_to nw_to n_to ne_to
+ syn keyword informLibProp u_to d_to in_to out_to before after life
+ syn keyword informLibProp door_to with_key door_dir invent plural
+ syn keyword informLibProp add_to_scope list_together react_before
+ syn keyword informLibProp react_after grammar orders initial when_open
+ syn keyword informLibProp when_closed when_on when_off description
+ syn keyword informLibProp describe article cant_go found_in time_left
+ syn keyword informLibProp number time_out daemon each_turn capacity
+ syn keyword informLibProp name short_name short_name_indef parse_name
+ syn keyword informLibProp articles inside_description
+ if !exists("inform_highlight_old")
+ syn keyword informLibProp compass_look before_implicit
+ syn keyword informLibProp ext_initialise ext_messages
+ endif
+
+ syn keyword informLibObj e_obj se_obj s_obj sw_obj w_obj nw_obj n_obj
+ syn keyword informLibObj ne_obj u_obj d_obj in_obj out_obj compass
+ syn keyword informLibObj thedark selfobj player location second actor
+ syn keyword informLibObj noun
+ if !exists("inform_highlight_old")
+ syn keyword informLibObj LibraryExtensions
+ endif
+
+ syn keyword informLibRoutine Achieved AfterRoutines AddToScope
+ syn keyword informLibRoutine AllowPushDir Banner ChangeDefault
+ syn keyword informLibRoutine ChangePlayer CommonAncestor DictionaryLookup
+ syn keyword informLibRoutine DisplayStatus DoMenu DrawStatusLine
+ syn keyword informLibRoutine EnglishNumber HasLightSource GetGNAOfObject
+ syn keyword informLibRoutine IndirectlyContains IsSeeThrough Locale
+ syn keyword informLibRoutine LoopOverScope LTI_Insert MoveFloatingObjects
+ syn keyword informLibRoutine NextWord NextWordStopped NounDomain
+ syn keyword informLibRoutine ObjectIsUntouchable OffersLight ParseToken
+ syn keyword informLibRoutine PlaceInScope PlayerTo PrintShortName
+ syn keyword informLibRoutine PronounNotice ScopeWithin SetPronoun SetTime
+ syn keyword informLibRoutine StartDaemon StartTimer StopDaemon StopTimer
+ syn keyword informLibRoutine TestScope TryNumber UnsignedCompare
+ syn keyword informLibRoutine WordAddress WordInProperty WordLength
+ syn keyword informLibRoutine WriteListFrom YesOrNo ZRegion RunRoutines
+ syn keyword informLibRoutine AfterLife AfterPrompt Amusing BeforeParsing
+ syn keyword informLibRoutine ChooseObjects DarkToDark DeathMessage
+ syn keyword informLibRoutine GamePostRoutine GamePreRoutine Initialise
+ syn keyword informLibRoutine InScope LookRoutine NewRoom ParseNoun
+ syn keyword informLibRoutine ParseNumber ParserError PrintRank PrintVerb
+ syn keyword informLibRoutine PrintTaskName TimePasses UnknownVerb
+ if exists("inform_highlight_glulx")
+ syn keyword informLibRoutine IdentifyGlkObject HandleGlkEvent
+ syn keyword informLibRoutine InitGlkWindow
+ endif
+ if !exists("inform_highlight_old")
+ syn keyword informLibRoutine KeyCharPrimitive KeyDelay ClearScreen
+ syn keyword informLibRoutine MoveCursor MainWindow StatusLineHeight
+ syn keyword informLibRoutine ScreenWidth ScreenHeight SetColour
+ syn keyword informLibRoutine DecimalNumber PrintToBuffer Length
+ syn keyword informLibRoutine UpperCase LowerCase PrintCapitalised
+ syn keyword informLibRoutine Cap Centre
+ if exists("inform_highlight_glulx")
+ syn keyword informLibRoutine PrintAnything PrintAnyToArray
+ endif
+ endif
+
+ syn keyword informLibAction Quit Restart Restore Verify Save
+ syn keyword informLibAction ScriptOn ScriptOff Pronouns Score
+ syn keyword informLibAction Fullscore LMode1 LMode2 LMode3
+ syn keyword informLibAction NotifyOn NotifyOff Version Places
+ syn keyword informLibAction Objects TraceOn TraceOff TraceLevel
+ syn keyword informLibAction ActionsOn ActionsOff RoutinesOn
+ syn keyword informLibAction RoutinesOff TimersOn TimersOff
+ syn keyword informLibAction CommandsOn CommandsOff CommandsRead
+ syn keyword informLibAction Predictable XPurloin XAbstract XTree
+ syn keyword informLibAction Scope Goto Gonear Inv InvTall InvWide
+ syn keyword informLibAction Take Drop Remove PutOn Insert Transfer
+ syn keyword informLibAction Empty Enter Exit GetOff Go Goin Look
+ syn keyword informLibAction Examine Search Give Show Unlock Lock
+ syn keyword informLibAction SwitchOn SwitchOff Open Close Disrobe
+ syn keyword informLibAction Wear Eat Yes No Burn Pray Wake
+ syn keyword informLibAction WakeOther Consult Kiss Think Smell
+ syn keyword informLibAction Listen Taste Touch Dig Cut Jump
+ syn keyword informLibAction JumpOver Tie Drink Fill Sorry Strong
+ syn keyword informLibAction Mild Attack Swim Swing Blow Rub Set
+ syn keyword informLibAction SetTo WaveHands Wave Pull Push PushDir
+ syn keyword informLibAction Turn Squeeze LookUnder ThrowAt Tell
+ syn keyword informLibAction Answer Buy Ask AskFor Sing Climb Wait
+ syn keyword informLibAction Sleep LetGo Receive ThrownAt Order
+ syn keyword informLibAction TheSame PluralFound Miscellany Prompt
+ syn keyword informLibAction ChangesOn ChangesOff Showverb Showobj
+ syn keyword informLibAction EmptyT VagueGo
+ if exists("inform_highlight_glulx")
+ syn keyword informLibAction GlkList
+ endif
+
+ syn keyword informLibVariable keep_silent deadflag action special_number
+ syn keyword informLibVariable consult_from consult_words etype verb_num
+ syn keyword informLibVariable verb_word the_time real_location c_style
+ syn keyword informLibVariable parser_one parser_two listing_together wn
+ syn keyword informLibVariable parser_action scope_stage scope_reason
+ syn keyword informLibVariable action_to_be menu_item item_name item_width
+ syn keyword informLibVariable lm_o lm_n inventory_style task_scores
+ syn keyword informLibVariable inventory_stage
+
+ syn keyword informLibConst AMUSING_PROVIDED DEBUG Headline MAX_CARRIED
+ syn keyword informLibConst MAX_SCORE MAX_TIMERS NO_PLACES NUMBER_TASKS
+ syn keyword informLibConst OBJECT_SCORE ROOM_SCORE SACK_OBJECT Story
+ syn keyword informLibConst TASKS_PROVIDED WITHOUT_DIRECTIONS
+ syn keyword informLibConst NEWLINE_BIT INDENT_BIT FULLINV_BIT ENGLISH_BIT
+ syn keyword informLibConst RECURSE_BIT ALWAYS_BIT TERSE_BIT PARTINV_BIT
+ syn keyword informLibConst DEFART_BIT WORKFLAG_BIT ISARE_BIT CONCEAL_BIT
+ syn keyword informLibConst PARSING_REASON TALKING_REASON EACHTURN_REASON
+ syn keyword informLibConst REACT_BEFORE_REASON REACT_AFTER_REASON
+ syn keyword informLibConst TESTSCOPE_REASON LOOPOVERSCOPE_REASON
+ syn keyword informLibConst STUCK_PE UPTO_PE NUMBER_PE CANTSEE_PE TOOLIT_PE
+ syn keyword informLibConst NOTHELD_PE MULTI_PE MMULTI_PE VAGUE_PE EXCEPT_PE
+ syn keyword informLibConst ANIMA_PE VERB_PE SCENERY_PE ITGONE_PE
+ syn keyword informLibConst JUNKAFTER_PE TOOFEW_PE NOTHING_PE ASKSCOPE_PE
+ if !exists("inform_highlight_old")
+ syn keyword informLibConst WORDSIZE TARGET_ZCODE TARGET_GLULX
+ syn keyword informLibConst LIBRARY_PARSER LIBRARY_VERBLIB LIBRARY_GRAMMAR
+ syn keyword informLibConst LIBRARY_ENGLISH NO_SCORE START_MOVE
+ syn keyword informLibConst CLR_DEFAULT CLR_BLACK CLR_RED CLR_GREEN
+ syn keyword informLibConst CLR_YELLOW CLR_BLUE CLR_MAGENTA CLR_CYAN
+ syn keyword informLibConst CLR_WHITE CLR_PURPLE CLR_AZURE
+ syn keyword informLibConst WIN_ALL WIN_MAIN WIN_STATUS
+ endif
+endif
+
+" Now the case sensitive stuff.
+
+syntax case match
+
+syn keyword informSysFunc child children elder indirect parent random
+syn keyword informSysFunc sibling younger youngest metaclass
+if exists("inform_highlight_glulx")
+ syn keyword informSysFunc glk
+endif
+
+syn keyword informSysConst adjectives_table actions_table classes_table
+syn keyword informSysConst identifiers_table preactions_table version_number
+syn keyword informSysConst largest_object strings_offset code_offset
+syn keyword informSysConst dict_par1 dict_par2 dict_par3
+syn keyword informSysConst actual_largest_object static_memory_offset
+syn keyword informSysConst array_names_offset readable_memory_offset
+syn keyword informSysConst cpv__start cpv__end ipv__start ipv__end
+syn keyword informSysConst array__start array__end lowest_attribute_number
+syn keyword informSysConst highest_attribute_number attribute_names_array
+syn keyword informSysConst lowest_property_number highest_property_number
+syn keyword informSysConst property_names_array lowest_action_number
+syn keyword informSysConst highest_action_number action_names_array
+syn keyword informSysConst lowest_fake_action_number highest_fake_action_number
+syn keyword informSysConst fake_action_names_array lowest_routine_number
+syn keyword informSysConst highest_routine_number routines_array
+syn keyword informSysConst routine_names_array routine_flags_array
+syn keyword informSysConst lowest_global_number highest_global_number globals_array
+syn keyword informSysConst global_names_array global_flags_array
+syn keyword informSysConst lowest_array_number highest_array_number arrays_array
+syn keyword informSysConst array_names_array array_flags_array lowest_constant_number
+syn keyword informSysConst highest_constant_number constants_array constant_names_array
+syn keyword informSysConst lowest_class_number highest_class_number class_objects_array
+syn keyword informSysConst lowest_object_number highest_object_number
+if !exists("inform_highlight_old")
+ syn keyword informSysConst sys_statusline_flag
+endif
+
+syn keyword informConditional default else if switch
+
+syn keyword informRepeat break continue do for objectloop until while
+
+syn keyword informStatement box font give inversion jump move new_line
+syn keyword informStatement print print_ret quit read remove restore return
+syn keyword informStatement rfalse rtrue save spaces string style
+
+syn keyword informOperator roman reverse bold underline fixed on off to
+syn keyword informOperator near from
+
+syn keyword informKeyword dictionary symbols objects verbs assembly
+syn keyword informKeyword expressions lines tokens linker on off alias long
+syn keyword informKeyword additive score time string table
+syn keyword informKeyword with private has class error fatalerror
+syn keyword informKeyword warning self
+if !exists("inform_highlight_old")
+ syn keyword informKeyword buffer
+endif
+
+syn keyword informMetaAttrib remaining create destroy recreate copy call
+syn keyword informMetaAttrib print_to_array
+
+syn keyword informPredicate has hasnt in notin ofclass or
+syn keyword informPredicate provides
+
+syn keyword informGrammar contained noun held multi multiheld multiexcept
+syn keyword informGrammar contained multiinside creature special number
+syn keyword informGrammar contained scope topic reverse meta only replace
+syn keyword informGrammar contained first last
+
+syn keyword informKeywordObsolete contained initial data initstr
+
+syn keyword informTodo contained TODO
+
+" Assembly language mnemonics must be preceded by a '@'.
+
+syn match informAsmContainer "@\s*\k*" contains=informAsm,informAsmObsolete
+
+if exists("inform_highlight_glulx")
+ syn keyword informAsm contained nop add sub mul div mod neg bitand bitor
+ syn keyword informAsm contained bitxor bitnot shiftl sshiftr ushiftr jump jz
+ syn keyword informAsm contained jnz jeq jne jlt jge jgt jle jltu jgeu jgtu
+ syn keyword informAsm contained jleu call return catch throw tailcall copy
+ syn keyword informAsm contained copys copyb sexs sexb aload aloads aloadb
+ syn keyword informAsm contained aloadbit astore astores astoreb astorebit
+ syn keyword informAsm contained stkcount stkpeek stkswap stkroll stkcopy
+ syn keyword informAsm contained streamchar streamnum streamstr gestalt
+ syn keyword informAsm contained debugtrap getmemsize setmemsize jumpabs
+ syn keyword informAsm contained random setrandom quit verify restart save
+ syn keyword informAsm contained restore saveundo restoreundo protect glk
+ syn keyword informAsm contained getstringtbl setstringtbl getiosys setiosys
+ syn keyword informAsm contained linearsearch binarysearch linkedsearch
+ syn keyword informAsm contained callf callfi callfii callfiii
+else
+ syn keyword informAsm contained je jl jg dec_chk inc_chk jin test or and
+ syn keyword informAsm contained test_attr set_attr clear_attr store
+ syn keyword informAsm contained insert_obj loadw loadb get_prop
+ syn keyword informAsm contained get_prop_addr get_next_prop add sub mul div
+ syn keyword informAsm contained mod call storew storeb put_prop sread
+ syn keyword informAsm contained print_num random push pull
+ syn keyword informAsm contained split_window set_window output_stream
+ syn keyword informAsm contained input_stream sound_effect jz get_sibling
+ syn keyword informAsm contained get_child get_parent get_prop_len inc dec
+ syn keyword informAsm contained remove_obj print_obj ret jump
+ syn keyword informAsm contained load not rtrue rfalse print
+ syn keyword informAsm contained print_ret nop save restore restart
+ syn keyword informAsm contained ret_popped pop quit new_line show_status
+ syn keyword informAsm contained verify call_2s call_vs aread call_vs2
+ syn keyword informAsm contained erase_window erase_line set_cursor get_cursor
+ syn keyword informAsm contained set_text_style buffer_mode read_char
+ syn keyword informAsm contained scan_table call_1s call_2n set_colour throw
+ syn keyword informAsm contained call_vn call_vn2 tokenise encode_text
+ syn keyword informAsm contained copy_table print_table check_arg_count
+ syn keyword informAsm contained call_1n catch piracy log_shift art_shift
+ syn keyword informAsm contained set_font save_undo restore_undo draw_picture
+ syn keyword informAsm contained picture_data erase_picture set_margins
+ syn keyword informAsm contained move_window window_size window_style
+ syn keyword informAsm contained get_wind_prop scroll_window pop_stack
+ syn keyword informAsm contained read_mouse mouse_window push_stack
+ syn keyword informAsm contained put_wind_prop print_form make_menu
+ syn keyword informAsm contained picture_table
+ if !exists("inform_highlight_old")
+ syn keyword informAsm contained check_unicode print_unicode
+ endif
+ syn keyword informAsmObsolete contained print_paddr print_addr print_char
+endif
+
+" Handling for different versions of VIM.
+
+if version >= 600
+ setlocal iskeyword+=$
+ command -nargs=+ SynDisplay syntax <args> display
+else
+ set iskeyword+=$
+ command -nargs=+ SynDisplay syntax <args>
+endif
+
+" Grammar sections.
+
+syn region informGrammarSection matchgroup=informGramPreProc start="\<Verb\|Extend\>" skip=+".*"+ end=";"he=e-1 contains=ALLBUT,informAsm
+
+" Special character forms.
+
+SynDisplay match informBadAccent contained "@[^{[:digit:]]\D"
+SynDisplay match informBadAccent contained "@{[^}]*}"
+SynDisplay match informAccent contained "@:[aouAOUeiyEI]"
+SynDisplay match informAccent contained "@'[aeiouyAEIOUY]"
+SynDisplay match informAccent contained "@`[aeiouAEIOU]"
+SynDisplay match informAccent contained "@\^[aeiouAEIOU]"
+SynDisplay match informAccent contained "@\~[anoANO]"
+SynDisplay match informAccent contained "@/[oO]"
+SynDisplay match informAccent contained "@ss\|@<<\|@>>\|@oa\|@oA\|@ae\|@AE\|@cc\|@cC"
+SynDisplay match informAccent contained "@th\|@et\|@Th\|@Et\|@LL\|@oe\|@OE\|@!!\|@??"
+SynDisplay match informAccent contained "@{\x\{1,4}}"
+SynDisplay match informBadStrUnicode contained "@@\D"
+SynDisplay match informStringUnicode contained "@@\d\+"
+SynDisplay match informStringCode contained "@\d\d"
+
+" String and Character constants. Ordering is important here.
+syn region informString start=+"+ skip=+\\\\+ end=+"+ contains=informAccent,informStringUnicode,informStringCode,informBadAccent,informBadStrUnicode
+syn region informDictString start="'" end="'" contains=informAccent,informBadAccent
+SynDisplay match informBadDictString "''"
+SynDisplay match informDictString "'''"
+
+" Integer numbers: decimal, hexadecimal and binary.
+SynDisplay match informNumber "\<\d\+\>"
+SynDisplay match informNumber "\<\$\x\+\>"
+SynDisplay match informNumber "\<\$\$[01]\+\>"
+
+" Comments
+syn match informComment "!.*" contains=informTodo
+
+" Syncronization
+syn sync match informSyncStringEnd grouphere NONE /"[;,]\s*$/
+syn sync match informSyncRoutineEnd grouphere NONE /][;,]\s*$/
+syn sync match informSyncCommentEnd grouphere NONE /^\s*!.*$/
+syn sync match informSyncRoutine groupthere informGrammarSection "\<Verb\|Extend\>"
+syn sync maxlines=500
+
+delcommand SynDisplay
+
+" The default highlighting.
+if version >= 508 || !exists("did_inform_syn_inits")
+ if version < 508
+ let did_inform_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink informDefine Define
+ HiLink informType Type
+ HiLink informInclude Include
+ HiLink informPreCondit PreCondit
+ HiLink informPreProc PreProc
+ HiLink informGramPreProc PreProc
+ HiLink informAsm Special
+ if !exists("inform_suppress_obsolete")
+ HiLink informAsmObsolete informError
+ HiLink informKeywordObsolete informError
+ else
+ HiLink informAsmObsolete Special
+ HiLink informKeywordObsolete Keyword
+ endif
+ HiLink informPredicate Operator
+ HiLink informSysFunc Identifier
+ HiLink informSysConst Identifier
+ HiLink informConditional Conditional
+ HiLink informRepeat Repeat
+ HiLink informStatement Statement
+ HiLink informOperator Operator
+ HiLink informKeyword Keyword
+ HiLink informGrammar Keyword
+ HiLink informDictString String
+ HiLink informNumber Number
+ HiLink informError Error
+ HiLink informString String
+ HiLink informComment Comment
+ HiLink informAccent Special
+ HiLink informStringUnicode Special
+ HiLink informStringCode Special
+ HiLink informTodo Todo
+ if !exists("inform_highlight_simple")
+ HiLink informLibAttrib Identifier
+ HiLink informLibProp Identifier
+ HiLink informLibObj Identifier
+ HiLink informLibRoutine Identifier
+ HiLink informLibVariable Identifier
+ HiLink informLibConst Identifier
+ HiLink informLibAction Identifier
+ endif
+ HiLink informBadDictString informError
+ HiLink informBadAccent informError
+ HiLink informBadStrUnicode informError
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "inform"
+
+" vim: ts=8
diff --git a/runtime/syntax/inittab.vim b/runtime/syntax/inittab.vim
new file mode 100644
index 000000000..b7472f9e0
--- /dev/null
+++ b/runtime/syntax/inittab.vim
@@ -0,0 +1,75 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: SysV-compatible init process control file `inittab'
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-09-13
+" URL: http://physics.muni.cz/~yeti/download/syntax/inittab.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+syn case match
+
+" Base constructs
+syn match inittabError "[^:]\+:"me=e-1 contained
+syn match inittabError "[^:]\+$" contained
+syn match inittabComment "^[#:].*$" contains=inittabFixme
+syn match inittabComment "#.*$" contained contains=inittabFixme
+syn keyword inittabFixme FIXME TODO XXX NOT
+
+" Shell
+syn region inittabShString start=+"+ end=+"+ skip=+\\\\\|\\\"+ contained
+syn region inittabShString start=+'+ end=+'+ contained
+syn match inittabShOption "\s[-+][[:alnum:]]\+"ms=s+1 contained
+syn match inittabShOption "\s--[:alnum:][-[:alnum:]]*"ms=s+1 contained
+syn match inittabShCommand "/\S\+" contained
+syn cluster inittabSh add=inittabShOption,inittabShString,inittabShCommand
+
+" Keywords
+syn keyword inittabActionName respawn wait once boot bootwait off ondemand sysinit powerwait powerfail powerokwait powerfailnow ctrlaltdel kbrequest initdefault contained
+
+" Line parser
+syn match inittabId "^[[:alnum:]~]\{1,4}" nextgroup=inittabColonRunLevels,inittabError
+syn match inittabColonRunLevels ":" contained nextgroup=inittabRunLevels,inittabColonAction,inittabError
+syn match inittabRunLevels "[0-6A-Ca-cSs]\+" contained nextgroup=inittabColonAction,inittabError
+syn match inittabColonAction ":" contained nextgroup=inittabAction,inittabError
+syn match inittabAction "\w\+" contained nextgroup=inittabColonProcess,inittabError contains=inittabActionName
+syn match inittabColonProcess ":" contained nextgroup=inittabProcessPlus,inittabProcess,inittabError
+syn match inittabProcessPlus "+" contained nextgroup=inittabProcess,inittabError
+syn region inittabProcess start="/" end="$" transparent oneline contained contains=@inittabSh,inittabComment
+
+" Define the default highlighting
+if version >= 508 || !exists("did_inittab_syntax_inits")
+ if version < 508
+ let did_inittab_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink inittabComment Comment
+ HiLink inittabFixme Todo
+ HiLink inittabActionName Type
+ HiLink inittabError Error
+ HiLink inittabId Identifier
+ HiLink inittabRunLevels Special
+
+ HiLink inittabColonProcess inittabColon
+ HiLink inittabColonAction inittabColon
+ HiLink inittabColonRunLevels inittabColon
+ HiLink inittabColon PreProc
+
+ HiLink inittabShString String
+ HiLink inittabShOption Special
+ HiLink inittabShCommand Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "inittab"
diff --git a/runtime/syntax/ipfilter.vim b/runtime/syntax/ipfilter.vim
new file mode 100644
index 000000000..e1e6fc412
--- /dev/null
+++ b/runtime/syntax/ipfilter.vim
@@ -0,0 +1,43 @@
+" ipfilter syntax file
+" Language: ipfilter configuration file
+" Maintainer: Hendrik Scholz <hendrik@scholz.net>
+" Last Change: 2003 May 11
+"
+" http://raisdorf.net/files/misc/ipfilter.vim
+"
+" This will also work for OpenBSD pf but there might be some tags that are
+" not correctly identified.
+" Please send comments to hendrik@scholz.net
+
+" 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
+
+" comments
+syn match ipfComment /#/
+"syn match ipfComment /#.*/
+
+syn keyword ipfQuick quick log dup-to
+syn keyword ipfAny all any
+" rule Action type
+syn region ipfActionBlock start=/^block/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionPass start=/^pass/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionMisc start=/^log/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionMisc start=/^count/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionMisc start=/^skip/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionMisc start=/^auth/ end=/$/ contains=ipfQuick,ipfAny
+syn region ipfActionMisc start=/^call/ end=/$/ contains=ipfQuick,ipfAny
+
+hi def link ipfComment Comment
+hi def link ipfActionBlock String
+hi def link ipfActionPass Type
+hi def link ipfActionMisc Label
+"hi def link ipfQuick Error
+hi def link ipfQuick Special
+hi def link ipfAny Todo
+
+
diff --git a/runtime/syntax/ishd.vim b/runtime/syntax/ishd.vim
new file mode 100644
index 000000000..1c011f1b9
--- /dev/null
+++ b/runtime/syntax/ishd.vim
@@ -0,0 +1,422 @@
+" Vim syntax file
+" Language: InstallShield Script
+" Maintainer: Robert M. Cortopassi <cortopar@mindspring.com>
+" Last Change: 2001 May 09
+
+" 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 keyword ishdStatement abort begin case default downto else end
+syn keyword ishdStatement endif endfor endwhile endswitch endprogram exit elseif
+syn keyword ishdStatement error for function goto if
+syn keyword ishdStatement program prototype return repeat string step switch
+syn keyword ishdStatement struct then to typedef until while
+
+syn keyword ishdType BOOL BYREF CHAR GDI HWND INT KERNEL LIST LONG
+syn keyword ishdType NUMBER POINTER SHORT STRING USER
+
+syn keyword ishdConstant _MAX_LENGTH _MAX_STRING
+syn keyword ishdConstant AFTER ALLCONTENTS ALLCONTROLS APPEND ASKDESTPATH
+syn keyword ishdConstant ASKOPTIONS ASKPATH ASKTEXT BATCH_INSTALL BACK
+syn keyword ishdConstant BACKBUTTON BACKGROUND BACKGROUNDCAPTION BADPATH
+syn keyword ishdConstant BADTAGFILE BASEMEMORY BEFORE BILLBOARD BINARY
+syn keyword ishdConstant BITMAP256COLORS BITMAPFADE BITMAPICON BK_BLUE BK_GREEN
+syn keyword ishdConstant BK_MAGENTA BK_MAGENTA1 BK_ORANGE BK_PINK BK_RED
+syn keyword ishdConstant BK_SMOOTH BK_SOLIDBLACK BK_SOLIDBLUE BK_SOLIDGREEN
+syn keyword ishdConstant BK_SOLIDMAGENTA BK_SOLIDORANGE BK_SOLIDPINK BK_SOLIDRED
+syn keyword ishdConstant BK_SOLIDWHITE BK_SOLIDYELLOW BK_YELLOW BLACK BLUE
+syn keyword ishdConstant BOOTUPDRIVE BUTTON_CHECKED BUTTON_ENTER BUTTON_UNCHECKED
+syn keyword ishdConstant BUTTON_UNKNOWN CMDLINE COMMONFILES CANCEL CANCELBUTTON
+syn keyword ishdConstant CC_ERR_FILEFORMATERROR CC_ERR_FILEREADERROR
+syn keyword ishdConstant CC_ERR_NOCOMPONENTLIST CC_ERR_OUTOFMEMORY CDROM
+syn keyword ishdConstant CDROM_DRIVE CENTERED CHANGEDIR CHECKBOX CHECKBOX95
+syn keyword ishdConstant CHECKLINE CHECKMARK CMD_CLOSE CMD_MAXIMIZE CMD_MINIMIZE
+syn keyword ishdConstant CMD_PUSHDOWN CMD_RESTORE COLORMODE256 COLORS
+syn keyword ishdConstant COMBOBOX_ENTER COMBOBOX_SELECT COMMAND COMMANDEX
+syn keyword ishdConstant COMMON COMP_DONE COMP_ERR_CREATEDIR
+syn keyword ishdConstant COMP_ERR_DESTCONFLICT COMP_ERR_FILENOTINLIB
+syn keyword ishdConstant COMP_ERR_FILESIZE COMP_ERR_FILETOOLARGE
+syn keyword ishdConstant COMP_ERR_HEADER COMP_ERR_INCOMPATIBLE
+syn keyword ishdConstant COMP_ERR_INTPUTNOTCOMPRESSED COMP_ERR_INVALIDLIST
+syn keyword ishdConstant COMP_ERR_LAUNCHSERVER COMP_ERR_MEMORY
+syn keyword ishdConstant COMP_ERR_NODISKSPACE COMP_ERR_OPENINPUT
+syn keyword ishdConstant COMP_ERR_OPENOUTPUT COMP_ERR_OPTIONS
+syn keyword ishdConstant COMP_ERR_OUTPUTNOTCOMPRESSED COMP_ERR_SPLIT
+syn keyword ishdConstant COMP_ERR_TARGET COMP_ERR_TARGETREADONLY COMP_ERR_WRITE
+syn keyword ishdConstant COMP_INFO_ATTRIBUTE COMP_INFO_COMPSIZE COMP_INFO_DATE
+syn keyword ishdConstant COMP_INFO_INVALIDATEPASSWORD COMP_INFO_ORIGSIZE
+syn keyword ishdConstant COMP_INFO_SETPASSWORD COMP_INFO_TIME
+syn keyword ishdConstant COMP_INFO_VERSIONLS COMP_INFO_VERSIONMS COMP_NORMAL
+syn keyword ishdConstant COMP_UPDATE_DATE COMP_UPDATE_DATE_NEWER
+syn keyword ishdConstant COMP_UPDATE_SAME COMP_UPDATE_VERSION COMPACT
+syn keyword ishdConstant COMPARE_DATE COMPARE_SIZE COMPARE_VERSION
+syn keyword ishdConstant COMPONENT_FIELD_CDROM_FOLDER
+syn keyword ishdConstant COMPONENT_FIELD_DESCRIPTION COMPONENT_FIELD_DESTINATION
+syn keyword ishdConstant COMPONENT_FIELD_DISPLAYNAME COMPONENT_FIELD_FILENEED
+syn keyword ishdConstant COMPONENT_FIELD_FTPLOCATION
+syn keyword ishdConstant COMPONENT_FIELD_HTTPLOCATION COMPONENT_FIELD_MISC
+syn keyword ishdConstant COMPONENT_FIELD_OVERWRITE COMPONENT_FIELD_PASSWORD
+syn keyword ishdConstant COMPONENT_FIELD_SELECTED COMPONENT_FIELD_SIZE
+syn keyword ishdConstant COMPONENT_FIELD_STATUS COMPONENT_FIELD_VISIBLE
+syn keyword ishdConstant COMPONENT_FILEINFO_COMPRESSED
+syn keyword ishdConstant COMPONENT_FILEINFO_COMPRESSENGINE
+syn keyword ishdConstant COMPONENT_FILEINFO_LANGUAGECOMPONENT_FILEINFO_OS
+syn keyword ishdConstant COMPONENT_FILEINFO_POTENTIALLYLOCKED
+syn keyword ishdConstant COMPONENT_FILEINFO_SELFREGISTERING
+syn keyword ishdConstant COMPONENT_FILEINFO_SHARED COMPONENT_INFO_ATTRIBUTE
+syn keyword ishdConstant COMPONENT_INFO_COMPSIZE COMPONENT_INFO_DATE
+syn keyword ishdConstant COMPONENT_INFO_DATE_EX_EX COMPONENT_INFO_LANGUAGE
+syn keyword ishdConstant COMPONENT_INFO_ORIGSIZE COMPONENT_INFO_OS
+syn keyword ishdConstant COMPONENT_INFO_TIME COMPONENT_INFO_VERSIONLS
+syn keyword ishdConstant COMPONENT_INFO_VERSIONMS COMPONENT_INFO_VERSIONSTR
+syn keyword ishdConstant COMPONENT_VALUE_ALWAYSOVERWRITE
+syn keyword ishdConstant COMPONENT_VALUE_CRITICAL
+syn keyword ishdConstant COMPONENT_VALUE_HIGHLYRECOMMENDED
+syn keyword ishdConstant COMPONENT_FILEINFO_LANGUAGE COMPONENT_FILEINFO_OS
+syn keyword ishdConstant COMPONENT_VALUE_NEVEROVERWRITE
+syn keyword ishdConstant COMPONENT_VALUE_NEWERDATE COMPONENT_VALUE_NEWERVERSION
+syn keyword ishdConstant COMPONENT_VALUE_OLDERDATE COMPONENT_VALUE_OLDERVERSION
+syn keyword ishdConstant COMPONENT_VALUE_SAMEORNEWDATE
+syn keyword ishdConstant COMPONENT_VALUE_SAMEORNEWERVERSION
+syn keyword ishdConstant COMPONENT_VALUE_STANDARD COMPONENT_VIEW_CHANGE
+syn keyword ishdConstant COMPONENT_INFO_DATE_EX COMPONENT_VIEW_CHILDVIEW
+syn keyword ishdConstant COMPONENT_VIEW_COMPONENT COMPONENT_VIEW_DESCRIPTION
+syn keyword ishdConstant COMPONENT_VIEW_MEDIA COMPONENT_VIEW_PARENTVIEW
+syn keyword ishdConstant COMPONENT_VIEW_SIZEAVAIL COMPONENT_VIEW_SIZETOTAL
+syn keyword ishdConstant COMPONENT_VIEW_TARGETLOCATION COMPRESSHIGH COMPRESSLOW
+syn keyword ishdConstant COMPRESSMED COMPRESSNONE CONTIGUOUS CONTINUE
+syn keyword ishdConstant COPY_ERR_CREATEDIR COPY_ERR_NODISKSPACE
+syn keyword ishdConstant COPY_ERR_OPENINPUT COPY_ERR_OPENOUTPUT
+syn keyword ishdConstant COPY_ERR_TARGETREADONLY COPY_ERR_MEMORY
+syn keyword ishdConstant CORECOMPONENTHANDLING CPU CUSTOM DATA_COMPONENT
+syn keyword ishdConstant DATA_LIST DATA_NUMBER DATA_STRING DATE DEFAULT
+syn keyword ishdConstant DEFWINDOWMODE DELETE_EOF DIALOG DIALOGCACHE
+syn keyword ishdConstant DIALOGTHINFONT DIR_WRITEABLE DIRECTORY DISABLE DISK
+syn keyword ishdConstant DISK_FREESPACE DISK_TOTALSPACE DISKID DLG_ASK_OPTIONS
+syn keyword ishdConstant DLG_ASK_PATH DLG_ASK_TEXT DLG_ASK_YESNO DLG_CANCEL
+syn keyword ishdConstant DLG_CDIR DLG_CDIR_MSG DLG_CENTERED DLG_CLOSE
+syn keyword ishdConstant DLG_DIR_DIRECTORY DLG_DIR_FILE DLG_ENTER_DISK DLG_ERR
+syn keyword ishdConstant DLG_ERR_ALREADY_EXISTS DLG_ERR_ENDDLG DLG_INFO_ALTIMAGE
+syn keyword ishdConstant DLG_INFO_CHECKMETHOD DLG_INFO_CHECKSELECTION
+syn keyword ishdConstant DLG_INFO_ENABLEIMAGE DLG_INFO_KUNITS
+syn keyword ishdConstant DLG_INFO_USEDECIMAL DLG_INIT DLG_MSG_ALL
+syn keyword ishdConstant DLG_MSG_INFORMATION DLG_MSG_NOT_HAND DLG_MSG_SEVERE
+syn keyword ishdConstant DLG_MSG_STANDARD DLG_MSG_WARNING DLG_OK DLG_STATUS
+syn keyword ishdConstant DLG_USER_CAPTION DRIVE DRIVEOPEN DLG_DIR_DRIVE
+syn keyword ishdConstant EDITBOX_CHANGE EFF_BOXSTRIPE EFF_FADE EFF_HORZREVEAL
+syn keyword ishdConstant EFF_HORZSTRIPE EFF_NONE EFF_REVEAL EFF_VERTSTRIPE
+syn keyword ishdConstant ENABLE END_OF_FILE END_OF_LIST ENHANCED ENTERDISK
+syn keyword ishdConstant ENTERDISK_ERRMSG ENTERDISKBEEP ENVSPACE EQUALS
+syn keyword ishdConstant ERR_BADPATH ERR_BADTAGFILE ERR_BOX_BADPATH
+syn keyword ishdConstant ERR_BOX_BADTAGFILE ERR_BOX_DISKID ERR_BOX_DRIVEOPEN
+syn keyword ishdConstant ERR_BOX_EXIT ERR_BOX_HELP ERR_BOX_NOSPACE ERR_BOX_PAUSE
+syn keyword ishdConstant ERR_BOX_READONLY ERR_DISKID ERR_DRIVEOPEN
+syn keyword ishdConstant EXCLUDE_SUBDIR EXCLUSIVE EXISTS EXIT EXTENDEDMEMORY
+syn keyword ishdConstant EXTENSION_ONLY ERRORFILENAME FADE_IN FADE_OUT
+syn keyword ishdConstant FAILIFEXISTS FALSE FDRIVE_NUM FEEDBACK FEEDBACK_FULL
+syn keyword ishdConstant FEEDBACK_OPERATION FEEDBACK_SPACE FILE_ATTR_ARCHIVED
+syn keyword ishdConstant FILE_ATTR_DIRECTORY FILE_ATTR_HIDDEN FILE_ATTR_NORMAL
+syn keyword ishdConstant FILE_ATTR_READONLY FILE_ATTR_SYSTEM FILE_ATTRIBUTE
+syn keyword ishdConstant FILE_BIN_CUR FILE_BIN_END FILE_BIN_START FILE_DATE
+syn keyword ishdConstant FILE_EXISTS FILE_INSTALLED FILE_INVALID FILE_IS_LOCKED
+syn keyword ishdConstant FILE_LINE_LENGTH FILE_LOCKED FILE_MODE_APPEND
+syn keyword ishdConstant FILE_MODE_BINARY FILE_MODE_BINARYREADONLY
+syn keyword ishdConstant FILE_MODE_NORMAL FILE_NO_VERSION FILE_NOT_FOUND
+syn keyword ishdConstant FILE_RD_ONLY FILE_SIZE FILE_SRC_EQUAL FILE_SRC_OLD
+syn keyword ishdConstant FILE_TIME FILE_WRITEABLE FILENAME FILENAME_ONLY
+syn keyword ishdConstant FINISHBUTTON FIXED_DRIVE FONT_TITLE FREEENVSPACE
+syn keyword ishdConstant FS_CREATEDIR FS_DISKONEREQUIRED FS_DONE FS_FILENOTINLIB
+syn keyword ishdConstant FS_GENERROR FS_INCORRECTDISK FS_LAUNCHPROCESS
+syn keyword ishdConstant FS_OPERROR FS_OUTOFSPACE FS_PACKAGING FS_RESETREQUIRED
+syn keyword ishdConstant FS_TARGETREADONLY FS_TONEXTDISK FULL FULLSCREEN
+syn keyword ishdConstant FULLSCREENSIZE FULLWINDOWMODE FOLDER_DESKTOP
+syn keyword ishdConstant FOLDER_PROGRAMS FOLDER_STARTMENU FOLDER_STARTUP
+syn keyword ishdConstant GREATER_THAN GREEN HELP HKEY_CLASSES_ROOT
+syn keyword ishdConstant HKEY_CURRENT_CONFIG HKEY_CURRENT_USER HKEY_DYN_DATA
+syn keyword ishdConstant HKEY_LOCAL_MACHINE HKEY_PERFORMANCE_DATA HKEY_USERS
+syn keyword ishdConstant HOURGLASS HWND_DESKTOP HWND_INSTALL IGNORE_READONLY
+syn keyword ishdConstant INCLUDE_SUBDIR INDVFILESTATUS INFO INFO_DESCRIPTION
+syn keyword ishdConstant INFO_IMAGE INFO_MISC INFO_SIZE INFO_SUBCOMPONENT
+syn keyword ishdConstant INFO_VISIBLE INFORMATION INVALID_LIST IS_186 IS_286
+syn keyword ishdConstant IS_386 IS_486 IS_8514A IS_86 IS_ALPHA IS_CDROM IS_CGA
+syn keyword ishdConstant IS_DOS IS_EGA IS_FIXED IS_FOLDER IS_ITEM ISLANG_ALL
+syn keyword ishdConstant ISLANG_ARABIC ISLANG_ARABIC_SAUDIARABIA
+syn keyword ishdConstant ISLANG_ARABIC_IRAQ ISLANG_ARABIC_EGYPT
+syn keyword ishdConstant ISLANG_ARABIC_LIBYA ISLANG_ARABIC_ALGERIA
+syn keyword ishdConstant ISLANG_ARABIC_MOROCCO ISLANG_ARABIC_TUNISIA
+syn keyword ishdConstant ISLANG_ARABIC_OMAN ISLANG_ARABIC_YEMEN
+syn keyword ishdConstant ISLANG_ARABIC_SYRIA ISLANG_ARABIC_JORDAN
+syn keyword ishdConstant ISLANG_ARABIC_LEBANON ISLANG_ARABIC_KUWAIT
+syn keyword ishdConstant ISLANG_ARABIC_UAE ISLANG_ARABIC_BAHRAIN
+syn keyword ishdConstant ISLANG_ARABIC_QATAR ISLANG_AFRIKAANS
+syn keyword ishdConstant ISLANG_AFRIKAANS_STANDARD ISLANG_ALBANIAN
+syn keyword ishdConstant ISLANG_ENGLISH_TRINIDAD ISLANG_ALBANIAN_STANDARD
+syn keyword ishdConstant ISLANG_BASQUE ISLANG_BASQUE_STANDARD ISLANG_BULGARIAN
+syn keyword ishdConstant ISLANG_BULGARIAN_STANDARD ISLANG_BELARUSIAN
+syn keyword ishdConstant ISLANG_BELARUSIAN_STANDARD ISLANG_CATALAN
+syn keyword ishdConstant ISLANG_CATALAN_STANDARD ISLANG_CHINESE
+syn keyword ishdConstant ISLANG_CHINESE_TAIWAN ISLANG_CHINESE_PRC
+syn keyword ishdConstant ISLANG_SPANISH_PUERTORICO ISLANG_CHINESE_HONGKONG
+syn keyword ishdConstant ISLANG_CHINESE_SINGAPORE ISLANG_CROATIAN
+syn keyword ishdConstant ISLANG_CROATIAN_STANDARD ISLANG_CZECH
+syn keyword ishdConstant ISLANG_CZECH_STANDARD ISLANG_DANISH
+syn keyword ishdConstant ISLANG_DANISH_STANDARD ISLANG_DUTCH
+syn keyword ishdConstant ISLANG_DUTCH_STANDARD ISLANG_DUTCH_BELGIAN
+syn keyword ishdConstant ISLANG_ENGLISH ISLANG_ENGLISH_BELIZE
+syn keyword ishdConstant ISLANG_ENGLISH_UNITEDSTATES
+syn keyword ishdConstant ISLANG_ENGLISH_UNITEDKINGDOM ISLANG_ENGLISH_AUSTRALIAN
+syn keyword ishdConstant ISLANG_ENGLISH_CANADIAN ISLANG_ENGLISH_NEWZEALAND
+syn keyword ishdConstant ISLANG_ENGLISH_IRELAND ISLANG_ENGLISH_SOUTHAFRICA
+syn keyword ishdConstant ISLANG_ENGLISH_JAMAICA ISLANG_ENGLISH_CARIBBEAN
+syn keyword ishdConstant ISLANG_ESTONIAN ISLANG_ESTONIAN_STANDARD
+syn keyword ishdConstant ISLANG_FAEROESE ISLANG_FAEROESE_STANDARD ISLANG_FARSI
+syn keyword ishdConstant ISLANG_FINNISH ISLANG_FINNISH_STANDARD ISLANG_FRENCH
+syn keyword ishdConstant ISLANG_FRENCH_STANDARD ISLANG_FRENCH_BELGIAN
+syn keyword ishdConstant ISLANG_FRENCH_CANADIAN ISLANG_FRENCH_SWISS
+syn keyword ishdConstant ISLANG_FRENCH_LUXEMBOURG ISLANG_FARSI_STANDARD
+syn keyword ishdConstant ISLANG_GERMAN ISLANG_GERMAN_STANDARD
+syn keyword ishdConstant ISLANG_GERMAN_SWISS ISLANG_GERMAN_AUSTRIAN
+syn keyword ishdConstant ISLANG_GERMAN_LUXEMBOURG ISLANG_GERMAN_LIECHTENSTEIN
+syn keyword ishdConstant ISLANG_GREEK ISLANG_GREEK_STANDARD ISLANG_HEBREW
+syn keyword ishdConstant ISLANG_HEBREW_STANDARD ISLANG_HUNGARIAN
+syn keyword ishdConstant ISLANG_HUNGARIAN_STANDARD ISLANG_ICELANDIC
+syn keyword ishdConstant ISLANG_ICELANDIC_STANDARD ISLANG_INDONESIAN
+syn keyword ishdConstant ISLANG_INDONESIAN_STANDARD ISLANG_ITALIAN
+syn keyword ishdConstant ISLANG_ITALIAN_STANDARD ISLANG_ITALIAN_SWISS
+syn keyword ishdConstant ISLANG_JAPANESE ISLANG_JAPANESE_STANDARD ISLANG_KOREAN
+syn keyword ishdConstant ISLANG_KOREAN_STANDARD ISLANG_KOREAN_JOHAB
+syn keyword ishdConstant ISLANG_LATVIAN ISLANG_LATVIAN_STANDARD
+syn keyword ishdConstant ISLANG_LITHUANIAN ISLANG_LITHUANIAN_STANDARD
+syn keyword ishdConstant ISLANG_NORWEGIAN ISLANG_NORWEGIAN_BOKMAL
+syn keyword ishdConstant ISLANG_NORWEGIAN_NYNORSK ISLANG_POLISH
+syn keyword ishdConstant ISLANG_POLISH_STANDARD ISLANG_PORTUGUESE
+syn keyword ishdConstant ISLANG_PORTUGUESE_BRAZILIAN ISLANG_PORTUGUESE_STANDARD
+syn keyword ishdConstant ISLANG_ROMANIAN ISLANG_ROMANIAN_STANDARD ISLANG_RUSSIAN
+syn keyword ishdConstant ISLANG_RUSSIAN_STANDARD ISLANG_SLOVAK
+syn keyword ishdConstant ISLANG_SLOVAK_STANDARD ISLANG_SLOVENIAN
+syn keyword ishdConstant ISLANG_SLOVENIAN_STANDARD ISLANG_SERBIAN
+syn keyword ishdConstant ISLANG_SERBIAN_LATIN ISLANG_SERBIAN_CYRILLIC
+syn keyword ishdConstant ISLANG_SPANISH ISLANG_SPANISH_ARGENTINA
+syn keyword ishdConstant ISLANG_SPANISH_BOLIVIA ISLANG_SPANISH_CHILE
+syn keyword ishdConstant ISLANG_SPANISH_COLOMBIA ISLANG_SPANISH_COSTARICA
+syn keyword ishdConstant ISLANG_SPANISH_DOMINICANREPUBLIC ISLANG_SPANISH_ECUADOR
+syn keyword ishdConstant ISLANG_SPANISH_ELSALVADOR ISLANG_SPANISH_GUATEMALA
+syn keyword ishdConstant ISLANG_SPANISH_HONDURAS ISLANG_SPANISH_MEXICAN
+syn keyword ishdConstant ISLANG_THAI_STANDARD ISLANG_SPANISH_MODERNSORT
+syn keyword ishdConstant ISLANG_SPANISH_NICARAGUA ISLANG_SPANISH_PANAMA
+syn keyword ishdConstant ISLANG_SPANISH_PARAGUAY ISLANG_SPANISH_PERU
+syn keyword ishdConstant IISLANG_SPANISH_PUERTORICO
+syn keyword ishdConstant ISLANG_SPANISH_TRADITIONALSORT ISLANG_SPANISH_VENEZUELA
+syn keyword ishdConstant ISLANG_SPANISH_URUGUAY ISLANG_SWEDISH
+syn keyword ishdConstant ISLANG_SWEDISH_FINLAND ISLANG_SWEDISH_STANDARD
+syn keyword ishdConstant ISLANG_THAI ISLANG_THA_STANDARDI ISLANG_TURKISH
+syn keyword ishdConstant ISLANG_TURKISH_STANDARD ISLANG_UKRAINIAN
+syn keyword ishdConstant ISLANG_UKRAINIAN_STANDARD ISLANG_VIETNAMESE
+syn keyword ishdConstant ISLANG_VIETNAMESE_STANDARD IS_MIPS IS_MONO IS_OS2
+syn keyword ishdConstant ISOSL_ALL ISOSL_WIN31 ISOSL_WIN95 ISOSL_NT351
+syn keyword ishdConstant ISOSL_NT351_ALPHA ISOSL_NT351_MIPS ISOSL_NT351_PPC
+syn keyword ishdConstant ISOSL_NT40 ISOSL_NT40_ALPHA ISOSL_NT40_MIPS
+syn keyword ishdConstant ISOSL_NT40_PPC IS_PENTIUM IS_POWERPC IS_RAMDRIVE
+syn keyword ishdConstant IS_REMOTE IS_REMOVABLE IS_SVGA IS_UNKNOWN IS_UVGA
+syn keyword ishdConstant IS_VALID_PATH IS_VGA IS_WIN32S IS_WINDOWS IS_WINDOWS95
+syn keyword ishdConstant IS_WINDOWSNT IS_WINOS2 IS_XVGA ISTYPE INFOFILENAME
+syn keyword ishdConstant ISRES ISUSER ISVERSION LANGUAGE LANGUAGE_DRV LESS_THAN
+syn keyword ishdConstant LINE_NUMBER LISTBOX_ENTER LISTBOX_SELECT LISTFIRST
+syn keyword ishdConstant LISTLAST LISTNEXT LISTPREV LOCKEDFILE LOGGING
+syn keyword ishdConstant LOWER_LEFT LOWER_RIGHT LIST_NULL MAGENTA MAINCAPTION
+syn keyword ishdConstant MATH_COPROCESSOR MAX_STRING MENU METAFILE MMEDIA_AVI
+syn keyword ishdConstant MMEDIA_MIDI MMEDIA_PLAYASYNCH MMEDIA_PLAYCONTINUOUS
+syn keyword ishdConstant MMEDIA_PLAYSYNCH MMEDIA_STOP MMEDIA_WAVE MOUSE
+syn keyword ishdConstant MOUSE_DRV MEDIA MODE NETWORK NETWORK_DRV NEXT
+syn keyword ishdConstant NEXTBUTTON NO NO_SUBDIR NO_WRITE_ACCESS NONCONTIGUOUS
+syn keyword ishdConstant NONEXCLUSIVE NORMAL NORMALMODE NOSET NOTEXISTS NOTRESET
+syn keyword ishdConstant NOWAIT NULL NUMBERLIST OFF OK ON ONLYDIR OS OSMAJOR
+syn keyword ishdConstant OSMINOR OTHER_FAILURE OUT_OF_DISK_SPACE PARALLEL
+syn keyword ishdConstant PARTIAL PATH PATH_EXISTS PAUSE PERSONAL PROFSTRING
+syn keyword ishdConstant PROGMAN PROGRAMFILES RAM_DRIVE REAL RECORDMODE RED
+syn keyword ishdConstant REGDB_APPPATH REGDB_APPPATH_DEFAULT REGDB_BINARY
+syn keyword ishdConstant REGDB_ERR_CONNECTIONEXISTS REGDB_ERR_CORRUPTEDREGISTRY
+syn keyword ishdConstant REGDB_ERR_FILECLOSE REGDB_ERR_FILENOTFOUND
+syn keyword ishdConstant REGDB_ERR_FILEOPEN REGDB_ERR_FILEREAD
+syn keyword ishdConstant REGDB_ERR_INITIALIZATION REGDB_ERR_INVALIDFORMAT
+syn keyword ishdConstant REGDB_ERR_INVALIDHANDLE REGDB_ERR_INVALIDNAME
+syn keyword ishdConstant REGDB_ERR_INVALIDPLATFORM REGDB_ERR_OUTOFMEMORY
+syn keyword ishdConstant REGDB_ERR_REGISTRY REGDB_KEYS REGDB_NAMES REGDB_NUMBER
+syn keyword ishdConstant REGDB_STRING REGDB_STRING_EXPAND REGDB_STRING_MULTI
+syn keyword ishdConstant REGDB_UNINSTALL_NAME REGKEY_CLASSES_ROOT
+syn keyword ishdConstant REGKEY_CURRENT_USER REGKEY_LOCAL_MACHINE REGKEY_USERS
+syn keyword ishdConstant REMOTE_DRIVE REMOVE REMOVEABLE_DRIVE REPLACE
+syn keyword ishdConstant REPLACE_ITEM RESET RESTART ROOT ROTATE RUN_MAXIMIZED
+syn keyword ishdConstant RUN_MINIMIZED RUN_SEPARATEMEMORY SELECTFOLDER
+syn keyword ishdConstant SELFREGISTER SELFREGISTERBATCH SELFREGISTRATIONPROCESS
+syn keyword ishdConstant SERIAL SET SETUPTYPE SETUPTYPE_INFO_DESCRIPTION
+syn keyword ishdConstant SETUPTYPE_INFO_DISPLAYNAME SEVERE SHARE SHAREDFILE
+syn keyword ishdConstant SHELL_OBJECT_FOLDER SILENTMODE SPLITCOMPRESS SPLITCOPY
+syn keyword ishdConstant SRCTARGETDIR STANDARD STATUS STATUS95 STATUSBAR
+syn keyword ishdConstant STATUSDLG STATUSEX STATUSOLD STRINGLIST STYLE_BOLD
+syn keyword ishdConstant STYLE_ITALIC STYLE_NORMAL STYLE_SHADOW STYLE_UNDERLINE
+syn keyword ishdConstant SW_HIDE SW_MAXIMIZE SW_MINIMIZE SW_NORMAL SW_RESTORE
+syn keyword ishdConstant SW_SHOW SW_SHOWMAXIMIZED SW_SHOWMINIMIZED
+syn keyword ishdConstant SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE
+syn keyword ishdConstant SW_SHOWNORMAL SYS_BOOTMACHINE SYS_BOOTWIN
+syn keyword ishdConstant SYS_BOOTWIN_INSTALL SYS_RESTART SYS_SHUTDOWN SYS_TODOS
+syn keyword ishdConstant SELECTED_LANGUAGE SHELL_OBJECT_LANGUAGE SRCDIR SRCDISK
+syn keyword ishdConstant SUPPORTDIR TEXT TILED TIME TRUE TYPICAL TARGETDIR
+syn keyword ishdConstant TARGETDISK UPPER_LEFT UPPER_RIGHT USER_ADMINISTRATOR
+syn keyword ishdConstant UNINST VALID_PATH VARIABLE_LEFT VARIABLE_UNDEFINED
+syn keyword ishdConstant VER_DLL_NOT_FOUND VER_UPDATE_ALWAYS VER_UPDATE_COND
+syn keyword ishdConstant VERSION VIDEO VOLUMELABEL WAIT WARNING WELCOME WHITE
+syn keyword ishdConstant WIN32SINSTALLED WIN32SMAJOR WIN32SMINOR WINDOWS_SHARED
+syn keyword ishdConstant WINMAJOR WINMINOR WINDIR WINDISK WINSYSDIR WINSYSDISK
+syn keyword ishdConstant XCOPY_DATETIME YELLOW YES
+
+syn keyword ishdFunction AskDestPath AskOptions AskPath AskText AskYesNo
+syn keyword ishdFunction AppCommand AddProfString AddFolderIcon BatchAdd
+syn keyword ishdFunction BatchDeleteEx BatchFileLoad BatchFileSave BatchFind
+syn keyword ishdFunction BatchGetFileName BatchMoveEx BatchSetFileName
+syn keyword ishdFunction ComponentDialog ComponentAddItem
+syn keyword ishdFunction ComponentCompareSizeRequired ComponentDialog
+syn keyword ishdFunction ComponentError ComponentFileEnum ComponentFileInfo
+syn keyword ishdFunction ComponentFilterLanguage ComponentFilterOS
+syn keyword ishdFunction ComponentGetData ComponentGetItemSize
+syn keyword ishdFunction ComponentInitialize ComponentIsItemSelected
+syn keyword ishdFunction ComponentListItems ComponentMoveData
+syn keyword ishdFunction ComponentSelectItem ComponentSetData ComponentSetTarget
+syn keyword ishdFunction ComponentSetupTypeEnum ComponentSetupTypeGetData
+syn keyword ishdFunction ComponentSetupTypeSet ComponentTotalSize
+syn keyword ishdFunction ComponentValidate ConfigAdd ConfigDelete ConfigFileLoad
+syn keyword ishdFunction ConfigFileSave ConfigFind ConfigGetFileName
+syn keyword ishdFunction ConfigGetInt ConfigMove ConfigSetFileName ConfigSetInt
+syn keyword ishdFunction CmdGetHwndDlg CtrlClear CtrlDir CtrlGetCurSel
+syn keyword ishdFunction CtrlGetMLEText CtrlGetMultCurSel CtrlGetState
+syn keyword ishdFunction CtrlGetSubCommand CtrlGetText CtrlPGroups
+syn keyword ishdFunction CtrlSelectText CtrlSetCurSel CtrlSetFont CtrlSetList
+syn keyword ishdFunction CtrlSetMLEText CtrlSetMultCurSel CtrlSetState
+syn keyword ishdFunction CtrlSetText CallDLLFx ChangeDirectory CloseFile
+syn keyword ishdFunction CopyFile CreateDir CreateFile CreateRegistrySet
+syn keyword ishdFunction CommitSharedFiles CreateProgramFolder
+syn keyword ishdFunction CreateShellObjects CopyBytes DefineDialog Delay
+syn keyword ishdFunction DeleteDir DeleteFile Do DoInstall DeinstallSetReference
+syn keyword ishdFunction DeinstallStart DialogSetInfo DeleteFolderIcon
+syn keyword ishdFunction DeleteProgramFolder Disable EzBatchAddPath
+syn keyword ishdFunction EzBatchAddString ExBatchReplace EnterDisk
+syn keyword ishdFunction EzConfigAddDriver EzConfigAddString EzConfigGetValue
+syn keyword ishdFunction EzConfigSetValue EndDialog EzDefineDialog ExistsDir
+syn keyword ishdFunction ExistsDisk ExitProgMan Enable EzBatchReplace
+syn keyword ishdFunction FileCompare FileDeleteLine FileGrep FileInsertLine
+syn keyword ishdFunction FindAllDirs FindAllFiles FindFile FindWindow
+syn keyword ishdFunction GetFileInfo GetLine GetFont GetDiskSpace GetEnvVar
+syn keyword ishdFunction GetExtents GetMemFree GetMode GetSystemInfo
+syn keyword ishdFunction GetValidDrivesList GetWindowHandle GetProfInt
+syn keyword ishdFunction GetProfString GetFolderNameList GetGroupNameList
+syn keyword ishdFunction GetItemNameList GetDir GetDisk HIWORD Handler Is
+syn keyword ishdFunction ISCompareServicePack InstallationInfo LOWORD LaunchApp
+syn keyword ishdFunction LaunchAppAndWait ListAddItem ListAddString ListCount
+syn keyword ishdFunction ListCreate ListCurrentItem ListCurrentString
+syn keyword ishdFunction ListDeleteItem ListDeleteString ListDestroy
+syn keyword ishdFunction ListFindItem ListFindString ListGetFirstItem
+syn keyword ishdFunction ListGetFirstString ListGetNextItem ListGetNextString
+syn keyword ishdFunction ListReadFromFile ListSetCurrentItem
+syn keyword ishdFunction ListSetCurrentString ListSetIndex ListWriteToFile
+syn keyword ishdFunction LongPathFromShortPath LongPathToQuote
+syn keyword ishdFunction LongPathToShortPath MessageBox MessageBeep NumToStr
+syn keyword ishdFunction OpenFile OpenFileMode PathAdd PathDelete PathFind
+syn keyword ishdFunction PathGet PathMove PathSet ProgDefGroupType ParsePath
+syn keyword ishdFunction PlaceBitmap PlaceWindow PlayMMedia QueryProgGroup
+syn keyword ishdFunction QueryProgItem QueryShellMgr RebootDialog ReleaseDialog
+syn keyword ishdFunction ReadBytes RenameFile ReplaceProfString ReloadProgGroup
+syn keyword ishdFunction ReplaceFolderIcon RGB RegDBConnectRegistry
+syn keyword ishdFunction RegDBCreateKeyEx RegDBDeleteKey RegDBDeleteValue
+syn keyword ishdFunction RegDBDisConnectRegistry RegDBGetAppInfo RegDBGetItem
+syn keyword ishdFunction RegDBGetKeyValueEx RegDBKeyExist RegDBQueryKey
+syn keyword ishdFunction RegDBSetAppInfo RegDBSetDefaultRoot RegDBSetItem
+syn keyword ishdFunction RegDBSetKeyValueEx SeekBytes SelectDir SetFileInfo
+syn keyword ishdFunction SelectDir SelectFolder SetupType SprintfBox SdSetupType
+syn keyword ishdFunction SdSetupTypeEx SdMakeName SilentReadData SilentWriteData
+syn keyword ishdFunction SendMessage Sprintf System SdAskDestPath SdAskOptions
+syn keyword ishdFunction SdAskOptionsList SdBitmap SdComponentDialog
+syn keyword ishdFunction SdComponentDialog2 SdComponentDialogAdv SdComponentMult
+syn keyword ishdFunction SdConfirmNewDir SdConfirmRegistration SdDisplayTopics
+syn keyword ishdFunction SdFinish SdFinishReboot SdInit SdLicense SdMakeName
+syn keyword ishdFunction SdOptionsButtons SdProductName SdRegisterUser
+syn keyword ishdFunction SdRegisterUserEx SdSelectFolder SdSetupType
+syn keyword ishdFunction SdSetupTypeEx SdShowAnyDialog SdShowDlgEdit1
+syn keyword ishdFunction SdShowDlgEdit2 SdShowDlgEdit3 SdShowFileMods
+syn keyword ishdFunction SdShowInfoList SdShowMsg SdStartCopy SdWelcome
+syn keyword ishdFunction SelectFolder ShowGroup ShowProgamFolder SetColor
+syn keyword ishdFunction SetDialogTitle SetDisplayEffect SetErrorMsg
+syn keyword ishdFunction SetErrorTitle SetFont SetStatusWindow SetTitle
+syn keyword ishdFunction SizeWindow StatusUpdate StrCompare StrFind StrGetTokens
+syn keyword ishdFunction StrLength StrRemoveLastSlash StrSub StrToLower StrToNum
+syn keyword ishdFunction StrToUpper ShowProgramFolder UnUseDLL UseDLL VarRestore
+syn keyword ishdFunction VarSave VerUpdateFile VerCompare VerFindFileVersion
+syn keyword ishdFunction VerGetFileVersion VerSearchAndUpdateFile VerUpdateFile
+syn keyword ishdFunction Welcome WaitOnDialog WriteBytes WriteLine
+syn keyword ishdFunction WriteProfString XCopyFile
+
+syn keyword ishdTodo contained TODO
+
+"integer number, or floating point number without a dot.
+syn match ishdNumber "\<\d\+\>"
+"floating point number, with dot
+syn match ishdNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match ishdNumber "\.\d\+\>"
+
+" String constants
+syn region ishdString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+syn region ishdComment start="//" end="$" contains=ishdTodo
+syn region ishdComment start="/\*" end="\*/" contains=ishdTodo
+
+" Pre-processor commands
+syn region ishdPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=ishdComment,ishdString
+if !exists("ishd_no_if0")
+ syn region ishdHashIf0 start="^\s*#\s*if\s\+0\>" end=".\|$" contains=ishdHashIf0End
+ syn region ishdHashIf0End contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=ishdHashIf0Skip
+ syn region ishdHashIf0Skip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=ishdHashIf0Skip
+endif
+syn region ishdIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match ishdInclude +^\s*#\s*include\>\s*"+ contains=ishdIncluded
+syn cluster ishdPreProcGroup contains=ishdPreCondit,ishdIncluded,ishdInclude,ishdDefine,ishdHashIf0,ishdHashIf0End,ishdHashIf0Skip,ishdNumber
+syn region ishdDefine start="^\s*#\s*\(define\|undef\)\>" end="$" contains=ALLBUT,@ishdPreProcGroup
+
+" 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_is_syntax_inits")
+ if version < 508
+ let did_is_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ishdNumber Number
+ HiLink ishdError Error
+ HiLink ishdStatement Statement
+ HiLink ishdString String
+ HiLink ishdComment Comment
+ HiLink ishdTodo Todo
+ HiLink ishdFunction Identifier
+ HiLink ishdConstant PreProc
+ HiLink ishdType Type
+ HiLink ishdInclude Include
+ HiLink ishdDefine Macro
+ HiLink ishdIncluded String
+ HiLink ishdPreCondit PreCondit
+ HiLink ishdHashIf0Skip ishdHashIf0
+ HiLink ishdHashIf0End ishdHashIf0
+ HiLink ishdHashIf0 Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ishd"
+
+" vim: ts=8
diff --git a/runtime/syntax/iss.vim b/runtime/syntax/iss.vim
new file mode 100644
index 000000000..be8901cc2
--- /dev/null
+++ b/runtime/syntax/iss.vim
@@ -0,0 +1,125 @@
+" Vim syntax file
+" Language: Inno Setup File (iss file) and My InnoSetup extension
+" Maintainer: Dominique Stéphan (dominique@mggen.com)
+" Last change: 2003 May 11
+
+" 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
+
+" shut case off
+syn case ignore
+
+" Section
+syn region issHeader start="\[" end="\]"
+
+" Label in the [Setup] Section
+syn match issLabel "^[^=]\+="
+
+" URL
+syn match issURL "http[s]\=:\/\/.*$"
+
+" syn match issName "[^: ]\+:"
+syn match issName "Name:"
+syn match issName "MinVersion:\|OnlyBelowVersion:"
+syn match issName "Source:\|DestDir:\|DestName:\|CopyMode:"
+syn match issName "Attribs:\|FontInstall:\|Flags:"
+syn match issName "FileName:\|Parameters:\|WorkingDir:\|Comment:"
+syn match issName "IconFilename:\|IconIndex:"
+syn match issName "Section:\|Key:\|String:"
+syn match issName "Root:\|SubKey:\|ValueType:\|ValueName:\|ValueData:"
+syn match issName "RunOnceId:"
+syn match issName "Type:"
+syn match issName "Components:\|Description:\|GroupDescription\|Types:"
+
+syn match issComment "^;.*$"
+
+" folder constant
+syn match issFolder "{[^{]*}"
+
+" string
+syn region issString start=+"+ end=+"+ contains=issFolder
+
+" [Dirs]
+syn keyword issDirsFlags deleteafterinstall uninsalwaysuninstall uninsneveruninstall
+
+" [Files]
+syn keyword issFilesCopyMode normal onlyifdoesntexist alwaysoverwrite alwaysskipifsameorolder
+syn keyword issFilesAttribs readonly hidden system
+syn keyword issFilesFlags comparetimestampalso confirmoverwrite deleteafterinstall
+syn keyword issFilesFlags external fontisnttruetype isreadme overwritereadonly
+syn keyword issFilesFlags regserver regtypelib restartreplace
+syn keyword issFilesFlags sharedfile skipifsourcedoesntexist uninsneveruninstall
+
+" [Icons]
+syn keyword issIconsFlags createonlyiffileexists runminimized uninsneveruninstall useapppaths
+
+" [INI]
+syn keyword issINIFlags createkeyifdoesntexist uninsdeleteentry uninsdeletesection uninsdeletesectionifempty
+
+" [Registry]
+syn keyword issRegRootKey HKCR HKCU HKLM HKU HKCC
+syn keyword issRegValueType none string expandsz multisz dword binary
+syn keyword issRegFlags createvalueifdoesntexist deletekey deletevalue preservestringtype
+syn keyword issRegFlags uninsclearvalue uninsdeletekey uninsdeletekeyifempty uninsdeletevalue
+
+" [Run] and [UninstallRun]
+syn keyword issRunFlags nowait shellexec skipifdoesntexist runminimized waituntilidle
+syn keyword issRunFlags postinstall unchecked showcheckbox
+
+" [Types]
+syn keyword issTypesFlags iscustom
+
+" [Components]
+syn keyword issComponentsFlags fixed restart disablenouninstallwarning
+
+" [UninstallDelete] and [InstallDelete]
+syn keyword issInstallDeleteType files filesandordirs dirifempty
+
+
+" 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_iss_syntax_inits")
+ if version < 508
+ let did_iss_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 issHeader Special
+ HiLink issComment Comment
+ HiLink issLabel Type
+ HiLink issName Type
+ HiLink issFolder Special
+ HiLink issString String
+ HiLink issValue String
+ HiLink issURL Include
+
+ HiLink issDirsFlags Keyword
+ HiLink issFilesCopyMode Keyword
+ HiLink issFilesAttribs Keyword
+ HiLink issFilesFlags Keyword
+ HiLink issIconsFlags Keyword
+ HiLink issINIFlags Keyword
+ HiLink issRegRootKey Keyword
+ HiLink issRegValueType Keyword
+ HiLink issRegFlags Keyword
+ HiLink issRunFlags Keyword
+ HiLink issTypesFlags Keyword
+ HiLink issComponentsFlags Keyword
+ HiLink issInstallDeleteType Keyword
+
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "iss"
+
+" vim:ts=8
diff --git a/runtime/syntax/ist.vim b/runtime/syntax/ist.vim
new file mode 100644
index 000000000..fd0005e55
--- /dev/null
+++ b/runtime/syntax/ist.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Language: Makeindex style file, *.ist
+" Maintainer: Peter Meszaros <pmeszaros@effice.hu>
+" Last Change: May 4, 2001
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=$,@,48-57,_
+else
+ set iskeyword=$,@,48-57,_
+endif
+
+syn case ignore
+syn keyword IstInpSpec actual arg_close arg_open encap escape
+syn keyword IstInpSpec keyword level quote range_close range_open
+syn keyword IstInpSpec page_compositor
+
+syn keyword IstOutSpec preamble postamble setpage_prefix setpage_suffix group_skip
+syn keyword IstOutSpec headings_flag heading_prefix heading_suffix
+syn keyword IstOutSpec lethead_flag lethead_prefix lethead_suffix
+syn keyword IstOutSpec symhead_positive symhead_negative numhead_positive numhead_negative
+syn keyword IstOutSpec item_0 item_1 item_2 item_01
+syn keyword IstOutSpec item_x1 item_12 item_x2
+syn keyword IstOutSpec delim_0 delim_1 delim_2
+syn keyword IstOutSpec delim_n delim_r delim_t
+syn keyword IstOutSpec encap_prefix encap_infix encap_suffix
+syn keyword IstOutSpec line_max indent_space indent_length
+syn keyword IstOutSpec suffix_2p suffix_3p suffix_mp
+
+syn region IstString matchgroup=IstDoubleQuote start=+"+ skip=+\\"+ end=+"+ contains=IstSpecial
+syn match IstCharacter "'.'"
+syn match IstNumber "\d\+"
+syn match IstComment "^[\t ]*%.*$" contains=IstTodo
+syn match IstSpecial "\\\\\|{\|}\|#\|\\n" contained
+syn match IstTodo "DEBUG\|TODO" contained
+
+" 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_dummy_syn_inits")
+ if version < 508
+ let did_dummy_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink IstInpSpec Type
+ HiLink IstOutSpec Identifier
+ HiLink IstString String
+ HiLink IstNumber Number
+ HiLink IstComment Comment
+ HiLink IstTodo Todo
+ HiLink IstSpecial Special
+ HiLink IstDoubleQuote Label
+ HiLink IstCharacter Label
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ist"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/jal.vim b/runtime/syntax/jal.vim
new file mode 100644
index 000000000..d0ba67285
--- /dev/null
+++ b/runtime/syntax/jal.vim
@@ -0,0 +1,249 @@
+" Vim syntax file
+" Language: JAL
+" Version: 0.1
+" Last Change: 2003 May 11
+" Maintainer: Mark Gross <mark@thegnar.org>
+" This is a syntax definition for the JAL language.
+" It is based on the Source Forge compiler source code.
+" https://sourceforge.net/projects/jal/
+"
+" TODO test.
+
+" 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
+syn sync lines=250
+
+syn keyword picTodo NOTE TODO XXX contained
+
+syn match picIdentifier "[a-z_$][a-z0-9_$]*"
+syn match picLabel "^[A-Z_$][A-Z0-9_$]*"
+syn match picLabel "^[A-Z_$][A-Z0-9_$]*:"me=e-1
+
+syn match picASCII "A\='.'"
+syn match picBinary "B'[0-1]\+'"
+syn match picDecimal "D'\d\+'"
+syn match picDecimal "\d\+"
+syn match picHexadecimal "0x\x\+"
+syn match picHexadecimal "H'\x\+'"
+syn match picHexadecimal "[0-9]\x*h"
+syn match picOctal "O'[0-7]\o*'"
+
+syn match picComment ";.*" contains=picTodo
+
+syn region picString start=+"+ end=+"+
+
+syn keyword picRegister indf tmr0 pcl status fsr port_a port_b port_c port_d port_e x84_eedata x84_eeadr pclath intcon
+syn keyword picRegister f877_tmr1l f877_tmr1h f877_t1con f877_t2con f877_ccpr1l f877_ccpr1h f877_ccp1con
+syn keyword picRegister f877_pir1 f877_pir2 f877_pie1 f877_adcon1 f877_adcon0 f877_pr2 f877_adresl f877_adresh
+syn keyword picRegister f877_eeadr f877_eedath f877_eeadrh f877_eedata f877_eecon1 f877_eecon2 f628_EECON2
+syn keyword picRegister f877_rcsta f877_txsta f877_spbrg f877_txreg f877_rcreg f628_EEDATA f628_EEADR f628_EECON1
+
+" Register --- bits
+" STATUS
+syn keyword picRegisterPart status_c status_dc status_z status_pd
+syn keyword picRegisterPart status_to status_rp0 status_rp1 status_irp
+
+" pins
+syn keyword picRegisterPart pin_a0 pin_a1 pin_a2 pin_a3 pin_a4 pin_a5
+syn keyword picRegisterPart pin_b0 pin_b1 pin_b2 pin_b3 pin_b4 pin_b5 pin_b6 pin_b7
+syn keyword picRegisterPart pin_c0 pin_c1 pin_c2 pin_c3 pin_c4 pin_c5 pin_c6 pin_c7
+syn keyword picRegisterPart pin_d0 pin_d1 pin_d2 pin_d3 pin_d4 pin_d5 pin_d6 pin_d7
+syn keyword picRegisterPart pin_e0 pin_e1 pin_e2
+
+syn keyword picPortDir port_a_direction port_b_direction port_c_direction port_d_direction port_e_direction
+
+syn match picPinDir "pin_a[012345]_direction"
+syn match picPinDir "pin_b[01234567]_direction"
+syn match picPinDir "pin_c[01234567]_direction"
+syn match picPinDir "pin_d[01234567]_direction"
+syn match picPinDir "pin_e[012]_direction"
+
+
+" INTCON
+syn keyword picRegisterPart intcon_gie intcon_eeie intcon_peie intcon_t0ie intcon_inte
+syn keyword picRegisterPart intcon_rbie intcon_t0if intcon_intf intcon_rbif
+
+" TIMER
+syn keyword picRegisterPart t1ckps1 t1ckps0 t1oscen t1sync tmr1cs tmr1on tmr1ie tmr1if
+
+"cpp bits
+syn keyword picRegisterPart ccp1x ccp1y
+
+" adcon bits
+syn keyword picRegisterPart adcon0_go adcon0_ch0 adcon0_ch1 adcon0_ch2
+
+" EECON
+syn keyword picRegisterPart eecon1_rd eecon1_wr eecon1_wren eecon1_wrerr eecon1_eepgd
+syn keyword picRegisterPart f628_eecon1_rd f628_eecon1_wr f628_eecon1_wren f628_eecon1_wrerr
+
+" usart
+syn keyword picRegisterPart tx9 txen sync brgh tx9d
+syn keyword picRegisterPart spen rx9 cren ferr oerr rx9d
+syn keyword picRegisterPart TXIF RCIF
+
+" OpCodes...
+syn keyword picOpcode addlw andlw call clrwdt goto iorlw movlw option retfie retlw return sleep sublw tris
+syn keyword picOpcode xorlw addwf andwf clrf clrw comf decf decfsz incf incfsz retiw iorwf movf movwf nop
+syn keyword picOpcode rlf rrf subwf swapf xorwf bcf bsf btfsc btfss skpz skpnz setz clrz skpc skpnc setc clrc
+syn keyword picOpcode skpdc skpndc setdc clrdc movfw tstf bank page HPAGE mullw mulwf cpfseq cpfsgt cpfslt banka bankb
+
+
+syn keyword jalBoolean true false
+syn keyword jalBoolean off on
+syn keyword jalBit high low
+syn keyword jalConstant Input Output all_input all_output
+syn keyword jalConditional if else then elsif end if
+syn keyword jalLabel goto
+syn keyword jalRepeat for while forever loop
+syn keyword jalStatement procedure function
+syn keyword jalStatement return end volatile const var
+syn keyword jalType bit byte
+
+syn keyword jalModifier interrupt assembler asm put get
+syn keyword jalStatement out in is begin at
+syn keyword jalDirective pragma jump_table target target_clock target_chip name error test assert
+syn keyword jalPredefined hs xt rc lp internal 16c84 16f84 16f877 sx18 sx28 12c509a 12c508
+syn keyword jalPredefined 12ce674 16f628 18f252 18f242 18f442 18f452 12f629 12f675 16f88
+syn keyword jalPredefined 16f876 16f873 sx_12 sx18 sx28 pic_12 pic_14 pic_16
+
+syn keyword jalDirective chip osc clock fuses cpu watchdog powerup protection
+
+syn keyword jalFunction bank_0 bank_1 bank_2 bank_3 bank_4 bank_5 bank_6 bank_7 trisa trisb trisc trisd trise
+syn keyword jalFunction _trisa_flush _trisb_flush _trisc_flush _trisd_flush _trise_flush
+
+syn keyword jalPIC local idle_loop
+
+syn region jalAsm matchgroup=jalAsmKey start="\<assembler\>" end="\<end assembler\>" contains=jalComment,jalPreProc,jalLabel,picIdentifier, picLabel,picASCII,picDecimal,picHexadecimal,picOctal,picComment,picString,picRegister,picRigisterPart,picOpcode,picDirective,jalPIC
+syn region jalAsm matchgroup=jalAsmKey start="\<asm\>" end=/$/ contains=jalComment,jalPreProc,jalLabel,picIdentifier, picLabel,picASCII,picDecimal,picHexadecimal,picOctal,picComment,picString,picRegister,picRigisterPart,picOpcode,picDirective,jalPIC
+
+syn region jalPsudoVars matchgroup=jalPsudoVarsKey start="\<'put\>" end="/<is/>" contains=jalComment
+
+syn match jalStringEscape contained "#[12][0-9]\=[0-9]\="
+syn match jalIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+syn match jalSymbolOperator "[+\-/*=]"
+syn match jalSymbolOperator "!"
+syn match jalSymbolOperator "<"
+syn match jalSymbolOperator ">"
+syn match jalSymbolOperator "<="
+syn match jalSymbolOperator ">="
+syn match jalSymbolOperator "!="
+syn match jalSymbolOperator "=="
+syn match jalSymbolOperator "<<"
+syn match jalSymbolOperator ">>"
+syn match jalSymbolOperator "|"
+syn match jalSymbolOperator "&"
+syn match jalSymbolOperator "%"
+syn match jalSymbolOperator "?"
+syn match jalSymbolOperator "[()]"
+syn match jalSymbolOperator "[\^.]"
+syn match jalLabel "[\^]*:"
+
+syn match jalNumber "-\=\<\d[0-9_]\+\>"
+syn match jalHexNumber "0x[0-9A-Fa-f_]\+\>"
+syn match jalBinNumber "0b[01_]\+\>"
+
+" String
+"wrong strings
+syn region jalStringError matchgroup=jalStringError start=+"+ end=+"+ end=+$+ contains=jalStringEscape
+
+"right strings
+syn region jalString matchgroup=jalString start=+'+ end=+'+ oneline contains=jalStringEscape
+" To see the start and end of strings:
+syn region jalString matchgroup=jalString start=+"+ end=+"+ oneline contains=jalStringEscapeGPC
+
+syn keyword jalTodo contained TODO
+syn region jalComment start=/-- / end=/$/ oneline contains=jalTodo
+syn region jalComment start=/--\t/ end=/$/ oneline contains=jalTodo
+syn match jalComment /--\_$/
+syn region jalPreProc start="include" end=/$/ contains=JalComment,jalToDo
+
+
+if exists("jal_no_tabs")
+ syn match jalShowTab "\t"
+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_jal_syn_inits")
+if version < 508
+ let did_jal_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+else
+ command -nargs=+ HiLink hi def link <args>
+endif
+
+ HiLink jalAcces jalStatement
+ HiLink jalBoolean Boolean
+ HiLink jalBit Boolean
+ HiLink jalComment Comment
+ HiLink jalConditional Conditional
+ HiLink jalConstant Constant
+ HiLink jalDelimiter Identifier
+ HiLink jalDirective PreProc
+ HiLink jalException Exception
+ HiLink jalFloat Float
+ HiLink jalFunction Function
+ HiLink jalPsudoVarsKey Function
+ HiLink jalLabel Label
+ HiLink jalMatrixDelimiter Identifier
+ HiLink jalModifier Type
+ HiLink jalNumber Number
+ HiLink jalBinNumber Number
+ HiLink jalHexNumber Number
+ HiLink jalOperator Operator
+ HiLink jalPredefined Constant
+ HiLink jalPreProc PreProc
+ HiLink jalRepeat Repeat
+ HiLink jalStatement Statement
+ HiLink jalString String
+ HiLink jalStringEscape Special
+ HiLink jalStringEscapeGPC Special
+ HiLink jalStringError Error
+ HiLink jalStruct jalStatement
+ HiLink jalSymbolOperator jalOperator
+ HiLink jalTodo Todo
+ HiLink jalType Type
+ HiLink jalUnclassified Statement
+ HiLink jalAsm Assembler
+ HiLink jalError Error
+ HiLink jalAsmKey Statement
+ HiLink jalPIC Statement
+
+ HiLink jalShowTab Error
+
+ HiLink picTodo Todo
+ HiLink picComment Comment
+ HiLink picDirective Statement
+ HiLink picLabel Label
+ HiLink picString String
+
+ HiLink picOpcode Keyword
+ HiLink picRegister Structure
+ HiLink picRegisterPart Special
+ HiLink picPinDir SPecial
+ HiLink picPortDir SPecial
+
+ HiLink picASCII String
+ HiLink picBinary Number
+ HiLink picDecimal Number
+ HiLink picHexadecimal Number
+ HiLink picOctal Number
+
+ HiLink picIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "jal"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/jam.vim b/runtime/syntax/jam.vim
new file mode 100644
index 000000000..9fe667886
--- /dev/null
+++ b/runtime/syntax/jam.vim
@@ -0,0 +1,252 @@
+" Vim syntax file
+" Language: JAM
+" Maintainer: Ralf Lemke (ralflemk@t-online.de)
+" Last change: 09-10-2000
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,-
+else
+ set iskeyword=@,48-57,_,-
+endif
+
+" A bunch of useful jam keywords
+syn keyword jamStatement break call dbms flush global include msg parms proc public receive return send unload vars
+syn keyword jamConditional if else
+syn keyword jamRepeat for while next step
+
+syn keyword jamTodo contained TODO FIXME XXX
+syn keyword jamDBState1 alias binary catquery close close_all_connections column_names connection continue continue_bottom continue_down continue_top continue_up
+syn keyword jamDBState2 cursor declare engine execute format occur onentry onerror onexit sql start store unique with
+syn keyword jamSQLState1 all alter and any avg between by count create current data database delete distinct drop exists fetch from grant group
+syn keyword jamSQLState2 having index insert into like load max min of open order revoke rollback runstats select set show stop sum synonym table to union update values view where bundle
+
+syn keyword jamLibFunc1 dm_bin_create_occur dm_bin_delete_occur dm_bin_get_dlength dm_bin_get_occur dm_bin_length dm_bin_max_occur dm_bin_set_dlength dm_convert_empty dm_cursor_connection dm_cursor_consistent dm_cursor_engine dm_dbi_init dm_dbms dm_dbms_noexp dm_disable_styles dm_enable_styles dm_exec_sql dm_expand dm_free_sql_info dm_gen_change_execute_using dm_gen_change_select_from dm_gen_change_select_group_by dm_gen_change_select_having dm_gen_change_select_list dm_gen_change_select_order_by dm_gen_change_select_suffix dm_gen_change_select_where dm_gen_get_tv_alias dm_gen_sql_info
+
+syn keyword jamLibFunc2 dm_get_db_conn_handle dm_get_db_cursor_handle dm_get_driver_option dm_getdbitext dm_init dm_is_connection dm_is_cursor dm_is_engine dm_odb_preserves_cursor dm_reset dm_set_driver_option dm_set_max_fetches dm_set_max_rows_per_fetch dm_set_tm_clear_fast dm_val_relative sm_adjust_area sm_allget sm_amt_format sm_e_amt_format sm_i_amt_format sm_n_amt_format sm_o_amt_format sm_append_bundle_data sm_append_bundle_done sm_append_bundle_item sm_d_at_cur sm_l_at_cur sm_r_at_cur sm_mw_attach_drawing_func sm_mwn_attach_drawing_func sm_mwe_attach_drawing_func sm_xm_attach_drawing_func sm_xmn_attach_drawing_func sm_xme_attach_drawing_func sm_backtab sm_bel sm_bi_comparesm_bi_copy sm_bi_initialize sm_bkrect sm_c_off sm_c_on sm_c_vis sm_calc sm_cancel sm_ckdigit sm_cl_all_mdts sm_cl_unprot sm_clear_array sm_n_clear_array sm_1clear_array sm_n_1clear_array sm_close_window sm_com_load_picture sm_com_QueryInterface sm_com_result sm_com_result_msg sm_com_set_handler sm_copyarray sm_n_copyarray sm_create_bundle
+
+syn keyword jamLibFunc3 sm_d_msg_line sm_dblval sm_e_dblval sm_i_dblval sm_n_dblval sm_o_dblval sm_dd_able sm_dde_client_connect_cold sm_dde_client_connect_hot sm_dde_client_connect_warm sm_dde_client_disconnect sm_dde_client_off sm_dde_client_on sm_dde_client_paste_link_cold sm_dde_client_paste_link_hot sm_dde_client_paste_link_warm sm_dde_client_request sm_dde_execute sm_dde_install_notify sm_dde_poke sm_dde_server_off sm_dde_server_on sm_delay_cursor sm_deselect sm_dicname sm_disp_off sm_dlength sm_e_dlength sm_i_dlength sm_n_dlength sm_o_dlength sm_do_uinstalls sm_i_doccur sm_o_doccur sm_drawingarea sm_xm_drawingarea sm_dtofield sm_e_dtofield sm_i_dtofield sm_n_dtofield sm_o_dtofield sm_femsg sm_ferr_reset sm_fi_path sm_file_copy sm_file_exists sm_file_move sm_file_remove sm_fi_open sm_fi_path sm_filebox sm_filetypes sm_fio_a2f sm_fio_close sm_fio_editor sm_fio_error sm_fio_error_set sm_fio_f2a sm_fio_getc sm_fio_gets sm_fio_handle sm_fio_open sm_fio_putc sm_fio_puts sm_fio_rewind sm_flush sm_d_form sm_l_form
+
+syn keyword jamLibFunc4 sm_r_form sm_formlist sm_fptr sm_e_fptr sm_i_fptr sm_n_fptr sm_o_fptr sm_fqui_msg sm_fquiet_err sm_free_bundle sm_ftog sm_e_ftog sm_i_ftog sm_n_ftog sm_o_ftog sm_fval sm_e_fval sm_i_fval sm_n_fval sm_o_fval sm_i_get_bi_data sm_o_get_bi_data sm_get_bundle_data sm_get_bundle_item_count sm_get_bundle_occur_count sm_get_next_bundle_name sm_i_get_tv_bi_data sm_o_get_tv_bi_data sm_getfield sm_e_getfield sm_i_getfield sm_n_getfield sm_o_getfield sm_getkey sm_gofield sm_e_gofield sm_i_gofield sm_n_gofield sm_o_gofield sm_gtof sm_gval sm_i_gtof sm_n_gval sm_hlp_by_name sm_home sm_inimsg sm_initcrt sm_jinitcrt sm_jxinitcrt sm_input sm_inquire sm_install sm_intval sm_e_intval sm_i_intval sm_n_intval sm_o_intval sm_i_ioccur sm_o_ioccur sm_is_bundle sm_is_no sm_e_is_no sm_i_is_no sm_n_is_no sm_o_is_no sm_is_yes sm_e_is_yes sm_i_is_yes sm_n_is_yes sm_o_is_yes sm_isabort sm_iset sm_issv sm_itofield sm_e_itofield sm_i_itofield sm_n_itofield sm_o_itofield sm_jclose sm_jfilebox sm_jform sm_djplcall sm_jplcall
+
+syn keyword jamLibFunc5 sm_sjplcall sm_jplpublic sm_jplunload sm_jtop sm_jwindow sm_key_integer sm_keyfilter sm_keyhit sm_keyinit sm_n_keyinit sm_keylabel sm_keyoption sm_l_close sm_l_open sm_l_open_syslib sm_last sm_launch sm_h_ldb_fld_get sm_n_ldb_fld_get sm_h_ldb_n_fld_get sm_n_ldb_n_fld_get sm_h_ldb_fld_store sm_n_ldb_fld_store sm_h_ldb_n_fld_store sm_n_ldb_n_fld_store sm_ldb_get_active sm_ldb_get_inactive sm_ldb_get_next_active sm_ldb_get_next_inactive sm_ldb_getfield sm_i_ldb_getfield sm_n_ldb_getfield sm_o_ldb_getfield sm_ldb_h_getfield sm_i_ldb_h_getfield sm_n_ldb_h_getfield sm_o_ldb_h_getfield sm_ldb_handle sm_ldb_init sm_ldb_is_loaded sm_ldb_load sm_ldb_name sm_ldb_next_handle sm_ldb_pop sm_ldb_push sm_ldb_putfield sm_i_ldb_putfield sm_n_ldb_putfield sm_o_ldb_putfield sm_ldb_h_putfield sm_i_ldb_h_putfield sm_n_ldb_h_putfield sm_o_ldb_h_putfield sm_ldb_state_get sm_ldb_h_state_get sm_ldb_state_set sm_ldb_h_state_set sm_ldb_unload sm_ldb_h_unload sm_leave sm_list_objects_count sm_list_objects_end sm_list_objects_next
+
+syn keyword jamLibFunc6 sm_list_objects_start sm_lngval sm_e_lngval sm_i_lngval sm_n_lngval sm_o_lngval sm_load_screen sm_log sm_lstore sm_ltofield sm_e_ltofield sm_i_ltofield sm_n_ltofield sm_o_ltofield sm_m_flush sm_menu_bar_error sm_menu_change sm_menu_create sm_menu_delete sm_menu_get_int sm_menu_get_str sm_menu_install sm_menu_remove sm_message_box sm_mncrinit6 sm_mnitem_change sm_n_mnitem_change sm_mnitem_create sm_n_mnitem_create sm_mnitem_delete sm_n_mnitem_delete sm_mnitem_get_int sm_n_mnitem_get_int sm_mnitem_get_str sm_n_mnitem_get_str sm_mnscript_load sm_mnscript_unload sm_ms_inquire sm_msg sm_msg_del sm_msg_get sm_msg_read sm_d_msg_read sm_n_msg_read sm_msgfind sm_mts_CreateInstance sm_mts_CreateProperty sm_mts_CreatePropertyGroup sm_mts_DisableCommit sm_mts_EnableCommit sm_mts_GetPropertyValue sm_mts_IsCallerInRole sm_mts_IsInTransaction sm_mts_IsSecurityEnabled sm_mts_PutPropertyValue sm_mts_SetAbort sm_mts_SetComplete sm_mus_time sm_mw_get_client_wnd sm_mw_get_cmd_show sm_mw_get_frame_wnd sm_mw_get_instance
+
+syn keyword jamLibFunc7 sm_mw_get_prev_instance sm_mw_PrintScreen sm_next_sync sm_nl sm_null sm_e_null sm_i_null sm_n_null sm_o_null sm_obj_call sm_obj_copy sm_obj_copy_id sm_obj_create sm_obj_delete sm_obj_delete_id sm_obj_get_property sm_obj_onerror sm_obj_set_property sm_obj_sort sm_obj_sort_auto sm_occur_no sm_off_gofield sm_e_off_gofield sm_i_off_gofield sm_n_off_gofield sm_o_off_gofield sm_option sm_optmnu_id sm_pinquire sm_popup_at_cur sm_prop_error sm_prop_get_int sm_prop_get_str sm_prop_get_dbl sm_prop_get_x_int sm_prop_get_x_str sm_prop_get_x_dbl sm_prop_get_m_int sm_prop_get_m_str sm_prop_get_m_dbl sm_prop_id sm_prop_name_to_id sm_prop_set_int sm_prop_set_str sm_prop_set_dbl sm_prop_set_x_int sm_prop_set_x_str sm_prop_set_x_dbl sm_prop_set_m_int sm_prop_set_m_str sm_prop_set_m_dbl sm_pset sm_putfield sm_e_putfield sm_i_putfield sm_n_putfield sm_o_putfield sm_raise_exception sm_receive sm_receive_args sm_rescreen sm_resetcrt sm_jresetcrt sm_jxresetcrt sm_resize sm_restore_data sm_return sm_return_args sm_rmformlist sm_rs_data
+
+syn keyword jamLibFunc8 sm_rw_error_message sm_rw_play_metafile sm_rw_runreport sm_s_val sm_save_data sm_sdtime sm_select sm_send sm_set_help sm_setbkstat sm_setsibling sm_setstatus sm_sh_off sm_shell sm_shrink_to_fit sm_slib_error sm_slib_install sm_slib_load sm_soption sm_strip_amt_ptr sm_e_strip_amt_ptr sm_i_strip_amt_ptr sm_n_strip_amt_ptr sm_o_strip_amt_ptr sm_sv_data sm_sv_free sm_svscreen sm_tab sm_tm_clear sm_tm_clear_model_events sm_tm_command sm_tm_command_emsgset sm_tm_command_errset sm_tm_continuation_validity sm_tm_dbi_checker sm_tm_error sm_tm_errorlog sm_tm_event sm_tm_event_name sm_tm_failure_message sm_tm_handling sm_tm_inquire sm_tm_iset sm_tm_msg_count_error sm_tm_msg_emsg sm_tm_msg_error sm_tm_old_bi_context sm_tm_pcopy sm_tm_pinquire sm_tm_pop_model_event sm_tm_pset sm_tm_push_model_event sm_tmpnam sm_tp_exec sm_tp_free_arg_buf sm_tp_gen_insert sm_tp_gen_sel_return sm_tp_gen_sel_where sm_tp_gen_val_link sm_tp_gen_val_return sm_tp_get_svc_alias sm_tp_get_tux_callid sm_translatecoords sm_tst_all_mdts
+
+syn keyword jamLibFunc9 sm_udtime sm_ungetkey sm_unload_screen sm_unsvscreen sm_upd_select sm_validate sm_n_validate sm_vinit sm_n_vinit sm_wcount sm_wdeselect sm_web_get_cookie sm_web_invoke_url sm_web_log_error sm_web_save_global sm_web_set_cookie sm_web_unsave_all_globals sm_web_unsave_global sm_mw_widget sm_mwe_widget sm_mwn_widget sm_xm_widget sm_xme_widget sm_xmn_widget sm_win_shrink sm_d_window sm_d_at_cur sm_l_window sm_l_at_cur sm_r_window sm_r_at_cur sm_winsize sm_wrotate sm_wselect sm_n_wselect sm_ww_length sm_n_ww_length sm_ww_read sm_n_ww_read sm_ww_write sm_n_ww_write sm_xlate_table sm_xm_get_base_window sm_xm_get_display
+
+syn keyword jamVariable1 SM_SCCS_ID SM_ENTERTERM SM_MALLOC SM_CANCEL SM_BADTERM SM_FNUM SM_DZERO SM_EXPONENT SM_INVDATE SM_MATHERR SM_FRMDATA SM_NOFORM SM_FRMERR SM_BADKEY SM_DUPKEY SM_ERROR SM_SP1 SM_SP2 SM_RENTRY SM_MUSTFILL SM_AFOVRFLW SM_TOO_FEW_DIGITS SM_CKDIGIT SM_HITANY SM_NOHELP SM_MAXHELP SM_OUTRANGE SM_ENTERTERM1 SM_SYSDATE SM_DATFRM SM_DATCLR SM_DATINV SM_KSDATA SM_KSERR SM_KSNONE SM_KSMORE SM_DAYA1 SM_DAYA2 SM_DAYA3 SM_DAYA4 SM_DAYA5 SM_DAYA6 SM_DAYA7 SM_DAYL1 SM_DAYL2 SM_DAYL3 SM_DAYL4 SM_DAYL5 SM_DAYL6 SM_DAYL7 SM_MNSCR_LOAD SM_MENU_INSTALL SM_INSTDEFSCRL SM_INSTSCROLL SM_MOREDATA SM_READY SM_WAIT SM_YES SM_NO SM_NOTEMP SM_FRMHELP SM_FILVER SM_ONLYONE SM_WMSMOVE SM_WMSSIZE SM_WMSOFF SM_LPRINT SM_FMODE SM_NOFILE SM_NOSECTN SM_FFORMAT SM_FREAD SM_RX1 SM_RX2 SM_RX3 SM_TABLOOK SM_MISKET SM_ILLKET SM_ILLBRA SM_MISDBLKET SM_ILLDBLKET SM_ILLDBLBRA SM_ILL_RIGHT SM_ILLELSE SM_NUMBER SM_EOT SM_BREAK SM_NOARGS SM_BIGVAR SM_EXCESS SM_EOL SM_FILEIO SM_FOR SM_RCURLY SM_NONAME SM_1JPL_ERR SM_2JPL_ERR SM_3JPL_ERR
+
+syn keyword jamVariable2 SM_JPLATCH SM_FORMAT SM_DESTINATION SM_ORAND SM_ORATOR SM_ILL_LEFT SM_MISSPARENS SM_ILLCLOSE_COMM SM_FUNCTION SM_EQUALS SM_MISMATCH SM_QUOTE SM_SYNTAX SM_NEXT SM_VERB_UNKNOWN SM_JPLFORM SM_NOT_LOADED SM_GA_FLG SM_GA_CHAR SM_GA_ARG SM_GA_DIG SM_NOFUNC SM_BADPROTO SM_JPLPUBLIC SM_NOCOMPILE SM_NULLEDIT SM_RP_NULL SM_DBI_NOT_INST SM_NOTJY SM_MAXLIB SM_FL_FLLIB SM_TPI_NOT_INST SM_RW_NOT_INST SM_MONA1 SM_MONA2 SM_MONA3 SM_MONA4 SM_MONA5 SM_MONA6 SM_MONA7 SM_MONA8 SM_MONA9 SM_MONA10 SM_MONA11 SM_MONA12 SM_MONL1 SM_MONL2 SM_MONL3 SM_MONL4 SM_MONL5 SM_MONL6 SM_MONL7 SM_MONL8 SM_MONL9 SM_MONL10 SM_MONL11 SM_MONL12 SM_AM SM_PM SM_0DEF_DTIME SM_1DEF_DTIME SM_2DEF_DTIME SM_3DEF_DTIME SM_4DEF_DTIME SM_5DEF_DTIME SM_6DEF_DTIME SM_7DEF_DTIME SM_8DEF_DTIME SM_9DEF_DTIME SM_CALC_DATE SM_BAD_DIGIT SM_BAD_YN SM_BAD_ALPHA SM_BAD_NUM SM_BAD_ALPHNUM SM_DECIMAL SM_1STATS SM_VERNO SM_DIG_ERR SM_YN_ERR SM_LET_ERR SM_NUM_ERR SM_ANUM_ERR SM_REXP_ERR SM_POSN_ERR SM_FBX_OPEN SM_FBX_WINDOW SM_FBX_SIBLING SM_OPENDIR
+
+syn keyword jamVariable3 SM_GETFILES SM_CHDIR SM_GETCWD SM_UNCLOSED_COMM SM_MB_OKLABEL SM_MB_CANCELLABEL SM_MB_YESLABEL SM_MB_NOLABEL SM_MB_RETRYLABEL SM_MB_IGNORELABEL SM_MB_ABORTLABEL SM_MB_HELPLABEL SM_MB_STOP SM_MB_QUESTION SM_MB_WARNING SM_MB_INFORMATION SM_MB_YESALLLABEL SM_0MN_CURRDEF SM_1MN_CURRDEF SM_2MN_CURRDEF SM_0DEF_CURR SM_1DEF_CURR SM_2DEF_CURR SM_3DEF_CURR SM_4DEF_CURR SM_5DEF_CURR SM_6DEF_CURR SM_7DEF_CURR SM_8DEF_CURR SM_9DEF_CURR SM_SEND_SYNTAX SM_SEND_ITEM SM_SEND_INVALID_BUNDLE SM_RECEIVE_SYNTAX SM_RECEIVE_ITEM_NUMBER SM_RECEIVE_OVERFLOW SM_RECEIVE_ITEM SM_SYNCH_RECEIVE SM_EXEC_FAIL SM_DYNA_HELP_NOT_AVAIL SM_DLL_LOAD_ERR SM_DLL_UNRESOLVED SM_DLL_VERSION_ERR SM_DLL_OPTION_ERR SM_DEMOERR SM_MB_OKALLLABEL SM_MB_NOALLLABEL SM_BADPROP SM_BETWEEN SM_ATLEAST SM_ATMOST SM_PR_ERROR SM_PR_OBJID SM_PR_OBJECT SM_PR_ITEM SM_PR_PROP SM_PR_PROP_ITEM SM_PR_PROP_VAL SM_PR_CONVERT SM_PR_OBJ_TYPE SM_PR_RANGE SM_PR_NO_SET SM_PR_BYND_SCRN SM_PR_WW_SCROLL SM_PR_NO_SYNC SM_PR_TOO_BIG SM_PR_BAD_MASK SM_EXEC_MEM_ERR
+
+syn keyword jamVariable4 SM_EXEC_NO_PROG SM_PR_NO_KEYSTRUCT SM_REOPEN_AS_SLIB SM_REOPEN_THE_SLIB SM_ERRLIB SM_WARNLIB SM_LIB_DOWNGRADE SM_OLDER SM_NEWER SM_UPGRADE SM_LIB_READONLY SM_LOPEN_ERR SM_LOPEN_WARN SM_MLOPEN_CREAT SM_MLOPEN_INIT SM_LIB_ERR SM_LIB_ISOLATE SM_LIB_NO_ERR SM_LIB_REC_ERR SM_LIB_FATAL_ERR SM_LIB_LERR_FILE SM_LIB_LERR_NOTLIB SM_LIB_LERR_BADVERS SM_LIB_LERR_FORMAT SM_LIB_LERR_BADCM SM_LIB_LERR_LOCK SM_LIB_LERR_RESERVED SM_LIB_LERR_READONLY SM_LIB_LERR_NOENTRY SM_LIB_LERR_BUSY SM_LIB_LERR_ROVERS SM_LIB_LERR_DEFAULT SM_LIB_BADCM SM_LIB_LERR_NEW SM_STANDALONE_MODE SM_FEATURE_RESTRICT FM_CH_LOST FM_JPL_PROMPT FM_YR4 FM_YR2 FM_MON FM_MON2 FM_DATE FM_DATE2 FM_HOUR FM_HOUR2 FM_MIN FM_MIN2 FM_SEC FM_SEC2 FM_YRDAY FM_AMPM FM_DAYA FM_DAYL FM_MONA FM_MONL FM_0MN_DEF_DT FM_1MN_DEF_DT FM_2MN_DEF_DT FM_DAY JM_QTERMINATE JM_HITSPACE JM_HITACK JM_NOJWIN UT_MEMERR UT_P_OPT UT_V_OPT UT_E_BINOPT UT_NO_INPUT UT_SECLONG UT_1FNAME UT_SLINE UT_FILE UT_ERROR UT_WARNING UT_MISSEQ UT_VOPT UT_M2_DESCR
+
+syn keyword jamVariable5 UT_M2_PROGNAME UT_M2_USAGE UT_M2_O_OPT UT_M2_COM UT_M2_BADTAG UT_M2_MSSQUOT UT_M2_AFTRQUOT UT_M2_DUPSECT UT_M2_BADUCLSS UT_M2_USECPRFX UT_M2_MPTYUSCT UT_M2_DUPMSGTG UT_M2_TOOLONG UT_M2_LONG UT_K2_DESCR UT_K2_PROGNAME UT_K2_USAGE UT_K2_MNEM UT_K2_NKEYDEF UT_K2_DUPKEY UT_K2_NOTFOUND UT_K2_1FNAME UT_K2_VOPT UT_K2_EXCHAR UT_V2_DESCR UT_V2_PROGNAME UT_V2_USAGE UT_V2_SLINE UT_V2_SEQUAL UT_V2_SVARNAME UT_V2_SNAME UT_V2_VOPT UT_V2_1REQ UT_CB_DESCR UT_CB_PROGNAME UT_CB_USAGE UT_CB_VOPT UT_CB_MIEXT UT_CB_AEXT UT_CB_UNKNOWN UT_CB_ISCHEME UT_CB_BKFGS UT_CB_ABGS UT_CB_REC UT_CB_GUI UT_CB_CONT UT_CB_CONTFG UT_CB_AFILE UT_CB_LEFT_QUOTE UT_CB_NO_EQUAL UT_CB_EXTRA_EQ UT_CB_BAD_LHS UT_CB_BAD_RHS UT_CB_BAD_QUOTED UT_CB_FILE UT_CB_FILE_LINE UT_CB_DUP_ALIAS UT_CB_LINE_LOOP UT_CB_BAD_STYLE UT_CB_DUP_STYLE UT_CB_NO_SECT UT_CB_DUP_SCHEME DM_ERROR DM_NODATABASE DM_NOTLOGGEDON DM_ALREADY_ON DM_ARGS_NEEDED DM_LOGON_DENIED DM_BAD_ARGS DM_BAD_CMD DM_NO_MORE_ROWS DM_ABORTED DM_NO_CURSOR DM_MANY_CURSORS DM_KEYWORD
+
+syn keyword jamVariable6 DM_INVALID_DATE DM_COMMIT DM_ROLLBACK DM_PARSE_ERROR DM_BIND_COUNT DM_BIND_VAR DM_DESC_COL DM_FETCH DM_NO_NAME DM_END_OF_PROC DM_NOCONNECTION DM_NOTSUPPORTED DM_TRAN_PEND DM_NO_TRANSACTION DM_ALREADY_INIT DM_INIT_ERROR DM_MAX_DEPTH DM_NO_PARENT DM_NO_CHILD DM_MODALITY_NOT_FOUND DM_NATIVE_NO_SUPPORT DM_NATIVE_CANCEL DM_TM_ALREADY DM_TM_IN_PROGRESS DM_TM_CLOSE_ERROR DM_TM_BAD_MODE DM_TM_BAD_CLOSE_ACTION DM_TM_INTERNAL DM_TM_MODEL_INTERNAL DM_TM_NO_ROOT DM_TM_NO_TRANSACTION DM_TM_INITIAL_MODE DM_TM_PARENT_NAME DM_TM_BAD_MEMBER DM_TM_FLD_NAM_LEN DM_TM_NO_PARENT DM_TM_BAD_REQUEST DM_TM_CANNOT_GEN_SQL DM_TM_CANNOT_EXEC_SQL DM_TM_DBI_ERROR DM_TM_DISCARD_ALL DM_TM_DISCARD_LATEST DM_TM_CALL_ERROR DM_TM_CALL_TYPE DM_TM_HOOK_MODEL DM_TM_ROOT_NAME DM_TM_TV_INVALID DM_TM_COL_NOT_FOUND DM_TM_BAD_LINK DM_TM_HOOK_MODEL_ERROR DM_TM_ONE_ROW DM_TM_SOME_ROWS DM_TM_GENERAL DM_TM_NO_HOOK DM_TM_NOSET DM_TM_TBLNAME DM_TM_PRIMARY_KEY DM_TM_INCOMPLETE_KEY DM_TM_CMD_MODE DM_TM_NO_SUCH_CMD DM_TM_NO_SUCH_SCOPE
+
+syn keyword jamVariable7 DM_TM_NO_SUCH_TV DM_TM_EVENT_LOOP DM_TM_UNSUPPORTED DM_TM_NO_MODEL DM_TM_SYNCH_SV DM_TM_WRONG_FORM DM_TM_VC_FIELD DM_TM_VC_DATE DM_TM_VC_TYPE DM_TM_BAD_CONTINUE DM_JDB_OUT_OF_MEMORY DM_JDB_DUPTABLEALIAS DM_JDB_DUPCURSORNAME DM_JDB_NODB DM_JDB_BINDCOUNT DM_JDB_NO_MORE_ROWS DM_JDB_AMBIGUOUS_COLUMN_REF DM_JDB_UNRESOLVED_COLUMN_REF DM_JDB_TABLE_READ_WRITE_CONFLICT DM_JDB_SYNTAX_ERROR DM_JDB_DUP_COLUMN_ASSIGNMENT DM_JDB_NO_MSG_FILE DM_JDB_NO_MSG DM_JDB_NOT_IMPLEMENTED DM_JDB_AGGREGATE_NOT_ALLOWED DM_JDB_TYPE_MISMATCH DM_JDB_NO_CURRENT_ROW DM_JDB_DB_CORRUPT DM_JDB_BUF_OVERFLOW DM_JDB_FILE_IO_ERR DM_JDB_BAD_HANDLE DM_JDB_DUP_TNAME DM_JDB_INVALID_TABLE_OP DM_JDB_TABLE_NOT_FOUND DM_JDB_CONVERSION_FAILED DM_JDB_INVALID_COLUMN_LIST DM_JDB_TABLE_OPEN DM_JDB_BAD_INPUT DM_JDB_DATATYPE_OVERFLOW DM_JDB_DATABASE_EXISTS DM_JDB_DATABASE_OPEN DM_JDB_DUP_CNAME DM_JDB_TMPDATABASE_ERR DM_JDB_INVALID_VALUES_COUNT DM_JDB_INVALID_COLUMN_COUNT DM_JDB_MAX_RECLEN_EXCEEDED DM_JDB_END_OF_GROUP
+
+syn keyword jamVariable8 TP_EXC_INVALID_CLIENT_COMMAND TP_EXC_INVALID_CLIENT_OPTION TP_EXC_INVALID_COMMAND TP_EXC_INVALID_COMMAND_SYNTAX TP_EXC_INVALID_CONNECTION TP_EXC_INVALID_CONTEXT TP_EXC_INVALID_FORWARD TP_EXC_INVALID_JAM_VARIABLE_REF TP_EXC_INVALID_MONITOR_COMMAND TP_EXC_INVALID_MONITOR_OPTION TP_EXC_INVALID_OPTION TP_EXC_INVALID_OPTION_VALUE TP_EXC_INVALID_SERVER_COMMAND TP_EXC_INVALID_SERVER_OPTION TP_EXC_INVALID_SERVICE TP_EXC_INVALID_TRANSACTION TP_EXC_JIF_ACCESS_FAILED TP_EXC_JIF_LOWER_VERSION TP_EXC_LOGFILE_ERROR TP_EXC_MONITOR_ERROR TP_EXC_NO_OUTSIDE_TRANSACTION TP_EXC_NO_OUTSTANDING_CALLS TP_EXC_NO_OUTSTANDING_MESSAGE TP_EXC_NO_SERVICES_ADVERTISED TP_EXC_NO_SIGNALS TP_EXC_NONTRANSACTIONAL_SERVICE TP_EXC_NONTRANSACTIONAL_ACTION TP_EXC_OUT_OF_MEMORY TP_EXC_POSTING_FAILED TP_EXC_PERMISSION_DENIED TP_EXC_REQUEST_LIMIT TP_EXC_ROLLBACK_COMMITTED TP_EXC_ROLLBACK_FAILED TP_EXC_SERVICE_FAILED TP_EXC_SERVICE_NOT_IN_JIF TP_EXC_SERVICE_PROTOCOL_ERROR TP_EXC_SUBSCRIPTION_LIMIT
+
+syn keyword jamVariable9 TP_EXC_SUBSCRIPTION_MATCH TP_EXC_SVC_ADVERTISE_LIMIT TP_EXC_SVC_WORK_OUTSTANDING TP_EXC_SVCROUTINE_MISSING TP_EXC_SVRINIT_WORK_OUTSTANDING TP_EXC_TIMEOUT TP_EXC_TRANSACTION_LIMIT TP_EXC_UNLOAD_FAILED TP_EXC_UNSUPPORTED_BUFFER TP_EXC_UNSUPPORTED_BUF_W_SUBT TP_EXC_USER_ABORT TP_EXC_WORK_OUTSTANDING TP_EXC_XA_CLOSE_FAILED TP_EXC_XA_OPEN_FAILED TP_EXC_QUEUE_BAD_MSGID TP_EXC_QUEUE_BAD_NAMESPACE TP_EXC_QUEUE_BAD_QUEUE TP_EXC_QUEUE_CANT_START_TRAN TP_EXC_QUEUE_FULL TP_EXC_QUEUE_MSG_IN_USE TP_EXC_QUEUE_NO_MSG TP_EXC_QUEUE_NOT_IN_QSPACE TP_EXC_QUEUE_RSRC_NOT_OPEN TP_EXC_QUEUE_SPACE_NOT_IN_JIF TP_EXC_QUEUE_TRAN_ABORTED TP_EXC_QUEUE_TRAN_ABSENT TP_EXC_QUEUE_UNEXPECTED TP_EXC_DCE_LOGIN_REQUIRED TP_EXC_ENC_CELL_NAME_REQUIRED TP_EXC_ENC_CONN_INFO_DIFFS TP_EXC_ENC_SVC_REGISTRY_ERROR TP_INVALID_START_ROUTINE TP_JIF_NOT_FOUND TP_JIF_OPEN_ERROR TP_NO_JIF TP_NO_MONITORS_ERROR TP_NO_SESSIONS_ERROR TP_NO_START_ROUTINE TP_ADV_SERVICE TP_ADV_SERVICE_IN_GROUP TP_PRE_SVCHDL_WINOPEN_FAILED
+
+syn keyword jamVariable10 PV_YES PV_NO TRUE FALSE TM_TRAN_NAME
+
+" jamCommentGroup allows adding matches for special things in comments
+syn cluster jamCommentGroup contains=jamTodo
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match jamSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+if !exists("c_no_utf")
+ syn match jamSpecial contained "\\\(u\x\{4}\|U\x\{8}\)"
+endif
+if exists("c_no_cformat")
+ syn region jamString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial
+else
+ syn match jamFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+ syn match jamFormat "%%" contained
+ syn region jamString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat
+ hi link jamFormat jamSpecial
+endif
+syn match jamCharacter "L\='[^\\]'"
+syn match jamCharacter "L'[^']*'" contains=jamSpecial
+syn match jamSpecialError "L\='\\[^'\"?\\abfnrtv]'"
+syn match jamSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
+syn match jamSpecialCharacter "L\='\\\o\{1,3}'"
+syn match jamSpecialCharacter "'\\x\x\{1,2}'"
+syn match jamSpecialCharacter "L'\\x\x\+'"
+
+"catch errors caused by wrong parenthesis and brackets
+syn cluster jamParenGroup contains=jamParenError,jamIncluded,jamSpecial,@jamCommentGroup,jamUserCont,jamUserLabel,jamBitField,jamCommentSkip,jamOctalZero,jamCppOut,jamCppOut2,jamCppSkip,jamFormat,jamNumber,jamFloat,jamOctal,jamOctalError,jamNumbersCom
+
+syn region jamParen transparent start='(' end=')' contains=ALLBUT,@jamParenGroup,jamErrInBracket
+syn match jamParenError "[\])]"
+syn match jamErrInParen contained "[\]{}]"
+syn region jamBracket transparent start='\[' end=']' contains=ALLBUT,@jamParenGroup,jamErrInParen
+syn match jamErrInBracket contained "[);{}]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match jamNumbers transparent "\<\d\|\,\d" contains=jamNumber,jamFloat,jamOctalError,jamOctal
+" Same, but without octal error (for comments)
+syn match jamNumbersCom contained transparent "\<\d\|\,\d" contains=jamNumber,jamFloat,jamOctal
+syn match jamNumber contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match jamNumber contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match jamOctal contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
+syn match jamOctalZero contained "\<0"
+syn match jamFloat contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match jamFloat contained "\d\+\,\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match jamFloat contained "\,\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match jamFloat contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn match jamOctalError contained "0\o*[89]\d*"
+syn case match
+
+syntax match jamOperator1 "\#\#"
+syntax match jamOperator6 "/"
+syntax match jamOperator2 "+"
+syntax match jamOperator3 "*"
+syntax match jamOperator4 "-"
+syntax match jamOperator5 "|"
+syntax match jamOperator6 "/"
+syntax match jamOperator7 "&"
+syntax match jamOperator8 ":"
+syntax match jamOperator9 "<"
+syntax match jamOperator10 ">"
+syntax match jamOperator11 "!"
+syntax match jamOperator12 "%"
+syntax match jamOperator13 "^"
+syntax match jamOperator14 "@"
+
+syntax match jamCommentL "//"
+
+if exists("jam_comment_strings")
+ " A comment can contain jamString, jamCharacter and jamNumber.
+ " But a "*/" inside a jamString in a jamComment DOES end the comment! So we
+ " need to use a special type of jamString: jamCommentString, 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 jamCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region jamCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=jamSpecial,jamCommentSkip
+ syntax region jamComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=jamSpecial
+ syntax region jamCommentL start="//" skip="\\$" end="$" keepend contains=@jamCommentGroup,jamComment2String,jamCharacter,jamNumbersCom,jamSpaceError
+ syntax region jamCommentL2 start="^#\|^\s\+\#" skip="\\$" end="$" keepend contains=@jamCommentGroup,jamComment2String,jamCharacter,jamNumbersCom,jamSpaceError
+ syntax region jamComment start="/\*" end="\*/" contains=@jamCommentGroup,jamCommentString,jamCharacter,jamNumbersCom,jamSpaceError
+else
+ syn region jamCommentL start="//" skip="\\$" end="$" keepend contains=@jamCommentGroup,jamSpaceError
+ syn region jamCommentL2 start="^\#\|^\s\+\#" skip="\\$" end="$" keepend contains=@jamCommentGroup,jamSpaceError
+ syn region jamComment start="/\*" end="\*/" contains=@jamCommentGroup,jamSpaceError
+endif
+
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match jamCommentError "\*/"
+
+syntax match jamOperator3Error "*/"
+
+" 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_jam_syn_inits")
+ if version < 508
+ let did_jam_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink jamCommentL jamComment
+ HiLink jamCommentL2 jamComment
+ HiLink jamOperator3Error jamError
+ HiLink jamConditional Conditional
+ HiLink jamRepeat Repeat
+ HiLink jamCharacter Character
+ HiLink jamSpecialCharacter jamSpecial
+ HiLink jamNumber Number
+ HiLink jamParenError jamError
+ HiLink jamErrInParen jamError
+ HiLink jamErrInBracket jamError
+ HiLink jamCommentError jamError
+ HiLink jamSpaceError jamError
+ HiLink jamSpecialError jamError
+ HiLink jamOperator1 jamOperator
+ HiLink jamOperator2 jamOperator
+ HiLink jamOperator3 jamOperator
+ HiLink jamOperator4 jamOperator
+ HiLink jamOperator5 jamOperator
+ HiLink jamOperator6 jamOperator
+ HiLink jamOperator7 jamOperator
+ HiLink jamOperator8 jamOperator
+ HiLink jamOperator9 jamOperator
+ HiLink jamOperator10 jamOperator
+ HiLink jamOperator11 jamOperator
+ HiLink jamOperator12 jamOperator
+ HiLink jamOperator13 jamOperator
+ HiLink jamOperator14 jamOperator
+ HiLink jamError Error
+ HiLink jamStatement Statement
+ HiLink jamPreCondit PreCondit
+ HiLink jamCommentError jamError
+ HiLink jamCommentString jamString
+ HiLink jamComment2String jamString
+ HiLink jamCommentSkip jamComment
+ HiLink jamString String
+ HiLink jamComment Comment
+ HiLink jamSpecial SpecialChar
+ HiLink jamTodo Todo
+ HiLink jamCppSkip jamCppOut
+ HiLink jamCppOut2 jamCppOut
+ HiLink jamCppOut Comment
+ HiLink jamDBState1 Identifier
+ HiLink jamDBState2 Identifier
+ HiLink jamSQLState1 jamSQL
+ HiLink jamSQLState2 jamSQL
+ HiLink jamLibFunc1 jamLibFunc
+ HiLink jamLibFunc2 jamLibFunc
+ HiLink jamLibFunc3 jamLibFunc
+ HiLink jamLibFunc4 jamLibFunc
+ HiLink jamLibFunc5 jamLibFunc
+ HiLink jamLibFunc6 jamLibFunc
+ HiLink jamLibFunc7 jamLibFunc
+ HiLink jamLibFunc8 jamLibFunc
+ HiLink jamLibFunc9 jamLibFunc
+ HiLink jamVariable1 jamVariablen
+ HiLink jamVariable2 jamVariablen
+ HiLink jamVariable3 jamVariablen
+ HiLink jamVariable4 jamVariablen
+ HiLink jamVariable5 jamVariablen
+ HiLink jamVariable6 jamVariablen
+ HiLink jamVariable7 jamVariablen
+ HiLink jamVariable8 jamVariablen
+ HiLink jamVariable9 jamVariablen
+ HiLink jamVariable10 jamVariablen
+ HiLink jamVariablen Constant
+ HiLink jamSQL Type
+ HiLink jamLibFunc PreProc
+ HiLink jamOperator Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "jam"
+
+" vim: ts=8
diff --git a/runtime/syntax/jargon.vim b/runtime/syntax/jargon.vim
new file mode 100644
index 000000000..25a88bc98
--- /dev/null
+++ b/runtime/syntax/jargon.vim
@@ -0,0 +1,36 @@
+" Vim syntax file
+" Language: Jargon File
+" Maintainer: <rms@poczta.onet.pl>
+" Last Change: 2001 May 26
+"
+" 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 match jargonChaptTitle /:[^:]*:/
+syn match jargonEmailAddr /[^<@ ^I]*@[^ ^I>]*/
+syn match jargonUrl +\(http\|ftp\)://[^\t )"]*+
+syn match jargonMark /{[^}]*}/
+
+" 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_jargon_syntax_inits")
+ if version < 508
+ let did_jargon_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink jargonChaptTitle Title
+ HiLink jargonEmailAddr Comment
+ HiLink jargonUrl Comment
+ HiLink jargonMark Label
+ delcommand HiLink
+endif
+
+let b:current_syntax = "jargon"
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
new file mode 100644
index 000000000..b47c17e69
--- /dev/null
+++ b/runtime/syntax/java.vim
@@ -0,0 +1,334 @@
+" Vim syntax file
+" Language: Java
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/java.vim
+" Last Change: 2004 Apr 23
+
+" Please check :help java.vim for comments on some of the options available.
+
+" Quit when a syntax file was already loaded
+if !exists("main_syntax")
+ if version < 600
+ syntax clear
+ elseif exists("b:current_syntax")
+ finish
+ endif
+ " we define it here so that included files can test for it
+ let main_syntax='java'
+endif
+
+" don't use standard HiLink, it will not work with included syntax files
+if version < 508
+ command! -nargs=+ JavaHiLink hi link <args>
+else
+ command! -nargs=+ JavaHiLink hi def link <args>
+endif
+
+" some characters that cannot be in a java program (outside a string)
+syn match javaError "[\\@`]"
+syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
+syn match javaOK "\.\.\."
+
+" use separate name so that it can be deleted in javacc.vim
+syn match javaError2 "#\|=<"
+JavaHiLink javaError2 javaError
+
+
+
+" keyword definitions
+syn keyword javaExternal native package
+syn match javaExternal "\<import\(\s\+static\>\)\?"
+syn keyword javaError goto const
+syn keyword javaConditional if else switch
+syn keyword javaRepeat while for do
+syn keyword javaBoolean true false
+syn keyword javaConstant null
+syn keyword javaTypedef this super
+syn keyword javaOperator new instanceof
+syn keyword javaType boolean char byte short int long float double
+syn keyword javaType void
+syn keyword javaStatement return
+syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
+syn keyword javaExceptions throw try catch finally
+syn keyword javaAssert assert
+syn keyword javaMethodDecl synchronized throws
+syn keyword javaClassDecl extends implements interface
+" to differentiate the keyword class from MyClass.class we use a match here
+syn match javaTypedef "\.\s*\<class\>"ms=s+1
+syn keyword javaClassDecl enum
+syn match javaClassDecl "^class\>"
+syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
+syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
+syn match javaUserLabelRef "\k\+" contained
+syn keyword javaScopeDecl public protected private abstract
+
+if exists("java_highlight_java_lang_ids") || exists("java_highlight_java_lang") || exists("java_highlight_all")
+ " java.lang.*
+ syn match javaLangClass "\<System\>"
+ syn keyword javaLangClass Cloneable Comparable Runnable Boolean Byte Class
+ syn keyword javaLangClass Character CharSequence ClassLoader Compiler Double Float
+ syn keyword javaLangClass Integer InheritableThreadLocal Long Math Number Object Package Process
+ syn keyword javaLangClass Runtime RuntimePermission InheritableThreadLocal
+ syn keyword javaLangClass SecurityManager Short String StrictMath StackTraceElement
+ syn keyword javaLangClass StringBuffer Thread ThreadGroup
+ syn keyword javaLangClass ThreadLocal Throwable Void ArithmeticException
+ syn keyword javaLangClass ArrayIndexOutOfBoundsException AssertionError
+ syn keyword javaLangClass ArrayStoreException ClassCastException
+ syn keyword javaLangClass ClassNotFoundException
+ syn keyword javaLangClass CloneNotSupportedException Exception
+ syn keyword javaLangClass IllegalAccessException
+ syn keyword javaLangClass IllegalArgumentException
+ syn keyword javaLangClass IllegalMonitorStateException
+ syn keyword javaLangClass IllegalStateException
+ syn keyword javaLangClass IllegalThreadStateException
+ syn keyword javaLangClass IndexOutOfBoundsException
+ syn keyword javaLangClass InstantiationException InterruptedException
+ syn keyword javaLangClass NegativeArraySizeException NoSuchFieldException
+ syn keyword javaLangClass NoSuchMethodException NullPointerException
+ syn keyword javaLangClass NumberFormatException RuntimeException
+ syn keyword javaLangClass SecurityException StringIndexOutOfBoundsException
+ syn keyword javaLangClass UnsupportedOperationException
+ syn keyword javaLangClass AbstractMethodError ClassCircularityError
+ syn keyword javaLangClass ClassFormatError Error ExceptionInInitializerError
+ syn keyword javaLangClass IllegalAccessError InstantiationError
+ syn keyword javaLangClass IncompatibleClassChangeError InternalError
+ syn keyword javaLangClass LinkageError NoClassDefFoundError
+ syn keyword javaLangClass NoSuchFieldError NoSuchMethodError
+ syn keyword javaLangClass OutOfMemoryError StackOverflowError
+ syn keyword javaLangClass ThreadDeath UnknownError UnsatisfiedLinkError
+ syn keyword javaLangClass UnsupportedClassVersionError VerifyError
+ syn keyword javaLangClass VirtualMachineError
+ syn keyword javaLangObject clone equals finalize getClass hashCode
+ syn keyword javaLangObject notify notifyAll toString wait
+ JavaHiLink javaLangClass javaConstant
+ JavaHiLink javaLangObject javaConstant
+ syn cluster javaTop add=javaLangObject,javaLangClass
+ syn cluster javaClasses add=javaLangClass
+endif
+
+if filereadable(expand("<sfile>:p:h")."/javaid.vim")
+ source <sfile>:p:h/javaid.vim
+endif
+
+if exists("java_space_errors")
+ if !exists("java_no_trail_space_error")
+ syn match javaSpaceError "\s\+$"
+ endif
+ if !exists("java_no_tab_space_error")
+ syn match javaSpaceError " \+\t"me=e-1
+ endif
+endif
+
+syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
+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
+
+" 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
+
+
+" Comments
+syn keyword javaTodo contained TODO FIXME XXX
+if exists("java_comment_strings")
+ syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
+ syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
+ syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
+ syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
+ syn match javaCommentCharacter contained "'[^\\]'"
+ syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
+ syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
+endif
+syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
+syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
+syn match javaCommentStar contained "^\s*\*$"
+syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
+JavaHiLink javaCommentString javaString
+JavaHiLink javaComment2String javaString
+JavaHiLink javaCommentCharacter javaCharacter
+
+syn cluster javaTop add=javaComment,javaLineComment
+
+if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
+ syntax case ignore
+ " syntax coloring for javadoc comments (HTML)
+ syntax include @javaHtml <sfile>:p:h/html.vim
+ unlet b:current_syntax
+ syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,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
+
+ syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+ syn match javaDocTags contained "@\(see\|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\)\>"
+ syntax case match
+endif
+
+" match the special comment /**/
+syn match javaComment "/\*\*/"
+
+" Strings and constants
+syn match javaSpecialError contained "\\."
+syn match javaSpecialCharError contained "[^']"
+syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
+" next line disabled, it can cause a crash for a long line
+"syn match javaStringError +"\([^"\\]\|\\.\)*$+
+syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
+syn match javaCharacter "'\\''" contains=javaSpecialChar
+syn match javaCharacter "'[^\\]'"
+syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
+syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+
+" unicode characters
+syn match javaSpecial "\\u\d\{4\}"
+
+syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
+
+if exists("java_highlight_functions")
+ if java_highlight_functions == "indent"
+ syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
+ syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
+ syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
+ syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
+ else
+ " This line catches method declarations at any indentation>0, but it assumes
+ " two things:
+ " 1. class names are always capitalized (ie: Button)
+ " 2. method names are never capitalized (except constructors, of course)
+ syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses
+ endif
+ syn match javaBraces "[{}]"
+ syn cluster javaTop add=javaFuncDef,javaBraces
+endif
+
+if exists("java_highlight_debug")
+
+ " Strings and constants
+ syn match javaDebugSpecial contained "\\\d\d\d\|\\."
+ syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
+ syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
+ syn match javaDebugCharacter contained "'[^\\]'"
+ syn match javaDebugSpecialCharacter contained "'\\.'"
+ syn match javaDebugSpecialCharacter contained "'\\''"
+ syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
+ syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+ syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+ syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+ syn keyword javaDebugBoolean contained true false
+ syn keyword javaDebugType contained null this super
+ syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
+
+ " to make this work you must define the highlighting for these groups
+ syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
+ syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
+ syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
+
+ syn cluster javaTop add=javaDebug
+
+ if version >= 508 || !exists("did_c_syn_inits")
+ JavaHiLink javaDebug Debug
+ JavaHiLink javaDebugString DebugString
+ JavaHiLink javaDebugStringError javaError
+ JavaHiLink javaDebugType DebugType
+ JavaHiLink javaDebugBoolean DebugBoolean
+ JavaHiLink javaDebugNumber Debug
+ JavaHiLink javaDebugSpecial DebugSpecial
+ JavaHiLink javaDebugSpecialCharacter DebugSpecial
+ JavaHiLink javaDebugCharacter DebugString
+ JavaHiLink javaDebugParen Debug
+
+ JavaHiLink DebugString String
+ JavaHiLink DebugSpecial Special
+ JavaHiLink DebugBoolean Boolean
+ JavaHiLink DebugType Type
+ endif
+endif
+
+if exists("java_mark_braces_in_parens_as_errors")
+ syn match javaInParen contained "[{}]"
+ JavaHiLink javaInParen javaError
+ syn cluster javaTop add=javaInParen
+endif
+
+" catch errors caused by wrong parenthesis
+syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
+syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
+syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
+syn match javaParenError ")"
+JavaHiLink javaParenError javaError
+
+if !exists("java_minlines")
+ let java_minlines = 10
+endif
+exec "syn sync ccomment javaComment minlines=" . java_minlines
+
+" The default highlighting.
+if version >= 508 || !exists("did_java_syn_inits")
+ if version < 508
+ let did_java_syn_inits = 1
+ endif
+ JavaHiLink javaFuncDef Function
+ JavaHiLink javaBraces Function
+ JavaHiLink javaBranch Conditional
+ JavaHiLink javaUserLabelRef javaUserLabel
+ JavaHiLink javaLabel Label
+ JavaHiLink javaUserLabel Label
+ JavaHiLink javaConditional Conditional
+ JavaHiLink javaRepeat Repeat
+ JavaHiLink javaExceptions Exception
+ JavaHiLink javaAssert Statement
+ JavaHiLink javaStorageClass StorageClass
+ JavaHiLink javaMethodDecl javaStorageClass
+ JavaHiLink javaClassDecl javaStorageClass
+ JavaHiLink javaScopeDecl javaStorageClass
+ JavaHiLink javaBoolean Boolean
+ JavaHiLink javaSpecial Special
+ JavaHiLink javaSpecialError Error
+ JavaHiLink javaSpecialCharError Error
+ JavaHiLink javaString String
+ JavaHiLink javaCharacter Character
+ JavaHiLink javaSpecialChar SpecialChar
+ JavaHiLink javaNumber Number
+ JavaHiLink javaError Error
+ JavaHiLink javaStringError Error
+ JavaHiLink javaStatement Statement
+ JavaHiLink javaOperator Operator
+ JavaHiLink javaComment Comment
+ JavaHiLink javaDocComment Comment
+ JavaHiLink javaLineComment Comment
+ JavaHiLink javaConstant Constant
+ JavaHiLink javaTypedef Typedef
+ JavaHiLink javaTodo Todo
+
+ JavaHiLink javaCommentTitle SpecialComment
+ JavaHiLink javaDocTags Special
+ JavaHiLink javaDocParam Function
+ JavaHiLink javaCommentStar javaComment
+
+ JavaHiLink javaType Type
+ JavaHiLink javaExternal Include
+
+ JavaHiLink htmlComment Special
+ JavaHiLink htmlCommentPart Special
+ JavaHiLink javaSpaceError Error
+endif
+
+delcommand JavaHiLink
+
+let b:current_syntax = "java"
+
+if main_syntax == 'java'
+ unlet main_syntax
+endif
+
+let b:spell_options="contained"
+
+" vim: ts=8
diff --git a/runtime/syntax/javacc.vim b/runtime/syntax/javacc.vim
new file mode 100644
index 000000000..57c57b568
--- /dev/null
+++ b/runtime/syntax/javacc.vim
@@ -0,0 +1,77 @@
+" Vim syntax file
+" 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
+
+" Uses java.vim, and adds a few special things for JavaCC Parser files.
+" Those files usually have the extension *.jj
+
+" 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
+
+" source the java.vim file
+if version < 600
+ source <sfile>:p:h/java.vim
+else
+ runtime! syntax/java.vim
+endif
+unlet b:current_syntax
+
+"remove catching errors caused by wrong parenthesis (does not work in javacc
+"files) (first define them in case they have not been defined in java)
+syn match javaParen "--"
+syn match javaParenError "--"
+syn match javaInParen "--"
+syn match javaError2 "--"
+syn clear javaParen
+syn clear javaParenError
+syn clear javaInParen
+syn clear javaError2
+
+" remove function definitions (they look different) (first define in
+" in case it was not defined in java.vim)
+"syn match javaFuncDef "--"
+syn clear javaFuncDef
+syn match javaFuncDef "[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)[ \t]*:" contains=javaType
+
+syn keyword javaccPackages options DEBUG_PARSER DEBUG_LOOKAHEAD DEBUG_TOKEN_MANAGER
+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 match javaccPackages "PARSER_END([^)]*)"
+syn match javaccPackages "PARSER_BEGIN([^)]*)"
+syn match javaccSpecToken "<EOF>"
+" the dot is necessary as otherwise it will be matched as a keyword.
+syn match javaccSpecToken ".LOOKAHEAD("ms=s+1,me=e-1
+syn match javaccToken "<[^> \t]*>"
+syn keyword javaccActionToken TOKEN SKIP MORE SPECIAL_TOKEN
+syn keyword javaccError DEBUG IGNORE_IN_BNF
+
+" 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_css_syn_inits")
+ if version < 508
+ let did_css_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink javaccSpecToken Statement
+ HiLink javaccActionToken Type
+ HiLink javaccPackages javaScopeDecl
+ HiLink javaccToken String
+ HiLink javaccError Error
+ delcommand HiLink
+endif
+
+let b:current_syntax = "javacc"
+
+" vim: ts=8
diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim
new file mode 100644
index 000000000..a037496bb
--- /dev/null
+++ b/runtime/syntax/javascript.vim
@@ -0,0 +1,111 @@
+" Vim syntax file
+" Language: JavaScript
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/javascript.vim
+" Last Change: 2004 May 16
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+" tuning parameters:
+" unlet javaScript_fold
+
+if !exists("main_syntax")
+ if version < 600
+ syntax clear
+ elseif exists("b:current_syntax")
+ finish
+ endif
+ let main_syntax = 'javascript'
+endif
+
+" Drop fold if it set but vim doesn't support it.
+if version < 600 && exists("javaScript_fold")
+ unlet javaScript_fold
+endif
+
+syn case ignore
+
+
+syn keyword javaScriptCommentTodo TODO FIXME XXX TBD contained
+syn match javaScriptLineComment "\/\/.*$" contains=javaScriptCommentTodo
+syn match javaScriptCommentSkip "^[ \t]*\*\($\|[ \t]\+\)"
+syn region javaScriptComment start="/\*" end="\*/" contains=javaScriptCommentTodo
+syn match javaScriptSpecial "\\\d\d\d\|\\."
+syn region javaScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=javaScriptSpecial,@htmlPreproc
+syn region javaScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=javaScriptSpecial,@htmlPreproc
+syn match javaScriptSpecialCharacter "'\\.'"
+syn match javaScriptNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
+syn region javaScriptRegexpString start=+/+ skip=+\\\\\|\\/+ end=+/[gi]\?\s*$+ end=+/[gi]\?\s*[;,)]+me=e-1 contains=@htmlPreproc oneline
+syn keyword javaScriptConditional if else
+syn keyword javaScriptRepeat while for
+syn keyword javaScriptBranch break continue switch case default
+syn keyword javaScriptOperator new in
+syn keyword javaScriptType this var const
+syn keyword javaScriptStatement return with
+syn keyword javaScriptBoolean true false
+
+if exists("javaScript_fold")
+ syn match javaScriptFunction "\<function\>"
+ syn region javaScriptFunctionFold start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
+
+ syn sync match javaScriptSync grouphere javaScriptFunctionFold "\<function\>"
+ syn sync match javaScriptSync grouphere NONE "^}"
+
+ setlocal foldmethod=syntax
+ setlocal foldtext=getline(v:foldstart)
+else
+ syn keyword javaScriptFunction function
+ syn match javaScriptBraces "[{}]"
+endif
+
+syn sync fromstart
+syn sync maxlines=100
+
+" catch errors caused by wrong parenthesis
+syn region javaScriptParen transparent start="(" end=")" contains=javaScriptParen,javaScriptComment,javaScriptSpecial,javaScriptStringD,javaScriptStringS,javaScriptSpecialCharacter,javaScriptNumber,javaScriptRegexpString,javaScriptBoolean,javaScriptBraces
+syn match javaScrParenError ")"
+
+if main_syntax == "javascript"
+ syn sync ccomment javaScriptComment
+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_javascript_syn_inits")
+ if version < 508
+ let did_javascript_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink javaScriptComment Comment
+ HiLink javaScriptLineComment Comment
+ HiLink javaScriptCommentTodo Todo
+ HiLink javaScriptSpecial Special
+ HiLink javaScriptStringS String
+ HiLink javaScriptStringD String
+ HiLink javaScriptCharacter Character
+ HiLink javaScriptSpecialCharacter javaScriptSpecial
+ HiLink javaScriptNumber javaScriptValue
+ HiLink javaScriptConditional Conditional
+ HiLink javaScriptRepeat Repeat
+ HiLink javaScriptBranch Conditional
+ HiLink javaScriptOperator Operator
+ HiLink javaScriptType Type
+ HiLink javaScriptStatement Statement
+ HiLink javaScriptFunction Function
+ HiLink javaScriptBraces Function
+ HiLink javaScriptError Error
+ HiLink javaScrParenError javaScriptError
+ HiLink javaScriptBoolean Boolean
+ HiLink javaScriptRegexpString String
+ delcommand HiLink
+endif
+
+let b:current_syntax = "javascript"
+if main_syntax == 'javascript'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/jess.vim b/runtime/syntax/jess.vim
new file mode 100644
index 000000000..243bab351
--- /dev/null
+++ b/runtime/syntax/jess.vim
@@ -0,0 +1,161 @@
+" Vim syntax file
+" Language: Jess
+" Maintainer: Paul Baleme <pbaleme@mail.com>
+" Last change: September 14, 2000
+" Based on lisp.vim by : Dr. Charles E. Campbell, Jr.
+
+" 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
+
+if version < 600
+ set iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
+else
+ setlocal iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
+endif
+
+" Lists
+syn match jessSymbol ![^()'`,"; \t]\+! contained
+syn match jessBarSymbol !|..\{-}|! contained
+syn region jessList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=jessAtom,jessBQList,jessConcat,jessDeclaration,jessList,jessNumber,jessSymbol,jessSpecial,jessFunc,jessKey,jessAtomMark,jessString,jessComment,jessBarSymbol,jessAtomBarSymbol,jessVar
+syn region jessBQList matchgroup=PreProc start="`(" skip="|.\{-}|" matchgroup=PreProc end=")" contains=jessAtom,jessBQList,jessConcat,jessDeclaration,jessList,jessNumber,jessSpecial,jessSymbol,jessFunc,jessKey,jessVar,jessAtomMark,jessString,jessComment,jessBarSymbol,jessAtomBarSymbol
+
+" Atoms
+syn match jessAtomMark "'"
+syn match jessAtom "'("me=e-1 contains=jessAtomMark nextgroup=jessAtomList
+syn match jessAtom "'[^ \t()]\+" contains=jessAtomMark
+syn match jessAtomBarSymbol !'|..\{-}|! contains=jessAtomMark
+syn region jessAtom start=+'"+ skip=+\\"+ end=+"+
+syn region jessAtomList matchgroup=Special start="(" skip="|.\{-}|" matchgroup=Special end=")" contained contains=jessAtomList,jessAtomNmbr0,jessString,jessComment,jessAtomBarSymbol
+syn match jessAtomNmbr "\<[0-9]\+" contained
+
+" Standard jess Functions and Macros
+syn keyword jessFunc * + ** - / < > <= >= <> =
+syn keyword jessFunc long longp
+syn keyword jessFunc abs agenda and
+syn keyword jessFunc assert assert-string bag
+syn keyword jessFunc batch bind bit-and
+syn keyword jessFunc bit-not bit-or bload
+syn keyword jessFunc bsave build call
+syn keyword jessFunc clear clear-storage close
+syn keyword jessFunc complement$ context count-query-results
+syn keyword jessFunc create$
+syn keyword jessFunc delete$ div
+syn keyword jessFunc do-backward-chaining e
+syn keyword jessFunc engine eq eq*
+syn keyword jessFunc eval evenp exit
+syn keyword jessFunc exp explode$ external-addressp
+syn keyword jessFunc fact-slot-value facts fetch
+syn keyword jessFunc first$ float floatp
+syn keyword jessFunc foreach format gensym*
+syn keyword jessFunc get get-fact-duplication
+syn keyword jessFunc get-member get-multithreaded-io
+syn keyword jessFunc get-reset-globals get-salience-evaluation
+syn keyword jessFunc halt if implode$
+syn keyword jessFunc import insert$ integer
+syn keyword jessFunc integerp intersection$ jess-version-number
+syn keyword jessFunc jess-version-string length$
+syn keyword jessFunc lexemep list-function$ load-facts
+syn keyword jessFunc load-function load-package log
+syn keyword jessFunc log10 lowcase matches
+syn keyword jessFunc max member$ min
+syn keyword jessFunc mod modify multifieldp
+syn keyword jessFunc neq new not
+syn keyword jessFunc nth$ numberp oddp
+syn keyword jessFunc open or pi
+syn keyword jessFunc ppdeffunction ppdefglobal ddpefrule
+syn keyword jessFunc printout random read
+syn keyword jessFunc readline replace$ reset
+syn keyword jessFunc rest$ retract retract-string
+syn keyword jessFunc return round rules
+syn keyword jessFunc run run-query run-until-halt
+syn keyword jessFunc save-facts set set-fact-duplication
+syn keyword jessFunc set-factory set-member set-multithreaded-io
+syn keyword jessFunc set-node-index-hash set-reset-globals
+syn keyword jessFunc set-salience-evaluation set-strategy
+syn keyword jessFunc setgen show-deffacts show-deftemplates
+syn keyword jessFunc show-jess-listeners socket
+syn keyword jessFunc sqrt store str-cat
+syn keyword jessFunc str-compare str-index str-length
+syn keyword jessFunc stringp sub-string subseq$
+syn keyword jessFunc subsetp sym-cat symbolp
+syn keyword jessFunc system throw time
+syn keyword jessFunc try undefadvice undefinstance
+syn keyword jessFunc undefrule union$ unwatch
+syn keyword jessFunc upcase view watch
+syn keyword jessFunc while
+syn match jessFunc "\<c[ad]\+r\>"
+
+" jess Keywords (modifiers)
+syn keyword jessKey defglobal deffunction defrule
+syn keyword jessKey deffacts
+syn keyword jessKey defadvice defclass definstance
+
+" Standard jess Variables
+syn region jessVar start="?" end="[^a-zA-Z0-9]"me=e-1
+
+" Strings
+syn region jessString start=+"+ skip=+\\"+ end=+"+
+
+" Shared with Declarations, Macros, Functions
+"syn keyword jessDeclaration
+
+syn match jessNumber "[0-9]\+"
+
+syn match jessSpecial "\*[a-zA-Z_][a-zA-Z_0-9-]*\*"
+syn match jessSpecial !#|[^()'`,"; \t]\+|#!
+syn match jessSpecial !#x[0-9a-fA-F]\+!
+syn match jessSpecial !#o[0-7]\+!
+syn match jessSpecial !#b[01]\+!
+syn match jessSpecial !#\\[ -\~]!
+syn match jessSpecial !#[':][^()'`,"; \t]\+!
+syn match jessSpecial !#([^()'`,"; \t]\+)!
+
+syn match jessConcat "\s\.\s"
+syntax match jessParenError ")"
+
+" Comments
+syn match jessComment ";.*$"
+
+" synchronization
+syn sync lines=100
+
+" 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_jess_syntax_inits")
+ if version < 508
+ let did_jess_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink jessAtomNmbr jessNumber
+ HiLink jessAtomMark jessMark
+
+ HiLink jessAtom Identifier
+ HiLink jessAtomBarSymbol Special
+ HiLink jessBarSymbol Special
+ HiLink jessComment Comment
+ HiLink jessConcat Statement
+ HiLink jessDeclaration Statement
+ HiLink jessFunc Statement
+ HiLink jessKey Type
+ HiLink jessMark Delimiter
+ HiLink jessNumber Number
+ HiLink jessParenError Error
+ HiLink jessSpecial Type
+ HiLink jessString String
+ HiLink jessVar Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "jess"
+
+" vim: ts=18
diff --git a/runtime/syntax/jgraph.vim b/runtime/syntax/jgraph.vim
new file mode 100644
index 000000000..7ecd5afae
--- /dev/null
+++ b/runtime/syntax/jgraph.vim
@@ -0,0 +1,58 @@
+" Vim syntax file
+" Language: jgraph (graph plotting utility)
+" Maintainer: Jonas Munsin jmunsin@iki.fi
+" Last Change: 2003 May 04
+" this syntax file is not yet complete
+
+
+" 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 match
+
+" comments
+syn region jgraphComment start="(\* " end=" \*)"
+
+syn keyword jgraphCmd newcurve newgraph marktype
+syn keyword jgraphType xaxis yaxis
+
+syn keyword jgraphType circle box diamond triangle x cross ellipse
+syn keyword jgraphType xbar ybar text postscript eps none general
+
+syn keyword jgraphType solid dotted dashed longdash dotdash dodotdash
+syn keyword jgraphType dotdotdashdash pts
+
+"integer number, or floating point number without a dot. - or no -
+syn match jgraphNumber "\<-\=\d\+\>"
+"floating point number, with dot - or no -
+syn match jgraphNumber "\<-\=\d\+\.\d*\>"
+"floating point number, starting with a dot - or no -
+syn match jgraphNumber "\-\=\.\d\+\>"
+
+
+" 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_jgraph_syn_inits")
+ if version < 508
+ let did_jgraph_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink jgraphComment Comment
+ HiLink jgraphCmd Identifier
+ HiLink jgraphType Type
+ HiLink jgraphNumber Number
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "jgraph"
diff --git a/runtime/syntax/jproperties.vim b/runtime/syntax/jproperties.vim
new file mode 100644
index 000000000..9343bd292
--- /dev/null
+++ b/runtime/syntax/jproperties.vim
@@ -0,0 +1,148 @@
+" Vim syntax file
+" Language: Java Properties resource file (*.properties[_*])
+" Maintainer: Simon Baldwin <simonb@sco.com>
+" Last change: 26th Mar 2000
+
+" =============================================================================
+
+" Optional and tuning variables:
+
+" jproperties_lines
+" -----------------
+" Set a value for the sync block that we use to find long continuation lines
+" in properties; the value is already large - if you have larger continuation
+" sets you may need to increase it further - if not, and you find editing is
+" slow, reduce the value of jproperties_lines.
+if !exists("jproperties_lines")
+ let jproperties_lines = 256
+endif
+
+" jproperties_strict_syntax
+" -------------------------
+" Most properties files assign values with "id=value" or "id:value". But,
+" strictly, the Java properties parser also allows "id value", "id", and
+" even more bizarrely "=value", ":value", " value", and so on. These latter
+" ones, however, are rarely used, if ever, and handling them in the high-
+" lighting can obscure errors in the more normal forms. So, in practice
+" we take special efforts to pick out only "id=value" and "id:value" forms
+" by default. If you want strict compliance, set jproperties_strict_syntax
+" to non-zero (and good luck).
+if !exists("jproperties_strict_syntax")
+ let jproperties_strict_syntax = 0
+endif
+
+" jproperties_show_messages
+" -------------------------
+" If this properties file contains messages for use with MessageFormat,
+" setting a non-zero value will highlight them. Messages are of the form
+" "{...}". Highlighting doesn't go to the pains of picking apart what is
+" in the format itself - just the basics for now.
+if !exists("jproperties_show_messages")
+ let jproperties_show_messages = 0
+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")
+ finish
+endif
+
+" switch case sensitivity off
+syn case ignore
+
+" set the block
+exec "syn sync lines=" . jproperties_lines
+
+" switch between 'normal' and 'strict' syntax
+if jproperties_strict_syntax != 0
+
+ " an assignment is pretty much any non-empty line at this point,
+ " trying to not think about continuation lines
+ syn match jpropertiesAssignment "^\s*[^[:space:]]\+.*$" contains=jpropertiesIdentifier
+
+ " an identifier is anything not a space character, pretty much; it's
+ " followed by = or :, or space or tab. Or end-of-line.
+ syn match jpropertiesIdentifier "[^=:[:space:]]*" contained nextgroup=jpropertiesDelimiter
+
+ " treat the delimiter specially to get colours right
+ syn match jpropertiesDelimiter "\s*[=:[:space:]]\s*" contained nextgroup=jpropertiesString
+
+ " catch the bizarre case of no identifier; a special case of delimiter
+ syn match jpropertiesEmptyIdentifier "^\s*[=:]\s*" nextgroup=jpropertiesString
+else
+
+ " here an assignment is id=value or id:value, and we conveniently
+ " ignore continuation lines for the present
+ syn match jpropertiesAssignment "^\s*[^=:[:space:]]\+\s*[=:].*$" contains=jpropertiesIdentifier
+
+ " an identifier is anything not a space character, pretty much; it's
+ " always followed by = or :, and we find it in an assignment
+ syn match jpropertiesIdentifier "[^=:[:space:]]\+" contained nextgroup=jpropertiesDelimiter
+
+ " treat the delimiter specially to get colours right; this time the
+ " delimiter must contain = or :
+ syn match jpropertiesDelimiter "\s*[=:]\s*" contained nextgroup=jpropertiesString
+endif
+
+" a definition is all up to the last non-\-terminated line; strictly, Java
+" properties tend to ignore leading whitespace on all lines of a multi-line
+" definition, but we don't look for that here (because it's a major hassle)
+syn region jpropertiesString start="" skip="\\$" end="$" contained contains=jpropertiesSpecialChar,jpropertiesError,jpropertiesSpecial
+
+" {...} is a Java Message formatter - add a minimal recognition of these
+" if required
+if jproperties_show_messages != 0
+ syn match jpropertiesSpecial "{[^}]*}\{-1,\}" contained
+ syn match jpropertiesSpecial "'{" contained
+ syn match jpropertiesSpecial "''" contained
+endif
+
+" \uABCD are unicode special characters
+syn match jpropertiesSpecialChar "\\u\x\{1,4}" contained
+
+" ...and \u not followed by a hex digit is an error, though the properties
+" file parser won't issue an error on it, just set something wacky like zero
+syn match jpropertiesError "\\u\X\{1,4}" contained
+syn match jpropertiesError "\\u$"me=e-1 contained
+
+" other things of note are the \t,r,n,\, and the \ preceding line end
+syn match jpropertiesSpecial "\\[trn\\]" contained
+syn match jpropertiesSpecial "\\\s" contained
+syn match jpropertiesSpecial "\\$" contained
+
+" comments begin with # or !, and persist to end of line; put here since
+" they may have been caught by patterns above us
+syn match jpropertiesComment "^\s*[#!].*$" contains=jpropertiesTODO
+syn keyword jpropertiesTodo TODO FIXME XXX contained
+
+" 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_jproperties_syntax_inits")
+ if version < 508
+ let did_jproperties_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink jpropertiesComment Comment
+ HiLink jpropertiesTodo Todo
+ HiLink jpropertiesIdentifier Identifier
+ HiLink jpropertiesString String
+ HiLink jpropertiesExtendString String
+ HiLink jpropertiesCharacter Character
+ HiLink jpropertiesSpecial Special
+ HiLink jpropertiesSpecialChar SpecialChar
+ HiLink jpropertiesError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "jproperties"
+
+" vim:ts=8
diff --git a/runtime/syntax/jsp.vim b/runtime/syntax/jsp.vim
new file mode 100644
index 000000000..523c8e31e
--- /dev/null
+++ b/runtime/syntax/jsp.vim
@@ -0,0 +1,84 @@
+" Vim syntax file
+" Language: JSP (Java Server Pages)
+" Maintainer: Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+" URL: http://rgarciasuarez.free.fr/vim/syntax/jsp.vim
+" Last change: 2004 Feb 02
+" Credits : Patch by Darren Greaves (recognizes <jsp:...> tags)
+" Patch by Thomas Kimpton (recognizes jspExpr inside HTML tags)
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'jsp'
+endif
+
+" Source HTML syntax
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+unlet b:current_syntax
+
+" Next syntax items are case-sensitive
+syn case match
+
+" Include Java syntax
+syn include @jspJava <sfile>:p:h/java.vim
+
+syn region jspScriptlet matchgroup=jspTag start=/<%/ keepend end=/%>/ contains=@jspJava
+syn region jspComment start=/<%--/ end=/--%>/
+syn region jspDecl matchgroup=jspTag start=/<%!/ keepend end=/%>/ contains=@jspJava
+syn region jspExpr matchgroup=jspTag start=/<%=/ keepend end=/%>/ contains=@jspJava
+syn region jspDirective start=/<%@/ end=/%>/ contains=htmlString,jspDirName,jspDirArg
+
+syn keyword jspDirName contained include page taglib
+syn keyword jspDirArg contained file uri prefix language extends import session buffer autoFlush
+syn keyword jspDirArg contained isThreadSafe info errorPage contentType isErrorPage
+syn region jspCommand start=/<jsp:/ start=/<\/jsp:/ keepend end=/>/ end=/\/>/ contains=htmlString,jspCommandName,jspCommandArg
+syn keyword jspCommandName contained include forward getProperty plugin setProperty useBean param params fallback
+syn keyword jspCommandArg contained id scope class type beanName page flush name value property
+syn keyword jspCommandArg contained code codebase name archive align height
+syn keyword jspCommandArg contained width hspace vspace jreversion nspluginurl iepluginurl
+
+" Redefine htmlTag so that it can contain jspExpr
+syn region htmlTag start=+<[^/%]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,jspExpr
+
+" 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_jsp_syn_inits")
+ if version < 508
+ let did_jsp_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ " java.vim has redefined htmlComment highlighting
+ HiLink htmlComment Comment
+ HiLink htmlCommentPart Comment
+ " Be consistent with html highlight settings
+ HiLink jspComment htmlComment
+ HiLink jspTag htmlTag
+ HiLink jspDirective jspTag
+ HiLink jspDirName htmlTagName
+ HiLink jspDirArg htmlArg
+ HiLink jspCommand jspTag
+ HiLink jspCommandName htmlTagName
+ HiLink jspCommandArg htmlArg
+ delcommand HiLink
+endif
+
+if main_syntax == 'jsp'
+ unlet main_syntax
+endif
+
+let b:current_syntax = "jsp"
+
+" vim: ts=8
diff --git a/runtime/syntax/kix.vim b/runtime/syntax/kix.vim
new file mode 100644
index 000000000..62dc3253e
--- /dev/null
+++ b/runtime/syntax/kix.vim
@@ -0,0 +1,182 @@
+" Vim syntax file
+" Language: KixTart 95, Kix2001 Windows script language http://kixtart.org/
+" Maintainer: Richard Howarth <rhowarth@sgb.co.uk>
+" Last Change: 2003 May 11
+" URL: http://www.howsoft.demon.co.uk/
+
+" KixTart files identified by *.kix extension.
+
+" Amendment History:
+" 26 April 2001: RMH
+" Removed development comments from distro version
+" Renamed "Kix*" to "kix*" for consistancy
+" Changes made in preperation for VIM version 5.8/6.00
+
+" TODO:
+" Handle arrays highlighting
+" Handle object highlighting
+" The next two may not be possible:
+" Work out how to error too many "(", i.e. (() should be an error.
+" Similarly, "if" without "endif" and similar constructs should error.
+
+" Clear legacy syntax rules for version 5.x, exit if already processed for version 6+
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+syn keyword kixTODO TODO FIX XXX contained
+
+" Case insensitive language.
+syn case ignore
+
+" Kix statements
+syn match kixStatement "?"
+syn keyword kixStatement beep big break
+syn keyword kixStatement call cd cls color cookie1 copy
+syn keyword kixStatement del dim display
+syn keyword kixStatement exit
+syn keyword kixStatement flushkb
+syn keyword kixStatement get gets global go gosub goto
+syn keyword kixStatement md
+syn keyword kixStatement password play
+syn keyword kixStatement quit
+syn keyword kixStatement rd return run
+syn keyword kixStatement set setl setm settime shell sleep small
+syn keyword kixStatement use
+
+" Kix2001
+syn keyword kixStatement debug function endfunction redim
+
+" Simple variables
+syn match kixNotVar "\$\$\|@@\|%%" transparent contains=NONE
+syn match kixLocalVar "\$\w\+"
+syn match kixMacro "@\w\+"
+syn match kixEnvVar "%\w\+"
+
+" Destination labels
+syn match kixLabel ":\w\+\>"
+
+" Identify strings, trap unterminated strings
+syn match kixStringError +".*\|'.*+
+syn region kixDoubleString oneline start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
+syn region kixSingleString oneline start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
+
+" Operators
+syn match kixOperator "+\|-\|\*\|/\|=\|&\||"
+syn keyword kixOperator and or
+" Kix2001
+syn match kixOperator "=="
+syn keyword kixOperator not
+
+" Numeric constants
+syn match kixInteger "-\=\<\d\+\>" contains=NONE
+syn match kixFloat "-\=\.\d\+\>\|-\=\<\d\+\.\d\+\>" contains=NONE
+
+" Hex numeric constants
+syn match kixHex "\&\x\+\>" contains=NONE
+
+" Other contants
+" Kix2001
+syn keyword kixConstant on off
+
+" Comments
+syn match kixComment ";.*$" contains=kixTODO
+
+" Trap unmatched parenthesis
+syn match kixParenCloseError ")"
+syn region kixParen oneline transparent start="(" end=")" contains=ALLBUT,kixParenCloseError
+
+" Functions (Builtin + UDF)
+syn match kixFunction "\w\+("he=e-1,me=e-1 contains=ALL
+
+" Trap unmatched brackets
+syn match kixBrackCloseError "\]"
+syn region kixBrack transparent start="\[" end="\]" contains=ALLBUT,kixBrackCloseError
+
+" Clusters for ALLBUT shorthand
+syn cluster kixIfBut contains=kixIfError,kixSelectOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
+syn cluster kixSelectBut contains=kixSelectError,kixIfOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
+syn cluster kixDoBut contains=kixDoError,kixSelectOK,kixIfOK,kixWhileOK,kixForEachOK,kixForNextOK
+syn cluster kixWhileBut contains=kixWhileError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixForNextOK
+syn cluster kixForEachBut contains=kixForEachError,kixSelectOK,kixIfOK,kixDoOK,kixForNextOK,kixWhileOK
+syn cluster kixForNextBut contains=kixForNextError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixWhileOK
+" Condtional construct errors.
+syn match kixIfError "\<if\>\|\<else\>\|\<endif\>"
+syn match kixIfOK contained "\<if\>\|\<else\>\|\<endif\>"
+syn region kixIf transparent matchgroup=kixIfOK start="\<if\>" end="\<endif\>" contains=ALLBUT,@kixIfBut
+syn match kixSelectError "\<select\>\|\<case\>\|\<endselect\>"
+syn match kixSelectOK contained "\<select\>\|\<case\>\|\<endselect\>"
+syn region kixSelect transparent matchgroup=kixSelectOK start="\<select\>" end="\<endselect\>" contains=ALLBUT,@kixSelectBut
+
+" Program control constructs.
+syn match kixDoError "\<do\>\|\<until\>"
+syn match kixDoOK contained "\<do\>\|\<until\>"
+syn region kixDo transparent matchgroup=kixDoOK start="\<do\>" end="\<until\>" contains=ALLBUT,@kixDoBut
+syn match kixWhileError "\<while\>\|\<loop\>"
+syn match kixWhileOK contained "\<while\>\|\<loop\>"
+syn region kixWhile transparent matchgroup=kixWhileOK start="\<while\>" end="\<loop\>" contains=ALLBUT,@kixWhileBut
+syn match kixForNextError "\<for\>\|\<to\>\|\<step\>\|\<next\>"
+syn match kixForNextOK contained "\<for\>\|\<to\>\|\<step\>\|\<next\>"
+syn region kixForNext transparent matchgroup=kixForNextOK start="\<for\>" end="\<next\>" contains=ALLBUT,@kixForBut
+syn match kixForEachError "\<for each\>\|\<in\>\|\<next\>"
+syn match kixForEachOK contained "\<for each\>\|\<in\>\|\<next\>"
+syn region kixForEach transparent matchgroup=kixForEachOK start="\<for each\>" end="\<next\>" contains=ALLBUT,@kixForEachBut
+
+" Expressions
+syn match kixExpression "<\|>\|<=\|>=\|<>"
+
+
+" Default highlighting.
+" Version < 5.8 set default highlight if file not already processed.
+" Version >= 5.8 set default highlight only if it doesn't already have a value.
+if version > 508 || !exists("did_kix_syn_inits")
+ if version < 508
+ let did_kix_syn_inits=1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink kixDoubleString String
+ HiLink kixSingleString String
+ HiLink kixStatement Statement
+ HiLink kixRepeat Repeat
+ HiLink kixComment Comment
+ HiLink kixBuiltin Function
+ HiLink kixLocalVar Special
+ HiLink kixMacro Special
+ HiLink kixEnvVar Special
+ HiLink kixLabel Type
+ HiLink kixFunction Function
+ HiLink kixInteger Number
+ HiLink kixHex Number
+ HiLink kixFloat Number
+ HiLink kixOperator Operator
+ HiLink kixExpression Operator
+
+ HiLink kixParenCloseError Error
+ HiLink kixBrackCloseError Error
+ HiLink kixStringError Error
+
+ HiLink kixWhileError Error
+ HiLink kixWhileOK Conditional
+ HiLink kixDoError Error
+ HiLink kixDoOK Conditional
+ HiLink kixIfError Error
+ HiLink kixIfOK Conditional
+ HiLink kixSelectError Error
+ HiLink kixSelectOK Conditional
+ HiLink kixForNextError Error
+ HiLink kixForNextOK Conditional
+ HiLink kixForEachError Error
+ HiLink kixForEachOK Conditional
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "kix"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/kscript.vim b/runtime/syntax/kscript.vim
new file mode 100644
index 000000000..903f8474b
--- /dev/null
+++ b/runtime/syntax/kscript.vim
@@ -0,0 +1,70 @@
+" Vim syntax file
+" Language: kscript
+" Maintainer: Thomas Capricelli <orzel@yalbi.com>
+" URL: http://aquila.rezel.enst.fr/thomas/vim/kscript.vim
+" CVS: $Id$
+
+" 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 keyword kscriptPreCondit import from
+
+syn keyword kscriptHardCoded print println connect length arg mid upper lower isEmpty toInt toFloat findApplication
+syn keyword kscriptConditional if else switch
+syn keyword kscriptRepeat while for do foreach
+syn keyword kscriptExceptions emit catch raise try signal
+syn keyword kscriptFunction class struct enum
+syn keyword kscriptConst FALSE TRUE false true
+syn keyword kscriptStatement return delete
+syn keyword kscriptLabel case default
+syn keyword kscriptStorageClass const
+syn keyword kscriptType in out inout var
+
+syn keyword kscriptTodo contained TODO FIXME XXX
+
+syn region kscriptComment start="/\*" end="\*/" contains=kscriptTodo
+syn match kscriptComment "//.*" contains=kscriptTodo
+syn match kscriptComment "#.*$" contains=kscriptTodo
+
+syn region kscriptString start=+'+ end=+'+ skip=+\\\\\|\\'+
+syn region kscriptString start=+"+ end=+"+ skip=+\\\\\|\\"+
+syn region kscriptString start=+"""+ end=+"""+
+syn region kscriptString start=+'''+ end=+'''+
+
+" 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_kscript_syntax_inits")
+ if version < 508
+ let did_kscript_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink kscriptConditional Conditional
+ HiLink kscriptRepeat Repeat
+ HiLink kscriptExceptions Statement
+ HiLink kscriptFunction Function
+ HiLink kscriptConst Constant
+ HiLink kscriptStatement Statement
+ HiLink kscriptLabel Label
+ HiLink kscriptStorageClass StorageClass
+ HiLink kscriptType Type
+ HiLink kscriptTodo Todo
+ HiLink kscriptComment Comment
+ HiLink kscriptString String
+ HiLink kscriptPreCondit PreCondit
+ HiLink kscriptHardCoded Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "kscript"
+
+" vim: ts=8
diff --git a/runtime/syntax/kwt.vim b/runtime/syntax/kwt.vim
new file mode 100644
index 000000000..47be7a804
--- /dev/null
+++ b/runtime/syntax/kwt.vim
@@ -0,0 +1,87 @@
+" Vim syntax file
+" Language: kimwitu++
+" Maintainer: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Last Change: 2 May 2001
+
+" 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
+if version < 600
+ source <sfile>:p:h/cpp.vim
+else
+ runtime! syntax/cpp.vim
+ unlet b:current_syntax
+endif
+
+" kimwitu++ extentions
+
+" Don't stop at eol, messes around with CPP mode, but gives line spanning
+" strings in unparse rules
+syn region cCppString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat
+syn keyword cType integer real casestring nocasestring voidptr list
+syn keyword cType uview rview uview_enum rview_enum
+
+" avoid unparsing rule sth:view being scanned as label
+syn clear cUserCont
+syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel contained
+syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel contained
+syn match cUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=cUserLabel contained
+syn match cUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=cUserLabel contained
+
+" highlight phylum decls
+syn match kwtPhylum "^\I\i*:$"
+syn match kwtPhylum "^\I\i*\s*{\s*\(!\|\I\)\i*\s*}\s*:$"
+
+syn keyword kwtStatement with foreach afterforeach provided
+syn match kwtDecl "%\(uviewvar\|rviewvar\)"
+syn match kwtDecl "^%\(uview\|rview\|ctor\|dtor\|base\|storageclass\|list\|attr\|member\|option\)"
+syn match kwtOption "no-csgio\|no-unparse\|no-rewrite\|no-printdot\|no-hashtables\|smart-pointer\|weak-pointer"
+syn match kwtSep "^%}$"
+syn match kwtSep "^%{\(\s\+\I\i*\)*$"
+syn match kwtCast "\<phylum_cast\s*<"me=e-1
+syn match kwtCast "\<phylum_cast\s*$"
+
+
+" match views, remove paren error in brackets
+syn clear cErrInBracket
+syn match cErrInBracket contained ")"
+syn match kwtViews "\(\[\|<\)\@<=[ [:alnum:]_]\{-}:"
+
+" match rule bodies
+syn region kwtUnpBody transparent keepend extend fold start="->\s*\[" start="^\s*\[" skip="\$\@<!{\_.\{-}\$\@<!}" end="\s]\s\=;\=$" end="^]\s\=;\=$" end="}]\s\=;\=$"
+syn region kwtRewBody transparent keepend extend fold start="->\s*<" start="^\s*<" end="\s>\s\=;\=$" end="^>\s\=;\=$"
+
+" 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_kwt_syn_inits")
+ if version < 508
+ let did_kwt_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink kwtStatement cppStatement
+ HiLink kwtDecl cppStatement
+ HiLink kwtCast cppStatement
+ HiLink kwtSep Delimiter
+ HiLink kwtViews Label
+ HiLink kwtPhylum Type
+ HiLink kwtOption PreProc
+ "HiLink cText Comment
+
+ delcommand HiLink
+endif
+
+syn sync lines=300
+
+let b:current_syntax = "kwt"
+
+" vim: ts=8
diff --git a/runtime/syntax/lace.vim b/runtime/syntax/lace.vim
new file mode 100644
index 000000000..9e64eea7d
--- /dev/null
+++ b/runtime/syntax/lace.vim
@@ -0,0 +1,135 @@
+" Vim syntax file
+" Language: lace
+" Maintainer: Jocelyn Fiat <utilities@eiffel.com>
+" Last Change: 2001 May 09
+
+" Copyright Interactive Software Engineering, 1998
+" You are free to use this file as you please, but
+" if you make a change or improvement you must send
+" it to the maintainer at <utilities@eiffel.com>
+
+
+" 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
+
+" LACE is case insensitive, but the style guide lines are not.
+
+if !exists("lace_case_insensitive")
+ syn case match
+else
+ syn case ignore
+endif
+
+" A bunch of useful LACE keywords
+syn keyword laceTopStruct system root default option visible cluster
+syn keyword laceTopStruct external generate end
+syn keyword laceOptionClause collect assertion debug optimize trace
+syn keyword laceOptionClause profile inline precompiled multithreaded
+syn keyword laceOptionClause exception_trace dead_code_removal
+syn keyword laceOptionClause array_optimization
+syn keyword laceOptionClause inlining_size inlining
+syn keyword laceOptionClause console_application dynamic_runtime
+syn keyword laceOptionClause line_generation
+syn keyword laceOptionMark yes no all
+syn keyword laceOptionMark require ensure invariant loop check
+syn keyword laceClusterProp use include exclude
+syn keyword laceAdaptClassName adapt ignore rename as
+syn keyword laceAdaptClassName creation export visible
+syn keyword laceExternal include_path object makefile
+
+" Operators
+syn match laceOperator "\$"
+syn match laceBrackets "[[\]]"
+syn match laceExport "[{}]"
+
+" Constants
+syn keyword laceBool true false
+syn keyword laceBool True False
+syn region laceString start=+"+ skip=+%"+ end=+"+ contains=laceEscape,laceStringError
+syn match laceEscape contained "%[^/]"
+syn match laceEscape contained "%/\d\+/"
+syn match laceEscape contained "^[ \t]*%"
+syn match laceEscape contained "%[ \t]*$"
+syn match laceStringError contained "%/[^0-9]"
+syn match laceStringError contained "%/\d\+[^0-9/]"
+syn match laceStringError "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
+syn match laceCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=laceEscape
+syn match laceNumber "-\=\<\d\+\(_\d\+\)*\>"
+syn match laceNumber "\<[01]\+[bB]\>"
+syn match laceNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
+syn match laceNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
+syn match laceComment "--.*" contains=laceTodo
+
+
+syn case match
+
+" Case sensitive stuff
+
+syn keyword laceTodo TODO XXX FIXME
+syn match laceClassName "\<[A-Z][A-Z0-9_]*\>"
+syn match laceCluster "[a-zA-Z][a-zA-Z0-9_]*\s*:"
+syn match laceCluster "[a-zA-Z][a-zA-Z0-9_]*\s*(\s*[a-zA-Z][a-zA-Z0-9_]*\s*)\s*:"
+
+" Catch mismatched parentheses
+syn match laceParenError ")"
+syn match laceBracketError "\]"
+syn region laceGeneric transparent matchgroup=laceBrackets start="\[" end="\]" contains=ALLBUT,laceBracketError
+syn region laceParen transparent start="(" end=")" contains=ALLBUT,laceParenError
+
+" Should suffice for even very long strings and expressions
+syn sync lines=40
+
+" 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_lace_syntax_inits")
+ if version < 508
+ let did_lace_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink laceTopStruct PreProc
+
+ HiLink laceOptionClause Statement
+ HiLink laceOptionMark Constant
+ HiLink laceClusterProp Label
+ HiLink laceAdaptClassName Label
+ HiLink laceExternal Statement
+ HiLink laceCluster ModeMsg
+
+ HiLink laceEscape Special
+
+ HiLink laceBool Boolean
+ HiLink laceString String
+ HiLink laceCharacter Character
+ HiLink laceClassName Type
+ HiLink laceNumber Number
+
+ HiLink laceOperator Special
+ HiLink laceArray Special
+ HiLink laceExport Special
+ HiLink laceCreation Special
+ HiLink laceBrackets Special
+ HiLink laceConstraint Special
+
+ HiLink laceComment Comment
+
+ HiLink laceError Error
+ HiLink laceStringError Error
+ HiLink laceParenError Error
+ HiLink laceBracketError Error
+ HiLink laceTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lace"
+
+" vim: ts=4
diff --git a/runtime/syntax/latte.vim b/runtime/syntax/latte.vim
new file mode 100644
index 000000000..e2a8729f3
--- /dev/null
+++ b/runtime/syntax/latte.vim
@@ -0,0 +1,98 @@
+" Vim syntax file
+" Language: Latte
+" Maintainer: Nick Moffitt, <nick@zork.net>
+" Last Change: 14 June, 2000
+"
+" Notes:
+" I based this on the TeX and Scheme syntax files (but mostly scheme).
+" See http://www.latte.org for info on the language.
+
+" 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 match latteError "[{}\\]"
+syn match latteOther "\\{"
+syn match latteOther "\\}"
+syn match latteOther "\\\\"
+
+if version < 600
+ set iskeyword=33,43,45,48-57,63,65-90,95,97-122,_
+else
+ setlocal iskeyword=33,43,45,48-57,63,65-90,95,97-122,_
+endif
+
+syn region latteVar matchgroup=SpecialChar start=!\\[A-Za-z_]!rs=s+1 end=![^A-Za-z0-9?!+_-]!me=e-1 contains=ALLBUT,latteNumber,latteOther
+syn region latteVar matchgroup=SpecialChar start=!\\[=\&][A-Za-z_]!rs=s+2 end=![^A-Za-z0-9?!+_-]!me=e-1 contains=ALLBUT,latteNumber,latteOther
+syn region latteString start=+\\"+ skip=+\\\\"+ end=+\\"+
+
+syn region latteGroup matchgroup=Delimiter start="{" skip="\\[{}]" matchgroup=Delimiter end="}" contains=ALLBUT,latteSyntax
+
+syn region latteUnquote matchgroup=Delimiter start="\\,{" skip="\\[{}]" matchgroup=Delimiter end="}" contains=ALLBUT,latteSyntax
+syn region latteSplice matchgroup=Delimiter start="\\,@{" skip="\\[{}]" matchgroup=Delimiter end="}" contains=ALLBUT,latteSyntax
+syn region latteQuote matchgroup=Delimiter start="\\'{" skip="\\[{}]" matchgroup=Delimiter end="}"
+syn region latteQuote matchgroup=Delimiter start="\\`{" skip="\\[{}]" matchgroup=Delimiter end="}" contains=latteUnquote,latteSplice
+
+syn match latteOperator '\\/'
+syn match latteOperator '='
+
+syn match latteComment "\\;.*$"
+
+" This was gathered by slurping in the index.
+
+syn keyword latteSyntax __FILE__ __latte-version__ contained
+syn keyword latteSyntax _bal-tag _pre _tag add and append apply back contained
+syn keyword latteSyntax caar cadr car cdar cddr cdr ceil compose contained
+syn keyword latteSyntax concat cons def defmacro divide downcase contained
+syn keyword latteSyntax empty? equal? error explode file-contents contained
+syn keyword latteSyntax floor foreach front funcall ge? getenv contained
+syn keyword latteSyntax greater-equal? greater? group group? gt? html contained
+syn keyword latteSyntax if include lambda le? length less-equal? contained
+syn keyword latteSyntax less? let lmap load-file load-library lt? macro contained
+syn keyword latteSyntax member? modulo multiply not nth operator? contained
+syn keyword latteSyntax or ordinary quote process-output push-back contained
+syn keyword latteSyntax push-front quasiquote quote random rdc reverse contained
+syn keyword latteSyntax set! snoc splicing unquote strict-html4 contained
+syn keyword latteSyntax string-append string-ge? string-greater-equal? contained
+syn keyword latteSyntax string-greater? string-gt? string-le? contained
+syn keyword latteSyntax string-less-equal? string-less? string-lt? contained
+syn keyword latteSyntax string? subseq substr subtract contained
+syn keyword latteSyntax upcase useless warn while zero? contained
+
+
+" If it's good enough for scheme...
+
+syn sync match matchPlace grouphere NONE "^[^ \t]"
+" ... i.e. synchronize on a line that starts at the left margin
+
+" 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_latte_syntax_inits")
+ if version < 508
+ let did_latte_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink latteSyntax Statement
+ HiLink latteVar Function
+
+ HiLink latteString String
+ HiLink latteQuote String
+
+ HiLink latteDelimiter Delimiter
+ HiLink latteOperator Operator
+
+ HiLink latteComment Comment
+ HiLink latteError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "latte"
diff --git a/runtime/syntax/ldif.vim b/runtime/syntax/ldif.vim
new file mode 100644
index 000000000..9f67b57f5
--- /dev/null
+++ b/runtime/syntax/ldif.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language: LDAP LDIF
+" Maintainer: Zak Johnson <zakj@nox.cx>
+" Last Change: 2003-12-30
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn sync minlines=10 linebreaks=1
+
+syn match ldifAttribute /^[^ #][^:]*/ contains=ldifOption display
+syn match ldifOption /;[^:]\+/ contained contains=ldifPunctuation display
+syn match ldifPunctuation /;/ contained display
+
+syn region ldifStringValue matchgroup=ldifPunctuation start=/: / end=/\_$/ skip=/\n /
+syn region ldifBase64Value matchgroup=ldifPunctuation start=/:: / end=/\_$/ skip=/\n /
+syn region ldifFileValue matchgroup=ldifPunctuation start=/:< / end=/\_$/ skip=/\n /
+
+syn region ldifComment start=/^#/ end=/\_$/ skip=/\n /
+
+if version >= 508 || !exists("did_ldif_syn_inits")
+ if version < 508
+ let did_ldif_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ldifAttribute Type
+ HiLink ldifOption Identifier
+ HiLink ldifPunctuation Normal
+ HiLink ldifStringValue String
+ HiLink ldifBase64Value Special
+ HiLink ldifFileValue Special
+ HiLink ldifComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ldif"
diff --git a/runtime/syntax/lex.vim b/runtime/syntax/lex.vim
new file mode 100644
index 000000000..25c423ef5
--- /dev/null
+++ b/runtime/syntax/lex.vim
@@ -0,0 +1,96 @@
+" Vim syntax file
+" Language: Lex
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 4
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Option:
+" lex_uses_cpp : if this variable exists, then C++ is loaded rather than C
+
+" 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
+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
+ endif
+endif
+
+" --- Lex stuff ---
+
+"I'd prefer to use lex.* , but it 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,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
+
+" Abbreviations Section
+syn region lexAbbrvBlock start="^\([a-zA-Z_]\+\t\|%{\)" end="^%%$"me=e-2 skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment
+syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvRegExp
+syn match lexAbbrv "^%[sx]" contained
+syn match lexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=lexAbbrv,lexInclude
+syn region lexInclude matchgroup=lexSep start="^%{" end="%}" contained contains=ALLBUT,@lexListGroup
+syn region lexAbbrvComment start="^\s\+/\*" end="\*/" contains=@Spell
+
+"%% : Patterns {Actions}
+syn region lexPatBlock matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite contains=lexPat,lexPatTag,lexPatComment
+syn region lexPat start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 contained nextgroup=lexMorePat,lexPatSep contains=lexPatString,lexSlashQuote,lexBrace
+syn region lexBrace start="\[" skip=+\\\\\|\\+ end="]" contained
+syn region lexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained
+syn match lexPatTag "^<\I\i*\(,\I\i*\)*>*" contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+syn match lexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+syn region lexPatComment start="^\s*/\*" end="\*/" skipnl contained contains=cTodo nextgroup=lexPatComment,lexPat,lexPatString,lexPatTag,@Spell
+syn match lexPatCodeLine ".*$" contained contains=ALLBUT,@lexListGroup
+syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment
+syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
+syn match lexSlashQuote +\(\\\\\)*\\"+ contained
+syn region lexPatCode matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+
+syn keyword lexCFunctions BEGIN input unput woutput yyleng yylook yytext
+syn keyword lexCFunctions ECHO output winput wunput yyless yymore yywrap
+
+" <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.*
+syn cluster cPreProcGroup add=lex.*
+syn cluster cMultiGroup add=lex.*
+
+" Synchronization
+syn sync clear
+syn sync minlines=300
+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 lexSlashQuote lexPat
+hi def link lexBrace lexPat
+hi def link lexAbbrvComment lexPatComment
+
+hi def link lexAbbrv SpecialChar
+hi def link lexAbbrvRegExp Macro
+hi def link lexCFunctions Function
+hi def link lexMorePat SpecialChar
+hi def link lexPat Function
+hi def link lexPatComment Comment
+hi def link lexPatString Function
+hi def link lexPatTag Special
+hi def link lexSep Delimiter
+
+let b:current_syntax = "lex"
+
+" vim:ts=10
diff --git a/runtime/syntax/lftp.vim b/runtime/syntax/lftp.vim
new file mode 100644
index 000000000..fc1958ed3
--- /dev/null
+++ b/runtime/syntax/lftp.vim
@@ -0,0 +1,184 @@
+" Vim syntax file
+" Language: lftp(1) configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/lftp/
+" Latest Revision: 2004-05-22
+" arch-tag: f2537c49-5d64-42b8-beb4-13a09dd723d2
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk 48-57,97-122,-
+delcommand SetIsk
+
+" comments
+syn region lftpComment display oneline matchgroup=lftpComment start="#" end="$" contains=lftpTodo
+
+" todo
+syn keyword lftpTodo contained TODO FIXME XXX NOTE
+
+" strings
+syn region lftpString contained display start=+"+ skip=+\\$\|\\"+ end=+"+ end=+$+
+
+" numbers
+syn match lftpNumber contained display "\<\d\+\(\.\d\+\)\=\>"
+
+" booleans and other things
+syn keyword lftpBoolean contained yes no on off true false
+
+" intervals
+syn keyword lftpInterval contained infinity inf never forever
+syn match lftpInterval contained "\<\(\d\+\(\.\d\+\)\=[dhms]\)\+\>"
+
+" commands
+syn keyword lftpKeywords alias anon at bookmark cache cat cd chmod close
+syn keyword lftpKeywords cls command debug du echo exit fg find get get1
+syn keyword lftpKeywords glob help history jobs kill lcd lftp lpwd ls
+syn keyword lftpKeywords mget mirror mkdir module
+syn keyword lftpKeywords more mput mrm mv nlist open pget put pwd queue
+syn keyword lftpKeywords quote reget recls rels renlist repeat
+syn keyword lftpKeywords reput rm rmdir scache site source suspend user
+syn keyword lftpKeywords version wait zcat zmore
+
+" settings
+syn region lftpSet matchgroup=lftpKeywords start="set" end=";" end="$" contains=lftpString,lftpNumber,lftpBoolean,lftpInterval,lftpSettingsPrefix,lftpSettings
+syn match lftpSettingsPrefix contained '\<\%(bmk\|cache\|cmd\|color\|dns\):'
+syn match lftpSettingsPrefix contained '\<\%(file\|fish\|ftp\|hftp\):'
+syn match lftpSettingsPrefix contained '\<\%(http\|https\|mirror\|module\):'
+syn match lftpSettingsPrefix contained '\<\%(net\|sftp\|ssl\|xfer\):'
+" bmk:
+syn keyword lftpSettings contained save-p[asswords]
+" cache:
+syn keyword lftpSettings contained cache-em[pty-listings] en[able]
+syn keyword lftpSettings contained exp[ire] siz[e]
+" cmd:
+syn keyword lftpSettings contained at[-exit] cls-c[ompletion-default]
+syn keyword lftpSettings contained cls-d[efault] cs[h-history]
+syn keyword lftpSettings contained default-p[rotocol] default-t[itle]
+syn keyword lftpSettings contained fai[l-exit] in[teractive]
+syn keyword lftpSettings contained lo[ng-running] ls[-default]
+syn keyword lftpSettings contained mo[ve-background] prom[pt]
+syn keyword lftpSettings contained rem[ote-completion]
+syn keyword lftpSettings contained save-c[wd-history] save-r[l-history]
+syn keyword lftpSettings contained set-t[erm-status] statu[s-interval]
+syn keyword lftpSettings contained te[rm-status] verb[ose] verify-h[ost]
+syn keyword lftpSettings contained verify-path verify-path[-cached]
+" color:
+syn keyword lftpSettings contained dir[-colors] use-c[olor]
+" dns:
+syn keyword lftpSettings contained S[RV-query] cache-en[able]
+syn keyword lftpSettings contained cache-ex[pire] cache-s[ize]
+syn keyword lftpSettings contained fat[al-timeout] o[rder] use-fo[rk]
+" file:
+syn keyword lftpSettings contained ch[arset]
+" fish:
+syn keyword lftpSettings contained connect[-program] sh[ell]
+" ftp:
+syn keyword lftpSettings contained acct anon-p[ass] anon-u[ser]
+syn keyword lftpSettings contained au[to-sync-mode] b[ind-data-socket]
+syn keyword lftpSettings contained ch[arset] cli[ent] dev[ice-prefix]
+syn keyword lftpSettings contained fi[x-pasv-address] fxp-f[orce]
+syn keyword lftpSettings contained fxp-p[assive-source] h[ome] la[ng]
+syn keyword lftpSettings contained list-e[mpty-ok] list-o[ptions]
+syn keyword lftpSettings contained nop[-interval] pas[sive-mode]
+syn keyword lftpSettings contained port-i[pv4] port-r[ange] prox[y]
+syn keyword lftpSettings contained rest-l[ist] rest-s[tor]
+syn keyword lftpSettings contained retry-530 retry-530[-anonymous]
+syn keyword lftpSettings contained sit[e-group] skey-a[llow]
+syn keyword lftpSettings contained skey-f[orce] ssl-allow
+syn keyword lftpSettings contained ssl-allow[-anonymous] ssl-au[th]
+syn keyword lftpSettings contained ssl-f[orce] ssl-protect-d[ata]
+syn keyword lftpSettings contained ssl-protect-l[ist] stat-[interval]
+syn keyword lftpSettings contained sy[nc-mode] timez[one] use-a[bor]
+syn keyword lftpSettings contained use-fe[at] use-fx[p] use-hf[tp]
+syn keyword lftpSettings contained use-mdtm use-mdtm[-overloaded]
+syn keyword lftpSettings contained use-ml[sd] use-p[ret] use-q[uit]
+syn keyword lftpSettings contained use-site-c[hmod] use-site-i[dle]
+syn keyword lftpSettings contained use-site-u[time] use-siz[e]
+syn keyword lftpSettings contained use-st[at] use-te[lnet-iac]
+syn keyword lftpSettings contained verify-a[ddress] verify-p[ort]
+syn keyword lftpSettings contained w[eb-mode]
+" hftp:
+syn keyword lftpSettings contained w[eb-mode] cache prox[y]
+syn keyword lftpSettings contained use-au[thorization] use-he[ad]
+syn keyword lftpSettings contained use-ty[pe]
+" http:
+syn keyword lftpSettings contained accept accept-c[harset]
+syn keyword lftpSettings contained accept-l[anguage] cache coo[kie]
+syn keyword lftpSettings contained pos[t-content-type] prox[y]
+syn keyword lftpSettings contained put-c[ontent-type] put-m[ethod]
+syn keyword lftpSettings contained ref[erer] set-c[ookies] user[-agent]
+" https:
+syn keyword lftpSettings contained prox[y]
+" mirror:
+syn keyword lftpSettings contained exc[lude-regex] o[rder]
+syn keyword lftpSettings contained parallel-d[irectories]
+syn keyword lftpSettings contained parallel-t[ransfer-count]
+syn keyword lftpSettings contained use-p[get-n]
+" module:
+syn keyword lftpSettings contained pat[h]
+" net:
+syn keyword lftpSettings contained connection-l[imit]
+syn keyword lftpSettings contained connection-t[akeover]
+syn keyword lftpSettings contained id[le] limit-m[ax] limit-r[ate]
+syn keyword lftpSettings contained limit-total-m[ax] limit-total-r[ate]
+syn keyword lftpSettings contained max-ret[ries] no-[proxy]
+syn keyword lftpSettings contained pe[rsist-retries]
+syn keyword lftpSettings contained reconnect-interval-b[ase]
+syn keyword lftpSettings contained reconnect-interval-ma[x]
+syn keyword lftpSettings contained reconnect-interval-mu[ltiplier]
+syn keyword lftpSettings contained socket-bind-ipv4 socket-bind-ipv6
+syn keyword lftpSettings contained socket-bu[ffer] socket-m[axseg]
+syn keyword lftpSettings contained timeo[ut]
+" sftp:
+syn keyword lftpSettings contained connect[-program]
+syn keyword lftpSettings contained max-p[ackets-in-flight]
+syn keyword lftpSettings contained prot[ocol-version] ser[ver-program]
+syn keyword lftpSettings contained size-r[ead] size-w[rite]
+" ssl:
+syn keyword lftpSettings contained ca-f[ile] ca-p[ath] ce[rt-file]
+syn keyword lftpSettings contained crl-f[ile] crl-p[ath] k[ey-file]
+syn keyword lftpSettings contained verify-c[ertificate]
+" xfer:
+syn keyword lftpSettings contained clo[bber] dis[k-full-fatal]
+syn keyword lftpSettings contained eta-p[eriod] eta-t[erse]
+syn keyword lftpSettings contained mak[e-backup] max-red[irections]
+syn keyword lftpSettings contained ra[te-period]
+
+" 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_lftp_syn_inits")
+ if version < 508
+ let did_lftp_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lftpComment Comment
+ HiLink lftpTodo Todo
+ HiLink lftpString String
+ HiLink lftpNumber Number
+ HiLink lftpBoolean Boolean
+ HiLink lftpInterval Number
+ HiLink lftpKeywords Keyword
+ HiLink lftpSettingsPrefix PreProc
+ HiLink lftpSettings Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lftp"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/lhaskell.vim b/runtime/syntax/lhaskell.vim
new file mode 100644
index 000000000..250ccfaf2
--- /dev/null
+++ b/runtime/syntax/lhaskell.vim
@@ -0,0 +1,136 @@
+" Vim syntax file
+" Language: Haskell with literate comments, Bird style,
+" TeX style and plain text surrounding
+" \begin{code} \end{code} blocks
+" Maintainer: Haskell Cafe mailinglist <haskell-cafe@haskell.org>
+" Original Author: Arthur van Leeuwen <arthurvl@cs.uu.nl>
+" Last Change: 2004 May 16
+" Version: 1.01
+"
+" Thanks to Ian Lynagh for thoughtful comments on initial versions and
+" for the inspiration for writing this in the first place.
+"
+" This style guesses as to the type of markup used in a literate haskell
+" file and will highlight (La)TeX markup if it finds any
+" This behaviour can be overridden, both glabally and locally using
+" the lhs_markup variable or b:lhs_markup variable respectively.
+"
+" lhs_markup must be set to either tex or none to indicate that
+" you always want (La)TeX highlighting or no highlighting
+" must not be set to let the highlighting be guessed
+" b:lhs_markup must be set to eiterh tex or none to indicate that
+" you want (La)TeX highlighting or no highlighting for
+" this particular buffer
+" must not be set to let the highlighting be guessed
+"
+"
+" 2004 February 18: New version, based on Ian Lynagh's TeX guessing
+" lhaskell.vim, cweb.vim, tex.vim, sh.vim and fortran.vim
+" 2004 February 20: Cleaned up the guessing and overriding a bit
+" 2004 February 23: Cleaned up syntax highlighting for \begin{code} and
+" \end{code}, added some clarification to the attributions
+"
+
+
+" 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
+
+" First off, see if we can inherit a user preference for lhs_markup
+if !exists("b:lhs_markup")
+ if exists("lhs_markup")
+ if lhs_markup =~ '\<\%(tex\|none\)\>'
+ let b:lhs_markup = matchstr(lhs_markup,'\<\%(tex\|none\)\>')
+ else
+ echohl WarningMsg | echo "Unknown value of lhs_markup" | echohl None
+ let b:lhs_markup = "unknown"
+ endif
+ else
+ let b:lhs_markup = "unknown"
+ endif
+else
+ if b:lhs_markup !~ '\<\%(tex\|none\)\>'
+ let b:lhs_markup = "unknown"
+ endif
+endif
+
+" Remember where the cursor is, and go to upperleft
+let s:oldline=line(".")
+let s:oldcolumn=col(".")
+call cursor(1,1)
+
+" If no user preference, scan buffer for our guess of the markup to
+" highlight. We only differentiate between TeX and plain markup, where
+" plain is not highlighted. The heuristic for finding TeX markup is if
+" one of the following occurs anywhere in the file:
+" - \documentclass
+" - \begin{env} (for env != code)
+" - \part, \chapter, \section, \subsection, \subsubsection, etc
+if b:lhs_markup == "unknown"
+ if search('%\|\\documentclass\|\\begin{\(code}\)\@!\|\\\(sub\)*section\|\\chapter|\\part','W') != 0
+ let b:lhs_markup = "tex"
+ else
+ let b:lhs_markup = "plain"
+ endif
+endif
+
+" If user wants us to highlight TeX syntax, read it.
+if b:lhs_markup == "tex"
+ if version < 600
+ source <sfile>:p:h/tex.vim
+ else
+ runtime! syntax/tex.vim
+ unlet b:current_syntax
+ endif
+endif
+
+" Literate Haskell is Haskell in between text, so at least read Haskell
+" highlighting
+if version < 600
+ syntax include @haskellTop <sfile>:p:h/haskell.vim
+else
+ syntax include @haskellTop syntax/haskell.vim
+endif
+
+syntax region lhsHaskellBirdTrack start="^>" end="\%(^[^>]\)\@=" contains=@haskellTop,lhsBirdTrack
+syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,@beginCode
+
+syntax match lhsBirdTrack "^>" contained
+
+syntax match beginCodeBegin "^\\begin" nextgroup=beginCodeCode contained
+syntax region beginCodeCode matchgroup=texDelimiter start="{" end="}"
+syntax cluster beginCode contains=beginCodeBegin,beginCodeCode
+
+" 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_tex_syntax_inits")
+ if version < 508
+ let did_tex_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lhsBirdTrack Comment
+
+ HiLink beginCodeBegin texCmdName
+ HiLink beginCodeCode texSection
+
+ delcommand HiLink
+endif
+
+" Restore cursor to original position, as it may have been disturbed
+" by the searches in our guessing code
+call cursor (s:oldline, s:oldcolumn)
+
+unlet s:oldline
+unlet s:oldcolumn
+
+let b:current_syntax = "lhaskell"
+
+" vim: ts=8
diff --git a/runtime/syntax/libao.vim b/runtime/syntax/libao.vim
new file mode 100644
index 000000000..f675150e0
--- /dev/null
+++ b/runtime/syntax/libao.vim
@@ -0,0 +1,46 @@
+" Vim syntax file
+" Language: libao configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/libao/
+" Latest Revision: 2004-05-22
+" arch-tag: 4ddef0a8-6817-4555-a5a1-0be82094053d
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword libaoTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region libaoComment matchgroup=libaoComment start='^\s*#' end='$' contains=libaoTodo
+
+" Keywords
+syn keyword libaoKeyword default_driver
+
+" 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_libao_syn_inits")
+ if version < 508
+ let did_libao_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ HiDef hi <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ HiDef hi def <args>
+ endif
+
+ HiLink libaoTodo Todo
+ HiLink libaoComment Comment
+ HiLink libaoKeyword Keyword
+
+ delcommand HiLink
+ delcommand HiDef
+endif
+
+let b:current_syntax = "libao"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/lifelines.vim b/runtime/syntax/lifelines.vim
new file mode 100644
index 000000000..a6a2c8d14
--- /dev/null
+++ b/runtime/syntax/lifelines.vim
@@ -0,0 +1,118 @@
+" Vim syntax file
+" Language: Lifelines (v 3.0.7) http://lifelines.sourceforge.net
+" Maintainer: Patrick Texier <p.texier@orsennes.com>
+" Location: ftp://216.71.72.236/lifelines.vim
+" Last Change: 2002 Mar 03
+
+" 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
+
+" A bunch of useful lifelines keywords 3.0.7
+
+syn keyword lifelinesStatement set
+syn keyword lifelinesUser getindi geindiset getfam getint getstr choosechild
+syn keyword lifelinesUser chooseindi choosespouse choosesubset menuchoose
+syn keyword lifelinesUser choosefam getintmsg getindimsg getstrmsg
+syn keyword lifelinesProc proc func return call
+syn keyword lifelinesInclude include
+syn keyword lifelinesDef global
+syn keyword lifelinesConditional if else elsif switch
+syn keyword lifelinesRepeat continue break while
+syn keyword lifelinesLogical and or not eq ne lt gt le ge strcmp eqstr nestr
+syn keyword lifelinesArithm add sub mul div mod exp neg incr decr
+syn keyword lifelinesIndi name fullname surname givens trimname birth
+syn keyword lifelinesIndi death baptism burial
+syn keyword lifelinesIndi father mother nextsib prevsib sex male female
+syn keyword lifelinesIndi pn nspouses nfamilies parents title key
+syn keyword lifelinesIndi soundex inode root indi firstindi nextindi
+syn keyword lifelinesIndi previndi spouses families forindi indiset
+syn keyword lifelinesIndi addtoset deletefromset lengthset union intersect
+syn keyword lifelinesIndi difference parentset childset spouseset siblingset
+syn keyword lifelinesIndi ancestorset descendentset descendantset uniqueset
+syn keyword lifelinesIndi namesort keysort valuesort genindiset getindiset
+syn keyword lifelinesIndi forindiset lastindi writeindi
+syn keyword lifelinesIndi inset
+syn keyword lifelinesFam marriage husband wife nchildren firstchild
+syn keyword lifelinesFam lastchild fnode fam firstfam nextfam lastfam
+syn keyword lifelinesFam prevfam children forfam writefam
+syn keyword lifelinesList list empty length enqueue dequeue requeue
+syn keyword lifelinesList push pop setel getel forlist inlist
+syn keyword lifelinesTable table insert lookup
+syn keyword lifelinesGedcom xref tag value parent child sibling savenode
+syn keyword lifelinesGedcom fornodes traverse createnode addnode deletenode
+syn keyword lifelinesGedcom reference dereference getrecord
+syn keyword lifelinesGedcom gengedcom gengedcomstrong gengedcomweak
+syn keyword lifelinesFunct date place year long short gettoday dayformat
+syn keyword lifelinesFunct monthformat dateformat extractdate
+syn keyword lifelinesFunct complexdate
+syn keyword lifelinesFunct extractnames extractplaces extracttokens lower
+syn keyword lifelinesFunct upper capitalize trim rjustify save strsave
+syn keyword lifelinesFunct concat strconcat strlen substring index
+syn keyword lifelinesFunct d card ord alpha roman strsoundex strtoint
+syn keyword lifelinesFunct atoi linemode pagemod col row pos pageout nl
+syn keyword lifelinesFunct sp qt newfile outfile copyfile print lock unlock
+syn keyword lifelinesFunct database version system stddate program
+syn keyword lifelinesFunct pvalue pagemode level extractdatestr debug
+syn keyword lifelinesFunct f free getcol getproperty heapused
+
+syn region lifelinesString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lifelinesSpecial
+
+syn region lifelinesComment start="/\*" end="\*/" contains=lifelinesComment
+
+" Only integers with lifelines
+
+syn match lifelinesNumber "\<\d\+\>"
+
+"catch errors caused by wrong parenthesis
+"adapted from original c.vim written by Bram Moolenaar
+
+syn cluster lifelinesParenGroup contains=lifelinesParenError
+syn region lifelinesParen transparent start='(' end=')' contains=ALLBUT,@lifelinesParenGroup
+syn match lifelinesParenError ")"
+syn match lifelinesErrInParen contained "[{}]"
+
+" 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_lifelines_syn_inits")
+ if version < 508
+ let did_lifelines_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lifelinesConditional Conditional
+ HiLink lifelinesArithm Operator
+ HiLink lifelinesLogical Conditional
+ HiLink lifelinesInclude Include
+ HiLink lifelinesComment Comment
+ HiLink lifelinesStatement Statement
+ HiLink lifelinesUser Statement
+ HiLink lifelinesFunct Statement
+ HiLink lifelinesTable Statement
+ HiLink lifelinesGedcom Statement
+ HiLink lifelinesList Statement
+ HiLink lifelinesRepeat Repeat
+ HiLink lifelinesFam Statement
+ HiLink lifelinesIndi Statement
+ HiLink lifelinesProc Statement
+ HiLink lifelinesDef Statement
+ HiLink lifelinesString String
+ HiLink lifelinesNumber Number
+ HiLink lifelinesParenError Error
+ HiLink lifelinesErrInParen Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lifelines"
+
+" vim: ts=8
diff --git a/runtime/syntax/lilo.vim b/runtime/syntax/lilo.vim
new file mode 100644
index 000000000..a97bb9ca8
--- /dev/null
+++ b/runtime/syntax/lilo.vim
@@ -0,0 +1,194 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: lilo configuration (lilo.conf)
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003 May 04
+" URL: http://trific.ath.cx/Ftp/vim/syntax/lilo.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,.,-,_
+delcommand SetIsk
+
+syn case ignore
+
+" Base constructs
+syn match liloError "\S\+"
+syn match liloComment "#.*$"
+syn match liloEnviron "\$\w\+" contained
+syn match liloEnviron "\${[^}]\+}" contained
+syn match liloDecNumber "\d\+" contained
+syn match liloHexNumber "0[xX]\x\+" contained
+syn match liloDecNumberP "\d\+p\=" contained
+syn match liloSpecial contained "\\\(\"\|\\\|$\)"
+syn region liloString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=liloSpecial,liloEnviron
+syn match liloLabel "\S\+" contained contains=liloSpecial,liloEnviron
+syn region liloPath start=+[$/]+ skip=+\\\\\|\\ \|\\$"+ end=+ \|$+ contained contains=liloSpecial,liloEnviron
+syn match liloDecNumberList "\(\d\|,\)\+" contained contains=liloDecNumber
+syn match liloDecNumberPList "\(\d\|[,p]\)\+" contained contains=liloDecNumberP,liloDecNumber
+syn region liloAnything start=+[^[:space:]#]+ skip=+\\\\\|\\ \|\\$+ end=+ \|$+ contained contains=liloSpecial,liloEnviron,liloString
+
+" Path
+syn keyword liloOption backup bitmap boot disktab force-backup install keytable map message nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn keyword liloKernelOpt initrd root nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn keyword liloImageOpt path loader table nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn keyword liloDiskOpt partition nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+
+" Other
+syn keyword liloOption menu-scheme raid-extra-boot serial nextgroup=liloEqAnything,liloEqAnythingComment,liloError skipwhite skipempty
+syn keyword liloOption default nextgroup=liloEqLabel,liloEqLabelComment,liloError skipwhite skipempty
+syn keyword liloKernelOpt ramdisk nextgroup=liloEqAnything,liloEqAnythingComment,liloError skipwhite skipempty
+syn keyword liloImageOpt alias label nextgroup=liloEqLabel,liloEqLabelComment,liloError skipwhite skipempty
+syn keyword liloImageOpt password range nextgroup=liloEqAnything,liloEqAnythingComment,liloError skipwhite skipempty
+syn keyword liloDiskOpt set type nextgroup=liloEqAnything,liloEqAnythingComment,liloError skipwhite skipempty
+
+" Symbolic
+syn keyword liloKernelOpt vga nextgroup=liloEqVga,liloEqVgaComment,liloError skipwhite skipempty
+
+" Number
+syn keyword liloOption delay timeout verbose nextgroup=liloEqDecNumber,liloEqDecNumberComment,liloError skipwhite skipempty
+syn keyword liloDiskOpt sectors heads cylinders start nextgroup=liloEqDecNumber,liloEqDecNumberComment,liloError skipwhite skipempty
+
+" String
+syn keyword liloOption menu-title nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
+syn keyword liloKernelOpt append nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
+syn keyword liloImageOpt fallback literal nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
+
+" Hex number
+syn keyword liloImageOpt map-drive to nextgroup=liloEqHexNumber,liloEqHexNumberComment,liloError skipwhite skipempty
+syn keyword liloDiskOpt bios normal hidden nextgroup=liloEqNumber,liloEqNumberComment,liloError skipwhite skipempty
+
+" Number list
+syn keyword liloOption bmp-colors bmp-timer nextgroup=liloEqNumberList,liloEqNumberListComment,liloError skipwhite skipempty
+
+" Number list, some of the numbers followed by p
+syn keyword liloOption bmp-table nextgroup=liloEqDecNumberPList,liloEqDecNumberPListComment,liloError skipwhite skipempty
+
+" Flag
+syn keyword liloOption compact fix-table geometric ignore-table lba32 linear mandatory nowarn prompt
+syn keyword liloKernelOpt read-only read-write
+syn keyword liloImageOpt bypass lock mandatory optional restricted single-key unsafe
+syn keyword liloDiskOpt change activate deactivate inaccessible reset
+
+" Image
+syn keyword liloImage image other nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn keyword liloDisk disk nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn keyword liloChRules change-rules
+
+" Vga keywords
+syn keyword liloVgaKeyword ask ext extended normal contained
+
+" Comment followed by equal sign and ...
+syn match liloEqPathComment "#.*$" contained nextgroup=liloEqPath,liloEqPathComment,liloError skipwhite skipempty
+syn match liloEqVgaComment "#.*$" contained nextgroup=liloEqVga,liloEqVgaComment,liloError skipwhite skipempty
+syn match liloEqNumberComment "#.*$" contained nextgroup=liloEqNumber,liloEqNumberComment,liloError skipwhite skipempty
+syn match liloEqDecNumberComment "#.*$" contained nextgroup=liloEqDecNumber,liloEqDecNumberComment,liloError skipwhite skipempty
+syn match liloEqHexNumberComment "#.*$" contained nextgroup=liloEqHexNumber,liloEqHexNumberComment,liloError skipwhite skipempty
+syn match liloEqStringComment "#.*$" contained nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
+syn match liloEqLabelComment "#.*$" contained nextgroup=liloEqLabel,liloEqLabelComment,liloError skipwhite skipempty
+syn match liloEqNumberListComment "#.*$" contained nextgroup=liloEqNumberList,liloEqNumberListComment,liloError skipwhite skipempty
+syn match liloEqDecNumberPListComment "#.*$" contained nextgroup=liloEqDecNumberPList,liloEqDecNumberPListComment,liloError skipwhite skipempty
+syn match liloEqAnythingComment "#.*$" contained nextgroup=liloEqAnything,liloEqAnythingComment,liloError skipwhite skipempty
+
+" Equal sign followed by ...
+syn match liloEqPath "=" contained nextgroup=liloPath,liloPathComment,liloError skipwhite skipempty
+syn match liloEqVga "=" contained nextgroup=liloVgaKeyword,liloHexNumber,liloDecNumber,liloVgaComment,liloError skipwhite skipempty
+syn match liloEqNumber "=" contained nextgroup=liloDecNumber,liloHexNumber,liloNumberComment,liloError skipwhite skipempty
+syn match liloEqDecNumber "=" contained nextgroup=liloDecNumber,liloDecNumberComment,liloError skipwhite skipempty
+syn match liloEqHexNumber "=" contained nextgroup=liloHexNumber,liloHexNumberComment,liloError skipwhite skipempty
+syn match liloEqString "=" contained nextgroup=liloString,liloStringComment,liloError skipwhite skipempty
+syn match liloEqLabel "=" contained nextgroup=liloLabel,liloLabelComment,liloError skipwhite skipempty
+syn match liloEqNumberList "=" contained nextgroup=liloDecNumberList,liloDecNumberListComment,liloError skipwhite skipempty
+syn match liloEqDecNumberPList "=" contained nextgroup=liloDecNumberPList,liloDecNumberPListComment,liloError skipwhite skipempty
+syn match liloEqAnything "=" contained nextgroup=liloAnything,liloAnythingComment,liloError skipwhite skipempty
+
+" Comment followed by ...
+syn match liloPathComment "#.*$" contained nextgroup=liloPath,liloPathComment,liloError skipwhite skipempty
+syn match liloVgaComment "#.*$" contained nextgroup=liloVgaKeyword,liloHexNumber,liloVgaComment,liloError skipwhite skipempty
+syn match liloNumberComment "#.*$" contained nextgroup=liloDecNumber,liloHexNumber,liloNumberComment,liloError skipwhite skipempty
+syn match liloDecNumberComment "#.*$" contained nextgroup=liloDecNumber,liloDecNumberComment,liloError skipwhite skipempty
+syn match liloHexNumberComment "#.*$" contained nextgroup=liloHexNumber,liloHexNumberComment,liloError skipwhite skipempty
+syn match liloStringComment "#.*$" contained nextgroup=liloString,liloStringComment,liloError skipwhite skipempty
+syn match liloLabelComment "#.*$" contained nextgroup=liloLabel,liloLabelComment,liloError skipwhite skipempty
+syn match liloDecNumberListComment "#.*$" contained nextgroup=liloDecNumberList,liloDecNumberListComment,liloError skipwhite skipempty
+syn match liloDecNumberPListComment "#.*$" contained nextgroup=liloDecNumberPList,liloDecNumberPListComment,liloError skipwhite skipempty
+syn match liloAnythingComment "#.*$" contained nextgroup=liloAnything,liloAnythingComment,liloError skipwhite skipempty
+
+" Define the default highlighting
+if version >= 508 || !exists("did_lilo_syntax_inits")
+ if version < 508
+ let did_lilo_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink liloEqPath liloEquals
+ HiLink liloEqWord liloEquals
+ HiLink liloEqVga liloEquals
+ HiLink liloEqDecNumber liloEquals
+ HiLink liloEqHexNumber liloEquals
+ HiLink liloEqNumber liloEquals
+ HiLink liloEqString liloEquals
+ HiLink liloEqLabel liloEquals
+ HiLink liloEqAnything liloEquals
+ HiLink liloEquals Special
+
+ HiLink liloError Error
+
+ HiLink liloEqPathComment liloComment
+ HiLink liloEqVgaComment liloComment
+ HiLink liloEqDecNumberComment liloComment
+ HiLink liloEqHexNumberComment liloComment
+ HiLink liloEqStringComment liloComment
+ HiLink liloEqLabelComment liloComment
+ HiLink liloEqAnythingComment liloComment
+ HiLink liloPathComment liloComment
+ HiLink liloVgaComment liloComment
+ HiLink liloDecNumberComment liloComment
+ HiLink liloHexNumberComment liloComment
+ HiLink liloNumberComment liloComment
+ HiLink liloStringComment liloComment
+ HiLink liloLabelComment liloComment
+ HiLink liloAnythingComment liloComment
+ HiLink liloComment Comment
+
+ HiLink liloDiskOpt liloOption
+ HiLink liloKernelOpt liloOption
+ HiLink liloImageOpt liloOption
+ HiLink liloOption Keyword
+
+ HiLink liloDecNumber liloNumber
+ HiLink liloHexNumber liloNumber
+ HiLink liloDecNumberP liloNumber
+ HiLink liloNumber Number
+ HiLink liloString String
+ HiLink liloPath Constant
+
+ HiLink liloSpecial Special
+ HiLink liloLabel Title
+ HiLink liloDecNumberList Special
+ HiLink liloDecNumberPList Special
+ HiLink liloAnything Normal
+ HiLink liloEnviron Identifier
+ HiLink liloVgaKeyword Identifier
+ HiLink liloImage Type
+ HiLink liloChRules Preproc
+ HiLink liloDisk Preproc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lilo"
diff --git a/runtime/syntax/lisp.vim b/runtime/syntax/lisp.vim
new file mode 100644
index 000000000..30914ef9d
--- /dev/null
+++ b/runtime/syntax/lisp.vim
@@ -0,0 +1,499 @@
+" Vim syntax file
+" Language: Lisp
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 14
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Thanks to F Xavier Noria for a list of 978 Common Lisp symbols
+" taken from the HyperSpec
+"
+" Options:
+" lisp_instring : if it exists, then "(...") strings are highlighted
+" as if the contents were lisp. Useful for AutoLisp.
+" Put let lisp_instring=1 into your <.vimrc> if
+" you want this option.
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
+else
+ set iskeyword=42,43,45,47-58,60-62,64-90,97-122,_
+endif
+
+" Clusters
+syn cluster lispAtomCluster contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispDecl,lispFunc,lispLeadWhite
+syn cluster lispListCluster contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispSymbol,lispVar,lispLeadWhite
+
+" Lists
+syn match lispSymbol contained ![^()'`,"; \t]\+!
+syn match lispBarSymbol contained !|..\{-}|!
+if exists("lisp_instring")
+ syn region lispList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=@lispListCluster,lispString,lispInString,lispInStringString
+ syn region lispBQList matchgroup=PreProc start="`(" skip="|.\{-}|" matchgroup=PreProc end=")" contains=@lispListCluster,lispString,lispInString,lispInStringString
+else
+ syn region lispList matchgroup=Delimiter start="(" skip="|.\{-}|" matchgroup=Delimiter end=")" contains=@lispListCluster,lispString
+ syn region lispBQList matchgroup=PreProc start="`(" skip="|.\{-}|" matchgroup=PreProc end=")" contains=@lispListCluster,lispString
+endif
+" Atoms
+syn match lispAtomMark "'"
+syn match lispAtom "'("me=e-1 contains=lispAtomMark nextgroup=lispAtomList
+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
+syn match lispAtomNmbr contained "\<\d\+"
+syn match lispLeadWhite contained "^\s\+"
+
+" Standard Lisp Functions and Macros
+syn keyword lispFunc * find-method pprint-indent
+syn keyword lispFunc ** find-package pprint-linear
+syn keyword lispFunc *** find-restart pprint-logical-block
+syn keyword lispFunc + find-symbol pprint-newline
+syn keyword lispFunc ++ finish-output pprint-pop
+syn keyword lispFunc +++ first pprint-tab
+syn keyword lispFunc - fixnum pprint-tabular
+syn keyword lispFunc / flet prin1
+syn keyword lispFunc // float prin1-to-string
+syn keyword lispFunc /// float-digits princ
+syn keyword lispFunc /= float-precision princ-to-string
+syn keyword lispFunc 1+ float-radix print
+syn keyword lispFunc 1- float-sign print-not-readable
+syn keyword lispFunc < floating-point-inexact print-not-readable-object
+syn keyword lispFunc <= floating-point-invalid-operation print-object
+syn keyword lispFunc = floating-point-overflow print-unreadable-object
+syn keyword lispFunc > floating-point-underflow probe-file
+syn keyword lispFunc >= floatp proclaim
+syn keyword lispFunc abort floor prog
+syn keyword lispFunc abs fmakunbound prog*
+syn keyword lispFunc access force-output prog1
+syn keyword lispFunc acons format prog2
+syn keyword lispFunc acos formatter progn
+syn keyword lispFunc acosh fourth program-error
+syn keyword lispFunc add-method fresh-line progv
+syn keyword lispFunc adjoin fround provide
+syn keyword lispFunc adjust-array ftruncate psetf
+syn keyword lispFunc adjustable-array-p ftype psetq
+syn keyword lispFunc allocate-instance funcall push
+syn keyword lispFunc alpha-char-p function pushnew
+syn keyword lispFunc alphanumericp function-keywords putprop
+syn keyword lispFunc and function-lambda-expression quote
+syn keyword lispFunc append functionp random
+syn keyword lispFunc apply gbitp random-state
+syn keyword lispFunc applyhook gcd random-state-p
+syn keyword lispFunc apropos generic-function rassoc
+syn keyword lispFunc apropos-list gensym rassoc-if
+syn keyword lispFunc aref gentemp rassoc-if-not
+syn keyword lispFunc arithmetic-error get ratio
+syn keyword lispFunc arithmetic-error-operands get-decoded-time rational
+syn keyword lispFunc arithmetic-error-operation get-dispatch-macro-character rationalize
+syn keyword lispFunc array get-internal-real-time rationalp
+syn keyword lispFunc array-dimension get-internal-run-time read
+syn keyword lispFunc array-dimension-limit get-macro-character read-byte
+syn keyword lispFunc array-dimensions get-output-stream-string read-char
+syn keyword lispFunc array-displacement get-properties read-char-no-hang
+syn keyword lispFunc array-element-type get-setf-expansion read-delimited-list
+syn keyword lispFunc array-has-fill-pointer-p get-setf-method read-eval-print
+syn keyword lispFunc array-in-bounds-p get-universal-time read-from-string
+syn keyword lispFunc array-rank getf read-line
+syn keyword lispFunc array-rank-limit gethash read-preserving-whitespace
+syn keyword lispFunc array-row-major-index go read-sequence
+syn keyword lispFunc array-total-size graphic-char-p reader-error
+syn keyword lispFunc array-total-size-limit handler-bind readtable
+syn keyword lispFunc arrayp handler-case readtable-case
+syn keyword lispFunc ash hash-table readtablep
+syn keyword lispFunc asin hash-table-count real
+syn keyword lispFunc asinh hash-table-p realp
+syn keyword lispFunc assert hash-table-rehash-size realpart
+syn keyword lispFunc assoc hash-table-rehash-threshold reduce
+syn keyword lispFunc assoc-if hash-table-size reinitialize-instance
+syn keyword lispFunc assoc-if-not hash-table-test rem
+syn keyword lispFunc atan host-namestring remf
+syn keyword lispFunc atanh identity remhash
+syn keyword lispFunc atom if remove
+syn keyword lispFunc base-char if-exists remove-duplicates
+syn keyword lispFunc base-string ignorable remove-if
+syn keyword lispFunc bignum ignore remove-if-not
+syn keyword lispFunc bit ignore-errors remove-method
+syn keyword lispFunc bit-and imagpart remprop
+syn keyword lispFunc bit-andc1 import rename-file
+syn keyword lispFunc bit-andc2 in-package rename-package
+syn keyword lispFunc bit-eqv in-package replace
+syn keyword lispFunc bit-ior incf require
+syn keyword lispFunc bit-nand initialize-instance rest
+syn keyword lispFunc bit-nor inline restart
+syn keyword lispFunc bit-not input-stream-p restart-bind
+syn keyword lispFunc bit-orc1 inspect restart-case
+syn keyword lispFunc bit-orc2 int-char restart-name
+syn keyword lispFunc bit-vector integer return
+syn keyword lispFunc bit-vector-p integer-decode-float return-from
+syn keyword lispFunc bit-xor integer-length revappend
+syn keyword lispFunc block integerp reverse
+syn keyword lispFunc boole interactive-stream-p room
+syn keyword lispFunc boole-1 intern rotatef
+syn keyword lispFunc boole-2 internal-time-units-per-second round
+syn keyword lispFunc boole-and intersection row-major-aref
+syn keyword lispFunc boole-andc1 invalid-method-error rplaca
+syn keyword lispFunc boole-andc2 invoke-debugger rplacd
+syn keyword lispFunc boole-c1 invoke-restart safety
+syn keyword lispFunc boole-c2 invoke-restart-interactively satisfies
+syn keyword lispFunc boole-clr isqrt sbit
+syn keyword lispFunc boole-eqv keyword scale-float
+syn keyword lispFunc boole-ior keywordp schar
+syn keyword lispFunc boole-nand labels search
+syn keyword lispFunc boole-nor lambda second
+syn keyword lispFunc boole-orc1 lambda-list-keywords sequence
+syn keyword lispFunc boole-orc2 lambda-parameters-limit serious-condition
+syn keyword lispFunc boole-set last set
+syn keyword lispFunc boole-xor lcm set-char-bit
+syn keyword lispFunc boolean ldb set-difference
+syn keyword lispFunc both-case-p ldb-test set-dispatch-macro-character
+syn keyword lispFunc boundp ldiff set-exclusive-or
+syn keyword lispFunc break least-negative-double-float set-macro-character
+syn keyword lispFunc broadcast-stream least-negative-long-float set-pprint-dispatch
+syn keyword lispFunc broadcast-stream-streams least-negative-normalized-double-float set-syntax-from-char
+syn keyword lispFunc built-in-class least-negative-normalized-long-float setf
+syn keyword lispFunc butlast least-negative-normalized-short-float setq
+syn keyword lispFunc byte least-negative-normalized-single-float seventh
+syn keyword lispFunc byte-position least-negative-short-float shadow
+syn keyword lispFunc byte-size least-negative-single-float shadowing-import
+syn keyword lispFunc call-arguments-limit least-positive-double-float shared-initialize
+syn keyword lispFunc call-method least-positive-long-float shiftf
+syn keyword lispFunc call-next-method least-positive-normalized-double-float short-float
+syn keyword lispFunc capitalize least-positive-normalized-long-float short-float-epsilon
+syn keyword lispFunc car least-positive-normalized-short-float short-float-negative-epsilon
+syn keyword lispFunc case least-positive-normalized-single-float short-site-name
+syn keyword lispFunc catch least-positive-short-float signal
+syn keyword lispFunc ccase least-positive-single-float signed-byte
+syn keyword lispFunc cdr length signum
+syn keyword lispFunc ceiling let simle-condition
+syn keyword lispFunc cell-error let* simple-array
+syn keyword lispFunc cell-error-name lisp simple-base-string
+syn keyword lispFunc cerror lisp-implementation-type simple-bit-vector
+syn keyword lispFunc change-class lisp-implementation-version simple-bit-vector-p
+syn keyword lispFunc char list simple-condition-format-arguments
+syn keyword lispFunc char-bit list* simple-condition-format-control
+syn keyword lispFunc char-bits list-all-packages simple-error
+syn keyword lispFunc char-bits-limit list-length simple-string
+syn keyword lispFunc char-code listen simple-string-p
+syn keyword lispFunc char-code-limit listp simple-type-error
+syn keyword lispFunc char-control-bit load simple-vector
+syn keyword lispFunc char-downcase load-logical-pathname-translations simple-vector-p
+syn keyword lispFunc char-equal load-time-value simple-warning
+syn keyword lispFunc char-font locally sin
+syn keyword lispFunc char-font-limit log single-flaot-epsilon
+syn keyword lispFunc char-greaterp logand single-float
+syn keyword lispFunc char-hyper-bit logandc1 single-float-epsilon
+syn keyword lispFunc char-int logandc2 single-float-negative-epsilon
+syn keyword lispFunc char-lessp logbitp sinh
+syn keyword lispFunc char-meta-bit logcount sixth
+syn keyword lispFunc char-name logeqv sleep
+syn keyword lispFunc char-not-equal logical-pathname slot-boundp
+syn keyword lispFunc char-not-greaterp logical-pathname-translations slot-exists-p
+syn keyword lispFunc char-not-lessp logior slot-makunbound
+syn keyword lispFunc char-super-bit lognand slot-missing
+syn keyword lispFunc char-upcase lognor slot-unbound
+syn keyword lispFunc char/= lognot slot-value
+syn keyword lispFunc char< logorc1 software-type
+syn keyword lispFunc char<= logorc2 software-version
+syn keyword lispFunc char= logtest some
+syn keyword lispFunc char> logxor sort
+syn keyword lispFunc char>= long-float space
+syn keyword lispFunc character long-float-epsilon special
+syn keyword lispFunc characterp long-float-negative-epsilon special-form-p
+syn keyword lispFunc check-type long-site-name special-operator-p
+syn keyword lispFunc cis loop speed
+syn keyword lispFunc class loop-finish sqrt
+syn keyword lispFunc class-name lower-case-p stable-sort
+syn keyword lispFunc class-of machine-instance standard
+syn keyword lispFunc clear-input machine-type standard-char
+syn keyword lispFunc clear-output machine-version standard-char-p
+syn keyword lispFunc close macro-function standard-class
+syn keyword lispFunc clrhash macroexpand standard-generic-function
+syn keyword lispFunc code-char macroexpand-1 standard-method
+syn keyword lispFunc coerce macroexpand-l standard-object
+syn keyword lispFunc commonp macrolet step
+syn keyword lispFunc compilation-speed make-array storage-condition
+syn keyword lispFunc compile make-array store-value
+syn keyword lispFunc compile-file make-broadcast-stream stream
+syn keyword lispFunc compile-file-pathname make-char stream-element-type
+syn keyword lispFunc compiled-function make-concatenated-stream stream-error
+syn keyword lispFunc compiled-function-p make-condition stream-error-stream
+syn keyword lispFunc compiler-let make-dispatch-macro-character stream-external-format
+syn keyword lispFunc compiler-macro make-echo-stream streamp
+syn keyword lispFunc compiler-macro-function make-hash-table streamup
+syn keyword lispFunc complement make-instance string
+syn keyword lispFunc complex make-instances-obsolete string-capitalize
+syn keyword lispFunc complexp make-list string-char
+syn keyword lispFunc compute-applicable-methods make-load-form string-char-p
+syn keyword lispFunc compute-restarts make-load-form-saving-slots string-downcase
+syn keyword lispFunc concatenate make-method string-equal
+syn keyword lispFunc concatenated-stream make-package string-greaterp
+syn keyword lispFunc concatenated-stream-streams make-pathname string-left-trim
+syn keyword lispFunc cond make-random-state string-lessp
+syn keyword lispFunc condition make-sequence string-not-equal
+syn keyword lispFunc conjugate make-string string-not-greaterp
+syn keyword lispFunc cons make-string-input-stream string-not-lessp
+syn keyword lispFunc consp make-string-output-stream string-right-strim
+syn keyword lispFunc constantly make-symbol string-right-trim
+syn keyword lispFunc constantp make-synonym-stream string-stream
+syn keyword lispFunc continue make-two-way-stream string-trim
+syn keyword lispFunc control-error makunbound string-upcase
+syn keyword lispFunc copy-alist map string/=
+syn keyword lispFunc copy-list map-into string<
+syn keyword lispFunc copy-pprint-dispatch mapc string<=
+syn keyword lispFunc copy-readtable mapcan string=
+syn keyword lispFunc copy-seq mapcar string>
+syn keyword lispFunc copy-structure mapcon string>=
+syn keyword lispFunc copy-symbol maphash stringp
+syn keyword lispFunc copy-tree mapl structure
+syn keyword lispFunc cos maplist structure-class
+syn keyword lispFunc cosh mask-field structure-object
+syn keyword lispFunc count max style-warning
+syn keyword lispFunc count-if member sublim
+syn keyword lispFunc count-if-not member-if sublis
+syn keyword lispFunc ctypecase member-if-not subseq
+syn keyword lispFunc debug merge subsetp
+syn keyword lispFunc decf merge-pathname subst
+syn keyword lispFunc declaim merge-pathnames subst-if
+syn keyword lispFunc declaration method subst-if-not
+syn keyword lispFunc declare method-combination substitute
+syn keyword lispFunc decode-float method-combination-error substitute-if
+syn keyword lispFunc decode-universal-time method-qualifiers substitute-if-not
+syn keyword lispFunc defclass min subtypep
+syn keyword lispFunc defconstant minusp svref
+syn keyword lispFunc defgeneric mismatch sxhash
+syn keyword lispFunc define-compiler-macro mod symbol
+syn keyword lispFunc define-condition most-negative-double-float symbol-function
+syn keyword lispFunc define-method-combination most-negative-fixnum symbol-macrolet
+syn keyword lispFunc define-modify-macro most-negative-long-float symbol-name
+syn keyword lispFunc define-setf-expander most-negative-short-float symbol-package
+syn keyword lispFunc define-setf-method most-negative-single-float symbol-plist
+syn keyword lispFunc define-symbol-macro most-positive-double-float symbol-value
+syn keyword lispFunc defmacro most-positive-fixnum symbolp
+syn keyword lispFunc defmethod most-positive-long-float synonym-stream
+syn keyword lispFunc defpackage most-positive-short-float synonym-stream-symbol
+syn keyword lispFunc defparameter most-positive-single-float sys
+syn keyword lispFunc defsetf muffle-warning system
+syn keyword lispFunc defstruct multiple-value-bind t
+syn keyword lispFunc deftype multiple-value-call tagbody
+syn keyword lispFunc defun multiple-value-list tailp
+syn keyword lispFunc defvar multiple-value-prog1 tan
+syn keyword lispFunc delete multiple-value-seteq tanh
+syn keyword lispFunc delete-duplicates multiple-value-setq tenth
+syn keyword lispFunc delete-file multiple-values-limit terpri
+syn keyword lispFunc delete-if name-char the
+syn keyword lispFunc delete-if-not namestring third
+syn keyword lispFunc delete-package nbutlast throw
+syn keyword lispFunc denominator nconc time
+syn keyword lispFunc deposit-field next-method-p trace
+syn keyword lispFunc describe nil translate-logical-pathname
+syn keyword lispFunc describe-object nintersection translate-pathname
+syn keyword lispFunc destructuring-bind ninth tree-equal
+syn keyword lispFunc digit-char no-applicable-method truename
+syn keyword lispFunc digit-char-p no-next-method truncase
+syn keyword lispFunc directory not truncate
+syn keyword lispFunc directory-namestring notany two-way-stream
+syn keyword lispFunc disassemble notevery two-way-stream-input-stream
+syn keyword lispFunc division-by-zero notinline two-way-stream-output-stream
+syn keyword lispFunc do nreconc type
+syn keyword lispFunc do* nreverse type-error
+syn keyword lispFunc do-all-symbols nset-difference type-error-datum
+syn keyword lispFunc do-exeternal-symbols nset-exclusive-or type-error-expected-type
+syn keyword lispFunc do-external-symbols nstring type-of
+syn keyword lispFunc do-symbols nstring-capitalize typecase
+syn keyword lispFunc documentation nstring-downcase typep
+syn keyword lispFunc dolist nstring-upcase unbound-slot
+syn keyword lispFunc dotimes nsublis unbound-slot-instance
+syn keyword lispFunc double-float nsubst unbound-variable
+syn keyword lispFunc double-float-epsilon nsubst-if undefined-function
+syn keyword lispFunc double-float-negative-epsilon nsubst-if-not unexport
+syn keyword lispFunc dpb nsubstitute unintern
+syn keyword lispFunc dribble nsubstitute-if union
+syn keyword lispFunc dynamic-extent nsubstitute-if-not unless
+syn keyword lispFunc ecase nth unread
+syn keyword lispFunc echo-stream nth-value unread-char
+syn keyword lispFunc echo-stream-input-stream nthcdr unsigned-byte
+syn keyword lispFunc echo-stream-output-stream null untrace
+syn keyword lispFunc ed number unuse-package
+syn keyword lispFunc eighth numberp unwind-protect
+syn keyword lispFunc elt numerator update-instance-for-different-class
+syn keyword lispFunc encode-universal-time nunion update-instance-for-redefined-class
+syn keyword lispFunc end-of-file oddp upgraded-array-element-type
+syn keyword lispFunc endp open upgraded-complex-part-type
+syn keyword lispFunc enough-namestring open-stream-p upper-case-p
+syn keyword lispFunc ensure-directories-exist optimize use-package
+syn keyword lispFunc ensure-generic-function or use-value
+syn keyword lispFunc eq otherwise user
+syn keyword lispFunc eql output-stream-p user-homedir-pathname
+syn keyword lispFunc equal package values
+syn keyword lispFunc equalp package-error values-list
+syn keyword lispFunc error package-error-package vector
+syn keyword lispFunc etypecase package-name vector-pop
+syn keyword lispFunc eval package-nicknames vector-push
+syn keyword lispFunc eval-when package-shadowing-symbols vector-push-extend
+syn keyword lispFunc evalhook package-use-list vectorp
+syn keyword lispFunc evenp package-used-by-list warn
+syn keyword lispFunc every packagep warning
+syn keyword lispFunc exp pairlis when
+syn keyword lispFunc export parse-error wild-pathname-p
+syn keyword lispFunc expt parse-integer with-accessors
+syn keyword lispFunc extended-char parse-namestring with-compilation-unit
+syn keyword lispFunc fboundp pathname with-condition-restarts
+syn keyword lispFunc fceiling pathname-device with-hash-table-iterator
+syn keyword lispFunc fdefinition pathname-directory with-input-from-string
+syn keyword lispFunc ffloor pathname-host with-open-file
+syn keyword lispFunc fifth pathname-match-p with-open-stream
+syn keyword lispFunc file-author pathname-name with-output-to-string
+syn keyword lispFunc file-error pathname-type with-package-iterator
+syn keyword lispFunc file-error-pathname pathname-version with-simple-restart
+syn keyword lispFunc file-length pathnamep with-slots
+syn keyword lispFunc file-namestring peek-char with-standard-io-syntax
+syn keyword lispFunc file-position phase write
+syn keyword lispFunc file-stream pi write-byte
+syn keyword lispFunc file-string-length plusp write-char
+syn keyword lispFunc file-write-date pop write-line
+syn keyword lispFunc fill position write-sequence
+syn keyword lispFunc fill-pointer position-if write-string
+syn keyword lispFunc find position-if-not write-to-string
+syn keyword lispFunc find-all-symbols pprint y-or-n-p
+syn keyword lispFunc find-class pprint-dispatch yes-or-no-p
+syn keyword lispFunc find-if pprint-exit-if-list-exhausted zerop
+syn keyword lispFunc find-if-not pprint-fill
+
+syn match lispFunc "\<c[ad]\+r\>"
+
+
+" Lisp Keywords (modifiers)
+syn keyword lispKey :abort :from-end :overwrite
+syn keyword lispKey :adjustable :gensym :predicate
+syn keyword lispKey :append :host :preserve-whitespace
+syn keyword lispKey :array :if-does-not-exist :pretty
+syn keyword lispKey :base :if-exists :print
+syn keyword lispKey :case :include :print-function
+syn keyword lispKey :circle :index :probe
+syn keyword lispKey :conc-name :inherited :radix
+syn keyword lispKey :constructor :initial-contents :read-only
+syn keyword lispKey :copier :initial-element :rehash-size
+syn keyword lispKey :count :initial-offset :rehash-threshold
+syn keyword lispKey :create :initial-value :rename
+syn keyword lispKey :default :input :rename-and-delete
+syn keyword lispKey :defaults :internal :size
+syn keyword lispKey :device :io :start
+syn keyword lispKey :direction :junk-allowed :start1
+syn keyword lispKey :directory :key :start2
+syn keyword lispKey :displaced-index-offset :length :stream
+syn keyword lispKey :displaced-to :level :supersede
+syn keyword lispKey :element-type :name :test
+syn keyword lispKey :end :named :test-not
+syn keyword lispKey :end1 :new-version :type
+syn keyword lispKey :end2 :nicknames :use
+syn keyword lispKey :error :output :verbose
+syn keyword lispKey :escape :output-file :version
+syn keyword lispKey :external
+
+" Standard Lisp Variables
+syn keyword lispVar *applyhook* *load-pathname* *print-pprint-dispatch*
+syn keyword lispVar *break-on-signals* *load-print* *print-pprint-dispatch*
+syn keyword lispVar *break-on-signals* *load-truename* *print-pretty*
+syn keyword lispVar *break-on-warnings* *load-verbose* *print-radix*
+syn keyword lispVar *compile-file-pathname* *macroexpand-hook* *print-readably*
+syn keyword lispVar *compile-file-pathname* *modules* *print-right-margin*
+syn keyword lispVar *compile-file-truename* *package* *print-right-margin*
+syn keyword lispVar *compile-file-truename* *print-array* *query-io*
+syn keyword lispVar *compile-print* *print-base* *random-state*
+syn keyword lispVar *compile-verbose* *print-case* *read-base*
+syn keyword lispVar *compile-verbose* *print-circle* *read-default-float-format*
+syn keyword lispVar *debug-io* *print-escape* *read-eval*
+syn keyword lispVar *debugger-hook* *print-gensym* *read-suppress*
+syn keyword lispVar *default-pathname-defaults* *print-length* *readtable*
+syn keyword lispVar *error-output* *print-level* *standard-input*
+syn keyword lispVar *evalhook* *print-lines* *standard-output*
+syn keyword lispVar *features* *print-miser-width* *terminal-io*
+syn keyword lispVar *gensym-counter* *print-miser-width* *trace-output*
+
+" Strings
+syn region lispString start=+"+ skip=+\\\\\|\\"+ end=+"+
+if exists("lisp_instring")
+ syn region lispInString keepend matchgroup=Delimiter start=+"(+rs=s+1 skip=+|.\{-}|+ matchgroup=Delimiter end=+)"+ contains=@lispListCluster,lispInStringString
+ syn region lispInStringString start=+\\"+ skip=+\\\\+ end=+\\"+ contained
+endif
+
+" Shared with Xlisp, Declarations, Macros, Functions
+syn keyword lispDecl defmacro do-all-symbols labels
+syn keyword lispDecl defsetf do-external-symbols let
+syn keyword lispDecl deftype do-symbols locally
+syn keyword lispDecl defun dotimes macrolet
+syn keyword lispDecl do* flet multiple-value-bind
+
+" Numbers: supporting integers and floating point numbers
+syn match lispNumber "-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\(e[-+]\=\d\+\)\="
+
+syn match lispSpecial "\*[a-zA-Z_][a-zA-Z_0-9-]*\*"
+syn match lispSpecial !#|[^()'`,"; \t]\+|#!
+syn match lispSpecial !#x[0-9a-fA-F]\+!
+syn match lispSpecial !#o[0-7]\+!
+syn match lispSpecial !#b[01]\+!
+syn match lispSpecial !#\\[ -\~]!
+syn match lispSpecial !#[':][^()'`,"; \t]\+!
+syn match lispSpecial !#([^()'`,"; \t]\+)!
+
+syn match lispConcat "\s\.\s"
+syn match lispParenError ")"
+
+" Comments
+syn cluster lispCommentGroup contains=lispTodo,@Spell
+syn match lispComment ";.*$" contains=@lispCommentGroup
+syn region lispCommentRegion start="#|" end="|#" contains=lispCommentRegion,@lispCommentGroup
+syn case ignore
+syn keyword lispTodo contained combak combak: todo todo:
+syn case match
+
+" synchronization
+syn sync lines=100
+
+" 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_lisp_syntax_inits")
+ if version < 508
+ let did_lisp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lispCommentRegion lispComment
+ HiLink lispAtomNmbr lispNumber
+ HiLink lispAtomMark lispMark
+ HiLink lispInStringString lispString
+
+ HiLink lispAtom Identifier
+ HiLink lispAtomBarSymbol Special
+ HiLink lispBarSymbol Special
+ HiLink lispComment Comment
+ HiLink lispConcat Statement
+ HiLink lispDecl Statement
+ HiLink lispFunc Statement
+ HiLink lispKey Type
+ HiLink lispMark Delimiter
+ HiLink lispNumber Number
+ HiLink lispParenError Error
+ HiLink lispSpecial Type
+ HiLink lispString String
+ HiLink lispTodo Todo
+ HiLink lispVar Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lisp"
+
+" vim: ts=8 nowrap
diff --git a/runtime/syntax/lite.vim b/runtime/syntax/lite.vim
new file mode 100644
index 000000000..8abc51dea
--- /dev/null
+++ b/runtime/syntax/lite.vim
@@ -0,0 +1,181 @@
+" Vim syntax file
+" Language: lite
+" Maintainer: Lutz Eymers <ixtab@polzin.com>
+" URL: http://www.isp.de/data/lite.vim
+" Email: Subject: send syntax_vim.tgz
+" Last Change: 2001 Mai 01
+"
+" Options lite_sql_query = 1 for SQL syntax highligthing inside strings
+" lite_minlines = x to sync at least x lines backwards
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'lite'
+endif
+
+if main_syntax == 'lite'
+ if exists("lite_sql_query")
+ if lite_sql_query == 1
+ syn include @liteSql <sfile>:p:h/sql.vim
+ unlet b:current_syntax
+ endif
+ endif
+endif
+
+if main_syntax == 'msql'
+ if exists("msql_sql_query")
+ if msql_sql_query == 1
+ syn include @liteSql <sfile>:p:h/sql.vim
+ unlet b:current_syntax
+ endif
+ endif
+endif
+
+syn cluster liteSql remove=sqlString,sqlComment
+
+syn case match
+
+" Internal Variables
+syn keyword liteIntVar ERRMSG contained
+
+" Comment
+syn region liteComment start="/\*" end="\*/" contains=liteTodo
+
+" Function names
+syn keyword liteFunctions echo printf fprintf open close read
+syn keyword liteFunctions readln readtok
+syn keyword liteFunctions split strseg chop tr sub substr
+syn keyword liteFunctions test unlink umask chmod mkdir chdir rmdir
+syn keyword liteFunctions rename truncate link symlink stat
+syn keyword liteFunctions sleep system getpid getppid kill
+syn keyword liteFunctions time ctime time2unixtime unixtime2year
+syn keyword liteFunctions unixtime2year unixtime2month unixtime2day
+syn keyword liteFunctions unixtime2hour unixtime2min unixtime2sec
+syn keyword liteFunctions strftime
+syn keyword liteFunctions getpwnam getpwuid
+syn keyword liteFunctions gethostbyname gethostbyaddress
+syn keyword liteFunctions urlEncode setContentType includeFile
+syn keyword liteFunctions msqlConnect msqlClose msqlSelectDB
+syn keyword liteFunctions msqlQuery msqlStoreResult msqlFreeResult
+syn keyword liteFunctions msqlFetchRow msqlDataSeek msqlListDBs
+syn keyword liteFunctions msqlListTables msqlInitFieldList msqlListField
+syn keyword liteFunctions msqlFieldSeek msqlNumRows msqlEncode
+syn keyword liteFunctions exit fatal typeof
+syn keyword liteFunctions crypt addHttpHeader
+
+" Conditional
+syn keyword liteConditional if else
+
+" Repeat
+syn keyword liteRepeat while
+
+" Operator
+syn keyword liteStatement break return continue
+
+" Operator
+syn match liteOperator "[-+=#*]"
+syn match liteOperator "/[^*]"me=e-1
+syn match liteOperator "\$"
+syn match liteRelation "&&"
+syn match liteRelation "||"
+syn match liteRelation "[!=<>]="
+syn match liteRelation "[<>]"
+
+" Identifier
+syn match liteIdentifier "$\h\w*" contains=liteIntVar,liteOperator
+syn match liteGlobalIdentifier "@\h\w*" contains=liteIntVar
+
+" Include
+syn keyword liteInclude load
+
+" Define
+syn keyword liteDefine funct
+
+" Type
+syn keyword liteType int uint char real
+
+" String
+syn region liteString keepend matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=liteIdentifier,liteSpecialChar,@liteSql
+
+" Number
+syn match liteNumber "-\=\<\d\+\>"
+
+" Float
+syn match liteFloat "\(-\=\<\d+\|-\=\)\.\d\+\>"
+
+" SpecialChar
+syn match liteSpecialChar "\\[abcfnrtv\\]" contained
+
+syn match liteParentError "[)}\]]"
+
+" Todo
+syn keyword liteTodo TODO Todo todo contained
+
+" dont syn #!...
+syn match liteExec "^#!.*$"
+
+" Parents
+syn cluster liteInside contains=liteComment,liteFunctions,liteIdentifier,liteGlobalIdentifier,liteConditional,liteRepeat,liteStatement,liteOperator,liteRelation,liteType,liteString,liteNumber,liteFloat,liteParent
+
+syn region liteParent matchgroup=Delimiter start="(" end=")" contains=@liteInside
+syn region liteParent matchgroup=Delimiter start="{" end="}" contains=@liteInside
+syn region liteParent matchgroup=Delimiter start="\[" end="\]" contains=@liteInside
+
+" sync
+if main_syntax == 'lite'
+ if exists("lite_minlines")
+ exec "syn sync minlines=" . lite_minlines
+ else
+ syn sync minlines=100
+ endif
+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_lite_syn_inits")
+ if version < 508
+ let did_lite_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink liteComment Comment
+ HiLink liteString String
+ HiLink liteNumber Number
+ HiLink liteFloat Float
+ HiLink liteIdentifier Identifier
+ HiLink liteGlobalIdentifier Identifier
+ HiLink liteIntVar Identifier
+ HiLink liteFunctions Function
+ HiLink liteRepeat Repeat
+ HiLink liteConditional Conditional
+ HiLink liteStatement Statement
+ HiLink liteType Type
+ HiLink liteInclude Include
+ HiLink liteDefine Define
+ HiLink liteSpecialChar SpecialChar
+ HiLink liteParentError liteError
+ HiLink liteError Error
+ HiLink liteTodo Todo
+ HiLink liteOperator Operator
+ HiLink liteRelation Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lite"
+
+if main_syntax == 'lite'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/logtalk.vim b/runtime/syntax/logtalk.vim
new file mode 100644
index 000000000..b8218da3e
--- /dev/null
+++ b/runtime/syntax/logtalk.vim
@@ -0,0 +1,428 @@
+" Vim syntax file
+"
+" Language: Logtalk
+" Maintainer: Paulo Moura <pmoura@logtalk.org>
+" Last Change: 2004 May 16
+
+
+" Quit when a syntax file was already loaded:
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+" Logtalk is case sensitive:
+
+syn case match
+
+
+" Logtalk variables
+
+syn match logtalkVariable "\<\(\u\|_\)\(\w\)*\>"
+
+
+" Logtalk clause functor
+
+syn match logtalkOperator ":-"
+
+
+" Logtalk quoted atoms and strings
+
+syn region logtalkString start=+"+ skip=+\\"+ end=+"+
+syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+
+
+
+" Logtalk message sending operators
+
+syn match logtalkOperator "::"
+syn match logtalkOperator "\^\^"
+
+
+" Logtalk external call
+
+syn region logtalkExtCall matchgroup=logtalkExtCallTag start="{" matchgroup=logtalkExtCallTag end="}" contains=ALL
+
+
+" Logtalk opening entity directives
+
+syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- object(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=ALL
+syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- protocol(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=ALL
+syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- category(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=ALL
+
+
+" Logtalk closing entity directives
+
+syn match logtalkCloseEntityDir ":- end_object\."
+syn match logtalkCloseEntityDir ":- end_protocol\."
+syn match logtalkCloseEntityDir ":- end_category\."
+
+
+" Logtalk entity relations
+
+syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="instantiates(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity contained
+syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="specializes(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity contained
+syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="extends(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity contained
+syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="imports(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity contained
+syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="implements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity contained
+
+
+" Logtalk directives
+
+syn region logtalkDir matchgroup=logtalkDirTag start=":- initialization(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- info(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- mode(" matchgroup=logtalkDirTag end=")\." contains=logtalkOperator,logtalkAtom
+syn region logtalkDir matchgroup=logtalkDirTag start=":- dynamic(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn match logtalkDirTag ":- dynamic\."
+syn region logtalkDir matchgroup=logtalkDirTag start=":- discontiguous(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- public(" matchgroup=logtalkDirTag end=")\." contains=ALL
+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=":- metapredicate(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- op(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- calls(" matchgroup=logtalkDirTag end=")\." contains=ALL
+syn region logtalkDir matchgroup=logtalkDirTag start=":- uses(" matchgroup=logtalkDirTag end=")\." contains=ALL
+
+
+" Logtalk built-in predicates
+
+syn match logtalkBuiltIn "\<current_object\ze("
+syn match logtalkBuiltIn "\<current_protocol\ze("
+syn match logtalkBuiltIn "\<current_category\ze("
+
+syn match logtalkBuiltIn "\<create_object\ze("
+syn match logtalkBuiltIn "\<create_protocol\ze("
+syn match logtalkBuiltIn "\<create_category\ze("
+
+syn match logtalkBuiltIn "\<object_property\ze("
+syn match logtalkBuiltIn "\<protocol_property\ze("
+syn match logtalkBuiltIn "\<category_property\ze("
+
+syn match logtalkBuiltIn "\<abolish_object\ze("
+syn match logtalkBuiltIn "\<abolish_protocol\ze("
+syn match logtalkBuiltIn "\<abolish_category\ze("
+
+syn match logtalkBuiltIn "\<extends_object\ze("
+syn match logtalkBuiltIn "\<extends_protocol\ze("
+syn match logtalkBuiltIn "\<implements_protocol\ze("
+syn match logtalkBuiltIn "\<instantiates_class\ze("
+syn match logtalkBuiltIn "\<specializes_class\ze("
+syn match logtalkBuiltIn "\<imports_category\ze("
+
+syn match logtalkBuiltIn "\<abolish_events\ze("
+syn match logtalkBuiltIn "\<current_event\ze("
+syn match logtalkBuiltIn "\<define_events\ze("
+
+syn match logtalkBuiltIn "\<current_logtalk_flag\ze("
+syn match logtalkBuiltIn "\<set_logtalk_flag\ze("
+
+syn match logtalkBuiltIn "\<logtalk_compile\ze("
+syn match logtalkBuiltIn "\<logtalk_load\ze("
+
+syn match logtalkBuiltIn "\<forall\ze("
+syn match logtalkBuiltIn "\<retractall\ze("
+
+
+" Logtalk built-in methods
+
+syn match logtalkBuiltInMethod "\<parameter\ze("
+syn match logtalkBuiltInMethod "\<self\ze("
+syn match logtalkBuiltInMethod "\<sender\ze("
+syn match logtalkBuiltInMethod "\<this\ze("
+
+syn match logtalkBuiltInMethod "\<current_predicate\ze("
+syn match logtalkBuiltInMethod "\<predicate_property\ze("
+
+syn match logtalkBuiltInMethod "\<abolish\ze("
+syn match logtalkBuiltInMethod "\<asserta\ze("
+syn match logtalkBuiltInMethod "\<assertz\ze("
+syn match logtalkBuiltInMethod "\<clause\ze("
+syn match logtalkBuiltInMethod "\<retract\ze("
+syn match logtalkBuiltInMethod "\<retractall\ze("
+
+syn match logtalkBuiltInMethod "\<bagof\ze("
+syn match logtalkBuiltInMethod "\<findall\ze("
+syn match logtalkBuiltInMethod "\<forall\ze("
+syn match logtalkBuiltInMethod "\<setof\ze("
+
+syn match logtalkBuiltInMethod "\<before\ze("
+syn match logtalkBuiltInMethod "\<after\ze("
+
+syn match logtalkBuiltInMethod "\<phrase\ze("
+
+
+" Mode operators
+
+syn match logtalkOperator "?"
+syn match logtalkOperator "@"
+
+
+" Control constructs
+
+syn match logtalkKeyword "\<true\>"
+syn match logtalkKeyword "\<fail\>"
+syn match logtalkKeyword "\<call\ze("
+syn match logtalkOperator "!"
+syn match logtalkOperator ","
+syn match logtalkOperator ";"
+syn match logtalkOperator "-->"
+syn match logtalkOperator "->"
+syn match logtalkKeyword "\<catch\ze("
+syn match logtalkKeyword "\<throw\ze("
+
+
+" Term unification
+
+syn match logtalkOperator "="
+syn match logtalkKeyword "\<unify_with_occurs_check\ze("
+syn match logtalkOperator "\\="
+
+
+" Term testing
+
+syn match logtalkKeyword "\<var\ze("
+syn match logtalkKeyword "\<atom\ze("
+syn match logtalkKeyword "\<integer\ze("
+syn match logtalkKeyword "\<float\ze("
+syn match logtalkKeyword "\<atomic\ze("
+syn match logtalkKeyword "\<compound\ze("
+syn match logtalkKeyword "\<nonvar\ze("
+syn match logtalkKeyword "\<number\ze("
+
+
+" Term comparison
+
+syn match logtalkOperator "@=<"
+syn match logtalkOperator "=="
+syn match logtalkOperator "\\=="
+syn match logtalkOperator "@<"
+syn match logtalkOperator "@>"
+syn match logtalkOperator "@>="
+
+
+" Term creation and decomposition
+
+syn match logtalkKeyword "\<functor\ze("
+syn match logtalkKeyword "\<arg\ze("
+syn match logtalkOperator "=\.\."
+syn match logtalkKeyword "\<copy_term\ze("
+
+
+" Arithemtic evaluation
+
+syn keyword logtalkOperator is
+
+
+" Arithemtic comparison
+
+syn match logtalkOperator "=:="
+syn match logtalkOperator "=\\="
+syn match logtalkOperator "<"
+syn match logtalkOperator "=<"
+syn match logtalkOperator ">"
+syn match logtalkOperator ">="
+
+
+" Stream selection and control
+
+syn match logtalkKeyword "\<current_input\ze("
+syn match logtalkKeyword "\<current_output\ze("
+syn match logtalkKeyword "\<set_input\ze("
+syn match logtalkKeyword "\<set_output\ze("
+syn match logtalkKeyword "\<open\ze("
+syn match logtalkKeyword "\<close\ze("
+syn match logtalkKeyword "\<flush_output\ze("
+syn match logtalkKeyword "\<flush_output\>"
+syn match logtalkKeyword "\<stream_property\ze("
+syn match logtalkKeyword "\<at_end_of_stream\ze("
+syn match logtalkKeyword "\<at_end_of_stream\>"
+syn match logtalkKeyword "\<set_stream_position\ze("
+
+
+" Character input/output
+
+syn match logtalkKeyword "\<get_char\ze("
+syn match logtalkKeyword "\<get_code\ze("
+syn match logtalkKeyword "\<peek_char\ze("
+syn match logtalkKeyword "\<peek_code\ze("
+syn match logtalkKeyword "\<put_char\ze("
+syn match logtalkKeyword "\<put_code\ze("
+syn match logtalkKeyword "\<nl\ze("
+syn match logtalkKeyword "\<nl\>"
+
+
+" Byte input/output
+
+syn match logtalkKeyword "\<get_byte\ze("
+syn match logtalkKeyword "\<peek_byte\ze("
+syn match logtalkKeyword "\<put_byte\ze("
+
+
+" Term input/output
+
+syn match logtalkKeyword "\<read_term\ze("
+syn match logtalkKeyword "\<read\ze("
+syn match logtalkKeyword "\<write_term\ze("
+syn match logtalkKeyword "\<write\ze("
+syn match logtalkKeyword "\<writeq\ze("
+syn match logtalkKeyword "\<write_canonical\ze("
+syn match logtalkKeyword "\<op\ze("
+syn match logtalkKeyword "\<current_op\ze("
+syn match logtalkKeyword "\<char_conversion\ze("
+syn match logtalkKeyword "\<current_char_conversion\ze("
+
+
+" Logic and control
+
+syn match logtalkOperator "\\+"
+syn match logtalkKeyword "\<once\ze("
+syn match logtalkKeyword "\<repeat\>"
+
+
+" Atomic term processing
+
+syn match logtalkKeyword "\<atom_length\ze("
+syn match logtalkKeyword "\<atom_concat\ze("
+syn match logtalkKeyword "\<sub_atom\ze("
+syn match logtalkKeyword "\<atom_chars\ze("
+syn match logtalkKeyword "\<atom_codes\ze("
+syn match logtalkKeyword "\<char_code\ze("
+syn match logtalkKeyword "\<number_chars\ze("
+syn match logtalkKeyword "\<number_codes\ze("
+
+
+" Implementation defined hooks functions
+
+syn match logtalkKeyword "\<set_prolog_flag\ze("
+syn match logtalkKeyword "\<current_prolog_flag\ze("
+syn match logtalkKeyword "\<halt\ze("
+syn match logtalkKeyword "\<halt\>"
+
+
+" Evaluable functors
+
+syn match logtalkOperator "+"
+syn match logtalkOperator "-"
+syn match logtalkOperator "\*"
+syn match logtalkOperator "//"
+syn match logtalkOperator "/"
+syn match logtalkKeyword "\<rem(?=[(])"
+syn match logtalkKeyword "\<rem\>"
+syn match logtalkKeyword "\<mod\ze("
+syn match logtalkKeyword "\<mod\>"
+syn match logtalkKeyword "\<abs\ze("
+syn match logtalkKeyword "\<sign\ze("
+syn match logtalkKeyword "\<float_integer_part\ze("
+syn match logtalkKeyword "\<float_fractional_part\ze("
+syn match logtalkKeyword "\<float\ze("
+syn match logtalkKeyword "\<floor\ze("
+syn match logtalkKeyword "\<truncate\ze("
+syn match logtalkKeyword "\<round\ze("
+syn match logtalkKeyword "\<ceiling\ze("
+
+
+" Other arithemtic functors
+
+syn match logtalkOperator "\*\*"
+syn match logtalkKeyword "\<sin\ze("
+syn match logtalkKeyword "\<cos\ze("
+syn match logtalkKeyword "\<atan\ze("
+syn match logtalkKeyword "\<exp\ze("
+syn match logtalkKeyword "\<log\ze("
+syn match logtalkKeyword "\<sqrt\ze("
+
+
+" Bitwise functors
+
+syn match logtalkOperator ">>"
+syn match logtalkOperator "<<"
+syn match logtalkOperator "/\\"
+syn match logtalkOperator "\\/"
+syn match logtalkOperator "\\"
+
+
+" Logtalk end-of-clause
+
+syn match logtalkOperator "\."
+
+
+" Logtalk list operator
+
+syn match logtalkOperator "|"
+
+
+" Logtalk comments
+
+syn region logtalkBlockComment start="/\*" end="\*/"
+syn match logtalkLineComment "%.*"
+
+
+" Logtalk numbers
+
+syn match logtalkNumber "\<[0-9]\+\>"
+syn match logtalkNumber "\<[0-9]\+\.[0-9]\+\>"
+syn match logtalkNumber "\<[0-9]\+\.[0-9]\+[eE][-+][0-9]+\>"
+syn match logtalkNumber "\<0'[0-9a-zA-Z]\>"
+syn match logtalkNumber "\<0b[0-1]\+\>"
+syn match logtalkNumber "\<0o[0-7]\+\>"
+syn match logtalkNumber "\<0x[0-9a-fA-F]\+\>"
+
+
+syn sync ccomment maxlines=50
+
+
+" 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_logtalk_syn_inits")
+ if version < 508
+ let did_logtalk_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink logtalkBlockComment Comment
+ HiLink logtalkLineComment Comment
+
+ HiLink logtalkOpenEntityDir Normal
+ HiLink logtalkOpenEntityDirTag PreProc
+
+ HiLink logtalkEntity Normal
+
+ HiLink logtalkEntityRel Normal
+ HiLink logtalkEntityRelTag PreProc
+
+ HiLink logtalkCloseEntityDir PreProc
+
+ HiLink logtalkDir Normal
+ HiLink logtalkDirTag PreProc
+
+ HiLink logtalkAtom String
+ HiLink logtalkString String
+
+ HiLink logtalkNumber Number
+
+ HiLink logtalkKeyword Keyword
+
+ HiLink logtalkBuiltIn Keyword
+ HiLink logtalkBuiltInMethod Keyword
+
+ HiLink logtalkOperator Operator
+
+ HiLink logtalkExtCall Normal
+ HiLink logtalkExtCallTag Operator
+
+ HiLink logtalkVariable Identifier
+
+ delcommand HiLink
+
+endif
+
+
+let b:current_syntax = "logtalk"
+
+setlocal ts=4
diff --git a/runtime/syntax/lotos.vim b/runtime/syntax/lotos.vim
new file mode 100644
index 000000000..3cd83c4d8
--- /dev/null
+++ b/runtime/syntax/lotos.vim
@@ -0,0 +1,82 @@
+" Vim syntax file
+" Language: LOTOS (Language Of Temporal Ordering Specifications, IS8807)
+" Maintainer: Daniel Amyot <damyot@csi.uottawa.ca>
+" Last Change: Wed Aug 19 1998
+" URL: http://lotos.csi.uottawa.ca/~damyot/vim/lotos.vim
+" This file is an adaptation of pascal.vim by Mario Eusebio
+" I'm not sure I understand all of the syntax highlight language,
+" but this file seems to do the job for standard LOTOS.
+
+" 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
+
+"Comments in LOTOS are between (* and *)
+syn region lotosComment start="(\*" end="\*)" contains=lotosTodo
+
+"Operators [], [...], >>, ->, |||, |[...]|, ||, ;, !, ?, :, =, ,, :=
+syn match lotosDelimiter "[][]"
+syn match lotosDelimiter ">>"
+syn match lotosDelimiter "->"
+syn match lotosDelimiter "\[>"
+syn match lotosDelimiter "[|;!?:=,]"
+
+"Regular keywords
+syn keyword lotosStatement specification endspec process endproc
+syn keyword lotosStatement where behaviour behavior
+syn keyword lotosStatement any let par accept choice hide of in
+syn keyword lotosStatement i stop exit noexit
+
+"Operators from the Abstract Data Types in IS8807
+syn keyword lotosOperator eq ne succ and or xor implies iff
+syn keyword lotosOperator not true false
+syn keyword lotosOperator Insert Remove IsIn NotIn Union Ints
+syn keyword lotosOperator Minus Includes IsSubsetOf
+syn keyword lotosOperator lt le ge gt 0
+
+"Sorts in IS8807
+syn keyword lotosSort Boolean Bool FBoolean FBool Element
+syn keyword lotosSort Set String NaturalNumber Nat HexString
+syn keyword lotosSort HexDigit DecString DecDigit
+syn keyword lotosSort OctString OctDigit BitString Bit
+syn keyword lotosSort Octet OctetString
+
+"Keywords for ADTs
+syn keyword lotosType type endtype library endlib sorts formalsorts
+syn keyword lotosType eqns formaleqns opns formalopns forall ofsort is
+syn keyword lotosType for renamedby actualizedby sortnames opnnames
+syn keyword lotosType using
+
+syn sync lines=250
+
+" 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_lotos_syntax_inits")
+ if version < 508
+ let did_lotos_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lotosStatement Statement
+ HiLink lotosProcess Label
+ HiLink lotosOperator Operator
+ HiLink lotosSort Function
+ HiLink lotosType Type
+ HiLink lotosComment Comment
+ HiLink lotosDelimiter String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lotos"
+
+" vim: ts=8
diff --git a/runtime/syntax/lout.vim b/runtime/syntax/lout.vim
new file mode 100644
index 000000000..ea4cb0038
--- /dev/null
+++ b/runtime/syntax/lout.vim
@@ -0,0 +1,139 @@
+" Vim syntax file
+" Language: Lout
+" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de>
+" Last Change: Son 22 Jun 2003 20:43:26 CEST
+" Filenames: *.lout,*.lt
+" URL: http://www.cvjb.de/comp/vim/lout.vim
+" $Id$
+"
+" Lout: Basser Lout document formatting system.
+
+" 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
+
+" Lout is case sensitive
+syn case match
+
+" Synchronization, I know it is a huge number, but normal texts can be
+" _very_ long ;-)
+syn sync lines=1000
+
+" Characters allowed in keywords
+" I don't know if 128-255 are allowed in ANS-FORHT
+if version >= 600
+ setlocal iskeyword=@,48-57,.,@-@,_,192-255
+else
+ set iskeyword=@,48-57,.,@-@,_,192-255
+endif
+
+" Some special keywords
+syn keyword loutTodo contained TODO lout Lout LOUT
+syn keyword loutDefine def macro
+
+" Some big structures
+syn keyword loutKeyword @Begin @End @Figure @Tab
+syn keyword loutKeyword @Book @Doc @Document @Report
+syn keyword loutKeyword @Introduction @Abstract @Appendix
+syn keyword loutKeyword @Chapter @Section @BeginSections @EndSections
+
+" All kind of Lout keywords
+syn match loutFunction '\<@[^ \t{}]\+\>'
+
+" Braces -- Don`t edit these lines!
+syn match loutMBraces '[{}]'
+syn match loutIBraces '[{}]'
+syn match loutBBrace '[{}]'
+syn match loutBIBraces '[{}]'
+syn match loutHeads '[{}]'
+
+" Unmatched braces.
+syn match loutBraceError '}'
+
+" End of multi-line definitions, like @Document, @Report and @Book.
+syn match loutEOmlDef '^//$'
+
+" Grouping of parameters and objects.
+syn region loutObject transparent matchgroup=Delimiter start='{' matchgroup=Delimiter end='}' contains=ALLBUT,loutBraceError
+
+" The NULL object has a special meaning
+syn keyword loutNULL {}
+
+" Comments
+syn region loutComment start='\#' end='$' contains=loutTodo
+
+" Double quotes
+syn region loutSpecial start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+" ISO-LATIN-1 characters created with @Char, or Adobe symbols
+" created with @Sym
+syn match loutSymbols '@\(\(Char\)\|\(Sym\)\)\s\+[A-Za-z]\+'
+
+" Include files
+syn match loutInclude '@IncludeGraphic\s\+\k\+'
+syn region loutInclude start='@\(\(SysInclude\)\|\(IncludeGraphic\)\|\(Include\)\)\s*{' end='}'
+
+" Tags
+syn match loutTag '@\(\(Tag\)\|\(PageMark\)\|\(PageOf\)\|\(NumberOf\)\)\s\+\k\+'
+syn region loutTag start='@Tag\s*{' end='}'
+
+" Equations
+syn match loutMath '@Eq\s\+\k\+'
+syn region loutMath matchgroup=loutMBraces start='@Eq\s*{' matchgroup=loutMBraces end='}' contains=ALLBUT,loutBraceError
+"
+" Fonts
+syn match loutItalic '@I\s\+\k\+'
+syn region loutItalic matchgroup=loutIBraces start='@I\s*{' matchgroup=loutIBraces end='}' contains=ALLBUT,loutBraceError
+syn match loutBold '@B\s\+\k\+'
+syn region loutBold matchgroup=loutBBraces start='@B\s*{' matchgroup=loutBBraces end='}' contains=ALLBUT,loutBraceError
+syn match loutBoldItalic '@BI\s\+\k\+'
+syn region loutBoldItalic matchgroup=loutBIBraces start='@BI\s*{' matchgroup=loutBIBraces end='}' contains=ALLBUT,loutBraceError
+syn region loutHeadings matchgroup=loutHeads start='@\(\(Title\)\|\(Caption\)\)\s*{' matchgroup=loutHeads end='}' contains=ALLBUT,loutBraceError
+
+" 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_lout_syn_inits")
+ if version < 508
+ let did_lout_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default methods for highlighting. Can be overrriden later.
+ HiLink loutTodo Todo
+ HiLink loutDefine Define
+ HiLink loutEOmlDef Define
+ HiLink loutFunction Function
+ HiLink loutBraceError Error
+ HiLink loutNULL Special
+ HiLink loutComment Comment
+ HiLink loutSpecial Special
+ HiLink loutSymbols Character
+ HiLink loutInclude Include
+ HiLink loutKeyword Keyword
+ HiLink loutTag Tag
+ HiLink loutMath Number
+
+ " HiLink Not really needed here, but I think it is more consistent.
+ HiLink loutMBraces loutMath
+ hi loutItalic term=italic cterm=italic gui=italic
+ HiLink loutIBraces loutItalic
+ hi loutBold term=bold cterm=bold gui=bold
+ HiLink loutBBraces loutBold
+ hi loutBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
+ HiLink loutBIBraces loutBoldItalic
+ hi loutHeadings term=bold cterm=bold guifg=indianred
+ HiLink loutHeads loutHeadings
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lout"
+
+" vim:ts=8:sw=4:nocindent:smartindent:
diff --git a/runtime/syntax/lpc.vim b/runtime/syntax/lpc.vim
new file mode 100644
index 000000000..7665c1a6d
--- /dev/null
+++ b/runtime/syntax/lpc.vim
@@ -0,0 +1,455 @@
+" Vim syntax file
+" Language: LPC
+" Maintainer: Shizhu Pan <poet@mudbuilder.net>
+" URL: http://poet.tomud.com/pub/lpc.vim.bz2
+" Last Change: 2003 May 11
+" 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.
+
+
+" Nodule: This is the start nodule. {{{1
+
+" 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
+
+" Nodule: Keywords {{{1
+
+" LPC keywords
+" keywords should always be highlighted so "contained" is not used.
+syn cluster lpcKeywdGrp contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved
+
+syn keyword lpcConditional if else switch
+syn keyword lpcLabel case default
+syn keyword lpcOperator catch efun in inherit
+syn keyword lpcRepeat do for foreach while
+syn keyword lpcStatement break continue return
+
+syn match lpcEfunError /efun[^:]/ display
+
+" Illegal to use keyword as function
+" It's not working, maybe in the next version.
+syn keyword lpcKeywdError contained if for foreach return switch while
+
+" These are keywords only because they take lvalue or type as parameter,
+" so these keywords should only be used as function but cannot be names of
+" user-defined functions.
+syn keyword lpcKeywdFunc new parse_command sscanf time_expression
+
+" Nodule: Type and modifiers {{{1
+
+" Type names list.
+
+" Special types
+syn keyword lpcType void mixed unknown
+" Scalar/Value types.
+syn keyword lpcType int float string
+" Pointer types.
+syn keyword lpcType array buffer class function mapping object
+" Other types.
+if exists("lpc_compat_32")
+ syn keyword lpcType closure status funcall
+else
+ syn keyword lpcError closure status
+ syn keyword lpcType multiset
+endif
+
+" Type modifier.
+syn keyword lpcModifier nomask private public
+syn keyword lpcModifier varargs virtual
+
+" sensible modifiers
+if exists("lpc_pre_v22")
+ syn keyword lpcReserved nosave protected ref
+ syn keyword lpcModifier static
+else
+ syn keyword lpcError static
+ syn keyword lpcModifier nosave protected ref
+endif
+
+" Nodule: Applies {{{1
+
+" Match a function declaration or function pointer
+syn match lpcApplyDecl excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display
+
+" We should note that in func_spec.c the efun definition syntax is so
+" complicated that I use such a long regular expression to describe.
+syn match lpcLongDecl excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display
+
+" this is form for all functions
+" ->foo() form had been excluded
+syn match lpcFuncDecl excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display
+
+" The (: :) parenthesis or $() forms a function pointer
+syn match lpcFuncName /(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained
+syn match lpcFuncName /(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained
+syn match lpcFuncName /\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained
+
+" Applies list.
+" system applies
+syn keyword lpcApplies contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset
+" interactive
+syn keyword lpcApplies contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt
+" master applies
+syn keyword lpcApplies contained author_file compile_object connect crash creator_file domain_file epilog error_handler flag get_bb_uid get_root_uid get_save_file_name log_error make_path_absolute object_name preload privs_file retrieve_ed_setup save_ed_setup slow_shutdown
+syn keyword lpcApplies contained valid_asm valid_bind valid_compile_to_c valid_database valid_hide valid_link valid_object valid_override valid_read valid_save_binary valid_seteuid valid_shadow valid_socket valid_write
+" parsing
+syn keyword lpcApplies contained inventory_accessible inventory_visible is_living parse_command_adjectiv_id_list parse_command_adjective_id_list parse_command_all_word parse_command_id_list parse_command_plural_id_list parse_command_prepos_list parse_command_users parse_get_environment parse_get_first_inventory parse_get_next_inventory parser_error_message
+
+
+" Nodule: Efuns {{{1
+
+syn cluster lpcEfunGroup contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc
+
+" Compat32 efuns
+if exists("lpc_compat_32")
+ syn keyword lpc_efuns contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr
+else
+ syn match lpcErrFunc /#`\h\w*/
+ " Shell compatible first line comment.
+ syn region lpcCommentFunc start=/^#!/ end=/$/
+endif
+
+" pre-v22 efuns which are removed in newer versions.
+syn keyword lpcOldEfuns contained tail dump_socket_status
+
+" new efuns after v22 should be added here!
+syn keyword lpcNewEfuns contained socket_status
+
+" LPC efuns list.
+" DEBUG efuns Not included.
+" New efuns should NOT be added to this list, see v22 efuns above.
+" Efuns list {{{2
+syn keyword lpc_efuns contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats
+syn keyword lpc_efuns contained bind break_string bufferp
+syn keyword lpc_efuns contained cache_stats call_other call_out call_out_info call_stack capitalize catch ceil check_memory children classp clear_bit clone_object clonep command commands copy cos cp crc32 crypt ctime
+syn keyword lpc_efuns contained db_close db_commit db_connect db_exec db_fetch db_rollback db_status debug_info debugmalloc debug_message deep_inherit_list deep_inventory destruct disable_commands disable_wizard domain_stats dumpallobj dump_file_descriptors dump_prog
+syn keyword lpc_efuns contained each ed ed_cmd ed_start enable_commands enable_wizard environment error errorp eval_cost evaluate exec exp explode export_uid external_start
+syn keyword lpc_efuns contained fetch_variable file_length file_name file_size filter filter_array filter_mapping find_call_out find_living find_object find_player first_inventory floatp floor flush_messages function_exists function_owner function_profile functionp functions
+syn keyword lpc_efuns contained generate_source get_char get_config get_dir geteuid getuid
+syn keyword lpc_efuns contained heart_beats
+syn keyword lpc_efuns contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp
+syn keyword lpc_efuns contained keys
+syn keyword lpc_efuns contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info
+syn keyword lpc_efuns contained malloc_check malloc_debug malloc_status map map_array map_delete map_mapping mapp master match_path max_eval_cost member_array memory_info memory_summary message mkdir moncontrol move_object mud_status
+syn keyword lpc_efuns contained named_livings network_stats next_bit next_inventory notify_fail nullp
+syn keyword lpc_efuns contained objectp objects oldcrypt opcprof origin
+syn keyword lpc_efuns contained parse_add_rule parse_add_synonym parse_command parse_dump parse_init parse_my_rules parse_refresh parse_remove parse_sentence pluralize pointerp pow present previous_object printf process_string process_value program_info
+syn keyword lpc_efuns contained query_ed_mode query_heart_beat query_host_name query_idle query_ip_name query_ip_number query_ip_port query_load_average query_notify_fail query_privs query_replaced_program query_shadowing query_snoop query_snooping query_verb
+syn keyword lpc_efuns contained random read_buffer read_bytes read_file receive reclaim_objects refs regexp reg_assoc reload_object remove_action remove_call_out remove_interactive remove_shadow rename repeat_string replace_program replace_string replaceable reset_eval_cost resolve restore_object restore_variable rm rmdir rotate_x rotate_y rotate_z rusage
+syn keyword lpc_efuns contained save_object save_variable say scale set_author set_bit set_eval_limit set_heart_beat set_hide set_light set_living_name set_malloc_mask set_privs set_reset set_this_player set_this_user seteuid shadow shallow_inherit_list shout shutdown sin sizeof snoop socket_accept socket_acquire socket_address socket_bind socket_close socket_connect socket_create socket_error socket_listen socket_release socket_write sort_array sprintf sqrt stat store_variable strcmp stringp strlen strsrch
+syn keyword lpc_efuns contained tan tell_object tell_room terminal_colour test_bit this_interactive this_object this_player this_user throw time to_float to_int trace traceprefix translate typeof
+syn keyword lpc_efuns contained undefinedp unique_array unique_mapping upper_case uptime userp users
+syn keyword lpc_efuns contained values variables virtualp
+syn keyword lpc_efuns contained wizardp write write_buffer write_bytes write_file
+
+" Nodule: Constants {{{1
+
+" LPC Constants.
+" like keywords, constants are always highlighted, be careful to choose only
+" the constants we used to add to this list.
+syn keyword lpcConstant __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__
+" Defines in options.h are all predefined in LPC sources surrounding by
+" two underscores. Do we need to include all of that?
+syn keyword lpcConstant __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__
+" from the documentation we know that these constants remains only for
+" backward compatibility and should not be used any more.
+syn keyword lpcConstant HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL
+syn keyword lpcConstant MUD_NAME F__THIS_OBJECT
+
+" Nodule: Todo for this file. {{{1
+
+" TODO : need to check for LPC4 syntax and other series of LPC besides
+" v22, b21 and l32, if you had a good idea, contact me at poet@mudbuilder.net
+" and I will be appreciated about that.
+
+" Notes about some FAQ:
+"
+" About variables : We adopts the same behavior for C because almost all the
+" LPC programmers are also C programmers, so we don't need separate settings
+" for C and LPC. That is the reason why I don't change variables like
+" "c_no_utf"s to "lpc_no_utf"s.
+"
+" Copy : Some of the following seems to be copied from c.vim but not quite
+" the same in details because the syntax for C and LPC is different.
+"
+" Color scheme : this syntax file had been thouroughly tested to work well
+" for all of the dark-backgrounded color schemes Vim has provided officially,
+" and it should be quite Ok for all of the bright-backgrounded color schemes,
+" of course it works best for the color scheme that I am using, download it
+" from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it.
+"
+
+" Nodule: String and Character {{{1
+
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match lpcSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+if !exists("c_no_utf")
+ syn match lpcSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)"
+endif
+
+" LPC version of sprintf() format,
+syn match lpcFormat display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained
+syn match lpcFormat display "%%" contained
+syn region lpcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat
+" lpcCppString: same as lpcString, but ends at end of line
+syn region lpcCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat
+
+" LPC preprocessor for the text formatting short cuts
+" Thanks to Dr. Charles E. Campbell <cec@gryphon.gsfc.nasa.gov>
+" he suggests the best way to do this.
+syn region lpcTextString start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
+syn region lpcArrayString start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
+
+" Character
+syn match lpcCharacter "L\='[^\\]'"
+syn match lpcCharacter "L'[^']*'" contains=lpcSpecial
+syn match lpcSpecialError "L\='\\[^'\"?\\abefnrtv]'"
+syn match lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
+syn match lpcSpecialCharacter display "L\='\\\o\{1,3}'"
+syn match lpcSpecialCharacter display "'\\x\x\{1,2}'"
+syn match lpcSpecialCharacter display "L'\\x\x\+'"
+
+" Nodule: White space {{{1
+
+" when wanted, highlight trailing white space
+if exists("c_space_errors")
+ if !exists("c_no_trail_space_error")
+ syn match lpcSpaceError display excludenl "\s\+$"
+ endif
+ if !exists("c_no_tab_space_error")
+ syn match lpcSpaceError display " \+\t"me=e-1
+ endif
+endif
+
+" Nodule: Parenthesis and brackets {{{1
+
+" catch errors caused by wrong parenthesis and brackets
+syn cluster lpcParenGroup contains=lpcParenError,lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcCommentSkip,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom
+syn region lpcParen transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError
+" lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine
+syn region lpcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError
+syn match lpcParenError display ")"
+syn match lpcParenError display "\]"
+" for LPC:
+" Here we should consider the array ({ }) parenthesis and mapping ([ ])
+" parenthesis and multiset (< >) parenthesis.
+syn match lpcErrInParen display contained "[^^]{"ms=s+1
+syn match lpcErrInParen display contained "\(}\|\]\)[^)]"me=e-1
+syn region lpcBracket transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
+" lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine
+syn region lpcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
+syn match lpcErrInBracket display contained "[);{}]"
+
+" Nodule: Numbers {{{1
+
+" integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match lpcNumbers display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal
+" Same, but without octal error (for comments)
+syn match lpcNumbersCom display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal
+syn match lpcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+" hex number
+syn match lpcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match lpcOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero
+syn match lpcOctalZero display contained "\<0"
+syn match lpcFloat display contained "\d\+f"
+" floating point number, with dot, optional exponent
+syn match lpcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+" floating point number, starting with a dot, optional exponent
+syn match lpcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+" floating point number, without dot, with exponent
+syn match lpcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn match lpcOctalError display contained "0\o*[89]\d*"
+syn case match
+
+" Nodule: Comment string {{{1
+
+" lpcCommentGroup allows adding matches for special things in comments
+syn keyword lpcTodo contained TODO FIXME XXX
+syn cluster lpcCommentGroup contains=lpcTodo
+
+if exists("c_comment_strings")
+ " A comment can contain lpcString, lpcCharacter and lpcNumber.
+ syntax match lpcCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region lpcCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=lpcSpecial,lpcCommentSkip
+ syntax region lpcComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=lpcSpecial
+ syntax region lpcCommentL start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcComment2String,lpcCharacter,lpcNumbersCom,lpcSpaceError
+ syntax region lpcComment matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcCommentString,lpcCharacter,lpcNumbersCom,lpcSpaceError
+else
+ syn region lpcCommentL start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcSpaceError
+ syn region lpcComment matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcSpaceError
+endif
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match lpcCommentError display "\*/"
+syntax match lpcCommentStartError display "/\*"me=e-1 contained
+
+" Nodule: Pre-processor {{{1
+
+syn region lpcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError
+syn match lpcPreCondit display "^\s*#\s*\(else\|endif\)\>"
+if !exists("c_no_if0")
+ syn region lpcCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2
+ syn region lpcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip
+ syn region lpcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip
+endif
+syn region lpcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match lpcIncluded display contained "<[^>]*>"
+syn match lpcInclude display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded
+syn match lpcLineSkip "\\$"
+syn cluster lpcPreProcGroup contains=lpcPreCondit,lpcIncluded,lpcInclude,lpcDefine,lpcErrInParen,lpcErrInBracket,lpcUserLabel,lpcSpecial,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcString,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcParen,lpcBracket,lpcMulti,lpcKeywdError
+syn region lpcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup
+
+if exists("lpc_pre_v22")
+ syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
+else
+ syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
+endif
+
+" Nodule: User labels {{{1
+
+" Highlight Labels
+" User labels in LPC is not allowed, only "case x" and "default" is supported
+syn cluster lpcMultiGroup contains=lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcCppParen,lpcCppBracket,lpcCppString,lpcKeywdError
+syn region lpcMulti transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup
+
+syn cluster lpcLabelGroup contains=lpcUserLabel
+syn match lpcUserCont display "^\s*lpc:$" contains=@lpcLabelGroup
+
+" Don't want to match anything
+syn match lpcUserLabel display "lpc" contained
+
+" Nodule: Initializations {{{1
+
+if exists("c_minlines")
+ let b:c_minlines = c_minlines
+else
+ if !exists("c_no_if0")
+ let b:c_minlines = 50 " #if 0 constructs can be long
+ else
+ let b:c_minlines = 15 " mostly for () constructs
+ endif
+endif
+exec "syn sync ccomment lpcComment minlines=" . b:c_minlines
+
+" Make sure these options take place since we no longer depend on file type
+" plugin for C
+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")
+ let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" .
+ \ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" .
+ \ "Text Documentation (*.txt)\t*.txt\n" .
+ \ "All Files (*.*)\t*.*\n"
+endif
+
+" Nodule: Highlight links {{{1
+
+" 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_lpc_syn_inits")
+ if version < 508
+ let did_lpc_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lpcModifier lpcStorageClass
+
+ HiLink lpcQuotedFmt lpcFormat
+ HiLink lpcFormat lpcSpecial
+ HiLink lpcCppString lpcString " Cpp means
+ " C Pre-Processor
+ HiLink lpcCommentL lpcComment
+ HiLink lpcCommentStart lpcComment
+ HiLink lpcUserLabel lpcLabel
+ HiLink lpcSpecialCharacter lpcSpecial
+ HiLink lpcOctal lpcPreProc
+ HiLink lpcOctalZero lpcSpecial " LPC will treat octal numbers
+ " as decimals, programmers should
+ " be aware of that.
+ HiLink lpcEfunError lpcError
+ HiLink lpcKeywdError lpcError
+ HiLink lpcOctalError lpcError
+ HiLink lpcParenError lpcError
+ HiLink lpcErrInParen lpcError
+ HiLink lpcErrInBracket lpcError
+ HiLink lpcCommentError lpcError
+ HiLink lpcCommentStartError lpcError
+ HiLink lpcSpaceError lpcError
+ HiLink lpcSpecialError lpcError
+ HiLink lpcErrFunc lpcError
+
+ if exists("lpc_pre_v22")
+ HiLink lpcOldEfuns lpc_efuns
+ HiLink lpcNewEfuns lpcError
+ else
+ HiLink lpcOldEfuns lpcReserved
+ HiLink lpcNewEfuns lpc_efuns
+ endif
+ HiLink lpc_efuns lpcFunction
+
+ HiLink lpcReserved lpcPreProc
+ HiLink lpcTextString lpcString " This should be preprocessors, but
+ HiLink lpcArrayString lpcPreProc " let's make some difference
+ " between text and array
+
+ HiLink lpcIncluded lpcString
+ HiLink lpcCommentString lpcString
+ HiLink lpcComment2String lpcString
+ HiLink lpcCommentSkip lpcComment
+ HiLink lpcCommentFunc lpcComment
+
+ HiLink lpcCppSkip lpcCppOut
+ HiLink lpcCppOut2 lpcCppOut
+ HiLink lpcCppOut lpcComment
+
+ " Standard type below
+ HiLink lpcApplies Special
+ HiLink lpcCharacter Character
+ HiLink lpcComment Comment
+ HiLink lpcConditional Conditional
+ HiLink lpcConstant Constant
+ HiLink lpcDefine Macro
+ HiLink lpcError Error
+ HiLink lpcFloat Float
+ HiLink lpcFunction Function
+ HiLink lpcIdentifier Identifier
+ HiLink lpcInclude Include
+ HiLink lpcLabel Label
+ HiLink lpcNumber Number
+ HiLink lpcOperator Operator
+ HiLink lpcPreCondit PreCondit
+ HiLink lpcPreProc PreProc
+ HiLink lpcRepeat Repeat
+ HiLink lpcStatement Statement
+ HiLink lpcStorageClass StorageClass
+ HiLink lpcString String
+ HiLink lpcStructure Structure
+ HiLink lpcSpecial LineNr
+ HiLink lpcTodo Todo
+ HiLink lpcType Type
+
+ delcommand HiLink
+endif
+
+" Nodule: This is the end nodule. {{{1
+
+let b:current_syntax = "lpc"
+
+" vim:ts=8:nosta:sw=2:ai:si:
+" vim600:set fdm=marker: }}}1
diff --git a/runtime/syntax/lprolog.vim b/runtime/syntax/lprolog.vim
new file mode 100644
index 000000000..2cc42f9ed
--- /dev/null
+++ b/runtime/syntax/lprolog.vim
@@ -0,0 +1,137 @@
+" Vim syntax file
+" Language: LambdaProlog (Teyjus)
+" Filenames: *.mod *.sig
+" Maintainer: Markus Mottl <markus@oefai.at>
+" URL: http://www.ai.univie.ac.at/~markus/vim/syntax/lprolog.vim
+" Last Change: 2003 May 11
+" 2001 Apr 26 - Upgraded for new Vim version
+" 2000 Jun 5 - Initial release
+
+" 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
+
+" Lambda Prolog is case sensitive.
+syn case match
+
+syn match lprologBrackErr "\]"
+syn match lprologParenErr ")"
+
+syn cluster lprologContained contains=lprologTodo,lprologModuleName,lprologTypeNames,lprologTypeName
+
+" Enclosing delimiters
+syn region lprologEncl transparent matchgroup=lprologKeyword start="(" matchgroup=lprologKeyword end=")" contains=ALLBUT,@lprologContained,lprologParenErr
+syn region lprologEncl transparent matchgroup=lprologKeyword start="\[" matchgroup=lprologKeyword end="\]" contains=ALLBUT,@lprologContained,lprologBrackErr
+
+" General identifiers
+syn match lprologIdentifier "\<\(\w\|[-+*/\\^<>=`'~?@#$&!_]\)*\>"
+syn match lprologVariable "\<\(\u\|_\)\(\w\|[-+*/\\^<>=`'~?@#$&!]\)*\>"
+
+syn match lprologOperator "/"
+
+" Comments
+syn region lprologComment start="/\*" end="\*/" contains=lprologComment,lprologTodo
+syn region lprologComment start="%" end="$" contains=lprologTodo
+syn keyword lprologTodo contained TODO FIXME XXX
+
+syn match lprologInteger "\<\d\+\>"
+syn match lprologReal "\<\(\d\+\)\=\.\d+\>"
+syn region lprologString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+" Clause definitions
+syn region lprologClause start="^\w\+" end=":-\|\."
+
+" Modules
+syn region lprologModule matchgroup=lprologKeyword start="^\<module\>" matchgroup=lprologKeyword end="\."
+
+" Types
+syn match lprologKeyword "^\<type\>" skipwhite nextgroup=lprologTypeNames
+syn region lprologTypeNames matchgroup=lprologBraceErr start="\<\w\+\>" matchgroup=lprologKeyword end="\." contained contains=lprologTypeName,lprologOperator
+syn match lprologTypeName "\<\w\+\>" contained
+
+" Keywords
+syn keyword lprologKeyword end import accumulate accum_sig
+syn keyword lprologKeyword local localkind closed sig
+syn keyword lprologKeyword kind exportdef useonly
+syn keyword lprologKeyword infixl infixr infix prefix
+syn keyword lprologKeyword prefixr postfix postfixl
+
+syn keyword lprologSpecial pi sigma is true fail halt stop not
+
+" Operators
+syn match lprologSpecial ":-"
+syn match lprologSpecial "->"
+syn match lprologSpecial "=>"
+syn match lprologSpecial "\\"
+syn match lprologSpecial "!"
+
+syn match lprologSpecial ","
+syn match lprologSpecial ";"
+syn match lprologSpecial "&"
+
+syn match lprologOperator "+"
+syn match lprologOperator "-"
+syn match lprologOperator "*"
+syn match lprologOperator "\~"
+syn match lprologOperator "\^"
+syn match lprologOperator "<"
+syn match lprologOperator ">"
+syn match lprologOperator "=<"
+syn match lprologOperator ">="
+syn match lprologOperator "::"
+syn match lprologOperator "="
+
+syn match lprologOperator "\."
+syn match lprologOperator ":"
+syn match lprologOperator "|"
+
+syn match lprologCommentErr "\*/"
+
+syn sync minlines=50
+syn sync maxlines=500
+
+
+" 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_lprolog_syntax_inits")
+ if version < 508
+ let did_lprolog_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lprologComment Comment
+ HiLink lprologTodo Todo
+
+ HiLink lprologKeyword Keyword
+ HiLink lprologSpecial Special
+ HiLink lprologOperator Operator
+ HiLink lprologIdentifier Normal
+
+ HiLink lprologInteger Number
+ HiLink lprologReal Number
+ HiLink lprologString String
+
+ HiLink lprologCommentErr Error
+ HiLink lprologBrackErr Error
+ HiLink lprologParenErr Error
+
+ HiLink lprologModuleName Special
+ HiLink lprologTypeName Identifier
+
+ HiLink lprologVariable Keyword
+ HiLink lprologAtom Normal
+ HiLink lprologClause Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lprolog"
+
+" vim: ts=8
diff --git a/runtime/syntax/lscript.vim b/runtime/syntax/lscript.vim
new file mode 100644
index 000000000..648a0ebea
--- /dev/null
+++ b/runtime/syntax/lscript.vim
@@ -0,0 +1,213 @@
+" Vim syntax file
+" Language: LotusScript
+" Maintainer: Taryn East (taryneast@hotmail.com)
+" Last Change: 2003 May 11
+
+" This is a rough amalgamation of the visual basic syntax file, and the UltraEdit
+" and Textpad syntax highlighters.
+" It's not too brilliant given that a) I've never written a syntax.vim file before
+" and b) I'm not so crash hot at LotusScript either. If you see any problems
+" feel free to email me with them.
+
+" 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
+
+" LotusScript is case insensitive
+syn case ignore
+
+" These are Notes thingies that had an equivalent in the vb highlighter
+" or I was already familiar with them
+syn keyword lscriptStatement ActivateApp As And Base Beep Call Case ChDir ChDrive Class
+syn keyword lscriptStatement Const Dim Declare DefCur DefDbl DefInt DefLng DefSng DefStr
+syn keyword lscriptStatement DefVar Do Else %Else ElseIf %ElseIf End %End Erase Event Exit
+syn keyword lscriptStatement Explicit FileCopy FALSE For ForAll Function Get GoTo GoSub
+syn keyword lscriptStatement If %If In Is Kill Let List Lock Loop MkDir
+syn keyword lscriptStatement Name Next New NoCase NoPitch Not Nothing NULL
+syn keyword lscriptStatement On Option Or PI Pitch Preserve Private Public
+syn keyword lscriptStatement Property Public Put
+syn keyword lscriptStatement Randomize ReDim Reset Resume Return RmDir
+syn keyword lscriptStatement Select SendKeys SetFileAttr Set Static Sub Then To TRUE
+syn keyword lscriptStatement Type Unlock Until While WEnd With Write XOr
+
+syn keyword lscriptDatatype Array Currency Double Integer Long Single String String$ Variant
+
+syn keyword lscriptNotesType Field Button Navigator
+syn keyword lscriptNotesType NotesACL NotesACLEntry NotesAgent NotesDatabase NotesDateRange
+syn keyword lscriptNotesType NotesDateTime NotesDbDirectory NotesDocument
+syn keyword lscriptNotesType NotesDocumentCollection NotesEmbeddedObject NotesForm
+syn keyword lscriptNotesType NotesInternational NotesItem NotesLog NotesName NotesNewsLetter
+syn keyword lscriptNotesType NotesMIMEEntry NotesOutline NotesOutlineEntry NotesRegistration
+syn keyword lscriptNotesType NotesReplication NotesRichTextItem NotesRichTextParagraphStyle
+syn keyword lscriptNotesType NotesRichTextStyle NotesRichTextTab
+syn keyword lscriptNotesType NotesSession NotesTimer NotesView NotesViewColumn NotesViewEntry
+syn keyword lscriptNotesType NotesViewEntryCollection NotesViewNavigator NotesUIDatabase
+syn keyword lscriptNotesType NotesUIDocument NotesUIView NotesUIWorkspace
+
+syn keyword lscriptNotesConst ACLLEVEL_AUTHOR ACLLEVEL_DEPOSITOR ACLLEVEL_DESIGNER
+syn keyword lscriptNotesConst ACLLEVEL_EDITOR ACLLEVEL_MANAGER ACLLEVEL_NOACCESS
+syn keyword lscriptNotesConst ACLLEVEL_READER ACLTYPE_MIXED_GROUP ACLTYPE_PERSON
+syn keyword lscriptNotesConst ACLTYPE_PERSON_GROUP ACLTYPE_SERVER ACLTYPE_SERVER_GROUP
+syn keyword lscriptNotesConst ACLTYPE_UNSPECIFIED ACTIONCD ALIGN_CENTER
+syn keyword lscriptNotesConst ALIGN_FULL ALIGN_LEFT ALIGN_NOWRAP ALIGN_RIGHT
+syn keyword lscriptNotesConst ASSISTANTINFO ATTACHMENT AUTHORS COLOR_BLACK
+syn keyword lscriptNotesConst COLOR_BLUE COLOR_CYAN COLOR_DARK_BLUE COLOR_DARK_CYAN
+syn keyword lscriptNotesConst COLOR_DARK_GREEN COLOR_DARK_MAGENTA COLOR_DARK_RED
+syn keyword lscriptNotesConst COLOR_DARK_YELLOW COLOR_GRAY COLOR_GREEN COLOR_LIGHT_GRAY
+syn keyword lscriptNotesConst COLOR_MAGENTA COLOR_RED COLOR_WHITE COLOR_YELLOW
+syn keyword lscriptNotesConst DATABASE DATETIMES DB_REPLICATION_PRIORITY_HIGH
+syn keyword lscriptNotesConst DB_REPLICATION_PRIORITY_LOW DB_REPLICATION_PRIORITY_MED
+syn keyword lscriptNotesConst DB_REPLICATION_PRIORITY_NOTSET EFFECTS_EMBOSS
+syn keyword lscriptNotesConst EFFECTS_EXTRUDE EFFECTS_NONE EFFECTS_SHADOW
+syn keyword lscriptNotesConst EFFECTS_SUBSCRIPT EFFECTS_SUPERSCRIPT EMBED_ATTACHMENT
+syn keyword lscriptNotesConst EMBED_OBJECT EMBED_OBJECTLINK EMBEDDEDOBJECT ERRORITEM
+syn keyword lscriptNotesConst EV_ALARM EV_COMM EV_MAIL EV_MISC EV_REPLICA EV_RESOURCE
+syn keyword lscriptNotesConst EV_SECURITY EV_SERVER EV_UNKNOWN EV_UPDATE FONT_COURIER
+syn keyword lscriptNotesConst FONT_HELV FONT_ROMAN FORMULA FT_DATABASE FT_DATE_ASC
+syn keyword lscriptNotesConst FT_DATE_DES FT_FILESYSTEM FT_FUZZY FT_SCORES FT_STEMS
+syn keyword lscriptNotesConst FT_THESAURUS HTML ICON ID_CERTIFIER ID_FLAT
+syn keyword lscriptNotesConst ID_HIERARCHICAL LSOBJECT MIME_PART NAMES NOTESLINKS
+syn keyword lscriptNotesConst NOTEREFS NOTES_DESKTOP_CLIENT NOTES_FULL_CLIENT
+syn keyword lscriptNotesConst NOTES_LIMITED_CLIENT NUMBERS OTHEROBJECT
+syn keyword lscriptNotesConst OUTLINE_CLASS_DATABASE OUTLINE_CLASS_DOCUMENT
+syn keyword lscriptNotesConst OUTLINE_CLASS_FOLDER OUTLINE_CLASS_FORM
+syn keyword lscriptNotesConst OUTLINE_CLASS_FRAMESET OUTLINE_CLASS_NAVIGATOR
+syn keyword lscriptNotesConst OUTLINE_CLASS_PAGE OUTLINE_CLASS_UNKNOWN
+syn keyword lscriptNotesConst OUTLINE_CLASS_VIEW OUTLINE_OTHER_FOLDERS_TYPE
+syn keyword lscriptNotesConst OUTLINE_OTHER_UNKNOWN_TYPE OUTLINE_OTHER_VIEWS_TYPE
+syn keyword lscriptNotesConst OUTLINE_TYPE_ACTION OUTLINE_TYPE_NAMEDELEMENT
+syn keyword lscriptNotesConst OUTLINE_TYPE_NOTELINK OUTLINE_TYPE_URL PAGINATE_BEFORE
+syn keyword lscriptNotesConst PAGINATE_DEFAULT PAGINATE_KEEP_TOGETHER
+syn keyword lscriptNotesConst PAGINATE_KEEP_WITH_NEXT PICKLIST_CUSTOM PICKLIST_NAMES
+syn keyword lscriptNotesConst PICKLIST_RESOURCES PICKLIST_ROOMS PROMPT_OK PROMPT_OKCANCELCOMBO
+syn keyword lscriptNotesConst PROMPT_OKCANCELEDIT PROMPT_OKCANCELEDITCOMBO PROMPT_OKCANCELLIST
+syn keyword lscriptNotesConst PROMPT_OKCANCELLISTMULT PROMPT_PASSWORD PROMPT_YESNO
+syn keyword lscriptNotesConst PROMPT_YESNOCANCEL QUERYCD READERS REPLICA_CANDIDATE
+syn keyword lscriptNotesConst RICHTEXT RULER_ONE_CENTIMETER RULER_ONE_INCH SEV_FAILURE
+syn keyword lscriptNotesConst SEV_FATAL SEV_NORMAL SEV_WARNING1 SEV_WARNING2
+syn keyword lscriptNotesConst SIGNATURE SPACING_DOUBLE SPACING_ONE_POINT_50
+syn keyword lscriptNotesConst SPACING_SINGLE STYLE_NO_CHANGE TAB_CENTER TAB_DECIMAL
+syn keyword lscriptNotesConst TAB_LEFT TAB_RIGHT TARGET_ALL_DOCS TARGET_ALL_DOCS_IN_VIEW
+syn keyword lscriptNotesConst TARGET_NEW_DOCS TARGET_NEW_OR_MODIFIED_DOCS TARGET_NONE
+syn keyword lscriptNotesConst TARGET_RUN_ONCE TARGET_SELECTED_DOCS TARGET_UNREAD_DOCS_IN_VIEW
+syn keyword lscriptNotesConst TEMPLATE TEMPLATE_CANDIDATE TEXT TRIGGER_AFTER_MAIL_DELIVERY
+syn keyword lscriptNotesConst TRIGGER_BEFORE_MAIL_DELIVERY TRIGGER_DOC_PASTED
+syn keyword lscriptNotesConst TRIGGER_DOC_UPDATE TRIGGER_MANUAL TRIGGER_NONE
+syn keyword lscriptNotesConst TRIGGER_SCHEDULED UNAVAILABLE UNKNOWN USERDATA
+syn keyword lscriptNotesConst USERID VC_ALIGN_CENTER VC_ALIGN_LEFT VC_ALIGN_RIGHT
+syn keyword lscriptNotesConst VC_ATTR_PARENS VC_ATTR_PUNCTUATED VC_ATTR_PERCENT
+syn keyword lscriptNotesConst VC_FMT_ALWAYS VC_FMT_CURRENCY VC_FMT_DATE VC_FMT_DATETIME
+syn keyword lscriptNotesConst VC_FMT_FIXED VC_FMT_GENERAL VC_FMT_HM VC_FMT_HMS
+syn keyword lscriptNotesConst VC_FMT_MD VC_FMT_NEVER VC_FMT_SCIENTIFIC
+syn keyword lscriptNotesConst VC_FMT_SOMETIMES VC_FMT_TIME VC_FMT_TODAYTIME VC_FMT_YM
+syn keyword lscriptNotesConst VC_FMT_YMD VC_FMT_Y4M VC_FONT_BOLD VC_FONT_ITALIC
+syn keyword lscriptNotesConst VC_FONT_STRIKEOUT VC_FONT_UNDERLINE VC_SEP_COMMA
+syn keyword lscriptNotesConst VC_SEP_NEWLINE VC_SEP_SEMICOLON VC_SEP_SPACE
+syn keyword lscriptNotesConst VIEWMAPDATA VIEWMAPLAYOUT VW_SPACING_DOUBLE
+syn keyword lscriptNotesConst VW_SPACING_ONE_POINT_25 VW_SPACING_ONE_POINT_50
+syn keyword lscriptNotesConst VW_SPACING_ONE_POINT_75 VW_SPACING_SINGLE
+
+syn keyword lscriptFunction Abs Asc Atn Atn2 ACos ASin
+syn keyword lscriptFunction CCur CDat CDbl Chr Chr$ CInt CLng Command Command$
+syn keyword lscriptFunction Cos CSng CStr
+syn keyword lscriptFunction CurDir CurDir$ CVar Date Date$ DateNumber DateSerial DateValue
+syn keyword lscriptFunction Day Dir Dir$ Environ$ Environ EOF Error Error$ Evaluate Exp
+syn keyword lscriptFunction FileAttr FileDateTime FileLen Fix Format Format$ FreeFile
+syn keyword lscriptFunction GetFileAttr GetThreadInfo Hex Hex$ Hour
+syn keyword lscriptFunction IMESetMode IMEStatus Input Input$ InputB InputB$
+syn keyword lscriptFunction InputBP InputBP$ InputBox InputBox$ InStr InStrB InStrBP InstrC
+syn keyword lscriptFunction IsA IsArray IsDate IsElement IsList IsNumeric
+syn keyword lscriptFunction IsObject IsResponse IsScalar IsUnknown LCase LCase$
+syn keyword lscriptFunction Left Left$ LeftB LeftB$ LeftC
+syn keyword lscriptFunction LeftBP LeftBP$ Len LenB LenBP LenC Loc LOF Log
+syn keyword lscriptFunction LSet LTrim LTrim$ MessageBox Mid Mid$ MidB MidB$ MidC
+syn keyword lscriptFunction Minute Month Now Oct Oct$ Responses Right Right$
+syn keyword lscriptFunction RightB RightB$ RightBP RightBP$ RightC Round Rnd RSet RTrim RTrim$
+syn keyword lscriptFunction Second Seek Sgn Shell Sin Sleep Space Space$ Spc Sqr Str Str$
+syn keyword lscriptFunction StrConv StrLeft StrleftBack StrRight StrRightBack
+syn keyword lscriptFunction StrCompare Tab Tan Time Time$ TimeNumber Timer
+syn keyword lscriptFunction TimeValue Trim Trim$ Today TypeName UCase UCase$
+syn keyword lscriptFunction UniversalID Val Weekday Year
+
+syn keyword lscriptMethods AppendToTextList ArrayAppend ArrayReplace ArrayGetIndex
+syn keyword lscriptMethods Append Bind Close
+"syn keyword lscriptMethods Contains
+syn keyword lscriptMethods CopyToDatabase CopyAllItems Count CurrentDatabase Delete Execute
+syn keyword lscriptMethods GetAllDocumentsByKey GetDatabase GetDocumentByKey
+syn keyword lscriptMethods GetDocumentByUNID GetFirstDocument GetFirstItem
+syn keyword lscriptMethods GetItems GetItemValue GetNthDocument GetView
+syn keyword lscriptMethods IsEmpty IsNull %Include Items
+syn keyword lscriptMethods Line LBound LoadMsgText Open Print
+syn keyword lscriptMethods RaiseEvent ReplaceItemValue Remove RemoveItem Responses
+syn keyword lscriptMethods Save Stop UBound UnprocessedDocuments Write
+
+syn keyword lscriptEvents Compare OnError
+
+"*************************************************************************************
+"These are Notes thingies that I'm not sure how to classify as they had no vb equivalent
+" At a wild guess I'd put them as Functions...
+" if anyone sees something really out of place... tell me!
+
+syn keyword lscriptFunction Access Alias Any Bin Bin$ Binary ByVal
+syn keyword lscriptFunction CodeLock CodeLockCheck CodeUnlock CreateLock
+syn keyword lscriptFunction CurDrive CurDrive$ DataType DestroyLock Eqv
+syn keyword lscriptFunction Erl Err Fraction From FromFunction FullTrim
+syn keyword lscriptFunction Imp Int Lib Like ListTag LMBCS LSServer Me
+syn keyword lscriptFunction Mod MsgDescription MsgText Output Published
+syn keyword lscriptFunction Random Read Shared Step UChr UChr$ Uni Unicode
+syn keyword lscriptFunction Until Use UseLSX UString UString$ Width Yield
+
+
+syn keyword lscriptTodo contained TODO
+
+"integer number, or floating point number without a dot.
+syn match lscriptNumber "\<\d\+\>"
+"floating point number, with dot
+syn match lscriptNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match lscriptNumber "\.\d\+\>"
+
+" String and Character constants
+syn region lscriptString start=+"+ end=+"+
+syn region lscriptComment start="REM" end="$" contains=lscriptTodo
+syn region lscriptComment start="'" end="$" contains=lscriptTodo
+syn region lscriptLineNumber start="^\d" end="\s"
+syn match lscriptTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
+
+" 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_lscript_syntax_inits")
+ if version < 508
+ let did_lscript_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ hi lscriptNotesType term=underline ctermfg=DarkGreen guifg=SeaGreen gui=bold
+
+ HiLink lscriptNotesConst lscriptNotesType
+ HiLink lscriptLineNumber Comment
+ HiLink lscriptDatatype Type
+ HiLink lscriptNumber Number
+ HiLink lscriptError Error
+ HiLink lscriptStatement Statement
+ HiLink lscriptString String
+ HiLink lscriptComment Comment
+ HiLink lscriptTodo Todo
+ HiLink lscriptFunction Identifier
+ HiLink lscriptMethods PreProc
+ HiLink lscriptEvents Special
+ HiLink lscriptTypeSpecifier Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lscript"
+
+" vim: ts=8
diff --git a/runtime/syntax/lss.vim b/runtime/syntax/lss.vim
new file mode 100644
index 000000000..fe20701d1
--- /dev/null
+++ b/runtime/syntax/lss.vim
@@ -0,0 +1,133 @@
+" Vim syntax file
+" Language: Lynx 2.7.1 style file
+" Maintainer: Scott Bigham <dsb@cs.duke.edu>
+" Last Change: 2001 May 09
+
+" 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
+
+" This setup is probably atypical for a syntax highlighting file, because
+" most of it is not really intended to be overrideable. Instead, the
+" highlighting is supposed to correspond to the highlighting specified by
+" the .lss file entries themselves; ie. the "bold" keyword should be bold,
+" the "red" keyword should be red, and so forth. The exceptions to this
+" are comments, of course, and the initial keyword identifying the affected
+" element, which will inherit the usual Identifier highlighting.
+
+syn match lssElement "^[^:]\+" nextgroup=lssMono
+
+syn match lssMono ":[^:]\+" contained nextgroup=lssFgColor contains=lssReverse,lssUnderline,lssBold,lssStandout
+
+syn keyword lssBold bold contained
+syn keyword lssReverse reverse contained
+syn keyword lssUnderline underline contained
+syn keyword lssStandout standout contained
+
+syn match lssFgColor ":[^:]\+" contained nextgroup=lssBgColor contains=lssRedFg,lssBlueFg,lssGreenFg,lssBrownFg,lssMagentaFg,lssCyanFg,lssLightgrayFg,lssGrayFg,lssBrightredFg,lssBrightgreenFg,lssYellowFg,lssBrightblueFg,lssBrightmagentaFg,lssBrightcyanFg
+
+syn case ignore
+syn keyword lssRedFg red contained
+syn keyword lssBlueFg blue contained
+syn keyword lssGreenFg green contained
+syn keyword lssBrownFg brown contained
+syn keyword lssMagentaFg magenta contained
+syn keyword lssCyanFg cyan contained
+syn keyword lssLightgrayFg lightgray contained
+syn keyword lssGrayFg gray contained
+syn keyword lssBrightredFg brightred contained
+syn keyword lssBrightgreenFg brightgreen contained
+syn keyword lssYellowFg yellow contained
+syn keyword lssBrightblueFg brightblue contained
+syn keyword lssBrightmagentaFg brightmagenta contained
+syn keyword lssBrightcyanFg brightcyan contained
+syn case match
+
+syn match lssBgColor ":[^:]\+" contained contains=lssRedBg,lssBlueBg,lssGreenBg,lssBrownBg,lssMagentaBg,lssCyanBg,lssLightgrayBg,lssGrayBg,lssBrightredBg,lssBrightgreenBg,lssYellowBg,lssBrightblueBg,lssBrightmagentaBg,lssBrightcyanBg,lssWhiteBg
+
+syn case ignore
+syn keyword lssRedBg red contained
+syn keyword lssBlueBg blue contained
+syn keyword lssGreenBg green contained
+syn keyword lssBrownBg brown contained
+syn keyword lssMagentaBg magenta contained
+syn keyword lssCyanBg cyan contained
+syn keyword lssLightgrayBg lightgray contained
+syn keyword lssGrayBg gray contained
+syn keyword lssBrightredBg brightred contained
+syn keyword lssBrightgreenBg brightgreen contained
+syn keyword lssYellowBg yellow contained
+syn keyword lssBrightblueBg brightblue contained
+syn keyword lssBrightmagentaBg brightmagenta contained
+syn keyword lssBrightcyanBg brightcyan contained
+syn keyword lssWhiteBg white contained
+syn case match
+
+syn match lssComment "#.*$"
+
+" 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_lss_syntax_inits")
+ if version < 508
+ let did_lss_syntax_inits = 1
+ endif
+
+ hi def link lssComment Comment
+ hi def link lssElement Identifier
+
+ hi def lssBold term=bold cterm=bold
+ hi def lssReverse term=reverse cterm=reverse
+ hi def lssUnderline term=underline cterm=underline
+ hi def lssStandout term=standout cterm=standout
+
+ hi def lssRedFg ctermfg=red
+ hi def lssBlueFg ctermfg=blue
+ hi def lssGreenFg ctermfg=green
+ hi def lssBrownFg ctermfg=brown
+ hi def lssMagentaFg ctermfg=magenta
+ hi def lssCyanFg ctermfg=cyan
+ hi def lssGrayFg ctermfg=gray
+ if $COLORTERM == "rxvt"
+ " On rxvt's, bright colors are activated by setting the bold attribute.
+ hi def lssLightgrayFg ctermfg=gray cterm=bold
+ hi def lssBrightredFg ctermfg=red cterm=bold
+ hi def lssBrightgreenFg ctermfg=green cterm=bold
+ hi def lssYellowFg ctermfg=yellow cterm=bold
+ hi def lssBrightblueFg ctermfg=blue cterm=bold
+ hi def lssBrightmagentaFg ctermfg=magenta cterm=bold
+ hi def lssBrightcyanFg ctermfg=cyan cterm=bold
+ else
+ hi def lssLightgrayFg ctermfg=lightgray
+ hi def lssBrightredFg ctermfg=lightred
+ hi def lssBrightgreenFg ctermfg=lightgreen
+ hi def lssYellowFg ctermfg=yellow
+ hi def lssBrightblueFg ctermfg=lightblue
+ hi def lssBrightmagentaFg ctermfg=lightmagenta
+ hi def lssBrightcyanFg ctermfg=lightcyan
+ endif
+
+ hi def lssRedBg ctermbg=red
+ hi def lssBlueBg ctermbg=blue
+ hi def lssGreenBg ctermbg=green
+ hi def lssBrownBg ctermbg=brown
+ hi def lssMagentaBg ctermbg=magenta
+ hi def lssCyanBg ctermbg=cyan
+ hi def lssLightgrayBg ctermbg=lightgray
+ hi def lssGrayBg ctermbg=gray
+ hi def lssBrightredBg ctermbg=lightred
+ hi def lssBrightgreenBg ctermbg=lightgreen
+ hi def lssYellowBg ctermbg=yellow
+ hi def lssBrightblueBg ctermbg=lightblue
+ hi def lssBrightmagentaBg ctermbg=lightmagenta
+ hi def lssBrightcyanBg ctermbg=lightcyan
+ hi def lssWhiteBg ctermbg=white ctermfg=black
+endif
+
+let b:current_syntax = "lss"
+
+" vim: ts=8
diff --git a/runtime/syntax/lua.vim b/runtime/syntax/lua.vim
new file mode 100644
index 000000000..0bcda6202
--- /dev/null
+++ b/runtime/syntax/lua.vim
@@ -0,0 +1,256 @@
+" Vim syntax file
+" Language: Lua 4.0 and Lua 5.0
+" Maintainer: Marcus Aurelius Farias <marcuscf@vant.com.br>
+" First Author: Carlos Augusto Teixeira Mendes <cmendes@inf.puc-rio.br>
+" Last Change: 2003 May 04
+" Options: lua_version = 4 or 5 [default]
+"
+" Still has some syncing problems (long [[strings]])...
+
+" 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
+
+if !exists("lua_version")
+ let lua_version = 5
+endif
+
+syn case match
+
+" Comments
+syn keyword luaTodo contained TODO FIXME XXX
+syn match luaComment "--.*$" contains=luaTodo
+if lua_version > 4
+ syn region luaComment matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
+ syn region luaInnerComment contained transparent start="\[\[" end="\]\]"
+endif
+" First line may start with #!
+syn match luaComment "\%^#!.*"
+
+" 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,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
+syn match luaError ")"
+syn match luaError "}"
+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
+
+" if then else elseif end
+syn keyword luaCond contained else
+
+" then ... end
+syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
+
+" elseif ... then
+syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" 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
+
+" do ... end
+syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" repeat ... until
+syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+
+" 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
+
+" 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
+
+" Following 'else' example. This is another item to those
+" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
+syn keyword luaRepeat contained in
+
+" other keywords
+syn keyword luaStatement return local break
+syn keyword luaOperator and or not
+syn keyword luaConstant nil
+if lua_version > 4
+ syn keyword luaConstant true false
+endif
+
+" Pre processor doesn't exist since Lua 4.0
+" syn match luaPreProc "^\s*$\(debug\|nodebug\|if\|ifnot\|end\|else\|endinput\)\>"
+
+" Strings
+syn match luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
+syn region luaString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
+syn region luaString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
+" Nested strings
+syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
+
+" integer number
+syn match luaNumber "\<[0-9]\+\>"
+" floating point number, with dot, optional exponent
+syn match luaFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match luaFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, without dot, with exponent
+syn match luaFloat "\<[0-9]\+e[-+]\=[0-9]\+\>"
+
+" 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 gcinfo next
+syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
+
+if lua_version == 4
+ syn keyword luaFunc _ALERT _ERRORMESSAGE
+ syn keyword luaFunc call copytagmethods dostring
+ syn keyword luaFunc foreach foreachi getglobal getn
+ syn keyword luaFunc gettagmethod globals newtag
+ syn keyword luaFunc setglobal settag settagmethod sort
+ syn keyword luaFunc tag tinsert tremove
+ syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
+ syn keyword luaFunc openfile closefile flush seek
+ syn keyword luaFunc setlocale execute remove rename tmpname
+ syn keyword luaFunc getenv date clock exit
+ syn keyword luaFunc readfrom writeto appendto read write
+ syn keyword luaFunc PI abs sin cos tan asin
+ syn keyword luaFunc acos atan atan2 ceil floor
+ syn keyword luaFunc mod frexp ldexp sqrt min max log
+ syn keyword luaFunc log10 exp deg rad random
+ syn keyword luaFunc randomseed strlen strsub strlower strupper
+ syn keyword luaFunc strchar strrep ascii strbyte
+ syn keyword luaFunc format strfind gsub
+ syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
+else
+ syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
+ syn keyword luaFunc loadlib loadstring pairs pcall rawequal
+ syn keyword luaFunc require setfenv setmetatable unpack xpcall
+ syn keyword luaFunc LUA_PATH _LOADED _REQUIREDNAME
+" Not sure if all these functions need to be highlighted...
+ 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\.gfind/
+ syn match luaFunc /string\.gsub/
+ syn match luaFunc /table\.concat/
+ syn match luaFunc /table\.foreach/
+ syn match luaFunc /table\.foreachi/
+ syn match luaFunc /table\.getn/
+ syn match luaFunc /table\.sort/
+ syn match luaFunc /table\.insert/
+ syn match luaFunc /table\.remove/
+ syn match luaFunc /table\.setn/
+ 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\.cos/
+ 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/
+ syn match luaFunc /math\.mod/
+ syn match luaFunc /math\.pow/
+ syn match luaFunc /math\.rad/
+ syn match luaFunc /math\.sin/
+ syn match luaFunc /math\.sqrt/
+ syn match luaFunc /math\.tan/
+ 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/
+endif
+
+"syncing method
+syn sync minlines=100
+
+" 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_lua_syntax_inits")
+ if version < 508
+ let did_lua_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink luaStatement Statement
+ HiLink luaRepeat Repeat
+ HiLink luaString String
+ HiLink luaString2 String
+ HiLink luaNumber Number
+ HiLink luaFloat Float
+ HiLink luaOperator Operator
+ HiLink luaConstant Constant
+ HiLink luaCond Conditional
+ HiLink luaFunction Function
+ HiLink luaComment Comment
+ HiLink luaTodo Todo
+ HiLink luaTable Structure
+ HiLink luaError Error
+ HiLink luaSpecial SpecialChar
+ " HiLink luaPreProc PreProc
+ HiLink luaFunc Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lua"
+
+" vim: noet ts=8
diff --git a/runtime/syntax/lynx.vim b/runtime/syntax/lynx.vim
new file mode 100644
index 000000000..1dee1ef79
--- /dev/null
+++ b/runtime/syntax/lynx.vim
@@ -0,0 +1,98 @@
+" Lynx syntax file
+" Filename: lynx.vim
+" Language: Lynx configuration file ( lynx.cfg )
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/lynx.vim
+" Last Change: 2003 May 11
+
+" TODO: more intelligent and complete argument highlighting
+
+" 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 match lynxLeadingWS "^\s*" transparent nextgroup=lynxOption
+
+syn match lynxComment "\(^\|\s\+\)#.*$" contains=lynxTodo
+
+syn keyword lynxTodo TODO NOTE FIXME XXX contained
+
+syn match lynxDelimiter ":" contained nextgroup=lynxBoolean,lynxNumber
+
+syn case ignore
+syn keyword lynxBoolean TRUE FALSE contained
+syn case match
+
+syn match lynxNumber "-\=\<\d\+\>" contained
+
+syn case ignore
+syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS ALWAYS_RESUBMIT_POSTS ALWAYS_TRUSTED_EXEC ASSUME_CHARSET ASSUMED_COLOR contained nextgroup=lynxDelimiter
+syn keyword lynxOption ASSUMED_DOC_CHARSET_CHOICE ASSUME_LOCAL_CHARSET ASSUME_UNREC_CHARSET AUTO_UNCACHE_DIRLISTS contained nextgroup=lynxDelimiter
+syn keyword lynxOption BIBP_BIBHOST BIBP_GLOBAL_SERVER BLOCK_MULTI_BOOKMARKS BOLD_H1 BOLD_HEADERS BOLD_NAME_ANCHORS contained nextgroup=lynxDelimiter
+syn keyword lynxOption CASE_SENSITIVE_ALWAYS_ON CHARACTER_SET CHARSETS_DIRECTORY CHARSET_SWITCH_RULES CHECKMAIL contained nextgroup=lynxDelimiter
+syn keyword lynxOption COLLAPSE_BR_TAGS COLOR CONNECT_TIMEOUT COOKIE_ACCEPT_DOMAINS COOKIE_FILE contained nextgroup=lynxDelimiter
+syn keyword lynxOption COOKIE_LOOSE_INVALID_DOMAINS COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE contained nextgroup=lynxDelimiter
+syn keyword lynxOption COOKIE_STRICT_INVALID_DOMAINS CSO_PROXY CSWING_PATH DEFAULT_BOOKMARK_FILE DEFAULT_CACHE_SIZE contained nextgroup=lynxDelimiter
+syn keyword lynxOption DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS contained nextgroup=lynxDelimiter
+syn keyword lynxOption DEFAULT_USER_MODE DEFAULT_VIRTUAL_MEMORY_SIZE DIRED_MENU DISPLAY_CHARSET_CHOICE DOWNLOADER contained nextgroup=lynxDelimiter
+syn keyword lynxOption EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL FINGER_PROXY FOCUS_WINDOW contained nextgroup=lynxDelimiter
+syn keyword lynxOption FORCE_8BIT_TOUPPER FORCE_EMPTY_HREFLESS_A FORCE_SSL_COOKIES_SECURE FORMS_OPTIONS FTP_PASSIVE contained nextgroup=lynxDelimiter
+syn keyword lynxOption FTP_PROXY GLOBAL_EXTENSION_MAP GLOBAL_MAILCAP GOPHER_PROXY GOTOBUFFER HELPFILE HIDDEN_LINK_MARKER contained nextgroup=lynxDelimiter
+syn keyword lynxOption HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM HTTP_PROXY HTTPS_PROXY INCLUDE contained nextgroup=lynxDelimiter
+syn keyword lynxOption INFOSECS JUMPBUFFER JUMPFILE JUMP_PROMPT JUSTIFY JUSTIFY_MAX_VOID_PERCENT KEYBOARD_LAYOUT KEYMAP contained nextgroup=lynxDelimiter
+syn keyword lynxOption LEFTARROW_IN_TEXTFIELD_PROMPT LIST_FORMAT LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCAL_DOMAIN contained nextgroup=lynxDelimiter
+syn keyword lynxOption LOCAL_EXECUTION_LINKS_ALWAYS_ON LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LOCALHOST_ALIAS contained nextgroup=lynxDelimiter
+syn keyword lynxOption LYNXCGI_DOCUMENT_ROOT LYNXCGI_ENVIRONMENT LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS contained nextgroup=lynxDelimiter
+syn keyword lynxOption MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES MAKE_PSEUDO_ALTS_FOR_INLINES MESSAGESECS contained nextgroup=lynxDelimiter
+syn keyword lynxOption MINIMAL_COMMENTS MULTI_BOOKMARK_SUPPORT NCR_IN_BOOKMARKS NEWS_CHUNK_SIZE NEWS_MAX_CHUNK contained nextgroup=lynxDelimiter
+syn keyword lynxOption NEWS_POSTING NEWSPOST_PROXY NEWS_PROXY NEWSREPLY_PROXY NNTP_PROXY NNTPSERVER NO_DOT_FILES contained nextgroup=lynxDelimiter
+syn keyword lynxOption NO_FILE_REFERER NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NONRESTARTING_SIGWINCH contained nextgroup=lynxDelimiter
+syn keyword lynxOption NO_PROXY NO_REFERER_HEADER NO_TABLE_CENTER OUTGOING_MAIL_CHARSET PARTIAL PARTIAL_THRES contained nextgroup=lynxDelimiter
+syn keyword lynxOption PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP PERSONAL_MAILCAP PREFERRED_CHARSET PREFERRED_LANGUAGE contained nextgroup=lynxDelimiter
+syn keyword lynxOption PREPEND_BASE_TO_SOURCE PREPEND_CHARSET_TO_SOURCE PRETTYSRC PRETTYSRC_SPEC contained nextgroup=lynxDelimiter
+syn keyword lynxOption PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES REFERER_WITH_QUERY REUSE_TEMPFILES contained nextgroup=lynxDelimiter
+syn keyword lynxOption RULE RULESFILE SAVE_SPACE SCAN_FOR_BURIED_NEWS_REFS SCROLLBAR SCROLLBAR_ARROW SEEK_FRAG_AREA_IN_CUR contained nextgroup=lynxDelimiter
+syn keyword lynxOption SEEK_FRAG_MAP_IN_CUR SET_COOKIES SHOW_CURSOR SHOW_KB_RATE SNEWSPOST_PROXY SNEWS_PROXY contained nextgroup=lynxDelimiter
+syn keyword lynxOption SNEWSREPLY_PROXY SOFT_DQUOTES SOURCE_CACHE SOURCE_CACHE_FOR_ABORTED STARTFILE STRIP_DOTDOT_URLS contained nextgroup=lynxDelimiter
+syn keyword lynxOption SUBSTITUTE_UNDERSCORES SUFFIX SUFFIX_ORDER SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP contained nextgroup=lynxDelimiter
+syn keyword lynxOption TEXTFIELDS_NEED_ACTIVATION TIMEOUT TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI UPLOADER contained nextgroup=lynxDelimiter
+syn keyword lynxOption URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USE_FIXED_RECORDS USE_MOUSE USE_SELECT_POPUPS VERBOSE_IMAGES contained nextgroup=lynxDelimiter
+syn keyword lynxOption VIEWER VI_KEYS_ALWAYS_ON WAIS_PROXY XLOADIMAGE_COMMAND contained nextgroup=lynxDelimiter
+syn case match
+
+" NOTE: set this if you want the cfg2html.pl formatting directives to be highlighted
+if exists("lynx_formatting_directives")
+ syn match lynxFormatDir "^\.\(h1\|h2\)\s.*$"
+ syn match lynxFormatDir "^\.\(ex\|nf\)\(\s\+\d\+\)\=$"
+ syn match lynxFormatDir "^\.fi$"
+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_lynx_syn_inits")
+ if version < 508
+ let did_lynx_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink lynxBoolean Boolean
+ HiLink lynxComment Comment
+ HiLink lynxDelimiter Special
+ HiLink lynxFormatDir Special
+ HiLink lynxNumber Number
+ HiLink lynxOption Identifier
+ HiLink lynxTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "lynx"
+
+" vim: ts=8
diff --git a/runtime/syntax/m4.vim b/runtime/syntax/m4.vim
new file mode 100644
index 000000000..ef60a8ff7
--- /dev/null
+++ b/runtime/syntax/m4.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language: M4
+" Maintainer: Claudio Fleiner
+" URL: http://www.fleiner.com/vim/syntax/m4.vim
+" Last Change: 2001 Apr 26
+
+" This file will highlight user function calls if they use only
+" capital letters and have at least one argument (i.e. the '('
+" must be there). Let me know if this is a problem.
+
+" For version 5.x: Clear all syntax items
+" For version 6.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
+" we define it here so that included files can test for it
+ let main_syntax='m4'
+endif
+
+" define the m4 syntax
+syn match m4Variable contained "\$\d\+"
+syn match m4Special contained "$[@*#]"
+syn match m4Comment "dnl\>.*" contains=SpellErrors
+syn match m4Constants "\(\<m4_\)\=__file__"
+syn match m4Constants "\(\<m4_\)\=__line__"
+syn keyword m4Constants divnum sysval m4_divnum m4_sysval
+syn region m4Paren matchgroup=m4Delimiter start="(" end=")" contained contains=@m4Top
+syn region m4Command matchgroup=m4Function start="\<\(m4_\)\=\(define\|defn\|pushdef\)(" end=")" contains=@m4Top
+syn region m4Command matchgroup=m4Preproc start="\<\(m4_\)\=\(include\|sinclude\)("he=e-1 end=")" contains=@m4Top
+syn region m4Command matchgroup=m4Statement start="\<\(m4_\)\=\(syscmd\|esyscmd\|ifdef\|ifelse\|indir\|builtin\|shift\|errprint\|m4exit\|changecom\|changequote\|changeword\|m4wrap\|debugfile\|divert\|undivert\)("he=e-1 end=")" contains=@m4Top
+syn region m4Command matchgroup=m4builtin start="\<\(m4_\)\=\(len\|index\|regexp\|substr\|translit\|patsubst\|format\|incr\|decr\|eval\|maketemp\)("he=e-1 end=")" contains=@m4Top
+syn keyword m4Statement divert undivert
+syn region m4Command matchgroup=m4Type start="\<\(m4_\)\=\(undefine\|popdef\)("he=e-1 end=")" contains=@m4Top
+syn region m4Function matchgroup=m4Type start="\<[_A-Z][_A-Z0-9]*("he=e-1 end=")" contains=@m4Top
+syn region m4String start="`" end="'" contained contains=@m4Top,@m4StringContents,SpellErrors
+syn cluster m4Top contains=m4Comment,m4Constants,m4Special,m4Variable,m4String,m4Paren,m4Command,m4Statement,m4Function
+
+" 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_m4_syn_inits")
+ if version < 508
+ let did_m4_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink m4Delimiter Delimiter
+ HiLink m4Comment Comment
+ HiLink m4Function Function
+ HiLink m4Keyword Keyword
+ HiLink m4Special Special
+ HiLink m4String String
+ HiLink m4Statement Statement
+ HiLink m4Preproc PreProc
+ HiLink m4Type Type
+ HiLink m4Special Special
+ HiLink m4Variable Special
+ HiLink m4Constants Constant
+ HiLink m4Builtin Statement
+ delcommand HiLink
+endif
+
+let b:current_syntax = "m4"
+
+if main_syntax == 'm4'
+ unlet main_syntax
+endif
+
+" vim: ts=4
diff --git a/runtime/syntax/mail.vim b/runtime/syntax/mail.vim
new file mode 100644
index 000000000..6fc0afb9d
--- /dev/null
+++ b/runtime/syntax/mail.vim
@@ -0,0 +1,92 @@
+" Vim syntax file
+" Language: Mail file
+" Previous Maintainer: Felix von Leitner <leitner@math.fu-berlin.de>
+" Maintainer: Gautam Iyer <gautam@math.uchicago.edu>
+" Last Change: Mon 23 Feb 2004 02:26:16 PM CST
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" 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
+" also highlighted.
+
+" Syntax clusters
+syn cluster mailHeaderFields contains=mailHeaderKey,mailSubject,mailHeaderEmail,@mailLinks
+syn cluster mailLinks contains=mailURL,mailEmail
+syn cluster mailQuoteExps contains=mailQuoteExp1,mailQuoteExp2,mailQuoteExp3,mailQuoteExp4,mailQuoteExp5,mailQuoteExp6
+
+syn case match
+" For "From " matching case is required. The "From " is not matched in quoted
+" emails
+syn region mailHeader contains=@mailHeaderFields start="^From " skip="^\s" end="\v^[-A-Za-z0-9]*([^-A-Za-z0-9:]|$)"me=s-1
+syn match mailHeaderKey contained contains=mailEmail "^From\s.*$"
+
+syn case ignore
+" Nothing else depends on case. Headers in properly quoted (with "> " or ">")
+" emails are matched
+syn region mailHeader keepend contains=@mailHeaderFields,@mailQuoteExps start="^\z(\(> \?\)*\)\v(newsgroups|from|((in-)?reply-)?to|b?cc|subject|return-path|received|date|replied):" skip="^\z1\s" end="\v^\z1[-a-z0-9]*([^-a-z0-9:]|$)"me=s-1 end="\v^\z1@!"me=s-1 end="\v^\z1(\> ?)+"me=s-1
+
+syn region mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@mailQuoteExps start="\v(^(\> ?)*)@<=(to|b?cc):" skip=",$" end="$"
+syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail "\v(^(\> ?)*)@<=(from|reply-to):.*$"
+syn match mailHeaderKey contained "\v(^(\> ?)*)@<=date:"
+syn match mailSubject contained "\v(^(\> ?)*)@<=subject:.*$" contains=@Spell
+
+" Anything in the header between < and > is an email address
+syn match mailHeaderEmail contained "<.\{-}>"
+
+" Mail Signatures. (Begin with "--", end with change in quote level)
+syn region mailSignature keepend contains=@mailLinks,@mailQuoteExps start="^\z(\(> \?\)*\)-- *$" end="^\z1$" end="^\z1\@!"me=s-1 end="^\z1\(> \?\)\+"me=s-1
+
+" URLs start with a known protocol or www,web,w3.
+syn match mailURL `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^' <>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^' <>"]+)[a-z0-9/]`
+syn match mailEmail "\v[_=a-z\./+0-9-]+\@[a-z0-9._-]+\a{2}"
+
+" Make sure quote markers in regions (header / signature) have correct color
+syn match mailQuoteExp1 contained "\v^(\> ?)"
+syn match mailQuoteExp2 contained "\v^(\> ?){2}"
+syn match mailQuoteExp3 contained "\v^(\> ?){3}"
+syn match mailQuoteExp4 contained "\v^(\> ?){4}"
+syn match mailQuoteExp5 contained "\v^(\> ?){5}"
+syn match mailQuoteExp6 contained "\v^(\> ?){6}"
+
+" Even and odd quoted lines. order is imporant here!
+syn match mailQuoted1 contains=mailHeader,@mailLinks,mailSignature "^\([a-z]\+>\|[]|}>]\).*$"
+syn match mailQuoted2 contains=mailHeader,@mailLinks,mailSignature "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{2}.*$"
+syn match mailQuoted3 contains=mailHeader,@mailLinks,mailSignature "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{3}.*$"
+syn match mailQuoted4 contains=mailHeader,@mailLinks,mailSignature "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{4}.*$"
+syn match mailQuoted5 contains=mailHeader,@mailLinks,mailSignature "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{5}.*$"
+syn match mailQuoted6 contains=mailHeader,@mailLinks,mailSignature "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{6}.*$"
+
+" Need to sync on the header. Assume we can do that within 100 lines
+if exists("mail_minlines")
+ exec "syn sync minlines=" . mail_minlines
+else
+ syn sync minlines=100
+endif
+
+" Define the default highlighting.
+hi def link mailHeader Statement
+hi def link mailHeaderKey Type
+hi def link mailSignature PreProc
+hi def link mailHeaderEmail mailEmail
+hi def link mailEmail Special
+hi def link mailURL String
+hi def link mailSubject LineNR
+hi def link mailQuoted1 Comment
+hi def link mailQuoted3 mailQuoted1
+hi def link mailQuoted5 mailQuoted1
+hi def link mailQuoted2 Identifier
+hi def link mailQuoted4 mailQuoted2
+hi def link mailQuoted6 mailQuoted2
+hi def link mailQuoteExp1 mailQuoted1
+hi def link mailQuoteExp2 mailQuoted2
+hi def link mailQuoteExp3 mailQuoted3
+hi def link mailQuoteExp4 mailQuoted4
+hi def link mailQuoteExp5 mailQuoted5
+hi def link mailQuoteExp6 mailQuoted6
+
+let b:current_syntax = "mail"
diff --git a/runtime/syntax/mailcap.vim b/runtime/syntax/mailcap.vim
new file mode 100644
index 000000000..6d6270709
--- /dev/null
+++ b/runtime/syntax/mailcap.vim
@@ -0,0 +1,54 @@
+" Vim syntax file
+" Language: Mailcap configuration file
+" Maintainer: Doug Kearns
+" Last Change: 2002 November 24
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/mailcap.vim
+
+" 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 match mailcapComment "^#.*"
+
+syn region mailcapString start=+"+ end=+"+ contains=mailcapSpecial oneline
+
+syn match mailcapDelimiter "\\\@<!;"
+
+syn match mailcapSpecial "\\\@<!%[nstF]"
+syn match mailcapSpecial "\\\@<!%{[^}]*}"
+
+syn case ignore
+syn match mailcapFlag "\(=\s*\)\@<!\<\(needsterminal\|copiousoutput\|x-\w\+\)\>"
+syn match mailcapFieldname "\<\(compose\|composetyped\|print\|edit\|test\|x11-bitmap\|nametemplate\|textualnewlines\|description\|x-\w+\)\>\ze\s*="
+syn match mailcapTypeField "^\(text\|image\|audio\|video\|application\|message\|multipart\|model\|x-[[:graph:]]\+\)\(/\(\*\|[[:graph:]]\+\)\)\=\ze\s*;"
+syn case match
+
+" 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_mailcap_syntax_inits")
+ if version < 508
+ let did_mailcap_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mailcapComment Comment
+ HiLink mailcapDelimiter Delimiter
+ HiLink mailcapFlag Statement
+ HiLink mailcapFieldname Statement
+ HiLink mailcapSpecial Identifier
+ HiLink mailcapTypeField Type
+ HiLink mailcapString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mailcap"
+
+" vim: tabstop=8
diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim
new file mode 100644
index 000000000..85da9800e
--- /dev/null
+++ b/runtime/syntax/make.vim
@@ -0,0 +1,137 @@
+" Vim syntax file
+" Language: Makefile
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/make.vim
+" Last Change: 2004 Apr 30
+
+" 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
+
+" some special characters
+syn match makeSpecial "^\s*[@-]\+"
+syn match makeNextLine "\\\n\s*"
+
+" some directives
+syn match makePreCondit "^\s*\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)"
+syn match makeInclude "^\s*[-s]\=include"
+syn match makeStatement "^\s*vpath"
+syn match makeExport "^\s*\(export\|unexport\)\>"
+syn match makeOverride "^\s*override"
+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
+
+" Microsoft Makefile specials
+syn case ignore
+syn match makeInclude "^!\s*include"
+syn match makePreCondit "!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
+syn case match
+
+" identifiers
+syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString
+syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString
+syn match makeIdent "\$\$\w*"
+syn match makeIdent "\$[^({]"
+syn match makeIdent "^\s*\a\w*\s*[:+?!*]="me=e-2
+syn match makeIdent "^\s*\a\w*\s*="me=e-1
+syn match makeIdent "%"
+
+" Makefile.in variables
+syn match makeConfig "@[A-Za-z0-9_]\+@"
+
+" 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 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
+
+syn region makeSpecTarget transparent matchgroup=makeSpecTarget start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>:\{1,2}[^:=]"rs=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
+syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>::\=\s*$" contains=makeIdent skipnl nextgroup=makeCommands,makeCommandError
+
+syn match makeCommandError "^\s\+\S.*" contained
+syn region makeCommands start=";"hs=s+1 start="^\t" end="^[^\t#]"me=e-1,re=e-1 end="^$" contained contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString nextgroup=makeCommandError
+syn match makeCmdNextLine "\\\n."he=e-1 contained
+
+
+" Statements / Functions (GNU make)
+syn match makeStatement contained "(\(subst\|addprefix\|addsuffix\|basename\|call\|dir\|error\|filter-out\|filter\|findstring\|firstword\|foreach\|if\|join\|notdir\|origin\|patsubst\|shell\|sort\|strip\|suffix\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
+
+" Comment
+if exists("make_microsoft")
+ syn match makeComment "#.*" contains=makeTodo
+else
+ syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=makeTodo
+ syn match makeComment "#$"
+endif
+syn keyword makeTodo TODO FIXME XXX contained
+
+" match escaped quotes and any other escaped character
+" except for $, as a backslash in front of a $ does
+" not make it a standard character, but instead it will
+" still act as the beginning of a variable
+" The escaped char is not highlightet currently
+syn match makeEscapedChar "\\[^$]"
+
+
+syn region makeDString start=+\(\\\)\@<!"+ skip=+\\.+ end=+"+ contains=makeIdent
+syn region makeSString start=+\(\\\)\@<!'+ skip=+\\.+ end=+'+ contains=makeIdent
+syn region makeBString start=+\(\\\)\@<!`+ skip=+\\.+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine
+
+" Syncing
+syn sync minlines=20 maxlines=200
+
+" Sync on Make command block region: When searching backwards hits a line that
+" can't be a command or a comment, use makeCommands if it looks like a target,
+" NONE otherwise.
+syn sync match makeCommandSync groupthere NONE "^[^\t#]"
+syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"
+syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$"
+
+" 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_make_syn_inits")
+ if version < 508
+ let did_make_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink makeNextLine makeSpecial
+ HiLink makeCmdNextLine makeSpecial
+ HiLink makeSpecTarget Statement
+ if !exists("make_no_commands")
+ HiLink makeCommands Number
+ endif
+ HiLink makeImplicit Function
+ HiLink makeTarget Function
+ HiLink makeInclude Include
+ HiLink makePreCondit PreCondit
+ HiLink makeStatement Statement
+ HiLink makeIdent Identifier
+ HiLink makeSpecial Special
+ HiLink makeComment Comment
+ HiLink makeDString String
+ HiLink makeSString String
+ HiLink makeBString Function
+ HiLink makeError Error
+ HiLink makeTodo Todo
+ HiLink makeDefine Define
+ HiLink makeCommandError Error
+ HiLink makeConfig PreCondit
+ delcommand HiLink
+endif
+
+let b:current_syntax = "make"
+
+" vim: ts=8
diff --git a/runtime/syntax/man.vim b/runtime/syntax/man.vim
new file mode 100644
index 000000000..347180c8d
--- /dev/null
+++ b/runtime/syntax/man.vim
@@ -0,0 +1,67 @@
+" Vim syntax file
+" Language: Man page
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Previous Maintainer: Gautam H. Mudunuri <gmudunur@informatica.com>
+" Version Info:
+" Last Change: 2004 May 16
+
+" Additional highlighting by Johannes Tanzler <johannes.tanzler@aon.at>:
+" * manSubHeading
+" * manSynopsis (only for sections 2 and 3)
+
+" 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
+
+" Get the CTRL-H syntax to handle backspaced text
+if version >= 600
+ runtime! syntax/ctrlh.vim
+else
+ source <sfile>:p:h/ctrlh.vim
+endif
+
+syn case ignore
+syn match manReference "\f\+([1-9][a-z]\=)"
+syn match manTitle "^\f\+([0-9]\+[a-z]\=).*"
+syn match manSectionHeading "^[a-z][a-z ]*[a-z]$"
+syn match manSubHeading "^\s\{3\}[a-z][a-z ]*[a-z]$"
+syn match manOptionDesc "^\s*[+-][a-z0-9]\S*"
+syn match manLongOptionDesc "^\s*--[a-z0-9-]\S*"
+" syn match manHistory "^[a-z].*last change.*$"
+
+if getline(1) =~ '^[a-zA-Z_]\+([23])'
+ syntax include @cCode <sfile>:p:h/c.vim
+ syn match manCFuncDefinition display "\<\h\w*\>\s*("me=e-1 contained
+ syn region manSynopsis start="^SYNOPSIS"hs=s+8 end="^\u\+\s*$"he=e-12 keepend contains=manSectionHeading,@cCode,manCFuncDefinition
+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_man_syn_inits")
+ if version < 508
+ let did_man_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink manTitle Title
+ HiLink manSectionHeading Statement
+ HiLink manOptionDesc Constant
+ HiLink manLongOptionDesc Constant
+ HiLink manReference PreProc
+ HiLink manSubHeading Function
+ HiLink manCFuncDefinition Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "man"
+
+" vim:ts=8 sts=2 sw=2:
diff --git a/runtime/syntax/manual.vim b/runtime/syntax/manual.vim
new file mode 100644
index 000000000..5ac045f60
--- /dev/null
+++ b/runtime/syntax/manual.vim
@@ -0,0 +1,25 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Jun 04
+
+" This file is used for ":syntax manual".
+" It installs the Syntax autocommands, but no the FileType autocommands.
+
+if !has("syntax")
+ finish
+endif
+
+" Load the Syntax autocommands and set the default methods for highlighting.
+if !exists("syntax_on")
+ so <sfile>:p:h/synload.vim
+endif
+
+let syntax_manual = 1
+
+" Remove the connection between FileType and Syntax autocommands.
+silent! au! syntaxset FileType
+
+" If the GUI is already running, may still need to install the FileType menu.
+if has("gui_running") && !exists("did_install_syntax_menu")
+ source $VIMRUNTIME/menu.vim
+endif
diff --git a/runtime/syntax/maple.vim b/runtime/syntax/maple.vim
new file mode 100644
index 000000000..cda7c7516
--- /dev/null
+++ b/runtime/syntax/maple.vim
@@ -0,0 +1,582 @@
+" Vim syntax file
+" Language: Maple V (based on release 4)
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Mar 10, 2004
+" Version: 4
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Package Function Selection: {{{1
+" Because there are a lot of packages, and because of the potential for namespace
+" clashes, this version of <maple.vim> needs the user to select which, if any,
+" package functions should be highlighted. Select your packages and put into your
+" <.vimrc> none or more of the lines following let ...=1 lines:
+"
+" if exists("mvpkg_all")
+" ...
+" endif
+"
+" *OR* let mvpkg_all=1
+
+
+" 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
+
+" Iskeyword Effects: {{{1
+if version < 600
+ set iskeyword=$,48-57,_,a-z,@-Z
+else
+ setlocal iskeyword=$,48-57,_,a-z,@-Z
+endif
+
+" Package Selection: {{{1
+" allow user to simply select all packages for highlighting
+if exists("mvpkg_all")
+ let mv_DEtools = 1
+ let mv_Galois = 1
+ let mv_GaussInt = 1
+ let mv_LREtools = 1
+ let mv_combinat = 1
+ let mv_combstruct = 1
+ let mv_difforms = 1
+ let mv_finance = 1
+ let mv_genfunc = 1
+ let mv_geometry = 1
+ let mv_grobner = 1
+ let mv_group = 1
+ let mv_inttrans = 1
+ let mv_liesymm = 1
+ let mv_linalg = 1
+ let mv_logic = 1
+ let mv_networks = 1
+ let mv_numapprox = 1
+ let mv_numtheory = 1
+ let mv_orthopoly = 1
+ let mv_padic = 1
+ let mv_plots = 1
+ let mv_plottools = 1
+ let mv_powseries = 1
+ let mv_process = 1
+ let mv_simplex = 1
+ let mv_stats = 1
+ let mv_student = 1
+ let mv_sumtools = 1
+ let mv_tensor = 1
+ let mv_totorder = 1
+endif
+
+" Parenthesis/curly/brace sanity checker: {{{1
+syn region mvZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,mvError,mvBraceError,mvCurlyError
+syn region mvZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,mvError,mvBraceError,mvParenError
+syn region mvZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,mvError,mvCurlyError,mvParenError
+syn match mvError "[)\]}]"
+syn match mvBraceError "[)}]" contained
+syn match mvCurlyError "[)\]]" contained
+syn match mvParenError "[\]}]" contained
+syn match mvComma "[,;:]"
+syn match mvSemiError "[;:]" contained
+
+" Maple V Packages, circa Release 4: {{{1
+syn keyword mvPackage DEtools difforms group networks plots stats
+syn keyword mvPackage Galois finance inttrans numapprox plottools student
+syn keyword mvPackage GaussInt genfunc liesymm numtheory powseries sumtools
+syn keyword mvPackage LREtools geometry linalg orthopoly process tensor
+syn keyword mvPackage combinat grobner logic padic simplex totorder
+syn keyword mvPackage combstruct
+
+" Language Support: {{{1
+syn keyword mvTodo contained TODO
+syn region mvString start=+`+ skip=+``+ end=+`+ keepend contains=mvTodo
+syn region mvDelayEval start=+'+ end=+'+ keepend contains=ALLBUT,mvError,mvBraceError,mvCurlyError,mvParenError,mvSemiError
+syn match mvVarAssign "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:=" contains=mvAssign
+syn match mvAssign ":=" contained
+
+" Lower-Priority Operators: {{{1
+syn match mvOper "\."
+
+" Number handling: {{{1
+syn match mvNumber "\<\d\+" " integer
+ syn match mvNumber "[-+]\=\.\d\+" " . integer
+syn match mvNumber "\<\d\+\.\d\+" " integer . integer
+syn match mvNumber "\<\d\+\." " integer .
+syn match mvNumber "\<\d\+\.\." contains=mvRange " integer ..
+
+syn match mvNumber "\<\d\+e[-+]\=\d\+" " integer e [-+] integer
+syn match mvNumber "[-+]\=\.\d\+e[-+]\=\d\+" " . integer e [-+] integer
+syn match mvNumber "\<\d\+\.\d*e[-+]\=\d\+" " integer . [integer] e [-+] integer
+
+syn match mvNumber "[-+]\d\+" " integer
+syn match mvNumber "[-+]\d\+\.\d\+" " integer . integer
+syn match mvNumber "[-+]\d\+\." " integer .
+syn match mvNumber "[-+]\d\+\.\." contains=mvRange " integer ..
+
+syn match mvNumber "[-+]\d\+e[-+]\=\d\+" " integer e [-+] integer
+syn match mvNumber "[-+]\d\+\.\d*e[-+]\=\d\+" " integer . [integer] e [-+] integer
+
+syn match mvRange "\.\."
+
+" Operators: {{{1
+syn keyword mvOper and not or
+syn match mvOper "<>\|[<>]=\|[<>]\|="
+syn match mvOper "&+\|&-\|&\*\|&\/\|&"
+syn match mvError "\.\.\."
+
+" MapleV Statements: ? statement {{{1
+" Split into booleans, conditionals, operators, repeat-logic, etc
+syn keyword mvBool true false
+syn keyword mvCond elif else fi if then
+
+syn keyword mvRepeat by for in to
+syn keyword mvRepeat do from od while
+
+syn keyword mvSpecial NULL
+syn match mvSpecial "\[\]\|{}"
+
+syn keyword mvStatement Order fail options read save
+syn keyword mvStatement break local point remember stop
+syn keyword mvStatement done mod proc restart with
+syn keyword mvStatement end mods quit return
+syn keyword mvStatement error next
+
+" Builtin Constants: ? constants {{{1
+syn keyword mvConstant Catalan I gamma infinity
+syn keyword mvConstant FAIL Pi
+
+" Comments: DEBUG, if in a comment, is specially highlighted. {{{1
+syn keyword mvDebug contained DEBUG
+syn cluster mvCommentGroup contains=mvTodo,mvDebug,@Spell
+syn match mvComment "#.*$" contains=@mvCommentGroup
+
+" Basic Library Functions: ? index[function]
+syn keyword mvLibrary $ @ @@ ERROR
+syn keyword mvLibrary AFactor KelvinHer arctan factor log rhs
+syn keyword mvLibrary AFactors KelvinKei arctanh factors log10 root
+syn keyword mvLibrary AiryAi KelvinKer argument fclose lprint roots
+syn keyword mvLibrary AiryBi LambertW array feof map round
+syn keyword mvLibrary AngerJ Lcm assign fflush map2 rsolve
+syn keyword mvLibrary Berlekamp LegendreE assigned filepos match savelib
+syn keyword mvLibrary BesselI LegendreEc asspar fixdiv matrix scanf
+syn keyword mvLibrary BesselJ LegendreEc1 assume float max searchtext
+syn keyword mvLibrary BesselK LegendreF asubs floor maximize sec
+syn keyword mvLibrary BesselY LegendreKc asympt fnormal maxnorm sech
+syn keyword mvLibrary Beta LegendreKc1 attribute fopen maxorder select
+syn keyword mvLibrary C LegendrePi bernstein forget member seq
+syn keyword mvLibrary Chi LegendrePic branches fortran min series
+syn keyword mvLibrary Ci LegendrePic1 bspline fprintf minimize setattribute
+syn keyword mvLibrary CompSeq Li cat frac minpoly shake
+syn keyword mvLibrary Content Linsolve ceil freeze modp showprofile
+syn keyword mvLibrary D MOLS chrem fremove modp1 showtime
+syn keyword mvLibrary DESol Maple_floats close frontend modp2 sign
+syn keyword mvLibrary Det MeijerG close fscanf modpol signum
+syn keyword mvLibrary Diff Norm coeff fsolve mods simplify
+syn keyword mvLibrary Dirac Normal coeffs galois msolve sin
+syn keyword mvLibrary DistDeg Nullspace coeftayl gc mtaylor singular
+syn keyword mvLibrary Divide Power collect gcd mul sinh
+syn keyword mvLibrary Ei Powmod combine gcdex nextprime sinterp
+syn keyword mvLibrary Eigenvals Prem commutat genpoly nops solve
+syn keyword mvLibrary EllipticCE Primfield comparray harmonic norm sort
+syn keyword mvLibrary EllipticCK Primitive compoly has normal sparse
+syn keyword mvLibrary EllipticCPi Primpart conjugate hasfun numboccur spline
+syn keyword mvLibrary EllipticE ProbSplit content hasoption numer split
+syn keyword mvLibrary EllipticF Product convergs hastype op splits
+syn keyword mvLibrary EllipticK Psi convert heap open sprem
+syn keyword mvLibrary EllipticModulus Quo coords history optimize sprintf
+syn keyword mvLibrary EllipticNome RESol copy hypergeom order sqrfree
+syn keyword mvLibrary EllipticPi Randpoly cos iFFT parse sqrt
+syn keyword mvLibrary Eval Randprime cosh icontent pclose sscanf
+syn keyword mvLibrary Expand Ratrecon cost identity pclose ssystem
+syn keyword mvLibrary FFT Re cot igcd pdesolve stack
+syn keyword mvLibrary Factor Rem coth igcdex piecewise sturm
+syn keyword mvLibrary Factors Resultant csc ilcm plot sturmseq
+syn keyword mvLibrary FresnelC RootOf csch ilog plot3d subs
+syn keyword mvLibrary FresnelS Roots csgn ilog10 plotsetup subsop
+syn keyword mvLibrary Fresnelf SPrem dawson implicitdiff pochhammer substring
+syn keyword mvLibrary Fresnelg Searchtext define indets pointto sum
+syn keyword mvLibrary Frobenius Shi degree index poisson surd
+syn keyword mvLibrary GAMMA Si denom indexed polar symmdiff
+syn keyword mvLibrary GaussAGM Smith depends indices polylog symmetric
+syn keyword mvLibrary Gaussejord Sqrfree diagonal inifcn polynom system
+syn keyword mvLibrary Gausselim Ssi diff ininame powmod table
+syn keyword mvLibrary Gcd StruveH dilog initialize prem tan
+syn keyword mvLibrary Gcdex StruveL dinterp insert prevprime tanh
+syn keyword mvLibrary HankelH1 Sum disassemble int primpart testeq
+syn keyword mvLibrary HankelH2 Svd discont interface print testfloat
+syn keyword mvLibrary Heaviside TEXT discrim interp printf thaw
+syn keyword mvLibrary Hermite Trace dismantle invfunc procbody thiele
+syn keyword mvLibrary Im WeberE divide invztrans procmake time
+syn keyword mvLibrary Indep WeierstrassP dsolve iostatus product translate
+syn keyword mvLibrary Interp WeierstrassPPrime eliminate iperfpow proot traperror
+syn keyword mvLibrary Inverse WeierstrassSigma ellipsoid iquo property trigsubs
+syn keyword mvLibrary Irreduc WeierstrassZeta entries iratrecon protect trunc
+syn keyword mvLibrary Issimilar Zeta eqn irem psqrt type
+syn keyword mvLibrary JacobiAM abs erf iroot quo typematch
+syn keyword mvLibrary JacobiCD add erfc irreduc radnormal unames
+syn keyword mvLibrary JacobiCN addcoords eulermac iscont radsimp unapply
+syn keyword mvLibrary JacobiCS addressof eval isdifferentiable rand unassign
+syn keyword mvLibrary JacobiDC algebraic evala isolate randomize unload
+syn keyword mvLibrary JacobiDN algsubs evalapply ispoly randpoly unprotect
+syn keyword mvLibrary JacobiDS alias evalb isqrfree range updatesR4
+syn keyword mvLibrary JacobiNC allvalues evalc isqrt rationalize userinfo
+syn keyword mvLibrary JacobiND anames evalf issqr ratrecon value
+syn keyword mvLibrary JacobiNS antisymm evalfint latex readbytes vector
+syn keyword mvLibrary JacobiSC applyop evalgf lattice readdata verify
+syn keyword mvLibrary JacobiSD arccos evalhf lcm readlib whattype
+syn keyword mvLibrary JacobiSN arccosh evalm lcoeff readline with
+syn keyword mvLibrary JacobiTheta1 arccot evaln leadterm readstat writebytes
+syn keyword mvLibrary JacobiTheta2 arccoth evalr length realroot writedata
+syn keyword mvLibrary JacobiTheta3 arccsc exp lexorder recipoly writeline
+syn keyword mvLibrary JacobiTheta4 arccsch expand lhs rem writestat
+syn keyword mvLibrary JacobiZeta arcsec expandoff limit remove writeto
+syn keyword mvLibrary KelvinBei arcsech expandon ln residue zip
+syn keyword mvLibrary KelvinBer arcsin extract lnGAMMA resultant ztrans
+syn keyword mvLibrary KelvinHei arcsinh
+
+
+" == PACKAGES ======================================================= {{{1
+" Note: highlighting of package functions is now user-selectable by package.
+
+" Package: DEtools differential equations tools {{{2
+if exists("mv_DEtools")
+ syn keyword mvPkg_DEtools DEnormal Dchangevar autonomous dfieldplot reduceOrder untranslate
+ syn keyword mvPkg_DEtools DEplot PDEchangecoords convertAlg indicialeq regularsp varparam
+ syn keyword mvPkg_DEtools DEplot3d PDEplot convertsys phaseportrait translate
+endif
+
+" Package: Domains: create domains of computation {{{2
+if exists("mv_Domains")
+endif
+
+" Package: GF: Galois Fields {{{2
+if exists("mv_GF")
+ syn keyword mvPkg_Galois galois
+endif
+
+" Package: GaussInt: Gaussian Integers {{{2
+if exists("mv_GaussInt")
+ syn keyword mvPkg_GaussInt GIbasis GIfactor GIissqr GInorm GIquadres GIsmith
+ syn keyword mvPkg_GaussInt GIchrem GIfactors GIlcm GInormal GIquo GIsqrfree
+ syn keyword mvPkg_GaussInt GIdivisor GIgcd GImcmbine GIorder GIrem GIsqrt
+ syn keyword mvPkg_GaussInt GIfacpoly GIgcdex GInearest GIphi GIroots GIunitnormal
+ syn keyword mvPkg_GaussInt GIfacset GIhermite GInodiv GIprime GIsieve
+endif
+
+" Package: LREtools: manipulate linear recurrence relations {{{2
+if exists("mv_LREtools")
+ syn keyword mvPkg_LREtools REcontent REprimpart REtodelta delta hypergeomsols ratpolysols
+ syn keyword mvPkg_LREtools REcreate REreduceorder REtoproc dispersion polysols shift
+ syn keyword mvPkg_LREtools REplot REtoDE constcoeffsol
+endif
+
+" Package: combinat: combinatorial functions {{{2
+if exists("mv_combinat")
+ syn keyword mvPkg_combinat Chi composition graycode numbcomb permute randperm
+ syn keyword mvPkg_combinat bell conjpart inttovec numbcomp powerset stirling1
+ syn keyword mvPkg_combinat binomial decodepart lastpart numbpart prevpart stirling2
+ syn keyword mvPkg_combinat cartprod encodepart multinomial numbperm randcomb subsets
+ syn keyword mvPkg_combinat character fibonacci nextpart partition randpart vectoint
+ syn keyword mvPkg_combinat choose firstpart
+endif
+
+" Package: combstruct: combinatorial structures {{{2
+if exists("mv_combstruct")
+ syn keyword mvPkg_combstruct allstructs draw iterstructs options specification structures
+ syn keyword mvPkg_combstruct count finished nextstruct
+endif
+
+" Package: difforms: differential forms {{{2
+if exists("mv_difforms")
+ syn keyword mvPkg_difforms const defform formpart parity scalarpart wdegree
+ syn keyword mvPkg_difforms d form mixpar scalar simpform wedge
+endif
+
+" Package: finance: financial mathematics {{{2
+if exists("mv_finance")
+ syn keyword mvPkg_finance amortization cashflows futurevalue growingperpetuity mv_finance presentvalue
+ syn keyword mvPkg_finance annuity effectiverate growingannuity levelcoupon perpetuity yieldtomaturity
+ syn keyword mvPkg_finance blackscholes
+endif
+
+" Package: genfunc: rational generating functions {{{2
+if exists("mv_genfunc")
+ syn keyword mvPkg_genfunc rgf_charseq rgf_expand rgf_hybrid rgf_pfrac rgf_sequence rgf_term
+ syn keyword mvPkg_genfunc rgf_encode rgf_findrecur rgf_norm rgf_relate rgf_simp termscale
+endif
+
+" Package: geometry: Euclidean geometry {{{2
+if exists("mv_geometry")
+ syn keyword mvPkg_geometry circle dsegment hyperbola parabola segment triangle
+ syn keyword mvPkg_geometry conic ellipse line point square
+endif
+
+" Package: grobner: Grobner bases {{{2
+if exists("mv_grobner")
+ syn keyword mvPkg_grobner finduni gbasis leadmon normalf solvable spoly
+ syn keyword mvPkg_grobner finite gsolve
+endif
+
+" Package: group: permutation and finitely-presented groups {{{2
+if exists("mv_group")
+ syn keyword mvPkg_group DerivedS areconjugate cosets grouporder issubgroup permrep
+ syn keyword mvPkg_group LCS center cosrep inter mulperms pres
+ syn keyword mvPkg_group NormalClosure centralizer derived invperm normalizer subgrel
+ syn keyword mvPkg_group RandElement convert grelgroup isabelian orbit type
+ syn keyword mvPkg_group Sylow core groupmember isnormal permgroup
+endif
+
+" Package: inttrans: integral transforms {{{2
+if exists("mv_inttrans")
+ syn keyword mvPkg_inttrans addtable fouriercos hankel invfourier invlaplace mellin
+ syn keyword mvPkg_inttrans fourier fouriersin hilbert invhilbert laplace
+endif
+
+" Package: liesymm: Lie symmetries {{{2
+if exists("mv_liesymm")
+ syn keyword mvPkg_liesymm &^ TD depvars getform mixpar vfix
+ syn keyword mvPkg_liesymm &mod annul determine hasclosure prolong wcollect
+ syn keyword mvPkg_liesymm Eta autosimp dvalue hook reduce wdegree
+ syn keyword mvPkg_liesymm Lie close extvars indepvars setup wedgeset
+ syn keyword mvPkg_liesymm Lrank d getcoeff makeforms translate wsubs
+endif
+
+" Package: linalg: Linear algebra {{{2
+if exists("mv_linalg")
+ syn keyword mvPkg_linalg GramSchmidt coldim equal indexfunc mulcol singval
+ syn keyword mvPkg_linalg JordanBlock colspace exponential innerprod multiply smith
+ syn keyword mvPkg_linalg LUdecomp colspan extend intbasis norm stack
+ syn keyword mvPkg_linalg QRdecomp companion ffgausselim inverse normalize submatrix
+ syn keyword mvPkg_linalg addcol cond fibonacci ismith orthog subvector
+ syn keyword mvPkg_linalg addrow copyinto forwardsub issimilar permanent sumbasis
+ syn keyword mvPkg_linalg adjoint crossprod frobenius iszero pivot swapcol
+ syn keyword mvPkg_linalg angle curl gausselim jacobian potential swaprow
+ syn keyword mvPkg_linalg augment definite gaussjord jordan randmatrix sylvester
+ syn keyword mvPkg_linalg backsub delcols geneqns kernel randvector toeplitz
+ syn keyword mvPkg_linalg band delrows genmatrix laplacian rank trace
+ syn keyword mvPkg_linalg basis det grad leastsqrs references transpose
+ syn keyword mvPkg_linalg bezout diag hadamard linsolve row vandermonde
+ syn keyword mvPkg_linalg blockmatrix diverge hermite matadd rowdim vecpotent
+ syn keyword mvPkg_linalg charmat dotprod hessian matrix rowspace vectdim
+ syn keyword mvPkg_linalg charpoly eigenval hilbert minor rowspan vector
+ syn keyword mvPkg_linalg cholesky eigenvect htranspose minpoly scalarmul wronskian
+ syn keyword mvPkg_linalg col entermatrix ihermite
+endif
+
+" Package: logic: Boolean logic {{{2
+if exists("mv_logic")
+ syn keyword mvPkg_logic MOD2 bsimp distrib environ randbool tautology
+ syn keyword mvPkg_logic bequal canon dual frominert satisfy toinert
+endif
+
+" Package: networks: graph networks {{{2
+if exists("mv_networks")
+ syn keyword mvPkg_networks acycpoly connect dinic graph mincut show
+ syn keyword mvPkg_networks addedge connectivity djspantree graphical mindegree shrink
+ syn keyword mvPkg_networks addvertex contract dodecahedron gsimp neighbors span
+ syn keyword mvPkg_networks adjacency countcuts draw gunion new spanpoly
+ syn keyword mvPkg_networks allpairs counttrees duplicate head octahedron spantree
+ syn keyword mvPkg_networks ancestor cube edges icosahedron outdegree tail
+ syn keyword mvPkg_networks arrivals cycle ends incidence path tetrahedron
+ syn keyword mvPkg_networks bicomponents cyclebase eweight incident petersen tuttepoly
+ syn keyword mvPkg_networks charpoly daughter flow indegree random vdegree
+ syn keyword mvPkg_networks chrompoly degreeseq flowpoly induce rank vertices
+ syn keyword mvPkg_networks complement delete fundcyc isplanar rankpoly void
+ syn keyword mvPkg_networks complete departures getlabel maxdegree shortpathtree vweight
+ syn keyword mvPkg_networks components diameter girth
+endif
+
+" Package: numapprox: numerical approximation {{{2
+if exists("mv_numapprox")
+ syn keyword mvPkg_numapprox chebdeg chebsort fnorm laurent minimax remez
+ syn keyword mvPkg_numapprox chebmult chebyshev hornerform laurent pade taylor
+ syn keyword mvPkg_numapprox chebpade confracform infnorm minimax
+endif
+
+" Package: numtheory: number theory {{{2
+if exists("mv_numtheory")
+ syn keyword mvPkg_numtheory B cyclotomic invcfrac mcombine nthconver primroot
+ syn keyword mvPkg_numtheory F divisors invphi mersenne nthdenom quadres
+ syn keyword mvPkg_numtheory GIgcd euler isolve minkowski nthnumer rootsunity
+ syn keyword mvPkg_numtheory J factorEQ isprime mipolys nthpow safeprime
+ syn keyword mvPkg_numtheory L factorset issqrfree mlog order sigma
+ syn keyword mvPkg_numtheory M fermat ithprime mobius pdexpand sq2factor
+ syn keyword mvPkg_numtheory bernoulli ifactor jacobi mroot phi sum2sqr
+ syn keyword mvPkg_numtheory bigomega ifactors kronecker msqrt pprimroot tau
+ syn keyword mvPkg_numtheory cfrac imagunit lambda nearestp prevprime thue
+ syn keyword mvPkg_numtheory cfracpol index legendre nextprime
+endif
+
+" Package: orthopoly: orthogonal polynomials {{{2
+if exists("mv_orthopoly")
+ syn keyword mvPkg_orthopoly G H L P T U
+endif
+
+" Package: padic: p-adic numbers {{{2
+if exists("mv_padic")
+ syn keyword mvPkg_padic evalp function orderp ratvaluep rootp valuep
+ syn keyword mvPkg_padic expansion lcoeffp ordp
+endif
+
+" Package: plots: graphics package {{{2
+if exists("mv_plots")
+ syn keyword mvPkg_plots animate coordplot3d gradplot3d listplot3d polarplot setoptions3d
+ syn keyword mvPkg_plots animate3d cylinderplot implicitplot loglogplot polygonplot spacecurve
+ syn keyword mvPkg_plots changecoords densityplot implicitplot3d logplot polygonplot3d sparsematrixplot
+ syn keyword mvPkg_plots complexplot display inequal matrixplot polyhedraplot sphereplot
+ syn keyword mvPkg_plots complexplot3d display3d listcontplot odeplot replot surfdata
+ syn keyword mvPkg_plots conformal fieldplot listcontplot3d pareto rootlocus textplot
+ syn keyword mvPkg_plots contourplot fieldplot3d listdensityplot pointplot semilogplot textplot3d
+ syn keyword mvPkg_plots contourplot3d gradplot listplot pointplot3d setoptions tubeplot
+ syn keyword mvPkg_plots coordplot
+endif
+
+" Package: plottools: basic graphical objects {{{2
+if exists("mv_plottools")
+ syn keyword mvPkg_plottools arc curve dodecahedron hyperbola pieslice semitorus
+ syn keyword mvPkg_plottools arrow cutin ellipse icosahedron point sphere
+ syn keyword mvPkg_plottools circle cutout ellipticArc line polygon tetrahedron
+ syn keyword mvPkg_plottools cone cylinder hemisphere octahedron rectangle torus
+ syn keyword mvPkg_plottools cuboid disk hexahedron
+endif
+
+" Package: powseries: formal power series {{{2
+if exists("mv_powseries")
+ syn keyword mvPkg_powseries compose multiply powcreate powlog powsolve reversion
+ syn keyword mvPkg_powseries evalpow negative powdiff powpoly powsqrt subtract
+ syn keyword mvPkg_powseries inverse powadd powexp powseries quotient tpsform
+ syn keyword mvPkg_powseries multconst powcos powint powsin
+endif
+
+" Package: process: (Unix)-multi-processing {{{2
+if exists("mv_process")
+ syn keyword mvPkg_process block fork pclose pipe popen wait
+ syn keyword mvPkg_process exec kill
+endif
+
+" Package: simplex: linear optimization {{{2
+if exists("mv_simplex")
+ syn keyword mvPkg_simplex NONNEGATIVE cterm dual maximize pivoteqn setup
+ syn keyword mvPkg_simplex basis define_zero equality minimize pivotvar standardize
+ syn keyword mvPkg_simplex convexhull display feasible pivot ratio
+endif
+
+" Package: stats: statistics {{{2
+if exists("mv_stats")
+ syn keyword mvPkg_stats anova describe fit random statevalf statplots
+endif
+
+" Package: student: student calculus {{{2
+if exists("mv_student")
+ syn keyword mvPkg_student D Product distance isolate middlesum rightsum
+ syn keyword mvPkg_student Diff Sum equate leftbox midpoint showtangent
+ syn keyword mvPkg_student Doubleint Tripleint extrema leftsum minimize simpson
+ syn keyword mvPkg_student Int changevar integrand makeproc minimize slope
+ syn keyword mvPkg_student Limit combine intercept maximize powsubs trapezoid
+ syn keyword mvPkg_student Lineint completesquare intparts middlebox rightbox value
+ syn keyword mvPkg_student Point
+endif
+
+" Package: sumtools: indefinite and definite sums {{{2
+if exists("mv_sumtools")
+ syn keyword mvPkg_sumtools Hypersum extended_gosper hyperrecursion hyperterm sumrecursion sumtohyper
+ syn keyword mvPkg_sumtools Sumtohyper gosper hypersum simpcomb
+endif
+
+" Package: tensor: tensor computations and General Relativity {{{2
+if exists("mv_tensor")
+ syn keyword mvPkg_tensor Christoffel1 Riemann connexF display_allGR get_compts partial_diff
+ syn keyword mvPkg_tensor Christoffel2 RiemannF contract dual get_rank permute_indices
+ syn keyword mvPkg_tensor Einstein Weyl convertNP entermetric invars petrov
+ syn keyword mvPkg_tensor Jacobian act cov_diff exterior_diff invert prod
+ syn keyword mvPkg_tensor Killing_eqns antisymmetrize create exterior_prod lin_com raise
+ syn keyword mvPkg_tensor Levi_Civita change_basis d1metric frame lower symmetrize
+ syn keyword mvPkg_tensor Lie_diff commutator d2metric geodesic_eqns npcurve tensorsGR
+ syn keyword mvPkg_tensor Ricci compare directional_diff get_char npspin transform
+ syn keyword mvPkg_tensor Ricciscalar conj displayGR
+endif
+
+" Package: totorder: total orders on names {{{2
+if exists("mv_totorder")
+ syn keyword mvPkg_totorder forget init ordering tassume tis
+endif
+" =====================================================================
+
+" Highlighting: Define the default highlighting. {{{1
+" 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_maplev_syntax_inits")
+ if version < 508
+ let did_maplev_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Maple->Maple Links {{{2
+ HiLink mvBraceError mvError
+ HiLink mvCurlyError mvError
+ HiLink mvDebug mvTodo
+ HiLink mvParenError mvError
+ HiLink mvPkg_DEtools mvPkgFunc
+ HiLink mvPkg_Galois mvPkgFunc
+ HiLink mvPkg_GaussInt mvPkgFunc
+ HiLink mvPkg_LREtools mvPkgFunc
+ HiLink mvPkg_combinat mvPkgFunc
+ HiLink mvPkg_combstruct mvPkgFunc
+ HiLink mvPkg_difforms mvPkgFunc
+ HiLink mvPkg_finance mvPkgFunc
+ HiLink mvPkg_genfunc mvPkgFunc
+ HiLink mvPkg_geometry mvPkgFunc
+ HiLink mvPkg_grobner mvPkgFunc
+ HiLink mvPkg_group mvPkgFunc
+ HiLink mvPkg_inttrans mvPkgFunc
+ HiLink mvPkg_liesymm mvPkgFunc
+ HiLink mvPkg_linalg mvPkgFunc
+ HiLink mvPkg_logic mvPkgFunc
+ HiLink mvPkg_networks mvPkgFunc
+ HiLink mvPkg_numapprox mvPkgFunc
+ HiLink mvPkg_numtheory mvPkgFunc
+ HiLink mvPkg_orthopoly mvPkgFunc
+ HiLink mvPkg_padic mvPkgFunc
+ HiLink mvPkg_plots mvPkgFunc
+ HiLink mvPkg_plottools mvPkgFunc
+ HiLink mvPkg_powseries mvPkgFunc
+ HiLink mvPkg_process mvPkgFunc
+ HiLink mvPkg_simplex mvPkgFunc
+ HiLink mvPkg_stats mvPkgFunc
+ HiLink mvPkg_student mvPkgFunc
+ HiLink mvPkg_sumtools mvPkgFunc
+ HiLink mvPkg_tensor mvPkgFunc
+ HiLink mvPkg_totorder mvPkgFunc
+ HiLink mvRange mvOper
+ HiLink mvSemiError mvError
+
+ " Maple->Standard Links {{{2
+ HiLink mvAssign Delimiter
+ HiLink mvBool Boolean
+ HiLink mvComma Delimiter
+ HiLink mvComment Comment
+ HiLink mvCond Conditional
+ HiLink mvConstant Number
+ HiLink mvDelayEval Label
+ HiLink mvError Error
+ HiLink mvLibrary Statement
+ HiLink mvNumber Number
+ HiLink mvOper Operator
+ HiLink mvPackage Type
+ HiLink mvPkgFunc Function
+ HiLink mvPktOption Special
+ HiLink mvRepeat Repeat
+ HiLink mvSpecial Special
+ HiLink mvStatement Statement
+ HiLink mvString String
+ HiLink mvTodo Todo
+
+ delcommand HiLink
+endif
+
+" Current Syntax: {{{1
+let b:current_syntax = "maple"
+" vim: ts=20 fdm=marker
diff --git a/runtime/syntax/masm.vim b/runtime/syntax/masm.vim
new file mode 100644
index 000000000..e11a0293a
--- /dev/null
+++ b/runtime/syntax/masm.vim
@@ -0,0 +1,144 @@
+" Vim syntax file
+" Language: Microsoft Assembler (80x86)
+" Maintainer: Rob Brady <robb@datatone.com>
+" Last Change: $Date$
+" URL: http://www.datatone.com/~robb/vim/syntax/masm.vim
+" $Revision$
+
+" 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
+
+
+" syn match masmType "\.word"
+
+syn match masmIdentifier "[a-z_$][a-z0-9_$]*"
+syn match masmLabel "^[A-Z_$][A-Z0-9_$]*:"he=e-1
+
+syn match masmDecimal "\d*"
+syn match masmBinary "[0-1]\+b" "put this before hex or 0bfh dies!
+syn match masmHexadecimal "[0-9]\x*h"
+syn match masmFloat "[0-9]\x*r"
+
+syn match masmComment ";.*"
+syn region masmString start=+'+ end=+'+
+
+syn keyword masmOperator AND BYTE PTR CODEPTR DATAPTR DUP DWORD EQ FAR
+syn keyword masmOperator FWORD GE GT HIGH LARGE LE LOW LT MOD NE NEAR
+syn keyword masmOperator NOT OFFSET OR PROC PWORD QWORD SEG SHORT TBYTE
+syn keyword masmOperator TYPE WORD PARA
+syn keyword masmDirective ALIGN ARG ASSUME CODESEG COMM
+syn keyword masmDirective CONST DATASEG DB DD DF DISPLAY DOSSEG DP
+syn keyword masmDirective DQ DT DW ELSE ELSEIF EMUL END ENDIF ENDM ENDP
+syn keyword masmDirective ENDS ENUM EQU PROC PUBLIC PUBLICDLL RADIX
+syn keyword masmDirective EXTRN FARDATA GLOBAL RECORD SEGMENT SMALLSTACK
+syn keyword masmDirective GROUP IF IF1 IF2 IFB IFDEF IFDIF IFDIFI
+syn keyword masmDirective IFE IFIDN IFIDNI IFNB IFNDEF INCLUDE INCLUDLIB
+syn keyword masmDirective LABEL LARGESTACK STACK STRUC SUBTTL TITLE
+syn keyword masmDirective MODEL NAME NOEMUL UNION USES VERSION
+syn keyword masmDirective ORG FLAT
+syn match masmDirective "\.model"
+syn match masmDirective "\.186"
+syn match masmDirective "\.286"
+syn match masmDirective "\.286c"
+syn match masmDirective "\.286p"
+syn match masmDirective "\.287"
+syn match masmDirective "\.386"
+syn match masmDirective "\.386c"
+syn match masmDirective "\.386p"
+syn match masmDirective "\.387"
+syn match masmDirective "\.486"
+syn match masmDirective "\.486c"
+syn match masmDirective "\.486p"
+syn match masmDirective "\.8086"
+syn match masmDirective "\.8087"
+syn match masmDirective "\.ALPHA"
+syn match masmDirective "\.CODE"
+syn match masmDirective "\.DATA"
+
+syn keyword masmRegister AX BX CX DX SI DI BP SP
+syn keyword masmRegister ES DS SS CS
+syn keyword masmRegister AH BH CH DH AL BL CL DL
+syn keyword masmRegister EAX EBX ECX EDX ESI EDI EBP ESP
+
+
+" these are current as of the 486 - don't have any pentium manuals handy
+syn keyword masmOpcode AAA AAD AAM AAS ADC ADD AND ARPL BOUND BSF
+syn keyword masmOpcode BSR BSWAP BT BTC BTR BTS BSWAP BT BTC BTR
+syn keyword masmOpcode BTS CALL CBW CDQ CLC CLD CLI CLTS CMC CMP
+syn keyword masmOpcode CMPS CMPSB CMPSW CMPSD CMPXCHG CWD CWDE DAA
+syn keyword masmOpcode DAS DEC DIV ENTER HLT IDIV IMUL IN INC INS
+syn keyword masmOpcode INSB INSW INSD INT INTO INVD INVLPG IRET
+syn keyword masmOpcode IRETD JA JAE JB JBE JC JCXZ JECXZ JE JZ JG
+syn keyword masmOpcode JGE JL JLE JNA JNAE JNB JNBE JNC JNE JNG JNGE
+syn keyword masmOpcode JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ
+syn keyword masmOpcode JMP LAHF LAR LEA LEAVE LGDT LIDT LGS LSS LFS
+syn keyword masmOpcode LODS LODSB LODSW LODSD LOOP LOOPE LOOPZ LOONE
+syn keyword masmOpcode LOOPNE RETF RETN
+syn keyword masmOpcode LDS LES LLDT LMSW LOCK LSL LTR MOV MOVS MOVSB
+syn keyword masmOpcode MOVSW MOVSD MOVSX MOVZX MUL NEG NOP NOT OR
+syn keyword masmOpcode OUT OUTS OUTSB OUTSW OUTSD POP POPA POPD
+syn keyword masmOpcode POPF POPFD PUSH PUSHA PUSHAD PUSHF PUSHFD
+syn keyword masmOpcode RCL RCR ROL ROR REP REPE REPZ REPNE REPNZ
+syn keyword masmOpcode RET SAHF SAL SAR SHL SHR SBB SCAS SCASB
+syn keyword masmOpcode SCASW SCASD SETA SETAE SETB SETBE SETC SETE
+syn keyword masmOpcode SETG SETGE SETL SETLE SETNA SETNAE SETNB
+syn keyword masmOpcode SETNBE SETNC SETNE SETNG SETNGE SETNL SETNLE
+syn keyword masmOpcode SETNO SETNP SETNS SETNZ SETO SETP SETPE SETPO
+syn keyword masmOpcode SETS SETZ SGDT SIDT SHLD SHRD SLDT SMSW STC
+syn keyword masmOpcode STD STI STOS STOSB STOSW STOSD STR SUB TEST
+syn keyword masmOpcode VERR VERW WAIT WBINVD XADD XCHG XLAT XLATB XOR
+
+" floating point coprocessor as of 487
+syn keyword masmOpFloat F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX
+syn keyword masmOpFloat FNCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
+syn keyword masmOpFloat FNDISI FDIV FDIVP FDIVR FDIVRP FENI FNENI
+syn keyword masmOpFloat FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD
+syn keyword masmOpFloat FIMUL FINCSTP FINIT FNINIT FIST FISTP FISUB
+syn keyword masmOpFloat FISUBR FLD FLDCW FLDENV FLDLG2 FLDLN2 FLDL2E
+syn keyword masmOpFloat FLDL2T FLDPI FLDZ FLD1 FMUL FMULP FNOP FPATAN
+syn keyword masmOpFloat FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE
+syn keyword masmOpFloat FNSAVE FSCALE FSETPM FSIN FSINCOS FSQRT FST
+syn keyword masmOpFloat FSTCW FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW
+syn keyword masmOpFloat FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP
+syn keyword masmOpFloat FUCOMPP FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
+syn match masmOpFloat "FSTSW[ \t]\+AX"
+syn match masmOpFloat "FNSTSW[ \t]\+AX"
+
+" 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_masm_syntax_inits")
+ if version < 508
+ let did_masm_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 masmLabel Label
+ HiLink masmComment Comment
+ HiLink masmDirective Statement
+ HiLink masmOperator Statement
+ HiLink masmString String
+
+ HiLink masmHexadecimal Number
+ HiLink masmDecimal Number
+ HiLink masmBinary Number
+ HiLink masmFloat Number
+
+ HiLink masmIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "masm"
+
+" vim: ts=8
diff --git a/runtime/syntax/mason.vim b/runtime/syntax/mason.vim
new file mode 100644
index 000000000..40bdb0eaa
--- /dev/null
+++ b/runtime/syntax/mason.vim
@@ -0,0 +1,99 @@
+" Vim syntax file
+" Language: Mason (Perl embedded in HTML)
+" Maintainer: Andrew Smith <andrewdsmith@yahoo.com>
+" Last change: 2003 May 11
+" URL: http://www.masonhq.com/editors/mason.vim
+"
+" This seems to work satisfactorily with html.vim and perl.vim for version 5.5.
+" Please mail any fixes or improvements to the above address. Things that need
+" doing include:
+"
+" - Add match for component names in <& &> blocks.
+" - Add match for component names in <%def> and <%method> block delimiters.
+" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
+"
+
+" Clear previous syntax settings unless this is v6 or above, in which case just
+" exit without doing anything.
+"
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" The HTML syntax file included below uses this variable.
+"
+if !exists("main_syntax")
+ let main_syntax = 'mason'
+endif
+
+" First pull in the HTML syntax.
+"
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syn cluster htmlPreproc add=@masonTop
+
+" Now pull in the Perl syntax.
+"
+if version < 600
+ syn include @perlTop <sfile>:p:h/perl.vim
+else
+ syn include @perlTop syntax/perl.vim
+endif
+
+" It's hard to reduce down to the correct sub-set of Perl to highlight in some
+" of these cases so I've taken the safe option of just using perlTop in all of
+" them. If you have any suggestions, please let me know.
+"
+syn region masonLine matchgroup=Delimiter start="^%" end="$" contains=@perlTop
+syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop
+syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=@perlTop
+syn region masonComp keepend matchgroup=Delimiter start="<&" end="&>" contains=@perlTop
+
+syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=@perlTop
+
+syn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=@perlTop
+syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=@perlTop
+syn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=@perlTop
+syn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=@perlTop
+
+syn region masonDef matchgroup=Delimiter start="<%def[^>]*>" end="</%def>" contains=@htmlTop
+syn region masonMethod matchgroup=Delimiter start="<%method[^>]*>" end="</%method>" contains=@htmlTop
+
+syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=@perlTop
+syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=@perlTop
+
+syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=@perlTop
+
+syn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>"
+syn region masonText matchgroup=Delimiter start="<%text>" end="</%text>"
+
+syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText
+
+" Set up default highlighting. Almost all of this is done in the included
+" syntax files.
+"
+if version >= 508 || !exists("did_mason_syn_inits")
+ if version < 508
+ let did_mason_syn_inits = 1
+ com -nargs=+ HiLink hi link <args>
+ else
+ com -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink masonDoc Comment
+
+ delc HiLink
+endif
+
+let b:current_syntax = "mason"
+
+if main_syntax == 'mason'
+ unlet main_syntax
+endif
diff --git a/runtime/syntax/master.vim b/runtime/syntax/master.vim
new file mode 100644
index 000000000..c2125c155
--- /dev/null
+++ b/runtime/syntax/master.vim
@@ -0,0 +1,50 @@
+" Vim syntax file
+" Language: Focus Master File
+" Maintainer: Rob Brady <robb@datatone.com>
+" Last Change: $Date$
+" URL: http://www.datatone.com/~robb/vim/syntax/master.vim
+" $Revision$
+
+" this is a very simple syntax file - I will be improving it
+" add entire DEFINE syntax
+
+" 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 match
+
+" A bunch of useful keywords
+syn keyword masterKeyword FILENAME SUFFIX SEGNAME SEGTYPE PARENT FIELDNAME
+syn keyword masterKeyword FIELD ALIAS USAGE INDEX MISSING ON
+syn keyword masterKeyword FORMAT CRFILE CRKEY
+syn keyword masterDefine DEFINE DECODE EDIT
+syn region masterString start=+"+ end=+"+
+syn region masterString start=+'+ end=+'+
+syn match masterComment "\$.*"
+
+" 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_master_syntax_inits")
+ if version < 508
+ let did_master_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink masterKeyword Keyword
+ HiLink masterComment Comment
+ HiLink masterString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "master"
+
+" vim: ts=8
diff --git a/runtime/syntax/matlab.vim b/runtime/syntax/matlab.vim
new file mode 100644
index 000000000..9bba9759c
--- /dev/null
+++ b/runtime/syntax/matlab.vim
@@ -0,0 +1,109 @@
+" Vim syntax file
+" Language: Matlab
+" Maintainer: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+" Original author: Mario Eusebio
+" Last Change: 30 May 2003
+
+" 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 keyword matlabStatement return
+syn keyword matlabLabel case switch
+syn keyword matlabConditional else elseif end if otherwise
+syn keyword matlabRepeat do for while
+
+syn keyword matlabTodo contained TODO
+
+" If you do not want these operators lit, uncommment them and the "hi link" below
+syn match matlabArithmeticOperator "[-+]"
+syn match matlabArithmeticOperator "\.\=[*/\\^]"
+syn match matlabRelationalOperator "[=~]="
+syn match matlabRelationalOperator "[<>]=\="
+syn match matlabLogicalOperator "[&|~]"
+
+syn match matlabLineContinuation "\.\{3}"
+
+"syn match matlabIdentifier "\<\a\w*\>"
+
+" String
+syn region matlabString start=+'+ end=+'+ oneline
+
+" If you don't like tabs
+syn match matlabTab "\t"
+
+" Standard numbers
+syn match matlabNumber "\<\d\+[ij]\=\>"
+" floating point number, with dot, optional exponent
+syn match matlabFloat "\<\d\+\(\.\d*\)\=\([edED][-+]\=\d\+\)\=[ij]\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match matlabFloat "\.\d\+\([edED][-+]\=\d\+\)\=[ij]\=\>"
+
+" Transpose character and delimiters: Either use just [...] or (...) aswell
+syn match matlabDelimiter "[][]"
+"syn match matlabDelimiter "[][()]"
+syn match matlabTransposeOperator "[])a-zA-Z0-9.]'"lc=1
+
+syn match matlabSemicolon ";"
+
+syn match matlabComment "%.*$" contains=matlabTodo,matlabTab
+
+syn keyword matlabOperator break zeros default margin round ones rand
+syn keyword matlabOperator ceil floor size clear zeros eye mean std cov
+
+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 match matlabError "-\=\<\d\+\.\d\+\.[^*/\\^]"
+syn match matlabError "-\=\<\d\+\.\d\+[eEdD][-+]\=\d\+\.\([^*/\\^]\)"
+
+" 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_matlab_syntax_inits")
+ if version < 508
+ let did_matlab_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink matlabTransposeOperator matlabOperator
+ HiLink matlabOperator Operator
+ HiLink matlabLineContinuation Special
+ HiLink matlabLabel Label
+ HiLink matlabConditional Conditional
+ HiLink matlabRepeat Repeat
+ HiLink matlabTodo Todo
+ HiLink matlabString String
+ HiLink matlabDelimiter Identifier
+ HiLink matlabTransposeOther Identifier
+ HiLink matlabNumber Number
+ HiLink matlabFloat Float
+ HiLink matlabFunction Function
+ HiLink matlabError Error
+ HiLink matlabImplicit matlabStatement
+ HiLink matlabStatement Statement
+ HiLink matlabSemicolon SpecialChar
+ HiLink matlabComment Comment
+
+ HiLink matlabArithmeticOperator matlabOperator
+ HiLink matlabRelationalOperator matlabOperator
+ HiLink matlabLogicalOperator matlabOperator
+
+"optional highlighting
+ "HiLink matlabIdentifier Identifier
+ "HiLink matlabTab Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "matlab"
+
+"EOF vim: ts=8 noet tw=100 sw=8 sts=0
diff --git a/runtime/syntax/mel.vim b/runtime/syntax/mel.vim
new file mode 100644
index 000000000..dab894865
--- /dev/null
+++ b/runtime/syntax/mel.vim
@@ -0,0 +1,121 @@
+" Vim syntax file
+" Language: MEL (Maya Extension Language)
+" Maintainer: Robert Minsk <egbert@centropolisfx.com>
+" Last Change: May 27 1999
+" Based on: Bram Moolenaar <Bram@vim.org> C syntax file
+
+" 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
+
+" when wanted, highlight trailing white space and spaces before tabs
+if exists("mel_space_errors")
+ sy match melSpaceError "\s\+$"
+ sy match melSpaceError " \+\t"me=e-1
+endif
+
+" A bunch of usefull MEL keyworks
+sy keyword melBoolean true false yes no on off
+
+sy keyword melFunction proc
+sy match melIdentifier "\$\(\a\|_\)\w*"
+
+sy keyword melStatement break continue return
+sy keyword melConditional if else switch
+sy keyword melRepeat while for do in
+sy keyword melLabel case default
+sy keyword melOperator size eval env exists whatIs
+sy keyword melKeyword alias
+sy keyword melException catch error warning
+
+sy keyword melInclude source
+
+sy keyword melType int float string vector matrix
+sy keyword melStorageClass global
+
+sy keyword melDebug trace
+
+sy keyword melTodo contained TODO FIXME XXX
+
+" MEL data types
+sy match melCharSpecial contained "\\[ntr\\"]"
+sy match melCharError contained "\\[^ntr\\"]"
+
+sy region melString start=+"+ skip=+\\"+ end=+"+ contains=melCharSpecial,melCharError
+
+sy case ignore
+sy match melInteger "\<\d\+\(e[-+]\=\d\+\)\=\>"
+sy match melFloat "\<\d\+\(e[-+]\=\d\+\)\=f\>"
+sy match melFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=f\=\>"
+sy match melFloat "\.\d\+\(e[-+]\=\d\+\)\=f\=\>"
+sy case match
+
+sy match melCommaSemi contained "[,;]"
+sy region melMatrixVector start=/<</ end=/>>/ contains=melInteger,melFloat,melIdentifier,melCommaSemi
+
+sy cluster melGroup contains=melFunction,melStatement,melConditional,melLabel,melKeyword,melStorageClass,melTODO,melCharSpecial,melCharError,melCommaSemi
+
+" catch errors caused by wrong parenthesis
+sy region melParen transparent start='(' end=')' contains=ALLBUT,@melGroup,melParenError,melInParen
+sy match melParenError ")"
+sy match melInParen contained "[{}]"
+
+" comments
+sy region melComment start="/\*" end="\*/" contains=melTodo,melSpaceError
+sy match melComment "//.*" contains=melTodo,melSpaceError
+sy match melCommentError "\*/"
+
+sy region melQuestionColon matchgroup=melConditional transparent start='?' end=':' contains=ALLBUT,@melGroup
+
+if !exists("mel_minlines")
+ let mel_minlines=15
+endif
+exec "sy sync ccomment melComment minlines=" . mel_minlines
+
+" 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_mel_syntax_inits")
+ if version < 508
+ let did_mel_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink melBoolean Boolean
+ HiLink melFunction Function
+ HiLink melIdentifier Identifier
+ HiLink melStatement Statement
+ HiLink melConditional Conditional
+ HiLink melRepeat Repeat
+ HiLink melLabel Label
+ HiLink melOperator Operator
+ HiLink melKeyword Keyword
+ HiLink melException Exception
+ HiLink melInclude Include
+ HiLink melType Type
+ HiLink melStorageClass StorageClass
+ HiLink melDebug Debug
+ HiLink melTodo Todo
+ HiLink melCharSpecial SpecialChar
+ HiLink melString String
+ HiLink melInteger Number
+ HiLink melFloat Float
+ HiLink melMatrixVector Float
+ HiLink melComment Comment
+ HiLink melError Error
+ HiLink melSpaceError melError
+ HiLink melCharError melError
+ HiLink melParenError melError
+ HiLink melInParen melError
+ HiLink melCommentError melError
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mel"
diff --git a/runtime/syntax/mf.vim b/runtime/syntax/mf.vim
new file mode 100644
index 000000000..8bc48fee4
--- /dev/null
+++ b/runtime/syntax/mf.vim
@@ -0,0 +1,197 @@
+" Vim syntax file
+" Language: Metafont
+" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: April 25, 2001
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Metafont 'primitives' as defined in chapter 25 of 'The METAFONTbook'
+" Page 210: 'boolean expressions'
+syn keyword mfBoolExp true false known unknown odd charexists not and or
+
+" Page 210: 'numeric expression'
+syn keyword mfNumExp normaldeviate length ASCII oct hex angle turningnumber
+syn keyword mfNumExp totalweight directiontime xpart ypart xxpart xypart
+syn keyword mfNumExp yxpart yypart sqrt sind cosd mlog mexp floor
+syn keyword mfNumExp uniformdeviate
+
+" Page 211: 'internal quantities'
+syn keyword mfInternal tracingtitles tracingequations tracingcapsules
+syn keyword mfInternal tracingchoices tracingspecs tracingpens
+syn keyword mfInternal tracingcommands tracingrestores tracingmacros
+syn keyword mfInternal tracingedges tracingoutput tracingonline tracingstats
+syn keyword mfInternal pausing showstopping fontmaking proofing
+syn keyword mfInternal turningcheck warningcheck smoothing autorounding
+syn keyword mfInternal granularity fillin year month day time
+syn keyword mfInternal charcode charext charwd charht chardp charic
+syn keyword mfInternal chardx chardy designsize hppp vppp xoffset yoffset
+syn keyword mfInternal boundarychar
+
+" Page 212: 'pair expressions'
+syn keyword mfPairExp point of precontrol postcontrol penoffset rotated
+syn keyword mfPairExp scaled shifted slanted transformed xscaled yscaled
+syn keyword mfPairExp zscaled
+
+" Page 213: 'path expressions'
+syn keyword mfPathExp makepath reverse subpath curl tension atleast
+syn keyword mfPathExp controls cycle
+
+" Page 214: 'pen expressions'
+syn keyword mfPenExp nullpen pencircle makepen
+
+" Page 214: 'picutre expressions'
+syn keyword mfPicExp nullpicture
+
+" Page 214: 'string expressions'
+syn keyword mfStringExp jobname readstring str char decimal substring
+
+" Page 217: 'commands and statements'
+syn keyword mfCommand end dump save interim newinternal randomseed let
+syn keyword mfCommand delimiters outer everyjob show showvariable showtoken
+syn keyword mfCommand showdependencies showstats message errmessage errhelp
+syn keyword mfCommand batchmode nonstopmode scrollmode errorstopmode
+syn keyword mfCommand addto also contour doublepath withpen withweight cull
+syn keyword mfCommand keeping dropping display inwindow openwindow at from to
+syn keyword mfCommand shipout special numspecial
+
+" Page 56: 'types'
+syn keyword mfType boolean numeric pair path pen picture string transform
+
+" Page 155: 'grouping'
+syn keyword mfStatement begingroup endgroup
+
+" Page 165: 'definitions'
+syn keyword mfDefinition enddef def expr suffix text primary secondary
+syn keyword mfDefinition tertiary vardef primarydef secondarydef tertiarydef
+
+" Page 169: 'conditions and loops'
+syn keyword mfCondition if fi else elseif endfor for forsuffixes forever
+syn keyword mfCondition step until exitif
+
+" Other primitives listed in the index
+syn keyword mfPrimitive charlist endinput expandafter extensible
+syn keyword mfPrimitive fontdimen headerbyte inner input intersectiontimes
+syn keyword mfPrimitive kern ligtable quote scantokens skipto
+
+" Keywords defined by plain.mf (defined on pp.262-278)
+if !exists("plain_mf_macros")
+ let plain_mf_macros = 1 " Set this to '0' if your source gets too colourful
+ " metapost.vim does so to turn off Metafont macros
+endif
+if plain_mf_macros
+ syn keyword mfMacro abs addto_currentpicture aspect_ratio base_name
+ syn keyword mfMacro base_version beginchar blacker blankpicture bot bye byte
+ syn keyword mfMacro capsule_def ceiling change_width clear_pen_memory clearit
+ syn keyword mfMacro clearpen clearxy counterclockwise culldraw cullit
+ syn keyword mfMacro currentpen currentpen_path currentpicture
+ syn keyword mfMacro currenttransform currentwindow cutdraw cutoff d decr
+ syn keyword mfMacro define_blacker_pixels define_corrected_pixels
+ syn keyword mfMacro define_good_x_pixels define_good_y_pixels
+ syn keyword mfMacro define_horizontal_corrected_pixels define_pixels
+ syn keyword mfMacro define_whole_blacker_pixels define_whole_pixels
+ syn keyword mfMacro define_whole_vertical_blacker_pixels
+ syn keyword mfMacro define_whole_vertical_pixels dir direction directionpoint
+ syn keyword mfMacro displaying ditto div dotprod down downto draw drawdot
+ syn keyword mfMacro endchar eps epsilon extra_beginchar extra_endchar
+ syn keyword mfMacro extra_setup erase exitunless fill filldraw fix_units flex
+ syn keyword mfMacro font_coding_scheme font_extra_space font_identifier
+ syn keyword mfMacro font_normal_shrink font_normal_space font_normal_stretch
+ syn keyword mfMacro font_quad font_setup font_size font_slant font_x_height
+ syn keyword mfMacro fullcircle generate gfcorners gobble gobbled grayfont h
+ syn keyword mfMacro halfcircle hide hround identity image_rules incr infinity
+ syn keyword mfMacro interact interpath intersectionpoint inverse italcorr
+ syn keyword mfMacro join_radius killtext labelfont labels left lft localfont
+ syn keyword mfMacro loggingall lowres lowres_fix mag magstep makebox makegrid
+ syn keyword mfMacro makelabel maketicks max min mod mode mode_def mode_name
+ syn keyword mfMacro mode_setup nodisplays notransforms number_of_modes numtok
+ syn keyword mfMacro o_correction openit origin pen_bot pen_lft pen_rt pen_top
+ syn keyword mfMacro penlabels penpos penrazor penspeck pensquare penstroke
+ syn keyword mfMacro pickup pixels_per_inch proof proofoffset proofrule
+ syn keyword mfMacro proofrulethickness quartercircle range reflectedabout
+ syn keyword mfMacro relax right rotatedabout rotatedaround round rt rulepen
+ syn keyword mfMacro savepen screenchars screen_rows screen_cols screenrule
+ syn keyword mfMacro screenstrokes shipit showit slantfont smode smoke softjoin
+ syn keyword mfMacro solve stop superellipse takepower tensepath titlefont
+ syn keyword mfMacro tolerance top tracingall tracingnone undraw undrawdot
+ syn keyword mfMacro unfill unfilldraw unitpixel unitsquare unitvector up upto
+ syn keyword mfMacro vround w whatever
+endif
+
+" Some other basic macro names, e.g., from cmbase, logo, etc.
+if !exists("other_mf_macros")
+ let other_mf_macros = 1 " Set this to '0' if your code gets too colourful
+ " metapost.vim does so to turn off Metafont macros
+endif
+if other_mf_macros
+ syn keyword mfMacro beginlogochar
+endif
+
+" Numeric tokens
+syn match mfNumeric "[-]\=\d\+"
+syn match mfNumeric "[-]\=\.\d\+"
+syn match mfNumeric "[-]\=\d\+\.\d\+"
+
+" Metafont lengths
+syn match mfLength "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
+syn match mfLength "\<[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
+syn match mfLength "\<[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
+syn match mfLength "\<[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
+
+" Metafont coordinates and points
+syn match mfCoord "\<[xy]\d\+\>"
+syn match mfPoint "\<z\d\+\>"
+
+" String constants
+syn region mfString start=+"+ end=+"+
+
+" Comments:
+syn match mfComment "%.*$"
+
+" synchronizing
+syn sync maxlines=50
+
+" 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_mf_syntax_inits")
+ if version < 508
+ let did_mf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mfBoolExp Statement
+ HiLink mfNumExp Statement
+ HiLink mfInternal Identifier
+ HiLink mfPairExp Statement
+ HiLink mfPathExp Statement
+ HiLink mfPenExp Statement
+ HiLink mfPicExp Statement
+ HiLink mfStringExp Statement
+ HiLink mfCommand Statement
+ HiLink mfType Type
+ HiLink mfStatement Statement
+ HiLink mfDefinition Statement
+ HiLink mfCondition Conditional
+ HiLink mfPrimitive Statement
+ HiLink mfMacro Macro
+ HiLink mfCoord Identifier
+ HiLink mfPoint Identifier
+ HiLink mfNumeric Number
+ HiLink mfLength Number
+ HiLink mfComment Comment
+ HiLink mfString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mf"
+
+" vim: ts=8
diff --git a/runtime/syntax/mgp.vim b/runtime/syntax/mgp.vim
new file mode 100644
index 000000000..76b96612e
--- /dev/null
+++ b/runtime/syntax/mgp.vim
@@ -0,0 +1,83 @@
+" Vim syntax file
+" Language: mgp - MaGic Point
+" Maintainer: Gerfried Fuchs <alfie@ist.org>
+" Filenames: *.mgp
+" Last Change: 25 Apr 2001
+" URL: http://alfie.ist.org/vim/syntax/mgp.vim
+"
+" Comments are very welcome - but please make sure that you are commenting on
+" the latest version of this file.
+" SPAM is _NOT_ welcome - be ready to be reported!
+
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+syn match mgpLineSkip "\\$"
+
+" all the commands that are currently recognized
+syn keyword mgpCommand contained size fore back bgrad left leftfill center
+syn keyword mgpCommand contained right shrink lcutin rcutin cont xfont vfont
+syn keyword mgpCommand contained tfont tmfont tfont0 bar image newimage
+syn keyword mgpCommand contained prefix icon bimage default tab vgap hgap
+syn keyword mgpCommand contained pause mark again system filter endfilter
+syn keyword mgpCommand contained vfcap tfdir deffont font embed endembed
+syn keyword mgpCommand contained noop pcache include
+
+" charset is not yet supported :-)
+" syn keyword mgpCommand contained charset
+
+syn region mgpFile contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match mgpValue contained "\d\+"
+syn match mgpSize contained "\d\+x\d\+"
+syn match mgpLine +^%.*$+ contains=mgpCommand,mgpFile,mgpSize,mgpValue
+
+" Comments
+syn match mgpPercent +^%%.*$+
+syn match mgpHash +^#.*$+
+
+" these only work alone
+syn match mgpPage +^%page$+
+syn match mgpNoDefault +^%nodefault$+
+
+
+" 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_mgp_syn_inits")
+ let did_mgp_syn_inits = 1
+ if version < 508
+ let did_mgp_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mgpLineSkip Special
+
+ HiLink mgpHash mgpComment
+ HiLink mgpPercent mgpComment
+ HiLink mgpComment Comment
+
+ HiLink mgpCommand Identifier
+
+ HiLink mgpLine Type
+
+ HiLink mgpFile String
+ HiLink mgpSize Number
+ HiLink mgpValue Number
+
+ HiLink mgpPage mgpDefine
+ HiLink mgpNoDefault mgpDefine
+ HiLink mgpDefine Define
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mgp"
diff --git a/runtime/syntax/mib.vim b/runtime/syntax/mib.vim
new file mode 100644
index 000000000..a29242d0f
--- /dev/null
+++ b/runtime/syntax/mib.vim
@@ -0,0 +1,77 @@
+" Vim syntax file
+" Language: Vim syntax file for SNMPv1 and SNMPv2 MIB and SMI files
+" Author: David Pascoe <pascoedj@spamcop.net>
+" Written: Wed Jan 28 14:37:23 GMT--8:00 1998
+" Last Changed: Thu Feb 27 10:18:16 WST 2003
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,128-167,224-235,-,:,=
+else
+ set iskeyword=@,48-57,_,128-167,224-235,-,:,=
+endif
+
+syn keyword mibImplicit ACCESS ANY AUGMENTS BEGIN BIT BITS BOOLEAN CHOICE
+syn keyword mibImplicit COMPONENTS CONTACT-INFO DEFINITIONS DEFVAL
+syn keyword mibImplicit DESCRIPTION DISPLAY-HINT END ENTERPRISE EXTERNAL FALSE
+syn keyword mibImplicit FROM GROUP IMPLICIT IMPLIED IMPORTS INDEX
+syn keyword mibImplicit LAST-UPDATED MANDATORY-GROUPS MAX-ACCESS
+syn keyword mibImplicit MIN-ACCESS MODULE MODULE-COMPLIANCE MODULE-IDENTITY
+syn keyword mibImplicit NOTIFICATION-GROUP NOTIFICATION-TYPE NOTIFICATIONS
+syn keyword mibImplicit NULL OBJECT-GROUP OBJECT-IDENTITY OBJECT-TYPE
+syn keyword mibImplicit OBJECTS OF OPTIONAL ORGANIZATION REFERENCE
+syn keyword mibImplicit REVISION SEQUENCE SET SIZE STATUS SYNTAX
+syn keyword mibImplicit TEXTUAL-CONVENTION TRAP-TYPE TRUE UNITS VARIABLES
+syn keyword mibImplicit WRITE-SYNTAX ::=
+syn keyword mibValue accessible-for-notify current DisplayString
+syn keyword mibValue deprecated mandatory not-accessible obsolete optional
+syn keyword mibValue read-create read-only read-write write-only INTEGER
+syn keyword mibValue Counter Gauge IpAddress OCTET STRING experimental mib-2
+syn keyword mibValue TimeTicks RowStatus TruthValue UInteger32 snmpModules
+syn keyword mibValue Integer32 Counter32 TestAndIncr TimeStamp InstancePointer
+syn keyword mibValue OBJECT IDENTIFIER Gauge32 AutonomousType Counter64
+syn keyword mibValue PhysAddress TimeInterval MacAddress StorageType RowPointer
+syn keyword mibValue TDomain TAddress ifIndex
+
+" Epilogue SMI extensions
+syn keyword mibEpilogue FORCE-INCLUDE EXCLUDE cookie get-function set-function
+syn keyword mibEpilogue test-function get-function-async set-function-async
+syn keyword mibEpilogue test-function-async next-function next-function-async
+syn keyword mibEpilogue leaf-name
+syn keyword mibEpilogue DEFAULT contained
+
+syn match mibComment "\ *--.*$"
+syn match mibNumber "\<['0-9a-fA-FhH]*\>"
+syn region mibDescription start="\"" end="\"" contains=DEFAULT
+
+" 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_mib_syn_inits")
+ if version < 508
+ let did_mib_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mibImplicit Statement
+ HiLink mibComment Comment
+ HiLink mibConstants String
+ HiLink mibNumber Number
+ HiLink mibDescription Identifier
+ HiLink mibEpilogue SpecialChar
+ HiLink mibValue Structure
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mib"
+
+" vim: ts=8
diff --git a/runtime/syntax/mma.vim b/runtime/syntax/mma.vim
new file mode 100644
index 000000000..6eb8d66a9
--- /dev/null
+++ b/runtime/syntax/mma.vim
@@ -0,0 +1,63 @@
+" Vim syntax file
+" Language: Mathematica
+" Maintainer: Wolfgang Waltenberger <wwalten@ben.tuwien.ac.at>
+" Last Change: Thu 26 Apr 2001 13:20:03 CEST
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn match mmaError "\*)"
+syn match mmaFixme "FIXME"
+syn region mmaComment start=+(\*+ end=+\*)+ skipempty contains=mmaFixme
+syn match mmaMessage "\a*::\a*"
+syn region mmaString start=+'+ end=+'+
+syn region mmaString start=+"+ end=+"+
+syn region mmaString start=+\\\"+ end=+\"+
+syn region mmaString start=+\"+ end=+\"+
+
+syn match mmaVariable "$\a*"
+
+syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}"
+syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}\(Integer\|Real\|Pattern\|Symbol\)"
+syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}\(Rational\|Complex\|Head\)"
+syn match mmaPattern "[A-Za-z01-9`]*_\{1,3}?[A-Za-z01-9`]*"
+
+" prefix/infix/postfix notations
+syn match mmaGenericFunction "[A-Za-z01-9`]*\s*\(\[\|@\)"he=e-1
+syn match mmaGenericFunction "[A-Za-z01-9`]*\s*\(/@\|@@\)"he=e-2
+syn match mmaGenericFunction "\~\s*[A-Za-z01-9`]*\s*\~"hs=s+1,he=e-1
+syn match mmaGenericFunction "//\s*[A-Za-z01-9`]*"hs=s+2
+syn match mmaOperator "/;"
+
+syn match mmaPureFunction "#\d*"
+syn match mmaPureFunction "&"
+
+syn match mmaUnicode "\\\[[a-zA-Z01-9]*\]"
+
+if version >= 508 || !exists("did_mma_syn_inits")
+ if version < 508
+ let did_mma_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mmaOperator Operator
+ HiLink mmaVariable Identifier
+ HiLink mmaString String
+ HiLink mmaUnicode String
+ HiLink mmaMessage Identifier
+ HiLink mmaPattern Identifier
+ HiLink mmaGenericFunction Function
+ HiLink mmaError Error
+ HiLink mmaFixme Error
+ HiLink mmaComment Comment
+ HiLink mmaPureFunction Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mma"
diff --git a/runtime/syntax/mmix.vim b/runtime/syntax/mmix.vim
new file mode 100644
index 000000000..5b6a44370
--- /dev/null
+++ b/runtime/syntax/mmix.vim
@@ -0,0 +1,162 @@
+" Vim syntax file
+" Language: MMIX
+" Maintainer: Dirk Hüsken, <huesken@informatik.uni-tuebingen.de>
+" Last Change: Wed Apr 24 01:18:52 CEST 2002
+" 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)
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+" MMIX data types
+syn keyword mmixType byte wyde tetra octa
+
+" different literals...
+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 match mmixChar "'.'"
+
+" ...and more special MMIX stuff
+syn match mmixAt "@"
+syn keyword mmixSegments Data_Segment Pool_Segment Stack_Segment
+
+syn match mmixIdentifier "[a-z_][a-z0-9_]*"
+
+" labels (for branches etc)
+syn match mmixLabel "^[a-z0-9_:][a-z0-9_]*"
+syn match mmixLabel "[0-9][HBF]"
+
+" pseudo-operations
+syn keyword mmixPseudo is loc greg
+
+" comments
+syn match mmixComment "%.*"
+syn match mmixComment "//.*"
+syn match mmixComment "^\*.*"
+
+
+syn keyword mmixOpcode trap fcmp fun feql fadd fix fsub fixu
+syn keyword mmixOpcode fmul fcmpe fune feqle fdiv fsqrt frem fint
+
+syn keyword mmixOpcode floti flotui sfloti sflotui i
+syn keyword mmixOpcode muli mului divi divui
+syn keyword mmixOpcode addi addui subi subui
+syn keyword mmixOpcode 2addui 4addui 8addui 16addui
+syn keyword mmixOpcode cmpi cmpui negi negui
+syn keyword mmixOpcode sli slui sri srui
+syn keyword mmixOpcode bnb bzb bpb bodb
+syn keyword mmixOpcode bnnb bnzb bnpb bevb
+syn keyword mmixOpcode pbnb pbzb pbpb pbodb
+syn keyword mmixOpcode pbnnb pbnzb pbnpb pbevb
+syn keyword mmixOpcode csni cszi cspi csodi
+syn keyword mmixOpcode csnni csnzi csnpi csevi
+syn keyword mmixOpcode zsni zszi zspi zsodi
+syn keyword mmixOpcode zsnni zsnzi zsnpi zsevi
+syn keyword mmixOpcode ldbi ldbui ldwi ldwui
+syn keyword mmixOpcode ldti ldtui ldoi ldoui
+syn keyword mmixOpcode ldsfi ldhti cswapi ldunci
+syn keyword mmixOpcode ldvtsi preldi pregoi goi
+syn keyword mmixOpcode stbi stbui stwi stwui
+syn keyword mmixOpcode stti sttui stoi stoui
+syn keyword mmixOpcode stsfi sthti stcoi stunci
+syn keyword mmixOpcode syncdi presti syncidi pushgoi
+syn keyword mmixOpcode ori orni nori xori
+syn keyword mmixOpcode andi andni nandi nxori
+syn keyword mmixOpcode bdifi wdifi tdifi odifi
+syn keyword mmixOpcode muxi saddi mori mxori
+syn keyword mmixOpcode muli mului divi divui
+
+syn keyword mmixOpcode flot flotu sflot sflotu
+syn keyword mmixOpcode mul mulu div divu
+syn keyword mmixOpcode add addu sub subu
+syn keyword mmixOpcode 2addu 4addu 8addu 16addu
+syn keyword mmixOpcode cmp cmpu neg negu
+syn keyword mmixOpcode sl slu sr sru
+syn keyword mmixOpcode bn bz bp bod
+syn keyword mmixOpcode bnn bnz bnp bev
+syn keyword mmixOpcode pbn pbz pbp pbod
+syn keyword mmixOpcode pbnn pbnz pbnp pbev
+syn keyword mmixOpcode csn csz csp csod
+syn keyword mmixOpcode csnn csnz csnp csev
+syn keyword mmixOpcode zsn zsz zsp zsod
+syn keyword mmixOpcode zsnn zsnz zsnp zsev
+syn keyword mmixOpcode ldb ldbu ldw ldwu
+syn keyword mmixOpcode ldt ldtu ldo ldou
+syn keyword mmixOpcode ldsf ldht cswap ldunc
+syn keyword mmixOpcode ldvts preld prego go
+syn keyword mmixOpcode stb stbu stw stwu
+syn keyword mmixOpcode stt sttu sto stou
+syn keyword mmixOpcode stsf stht stco stunc
+syn keyword mmixOpcode syncd prest syncid pushgo
+syn keyword mmixOpcode or orn nor xor
+syn keyword mmixOpcode and andn nand nxor
+syn keyword mmixOpcode bdif wdif tdif odif
+syn keyword mmixOpcode mux sadd mor mxor
+
+syn keyword mmixOpcode seth setmh setml setl inch incmh incml incl
+syn keyword mmixOpcode orh ormh orml orl andh andmh andml andnl
+syn keyword mmixOpcode jmp pushj geta put
+syn keyword mmixOpcode pop resume save unsave sync swym get trip
+syn keyword mmixOpcode set lda
+
+" switch back to being case sensitive
+syn case match
+
+" general-purpose and special-purpose registers
+syn match mmixRegister "$[0-9]*"
+syn match mmixRegister "r[A-Z]"
+syn keyword mmixRegister rBB rTT rWW rXX rYY rZZ
+
+" 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_mmix_syntax_inits")
+ if version < 508
+ let did_mmix_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 mmixAt Type
+ HiLink mmixPseudo Type
+ HiLink mmixRegister Special
+ HiLink mmixSegments Type
+
+ HiLink mmixLabel Special
+ HiLink mmixComment Comment
+ HiLink mmixOpcode Keyword
+
+ HiLink hexNumber Number
+ HiLink decNumber Number
+ HiLink octNumber Number
+
+ HiLink mmixString String
+ HiLink mmixChar String
+
+ HiLink mmixType Type
+ HiLink mmixIdentifier Normal
+ HiLink mmixSpecialComment Comment
+
+ " My default color overrides:
+ " hi mmixSpecialComment ctermfg=red
+ "hi mmixLabel ctermfg=lightcyan
+ " hi mmixType ctermbg=black ctermfg=brown
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mmix"
+
+" vim: ts=8
diff --git a/runtime/syntax/modconf.vim b/runtime/syntax/modconf.vim
new file mode 100644
index 000000000..569e13449
--- /dev/null
+++ b/runtime/syntax/modconf.vim
@@ -0,0 +1,66 @@
+" Vim syntax file
+" Language: Linux modutils modules.conf File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/modconf/
+" Latest Revision: 2004-05-22
+" arch-tag: b7981bdb-daa3-41d1-94b5-a3d60b627916
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" comments
+syn region modconfComment start="#" skip="\\$" end="$" contains=modconfTodo
+
+" todo
+syn keyword modconfTodo FIXME TODO XXX NOTE
+
+" keywords and similar
+syn match modconfBegin "^" skipwhite nextgroup=modconfCommand,modconfComment
+
+syn match modconfCommand "\(add\s\+\)\=(above\|below\|probe\|probeall\}"
+syn region modconfCommand transparent matchgroup=modconfCommand start="\(add\s\+\)\=options" skip="\\$" end="$" contains=modconfModOpt
+syn keyword modconfCommand define remove keep install insmod_opt else endif
+syn keyword modconfCommand nextgroup=modconfPath skipwhite alias depfile generic_stringfile pcimapfile include isapnpmapfile usbmapfile parportmapfile ieee1394mapfile pnpbiosmapfile persistdir prune
+syn match modconfCommand "path\(\[\w\+\]\)\=" nextgroup=modconfPath skipwhite
+syn region modconfCommand transparent matchgroup=modconfCommand start="^\s*\(if\|elseif\)" skip="\\$" end="$" contains=modconfOp
+syn region modconfCommand transparent matchgroup=modconfCommand start="^\s*\(post\|pre\)-\(install\|remove\)" skip="\\$" end="$"
+
+
+" expressions and similay
+syn match modconfOp contained "\s-[fnk]\>"
+syn region modconfPath contained start="\(=\@=\)\=/" skip="\\$" end="\\\@!\_s"
+syn match modconfModOpt contained "\<\w\+=\@="
+
+if exists("modconf_minlines")
+ let b:modconf_minlines = modconf_minlines
+else
+ let b:modconf_minlines = 50
+endif
+exec "syn sync minlines=" . b:modconf_minlines
+
+" 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_modconf_syn_inits")
+ if version < 508
+ let did_modconf_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink modconfComment Comment
+ HiLink modconfTodo Todo
+ HiLink modconfCommand Keyword
+ HiLink modconfPath String
+ HiLink modconfOp Identifier
+ HiLink modconfModOpt Identifier
+ delcommand HiLink
+endif
+
+let b:current_syntax = "modconf"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/model.vim b/runtime/syntax/model.vim
new file mode 100644
index 000000000..91b678131
--- /dev/null
+++ b/runtime/syntax/model.vim
@@ -0,0 +1,59 @@
+" Vim syntax file
+" Language: Model
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Apr 25
+
+" very basic things only (based on the vgrindefs file).
+" If you use this language, please improve it, and send me the patches!
+
+" 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
+
+" A bunch of keywords
+syn keyword modelKeyword abs and array boolean by case cdnl char copied dispose
+syn keyword modelKeyword div do dynamic else elsif end entry external FALSE false
+syn keyword modelKeyword fi file for formal fortran global if iff ift in integer include
+syn keyword modelKeyword inline is lbnd max min mod new NIL nil noresult not notin od of
+syn keyword modelKeyword or procedure public read readln readonly record recursive rem rep
+syn keyword modelKeyword repeat res result return set space string subscript such then TRUE
+syn keyword modelKeyword true type ubnd union until varies while width
+
+" Special keywords
+syn keyword modelBlock beginproc endproc
+
+" Comments
+syn region modelComment start="\$" end="\$" end="$"
+
+" Strings
+syn region modelString start=+"+ end=+"+
+
+" Character constant (is this right?)
+syn match modelString "'."
+
+" 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_model_syntax_inits")
+ if version < 508
+ let did_model_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink modelKeyword Statement
+ HiLink modelBlock PreProc
+ HiLink modelComment Comment
+ HiLink modelString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "model"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/modsim3.vim b/runtime/syntax/modsim3.vim
new file mode 100644
index 000000000..04e9ab9ab
--- /dev/null
+++ b/runtime/syntax/modsim3.vim
@@ -0,0 +1,109 @@
+" Vim syntax file
+" Language: Modsim III, by compuware corporation (www.compuware.com)
+" Maintainer: Philipp Jocham <flip@sbox.tu-graz.ac.at>
+" Extension: *.mod
+" Last Change: 2001 May 10
+"
+" 2001 March 24:
+" - Modsim III is a registered trademark from compuware corporation
+" - made compatible with Vim 6.0
+"
+" 1999 Apr 22 : Changed modsim3Literal from region to match
+"
+" very basic things only (based on the modula2 and c files).
+
+if version < 600
+ " Remove any old syntax stuff hanging around
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+" syn case match " case sensitiv match is default
+
+" A bunch of keywords
+syn keyword modsim3Keyword ACTID ALL AND AS ASK
+syn keyword modsim3Keyword BY CALL CASE CLASS CONST DIV
+syn keyword modsim3Keyword DOWNTO DURATION ELSE ELSIF EXIT FALSE FIXED FOR
+syn keyword modsim3Keyword FOREACH FORWARD IF IN INHERITED INOUT
+syn keyword modsim3Keyword INTERRUPT LOOP
+syn keyword modsim3Keyword MOD MONITOR NEWVALUE
+syn keyword modsim3Keyword NONMODSIM NOT OBJECT OF ON OR ORIGINAL OTHERWISE OUT
+syn keyword modsim3Keyword OVERRIDE PRIVATE PROTO REPEAT
+syn keyword modsim3Keyword RETURN REVERSED SELF STRERR TELL
+syn keyword modsim3Keyword TERMINATE THISMETHOD TO TRUE TYPE UNTIL VALUE VAR
+syn keyword modsim3Keyword WAIT WAITFOR WHEN WHILE WITH
+
+" Builtin functions and procedures
+syn keyword modsim3Builtin ABS ACTIVATE ADDMONITOR CAP CHARTOSTR CHR CLONE
+syn keyword modsim3Builtin DEACTIVATE DEC DISPOSE FLOAT GETMONITOR HIGH INC
+syn keyword modsim3Builtin INPUT INSERT INTTOSTR ISANCESTOR LOW LOWER MAX MAXOF
+syn keyword modsim3Builtin MIN MINOF NEW OBJTYPEID OBJTYPENAME OBJVARID ODD
+syn keyword modsim3Builtin ONERROR ONEXIT ORD OUTPUT POSITION PRINT REALTOSTR
+syn keyword modsim3Builtin REPLACE REMOVEMONITOR ROUND SCHAR SIZEOF SPRINT
+syn keyword modsim3Builtin STRLEN STRTOCHAR STRTOINT STRTOREAL SUBSTR TRUNC
+syn keyword modsim3Builtin UPDATEVALUE UPPER VAL
+
+syn keyword modsim3BuiltinNoParen HALT TRACE
+
+" Special keywords
+syn keyword modsim3Block PROCEDURE METHOD MODULE MAIN DEFINITION IMPLEMENTATION
+syn keyword modsim3Block BEGIN END
+
+syn keyword modsim3Include IMPORT FROM
+
+syn keyword modsim3Type ANYARRAY ANYOBJ ANYREC ARRAY BOOLEAN CHAR INTEGER
+syn keyword modsim3Type LMONITORED LRMONITORED NILARRAY NILOBJ NILREC REAL
+syn keyword modsim3Type RECORD RMONITOR RMONITORED STRING
+
+" catch errros cause by wrong parenthesis
+" slight problem with "( *)" or "(* )". Hints?
+syn region modsim3Paren transparent start='(' end=')' contains=ALLBUT,modsim3ParenError
+syn match modsim3ParenError ")"
+
+" Comments
+syn region modsim3Comment1 start="{" end="}" contains=modsim3Comment1,modsim3Comment2
+syn region modsim3Comment2 start="(\*" end="\*)" contains=modsim3Comment1,modsim3Comment2
+" highlighting is wrong for constructs like "{ (* } *)",
+" which are allowed in Modsim III, but
+" I think something like that shouldn't be used anyway.
+
+" Strings
+syn region modsim3String start=+"+ end=+"+
+
+" Literals
+"syn region modsim3Literal start=+'+ end=+'+
+syn match modsim3Literal "'[^']'\|''''"
+
+" 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_modsim3_syntax_inits")
+ if version < 508
+ let did_modsim3_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 modsim3Keyword Statement
+ HiLink modsim3Block Statement
+ HiLink modsim3Comment1 Comment
+ HiLink modsim3Comment2 Comment
+ HiLink modsim3String String
+ HiLink modsim3Literal Character
+ HiLink modsim3Include Statement
+ HiLink modsim3Type Type
+ HiLink modsim3ParenError Error
+ HiLink modsim3Builtin Function
+ HiLink modsim3BuiltinNoParen Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "modsim3"
+
+" vim: ts=8 sw=2
+
diff --git a/runtime/syntax/modula2.vim b/runtime/syntax/modula2.vim
new file mode 100644
index 000000000..3018900e8
--- /dev/null
+++ b/runtime/syntax/modula2.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: Modula 2
+" Maintainer: pf@artcom0.north.de (Peter Funk)
+" based on original work of Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 09
+
+" 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
+
+" Don't ignore case (Modula-2 is case significant). This is the default in vim
+
+" Especially emphasize headers of procedures and modules:
+syn region modula2Header matchgroup=modula2Header start="PROCEDURE " end="(" contains=modula2Ident oneline
+syn region modula2Header matchgroup=modula2Header start="MODULE " end=";" contains=modula2Ident oneline
+syn region modula2Header matchgroup=modula2Header start="BEGIN (\*" end="\*)" contains=modula2Ident oneline
+syn region modula2Header matchgroup=modula2Header start="END " end=";" contains=modula2Ident oneline
+syn region modula2Keyword start="END" end=";" contains=ALLBUT,modula2Ident oneline
+
+" Some very important keywords which should be emphasized more than others:
+syn keyword modula2AttKeyword CONST EXIT HALT RETURN TYPE VAR
+" All other keywords in alphabetical order:
+syn keyword modula2Keyword AND ARRAY BY CASE DEFINITION DIV DO ELSE
+syn keyword modula2Keyword ELSIF EXPORT FOR FROM IF IMPLEMENTATION IMPORT
+syn keyword modula2Keyword IN LOOP MOD NOT OF OR POINTER QUALIFIED RECORD
+syn keyword modula2Keyword SET THEN TO UNTIL WHILE WITH
+
+syn keyword modula2Type ADDRESS BITSET BOOLEAN CARDINAL CHAR INTEGER REAL WORD
+syn keyword modula2StdFunc ABS CAP CHR DEC EXCL INC INCL ORD SIZE TSIZE VAL
+syn keyword modula2StdConst FALSE NIL TRUE
+" The following may be discussed, since NEW and DISPOSE are some kind of
+" special builtin macro functions:
+syn keyword modula2StdFunc NEW DISPOSE
+" The following types are added later on and may be missing from older
+" Modula-2 Compilers (they are at least missing from the original report
+" by N.Wirth from March 1980 ;-) Highlighting should apply nevertheless:
+syn keyword modula2Type BYTE LONGCARD LONGINT LONGREAL PROC SHORTCARD SHORTINT
+" same note applies to min and max, which were also added later to m2:
+syn keyword modula2StdFunc MAX MIN
+" The underscore was originally disallowed in m2 ids, it was also added later:
+syn match modula2Ident " [A-Z,a-z][A-Z,a-z,0-9,_]*" contained
+
+" Comments may be nested in Modula-2:
+syn region modula2Comment start="(\*" end="\*)" contains=modula2Comment,modula2Todo
+syn keyword modula2Todo contained TODO FIXME XXX
+
+" Strings
+syn region modula2String start=+"+ end=+"+
+syn region modula2String start="'" end="'"
+syn region modula2Set start="{" end="}"
+
+" 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_modula2_syntax_inits")
+ if version < 508
+ let did_modula2_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink modula2Ident Identifier
+ HiLink modula2StdConst Boolean
+ HiLink modula2Type Identifier
+ HiLink modula2StdFunc Identifier
+ HiLink modula2Header Type
+ HiLink modula2Keyword Statement
+ HiLink modula2AttKeyword PreProc
+ HiLink modula2Comment Comment
+ " The following is just a matter of taste (you want to try this instead):
+ " hi modula2Comment term=bold ctermfg=DarkBlue guifg=Blue gui=bold
+ HiLink modula2Todo Todo
+ HiLink modula2String String
+ HiLink modula2Set String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "modula2"
+
+" vim: ts=8
diff --git a/runtime/syntax/modula3.vim b/runtime/syntax/modula3.vim
new file mode 100644
index 000000000..d6f72afbc
--- /dev/null
+++ b/runtime/syntax/modula3.vim
@@ -0,0 +1,72 @@
+" Vim syntax file
+" Language: Modula-3
+" Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se>
+" Last Change: 2001 May 10
+
+" Basic things only...
+" Based on the modula 2 syntax file
+
+" 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
+
+" Modula-3 is case-sensitive
+" syn case ignore
+
+" Modula-3 keywords
+syn keyword modula3Keyword ABS ADDRES ADR ADRSIZE AND ANY
+syn keyword modula3Keyword ARRAY AS BITS BITSIZE BOOLEAN BRANDED BY BYTESIZE
+syn keyword modula3Keyword CARDINAL CASE CEILING CHAR CONST DEC DEFINITION
+syn keyword modula3Keyword DISPOSE DIV
+syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION
+syn keyword modula3Keyword EXIT EXPORTS EXTENDED FALSE FINALLY FIRST FLOAT
+syn keyword modula3Keyword FLOOR FROM GENERIC IMPORT
+syn keyword modula3Keyword IN INC INTEGER ISTYPE LAST LOCK
+syn keyword modula3Keyword LONGREAL LOOPHOLE MAX METHOD MIN MOD MUTEX
+syn keyword modula3Keyword NARROW NEW NIL NOT NULL NUMBER OF OR ORD RAISE
+syn keyword modula3Keyword RAISES READONLY REAL RECORD REF REFANY
+syn keyword modula3Keyword RETURN ROOT
+syn keyword modula3Keyword ROUND SET SUBARRAY TEXT TRUE TRUNC TRY TYPE
+syn keyword modula3Keyword TYPECASE TYPECODE UNSAFE UNTRACED VAL VALUE VAR WITH
+
+" Special keywords, block delimiters etc
+syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN
+syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL
+syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP
+
+" Comments
+syn region modula3Comment start="(\*" end="\*)"
+
+" Strings
+syn region modula3String start=+"+ end=+"+
+syn region modula3String start=+'+ end=+'+
+
+" 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_modula3_syntax_inits")
+ if version < 508
+ let did_modula3_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 modula3Keyword Statement
+ HiLink modula3Block PreProc
+ HiLink modula3Comment Comment
+ HiLink modula3String String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "modula3"
+
+"I prefer to use this...
+"set ai
+"vim: ts=8
diff --git a/runtime/syntax/monk.vim b/runtime/syntax/monk.vim
new file mode 100644
index 000000000..560b79c67
--- /dev/null
+++ b/runtime/syntax/monk.vim
@@ -0,0 +1,228 @@
+" Vim syntax file
+" Language: Monk (See-Beyond Technologies)
+" Maintainer: Mike Litherland <litherm@ccf.org>
+" Last Change: March 6, 2002
+
+" This syntax file is good enough for my needs, but others
+" may desire more features. Suggestions and bug reports
+" are solicited by the author (above).
+
+" Originally based on the Scheme syntax file by:
+
+" Maintainer: Dirk van Deun <dvandeun@poboxes.com>
+" Last Change: April 30, 1998
+
+" In fact it's almost identical. :)
+
+" The original author's notes:
+" 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.
+
+" Initializing:
+
+" 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
+
+" Fascist highlighting: everything that doesn't fit the rules is an error...
+
+syn match monkError oneline ![^ \t()";]*!
+syn match monkError oneline ")"
+
+" Quoted and backquoted stuff
+
+syn region monkQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+syn region monkQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+syn region monkQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+syn region monkStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+syn region monkStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+syn region monkUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+syn region monkUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+syn region monkUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+syn region monkUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+syn region monkUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+syn region monkUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
+
+" R5RS Scheme Functions and Syntax:
+
+if version < 600
+ set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
+else
+ setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
+endif
+
+syn keyword monkSyntax lambda and or if cond case define let let* letrec
+syn keyword monkSyntax begin do delay set! else =>
+syn keyword monkSyntax quote quasiquote unquote unquote-splicing
+syn keyword monkSyntax define-syntax let-syntax letrec-syntax syntax-rules
+
+syn keyword monkFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
+syn keyword monkFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
+syn keyword monkFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
+syn keyword monkFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
+syn keyword monkFunc cddaar cddadr cdddar cddddr null? list? list length
+syn keyword monkFunc append reverse list-ref memq memv member assq assv assoc
+syn keyword monkFunc symbol? symbol->string string->symbol number? complex?
+syn keyword monkFunc real? rational? integer? exact? inexact? = < > <= >=
+syn keyword monkFunc zero? positive? negative? odd? even? max min + * - / abs
+syn keyword monkFunc quotient remainder modulo gcd lcm numerator denominator
+syn keyword monkFunc floor ceiling truncate round rationalize exp log sin cos
+syn keyword monkFunc tan asin acos atan sqrt expt make-rectangular make-polar
+syn keyword monkFunc real-part imag-part magnitude angle exact->inexact
+syn keyword monkFunc inexact->exact number->string string->number char=?
+syn keyword monkFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
+syn keyword monkFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
+syn keyword monkFunc char-numeric? char-whitespace? char-upper-case?
+syn keyword monkFunc char-lower-case?
+syn keyword monkFunc char->integer integer->char char-upcase char-downcase
+syn keyword monkFunc string? make-string string string-length string-ref
+syn keyword monkFunc string-set! string=? string-ci=? string<? string-ci<?
+syn keyword monkFunc string>? string-ci>? string<=? string-ci<=? string>=?
+syn keyword monkFunc string-ci>=? substring string-append vector? make-vector
+syn keyword monkFunc vector vector-length vector-ref vector-set! procedure?
+syn keyword monkFunc apply map for-each call-with-current-continuation
+syn keyword monkFunc call-with-input-file call-with-output-file input-port?
+syn keyword monkFunc output-port? current-input-port current-output-port
+syn keyword monkFunc open-input-file open-output-file close-input-port
+syn keyword monkFunc close-output-port eof-object? read read-char peek-char
+syn keyword monkFunc write display newline write-char call/cc
+syn keyword monkFunc list-tail string->list list->string string-copy
+syn keyword monkFunc string-fill! vector->list list->vector vector-fill!
+syn keyword monkFunc force with-input-from-file with-output-to-file
+syn keyword monkFunc char-ready? load transcript-on transcript-off eval
+syn keyword monkFunc dynamic-wind port? values call-with-values
+syn keyword monkFunc monk-report-environment null-environment
+syn keyword monkFunc interaction-environment
+
+" Keywords specific to STC's implementation
+
+syn keyword monkFunc $event-clear $event-parse $event->string $make-event-map
+syn keyword monkFunc $resolve-event-definition change-pattern copy copy-strip
+syn keyword monkFunc count-data-children count-map-children count-rep data-map
+syn keyword monkFunc duplicate duplicate-strip file-check file-lookup get
+syn keyword monkFunc insert list-lookup node-has-data? not-verify path?
+syn keyword monkFunc path-defined-as-repeating? path-nodeclear path-nodedepth
+syn keyword monkFunc path-nodename path-nodeparentname path->string path-valid?
+syn keyword monkFunc regex string->path timestamp uniqueid verify
+
+" Keywords from the Monk function library (from e*Gate 4.1 programmers ref)
+syn keyword monkFunc allcap? capitalize char-punctuation? char-substitute
+syn keyword monkFunc char-to-char conv count-used-children degc->degf
+syn keyword monkFunc diff-two-dates display-error empty-string? fail_id
+syn keyword monkFunc fail_id_if fail_translation fail_translation_if
+syn keyword monkFunc find-get-after find-get-before get-timestamp julian-date?
+syn keyword monkFunc julian->standard leap-year? map-string not-empty-string?
+syn keyword monkFunc standard-date? standard->julian string-begins-with?
+syn keyword monkFunc string-contains? string-ends-with? string-search-from-left
+syn keyword monkFunc string-search-from-right string->ssn strip-punct
+syn keyword monkFunc strip-string substring=? symbol-table-get symbol-table-put
+syn keyword monkFunc trim-string-left trim-string-right valid-decimal?
+syn keyword monkFunc valid-integer? verify-type
+
+" Writing out the complete description of Scheme numerals without
+" using variables is a day's work for a trained secretary...
+" This is a useful lax approximation:
+
+syn match monkNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
+syn match monkError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
+
+syn match monkOther oneline ![+-][ \t()";]!me=e-1
+syn match monkOther oneline ![+-]$!
+" ... so that a single + or -, inside a quoted context, would not be
+" interpreted as a number (outside such contexts, it's a monkFunc)
+
+syn match monkDelimiter oneline !\.[ \t()";]!me=e-1
+syn match monkDelimiter oneline !\.$!
+" ... and a single dot is not a number but a delimiter
+
+" Simple literals:
+
+syn match monkBoolean oneline "#[tf]"
+syn match monkError oneline !#[tf][^ \t()";]\+!
+
+syn match monkChar oneline "#\\"
+syn match monkChar oneline "#\\."
+syn match monkError oneline !#\\.[^ \t()";]\+!
+syn match monkChar oneline "#\\space"
+syn match monkError oneline !#\\space[^ \t()";]\+!
+syn match monkChar oneline "#\\newline"
+syn match monkError oneline !#\\newline[^ \t()";]\+!
+
+" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
+
+syn match monkOther oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
+syn match monkError oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+syn match monkOther oneline "\.\.\."
+syn match monkError oneline !\.\.\.[^ \t()";]\+!
+" ... a special identifier
+
+syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
+syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
+syn match monkError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
+syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
+syn match monkError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+" Monk input and output structures
+syn match monkSyntax oneline "\(\~input\|\[I\]->\)[^ \t]*"
+syn match monkFunc oneline "\(\~output\|\[O\]->\)[^ \t]*"
+
+" Non-quoted lists, and strings:
+
+syn region monkStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
+syn region monkStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
+
+syn region monkString start=+"+ skip=+\\[\\"]+ end=+"+
+
+" Comments:
+
+syn match monkComment ";.*$"
+
+" Synchronization and the wrapping up...
+
+syn sync match matchPlace grouphere NONE "^[^ \t]"
+" ... i.e. synchronize on a line that starts at the left margin
+
+" 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_monk_syntax_inits")
+ if version < 508
+ let did_monk_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink monkSyntax Statement
+ HiLink monkFunc Function
+
+ HiLink monkString String
+ HiLink monkChar Character
+ HiLink monkNumber Number
+ HiLink monkBoolean Boolean
+
+ HiLink monkDelimiter Delimiter
+ HiLink monkConstant Constant
+
+ HiLink monkComment Comment
+ HiLink monkError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "monk"
diff --git a/runtime/syntax/moo.vim b/runtime/syntax/moo.vim
new file mode 100644
index 000000000..10c5d3b4b
--- /dev/null
+++ b/runtime/syntax/moo.vim
@@ -0,0 +1,173 @@
+" Vim syntax file
+" Language: MOO
+" Maintainer: Timo Frenay <timo@frenay.net>
+" Last Change: 2001 Oct 06
+" Note: Requires Vim 6.0 or above
+
+" Quit when a syntax file was already loaded
+if version < 600 || exists("b:current_syntax")
+ finish
+endif
+
+" Initializations
+syn case ignore
+
+" C-style comments
+syn match mooUncommentedError display ~\*/~
+syn match mooCStyleCommentError display ~/\ze\*~ contained
+syn region mooCStyleComment matchgroup=mooComment start=~/\*~ end=~\*/~ contains=mooCStyleCommentError
+
+" Statements
+if exists("moo_extended_cstyle_comments")
+ syn match mooIdentifier display ~\%(\%(/\*.\{-}\*/\s*\)*\)\@>\<\h\w*\>~ contained transparent contains=mooCStyleComment,@mooKeyword,mooType,mooVariable
+else
+ syn match mooIdentifier display ~\<\h\w*\>~ contained transparent contains=@mooKeyword,mooType,mooVariable
+endif
+syn keyword mooStatement break continue else elseif endfor endfork endif endtry endwhile finally for if try
+syn keyword mooStatement except fork while nextgroup=mooIdentifier skipwhite
+syn keyword mooStatement return nextgroup=mooString skipwhite
+
+" Operators
+syn keyword mooOperatorIn in
+
+" Error constants
+syn keyword mooAny ANY
+syn keyword mooErrorConstant E_ARGS E_INVARG E_DIV E_FLOAT E_INVIND E_MAXREC E_NACC E_NONE E_PERM E_PROPNF E_QUOTA E_RANGE E_RECMOVE E_TYPE E_VARNF E_VERBNF
+
+" Builtin variables
+syn match mooType display ~\<\%(ERR\|FLOAT\|INT\|LIST\|NUM\|OBJ\|STR\)\>~
+syn match mooVariable display ~\<\%(args\%(tr\)\=\|caller\|dobj\%(str\)\=\|iobj\%(str\)\=\|player\|prepstr\|this\|verb\)\>~
+
+" Strings
+syn match mooStringError display ~[^\t -[\]-~]~ contained
+syn match mooStringSpecialChar display ~\\["\\]~ contained
+if !exists("moo_no_regexp")
+ " Regular expressions
+ syn match mooRegexp display ~%%~ contained containedin=mooString,mooRegexpParentheses transparent contains=NONE
+ syn region mooRegexpParentheses display matchgroup=mooRegexpOr start=~%(~ skip=~%%~ end=~%)~ contained containedin=mooString,mooRegexpParentheses transparent oneline
+ syn match mooRegexpOr display ~%|~ contained containedin=mooString,mooRegexpParentheses
+endif
+if !exists("moo_no_pronoun_sub")
+ " Pronoun substitutions
+ syn match mooPronounSub display ~%%~ contained containedin=mooString transparent contains=NONE
+ syn match mooPronounSub display ~%[#dilnopqrst]~ contained containedin=mooString
+ syn match mooPronounSub display ~%\[#[dilnt]\]~ contained containedin=mooString
+ syn match mooPronounSub display ~%(\h\w*)~ contained containedin=mooString
+ syn match mooPronounSub display ~%\[[dilnt]\h\w*\]~ contained containedin=mooString
+ syn match mooPronounSub display ~%<\%([dilnt]:\)\=\a\+>~ contained containedin=mooString
+endif
+if exists("moo_unmatched_quotes")
+ syn region mooString matchgroup=mooStringError start=~"~ end=~$~ contains=@mooStringContents keepend
+ syn region mooString start=~"~ skip=~\\.~ end=~"~ contains=@mooStringContents oneline keepend
+else
+ syn region mooString start=~"~ skip=~\\.~ end=~"\|$~ contains=@mooStringContents keepend
+endif
+
+" Numbers and object numbers
+syn match mooNumber display ~\%(\%(\<\d\+\)\=\.\d\+\|\<\d\+\)\%(e[+\-]\=\d\+\)\=\>~
+syn match mooObject display ~#-\=\d\+\>~
+
+" Properties and verbs
+if exists("moo_builtin_properties")
+ "Builtin properties
+ syn keyword mooBuiltinProperty contents f location name owner programmer r w wizard contained containedin=mooPropRef
+endif
+if exists("moo_extended_cstyle_comments")
+ syn match mooPropRef display ~\.\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\h\w*\>~ transparent contains=mooCStyleComment,@mooKeyword
+ syn match mooVerbRef display ~:\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\h\w*\>~ transparent contains=mooCStyleComment,@mooKeyword
+else
+ syn match mooPropRef display ~\.\s*\h\w*\>~ transparent contains=@mooKeyword
+ syn match mooVerbRef display ~:\s*\h\w*\>~ transparent contains=@mooKeyword
+endif
+
+" Builtin functions, core properties and core verbs
+if exists("moo_extended_cstyle_comments")
+ syn match mooBuiltinFunction display ~\<\h\w*\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\ze(~ contains=mooCStyleComment
+ syn match mooCorePropOrVerb display ~\$\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>\%(in\>\)\@!\h\w*\>~ contains=mooCStyleComment,@mooKeyword
+else
+ syn match mooBuiltinFunction display ~\<\h\w*\s*\ze(~ contains=NONE
+ syn match mooCorePropOrVerb display ~\$\s*\%(in\>\)\@!\h\w*\>~ contains=@mooKeyword
+endif
+if exists("moo_unknown_builtin_functions")
+ syn match mooUnknownBuiltinFunction ~\<\h\w*\>~ contained containedin=mooBuiltinFunction contains=mooKnownBuiltinFunction
+ " Known builtin functions as of version 1.8.1 of the server
+ " Add your own extensions to this group if you like
+ syn keyword mooKnownBuiltinFunction abs acos add_property add_verb asin atan binary_hash boot_player buffered_output_length callers caller_perms call_function ceil children chparent clear_property connected_players connected_seconds connection_name connection_option connection_options cos cosh create crypt ctime db_disk_size decode_binary delete_property delete_verb disassemble dump_database encode_binary equal eval exp floatstr floor flush_input force_input function_info idle_seconds index is_clear_property is_member is_player kill_task length listappend listdelete listen listeners listinsert listset log log10 match max max_object memory_usage min move notify object_bytes open_network_connection output_delimiters parent pass players properties property_info queued_tasks queue_info raise random read recycle renumber reset_max_object resume rindex rmatch seconds_left server_log server_version setadd setremove set_connection_option set_player_flag set_property_info set_task_perms set_verb_args set_verb_code set_verb_info shutdown sin sinh sqrt strcmp string_hash strsub substitute suspend tan tanh task_id task_stack ticks_left time tofloat toint toliteral tonum toobj tostr trunc typeof unlisten valid value_bytes value_hash verbs verb_args verb_code verb_info contained
+endif
+
+" Enclosed expressions
+syn match mooUnenclosedError display ~[')\]|}]~
+syn match mooParenthesesError display ~[';\]|}]~ contained
+syn region mooParentheses start=~(~ end=~)~ transparent contains=@mooEnclosedContents,mooParenthesesError
+syn match mooBracketsError display ~[');|}]~ contained
+syn region mooBrackets start=~\[~ end=~\]~ transparent contains=@mooEnclosedContents,mooBracketsError
+syn match mooBracesError display ~[');\]|]~ contained
+syn region mooBraces start=~{~ end=~}~ transparent contains=@mooEnclosedContents,mooBracesError
+syn match mooQuestionError display ~[');\]}]~ contained
+syn region mooQuestion start=~?~ end=~|~ transparent contains=@mooEnclosedContents,mooQuestionError
+syn match mooCatchError display ~[);\]|}]~ contained
+syn region mooCatch matchgroup=mooExclamation start=~`~ end=~'~ transparent contains=@mooEnclosedContents,mooCatchError,mooExclamation
+if exists("moo_extended_cstyle_comments")
+ syn match mooExclamation display ~[\t !%&(*+,\-/<=>?@[^`{|]\@<!\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>!=\@!~ contained contains=mooCStyleComment
+else
+ syn match mooExclamation display ~[\t !%&(*+,\-/<=>?@[^`{|]\@<!\s*!=\@!~ contained
+endif
+
+" Comments
+syn match mooCommentSpecialChar display ~\\["\\]~ contained transparent contains=NONE
+syn match mooComment ~[\t !%&*+,\-/<=>?@^|]\@<!\s*"\([^\"]\|\\.\)*"\s*;~ contains=mooStringError,mooCommentSpecialChar
+
+" Non-code
+syn region mooNonCode start=~^\s*@\<~ end=~$~
+syn match mooNonCode display ~^\.$~
+syn match mooNonCode display ~^\s*\d\+:~he=e-1
+
+" Overriding matches
+syn match mooRangeOperator display ~\.\.~ transparent contains=NONE
+syn match mooOrOperator display ~||~ transparent contains=NONE
+if exists("moo_extended_cstyle_comments")
+ syn match mooScattering ~[,{]\@<=\s*\%(\%(/\*.\{-}\*/\s*\)*\)\@>?~ transparent contains=mooCStyleComment
+else
+ syn match mooScattering ~[,{]\@<=\s*?~ transparent contains=NONE
+endif
+
+" Clusters
+syn cluster mooKeyword contains=mooStatement,mooOperatorIn,mooAny,mooErrorConstant
+syn cluster mooStringContents contains=mooStringError,mooStringSpecialChar
+syn cluster mooEnclosedContents contains=TOP,mooUnenclosedError,mooComment,mooNonCode
+
+" Define the default highlighting.
+hi def link mooUncommentedError Error
+hi def link mooCStyleCommentError Error
+hi def link mooCStyleComment Comment
+hi def link mooStatement Statement
+hi def link mooOperatorIn Operator
+hi def link mooAny Constant " link this to Keyword if you want
+hi def link mooErrorConstant Constant
+hi def link mooType Type
+hi def link mooVariable Type
+hi def link mooStringError Error
+hi def link mooStringSpecialChar SpecialChar
+hi def link mooRegexpOr SpecialChar
+hi def link mooPronounSub SpecialChar
+hi def link mooString String
+hi def link mooNumber Number
+hi def link mooObject Number
+hi def link mooBuiltinProperty Type
+hi def link mooBuiltinFunction Function
+hi def link mooUnknownBuiltinFunction Error
+hi def link mooKnownBuiltinFunction Function
+hi def link mooCorePropOrVerb Identifier
+hi def link mooUnenclosedError Error
+hi def link mooParenthesesError Error
+hi def link mooBracketsError Error
+hi def link mooBracesError Error
+hi def link mooQuestionError Error
+hi def link mooCatchError Error
+hi def link mooExclamation Exception
+hi def link mooComment Comment
+hi def link mooNonCode PreProc
+
+let b:current_syntax = "moo"
+
+" vim: ts=8
diff --git a/runtime/syntax/mp.vim b/runtime/syntax/mp.vim
new file mode 100644
index 000000000..c0fd60b3d
--- /dev/null
+++ b/runtime/syntax/mp.vim
@@ -0,0 +1,132 @@
+" Vim syntax file
+" Language: MetaPost
+" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: April 30, 2001
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+let plain_mf_macros = 0 " plain.mf has no special meaning for MetaPost
+let other_mf_macros = 0 " cmbase.mf, logo.mf, ... neither
+
+" Read the Metafont syntax to start with
+if version < 600
+ source <sfile>:p:h/mf.vim
+else
+ runtime! syntax/mf.vim
+endif
+
+" MetaPost has TeX inserts for typeset labels
+" verbatimtex, btex, and etex will be treated as keywords
+syn match mpTeXbegin "\(verbatimtex\|btex\)"
+syn match mpTeXend "etex"
+syn region mpTeXinsert start="\(verbatimtex\|btex\)"hs=e+1 end="etex"he=s-1 contains=mpTeXbegin,mpTeXend keepend
+
+" MetaPost primitives not found in Metafont
+syn keyword mpInternal bluepart clip color dashed fontsize greenpart infont
+syn keyword mpInternal linecap linejoin llcorner lrcorner miterlimit mpxbreak
+syn keyword mpInternal prologues redpart setbounds tracinglostchars
+syn keyword mpInternal truecorners ulcorner urcorner withcolor
+
+" Metafont primitives not found in MetaPost
+syn keyword notDefined autorounding chardx chardy fillin granularity hppp
+syn keyword notDefined proofing smoothing tracingedges tracingpens
+syn keyword notDefined turningcheck vppp xoffset yoffset
+
+" Keywords defined by plain.mp
+if !exists("plain_mp_macros")
+ let plain_mp_macros = 1 " Set this to '0' if your source gets too colourful
+endif
+if plain_mp_macros
+ syn keyword mpMacro ahangle ahlength background bbox bboxmargin beginfig
+ syn keyword mpMacro beveled black blue buildcycle butt center cutafter
+ syn keyword mpMacro cutbefore cuttings dashpattern defaultfont defaultpen
+ syn keyword mpMacro defaultscale dotlabel dotlabels drawarrow drawdblarrow
+ syn keyword mpMacro drawoptions endfig evenly extra_beginfig extra_endfig
+ syn keyword mpMacro green label labeloffset mitered red rounded squared
+ syn keyword mpMacro thelabel white base_name base_version
+ syn keyword mpMacro upto downto exitunless relax gobble gobbled
+ syn keyword mpMacro interact loggingall tracingall tracingnone
+ syn keyword mpMacro eps epsilon infinity right left up down origin
+ syn keyword mpMacro quartercircle halfcircle fullcircle unitsquare identity
+ syn keyword mpMacro blankpicture withdots ditto EOF pensquare penrazor
+ syn keyword mpMacro penspeck whatever abs round ceiling byte dir unitvector
+ syn keyword mpMacro inverse counterclockwise tensepath mod div dotprod
+ syn keyword mpMacro takepower direction directionpoint intersectionpoint
+ syn keyword mpMacro softjoin incr decr reflectedabout rotatedaround
+ syn keyword mpMacro rotatedabout min max flex superellipse interpath
+ syn keyword mpMacro magstep currentpen currentpen_path currentpicture
+ syn keyword mpMacro fill draw filldraw drawdot unfill undraw unfilldraw
+ syn keyword mpMacro undrawdot erase cutdraw image pickup numeric_pickup
+ syn keyword mpMacro pen_lft pen_rt pen_top pen_bot savepen clearpen
+ syn keyword mpMacro clear_pen_memory lft rt top bot ulft urt llft lrt
+ syn keyword mpMacro penpos penstroke arrowhead makelabel labels penlabel
+ syn keyword mpMacro range numtok thru clearxy clearit clearpen pickup
+ syn keyword mpMacro shipit bye hide stop solve
+endif
+
+" Keywords defined by mfplain.mp
+if !exists("mfplain_mp_macros")
+ let mfplain_mp_macros = 0 " Set this to '1' to include these macro names
+endif
+if mfplain_mp_macros
+ syn keyword mpMacro beginchar blacker capsule_def change_width
+ syn keyword mpMacro define_blacker_pixels define_corrected_pixels
+ syn keyword mpMacro define_good_x_pixels define_good_y_pixels
+ syn keyword mpMacro define_horizontal_corrected_pixels
+ syn keyword mpMacro define_pixels define_whole_blacker_pixels
+ syn keyword mpMacro define_whole_vertical_blacker_pixels
+ syn keyword mpMacro define_whole_vertical_pixels endchar
+ syn keyword mpMacro extra_beginchar extra_endchar extra_setup
+ syn keyword mpMacro font_coding_scheme font_extra_space font_identifier
+ syn keyword mpMacro font_normal_shrink font_normal_space
+ syn keyword mpMacro font_normal_stretch font_quad font_size
+ syn keyword mpMacro font_slant font_x_height italcorr labelfont
+ syn keyword mpMacro makebox makegrid maketicks mode_def mode_setup
+ syn keyword mpMacro o_correction proofrule proofrulethickness rulepen smode
+
+ " plus some no-ops, also from mfplain.mp
+ syn keyword mpMacro cullit currenttransform gfcorners grayfont hround
+ syn keyword mpMacro imagerules lowres_fix nodisplays notransforms openit
+ syn keyword mpMacro proofoffset screenchars screenrule screenstrokes
+ syn keyword mpMacro showit slantfont titlefont unitpixel vround
+endif
+
+" Keywords defined by other macro packages, e.g., boxes.mp
+if !exists("other_mp_macros")
+ let other_mp_macros = 1 " Set this to '0' if your source gets too colourful
+endif
+if other_mp_macros
+ syn keyword mpMacro circmargin defaultdx defaultdy
+ syn keyword mpMacro boxit boxjoin bpath circleit drawboxed drawboxes
+ syn keyword mpMacro drawunboxed fixpos fixsize pic
+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_mp_syntax_inits")
+ if version < 508
+ let did_mp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mpTeXinsert String
+ HiLink mpTeXbegin Statement
+ HiLink mpTeXend Statement
+ HiLink mpInternal mfInternal
+ HiLink mpMacro Macro
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mp"
+
+" vim: ts=8
diff --git a/runtime/syntax/mplayerconf.vim b/runtime/syntax/mplayerconf.vim
new file mode 100644
index 000000000..7abe20a1d
--- /dev/null
+++ b/runtime/syntax/mplayerconf.vim
@@ -0,0 +1,111 @@
+" Vim syntax file
+" Language: mplayer(1) configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/mplayerconf/
+" Latest Revision: 2004-05-22
+" arch-tag: c20b9381-5858-4452-b866-54e2e1891229
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,-
+delcommand SetIsk
+
+" Todo
+syn keyword mplayerconfTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region mplayerconfComment display matchgroup=mplayerconfComment start='#' end='$' contains=mplayerconfTodo
+
+" PreProc
+syn keyword mplayerconfPreProc include
+
+" Booleans
+syn keyword mplayerconfBoolean yes no
+
+" Numbers
+syn match mplayerconfNumber '\<\d\+\>'
+
+" Options
+syn keyword mplayerconfOption hardframedrop nomouseinput bandwidth dumpstream
+syn keyword mplayerconfOption rtsp-stream-over-tcp tv overlapsub sub-bg-alpha
+syn keyword mplayerconfOption subfont-outline unicode format vo edl cookies
+syn keyword mplayerconfOption fps zrfd af-adv nosound audio-density
+syn keyword mplayerconfOption passlogfile vobsuboutindex
+syn keyword mplayerconfOption autoq autosync benchmark colorkey nocolorkey
+syn keyword mplayerconfOption edlout enqueue fixed-vo framedrop h
+syn keyword mplayerconfOption identify input lircconf list-options loop menu
+syn keyword mplayerconfOption menu-cfg menu-root nojoystick nolirc
+syn keyword mplayerconfOption nortc playlist quiet really-quiet shuffle skin
+syn keyword mplayerconfOption slave softsleep speed sstep use-stdin aid alang
+syn keyword mplayerconfOption audio-demuxer audiofile audiofile-cache
+syn keyword mplayerconfOption cdrom-device cache cdda channels chapter
+syn keyword mplayerconfOption cookies-file demuxer dumpaudio dumpfile
+syn keyword mplayerconfOption dumpvideo dvbin dvd-device dvdangle forceidx
+syn keyword mplayerconfOption frames hr-mp3-seek idx ipv4-only-proxy loadidx
+syn keyword mplayerconfOption mc mf ni nobps noextbased passwd prefer-ipv4
+syn keyword mplayerconfOption prefer-ipv6 rawaudio rawvideo
+syn keyword mplayerconfOption saveidx sb srate ss tskeepbroken tsprog tsprobe
+syn keyword mplayerconfOption user user-agent vid vivo dumpjacosub
+syn keyword mplayerconfOption dumpmicrodvdsub dumpmpsub dumpsami dumpsrtsub
+syn keyword mplayerconfOption dumpsub ffactor flip-hebrew font forcedsubsonly
+syn keyword mplayerconfOption fribidi-charset ifo noautosub osdlevel
+syn keyword mplayerconfOption sid slang spuaa spualign spugauss sub
+syn keyword mplayerconfOption sub-bg-color sub-demuxer sub-fuzziness
+syn keyword mplayerconfOption sub-no-text-pp subalign subcc subcp subdelay
+syn keyword mplayerconfOption subfile subfont-autoscale subfont-blur
+syn keyword mplayerconfOption subfont-encoding subfont-osd-scale
+syn keyword mplayerconfOption subfont-text-scale subfps subpos subwidth
+syn keyword mplayerconfOption utf8 vobsub vobsubid abs ao aofile aop delay
+syn keyword mplayerconfOption mixer nowaveheader aa bpp brightness contrast
+syn keyword mplayerconfOption dfbopts display double dr dxr2 fb fbmode
+syn keyword mplayerconfOption fbmodeconfig forcexv fs fsmode-dontuse fstype
+syn keyword mplayerconfOption geometry guiwid hue jpeg monitor-dotclock
+syn keyword mplayerconfOption monitor-hfreq monitor-vfreq monitoraspect
+syn keyword mplayerconfOption nograbpointer nokeepaspect noxv ontop panscan
+syn keyword mplayerconfOption rootwin saturation screenw stop-xscreensaver vm
+syn keyword mplayerconfOption vsync wid xineramascreen z zrbw zrcrop zrdev
+syn keyword mplayerconfOption zrhelp zrnorm zrquality zrvdec zrxdoff ac af
+syn keyword mplayerconfOption afm aspect flip lavdopts noaspect noslices
+syn keyword mplayerconfOption novideo oldpp pp pphelp ssf stereo sws vc vfm x
+syn keyword mplayerconfOption xvidopts xy y zoom vf vop audio-delay
+syn keyword mplayerconfOption audio-preload endpos ffourcc include info
+syn keyword mplayerconfOption noautoexpand noskip o oac of ofps ovc
+syn keyword mplayerconfOption skiplimit v vobsubout vobsuboutid
+syn keyword mplayerconfOption lameopts lavcopts nuvopts xvidencopts
+
+" 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_mplayer_syn_inits")
+ if version < 508
+ let did_mplayer_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mplayerconfTodo Todo
+ HiLink mplayerconfComment Comment
+ HiLink mplayerconfPreProc PreProc
+ HiLink mplayerconfBoolean Boolean
+ HiLink mplayerconfNumber Number
+ HiLink mplayerconfOption Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mplayerconf"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/msidl.vim b/runtime/syntax/msidl.vim
new file mode 100644
index 000000000..cf270eebd
--- /dev/null
+++ b/runtime/syntax/msidl.vim
@@ -0,0 +1,92 @@
+" Vim syntax file
+" Language: MS IDL (Microsoft dialect of Interface Description Language)
+" Maintainer: Vadim Zeitlin <vadim@wxwindows.org>
+" Last Change: 2003 May 11
+
+" 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
+
+" Misc basic
+syn match msidlId "[a-zA-Z][a-zA-Z0-9_]*"
+syn match msidlUUID "{\?[[:xdigit:]]\{8}-\([[:xdigit:]]\{4}-\)\{3}[[:xdigit:]]\{12}}\?"
+syn region msidlString start=/"/ skip=/\\\(\\\\\)*"/ end=/"/
+syn match msidlLiteral "\d\+\(\.\d*\)\="
+syn match msidlLiteral "\.\d\+"
+syn match msidlSpecial contained "[]\[{}:]"
+
+" Comments
+syn keyword msidlTodo contained TODO FIXME XXX
+syn region msidlComment start="/\*" end="\*/" contains=msidlTodo
+syn match msidlComment "//.*" contains=msidlTodo
+syn match msidlCommentError "\*/"
+
+" C style Preprocessor
+syn region msidlIncluded contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+
+syn match msidlIncluded contained "<[^>]*>"
+syn match msidlInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=msidlIncluded,msidlString
+syn region msidlPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=msidlComment,msidlCommentError
+syn region msidlDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=msidlLiteral, msidlString
+
+" Attributes
+syn keyword msidlAttribute contained in out propget propput propputref retval
+syn keyword msidlAttribute contained aggregatable appobject binadable coclass control custom default defaultbind defaultcollelem defaultvalue defaultvtable dispinterface displaybind dual entry helpcontext helpfile helpstring helpstringdll hidden id immediatebind lcid library licensed nonbrowsable noncreatable nonextensible oleautomation optional object public readonly requestedit restricted source string uidefault usesgetlasterror vararg version
+syn match msidlAttribute /uuid(.*)/he=s+4 contains=msidlUUID
+syn match msidlAttribute /helpstring(.*)/he=s+10 contains=msidlString
+syn region msidlAttributes start="\[" end="]" keepend contains=msidlSpecial,msidlString,msidlAttribute,msidlComment,msidlCommentError
+
+" Keywords
+syn keyword msidlEnum enum
+syn keyword msidlImport import importlib
+syn keyword msidlStruct interface library coclass
+syn keyword msidlTypedef typedef
+
+" Types
+syn keyword msidlStandardType byte char double float hyper int long short void wchar_t
+syn keyword msidlStandardType BOOL BSTR HRESULT VARIANT VARIANT_BOOL
+syn region msidlSafeArray start="SAFEARRAY(" end=")" contains=msidlStandardType
+
+syn sync lines=50
+
+" 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_msidl_syntax_inits")
+ if version < 508
+ let did_msidl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink msidlInclude Include
+ HiLink msidlPreProc PreProc
+ HiLink msidlPreCondit PreCondit
+ HiLink msidlDefine Macro
+ HiLink msidlIncluded String
+ HiLink msidlString String
+ HiLink msidlComment Comment
+ HiLink msidlTodo Todo
+ HiLink msidlSpecial SpecialChar
+ HiLink msidlLiteral Number
+ HiLink msidlUUID Number
+
+ HiLink msidlImport Include
+ HiLink msidlEnum StorageClass
+ HiLink msidlStruct Structure
+ HiLink msidlTypedef Typedef
+ HiLink msidlAttribute StorageClass
+
+ HiLink msidlStandardType Type
+ HiLink msidlSafeArray Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "msidl"
+
+" vi: set ts=8 sw=4:
diff --git a/runtime/syntax/msql.vim b/runtime/syntax/msql.vim
new file mode 100644
index 000000000..0716fbb1f
--- /dev/null
+++ b/runtime/syntax/msql.vim
@@ -0,0 +1,100 @@
+" Vim syntax file
+" Language: msql
+" Maintainer: Lutz Eymers <ixtab@polzin.com>
+" URL: http://www.isp.de/data/msql.vim
+" Email: Subject: send syntax_vim.tgz
+" Last Change: 2001 May 10
+"
+" Options msql_sql_query = 1 for SQL syntax highligthing inside strings
+" msql_minlines = x to sync at least x lines backwards
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'msql'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syn cluster htmlPreproc add=msqlRegion
+
+syn case match
+
+" Internal Variables
+syn keyword msqlIntVar ERRMSG contained
+
+" Env Variables
+syn keyword msqlEnvVar SERVER_SOFTWARE SERVER_NAME SERVER_URL GATEWAY_INTERFACE contained
+syn keyword msqlEnvVar SERVER_PROTOCOL SERVER_PORT REQUEST_METHOD PATH_INFO contained
+syn keyword msqlEnvVar PATH_TRANSLATED SCRIPT_NAME QUERY_STRING REMOTE_HOST contained
+syn keyword msqlEnvVar REMOTE_ADDR AUTH_TYPE REMOTE_USER CONTEN_TYPE contained
+syn keyword msqlEnvVar CONTENT_LENGTH HTTPS HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE contained
+syn keyword msqlEnvVar HTTP_ACCECT HTTP_USER_AGENT HTTP_IF_MODIFIED_SINCE contained
+syn keyword msqlEnvVar HTTP_FROM HTTP_REFERER contained
+
+" Inlclude lLite
+syn include @msqlLite <sfile>:p:h/lite.vim
+
+" Msql Region
+syn region msqlRegion matchgroup=Delimiter start="<!$" start="<![^!->D]" end=">" contains=@msqlLite,msql.*
+
+" sync
+if exists("msql_minlines")
+ exec "syn sync minlines=" . msql_minlines
+else
+ syn sync minlines=100
+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_msql_syn_inits")
+ if version < 508
+ let did_msql_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink msqlComment Comment
+ HiLink msqlString String
+ HiLink msqlNumber Number
+ HiLink msqlFloat Float
+ HiLink msqlIdentifier Identifier
+ HiLink msqlGlobalIdentifier Identifier
+ HiLink msqlIntVar Identifier
+ HiLink msqlEnvVar Identifier
+ HiLink msqlFunctions Function
+ HiLink msqlRepeat Repeat
+ HiLink msqlConditional Conditional
+ HiLink msqlStatement Statement
+ HiLink msqlType Type
+ HiLink msqlInclude Include
+ HiLink msqlDefine Define
+ HiLink msqlSpecialChar SpecialChar
+ HiLink msqlParentError Error
+ HiLink msqlTodo Todo
+ HiLink msqlOperator Operator
+ HiLink msqlRelation Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "msql"
+
+if main_syntax == 'msql'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/mush.vim b/runtime/syntax/mush.vim
new file mode 100644
index 000000000..556592783
--- /dev/null
+++ b/runtime/syntax/mush.vim
@@ -0,0 +1,132 @@
+" MUSHcode syntax file
+" Maintainer: Bek Oberin <gossamer@tertius.net.au>
+" Last updated by Rimnal on Mon Aug 20 08:28:56 MDT 2001
+
+" 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
+
+
+" regular mush functions
+syntax keyword mushFunction contained abs acos add after and andflags aposs
+syntax keyword mushFunction contained asin atan before capstr cat ceil center
+syntax keyword mushFunction contained comp con conn controls convsecs convtime
+syntax keyword mushFunction contained cos default delete dist2d dist3d div e
+syntax keyword mushFunction contained edefault edit elements elock eq escape
+syntax keyword mushFunction contained exit exp extract fdiv filter first flags
+syntax keyword mushFunction contained floor fold foreach findable fullname get
+syntax keyword mushFunction contained get_eval grab gt gte hasattr hasflag
+syntax keyword mushFunction contained home idle index insert isdbref isnum
+syntax keyword mushFunction contained isword iter last lattr lcon lcstr
+syntax keyword mushFunction contained ldelete left lexits ljust ln lnum loc
+syntax keyword mushFunction contained locate lock log lpos lt lte lwho map
+syntax keyword mushFunction contained match matchall max member merge mid min
+syntax keyword mushFunction contained mix mod money mudname mul munge name
+syntax keyword mushFunction contained nearby neq next not num obj objeval
+syntax keyword mushFunction contained objmem or orflags owner parent parse pi
+syntax keyword mushFunction contained ports pos poss power r rand remove repeat
+syntax keyword mushFunction contained replace rest reverse revwords right
+syntax keyword mushFunction contained rjust rloc room round s scramble search
+syntax keyword mushFunction contained secs secure setdiff setinter setq
+syntax keyword mushFunction contained setunion shuffle sign sin sort sortby
+syntax keyword mushFunction contained space splice sqrt squish starttime stats
+syntax keyword mushFunction contained strlen strmatch sub subj switch tan time
+syntax keyword mushFunction contained trim trunc type u ucstr udefault ulocal
+syntax keyword mushFunction contained v version visible where wordpos words
+syntax keyword mushFunction contained xcon xor
+" only highligh functions when they have an in-bracket immediately after
+syntax match mushFunctionBrackets "\i\I*(" contains=mushFunction
+
+" regular mush commands
+syntax keyword mushAtCommandList contained @alias @chown @clone @create
+syntax keyword mushAtCommandList contained @decompile @destroy @doing @dolist
+syntax keyword mushAtCommandList contained @drain @edit @emit @entrances @femit
+syntax keyword mushAtCommandList contained @force @fpose @fsay @halt @last
+syntax keyword mushAtCommandList contained @link @list @listmotd @lock @mudwho
+syntax keyword mushAtCommandList contained @mvattr @name @notify @oemit @parent
+syntax keyword mushAtCommandList contained @password @pemit @ps @quota @robot
+syntax keyword mushAtCommandList contained @search @set @stats @sweep @switch
+syntax keyword mushAtCommandList contained @teleport @trigger @unlink @unlock
+syntax keyword mushAtCommandList contained @verb @wait @wipe
+syntax match mushCommand "@\i\I*" contains=mushAtCommandList
+
+
+syntax keyword mushCommand drop enter examine get give goto help inventory
+syntax keyword mushCommand kill leave look news page pose say score use
+syntax keyword mushCommand version whisper DOING LOGOUT OUTPUTPREFIX
+syntax keyword mushCommand OUTPUTSUFFIX QUIT SESSION WHO
+
+syntax match mushSpecial "\*\|!\|=\|-\|\\\|+"
+syntax match mushSpecial2 contained "\*"
+
+syntax match mushIdentifier "&[^ ]\+"
+
+syntax match mushVariable "%r\|%t\|%cr\|%[A-Za-z0-9]\+\|%#\|##\|here"
+
+" numbers
+syntax match mushNumber +[0-9]\++
+
+" A comment line starts with a or # or " at the start of the line
+" or an @@
+syntax keyword mushTodo contained TODO FIXME XXX
+syntax match mushComment +^\s*@@.*$+ contains=mushTodo
+syntax match mushComment +^".*$+ contains=mushTodo
+syntax match mushComment +^#.*$+ contains=mushTodo
+
+syntax region mushFuncBoundaries start="\[" end="\]" contains=mushFunction,mushFlag,mushAttributes,mushNumber,mushCommand,mushVariable,mushSpecial2
+
+" FLAGS
+syntax keyword mushFlag PLAYER ABODE BUILDER CHOWN_OK DARK FLOATING
+syntax keyword mushFlag GOING HAVEN INHERIT JUMP_OK KEY LINK_OK MONITOR
+syntax keyword mushFlag NOSPOOF OPAQUE QUIET STICKY TRACE UNFINDABLE VISUAL
+syntax keyword mushFlag WIZARD PARENT_OK ZONE AUDIBLE CONNECTED DESTROY_OK
+syntax keyword mushFlag ENTER_OK HALTED IMMORTAL LIGHT MYOPIC PUPPET TERSE
+syntax keyword mushFlag ROBOT SAFE TRANSPARENT VERBOSE CONTROL_OK COMMANDS
+
+syntax keyword mushAttribute aahear aclone aconnect adesc adfail adisconnect
+syntax keyword mushAttribute adrop aefail aenter afail agfail ahear akill
+syntax keyword mushAttribute aleave alfail alias amhear amove apay arfail
+syntax keyword mushAttribute asucc atfail atport aufail ause away charges
+syntax keyword mushAttribute cost desc dfail drop ealias efail enter fail
+syntax keyword mushAttribute filter forwardlist gfail idesc idle infilter
+syntax keyword mushAttribute inprefix kill lalias last lastsite leave lfail
+syntax keyword mushAttribute listen move odesc odfail odrop oefail oenter
+syntax keyword mushAttribute ofail ogfail okill oleave olfail omove opay
+syntax keyword mushAttribute orfail osucc otfail otport oufail ouse oxenter
+syntax keyword mushAttribute oxleave oxtport pay prefix reject rfail runout
+syntax keyword mushAttribute semaphore sex startup succ tfail tport ufail
+syntax keyword mushAttribute use va vb vc vd ve vf vg vh vi vj vk vl vm vn
+syntax keyword mushAttribute vo vp vq vr vs vt vu vv vw vx vy vz
+
+
+if version >= 508 || !exists("did_mush_syntax_inits")
+ if version < 508
+ let did_mush_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 mushAttribute Constant
+ HiLink mushCommand Function
+ HiLink mushComment Comment
+ HiLink mushNumber Number
+ HiLink mushSetting PreProc
+ HiLink mushFunction Statement
+ HiLink mushVariable Identifier
+ HiLink mushSpecial Special
+ HiLink mushTodo Todo
+ HiLink mushFlag Special
+ HiLink mushIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mush"
+
+" mush: ts=17
diff --git a/runtime/syntax/muttrc.vim b/runtime/syntax/muttrc.vim
new file mode 100644
index 000000000..4a1f1a90b
--- /dev/null
+++ b/runtime/syntax/muttrc.vim
@@ -0,0 +1,248 @@
+" Vim syntax file
+" Language: Mutt setup files
+" Maintainer: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+" Contributor: Gary Johnson <garyjohn@spk.agilent.com>
+" Last Change: 27 May 2004
+
+" This file covers mutt version 1.4.2.1i
+
+" 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
+
+" Set the keyword characters
+if version < 600
+ set isk=@,48-57,_,-
+else
+ setlocal isk=@,48-57,_,-
+endif
+
+syn match muttrcComment "^#.*$"
+syn match muttrcComment "[^\\]#.*$"lc=1
+
+" Escape sequences (back-tick and pipe goes here too)
+syn match muttrcEscape +\\[#tnr"'Cc]+
+syn match muttrcEscape +[`|]+
+
+" The variables takes the following arguments
+syn match muttrcString "=\s*[^ #"']\+"lc=1 contains=muttrcEscape
+syn region muttrcString start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcMacro,muttrcCommand
+syn region muttrcString start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcMacro,muttrcCommand
+
+syn match muttrcSpecial +\(['"]\)!\1+
+
+" Numbers and Quadoptions may be surrounded by " or '
+syn match muttrcNumber /=\s*\d\+/lc=1
+syn match muttrcNumber /=\s*"\d\+"/lc=1
+syn match muttrcNumber /=\s*'\d\+'/lc=1
+syn match muttrcQuadopt +=\s*\(ask-\)\=\(yes\|no\)+lc=1
+syn match muttrcQuadopt +=\s*"\(ask-\)\=\(yes\|no\)"+lc=1
+syn match muttrcQuadopt +=\s*'\(ask-\)\=\(yes\|no\)'+lc=1
+
+" Now catch some email addresses and headers (purified version from mail.vim)
+syn match muttrcEmail "[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+"
+syn match muttrcHeader "\<\(From\|To\|Cc\|Bcc\|Reply-To\|Subject\|Return-Path\|Received\|Date\|Replied\|Attach\)\>:\="
+
+syn match muttrcKeySpecial contained +\(\\[Cc'"]\|\^\|\\[01]\d\{2}\)+
+syn match muttrcKey contained "\S\+" contains=muttrcKeySpecial
+syn region muttrcKey contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=muttrcKeySpecial
+syn region muttrcKey contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=muttrcKeySpecial
+syn match muttrcKeyName contained "\<f\(\d\|10\)\>"
+syn match muttrcKeyName contained "\\[trne]"
+syn match muttrcKeyName contained "<\(BackSpace\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
+
+syn keyword muttrcVarBool contained allow_8bit allow_ansi arrow_cursor ascii_chars askbcc askcc attach_split
+syn keyword muttrcVarBool contained auto_tag autoedit beep beep_new bounce_delivered check_new collapse_unread
+syn keyword muttrcVarBool contained confirmappend confirmcreate delete_untag digest_collapse duplicate_threads
+syn keyword muttrcVarBool contained edit_hdrs edit_headers encode_from envelope_from fast_reply fcc_attach
+syn keyword muttrcVarBool contained fcc_clear followup_to force_name forw_decode forw_decrypt forw_quote
+syn keyword muttrcVarBool contained forward_decode forward_decrypt forward_quote hdrs header help hidden_host
+syn keyword muttrcVarBool contained hide_limited hide_missing hide_top_limited hide_top_missing ignore_list_reply_to
+syn keyword muttrcVarBool contained imap_force_ssl imap_list_subscribed imap_passive imap_peek imap_servernoise
+syn keyword muttrcVarBool contained implicit_autoview keep_flagged mailcap_sanitize maildir_trash mark_old markers
+syn keyword muttrcVarBool contained menu_scroll meta_key metoo mh_purge mime_forward_decode pager_stop pgp_autoencrypt
+syn keyword muttrcVarBool contained pgp_autosign pgp_ignore_subkeys pgp_long_ids pgp_replyencrypt pgp_replysign
+syn keyword muttrcVarBool contained pgp_replysignencrypted pgp_retainable_sigs pgp_show_unusable pgp_strict_enc
+syn keyword muttrcVarBool contained pipe_decode pipe_split pop_auth_try_all pop_last print_decode print_split
+syn keyword muttrcVarBool contained prompt_after read_only reply_self resolve reverse_alias reverse_name
+syn keyword muttrcVarBool contained reverse_realname rfc2047_parameters save_address save_empty save_name score
+syn keyword muttrcVarBool contained sig_dashes sig_on_top smart_wrap sort_re ssl_use_sslv2 ssl_use_sslv3 ssl_use_tlsv1
+syn keyword muttrcVarBool contained ssl_usesystemcerts status_on_top strict_threads suspend text_flowed thorough_search
+syn keyword muttrcVarBool contained thread_received tilde uncollapse_jump use_8bitmime use_domain use_from use_ipv6
+syn keyword muttrcVarBool contained user_agent wait_key weed wrap_search write_bcc
+
+syn keyword muttrcVarBool contained noallow_8bit noallow_ansi noarrow_cursor noascii_chars noaskbcc noaskcc
+syn keyword muttrcVarBool contained noattach_split noauto_tag noautoedit nobeep nobeep_new nobounce_delivered
+syn keyword muttrcVarBool contained nocheck_new nocollapse_unread noconfirmappend noconfirmcreate nodelete_untag
+syn keyword muttrcVarBool contained nodigest_collapse noduplicate_threads noedit_hdrs noedit_headers noencode_from
+syn keyword muttrcVarBool contained noenvelope_from nofast_reply nofcc_attach nofcc_clear nofollowup_to noforce_name
+syn keyword muttrcVarBool contained noforw_decode noforw_decrypt noforw_quote noforward_decode noforward_decrypt
+syn keyword muttrcVarBool contained noforward_quote nohdrs noheader nohelp nohidden_host nohide_limited nohide_missing
+syn keyword muttrcVarBool contained nohide_top_limited nohide_top_missing noignore_list_reply_to noimap_force_ssl
+syn keyword muttrcVarBool contained noimap_list_subscribed noimap_passive noimap_peek noimap_servernoise
+syn keyword muttrcVarBool contained noimplicit_autoview nokeep_flagged nomailcap_sanitize nomaildir_trash nomark_old
+syn keyword muttrcVarBool contained nomarkers nomenu_scroll nometa_key nometoo nomh_purge nomime_forward_decode
+syn keyword muttrcVarBool contained nopager_stop nopgp_autoencrypt nopgp_autosign nopgp_ignore_subkeys nopgp_long_ids
+syn keyword muttrcVarBool contained nopgp_replyencrypt nopgp_replysign nopgp_replysignencrypted nopgp_retainable_sigs
+syn keyword muttrcVarBool contained nopgp_show_unusable nopgp_strict_enc nopipe_decode nopipe_split nopop_auth_try_all
+syn keyword muttrcVarBool contained nopop_last noprint_decode noprint_split noprompt_after noread_only noreply_self
+syn keyword muttrcVarBool contained noresolve noreverse_alias noreverse_name noreverse_realname norfc2047_parameters
+syn keyword muttrcVarBool contained nosave_address nosave_empty nosave_name noscore nosig_dashes nosig_on_top
+syn keyword muttrcVarBool contained nosmart_wrap nosort_re nossl_use_sslv2 nossl_use_sslv3 nossl_use_tlsv1
+syn keyword muttrcVarBool contained nossl_usesystemcerts nostatus_on_top nostrict_threads nosuspend notext_flowed
+syn keyword muttrcVarBool contained nothorough_search nothread_received notilde nouncollapse_jump nouse_8bitmime
+syn keyword muttrcVarBool contained nouse_domain nouse_from nouse_ipv6 nouser_agent nowait_key noweed nowrap_search
+syn keyword muttrcVarBool contained nowrite_bcc
+
+syn keyword muttrcVarBool contained invallow_8bit invallow_ansi invarrow_cursor invascii_chars invaskbcc invaskcc
+syn keyword muttrcVarBool contained invattach_split invauto_tag invautoedit invbeep invbeep_new invbounce_delivered
+syn keyword muttrcVarBool contained invcheck_new invcollapse_unread invconfirmappend invconfirmcreate invdelete_untag
+syn keyword muttrcVarBool contained invdigest_collapse invduplicate_threads invedit_hdrs invedit_headers invencode_from
+syn keyword muttrcVarBool contained invenvelope_from invfast_reply invfcc_attach invfcc_clear invfollowup_to invforce_name
+syn keyword muttrcVarBool contained invforw_decode invforw_decrypt invforw_quote invforward_decode invforward_decrypt
+syn keyword muttrcVarBool contained invforward_quote invhdrs invheader invhelp invhidden_host invhide_limited
+syn keyword muttrcVarBool contained invhide_missing invhide_top_limited invhide_top_missing invignore_list_reply_to
+syn keyword muttrcVarBool contained invimap_force_ssl invimap_list_subscribed invimap_passive invimap_peek
+syn keyword muttrcVarBool contained invimap_servernoise invimplicit_autoview invkeep_flagged invmailcap_sanitize
+syn keyword muttrcVarBool contained invmaildir_trash invmark_old invmarkers invmenu_scroll invmeta_key invmetoo
+syn keyword muttrcVarBool contained invmh_purge invmime_forward_decode invpager_stop invpgp_autoencrypt invpgp_autosign
+syn keyword muttrcVarBool contained invpgp_ignore_subkeys invpgp_long_ids invpgp_replyencrypt invpgp_replysign
+syn keyword muttrcVarBool contained invpgp_replysignencrypted invpgp_retainable_sigs invpgp_show_unusable invpgp_strict_enc
+syn keyword muttrcVarBool contained invpipe_decode invpipe_split invpop_auth_try_all invpop_last invprint_decode
+syn keyword muttrcVarBool contained invprint_split invprompt_after invread_only invreply_self invresolve invreverse_alias
+syn keyword muttrcVarBool contained invreverse_name invreverse_realname invrfc2047_parameters invsave_address invsave_empty
+syn keyword muttrcVarBool contained invsave_name invscore invsig_dashes invsig_on_top invsmart_wrap invsort_re
+syn keyword muttrcVarBool contained invssl_use_sslv2 invssl_use_sslv3 invssl_use_tlsv1 invssl_usesystemcerts
+syn keyword muttrcVarBool contained invstatus_on_top invstrict_threads invsuspend invtext_flowed invthorough_search
+syn keyword muttrcVarBool contained invthread_received invtilde invuncollapse_jump invuse_8bitmime invuse_domain invuse_from
+syn keyword muttrcVarBool contained invuse_ipv6 invuser_agent invwait_key invweed invwrap_search invwrite_bcc
+
+syn keyword muttrcVarQuad contained abort_nosubject abort_unmodified copy delete honor_followup_to include mime_forward
+syn keyword muttrcVarQuad contained mime_forward_rest mime_fwd move pgp_create_traditional pgp_verify_sig pop_delete
+syn keyword muttrcVarQuad contained pop_reconnect postpone print quit recall reply_to ssl_starttls
+
+syn keyword muttrcVarQuad contained noabort_nosubject noabort_unmodified nocopy nodelete nohonor_followup_to
+syn keyword muttrcVarQuad contained noinclude nomime_forward nocontained nomime_forward_rest nomime_fwd nomove
+syn keyword muttrcVarQuad contained nopgp_create_traditional nopgp_verify_sig nopop_delete nopop_reconnect
+syn keyword muttrcVarQuad contained nopostpone noprint noquit norecall noreply_to nossl_starttls
+
+syn keyword muttrcVarQuad contained invabort_nosubject invabort_unmodified invcopy invdelete invhonor_followup_to
+syn keyword muttrcVarQuad contained invinclude invmime_forward invcontained invmime_forward_rest invmime_fwd invmove
+syn keyword muttrcVarQuad contained invpgp_create_traditional invpgp_verify_sig invpop_delete invpop_reconnect
+syn keyword muttrcVarQuad contained invpostpone invprint invquit invrecall invreply_to invssl_starttls
+
+syn keyword muttrcVarNum contained connect_timeout history imap_keepalive mail_check pager_context pager_index_lines
+syn keyword muttrcVarNum contained pgp_timeout pop_checkinterval read_inc score_threshold_delete score_threshold_flag
+syn keyword muttrcVarNum contained score_threshold_read sendmail_wait sleep_time timeout wrapmargin write_inc
+
+syn keyword muttrcVarStr contained alias_file alias_format alternates attach_format attach_sep attribution certificate_file
+syn keyword muttrcVarStr contained charset compose_format date_format default_hook display_filter dotlock_program dsn_notify
+syn keyword muttrcVarStr contained dsn_return editor entropy_file escape folder folder_format forw_format forward_format
+syn keyword muttrcVarStr contained from gecos_mask hdr_format hostname imap_authenticators imap_delim_chars
+syn keyword muttrcVarStr contained imap_home_namespace imap_pass imap_user indent_str indent_string index_format ispell
+syn keyword muttrcVarStr contained locale mailcap_path mask mbox mbox_type message_format mh_seq_flagged mh_seq_replied
+syn keyword muttrcVarStr contained mh_seq_unseen mix_entry_format mixmaster msg_format pager pager_format
+syn keyword muttrcVarStr contained pgp_clearsign_command pgp_decode_command pgp_decrypt_command pgp_encrypt_only_command
+syn keyword muttrcVarStr contained pgp_encrypt_sign_command pgp_entry_format pgp_export_command pgp_getkeys_command
+syn keyword muttrcVarStr contained pgp_good_sign pgp_import_command pgp_list_pubring_command pgp_list_secring_command
+syn keyword muttrcVarStr contained pgp_sign_as pgp_sign_command pgp_sort_keys pgp_verify_command pgp_verify_key_command
+syn keyword muttrcVarStr contained pipe_sep pop_authenticators pop_host pop_pass pop_user post_indent_str post_indent_string
+syn keyword muttrcVarStr contained postponed preconnect print_cmd print_command query_command quote_regexp realname record
+syn keyword muttrcVarStr contained reply_regexp send_charset sendmail shell signature simple_search smileys sort sort_alias
+syn keyword muttrcVarStr contained sort_aux sort_browser spoolfile status_chars status_format tmpdir to_chars tunnel visual
+
+syn keyword muttrcMenu contained alias attach browser compose editor index pager postpone pgp mix query generic
+
+syn keyword muttrcCommand account-hook auto_view alternative_order charset-hook uncolor exec fcc-hook fcc-save-hook
+syn keyword muttrcCommand folder-hook hdr_order iconv-hook ignore lists mailboxes message-hook mbox-hook my_hdr
+syn keyword muttrcCommand pgp-hook push save-hook score send-hook source subscribe unalias unauto_view unhdr_order
+syn keyword muttrcCommand unhook unignore unlists unmono unmy_hdr unscore unsubscribe
+
+syn keyword muttrcSet set skipwhite nextgroup=muttrcVar.*
+syn keyword muttrcUnset unset skipwhite nextgroup=muttrcVar.*
+syn keyword muttrcReset reset skipwhite nextgroup=muttrcVar.*
+syn keyword muttrcToggle toggle skipwhite nextgroup=muttrcVar.*
+
+syn keyword muttrcBind contained bind skipwhite nextgroup=muttrcMenu
+syn match muttrcBindLine "^\s*bind\s\+\S\+" skipwhite nextgroup=muttrcKey\(Name\)\= contains=muttrcBind
+
+syn keyword muttrcMacro contained macro skipwhite nextgroup=muttrcMenu
+syn match muttrcMacroLine "^\s*macro\s\+\S\+" skipwhite nextgroup=muttrcKey\(Name\)\= contains=muttrcMacro
+
+syn keyword muttrcAlias contained alias
+syn match muttrcAliasLine "^\s*alias\s\+\S\+" contains=muttrcAlias
+
+" Colour definitions takes object, foreground and background arguments (regexps excluded).
+syn keyword muttrcColorField contained attachment body bold error hdrdefault header index
+syn keyword muttrcColorField contained indicator markers message normal quoted search signature
+syn keyword muttrcColorField contained status tilde tree underline
+syn match muttrcColorField contained "\<quoted\d\=\>"
+syn keyword muttrcColorFG contained black blue cyan default green magenta red white yellow
+syn keyword muttrcColorFG contained brightblack brightblue brightcyan brightdefault brightgreen
+syn keyword muttrcColorFG contained brightmagenta brightred brightwhite brightyellow
+syn match muttrcColorFG contained "\<\(bright\)\=color\d\{1,2}\>"
+syn keyword muttrcColorBG contained black blue cyan default green magenta red white yellow
+syn match muttrcColorBG contained "\<color\d\{1,2}\>"
+" Now for the match
+syn keyword muttrcColor contained color skipwhite nextgroup=muttrcColorField
+syn match muttrcColorInit contained "^\s*color\s\+\S\+" skipwhite nextgroup=muttrcColorFG contains=muttrcColor
+syn match muttrcColorLine "^\s*color\s\+\S\+\s\+\S" skipwhite nextgroup=muttrcColorBG contains=muttrcColorInit
+
+" Mono are almost like color (ojects inherited from color)
+syn keyword muttrcMonoAttrib contained bold none normal reverse standout underline
+syn keyword muttrcMono contained mono skipwhite nextgroup=muttrcColorField
+syn match muttrcMonoLine "^\s*mono\s\+\S\+" skipwhite nextgroup=muttrcMonoAttrib contains=muttrcMono
+
+" 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_muttrc_syntax_inits")
+ if version < 508
+ let did_muttrc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink muttrcComment Comment
+ HiLink muttrcEscape SpecialChar
+ HiLink muttrcString String
+ HiLink muttrcSpecial Special
+ HiLink muttrcNumber Number
+ HiLink muttrcQuadopt Boolean
+ HiLink muttrcEmail Special
+ HiLink muttrcHeader Type
+ HiLink muttrcKeySpecial SpecialChar
+ HiLink muttrcKey Type
+ HiLink muttrcKeyName Macro
+ HiLink muttrcVarBool Identifier
+ HiLink muttrcVarQuad Identifier
+ HiLink muttrcVarNum Identifier
+ HiLink muttrcVarStr Identifier
+ HiLink muttrcMenu Identifier
+ HiLink muttrcCommand Keyword
+ HiLink muttrcSet muttrcCommand
+ HiLink muttrcUnset muttrcCommand
+ HiLink muttrcReset muttrcCommand
+ HiLink muttrcToggle muttrcCommand
+ HiLink muttrcBind muttrcCommand
+ HiLink muttrcMacro muttrcCommand
+ HiLink muttrcAlias muttrcCommand
+ HiLink muttrcAliasLine Identifier
+ HiLink muttrcColorField Identifier
+ HiLink muttrcColorFG String
+ HiLink muttrcColorBG muttrcColorFG
+ HiLink muttrcColor muttrcCommand
+ HiLink muttrcMonoAttrib muttrcColorFG
+ HiLink muttrcMono muttrcCommand
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "muttrc"
+
+"EOF vim: ts=8 noet tw=100 sw=8 sts=0
diff --git a/runtime/syntax/mysql.vim b/runtime/syntax/mysql.vim
new file mode 100644
index 000000000..68b8e9de8
--- /dev/null
+++ b/runtime/syntax/mysql.vim
@@ -0,0 +1,296 @@
+" Vim syntax file
+" Language: mysql
+" Maintainer: Kenneth J. Pronovici <pronovic@ieee.org>
+" Last Change: $Date$
+" Filenames: *.mysql
+" URL: ftp://cedar-solutions.com/software/mysql.vim
+" Note: The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
+
+" 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
+
+" Always ignore case
+syn case ignore
+
+" General keywords which don't fall into other categories
+syn keyword mysqlKeyword action add after aggregate all alter as asc auto_increment avg avg_row_length
+syn keyword mysqlKeyword both by
+syn keyword mysqlKeyword cascade change character check checksum column columns comment constraint create cross
+syn keyword mysqlKeyword current_date current_time current_timestamp
+syn keyword mysqlKeyword data database databases day day_hour day_minute day_second
+syn keyword mysqlKeyword default delayed delay_key_write delete desc describe distinct distinctrow drop
+syn keyword mysqlKeyword enclosed escape escaped explain
+syn keyword mysqlKeyword fields file first flush for foreign from full function
+syn keyword mysqlKeyword global grant grants group
+syn keyword mysqlKeyword having heap high_priority hosts hour hour_minute hour_second
+syn keyword mysqlKeyword identified ignore index infile inner insert insert_id into isam
+syn keyword mysqlKeyword join
+syn keyword mysqlKeyword key keys kill last_insert_id leading left limit lines load local lock logs long
+syn keyword mysqlKeyword low_priority
+syn keyword mysqlKeyword match max_rows middleint min_rows minute minute_second modify month myisam
+syn keyword mysqlKeyword natural no
+syn keyword mysqlKeyword on optimize option optionally order outer outfile
+syn keyword mysqlKeyword pack_keys partial password primary privileges procedure process processlist
+syn keyword mysqlKeyword read references reload rename replace restrict returns revoke row rows
+syn keyword mysqlKeyword second select show shutdown soname sql_big_result sql_big_selects sql_big_tables sql_log_off
+syn keyword mysqlKeyword sql_log_update sql_low_priority_updates sql_select_limit sql_small_result sql_warnings starting
+syn keyword mysqlKeyword status straight_join string
+syn keyword mysqlKeyword table tables temporary terminated to trailing type
+syn keyword mysqlKeyword unique unlock unsigned update usage use using
+syn keyword mysqlKeyword values varbinary variables varying
+syn keyword mysqlKeyword where with write
+syn keyword mysqlKeyword year_month
+syn keyword mysqlKeyword zerofill
+
+" Special values
+syn keyword mysqlSpecial false null true
+
+" Strings (single- and double-quote)
+syn region mysqlString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region mysqlString start=+'+ skip=+\\\\\|\\'+ end=+'+
+
+" Numbers and hexidecimal values
+syn match mysqlNumber "-\=\<[0-9]*\>"
+syn match mysqlNumber "-\=\<[0-9]*\.[0-9]*\>"
+syn match mysqlNumber "-\=\<[0-9]*e[+-]\=[0-9]*\>"
+syn match mysqlNumber "-\=\<[0-9]*\.[0-9]*e[+-]\=[0-9]*\>"
+syn match mysqlNumber "\<0x[abcdefABCDEF0-9]*\>"
+
+" User variables
+syn match mysqlVariable "@\a*[A-Za-z0-9]*[._]*[A-Za-z0-9]*"
+
+" Comments (c-style, mysql-style and modified sql-style)
+syn region mysqlComment start="/\*" end="\*/"
+syn match mysqlComment "#.*"
+syn match mysqlComment "-- .*"
+syn sync ccomment mysqlComment
+
+" Column types
+"
+" This gets a bit ugly. There are two different problems we have to
+" deal with.
+"
+" The first problem is that some keywoards like 'float' can be used
+" both with and without specifiers, i.e. 'float', 'float(1)' and
+" 'float(@var)' are all valid. We have to account for this and we
+" also have to make sure that garbage like floatn or float_(1) is not
+" highlighted.
+"
+" The second problem is that some of these keywords are included in
+" function names. For instance, year() is part of the name of the
+" dayofyear() function, and the dec keyword (no parenthesis) is part of
+" the name of the decode() function.
+
+syn keyword mysqlType tinyint smallint mediumint int integer bigint
+syn keyword mysqlType date datetime time bit bool
+syn keyword mysqlType tinytext mediumtext longtext text
+syn keyword mysqlType tinyblob mediumblob longblob blob
+syn region mysqlType start="float\W" end="."me=s-1
+syn region mysqlType start="float$" end="."me=s-1
+syn region mysqlType start="float(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="double\W" end="."me=s-1
+syn region mysqlType start="double$" end="."me=s-1
+syn region mysqlType start="double(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="double precision\W" end="."me=s-1
+syn region mysqlType start="double precision$" end="."me=s-1
+syn region mysqlType start="double precision(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="real\W" end="."me=s-1
+syn region mysqlType start="real$" end="."me=s-1
+syn region mysqlType start="real(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="numeric(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="dec\W" end="."me=s-1
+syn region mysqlType start="dec$" end="."me=s-1
+syn region mysqlType start="dec(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="decimal\W" end="."me=s-1
+syn region mysqlType start="decimal$" end="."me=s-1
+syn region mysqlType start="decimal(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\Wtimestamp\W" end="."me=s-1
+syn region mysqlType start="\Wtimestamp$" end="."me=s-1
+syn region mysqlType start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="^timestamp\W" end="."me=s-1
+syn region mysqlType start="^timestamp$" end="."me=s-1
+syn region mysqlType start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="^year(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="char(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="varchar(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType start="enum(" end=")" contains=mysqlString,mysqlVariable
+syn region mysqlType start="\Wset(" end=")" contains=mysqlString,mysqlVariable
+syn region mysqlType start="^set(" end=")" contains=mysqlString,mysqlVariable
+
+" Logical, string and numeric operators
+syn keyword mysqlOperator between not and or is in like regexp rlike binary exists
+syn region mysqlOperator start="isnull(" end=")" contains=ALL
+syn region mysqlOperator start="coalesce(" end=")" contains=ALL
+syn region mysqlOperator start="interval(" end=")" contains=ALL
+
+" Control flow functions
+syn keyword mysqlFlow case when then else end
+syn region mysqlFlow start="ifnull(" end=")" contains=ALL
+syn region mysqlFlow start="nullif(" end=")" contains=ALL
+syn region mysqlFlow start="if(" end=")" contains=ALL
+
+" General Functions
+"
+" I'm leery of just defining keywords for functions, since according to the MySQL manual:
+"
+" Function names do not clash with table or column names. For example, ABS is a
+" valid column name. The only restriction is that for a function call, no spaces
+" are allowed between the function name and the `(' that follows it.
+"
+" This means that if I want to highlight function names properly, I have to use a
+" region to define them, not just a keyword. This will probably cause the syntax file
+" to load more slowly, but at least it will be 'correct'.
+
+syn region mysqlFunction start="abs(" end=")" contains=ALL
+syn region mysqlFunction start="acos(" end=")" contains=ALL
+syn region mysqlFunction start="adddate(" end=")" contains=ALL
+syn region mysqlFunction start="ascii(" end=")" contains=ALL
+syn region mysqlFunction start="asin(" end=")" contains=ALL
+syn region mysqlFunction start="atan(" end=")" contains=ALL
+syn region mysqlFunction start="atan2(" end=")" contains=ALL
+syn region mysqlFunction start="benchmark(" end=")" contains=ALL
+syn region mysqlFunction start="bin(" end=")" contains=ALL
+syn region mysqlFunction start="bit_and(" end=")" contains=ALL
+syn region mysqlFunction start="bit_count(" end=")" contains=ALL
+syn region mysqlFunction start="bit_or(" end=")" contains=ALL
+syn region mysqlFunction start="ceiling(" end=")" contains=ALL
+syn region mysqlFunction start="character_length(" end=")" contains=ALL
+syn region mysqlFunction start="char_length(" end=")" contains=ALL
+syn region mysqlFunction start="concat(" end=")" contains=ALL
+syn region mysqlFunction start="concat_ws(" end=")" contains=ALL
+syn region mysqlFunction start="connection_id(" end=")" contains=ALL
+syn region mysqlFunction start="conv(" end=")" contains=ALL
+syn region mysqlFunction start="cos(" end=")" contains=ALL
+syn region mysqlFunction start="cot(" end=")" contains=ALL
+syn region mysqlFunction start="count(" end=")" contains=ALL
+syn region mysqlFunction start="curdate(" end=")" contains=ALL
+syn region mysqlFunction start="curtime(" end=")" contains=ALL
+syn region mysqlFunction start="date_add(" end=")" contains=ALL
+syn region mysqlFunction start="date_format(" end=")" contains=ALL
+syn region mysqlFunction start="date_sub(" end=")" contains=ALL
+syn region mysqlFunction start="dayname(" end=")" contains=ALL
+syn region mysqlFunction start="dayofmonth(" end=")" contains=ALL
+syn region mysqlFunction start="dayofweek(" end=")" contains=ALL
+syn region mysqlFunction start="dayofyear(" end=")" contains=ALL
+syn region mysqlFunction start="decode(" end=")" contains=ALL
+syn region mysqlFunction start="degrees(" end=")" contains=ALL
+syn region mysqlFunction start="elt(" end=")" contains=ALL
+syn region mysqlFunction start="encode(" end=")" contains=ALL
+syn region mysqlFunction start="encrypt(" end=")" contains=ALL
+syn region mysqlFunction start="exp(" end=")" contains=ALL
+syn region mysqlFunction start="export_set(" end=")" contains=ALL
+syn region mysqlFunction start="extract(" end=")" contains=ALL
+syn region mysqlFunction start="field(" end=")" contains=ALL
+syn region mysqlFunction start="find_in_set(" end=")" contains=ALL
+syn region mysqlFunction start="floor(" end=")" contains=ALL
+syn region mysqlFunction start="format(" end=")" contains=ALL
+syn region mysqlFunction start="from_days(" end=")" contains=ALL
+syn region mysqlFunction start="from_unixtime(" end=")" contains=ALL
+syn region mysqlFunction start="get_lock(" end=")" contains=ALL
+syn region mysqlFunction start="greatest(" end=")" contains=ALL
+syn region mysqlFunction start="group_unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="hex(" end=")" contains=ALL
+syn region mysqlFunction start="inet_aton(" end=")" contains=ALL
+syn region mysqlFunction start="inet_ntoa(" end=")" contains=ALL
+syn region mysqlFunction start="instr(" end=")" contains=ALL
+syn region mysqlFunction start="lcase(" end=")" contains=ALL
+syn region mysqlFunction start="least(" end=")" contains=ALL
+syn region mysqlFunction start="length(" end=")" contains=ALL
+syn region mysqlFunction start="load_file(" end=")" contains=ALL
+syn region mysqlFunction start="locate(" end=")" contains=ALL
+syn region mysqlFunction start="log(" end=")" contains=ALL
+syn region mysqlFunction start="log10(" end=")" contains=ALL
+syn region mysqlFunction start="lower(" end=")" contains=ALL
+syn region mysqlFunction start="lpad(" end=")" contains=ALL
+syn region mysqlFunction start="ltrim(" end=")" contains=ALL
+syn region mysqlFunction start="make_set(" end=")" contains=ALL
+syn region mysqlFunction start="master_pos_wait(" end=")" contains=ALL
+syn region mysqlFunction start="max(" end=")" contains=ALL
+syn region mysqlFunction start="md5(" end=")" contains=ALL
+syn region mysqlFunction start="mid(" end=")" contains=ALL
+syn region mysqlFunction start="min(" end=")" contains=ALL
+syn region mysqlFunction start="mod(" end=")" contains=ALL
+syn region mysqlFunction start="monthname(" end=")" contains=ALL
+syn region mysqlFunction start="now(" end=")" contains=ALL
+syn region mysqlFunction start="oct(" end=")" contains=ALL
+syn region mysqlFunction start="octet_length(" end=")" contains=ALL
+syn region mysqlFunction start="ord(" end=")" contains=ALL
+syn region mysqlFunction start="period_add(" end=")" contains=ALL
+syn region mysqlFunction start="period_diff(" end=")" contains=ALL
+syn region mysqlFunction start="pi(" end=")" contains=ALL
+syn region mysqlFunction start="position(" end=")" contains=ALL
+syn region mysqlFunction start="pow(" end=")" contains=ALL
+syn region mysqlFunction start="power(" end=")" contains=ALL
+syn region mysqlFunction start="quarter(" end=")" contains=ALL
+syn region mysqlFunction start="radians(" end=")" contains=ALL
+syn region mysqlFunction start="rand(" end=")" contains=ALL
+syn region mysqlFunction start="release_lock(" end=")" contains=ALL
+syn region mysqlFunction start="repeat(" end=")" contains=ALL
+syn region mysqlFunction start="reverse(" end=")" contains=ALL
+syn region mysqlFunction start="round(" end=")" contains=ALL
+syn region mysqlFunction start="rpad(" end=")" contains=ALL
+syn region mysqlFunction start="rtrim(" end=")" contains=ALL
+syn region mysqlFunction start="sec_to_time(" end=")" contains=ALL
+syn region mysqlFunction start="session_user(" end=")" contains=ALL
+syn region mysqlFunction start="sign(" end=")" contains=ALL
+syn region mysqlFunction start="sin(" end=")" contains=ALL
+syn region mysqlFunction start="soundex(" end=")" contains=ALL
+syn region mysqlFunction start="space(" end=")" contains=ALL
+syn region mysqlFunction start="sqrt(" end=")" contains=ALL
+syn region mysqlFunction start="std(" end=")" contains=ALL
+syn region mysqlFunction start="stddev(" end=")" contains=ALL
+syn region mysqlFunction start="strcmp(" end=")" contains=ALL
+syn region mysqlFunction start="subdate(" end=")" contains=ALL
+syn region mysqlFunction start="substring(" end=")" contains=ALL
+syn region mysqlFunction start="substring_index(" end=")" contains=ALL
+syn region mysqlFunction start="sum(" end=")" contains=ALL
+syn region mysqlFunction start="sysdate(" end=")" contains=ALL
+syn region mysqlFunction start="system_user(" end=")" contains=ALL
+syn region mysqlFunction start="tan(" end=")" contains=ALL
+syn region mysqlFunction start="time_format(" end=")" contains=ALL
+syn region mysqlFunction start="time_to_sec(" end=")" contains=ALL
+syn region mysqlFunction start="to_days(" end=")" contains=ALL
+syn region mysqlFunction start="trim(" end=")" contains=ALL
+syn region mysqlFunction start="ucase(" end=")" contains=ALL
+syn region mysqlFunction start="unique_users(" end=")" contains=ALL
+syn region mysqlFunction start="unix_timestamp(" end=")" contains=ALL
+syn region mysqlFunction start="upper(" end=")" contains=ALL
+syn region mysqlFunction start="user(" end=")" contains=ALL
+syn region mysqlFunction start="version(" end=")" contains=ALL
+syn region mysqlFunction start="week(" end=")" contains=ALL
+syn region mysqlFunction start="weekday(" end=")" contains=ALL
+syn region mysqlFunction start="yearweek(" end=")" contains=ALL
+
+" 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_mysql_syn_inits")
+ if version < 508
+ let did_mysql_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink mysqlKeyword Statement
+ HiLink mysqlSpecial Special
+ HiLink mysqlString String
+ HiLink mysqlNumber Number
+ HiLink mysqlVariable Identifier
+ HiLink mysqlComment Comment
+ HiLink mysqlType Type
+ HiLink mysqlOperator Statement
+ HiLink mysqlFlow Statement
+ HiLink mysqlFunction Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "mysql"
+
diff --git a/runtime/syntax/named.vim b/runtime/syntax/named.vim
new file mode 100644
index 000000000..0918352f6
--- /dev/null
+++ b/runtime/syntax/named.vim
@@ -0,0 +1,234 @@
+" Vim syntax file
+" Language: BIND 8.x configuration file
+" Maintainer: glory hump <rnd@web-drive.ru>
+" Last change: Mon May 21 04:51:01 SAMST 2001
+" Filenames: named.conf
+" URL: http://rnd.web-drive.ru/vim/syntax/named.vim
+" $Id$
+"
+" NOTE
+" it was not widely tested, i just tried it on my simple
+" single-master-single-slave configuration. most syntax was borrowed
+" directly from "BIND Configuration File Guide" without testing.
+
+" 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 match
+
+if version >= 600
+ setlocal iskeyword=.,-,48-58,A-Z,a-z,_
+else
+ set iskeyword=.,-,48-58,A-Z,a-z,_
+endif
+
+let s:save_cpo = &cpo
+set cpo-=C
+
+" BIND configuration file
+
+syn match namedComment "//.*"
+syn region namedComment start="/\*" end="\*/"
+syn region namedString start=/"/ end=/"/ contained
+" --- omitted trailing semicolon FIXME
+syn match namedError /[^;{]$/
+
+" --- top-level keywords
+
+syn keyword namedInclude include nextgroup=namedString skipwhite
+syn keyword namedKeyword acl key nextgroup=namedIntIdent skipwhite
+syn keyword namedKeyword server nextgroup=namedIdentifier skipwhite
+syn keyword namedKeyword controls nextgroup=namedSection skipwhite
+syn keyword namedKeyword trusted-keys nextgroup=namedIntSection skipwhite
+syn keyword namedKeyword logging nextgroup=namedLogSection skipwhite
+syn keyword namedKeyword options nextgroup=namedOptSection skipwhite
+syn keyword namedKeyword zone nextgroup=namedZoneString skipwhite
+
+" --- Identifier: name of following { ... } Section
+syn match namedIdentifier contained /\k\+/ nextgroup=namedSection skipwhite
+" --- IntIdent: name of following IntSection
+syn match namedIntIdent contained /"\=\k\+"\=/ nextgroup=namedIntSection skipwhite
+
+" --- Section: { ... } clause
+syn region namedSection contained start=+{+ end=+};+ contains=namedSection,namedIntKeyword
+
+" --- IntSection: section that does not contain other sections
+syn region namedIntSection contained start=+{+ end=+}+ contains=namedIntKeyword,namedError
+
+" --- IntKeyword: keywords contained within `{ ... }' sections only
+" + these keywords are contained within `key' and `acl' sections
+syn keyword namedIntKeyword contained key algorithm
+syn keyword namedIntKeyword contained secret nextgroup=namedString skipwhite
+
+" + these keywords are contained within `server' section only
+syn keyword namedIntKeyword contained bogus support-ixfr nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedIntKeyword contained transfers nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedIntKeyword contained transfer-format
+syn keyword namedIntKeyword contained keys nextgroup=namedIntSection skipwhite
+
+" + these keywords are contained within `controls' section only
+syn keyword namedIntKeyword contained inet nextgroup=namedIPaddr,namedIPerror skipwhite
+syn keyword namedIntKeyword contained unix nextgroup=namedString skipwhite
+syn keyword namedIntKeyword contained port perm owner group nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedIntKeyword contained allow nextgroup=namedIntSection skipwhite
+
+" --- options
+syn region namedOptSection contained start=+{+ end=+};+ contains=namedOption,namedCNOption,namedComment,namedParenError
+
+syn keyword namedOption contained version directory
+\ nextgroup=namedString skipwhite
+syn keyword namedOption contained named-xfer dump-file pid-file
+\ nextgroup=namedString skipwhite
+syn keyword namedOption contained mem-statistics-file statistics-file
+\ nextgroup=namedString skipwhite
+syn keyword namedOption contained auth-nxdomain deallocate-on-exit
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained dialup fake-iquery fetch-glue
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained has-old-clients host-statistics
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained maintain-ixfr-base multiple-cnames
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained notify recursion rfc2308-type1
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained use-id-pool treat-cr-as-space
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedOption contained also-notify forwarders
+\ nextgroup=namedIntSection skipwhite
+syn keyword namedOption contained forward check-names
+syn keyword namedOption contained allow-query allow-transfer allow-recursion nextgroup=namedAML skipwhite
+syn keyword namedOption contained blackhole listen-on
+\ nextgroup=namedIntSection skipwhite
+syn keyword namedOption contained lame-ttl max-transfer-time-in
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedOption contained max-ncache-ttl min-roots
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedOption contained serial-queries transfers-in
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedOption contained transfers-out transfers-per-ns
+syn keyword namedOption contained transfer-format
+syn keyword namedOption contained transfer-source
+\ nextgroup=namedIPaddr,namedIPerror skipwhite
+syn keyword namedOption contained max-ixfr-log-size
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedOption contained coresize datasize files stacksize
+syn keyword namedOption contained cleaning-interval interface-interval statistics-interval heartbeat-interval
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedOption contained topology sortlist rrset-order
+\ nextgroup=namedIntSection skipwhite
+
+syn match namedOption contained /\<query-source\s\+.*;/he=s+12 contains=namedQSKeywords
+syn keyword namedQSKeywords contained address port
+syn match namedCNOption contained /\<check-names\s\+.*;/he=s+11 contains=namedCNKeywords
+syn keyword namedCNKeywords contained fail warn ignore master slave response
+
+" --- logging facilities
+syn region namedLogSection contained start=+{+ end=+};+ contains=namedLogOption
+syn keyword namedLogOption contained channel nextgroup=namedIntIdent skipwhite
+syn keyword namedLogOption contained category nextgroup=namedIntIdent skipwhite
+syn keyword namedIntKeyword contained syslog null versions size severity
+syn keyword namedIntKeyword contained file nextgroup=namedString skipwhite
+syn keyword namedIntKeyword contained print-category print-severity print-time nextgroup=namedBool,namedNotBool skipwhite
+
+" --- zone section
+syn region namedZoneString contained oneline start=+"+ end=+"+ skipwhite
+\ contains=namedDomain,namedIllegalDom
+\ nextgroup=namedZoneClass,namedZoneSection
+syn keyword namedZoneClass contained in hs hesiod chaos
+\ IN HS HESIOD CHAOS
+\ nextgroup=namedZoneSection skipwhite
+
+syn region namedZoneSection contained start=+{+ end=+};+ contains=namedZoneOpt,namedCNOption,namedComment,namedMasters,namedParenError
+syn keyword namedZoneOpt contained file ixfr-base
+\ nextgroup=namedString skipwhite
+syn keyword namedZoneOpt contained notify dialup
+\ nextgroup=namedBool,namedNotBool skipwhite
+syn keyword namedZoneOpt contained pubkey forward
+syn keyword namedZoneOpt contained max-transfer-time-in
+\ nextgroup=namedNumber,namedNotNumber skipwhite
+syn keyword namedZoneOpt contained type nextgroup=namedZoneType skipwhite
+syn keyword namedZoneType contained master slave stub forward hint
+
+syn keyword namedZoneOpt contained masters forwarders
+\ nextgroup=namedIPlist skipwhite
+syn region namedIPlist contained start=+{+ end=+};+ contains=namedIPaddr,namedIPerror,namedParenError,namedComment
+syn match namedZoneOpt contained "\<allow-\(update\|query\|transfer\)"
+\ nextgroup=namedAML skipwhite
+
+" --- boolean parameter
+syn match namedNotBool contained "[^ ;]\+"
+syn keyword namedBool contained yes no true false 1 0
+
+" --- number parameter
+syn match namedNotNumber contained "[^ 0-9;]\+"
+syn match namedNumber contained "\d\+"
+
+" --- address match list
+syn region namedAML contained start=+{+ end=+};+ contains=namedParenError,namedComment
+
+" --- IPs & Domains
+syn match namedIPaddr contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{3};/he=e-1
+syn match namedDomain contained /\<[0-9A-Za-z][-0-9A-Za-z.]\+\>/ nextgroup=namedSpareDot
+syn match namedDomain contained /"\."/ms=s+1,me=e-1
+syn match namedSpareDot contained /\./
+
+" --- syntax errors
+syn match namedIllegalDom contained /"\S*[^-A-Za-z0-9.[:space:]]\S*"/ms=s+1,me=e-1
+syn match namedIPerror contained /\<\S*[^0-9.[:space:];]\S*/
+syn match namedEParenError contained +{+
+syn match namedParenError +}\([^;]\|$\)+
+
+" 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_named_syn_inits")
+ if version < 508
+ let did_named_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink namedComment Comment
+ HiLink namedInclude Include
+ HiLink namedKeyword Keyword
+ HiLink namedIntKeyword Keyword
+ HiLink namedIdentifier Identifier
+ HiLink namedIntIdent Identifier
+
+ HiLink namedString String
+ HiLink namedBool Type
+ HiLink namedNotBool Error
+ HiLink namedNumber Number
+ HiLink namedNotNumber Error
+
+ HiLink namedOption namedKeyword
+ HiLink namedLogOption namedKeyword
+ HiLink namedCNOption namedKeyword
+ HiLink namedQSKeywords Type
+ HiLink namedCNKeywords Type
+ HiLink namedLogCategory Type
+ HiLink namedDomain Identifier
+ HiLink namedZoneOpt namedKeyword
+ HiLink namedZoneType Type
+ HiLink namedParenError Error
+ HiLink namedEParenError Error
+ HiLink namedIllegalDom Error
+ HiLink namedIPerror Error
+ HiLink namedSpareDot Error
+ HiLink namedError Error
+
+ delcommand HiLink
+endif
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+let b:current_syntax = "named"
+
+" vim: ts=17
diff --git a/runtime/syntax/nasm.vim b/runtime/syntax/nasm.vim
new file mode 100644
index 000000000..6bbf33a9c
--- /dev/null
+++ b/runtime/syntax/nasm.vim
@@ -0,0 +1,522 @@
+" 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/
+
+
+
+" Setup Syntax:
+" Clear old syntax settings
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+" Assembler syntax is case insensetive
+syn case ignore
+
+
+
+" Vim search and movement commands on identifers
+if version < 600
+ " Comments at start of a line inside which to skip search for indentifiers
+ set comments=:;
+ " Identifier Keyword characters (defines \k)
+ set iskeyword=@,48-57,#,$,.,?,@-@,_,~
+else
+ " Comments at start of a line inside which to skip search for indentifiers
+ setlocal comments=:;
+ " Identifier Keyword characters (defines \k)
+ setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~
+endif
+
+
+
+" Comments:
+syn region nasmComment start=";" keepend end="$" contains=@nasmGrpInComments
+syn region nasmSpecialComment start=";\*\*\*" keepend end="$"
+syn keyword nasmInCommentTodo contained TODO FIXME XXX[XXXXX]
+syn cluster nasmGrpInComments contains=nasmInCommentTodo
+syn cluster nasmGrpComments contains=@nasmGrpInComments,nasmComment,nasmSpecialComment
+
+
+
+" Label Identifiers:
+" 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 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 "\<\~\=\$\=[_\.][_\.\~]*\>"
+endif
+if exists("nasm_loose_syntax")
+ syn match nasmSpecialLabel "\<\.\.@\k\+\>"
+ syn match nasmSpecialLabel "\<\$\.\.@\k\+\>"ms=s+1
+ if !exists("nasm_no_warn")
+ syn match nasmLabelWarn "\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>"
+ endif
+ " disallow use of nasm internal label format
+ syn match nasmLabelError "\<\$\=\.\.@\d\+\.\k*\>"
+else
+ syn match nasmSpecialLabel "\<\.\.@\(\h\|[?@]\)\k*\>"
+ syn match nasmSpecialLabel "\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1
+endif
+" Labels can be dereferenced with '$' to destinguish them from reserved words
+syn match nasmLabelError "\<\$\K\k*\s*:"
+syn match nasmLabelError "^\s*\$\K\k*\>"
+syn match nasmLabelError "\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
+
+
+
+" Constants:
+syn match nasmStringError +["']+
+syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+
+syn match nasmBinNumber "\<[0-1]\+b\>"
+syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1
+syn match nasmOctNumber "\<\o\+q\>"
+syn match nasmOctNumber "\<\~\o\+q\>"lc=1
+syn match nasmDecNumber "\<\d\+\>"
+syn match nasmDecNumber "\<\~\d\+\>"lc=1
+syn match nasmHexNumber "\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"
+syn match nasmHexNumber "\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1
+syn match nasmFltNumber "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
+syn keyword nasmFltNumber Inf Infinity Indefinite NaN SNaN QNaN
+syn match nasmNumberError "\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
+
+
+
+" Netwide Assembler Storage Directives:
+" Storage types
+syn keyword nasmTypeError DF EXTRN FWORD RESF TBYTE
+syn keyword nasmType FAR NEAR SHORT
+syn keyword nasmType BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD
+syn keyword nasmType CDECL FASTCALL NONE PASCAL STDCALL
+syn keyword nasmStorage DB DW DD DQ DDQ DT
+syn keyword nasmStorage RESB RESW RESD RESQ RESDQ REST
+syn keyword nasmStorage EXTERN GLOBAL COMMON
+" Structured storage types
+syn match nasmTypeError "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
+syn match nasmStructureLabel contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
+" structures cannot be nested (yet) -> use: 'keepend' and 're='
+syn cluster nasmGrpCntnStruc contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs
+syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc
+syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnStruc
+syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
+" union types are not part of nasm (yet)
+"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc
+"syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
+syn match nasmInStructure contained "^\s*AT\>"hs=e-1
+syn cluster nasmGrpInStrucs contains=nasmStructure,nasmInStructure,nasmStructureLabel
+
+
+
+" PreProcessor Instructions:
+" NAsm PreProcs start with %, but % is not a character
+syn match nasmPreProcError "%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="
+if exists("nasm_loose_syntax")
+ syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
+else
+ syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError
+endif
+
+" Multi-line macro
+syn cluster nasmGrpCntnMacro contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef
+syn region nasmMacroDef matchgroup=nasmMacro keepend start="^\s*%macro\>"hs=e-5 start="^\s*%imacro\>"hs=e-6 end="^\s*%endmacro\>"re=e-9 contains=@nasmGrpCntnMacro,nasmInMacStrucDef
+if exists("nasm_loose_syntax")
+ syn match nasmInMacLabel contained "%\(%\k\+\>\|{%\k\+}\)"
+ syn match nasmInMacLabel contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)"
+ syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
+ if !exists("nasm_no_warn")
+ syn match nasmInMacLblWarn contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)"
+ syn match nasmInMacLblWarn contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)"
+ hi link nasmInMacCatLabel nasmInMacLblWarn
+ else
+ hi link nasmInMacCatLabel nasmInMacLabel
+ endif
+else
+ syn match nasmInMacLabel contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)"
+ syn match nasmInMacLabel contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)"
+ hi link nasmInMacCatLabel nasmLabelError
+endif
+syn match nasmInMacCatLabel contained "\d\K\k*"lc=1
+syn match nasmInMacLabel contained "\d}\k\+"lc=2
+if !exists("nasm_no_warn")
+ syn match nasmInMacLblWarn contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"
+endif
+syn match nasmInMacPreProc contained "^\s*%pop\>"hs=e-3
+syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
+" structures cannot be nested (yet) -> use: 'keepend' and 're='
+syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro
+syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnMacro
+syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
+" union types are not part of nasm (yet)
+"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
+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
+syn match nasmInMacParamNum contained "\<\d\+\.list\>"me=e-5
+syn match nasmInMacParamNum contained "\<\d\+\.nolist\>"me=e-7
+syn match nasmInMacDirective contained "\.\(no\)\=list\>"
+syn match nasmInMacMacro contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel
+syn match nasmInMacMacro contained "^\s*%rotate\>"hs=e-6
+syn match nasmInMacParam contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"
+" nasm conditional macro operands/arguments
+" Todo: check feasebility; add too nasmGrpInMacros, etc.
+"syn match nasmInMacCond contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
+syn cluster nasmGrpInMacros contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef
+
+" Context pre-procs that are better used inside a macro
+if exists("nasm_ctx_outside_macro")
+ 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*\>"
+ else
+ syn match nasmCtxLocLabel "%$\+\(\h\|[?@]\)\k*\>"
+ endif
+ syn match nasmCtxPreProc "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
+ syn match nasmCtxPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
+ syn match nasmCtxPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
+ syn match nasmCtxPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
+ if exists("nasm_no_warn")
+ hi link nasmCtxPreCondit nasmPreCondit
+ hi link nasmCtxPreProc nasmPreProc
+ hi link nasmCtxLocLabel nasmLocalLabel
+ else
+ hi link nasmCtxPreCondit nasmPreProcWarn
+ hi link nasmCtxPreProc nasmPreProcWarn
+ hi link nasmCtxLocLabel nasmLabelWarn
+ endif
+endif
+
+" Conditional assembly
+syn cluster nasmGrpCntnPreCon contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs
+syn region nasmPreConditDef transparent matchgroup=nasmPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnPreCon
+syn match nasmInPreCondit contained "^\s*%el\(if\|se\)\>"hs=e-4
+syn match nasmInPreCondit contained "^\s*%elifid\>"hs=e-6
+syn match nasmInPreCondit contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7
+syn match nasmInPreCondit contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8
+syn match nasmInPreCondit contained "^\s*%elifnidni\>"hs=e-9
+syn cluster nasmGrpInPreCondits contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit
+syn cluster nasmGrpPreCondits contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
+
+" Other pre-processor statements
+syn match nasmPreProc "^\s*%rep\>"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 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 nasmInclude "^\s*%include\>"hs=e-7
+
+" Multiple pre-processor instructions on single line detection (obsolete)
+"syn match nasmPreProcError +^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
+syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError
+
+
+
+" Register Identifiers:
+" Register operands:
+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 nasmSegRegister "\<[C-GS]S\>"
+syn match nasmSpcRegister "\<E\=IP\>"
+syn match nasmFpuRegister "\<ST\o\>"
+syn match nasmMmxRegister "\<MM\o\>"
+syn match nasmSseRegister "\<XMM\o\>"
+syn match nasmCtrlRegister "\<CR\o\>"
+syn match nasmDebugRegister "\<DR\o\>"
+syn match nasmTestRegister "\<TR\o\>"
+syn match nasmRegisterError "\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"
+syn match nasmRegisterError "\<X\=MM[8-9]\>"
+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 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
+
+
+
+" Netwide Assembler Directives:
+" Compilation constants
+syn keyword nasmConstant __BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__
+syn keyword nasmConstant __NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__
+syn keyword nasmConstant __TIME__
+" Instruction modifiers
+syn match nasmInstructnError "\<TO\>"
+syn match nasmInstrModifier "\(^\|:\)\s*[C-GS]S\>"ms=e-1
+syn keyword nasmInstrModifier A16 A32 O16 O32
+syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1
+" the 'to' keyword is not allowed for fpu-pop instructions (yet)
+"syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1
+" NAsm directives
+syn keyword nasmRepeat TIMES
+syn keyword nasmDirective ALIGN[B] INCBIN EQU NOSPLIT SPLIT
+syn keyword nasmDirective ABSOLUTE BITS SECTION SEGMENT
+syn keyword nasmDirective ENDSECTION ENDSEGMENT
+syn keyword nasmDirective __SECT__
+" Macro created standard directives: (requires %include)
+syn case match
+syn keyword nasmStdDirective ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES
+syn keyword nasmStdDirective ENDIF ELSE ELIF ELSIF IF
+"syn keyword nasmStdDirective BREAK CASE DEFAULT ENDSWITCH SWITCH
+"syn keyword nasmStdDirective CASE OF ENDCASE
+syn keyword nasmStdDirective DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT
+syn case ignore
+" Format specific directives: (all formats)
+" (excluded: extension directives to section, global, common and extern)
+syn keyword nasmFmtDirective ORG
+syn keyword nasmFmtDirective EXPORT IMPORT GROUP UPPERCASE SEG WRT
+syn keyword nasmFmtDirective LIBRARY
+syn case match
+syn keyword nasmFmtDirective _GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_
+syn keyword nasmFmtDirective ..start ..got ..gotoff ..gotpc ..plt ..sym
+syn case ignore
+
+
+
+" Standard Instructions:
+syn match nasmInstructnError "\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>"
+syn keyword nasmInstructnError CMPS MOVS LCS LODS STOS XLAT
+syn match nasmStdInstruction "\<MOV\>"
+syn match nasmInstructnError "\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1
+syn match nasmStdInstruction "\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
+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 DAA DAS DEC DIV ENTER
+syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW
+syn keyword nasmStdInstruction JCXZ JECXZ JMP
+syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD
+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 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 TEST XADD XCHG XLATB XOR
+
+
+" System Instructions: (usually privileged)
+" Verification of pointer parameters
+syn keyword nasmSysInstruction ARPL LAR LSL VERR VERW
+" Addressing descriptor tables
+syn keyword nasmSysInstruction LLDT SLDT LGDT SGDT
+" Multitasking
+syn keyword nasmSysInstruction LTR STR
+" Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.)
+syn keyword nasmSysInstruction CLTS LOCK WAIT
+" Input and Output
+syn keyword nasmInstructnError INS OUTS
+syn keyword nasmSysInstruction IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD
+" Interrupt control
+syn keyword nasmSysInstruction CLI STI LIDT SIDT
+" System control
+syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<CR\o\>"me=s+3
+syn keyword nasmSysInstruction HLT INVD LMSW
+syn keyword nasmSseInstruction PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
+syn keyword nasmSseInstruction RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD
+" TLB (Translation Lookahead Buffer) testing
+syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<TR\o\>"me=s+3
+syn keyword nasmSysInstruction INVLPG
+
+" Debugging Instructions: (privileged)
+syn match nasmDbgInstruction "\<MOV\s[^;]\{-}\<DR\o\>"me=s+3
+syn keyword nasmDbgInstruction INT1 INT3 RDMSR RDTSC RDPMC WRMSR
+
+
+" Floating Point Instructions: (requires FPU)
+syn match nasmFpuInstruction "\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>"
+syn keyword nasmFpuInstruction F2XM1 FABS FADD[P] FBLD FBSTP
+syn keyword nasmFpuInstruction FCHS FCLEX FCOM[IP] FCOMP[P] FCOS
+syn keyword nasmFpuInstruction FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE
+syn keyword nasmFpuInstruction FIADD FICOM[P] FIDIV[R] FILD
+syn keyword nasmFpuInstruction FIMUL FINCSTP FINIT FIST[P] FISUB[R]
+syn keyword nasmFpuInstruction FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2
+syn keyword nasmFpuInstruction FLDLN2 FLDPI FLDZ FMUL[P]
+syn keyword nasmFpuInstruction FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE
+syn keyword nasmFpuInstruction FNSTCW FNSTENV FNSTSW FNSTSW
+syn keyword nasmFpuInstruction FPATAN FPREM[1] FPTAN FRNDINT FRSTOR
+syn keyword nasmFpuInstruction FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT
+syn keyword nasmFpuInstruction FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P]
+syn keyword nasmFpuInstruction FTST FUCOM[IP] FUCOMP[P]
+syn keyword nasmFpuInstruction FXAM FXCH FXTRACT FYL2X FYL2XP1
+
+
+" Multi Media Xtension Packed Instructions: (requires MMX unit)
+" Standard MMX instructions: (requires MMX1 unit)
+syn match nasmInstructnError "\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>"
+syn match nasmInstructnError "\<PCMP\a\{0,2}[BDWQ]\=\>"
+syn keyword nasmMmxInstruction EMMS MOVD MOVQ
+syn keyword nasmMmxInstruction PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW
+syn keyword nasmMmxInstruction PADDSB PADDSW PADDUSB PADDUSW PAND[N]
+syn keyword nasmMmxInstruction PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW
+syn keyword nasmMmxInstruction PMACHRIW PMADDWD PMULHW PMULLW POR
+syn keyword nasmMmxInstruction PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW
+syn keyword nasmMmxInstruction PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW
+syn keyword nasmMmxInstruction PUNPCKHBW PUNPCKHDQ PUNPCKHWD
+syn keyword nasmMmxInstruction PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR
+" Extended MMX instructions: (requires MMX2/SSE unit)
+syn keyword nasmMmxInstruction MASKMOVQ MOVNTQ
+syn keyword nasmMmxInstruction PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB
+syn keyword nasmMmxInstruction PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW
+
+
+" Streaming SIMD Extension Packed Instructions: (requires SSE unit)
+syn match nasmInstructnError "\<CMP\a\{1,5}[PS]S\>"
+syn match nasmSseInstruction "\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>"
+syn keyword nasmSseInstruction ADDPS ADDSS ANDNPS ANDPS
+syn keyword nasmSseInstruction COMISS CVTPI2PS CVTPS2PI
+syn keyword nasmSseInstruction CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI
+syn keyword nasmSseInstruction DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR
+syn keyword nasmSseInstruction MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS
+syn keyword nasmSseInstruction MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS
+syn keyword nasmSseInstruction MULPS MULSS
+syn keyword nasmSseInstruction ORPS RCPPS RCPSS RSQRTPS RSQRTSS
+syn keyword nasmSseInstruction SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS
+syn keyword nasmSseInstruction UCOMISS UNPCKHPS UNPCKLPS XORPS
+
+
+" Three Dimensional Now Packed Instructions: (requires 3DNow! unit)
+syn keyword nasmNowInstruction FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE
+syn keyword nasmNowInstruction PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1
+syn keyword nasmNowInstruction PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD
+syn keyword nasmNowInstruction PMULHRWA PREFETCH[W]
+
+
+" Vendor Specific Instructions:
+" Cyrix instructions (requires Cyrix processor)
+syn keyword nasmCrxInstruction PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW
+syn keyword nasmCrxInstruction PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW
+syn keyword nasmCrxInstruction RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS
+syn keyword nasmCrxInstruction WRSHR
+" AMD instructions (requires AMD processor)
+syn keyword nasmAmdInstruction SYSCALL SYSRET
+
+
+" Undocumented Instructions:
+syn match nasmUndInstruction "\<POP\s[^;]*\<CS\>"me=s+3
+syn keyword nasmUndInstruction CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL
+syn keyword nasmUndInstruction LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS
+
+
+
+" Synchronize Syntax:
+syn sync clear
+syn sync minlines=50 "for multiple region nesting
+syn sync match nasmSync grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1
+syn sync match nasmSync grouphere NONE "^\s*%endmacro\>"
+
+
+" 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_nasm_syntax_inits")
+ if version < 508
+ let did_nasm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Sub Links:
+ HiLink nasmInMacDirective nasmDirective
+ HiLink nasmInMacLabel nasmLocalLabel
+ HiLink nasmInMacLblWarn nasmLabelWarn
+ HiLink nasmInMacMacro nasmMacro
+ HiLink nasmInMacParam nasmMacro
+ HiLink nasmInMacParamNum nasmDecNumber
+ HiLink nasmInMacPreCondit nasmPreCondit
+ HiLink nasmInMacPreProc nasmPreProc
+ HiLink nasmInPreCondit nasmPreCondit
+ HiLink nasmInStructure nasmStructure
+ HiLink nasmStructureLabel nasmStructure
+
+ " Comment Group:
+ HiLink nasmComment Comment
+ HiLink nasmSpecialComment SpecialComment
+ HiLink nasmInCommentTodo Todo
+
+ " Constant Group:
+ HiLink nasmString String
+ HiLink nasmStringError Error
+ HiLink nasmBinNumber Number
+ HiLink nasmOctNumber Number
+ HiLink nasmDecNumber Number
+ HiLink nasmHexNumber Number
+ HiLink nasmFltNumber Float
+ HiLink nasmNumberError Error
+
+ " Identifier Group:
+ HiLink nasmLabel Identifier
+ HiLink nasmLocalLabel Identifier
+ HiLink nasmSpecialLabel Special
+ HiLink nasmLabelError Error
+ HiLink nasmLabelWarn Todo
+
+ " PreProc Group:
+ HiLink nasmPreProc PreProc
+ HiLink nasmDefine Define
+ HiLink nasmInclude Include
+ HiLink nasmMacro Macro
+ HiLink nasmPreCondit PreCondit
+ HiLink nasmPreProcError Error
+ HiLink nasmPreProcWarn Todo
+
+ " Type Group:
+ HiLink nasmType Type
+ HiLink nasmStorage StorageClass
+ HiLink nasmStructure Structure
+ HiLink nasmTypeError Error
+
+ " Directive Group:
+ HiLink nasmConstant Constant
+ HiLink nasmInstrModifier Operator
+ HiLink nasmRepeat Repeat
+ HiLink nasmDirective Keyword
+ HiLink nasmStdDirective Operator
+ HiLink nasmFmtDirective Keyword
+
+ " Register Group:
+ HiLink nasmCtrlRegister Special
+ HiLink nasmDebugRegister Debug
+ HiLink nasmTestRegister Special
+ HiLink nasmRegisterError Error
+ HiLink nasmMemRefError Error
+
+ " Instruction Group:
+ HiLink nasmStdInstruction Statement
+ HiLink nasmSysInstruction Statement
+ HiLink nasmDbgInstruction Debug
+ HiLink nasmFpuInstruction Statement
+ HiLink nasmMmxInstruction Statement
+ HiLink nasmSseInstruction Statement
+ HiLink nasmNowInstruction Statement
+ HiLink nasmAmdInstruction Special
+ HiLink nasmCrxInstruction Special
+ HiLink nasmUndInstruction Todo
+ HiLink nasmInstructnError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "nasm"
+
+" vim:ts=8 sw=4
diff --git a/runtime/syntax/nastran.vim b/runtime/syntax/nastran.vim
new file mode 100644
index 000000000..f7927693f
--- /dev/null
+++ b/runtime/syntax/nastran.vim
@@ -0,0 +1,193 @@
+" Vim syntax file
+" Language: NASTRAN input/DMAP
+" Maintainer: Tom Kowalski <trk@schaefferas.com>
+" Last change: April 27, 2001
+" Thanks to the authors and maintainers of fortran.vim.
+" Since DMAP shares some traits with fortran, this syntax file
+" is based on the fortran.vim syntax file.
+"----------------------------------------------------------------------
+" Remove any old syntax stuff hanging around
+"syn clear
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+" DMAP is not case dependent
+syn case ignore
+"
+"--------------------DMAP SYNTAX---------------------------------------
+"
+" -------Executive Modules and Statements
+"
+syn keyword nastranDmapexecmod call dbview delete end equiv equivx exit
+syn keyword nastranDmapexecmod file message purge purgex return subdmap
+syn keyword nastranDmapType type
+syn keyword nastranDmapLabel go to goto
+syn keyword nastranDmapRepeat if else elseif endif then
+syn keyword nastranDmapRepeat do while
+syn region nastranDmapString start=+"+ end=+"+ oneline
+syn region nastranDmapString start=+'+ end=+'+ oneline
+" If you don't like initial tabs in dmap (or at all)
+"syn match nastranDmapIniTab "^\t.*$"
+"syn match nastranDmapTab "\t"
+
+" Any integer
+syn match nastranDmapNumber "-\=\<[0-9]\+\>"
+" floating point number, with dot, optional exponent
+syn match nastranDmapFloat "\<[0-9]\+\.[0-9]*\([edED][-+]\=[0-9]\+\)\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match nastranDmapFloat "\.[0-9]\+\([edED][-+]\=[0-9]\+\)\=\>"
+" floating point number, without dot, with exponent
+syn match nastranDmapFloat "\<[0-9]\+[edED][-+]\=[0-9]\+\>"
+
+syn match nastranDmapLogical "\(true\|false\)"
+
+syn match nastranDmapPreCondit "^#define\>"
+syn match nastranDmapPreCondit "^#include\>"
+"
+" -------Comments may be contained in another line.
+"
+syn match nastranDmapComment "^[\$].*$"
+syn match nastranDmapComment "\$.*$"
+syn match nastranDmapComment "^[\$].*$" contained
+syn match nastranDmapComment "\$.*$" contained
+" Treat all past 72nd column as a comment. Do not work with tabs!
+" Breaks down when 72-73rd column is in another match (eg number or keyword)
+syn match nastranDmapComment "^.\{-72}.*$"lc=72 contained
+
+"
+" -------Utility Modules
+"
+syn keyword nastranDmapUtilmod append copy dbc dbdict dbdir dmin drms1
+syn keyword nastranDmapUtilmod dtiin eltprt ifp ifp1 inputt2 inputt4 lamx
+syn keyword nastranDmapUtilmod matgen matgpr matmod matpch matprn matprt
+syn keyword nastranDmapUtilmod modtrl mtrxin ofp output2 output4 param
+syn keyword nastranDmapUtilmod paraml paramr prtparam pvt scalar
+syn keyword nastranDmapUtilmod seqp setval tabedit tabprt tabpt vec vecplot
+syn keyword nastranDmapUtilmod xsort
+"
+" -------Matrix Modules
+"
+syn keyword nastranDmapMatmod add add5 cead dcmp decomp diagonal fbs merge
+syn keyword nastranDmapMatmod mpyad norm read reigl smpyad solve solvit
+syn keyword nastranDmapMatmod trnsp umerge umerge1 upartn dmiin partn
+syn region nastranDmapMatmod start=+^ *[Dd][Mm][Ii]+ end=+[\/]+
+"
+" -------Implicit Functions
+"
+syn keyword nastranDmapImplicit abs acos acosh andl asin asinh atan atan2
+syn keyword nastranDmapImplicit atanh atanh2 char clen clock cmplx concat1
+syn keyword nastranDmapImplicit concat2 concat3 conjg cos cosh dble diagoff
+syn keyword nastranDmapImplicit diagon dim dlablank dlxblank dprod eqvl exp
+syn keyword nastranDmapImplicit getdiag getsys ichar imag impl index indexstr
+syn keyword nastranDmapImplicit int itol leq lge lgt lle llt lne log log10
+syn keyword nastranDmapImplicit logx ltoi mcgetsys mcputsys max min mod neqvl
+syn keyword nastranDmapImplicit nint noop normal notl numeq numge numgt numle
+syn keyword nastranDmapImplicit numlt numne orl pi precison putdiag putsys
+syn keyword nastranDmapImplicit rand rdiagon real rtimtogo setcore sign sin
+syn keyword nastranDmapImplicit sinh sngl sprod sqrt substrin tan tanh
+syn keyword nastranDmapImplicit timetogo wlen xorl
+"
+"
+"--------------------INPUT FILE SYNTAX---------------------------------------
+"
+"
+" -------Nastran Statement
+"
+syn keyword nastranNastranCard nastran
+"
+" -------The File Management Section (FMS)
+"
+syn region nastranFMSCard start=+^ *[Aa][Cc][Qq][Uu][Ii]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Aa][Ss][Ss][Ii][Gg]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Cc][oO][Nn][Nn][Ee]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Cc][Ll][Ee]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Dd][Ii][Cc]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Dd][Ii][Rr]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Ff][Ii][Xx]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Ll][Oo][Aa]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Ll][Oo][Cc]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Ss][Ee][Tt]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Uu][Nn][Ll]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Bb][Uu][Pp][Dd]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Dd][Ee][Ff][Ii][Nn]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Ee][Nn][Dd][Jj][Oo]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Ee][Xx][Pp][Aa][Nn]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Ii][Nn][Cc][Ll][Uu]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Ii][Nn][Ii][Tt]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Pp][Rr][Oo][Jj]+ end=+$+ oneline
+syn region nastranFMSCard start=+^ *[Rr][Ee][Ss][Tt]+ end=+$+ oneline
+syn match nastranDmapUtilmod "^ *[Rr][Ee][Ss][Tt][Aa].*,.*," contains=nastranDmapComment
+"
+" -------Executive Control Section
+"
+syn region nastranECSCard start=+^ *[Aa][Ll][Tt][Ee][Rr]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Aa][Pp][Pp]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Cc][Oo][Mm][Pp][Ii]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Dd][Ii][Aa][Gg] + end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ee][Cc][Hh][Oo]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ee][Nn][Dd][Aa][Ll]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ii][Dd]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ii][Nn][Cc][Ll][Uu]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ll][Ii][Nn][Kk]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Mm][Aa][Ll][Tt][Ee]+ end=+$+ oneline
+syn region nastranECSCard start=+^ *[Ss][Oo][Ll] + end=+$+ oneline
+syn region nastranECSCard start=+^ *[Tt][Ii][Mm][Ee]+ end=+$+ oneline
+"
+" -------Delimiters
+"
+syn match nastranDelimiter "[Cc][Ee][Nn][Dd]" contained
+syn match nastranDelimiter "[Bb][Ee][Gg][Ii][Nn]" contained
+syn match nastranDelimiter " *[Bb][Uu][Ll][Kk]" contained
+syn match nastranDelimiter "[Ee][Nn][Dd] *[dD][Aa][Tt][Aa]" contained
+"
+" -------Case Control section
+"
+syn region nastranCC start=+^ *[Cc][Ee][Nn][Dd]+ end=+^ *[Bb][Ee][Gg][Ii][Nn]+ contains=nastranDelimiter,nastranBulkData,nastranDmapComment
+
+"
+" -------Bulk Data section
+"
+syn region nastranBulkData start=+ *[Bb][Uu][Ll][Kk] *$+ end=+^ [Ee][Nn][Dd] *[Dd]+ contains=nastranDelimiter,nastranDmapComment
+"
+" -------The following cards may appear in multiple sections of the file
+"
+syn keyword nastranUtilCard ECHOON ECHOOFF INCLUDE PARAM
+
+
+if version >= 508 || !exists("did_nastran_syntax_inits")
+ if version < 508
+ let did_nastran_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi link <args>
+ endif
+ " The default methods for highlighting. Can be overridden later
+ HiLink nastranDmapexecmod Statement
+ HiLink nastranDmapType Type
+ HiLink nastranDmapPreCondit Error
+ HiLink nastranDmapUtilmod PreProc
+ HiLink nastranDmapMatmod nastranDmapUtilmod
+ HiLink nastranDmapString String
+ HiLink nastranDmapNumber Constant
+ HiLink nastranDmapFloat nastranDmapNumber
+ HiLink nastranDmapInitTab nastranDmapNumber
+ HiLink nastranDmapTab nastranDmapNumber
+ HiLink nastranDmapLogical nastranDmapExecmod
+ HiLink nastranDmapImplicit Identifier
+ HiLink nastranDmapComment Comment
+ HiLink nastranDmapRepeat nastranDmapexecmod
+ HiLink nastranNastranCard nastranDmapPreCondit
+ HiLink nastranECSCard nastranDmapUtilmod
+ HiLink nastranFMSCard nastranNastranCard
+ HiLink nastranCC nastranDmapexecmod
+ HiLink nastranDelimiter Special
+ HiLink nastranBulkData nastranDmapType
+ HiLink nastranUtilCard nastranDmapexecmod
+ delcommand HiLink
+endif
+
+let b:current_syntax = "nastran"
+
+"EOF vim: ts=8 noet tw=120 sw=8 sts=0
diff --git a/runtime/syntax/natural.vim b/runtime/syntax/natural.vim
new file mode 100644
index 000000000..f7f140f58
--- /dev/null
+++ b/runtime/syntax/natural.vim
@@ -0,0 +1,205 @@
+" Vim syntax file
+"
+" Language: NATURAL
+" Version: 2.0.26.17
+" Maintainer: Marko Leipert <vim@mleipert.de>
+" Last Changed: 2002-02-28 09:50:36
+" Support: http://www.winconsole.de/vim/syntax.html
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when this syntax file was already loaded
+if v:version < 600
+ syntax clear
+ set iskeyword+=-,*,#,+,_,/
+elseif exists("b:current_syntax")
+ finish
+else
+ setlocal iskeyword+=-,*,#,+,_,/
+endif
+
+" NATURAL is case insensitive
+syntax case ignore
+
+" preprocessor
+syn keyword naturalInclude include nextgroup=naturalObjName skipwhite
+
+" define data
+syn keyword naturalKeyword define data end-define
+syn keyword naturalKeyword independent global parameter local redefine view
+syn keyword naturalKeyword const[ant] init initial
+
+" loops
+syn keyword naturalLoop read end-read end-work find end-find histogram end-histogram
+syn keyword naturalLoop end-all sort end-sort sorted descending ascending
+syn keyword naturalRepeat repeat end-repeat while until for step end-for
+syn keyword naturalKeyword in file with field starting from ending at thru by isn where
+syn keyword naturalError on error end-error
+syn keyword naturalKeyword accept reject end-enddata number unique retain as release
+syn keyword naturalKeyword start end-start break end-break physical page top sequence
+syn keyword naturalKeyword end-toppage end-endpage end-endfile before processing
+syn keyword naturalKeyword end-before
+
+" conditionals
+syn keyword naturalConditional if then else end-if end-norec
+syn keyword naturalConditional decide end-decide value when condition none any
+
+" assignment / calculation
+syn keyword naturalKeyword reset assign move left right justified compress to into edited
+syn keyword naturalKeyword add subtract multiply divide compute name
+syn keyword naturalKeyword all giving remainder rounded leaving space
+syn keyword naturalKeyword examine full replace giving separate delimiter modified
+syn keyword naturalKeyword suspend identical suppress
+
+" program flow
+syn keyword naturalFlow callnat fetch return enter escape bottom top stack formatted
+syn keyword naturalFlow command call
+syn keyword naturalflow end-subroutine routine
+
+" file operations
+syn keyword naturalKeyword update store get delete end transaction work once close
+
+" other keywords
+syn keyword naturalKeyword first every of no record[s] found ignore immediate
+syn keyword naturalKeyword set settime key control stop terminate
+
+" in-/output
+syn keyword naturalKeyword write display input reinput notitle nohdr map newpage mark
+syn keyword naturalKeyword alarm text help eject index
+syn keyword naturalKeyword format printer skip lines
+
+" functions
+syn keyword naturalKeyword abs atn cos exp frac int log sgn sin sqrt tan val old
+
+" report mode keywords
+syn keyword naturalRMKeyword same loop obtain indexed do doend
+
+" Subroutine name
+syn keyword naturalFlow perform subroutine nextgroup=naturalFunction skipwhite
+syn match naturalFunction "\<[a-z][-_a-z0-9]*\>"
+
+syn keyword naturalFlow using nextgroup=naturalKeyword,naturalObjName skipwhite
+syn match naturalObjName "\<[a-z][-_a-z0-9]\{,7}\>"
+
+" Labels
+syn match naturalLabel "\<[+#a-z][-_#a-z0-9]*\."
+syn match naturalRef "\<[+#a-z][-_#a-z0-9]*\>\.\<[+#a-z][*]\=[-_#a-z0-9]*\>"
+
+" System variables
+syn match naturalSysVar "\<\*[a-z][-a-z0-9]*\>"
+
+"integer number, or floating point number without a dot.
+syn match naturalNumber "\<-\=\d\+\>"
+"floating point number, with dot
+syn match naturalNumber "\<-\=\d\+\.\d\+\>"
+"floating point number, starting with a dot
+syn match naturalNumber "\.\d\+"
+
+" Formats in write statement
+syn match naturalFormat "\<\d\+[TX]\>"
+
+" String and Character contstants
+syn match naturalString "H'\x\+'"
+syn region naturalString start=+"+ end=+"+
+syn region naturalString start=+'+ end=+'+
+
+" Type definition
+syn match naturalAttribute "\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
+syn match naturalType contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
+syn match naturalType contained "\<[CL]\>"
+
+" "TODO" / other comments
+syn keyword naturalTodo contained todo test
+syn match naturalCommentMark contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
+
+" comments
+syn region naturalComment start="/\*" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
+syn region naturalComment start="^\*[\ \*]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
+syn region naturalComment start="^\d\{4} \*[\ \*]"lc=5 end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
+syn match naturalComment "^*$"
+syn match naturalComment "^\d\{4} \*$"lc=5
+" /* is legal syntax in parentheses e.g. "#ident(label./*)"
+syn region naturalPComment contained start="/\*\s*[^),]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
+
+" operators
+syn keyword naturalOperator and or not eq ne gt lt ge le mask scan
+
+" constants
+syn keyword naturalBoolean true false
+
+syn match naturalLineNo "^\d\{4}"
+
+" identifiers
+syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*\>[^\.']"me=e-1
+syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*$"
+syn match naturalLegalIdent "[+#a-z][-_#a-z0-9]*/[-_#a-z0-9]*"
+
+" parentheses
+syn region naturalPar matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment
+syn match naturalLineRef "(\d\{4})"
+
+" build syntax groups
+syntax cluster naturalConstant contains=naturalString,naturalNumber,naturalAttribute,naturalBoolean
+
+" folding
+if v:version >= 600
+ set foldignore=*
+endif
+
+
+if v:version >= 508 || !exists("did_natural_syntax_inits")
+ if v:version < 508
+ let did_natural_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
+
+ " Constants
+ HiLink naturalFormat Constant
+ HiLink naturalAttribute Constant
+ HiLink naturalNumber Number
+ HiLink naturalString String
+ HiLink naturalBoolean Boolean
+
+ " All kinds of keywords
+ HiLink naturalConditional Conditional
+ HiLink naturalRepeat Repeat
+ HiLink naturalLoop Repeat
+ HiLink naturalFlow Keyword
+ HiLink naturalError Keyword
+ HiLink naturalKeyword Keyword
+ HiLink naturalOperator Operator
+ HiLink naturalParGui Operator
+
+ " Labels
+ HiLink naturalLabel Label
+ HiLink naturalRefLabel Label
+
+ " Comments
+ HiLink naturalPComment Comment
+ HiLink naturalComment Comment
+ HiLink naturalTodo Todo
+ HiLink naturalCommentMark PreProc
+
+ HiLink naturalInclude Include
+ HiLink naturalSysVar Identifier
+ HiLink naturalLineNo LineNr
+ HiLink naturalLineRef Error
+ HiLink naturalSpecial Special
+ HiLink naturalComKey Todo
+
+ " illegal things
+ HiLink naturalRMKeyword Error
+ HiLink naturalLegalIdent Error
+
+ HiLink naturalType Type
+ HiLink naturalFunction Function
+ HiLink naturalObjName Function
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "natural"
+
+" vim:set ts=4 sw=4 noet ft=vim list:
diff --git a/runtime/syntax/ncf.vim b/runtime/syntax/ncf.vim
new file mode 100644
index 000000000..15c74c8fa
--- /dev/null
+++ b/runtime/syntax/ncf.vim
@@ -0,0 +1,258 @@
+" Vim syntax file
+" Language: Novell "NCF" Batch File
+" Maintainer: Jonathan J. Miner <miner@doit.wisc.edu>
+" Last Change: Tue, 04 Sep 2001 16:20:33 CDT
+" $Id$
+
+" Remove any old syntax stuff hanging around
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+syn keyword ncfCommands mount load unload
+syn keyword ncfBoolean on off
+syn keyword ncfCommands set nextgroup=ncfSetCommands
+syn keyword ncfTimeTypes Reference Primary Secondary Single
+syn match ncfLoad "\(unl\|l\)oad .*"lc=4 contains=ALLBUT,Error
+syn match ncfMount "mount .*"lc=5 contains=ALLBUT,Error
+
+syn match ncfComment "^\ *rem.*$"
+syn match ncfComment "^\ *;.*$"
+syn match ncfComment "^\ *#.*$"
+
+syn match ncfSearchPath "search \(add\|del\) " nextgroup=ncfPath
+syn match ncfPath "\<[^: ]\+:\([A-Za-z0-9._]\|\\\)*\>"
+syn match ncfServerName "^file server name .*$"
+syn match ncfIPXNet "^ipx internal net"
+
+" String
+syn region ncfString start=+"+ end=+"+
+syn match ncfContString "= \(\(\.\{0,1}\(OU=\|O=\)\{0,1}[A-Z_]\+\)\+;\{0,1}\)\+"lc=2
+
+syn match ncfHexNumber "\<\d\(\d\+\|[A-F]\+\)*\>"
+syn match ncfNumber "\<\d\+\.\{0,1}\d*\>"
+syn match ncfIPAddr "\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}"
+syn match ncfTime "\(+|=\)\{0,1}\d\{1,2}:\d\{1,2}:\d\{1,2}"
+syn match ncfDSTTime "([^ ]\+ [^ ]\+ \(FIRST\|LAST\)\s*\d\{1,2}:\d\{1,2}:\d\{1,2} \(AM\|PM\))"
+syn match ncfTimeZone "[A-Z]\{3}\d[A-Z]\{3}"
+
+syn match ncfLogins "^\([Dd]is\|[Ee]n\)able login[s]*"
+syn match ncfScript "[^ ]*\.ncf"
+
+" SET Commands that take a Number following
+syn match ncfSetCommandsNum "\(Alert Message Nodes\)\s*="
+syn match ncfSetCommandsNum "\(Auto Restart After Abend\)\s*="
+syn match ncfSetCommandsNum "\(Auto Restart After Abend Delay Time\)\s*="
+syn match ncfSetCommandsNum "\(Compression Daily Check Starting Hour\)\s*="
+syn match ncfSetCommandsNum "\(Compression Daily Check Stop Hour\)\s*="
+syn match ncfSetCommandsNum "\(Concurrent Remirror Requests\)\s*="
+syn match ncfSetCommandsNum "\(Convert Compressed to Uncompressed Option\)\s*="
+syn match ncfSetCommandsNum "\(Days Untouched Before Compression\)\s*="
+syn match ncfSetCommandsNum "\(Decompress Free Space Warning Interval\)\s*="
+syn match ncfSetCommandsNum "\(Decompress Percent Disk Space Free to Allow Commit\)\s*="
+syn match ncfSetCommandsNum "\(Deleted Files Compression Option\)\s*="
+syn match ncfSetCommandsNum "\(Directory Cache Allocation Wait Time\)\s*="
+syn match ncfSetCommandsNum "\(Enable IPX Checksums\)\s*="
+syn match ncfSetCommandsNum "\(Garbage Collection Interval\)\s*="
+syn match ncfSetCommandsNum "\(IPX NetBIOS Replication Option\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Concurrent Compressions\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Concurrent Directory Cache Writes\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Concurrent Disk Cache Writes\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Directory Cache Buffers\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Extended Attributes per File or Path\)\s*="
+syn match ncfSetCommandsNum "\(Maximum File Locks\)\s*="
+syn match ncfSetCommandsNum "\(Maximum File Locks Per Connection\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Interrupt Events\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Number of Directory Handles\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Number of Internal Directory Handles\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Outstanding NCP Searches\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Packet Receive Buffers\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Physical Receive Packet Size\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Record Locks\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Record Locks Per Connection\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Service Processes\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Subdirectory Tree Depth\)\s*="
+syn match ncfSetCommandsNum "\(Maximum Transactions\)\s*="
+syn match ncfSetCommandsNum "\(Minimum Compression Percentage Gain\)\s*="
+syn match ncfSetCommandsNum "\(Minimum Directory Cache Buffers\)\s*="
+syn match ncfSetCommandsNum "\(Minimum File Cache Buffers\)\s*="
+syn match ncfSetCommandsNum "\(Minimum File Cache Report Threshold\)\s*="
+syn match ncfSetCommandsNum "\(Minimum Free Memory for Garbage Collection\)\s*="
+syn match ncfSetCommandsNum "\(Minimum Packet Receive Buffers\)\s*="
+syn match ncfSetCommandsNum "\(Minimum Service Processes\)\s*="
+syn match ncfSetCommandsNum "\(NCP Packet Signature Option\)\s*="
+syn match ncfSetCommandsNum "\(NDS Backlink Interval\)\s*="
+syn match ncfSetCommandsNum "\(NDS Client NCP Retries\)\s*="
+syn match ncfSetCommandsNum "\(NDS External Reference Life Span\)\s*="
+syn match ncfSetCommandsNum "\(NDS Inactivity Synchronization Interval\)\s*="
+syn match ncfSetCommandsNum "\(NDS Janitor Interval\)\s*="
+syn match ncfSetCommandsNum "\(New Service Process Wait Time\)\s*="
+syn match ncfSetCommandsNum "\(Number of Frees for Garbage Collection\)\s*="
+syn match ncfSetCommandsNum "\(Number of Watchdog Packets\)\s*="
+syn match ncfSetCommandsNum "\(Pseudo Preemption Count\)\s*="
+syn match ncfSetCommandsNum "\(Read Ahead LRU Sitting Time Threshold\)\s*="
+syn match ncfSetCommandsNum "\(Remirror Block Size\)\s*="
+syn match ncfSetCommandsNum "\(Reserved Buffers Below 16 Meg\)\s*="
+syn match ncfSetCommandsNum "\(Server Log File Overflow Size\)\s*="
+syn match ncfSetCommandsNum "\(Server Log File State\)\s*="
+syn match ncfSetCommandsNum "\(SMP Polling Count\)\s*="
+syn match ncfSetCommandsNum "\(SMP Stack Size\)\s*="
+syn match ncfSetCommandsNum "\(TIMESYNC Polling Count\)\s*="
+syn match ncfSetCommandsNum "\(TIMESYNC Polling Interval\)\s*="
+syn match ncfSetCommandsNum "\(TIMESYNC Synchronization Radius\)\s*="
+syn match ncfSetCommandsNum "\(TIMESYNC Write Value\)\s*="
+syn match ncfSetCommandsNum "\(Volume Log File Overflow Size\)\s*="
+syn match ncfSetCommandsNum "\(Volume Log File State\)\s*="
+syn match ncfSetCommandsNum "\(Volume Low Warning Reset Threshold\)\s*="
+syn match ncfSetCommandsNum "\(Volume Low Warning Threshold\)\s*="
+syn match ncfSetCommandsNum "\(Volume TTS Log File Overflow Size\)\s*="
+syn match ncfSetCommandsNum "\(Volume TTS Log File State\)\s*="
+syn match ncfSetCommandsNum "\(Worker Thread Execute In a Row Count\)\s*="
+
+" SET Commands that take a Boolean (ON/OFF)
+
+syn match ncfSetCommandsBool "\(Alloc Memory Check Flag\)\s*="
+syn match ncfSetCommandsBool "\(Allow Audit Passwords\)\s*="
+syn match ncfSetCommandsBool "\(Allow Change to Client Rights\)\s*="
+syn match ncfSetCommandsBool "\(Allow Deletion of Active Directories\)\s*="
+syn match ncfSetCommandsBool "\(Allow Invalid Pointers\)\s*="
+syn match ncfSetCommandsBool "\(Allow LIP\)\s*="
+syn match ncfSetCommandsBool "\(Allow Unencrypted Passwords\)\s*="
+syn match ncfSetCommandsBool "\(Allow Unowned Files To Be Extended\)\s*="
+syn match ncfSetCommandsBool "\(Auto Register Memory Above 16 Megabytes\)\s*="
+syn match ncfSetCommandsBool "\(Auto TTS Backout Flag\)\s*="
+syn match ncfSetCommandsBool "\(Automatically Repair Bad Volumes\)\s*="
+syn match ncfSetCommandsBool "\(Check Equivalent to Me\)\s*="
+syn match ncfSetCommandsBool "\(Command Line Prompt Default Choice\)\s*="
+syn match ncfSetCommandsBool "\(Console Display Watchdog Logouts\)\s*="
+syn match ncfSetCommandsBool "\(Daylight Savings Time Status\)\s*="
+syn match ncfSetCommandsBool "\(Developer Option\)\s*="
+syn match ncfSetCommandsBool "\(Display Incomplete IPX Packet Alerts\)\s*="
+syn match ncfSetCommandsBool "\(Display Lost Interrupt Alerts\)\s*="
+syn match ncfSetCommandsBool "\(Display NCP Bad Component Warnings\)\s*="
+syn match ncfSetCommandsBool "\(Display NCP Bad Length Warnings\)\s*="
+syn match ncfSetCommandsBool "\(Display Old API Names\)\s*="
+syn match ncfSetCommandsBool "\(Display Relinquish Control Alerts\)\s*="
+syn match ncfSetCommandsBool "\(Display Spurious Interrupt Alerts\)\s*="
+syn match ncfSetCommandsBool "\(Enable Deadlock Detection\)\s*="
+syn match ncfSetCommandsBool "\(Enable Disk Read After Write Verify\)\s*="
+syn match ncfSetCommandsBool "\(Enable File Compression\)\s*="
+syn match ncfSetCommandsBool "\(Enable IO Handicap Attribute\)\s*="
+syn match ncfSetCommandsBool "\(Enable SECURE.NCF\)\s*="
+syn match ncfSetCommandsBool "\(Fast Volume Mounts\)\s*="
+syn match ncfSetCommandsBool "\(Global Pseudo Preemption\)\s*="
+syn match ncfSetCommandsBool "\(Halt System on Invalid Parameters\)\s*="
+syn match ncfSetCommandsBool "\(Ignore Disk Geometry\)\s*="
+syn match ncfSetCommandsBool "\(Immediate Purge of Deleted Files\)\s*="
+syn match ncfSetCommandsBool "\(NCP File Commit\)\s*="
+syn match ncfSetCommandsBool "\(NDS Trace File Length to Zero\)\s*="
+syn match ncfSetCommandsBool "\(NDS Trace to File\)\s*="
+syn match ncfSetCommandsBool "\(NDS Trace to Screen\)\s*="
+syn match ncfSetCommandsBool "\(New Time With Daylight Savings Time Status\)\s*="
+syn match ncfSetCommandsBool "\(Read Ahead Enabled\)\s*="
+syn match ncfSetCommandsBool "\(Read Fault Emulation\)\s*="
+syn match ncfSetCommandsBool "\(Read Fault Notification\)\s*="
+syn match ncfSetCommandsBool "\(Reject NCP Packets with Bad Components\)\s*="
+syn match ncfSetCommandsBool "\(Reject NCP Packets with Bad Lengths\)\s*="
+syn match ncfSetCommandsBool "\(Replace Console Prompt with Server Name\)\s*="
+syn match ncfSetCommandsBool "\(Reply to Get Nearest Server\)\s*="
+syn match ncfSetCommandsBool "\(SMP Developer Option\)\s*="
+syn match ncfSetCommandsBool "\(SMP Flush Processor Cache\)\s*="
+syn match ncfSetCommandsBool "\(SMP Intrusive Abend Mode\)\s*="
+syn match ncfSetCommandsBool "\(SMP Memory Protection\)\s*="
+syn match ncfSetCommandsBool "\(Sound Bell for Alerts\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Configured Sources\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Directory Tree Mode\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Hardware Clock\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC RESET\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Restart Flag\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Service Advertising\)\s*="
+syn match ncfSetCommandsBool "\(TIMESYNC Write Parameters\)\s*="
+syn match ncfSetCommandsBool "\(TTS Abort Dump Flag\)\s*="
+syn match ncfSetCommandsBool "\(Upgrade Low Priority Threads\)\s*="
+syn match ncfSetCommandsBool "\(Volume Low Warn All Users\)\s*="
+syn match ncfSetCommandsBool "\(Write Fault Emulation\)\s*="
+syn match ncfSetCommandsBool "\(Write Fault Notification\)\s*="
+
+" Set Commands that take a "string" -- NOT QUOTED
+
+syn match ncfSetCommandsStr "\(Default Time Server Type\)\s*="
+syn match ncfSetCommandsStr "\(SMP NetWare Kernel Mode\)\s*="
+syn match ncfSetCommandsStr "\(Time Zone\)\s*="
+syn match ncfSetCommandsStr "\(TIMESYNC ADD Time Source\)\s*="
+syn match ncfSetCommandsStr "\(TIMESYNC REMOVE Time Source\)\s*="
+syn match ncfSetCommandsStr "\(TIMESYNC Time Source\)\s*="
+syn match ncfSetCommandsStr "\(TIMESYNC Type\)\s*="
+
+" SET Commands that take a "Time"
+
+syn match ncfSetCommandsTime "\(Command Line Prompt Time Out\)\s*="
+syn match ncfSetCommandsTime "\(Delay Before First Watchdog Packet\)\s*="
+syn match ncfSetCommandsTime "\(Delay Between Watchdog Packets\)\s*="
+syn match ncfSetCommandsTime "\(Directory Cache Buffer NonReferenced Delay\)\s*="
+syn match ncfSetCommandsTime "\(Dirty Directory Cache Delay Time\)\s*="
+syn match ncfSetCommandsTime "\(Dirty Disk Cache Delay Time\)\s*="
+syn match ncfSetCommandsTime "\(File Delete Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(Minimum File Delete Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(Mirrored Devices Are Out of Sync Message Frequency\)\s*="
+syn match ncfSetCommandsTime "\(New Packet Receive Buffer Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(TTS Backout File Truncation Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(TTS UnWritten Cache Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(Turbo FAT Re-Use Wait Time\)\s*="
+syn match ncfSetCommandsTime "\(Daylight Savings Time Offset\)\s*="
+
+syn match ncfSetCommandsTimeDate "\(End of Daylight Savings Time\)\s*="
+syn match ncfSetCommandsTimeDate "\(Start of Daylight Savings Time\)\s*="
+
+syn match ncfSetCommandsBindCon "\(Bindery Context\)\s*=" nextgroup=ncfContString
+
+syn cluster ncfSetCommands contains=ncfSetCommandsNum,ncfSetCommandsBool,ncfSetCommandsStr,ncfSetCommandsTime,ncfSetCommandsTimeDate,ncfSetCommandsBindCon
+
+
+if exists("ncf_highlight_unknowns")
+ syn match Error "[^ \t]*" contains=ALL
+endif
+
+if version >= 508 || !exists("did_ncf_syntax_inits")
+ if version < 508
+ let did_ncf_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 ncfCommands Statement
+ HiLink ncfSetCommands ncfCommands
+ HiLink ncfLogins ncfCommands
+ HiLink ncfString String
+ HiLink ncfContString ncfString
+ HiLink ncfComment Comment
+ HiLink ncfImplicit Type
+ HiLink ncfBoolean Boolean
+ HiLink ncfScript Identifier
+ HiLink ncfNumber Number
+ HiLink ncfIPAddr ncfNumber
+ HiLink ncfHexNumber ncfNumber
+ HiLink ncfTime ncfNumber
+ HiLink ncfDSTTime ncfNumber
+ HiLink ncfPath Constant
+ HiLink ncfServerName Special
+ HiLink ncfIPXNet ncfServerName
+ HiLink ncfTimeTypes Constant
+ HiLink ncfSetCommandsNum ncfSetCommands
+ HiLink ncfSetCommandsBool ncfSetCommands
+ HiLink ncfSetCommandsStr ncfSetCommands
+ HiLink ncfSetCommandsTime ncfSetCommands
+ HiLink ncfSetCommandsTimeDate ncfSetCommands
+ HiLink ncfSetCommandsBindCon ncfSetCommands
+
+ delcommand HiLink
+
+endif
+
+let b:current_syntax = "ncf"
diff --git a/runtime/syntax/nosyntax.vim b/runtime/syntax/nosyntax.vim
new file mode 100644
index 000000000..b0b0c17df
--- /dev/null
+++ b/runtime/syntax/nosyntax.vim
@@ -0,0 +1,29 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2000 Jul 15
+
+" This file is used for ":syntax off".
+" It removes the autocommands and stops highlighting for all buffers.
+
+if !has("syntax")
+ finish
+endif
+
+" remove all syntax autocommands and remove the syntax for each buffer
+augroup syntaxset
+ au!
+ au BufEnter * syn clear
+ au BufEnter * if exists("b:current_syntax") | unlet b:current_syntax | endif
+ doautoall syntaxset BufEnter *
+ au!
+augroup END
+
+" Just in case: remove all autocommands for the Syntax event
+au! Syntax
+
+if exists("syntax_on")
+ unlet syntax_on
+endif
+if exists("syntax_manual")
+ unlet syntax_manual
+endif
diff --git a/runtime/syntax/nqc.vim b/runtime/syntax/nqc.vim
new file mode 100644
index 000000000..0a3cd6bc7
--- /dev/null
+++ b/runtime/syntax/nqc.vim
@@ -0,0 +1,378 @@
+" Vim syntax file
+" Language: NQC - Not Quite C, for LEGO mindstorms
+" NQC homepage: http://www.enteract.com/~dbaum/nqc/
+" Maintainer: Stefan Scherer <stefan@enotes.de>
+" Last Change: 2001 May 10
+" URL: http://www.enotes.de/twiki/pub/Home/LegoMindstorms/nqc.vim
+" Filenames: .nqc
+
+" 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
+
+" Statements
+syn keyword nqcStatement break return continue start stop abs sign
+syn keyword nqcStatement sub task
+syn keyword nqcLabel case default
+syn keyword nqcConditional if else switch
+syn keyword nqcRepeat while for do until repeat
+
+" Scout and RCX2
+syn keyword nqcEvents acquire catch monitor
+
+" types and classes
+syn keyword nqcType int true false void
+syn keyword nqcStorageClass asm const inline
+
+
+
+" Sensors --------------------------------------------
+" Input Sensors
+syn keyword nqcConstant SENSOR_1 SENSOR_2 SENSOR_3
+
+" Types for SetSensorType()
+syn keyword nqcConstant SENSOR_TYPE_TOUCH SENSOR_TYPE_TEMPERATURE
+syn keyword nqcConstant SENSOR_TYPE_LIGHT SENSOR_TYPE_ROTATION
+syn keyword nqcConstant SENSOR_LIGHT SENSOR_TOUCH
+
+" Modes for SetSensorMode()
+syn keyword nqcConstant SENSOR_MODE_RAW SENSOR_MODE_BOOL
+syn keyword nqcConstant SENSOR_MODE_EDGE SENSOR_MODE_PULSE
+syn keyword nqcConstant SENSOR_MODE_PERCENT SENSOR_MODE_CELSIUS
+syn keyword nqcConstant SENSOR_MODE_FAHRENHEIT SENSOR_MODE_ROTATION
+
+" Sensor configurations for SetSensor()
+syn keyword nqcConstant SENSOR_TOUCH SENSOR_LIGHT SENSOR_ROTATION
+syn keyword nqcConstant SENSOR_CELSIUS SENSOR_FAHRENHEIT SENSOR_PULSE
+syn keyword nqcConstant SENSOR_EDGE
+
+" Functions - All
+syn keyword nqcFunction ClearSensor
+syn keyword nqcFunction SensorValue SensorType
+
+" Functions - RCX
+syn keyword nqcFunction SetSensor SetSensorType
+syn keyword nqcFunction SensorValueBool
+
+" Functions - RCX, CyberMaster
+syn keyword nqcFunction SetSensorMode SensorMode
+
+" Functions - RCX, Scout
+syn keyword nqcFunction SensorValueRaw
+
+" Functions - Scout
+syn keyword nqcFunction SetSensorLowerLimit SetSensorUpperLimit
+syn keyword nqcFunction SetSensorHysteresis CalibrateSensor
+
+
+" Outputs --------------------------------------------
+" Outputs for On(), Off(), etc.
+syn keyword nqcConstant OUT_A OUT_B OUT_C
+
+" Modes for SetOutput()
+syn keyword nqcConstant OUT_ON OUT_OFF OUT_FLOAT
+
+" Directions for SetDirection()
+syn keyword nqcConstant OUT_FWD OUT_REV OUT_TOGGLE
+
+" Output power for SetPower()
+syn keyword nqcConstant OUT_LOW OUT_HALF OUT_FULL
+
+" Functions - All
+syn keyword nqcFunction SetOutput SetDirection SetPower OutputStatus
+syn keyword nqcFunction On Off Float Fwd Rev Toggle
+syn keyword nqcFunction OnFwd OnRev OnFor
+
+" Functions - RXC2, Scout
+syn keyword nqcFunction SetGlobalOutput SetGlobalDirection SetMaxPower
+syn keyword nqcFunction GlobalOutputStatus
+
+
+" Sound ----------------------------------------------
+" Sounds for PlaySound()
+syn keyword nqcConstant SOUND_CLICK SOUND_DOUBLE_BEEP SOUND_DOWN
+syn keyword nqcConstant SOUND_UP SOUND_LOW_BEEP SOUND_FAST_UP
+
+" Functions - All
+syn keyword nqcFunction PlaySound PlayTone
+
+" Functions - RCX2, Scout
+syn keyword nqcFunction MuteSound UnmuteSound ClearSound
+syn keyword nqcFunction SelectSounds
+
+
+" LCD ------------------------------------------------
+" Modes for SelectDisplay()
+syn keyword nqcConstant DISPLAY_WATCH DISPLAY_SENSOR_1 DISPLAY_SENSOR_2
+syn keyword nqcConstant DISPLAY_SENSOR_3 DISPLAY_OUT_A DISPLAY_OUT_B
+syn keyword nqcConstant DISPLAY_OUT_C
+" RCX2
+syn keyword nqcConstant DISPLAY_USER
+
+" Functions - RCX
+syn keyword nqcFunction SelectDisplay
+" Functions - RCX2
+syn keyword nqcFunction SetUserDisplay
+
+
+" Communication --------------------------------------
+" Messages - RCX, Scout ------------------------------
+" Tx power level for SetTxPower()
+syn keyword nqcConstant TX_POWER_LO TX_POWER_HI
+
+" Functions - RCX, Scout
+syn keyword nqcFunction Message ClearMessage SendMessage SetTxPower
+
+" Serial - RCX2 --------------------------------------
+" for SetSerialComm()
+syn keyword nqcConstant SERIAL_COMM_DEFAULT SERIAL_COMM_4800
+syn keyword nqcConstant SERIAL_COMM_DUTY25 SERIAL_COMM_76KHZ
+
+" for SetSerialPacket()
+syn keyword nqcConstant SERIAL_PACKET_DEFAULT SERIAL_PACKET_PREAMBLE
+syn keyword nqcConstant SERIAL_PACKET_NEGATED SERIAL_PACKET_CHECKSUM
+syn keyword nqcConstant SERIAL_PACKET_RCX
+
+" Functions - RCX2
+syn keyword nqcFunction SetSerialComm SetSerialPacket SetSerialData
+syn keyword nqcFunction SerialData SendSerial
+
+" VLL - Scout ----------------------------------------
+" Functions - Scout
+syn keyword nqcFunction SendVLL
+
+
+" Timers ---------------------------------------------
+" Functions - All
+syn keyword nqcFunction ClearTimer Timer
+
+" Functions - RCX2
+syn keyword nqcFunction SetTimer FastTimer
+
+
+" Counters -------------------------------------------
+" Functions - RCX2, Scout
+syn keyword nqcFunction ClearCounter IncCounter DecCounter Counter
+
+
+" Access Control -------------------------------------
+syn keyword nqcConstant ACQUIRE_OUT_A ACQUIRE_OUT_B ACQUIRE_OUT_C
+syn keyword nqcConstant ACQUIRE_SOUND
+" RCX2 only
+syn keyword nqcConstant ACQUIRE_USER_1 ACQUIRE_USER_2 ACQUIRE_USER_3
+syn keyword nqcConstant ACQUIRE_USER_4
+
+" Functions - RCX2, Scout
+syn keyword nqcFunction SetPriority
+
+
+" Events ---------------------------------------------
+" RCX2 Events
+syn keyword nqcConstant EVENT_TYPE_PRESSED EVENT_TYPE_RELEASED
+syn keyword nqcConstant EVENT_TYPE_PULSE EVENT_TYPE_EDGE
+syn keyword nqcConstant EVENT_TYPE_FAST_CHANGE EVENT_TYPE_LOW
+syn keyword nqcConstant EVENT_TYPE_NORMAL EVENT_TYPE_HIGH
+syn keyword nqcConstant EVENT_TYPE_CLICK EVENT_TYPE_DOUBLECLICK
+syn keyword nqcConstant EVENT_TYPE_MESSAGE
+
+" Scout Events
+syn keyword nqcConstant EVENT_1_PRESSED EVENT_1_RELEASED
+syn keyword nqcConstant EVENT_2_PRESSED EVENT_2_RELEASED
+syn keyword nqcConstant EVENT_LIGHT_HIGH EVENT_LIGHT_NORMAL
+syn keyword nqcConstant EVENT_LIGHT_LOW EVENT_LIGHT_CLICK
+syn keyword nqcConstant EVENT_LIGHT_DOUBLECLICK EVENT_COUNTER_0
+syn keyword nqcConstant EVENT_COUNTER_1 EVENT_TIMER_0 EVENT_TIMER_1
+syn keyword nqcConstant EVENT_TIMER_2 EVENT_MESSAGE
+
+" Functions - RCX2, Scout
+syn keyword nqcFunction ActiveEvents Event
+
+" Functions - RCX2
+syn keyword nqcFunction CurrentEvents
+syn keyword nqcFunction SetEvent ClearEvent ClearAllEvents EventState
+syn keyword nqcFunction CalibrateEvent SetUpperLimit UpperLimit
+syn keyword nqcFunction SetLowerLimit LowerLimit SetHysteresis
+syn keyword nqcFunction Hysteresis
+syn keyword nqcFunction SetClickTime ClickTime SetClickCounter
+syn keyword nqcFunction ClickCounter
+
+" Functions - Scout
+syn keyword nqcFunction SetSensorClickTime SetCounterLimit
+syn keyword nqcFunction SetTimerLimit
+
+
+" Data Logging ---------------------------------------
+" Functions - RCX
+syn keyword nqcFunction CreateDatalog AddToDatalog
+syn keyword nqcFunction UploadDatalog
+
+
+" General Features -----------------------------------
+" Functions - All
+syn keyword nqcFunction Wait StopAllTasks Random
+syn keyword nqcFunction SetSleepTime SleepNow
+
+" Functions - RCX
+syn keyword nqcFunction Program Watch SetWatch
+
+" Functions - RCX2
+syn keyword nqcFunction SetRandomSeed SelectProgram
+syn keyword nqcFunction BatteryLevel FirmwareVersion
+
+" Functions - Scout
+" Parameters for SetLight()
+syn keyword nqcConstant LIGHT_ON LIGHT_OFF
+syn keyword nqcFunction SetScoutRules ScoutRules SetScoutMode
+syn keyword nqcFunction SetEventFeedback EventFeedback SetLight
+
+" additional CyberMaster defines
+syn keyword nqcConstant OUT_L OUT_R OUT_X
+syn keyword nqcConstant SENSOR_L SENSOR_M SENSOR_R
+" Functions - CyberMaster
+syn keyword nqcFunction Drive OnWait OnWaitDifferent
+syn keyword nqcFunction ClearTachoCounter TachoCount TachoSpeed
+syn keyword nqcFunction ExternalMotorRunning AGC
+
+
+
+" nqcCommentGroup allows adding matches for special things in comments
+syn keyword nqcTodo contained TODO FIXME XXX
+syn cluster nqcCommentGroup contains=nqcTodo
+
+"when wanted, highlight trailing white space
+if exists("nqc_space_errors")
+ if !exists("nqc_no_trail_space_error")
+ syn match nqcSpaceError display excludenl "\s\+$"
+ endif
+ if !exists("nqc_no_tab_space_error")
+ syn match nqcSpaceError display " \+\t"me=e-1
+ endif
+endif
+
+"catch errors caused by wrong parenthesis and brackets
+syn cluster nqcParenGroup contains=nqcParenError,nqcIncluded,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcCommentSkip,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers
+if exists("nqc_no_bracket_error")
+ syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen
+ " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
+ syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcParen
+ syn match nqcParenError display ")"
+ syn match nqcErrInParen display contained "[{}]"
+else
+ syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen,nqcErrInBracket,nqcCppBracket
+ " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
+ syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInBracket,nqcParen,nqcBracket
+ syn match nqcParenError display "[\])]"
+ syn match nqcErrInParen display contained "[\]{}]"
+ syn region nqcBracket transparent start='\[' end=']' contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcCppParen,nqcCppBracket
+ " nqcCppBracket: same as nqcParen but ends at end-of-line; used in nqcDefine
+ syn region nqcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcParen,nqcBracket
+ syn match nqcErrInBracket display contained "[);{}]"
+endif
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match nqcNumbers display transparent "\<\d\|\.\d" contains=nqcNumber,nqcFloat
+" Same, but without octal error (for comments)
+syn match nqcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match nqcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match nqcFloat display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match nqcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match nqcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match nqcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn case match
+
+syn region nqcCommentL start="//" skip="\\$" end="$" keepend contains=@nqcCommentGroup,nqcSpaceError
+syn region nqcComment matchgroup=nqcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@nqcCommentGroup,nqcCommentStartError,nqcSpaceError
+
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match nqcCommentError display "\*/"
+syntax match nqcCommentStartError display "/\*" contained
+
+
+
+
+
+syn region nqcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=nqcComment,nqcCharacter,nqcCppParen,nqcParenError,nqcNumbers,nqcCommentError,nqcSpaceError
+syn match nqcPreCondit display "^\s*#\s*\(else\|endif\)\>"
+if !exists("nqc_no_if0")
+ syn region nqcCppOut start="^\s*#\s*if\s\+0\>" end=".\|$" contains=nqcCppOut2
+ syn region nqcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=nqcSpaceError,nqcCppSkip
+ syn region nqcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=nqcSpaceError,nqcCppSkip
+endif
+syn region nqcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match nqcInclude display "^\s*#\s*include\>\s*["]" contains=nqcIncluded
+"syn match nqcLineSkip "\\$"
+syn cluster nqcPreProcGroup contains=nqcPreCondit,nqcIncluded,nqcInclude,nqcDefine,nqcErrInParen,nqcErrInBracket,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcParen,nqcBracket
+syn region nqcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@nqcPreProcGroup
+syn region nqcPreProc start="^\s*#\s*\(pragma\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@nqcPreProcGroup
+
+if !exists("nqc_minlines")
+ if !exists("nqc_no_if0")
+ let nqc_minlines = 50 " #if 0 constructs can be long
+ else
+ let nqc_minlines = 15 " mostly for () constructs
+ endif
+endif
+exec "syn sync ccomment nqcComment minlines=" . nqc_minlines
+
+" 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_nqc_syn_inits")
+ if version < 508
+ let did_nqc_syn_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 nqcLabel Label
+ HiLink nqcConditional Conditional
+ HiLink nqcRepeat Repeat
+ HiLink nqcCharacter Character
+ HiLink nqcNumber Number
+ HiLink nqcFloat Float
+ HiLink nqcFunction Function
+ HiLink nqcParenError nqcError
+ HiLink nqcErrInParen nqcError
+ HiLink nqcErrInBracket nqcError
+ HiLink nqcCommentL nqcComment
+ HiLink nqcCommentStart nqcComment
+ HiLink nqcCommentError nqcError
+ HiLink nqcCommentStartError nqcError
+ HiLink nqcSpaceError nqcError
+ HiLink nqcStorageClass StorageClass
+ HiLink nqcInclude Include
+ HiLink nqcPreProc PreProc
+ HiLink nqcDefine Macro
+ HiLink nqcIncluded String
+ HiLink nqcError Error
+ HiLink nqcStatement Statement
+ HiLink nqcEvents Statement
+ HiLink nqcPreCondit PreCondit
+ HiLink nqcType Type
+ HiLink nqcConstant Constant
+ HiLink nqcCommentSkip nqcComment
+ HiLink nqcComment Comment
+ HiLink nqcTodo Todo
+ HiLink nqcCppSkip nqcCppOut
+ HiLink nqcCppOut2 nqcCppOut
+ HiLink nqcCppOut Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "nqc"
+
+" vim: ts=8
diff --git a/runtime/syntax/nroff.vim b/runtime/syntax/nroff.vim
new file mode 100644
index 000000000..2f004d605
--- /dev/null
+++ b/runtime/syntax/nroff.vim
@@ -0,0 +1,259 @@
+" VIM syntax file
+" Language: nroff/groff
+" Maintainer: Alejandro López-Valencia <dradul@yahoo.com>
+" URL: http://dradul.tripod.com/vim
+" Last Change: 2003 May 24
+"
+" {{{1 Acknowledgements
+"
+" ACKNOWLEDGEMENTS:
+"
+" My thanks to Jérôme Plût <Jerome.Plut@ens.fr>, who was the
+" creator and maintainer of this syntax file for several years.
+" May I be as good at it as he has been.
+"
+" {{{1 Todo
+"
+" TODO:
+"
+" * Write syntax highlighting files for the preprocessors,
+" and integrate with nroff.vim.
+"
+"
+" {{{1 Start syntax highlighting.
+"
+" 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
+
+"
+" {{{1 plugin settings...
+"
+" {{{2 enable spacing error highlighting
+"
+if exists("nroff_space_errors")
+ syn match nroffError /\s\+$/
+ syn match nroffSpaceError /[.,:;!?]\s\{2,}/
+endif
+"
+"
+" {{{1 Special file settings
+"
+" {{{2 ms exdented paragraphs are not in the default paragraphs list.
+"
+setlocal paragraphs+=XP
+"
+" {{{2 Activate navigation to preporcessor sections.
+"
+if exists("b:preprocs_as_sections")
+ setlocal sections=EQTSPS[\ G1GS
+endif
+
+" {{{1 Escape sequences
+" ------------------------------------------------------------
+
+syn match nroffEscChar /\\[CN]/ nextgroup=nroffEscCharArg
+syn match nroffEscape /\\[*fgmnYV]/ nextgroup=nroffEscRegPar,nroffEscRegArg
+syn match nroffEscape /\\s[+-]\=/ nextgroup=nroffSize
+syn match nroffEscape /\\[$AbDhlLRvxXZ]/ nextgroup=nroffEscPar,nroffEscArg
+
+syn match nroffEscRegArg /./ contained
+syn match nroffEscRegArg2 /../ contained
+syn match nroffEscRegPar /(/ contained nextgroup=nroffEscRegArg2
+syn match nroffEscArg /./ contained
+syn match nroffEscArg2 /../ contained
+syn match nroffEscPar /(/ contained nextgroup=nroffEscArg2
+syn match nroffSize /\((\d\)\=\d/ contained
+
+syn region nroffEscCharArg start=/'/ end=/'/ contained
+syn region nroffEscArg start=/'/ end=/'/ contained contains=nroffEscape,@nroffSpecial
+
+if exists("b:nroff_is_groff")
+ syn region nroffEscRegArg matchgroup=nroffEscape start=/\[/ end=/\]/ contained oneline
+ syn region nroffSize matchgroup=nroffEscape start=/\[/ end=/\]/ contained
+endif
+
+syn match nroffEscape /\\[adprtu{}]/
+syn match nroffEscape /\\$/
+syn match nroffEscape /\\\$[@*]/
+
+" {{{1 Strings and special characters
+" ------------------------------------------------------------
+
+syn match nroffSpecialChar /\\[\\eE?!-]/
+syn match nroffSpace "\\[&%~|^0)/,]"
+syn match nroffSpecialChar /\\(../
+
+if exists("b:nroff_is_groff")
+ syn match nroffSpecialChar /\\\[[^]]*]/
+ syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\?/ end=/\\?/ oneline
+endif
+
+syn region nroffPreserve matchgroup=nroffSpecialChar start=/\\!/ end=/$/ oneline
+
+syn cluster nroffSpecial contains=nroffSpecialChar,nroffSpace
+
+
+syn region nroffString start=/"/ end=/"/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
+syn region nroffString start=/'/ end=/'/ skip=/\\$/ contains=nroffEscape,@nroffSpecial contained
+
+
+" {{{1 Numbers and units
+" ------------------------------------------------------------
+syn match nroffNumBlock /[0-9.]\a\=/ contained contains=nroffNumber
+syn match nroffNumber /\d\+\(\.\d*\)\=/ contained nextgroup=nroffUnit,nroffBadChar
+syn match nroffNumber /\.\d\+)/ contained nextgroup=nroffUnit,nroffBadChar
+syn match nroffBadChar /./ contained
+syn match nroffUnit /[icpPszmnvMu]/ contained
+
+
+" {{{1 Requests
+" ------------------------------------------------------------
+
+" Requests begin with . or ' at the beginning of a line, or
+" after .if or .ie.
+
+syn match nroffReqLeader /^[.']/ nextgroup=nroffReqName skipwhite
+syn match nroffReqLeader /[.']/ contained nextgroup=nroffReqName skipwhite
+
+if exists("b:nroff_is_groff")
+"
+" GNU troff allows long request names
+"
+syn match nroffReqName /[^\t \\\[?]\+/ contained nextgroup=nroffReqArg
+else
+ syn match nroffReqName /[^\t \\\[?]\{1,2}/ contained nextgroup=nroffReqArg
+endif
+
+syn region roffReqArg start=/\S/ skip=/\\$/ end=/$/ contained contains=nroffEscape,@nroffSpecial,nroffString,nroffError,nroffSpaceError,nroffNumBlock,nroffComment
+
+" {{{2 Conditional: .if .ie .el
+syn match nroffReqName /\(if\|ie\)/ contained nextgroup=nroffCond skipwhite
+syn match nroffReqName /el/ contained nextgroup=nroffReqLeader skipwhite
+syn match nroffCond /\S\+/ contained nextgroup=nroffReqLeader skipwhite
+
+" {{{2 String definition: .ds .as
+syn match nroffReqname /[da]s/ contained nextgroup=nroffDefIdent skipwhite
+syn match nroffDefIdent /\S\+/ contained nextgroup=nroffDefinition skipwhite
+syn region nroffDefinition matchgroup=nroffSpecialChar start=/"/ matchgroup=NONE end=/\\"/me=e-2 skip=/\\$/ start=/\S/ end=/$/ contained contains=nroffDefSpecial
+syn match nroffDefSpecial /\\$/ contained
+syn match nroffDefSpecial /\\\((.\)\=./ contained
+
+if exists("b:nroff_is_groff")
+ syn match nroffDefSpecial /\\\[[^]]*]/ contained
+endif
+
+" {{{2 Macro definition: .de .am, also diversion: .di
+syn match nroffReqName /\(d[ei]\|am\)/ contained nextgroup=nroffIdent skipwhite
+syn match nroffIdent /[^[?( \t]\+/ contained
+if exists("b:nroff_is_groff")
+ syn match nroffReqName /als/ contained nextgroup=nroffIdent skipwhite
+endif
+
+" {{{2 Register definition: .rn .rr
+syn match nroffReqName /[rn]r/ contained nextgroup=nroffIdent skipwhite
+if exists("b:nroff_is_groff")
+ syn match nroffReqName /\(rnn\|aln\)/ contained nextgroup=nroffIdent skipwhite
+endif
+
+
+" {{{1 eqn/tbl/pic
+" ------------------------------------------------------------
+" <jp>
+" XXX: write proper syntax highlight for eqn / tbl / pic ?
+" <jp />
+
+syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/
+syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/
+syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/
+syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/
+syn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/
+syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/
+
+" {{{1 Comments
+" ------------------------------------------------------------
+
+syn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./
+syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo
+syn match nroffComment /^'''.*/ contains=nroffTodo
+
+if exists("b:nroff_is_groff")
+ syn match nroffComment "\\#.*$" contains=nroffTodo
+endif
+
+syn keyword nroffTodo TODO XXX FIXME contained
+
+" {{{1 Hilighting
+" ------------------------------------------------------------
+"
+
+"
+" 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_nroff_syn_inits")
+
+ if version < 508
+ let did_nroff_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink nroffEscChar nroffSpecialChar
+ HiLink nroffEscCharAr nroffSpecialChar
+ HiLink nroffSpecialChar SpecialChar
+ HiLink nroffSpace Delimiter
+
+ HiLink nroffEscRegArg2 nroffEscRegArg
+ HiLink nroffEscRegArg nroffIdent
+
+ HiLink nroffEscArg2 nroffEscArg
+ HiLink nroffEscPar nroffEscape
+
+ HiLink nroffEscRegPar nroffEscape
+ HiLink nroffEscArg nroffEscape
+ HiLink nroffSize nroffEscape
+ HiLink nroffEscape Preproc
+
+ HiLink nroffIgnore Comment
+ HiLink nroffComment Comment
+ HiLink nroffTodo Todo
+
+ HiLink nroffReqLeader nroffRequest
+ HiLink nroffReqName nroffRequest
+ HiLink nroffRequest Statement
+ HiLink nroffCond PreCondit
+ HiLink nroffDefIdent nroffIdent
+ HiLink nroffIdent Identifier
+
+ HiLink nroffEquation PreProc
+ HiLink nroffTable PreProc
+ HiLink nroffPicture PreProc
+ HiLink nroffRefer PreProc
+ HiLink nroffGrap PreProc
+ HiLink nroffGremlin PreProc
+
+ HiLink nroffNumber Number
+ HiLink nroffBadChar nroffError
+ HiLink nroffSpaceError nroffError
+ HiLink nroffError Error
+
+ HiLink nroffPreserve String
+ HiLink nroffString String
+ HiLink nroffDefinition String
+ HiLink nroffDefSpecial Special
+
+ delcommand HiLink
+
+endif
+
+let b:current_syntax = "nroff"
+
+" vim600: set fdm=marker fdl=2:
diff --git a/runtime/syntax/nsis.vim b/runtime/syntax/nsis.vim
new file mode 100644
index 000000000..d6d803714
--- /dev/null
+++ b/runtime/syntax/nsis.vim
@@ -0,0 +1,271 @@
+" Vim syntax file
+" Language: NSIS script, for version of NSIS 1.91 and later
+" Maintainer: Alex Jakushev <Alex.Jakushev@kemek.lt>
+" Last Change: 2004 May 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
+
+syn case ignore
+
+
+"COMMENTS
+syn keyword nsisTodo todo attention note fixme readme
+syn region nsisComment start=";" end="$" contains=nsisTodo
+syn region nsisComment start="#" end="$" contains=nsisTodo
+
+"LABELS
+syn match nsisLocalLabel "\a\S\{-}:"
+syn match nsisGlobalLabel "\.\S\{-1,}:"
+
+"PREPROCESSOR
+syn match nsisPreprocSubst "${.\{-}}"
+syn match nsisDefine "!define\>"
+syn match nsisDefine "!undef\>"
+syn match nsisPreCondit "!ifdef\>"
+syn match nsisPreCondit "!ifndef\>"
+syn match nsisPreCondit "!endif\>"
+syn match nsisPreCondit "!else\>"
+syn match nsisMacro "!macro\>"
+syn match nsisMacro "!macroend\>"
+syn match nsisMacro "!insertmacro\>"
+
+"COMPILER UTILITY
+syn match nsisInclude "!include\>"
+syn match nsisSystem "!cd\>"
+syn match nsisSystem "!system\>"
+syn match nsisSystem "!packhdr\>"
+
+"VARIABLES
+syn match nsisUserVar "$\d"
+syn match nsisUserVar "$R\d"
+syn match nsisSysVar "$INSTDIR"
+syn match nsisSysVar "$OUTDIR"
+syn match nsisSysVar "$CMDLINE"
+syn match nsisSysVar "$PROGRAMFILES"
+syn match nsisSysVar "$DESKTOP"
+syn match nsisSysVar "$EXEDIR"
+syn match nsisSysVar "$WINDIR"
+syn match nsisSysVar "$SYSDIR"
+syn match nsisSysVar "$TEMP"
+syn match nsisSysVar "$STARTMENU"
+syn match nsisSysVar "$SMPROGRAMS"
+syn match nsisSysVar "$SMSTARTUP"
+syn match nsisSysVar "$QUICKLAUNCH"
+syn match nsisSysVar "$HWNDPARENT"
+syn match nsisSysVar "$\\r"
+syn match nsisSysVar "$\\n"
+syn match nsisSysVar "$\$"
+
+"STRINGS
+syn region nsisString start=/"/ skip=/'\|`/ end=/"/ contains=nsisPreprocSubst,nsisUserVar,nsisSysVar,nsisRegistry
+syn region nsisString start=/'/ skip=/"\|`/ end=/'/ contains=nsisPreprocSubst,nsisUserVar,nsisSysVar,nsisRegistry
+syn region nsisString start=/`/ skip=/"\|'/ end=/`/ contains=nsisPreprocSubst,nsisUserVar,nsisSysVar,nsisRegistry
+
+"CONSTANTS
+syn keyword nsisBoolean true false on off
+
+syn keyword nsisAttribOptions hide show nevershow auto force try ifnewer normal silent silentlog
+syn keyword nsisAttribOptions smooth colored SET CUR END RO none listonly textonly both current all
+syn keyword nsisAttribOptions zlib bzip2 lzma
+
+syn match nsisAttribOptions '\/NOCUSTOM'
+syn match nsisAttribOptions '\/CUSTOMSTRING'
+syn match nsisAttribOptions '\/COMPONENTSONLYONCUSTOM'
+syn match nsisAttribOptions '\/windows'
+syn match nsisAttribOptions '\/r'
+syn match nsisAttribOptions '\/oname'
+syn match nsisAttribOptions '\/REBOOTOK'
+syn match nsisAttribOptions '\/SILENT'
+syn match nsisAttribOptions '\/FILESONLY'
+syn match nsisAttribOptions '\/SHORT'
+
+syn keyword nsisExecShell SW_SHOWNORMAL SW_SHOWMAXIMIZED SW_SHOWMINIMIZED
+
+syn keyword nsisRegistry HKCR HKLM HKCU HKU HKCC HKDD HKPD
+syn keyword nsisRegistry HKEY_CLASSES_ROOT HKEY_LOCAL_MACHINE HKEY_CURRENT_USER HKEY_USERS
+syn keyword nsisRegistry HKEY_CURRENT_CONFIG HKEY_DYN_DATA HKEY_PERFORMANCE_DATA
+
+syn keyword nsisFileAttrib NORMAL ARCHIVE HIDDEN OFFLINE READONLY SYSTEM TEMPORARY
+syn keyword nsisFileAttrib FILE_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_HIDDEN
+syn keyword nsisFileAttrib FILE_ATTRIBUTE_OFFLINE FILE_ATTRIBUTE_READONLY FILE_ATTRIBUTE_SYSTEM
+syn keyword nsisFileAttrib FILE_ATTRIBUTE_TEMPORARY
+
+syn keyword nsisMessageBox MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_RETRYCANCEL MB_YESNO MB_YESNOCANCEL
+syn keyword nsisMessageBox MB_ICONEXCLAMATION MB_ICONINFORMATION MB_ICONQUESTION MB_ICONSTOP
+syn keyword nsisMessageBox MB_TOPMOST MB_SETFOREGROUND MB_RIGHT
+syn keyword nsisMessageBox MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 MB_DEFBUTTON4
+syn keyword nsisMessageBox IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY IDYES
+
+syn match nsisNumber "\<[^0]\d*\>"
+syn match nsisNumber "\<0x\x\+\>"
+syn match nsisNumber "\<0\o*\>"
+
+
+"INSTALLER ATTRIBUTES - General installer configuration
+syn keyword nsisAttribute OutFile Name Caption SubCaption BrandingText Icon
+syn keyword nsisAttribute WindowIcon BGGradient SilentInstall SilentUnInstall
+syn keyword nsisAttribute CRCCheck MiscButtonText InstallButtonText FileErrorText
+
+"INSTALLER ATTRIBUTES - Install directory configuration
+syn keyword nsisAttribute InstallDir InstallDirRegKey
+
+"INSTALLER ATTRIBUTES - License page configuration
+syn keyword nsisAttribute LicenseText LicenseData
+
+"INSTALLER ATTRIBUTES - Component page configuration
+syn keyword nsisAttribute ComponentText InstType EnabledBitmap DisabledBitmap SpaceTexts
+
+"INSTALLER ATTRIBUTES - Directory page configuration
+syn keyword nsisAttribute DirShow DirText AllowRootDirInstall
+
+"INSTALLER ATTRIBUTES - Install page configuration
+syn keyword nsisAttribute InstallColors InstProgressFlags AutoCloseWindow
+syn keyword nsisAttribute ShowInstDetails DetailsButtonText CompletedText
+
+"INSTALLER ATTRIBUTES - Uninstall configuration
+syn keyword nsisAttribute UninstallText UninstallIcon UninstallCaption
+syn keyword nsisAttribute UninstallSubCaption ShowUninstDetails UninstallButtonText
+
+"COMPILER ATTRIBUTES
+syn keyword nsisCompiler SetOverwrite SetCompress SetCompressor SetDatablockOptimize SetDateSave
+
+
+"FUNCTIONS - general purpose
+syn keyword nsisInstruction SetOutPath File Exec ExecWait ExecShell
+syn keyword nsisInstruction Rename Delete RMDir
+
+"FUNCTIONS - registry & ini
+syn keyword nsisInstruction WriteRegStr WriteRegExpandStr WriteRegDWORD WriteRegBin
+syn keyword nsisInstruction WriteINIStr ReadRegStr ReadRegDWORD ReadINIStr ReadEnvStr
+syn keyword nsisInstruction ExpandEnvStrings DeleteRegValue DeleteRegKey EnumRegKey
+syn keyword nsisInstruction EnumRegValue DeleteINISec DeleteINIStr
+
+"FUNCTIONS - general purpose, advanced
+syn keyword nsisInstruction CreateDirectory CopyFiles SetFileAttributes CreateShortCut
+syn keyword nsisInstruction GetFullPathName SearchPath GetTempFileName CallInstDLL
+syn keyword nsisInstruction RegDLL UnRegDLL GetDLLVersion GetDLLVersionLocal
+syn keyword nsisInstruction GetFileTime GetFileTimeLocal
+
+"FUNCTIONS - Branching, flow control, error checking, user interaction, etc instructions
+syn keyword nsisInstruction Goto Call Return IfErrors ClearErrors SetErrors FindWindow
+syn keyword nsisInstruction SendMessage IsWindow IfFileExists MessageBox StrCmp
+syn keyword nsisInstruction IntCmp IntCmpU Abort Quit GetFunctionAddress GetLabelAddress
+syn keyword nsisInstruction GetCurrentAddress
+
+"FUNCTIONS - File and directory i/o instructions
+syn keyword nsisInstruction FindFirst FindNext FindClose FileOpen FileClose FileRead
+syn keyword nsisInstruction FileWrite FileReadByte FileWriteByte FileSeek
+
+"FUNCTIONS - Misc instructions
+syn keyword nsisInstruction SetDetailsView SetDetailsPrint SetAutoClose DetailPrint
+syn keyword nsisInstruction Sleep BringToFront HideWindow SetShellVarContext
+
+"FUNCTIONS - String manipulation support
+syn keyword nsisInstruction StrCpy StrLen
+
+"FUNCTIONS - Stack support
+syn keyword nsisInstruction Push Pop Exch
+
+"FUNCTIONS - Integer manipulation support
+syn keyword nsisInstruction IntOp IntFmt
+
+"FUNCTIONS - Rebooting support
+syn keyword nsisInstruction Reboot IfRebootFlag SetRebootFlag
+
+"FUNCTIONS - Uninstaller instructions
+syn keyword nsisInstruction WriteUninstaller
+
+"FUNCTIONS - Install logging instructions
+syn keyword nsisInstruction LogSet LogText
+
+"FUNCTIONS - Section management instructions
+syn keyword nsisInstruction SectionSetFlags SectionGetFlags SectionSetText
+syn keyword nsisInstruction SectionGetText
+
+
+"SPECIAL FUNCTIONS - install
+syn match nsisCallback "\.onInit"
+syn match nsisCallback "\.onUserAbort"
+syn match nsisCallback "\.onInstSuccess"
+syn match nsisCallback "\.onInstFailed"
+syn match nsisCallback "\.onVerifyInstDir"
+syn match nsisCallback "\.onNextPage"
+syn match nsisCallback "\.onPrevPage"
+syn match nsisCallback "\.onSelChange"
+
+"SPECIAL FUNCTIONS - uninstall
+syn match nsisCallback "un\.onInit"
+syn match nsisCallback "un\.onUserAbort"
+syn match nsisCallback "un\.onInstSuccess"
+syn match nsisCallback "un\.onInstFailed"
+syn match nsisCallback "un\.onVerifyInstDir"
+syn match nsisCallback "un\.onNextPage"
+
+
+"STATEMENTS - sections
+syn keyword nsisStatement Section SectionIn SectionEnd SectionDivider
+syn keyword nsisStatement AddSize
+
+"STATEMENTS - functions
+syn keyword nsisStatement Function FunctionEnd
+
+"STATEMENTS - pages
+syn keyword nsisStatement Page UninstPage PageEx PageExEnc PageCallbacks
+
+
+"ERROR
+syn keyword nsisError UninstallExeName
+
+
+" 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_nsis_syn_inits")
+
+ if version < 508
+ let did_nsys_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+
+ HiLink nsisInstruction Function
+ HiLink nsisComment Comment
+ HiLink nsisLocalLabel Label
+ HiLink nsisGlobalLabel Label
+ HiLink nsisStatement Statement
+ HiLink nsisString String
+ HiLink nsisBoolean Boolean
+ HiLink nsisAttribOptions Constant
+ HiLink nsisExecShell Constant
+ HiLink nsisFileAttrib Constant
+ HiLink nsisMessageBox Constant
+ HiLink nsisRegistry Identifier
+ HiLink nsisNumber Number
+ HiLink nsisError Error
+ HiLink nsisUserVar Identifier
+ HiLink nsisSysVar Identifier
+ HiLink nsisAttribute Type
+ HiLink nsisCompiler Type
+ HiLink nsisTodo Todo
+ HiLink nsisCallback Operator
+ " preprocessor commands
+ HiLink nsisPreprocSubst PreProc
+ HiLink nsisDefine Define
+ HiLink nsisMacro Macro
+ HiLink nsisPreCondit PreCondit
+ HiLink nsisInclude Include
+ HiLink nsisSystem PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "nsis"
+
diff --git a/runtime/syntax/objc.vim b/runtime/syntax/objc.vim
new file mode 100644
index 000000000..5a965a0f1
--- /dev/null
+++ b/runtime/syntax/objc.vim
@@ -0,0 +1,107 @@
+" 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: 2004 May 20
+
+" 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
+
+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
+endif
+
+" 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 nil Nil
+syn keyword objcTypeModifier bycopy in out inout oneway
+
+" 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"
+
+" 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
+
+" Objective-C 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
+
+syn cluster cParenGroup add=objcMessage
+syn cluster cPreProcGroup add=objcMessage
+
+" 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
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "objc"
+
+" vim: ts=8
diff --git a/runtime/syntax/objcpp.vim b/runtime/syntax/objcpp.vim
new file mode 100644
index 000000000..5ce380cc7
--- /dev/null
+++ b/runtime/syntax/objcpp.vim
@@ -0,0 +1,31 @@
+" Vim syntax file
+" Language: ObjC++
+" Maintainer: Anthony Hodsdon <ahodsdon@fastmail.fm>
+" Last change: 2003 Apr 25
+
+" 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 in C++ and ObjC syntax files
+if version < 600
+ so <sfile>:p:h/cpp.vim
+ so <sflie>:p:h/objc.vim
+else
+ runtime! syntax/cpp.vim
+ unlet b:current_syntax
+ runtime! syntax/objc.vim
+endif
+
+" Note that we already have a region for method calls ( [objc_class method] )
+" by way of cBracket.
+syn region objCFunc start="^\s*[-+]" end="$" contains=ALLBUT,cErrInParen,cErrInBracket
+
+syn keyword objCppNonStructure class template namespace transparent contained
+syn keyword objCppNonStatement new delete friend using transparent contained
+
+let b:current_syntax = "objcpp"
diff --git a/runtime/syntax/ocaml.vim b/runtime/syntax/ocaml.vim
new file mode 100644
index 000000000..95534a489
--- /dev/null
+++ b/runtime/syntax/ocaml.vim
@@ -0,0 +1,317 @@
+" Vim syntax file
+" Language: OCaml
+" Filenames: *.ml *.mli *.mll *.mly
+" Maintainers: Markus Mottl <markus@oefai.at>
+" Karl-Heinz Sylla <Karl-Heinz.Sylla@gmd.de>
+" Issac Trotts <<ijtrotts@ucdavis.edu>
+" URL: http://www.oefai.at/~markus/vim/syntax/ocaml.vim
+" Last Change: 2003 May 04
+" 2002 Oct 24 - Small fix for "module type" (MM)
+" 2002 Jun 16 - Added "&&", "<" and ">" as operators (MM)
+
+" 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
+
+" OCaml is case sensitive.
+syn case match
+
+" Script headers highlighted like comments
+syn match ocamlComment "^#!.*"
+
+" Scripting directives
+syn match ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
+
+" lowercase identifier - the standard way to match
+syn match ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
+
+syn match ocamlKeyChar "|"
+
+" Errors
+syn match ocamlBraceErr "}"
+syn match ocamlBrackErr "\]"
+syn match ocamlParenErr ")"
+syn match ocamlArrErr "|]"
+
+syn match ocamlCommentErr "\*)"
+
+syn match ocamlCountErr "\<downto\>"
+syn match ocamlCountErr "\<to\>"
+
+if !exists("ocaml_revised")
+ syn match ocamlDoErr "\<do\>"
+endif
+
+syn match ocamlDoneErr "\<done\>"
+syn match ocamlThenErr "\<then\>"
+
+" Error-highlighting of "end" without synchronization:
+" as keyword or as error (default)
+if exists("ocaml_noend_error")
+ syn match ocamlKeyword "\<end\>"
+else
+ syn match ocamlEndErr "\<end\>"
+endif
+
+" Some convenient clusters
+syn cluster ocamlAllErrs contains=ocamlBraceErr,ocamlBrackErr,ocamlParenErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+
+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
+
+
+" Enclosing delimiters
+syn region ocamlEncl transparent matchgroup=ocamlKeyword start="(" matchgroup=ocamlKeyword end=")" contains=ALLBUT,@ocamlContained,ocamlParenErr
+syn region ocamlEncl transparent matchgroup=ocamlKeyword start="{" matchgroup=ocamlKeyword end="}" contains=ALLBUT,@ocamlContained,ocamlBraceErr
+syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[" matchgroup=ocamlKeyword end="\]" contains=ALLBUT,@ocamlContained,ocamlBrackErr
+syn region ocamlEncl transparent matchgroup=ocamlKeyword start="\[|" matchgroup=ocamlKeyword end="|\]" contains=ALLBUT,@ocamlContained,ocamlArrErr
+
+
+" Comments
+syn region ocamlComment start="(\*" end="\*)" contains=ocamlComment,ocamlTodo
+syn keyword ocamlTodo contained TODO FIXME XXX
+
+
+" Objects
+syn region ocamlEnd matchgroup=ocamlKeyword start="\<object\>" matchgroup=ocamlKeyword end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
+
+" Blocks
+if !exists("ocaml_revised")
+ syn region ocamlEnd matchgroup=ocamlKeyword start="\<begin\>" matchgroup=ocamlKeyword end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+endif
+
+
+" "for"
+syn region ocamlNone matchgroup=ocamlKeyword start="\<for\>" matchgroup=ocamlKeyword end="\<\(to\|downto\)\>" contains=ALLBUT,@ocamlContained,ocamlCountErr
+
+
+" "do"
+if !exists("ocaml_revised")
+ syn region ocamlDo matchgroup=ocamlKeyword start="\<do\>" matchgroup=ocamlKeyword end="\<done\>" contains=ALLBUT,@ocamlContained,ocamlDoneErr
+endif
+
+" "if"
+syn region ocamlNone matchgroup=ocamlKeyword start="\<if\>" matchgroup=ocamlKeyword end="\<then\>" contains=ALLBUT,@ocamlContained,ocamlThenErr
+
+
+"" 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
+
+" "open"
+syn region ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment
+
+" "include"
+syn match ocamlKeyword "\<include\>" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
+
+" "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 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
+
+syn region ocamlMPRestr start=":" end="."me=e-1 contained contains=@ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3
+syn region ocamlMPRestr1 matchgroup=ocamlModule start="\ssig\s\=" matchgroup=ocamlModule end="\<end\>" contained contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
+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 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
+
+syn region ocamlFuncWith start="([^*]"me=e-1 end=")" contained contains=ocamlComment,ocamlWith,ocamlFuncStruct skipwhite skipempty nextgroup=ocamlFuncWith
+syn region ocamlFuncStruct matchgroup=ocamlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
+syn match ocamlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained
+syn region ocamlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@ocamlAENoParen,ocamlWith
+syn match ocamlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
+syn region ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
+
+" "module type"
+syn region ocamlKeyword start="\<module\>\s*\<type\>" 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
+syn keyword ocamlKeyword constraint else
+syn keyword ocamlKeyword exception external fun
+
+syn keyword ocamlKeyword in inherit initializer
+syn keyword ocamlKeyword land lazy let match
+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
+
+if exists("ocaml_revised")
+ syn keyword ocamlKeyword do value
+ syn keyword ocamlBoolean True False
+else
+ syn keyword ocamlKeyword function
+ syn keyword ocamlBoolean true false
+ syn match ocamlKeyChar "!"
+endif
+
+syn keyword ocamlType array bool char exn float format int
+syn keyword ocamlType list option string unit
+
+syn keyword ocamlOperator asr lor lsl lsr lxor mod not
+
+syn match ocamlConstructor "(\s*)"
+syn match ocamlConstructor "\[\s*\]"
+syn match ocamlConstructor "\[|\s*>|]"
+syn match ocamlConstructor "\[<\s*>\]"
+syn match ocamlConstructor "\u\(\w\|'\)*\>"
+
+" Polymorphic variants
+syn match ocamlConstructor "`\w\(\w\|'\)*\>"
+
+" Module prefix
+syn match ocamlModPath "\u\(\w\|'\)*\."he=e-1
+
+syn match ocamlCharacter "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
+syn match ocamlCharErr "'\\\d\d'\|'\\\d'"
+syn match ocamlCharErr "'\\[^\'ntbr]'"
+syn region ocamlString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+syn match ocamlFunDef "->"
+syn match ocamlRefAssign ":="
+syn match ocamlTopStop ";;"
+syn match ocamlOperator "\^"
+syn match ocamlOperator "::"
+
+syn match ocamlOperator "&&"
+syn match ocamlOperator "<"
+syn match ocamlOperator ">"
+syn match ocamlAnyVar "\<_\>"
+syn match ocamlKeyChar "|[^\]]"me=e-1
+syn match ocamlKeyChar ";"
+syn match ocamlKeyChar "\~"
+syn match ocamlKeyChar "?"
+syn match ocamlKeyChar "\*"
+syn match ocamlKeyChar "="
+
+if exists("ocaml_revised")
+ syn match ocamlErr "<-"
+else
+ syn match ocamlOperator "<-"
+endif
+
+syn match ocamlNumber "\<-\=\d\+\>"
+syn match ocamlNumber "\<-\=0[x|X]\x\+\>"
+syn match ocamlNumber "\<-\=0[o|O]\o\+\>"
+syn match ocamlNumber "\<-\=0[b|B][01]\+\>"
+syn match ocamlFloat "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
+
+" Labels
+syn match ocamlLabel "\~\(\l\|_\)\(\w\|'\)*"lc=1
+syn match ocamlLabel "?\(\l\|_\)\(\w\|'\)*"lc=1
+syn region ocamlLabel transparent matchgroup=ocamlLabel start="?(\(\l\|_\)\(\w\|'\)*"lc=2 end=")"me=e-1 contains=ALLBUT,@ocamlContained,ocamlParenErr
+
+
+" Synchronization
+syn sync minlines=50
+syn sync maxlines=500
+
+if !exists("ocaml_revised")
+ syn sync match ocamlDoSync grouphere ocamlDo "\<do\>"
+ syn sync match ocamlDoSync groupthere ocamlDo "\<done\>"
+endif
+
+if exists("ocaml_revised")
+ syn sync match ocamlEndSync grouphere ocamlEnd "\<\(object\)\>"
+else
+ syn sync match ocamlEndSync grouphere ocamlEnd "\<\(begin\|object\)\>"
+endif
+
+syn sync match ocamlEndSync groupthere ocamlEnd "\<end\>"
+syn sync match ocamlStructSync grouphere ocamlStruct "\<struct\>"
+syn sync match ocamlStructSync groupthere ocamlStruct "\<end\>"
+syn sync match ocamlSigSync grouphere ocamlSig "\<sig\>"
+syn sync match ocamlSigSync groupthere ocamlSig "\<end\>"
+
+" 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_ocaml_syntax_inits")
+ if version < 508
+ let did_ocaml_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ocamlBraceErr Error
+ HiLink ocamlBrackErr Error
+ HiLink ocamlParenErr Error
+ HiLink ocamlArrErr Error
+
+ HiLink ocamlCommentErr Error
+
+ HiLink ocamlCountErr Error
+ HiLink ocamlDoErr Error
+ HiLink ocamlDoneErr Error
+ HiLink ocamlEndErr Error
+ HiLink ocamlThenErr Error
+
+ HiLink ocamlCharErr Error
+
+ HiLink ocamlErr Error
+
+ HiLink ocamlComment Comment
+
+ HiLink ocamlModPath Include
+ HiLink ocamlModule Include
+ HiLink ocamlModParam1 Include
+ HiLink ocamlModType Include
+ HiLink ocamlMPRestr3 Include
+ HiLink ocamlFullMod Include
+ HiLink ocamlModTypeRestr Include
+ HiLink ocamlWith Include
+ HiLink ocamlMTDef Include
+
+ HiLink ocamlScript Include
+
+ HiLink ocamlConstructor Constant
+
+ HiLink ocamlModPreRHS Keyword
+ HiLink ocamlMPRestr2 Keyword
+ HiLink ocamlKeyword Keyword
+ HiLink ocamlFunDef Keyword
+ HiLink ocamlRefAssign Keyword
+ HiLink ocamlKeyChar Keyword
+ HiLink ocamlAnyVar Keyword
+ HiLink ocamlTopStop Keyword
+ HiLink ocamlOperator Keyword
+
+ HiLink ocamlBoolean Boolean
+ HiLink ocamlCharacter Character
+ HiLink ocamlNumber Number
+ HiLink ocamlFloat Float
+ HiLink ocamlString String
+
+ HiLink ocamlLabel Identifier
+
+ HiLink ocamlType Type
+
+ HiLink ocamlTodo Todo
+
+ HiLink ocamlEncl Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ocaml"
+
+" vim: ts=8
diff --git a/runtime/syntax/occam.vim b/runtime/syntax/occam.vim
new file mode 100644
index 000000000..1c84bf00f
--- /dev/null
+++ b/runtime/syntax/occam.vim
@@ -0,0 +1,126 @@
+" Vim syntax file
+" Language: occam
+" Copyright: Fred Barnes <frmb2@kent.ac.uk>, Mario Schweigler <ms44@kent.ac.uk>
+" Maintainer: Mario Schweigler <ms44@kent.ac.uk>
+" Last Change: 24 May 2003
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+"{{{ Settings
+" Set shift width for indent
+setlocal shiftwidth=2
+" Set the tab key size to two spaces
+setlocal softtabstop=2
+" Let tab keys always be expanded to spaces
+setlocal expandtab
+
+" Dots are valid in occam identifiers
+setlocal iskeyword+=.
+"}}}
+
+syn case match
+
+syn keyword occamType BYTE BOOL INT INT16 INT32 INT64 REAL32 REAL64 ANY
+syn keyword occamType CHAN DATA OF TYPE TIMER INITIAL VAL PORT MOBILE PLACED
+syn keyword occamType PROCESSOR PACKED RECORD PROTOCOL SHARED ROUND TRUNC
+
+syn keyword occamStructure SEQ PAR IF ALT PRI FORKING PLACE AT
+
+syn keyword occamKeyword PROC IS TRUE FALSE SIZE RECURSIVE REC
+syn keyword occamKeyword RETYPES RESHAPES STEP FROM FOR RESCHEDULE STOP SKIP FORK
+syn keyword occamKeyword FUNCTION VALOF RESULT ELSE CLONE CLAIM
+syn keyword occamBoolean TRUE FALSE
+syn keyword occamRepeat WHILE
+syn keyword occamConditional CASE
+syn keyword occamConstant MOSTNEG MOSTPOS
+
+syn match occamBrackets /\[\|\]/
+syn match occamParantheses /(\|)/
+
+syn keyword occamOperator AFTER TIMES MINUS PLUS INITIAL REM AND OR XOR NOT
+syn keyword occamOperator BITAND BITOR BITNOT BYTESIN OFFSETOF
+
+syn match occamOperator /::\|:=\|?\|!/
+syn match occamOperator /<\|>\|+\|-\|\*\|\/\|\\\|=\|\~/
+syn match occamOperator /@\|\$\$\|%\|&&\|<&\|&>\|<\]\|\[>\|\^/
+
+syn match occamSpecialChar /\M**\|*'\|*"\|*#\(\[0-9A-F\]\+\)/ contained
+syn match occamChar /\M\L\='\[^*\]'/
+syn match occamChar /L'[^']*'/ contains=occamSpecialChar
+
+syn case ignore
+syn match occamTodo /\<todo\>:\=/ contained
+syn match occamNote /\<note\>:\=/ contained
+syn case match
+syn keyword occamNote NOT contained
+
+syn match occamComment /--.*/ contains=occamCommentTitle,occamTodo,occamNote
+syn match occamCommentTitle /--\s*\u\a*\(\s\+\u\a*\)*:/hs=s+2 contained contains=occamTodo,occamNote
+syn match occamCommentTitle /--\s*KROC-LIBRARY\(\.so\|\.a\)\=\s*$/hs=s+2 contained
+syn match occamCommentTitle /--\s*\(KROC-OPTIONS:\|RUN-PARAMETERS:\)/hs=s+2 contained
+
+syn match occamIdentifier /\<[A-Z.][A-Z.0-9]*\>/
+syn match occamFunction /\<[A-Za-z.][A-Za-z0-9.]*\>/ contained
+
+syn match occamPPIdentifier /##.\{-}\>/
+
+syn region occamString start=/"/ skip=/\M*"/ end=/"/ contains=occamSpecialChar
+syn region occamCharString start=/'/ end=/'/ contains=occamSpecialChar
+
+syn match occamNumber /\<\d\+\(\.\d\+\(E\(+\|-\)\d\+\)\=\)\=/
+syn match occamNumber /-\d\+\(\.\d\+\(E\(+\|-\)\d\+\)\=\)\=/
+syn match occamNumber /#\(\d\|[A-F]\)\+/
+syn match occamNumber /-#\(\d\|[A-F]\)\+/
+
+syn keyword occamCDString SHARED EXTERNAL DEFINED NOALIAS NOUSAGE NOT contained
+syn keyword occamCDString FILE LINE PROCESS.PRIORITY OCCAM2.5 contained
+syn keyword occamCDString USER.DEFINED.OPERATORS INITIAL.DECL MOBILES contained
+syn keyword occamCDString BLOCKING.SYSCALLS VERSION NEED.QUAD.ALIGNMENT contained
+syn keyword occamCDString TARGET.CANONICAL TARGET.CPU TARGET.OS TARGET.VENDOR contained
+syn keyword occamCDString TRUE FALSE AND OR contained
+syn match occamCDString /<\|>\|=\|(\|)/ contained
+
+syn region occamCDirective start=/#\(USE\|INCLUDE\|PRAGMA\|DEFINE\|UNDEFINE\|UNDEF\|IF\|ELIF\|ELSE\|ENDIF\|WARNING\|ERROR\|RELAX\)\>/ end=/$/ contains=occamString,occamComment,occamCDString
+
+if version >= 508 || !exists("did_occam_syn_inits")
+ if version < 508
+ let did_occam_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink occamType Type
+ HiLink occamKeyword Keyword
+ HiLink occamComment Comment
+ HiLink occamCommentTitle PreProc
+ HiLink occamTodo Todo
+ HiLink occamNote Todo
+ HiLink occamString String
+ HiLink occamCharString String
+ HiLink occamNumber Number
+ HiLink occamCDirective PreProc
+ HiLink occamCDString String
+ HiLink occamPPIdentifier PreProc
+ HiLink occamBoolean Boolean
+ HiLink occamSpecialChar SpecialChar
+ HiLink occamChar Character
+ HiLink occamStructure Structure
+ HiLink occamIdentifier Identifier
+ HiLink occamConstant Constant
+ HiLink occamOperator Operator
+ HiLink occamFunction Ignore
+ HiLink occamRepeat Repeat
+ HiLink occamConditional Conditional
+ HiLink occamBrackets Type
+ HiLink occamParantheses Delimiter
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "occam"
+
diff --git a/runtime/syntax/omnimark.vim b/runtime/syntax/omnimark.vim
new file mode 100644
index 000000000..698b3c09f
--- /dev/null
+++ b/runtime/syntax/omnimark.vim
@@ -0,0 +1,123 @@
+" Vim syntax file
+" Language: Omnimark
+" Maintainer: Paul Terray <mailto:terray@4dconcept.fr>
+" Last Change: 11 Oct 2000
+
+" 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
+
+if version < 600
+ set iskeyword=@,48-57,_,128-167,224-235,-
+else
+ setlocal iskeyword=@,48-57,_,128-167,224-235,-
+endif
+
+syn keyword omnimarkKeywords ACTIVATE AGAIN
+syn keyword omnimarkKeywords CATCH CLEAR CLOSE COPY COPY-CLEAR CROSS-TRANSLATE
+syn keyword omnimarkKeywords DEACTIVATE DECLARE DECREMENT DEFINE DISCARD DIVIDE DO DOCUMENT-END DOCUMENT-START DONE DTD-START
+syn keyword omnimarkKeywords ELEMENT ELSE ESCAPE EXIT
+syn keyword omnimarkKeywords FAIL FIND FIND-END FIND-START FORMAT
+syn keyword omnimarkKeywords GROUP
+syn keyword omnimarkKeywords HALT HALT-EVERYTHING
+syn keyword omnimarkKeywords IGNORE IMPLIED INCLUDE INCLUDE-END INCLUDE-START INCREMENT INPUT
+syn keyword omnimarkKeywords JOIN
+syn keyword omnimarkKeywords LINE-END LINE-START LOG LOOKAHEAD
+syn keyword omnimarkKeywords MACRO
+syn keyword omnimarkKeywords MACRO-END MARKED-SECTION MARKUP-COMMENT MARKUP-ERROR MARKUP-PARSER MASK MATCH MINUS MODULO
+syn keyword omnimarkKeywords NEW NEWLINE NEXT
+syn keyword omnimarkKeywords OPEN OUTPUT OUTPUT-TO OVER
+syn keyword omnimarkKeywords PROCESS PROCESS-END PROCESS-START PROCESSING-INSTRUCTION PROLOG-END PROLOG-IN-ERROR PUT
+syn keyword omnimarkKeywords REMOVE REOPEN REPEAT RESET RETHROW RETURN
+syn keyword omnimarkKeywords WHEN WHITE-SPACE
+syn keyword omnimarkKeywords SAVE SAVE-CLEAR SCAN SELECT SET SGML SGML-COMMENT SGML-DECLARATION-END SGML-DTD SGML-DTDS SGML-ERROR SGML-IN SGML-OUT SGML-PARSE SGML-PARSER SHIFT SUBMIT SUCCEED SUPPRESS
+syn keyword omnimarkKeywords SYSTEM-CALL
+syn keyword omnimarkKeywords TEST-SYSTEM THROW TO TRANSLATE
+syn keyword omnimarkKeywords UC UL UNLESS UP-TRANSLATE
+syn keyword omnimarkKeywords XML-PARSE
+
+syn keyword omnimarkCommands ACTIVE AFTER ANCESTOR AND ANOTHER ARG AS ATTACHED ATTRIBUTE ATTRIBUTES
+syn keyword omnimarkCommands BASE BEFORE BINARY BINARY-INPUT BINARY-MODE BINARY-OUTPUT BREAK-WIDTH BUFFER BY
+syn keyword omnimarkCommands CASE CHILDREN CLOSED COMPILED-DATE COMPLEMENT CONREF CONTENT CONTEXT-TRANSLATE COUNTER CREATED CREATING CREATOR CURRENT
+syn keyword omnimarkCommands DATA-ATTRIBUTE DATA-ATTRIBUTES DATA-CONTENT DATA-LETTERS DATE DECLARED-CONREF DECLARED-CURRENT DECLARED-DEFAULTED DECLARED-FIXED DECLARED-IMPLIED DECLARED-REQUIRED
+syn keyword omnimarkCommands DEFAULT-ENTITY DEFAULTED DEFAULTING DELIMITER DIFFERENCE DIRECTORY DOCTYPE DOCUMENT DOCUMENT-ELEMENT DOMAIN-FREE DOWN-TRANSLATE DTD DTD-END DTDS
+syn keyword omnimarkCommands ELEMENTS ELSEWHERE EMPTY ENTITIES ENTITY EPILOG-START EQUAL EXCEPT EXISTS EXTERNAL EXTERNAL-DATA-ENTITY EXTERNAL-ENTITY EXTERNAL-FUNCTION EXTERNAL-OUTPUT-FUNCTION
+syn keyword omnimarkCommands EXTERNAL-TEXT-ENTITY
+syn keyword omnimarkCommands FALSE FILE FUNCTION FUNCTION-LIBRARY
+syn keyword omnimarkCommands GENERAL GLOBAL GREATER-EQUAL GREATER-THAN GROUPS
+syn keyword omnimarkCommands HAS HASNT HERALDED-NAMES
+syn keyword omnimarkCommands ID ID-CHECKING IDREF IDREFS IN IN-LIBRARY INCLUSION INITIAL INITIAL-SIZE INSERTION-BREAK INSTANCE INTERNAL INVALID-DATA IS ISNT ITEM
+syn keyword omnimarkCommands KEY KEYED
+syn keyword omnimarkCommands LAST LASTMOST LC LENGTH LESS-EQUAL LESS-THAN LETTERS LIBRARY LITERAL LOCAL
+syn keyword omnimarkCommands MATCHES MIXED MODIFIABLE
+syn keyword omnimarkCommands NAME NAME-LETTERS NAMECASE NAMED NAMES NDATA-ENTITY NEGATE NESTED-REFERENTS NMTOKEN NMTOKENS NO NO-DEFAULT-IO NON-CDATA NON-IMPLIED NON-SDATA NOT NOTATION NUMBER-OF NUMBERS
+syn keyword omnimarkCommands NUTOKEN NUTOKENS
+syn keyword omnimarkCommands OCCURRENCE OF OPAQUE OPTIONAL OR
+syn keyword omnimarkCommands PARAMETER PARENT PAST PATTERN PLUS PREPARENT PREVIOUS PROPER PUBLIC
+syn keyword omnimarkCommands READ-ONLY READABLE REFERENT REFERENTS REFERENTS-ALLOWED REFERENTS-DISPLAYED REFERENTS-NOT-ALLOWED REMAINDER REPEATED REPLACEMENT-BREAK REVERSED
+syn keyword omnimarkCommands SILENT-REFERENT SIZE SKIP SOURCE SPECIFIED STATUS STREAM SUBDOC-ENTITY SUBDOCUMENT SUBDOCUMENTS SUBELEMENT SWITCH SYMBOL SYSTEM
+syn keyword omnimarkCommands TEXT-MODE THIS TIMES TOKEN TRUE
+syn keyword omnimarkCommands UNANCHORED UNATTACHED UNION USEMAP USING
+syn keyword omnimarkCommands VALUE VALUED VARIABLE
+syn keyword omnimarkCommands WITH WRITABLE
+syn keyword omnimarkCommands XML XML-DTD XML-DTDS
+syn keyword omnimarkCommands YES
+syn keyword omnimarkCommands #ADDITIONAL-INFO #APPINFO #CAPACITY #CHARSET #CLASS #COMMAND-LINE-NAMES #CONSOLE #CURRENT-INPUT #CURRENT-OUTPUT #DATA #DOCTYPE #DOCUMENT #DTD #EMPTY #ERROR #ERROR-CODE
+syn keyword omnimarkCommands #FILE-NAME #FIRST #GROUP #IMPLIED #ITEM #LANGUAGE-VERSION #LAST #LIBPATH #LIBRARY #LIBVALUE #LINE-NUMBER #MAIN-INPUT #MAIN-OUTPUT #MARKUP-ERROR-COUNT #MARKUP-ERROR-TOTAL
+syn keyword omnimarkCommands #MARKUP-PARSER #MARKUP-WARNING-COUNT #MARKUP-WARNING-TOTAL #MESSAGE #NONE #OUTPUT #PLATFORM-INFO #PROCESS-INPUT #PROCESS-OUTPUT #RECOVERY-INFO #SGML #SGML-ERROR-COUNT
+syn keyword omnimarkCommands #SGML-ERROR-TOTAL #SGML-WARNING-COUNT #SGML-WARNING-TOTAL #SUPPRESS #SYNTAX #!
+
+syn keyword omnimarkPatterns ANY ANY-TEXT
+syn keyword omnimarkPatterns BLANK
+syn keyword omnimarkPatterns CDATA CDATA-ENTITY CONTENT-END CONTENT-START
+syn keyword omnimarkPatterns DIGIT
+syn keyword omnimarkPatterns LETTER
+syn keyword omnimarkPatterns NUMBER
+syn keyword omnimarkPatterns PCDATA
+syn keyword omnimarkPatterns RCDATA
+syn keyword omnimarkPatterns SDATA SDATA-ENTITY SPACE
+syn keyword omnimarkPatterns TEXT
+syn keyword omnimarkPatterns VALUE-END VALUE-START
+syn keyword omnimarkPatterns WORD-END WORD-START
+
+syn region omnimarkComment start=";" end="$"
+
+" strings
+syn region omnimarkString matchgroup=Normal start=+'+ end=+'+ skip=+%'+ contains=omnimarkEscape
+syn region omnimarkString matchgroup=Normal start=+"+ end=+"+ skip=+%"+ contains=omnimarkEscape
+syn match omnimarkEscape contained +%.+
+syn match omnimarkEscape contained +%[0-9][0-9]#+
+
+"syn sync maxlines=100
+syn sync minlines=2000
+
+" 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_omnimark_syntax_inits")
+ if version < 508
+ let did_omnimark_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink omnimarkCommands Statement
+ HiLink omnimarkKeywords Identifier
+ HiLink omnimarkString String
+ HiLink omnimarkPatterns Macro
+" HiLink omnimarkNumber Number
+ HiLink omnimarkComment Comment
+ HiLink omnimarkEscape Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "omnimark"
+
+" vim: ts=8
+
diff --git a/runtime/syntax/openroad.vim b/runtime/syntax/openroad.vim
new file mode 100644
index 000000000..3f9a78d55
--- /dev/null
+++ b/runtime/syntax/openroad.vim
@@ -0,0 +1,266 @@
+" Vim syntax file
+" Language: CA-OpenROAD
+" Maintainer: Luis Moreno <lmoreno@eresmas.net>
+" Last change: 2001 Jun 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
+
+syntax case ignore
+
+" Keywords
+"
+syntax keyword openroadKeyword ABORT ALL ALTER AND ANY AS ASC AT AVG BEGIN
+syntax keyword openroadKeyword BETWEEN BY BYREF CALL CALLFRAME CALLPROC CASE
+syntax keyword openroadKeyword CLEAR CLOSE COMMIT CONNECT CONTINUE COPY COUNT
+syntax keyword openroadKeyword CREATE CURRENT DBEVENT DECLARE DEFAULT DELETE
+syntax keyword openroadKeyword DELETEROW DESC DIRECT DISCONNECT DISTINCT DO
+syntax keyword openroadKeyword DROP ELSE ELSEIF END ENDCASE ENDDECLARE ENDFOR
+syntax keyword openroadKeyword ENDIF ENDLOOP ENDWHILE ESCAPE EXECUTE EXISTS
+syntax keyword openroadKeyword EXIT FETCH FIELD FOR FROM GOTOFRAME GRANT GROUP
+syntax keyword openroadKeyword HAVING IF IMMEDIATE IN INDEX INITIALISE
+syntax keyword openroadKeyword INITIALIZE INQUIRE_INGRES INQUIRE_SQL INSERT
+syntax keyword openroadKeyword INSERTROW INSTALLATION INTEGRITY INTO KEY LIKE
+syntax keyword openroadKeyword LINK MAX MESSAGE METHOD MIN MODE MODIFY NEXT
+syntax keyword openroadKeyword NOECHO NOT NULL OF ON OPEN OPENFRAME OR ORDER
+syntax keyword openroadKeyword PERMIT PROCEDURE PROMPT QUALIFICATION RAISE
+syntax keyword openroadKeyword REGISTER RELOCATE REMOVE REPEAT REPEATED RESUME
+syntax keyword openroadKeyword RETURN RETURNING REVOKE ROLE ROLLBACK RULE SAVE
+syntax keyword openroadKeyword SAVEPOINT SELECT SET SLEEP SOME SUM SYSTEM TABLE
+syntax keyword openroadKeyword THEN TO TRANSACTION UNION UNIQUE UNTIL UPDATE
+syntax keyword openroadKeyword VALUES VIEW WHERE WHILE WITH WORK
+
+syntax keyword openroadTodo contained TODO
+
+" Catch errors caused by wrong parenthesis
+"
+syntax cluster openroadParenGroup contains=openroadParenError,openroadTodo
+syntax region openroadParen transparent start='(' end=')' contains=ALLBUT,@openroadParenGroup
+syntax match openroadParenError ")"
+highlight link openroadParenError cError
+
+" Numbers
+"
+syntax match openroadNumber "\<[0-9]\+\>"
+
+" String
+"
+syntax region openroadString start=+'+ end=+'+
+
+" Operators, Data Types and Functions
+"
+syntax match openroadOperator /[\+\-\*\/=\<\>;\(\)]/
+
+syntax keyword openroadType ARRAY BYTE CHAR DATE DECIMAL FLOAT FLOAT4
+syntax keyword openroadType FLOAT8 INT1 INT2 INT4 INTEGER INTEGER1
+syntax keyword openroadType INTEGER2 INTEGER4 MONEY OBJECT_KEY
+syntax keyword openroadType SECURITY_LABEL SMALLINT TABLE_KEY VARCHAR
+
+syntax keyword openroadFunc IFNULL
+
+" System Classes
+"
+syntax keyword openroadClass ACTIVEFIELD ANALOGFIELD APPFLAG APPSOURCE
+syntax keyword openroadClass ARRAYOBJECT ATTRIBUTEOBJECT BARFIELD
+syntax keyword openroadClass BITMAPOBJECT BOXTRIM BREAKSPEC BUTTONFIELD
+syntax keyword openroadClass CELLATTRIBUTE CHOICEBITMAP CHOICEDETAIL
+syntax keyword openroadClass CHOICEFIELD CHOICEITEM CHOICELIST CLASS
+syntax keyword openroadClass CLASSSOURCE COLUMNCROSS COLUMNFIELD
+syntax keyword openroadClass COMPOSITEFIELD COMPSOURCE CONTROLBUTTON
+syntax keyword openroadClass CROSSTABLE CURSORBITMAP CURSOROBJECT DATASTREAM
+syntax keyword openroadClass DATEOBJECT DBEVENTOBJECT DBSESSIONOBJECT
+syntax keyword openroadClass DISPLAYFORM DYNEXPR ELLIPSESHAPE ENTRYFIELD
+syntax keyword openroadClass ENUMFIELD EVENT EXTOBJECT EXTOBJFIELD
+syntax keyword openroadClass FIELDOBJECT FLEXIBLEFORM FLOATOBJECT FORMFIELD
+syntax keyword openroadClass FRAMEEXEC FRAMEFORM FRAMESOURCE FREETRIM
+syntax keyword openroadClass GHOSTEXEC GHOSTSOURCE IMAGEFIELD IMAGETRIM
+syntax keyword openroadClass INTEGEROBJECT LISTFIELD LISTVIEWCOLATTR
+syntax keyword openroadClass LISTVIEWFIELD LONGBYTEOBJECT LONGVCHAROBJECT
+syntax keyword openroadClass MATRIXFIELD MENUBAR MENUBUTTON MENUFIELD
+syntax keyword openroadClass MENUGROUP MENUITEM MENULIST MENUSEPARATOR
+syntax keyword openroadClass MENUSTACK MENUTOGGLE METHODEXEC METHODOBJECT
+syntax keyword openroadClass MONEYOBJECT OBJECT OPTIONFIELD OPTIONMENU
+syntax keyword openroadClass PALETTEFIELD POPUPBUTTON PROC4GLSOURCE PROCEXEC
+syntax keyword openroadClass PROCHANDLE QUERYCOL QUERYOBJECT QUERYPARM
+syntax keyword openroadClass QUERYTABLE RADIOFIELD RECTANGLESHAPE ROWCROSS
+syntax keyword openroadClass SCALARFIELD SCOPE SCROLLBARFIELD SEGMENTSHAPE
+syntax keyword openroadClass SESSIONOBJECT SHAPEFIELD SLIDERFIELD SQLSELECT
+syntax keyword openroadClass STACKFIELD STRINGOBJECT SUBFORM TABBAR
+syntax keyword openroadClass TABFIELD TABFOLDER TABLEFIELD TABPAGE
+syntax keyword openroadClass TOGGLEFIELD TREE TREENODE TREEVIEWFIELD
+syntax keyword openroadClass USERCLASSOBJECT USEROBJECT VIEWPORTFIELD
+
+" System Events
+"
+syntax keyword openroadEvent CHILDCLICK CHILDCLICKPOINT CHILDCOLLAPSED
+syntax keyword openroadEvent CHILDDETAILS CHILDDOUBLECLICK CHILDDRAGBOX
+syntax keyword openroadEvent CHILDDRAGSEGMENT CHILDENTRY CHILDEXIT
+syntax keyword openroadEvent CHILDEXPANDED CHILDHEADERCLICK CHILDMOVED
+syntax keyword openroadEvent CHILDPROPERTIES CHILDRESIZED CHILDSCROLL
+syntax keyword openroadEvent CHILDSELECT CHILDSELECTIONCHANGED CHILDSETVALUE
+syntax keyword openroadEvent CHILDUNSELECT CHILDVALIDATE CLICK CLICKPOINT
+syntax keyword openroadEvent COLLAPSED DBEVENT DETAILS DOUBLECLICK DRAGBOX
+syntax keyword openroadEvent DRAGSEGMENT ENTRY EXIT EXPANDED EXTCLASSEVENT
+syntax keyword openroadEvent FRAMEACTIVATE FRAMEDEACTIVATE HEADERCLICK
+syntax keyword openroadEvent INSERTROW LABELCHANGED MOVED PAGEACTIVATED
+syntax keyword openroadEvent PAGECHANGED PAGEDEACTIVATED PROPERTIES RESIZED
+syntax keyword openroadEvent SCROLL SELECT SELECTIONCHANGED SETVALUE
+syntax keyword openroadEvent TERMINATE UNSELECT USEREVENT VALIDATE
+syntax keyword openroadEvent WINDOWCLOSE WINDOWICON WINDOWMOVED WINDOWRESIZED
+syntax keyword openroadEvent WINDOWVISIBLE
+
+" System Constants
+"
+syntax keyword openroadConst BF_BMP BF_GIF BF_SUNRASTER BF_TIFF
+syntax keyword openroadConst BF_WINDOWCURSOR BF_WINDOWICON BF_XBM
+syntax keyword openroadConst CC_BACKGROUND CC_BLACK CC_BLUE CC_BROWN CC_CYAN
+syntax keyword openroadConst CC_DEFAULT_1 CC_DEFAULT_10 CC_DEFAULT_11
+syntax keyword openroadConst CC_DEFAULT_12 CC_DEFAULT_13 CC_DEFAULT_14
+syntax keyword openroadConst CC_DEFAULT_15 CC_DEFAULT_16 CC_DEFAULT_17
+syntax keyword openroadConst CC_DEFAULT_18 CC_DEFAULT_19 CC_DEFAULT_2
+syntax keyword openroadConst CC_DEFAULT_20 CC_DEFAULT_21 CC_DEFAULT_22
+syntax keyword openroadConst CC_DEFAULT_23 CC_DEFAULT_24 CC_DEFAULT_25
+syntax keyword openroadConst CC_DEFAULT_26 CC_DEFAULT_27 CC_DEFAULT_28
+syntax keyword openroadConst CC_DEFAULT_29 CC_DEFAULT_3 CC_DEFAULT_30
+syntax keyword openroadConst CC_DEFAULT_4 CC_DEFAULT_5 CC_DEFAULT_6
+syntax keyword openroadConst CC_DEFAULT_7 CC_DEFAULT_8 CC_DEFAULT_9
+syntax keyword openroadConst CC_FOREGROUND CC_GRAY CC_GREEN CC_LIGHT_BLUE
+syntax keyword openroadConst CC_LIGHT_BROWN CC_LIGHT_CYAN CC_LIGHT_GRAY
+syntax keyword openroadConst CC_LIGHT_GREEN CC_LIGHT_ORANGE CC_LIGHT_PINK
+syntax keyword openroadConst CC_LIGHT_PURPLE CC_LIGHT_RED CC_LIGHT_YELLOW
+syntax keyword openroadConst CC_MAGENTA CC_ORANGE CC_PALE_BLUE CC_PALE_BROWN
+syntax keyword openroadConst CC_PALE_CYAN CC_PALE_GRAY CC_PALE_GREEN
+syntax keyword openroadConst CC_PALE_ORANGE CC_PALE_PINK CC_PALE_PURPLE
+syntax keyword openroadConst CC_PALE_RED CC_PALE_YELLOW CC_PINK CC_PURPLE
+syntax keyword openroadConst CC_RED CC_SYS_ACTIVEBORDER CC_SYS_ACTIVECAPTION
+syntax keyword openroadConst CC_SYS_APPWORKSPACE CC_SYS_BACKGROUND
+syntax keyword openroadConst CC_SYS_BTNFACE CC_SYS_BTNSHADOW CC_SYS_BTNTEXT
+syntax keyword openroadConst CC_SYS_CAPTIONTEXT CC_SYS_GRAYTEXT
+syntax keyword openroadConst CC_SYS_HIGHLIGHT CC_SYS_HIGHLIGHTTEXT
+syntax keyword openroadConst CC_SYS_INACTIVEBORDER CC_SYS_INACTIVECAPTION
+syntax keyword openroadConst CC_SYS_INACTIVECAPTIONTEXT CC_SYS_MENU
+syntax keyword openroadConst CC_SYS_MENUTEXT CC_SYS_SCROLLBAR CC_SYS_SHADOW
+syntax keyword openroadConst CC_SYS_WINDOW CC_SYS_WINDOWFRAME
+syntax keyword openroadConst CC_SYS_WINDOWTEXT CC_WHITE CC_YELLOW
+syntax keyword openroadConst CL_INVALIDVALUE CP_BOTH CP_COLUMNS CP_NONE
+syntax keyword openroadConst CP_ROWS CS_CLOSED CS_CURRENT CS_NOCURRENT
+syntax keyword openroadConst CS_NO_MORE_ROWS CS_OPEN CS_OPEN_CACHED DC_BW
+syntax keyword openroadConst DC_COLOR DP_AUTOSIZE_FIELD DP_CLIP_IMAGE
+syntax keyword openroadConst DP_SCALE_IMAGE_H DP_SCALE_IMAGE_HW
+syntax keyword openroadConst DP_SCALE_IMAGE_W DS_CONNECTED DS_DISABLED
+syntax keyword openroadConst DS_DISCONNECTED DS_INGRES_DBMS DS_NO_DBMS
+syntax keyword openroadConst DS_ORACLE_DBMS DS_SQLSERVER_DBMS DV_NULL
+syntax keyword openroadConst DV_STRING DV_SYSTEM EH_NEXT_HANDLER EH_RESUME
+syntax keyword openroadConst EH_RETRY EP_INTERACTIVE EP_NONE EP_OUTPUT
+syntax keyword openroadConst ER_FAIL ER_NAMEEXISTS ER_OK ER_OUTOFRANGE
+syntax keyword openroadConst ER_ROWNOTFOUND ER_USER1 ER_USER10 ER_USER2
+syntax keyword openroadConst ER_USER3 ER_USER4 ER_USER5 ER_USER6 ER_USER7
+syntax keyword openroadConst ER_USER8 ER_USER9 FALSE FA_BOTTOMCENTER
+syntax keyword openroadConst FA_BOTTOMLEFT FA_BOTTOMRIGHT FA_CENTER
+syntax keyword openroadConst FA_CENTERLEFT FA_CENTERRIGHT FA_DEFAULT FA_NONE
+syntax keyword openroadConst FA_TOPCENTER FA_TOPLEFT FA_TOPRIGHT
+syntax keyword openroadConst FB_CHANGEABLE FB_CLICKPOINT FB_DIMMED FB_DRAGBOX
+syntax keyword openroadConst FB_DRAGSEGMENT FB_FLEXIBLE FB_INVISIBLE
+syntax keyword openroadConst FB_LANDABLE FB_MARKABLE FB_RESIZEABLE
+syntax keyword openroadConst FB_VIEWABLE FB_VISIBLE FC_LOWER FC_NONE FC_UPPER
+syntax keyword openroadConst FM_QUERY FM_READ FM_UPDATE FM_USER1 FM_USER2
+syntax keyword openroadConst FM_USER3 FO_DEFAULT FO_HORIZONTAL FO_VERTICAL
+syntax keyword openroadConst FP_BITMAP FP_CLEAR FP_CROSSHATCH FP_DARKSHADE
+syntax keyword openroadConst FP_DEFAULT FP_HORIZONTAL FP_LIGHTSHADE FP_SHADE
+syntax keyword openroadConst FP_SOLID FP_VERTICAL FT_NOTSETVALUE FT_SETVALUE
+syntax keyword openroadConst FT_TABTO FT_TAKEFOCUS GF_BOTTOM GF_DEFAULT
+syntax keyword openroadConst GF_LEFT GF_RIGHT GF_TOP HC_DOUBLEQUOTE
+syntax keyword openroadConst HC_FORMFEED HC_NEWLINE HC_QUOTE HC_SPACE HC_TAB
+syntax keyword openroadConst HV_CONTENTS HV_CONTEXT HV_HELPONHELP HV_KEY
+syntax keyword openroadConst HV_QUIT LS_3D LS_DASH LS_DASHDOT LS_DASHDOTDOT
+syntax keyword openroadConst LS_DEFAULT LS_DOT LS_SOLID LW_DEFAULT
+syntax keyword openroadConst LW_EXTRATHIN LW_MAXIMUM LW_MIDDLE LW_MINIMUM
+syntax keyword openroadConst LW_NOLINE LW_THICK LW_THIN LW_VERYTHICK
+syntax keyword openroadConst LW_VERYTHIN MB_DISABLED MB_ENABLED MB_INVISIBLE
+syntax keyword openroadConst MB_MOVEABLE MT_ERROR MT_INFO MT_NONE MT_WARNING
+syntax keyword openroadConst OP_APPEND OP_NONE OS3D OS_DEFAULT OS_SHADOW
+syntax keyword openroadConst OS_SOLID PU_CANCEL PU_OK QS_ACTIVE QS_INACTIVE
+syntax keyword openroadConst QS_SETCOL QY_ARRAY QY_CACHE QY_CURSOR QY_DIRECT
+syntax keyword openroadConst RC_CHILDSELECTED RC_DOWN RC_END RC_FIELDFREED
+syntax keyword openroadConst RC_FIELDORPHANED RC_GROUPSELECT RC_HOME RC_LEFT
+syntax keyword openroadConst RC_MODECHANGED RC_MOUSECLICK RC_MOUSEDRAG
+syntax keyword openroadConst RC_NEXT RC_NOTAPPLICABLE RC_PAGEDOWN RC_PAGEUP
+syntax keyword openroadConst RC_PARENTSELECTED RC_PREVIOUS RC_PROGRAM
+syntax keyword openroadConst RC_RESUME RC_RETURN RC_RIGHT RC_ROWDELETED
+syntax keyword openroadConst RC_ROWINSERTED RC_ROWSALLDELETED RC_SELECT
+syntax keyword openroadConst RC_TFSCROLL RC_TOGGLESELECT RC_UP RS_CHANGED
+syntax keyword openroadConst RS_DELETED RS_NEW RS_UNCHANGED RS_UNDEFINED
+syntax keyword openroadConst SK_CLOSE SK_COPY SK_CUT SK_DELETE SK_DETAILS
+syntax keyword openroadConst SK_DUPLICATE SK_FIND SK_GO SK_HELP SK_NEXT
+syntax keyword openroadConst SK_NONE SK_PASTE SK_PROPS SK_QUIT SK_REDO
+syntax keyword openroadConst SK_SAVE SK_TFDELETEALLROWS SK_TFDELETEROW
+syntax keyword openroadConst SK_TFFIND SK_TFINSERTROW SK_UNDO SP_APPSTARTING
+syntax keyword openroadConst SP_ARROW SP_CROSS SP_IBEAM SP_ICON SP_NO
+syntax keyword openroadConst SP_SIZE SP_SIZENESW SP_SIZENS SP_SIZENWSE
+syntax keyword openroadConst SP_SIZEWE SP_UPARROW SP_WAIT SY_NT SY_OS2
+syntax keyword openroadConst SY_UNIX SY_VMS SY_WIN95 TF_COURIER TF_HELVETICA
+syntax keyword openroadConst TF_LUCIDA TF_MENUDEFAULT TF_NEWCENTURY TF_SYSTEM
+syntax keyword openroadConst TF_TIMESROMAN TRUE UE_DATAERROR UE_EXITED
+syntax keyword openroadConst UE_NOTACTIVE UE_PURGED UE_RESUMED UE_UNKNOWN
+syntax keyword openroadConst WI_MOTIF WI_MSWIN32 WI_MSWINDOWS WI_NONE WI_PM
+syntax keyword openroadConst WP_FLOATING WP_INTERACTIVE WP_PARENTCENTERED
+syntax keyword openroadConst WP_PARENTRELATIVE WP_SCREENCENTERED
+syntax keyword openroadConst WP_SCREENRELATIVE WV_ICON WV_INVISIBLE
+syntax keyword openroadConst WV_UNREALIZED WV_VISIBLE
+
+" System Variables
+"
+syntax keyword openroadVar CurFrame CurProcedure CurMethod CurObject
+
+" Identifiers
+"
+syntax match openroadIdent /[a-zA-Z_][a-zA-Z_]*![a-zA-Z_][a-zA-Z_]*/
+
+" Comments
+"
+if exists("openroad_comment_strings")
+ syntax match openroadCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region openroadCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$"
+ syntax region openroadComment start="/\*" end="\*/" contains=openroadCommentString,openroadCharacter,openroadNumber
+ syntax match openroadComment "//.*" contains=openroadComment2String,openroadCharacter,openroadNumber
+else
+ syn region openroadComment start="/\*" end="\*/"
+ syn match openroadComment "//.*"
+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_openroad_syntax_inits")
+ if version < 508
+ let did_openroad_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink openroadKeyword Statement
+ HiLink openroadNumber Number
+ HiLink openroadString String
+ HiLink openroadComment Comment
+ HiLink openroadOperator Operator
+ HiLink openroadType Type
+ HiLink openroadFunc Special
+ HiLink openroadClass Type
+ HiLink openroadEvent Statement
+ HiLink openroadConst Constant
+ HiLink openroadVar Identifier
+ HiLink openroadIdent Identifier
+ HiLink openroadTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "openroad"
diff --git a/runtime/syntax/opl.vim b/runtime/syntax/opl.vim
new file mode 100644
index 000000000..1914a050f
--- /dev/null
+++ b/runtime/syntax/opl.vim
@@ -0,0 +1,96 @@
+" Vim syntax file
+" Language: OPL
+" Maintainer: Czo <Olivier.Sirol@lip6.fr>
+" $Id$
+
+" Open Psion Language... (EPOC16/EPOC32)
+
+" 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
+
+" case is not significant
+syn case ignore
+
+" A bunch of useful OPL keywords
+syn keyword OPLStatement proc endp abs acos addr adjustalloc alert alloc app
+syn keyword OPLStatement append appendsprite asc asin at atan back beep
+syn keyword OPLStatement begintrans bookmark break busy byref cache
+syn keyword OPLStatement cachehdr cacherec cachetidy call cancel caption
+syn keyword OPLStatement changesprite chr$ clearflags close closesprite cls
+syn keyword OPLStatement cmd$ committrans compact compress const continue
+syn keyword OPLStatement copy cos count create createsprite cursor
+syn keyword OPLStatement datetosecs datim$ day dayname$ days daystodate
+syn keyword OPLStatement dbuttons dcheckbox dchoice ddate declare dedit
+syn keyword OPLStatement deditmulti defaultwin deg delete dfile dfloat
+syn keyword OPLStatement dialog diaminit diampos dinit dir$ dlong do dow
+syn keyword OPLStatement dposition drawsprite dtext dtime dxinput edit else
+syn keyword OPLStatement elseif enda endif endv endwh entersend entersend0
+syn keyword OPLStatement eof erase err err$ errx$ escape eval exist exp ext
+syn keyword OPLStatement external find findfield findlib first fix$ flags
+syn keyword OPLStatement flt font freealloc gat gborder gbox gbutton
+syn keyword OPLStatement gcircle gclock gclose gcls gcolor gcopy gcreate
+syn keyword OPLStatement gcreatebit gdrawobject gellipse gen$ get get$
+syn keyword OPLStatement getcmd$ getdoc$ getevent getevent32 geteventa32
+syn keyword OPLStatement geteventc getlibh gfill gfont ggmode ggrey gheight
+syn keyword OPLStatement gidentity ginfo ginfo32 ginvert giprint glineby
+syn keyword OPLStatement glineto gloadbit gloadfont global gmove gorder
+syn keyword OPLStatement goriginx goriginy goto gotomark gpatt gpeekline
+syn keyword OPLStatement gpoly gprint gprintb gprintclip grank gsavebit
+syn keyword OPLStatement gscroll gsetpenwidth gsetwin gstyle gtmode gtwidth
+syn keyword OPLStatement gunloadfont gupdate guse gvisible gwidth gx
+syn keyword OPLStatement gxborder gxprint gy hex$ hour iabs icon if include
+syn keyword OPLStatement input insert int intf intrans key key$ keya keyc
+syn keyword OPLStatement killmark kmod last lclose left$ len lenalloc
+syn keyword OPLStatement linklib ln loadlib loadm loc local lock log lopen
+syn keyword OPLStatement lower$ lprint max mcard mcasc mean menu mid$ min
+syn keyword OPLStatement minit minute mkdir modify month month$ mpopup
+syn keyword OPLStatement newobj newobjh next notes num$ odbinfo off onerr
+syn keyword OPLStatement open openr opx os parse$ path pause peek pi
+syn keyword OPLStatement pointerfilter poke pos position possprite print
+syn keyword OPLStatement put rad raise randomize realloc recsize rename
+syn keyword OPLStatement rept$ return right$ rmdir rnd rollback sci$ screen
+syn keyword OPLStatement screeninfo second secstodate send setdoc setflags
+syn keyword OPLStatement setname setpath sin space sqr statuswin
+syn keyword OPLStatement statwininfo std stop style sum tan testevent trap
+syn keyword OPLStatement type uadd unloadlib unloadm until update upper$
+syn keyword OPLStatement use usr usr$ usub val var vector week while year
+" syn keyword OPLStatement rem
+
+
+syn match OPLNumber "\<\d\+\>"
+syn match OPLNumber "\<\d\+\.\d*\>"
+syn match OPLNumber "\.\d\+\>"
+
+syn region OPLString start=+"+ end=+"+
+syn region OPLComment start="REM[\t ]" end="$"
+syn match OPLMathsOperator "-\|=\|[:<>+\*^/\\]"
+
+" 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_OPL_syntax_inits")
+ if version < 508
+ let did_OPL_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink OPLStatement Statement
+ HiLink OPLNumber Number
+ HiLink OPLString String
+ HiLink OPLComment Comment
+ HiLink OPLMathsOperator Conditional
+" HiLink OPLError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "opl"
+
+" vim: ts=8
diff --git a/runtime/syntax/ora.vim b/runtime/syntax/ora.vim
new file mode 100644
index 000000000..bf5d3220a
--- /dev/null
+++ b/runtime/syntax/ora.vim
@@ -0,0 +1,478 @@
+" Vim syntax file
+" Language: Oracle config files (.ora) (Oracle 8i, ver. 8.1.5)
+" Maintainer: Sandor Kopanyi <sandor.kopanyi@mailbox.hu>
+" Url: <->
+" Last Change: 2003 May 11
+
+" * the keywords are listed by file (sqlnet.ora, listener.ora, etc.)
+" * the parathesis-checking is made at the beginning for all keywords
+" * possible values are listed also
+" * there are some overlappings (e.g. METHOD is mentioned both for
+" sqlnet-ora and tnsnames.ora; since will not cause(?) problems
+" is easier to follow separately each file's keywords)
+
+" Remove any old syntax stuff hanging around, if needed
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'ora'
+endif
+
+syn case ignore
+
+"comments
+syn match oraComment "\#.*"
+
+" catch errors caused by wrong parenthesis
+syn region oraParen transparent start="(" end=")" contains=@oraAll,oraParen
+syn match oraParenError ")"
+
+" strings
+syn region oraString start=+"+ end=+"+
+
+"common .ora staff
+
+"common protocol parameters
+syn keyword oraKeywordGroup ADDRESS ADDRESS_LIST
+syn keyword oraKeywordGroup DESCRIPTION_LIST DESCRIPTION
+"all protocols
+syn keyword oraKeyword PROTOCOL
+syn keyword oraValue ipc tcp nmp
+"Bequeath
+syn keyword oraKeyword PROGRAM ARGV0 ARGS
+"IPC
+syn keyword oraKeyword KEY
+"Named Pipes
+syn keyword oraKeyword SERVER PIPE
+"LU6.2
+syn keyword oraKeyword LU_NAME LLU LOCAL_LU LLU_NAME LOCAL_LU_NAME
+syn keyword oraKeyword MODE MDN
+syn keyword oraKeyword PLU PARTNER_LU_NAME PLU_LA PARTNER_LU_LOCAL_ALIAS
+syn keyword oraKeyword TP_NAME TPN
+"SPX
+syn keyword oraKeyword SERVICE
+"TCP/IP and TCP/IP with SSL
+syn keyword oraKeyword HOST PORT
+
+"misc. keywords I've met but didn't find in manual (maybe they are deprecated?)
+syn keyword oraKeywordGroup COMMUNITY_LIST
+syn keyword oraKeyword COMMUNITY NAME DEFAULT_ZONE
+syn keyword oraValue tcpcom
+
+"common values
+syn keyword oraValue yes no on off true false null all none ok
+"word 'world' is used a lot...
+syn keyword oraModifier world
+
+"misc. common keywords
+syn keyword oraKeyword TRACE_DIRECTORY TRACE_LEVEL TRACE_FILE
+
+
+"sqlnet.ora
+syn keyword oraKeywordPref NAMES NAMESCTL
+syn keyword oraKeywordPref OSS SOURCE SQLNET TNSPING
+syn keyword oraKeyword AUTOMATIC_IPC BEQUEATH_DETACH DAEMON TRACE_MASK
+syn keyword oraKeyword DISABLE_OOB
+syn keyword oraKeyword LOG_DIRECTORY_CLIENT LOG_DIRECTORY_SERVER
+syn keyword oraKeyword LOG_FILE_CLIENT LOG_FILE_SERVER
+syn keyword oraKeyword DCE PREFIX DEFAULT_DOMAIN DIRECTORY_PATH
+syn keyword oraKeyword INITIAL_RETRY_TIMEOUT MAX_OPEN_CONNECTIONS
+syn keyword oraKeyword MESSAGE_POOL_START_SIZE NIS META_MAP
+syn keyword oraKeyword PASSWORD PREFERRED_SERVERS REQUEST_RETRIES
+syn keyword oraKeyword INTERNAL_ENCRYPT_PASSWORD INTERNAL_USE
+syn keyword oraKeyword NO_INITIAL_SERVER NOCONFIRM
+syn keyword oraKeyword SERVER_PASSWORD TRACE_UNIQUE MY_WALLET
+syn keyword oraKeyword LOCATION DIRECTORY METHOD METHOD_DATA
+syn keyword oraKeyword SQLNET_ADDRESS
+syn keyword oraKeyword AUTHENTICATION_SERVICES
+syn keyword oraKeyword AUTHENTICATION_KERBEROS5_SERVICE
+syn keyword oraKeyword AUTHENTICATION_GSSAPI_SERVICE
+syn keyword oraKeyword CLIENT_REGISTRATION
+syn keyword oraKeyword CRYPTO_CHECKSUM_CLIENT CRYPTO_CHECKSUM_SERVER
+syn keyword oraKeyword CRYPTO_CHECKSUM_TYPES_CLIENT CRYPTO_CHECKSUM_TYPES_SERVER
+syn keyword oraKeyword CRYPTO_SEED
+syn keyword oraKeyword ENCRYPTION_CLIENT ENCRYPTION_SERVER
+syn keyword oraKeyword ENCRYPTION_TYPES_CLIENT ENCRYPTION_TYPES_SERVER
+syn keyword oraKeyword EXPIRE_TIME
+syn keyword oraKeyword IDENTIX_FINGERPRINT_DATABASE IDENTIX_FINGERPRINT_DATABASE_USER
+syn keyword oraKeyword IDENTIX_FINGERPRINT_DATABASE_PASSWORD IDENTIX_FINGERPRINT_METHOD
+syn keyword oraKeyword KERBEROS5_CC_NAME KERBEROS5_CLOCKSKEW KERBEROS5_CONF
+syn keyword oraKeyword KERBEROS5_KEYTAB KERBEROS5_REALMS
+syn keyword oraKeyword RADIUS_ALTERNATE RADIUS_ALTERNATE_PORT RADIUS_ALTERNATE_RETRIES
+syn keyword oraKeyword RADIUS_AUTHENTICATION_TIMEOUT RADIUS_AUTHENTICATION
+syn keyword oraKeyword RADIUS_AUTHENTICATION_INTERFACE RADIUS_AUTHENTICATION_PORT
+syn keyword oraKeyword RADIUS_AUTHENTICATION_RETRIES RADIUS_AUTHENTICATION_TIMEOUT
+syn keyword oraKeyword RADIUS_CHALLENGE_RESPONSE RADIUS_SECRET RADIUS_SEND_ACCOUNTING
+syn keyword oraKeyword SSL_CLIENT_AUTHENTICATION SSL_CIPHER_SUITES SSL_VERSION
+syn keyword oraKeyword TRACE_DIRECTORY_CLIENT TRACE_DIRECTORY_SERVER
+syn keyword oraKeyword TRACE_FILE_CLIENT TRACE_FILE_SERVER
+syn keyword oraKeyword TRACE_LEVEL_CLIENT TRACE_LEVEL_SERVER
+syn keyword oraKeyword TRACE_UNIQUE_CLIENT
+syn keyword oraKeyword USE_CMAN USE_DEDICATED_SERVER
+syn keyword oraValue user admin support
+syn keyword oraValue accept accepted reject rejected requested required
+syn keyword oraValue md5 rc4_40 rc4_56 rc4_128 des des_40
+syn keyword oraValue tnsnames onames hostname dce nis novell
+syn keyword oraValue file oracle
+syn keyword oraValue oss
+syn keyword oraValue beq nds nts kerberos5 securid cybersafe identix dcegssapi radius
+syn keyword oraValue undetermined
+
+"tnsnames.ora
+syn keyword oraKeywordGroup CONNECT_DATA FAILOVER_MODE
+syn keyword oraKeyword FAILOVER LOAD_BALANCE SOURCE_ROUTE TYPE_OF_SERVICE
+syn keyword oraKeyword BACKUP TYPE METHOD GLOBAL_NAME HS
+syn keyword oraKeyword INSTANCE_NAME RDB_DATABASE SDU SERVER
+syn keyword oraKeyword SERVICE_NAME SERVICE_NAMES SID
+syn keyword oraKeyword HANDLER_NAME EXTPROC_CONNECTION_DATA
+syn keyword oraValue session select basic preconnect dedicated shared
+
+"listener.ora
+syn keyword oraKeywordGroup SID_LIST SID_DESC PRESPAWN_LIST PRESPAWN_DESC
+syn match oraKeywordGroup "SID_LIST_\w*"
+syn keyword oraKeyword PROTOCOL_STACK PRESENTATION SESSION
+syn keyword oraKeyword GLOBAL_DBNAME ORACLE_HOME PROGRAM SID_NAME
+syn keyword oraKeyword PRESPAWN_MAX POOL_SIZE TIMEOUT
+syn match oraKeyword "CONNECT_TIMEOUT_\w*"
+syn match oraKeyword "LOG_DIRECTORY_\w*"
+syn match oraKeyword "LOG_FILE_\w*"
+syn match oraKeyword "PASSWORDS_\w*"
+syn match oraKeyword "STARTUP_WAIT_TIME_\w*"
+syn match oraKeyword "STARTUP_WAITTIME_\w*"
+syn match oraKeyword "TRACE_DIRECTORY_\w*"
+syn match oraKeyword "TRACE_FILE_\w*"
+syn match oraKeyword "TRACE_LEVEL_\w*"
+syn match oraKeyword "USE_PLUG_AND_PLAY_\w*"
+syn keyword oraValue ttc giop ns raw
+
+"names.ora
+syn keyword oraKeywordGroup ADDRESSES ADMIN_REGION
+syn keyword oraKeywordGroup DEFAULT_FORWARDERS FORWARDER_LIST FORWARDER
+syn keyword oraKeywordGroup DOMAIN_HINTS HINT_DESC HINT_LIST
+syn keyword oraKeywordGroup DOMAINS DOMAIN_LIST DOMAIN
+syn keyword oraKeywordPref NAMES
+syn keyword oraKeyword EXPIRE REFRESH REGION RETRY USERID VERSION
+syn keyword oraKeyword AUTHORITY_REQUIRED CONNECT_TIMEOUT
+syn keyword oraKeyword AUTO_REFRESH_EXPIRE AUTO_REFRESH_RETRY
+syn keyword oraKeyword CACHE_CHECKPOINT_FILE CACHE_CHECKPOINT_INTERVAL
+syn keyword oraKeyword CONFIG_CHECKPOINT_FILE DEFAULT_FORWARDERS_ONLY
+syn keyword oraKeyword HINT FORWARDING_AVAILABLE FORWARDING_DESIRED
+syn keyword oraKeyword KEEP_DB_OPEN
+syn keyword oraKeyword LOG_DIRECTORY LOG_FILE LOG_STATS_INTERVAL LOG_UNIQUE
+syn keyword oraKeyword MAX_OPEN_CONNECTIONS MAX_REFORWARDS
+syn keyword oraKeyword MESSAGE_POOL_START_SIZE
+syn keyword oraKeyword NO_MODIFY_REQUESTS NO_REGION_DATABASE
+syn keyword oraKeyword PASSWORD REGION_CHECKPOINT_FILE
+syn keyword oraKeyword RESET_STATS_INTERVAL SAVE_CONFIG_ON_STOP
+syn keyword oraKeyword SERVER_NAME TRACE_FUNC TRACE_UNIQUE
+
+"cman.ora
+syn keyword oraKeywordGroup CMAN CMAN_ADMIN CMAN_PROFILE PARAMETER_LIST
+syn keyword oraKeywordGroup CMAN_RULES RULES_LIST RULE
+syn keyword oraKeyword ANSWER_TIMEOUT AUTHENTICATION_LEVEL LOG_LEVEL
+syn keyword oraKeyword MAX_FREELIST_BUFFERS MAXIMUM_CONNECT_DATA MAXIMUM_RELAYS
+syn keyword oraKeyword RELAY_STATISTICS SHOW_TNS_INFO TRACING
+syn keyword oraKeyword USE_ASYNC_CALL SRC DST SRV ACT
+
+"protocol.ora
+syn match oraKeyword "\w*\.EXCLUDED_NODES"
+syn match oraKeyword "\w*\.INVITED_NODES"
+syn match oraKeyword "\w*\.VALIDNODE_CHECKING"
+syn keyword oraKeyword TCP NODELAY
+
+
+
+
+"---------------------------------------
+"init.ora
+
+"common values
+syn keyword oraValue nested_loops merge hash unlimited
+
+"init params
+syn keyword oraKeyword O7_DICTIONARY_ACCESSIBILITY ALWAYS_ANTI_JOIN ALWAYS_SEMI_JOIN
+syn keyword oraKeyword AQ_TM_PROCESSES ARCH_IO_SLAVES AUDIT_FILE_DEST AUDIT_TRAIL
+syn keyword oraKeyword BACKGROUND_CORE_DUMP BACKGROUND_DUMP_DEST
+syn keyword oraKeyword BACKUP_TAPE_IO_SLAVES BITMAP_MERGE_AREA_SIZE
+syn keyword oraKeyword BLANK_TRIMMING BUFFER_POOL_KEEP BUFFER_POOL_RECYCLE
+syn keyword oraKeyword COMMIT_POINT_STRENGTH COMPATIBLE CONTROL_FILE_RECORD_KEEP_TIME
+syn keyword oraKeyword CONTROL_FILES CORE_DUMP_DEST CPU_COUNT
+syn keyword oraKeyword CREATE_BITMAP_AREA_SIZE CURSOR_SPACE_FOR_TIME
+syn keyword oraKeyword DB_BLOCK_BUFFERS DB_BLOCK_CHECKING DB_BLOCK_CHECKSUM
+syn keyword oraKeyword DB_BLOCK_LRU_LATCHES DB_BLOCK_MAX_DIRTY_TARGET
+syn keyword oraKeyword DB_BLOCK_SIZE DB_DOMAIN
+syn keyword oraKeyword DB_FILE_DIRECT_IO_COUNT DB_FILE_MULTIBLOCK_READ_COUNT
+syn keyword oraKeyword DB_FILE_NAME_CONVERT DB_FILE_SIMULTANEOUS_WRITES
+syn keyword oraKeyword DB_FILES DB_NAME DB_WRITER_PROCESSES
+syn keyword oraKeyword DBLINK_ENCRYPT_LOGIN DBWR_IO_SLAVES
+syn keyword oraKeyword DELAYED_LOGGING_BLOCK_CLEANOUTS DISCRETE_TRANSACTIONS_ENABLED
+syn keyword oraKeyword DISK_ASYNCH_IO DISTRIBUTED_TRANSACTIONS
+syn keyword oraKeyword DML_LOCKS ENQUEUE_RESOURCES ENT_DOMAIN_NAME EVENT
+syn keyword oraKeyword FAST_START_IO_TARGET FAST_START_PARALLEL_ROLLBACK
+syn keyword oraKeyword FIXED_DATE FREEZE_DB_FOR_FAST_INSTANCE_RECOVERY
+syn keyword oraKeyword GC_DEFER_TIME GC_FILES_TO_LOCKS GC_RELEASABLE_LOCKS GC_ROLLBACK_LOCKS
+syn keyword oraKeyword GLOBAL_NAMES HASH_AREA_SIZE
+syn keyword oraKeyword HASH_JOIN_ENABLED HASH_MULTIBLOCK_IO_COUNT
+syn keyword oraKeyword HI_SHARED_MEMORY_ADDRESS HS_AUTOREGISTER
+syn keyword oraKeyword IFILE
+syn keyword oraKeyword INSTANCE_GROUPS INSTANCE_NAME INSTANCE_NUMBER
+syn keyword oraKeyword JAVA_POOL_SIZE JOB_QUEUE_INTERVAL JOB_QUEUE_PROCESSES LARGE_POOL_SIZE
+syn keyword oraKeyword LICENSE_MAX_SESSIONS LICENSE_MAX_USERS LICENSE_SESSIONS_WARNING
+syn keyword oraKeyword LM_LOCKS LM_PROCS LM_RESS
+syn keyword oraKeyword LOCAL_LISTENER LOCK_NAME_SPACE LOCK_SGA LOCK_SGA_AREAS
+syn keyword oraKeyword LOG_ARCHIVE_BUFFER_SIZE LOG_ARCHIVE_BUFFERS LOG_ARCHIVE_DEST
+syn match oraKeyword "LOG_ARCHIVE_DEST_\(1\|2\|3\|4\|5\)"
+syn match oraKeyword "LOG_ARCHIVE_DEST_STATE_\(1\|2\|3\|4\|5\)"
+syn keyword oraKeyword LOG_ARCHIVE_DUPLEX_DEST LOG_ARCHIVE_FORMAT LOG_ARCHIVE_MAX_PROCESSES
+syn keyword oraKeyword LOG_ARCHIVE_MIN_SUCCEED_DEST LOG_ARCHIVE_START
+syn keyword oraKeyword LOG_BUFFER LOG_CHECKPOINT_INTERVAL LOG_CHECKPOINT_TIMEOUT
+syn keyword oraKeyword LOG_CHECKPOINTS_TO_ALERT LOG_FILE_NAME_CONVERT
+syn keyword oraKeyword MAX_COMMIT_PROPAGATION_DELAY MAX_DUMP_FILE_SIZE
+syn keyword oraKeyword MAX_ENABLED_ROLES MAX_ROLLBACK_SEGMENTS
+syn keyword oraKeyword MTS_DISPATCHERS MTS_MAX_DISPATCHERS MTS_MAX_SERVERS MTS_SERVERS
+syn keyword oraKeyword NLS_CALENDAR NLS_COMP NLS_CURRENCY NLS_DATE_FORMAT
+syn keyword oraKeyword NLS_DATE_LANGUAGE NLS_DUAL_CURRENCY NLS_ISO_CURRENCY NLS_LANGUAGE
+syn keyword oraKeyword NLS_NUMERIC_CHARACTERS NLS_SORT NLS_TERRITORY
+syn keyword oraKeyword OBJECT_CACHE_MAX_SIZE_PERCENT OBJECT_CACHE_OPTIMAL_SIZE
+syn keyword oraKeyword OPEN_CURSORS OPEN_LINKS OPEN_LINKS_PER_INSTANCE
+syn keyword oraKeyword OPS_ADMINISTRATION_GROUP
+syn keyword oraKeyword OPTIMIZER_FEATURES_ENABLE OPTIMIZER_INDEX_CACHING
+syn keyword oraKeyword OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_MAX_PERMUTATIONS
+syn keyword oraKeyword OPTIMIZER_MODE OPTIMIZER_PERCENT_PARALLEL
+syn keyword oraKeyword OPTIMIZER_SEARCH_LIMIT
+syn keyword oraKeyword ORACLE_TRACE_COLLECTION_NAME ORACLE_TRACE_COLLECTION_PATH
+syn keyword oraKeyword ORACLE_TRACE_COLLECTION_SIZE ORACLE_TRACE_ENABLE
+syn keyword oraKeyword ORACLE_TRACE_FACILITY_NAME ORACLE_TRACE_FACILITY_PATH
+syn keyword oraKeyword OS_AUTHENT_PREFIX OS_ROLES
+syn keyword oraKeyword PARALLEL_ADAPTIVE_MULTI_USER PARALLEL_AUTOMATIC_TUNING
+syn keyword oraKeyword PARALLEL_BROADCAST_ENABLED PARALLEL_EXECUTION_MESSAGE_SIZE
+syn keyword oraKeyword PARALLEL_INSTANCE_GROUP PARALLEL_MAX_SERVERS
+syn keyword oraKeyword PARALLEL_MIN_PERCENT PARALLEL_MIN_SERVERS
+syn keyword oraKeyword PARALLEL_SERVER PARALLEL_SERVER_INSTANCES PARALLEL_THREADS_PER_CPU
+syn keyword oraKeyword PARTITION_VIEW_ENABLED PLSQL_V2_COMPATIBILITY
+syn keyword oraKeyword PRE_PAGE_SGA PROCESSES
+syn keyword oraKeyword QUERY_REWRITE_ENABLED QUERY_REWRITE_INTEGRITY
+syn keyword oraKeyword RDBMS_SERVER_DN READ_ONLY_OPEN_DELAYED RECOVERY_PARALLELISM
+syn keyword oraKeyword REMOTE_DEPENDENCIES_MODE REMOTE_LOGIN_PASSWORDFILE
+syn keyword oraKeyword REMOTE_OS_AUTHENT REMOTE_OS_ROLES
+syn keyword oraKeyword REPLICATION_DEPENDENCY_TRACKING
+syn keyword oraKeyword RESOURCE_LIMIT RESOURCE_MANAGER_PLAN
+syn keyword oraKeyword ROLLBACK_SEGMENTS ROW_LOCKING SERIAL _REUSE SERVICE_NAMES
+syn keyword oraKeyword SESSION_CACHED_CURSORS SESSION_MAX_OPEN_FILES SESSIONS
+syn keyword oraKeyword SHADOW_CORE_DUMP
+syn keyword oraKeyword SHARED_MEMORY_ADDRESS SHARED_POOL_RESERVED_SIZE SHARED_POOL_SIZE
+syn keyword oraKeyword SORT_AREA_RETAINED_SIZE SORT_AREA_SIZE SORT_MULTIBLOCK_READ_COUNT
+syn keyword oraKeyword SQL92_SECURITY SQL_TRACE STANDBY_ARCHIVE_DEST
+syn keyword oraKeyword STAR_TRANSFORMATION_ENABLED TAPE_ASYNCH_IO THREAD
+syn keyword oraKeyword TIMED_OS_STATISTICS TIMED_STATISTICS
+syn keyword oraKeyword TRANSACTION_AUDITING TRANSACTIONS TRANSACTIONS_PER_ROLLBACK_SEGMENT
+syn keyword oraKeyword USE_INDIRECT_DATA_BUFFERS USER_DUMP_DEST
+syn keyword oraKeyword UTL_FILE_DIR
+syn keyword oraKeywordObs ALLOW_PARTIAL_SN_RESULTS B_TREE_BITMAP_PLANS
+syn keyword oraKeywordObs BACKUP_DISK_IO_SLAVES CACHE_SIZE_THRESHOLD
+syn keyword oraKeywordObs CCF_IO_SIZE CLEANUP_ROLLBACK_ENTRIES
+syn keyword oraKeywordObs CLOSE_CACHED_OPEN_CURSORS COMPATIBLE_NO_RECOVERY
+syn keyword oraKeywordObs COMPLEX_VIEW_MERGING
+syn keyword oraKeywordObs DB_BLOCK_CHECKPOINT_BATCH DB_BLOCK_LRU_EXTENDED_STATISTICS
+syn keyword oraKeywordObs DB_BLOCK_LRU_STATISTICS
+syn keyword oraKeywordObs DISTRIBUTED_LOCK_TIMEOUT DISTRIBUTED_RECOVERY_CONNECTION_HOLD_TIME
+syn keyword oraKeywordObs FAST_FULL_SCAN_ENABLED GC_LATCHES GC_LCK_PROCS
+syn keyword oraKeywordObs LARGE_POOL_MIN_ALLOC LGWR_IO_SLAVES
+syn keyword oraKeywordObs LOG_BLOCK_CHECKSUM LOG_FILES
+syn keyword oraKeywordObs LOG_SIMULTANEOUS_COPIES LOG_SMALL_ENTRY_MAX_SIZE
+syn keyword oraKeywordObs MAX_TRANSACTION_BRANCHES
+syn keyword oraKeywordObs MTS_LISTENER_ADDRESS MTS_MULTIPLE_LISTENERS
+syn keyword oraKeywordObs MTS_RATE_LOG_SIZE MTS_RATE_SCALE MTS_SERVICE
+syn keyword oraKeywordObs OGMS_HOME OPS_ADMIN_GROUP
+syn keyword oraKeywordObs PARALLEL_DEFAULT_MAX_INSTANCES PARALLEL_MIN_MESSAGE_POOL
+syn keyword oraKeywordObs PARALLEL_SERVER_IDLE_TIME PARALLEL_TRANSACTION_RESOURCE_TIMEOUT
+syn keyword oraKeywordObs PUSH_JOIN_PREDICATE REDUCE_ALARM ROW_CACHE_CURSORS
+syn keyword oraKeywordObs SEQUENCE_CACHE_ENTRIES SEQUENCE_CACHE_HASH_BUCKETS
+syn keyword oraKeywordObs SHARED_POOL_RESERVED_MIN_ALLOC
+syn keyword oraKeywordObs SORT_DIRECT_WRITES SORT_READ_FAC SORT_SPACEMAP_SIZE
+syn keyword oraKeywordObs SORT_WRITE_BUFFER_SIZE SORT_WRITE_BUFFERS
+syn keyword oraKeywordObs SPIN_COUNT TEMPORARY_TABLE_LOCKS USE_ISM
+syn keyword oraValue db os full partial mandatory optional reopen enable defer
+syn keyword oraValue always default intent disable dml plsql temp_disable
+syn match oravalue "Arabic Hijrah"
+syn match oravalue "English Hijrah"
+syn match oravalue "Gregorian"
+syn match oravalue "Japanese Imperial"
+syn match oravalue "Persian"
+syn match oravalue "ROC Official"
+syn match oravalue "Thai Buddha"
+syn match oravalue "8.0.0"
+syn match oravalue "8.0.3"
+syn match oravalue "8.0.4"
+syn match oravalue "8.1.3"
+syn match oraModifier "archived log"
+syn match oraModifier "backup corruption"
+syn match oraModifier "backup datafile"
+syn match oraModifier "backup piece "
+syn match oraModifier "backup redo log"
+syn match oraModifier "backup set"
+syn match oraModifier "copy corruption"
+syn match oraModifier "datafile copy"
+syn match oraModifier "deleted object"
+syn match oraModifier "loghistory"
+syn match oraModifier "offline range"
+
+"undocumented init params
+"up to 7.2 (inclusive)
+syn keyword oraKeywordUndObs _latch_spin_count _trace_instance_termination
+syn keyword oraKeywordUndObs _wakeup_timeout _lgwr_async_write
+"7.3
+syn keyword oraKeywordUndObs _standby_lock_space_name _enable_dba_locking
+"8.0.5
+syn keyword oraKeywordUnd _NUMA_instance_mapping _NUMA_pool_size
+syn keyword oraKeywordUnd _advanced_dss_features _affinity_on _all_shared_dblinks
+syn keyword oraKeywordUnd _allocate_creation_order _allow_resetlogs_corruption
+syn keyword oraKeywordUnd _always_star_transformation _bump_highwater_mark_count
+syn keyword oraKeywordUnd _column_elimination_off _controlfile_enqueue_timeout
+syn keyword oraKeywordUnd _corrupt_blocks_on_stuck_recovery _corrupted_rollback_segments
+syn keyword oraKeywordUnd _cr_deadtime _cursor_db_buffers_pinned
+syn keyword oraKeywordUnd _db_block_cache_clone _db_block_cache_map _db_block_cache_protect
+syn keyword oraKeywordUnd _db_block_hash_buckets _db_block_hi_priority_batch_size
+syn keyword oraKeywordUnd _db_block_max_cr_dba _db_block_max_scan_cnt
+syn keyword oraKeywordUnd _db_block_med_priority_batch_size _db_block_no_idle_writes
+syn keyword oraKeywordUnd _db_block_write_batch _db_handles _db_handles_cached
+syn keyword oraKeywordUnd _db_large_dirty_queue _db_no_mount_lock
+syn keyword oraKeywordUnd _db_writer_histogram_statistics _db_writer_scan_depth
+syn keyword oraKeywordUnd _db_writer_scan_depth_decrement _db_writer_scan_depth_increment
+syn keyword oraKeywordUnd _disable_incremental_checkpoints
+syn keyword oraKeywordUnd _disable_latch_free_SCN_writes_via_32cas
+syn keyword oraKeywordUnd _disable_latch_free_SCN_writes_via_64cas
+syn keyword oraKeywordUnd _disable_logging _disable_ntlog_events
+syn keyword oraKeywordUnd _dss_cache_flush _dynamic_stats_threshold
+syn keyword oraKeywordUnd _enable_cscn_caching _enable_default_affinity
+syn keyword oraKeywordUnd _enqueue_debug_multi_instance _enqueue_hash
+syn keyword oraKeywordUnd _enqueue_hash_chain_latches _enqueue_locks
+syn keyword oraKeywordUnd _fifth_spare_parameter _first_spare_parameter _fourth_spare_parameter
+syn keyword oraKeywordUnd _gc_class_locks _groupby_nopushdown_cut_ratio
+syn keyword oraKeywordUnd _idl_conventional_index_maintenance _ignore_failed_escalates
+syn keyword oraKeywordUnd _init_sql_file
+syn keyword oraKeywordUnd _io_slaves_disabled _ioslave_batch_count _ioslave_issue_count
+syn keyword oraKeywordUnd _kgl_bucket_count _kgl_latch_count _kgl_multi_instance_invalidation
+syn keyword oraKeywordUnd _kgl_multi_instance_lock _kgl_multi_instance_pin
+syn keyword oraKeywordUnd _latch_miss_stat_sid _latch_recovery_alignment _latch_wait_posting
+syn keyword oraKeywordUnd _lm_ast_option _lm_direct_sends _lm_dlmd_procs _lm_domains _lm_groups
+syn keyword oraKeywordUnd _lm_non_fault_tolerant _lm_send_buffers _lm_statistics _lm_xids
+syn keyword oraKeywordUnd _log_blocks_during_backup _log_buffers_debug _log_checkpoint_recovery_check
+syn keyword oraKeywordUnd _log_debug_multi_instance _log_entry_prebuild_threshold _log_io_size
+syn keyword oraKeywordUnd _log_space_errors
+syn keyword oraKeywordUnd _max_exponential_sleep _max_sleep_holding_latch
+syn keyword oraKeywordUnd _messages _minimum_giga_scn _mts_load_constants _nested_loop_fudge
+syn keyword oraKeywordUnd _no_objects _no_or_expansion
+syn keyword oraKeywordUnd _number_cached_attributes _offline_rollback_segments _open_files_limit
+syn keyword oraKeywordUnd _optimizer_undo_changes
+syn keyword oraKeywordUnd _oracle_trace_events _oracle_trace_facility_version
+syn keyword oraKeywordUnd _ordered_nested_loop _parallel_server_sleep_time
+syn keyword oraKeywordUnd _passwordfile_enqueue_timeout _pdml_slaves_diff_part
+syn keyword oraKeywordUnd _plsql_dump_buffer_events _predicate_elimination_enabled
+syn keyword oraKeywordUnd _project_view_columns
+syn keyword oraKeywordUnd _px_broadcast_fudge_factor _px_broadcast_trace _px_dop_limit_degree
+syn keyword oraKeywordUnd _px_dop_limit_threshold _px_kxfr_granule_allocation _px_kxib_tracing
+syn keyword oraKeywordUnd _release_insert_threshold _reuse_index_loop
+syn keyword oraKeywordUnd _rollback_segment_count _rollback_segment_initial
+syn keyword oraKeywordUnd _row_cache_buffer_size _row_cache_instance_locks
+syn keyword oraKeywordUnd _save_escalates _scn_scheme
+syn keyword oraKeywordUnd _second_spare_parameter _session_idle_bit_latches
+syn keyword oraKeywordUnd _shared_session_sort_fetch_buffer _single_process
+syn keyword oraKeywordUnd _small_table_threshold _sql_connect_capability_override
+syn keyword oraKeywordUnd _sql_connect_capability_table
+syn keyword oraKeywordUnd _test_param_1 _test_param_2 _test_param_3
+syn keyword oraKeywordUnd _third_spare_parameter _tq_dump_period
+syn keyword oraKeywordUnd _trace_archive_dest _trace_archive_start _trace_block_size
+syn keyword oraKeywordUnd _trace_buffers_per_process _trace_enabled _trace_events
+syn keyword oraKeywordUnd _trace_file_size _trace_files_public _trace_flushing _trace_write_batch_size
+syn keyword oraKeywordUnd _upconvert_from_ast _use_vector_post _wait_for_sync _walk_insert_threshold
+"dunno which version; may be 8.1.x, may be obsoleted
+syn keyword oraKeywordUndObs _arch_io_slaves _average_dirties_half_life _b_tree_bitmap_plans
+syn keyword oraKeywordUndObs _backup_disk_io_slaves _backup_io_pool_size
+syn keyword oraKeywordUndObs _cleanup_rollback_entries _close_cached_open_cursors
+syn keyword oraKeywordUndObs _compatible_no_recovery _complex_view_merging
+syn keyword oraKeywordUndObs _cpu_to_io _cr_server
+syn keyword oraKeywordUndObs _db_aging_cool_count _db_aging_freeze_cr _db_aging_hot_criteria
+syn keyword oraKeywordUndObs _db_aging_stay_count _db_aging_touch_time
+syn keyword oraKeywordUndObs _db_percent_hot_default _db_percent_hot_keep _db_percent_hot_recycle
+syn keyword oraKeywordUndObs _db_writer_chunk_writes _db_writer_max_writes
+syn keyword oraKeywordUndObs _dbwr_async_io _dbwr_tracing
+syn keyword oraKeywordUndObs _defer_multiple_waiters _discrete_transaction_enabled
+syn keyword oraKeywordUndObs _distributed_lock_timeout _distributed_recovery _distribited_recovery_
+syn keyword oraKeywordUndObs _domain_index_batch_size _domain_index_dml_batch_size
+syn keyword oraKeywordUndObs _enable_NUMA_optimization _enable_block_level_transaction_recovery
+syn keyword oraKeywordUndObs _enable_list_io _enable_multiple_sampling
+syn keyword oraKeywordUndObs _fairness_treshold _fast_full_scan_enabled _foreground_locks
+syn keyword oraKeywordUndObs _full_pwise_join_enabled _gc_latches _gc_lck_procs
+syn keyword oraKeywordUndObs _high_server_treshold _index_prefetch_factor _kcl_debug
+syn keyword oraKeywordUndObs _kkfi_trace _large_pool_min_alloc _lazy_freelist_close _left_nested_loops_random
+syn keyword oraKeywordUndObs _lgwr_async_io _lgwr_io_slaves _lock_sga_areas
+syn keyword oraKeywordUndObs _log_archive_buffer_size _log_archive_buffers _log_simultaneous_copies
+syn keyword oraKeywordUndObs _low_server_treshold _max_transaction_branches
+syn keyword oraKeywordUndObs _mts_rate_log_size _mts_rate_scale
+syn keyword oraKeywordUndObs _mview_cost_rewrite _mview_rewrite_2
+syn keyword oraKeywordUndObs _ncmb_readahead_enabled _ncmb_readahead_tracing
+syn keyword oraKeywordUndObs _ogms_home
+syn keyword oraKeywordUndObs _parallel_adaptive_max_users _parallel_default_max_instances
+syn keyword oraKeywordUndObs _parallel_execution_message_align _parallel_fake_class_pct
+syn keyword oraKeywordUndObs _parallel_load_bal_unit _parallel_load_balancing
+syn keyword oraKeywordUndObs _parallel_min_message_pool _parallel_recovery_stopat
+syn keyword oraKeywordUndObs _parallel_server_idle_time _parallelism_cost_fudge_factor
+syn keyword oraKeywordUndObs _partial_pwise_join_enabled _pdml_separate_gim _push_join_predicate
+syn keyword oraKeywordUndObs _px_granule_size _px_index_sampling _px_load_publish_interval
+syn keyword oraKeywordUndObs _px_max_granules_per_slave _px_min_granules_per_slave _px_no_stealing
+syn keyword oraKeywordUndObs _row_cache_cursors _serial_direct_read _shared_pool_reserved_min_alloc
+syn keyword oraKeywordUndObs _sort_space_for_write_buffers _spin_count _system_trig_enabled
+syn keyword oraKeywordUndObs _trace_buffer_flushes _trace_cr_buffer_creates _trace_multi_block_reads
+syn keyword oraKeywordUndObs _transaction_recovery_servers _use_ism _yield_check_interval
+
+
+syn cluster oraAll add=oraKeyword,oraKeywordGroup,oraKeywordPref,oraKeywordObs,oraKeywordUnd,oraKeywordUndObs
+syn cluster oraAll add=oraValue,oraModifier,oraString,oraSpecial,oraComment
+
+"==============================================================================
+" 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_ora_syn_inits")
+
+ if version < 508
+ let did_ora_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink oraKeyword Statement "usual keywords
+ HiLink oraKeywordGroup Type "keywords which group other keywords
+ HiLink oraKeywordPref oraKeywordGroup "keywords which act as prefixes
+ HiLink oraKeywordObs Todo "obsolete keywords
+ HiLink oraKeywordUnd PreProc "undocumented keywords
+ HiLink oraKeywordUndObs oraKeywordObs "undocumented obsolete keywords
+ HiLink oraValue Identifier "values, like true or false
+ HiLink oraModifier oraValue "modifies values
+ HiLink oraString String "strings
+
+ HiLink oraSpecial Special "special characters
+ HiLink oraError Error "errors
+ HiLink oraParenError oraError "errors caused by mismatching parantheses
+
+ HiLink oraComment Comment "comments
+
+ delcommand HiLink
+endif
+
+
+
+let b:current_syntax = "ora"
+
+if main_syntax == 'ora'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/papp.vim b/runtime/syntax/papp.vim
new file mode 100644
index 000000000..0d84d80d9
--- /dev/null
+++ b/runtime/syntax/papp.vim
@@ -0,0 +1,92 @@
+" Vim syntax file for the "papp" file format (_p_erl _app_lication)
+"
+" Language: papp
+" Maintainer: Marc Lehmann <pcg@goof.com>
+" Last Change: 2003 May 11
+" Filenames: *.papp *.pxml *.pxsl
+" URL: http://papp.plan9.de/
+
+" You can set the "papp_include_html" variable so that html will be
+" rendered as such inside phtml sections (in case you actually put html
+" there - papp does not require that). Also, rendering html tends to keep
+" the clutter high on the screen - mixing three languages is difficult
+" enough(!). PS: it is also slow.
+
+" pod is, btw, allowed everywhere, which is actually wrong :(
+
+" 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
+
+" source is basically xml, with included html (this is common) and perl bits
+if version < 600
+ so <sfile>:p:h/xml.vim
+else
+ runtime! syntax/xml.vim
+endif
+unlet b:current_syntax
+
+if exists("papp_include_html")
+ if version < 600
+ syn include @PAppHtml <sfile>:p:h/html.vim
+ else
+ syn include @PAppHtml syntax/html.vim
+ endif
+ unlet b:current_syntax
+endif
+
+if version < 600
+ syn include @PAppPerl <sfile>:p:h/perl.vim
+else
+ syn include @PAppPerl syntax/perl.vim
+endif
+
+if v:version >= 600
+ syn cluster xmlFoldCluster add=papp_perl,papp_xperl,papp_phtml,papp_pxml,papp_perlPOD
+endif
+
+" preprocessor commands
+syn region papp_prep matchgroup=papp_prep start="^#\s*\(if\|elsif\)" end="$" keepend contains=@perlExpr contained
+syn match papp_prep /^#\s*\(else\|endif\|??\).*$/ contained
+" translation entries
+syn region papp_gettext start=/__"/ end=/"/ contained contains=@papp_perlInterpDQ
+syn cluster PAppHtml add=papp_gettext,papp_prep
+
+" add special, paired xperl, perl and phtml tags
+syn region papp_perl matchgroup=xmlTag start="<perl>" end="</perl>" contains=papp_CDATAp,@PAppPerl keepend
+syn region papp_xperl matchgroup=xmlTag start="<xperl>" end="</xperl>" contains=papp_CDATAp,@PAppPerl keepend
+syn region papp_phtml matchgroup=xmlTag start="<phtml>" end="</phtml>" contains=papp_CDATAh,papp_ph_perl,papp_ph_html,papp_ph_hint,@PAppHtml keepend
+syn region papp_pxml matchgroup=xmlTag start="<pxml>" end="</pxml>" contains=papp_CDATAx,papp_ph_perl,papp_ph_xml,papp_ph_xint keepend
+syn region papp_perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,perlTodo keepend
+
+" cdata sections
+syn region papp_CDATAp matchgroup=xmlCdataDecl start="<!\[CDATA\[" end="\]\]>" contains=@PAppPerl contained keepend
+syn region papp_CDATAh matchgroup=xmlCdataDecl start="<!\[CDATA\[" end="\]\]>" contains=papp_ph_perl,papp_ph_html,papp_ph_hint,@PAppHtml contained keepend
+syn region papp_CDATAx matchgroup=xmlCdataDecl start="<!\[CDATA\[" end="\]\]>" contains=papp_ph_perl,papp_ph_xml,papp_ph_xint contained keepend
+
+syn region papp_ph_perl matchgroup=Delimiter start="<[:?]" end="[:?]>"me=e-2 nextgroup=papp_ph_html contains=@PAppPerl contained keepend
+syn region papp_ph_html matchgroup=Delimiter start=":>" end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@PAppHtml contained keepend
+syn region papp_ph_hint matchgroup=Delimiter start="?>" end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@perlInterpDQ,@PAppHtml contained keepend
+syn region papp_ph_xml matchgroup=Delimiter start=":>" end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains= contained keepend
+syn region papp_ph_xint matchgroup=Delimiter start="?>" end="<[:?]"me=e-2 nextgroup=papp_ph_perl contains=@perlInterpDQ contained keepend
+
+" synchronization is horrors!
+syn sync clear
+syn sync match pappSync grouphere papp_CDATAh "</\(perl\|xperl\|phtml\|macro\|module\)>"
+syn sync match pappSync grouphere papp_CDATAh "^# *\(if\|elsif\|else\|endif\)"
+syn sync match pappSync grouphere papp_CDATAh "</\(tr\|td\|table\|hr\|h1\|h2\|h3\)>"
+syn sync match pappSync grouphere NONE "</\=\(module\|state\|macro\)>"
+
+syn sync maxlines=300
+syn sync minlines=5
+
+" The default highlighting.
+
+hi def link papp_prep preCondit
+hi def link papp_gettext String
+
+let b:current_syntax = "papp"
diff --git a/runtime/syntax/pascal.vim b/runtime/syntax/pascal.vim
new file mode 100644
index 000000000..bba198f72
--- /dev/null
+++ b/runtime/syntax/pascal.vim
@@ -0,0 +1,357 @@
+" Vim syntax file
+" Language: Pascal
+" Version: 2.7
+" Last Change: 2003 May 11
+" Maintainer: Xavier Crégut <xavier.cregut@enseeiht.fr>
+" Previous Maintainer: Mario Eusebio <bio@dq.fct.unl.pt>
+
+" Contributors: Tim Chase <tchase@csc.com>, Stas Grabois <stsi@vtrails.com>,
+" Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
+" Klaus Hast <Klaus.Hast@arcor.net>
+
+" 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
+syn sync lines=250
+
+syn keyword pascalBoolean true false
+syn keyword pascalConditional if else then
+syn keyword pascalConstant nil maxint
+syn keyword pascalLabel case goto label
+syn keyword pascalOperator and div downto in mod not of or packed with
+syn keyword pascalRepeat do for do repeat while to until
+syn keyword pascalStatement procedure function
+syn keyword pascalStatement program begin end const var type
+syn keyword pascalStruct record
+syn keyword pascalType array boolean char integer file pointer real set
+syn keyword pascalType string text variant
+
+
+syn keyword pascalTodo contained TODO
+
+
+" String
+if !exists("pascal_one_line_string")
+ syn region pascalString matchgroup=pascalString start=+'+ end=+'+ contains=pascalStringEscape
+ if exists("pascal_gpc")
+ syn region pascalString matchgroup=pascalString start=+"+ end=+"+ contains=pascalStringEscapeGPC
+ else
+ syn region pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ contains=pascalStringEscape
+ endif
+else
+ "wrong strings
+ syn region pascalStringError matchgroup=pascalStringError start=+'+ end=+'+ end=+$+ contains=pascalStringEscape
+ if exists("pascal_gpc")
+ syn region pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscapeGPC
+ else
+ syn region pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscape
+ endif
+
+ "right strings
+ syn region pascalString matchgroup=pascalString start=+'+ end=+'+ oneline contains=pascalStringEscape
+ " To see the start and end of strings:
+ " syn region pascalString matchgroup=pascalStringError start=+'+ end=+'+ oneline contains=pascalStringEscape
+ if exists("pascal_gpc")
+ syn region pascalString matchgroup=pascalString start=+"+ end=+"+ oneline contains=pascalStringEscapeGPC
+ else
+ syn region pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ oneline contains=pascalStringEscape
+ endif
+end
+syn match pascalStringEscape contained "''"
+syn match pascalStringEscapeGPC contained '""'
+
+
+" syn match pascalIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+
+
+if exists("pascal_symbol_operator")
+ syn match pascalSymbolOperator "[+\-/*=]"
+ syn match pascalSymbolOperator "[<>]=\="
+ syn match pascalSymbolOperator "<>"
+ syn match pascalSymbolOperator ":="
+ syn match pascalSymbolOperator "[()]"
+ syn match pascalSymbolOperator "\.\."
+ syn match pascalSymbolOperator "[\^.]"
+ syn match pascalMatrixDelimiter "[][]"
+ "if you prefer you can highlight the range
+ "syn match pascalMatrixDelimiter "[\d\+\.\.\d\+]"
+endif
+
+syn match pascalNumber "-\=\<\d\+\>"
+syn match pascalFloat "-\=\<\d\+\.\d\+\>"
+syn match pascalFloat "-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
+syn match pascalHexNumber "\$[0-9a-fA-F]\+\>"
+
+if exists("pascal_no_tabs")
+ syn match pascalShowTab "\t"
+endif
+
+syn region pascalComment start="(\*" end="\*)" contains=pascalTodo
+syn region pascalComment start="{" end="}" contains=pascalTodo
+
+
+if !exists("pascal_no_functions")
+ " array functions
+ syn keyword pascalFunction pack unpack
+
+ " memory function
+ syn keyword pascalFunction Dispose New
+
+ " math functions
+ syn keyword pascalFunction Abs Arctan Cos Exp Ln Sin Sqr Sqrt
+
+ " file functions
+ syn keyword pascalFunction Eof Eoln Write Writeln
+ syn keyword pascalPredefined Input Output
+
+ if exists("pascal_traditional")
+ " These functions do not seem to be defined in Turbo Pascal
+ syn keyword pascalFunction Get Page Put
+ endif
+
+ " ordinal functions
+ syn keyword pascalFunction Odd Pred Succ
+
+ " transfert functions
+ syn keyword pascalFunction Chr Ord Round Trunc
+endif
+
+
+if !exists("pascal_traditional")
+
+ syn keyword pascalStatement constructor destructor implementation inherited
+ syn keyword pascalStatement interface unit uses
+ syn keyword pascalModifier absolute assembler external far forward inline
+ syn keyword pascalModifier interrupt near virtual
+ syn keyword pascalAcces private public
+ syn keyword pascalStruct object
+ syn keyword pascalOperator shl shr xor
+
+ syn region pascalPreProc start="(\*\$" end="\*)" contains=pascalTodo
+ syn region pascalPreProc start="{\$" end="}"
+
+ syn region pascalAsm matchgroup=pascalAsmKey start="\<asm\>" end="\<end\>" contains=pascalComment,pascalPreProc
+
+ syn keyword pascalType ShortInt LongInt Byte Word
+ syn keyword pascalType ByteBool WordBool LongBool
+ syn keyword pascalType Cardinal LongWord
+ syn keyword pascalType Single Double Extended Comp
+ syn keyword pascalType PChar
+
+
+ if !exists ("pascal_fpc")
+ syn keyword pascalPredefined Result
+ endif
+
+ if exists("pascal_fpc")
+ syn region pascalComment start="//" end="$"
+ syn keyword pascalStatement fail otherwise operator
+ syn keyword pascalDirective popstack
+ syn keyword pascalPredefined self
+ syn keyword pascalType ShortString AnsiString WideString
+ endif
+
+ if exists("pascal_gpc")
+ syn keyword pascalType SmallInt
+ syn keyword pascalType AnsiChar
+ syn keyword pascalType PAnsiChar
+ endif
+
+ if exists("pascal_delphi")
+ syn region pascalComment start="//" end="$" contains=pascalTodo
+ syn keyword pascalType SmallInt Int64
+ syn keyword pascalType Real48 Currency
+ syn keyword pascalType AnsiChar WideChar
+ syn keyword pascalType ShortString AnsiString WideString
+ syn keyword pascalType PAnsiChar PWideChar
+ syn match pascalFloat "-\=\<\d\+\.\d\+[dD]-\=\d\+\>"
+ syn match pascalStringEscape contained "#[12][0-9]\=[0-9]\="
+ syn keyword pascalStruct class dispinterface
+ syn keyword pascalException try except raise at on finally
+ syn keyword pascalStatement out
+ syn keyword pascalStatement library package
+ syn keyword pascalStatement initialization finalization uses exports
+ syn keyword pascalStatement property out resourcestring threadvar
+ syn keyword pascalModifier contains
+ syn keyword pascalModifier overridden reintroduce abstract
+ syn keyword pascalModifier override export dynamic name message
+ syn keyword pascalModifier dispid index stored default nodefault readonly
+ syn keyword pascalModifier writeonly implements overload requires resident
+ syn keyword pascalAcces protected published automated
+ syn keyword pascalDirective register pascal cvar cdecl stdcall safecall
+ syn keyword pascalOperator as is
+ endif
+
+ if exists("pascal_no_functions")
+ "syn keyword pascalModifier read write
+ "may confuse with Read and Write functions. Not easy to handle.
+ else
+ " control flow functions
+ syn keyword pascalFunction Break Continue Exit Halt RunError
+
+ " ordinal functions
+ syn keyword pascalFunction Dec Inc High Low
+
+ " math functions
+ syn keyword pascalFunction Frac Int Pi
+
+ " string functions
+ syn keyword pascalFunction Concat Copy Delete Insert Length Pos Str Val
+
+ " memory function
+ syn keyword pascalFunction FreeMem GetMem MaxAvail MemAvail
+
+ " pointer and address functions
+ syn keyword pascalFunction Addr Assigned CSeg DSeg Ofs Ptr Seg SPtr SSeg
+
+ " misc functions
+ syn keyword pascalFunction Exclude FillChar Hi Include Lo Move ParamCount
+ syn keyword pascalFunction ParamStr Random Randomize SizeOf Swap TypeOf
+ syn keyword pascalFunction UpCase
+
+ " predefined variables
+ syn keyword pascalPredefined ErrorAddr ExitCode ExitProc FileMode FreeList
+ syn keyword pascalPredefined FreeZero HeapEnd HeapError HeapOrg HeapPtr
+ syn keyword pascalPredefined InOutRes OvrCodeList OvrDebugPtr OvrDosHandle
+ syn keyword pascalPredefined OvrEmsHandle OvrHeapEnd OvrHeapOrg OvrHeapPtr
+ syn keyword pascalPredefined OvrHeapSize OvrLoadList PrefixSeg RandSeed
+ syn keyword pascalPredefined SaveInt00 SaveInt02 SaveInt1B SaveInt21
+ syn keyword pascalPredefined SaveInt23 SaveInt24 SaveInt34 SaveInt35
+ syn keyword pascalPredefined SaveInt36 SaveInt37 SaveInt38 SaveInt39
+ syn keyword pascalPredefined SaveInt3A SaveInt3B SaveInt3C SaveInt3D
+ syn keyword pascalPredefined SaveInt3E SaveInt3F SaveInt75 SegA000 SegB000
+ syn keyword pascalPredefined SegB800 SelectorInc StackLimit Test8087
+
+ " file functions
+ syn keyword pascalFunction Append Assign BlockRead BlockWrite ChDir Close
+ syn keyword pascalFunction Erase FilePos FileSize Flush GetDir IOResult
+ syn keyword pascalFunction MkDir Read Readln Rename Reset Rewrite RmDir
+ syn keyword pascalFunction Seek SeekEof SeekEoln SetTextBuf Truncate
+
+ " crt unit
+ syn keyword pascalFunction AssignCrt ClrEol ClrScr Delay DelLine GotoXY
+ syn keyword pascalFunction HighVideo InsLine KeyPressed LowVideo NormVideo
+ syn keyword pascalFunction NoSound ReadKey Sound TextBackground TextColor
+ syn keyword pascalFunction TextMode WhereX WhereY Window
+ syn keyword pascalPredefined CheckBreak CheckEOF CheckSnow DirectVideo
+ syn keyword pascalPredefined LastMode TextAttr WindMin WindMax
+ syn keyword pascalFunction BigCursor CursorOff CursorOn
+ syn keyword pascalConstant Black Blue Green Cyan Red Magenta Brown
+ syn keyword pascalConstant LightGray DarkGray LightBlue LightGreen
+ syn keyword pascalConstant LightCyan LightRed LightMagenta Yellow White
+ syn keyword pascalConstant Blink ScreenWidth ScreenHeight bw40
+ syn keyword pascalConstant co40 bw80 co80 mono
+ syn keyword pascalPredefined TextChar
+
+ " DOS unit
+ syn keyword pascalFunction AddDisk DiskFree DiskSize DosExitCode DosVersion
+ syn keyword pascalFunction EnvCount EnvStr Exec Expand FindClose FindFirst
+ syn keyword pascalFunction FindNext FSearch FSplit GetCBreak GetDate
+ syn keyword pascalFunction GetEnv GetFAttr GetFTime GetIntVec GetTime
+ syn keyword pascalFunction GetVerify Intr Keep MSDos PackTime SetCBreak
+ syn keyword pascalFunction SetDate SetFAttr SetFTime SetIntVec SetTime
+ syn keyword pascalFunction SetVerify SwapVectors UnPackTime
+ syn keyword pascalConstant FCarry FParity FAuxiliary FZero FSign FOverflow
+ syn keyword pascalConstant Hidden Sysfile VolumeId Directory Archive
+ syn keyword pascalConstant AnyFile fmClosed fmInput fmOutput fmInout
+ syn keyword pascalConstant TextRecNameLength TextRecBufSize
+ syn keyword pascalType ComStr PathStr DirStr NameStr ExtStr SearchRec
+ syn keyword pascalType FileRec TextBuf TextRec Registers DateTime
+ syn keyword pascalPredefined DosError
+
+ "Graph Unit
+ syn keyword pascalFunction Arc Bar Bar3D Circle ClearDevice ClearViewPort
+ syn keyword pascalFunction CloseGraph DetectGraph DrawPoly Ellipse
+ syn keyword pascalFunction FillEllipse FillPoly FloodFill GetArcCoords
+ syn keyword pascalFunction GetAspectRatio GetBkColor GetColor
+ syn keyword pascalFunction GetDefaultPalette GetDriverName GetFillPattern
+ syn keyword pascalFunction GetFillSettings GetGraphMode GetImage
+ syn keyword pascalFunction GetLineSettings GetMaxColor GetMaxMode GetMaxX
+ syn keyword pascalFunction GetMaxY GetModeName GetModeRange GetPalette
+ syn keyword pascalFunction GetPaletteSize GetPixel GetTextSettings
+ syn keyword pascalFunction GetViewSettings GetX GetY GraphDefaults
+ syn keyword pascalFunction GraphErrorMsg GraphResult ImageSize InitGraph
+ syn keyword pascalFunction InstallUserDriver InstallUserFont Line LineRel
+ syn keyword pascalFunction LineTo MoveRel MoveTo OutText OutTextXY
+ syn keyword pascalFunction PieSlice PutImage PutPixel Rectangle
+ syn keyword pascalFunction RegisterBGIDriver RegisterBGIFont
+ syn keyword pascalFunction RestoreCRTMode Sector SetActivePage
+ syn keyword pascalFunction SetAllPallette SetAspectRatio SetBkColor
+ syn keyword pascalFunction SetColor SetFillPattern SetFillStyle
+ syn keyword pascalFunction SetGraphBufSize SetGraphMode SetLineStyle
+ syn keyword pascalFunction SetPalette SetRGBPalette SetTextJustify
+ syn keyword pascalFunction SetTextStyle SetUserCharSize SetViewPort
+ syn keyword pascalFunction SetVisualPage SetWriteMode TextHeight TextWidth
+ syn keyword pascalType ArcCoordsType FillPatternType FillSettingsType
+ syn keyword pascalType LineSettingsType PaletteType PointType
+ syn keyword pascalType TextSettingsType ViewPortType
+
+ " string functions
+ syn keyword pascalFunction StrAlloc StrBufSize StrCat StrComp StrCopy
+ syn keyword pascalFunction StrDispose StrECopy StrEnd StrFmt StrIComp
+ syn keyword pascalFunction StrLCat StrLComp StrLCopy StrLen StrLFmt
+ syn keyword pascalFunction StrLIComp StrLower StrMove StrNew StrPas
+ syn keyword pascalFunction StrPCopy StrPLCopy StrPos StrRScan StrScan
+ syn keyword pascalFunction StrUpper
+ endif
+
+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_pascal_syn_inits")
+ if version < 508
+ let did_pascal_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pascalAcces pascalStatement
+ HiLink pascalBoolean Boolean
+ HiLink pascalComment Comment
+ HiLink pascalConditional Conditional
+ HiLink pascalConstant Constant
+ HiLink pascalDelimiter Identifier
+ HiLink pascalDirective pascalStatement
+ HiLink pascalException Exception
+ HiLink pascalFloat Float
+ HiLink pascalFunction Function
+ HiLink pascalLabel Label
+ HiLink pascalMatrixDelimiter Identifier
+ HiLink pascalModifier Type
+ HiLink pascalNumber Number
+ HiLink pascalOperator Operator
+ HiLink pascalPredefined pascalStatement
+ HiLink pascalPreProc PreProc
+ HiLink pascalRepeat Repeat
+ HiLink pascalStatement Statement
+ HiLink pascalString String
+ HiLink pascalStringEscape Special
+ HiLink pascalStringEscapeGPC Special
+ HiLink pascalStringError Error
+ HiLink pascalStruct pascalStatement
+ HiLink pascalSymbolOperator pascalOperator
+ HiLink pascalTodo Todo
+ HiLink pascalType Type
+ HiLink pascalUnclassified pascalStatement
+ " HiLink pascalAsm Assembler
+ HiLink pascalError Error
+ HiLink pascalAsmKey pascalStatement
+ HiLink pascalShowTab Error
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "pascal"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/pcap.vim b/runtime/syntax/pcap.vim
new file mode 100644
index 000000000..17d0d42c0
--- /dev/null
+++ b/runtime/syntax/pcap.vim
@@ -0,0 +1,65 @@
+" Vim syntax file
+" Config file: printcap
+" Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int> (defunct)
+" Modified by Bram
+" Last Change: 2003 May 11
+
+" 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
+
+"define keywords
+if version < 600
+ set isk=@,46-57,_,-,#,=,192-255
+else
+ setlocal isk=@,46-57,_,-,#,=,192-255
+endif
+
+"first all the bad guys
+syn match pcapBad '^.\+$' "define any line as bad
+syn match pcapBadword '\k\+' contained "define any sequence of keywords as bad
+syn match pcapBadword ':' contained "define any single : as bad
+syn match pcapBadword '\\' contained "define any single \ as bad
+"then the good boys
+" Boolean keywords
+syn match pcapKeyword contained ':\(fo\|hl\|ic\|rs\|rw\|sb\|sc\|sf\|sh\)'
+" Numeric Keywords
+syn match pcapKeyword contained ':\(br\|du\|fc\|fs\|mx\|pc\|pl\|pw\|px\|py\|xc\|xs\)#\d\+'
+" String Keywords
+syn match pcapKeyword contained ':\(af\|cf\|df\|ff\|gf\|if\|lf\|lo\|lp\|nd\|nf\|of\|rf\|rg\|rm\|rp\|sd\|st\|tf\|tr\|vf\)=\k*'
+" allow continuation
+syn match pcapEnd ':\\$' contained
+"
+syn match pcapDefineLast '^\s.\+$' contains=pcapBadword,pcapKeyword
+syn match pcapDefine '^\s.\+$' contains=pcapBadword,pcapKeyword,pcapEnd
+syn match pcapHeader '^\k[^|]\+\(|\k[^|]\+\)*:\\$'
+syn match pcapComment "#.*$"
+
+syn sync minlines=50
+
+
+" 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_pcap_syntax_inits")
+ if version < 508
+ let did_pcap_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pcapBad WarningMsg
+ HiLink pcapBadword WarningMsg
+ HiLink pcapComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pcap"
+
+" vim: ts=8
diff --git a/runtime/syntax/pccts.vim b/runtime/syntax/pccts.vim
new file mode 100644
index 000000000..ef5268117
--- /dev/null
+++ b/runtime/syntax/pccts.vim
@@ -0,0 +1,106 @@
+" Vim syntax file
+" Language: PCCTS
+" Maintainer: Scott Bigham <dsb@cs.duke.edu>
+" Last Change: 10 Aug 1999
+
+" 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
+if version < 600
+ syn include @cppTopLevel <sfile>:p:h/cpp.vim
+else
+ syn include @cppTopLevel syntax/cpp.vim
+endif
+
+syn region pcctsAction matchgroup=pcctsDelim start="<<" end=">>?\=" contains=@cppTopLevel,pcctsRuleRef
+
+syn region pcctsArgBlock matchgroup=pcctsDelim start="\(>\s*\)\=\[" end="\]" contains=@cppTopLevel,pcctsRuleRef
+
+syn region pcctsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pcctsSpecialChar
+syn match pcctsSpecialChar "\\\\\|\\\"" contained
+
+syn region pcctsComment start="/\*" end="\*/" contains=cTodo
+syn match pcctsComment "//.*$" contains=cTodo
+
+syn region pcctsDirective start="^\s*#header\s\+<<" end=">>" contains=pcctsAction keepend
+syn match pcctsDirective "^\s*#parser\>.*$" contains=pcctsString,pcctsComment
+syn match pcctsDirective "^\s*#tokdefs\>.*$" contains=pcctsString,pcctsComment
+syn match pcctsDirective "^\s*#token\>.*$" contains=pcctsString,pcctsAction,pcctsTokenName,pcctsComment
+syn region pcctsDirective start="^\s*#tokclass\s\+[A-Z]\i*\s\+{" end="}" contains=pcctsString,pcctsTokenName
+syn match pcctsDirective "^\s*#lexclass\>.*$" contains=pcctsTokenName
+syn region pcctsDirective start="^\s*#errclass\s\+[^{]\+\s\+{" end="}" contains=pcctsString,pcctsTokenName
+syn match pcctsDirective "^\s*#pred\>.*$" contains=pcctsTokenName,pcctsAction
+
+syn cluster pcctsInRule contains=pcctsString,pcctsRuleName,pcctsTokenName,pcctsAction,pcctsArgBlock,pcctsSubRule,pcctsLabel,pcctsComment
+
+syn region pcctsRule start="\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\(\s*>\s*\[[^]]*\]\)\=\s*:" end=";" contains=@pcctsInRule
+
+syn region pcctsSubRule matchgroup=pcctsDelim start="(" end=")\(+\|\*\|?\(\s*=>\)\=\)\=" contains=@pcctsInRule contained
+syn region pcctsSubRule matchgroup=pcctsDelim start="{" end="}" contains=@pcctsInRule contained
+
+syn match pcctsRuleName "\<[a-z]\i*\>" contained
+syn match pcctsTokenName "\<[A-Z]\i*\>" contained
+
+syn match pcctsLabel "\<\I\i*:\I\i*" contained contains=pcctsLabelHack,pcctsRuleName,pcctsTokenName
+syn match pcctsLabel "\<\I\i*:\"\([^\\]\|\\.\)*\"" contained contains=pcctsLabelHack,pcctsString
+syn match pcctsLabelHack "\<\I\i*:" contained
+
+syn match pcctsRuleRef "\$\I\i*\>" contained
+syn match pcctsRuleRef "\$\d\+\(\.\d\+\)\>" contained
+
+syn keyword pcctsClass class nextgroup=pcctsClassName skipwhite
+syn match pcctsClassName "\<\I\i*\>" contained nextgroup=pcctsClassBlock skipwhite skipnl
+syn region pcctsClassBlock start="{" end="}" contained contains=pcctsRule,pcctsComment,pcctsDirective,pcctsAction,pcctsException,pcctsExceptionHandler
+
+syn keyword pcctsException exception nextgroup=pcctsExceptionRuleRef skipwhite
+syn match pcctsExceptionRuleRef "\[\I\i*\]" contained contains=pcctsExceptionID
+syn match pcctsExceptionID "\I\i*" contained
+syn keyword pcctsExceptionHandler catch default
+syn keyword pcctsExceptionHandler NoViableAlt NoSemViableAlt
+syn keyword pcctsExceptionHandler MismatchedToken
+
+syn sync clear
+syn sync match pcctsSyncAction grouphere pcctsAction "<<"
+syn sync match pcctsSyncAction "<<\([^>]\|>[^>]\)*>>"
+syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\s*\[[^]]*\]\s*:"
+syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\s*>\s*\[[^]]*\]\s*:"
+
+" 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_pccts_syntax_inits")
+ if version < 508
+ let did_pccts_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pcctsDelim Special
+ HiLink pcctsTokenName Identifier
+ HiLink pcctsRuleName Statement
+ HiLink pcctsLabelHack Label
+ HiLink pcctsDirective PreProc
+ HiLink pcctsString String
+ HiLink pcctsComment Comment
+ HiLink pcctsClass Statement
+ HiLink pcctsClassName Identifier
+ HiLink pcctsException Statement
+ HiLink pcctsExceptionHandler Keyword
+ HiLink pcctsExceptionRuleRef pcctsDelim
+ HiLink pcctsExceptionID Identifier
+ HiLink pcctsRuleRef Identifier
+ HiLink pcctsSpecialChar SpecialChar
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pccts"
+
+" vim: ts=8
diff --git a/runtime/syntax/perl.vim b/runtime/syntax/perl.vim
new file mode 100644
index 000000000..438872918
--- /dev/null
+++ b/runtime/syntax/perl.vim
@@ -0,0 +1,556 @@
+" Vim syntax file
+" Language: Perl
+" Maintainer: Nick Hibma <n_hibma@van-laarhoven.org>
+" Last Change: 2004 May 16
+" Location: http://www.van-laarhoven.org/vim/syntax/perl.vim
+"
+" Please download most recent version first before mailing
+" any comments.
+" See also the file perl.vim.regression.pl to check whether your
+" modifications work in the most odd cases
+" http://www.van-laarhoven.org/vim/syntax/perl.vim.regression.pl
+"
+" Original version: Sonia Heimann <niania@netsurf.org>
+" Thanks to many people for their contribution.
+
+" The following parameters are available for tuning the
+" perl syntax highlighting, with defaults given:
+"
+" unlet perl_include_pod
+" unlet perl_want_scope_in_variables
+" unlet perl_extended_vars
+" unlet perl_string_as_statement
+" unlet perl_no_sync_on_sub
+" unlet perl_no_sync_on_global_var
+" let perl_sync_dist = 100
+" unlet perl_fold
+" unlet perl_fold_blocks
+
+" Remove any old syntax stuff that was loaded (5.x) or quit when a syntax file
+" was already loaded (6.x).
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Unset perl_fold if it set but vim doesn't support it.
+if version < 600 && exists("perl_fold")
+ unlet perl_fold
+endif
+
+
+" POD starts with ^=<word> and ends with ^=cut
+
+if exists("perl_include_pod")
+ " 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,perlTodo keepend fold
+ syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
+ else
+ syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,perlTodo keepend
+ syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
+ endif
+else
+ " Use only the bare minimum of rules
+ if exists("perl_fold")
+ syn region perlPOD start="^=[a-z]" end="^=cut" fold
+ else
+ syn region perlPOD start="^=[a-z]" end="^=cut"
+ endif
+endif
+
+
+" All keywords
+"
+if exists("perl_fold") && exists("perl_fold_blocks")
+ syn match perlConditional "\<if\>"
+ syn match perlConditional "\<elsif\>"
+ syn match perlConditional "\<unless\>"
+ syn match perlConditional "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
+else
+ syn keyword perlConditional if elsif unless
+ syn keyword perlConditional else nextgroup=perlElseIfError skipwhite skipnl skipempty
+endif
+syn keyword perlConditional switch eq ne gt lt ge le cmp not and or xor err
+if exists("perl_fold") && exists("perl_fold_blocks")
+ syn match perlRepeat "\<while\>"
+ syn match perlRepeat "\<for\>"
+ syn match perlRepeat "\<foreach\>"
+ syn match perlRepeat "\<do\>"
+ syn match perlRepeat "\<until\>"
+ syn match perlRepeat "\<continue\>"
+else
+ syn keyword perlRepeat while for foreach do until continue
+endif
+syn keyword perlOperator defined undef and or not bless ref
+if exists("perl_fold")
+ " if BEGIN/END is a keyword the perlBEGINENDFold does not work
+ syn match perlControl "\<BEGIN\>" contained
+ syn match perlControl "\<END\>" contained
+else
+ syn keyword perlControl BEGIN END
+endif
+
+syn keyword perlStatementStorage my local our
+syn keyword perlStatementControl goto return last next redo
+syn keyword perlStatementScalar chomp chop chr crypt index lc lcfirst length ord pack reverse rindex sprintf substr uc ucfirst
+syn keyword perlStatementRegexp pos quotemeta split study
+syn keyword perlStatementNumeric abs atan2 cos exp hex int log oct rand sin sqrt srand
+syn keyword perlStatementList splice unshift shift push pop split join reverse grep map sort unpack
+syn keyword perlStatementHash each exists keys values tie tied untie
+syn keyword perlStatementIOfunc carp confess croak dbmclose dbmopen die syscall
+syn keyword perlStatementFiledesc binmode close closedir eof fileno getc lstat print printf readdir readline readpipe rewinddir select stat tell telldir write nextgroup=perlFiledescStatementNocomma skipwhite
+syn keyword perlStatementFiledesc fcntl flock ioctl open opendir read seek seekdir sysopen sysread sysseek syswrite truncate nextgroup=perlFiledescStatementComma skipwhite
+syn keyword perlStatementVector pack vec
+syn keyword perlStatementFiles chdir chmod chown chroot glob link mkdir readlink rename rmdir symlink umask unlink utime
+syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
+syn keyword perlStatementFlow caller die dump eval exit wantarray
+syn keyword perlStatementInclude require
+syn match perlStatementInclude "\(use\|no\)\s\+\(integer\>\|strict\>\|lib\>\|sigtrap\>\|subs\>\|vars\>\|warnings\>\|utf8\>\|byte\>\)\="
+syn keyword perlStatementScope import
+syn keyword perlStatementProc alarm exec fork getpgrp getppid getpriority kill pipe setpgrp setpriority sleep system times wait waitpid
+syn keyword perlStatementSocket accept bind connect getpeername getsockname getsockopt listen recv send setsockopt shutdown socket socketpair
+syn keyword perlStatementIPC msgctl msgget msgrcv msgsnd semctl semget semop shmctl shmget shmread shmwrite
+syn keyword perlStatementNetwork endhostent endnetent endprotoent endservent gethostbyaddr gethostbyname gethostent getnetbyaddr getnetbyname getnetent getprotobyname getprotobynumber getprotoent getservbyname getservbyport getservent sethostent setnetent setprotoent setservent
+syn keyword perlStatementPword getpwuid getpwnam getpwent setpwent endpwent getgrent getgrgid getlogin getgrnam setgrent endgrent
+syn keyword perlStatementTime gmtime localtime time times
+
+syn keyword perlStatementMisc warn formline reset scalar delete prototype lock
+syn keyword perlStatementNew new
+
+syn keyword perlTodo TODO TBD FIXME XXX contained
+
+" Perl Identifiers.
+"
+" Should be cleaned up to better handle identifiers in particular situations
+" (in hash keys for example)
+"
+" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
+" We do not process complex things such as @{${"foo"}}. Too complicated, and
+" too slow. And what is after the -> is *not* considered as part of the
+" variable - there again, too complicated and too slow.
+
+" Special variables first ($^A, ...) and ($|, $', ...)
+syn match perlVarPlain "$^[ADEFHILMOPSTWX]\="
+syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@$<>(-]"
+syn match perlVarPlain "$\(0\|[1-9][0-9]*\)"
+" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
+syn match perlVarPlain "$:[^:]"
+" These variables are not recognized within matches.
+syn match perlVarNotInMatches "$[|)]"
+" This variable is not recognized within matches delimited by m//.
+syn match perlVarSlash "$/"
+
+" And plain identifiers
+syn match perlPackageRef "\(\h\w*\)\=\(::\|'\)\I"me=e-1 contained
+
+" To highlight packages in variables as a scope reference - i.e. in $pack::var,
+" pack:: is a scope, just set "perl_want_scope_in_variables"
+" If you *want* complex things like @{${"foo"}} to be processed,
+" just set the variable "perl_extended_vars"...
+
+" FIXME value between {} should be marked as string. is treated as such by Perl.
+" At the moment it is marked as something greyish instead of read. Probably todo
+" with transparency. Or maybe we should handle the bare word in that case. or make it into
+
+if exists("perl_want_scope_in_variables")
+ syn match perlVarPlain "\\\=\([@%$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+ syn match perlFunctionName "\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember
+else
+ syn match perlVarPlain "\\\=\([@%$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+ syn match perlFunctionName "\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember
+endif
+
+if exists("perl_extended_vars")
+ syn cluster perlExpr contains=perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ
+ syn region perlVarBlock matchgroup=perlVarPlain start="\($#\|[@%$]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
+ syn region perlVarBlock matchgroup=perlVarPlain start="&\$*{" skip="\\}" end="}" contains=@perlExpr
+ syn match perlVarPlain "\\\=\(\$#\|[@%&$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember
+ syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
+ syn match perlVarSimpleMember "\(->\)\={\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember contains=perlVarSimpleMemberName contained
+ syn match perlVarSimpleMemberName "\I\i*" contained
+ syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
+ syn match perlMethod "\(->\)\I\i*" contained
+endif
+
+" File Descriptors
+syn match perlFiledescRead "[<]\h\w\+[>]"
+
+syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement
+syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
+
+syn match perlFiledescStatement "\u\w*" contained
+
+" Special characters in strings and matches
+syn match perlSpecialString "\\\(\d\+\|[xX]\x\+\|c\u\|.\)" contained
+syn match perlSpecialStringU "\\['\\]" contained
+syn match perlSpecialMatch "{\d\(,\d\)\=}" contained
+syn match perlSpecialMatch "\[\(\]\|-\)\=[^\[\]]*\(\[\|\-\)\=\]" contained
+syn match perlSpecialMatch "[+*()?.]" contained
+syn match perlSpecialMatch "(?[#:=!]" contained
+syn match perlSpecialMatch "(?[imsx]\+)" contained
+" FIXME the line below does not work. It should mark end of line and
+" begin of line as perlSpecial.
+" syn match perlSpecialBEOM "^\^\|\$$" contained
+
+" Possible errors
+"
+" Highlight lines with only whitespace (only in blank delimited here documents) as errors
+syn match perlNotEmptyLine "^\s\+$" contained
+" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
+" '} elsif (...) {'.
+"syn keyword perlElseIfError if contained
+
+" Variable interpolation
+"
+" These items are interpolated inside "" strings and similar constructs.
+syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
+" These items are interpolated inside '' strings and similar constructs.
+syn cluster perlInterpSQ contains=perlSpecialStringU
+" These items are interpolated inside m// matches and s/// substitutions.
+syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock,perlSpecialBEOM
+" These items are interpolated inside m## matches and s### substitutions.
+syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
+
+" Shell commands
+syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ
+
+" Constants
+"
+" Numbers
+syn match perlNumber "[-+]\=\(\<\d[[:digit:]_]*L\=\>\|0[xX]\x[[:xdigit:]_]*\>\)"
+syn match perlFloat "[-+]\=\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
+syn match perlFloat "[-+]\=\<\d[[:digit:]_]*\.[[:digit:]_]*\([eE][\-+]\=\d\+\)\="
+syn match perlFloat "[-+]\=\<\.[[:digit:]_]\+\([eE][\-+]\=\d\+\)\="
+
+
+" Simple version of searches and matches
+" caters for m//, m##, m{} and m[] (and the !/ variant)
+syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]#+ end=+#[cgimosx]*+ contains=@perlInterpMatch
+syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]{+ end=+}[cgimosx]*+ contains=@perlInterpMatch
+syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]\[+ end=+\][cgimosx]*+ contains=@perlInterpMatch
+
+" A special case for m!!x which allows for comments and extra whitespace in the pattern
+syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]!+ end=+![cgimosx]*+ contains=@perlInterpSlash,perlComment
+
+" 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 /+lc=5 start=+[^$@%]\<split /+lc=6 start=+^if /+lc=2 start=+[^$@%]if /+lc=3 start=+[!=]\~\s*/+lc=2 start=+[(~]/+lc=1 start=+\.\./+lc=2 start=+\s/[^= \t0-9$@%]+lc=1,me=e-1,rs=e-1 start=+^/+ skip=+\\/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+^split /+lc=5 start=+[^$@%]\<split /+lc=6 start=+^while /+lc=5 start=+[^$@%]while /+lc=6 start=+^if /+lc=2 start=+[^$@%]if /+lc=3 start=+[!=]\~\s*/+lc=2 start=+[(~]/+lc=1 start=+\.\./+lc=2 start=+\s/[^= \t0-9$@%]+lc=1,me=e-1,rs=e-1 start=+^/+ skip=+\\/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
+
+
+" Substitutions
+" caters for s///, s### and s[][]
+" perlMatch is the first part, perlSubstitution* is the substitution part
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s"+ end=+"+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionDQ
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionSlash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionHash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s\[+ end=+\]+ contains=@perlInterpMatch nextgroup=perlSubstitutionBracket skipwhite skipempty skipnl
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s{+ end=+}+ contains=@perlInterpMatch nextgroup=perlSubstitutionCurly skipwhite skipempty skipnl
+syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[ecgimosx]*+ contained contains=@perlInterpSQ
+syn region perlSubstitutionDQ matchgroup=perlMatchStartEnd start=+"+ end=+"[ecgimosx]*+ contained contains=@perlInterpDQ
+syn region perlSubstitutionSlash matchgroup=perlMatchStartEnd start=+/+ end=+/[ecgimosx]*+ contained contains=@perlInterpDQ
+syn region perlSubstitutionHash matchgroup=perlMatchStartEnd start=+#+ end=+#[ecgimosx]*+ contained contains=@perlInterpDQ
+syn region perlSubstitutionBracket matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimosx]*+ contained contains=@perlInterpDQ
+syn region perlSubstitutionCurly matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimosx]*+ contained contains=@perlInterpDQ
+
+" A special case for m!!x which allows for comments and extra whitespace in the pattern
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s!+ end=+!+me=e-1 contains=@perlInterpSlash,perlComment nextgroup=perlSubstitutionPling
+syn region perlSubstitutionPling matchgroup=perlMatchStartEnd start=+!+ end=+![ecgimosx]*+ contained contains=@perlInterpDQ
+
+" Substitutions
+" caters for tr///, tr### and tr[][]
+" perlMatch is the first part, perlTranslation* is the second, translator part.
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSQ
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)"+ end=+"+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationDQ
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)/+ end=+/+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSlash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationHash
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)\[+ end=+\]+ contains=@perlInterpSQ nextgroup=perlTranslationBracket skipwhite skipempty skipnl
+syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\){+ end=+}+ contains=@perlInterpSQ nextgroup=perlTranslationCurly skipwhite skipempty skipnl
+syn region perlTranslationSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[cds]*+ contained
+syn region perlTranslationDQ matchgroup=perlMatchStartEnd start=+"+ end=+"[cds]*+ contained
+syn region perlTranslationSlash matchgroup=perlMatchStartEnd start=+/+ end=+/[cds]*+ contained
+syn region perlTranslationHash matchgroup=perlMatchStartEnd start=+#+ end=+#[cds]*+ contained
+syn region perlTranslationBracket matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contained
+syn region perlTranslationCurly matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contained
+
+
+" The => operator forces a bareword to the left of it to be interpreted as
+" a string
+syn match perlString "\<\I\i*\s*=>"me=e-2
+
+" Strings and q, qq, qw and qr expressions
+
+" Brackets in qq()
+syn region perlBrackets start=+(+ end=+)+ contained transparent contains=perlBrackets,@perlStringSQ
+
+syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ
+syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q#+ end=+#+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q|+ end=+|+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q(+ end=+)+ contains=@perlInterpSQ,perlBrackets
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q{+ end=+}+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q/+ end=+/+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]#+ end=+#+ contains=@perlInterpDQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]|+ end=+|+ contains=@perlInterpDQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx](+ end=+)+ contains=@perlInterpDQ,perlBrackets
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]{+ end=+}+ contains=@perlInterpDQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]/+ end=+/+ contains=@perlInterpDQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw#+ end=+#+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw|+ end=+|+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw(+ end=+)+ contains=@perlInterpSQ,perlBrackets
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw{+ end=+}+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw/+ end=+/+ contains=@perlInterpSQ
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr#+ end=+#[imosx]*+ contains=@perlInterpMatch
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr|+ end=+|[imosx]*+ contains=@perlInterpMatch
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr(+ end=+)[imosx]*+ contains=@perlInterpMatch
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr{+ end=+}[imosx]*+ contains=@perlInterpMatch
+syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr/+ end=+/[imosx]*+ contains=@perlInterpSlash
+
+" Constructs such as print <<EOF [...] EOF, 'here' documents
+"
+if version >= 600
+ " XXX Any statements after the identifier are in perlString colour (i.e.
+ " 'if $a' in 'print <<EOF if $a').
+ 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=+<<['"]\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)['"]+ end=+^\z1$+ contains=ALL fold
+ else
+ 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
+ syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine
+ syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\(['"]\|\)\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
+ endif
+else
+ syn match perlUntilEOFStart "<<EOF.*"lc=5 nextgroup=perlUntilEOFDQ skipnl transparent
+ syn match perlUntilEOFStart "<<\s*\"EOF\".*" nextgroup=perlUntilEOFDQ skipnl transparent
+ syn match perlUntilEOFStart "<<\s*'EOF'.*" nextgroup=perlUntilEOFSQ skipnl transparent
+ syn match perlUntilEOFStart "<<\s*\"\".*" nextgroup=perlUntilEmptyDQ skipnl transparent
+ syn match perlUntilEOFStart "<<\s*''.*" nextgroup=perlUntilEmptySQ skipnl transparent
+ syn region perlUntilEOFDQ matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpDQ contained
+ syn region perlUntilEOFSQ matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpSQ contained
+ syn region perlUntilEmptySQ matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpDQ,perlNotEmptyLine contained
+ syn region perlUntilEmptyDQ matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpSQ,perlNotEmptyLine contained
+ syn match perlHereIdentifier "<<EOF"
+ syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\(['"]\|\)\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)$+ contains=ALL
+endif
+
+
+" Class declarations
+"
+syn match perlPackageDecl "^\s*\<package\s\+\S\+" contains=perlStatementPackage
+syn keyword perlStatementPackage package contained
+
+" Functions
+" sub [name] [(prototype)] {
+"
+syn region perlFunction start="\s*\<sub\>" end="[;{]"he=e-1 contains=perlStatementSub,perlFunctionPrototype,perlFunctionPRef,perlFunctionName,perlComment
+syn keyword perlStatementSub sub contained
+
+syn match perlFunctionPrototype "([^)]*)" contained
+if exists("perl_want_scope_in_variables")
+ syn match perlFunctionPRef "\h\w*::" contained
+ syn match perlFunctionName "\h\w*[^:]" contained
+else
+ syn match perlFunctionName "\h[[:alnum:]_:]*" contained
+endif
+
+
+" All other # are comments, except ^#!
+syn match perlComment "#.*" contains=perlTodo
+syn match perlSharpBang "^#!.*"
+
+" Formats
+syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain
+syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
+syn match perlFormatField "[@^][|<>~]\+\(\.\.\.\)\=" contained
+syn match perlFormatField "[@^]#[#.]*" contained
+syn match perlFormatField "@\*" contained
+syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
+syn match perlFormatField "@$" contained
+
+" __END__ and __DATA__ clauses
+if exists("perl_fold")
+ syntax region perlDATA start="^__\(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
+else
+ syntax region perlDATA start="^__\(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
+endif
+
+
+"
+" Folding
+
+if exists("perl_fold")
+ syn region perlPackageFold start="^package \S\+;$" end="^1;$" end="\n\+package"me=s-1 transparent fold keepend
+ syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*$" end="^\z1}\s*\#.*$" transparent fold keepend
+ syn region perlBEGINENDFold start="^\z(\s*\)\<\(BEGIN\|END\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+
+ if exists("perl_fold_blocks")
+ syn region perlIfFold start="^\z(\s*\)\(if\|unless\|for\|while\|until\)\s*(.*)\s*{\s*$" start="^\z(\s*\)foreach\s*\(\(my\|our\)\=\s*\S\+\s*\)\=(.*)\s*{\s*$" end="^\z1}\s*;\=$" transparent fold keepend
+ syn region perlIfFold start="^\z(\s*\)do\s*{\s*$" end="^\z1}\s*while" end="^\z1}\s*;\=$" transparent fold keepend
+ endif
+
+ setlocal foldmethod=syntax
+ syn sync fromstart
+else
+ " fromstart above seems to set minlines even if perl_fold is not set.
+ syn sync minlines=0
+endif
+
+
+if version >= 508 || !exists("did_perl_syn_inits")
+ if version < 508
+ let did_perl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink perlSharpBang PreProc
+ HiLink perlControl PreProc
+ HiLink perlInclude Include
+ HiLink perlSpecial Special
+ HiLink perlString String
+ HiLink perlCharacter Character
+ HiLink perlNumber Number
+ HiLink perlFloat Float
+ HiLink perlType Type
+ HiLink perlIdentifier Identifier
+ HiLink perlLabel Label
+ HiLink perlStatement Statement
+ HiLink perlConditional Conditional
+ HiLink perlRepeat Repeat
+ HiLink perlOperator Operator
+ HiLink perlFunction Function
+ HiLink perlFunctionPrototype perlFunction
+ HiLink perlComment Comment
+ HiLink perlTodo Todo
+ if exists("perl_string_as_statement")
+ HiLink perlStringStartEnd perlStatement
+ else
+ HiLink perlStringStartEnd perlString
+ endif
+ HiLink perlList perlStatement
+ HiLink perlMisc perlStatement
+ HiLink perlVarPlain perlIdentifier
+ HiLink perlFiledescRead perlIdentifier
+ HiLink perlFiledescStatement perlIdentifier
+ HiLink perlVarSimpleMember perlIdentifier
+ HiLink perlVarSimpleMemberName perlString
+ HiLink perlVarNotInMatches perlIdentifier
+ HiLink perlVarSlash perlIdentifier
+ HiLink perlQQ perlString
+ if version >= 600
+ HiLink perlHereDoc perlString
+ else
+ HiLink perlHereIdentifier perlStringStartEnd
+ HiLink perlUntilEOFDQ perlString
+ HiLink perlUntilEOFSQ perlString
+ HiLink perlUntilEmptyDQ perlString
+ HiLink perlUntilEmptySQ perlString
+ HiLink perlUntilEOF perlString
+ endif
+ HiLink perlStringUnexpanded perlString
+ HiLink perlSubstitutionSQ perlString
+ HiLink perlSubstitutionDQ perlString
+ HiLink perlSubstitutionSlash perlString
+ HiLink perlSubstitutionHash perlString
+ HiLink perlSubstitutionBracket perlString
+ HiLink perlSubstitutionCurly perlString
+ HiLink perlSubstitutionPling perlString
+ HiLink perlTranslationSlash perlString
+ HiLink perlTranslationHash perlString
+ HiLink perlTranslationBracket perlString
+ HiLink perlTranslationCurly perlString
+ HiLink perlMatch perlString
+ HiLink perlMatchStartEnd perlStatement
+ HiLink perlFormatName perlIdentifier
+ HiLink perlFormatField perlString
+ HiLink perlPackageDecl perlType
+ HiLink perlStorageClass perlType
+ HiLink perlPackageRef perlType
+ HiLink perlStatementPackage perlStatement
+ HiLink perlStatementSub perlStatement
+ HiLink perlStatementStorage perlStatement
+ HiLink perlStatementControl perlStatement
+ HiLink perlStatementScalar perlStatement
+ HiLink perlStatementRegexp perlStatement
+ HiLink perlStatementNumeric perlStatement
+ HiLink perlStatementList perlStatement
+ HiLink perlStatementHash perlStatement
+ HiLink perlStatementIOfunc perlStatement
+ HiLink perlStatementFiledesc perlStatement
+ HiLink perlStatementVector perlStatement
+ HiLink perlStatementFiles perlStatement
+ HiLink perlStatementFlow perlStatement
+ HiLink perlStatementScope perlStatement
+ HiLink perlStatementInclude perlStatement
+ HiLink perlStatementProc perlStatement
+ HiLink perlStatementSocket perlStatement
+ HiLink perlStatementIPC perlStatement
+ HiLink perlStatementNetwork perlStatement
+ HiLink perlStatementPword perlStatement
+ HiLink perlStatementTime perlStatement
+ HiLink perlStatementMisc perlStatement
+ HiLink perlStatementNew perlStatement
+ HiLink perlFunctionName perlIdentifier
+ HiLink perlMethod perlIdentifier
+ HiLink perlFunctionPRef perlType
+ HiLink perlPOD perlComment
+ HiLink perlShellCommand perlString
+ HiLink perlSpecialAscii perlSpecial
+ HiLink perlSpecialDollar perlSpecial
+ HiLink perlSpecialString perlSpecial
+ HiLink perlSpecialStringU perlSpecial
+ HiLink perlSpecialMatch perlSpecial
+ HiLink perlSpecialBEOM perlSpecial
+ HiLink perlDATA perlComment
+
+ HiLink perlBrackets Error
+
+ " Possible errors
+ HiLink perlNotEmptyLine Error
+ HiLink perlElseIfError Error
+
+ delcommand HiLink
+endif
+
+" Syncing to speed up processing
+"
+if !exists("perl_no_sync_on_sub")
+ syn sync match perlSync grouphere NONE "^\s*\<package\s"
+ syn sync match perlSync grouphere perlFunction "^\s*\<sub\s"
+ syn sync match perlSync grouphere NONE "^}"
+endif
+
+if !exists("perl_no_sync_on_global_var")
+ syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
+ syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
+endif
+
+if exists("perl_sync_dist")
+ execute "syn sync maxlines=" . perl_sync_dist
+else
+ syn sync maxlines=100
+endif
+
+syn sync match perlSyncPOD grouphere perlPOD "^=pod"
+syn sync match perlSyncPOD grouphere perlPOD "^=head"
+syn sync match perlSyncPOD grouphere perlPOD "^=item"
+syn sync match perlSyncPOD grouphere NONE "^=cut"
+
+let b:current_syntax = "perl"
+
+" vim: ts=8
diff --git a/runtime/syntax/pf.vim b/runtime/syntax/pf.vim
new file mode 100644
index 000000000..394cfb3e4
--- /dev/null
+++ b/runtime/syntax/pf.vim
@@ -0,0 +1,75 @@
+" pf syntax file
+" Language: OpenBSD packet filter configuration (pf.conf)
+" Maintainer: Camiel Dobbelaar <cd@sentia.nl>
+" Last Change: 2003 May 27
+
+" 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
+
+setlocal foldmethod=syntax
+syn sync fromstart
+
+syn cluster pfNotLS contains=pfComment,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
+syn keyword pfService imap irc isakmp kerberos mail nameserver nfs
+syn keyword pfService nntp ntp pop3 portmap pptp rpcbind rsync smtp
+syn keyword pfService snmp snmptrap socks ssh sunrpc syslog telnet
+syn keyword pfService tftp www
+syn keyword pfTodo TODO XXX contained
+syn keyword pfWildAddr all any
+syn match pfCmd /block\s/
+syn match pfComment /#.*$/ contains=pfTodo
+syn match pfCont /\\$/
+syn match pfErrClose /}/
+syn match pfIPv4 /\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+syn match pfIPv6 /[a-fA-F0-9:]*::[a-fA-F0-9:.]*/
+syn match pfIPv6 /[a-fA-F0-9:]\+:[a-fA-F0-9:]\+:[a-fA-F0-9:.]\+/
+syn match pfNetmask /\/\d\+/
+syn match pfNum /[a-zA-Z0-9_:.]\@<!\d\+[a-zA-Z0-9_:.]\@!/
+syn match pfTable /<\s*[a-zA-Z][a-zA-Z0-9_]*\s*>/
+syn match pfVar /$[a-zA-Z][a-zA-Z0-9_]*/
+syn match pfVarAssign /^\s*[a-zA-Z][a-zA-Z0-9_]*\s*=/me=e-1
+syn region pfFold1 start=/^#\{1}>/ end=/^#\{1,3}>/me=s-1 transparent fold
+syn region pfFold2 start=/^#\{2}>/ end=/^#\{2,3}>/me=s-1 transparent fold
+syn region pfFold3 start=/^#\{3}>/ end=/^#\{3}>/me=s-1 transparent fold
+syn region pfList start=/{/ end=/}/ transparent contains=ALLBUT,pfErrClose,@pfNotLS
+syn region pfString start=/"/ end=/"/ transparent contains=ALLBUT,pfString,@pfNotLS
+syn region pfString start=/'/ end=/'/ transparent contains=ALLBUT,pfString,@pfNotLS
+
+" 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_c_syn_inits")
+ if version < 508
+ let did_c_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pfCmd Statement
+ HiLink pfComment Comment
+ HiLink pfCont Statement
+ HiLink pfErrClose Error
+ HiLink pfIPv4 Type
+ HiLink pfIPv6 Type
+ HiLink pfNetmask Constant
+ HiLink pfNum Constant
+ HiLink pfService Constant
+ HiLink pfTable Identifier
+ HiLink pfTodo Todo
+ HiLink pfVar Identifier
+ HiLink pfVarAssign Identifier
+ HiLink pfWildAddr Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pf"
diff --git a/runtime/syntax/pfmain.vim b/runtime/syntax/pfmain.vim
new file mode 100644
index 000000000..0c36d7f33
--- /dev/null
+++ b/runtime/syntax/pfmain.vim
@@ -0,0 +1,858 @@
+" Vim syntax file
+" Language: Postfix main.cf configuration
+" Maintainer: KELEMEN Peter <Peter dot Kelemen at cern dot ch>
+" Last Change: 2004 Jun 01
+" Version: 0.12
+" URL: http://cern.ch/fuji/vim/syntax/pfmain.vim
+" Comment: Based on Postfix 2.1.1 defaults. (+TLS)
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,-
+else
+ set iskeyword=@,48-57,_,-
+endif
+
+syntax case match
+syntax sync minlines=1
+
+syntax keyword pfmainConf 2bounce_notice_recipient
+syntax keyword pfmainConf access_map_reject_code
+syntax keyword pfmainConf address_verify_default_transport
+syntax keyword pfmainConf address_verify_local_transport
+syntax keyword pfmainConf address_verify_map
+syntax keyword pfmainConf address_verify_negative_cache
+syntax keyword pfmainConf address_verify_negative_expire_time
+syntax keyword pfmainConf address_verify_negative_refresh_time
+syntax keyword pfmainConf address_verify_poll_count
+syntax keyword pfmainConf address_verify_poll_delay
+syntax keyword pfmainConf address_verify_positive_expire_time
+syntax keyword pfmainConf address_verify_positive_refresh_time
+syntax keyword pfmainConf address_verify_relay_transport
+syntax keyword pfmainConf address_verify_relayhost
+syntax keyword pfmainConf address_verify_sender
+syntax keyword pfmainConf address_verify_service_name
+syntax keyword pfmainConf address_verify_transport_maps
+syntax keyword pfmainConf address_verify_virtual_transport
+syntax keyword pfmainConf alias_database
+syntax keyword pfmainConf alias_maps
+syntax keyword pfmainConf allow_mail_to_commands
+syntax keyword pfmainConf allow_mail_to_files
+syntax keyword pfmainConf allow_min_user
+syntax keyword pfmainConf allow_percent_hack
+syntax keyword pfmainConf allow_untrusted_routing
+syntax keyword pfmainConf alternate_config_directories
+syntax keyword pfmainConf always_bcc
+syntax keyword pfmainConf append_at_myorigin
+syntax keyword pfmainConf append_dot_mydomain
+syntax keyword pfmainConf application_event_drain_time
+syntax keyword pfmainConf backwards_bounce_logfile_compatibility
+syntax keyword pfmainConf berkeley_db_create_buffer_size
+syntax keyword pfmainConf berkeley_db_read_buffer_size
+syntax keyword pfmainConf best_mx_transport
+syntax keyword pfmainConf biff
+syntax keyword pfmainConf body_checks
+syntax keyword pfmainConf body_checks_size_limit
+syntax keyword pfmainConf bounce_notice_recipient
+syntax keyword pfmainConf bounce_queue_lifetime
+syntax keyword pfmainConf bounce_service_name
+syntax keyword pfmainConf bounce_size_limit
+syntax keyword pfmainConf broken_sasl_auth_clients
+syntax keyword pfmainConf canonical_maps
+syntax keyword pfmainConf cleanup_service_name
+syntax keyword pfmainConf command_directory
+syntax keyword pfmainConf command_expansion_filter
+syntax keyword pfmainConf command_time_limit
+syntax keyword pfmainConf config_directory
+syntax keyword pfmainConf content_filter
+syntax keyword pfmainConf daemon_directory
+syntax keyword pfmainConf daemon_timeout
+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_limit
+syntax keyword pfmainConf default_destination_recipient_limit
+syntax keyword pfmainConf default_extra_recipient_limit
+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_transport
+syntax keyword pfmainConf default_verp_delimiters
+syntax keyword pfmainConf defer_code
+syntax keyword pfmainConf defer_service_name
+syntax keyword pfmainConf defer_transports
+syntax keyword pfmainConf delay_notice_recipient
+syntax keyword pfmainConf delay_warning_time
+syntax keyword pfmainConf deliver_lock_attempts
+syntax keyword pfmainConf deliver_lock_delay
+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 dont_remove
+syntax keyword pfmainConf double_bounce_sender
+syntax keyword pfmainConf duplicate_filter_limit
+syntax keyword pfmainConf empty_address_recipient
+syntax keyword pfmainConf enable_errors_to
+syntax keyword pfmainConf enable_original_recipient
+syntax keyword pfmainConf error_notice_recipient
+syntax keyword pfmainConf error_service_name
+syntax keyword pfmainConf expand_owner_alias
+syntax keyword pfmainConf export_environment
+syntax keyword pfmainConf fallback_relay
+syntax keyword pfmainConf fallback_transport
+syntax keyword pfmainConf fast_flush_domains
+syntax keyword pfmainConf fast_flush_purge_time
+syntax keyword pfmainConf fast_flush_refresh_time
+syntax keyword pfmainConf fault_injection_code
+syntax keyword pfmainConf flush_service_name
+syntax keyword pfmainConf fork_attempts
+syntax keyword pfmainConf fork_delay
+syntax keyword pfmainConf forward_expansion_filter
+syntax keyword pfmainConf forward_path
+syntax keyword pfmainConf hash_queue_depth
+syntax keyword pfmainConf hash_queue_names
+syntax keyword pfmainConf header_address_token_limit
+syntax keyword pfmainConf header_checks
+syntax keyword pfmainConf header_size_limit
+syntax keyword pfmainConf helpful_warnings
+syntax keyword pfmainConf home_mailbox
+syntax keyword pfmainConf hopcount_limit
+syntax keyword pfmainConf html_directory
+syntax keyword pfmainConf ignore_mx_lookup_error
+syntax keyword pfmainConf import_environment
+syntax keyword pfmainConf in_flow_delay
+syntax keyword pfmainConf inet_interfaces
+syntax keyword pfmainConf initial_destination_concurrency
+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_cache_connection
+syntax keyword pfmainConf lmtp_connect_timeout
+syntax keyword pfmainConf lmtp_data_done_timeout
+syntax keyword pfmainConf lmtp_data_init_timeout
+syntax keyword pfmainConf lmtp_data_xfer_timeout
+syntax keyword pfmainConf lmtp_destination_concurrency_limit
+syntax keyword pfmainConf lmtp_destination_recipient_limit
+syntax keyword pfmainConf lmtp_lhlo_timeout
+syntax keyword pfmainConf lmtp_mail_timeout
+syntax keyword pfmainConf lmtp_quit_timeout
+syntax keyword pfmainConf lmtp_rcpt_timeout
+syntax keyword pfmainConf lmtp_rset_timeout
+syntax keyword pfmainConf lmtp_sasl_auth_enable
+syntax keyword pfmainConf lmtp_sasl_password_maps
+syntax keyword pfmainConf lmtp_sasl_security_options
+syntax keyword pfmainConf lmtp_send_xforward_command
+syntax keyword pfmainConf lmtp_skip_quit_response
+syntax keyword pfmainConf lmtp_tcp_port
+syntax keyword pfmainConf lmtp_xforward_timeout
+syntax keyword pfmainConf local_command_shell
+syntax keyword pfmainConf local_destination_concurrency_limit
+syntax keyword pfmainConf local_destination_recipient_limit
+syntax keyword pfmainConf local_recipient_maps
+syntax keyword pfmainConf local_transport
+syntax keyword pfmainConf luser_relay
+syntax keyword pfmainConf mail_name
+syntax keyword pfmainConf mail_owner
+syntax keyword pfmainConf mail_release_date
+syntax keyword pfmainConf mail_spool_directory
+syntax keyword pfmainConf mail_version
+syntax keyword pfmainConf mailbox_command
+syntax keyword pfmainConf mailbox_command_maps
+syntax keyword pfmainConf mailbox_delivery_lock
+syntax keyword pfmainConf mailbox_size_limit
+syntax keyword pfmainConf mailbox_transport
+syntax keyword pfmainConf mailq_path
+syntax keyword pfmainConf manpage_directory
+syntax keyword pfmainConf maps_rbl_domains
+syntax keyword pfmainConf maps_rbl_reject_code
+syntax keyword pfmainConf masquerade_classes
+syntax keyword pfmainConf masquerade_domains
+syntax keyword pfmainConf masquerade_exceptions
+syntax keyword pfmainConf max_idle
+syntax keyword pfmainConf max_use
+syntax keyword pfmainConf maximal_backoff_time
+syntax keyword pfmainConf maximal_queue_lifetime
+syntax keyword pfmainConf message_size_limit
+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_recipient_bounce_reject_code
+syntax keyword pfmainConf mydestination
+syntax keyword pfmainConf mydomain
+syntax keyword pfmainConf myhostname
+syntax keyword pfmainConf mynetworks
+syntax keyword pfmainConf mynetworks_style
+syntax keyword pfmainConf myorigin
+syntax keyword pfmainConf nested_header_checks
+syntax keyword pfmainConf newaliases_path
+syntax keyword pfmainConf non_fqdn_reject_code
+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 prepend_delivered_header
+syntax keyword pfmainConf process_id_directory
+syntax keyword pfmainConf propagate_unmatched_extensions
+syntax keyword pfmainConf proxy_interfaces
+syntax keyword pfmainConf proxy_read_maps
+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_error_delay
+syntax keyword pfmainConf qmqpd_timeout
+syntax keyword pfmainConf queue_directory
+syntax keyword pfmainConf queue_file_attribute_count_limit
+syntax keyword pfmainConf queue_minfree
+syntax keyword pfmainConf queue_run_delay
+syntax keyword pfmainConf queue_service_name
+syntax keyword pfmainConf rbl_reply_maps
+syntax keyword pfmainConf readme_directory
+syntax keyword pfmainConf receive_override_options
+syntax keyword pfmainConf recipient_bcc_maps
+syntax keyword pfmainConf recipient_canonical_maps
+syntax keyword pfmainConf recipient_delimiter
+syntax keyword pfmainConf reject_code
+syntax keyword pfmainConf relay_clientcerts
+syntax keyword pfmainConf relay_destination_concurrency_limit
+syntax keyword pfmainConf relay_destination_recipient_limit
+syntax keyword pfmainConf relay_domains
+syntax keyword pfmainConf relay_domains_reject_code
+syntax keyword pfmainConf relay_recipient_maps
+syntax keyword pfmainConf relay_transport
+syntax keyword pfmainConf relayhost
+syntax keyword pfmainConf relocated_maps
+syntax keyword pfmainConf require_home_directory
+syntax keyword pfmainConf resolve_dequoted_address
+syntax keyword pfmainConf resolve_null_domain
+syntax keyword pfmainConf rewrite_service_name
+syntax keyword pfmainConf sample_directory
+syntax keyword pfmainConf sender_based_routing
+syntax keyword pfmainConf sender_bcc_maps
+syntax keyword pfmainConf sender_canonical_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_always_send_ehlo
+syntax keyword pfmainConf smtp_bind_address
+syntax keyword pfmainConf smtp_connect_timeout
+syntax keyword pfmainConf smtp_data_done_timeout
+syntax keyword pfmainConf smtp_data_init_timeout
+syntax keyword pfmainConf smtp_data_xfer_timeout
+syntax keyword pfmainConf smtp_defer_if_no_mx_address_found
+syntax keyword pfmainConf smtp_destination_concurrency_limit
+syntax keyword pfmainConf smtp_destination_recipient_limit
+syntax keyword pfmainConf smtp_enforce_tls
+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_mx_address_limit
+syntax keyword pfmainConf smtp_mx_session_limit
+syntax keyword pfmainConf smtp_never_send_ehlo
+syntax keyword pfmainConf smtp_pix_workaround_delay_time
+syntax keyword pfmainConf smtp_pix_workaround_threshold_time
+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_rset_timeout
+syntax keyword pfmainConf smtp_sasl_auth_enable
+syntax keyword pfmainConf smtp_sasl_password_maps
+syntax keyword pfmainConf smtp_sasl_security_options
+syntax keyword pfmainConf smtp_sasl_tls_security_options
+syntax keyword pfmainConf smtp_sasl_tls_verified_security_options
+syntax keyword pfmainConf smtp_send_xforward_command
+syntax keyword pfmainConf smtp_skip_5xx_greeting
+syntax keyword pfmainConf smtp_skip_quit_response
+syntax keyword pfmainConf smtp_starttls_timeout
+syntax keyword pfmainConf smtp_tls_CAfile
+syntax keyword pfmainConf smtp_tls_CApath
+syntax keyword pfmainConf smtp_tls_cert_file
+syntax keyword pfmainConf smtp_tls_cipherlist
+syntax keyword pfmainConf smtp_tls_dcert_file
+syntax keyword pfmainConf smtp_tls_dkey_file
+syntax keyword pfmainConf smtp_tls_enforce_peername
+syntax keyword pfmainConf smtp_tls_key_file
+syntax keyword pfmainConf smtp_tls_loglevel
+syntax keyword pfmainConf smtp_tls_note_starttls_offer
+syntax keyword pfmainConf smtp_tls_per_site
+syntax keyword pfmainConf smtp_tls_scert_verifydepth
+syntax keyword pfmainConf smtp_tls_session_cache_database
+syntax keyword pfmainConf smtp_tls_session_cache_timeout
+syntax keyword pfmainConf smtp_use_tls
+syntax keyword pfmainConf smtp_xforward_timeout
+syntax keyword pfmainConf smtpd_authorized_verp_clients
+syntax keyword pfmainConf smtpd_authorized_xclient_hosts
+syntax keyword pfmainConf smtpd_authorized_xforward_hosts
+syntax keyword pfmainConf smtpd_banner
+syntax keyword pfmainConf smtpd_client_connection_count_limit
+syntax keyword pfmainConf smtpd_client_connection_limit_exceptions
+syntax keyword pfmainConf smtpd_client_connection_rate_limit
+syntax keyword pfmainConf smtpd_client_restrictions
+syntax keyword pfmainConf smtpd_data_restrictions
+syntax keyword pfmainConf smtpd_delay_reject
+syntax keyword pfmainConf smtpd_enforce_tls
+syntax keyword pfmainConf smtpd_error_sleep_time
+syntax keyword pfmainConf smtpd_etrn_restrictions
+syntax keyword pfmainConf smtpd_expansion_filter
+syntax keyword pfmainConf smtpd_hard_error_limit
+syntax keyword pfmainConf smtpd_helo_required
+syntax keyword pfmainConf smtpd_helo_restrictions
+syntax keyword pfmainConf smtpd_history_flush_threshold
+syntax keyword pfmainConf smtpd_junk_command_limit
+syntax keyword pfmainConf smtpd_noop_commands
+syntax keyword pfmainConf smtpd_null_access_lookup_key
+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_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_unlisted_recipient
+syntax keyword pfmainConf smtpd_reject_unlisted_sender
+syntax keyword pfmainConf smtpd_restriction_classes
+syntax keyword pfmainConf smtpd_sasl_application_name
+syntax keyword pfmainConf smtpd_sasl_auth_enable
+syntax keyword pfmainConf smtpd_sasl_exceptions_networks
+syntax keyword pfmainConf smtpd_sasl_local_domain
+syntax keyword pfmainConf smtpd_sasl_security_options
+syntax keyword pfmainConf smtpd_sasl_tls_security_options
+syntax keyword pfmainConf smtpd_sender_login_maps
+syntax keyword pfmainConf smtpd_sender_restrictions
+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_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_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_key_file
+syntax keyword pfmainConf smtpd_tls_loglevel
+syntax keyword pfmainConf smtpd_tls_received_header
+syntax keyword pfmainConf smtpd_tls_req_ccert
+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 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 sun_mailtool_compatibility
+syntax keyword pfmainConf swap_bangpath
+syntax keyword pfmainConf syslog_facility
+syntax keyword pfmainConf syslog_name
+syntax keyword pfmainConf tls_daemon_random_bytes
+syntax keyword pfmainConf tls_daemon_random_source
+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 trace_service_name
+syntax keyword pfmainConf transport_maps
+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_client_reject_code
+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_reject_code
+syntax keyword pfmainConf unverified_sender_reject_code
+syntax keyword pfmainConf verp_delimiter_filter
+syntax keyword pfmainConf virtual_alias_domains
+syntax keyword pfmainConf virtual_alias_expansion_limit
+syntax keyword pfmainConf virtual_alias_maps
+syntax keyword pfmainConf virtual_alias_recursion_limit
+syntax keyword pfmainConf virtual_destination_concurrency_limit
+syntax keyword pfmainConf virtual_destination_recipient_limit
+syntax keyword pfmainConf virtual_gid_maps
+syntax keyword pfmainConf virtual_mailbox_base
+syntax keyword pfmainConf virtual_mailbox_domains
+syntax keyword pfmainConf virtual_mailbox_limit
+syntax keyword pfmainConf virtual_mailbox_lock
+syntax keyword pfmainConf virtual_mailbox_maps
+syntax keyword pfmainConf virtual_minimum_uid
+syntax keyword pfmainConf virtual_transport
+syntax keyword pfmainConf virtual_uid_maps
+syntax match pfmainRef "$\<2bounce_notice_recipient\>"
+syntax match pfmainRef "$\<access_map_reject_code\>"
+syntax match pfmainRef "$\<address_verify_default_transport\>"
+syntax match pfmainRef "$\<address_verify_local_transport\>"
+syntax match pfmainRef "$\<address_verify_map\>"
+syntax match pfmainRef "$\<address_verify_negative_cache\>"
+syntax match pfmainRef "$\<address_verify_negative_expire_time\>"
+syntax match pfmainRef "$\<address_verify_negative_refresh_time\>"
+syntax match pfmainRef "$\<address_verify_poll_count\>"
+syntax match pfmainRef "$\<address_verify_poll_delay\>"
+syntax match pfmainRef "$\<address_verify_positive_expire_time\>"
+syntax match pfmainRef "$\<address_verify_positive_refresh_time\>"
+syntax match pfmainRef "$\<address_verify_relay_transport\>"
+syntax match pfmainRef "$\<address_verify_relayhost\>"
+syntax match pfmainRef "$\<address_verify_sender\>"
+syntax match pfmainRef "$\<address_verify_service_name\>"
+syntax match pfmainRef "$\<address_verify_transport_maps\>"
+syntax match pfmainRef "$\<address_verify_virtual_transport\>"
+syntax match pfmainRef "$\<alias_database\>"
+syntax match pfmainRef "$\<alias_maps\>"
+syntax match pfmainRef "$\<allow_mail_to_commands\>"
+syntax match pfmainRef "$\<allow_mail_to_files\>"
+syntax match pfmainRef "$\<allow_min_user\>"
+syntax match pfmainRef "$\<allow_percent_hack\>"
+syntax match pfmainRef "$\<allow_untrusted_routing\>"
+syntax match pfmainRef "$\<alternate_config_directories\>"
+syntax match pfmainRef "$\<always_bcc\>"
+syntax match pfmainRef "$\<append_at_myorigin\>"
+syntax match pfmainRef "$\<append_dot_mydomain\>"
+syntax match pfmainRef "$\<application_event_drain_time\>"
+syntax match pfmainRef "$\<backwards_bounce_logfile_compatibility\>"
+syntax match pfmainRef "$\<berkeley_db_create_buffer_size\>"
+syntax match pfmainRef "$\<berkeley_db_read_buffer_size\>"
+syntax match pfmainRef "$\<best_mx_transport\>"
+syntax match pfmainRef "$\<biff\>"
+syntax match pfmainRef "$\<body_checks\>"
+syntax match pfmainRef "$\<body_checks_size_limit\>"
+syntax match pfmainRef "$\<bounce_notice_recipient\>"
+syntax match pfmainRef "$\<bounce_queue_lifetime\>"
+syntax match pfmainRef "$\<bounce_service_name\>"
+syntax match pfmainRef "$\<bounce_size_limit\>"
+syntax match pfmainRef "$\<broken_sasl_auth_clients\>"
+syntax match pfmainRef "$\<canonical_maps\>"
+syntax match pfmainRef "$\<cleanup_service_name\>"
+syntax match pfmainRef "$\<command_directory\>"
+syntax match pfmainRef "$\<command_expansion_filter\>"
+syntax match pfmainRef "$\<command_time_limit\>"
+syntax match pfmainRef "$\<config_directory\>"
+syntax match pfmainRef "$\<content_filter\>"
+syntax match pfmainRef "$\<daemon_directory\>"
+syntax match pfmainRef "$\<daemon_timeout\>"
+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_limit\>"
+syntax match pfmainRef "$\<default_destination_recipient_limit\>"
+syntax match pfmainRef "$\<default_extra_recipient_limit\>"
+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_transport\>"
+syntax match pfmainRef "$\<default_verp_delimiters\>"
+syntax match pfmainRef "$\<defer_code\>"
+syntax match pfmainRef "$\<defer_service_name\>"
+syntax match pfmainRef "$\<defer_transports\>"
+syntax match pfmainRef "$\<delay_notice_recipient\>"
+syntax match pfmainRef "$\<delay_warning_time\>"
+syntax match pfmainRef "$\<deliver_lock_attempts\>"
+syntax match pfmainRef "$\<deliver_lock_delay\>"
+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 "$\<dont_remove\>"
+syntax match pfmainRef "$\<double_bounce_sender\>"
+syntax match pfmainRef "$\<duplicate_filter_limit\>"
+syntax match pfmainRef "$\<empty_address_recipient\>"
+syntax match pfmainRef "$\<enable_errors_to\>"
+syntax match pfmainRef "$\<enable_original_recipient\>"
+syntax match pfmainRef "$\<error_notice_recipient\>"
+syntax match pfmainRef "$\<error_service_name\>"
+syntax match pfmainRef "$\<expand_owner_alias\>"
+syntax match pfmainRef "$\<export_environment\>"
+syntax match pfmainRef "$\<fallback_relay\>"
+syntax match pfmainRef "$\<fallback_transport\>"
+syntax match pfmainRef "$\<fast_flush_domains\>"
+syntax match pfmainRef "$\<fast_flush_purge_time\>"
+syntax match pfmainRef "$\<fast_flush_refresh_time\>"
+syntax match pfmainRef "$\<fault_injection_code\>"
+syntax match pfmainRef "$\<flush_service_name\>"
+syntax match pfmainRef "$\<fork_attempts\>"
+syntax match pfmainRef "$\<fork_delay\>"
+syntax match pfmainRef "$\<forward_expansion_filter\>"
+syntax match pfmainRef "$\<forward_path\>"
+syntax match pfmainRef "$\<hash_queue_depth\>"
+syntax match pfmainRef "$\<hash_queue_names\>"
+syntax match pfmainRef "$\<header_address_token_limit\>"
+syntax match pfmainRef "$\<header_checks\>"
+syntax match pfmainRef "$\<header_size_limit\>"
+syntax match pfmainRef "$\<helpful_warnings\>"
+syntax match pfmainRef "$\<home_mailbox\>"
+syntax match pfmainRef "$\<hopcount_limit\>"
+syntax match pfmainRef "$\<html_directory\>"
+syntax match pfmainRef "$\<ignore_mx_lookup_error\>"
+syntax match pfmainRef "$\<import_environment\>"
+syntax match pfmainRef "$\<in_flow_delay\>"
+syntax match pfmainRef "$\<inet_interfaces\>"
+syntax match pfmainRef "$\<initial_destination_concurrency\>"
+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_cache_connection\>"
+syntax match pfmainRef "$\<lmtp_connect_timeout\>"
+syntax match pfmainRef "$\<lmtp_data_done_timeout\>"
+syntax match pfmainRef "$\<lmtp_data_init_timeout\>"
+syntax match pfmainRef "$\<lmtp_data_xfer_timeout\>"
+syntax match pfmainRef "$\<lmtp_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<lmtp_destination_recipient_limit\>"
+syntax match pfmainRef "$\<lmtp_lhlo_timeout\>"
+syntax match pfmainRef "$\<lmtp_mail_timeout\>"
+syntax match pfmainRef "$\<lmtp_quit_timeout\>"
+syntax match pfmainRef "$\<lmtp_rcpt_timeout\>"
+syntax match pfmainRef "$\<lmtp_rset_timeout\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<lmtp_sasl_password_maps\>"
+syntax match pfmainRef "$\<lmtp_sasl_security_options\>"
+syntax match pfmainRef "$\<lmtp_send_xforward_command\>"
+syntax match pfmainRef "$\<lmtp_skip_quit_response\>"
+syntax match pfmainRef "$\<lmtp_tcp_port\>"
+syntax match pfmainRef "$\<lmtp_xforward_timeout\>"
+syntax match pfmainRef "$\<local_command_shell\>"
+syntax match pfmainRef "$\<local_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<local_destination_recipient_limit\>"
+syntax match pfmainRef "$\<local_recipient_maps\>"
+syntax match pfmainRef "$\<local_transport\>"
+syntax match pfmainRef "$\<luser_relay\>"
+syntax match pfmainRef "$\<mail_name\>"
+syntax match pfmainRef "$\<mail_owner\>"
+syntax match pfmainRef "$\<mail_release_date\>"
+syntax match pfmainRef "$\<mail_spool_directory\>"
+syntax match pfmainRef "$\<mail_version\>"
+syntax match pfmainRef "$\<mailbox_command\>"
+syntax match pfmainRef "$\<mailbox_command_maps\>"
+syntax match pfmainRef "$\<mailbox_delivery_lock\>"
+syntax match pfmainRef "$\<mailbox_size_limit\>"
+syntax match pfmainRef "$\<mailbox_transport\>"
+syntax match pfmainRef "$\<mailq_path\>"
+syntax match pfmainRef "$\<manpage_directory\>"
+syntax match pfmainRef "$\<maps_rbl_domains\>"
+syntax match pfmainRef "$\<maps_rbl_reject_code\>"
+syntax match pfmainRef "$\<masquerade_classes\>"
+syntax match pfmainRef "$\<masquerade_domains\>"
+syntax match pfmainRef "$\<masquerade_exceptions\>"
+syntax match pfmainRef "$\<max_idle\>"
+syntax match pfmainRef "$\<max_use\>"
+syntax match pfmainRef "$\<maximal_backoff_time\>"
+syntax match pfmainRef "$\<maximal_queue_lifetime\>"
+syntax match pfmainRef "$\<message_size_limit\>"
+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_recipient_bounce_reject_code\>"
+syntax match pfmainRef "$\<mydestination\>"
+syntax match pfmainRef "$\<mydomain\>"
+syntax match pfmainRef "$\<myhostname\>"
+syntax match pfmainRef "$\<mynetworks\>"
+syntax match pfmainRef "$\<mynetworks_style\>"
+syntax match pfmainRef "$\<myorigin\>"
+syntax match pfmainRef "$\<nested_header_checks\>"
+syntax match pfmainRef "$\<newaliases_path\>"
+syntax match pfmainRef "$\<non_fqdn_reject_code\>"
+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 "$\<prepend_delivered_header\>"
+syntax match pfmainRef "$\<process_id_directory\>"
+syntax match pfmainRef "$\<propagate_unmatched_extensions\>"
+syntax match pfmainRef "$\<proxy_interfaces\>"
+syntax match pfmainRef "$\<proxy_read_maps\>"
+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_error_delay\>"
+syntax match pfmainRef "$\<qmqpd_timeout\>"
+syntax match pfmainRef "$\<queue_directory\>"
+syntax match pfmainRef "$\<queue_file_attribute_count_limit\>"
+syntax match pfmainRef "$\<queue_minfree\>"
+syntax match pfmainRef "$\<queue_run_delay\>"
+syntax match pfmainRef "$\<queue_service_name\>"
+syntax match pfmainRef "$\<rbl_reply_maps\>"
+syntax match pfmainRef "$\<readme_directory\>"
+syntax match pfmainRef "$\<receive_override_options\>"
+syntax match pfmainRef "$\<recipient_bcc_maps\>"
+syntax match pfmainRef "$\<recipient_canonical_maps\>"
+syntax match pfmainRef "$\<recipient_delimiter\>"
+syntax match pfmainRef "$\<reject_code\>"
+syntax match pfmainRef "$\<relay_clientcerts\>"
+syntax match pfmainRef "$\<relay_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<relay_destination_recipient_limit\>"
+syntax match pfmainRef "$\<relay_domains\>"
+syntax match pfmainRef "$\<relay_domains_reject_code\>"
+syntax match pfmainRef "$\<relay_recipient_maps\>"
+syntax match pfmainRef "$\<relay_transport\>"
+syntax match pfmainRef "$\<relayhost\>"
+syntax match pfmainRef "$\<relocated_maps\>"
+syntax match pfmainRef "$\<require_home_directory\>"
+syntax match pfmainRef "$\<resolve_dequoted_address\>"
+syntax match pfmainRef "$\<resolve_null_domain\>"
+syntax match pfmainRef "$\<rewrite_service_name\>"
+syntax match pfmainRef "$\<sample_directory\>"
+syntax match pfmainRef "$\<sender_based_routing\>"
+syntax match pfmainRef "$\<sender_bcc_maps\>"
+syntax match pfmainRef "$\<sender_canonical_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_always_send_ehlo\>"
+syntax match pfmainRef "$\<smtp_bind_address\>"
+syntax match pfmainRef "$\<smtp_connect_timeout\>"
+syntax match pfmainRef "$\<smtp_data_done_timeout\>"
+syntax match pfmainRef "$\<smtp_data_init_timeout\>"
+syntax match pfmainRef "$\<smtp_data_xfer_timeout\>"
+syntax match pfmainRef "$\<smtp_defer_if_no_mx_address_found\>"
+syntax match pfmainRef "$\<smtp_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<smtp_destination_recipient_limit\>"
+syntax match pfmainRef "$\<smtp_enforce_tls\>"
+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_mx_address_limit\>"
+syntax match pfmainRef "$\<smtp_mx_session_limit\>"
+syntax match pfmainRef "$\<smtp_never_send_ehlo\>"
+syntax match pfmainRef "$\<smtp_pix_workaround_delay_time\>"
+syntax match pfmainRef "$\<smtp_pix_workaround_threshold_time\>"
+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_rset_timeout\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<smtp_sasl_password_maps\>"
+syntax match pfmainRef "$\<smtp_sasl_security_options\>"
+syntax match pfmainRef "$\<smtp_sasl_tls_security_options\>"
+syntax match pfmainRef "$\<smtp_sasl_tls_verified_security_options\>"
+syntax match pfmainRef "$\<smtp_send_xforward_command\>"
+syntax match pfmainRef "$\<smtp_skip_5xx_greeting\>"
+syntax match pfmainRef "$\<smtp_skip_quit_response\>"
+syntax match pfmainRef "$\<smtp_starttls_timeout\>"
+syntax match pfmainRef "$\<smtp_tls_CAfile\>"
+syntax match pfmainRef "$\<smtp_tls_CApath\>"
+syntax match pfmainRef "$\<smtp_tls_cert_file\>"
+syntax match pfmainRef "$\<smtp_tls_cipherlist\>"
+syntax match pfmainRef "$\<smtp_tls_dcert_file\>"
+syntax match pfmainRef "$\<smtp_tls_dkey_file\>"
+syntax match pfmainRef "$\<smtp_tls_enforce_peername\>"
+syntax match pfmainRef "$\<smtp_tls_key_file\>"
+syntax match pfmainRef "$\<smtp_tls_loglevel\>"
+syntax match pfmainRef "$\<smtp_tls_note_starttls_offer\>"
+syntax match pfmainRef "$\<smtp_tls_per_site\>"
+syntax match pfmainRef "$\<smtp_tls_scert_verifydepth\>"
+syntax match pfmainRef "$\<smtp_tls_session_cache_database\>"
+syntax match pfmainRef "$\<smtp_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<smtp_use_tls\>"
+syntax match pfmainRef "$\<smtp_xforward_timeout\>"
+syntax match pfmainRef "$\<smtpd_authorized_verp_clients\>"
+syntax match pfmainRef "$\<smtpd_authorized_xclient_hosts\>"
+syntax match pfmainRef "$\<smtpd_authorized_xforward_hosts\>"
+syntax match pfmainRef "$\<smtpd_banner\>"
+syntax match pfmainRef "$\<smtpd_client_connection_count_limit\>"
+syntax match pfmainRef "$\<smtpd_client_connection_limit_exceptions\>"
+syntax match pfmainRef "$\<smtpd_client_connection_rate_limit\>"
+syntax match pfmainRef "$\<smtpd_client_restrictions\>"
+syntax match pfmainRef "$\<smtpd_data_restrictions\>"
+syntax match pfmainRef "$\<smtpd_delay_reject\>"
+syntax match pfmainRef "$\<smtpd_enforce_tls\>"
+syntax match pfmainRef "$\<smtpd_error_sleep_time\>"
+syntax match pfmainRef "$\<smtpd_etrn_restrictions\>"
+syntax match pfmainRef "$\<smtpd_expansion_filter\>"
+syntax match pfmainRef "$\<smtpd_hard_error_limit\>"
+syntax match pfmainRef "$\<smtpd_helo_required\>"
+syntax match pfmainRef "$\<smtpd_helo_restrictions\>"
+syntax match pfmainRef "$\<smtpd_history_flush_threshold\>"
+syntax match pfmainRef "$\<smtpd_junk_command_limit\>"
+syntax match pfmainRef "$\<smtpd_noop_commands\>"
+syntax match pfmainRef "$\<smtpd_null_access_lookup_key\>"
+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_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_unlisted_recipient\>"
+syntax match pfmainRef "$\<smtpd_reject_unlisted_sender\>"
+syntax match pfmainRef "$\<smtpd_restriction_classes\>"
+syntax match pfmainRef "$\<smtpd_sasl_application_name\>"
+syntax match pfmainRef "$\<smtpd_sasl_auth_enable\>"
+syntax match pfmainRef "$\<smtpd_sasl_exceptions_networks\>"
+syntax match pfmainRef "$\<smtpd_sasl_local_domain\>"
+syntax match pfmainRef "$\<smtpd_sasl_security_options\>"
+syntax match pfmainRef "$\<smtpd_sasl_tls_security_options\>"
+syntax match pfmainRef "$\<smtpd_sender_login_maps\>"
+syntax match pfmainRef "$\<smtpd_sender_restrictions\>"
+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_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_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_key_file\>"
+syntax match pfmainRef "$\<smtpd_tls_loglevel\>"
+syntax match pfmainRef "$\<smtpd_tls_received_header\>"
+syntax match pfmainRef "$\<smtpd_tls_req_ccert\>"
+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 "$\<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 "$\<sun_mailtool_compatibility\>"
+syntax match pfmainRef "$\<swap_bangpath\>"
+syntax match pfmainRef "$\<syslog_facility\>"
+syntax match pfmainRef "$\<syslog_name\>"
+syntax match pfmainRef "$\<tls_daemon_random_bytes\>"
+syntax match pfmainRef "$\<tls_daemon_random_source\>"
+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 "$\<trace_service_name\>"
+syntax match pfmainRef "$\<transport_maps\>"
+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_client_reject_code\>"
+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_reject_code\>"
+syntax match pfmainRef "$\<unverified_sender_reject_code\>"
+syntax match pfmainRef "$\<verp_delimiter_filter\>"
+syntax match pfmainRef "$\<virtual_alias_domains\>"
+syntax match pfmainRef "$\<virtual_alias_expansion_limit\>"
+syntax match pfmainRef "$\<virtual_alias_maps\>"
+syntax match pfmainRef "$\<virtual_alias_recursion_limit\>"
+syntax match pfmainRef "$\<virtual_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<virtual_destination_recipient_limit\>"
+syntax match pfmainRef "$\<virtual_gid_maps\>"
+syntax match pfmainRef "$\<virtual_mailbox_base\>"
+syntax match pfmainRef "$\<virtual_mailbox_domains\>"
+syntax match pfmainRef "$\<virtual_mailbox_limit\>"
+syntax match pfmainRef "$\<virtual_mailbox_lock\>"
+syntax match pfmainRef "$\<virtual_mailbox_maps\>"
+syntax match pfmainRef "$\<virtual_minimum_uid\>"
+syntax match pfmainRef "$\<virtual_transport\>"
+syntax match pfmainRef "$\<virtual_uid_maps\>"
+
+syntax keyword pfmainDictDB hash btree dbm
+syntax keyword pfmainDictRE regexp pcre
+syntax keyword pfmainDictEXT ldap environ nis netinfo
+syntax keyword pfmainQueue active bounce corrupt defer deferred
+syntax keyword pfmainQueue flush incoming saved
+syntax keyword pfmainTransport smtp lmtp unix local error
+syntax keyword pfmainLock fcntl flock dotlock
+syntax keyword pfmainAnswer yes no
+
+syntax match pfmainComment "#.*$"
+syntax match pfmainNumber "\<\d\+\>"
+syntax match pfmainTime "\<\d\+[hmsd]\>"
+syntax match pfmainIP "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>"
+syntax match pfmainVariable "\$\w\+" contains=pfmainRef ",pfmainRefTLS
+
+if version >= 508 || !exists("pfmain_syntax_init")
+ if version < 508
+ let pfmain_syntax_init = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pfmainComment Comment
+ HiLink pfmainConf Keyword
+ HiLink pfmainNumber Number
+ HiLink pfmainTime Number
+ HiLink pfmainIP Number
+ HiLink pfmainDictDB Type
+ HiLink pfmainDictRE Type
+ HiLink pfmainDictEXT Type
+ HiLink pfmainQueue Constant
+ HiLink pfmainTransport Constant
+ HiLink pfmainLock Constant
+ HiLink pfmainAnswer Constant
+ HiLink pfmainRef Macro
+
+ " HiLink pfmainConfTLS Special
+ " HiLink pfmainRefTLS Macro
+
+ HiLink pfmainVariable Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pfmain"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/php.vim b/runtime/syntax/php.vim
new file mode 100644
index 000000000..b94a271de
--- /dev/null
+++ b/runtime/syntax/php.vim
@@ -0,0 +1,513 @@
+" Vim syntax file
+" Language: php PHP 3/4/5
+" Maintainer: Lutz Eymers <ixtab@polzin.com>
+" URL: http://www.isp.de/data/php.vim
+" Last Change: 2004 Feb 04
+"
+" Options php_sql_query = 1 for SQL syntax highlighting inside strings
+" php_htmlInStrings = 1 for HTML syntax highlighting inside strings
+" php_baselib = 1 for highlighting baselib functions
+" php_asp_tags = 1 for highlighting ASP-style short tags
+" php_parent_error_close = 1 for highlighting parent error ] or )
+" php_parent_error_open = 1 for skipping an php end tag, if there exists an open ( or [ without a closing one
+" php_oldStyle = 1 for using old colorstyle
+" php_noShortTags = 1 don't sync <? ?> as php
+" php_folding = 1 for folding classes and functions
+" php_folding = 2 for folding all { } regions
+" php_sync_method = x
+" x=-1 to sync by search ( default )
+" x>0 to sync at least x lines backwards
+" x=0 to sync from start
+
+" Note
+" Setting php_folding=1 will match a closing } by comparing the indent
+" before the class or function keyword with the indent of a matching }.
+" Setting php_folding=2 will match all of pairs of {,} ( see known
+" bugs ii )
+
+" Known bugs
+" setting php_parent_error_close on and php_parent_error_open off
+" has these two leaks:
+" i) An closing ) or ] inside a string match to the last open ( or [
+" before the string, when the the closing ) or ] is on the same line
+" where the string started. In this case a following ) or ] after
+" 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.
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'php'
+endif
+
+if version < 600
+ unlet! php_folding
+ if exists("php_sync_method") && !php_sync_method
+ let php_sync_method=-1
+ endif
+ so <sfile>:p:h/html.vim
+else
+ runtime syntax/html.vim
+ unlet b:current_syntax
+endif
+
+" accept old options
+if !exists("php_sync_method")
+ if exists("php_minlines")
+ let php_sync_method=php_minlines
+ else
+ let php_sync_method=-1
+ endif
+endif
+
+if exists("php_parentError") && !exists("php_parent_error_open") && !exists("php_parent_error_close")
+ let php_parent_error_close=1
+ let php_parent_error_open=1
+endif
+
+syn cluster htmlPreproc add=phpRegion,phpRegionAsp,phpRegionSc
+
+if version < 600
+ syn include @sqlTop <sfile>:p:h/sql.vim
+else
+ syn include @sqlTop syntax/sql.vim
+endif
+syn sync clear
+unlet b:current_syntax
+syn cluster sqlTop remove=sqlString,sqlComment
+if exists( "php_sql_query")
+ syn cluster phpAddStrings contains=@sqlTop
+endif
+
+if exists( "php_htmlInStrings")
+ syn cluster phpAddStrings add=@htmlTop
+endif
+
+syn case match
+
+" Env Variables
+syn keyword phpEnvVar GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE SERVER_PROTOCOL REQUEST_METHOD QUERY_STRING DOCUMENT_ROOT HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN SERVER_PORT SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI contained
+
+" Internal Variables
+syn keyword phpIntVar GLOBALS PHP_ERRMSG PHP_SELF HTTP_GET_VARS HTTP_POST_VARS HTTP_COOKIE_VARS HTTP_POST_FILES HTTP_ENV_VARS HTTP_SERVER_VARS HTTP_SESSION_VARS HTTP_RAW_POST_DATA HTTP_STATE_VARS _GET _POST _COOKIE _FILES _SERVER _ENV _SERVER _REQUEST _SESSION contained
+
+" Constants
+syn keyword phpCoreConstant PHP_VERSION PHP_OS DEFAULT_INCLUDE_PATH PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_BINDIR PHP_LIBDIR PHP_DATADIR PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_ALL contained
+
+syn case ignore
+
+syn keyword phpConstant __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ contained
+
+
+" Function and Methods ripped from php_manual_de.tar.gz Jan 2003
+syn keyword phpFunctions apache_child_terminate apache_get_modules apache_get_version apache_getenv apache_lookup_uri apache_note apache_request_headers apache_response_headers apache_setenv ascii2ebcdic ebcdic2ascii getallheaders virtual contained
+syn keyword phpFunctions array_change_key_case array_chunk array_combine array_count_values array_diff_assoc array_diff_uassoc array_diff array_fill array_filter array_flip array_intersect_assoc array_intersect array_key_exists array_keys array_map array_merge_recursive array_merge array_multisort array_pad array_pop array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff_assoc array_udiff_uassoc array_udiff array_unique array_unshift array_values array_walk array arsort asort compact count current each end extract in_array key krsort ksort list natcasesort natsort next pos prev range reset rsort shuffle sizeof sort uasort uksort usort contained
+syn keyword phpFunctions aspell_check aspell_new aspell_suggest contained
+syn keyword phpFunctions bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub contained
+syn keyword phpFunctions bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite contained
+syn keyword phpFunctions cal_days_in_month cal_from_jd cal_info cal_to_jd easter_date easter_days frenchtojd gregoriantojd jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd juliantojd unixtojd contained
+syn keyword phpFunctions ccvs_add ccvs_auth ccvs_command ccvs_count ccvs_delete ccvs_done ccvs_init ccvs_lookup ccvs_new ccvs_report ccvs_return ccvs_reverse ccvs_sale ccvs_status ccvs_textvalue ccvs_void contained
+syn keyword phpFunctions call_user_method_array call_user_method class_exists get_class_methods get_class_vars get_class get_declared_classes get_object_vars get_parent_class is_a is_subclass_of method_exists contained
+syn keyword phpFunctions com VARIANT com_addref com_get com_invoke com_isenum com_load_typelib com_load com_propget com_propput com_propset com_release com_set contained
+syn keyword phpFunctions cpdf_add_annotation cpdf_add_outline cpdf_arc cpdf_begin_text cpdf_circle cpdf_clip cpdf_close cpdf_closepath_fill_stroke cpdf_closepath_stroke cpdf_closepath cpdf_continue_text cpdf_curveto cpdf_end_text cpdf_fill_stroke cpdf_fill cpdf_finalize_page cpdf_finalize cpdf_global_set_document_limits cpdf_import_jpeg cpdf_lineto cpdf_moveto cpdf_newpath cpdf_open cpdf_output_buffer cpdf_page_init cpdf_place_inline_image cpdf_rect cpdf_restore cpdf_rlineto cpdf_rmoveto cpdf_rotate_text cpdf_rotate cpdf_save_to_file cpdf_save cpdf_scale cpdf_set_action_url cpdf_set_char_spacing cpdf_set_creator cpdf_set_current_page cpdf_set_font_directories cpdf_set_font_map_file cpdf_set_font cpdf_set_horiz_scaling cpdf_set_keywords cpdf_set_leading cpdf_set_page_animation cpdf_set_subject cpdf_set_text_matrix cpdf_set_text_pos cpdf_set_text_rendering cpdf_set_text_rise cpdf_set_title cpdf_set_viewer_preferences cpdf_set_word_spacing cpdf_setdash cpdf_setflat cpdf_setgray_fill cpdf_setgray_stroke cpdf_setgray cpdf_setlinecap cpdf_setlinejoin cpdf_setlinewidth cpdf_setmiterlimit cpdf_setrgbcolor_fill cpdf_setrgbcolor_stroke cpdf_setrgbcolor cpdf_show_xy cpdf_show cpdf_stringwidth cpdf_stroke cpdf_text cpdf_translate contained
+syn keyword phpFunctions crack_check crack_closedict crack_getlastmessage crack_opendict contained
+syn keyword phpFunctions ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_graph ctype_lower ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit contained
+syn keyword phpFunctions curl_close curl_errno curl_error curl_exec curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_setopt curl_version contained
+syn keyword phpFunctions cybercash_base64_decode cybercash_base64_encode cybercash_decr cybercash_encr contained
+syn keyword phpFunctions cyrus_authenticate cyrus_bind cyrus_close cyrus_connect cyrus_query cyrus_unbind contained
+syn keyword phpFunctions checkdate date getdate gettimeofday gmdate gmmktime gmstrftime localtime microtime mktime strftime strtotime time contained
+syn keyword phpFunctions dba_close dba_delete dba_exists dba_fetch dba_firstkey dba_handlers dba_insert dba_key_split dba_list dba_nextkey dba_open dba_optimize dba_popen dba_replace dba_sync contained
+syn keyword phpFunctions dbase_add_record dbase_close dbase_create dbase_delete_record dbase_get_header_info dbase_get_record_with_names dbase_get_record dbase_numfields dbase_numrecords dbase_open dbase_pack dbase_replace_record contained
+syn keyword phpFunctions dblist dbmclose dbmdelete dbmexists dbmfetch dbmfirstkey dbminsert dbmnextkey dbmopen dbmreplace contained
+syn keyword phpFunctions dbplus_add dbplus_aql dbplus_chdir dbplus_close dbplus_curr dbplus_errcode dbplus_errno dbplus_find dbplus_first dbplus_flush dbplus_freealllocks dbplus_freelock dbplus_freerlocks dbplus_getlock dbplus_getunique dbplus_info dbplus_last dbplus_lockrel dbplus_next dbplus_open dbplus_prev dbplus_rchperm dbplus_rcreate dbplus_rcrtexact dbplus_rcrtlike dbplus_resolve dbplus_restorepos dbplus_rkeys dbplus_ropen dbplus_rquery dbplus_rrename dbplus_rsecindex dbplus_runlink dbplus_rzap dbplus_savepos dbplus_setindex dbplus_setindexbynumber dbplus_sql dbplus_tcl dbplus_tremove dbplus_undo dbplus_undoprepare dbplus_unlockrel dbplus_unselect dbplus_update dbplus_xlockrel dbplus_xunlockrel contained
+syn keyword phpFunctions dbx_close dbx_compare dbx_connect dbx_error dbx_escape_string dbx_fetch_row dbx_query dbx_sort contained
+syn keyword phpFunctions dio_close dio_fcntl dio_open dio_read dio_seek dio_stat dio_tcsetattr dio_truncate dio_write contained
+syn keyword phpFunctions chdir chroot dir closedir getcwd opendir readdir rewinddir scandir contained
+syn keyword phpFunctions domxml_new_doc domxml_open_file domxml_open_mem domxml_version domxml_xmltree domxml_xslt_stylesheet_doc domxml_xslt_stylesheet_file domxml_xslt_stylesheet xpath_eval_expression xpath_eval xpath_new_context xptr_eval xptr_new_context contained
+syn keyword phpMethods name specified value create_attribute create_cdata_section create_comment create_element_ns create_element create_entity_reference create_processing_instruction create_text_node doctype document_element dump_file dump_mem get_element_by_id get_elements_by_tagname html_dump_mem xinclude entities internal_subset name notations public_id system_id get_attribute_node get_attribute get_elements_by_tagname has_attribute remove_attribute set_attribute tagname add_namespace append_child append_sibling attributes child_nodes clone_node dump_node first_child get_content has_attributes has_child_nodes insert_before is_blank_node last_child next_sibling node_name node_type node_value owner_document parent_node prefix previous_sibling remove_child replace_child replace_node set_content set_name set_namespace unlink_node data target process result_dump_file result_dump_mem contained
+syn keyword phpFunctions dotnet_load contained
+syn keyword phpFunctions debug_backtrace debug_print_backtrace error_log error_reporting restore_error_handler set_error_handler trigger_error user_error contained
+syn keyword phpFunctions escapeshellarg escapeshellcmd exec passthru proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec system contained
+syn keyword phpFunctions fam_cancel_monitor fam_close fam_monitor_collection fam_monitor_directory fam_monitor_file fam_next_event fam_open fam_pending fam_resume_monitor fam_suspend_monitor contained
+syn keyword phpFunctions fbsql_affected_rows fbsql_autocommit fbsql_change_user fbsql_close fbsql_commit fbsql_connect fbsql_create_blob fbsql_create_clob fbsql_create_db fbsql_data_seek fbsql_database_password fbsql_database fbsql_db_query fbsql_db_status fbsql_drop_db fbsql_errno fbsql_error fbsql_fetch_array fbsql_fetch_assoc fbsql_fetch_field fbsql_fetch_lengths fbsql_fetch_object fbsql_fetch_row fbsql_field_flags fbsql_field_len fbsql_field_name fbsql_field_seek fbsql_field_table fbsql_field_type fbsql_free_result fbsql_get_autostart_info fbsql_hostname fbsql_insert_id fbsql_list_dbs fbsql_list_fields fbsql_list_tables fbsql_next_result fbsql_num_fields fbsql_num_rows fbsql_password fbsql_pconnect fbsql_query fbsql_read_blob fbsql_read_clob fbsql_result fbsql_rollback fbsql_select_db fbsql_set_lob_mode fbsql_set_transaction fbsql_start_db fbsql_stop_db fbsql_tablename fbsql_username fbsql_warnings contained
+syn keyword phpFunctions fdf_add_doc_javascript fdf_add_template fdf_close fdf_create fdf_enum_values fdf_errno fdf_error fdf_get_ap fdf_get_attachment fdf_get_encoding fdf_get_file fdf_get_flags fdf_get_opt fdf_get_status fdf_get_value fdf_get_version fdf_header fdf_next_field_name fdf_open_string fdf_open fdf_remove_item fdf_save_string fdf_save fdf_set_ap fdf_set_encoding fdf_set_file fdf_set_flags fdf_set_javascript_action fdf_set_opt fdf_set_status fdf_set_submit_form_action fdf_set_target_frame fdf_set_value fdf_set_version contained
+syn keyword phpFunctions filepro_fieldcount filepro_fieldname filepro_fieldtype filepro_fieldwidth filepro_retrieve filepro_rowcount filepro contained
+syn keyword phpFunctions basename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink contained
+syn keyword phpFunctions fribidi_log2vis contained
+syn keyword phpFunctions ftp_alloc ftp_cdup ftp_chdir ftp_chmod ftp_close ftp_connect ftp_delete ftp_exec ftp_fget ftp_fput ftp_get_option ftp_get ftp_login ftp_mdtm ftp_mkdir ftp_nb_continue ftp_nb_fget ftp_nb_fput ftp_nb_get ftp_nb_put ftp_nlist ftp_pasv ftp_put ftp_pwd ftp_quit ftp_raw ftp_rawlist ftp_rename ftp_rmdir ftp_set_option ftp_site ftp_size ftp_ssl_connect ftp_systype contained
+syn keyword phpFunctions call_user_func_array call_user_func create_function func_get_arg func_get_args func_num_args function_exists get_defined_functions register_shutdown_function register_tick_function unregister_tick_function contained
+syn keyword phpFunctions bind_textdomain_codeset bindtextdomain dcgettext dcngettext dgettext dngettext gettext ngettext textdomain contained
+syn keyword phpFunctions gmp_abs gmp_add gmp_and gmp_clrbit gmp_cmp gmp_com gmp_div_q gmp_div_qr gmp_div_r gmp_div gmp_divexact gmp_fact gmp_gcd gmp_gcdext gmp_hamdist gmp_init gmp_intval gmp_invert gmp_jacobi gmp_legendre gmp_mod gmp_mul gmp_neg gmp_or gmp_perfect_square gmp_popcount gmp_pow gmp_powm gmp_prob_prime gmp_random gmp_scan0 gmp_scan1 gmp_setbit gmp_sign gmp_sqrt gmp_sqrtrem gmp_sqrtrm gmp_strval gmp_sub gmp_xor contained
+syn keyword phpFunctions header headers_list headers_sent setcookie contained
+syn keyword phpFunctions hw_api_attribute hwapi_hgcsp hw_api_content hw_api_object contained
+syn keyword phpMethods key langdepvalue value values checkin checkout children mimetype read content copy dbstat dcstat dstanchors dstofsrcanchors count reason find ftstat hwstat identify info insert insertanchor insertcollection insertdocument link lock move assign attreditable count insert remove title value object objectbyanchor parents description type remove replace setcommitedversion srcanchors srcsofdst unlock user userlist contained
+syn keyword phpFunctions hw_Array2Objrec hw_changeobject hw_Children hw_ChildrenObj hw_Close hw_Connect hw_connection_info hw_cp hw_Deleteobject hw_DocByAnchor hw_DocByAnchorObj hw_Document_Attributes hw_Document_BodyTag hw_Document_Content hw_Document_SetContent hw_Document_Size hw_dummy hw_EditText hw_Error hw_ErrorMsg hw_Free_Document hw_GetAnchors hw_GetAnchorsObj hw_GetAndLock hw_GetChildColl hw_GetChildCollObj hw_GetChildDocColl hw_GetChildDocCollObj hw_GetObject hw_GetObjectByQuery hw_GetObjectByQueryColl hw_GetObjectByQueryCollObj hw_GetObjectByQueryObj hw_GetParents hw_GetParentsObj hw_getrellink hw_GetRemote hw_getremotechildren hw_GetSrcByDestObj hw_GetText hw_getusername hw_Identify hw_InCollections hw_Info hw_InsColl hw_InsDoc hw_insertanchors hw_InsertDocument hw_InsertObject hw_mapid hw_Modifyobject hw_mv hw_New_Document hw_objrec2array hw_Output_Document hw_pConnect hw_PipeDocument hw_Root hw_setlinkroot hw_stat hw_Unlock hw_Who contained
+syn keyword phpFunctions ibase_add_user ibase_affected_rows ibase_blob_add ibase_blob_cancel ibase_blob_close ibase_blob_create ibase_blob_echo ibase_blob_get ibase_blob_import ibase_blob_info ibase_blob_open ibase_close ibase_commit_ret ibase_commit ibase_connect ibase_delete_user ibase_drop_db ibase_errcode ibase_errmsg ibase_execute ibase_fetch_assoc ibase_fetch_object ibase_fetch_row ibase_field_info ibase_free_event_handler ibase_free_query ibase_free_result ibase_gen_id ibase_modify_user ibase_name_result ibase_num_fields ibase_num_params ibase_param_info ibase_pconnect ibase_prepare ibase_query ibase_rollback_ret ibase_rollback ibase_set_event_handler ibase_timefmt ibase_trans ibase_wait_event contained
+syn keyword phpFunctions iconv_get_encoding iconv_mime_decode_headers iconv_mime_decode iconv_mime_encode iconv_set_encoding iconv_strlen iconv_strpos iconv_strrpos iconv_substr iconv ob_iconv_handler contained
+syn keyword phpFunctions ifx_affected_rows ifx_blobinfile_mode ifx_byteasvarchar ifx_close ifx_connect ifx_copy_blob ifx_create_blob ifx_create_char ifx_do ifx_error ifx_errormsg ifx_fetch_row ifx_fieldproperties ifx_fieldtypes ifx_free_blob ifx_free_char ifx_free_result ifx_get_blob ifx_get_char ifx_getsqlca ifx_htmltbl_result ifx_nullformat ifx_num_fields ifx_num_rows ifx_pconnect ifx_prepare ifx_query ifx_textasvarchar ifx_update_blob ifx_update_char ifxus_close_slob ifxus_create_slob ifxus_free_slob ifxus_open_slob ifxus_read_slob ifxus_seek_slob ifxus_tell_slob ifxus_write_slob contained
+syn keyword phpFunctions exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data contained
+syn keyword phpFunctions imap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8 contained
+syn keyword phpFunctions assert_options assert dl extension_loaded get_cfg_var get_current_user get_defined_constants get_extension_funcs get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime get_required_files getenv getlastmod getmygid getmyinode getmypid getmyuid getopt getrusage ini_alter ini_get_all ini_get ini_restore ini_set main memory_get_usage php_ini_scanned_files php_logo_guid php_sapi_name php_uname phpcredits phpinfo phpversion putenv restore_include_path set_include_path set_magic_quotes_runtime set_time_limit version_compare zend_logo_guid zend_version contained
+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 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
+syn keyword phpFunctions mailparse_determine_best_xfer_encoding mailparse_msg_create mailparse_msg_extract_part_file mailparse_msg_extract_part mailparse_msg_free mailparse_msg_get_part_data mailparse_msg_get_part mailparse_msg_get_structure mailparse_msg_parse_file mailparse_msg_parse mailparse_rfc822_parse_addresses mailparse_stream_encode mailparse_uudecode_all contained
+syn keyword phpFunctions abs acos acosh asin asinh atan2 atan atanh base_convert bindec ceil cos cosh decbin dechex decoct deg2rad exp expm1 floor fmod getrandmax hexdec hypot is_finite is_infinite is_nan lcg_value log10 log1p log max min mt_getrandmax mt_rand mt_srand octdec pi pow rad2deg rand round sin sinh sqrt srand tan tanh contained
+syn keyword phpFunctions mb_convert_case mb_convert_encoding mb_convert_kana mb_convert_variables mb_decode_mimeheader mb_decode_numericentity mb_detect_encoding mb_detect_order mb_encode_mimeheader mb_encode_numericentity mb_ereg_match mb_ereg_replace mb_ereg_search_getpos mb_ereg_search_getregs mb_ereg_search_init mb_ereg_search_pos mb_ereg_search_regs mb_ereg_search_setpos mb_ereg_search mb_ereg mb_eregi_replace mb_eregi mb_get_info mb_http_input mb_http_output mb_internal_encoding mb_language mb_output_handler mb_parse_str mb_preferred_mime_name mb_regex_encoding mb_regex_set_options mb_send_mail mb_split mb_strcut mb_strimwidth mb_strlen mb_strpos mb_strrpos mb_strtolower mb_strtoupper mb_strwidth mb_substitute_character mb_substr_count mb_substr contained
+syn keyword phpFunctions mcal_append_event mcal_close mcal_create_calendar mcal_date_compare mcal_date_valid mcal_day_of_week mcal_day_of_year mcal_days_in_month mcal_delete_calendar mcal_delete_event mcal_event_add_attribute mcal_event_init mcal_event_set_alarm mcal_event_set_category mcal_event_set_class mcal_event_set_description mcal_event_set_end mcal_event_set_recur_daily mcal_event_set_recur_monthly_mday mcal_event_set_recur_monthly_wday mcal_event_set_recur_none mcal_event_set_recur_weekly mcal_event_set_recur_yearly mcal_event_set_start mcal_event_set_title mcal_expunge mcal_fetch_current_stream_event mcal_fetch_event mcal_is_leap_year mcal_list_alarms mcal_list_events mcal_next_recurrence mcal_open mcal_popen mcal_rename_calendar mcal_reopen mcal_snooze mcal_store_event mcal_time_valid mcal_week_of_year contained
+syn keyword phpFunctions mcrypt_cbc mcrypt_cfb mcrypt_create_iv mcrypt_decrypt mcrypt_ecb mcrypt_enc_get_algorithms_name mcrypt_enc_get_block_size mcrypt_enc_get_iv_size mcrypt_enc_get_key_size mcrypt_enc_get_modes_name mcrypt_enc_get_supported_key_sizes mcrypt_enc_is_block_algorithm_mode mcrypt_enc_is_block_algorithm mcrypt_enc_is_block_mode mcrypt_enc_self_test mcrypt_encrypt mcrypt_generic_deinit mcrypt_generic_end mcrypt_generic_init mcrypt_generic mcrypt_get_block_size mcrypt_get_cipher_name mcrypt_get_iv_size mcrypt_get_key_size mcrypt_list_algorithms mcrypt_list_modes mcrypt_module_close mcrypt_module_get_algo_block_size mcrypt_module_get_algo_key_size mcrypt_module_get_supported_key_sizes mcrypt_module_is_block_algorithm_mode mcrypt_module_is_block_algorithm mcrypt_module_is_block_mode mcrypt_module_open mcrypt_module_self_test mcrypt_ofb mdecrypt_generic contained
+syn keyword phpFunctions mcve_adduser mcve_adduserarg mcve_bt mcve_checkstatus mcve_chkpwd mcve_chngpwd mcve_completeauthorizations mcve_connect mcve_connectionerror mcve_deleteresponse mcve_deletetrans mcve_deleteusersetup mcve_deluser mcve_destroyconn mcve_destroyengine mcve_disableuser mcve_edituser mcve_enableuser mcve_force mcve_getcell mcve_getcellbynum mcve_getcommadelimited mcve_getheader mcve_getuserarg mcve_getuserparam mcve_gft mcve_gl mcve_gut mcve_initconn mcve_initengine mcve_initusersetup mcve_iscommadelimited mcve_liststats mcve_listusers mcve_maxconntimeout mcve_monitor mcve_numcolumns mcve_numrows mcve_override mcve_parsecommadelimited mcve_ping mcve_preauth mcve_preauthcompletion mcve_qc mcve_responseparam mcve_return mcve_returncode mcve_returnstatus mcve_sale mcve_setblocking mcve_setdropfile mcve_setip mcve_setssl_files mcve_setssl mcve_settimeout mcve_settle mcve_text_avs mcve_text_code mcve_text_cv mcve_transactionauth mcve_transactionavs mcve_transactionbatch mcve_transactioncv mcve_transactionid mcve_transactionitem mcve_transactionssent mcve_transactiontext mcve_transinqueue mcve_transnew mcve_transparam mcve_transsend mcve_ub mcve_uwait mcve_verifyconnection mcve_verifysslcert mcve_void contained
+syn keyword phpFunctions mhash_count mhash_get_block_size mhash_get_hash_name mhash_keygen_s2k mhash contained
+syn keyword phpFunctions mime_content_type contained
+syn keyword phpFunctions ming_setcubicthreshold ming_setscale ming_useswfversion SWFAction SWFBitmap swfbutton_keypress SWFbutton SWFDisplayItem SWFFill SWFFont SWFGradient SWFMorph SWFMovie SWFShape SWFSprite SWFText SWFTextField contained
+syn keyword phpMethods getHeight getWidth addAction addShape setAction setdown setHit setOver setUp addColor move moveTo multColor remove Rotate rotateTo scale scaleTo setDepth setName setRatio skewX skewXTo skewY skewYTo moveTo rotateTo scaleTo skewXTo skewYTo getwidth addEntry getshape1 getshape2 add nextframe output remove save setbackground setdimension setframes setrate streammp3 addFill drawCurve drawCurveTo drawLine drawLineTo movePen movePenTo setLeftFill setLine setRightFill add nextframe remove setframes addString getWidth moveTo setColor setFont setHeight setSpacing addstring align setbounds setcolor setFont setHeight setindentation setLeftMargin setLineSpacing setMargins setname setrightMargin contained
+syn keyword phpFunctions connection_aborted connection_status connection_timeout constant define defined die eval exit get_browser highlight_file highlight_string ignore_user_abort pack show_source sleep uniqid unpack usleep contained
+syn keyword phpFunctions udm_add_search_limit udm_alloc_agent udm_api_version udm_cat_list udm_cat_path udm_check_charset udm_check_stored udm_clear_search_limits udm_close_stored udm_crc32 udm_errno udm_error udm_find udm_free_agent udm_free_ispell_data udm_free_res udm_get_doc_count udm_get_res_field udm_get_res_param udm_load_ispell_data udm_open_stored udm_set_agent_param contained
+syn keyword phpFunctions msession_connect msession_count msession_create msession_destroy msession_disconnect msession_find msession_get_array msession_get msession_getdata msession_inc msession_list msession_listvar msession_lock msession_plugin msession_randstr msession_set_array msession_set msession_setdata msession_timeout msession_uniq msession_unlock contained
+syn keyword phpFunctions msql_affected_rows msql_close msql_connect msql_create_db msql_createdb msql_data_seek msql_dbname msql_drop_db msql_dropdb msql_error msql_fetch_array msql_fetch_field msql_fetch_object msql_fetch_row msql_field_seek msql_fieldflags msql_fieldlen msql_fieldname msql_fieldtable msql_fieldtype msql_free_result msql_freeresult msql_list_dbs msql_list_fields msql_list_tables msql_listdbs msql_listfields msql_listtables msql_num_fields msql_num_rows msql_numfields msql_numrows msql_pconnect msql_query msql_regcase msql_result msql_select_db msql_selectdb msql_tablename msql contained
+syn keyword phpFunctions mssql_bind mssql_close mssql_connect mssql_data_seek mssql_execute mssql_fetch_array mssql_fetch_assoc mssql_fetch_batch mssql_fetch_field mssql_fetch_object mssql_fetch_row mssql_field_length mssql_field_name mssql_field_seek mssql_field_type mssql_free_result mssql_free_statement mssql_get_last_message mssql_guid_string mssql_init mssql_min_error_severity mssql_min_message_severity mssql_next_result mssql_num_fields mssql_num_rows mssql_pconnect mssql_query mssql_result mssql_rows_affected mssql_select_db contained
+syn keyword phpFunctions muscat_close muscat_get muscat_give muscat_setup_net muscat_setup contained
+syn keyword phpFunctions mysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_escape_string mysql_fetch_array mysql_fetch_assoc mysql_fetch_field mysql_fetch_lengths mysql_fetch_object mysql_fetch_row mysql_field_flags mysql_field_len mysql_field_name mysql_field_seek mysql_field_table mysql_field_type mysql_free_result mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_real_escape_string mysql_result mysql_select_db mysql_stat mysql_tablename mysql_thread_id mysql_unbuffered_query contained
+syn keyword phpFunctions mysqli_affected_rows mysqli_autocommit mysqli_bind_param mysqli_bind_result mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect mysqli_data_seek mysqli_debug mysqli_disable_reads_from_master mysqli_disable_rpl_parse mysqli_dump_debug_info mysqli_enable_reads_from_master mysqli_enable_rpl_parse mysqli_errno mysqli_error mysqli_execute mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_fetch mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_client_info mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_master_query mysqli_num_fields mysqli_num_rows mysqli_options mysqli_param_count mysqli_ping mysqli_prepare_result mysqli_prepare mysqli_profiler mysqli_query mysqli_read_query_result mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reload mysqli_rollback mysqli_rpl_parse_enabled mysqli_rpl_probe mysqli_rpl_query_type mysqli_select_db mysqli_send_long_data mysqli_send_query mysqli_slave_query mysqli_ssl_set mysqli_stat mysqli_stmt_affected_rows mysqli_stmt_close mysqli_stmt_errno mysqli_stmt_error mysqli_stmt_store_result mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count contained
+syn keyword phpFunctions ncurses_addch ncurses_addchnstr ncurses_addchstr ncurses_addnstr ncurses_addstr ncurses_assume_default_colors ncurses_attroff ncurses_attron ncurses_attrset ncurses_baudrate ncurses_beep ncurses_bkgd ncurses_bkgdset ncurses_border ncurses_bottom_panel ncurses_can_change_color ncurses_cbreak ncurses_clear ncurses_clrtobot ncurses_clrtoeol ncurses_color_content ncurses_color_set ncurses_curs_set ncurses_def_prog_mode ncurses_def_shell_mode ncurses_define_key ncurses_del_panel ncurses_delay_output ncurses_delch ncurses_deleteln ncurses_delwin ncurses_doupdate ncurses_echo ncurses_echochar ncurses_end ncurses_erase ncurses_erasechar ncurses_filter ncurses_flash ncurses_flushinp ncurses_getch ncurses_getmaxyx ncurses_getmouse ncurses_getyx ncurses_halfdelay ncurses_has_colors ncurses_has_ic ncurses_has_il ncurses_has_key ncurses_hide_panel ncurses_hline ncurses_inch ncurses_init_color ncurses_init_pair ncurses_init ncurses_insch ncurses_insdelln ncurses_insertln ncurses_insstr ncurses_instr ncurses_isendwin ncurses_keyok ncurses_keypad ncurses_killchar ncurses_longname ncurses_meta ncurses_mouse_trafo ncurses_mouseinterval ncurses_mousemask ncurses_move_panel ncurses_move ncurses_mvaddch ncurses_mvaddchnstr ncurses_mvaddchstr ncurses_mvaddnstr ncurses_mvaddstr ncurses_mvcur ncurses_mvdelch ncurses_mvgetch ncurses_mvhline ncurses_mvinch ncurses_mvvline ncurses_mvwaddstr ncurses_napms ncurses_new_panel ncurses_newpad ncurses_newwin ncurses_nl ncurses_nocbreak ncurses_noecho ncurses_nonl ncurses_noqiflush ncurses_noraw ncurses_pair_content ncurses_panel_above ncurses_panel_below ncurses_panel_window ncurses_pnoutrefresh ncurses_prefresh ncurses_putp ncurses_qiflush ncurses_raw ncurses_refresh ncurses_replace_panel ncurses_reset_prog_mode ncurses_reset_shell_mode ncurses_resetty ncurses_savetty ncurses_scr_dump ncurses_scr_init ncurses_scr_restore ncurses_scr_set ncurses_scrl ncurses_show_panel ncurses_slk_attr ncurses_slk_attroff ncurses_slk_attron ncurses_slk_attrset ncurses_slk_clear ncurses_slk_color ncurses_slk_init ncurses_slk_noutrefresh ncurses_slk_refresh ncurses_slk_restore ncurses_slk_set ncurses_slk_touch ncurses_standend ncurses_standout ncurses_start_color ncurses_termattrs ncurses_termname ncurses_timeout ncurses_top_panel ncurses_typeahead ncurses_ungetch ncurses_ungetmouse ncurses_update_panels ncurses_use_default_colors ncurses_use_env ncurses_use_extended_names ncurses_vidattr ncurses_vline ncurses_waddch ncurses_waddstr ncurses_wattroff ncurses_wattron ncurses_wattrset ncurses_wborder ncurses_wclear ncurses_wcolor_set ncurses_werase ncurses_wgetch ncurses_whline ncurses_wmouse_trafo ncurses_wmove ncurses_wnoutrefresh ncurses_wrefresh ncurses_wstandend ncurses_wstandout ncurses_wvline contained
+syn keyword phpFunctions checkdnsrr closelog debugger_off debugger_on define_syslog_variables dns_check_record dns_get_mx dns_get_record fsockopen gethostbyaddr gethostbyname gethostbynamel getmxrr getprotobyname getprotobynumber getservbyname getservbyport ip2long long2ip openlog pfsockopen socket_get_status socket_set_blocking socket_set_timeout syslog contained
+syn keyword phpFunctions yp_all yp_cat yp_err_string yp_errno yp_first yp_get_default_domain yp_master yp_match yp_next yp_order contained
+syn keyword phpFunctions notes_body notes_copy_db notes_create_db notes_create_note notes_drop_db notes_find_note notes_header_info notes_list_msgs notes_mark_read notes_mark_unread notes_nav_create notes_search notes_unread notes_version contained
+syn keyword phpFunctions nsapi_request_headers nsapi_response_headers nsapi_virtual contained
+syn keyword phpFunctions aggregate_info aggregate_methods_by_list aggregate_methods_by_regexp aggregate_methods aggregate_properties_by_list aggregate_properties_by_regexp aggregate_properties aggregate aggregation_info deaggregate contained
+syn keyword phpFunctions ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob contained
+syn keyword phpFunctions odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables contained
+syn keyword phpFunctions openssl_csr_export_to_file openssl_csr_export openssl_csr_new openssl_csr_sign openssl_error_string openssl_free_key openssl_get_privatekey openssl_get_publickey openssl_open openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_seal openssl_sign openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_free openssl_x509_parse openssl_x509_read contained
+syn keyword phpFunctions ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback contained
+syn keyword phpFunctions flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars contained
+syn keyword phpFunctions overload contained
+syn keyword phpFunctions ovrimos_close ovrimos_commit ovrimos_connect ovrimos_cursor ovrimos_exec ovrimos_execute ovrimos_fetch_into ovrimos_fetch_row ovrimos_field_len ovrimos_field_name ovrimos_field_num ovrimos_field_type ovrimos_free_result ovrimos_longreadlen ovrimos_num_fields ovrimos_num_rows ovrimos_prepare ovrimos_result_all ovrimos_result ovrimos_rollback contained
+syn keyword phpFunctions pcntl_exec pcntl_fork pcntl_signal pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig contained
+syn keyword phpFunctions preg_grep preg_match_all preg_match preg_quote preg_replace_callback preg_replace preg_split contained
+syn keyword phpFunctions pdf_add_annotation pdf_add_bookmark pdf_add_launchlink pdf_add_locallink pdf_add_note pdf_add_outline pdf_add_pdflink pdf_add_thumbnail pdf_add_weblink pdf_arc pdf_arcn pdf_attach_file pdf_begin_page pdf_begin_pattern pdf_begin_template pdf_circle pdf_clip pdf_close_image pdf_close_pdi_page pdf_close_pdi pdf_close pdf_closepath_fill_stroke pdf_closepath_stroke pdf_closepath pdf_concat pdf_continue_text pdf_curveto pdf_delete pdf_end_page pdf_end_pattern pdf_end_template pdf_endpath pdf_fill_stroke pdf_fill pdf_findfont pdf_get_buffer pdf_get_font pdf_get_fontname pdf_get_fontsize pdf_get_image_height pdf_get_image_width pdf_get_majorversion pdf_get_minorversion pdf_get_parameter pdf_get_pdi_parameter pdf_get_pdi_value pdf_get_value pdf_initgraphics pdf_lineto pdf_makespotcolor pdf_moveto pdf_new pdf_open_CCITT pdf_open_file pdf_open_gif pdf_open_image_file pdf_open_image pdf_open_jpeg pdf_open_memory_image pdf_open_pdi_page pdf_open_pdi pdf_open_png pdf_open_tiff pdf_open pdf_place_image pdf_place_pdi_page pdf_rect pdf_restore pdf_rotate pdf_save pdf_scale pdf_set_border_color pdf_set_border_dash pdf_set_border_style pdf_set_char_spacing pdf_set_duration pdf_set_font pdf_set_horiz_scaling pdf_set_info_author pdf_set_info_creator pdf_set_info_keywords pdf_set_info_subject pdf_set_info_title pdf_set_info pdf_set_leading pdf_set_parameter pdf_set_text_matrix pdf_set_text_pos pdf_set_text_rendering pdf_set_text_rise pdf_set_value pdf_set_word_spacing pdf_setcolor pdf_setdash pdf_setflat pdf_setfont pdf_setgray_fill pdf_setgray_stroke pdf_setgray pdf_setlinecap pdf_setlinejoin pdf_setlinewidth pdf_setmatrix pdf_setmiterlimit pdf_setpolydash pdf_setrgbcolor_fill pdf_setrgbcolor_stroke pdf_setrgbcolor pdf_show_boxed pdf_show_xy pdf_show pdf_skew pdf_stringwidth pdf_stroke pdf_translate contained
+syn keyword phpFunctions pfpro_cleanup pfpro_init pfpro_process_raw pfpro_process pfpro_version contained
+syn keyword phpFunctions pg_affected_rows pg_cancel_query pg_client_encoding pg_close pg_connect pg_connection_busy pg_connection_reset pg_connection_status pg_convert pg_copy_from pg_copy_to pg_dbname pg_delete pg_end_copy pg_escape_bytea pg_escape_string pg_fetch_all pg_fetch_array pg_fetch_assoc pg_fetch_object pg_fetch_result pg_fetch_row pg_field_is_null pg_field_name pg_field_num pg_field_prtlen pg_field_size pg_field_type pg_free_result pg_get_notify pg_get_pid pg_get_result pg_host pg_insert pg_last_error pg_last_notice pg_last_oid pg_lo_close pg_lo_create pg_lo_export pg_lo_import pg_lo_open pg_lo_read_all pg_lo_read pg_lo_seek pg_lo_tell pg_lo_unlink pg_lo_write pg_meta_data pg_num_fields pg_num_rows pg_options pg_pconnect pg_ping pg_port pg_put_line pg_query pg_result_error pg_result_seek pg_result_status pg_select pg_send_query pg_set_client_encoding pg_trace pg_tty pg_unescape_bytea pg_untrace pg_update contained
+syn keyword phpFunctions posix_ctermid posix_get_last_error posix_getcwd posix_getegid posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid posix_isatty posix_kill posix_mkfifo posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid posix_setuid posix_strerror posix_times posix_ttyname posix_uname contained
+syn keyword phpFunctions printer_abort printer_close printer_create_brush printer_create_dc printer_create_font printer_create_pen printer_delete_brush printer_delete_dc printer_delete_font printer_delete_pen printer_draw_bmp printer_draw_chord printer_draw_elipse printer_draw_line printer_draw_pie printer_draw_rectangle printer_draw_roundrect printer_draw_text printer_end_doc printer_end_page printer_get_option printer_list printer_logical_fontheight printer_open printer_select_brush printer_select_font printer_select_pen printer_set_option printer_start_doc printer_start_page printer_write contained
+syn keyword phpFunctions pspell_add_to_personal pspell_add_to_session pspell_check pspell_clear_session pspell_config_create pspell_config_ignore pspell_config_mode pspell_config_personal pspell_config_repl pspell_config_runtogether pspell_config_save_repl pspell_new_config pspell_new_personal pspell_new pspell_save_wordlist pspell_store_replacement pspell_suggest contained
+syn keyword phpFunctions qdom_error qdom_tree contained
+syn keyword phpFunctions readline_add_history readline_clear_history readline_completion_function readline_info readline_list_history readline_read_history readline_write_history readline contained
+syn keyword phpFunctions recode_file recode_string recode contained
+syn keyword phpFunctions ereg_replace ereg eregi_replace eregi split spliti sql_regcase contained
+syn keyword phpFunctions ftok msg_get_queue msg_receive msg_remove_queue msg_send msg_set_queue msg_stat_queue sem_acquire sem_get sem_release sem_remove shm_attach shm_detach shm_get_var shm_put_var shm_remove_var shm_remove contained
+syn keyword phpFunctions sesam_affected_rows sesam_commit sesam_connect sesam_diagnostic sesam_disconnect sesam_errormsg sesam_execimm sesam_fetch_array sesam_fetch_result sesam_fetch_row sesam_field_array sesam_field_name sesam_free_result sesam_num_fields sesam_query sesam_rollback sesam_seek_row sesam_settransaction contained
+syn keyword phpFunctions session_cache_expire session_cache_limiter session_decode session_destroy session_encode session_get_cookie_params session_id session_is_registered session_module_name session_name session_regenerate_id session_register session_save_path session_set_cookie_params session_set_save_handler session_start session_unregister session_unset session_write_close contained
+syn keyword phpFunctions shmop_close shmop_delete shmop_open shmop_read shmop_size shmop_write contained
+syn keyword phpFunctions snmp_get_quick_print snmp_set_quick_print snmpget snmprealwalk snmpset snmpwalk snmpwalkoid contained
+syn keyword phpFunctions socket_accept socket_bind socket_clear_error socket_close socket_connect socket_create_listen socket_create_pair socket_create socket_get_option socket_getpeername socket_getsockname socket_iovec_add socket_iovec_alloc socket_iovec_delete socket_iovec_fetch socket_iovec_free socket_iovec_set socket_last_error socket_listen socket_read socket_readv socket_recv socket_recvfrom socket_recvmsg socket_select socket_send socket_sendmsg socket_sendto socket_set_block socket_set_nonblock socket_set_option socket_shutdown socket_strerror socket_write socket_writev contained
+syn keyword phpFunctions sqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_fetch_array sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_query sqlite_rewind sqlite_seek sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query contained
+syn keyword phpFunctions stream_context_create stream_context_get_options stream_context_set_option stream_context_set_params stream_copy_to_stream stream_filter_append stream_filter_prepend stream_filter_register stream_get_contents stream_get_filters stream_get_line stream_get_meta_data stream_get_transports stream_get_wrappers stream_register_wrapper stream_select stream_set_blocking stream_set_timeout stream_set_write_buffer stream_socket_accept stream_socket_client stream_socket_get_name stream_socket_recvfrom stream_socket_sendto stream_socket_server stream_wrapper_register contained
+syn keyword phpFunctions addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str print printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vprintf vsprintf wordwrap contained
+syn keyword phpFunctions swf_actiongeturl swf_actiongotoframe swf_actiongotolabel swf_actionnextframe swf_actionplay swf_actionprevframe swf_actionsettarget swf_actionstop swf_actiontogglequality swf_actionwaitforframe swf_addbuttonrecord swf_addcolor swf_closefile swf_definebitmap swf_definefont swf_defineline swf_definepoly swf_definerect swf_definetext swf_endbutton swf_enddoaction swf_endshape swf_endsymbol swf_fontsize swf_fontslant swf_fonttracking swf_getbitmapinfo swf_getfontinfo swf_getframe swf_labelframe swf_lookat swf_modifyobject swf_mulcolor swf_nextid swf_oncondition swf_openfile swf_ortho2 swf_ortho swf_perspective swf_placeobject swf_polarview swf_popmatrix swf_posround swf_pushmatrix swf_removeobject swf_rotate swf_scale swf_setfont swf_setframe swf_shapearc swf_shapecurveto3 swf_shapecurveto swf_shapefillbitmapclip swf_shapefillbitmaptile swf_shapefilloff swf_shapefillsolid swf_shapelinesolid swf_shapelineto swf_shapemoveto swf_showframe swf_startbutton swf_startdoaction swf_startshape swf_startsymbol swf_textwidth swf_translate swf_viewport contained
+syn keyword phpFunctions sybase_affected_rows sybase_close sybase_connect sybase_data_seek sybase_deadlock_retry_count sybase_fetch_array sybase_fetch_assoc sybase_fetch_field sybase_fetch_object sybase_fetch_row sybase_field_seek sybase_free_result sybase_get_last_message sybase_min_client_severity sybase_min_error_severity sybase_min_message_severity sybase_min_server_severity sybase_num_fields sybase_num_rows sybase_pconnect sybase_query sybase_result sybase_select_db sybase_set_message_handler sybase_unbuffered_query contained
+syn keyword phpFunctions tidy_access_count tidy_clean_repair tidy_config_count tidy_diagnose tidy_error_count tidy_get_body tidy_get_config tidy_get_error_buffer tidy_get_head tidy_get_html_ver tidy_get_html tidy_get_output tidy_get_release tidy_get_root tidy_get_status tidy_getopt tidy_is_xhtml tidy_load_config tidy_parse_file tidy_parse_string tidy_repair_file tidy_repair_string tidy_reset_config tidy_save_config tidy_set_encoding tidy_setopt tidy_warning_count contained
+syn keyword phpMethods attributes children get_attr get_nodes has_children has_siblings is_asp is_comment is_html is_jsp is_jste is_text is_xhtml is_xml next prev tidy_node contained
+syn keyword phpFunctions token_get_all token_name contained
+syn keyword phpFunctions base64_decode base64_encode get_meta_tags http_build_query parse_url rawurldecode rawurlencode urldecode urlencode contained
+syn keyword phpFunctions doubleval empty floatval get_defined_vars get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained
+syn keyword phpFunctions vpopmail_add_alias_domain_ex vpopmail_add_alias_domain vpopmail_add_domain_ex vpopmail_add_domain vpopmail_add_user vpopmail_alias_add vpopmail_alias_del_domain vpopmail_alias_del vpopmail_alias_get_all vpopmail_alias_get vpopmail_auth_user vpopmail_del_domain_ex vpopmail_del_domain vpopmail_del_user vpopmail_error vpopmail_passwd vpopmail_set_user_quota contained
+syn keyword phpFunctions w32api_deftype w32api_init_dtype w32api_invoke_function w32api_register_function w32api_set_call_method contained
+syn keyword phpFunctions wddx_add_vars wddx_deserialize wddx_packet_end wddx_packet_start wddx_serialize_value wddx_serialize_vars contained
+syn keyword phpFunctions utf8_decode utf8_encode xml_error_string xml_get_current_byte_index xml_get_current_column_number xml_get_current_line_number xml_get_error_code xml_parse_into_struct xml_parse xml_parser_create_ns xml_parser_create xml_parser_free xml_parser_get_option xml_parser_set_option xml_set_character_data_handler xml_set_default_handler xml_set_element_handler xml_set_end_namespace_decl_handler xml_set_external_entity_ref_handler xml_set_notation_decl_handler xml_set_object xml_set_processing_instruction_handler xml_set_start_namespace_decl_handler xml_set_unparsed_entity_decl_handler contained
+syn keyword phpFunctions xmlrpc_decode_request xmlrpc_decode xmlrpc_encode_request xmlrpc_encode xmlrpc_get_type xmlrpc_parse_method_descriptions xmlrpc_server_add_introspection_data xmlrpc_server_call_method xmlrpc_server_create xmlrpc_server_destroy xmlrpc_server_register_introspection_callback xmlrpc_server_register_method xmlrpc_set_type contained
+syn keyword phpFunctions xslt_create xslt_errno xslt_error xslt_free xslt_output_process xslt_set_base xslt_set_encoding xslt_set_error_handler xslt_set_log xslt_set_sax_handler xslt_set_sax_handlers xslt_set_scheme_handler xslt_set_scheme_handlers contained
+syn keyword phpFunctions yaz_addinfo yaz_ccl_conf yaz_ccl_parse yaz_close yaz_connect yaz_database yaz_element yaz_errno yaz_error yaz_es_result yaz_get_option yaz_hits yaz_itemorder yaz_present yaz_range yaz_record yaz_scan_result yaz_scan yaz_schema yaz_search yaz_set_option yaz_sort yaz_syntax yaz_wait contained
+syn keyword phpFunctions zip_close zip_entry_close zip_entry_compressedsize zip_entry_compressionmethod zip_entry_filesize zip_entry_name zip_entry_open zip_entry_read zip_open zip_read contained
+syn keyword phpFunctions gzclose gzcompress gzdeflate gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell gzuncompress gzwrite readgzfile zlib_get_coding_type contained
+
+if exists( "php_baselib" )
+ syn keyword phpMethods query next_record num_rows affected_rows nf f p np num_fields haltmsg seek link_id query_id metadata table_names nextid connect halt free register unregister is_registered delete url purl self_url pself_url hidden_session add_query padd_query reimport_get_vars reimport_post_vars reimport_cookie_vars set_container set_tokenname release_token put_headers get_id get_id put_id freeze thaw gc reimport_any_vars start url purl login_if is_authenticated auth_preauth auth_loginform auth_validatelogin auth_refreshlogin auth_registerform auth_doregister start check have_perm permsum perm_invalid contained
+ syn keyword phpFunctions page_open page_close sess_load sess_save contained
+endif
+
+" Conditional
+syn keyword phpConditional declare else enddeclare endswitch elseif endif if switch contained
+
+" Repeat
+syn keyword phpRepeat as do endfor endforeach endwhile for foreach while contained
+
+" Repeat
+syn keyword phpLabel case default switch contained
+
+" Statement
+syn keyword phpStatement return break continue exit contained
+
+" Keyword
+syn keyword phpKeyword var const contained
+
+" Type
+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
+
+" Operator
+syn match phpOperator "[-=+%^&|*!.~?:]" contained display
+syn match phpOperator "[-+*/%^&|.]=" contained display
+syn match phpOperator "/[^*/]"me=e-1 contained display
+syn match phpOperator "\$" contained display
+syn match phpOperator "&&\|\<and\>" contained display
+syn match phpOperator "||\|\<x\=or\>" contained display
+syn match phpRelation "[!=<>]=" contained display
+syn match phpRelation "[<>]" contained display
+syn match phpMemberSelector "->" contained display
+syn match phpVarSelector "\$" contained display
+
+" Identifier
+syn match phpIdentifier "$\h\w*" contained contains=phpEnvVar,phpIntVar,phpVarSelector display
+syn match phpIdentifierSimply "${\h\w*}" contains=phpOperator,phpParent contained display
+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
+
+" Methoden
+syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
+
+" Include
+syn keyword phpInclude include require include_once require_once contained
+
+" Define
+syn keyword phpDefine new contained
+
+" Boolean
+syn keyword phpBoolean true false contained
+
+" Number
+syn match phpNumber "-\=\<\d\+\>" contained display
+syn match phpNumber "\<0x\x\{1,8}\>" contained display
+
+" 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
+
+" Error
+syn match phpOctalError "[89]" contained display
+if exists("php_parent_error_close")
+ syn match phpParentError "[)\]}]" contained display
+endif
+
+" Todo
+syn keyword phpTodo todo fixme xxx contained
+
+" Comment
+if exists("php_parent_error_open")
+ syn region phpComment start="/\*" end="\*/" contained contains=phpTodo
+else
+ syn region phpComment start="/\*" end="\*/" contained contains=phpTodo extend
+endif
+if version >= 600
+ syn match phpComment "#.\{-}\(?>\|$\)\@=" contained contains=phpTodo
+ syn match phpComment "//.\{-}\(?>\|$\)\@=" contained contains=phpTodo
+else
+ syn match phpComment "#.\{-}$" contained contains=phpTodo
+ syn match phpComment "#.\{-}?>"me=e-2 contained contains=phpTodo
+ syn match phpComment "//.\{-}$" contained contains=phpTodo
+ syn match phpComment "//.\{-}?>"me=e-2 contained contains=phpTodo
+endif
+
+" 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 phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@phpAddStrings contained keepend
+else
+ syn region phpStringDouble 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
+endif
+
+" HereDoc
+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
+" 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 case ignore
+endif
+
+" Parent
+if exists("php_parent_error_close") || exists("php_parent_error_open")
+ syn match phpParent "[{}]" contained
+ syn region phpParent matchgroup=Delimiter start="(" end=")" contained contains=@phpClInside transparent
+ syn region phpParent matchgroup=Delimiter start="\[" end="\]" contained contains=@phpClInside transparent
+ if !exists("php_parent_error_close")
+ syn match phpParent "[\])]" contained
+ endif
+else
+ syn match phpParent "[({[\]})]" contained
+endif
+
+syn cluster phpClConst contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
+syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
+syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
+syn cluster phpClTop contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
+
+" Php Region
+if exists("php_parent_error_open")
+ if exists("php_noShortTags")
+ syn region phpRegion matchgroup=Delimiter start="<?php" end="?>" contains=@phpClTop
+ else
+ syn region phpRegion matchgroup=Delimiter start="<?\(php\)\=" end="?>" contains=@phpClTop
+ endif
+ syn region phpRegionSc matchgroup=Delimiter start=+<script language="php">+ end=+</script>+ contains=@phpClTop
+ if exists("php_asp_tags")
+ syn region phpRegionAsp matchgroup=Delimiter start="<%\(=\)\=" end="%>" contains=@phpClTop
+ endif
+else
+ if exists("php_noShortTags")
+ syn region phpRegion matchgroup=Delimiter start="<?php" end="?>" contains=@phpClTop keepend
+ else
+ syn region phpRegion matchgroup=Delimiter start="<?\(php\)\=" end="?>" contains=@phpClTop keepend
+ endif
+ syn region phpRegionSc matchgroup=Delimiter start=+<script language="php">+ end=+</script>+ contains=@phpClTop keepend
+ if exists("php_asp_tags")
+ syn region phpRegionAsp matchgroup=Delimiter start="<%\(=\)\=" end="%>" contains=@phpClTop keepend
+ endif
+endif
+
+" Fold
+if exists("php_folding") && php_folding==1
+" match one line constructs here and skip them at folding
+ syn keyword phpSCKeyword abstract final private protected public static contained
+ syn keyword phpFCKeyword function contained
+ syn keyword phpStorageClass global contained
+ syn match phpDefine "\(\s\|^\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\(\s\+.*[;}]\)\@=" contained contains=phpSCKeyword
+ syn match phpStructure "\(\s\|^\)\(abstract\s\+\|final\s\+\)*class\(\s\+.*}\)\@=" contained
+ syn match phpStructure "\(\s\|^\)interface\(\s\+.*}\)\@=" contained
+ syn match phpException "\(\s\|^\)try\(\s\+.*}\)\@=" contained
+ syn match phpException "\(\s\|^\)catch\(\s\+.*}\)\@=" contained
+
+ set foldmethod=syntax
+ syn region phpFoldHtmlInside matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
+ syn region phpFoldFunction matchgroup=Storageclass start="^\z(\s*\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\s\([^};]*$\)\@="rs=e-9 matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldHtmlInside,phpFCKeyword contained transparent fold extend
+ syn region phpFoldFunction matchgroup=Define start="^function\s\([^};]*$\)\@=" matchgroup=Delimiter end="^}" contains=@phpClFunction,phpFoldHtmlInside contained transparent fold extend
+ syn region phpFoldClass matchgroup=Structure start="^\z(\s*\)\(abstract\s\+\|final\s\+\)*class\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction,phpSCKeyword contained transparent fold extend
+ syn region phpFoldInterface matchgroup=Structure start="^\z(\s*\)interface\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+ syn region phpFoldCatch matchgroup=Exception start="^\z(\s*\)catch\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+ syn region phpFoldTry matchgroup=Exception start="^\z(\s*\)try\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+elseif exists("php_folding") && php_folding==2
+ syn keyword phpDefine function contained
+ syn keyword phpStructure abstract class interface contained
+ syn keyword phpException catch throw try contained
+ syn keyword phpStorageClass final global private protected public static contained
+
+ set foldmethod=syntax
+ syn region phpFoldHtmlInside matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
+ syn region phpParent matchgroup=Delimiter start="{" end="}" contained contains=@phpClFunction,phpFoldHtmlInside transparent fold
+else
+ syn keyword phpDefine function contained
+ syn keyword phpStructure abstract class interface contained
+ syn keyword phpException catch throw try contained
+ syn keyword phpStorageClass final global private protected public static contained
+endif
+
+
+" Sync
+if php_sync_method==-1
+ if exists("php_noShortTags")
+ syn sync match phpRegionSync grouphere phpRegion "^\s*<?php\s*$"
+ else
+ syn sync match phpRegionSync grouphere phpRegion "^\s*<?\(php\)\=\s*$"
+ endif
+ syn sync match phpRegionSync grouphere phpRegionSc +^\s*<script language="php">\s*$+
+ if exists("php_asp_tags")
+ syn sync match phpRegionSync grouphere phpRegionAsp "^\s*<%\(=\)\=\s*$"
+ endif
+ syn sync match phpRegionSync grouphere NONE "^\s*?>\s*$"
+ syn sync match phpRegionSync grouphere NONE "^\s*%>\s*$"
+ syn sync match phpRegionSync grouphere phpRegion "function\s.*(.*\$"
+ "syn sync match phpRegionSync grouphere NONE "/\i*>\s*$"
+elseif php_sync_method>0
+ exec "syn sync minlines=" . php_sync_method
+else
+ exec "syn sync fromstart"
+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_php_syn_inits")
+ if version < 508
+ let did_php_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink phpConstant Constant
+ HiLink phpCoreConstant Constant
+ HiLink phpComment Comment
+ HiLink phpException Exception
+ HiLink phpBoolean Boolean
+ HiLink phpStorageClass StorageClass
+ HiLink phpSCKeyword StorageClass
+ HiLink phpFCKeyword Define
+ HiLink phpStructure Structure
+ HiLink phpStringSingle String
+ HiLink phpStringDouble String
+ HiLink phpNumber Number
+ HiLink phpFloat Float
+ HiLink phpMethods Function
+ HiLink phpFunctions Function
+ HiLink phpBaselib Function
+ HiLink phpRepeat Repeat
+ HiLink phpConditional Conditional
+ HiLink phpLabel Label
+ HiLink phpStatement Statement
+ HiLink phpKeyword Statement
+ HiLink phpType Type
+ HiLink phpInclude Include
+ HiLink phpDefine Define
+ HiLink phpSpecialChar SpecialChar
+ HiLink phpParent Delimiter
+ HiLink phpIdentifierConst Delimiter
+ HiLink phpParentError Error
+ HiLink phpOctalError Error
+ HiLink phpTodo Todo
+ HiLink phpMemberSelector Structure
+ if exists("php_oldStyle")
+ hi phpIntVar guifg=Red ctermfg=DarkRed
+ hi phpEnvVar guifg=Red ctermfg=DarkRed
+ hi phpOperator guifg=SeaGreen ctermfg=DarkGreen
+ hi phpVarSelector guifg=SeaGreen ctermfg=DarkGreen
+ hi phpRelation guifg=SeaGreen ctermfg=DarkGreen
+ 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
+ endif
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "php"
+
+if main_syntax == 'php'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/phtml.vim b/runtime/syntax/phtml.vim
new file mode 100644
index 000000000..2ff6dd95c
--- /dev/null
+++ b/runtime/syntax/phtml.vim
@@ -0,0 +1,244 @@
+" Vim syntax file
+" Language: phtml PHP 2.0
+" Maintainer: Lutz Eymers <ixtab@polzin.com>
+" URL: http://www.isp.de/data/phtml.vim
+" Email: Subject: send syntax_vim.tgz
+" Last change: 2003 May 11
+"
+" Options phtml_sql_query = 1 for SQL syntax highligthing inside strings
+" phtml_minlines = x to sync at least x lines backwards
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'phtml'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syn cluster htmlPreproc add=phtmlRegionInsideHtmlTags
+
+if exists( "phtml_sql_query")
+ if phtml_sql_query == 1
+ syn include @phtmlSql <sfile>:p:h/sql.vim
+ unlet b:current_syntax
+ endif
+endif
+syn cluster phtmlSql remove=sqlString,sqlComment
+
+syn case match
+
+" Env Variables
+syn keyword phtmlEnvVar SERVER_SOFTWARE SERVER_NAME SERVER_URL GATEWAY_INTERFACE contained
+syn keyword phtmlEnvVar SERVER_PROTOCOL SERVER_PORT REQUEST_METHOD PATH_INFO contained
+syn keyword phtmlEnvVar PATH_TRANSLATED SCRIPT_NAME QUERY_STRING REMOTE_HOST contained
+syn keyword phtmlEnvVar REMOTE_ADDR AUTH_TYPE REMOTE_USER CONTEN_TYPE contained
+syn keyword phtmlEnvVar CONTENT_LENGTH HTTPS HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE contained
+syn keyword phtmlEnvVar HTTP_ACCECT HTTP_USER_AGENT HTTP_IF_MODIFIED_SINCE contained
+syn keyword phtmlEnvVar HTTP_FROM HTTP_REFERER contained
+syn keyword phtmlEnvVar PHP_SELF contained
+
+syn case ignore
+
+" Internal Variables
+syn keyword phtmlIntVar phperrmsg php_self contained
+
+" Comment
+syn region phtmlComment start="/\*" end="\*/" contained contains=phtmlTodo
+
+" Function names
+syn keyword phtmlFunctions Abs Ada_Close Ada_Connect Ada_Exec Ada_FetchRow contained
+syn keyword phtmlFunctions Ada_FieldName Ada_FieldNum Ada_FieldType contained
+syn keyword phtmlFunctions Ada_FreeResult Ada_NumFields Ada_NumRows Ada_Result contained
+syn keyword phtmlFunctions Ada_ResultAll AddSlashes ASort BinDec Ceil ChDir contained
+syn keyword phtmlFunctions AdaGrp ChMod ChOwn Chop Chr ClearStack ClearStatCache contained
+syn keyword phtmlFunctions closeDir CloseLog Cos Count Crypt Date dbList contained
+syn keyword phtmlFunctions dbmClose dbmDelete dbmExists dbmFetch dbmFirstKey contained
+syn keyword phtmlFunctions dbmInsert dbmNextKey dbmOpen dbmReplace DecBin DecHex contained
+syn keyword phtmlFunctions DecOct doubleval Echo End ereg eregi ereg_replace contained
+syn keyword phtmlFunctions eregi_replace EscapeShellCmd Eval Exec Exit Exp contained
+syn keyword phtmlFunctions fclose feof fgets fgetss File fileAtime fileCtime contained
+syn keyword phtmlFunctions fileGroup fileInode fileMtime fileOwner filePerms contained
+syn keyword phtmlFunctions fileSize fileType Floor Flush fopen fputs FPassThru contained
+syn keyword phtmlFunctions fseek fsockopen ftell getAccDir GetEnv getHostByName contained
+syn keyword phtmlFunctions getHostByAddr GetImageSize getLastAcess contained
+syn keyword phtmlFunctions getLastbrowser getLastEmail getLastHost getLastMod contained
+syn keyword phtmlFunctions getLastref getLogDir getMyInode getMyPid getMyUid contained
+syn keyword phtmlFunctions getRandMax getStartLogging getToday getTotal GetType contained
+syn keyword phtmlFunctions gmDate Header HexDec HtmlSpecialChars ImageArc contained
+syn keyword phtmlFunctions ImageChar ImageCharUp IamgeColorAllocate contained
+syn keyword phtmlFunctions ImageColorTransparent ImageCopyResized ImageCreate contained
+syn keyword phtmlFunctions ImageCreateFromGif ImageDestroy ImageFill contained
+syn keyword phtmlFunctions ImageFilledPolygon ImageFilledRectangle contained
+syn keyword phtmlFunctions ImageFillToBorder ImageGif ImageInterlace ImageLine contained
+syn keyword phtmlFunctions ImagePolygon ImageRectangle ImageSetPixel contained
+syn keyword phtmlFunctions ImageString ImageStringUp ImageSX ImageSY Include contained
+syn keyword phtmlFunctions InitSyslog intval IsSet Key Link LinkInfo Log Log10 contained
+syn keyword phtmlFunctions LosAs Mail Max Md5 mi_Close mi_Connect mi_DBname contained
+syn keyword phtmlFunctions mi_Exec mi_FieldName mi_FieldNum mi_NumFields contained
+syn keyword phtmlFunctions mi_NumRows mi_Result Microtime Min MkDir MkTime msql contained
+syn keyword phtmlFunctions msql_connect msql_CreateDB msql_dbName msql_DropDB contained
+syn keyword phtmlFunctions msqlFieldFlags msql_FieldLen msql_FieldName contained
+syn keyword phtmlFunctions msql_FieldType msql_FreeResult msql_ListDBs contained
+syn keyword phtmlFunctions msql_Listfields msql_ListTables msql_NumFields contained
+syn keyword phtmlFunctions msql_NumRows msql_RegCase msql_Result msql_TableName contained
+syn keyword phtmlFunctions mysql mysql_affected_rows mysql_close mysql_connect contained
+syn keyword phtmlFunctions mysql_CreateDB mysql_dbName mysqlDropDB contained
+syn keyword phtmlFunctions mysql_FieldFlags mysql_FieldLen mysql_FieldName contained
+syn keyword phtmlFunctions mysql_FieldType mysql_FreeResult mysql_insert_id contained
+syn keyword phtmlFunctions mysql_listDBs mysql_Listfields mysql_ListTables contained
+syn keyword phtmlFunctions mysql_NumFields mysql_NumRows mysql_Result contained
+syn keyword phtmlFunctions mysql_TableName Next OctDec openDir OpenLog contained
+syn keyword phtmlFunctions Ora_Bind Ora_Close Ora_Commit Ora_CommitOff contained
+syn keyword phtmlFunctions Ora_CommitOn Ora_Exec Ora_Fetch Ora_GetColumn contained
+syn keyword phtmlFunctions Ora_Logoff Ora_Logon Ora_Parse Ora_Rollback Ord contained
+syn keyword phtmlFunctions Parse_str PassThru pclose pg_Close pg_Connect contained
+syn keyword phtmlFunctions pg_DBname pg_ErrorMessage pg_Exec pg_FieldName contained
+syn keyword phtmlFunctions pg_FieldPrtLen pg_FieldNum pg_FieldSize contained
+syn keyword phtmlFunctions pg_FieldType pg_FreeResult pg_GetLastOid pg_Host contained
+syn keyword phtmlFunctions pg_NumFields pg_NumRows pg_Options pg_Port contained
+syn keyword phtmlFunctions pg_Result pg_tty phpInfo phpVersion popen pos pow contained
+syn keyword phtmlFunctions Prev PutEnv QuoteMeta Rand readDir ReadFile ReadLink contained
+syn keyword phtmlFunctions reg_Match reg_replace reg_Search Rename Reset return contained
+syn keyword phtmlFunctions rewind rewindDir RmDir rSort SetCookie SetErrorReporting contained
+syn keyword phtmlFunctions SetLogging SetShowInfo SetType shl shr Sin Sleep contained
+syn keyword phtmlFunctions Solid_Close Solid_Connect Solid_Exec Solid_FetchRow contained
+syn keyword phtmlFunctions Solid_FieldName Solid_FieldNum Solid_FreeResult contained
+syn keyword phtmlFunctions Solid_NumFields Solid_NumRows Solid_Result Sort contained
+syn keyword phtmlFunctions Spundtex Sprintf Sqrt Srand strchr strtr contained
+syn keyword phtmlFunctions StripSlashes strlen strchr strstr strtok strtolower contained
+syn keyword phtmlFunctions strtoupper strval substr sybSQL_CheckConnect contained
+syn keyword phtmlFunctions sybSQL_DBUSE sybSQL_Connect sybSQL_Exit contained
+syn keyword phtmlFunctions sybSQL_Fieldname sybSQL_GetField sybSQL_IsRow contained
+syn keyword phtmlFunctions sybSQL_NextRow sybSQL_NumFields sybSQL_NumRows contained
+syn keyword phtmlFunctions sybSQL_Query sybSQL_Result sybSQL_Result sybSQL_Seek contained
+syn keyword phtmlFunctions Symlink syslog System Tan TempNam Time Umask UniqId contained
+syn keyword phtmlFunctions Unlink Unset UrlDecode UrlEncode USleep Virtual contained
+syn keyword phtmlFunctions SecureVar contained
+
+" Conditional
+syn keyword phtmlConditional if else elseif endif switch endswitch contained
+
+" Repeat
+syn keyword phtmlRepeat while endwhile contained
+
+" Repeat
+syn keyword phtmlLabel case default contained
+
+" Statement
+syn keyword phtmlStatement break return continue exit contained
+
+" Operator
+syn match phtmlOperator "[-=+%^&|*!]" contained
+syn match phtmlOperator "[-+*/%^&|]=" contained
+syn match phtmlOperator "/[^*]"me=e-1 contained
+syn match phtmlOperator "\$" contained
+syn match phtmlRelation "&&" contained
+syn match phtmlRelation "||" contained
+syn match phtmlRelation "[!=<>]=" contained
+syn match phtmlRelation "[<>]" contained
+
+" Identifier
+syn match phtmlIdentifier "$\h\w*" contained contains=phtmlEnvVar,phtmlIntVar,phtmlOperator
+
+
+" Include
+syn keyword phtmlInclude include contained
+
+" Definesag
+syn keyword phtmlDefine Function contained
+
+" String
+syn region phtmlString keepend matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=phtmlIdentifier,phtmlSpecialChar,@phtmlSql contained
+
+" Number
+syn match phtmlNumber "-\=\<\d\+\>" contained
+
+" Float
+syn match phtmlFloat "\(-\=\<\d+\|-\=\)\.\d\+\>" contained
+
+" SpecialChar
+syn match phtmlSpecialChar "\\[abcfnrtyv\\]" contained
+syn match phtmlSpecialChar "\\\d\{3}" contained contains=phtmlOctalError
+syn match phtmlSpecialChar "\\x[0-9a-fA-F]\{2}" contained
+
+syn match phtmlOctalError "[89]" contained
+
+
+syn match phtmlParentError "[)}\]]" contained
+
+" Todo
+syn keyword phtmlTodo TODO Todo todo contained
+
+" Parents
+syn cluster phtmlInside contains=phtmlComment,phtmlFunctions,phtmlIdentifier,phtmlConditional,phtmlRepeat,phtmlLabel,phtmlStatement,phtmlOperator,phtmlRelation,phtmlString,phtmlNumber,phtmlFloat,phtmlSpecialChar,phtmlParent,phtmlParentError,phtmlInclude
+
+syn cluster phtmlTop contains=@phtmlInside,phtmlInclude,phtmlDefine,phtmlParentError,phtmlTodo
+syn region phtmlParent matchgroup=Delimiter start="(" end=")" contained contains=@phtmlInside
+syn region phtmlParent matchgroup=Delimiter start="{" end="}" contained contains=@phtmlInside
+syn region phtmlParent matchgroup=Delimiter start="\[" end="\]" contained contains=@phtmlInside
+
+syn region phtmlRegion keepend matchgroup=Delimiter start="<?" skip=+(.*>.*)\|".\{-}>.\{-}"\|/\*.\{-}>.\{-}\*/+ end=">" contains=@phtmlTop
+syn region phtmlRegionInsideHtmlTags keepend matchgroup=Delimiter start="<?" skip=+(.*>.*)\|/\*.\{-}>.\{-}\*/+ end=">" contains=@phtmlTop contained
+
+" sync
+if exists("phtml_minlines")
+ exec "syn sync minlines=" . phtml_minlines
+else
+ syn sync minlines=100
+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_phtml_syn_inits")
+ if version < 508
+ let did_phtml_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink phtmlComment Comment
+ HiLink phtmlString String
+ HiLink phtmlNumber Number
+ HiLink phtmlFloat Float
+ HiLink phtmlIdentifier Identifier
+ HiLink phtmlIntVar Identifier
+ HiLink phtmlEnvVar Identifier
+ HiLink phtmlFunctions Function
+ HiLink phtmlRepeat Repeat
+ HiLink phtmlConditional Conditional
+ HiLink phtmlLabel Label
+ HiLink phtmlStatement Statement
+ HiLink phtmlType Type
+ HiLink phtmlInclude Include
+ HiLink phtmlDefine Define
+ HiLink phtmlSpecialChar SpecialChar
+ HiLink phtmlParentError Error
+ HiLink phtmlOctalError Error
+ HiLink phtmlTodo Todo
+ HiLink phtmlOperator Operator
+ HiLink phtmlRelation Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "phtml"
+
+if main_syntax == 'phtml'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/pic.vim b/runtime/syntax/pic.vim
new file mode 100644
index 000000000..adc964ea9
--- /dev/null
+++ b/runtime/syntax/pic.vim
@@ -0,0 +1,127 @@
+" Vim syntax file
+" Language: PIC16F84 Assembler (Microchip's microcontroller)
+" Maintainer: Aleksandar Veselinovic <aleksa@cs.cmu.com>
+" Last Change: 2003 May 11
+" URL: http://galeb.etf.bg.ac.yu/~alexa/vim/syntax/pic.vim
+" Revision: 1.01
+
+" 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 match
+syn keyword picTodo NOTE TODO XXX contained
+
+syn case ignore
+
+syn match picIdentifier "[a-z_$][a-z0-9_$]*"
+syn match picLabel "^[A-Z_$][A-Z0-9_$]*"
+syn match picLabel "^[A-Z_$][A-Z0-9_$]*:"me=e-1
+
+syn match picASCII "A\='.'"
+syn match picBinary "B'[0-1]\+'"
+syn match picDecimal "D'\d\+'"
+syn match picDecimal "\d\+"
+syn match picHexadecimal "0x\x\+"
+syn match picHexadecimal "H'\x\+'"
+syn match picHexadecimal "[0-9]\x*h"
+syn match picOctal "O'[0-7]\o*'"
+
+
+syn match picComment ";.*" contains=picTodo
+
+syn region picString start=+"+ end=+"+
+
+syn keyword picRegister INDF TMR0 PCL STATUS FSR PORTA PORTB
+syn keyword picRegister EEDATA EEADR PCLATH INTCON INDF OPTION_REG PCL
+syn keyword picRegister FSR TRISA TRISB EECON1 EECON2 INTCON OPTION
+
+
+" Register --- bits
+
+" STATUS
+syn keyword picRegisterPart IRP RP1 RP0 TO PD Z DC C
+
+" PORTA
+syn keyword picRegisterPart T0CKI
+syn match picRegisterPart "RA[0-4]"
+
+" PORTB
+syn keyword picRegisterPart INT
+syn match picRegisterPart "RB[0-7]"
+
+" INTCON
+syn keyword picRegisterPart GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
+
+" OPTION
+syn keyword picRegisterPart RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
+
+" EECON2
+syn keyword picRegisterPart EEIF WRERR WREN WR RD
+
+" INTCON
+syn keyword picRegisterPart GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
+
+
+" OpCodes...
+syn keyword picOpcode ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ
+syn keyword picOpcode IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF
+syn keyword picOpcode BCF BSF BTFSC BTFSS
+syn keyword picOpcode ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE
+syn keyword picOpcode RETLW RETURN SLEEP SUBLW XORLW
+syn keyword picOpcode GOTO
+
+
+" Directives
+syn keyword picDirective __BADRAM BANKISEL BANKSEL CBLOCK CODE __CONFIG
+syn keyword picDirective CONSTANT DATA DB DE DT DW ELSE END ENDC
+syn keyword picDirective ENDIF ENDM ENDW EQU ERROR ERRORLEVEL EXITM EXPAND
+syn keyword picDirective EXTERN FILL GLOBAL IDATA __IDLOCS IF IFDEF IFNDEF
+syn keyword picDirective INCLUDE LIST LOCAL MACRO __MAXRAM MESSG NOEXPAND
+syn keyword picDirective NOLIST ORG PAGE PAGESEL PROCESSOR RADIX RES SET
+syn keyword picDirective SPACE SUBTITLE TITLE UDATA UDATA_OVR UDATA_SHR
+syn keyword picDirective VARIABLE WHILE INCLUDE
+syn match picDirective "#\=UNDEFINE"
+syn match picDirective "#\=INCLUDE"
+syn match picDirective "#\=DEFINE"
+
+
+" 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_pic16f84_syntax_inits")
+ if version < 508
+ let did_pic16f84_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink picTodo Todo
+ HiLink picComment Comment
+ HiLink picDirective Statement
+ HiLink picLabel Label
+ HiLink picString String
+
+ "HiLink picOpcode Keyword
+ "HiLink picRegister Structure
+ "HiLink picRegisterPart Special
+
+ HiLink picASCII String
+ HiLink picBinary Number
+ HiLink picDecimal Number
+ HiLink picHexadecimal Number
+ HiLink picOctal Number
+
+ HiLink picIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pic"
+
+" vim: ts=8
diff --git a/runtime/syntax/pike.vim b/runtime/syntax/pike.vim
new file mode 100644
index 000000000..efbafd5d8
--- /dev/null
+++ b/runtime/syntax/pike.vim
@@ -0,0 +1,155 @@
+" Vim syntax file
+" Language: Pike
+" Maintainer: Francesco Chemolli <kinkie@kame.usr.dsi.unimi.it>
+" Last Change: 2001 May 10
+
+" 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
+
+" A bunch of useful C keywords
+syn keyword pikeStatement goto break return continue
+syn keyword pikeLabel case default
+syn keyword pikeConditional if else switch
+syn keyword pikeRepeat while for foreach do
+syn keyword pikeStatement gauge destruct lambda inherit import typeof
+syn keyword pikeException catch
+syn keyword pikeType inline nomask private protected public static
+
+
+syn keyword pikeTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match pikeSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
+syn region pikeString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pikeSpecial
+syn match pikeCharacter "'[^\\]'"
+syn match pikeSpecialCharacter "'\\.'"
+syn match pikeSpecialCharacter "'\\[0-7][0-7]'"
+syn match pikeSpecialCharacter "'\\[0-7][0-7][0-7]'"
+
+" Compound data types
+syn region pikeCompoundType start='({' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='})'
+syn region pikeCompoundType start='(\[' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='\])'
+syn region pikeCompoundType start='(<' contains=pikeString,pikeCompoundType,pikeNumber,pikeFloat end='>)'
+
+"catch errors caused by wrong parenthesis
+syn region pikeParen transparent start='([^{[<(]' end=')' contains=ALLBUT,pikeParenError,pikeIncluded,pikeSpecial,pikeTodo,pikeUserLabel,pikeBitField
+syn match pikeParenError ")"
+syn match pikeInParen contained "[^(][{}][^)]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match pikeNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match pikeFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match pikeFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match pikeFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match pikeNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+"syn match pikeIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+" flag an octal number with wrong digits
+syn match pikeOctalError "\<0[0-7]*[89]"
+
+if exists("c_comment_strings")
+ " A comment can contain pikeString, pikeCharacter and pikeNumber.
+ " But a "*/" inside a pikeString in a pikeComment DOES end the comment! So we
+ " need to use a special type of pikeString: pikeCommentString, 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 pikeCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region pikeCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=pikeSpecial,pikeCommentSkip
+ syntax region pikeComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=pikeSpecial
+ syntax region pikeComment start="/\*" end="\*/" contains=pikeTodo,pikeCommentString,pikeCharacter,pikeNumber,pikeFloat
+ syntax match pikeComment "//.*" contains=pikeTodo,pikeComment2String,pikeCharacter,pikeNumber
+ syntax match pikeComment "#\!.*" contains=pikeTodo,pikeComment2String,pikeCharacter,pikeNumber
+else
+ syn region pikeComment start="/\*" end="\*/" contains=pikeTodo
+ syn match pikeComment "//.*" contains=pikeTodo
+ syn match pikeComment "#!.*" contains=pikeTodo
+endif
+syntax match pikeCommentError "\*/"
+
+syn keyword pikeOperator sizeof
+syn keyword pikeType int string void float mapping array multiset mixed
+syn keyword pikeType program object function
+
+syn region pikePreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=pikeComment,pikeString,pikeCharacter,pikeNumber,pikeCommentError
+syn region pikeIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match pikeIncluded contained "<[^>]*>"
+syn match pikeInclude "^\s*#\s*include\>\s*["<]" contains=pikeIncluded
+"syn match pikeLineSkip "\\$"
+syn region pikeDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,pikePreCondit,pikeIncluded,pikeInclude,pikeDefine,pikeInParen
+syn region pikePreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,pikePreCondit,pikeIncluded,pikeInclude,pikeDefine,pikeInParen
+
+" Highlight User Labels
+syn region pikeMulti transparent start='?' end=':' contains=ALLBUT,pikeIncluded,pikeSpecial,pikeTodo,pikeUserLabel,pikeBitField
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn match pikeUserLabel "^\s*\I\i*\s*:$"
+syn match pikeUserLabel ";\s*\I\i*\s*:$"ms=s+1
+syn match pikeUserLabel "^\s*\I\i*\s*:[^:]"me=e-1
+syn match pikeUserLabel ";\s*\I\i*\s*:[^:]"ms=s+1,me=e-1
+
+" Avoid recognizing most bitfields as labels
+syn match pikeBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match pikeBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+syn sync ccomment pikeComment minlines=10
+
+" 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_pike_syntax_inits")
+ if version < 508
+ let did_pike_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pikeLabel Label
+ HiLink pikeUserLabel Label
+ HiLink pikeConditional Conditional
+ HiLink pikeRepeat Repeat
+ HiLink pikeCharacter Character
+ HiLink pikeSpecialCharacter pikeSpecial
+ HiLink pikeNumber Number
+ HiLink pikeFloat Float
+ HiLink pikeOctalError pikeError
+ HiLink pikeParenError pikeError
+ HiLink pikeInParen pikeError
+ HiLink pikeCommentError pikeError
+ HiLink pikeOperator Operator
+ HiLink pikeInclude Include
+ HiLink pikePreProc PreProc
+ HiLink pikeDefine Macro
+ HiLink pikeIncluded pikeString
+ HiLink pikeError Error
+ HiLink pikeStatement Statement
+ HiLink pikePreCondit PreCondit
+ HiLink pikeType Type
+ HiLink pikeCommentError pikeError
+ HiLink pikeCommentString pikeString
+ HiLink pikeComment2String pikeString
+ HiLink pikeCommentSkip pikeComment
+ HiLink pikeString String
+ HiLink pikeComment Comment
+ HiLink pikeSpecial SpecialChar
+ HiLink pikeTodo Todo
+ HiLink pikeException pikeStatement
+ HiLink pikeCompoundType Constant
+ "HiLink pikeIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pike"
+
+" vim: ts=8
diff --git a/runtime/syntax/pilrc.vim b/runtime/syntax/pilrc.vim
new file mode 100644
index 000000000..86d561158
--- /dev/null
+++ b/runtime/syntax/pilrc.vim
@@ -0,0 +1,148 @@
+" Vim syntax file
+" Language: pilrc - a resource compiler for Palm OS development
+" Maintainer: Brian Schau <brian@schau.com>
+" Last change: 2003 May 11
+" Available on: http://www.schau.com/pilrcvim/pilrc.vim
+
+" Remove any old syntax
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case ignore
+
+" Notes: TRANSPARENT, FONT and FONT ID are defined in the specials
+" section below. Beware of the order of the specials!
+" Look in the syntax.txt and usr_27.txt files in vim\vim{version}\doc
+" directory for regexps etc.
+
+" Keywords - basic
+syn keyword pilrcKeyword ALERT APPLICATION APPLICATIONICONNAME AREA
+syn keyword pilrcKeyword BITMAP BITMAPCOLOR BITMAPCOLOR16 BITMAPCOLOR16K
+syn keyword pilrcKeyword BITMAPFAMILY BITMAPFAMILYEX BITMAPFAMILYSPECIAL
+syn keyword pilrcKeyword BITMAPGREY BITMAPGREY16 BITMAPSCREENFAMILY
+syn keyword pilrcKeyword BOOTSCREENFAMILY BUTTON BUTTONS BYTELIST
+syn keyword pilrcKeyword CATEGORIES CHECKBOX COUNTRYLOCALISATION
+syn keyword pilrcKeyword DATA
+syn keyword pilrcKeyword FEATURE FIELD FONTINDEX FORM FORMBITMAP
+syn keyword pilrcKeyword GADGET GENERATEHEADER
+syn keyword pilrcKeyword GRAFFITIINPUTAREA GRAFFITISTATEINDICATOR
+syn keyword pilrcKeyword HEX
+syn keyword pilrcKeyword ICON ICONFAMILY ICONFAMILYEX INTEGER
+syn keyword pilrcKeyword KEYBOARD
+syn keyword pilrcKeyword LABEL LAUNCHERCATEGORY LIST LONGWORDLIST
+syn keyword pilrcKeyword MENU MENUITEM MESSAGE MIDI
+syn keyword pilrcKeyword PALETTETABLE POPUPLIST POPUPTRIGGER
+syn keyword pilrcKeyword PULLDOWN PUSHBUTTON
+syn keyword pilrcKeyword REPEATBUTTON RESETAUTOID
+syn keyword pilrcKeyword SCROLLBAR SELECTORTRIGGER SLIDER SMALLICON
+syn keyword pilrcKeyword SMALLICONFAMILY SMALLICONFAMILYEX STRING STRINGTABLE
+syn keyword pilrcKeyword TABLE TITLE TRANSLATION TRAP
+syn keyword pilrcKeyword VERSION
+syn keyword pilrcKeyword WORDLIST
+
+" Types
+syn keyword pilrcType AT AUTOSHIFT
+syn keyword pilrcType BACKGROUNDID BITMAPID BOLDFRAME BPP
+syn keyword pilrcType CHECKED COLORTABLE COLUMNS COLUMNWIDTHS COMPRESS
+syn keyword pilrcType COMPRESSBEST COMPRESSPACKBITS COMPRESSRLE COMPRESSSCANLINE
+syn keyword pilrcType CONFIRMATION COUNTRY CREATOR CURRENCYDECIMALPLACES
+syn keyword pilrcType CURRENCYNAME CURRENCYSYMBOL CURRENCYUNIQUESYMBOL
+syn keyword pilrcType DATEFORMAT DAYLIGHTSAVINGS DEFAULTBTNID DEFAULTBUTTON
+syn keyword pilrcType DENSITY DISABLED DYNAMICSIZE
+syn keyword pilrcType EDITABLE ENTRY ERROR EXTENDED
+syn keyword pilrcType FEEDBACK FILE FONTID FORCECOMPRESS FRAME
+syn keyword pilrcType GRAFFITI GRAPHICAL GROUP
+syn keyword pilrcType HASSCROLLBAR HELPID
+syn keyword pilrcType ID INDEX INFORMATION
+syn keyword pilrcType KEYDOWNCHR KEYDOWNKEYCODE KEYDOWNMODIFIERS
+syn keyword pilrcType LANGUAGE LEFTALIGN LEFTANCHOR LONGDATEFORMAT
+syn keyword pilrcType MAX MAXCHARS MEASUREMENTSYSTEM MENUID MIN LOCALE
+syn keyword pilrcType MINUTESWESTOFGMT MODAL MULTIPLELINES
+syn keyword pilrcType NAME NOCOLORTABLE NOCOMPRESS NOFRAME NONEDITABLE
+syn keyword pilrcType NONEXTENDED NONUSABLE NOSAVEBEHIND NUMBER NUMBERFORMAT
+syn keyword pilrcType NUMERIC
+syn keyword pilrcType PAGESIZE
+syn keyword pilrcType RECTFRAME RIGHTALIGN RIGHTANCHOR ROWS
+syn keyword pilrcType SAVEBEHIND SEARCH SCREEN SELECTEDBITMAPID SINGLELINE
+syn keyword pilrcType THUMBID TRANSPARENTINDEX TIMEFORMAT
+syn keyword pilrcType UNDERLINED USABLE
+syn keyword pilrcType VALUE VERTICAL VISIBLEITEMS
+syn keyword pilrcType WARNING WEEKSTARTDAY
+
+" Country
+syn keyword pilrcCountry Australia Austria Belgium Brazil Canada Denmark
+syn keyword pilrcCountry Finland France Germany HongKong Iceland Indian
+syn keyword pilrcCountry Indonesia Ireland Italy Japan Korea Luxembourg Malaysia
+syn keyword pilrcCountry Mexico Netherlands NewZealand Norway Philippines
+syn keyword pilrcCountry RepChina Singapore Spain Sweden Switzerland Thailand
+syn keyword pilrcCountry Taiwan UnitedKingdom UnitedStates
+
+" Language
+syn keyword pilrcLanguage English French German Italian Japanese Spanish
+
+" String
+syn match pilrcString "\"[^"]*\""
+
+" Number
+syn match pilrcNumber "\<0x\x\+\>"
+syn match pilrcNumber "\<\d\+\>"
+
+" Comment
+syn region pilrcComment start="/\*" end="\*/"
+syn region pilrcComment start="//" end="$"
+
+" Constants
+syn keyword pilrcConstant AUTO AUTOID BOTTOM CENTER PREVBOTTOM PREVHEIGHT
+syn keyword pilrcConstant PREVLEFT PREVRIGHT PREVTOP PREVWIDTH RIGHT
+syn keyword pilrcConstant SEPARATOR
+
+" Identifier
+syn match pilrcIdentifier "\<\h\w*\>"
+
+" Specials
+syn match pilrcType "\<FONT\>"
+syn match pilrcKeyword "\<FONT\>\s*\<ID\>"
+syn match pilrcType "\<TRANSPARENT\>"
+
+" Function
+syn keyword pilrcFunction BEGIN END
+
+" Include
+syn match pilrcInclude "\#include"
+syn match pilrcInclude "\#define"
+syn keyword pilrcInclude equ
+syn keyword pilrcInclude package
+syn region pilrcInclude start="public class" end="}"
+
+syn sync ccomment pilrcComment
+
+if version >= 508 || !exists("did_pilrc_syntax_inits")
+ if version < 508
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ let did_pilrc_syntax_inits = 1
+
+ " The default methods for highlighting
+ HiLink pilrcKeyword Statement
+ HiLink pilrcType Type
+ HiLink pilrcError Error
+ HiLink pilrcCountry SpecialChar
+ HiLink pilrcLanguage SpecialChar
+ HiLink pilrcString SpecialChar
+ HiLink pilrcNumber Number
+ HiLink pilrcComment Comment
+ HiLink pilrcConstant Constant
+ HiLink pilrcFunction Function
+ HiLink pilrcInclude SpecialChar
+ HiLink pilrcIdentifier Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pilrc"
diff --git a/runtime/syntax/pine.vim b/runtime/syntax/pine.vim
new file mode 100644
index 000000000..749535e1a
--- /dev/null
+++ b/runtime/syntax/pine.vim
@@ -0,0 +1,372 @@
+" Vim syntax file
+" Language: Pine (email program) run commands
+" Maintainer: David Pascoe <pascoedj@spamcop.net>
+" Last Change: Thu Feb 27 10:18:48 WST 2003, update for pine 4.53
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,128-167,224-235,-,
+else
+ set iskeyword=@,48-57,_,128-167,224-235,-,
+endif
+
+syn keyword pineConfig addrbook-sort-rule
+syn keyword pineConfig address-book
+syn keyword pineConfig addressbook-formats
+syn keyword pineConfig alt-addresses
+syn keyword pineConfig bugs-additional-data
+syn keyword pineConfig bugs-address
+syn keyword pineConfig bugs-fullname
+syn keyword pineConfig character-set
+syn keyword pineConfig color-style
+syn keyword pineConfig compose-mime
+syn keyword pineConfig composer-wrap-column
+syn keyword pineConfig current-indexline-style
+syn keyword pineConfig cursor-style
+syn keyword pineConfig customized-hdrs
+syn keyword pineConfig debug-memory
+syn keyword pineConfig default-composer-hdrs
+syn keyword pineConfig default-fcc
+syn keyword pineConfig default-saved-msg-folder
+syn keyword pineConfig disable-these-authenticators
+syn keyword pineConfig disable-these-drivers
+syn keyword pineConfig display-filters
+syn keyword pineConfig download-command
+syn keyword pineConfig download-command-prefix
+syn keyword pineConfig editor
+syn keyword pineConfig elm-style-save
+syn keyword pineConfig empty-header-message
+syn keyword pineConfig fcc-name-rule
+syn keyword pineConfig feature-level
+syn keyword pineConfig feature-list
+syn keyword pineConfig file-directory
+syn keyword pineConfig folder-collections
+syn keyword pineConfig folder-extension
+syn keyword pineConfig folder-sort-rule
+syn keyword pineConfig font-char-set
+syn keyword pineConfig font-name
+syn keyword pineConfig font-size
+syn keyword pineConfig font-style
+syn keyword pineConfig forced-abook-entry
+syn keyword pineConfig form-letter-folder
+syn keyword pineConfig global-address-book
+syn keyword pineConfig goto-default-rule
+syn keyword pineConfig header-in-reply
+syn keyword pineConfig image-viewer
+syn keyword pineConfig inbox-path
+syn keyword pineConfig incoming-archive-folders
+syn keyword pineConfig incoming-folders
+syn keyword pineConfig incoming-startup-rule
+syn keyword pineConfig index-answered-background-color
+syn keyword pineConfig index-answered-foreground-color
+syn keyword pineConfig index-deleted-background-color
+syn keyword pineConfig index-deleted-foreground-color
+syn keyword pineConfig index-format
+syn keyword pineConfig index-important-background-color
+syn keyword pineConfig index-important-foreground-color
+syn keyword pineConfig index-new-background-color
+syn keyword pineConfig index-new-foreground-color
+syn keyword pineConfig index-recent-background-color
+syn keyword pineConfig index-recent-foreground-color
+syn keyword pineConfig index-to-me-background-color
+syn keyword pineConfig index-to-me-foreground-color
+syn keyword pineConfig index-unseen-background-color
+syn keyword pineConfig index-unseen-foreground-color
+syn keyword pineConfig initial-keystroke-list
+syn keyword pineConfig kblock-passwd-count
+syn keyword pineConfig keylabel-background-color
+syn keyword pineConfig keylabel-foreground-color
+syn keyword pineConfig keyname-background-color
+syn keyword pineConfig keyname-foreground-color
+syn keyword pineConfig last-time-prune-questioned
+syn keyword pineConfig last-version-used
+syn keyword pineConfig ldap-servers
+syn keyword pineConfig literal-signature
+syn keyword pineConfig local-address
+syn keyword pineConfig local-fullname
+syn keyword pineConfig mail-check-interval
+syn keyword pineConfig mail-directory
+syn keyword pineConfig mailcap-search-path
+syn keyword pineConfig mimetype-search-path
+syn keyword pineConfig new-version-threshold
+syn keyword pineConfig news-active-file-path
+syn keyword pineConfig news-collections
+syn keyword pineConfig news-spool-directory
+syn keyword pineConfig newsrc-path
+syn keyword pineConfig nntp-server
+syn keyword pineConfig normal-background-color
+syn keyword pineConfig normal-foreground-color
+syn keyword pineConfig old-style-reply
+syn keyword pineConfig operating-dir
+syn keyword pineConfig patterns
+syn keyword pineConfig patterns-filters
+syn keyword pineConfig patterns-filters2
+syn keyword pineConfig patterns-indexcolors
+syn keyword pineConfig patterns-other
+syn keyword pineConfig patterns-roles
+syn keyword pineConfig patterns-scores
+syn keyword pineConfig patterns-scores2
+syn keyword pineConfig personal-name
+syn keyword pineConfig personal-print-category
+syn keyword pineConfig personal-print-command
+syn keyword pineConfig postponed-folder
+syn keyword pineConfig print-font-char-set
+syn keyword pineConfig print-font-name
+syn keyword pineConfig print-font-size
+syn keyword pineConfig print-font-style
+syn keyword pineConfig printer
+syn keyword pineConfig prompt-background-color
+syn keyword pineConfig prompt-foreground-color
+syn keyword pineConfig pruned-folders
+syn keyword pineConfig pruning-rule
+syn keyword pineConfig quote1-background-color
+syn keyword pineConfig quote1-foreground-color
+syn keyword pineConfig quote2-background-color
+syn keyword pineConfig quote2-foreground-color
+syn keyword pineConfig quote3-background-color
+syn keyword pineConfig quote3-foreground-color
+syn keyword pineConfig read-message-folder
+syn keyword pineConfig remote-abook-history
+syn keyword pineConfig remote-abook-metafile
+syn keyword pineConfig remote-abook-validity
+syn keyword pineConfig reply-indent-string
+syn keyword pineConfig reply-leadin
+syn keyword pineConfig reverse-background-color
+syn keyword pineConfig reverse-foreground-color
+syn keyword pineConfig rsh-command
+syn keyword pineConfig rsh-open-timeout
+syn keyword pineConfig rsh-path
+syn keyword pineConfig save-by-sender
+syn keyword pineConfig saved-msg-name-rule
+syn keyword pineConfig scroll-margin
+syn keyword pineConfig selectable-item-background-color
+syn keyword pineConfig selectable-item-foreground-color
+syn keyword pineConfig sending-filters
+syn keyword pineConfig sendmail-path
+syn keyword pineConfig show-all-characters
+syn keyword pineConfig signature-file
+syn keyword pineConfig smtp-server
+syn keyword pineConfig sort-key
+syn keyword pineConfig speller
+syn keyword pineConfig ssh-command
+syn keyword pineConfig ssh-open-timeout
+syn keyword pineConfig ssh-path
+syn keyword pineConfig standard-printer
+syn keyword pineConfig status-background-color
+syn keyword pineConfig status-foreground-color
+syn keyword pineConfig status-message-delay
+syn keyword pineConfig suggest-address
+syn keyword pineConfig suggest-fullname
+syn keyword pineConfig tcp-open-timeout
+syn keyword pineConfig tcp-query-timeout
+syn keyword pineConfig tcp-read-warning-timeout
+syn keyword pineConfig tcp-write-warning-timeout
+syn keyword pineConfig threading-display-style
+syn keyword pineConfig threading-expanded-character
+syn keyword pineConfig threading-index-style
+syn keyword pineConfig threading-indicator-character
+syn keyword pineConfig threading-lastreply-character
+syn keyword pineConfig title-background-color
+syn keyword pineConfig title-foreground-color
+syn keyword pineConfig titlebar-color-style
+syn keyword pineConfig upload-command
+syn keyword pineConfig upload-command-prefix
+syn keyword pineConfig url-viewers
+syn keyword pineConfig use-only-domain-name
+syn keyword pineConfig user-domain
+syn keyword pineConfig user-id
+syn keyword pineConfig user-id
+syn keyword pineConfig user-input-timeout
+syn keyword pineConfig viewer-hdr-colors
+syn keyword pineConfig viewer-hdrs
+syn keyword pineConfig viewer-overlap
+syn keyword pineConfig window-position
+
+syn keyword pineOption allow-changing-from
+syn keyword pineOption allow-talk
+syn keyword pineOption alternate-compose-menu
+syn keyword pineOption assume-slow-link
+syn keyword pineOption auto-move-read-msgs
+syn keyword pineOption auto-open-next-unread
+syn keyword pineOption auto-unzoom-after-apply
+syn keyword pineOption auto-zoom-after-select
+syn keyword pineOption cache-remote-pinerc
+syn keyword pineOption check-newmail-when-quitting
+syn keyword pineOption combined-addrbook-display
+syn keyword pineOption combined-folder-display
+syn keyword pineOption combined-subdirectory-display
+syn keyword pineOption compose-cut-from-cursor
+syn keyword pineOption compose-maps-delete-key-to-ctrl-d
+syn keyword pineOption compose-rejects-unqualified-addrs
+syn keyword pineOption compose-send-offers-first-filter
+syn keyword pineOption compose-sets-newsgroup-without-confirm
+syn keyword pineOption confirm-role-even-for-default
+syn keyword pineOption continue-tab-without-confirm
+syn keyword pineOption delete-skips-deleted
+syn keyword pineOption disable-2022-jp-conversions
+syn keyword pineOption disable-busy-alarm
+syn keyword pineOption disable-charset-conversions
+syn keyword pineOption disable-config-cmd
+syn keyword pineOption disable-keyboard-lock-cmd
+syn keyword pineOption disable-keymenu
+syn keyword pineOption disable-password-caching
+syn keyword pineOption disable-password-cmd
+syn keyword pineOption disable-pipes-in-sigs
+syn keyword pineOption disable-pipes-in-templates
+syn keyword pineOption disable-roles-setup-cmd
+syn keyword pineOption disable-roles-sig-edit
+syn keyword pineOption disable-roles-template-edit
+syn keyword pineOption disable-sender
+syn keyword pineOption disable-shared-namespaces
+syn keyword pineOption disable-signature-edit-cmd
+syn keyword pineOption disable-take-last-comma-first
+syn keyword pineOption enable-8bit-esmtp-negotiation
+syn keyword pineOption enable-8bit-nntp-posting
+syn keyword pineOption enable-aggregate-command-set
+syn keyword pineOption enable-alternate-editor-cmd
+syn keyword pineOption enable-alternate-editor-implicitly
+syn keyword pineOption enable-arrow-navigation
+syn keyword pineOption enable-arrow-navigation-relaxed
+syn keyword pineOption enable-background-sending
+syn keyword pineOption enable-bounce-cmd
+syn keyword pineOption enable-cruise-mode
+syn keyword pineOption enable-cruise-mode-delete
+syn keyword pineOption enable-delivery-status-notification
+syn keyword pineOption enable-dot-files
+syn keyword pineOption enable-dot-folders
+syn keyword pineOption enable-exit-via-lessthan-command
+syn keyword pineOption enable-fast-recent-test
+syn keyword pineOption enable-flag-cmd
+syn keyword pineOption enable-flag-screen-implicitly
+syn keyword pineOption enable-full-header-and-text
+syn keyword pineOption enable-full-header-cmd
+syn keyword pineOption enable-goto-in-file-browser
+syn keyword pineOption enable-incoming-folders
+syn keyword pineOption enable-jump-shortcut
+syn keyword pineOption enable-lame-list-mode
+syn keyword pineOption enable-mail-check-cue
+syn keyword pineOption enable-mailcap-param-substitution
+syn keyword pineOption enable-mouse-in-xterm
+syn keyword pineOption enable-msg-view-addresses
+syn keyword pineOption enable-msg-view-attachments
+syn keyword pineOption enable-msg-view-forced-arrows
+syn keyword pineOption enable-msg-view-urls
+syn keyword pineOption enable-msg-view-web-hostnames
+syn keyword pineOption enable-newmail-in-xterm-icon
+syn keyword pineOption enable-partial-match-lists
+syn keyword pineOption enable-print-via-y-command
+syn keyword pineOption enable-reply-indent-string-editing
+syn keyword pineOption enable-rules-under-take
+syn keyword pineOption enable-search-and-replace
+syn keyword pineOption enable-sigdashes
+syn keyword pineOption enable-suspend
+syn keyword pineOption enable-tab-completion
+syn keyword pineOption enable-take-export
+syn keyword pineOption enable-tray-icon
+syn keyword pineOption enable-unix-pipe-cmd
+syn keyword pineOption enable-verbose-smtp-posting
+syn keyword pineOption expanded-view-of-addressbooks
+syn keyword pineOption expanded-view-of-distribution-lists
+syn keyword pineOption expanded-view-of-folders
+syn keyword pineOption expose-hidden-config
+syn keyword pineOption expunge-only-manually
+syn keyword pineOption expunge-without-confirm
+syn keyword pineOption expunge-without-confirm-everywhere
+syn keyword pineOption fcc-on-bounce
+syn keyword pineOption fcc-only-without-confirm
+syn keyword pineOption fcc-without-attachments
+syn keyword pineOption include-attachments-in-reply
+syn keyword pineOption include-header-in-reply
+syn keyword pineOption include-text-in-reply
+syn keyword pineOption ldap-result-to-addrbook-add
+syn keyword pineOption mark-fcc-seen
+syn keyword pineOption mark-for-cc
+syn keyword pineOption news-approximates-new-status
+syn keyword pineOption news-deletes-across-groups
+syn keyword pineOption news-offers-catchup-on-close
+syn keyword pineOption news-post-without-validation
+syn keyword pineOption news-read-in-newsrc-order
+syn keyword pineOption next-thread-without-confirm
+syn keyword pineOption old-growth
+syn keyword pineOption pass-control-characters-as-is
+syn keyword pineOption prefer-plain-text
+syn keyword pineOption preserve-start-stop-characters
+syn keyword pineOption print-formfeed-between-messages
+syn keyword pineOption print-includes-from-line
+syn keyword pineOption print-index-enabled
+syn keyword pineOption print-offers-custom-cmd-prompt
+syn keyword pineOption quell-attachment-extra-prompt
+syn keyword pineOption quell-berkeley-format-timezone
+syn keyword pineOption quell-content-id
+syn keyword pineOption quell-dead-letter-on-cancel
+syn keyword pineOption quell-empty-directories
+syn keyword pineOption quell-extra-post-prompt
+syn keyword pineOption quell-folder-internal-msg
+syn keyword pineOption quell-imap-envelope-update
+syn keyword pineOption quell-lock-failure-warnings
+syn keyword pineOption quell-maildomain-warning
+syn keyword pineOption quell-news-envelope-update
+syn keyword pineOption quell-partial-fetching
+syn keyword pineOption quell-ssl-largeblocks
+syn keyword pineOption quell-status-message-beeping
+syn keyword pineOption quell-timezone-comment-when-sending
+syn keyword pineOption quell-user-lookup-in-passwd-file
+syn keyword pineOption quit-without-confirm
+syn keyword pineOption reply-always-uses-reply-to
+syn keyword pineOption save-aggregates-copy-sequence
+syn keyword pineOption save-will-advance
+syn keyword pineOption save-will-not-delete
+syn keyword pineOption save-will-quote-leading-froms
+syn keyword pineOption scramble-message-id
+syn keyword pineOption select-without-confirm
+syn keyword pineOption selectable-item-nobold
+syn keyword pineOption separate-folder-and-directory-entries
+syn keyword pineOption show-cursor
+syn keyword pineOption show-plain-text-internally
+syn keyword pineOption show-selected-in-boldface
+syn keyword pineOption signature-at-bottom
+syn keyword pineOption single-column-folder-list
+syn keyword pineOption slash-collapses-entire-thread
+syn keyword pineOption spell-check-before-sending
+syn keyword pineOption store-window-position-in-config
+syn keyword pineOption strip-from-sigdashes-on-reply
+syn keyword pineOption tab-visits-next-new-message-only
+syn keyword pineOption termdef-takes-precedence
+syn keyword pineOption thread-index-shows-important-color
+syn keyword pineOption try-alternative-authentication-driver-first
+syn keyword pineOption unselect-will-not-advance
+syn keyword pineOption use-current-dir
+syn keyword pineOption use-function-keys
+syn keyword pineOption use-sender-not-x-sender
+syn keyword pineOption use-subshell-for-suspend
+syn keyword pineOption vertical-folder-list
+
+syn match pineComment "^#.*$"
+
+" 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_pine_syn_inits")
+ if version < 508
+ let did_pine_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink pineConfig Type
+ HiLink pineComment Comment
+ HiLink pineOption Macro
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pine"
+
+" vim: ts=8
diff --git a/runtime/syntax/pinfo.vim b/runtime/syntax/pinfo.vim
new file mode 100644
index 000000000..aaef71289
--- /dev/null
+++ b/runtime/syntax/pinfo.vim
@@ -0,0 +1,134 @@
+" Vim syntax file
+" Language: pinfo(1) configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/
+" Latest Revision: 2004-05-22
+" arch-tag: da2cfa1c-0350-45dc-b2d2-2bf3915bd0a2
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,_,-
+delcommand SetIsk
+
+" Ignore Case
+syn case ignore
+
+" Todo
+syn keyword pinfoTodo contained FIXME TODO XXX NOTE
+
+" Comments
+syn region pinfoComment start='^#' end='$' contains=pinfoTodo
+
+" Keywords
+syn keyword pinfoOptions MANUAL CUT-MAN-HEADERS CUT-EMPTY-MAN-LINES
+syn keyword pinfoOptions RAW-FILENAME APROPOS DONT-HANDLE-WITHOUT-TAG-TABLE
+syn keyword pinfoOptions HTTPVIEWER FTPVIEWER MAILEDITOR PRINTUTILITY
+syn keyword pinfoOptions MANLINKS INFOPATH MAN-OPTIONS STDERR-REDIRECTION
+syn keyword pinfoOptions LONG-MANUAL-LINKS FILTER-0xB7 QUIT-CONFIRMATION
+syn keyword pinfoOptions QUIT-CONFIRM-DEFAULT CLEAR-SCREEN-AT-EXIT
+syn keyword pinfoOptions CALL-READLINE-HISTORY HIGHLIGHTREGEXP SAFE-USER
+syn keyword pinfoOptions SAFE-GROUP
+
+" Colors
+syn keyword pinfoColors COL_NORMAL COL_TOPLINE COL_BOTTOMLINE COL_MENU
+syn keyword pinfoColors COL_MENUSELECTED COL_NOTE COL_NOTESELECTED COL_URL
+syn keyword pinfoColors COL_URLSELECTED COL_INFOHIGHLIGHT COL_MANUALBOLD
+syn keyword pinfoColors COL_MANUALITALIC
+syn keyword pinfoColorDefault COLOR_DEFAULT
+syn keyword pinfoColorBold BOLD
+syn keyword pinfoColorNoBold NO_BOLD
+syn keyword pinfoColorBlink BLINK
+syn keyword pinfoColorNoBlink NO_BLINK
+syn keyword pinfoColorBlack COLOR_BLACK
+syn keyword pinfoColorRed COLOR_RED
+syn keyword pinfoColorGreen COLOR_GREEN
+syn keyword pinfoColorYellow COLOR_YELLOW
+syn keyword pinfoColorBlue COLOR_BLUE
+syn keyword pinfoColorMagenta COLOR_MAGENTA
+syn keyword pinfoColorCyan COLOR_CYAN
+syn keyword pinfoColorWhite COLOR_WHITE
+
+" Keybindings
+syn keyword pinfoKeys KEY_TOTALSEARCH_1 KEY_TOTALSEARCH_2 KEY_SEARCH_1
+syn keyword pinfoKeys KEY_SEARCH_2 KEY_SEARCH_AGAIN_1 KEY_SEARCH_AGAIN_2
+syn keyword pinfoKeys KEY_GOTO_1 KEY_GOTO_2 KEY_PREVNODE_1 KEY_PREVNODE_2
+syn keyword pinfoKeys KEY_NEXTNODE_1 KEY_NEXTNODE_2 KEY_UP_1 KEY_UP_2
+syn keyword pinfoKeys KEY_END_1 KEY_END_2 KEY_PGDN_1 KEY_PGDN_2
+syn keyword pinfoKeys KEY_PGDN_AUTO_1 KEY_PGDN_AUTO_2 KEY_HOME_1 KEY_HOME_2
+syn keyword pinfoKeys KEY_PGUP_1 KEY_PGUP_2 KEY_PGUP_AUTO_1 KEY_PGUP_AUTO_2
+syn keyword pinfoKeys KEY_DOWN_1 KEY_DOWN_2 KEY_TOP_1 KEY_TOP_2 KEY_BACK_1
+syn keyword pinfoKeys KEY_BACK_2 KEY_FOLLOWLINK_1 KEY_FOLLOWLINK_2
+syn keyword pinfoKeys KEY_REFRESH_1 KEY_REFRESH_2 KEY_SHELLFEED_1
+syn keyword pinfoKeys KEY_SHELLFEED_2 KEY_QUIT_1 KEY_QUIT_2 KEY_GOLINE_1
+syn keyword pinfoKeys KEY_GOLINE_2 KEY_PRINT_1 KEY_PRINT_2
+syn keyword pinfoKeys KEY_DIRPAGE_1 KEY_DIRPAGE_2
+
+" Special Keys
+syn keyword pinfoSpecialKeys KEY_BREAK KEY_DOWN KEY_UP KEY_LEFT KEY_RIGHT
+syn keyword pinfoSpecialKeys KEY_DOWN KEY_HOME KEY_BACKSPACE KEY_NPAGE
+syn keyword pinfoSpecialKeys KEY_PPAGE KEY_END KEY_IC KEY_DC
+syn region pinfoSpecialKeys matchgroup=pinfoSpecialKeys transparent start=+KEY_\%(F\|CTRL\|ALT\)(+ end=+)+
+syn region pinfoSimpleKey matchgroup=pinfoSimpleKey start=+'+ skip=+\\'+ end=+'+ contains=pinfoSimpleKeyEscape
+syn match pinfoSimpleKeyEscape +\\[\\nt']+
+syn match pinfoKeycode '\<\d\+\>'
+
+" Constants
+syn keyword pinfoConstants TRUE FALSE YES NO
+
+" 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_pinfo_syn_inits")
+ if version < 508
+ let did_pinfo_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ HiDef hi <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ HiDef hi def <args>
+ endif
+
+ HiLink pinfoTodo Todo
+ HiLink pinfoComment Comment
+ HiLink pinfoOptions Keyword
+ HiLink pinfoColors Keyword
+ HiLink pinfoColorDefault Normal
+ HiDef pinfoColorBold cterm=bold
+ HiDef pinfoColorNoBold cterm=none
+ " we can't access the blink attribute from Vim atm
+ HiDef pinfoColorBlink cterm=inverse
+ HiDef pinfoColorNoBlink cterm=none
+ HiDef pinfoColorBlack ctermfg=Black guifg=Black
+ HiDef pinfoColorRed ctermfg=DarkRed guifg=DarkRed
+ HiDef pinfoColorGreen ctermfg=DarkGreen guifg=DarkGreen
+ HiDef pinfoColorYellow ctermfg=DarkYellow guifg=DarkYellow
+ HiDef pinfoColorBlue ctermfg=DarkBlue guifg=DarkBlue
+ HiDef pinfoColorMagenta ctermfg=DarkMagenta guifg=DarkMagenta
+ HiDef pinfoColorCyan ctermfg=DarkCyan guifg=DarkCyan
+ HiDef pinfoColorWhite ctermfg=LightGray guifg=LightGray
+ HiLink pinfoKeys Keyword
+ HiLink pinfoSpecialKeys SpecialChar
+ HiLink pinfoSimpleKey String
+ HiLink pinfoSimpleKeyEscape SpecialChar
+ HiLink pinfoKeycode Number
+ HiLink pinfoConstants Constant
+
+ delcommand HiLink
+ delcommand HiDef
+endif
+
+let b:current_syntax = "pinfo"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/plm.vim b/runtime/syntax/plm.vim
new file mode 100644
index 000000000..bf7c32fd1
--- /dev/null
+++ b/runtime/syntax/plm.vim
@@ -0,0 +1,147 @@
+" Vim syntax file
+" Language: PL/M
+" Maintainer: Philippe Coulonges <cphil@cphil.net>
+" Last change: 2003 May 11
+
+" 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
+
+" PL/M is a case insensitive language
+syn case ignore
+
+syn keyword plmTodo contained TODO FIXME XXX
+
+" String
+syn region plmString start=+'+ end=+'+
+
+syn match plmOperator "[@=\+\-\*\/\<\>]"
+
+syn match plmIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+
+syn match plmDelimiter "[();,]"
+
+syn region plmPreProc start="^\s*\$\s*" skip="\\$" end="$"
+
+" FIXME : No Number support for floats, as I'm working on an embedded
+" project that doesn't use any.
+syn match plmNumber "-\=\<\d\+\>"
+syn match plmNumber "\<[0-9a-fA-F]*[hH]*\>"
+
+" If you don't like tabs
+"syn match plmShowTab "\t"
+"syn match plmShowTabc "\t"
+
+"when wanted, highlight trailing white space
+if exists("c_space_errors")
+ syn match plmSpaceError "\s*$"
+ syn match plmSpaceError " \+\t"me=e-1
+endif
+
+"
+ " Use the same control variable as C language for I believe
+ " users will want the same behavior
+if exists("c_comment_strings")
+ " FIXME : don't work fine with c_comment_strings set,
+ " which I don't care as I don't use
+
+ " A comment can contain plmString, plmCharacter and plmNumber.
+ " But a "*/" inside a plmString in a plmComment DOES end the comment! So we
+ " need to use a special type of plmString: plmCommentString, which also ends on
+ " "*/", and sees a "*" at the start of the line as comment again.
+ syntax match plmCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region plmCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plmSpecial,plmCommentSkip
+ syntax region plmComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=plmSpecial
+ syntax region plmComment start="/\*" end="\*/" contains=plmTodo,plmCommentString,plmCharacter,plmNumber,plmFloat,plmSpaceError
+ syntax match plmComment "//.*" contains=plmTodo,plmComment2String,plmCharacter,plmNumber,plmSpaceError
+else
+ syn region plmComment start="/\*" end="\*/" contains=plmTodo,plmSpaceError
+ syn match plmComment "//.*" contains=plmTodo,plmSpaceError
+endif
+
+syntax match plmCommentError "\*/"
+
+syn keyword plmReserved ADDRESS AND AT BASED BY BYTE CALL CASE
+syn keyword plmReserved DATA DECLARE DISABLE DO DWORD
+syn keyword plmReserved ELSE ENABLE END EOF EXTERNAL
+syn keyword plmReserved GO GOTO HALT IF INITIAL INTEGER INTERRUPT
+syn keyword plmReserved LABEL LITERALLY MINUS MOD NOT OR
+syn keyword plmReserved PLUS POINTER PROCEDURE PUBLIC
+syn keyword plmReserved REAL REENTRANT RETURN SELECTOR STRUCTURE
+syn keyword plmReserved THEN TO WHILE WORD XOR
+syn keyword plm386Reserved CHARINT HWORD LONGINT OFFSET QWORD SHORTINT
+
+syn keyword plmBuiltIn ABS ADJUSTRPL BLOCKINPUT BLOCKINWORD BLOCKOUTPUT
+syn keyword plmBuiltIn BLOCKOUTWORD BUILPTR CARRY CAUSEINTERRUPT CMPB
+syn keyword plmBuiltIn CMPW DEC DOUBLE FINDB FINDRB FINDRW FINDW FIX
+syn keyword plmBuiltIn FLAGS FLOAT GETREALERROR HIGH IABS INITREALMATHUNIT
+syn keyword plmBuiltIn INPUT INT INWORD LAST LOCKSET LENGTH LOW MOVB MOVE
+syn keyword plmBuiltIn MOVRB MOVRW MOVW NIL OUTPUT OUTWORD RESTOREREALSTATUS
+syn keyword plmBuiltIn ROL ROR SAL SAVEREALSTATUS SCL SCR SELECTOROF SETB
+syn keyword plmBuiltIn SETREALMODE SETW SHL SHR SIGN SIGNED SIZE SKIPB
+syn keyword plmBuiltIn SKIPRB SKIPRW SKIPW STACKBASE STACKPTR TIME SIZE
+syn keyword plmBuiltIn UNSIGN XLAT ZERO
+syn keyword plm386BuiltIn INTERRUPT SETINTERRUPT
+syn keyword plm286BuiltIn CLEARTASKSWITCHEDFLAG GETACCESSRIGHTS
+syn keyword plm286BuiltIn GETSEGMENTLIMIT LOCALTABLE MACHINESTATUS
+syn keyword plm286BuiltIn OFFSETOF PARITY RESTOREGLOBALTABLE
+syn keyword plm286BuiltIn RESTOREINTERRUPTTABLE SAVEGLOBALTABLE
+syn keyword plm286BuiltIn SAVEINTERRUPTTABLE SEGMENTREADABLE
+syn keyword plm286BuiltIn SEGMENTWRITABLE TASKREGISTER WAITFORINTERRUPT
+syn keyword plm386BuiltIn CONTROLREGISTER DEBUGREGISTER FINDHW
+syn keyword plm386BuiltIn FINDRHW INHWORD MOVBIT MOVRBIT MOVHW MOVRHW
+syn keyword plm386BuiltIn OUTHWORD SCANBIT SCANRBIT SETHW SHLD SHRD
+syn keyword plm386BuiltIn SKIPHW SKIPRHW TESTREGISTER
+syn keyword plm386w16BuiltIn BLOCKINDWORD BLOCKOUTDWORD CMPD FINDD
+syn keyword plm386w16BuiltIn FINDRD INDWORD MOVD MOVRD OUTDWORD
+syn keyword plm386w16BuiltIn SETD SKIPD SKIPRD
+
+syn sync lines=50
+
+" 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_plm_syntax_inits")
+ if version < 508
+ let did_plm_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 plmLabel Label
+" HiLink plmConditional Conditional
+" HiLink plmRepeat Repeat
+ HiLink plmTodo Todo
+ HiLink plmNumber Number
+ HiLink plmOperator Operator
+ HiLink plmDelimiter Operator
+ "HiLink plmShowTab Error
+ "HiLink plmShowTabc Error
+ HiLink plmIdentifier Identifier
+ HiLink plmBuiltIn Statement
+ HiLink plm286BuiltIn Statement
+ HiLink plm386BuiltIn Statement
+ HiLink plm386w16BuiltIn Statement
+ HiLink plmReserved Statement
+ HiLink plm386Reserved Statement
+ HiLink plmPreProc PreProc
+ HiLink plmCommentError plmError
+ HiLink plmCommentString plmString
+ HiLink plmComment2String plmString
+ HiLink plmCommentSkip plmComment
+ HiLink plmString String
+ HiLink plmComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "plm"
+
+" vim: ts=8 sw=2
+
diff --git a/runtime/syntax/plp.vim b/runtime/syntax/plp.vim
new file mode 100644
index 000000000..f59702d3b
--- /dev/null
+++ b/runtime/syntax/plp.vim
@@ -0,0 +1,45 @@
+" Vim syntax file
+" Language: PLP (Perl in HTML)
+" Maintainer: Juerd <juerd@juerd.nl>
+" Last Change: 2003 Apr 25
+" Cloned From: aspperl.vim
+
+" Add to filetype.vim the following line (without quote sign):
+" au BufNewFile,BufRead *.plp setf plp
+
+" 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
+
+if !exists("main_syntax")
+ let main_syntax = 'perlscript'
+endif
+
+if version < 600
+ so <sfile>:p:h/html.vim
+ syn include @PLPperl <sfile>:p:h/perl.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+ syn include @PLPperl syntax/perl.vim
+endif
+
+syn cluster htmlPreproc add=PLPperlblock
+
+syn keyword perlControl PLP_END
+syn keyword perlStatementInclude include Include
+syn keyword perlStatementFiles ReadFile WriteFile Counter
+syn keyword perlStatementScalar Entity AutoURL DecodeURI EncodeURI
+
+syn cluster PLPperlcode contains=perlStatement.*,perlFunction,perlOperator,perlVarPlain,perlVarNotInMatches,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlControl,perlConditional,perlRepeat,perlComment,perlPOD,perlHereDoc,perlPackageDecl,perlElseIfError,perlFiledescRead,perlMatch
+
+syn region PLPperlblock keepend matchgroup=Delimiter start=+<:=\=+ end=+:>+ transparent contains=@PLPperlcode
+
+syn region PLPinclude keepend matchgroup=Delimiter start=+<(+ end=+)>+
+
+let b:current_syntax = "plp"
+
diff --git a/runtime/syntax/plsql.vim b/runtime/syntax/plsql.vim
new file mode 100644
index 000000000..6e513660f
--- /dev/null
+++ b/runtime/syntax/plsql.vim
@@ -0,0 +1,277 @@
+" Vim syntax file
+" Language: Oracle Procedureal SQL (PL/SQL)
+" Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com)
+" Original Maintainer: C. Laurence Gonsalves (clgonsal@kami.com)
+" URL: http://lanzarotta.tripod.com/vim/syntax/plsql.vim.zip
+" Last Change: September 18, 2002
+" History: Geoff Evans & Bill Pribyl (bill at plnet dot org)
+" Added 9i keywords.
+" Austin Ziegler (austin at halostatue dot ca)
+" Added 8i+ features.
+"
+" 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
+
+" Todo.
+syn keyword plsqlTodo TODO FIXME XXX DEBUG NOTE
+syn cluster plsqlCommentGroup contains=plsqlTodo
+
+syn case ignore
+
+syn match plsqlGarbage "[^ \t()]"
+syn match plsqlIdentifier "[a-z][a-z0-9$_#]*"
+syn match plsqlHostIdentifier ":[a-z][a-z0-9$_#]*"
+
+" When wanted, highlight the trailing whitespace.
+if exists("c_space_errors")
+ if !exists("c_no_trail_space_error")
+ syn match plsqlSpaceError "\s\+$"
+ endif
+
+ if !exists("c_no_tab_space_error")
+ syn match plsqlSpaceError " \+\t"me=e-1
+ endif
+endif
+
+" Symbols.
+syn match plsqlSymbol "\(;\|,\|\.\)"
+
+" Operators.
+syn match plsqlOperator "\(+\|-\|\*\|/\|=\|<\|>\|@\|\*\*\|!=\|\~=\)"
+syn match plsqlOperator "\(^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\"\)"
+
+" Some of Oracle's SQL keywords.
+syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
+syn keyword plsqlSQLKeyword AS ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
+syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
+syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
+syn keyword plsqlSQLKeyword CONSTRAINT CRASH CREATE CURRENT DATA DATABASE
+syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
+syn keyword plsqlSQLKeyword DROP DUAL ELSE EXCLUSIVE EXISTS EXTENDS EXTRACT
+syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
+syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
+syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
+syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE IS ISOLATION KEY LIBRARY
+syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
+syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
+syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION OR ORDER ORGANIZATION
+syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
+syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
+syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA SELECT SEPARATE SESSION SET
+syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
+syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
+syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
+syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
+
+" PL/SQL's own keywords.
+syn keyword plsqlKeyword AGENT AND ANY ARRAY ASSIGN AS AT AUTHID BEGIN BODY BY
+syn keyword plsqlKeyword BULK C CASE CHAR_BASE CHARSETFORM CHARSETID CLOSE
+syn keyword plsqlKeyword COLLECT CONSTANT CONSTRUCTOR CONTEXT CURRVAL DECLARE
+syn keyword plsqlKeyword DVOID EXCEPTION EXCEPTION_INIT EXECUTE EXIT FETCH
+syn keyword plsqlKeyword FINAL FUNCTION GOTO HASH IMMEDIATE IN INDICATOR
+syn keyword plsqlKeyword INSTANTIABLE IS JAVA LANGUAGE LIBRARY MAP MAXLEN
+syn keyword plsqlKeyword MEMBER NAME NEW NOCOPY NUMBER_BASE OBJECT OCICOLL
+syn keyword plsqlKeyword OCIDATE OCIDATETIME OCILOBLOCATOR OCINUMBER OCIRAW
+syn keyword plsqlKeyword OCISTRING OF OPAQUE OPEN OR ORDER OTHERS OUT
+syn keyword plsqlKeyword OVERRIDING PACKAGE PARALLEL_ENABLE PARAMETERS
+syn keyword plsqlKeyword PARTITION PIPELINED PRAGMA PROCEDURE RAISE RANGE REF
+syn keyword plsqlKeyword RESULT RETURN REVERSE ROWTYPE SB1 SELF SHORT SIZE_T
+syn keyword plsqlKeyword SQL SQLCODE SQLERRM STATIC STRUCT SUBTYPE TDO THEN
+syn keyword plsqlKeyword TABLE TIMEZONE_ABBR TIMEZONE_HOUR TIMEZONE_MINUTE
+syn keyword plsqlKeyword TIMEZONE_REGION TYPE UNDER UNSIGNED USING VARIANCE
+syn keyword plsqlKeyword VARRAY VARYING WHEN WRITE
+syn match plsqlKeyword "\<END\>"
+syn match plsqlKeyword "\.COUNT\>"hs=s+1
+syn match plsqlKeyword "\.EXISTS\>"hs=s+1
+syn match plsqlKeyword "\.FIRST\>"hs=s+1
+syn match plsqlKeyword "\.LAST\>"hs=s+1
+syn match plsqlKeyword "\.DELETE\>"hs=s+1
+syn match plsqlKeyword "\.PREV\>"hs=s+1
+syn match plsqlKeyword "\.NEXT\>"hs=s+1
+
+" PL/SQL functions.
+syn keyword plsqlFunction ABS ACOS ADD_MONTHS ASCII ASCIISTR ASIN ATAN ATAN2
+syn keyword plsqlFunction BFILENAME BITAND CEIL CHARTOROWID CHR COALESCE
+syn keyword plsqlFunction COMMIT COMMIT_CM COMPOSE CONCAT CONVERT COS COSH
+syn keyword plsqlFunction COUNT CUBE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
+syn keyword plsqlFunction DBTIMEZONE DECODE DECOMPOSE DEREF DUMP EMPTY_BLOB
+syn keyword plsqlFunction EMPTY_CLOB EXISTS EXP FLOOR FROM_TZ GETBND GLB
+syn keyword plsqlFunction GREATEST GREATEST_LB GROUPING HEXTORAW INITCAP
+syn keyword plsqlFunction INSTR INSTR2 INSTR4 INSTRB INSTRC ISNCHAR LAST_DAY
+syn keyword plsqlFunction LEAST LEAST_UB LENGTH LENGTH2 LENGTH4 LENGTHB LENGTHC
+syn keyword plsqlFunction LN LOCALTIME LOCALTIMESTAMP LOG LOWER LPAD
+syn keyword plsqlFunction LTRIM LUB MAKE_REF MAX MIN MOD MONTHS_BETWEEN
+syn keyword plsqlFunction NCHARTOROWID NCHR NEW_TIME NEXT_DAY NHEXTORAW
+syn keyword plsqlFunction NLS_CHARSET_DECL_LEN NLS_CHARSET_ID NLS_CHARSET_NAME
+syn keyword plsqlFunction NLS_INITCAP NLS_LOWER NLSSORT NLS_UPPER NULLFN NULLIF
+syn keyword plsqlFunction NUMTODSINTERVAL NUMTOYMINTERVAL NVL POWER
+syn keyword plsqlFunction RAISE_APPLICATION_ERROR RAWTOHEX RAWTONHEX REF
+syn keyword plsqlFunction REFTOHEX REPLACE ROLLBACK_NR ROLLBACK_SV ROLLUP ROUND
+syn keyword plsqlFunction ROWIDTOCHAR ROWIDTONCHAR ROWLABEL RPAD RTRIM
+syn keyword plsqlFunction SAVEPOINT SESSIONTIMEZONE SETBND SET_TRANSACTION_USE
+syn keyword plsqlFunction SIGN SIN SINH SOUNDEX SQLCODE SQLERRM SQRT STDDEV
+syn keyword plsqlFunction SUBSTR SUBSTR2 SUBSTR4 SUBSTRB SUBSTRC SUM
+syn keyword plsqlFunction SYS_AT_TIME_ZONE SYS_CONTEXT SYSDATE SYS_EXTRACT_UTC
+syn keyword plsqlFunction SYS_GUID SYS_LITERALTODATE SYS_LITERALTODSINTERVAL
+syn keyword plsqlFunction SYS_LITERALTOTIME SYS_LITERALTOTIMESTAMP
+syn keyword plsqlFunction SYS_LITERALTOTZTIME SYS_LITERALTOTZTIMESTAMP
+syn keyword plsqlFunction SYS_LITERALTOYMINTERVAL SYS_OVER__DD SYS_OVER__DI
+syn keyword plsqlFunction SYS_OVER__ID SYS_OVER_IID SYS_OVER_IIT
+syn keyword plsqlFunction SYS_OVER__IT SYS_OVER__TI SYS_OVER__TT
+syn keyword plsqlFunction SYSTIMESTAMP TAN TANH TO_ANYLOB TO_BLOB TO_CHAR
+syn keyword plsqlFunction TO_CLOB TO_DATE TO_DSINTERVAL TO_LABEL TO_MULTI_BYTE
+syn keyword plsqlFunction TO_NCHAR TO_NCLOB TO_NUMBER TO_RAW TO_SINGLE_BYTE
+syn keyword plsqlFunction TO_TIME TO_TIMESTAMP TO_TIMESTAMP_TZ TO_TIME_TZ
+syn keyword plsqlFunction TO_YMINTERVAL TRANSLATE TREAT TRIM TRUNC TZ_OFFSET UID
+syn keyword plsqlFunction UNISTR UPPER UROWID USER USERENV VALUE VARIANCE
+syn keyword plsqlFunction VSIZE WORK XOR
+syn match plsqlFunction "\<SYS\$LOB_REPLICATION\>"
+
+" PL/SQL Exceptions
+syn keyword plsqlException ACCESS_INTO_NULL CASE_NOT_FOUND COLLECTION_IS_NULL
+syn keyword plsqlException CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR
+syn keyword plsqlException INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND
+syn keyword plsqlException NOT_LOGGED_ON PROGRAM_ERROR ROWTYPE_MISMATCH
+syn keyword plsqlException SELF_IS_NULL STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT
+syn keyword plsqlException SUBSCRIPT_OUTSIDE_LIMIT SYS_INVALID_ROWID
+syn keyword plsqlException TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR
+syn keyword plsqlException ZERO_DIVIDE
+
+" Oracle Pseudo Colums.
+syn keyword plsqlPseudo CURRVAL LEVEL NEXTVAL ROWID ROWNUM
+
+if exists("plsql_highlight_triggers")
+ syn keyword plsqlTrigger INSERTING UPDATING DELETING
+endif
+
+" Conditionals.
+syn keyword plsqlConditional ELSIF ELSE IF
+syn match plsqlConditional "\<END\s\+IF\>"
+
+" Loops.
+syn keyword plsqlRepeat FOR LOOP WHILE FORALL
+syn match plsqlRepeat "\<END\s\+LOOP\>"
+
+" Various types of comments.
+if exists("c_comment_strings")
+ syntax match plsqlCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region plsqlCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plsqlCommentSkip
+ syntax region plsqlComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$"
+ syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
+ syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
+else
+ syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlSpaceError
+ syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlSpaceError
+endif
+
+syn sync ccomment plsqlComment
+syn sync ccomment plsqlCommentL
+
+" To catch unterminated string literals.
+syn match plsqlStringError "'.*$"
+
+" Various types of literals.
+syn match plsqlNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
+syn match plsqlNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
+syn match plsqlIntLiteral contained "[+-]\=\d\+"
+syn match plsqlFloatLiteral contained "[+-]\=\d\+\.\d*"
+syn match plsqlFloatLiteral contained "[+-]\=\d*\.\d*"
+syn match plsqlCharLiteral "'[^']'"
+syn match plsqlStringLiteral "'\([^']\|''\)*'"
+syn keyword plsqlBooleanLiteral TRUE FALSE NULL
+
+" The built-in types.
+syn keyword plsqlStorage ANYDATA ANYTYPE BFILE BINARY_INTEGER BLOB BOOLEAN
+syn keyword plsqlStorage BYTE CHAR CHARACTER CLOB CURSOR DATE DAY DEC DECIMAL
+syn keyword plsqlStorage DOUBLE DSINTERVAL_UNCONSTRAINED FLOAT HOUR
+syn keyword plsqlStorage INT INTEGER INTERVAL LOB LONG MINUTE
+syn keyword plsqlStorage MLSLABEL MONTH NATURAL NATURALN NCHAR NCHAR_CS NCLOB
+syn keyword plsqlStorage NUMBER NUMERIC NVARCHAR PLS_INT PLS_INTEGER
+syn keyword plsqlStorage POSITIVE POSITIVEN PRECISION RAW REAL RECORD
+syn keyword plsqlStorage SECOND SIGNTYPE SMALLINT STRING SYS_REFCURSOR TABLE TIME
+syn keyword plsqlStorage TIMESTAMP TIMESTAMP_UNCONSTRAINED
+syn keyword plsqlStorage TIMESTAMP_TZ_UNCONSTRAINED
+syn keyword plsqlStorage TIMESTAMP_LTZ_UNCONSTRAINED UROWID VARCHAR
+syn keyword plsqlStorage VARCHAR2 YEAR YMINTERVAL_UNCONSTRAINED ZONE
+
+" A type-attribute is really a type.
+syn match plsqlTypeAttribute "%\(TYPE\|ROWTYPE\)\>"
+
+" All other attributes.
+syn match plsqlAttribute "%\(BULK_EXCEPTIONS\|BULK_ROWCOUNT\|ISOPEN\|FOUND\|NOTFOUND\|ROWCOUNT\)\>"
+
+" This'll catch mis-matched close-parens.
+syn cluster plsqlParenGroup contains=plsqlParenError,@plsqlCommentGroup,plsqlCommentSkip,plsqlIntLiteral,plsqlFloatLiteral,plsqlNumbersCom
+if exists("c_no_bracket_error")
+ syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup
+ syn match plsqlParenError ")"
+ syn match plsqlErrInParen contained "[{}]"
+else
+ syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
+ syn match plsqlParenError "[\])]"
+ syn match plsqlErrInParen contained "[{}]"
+ syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
+ syn match plsqlErrInBracket contained "[);{}]"
+endif
+
+" Syntax Synchronizing
+syn sync minlines=10 maxlines=100
+
+" Define the default highlighting.
+" For version 5.x 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_plsql_syn_inits")
+ if version < 508
+ let did_plsql_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink plsqlAttribute Macro
+ HiLink plsqlBlockError Error
+ HiLink plsqlBooleanLiteral Boolean
+ HiLink plsqlCharLiteral Character
+ HiLink plsqlComment Comment
+ HiLink plsqlCommentL Comment
+ HiLink plsqlConditional Conditional
+ HiLink plsqlError Error
+ HiLink plsqlErrInBracket Error
+ HiLink plsqlErrInBlock Error
+ HiLink plsqlErrInParen Error
+ HiLink plsqlException Function
+ HiLink plsqlFloatLiteral Float
+ HiLink plsqlFunction Function
+ HiLink plsqlGarbage Error
+ HiLink plsqlHostIdentifier Label
+ HiLink plsqlIdentifier Normal
+ HiLink plsqlIntLiteral Number
+ HiLink plsqlOperator Operator
+ HiLink plsqlParen Normal
+ HiLink plsqlParenError Error
+ HiLink plsqlSpaceError Error
+ HiLink plsqlPseudo PreProc
+ HiLink plsqlKeyword Keyword
+ HiLink plsqlRepeat Repeat
+ HiLink plsqlStorage StorageClass
+ HiLink plsqlSQLKeyword Function
+ HiLink plsqlStringError Error
+ HiLink plsqlStringLiteral String
+ HiLink plsqlCommentString String
+ HiLink plsqlComment2String String
+ HiLink plsqlSymbol Normal
+ HiLink plsqlTrigger Function
+ HiLink plsqlTypeAttribute StorageClass
+ HiLink plsqlTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "plsql"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/po.vim b/runtime/syntax/po.vim
new file mode 100644
index 000000000..6da75d630
--- /dev/null
+++ b/runtime/syntax/po.vim
@@ -0,0 +1,46 @@
+" Vim syntax file
+" Language: po (gettext)
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2001 Apr 26
+
+" 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 match poComment "^#.*$"
+syn match poSources "^#:.*$"
+syn match poStatement "^\(domain\|msgid\|msgstr\)"
+syn match poSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
+syn match poFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+syn match poFormat "%%" contained
+syn region poString start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ contains=poSpecial,poFormat
+
+" 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_po_syn_inits")
+ if version < 508
+ let did_po_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink poComment Comment
+ HiLink poSources PreProc
+ HiLink poStatement Statement
+ HiLink poSpecial Special
+ HiLink poFormat poSpecial
+ HiLink poString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "po"
+
+" vim:set ts=8 sts=2 sw=2 noet:
diff --git a/runtime/syntax/pod.vim b/runtime/syntax/pod.vim
new file mode 100644
index 000000000..24d0c852c
--- /dev/null
+++ b/runtime/syntax/pod.vim
@@ -0,0 +1,81 @@
+" Vim syntax file
+" Language: Perl POD format
+" Maintainer: Scott Bigham <dsb@cs.duke.edu>
+" Last Change: 2001 May 09
+
+" To add embedded POD documentation highlighting to your syntax file, add
+" the commands:
+"
+" syn include @Pod <sfile>:p:h/pod.vim
+" syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
+"
+" and add myPod to the contains= list of some existing region, probably a
+" comment. The "keepend" flag is needed because "=cut" is matched as a
+" pattern in its own right.
+
+
+" Remove any old syntax stuff hanging around (this is suppressed
+" automatically by ":syn include" if necessary).
+" 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
+
+" POD commands
+syn match podCommand "^=head[12]" nextgroup=podCmdText
+syn match podCommand "^=item" nextgroup=podCmdText
+syn match podCommand "^=over" nextgroup=podOverIndent skipwhite
+syn match podCommand "^=back"
+syn match podCommand "^=cut"
+syn match podCommand "^=pod"
+syn match podCommand "^=for" nextgroup=podForKeywd skipwhite
+syn match podCommand "^=begin" nextgroup=podForKeywd skipwhite
+syn match podCommand "^=end" nextgroup=podForKeywd skipwhite
+
+" Text of a =head1, =head2 or =item command
+syn match podCmdText ".*$" contained contains=podFormat
+
+" Indent amount of =over command
+syn match podOverIndent "\d\+" contained
+
+" Formatter identifier keyword for =for, =begin and =end commands
+syn match podForKeywd "\S\+" contained
+
+" An indented line, to be displayed verbatim
+syn match podVerbatimLine "^\s.*$"
+
+" Inline textual items handled specially by POD
+syn match podSpecial "\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)"
+syn match podSpecial "[$@%]\I\i*\(::\I\i*\)*\>"
+
+" Special formatting sequences
+syn region podFormat start="[IBSCLFXEZ]<" end=">" oneline contains=podFormat
+
+" 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_pod_syntax_inits")
+ if version < 508
+ let did_pod_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink podCommand Statement
+ HiLink podCmdText String
+ HiLink podOverIndent Number
+ HiLink podForKeywd Identifier
+ HiLink podFormat Identifier
+ HiLink podVerbatimLine PreProc
+ HiLink podSpecial Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pod"
+
+" vim: ts=8
diff --git a/runtime/syntax/postscr.vim b/runtime/syntax/postscr.vim
new file mode 100644
index 000000000..40dbcec5f
--- /dev/null
+++ b/runtime/syntax/postscr.vim
@@ -0,0 +1,783 @@
+" Vim syntax file
+" Language: PostScript - all Levels, selectable
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Filenames: *.ps,*.eps
+" Last Change: 27th June 2002
+" URL: http://www.eandem.co.uk/mrw/vim
+"
+" Options Flags:
+" postscr_level - language level to use for highligting (1, 2, or 3)
+" postscr_display - include display PS operators
+" postscr_ghostscript - include GS extensions
+" postscr_fonts - highlight standard font names (a lot for PS 3)
+" postscr_encodings - highlight encoding names (there are a lot)
+" postscr_andornot_binary - highlight and, or, and not as binary operators (not logical)
+"
+" 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
+
+" PostScript is case sensitive
+syn case match
+
+" Keyword characters - all 7-bit ASCII bar PS delimiters and ws
+if version >= 600
+ setlocal iskeyword=33-127,^(,^),^<,^>,^[,^],^{,^},^/,^%
+else
+ set iskeyword=33-127,^(,^),^<,^>,^[,^],^{,^},^/,^%
+endif
+
+" Yer trusty old TODO highlghter!
+syn keyword postscrTodo contained TODO
+
+" Comment
+syn match postscrComment "%.*$" contains=postscrTodo
+" DSC comment start line (NB: defines DSC level, not PS level!)
+syn match postscrDSCComment "^%!PS-Adobe-\d\+\.\d\+\s*.*$"
+" DSC comment line (no check on possible comments - another language!)
+syn match postscrDSCComment "^%%\u\+.*$" contains=@postscrString,@postscrNumber
+" DSC continuation line (no check that previous line is DSC comment)
+syn match postscrDSCComment "^%%+ *.*$" contains=@postscrString,@postscrNumber
+
+" Names
+syn match postscrName "\k\+"
+
+" Identifiers
+syn match postscrIdentifierError "/\{1,2}[[:space:]\[\]{}]"me=e-1
+syn match postscrIdentifier "/\{1,2}\k\+" contains=postscrConstant,postscrBoolean,postscrCustConstant
+
+" Numbers
+syn case ignore
+" In file hex data - usually complete lines
+syn match postscrHex "^[[:xdigit:]][[:xdigit:][:space:]]*$"
+"syn match postscrHex "\<\x\{2,}\>"
+" Integers
+syn match postscrInteger "\<[+-]\=\d\+\>"
+" Radix
+syn match postscrRadix "\d\+#\x\+\>"
+" Reals - upper and lower case e is allowed
+syn match postscrFloat "[+-]\=\d\+\.\>"
+syn match postscrFloat "[+-]\=\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
+syn match postscrFloat "[+-]\=\.\d\+\(e[+-]\=\d\+\)\=\>"
+syn match postscrFloat "[+-]\=\d\+e[+-]\=\d\+\>"
+syn cluster postscrNumber contains=postscrInteger,postscrRadix,postscrFloat
+syn case match
+
+" Escaped characters
+syn match postscrSpecialChar contained "\\[nrtbf\\()]"
+syn match postscrSpecialCharError contained "\\[^nrtbf\\()]"he=e-1
+" Escaped octal characters
+syn match postscrSpecialChar contained "\\\o\{1,3}"
+
+" Strings
+" ASCII strings
+syn region postscrASCIIString start=+(+ end=+)+ skip=+([^)]*)+ contains=postscrSpecialChar,postscrSpecialCharError
+" Hex strings
+syn match postscrHexCharError contained "[^<>[:xdigit:][:space:]]"
+syn region postscrHexString start=+<\($\|[^<]\)+ end=+>+ contains=postscrHexCharError
+syn match postscrHexString "<>"
+" ASCII85 strings
+syn match postscrASCII85CharError contained "[^<>\~!-uz[:space:]]"
+syn region postscrASCII85String start=+<\~+ end=+\~>+ contains=postscrASCII85CharError
+syn cluster postscrString contains=postscrASCIIString,postscrHexString,postscrASCII85String
+
+
+" Set default highlighting to level 2 - most common at the moment
+if !exists("postscr_level")
+ let postscr_level = 2
+endif
+
+
+" PS level 1 operators - common to all levels (well ...)
+
+" Stack operators
+syn keyword postscrOperator pop exch dup copy index roll clear count mark cleartomark counttomark
+
+" Math operators
+syn keyword postscrMathOperator add div idiv mod mul sub abs neg ceiling floor round truncate sqrt atan cos
+syn keyword postscrMathOperator sin exp ln log rand srand rrand
+
+" Array operators
+syn match postscrOperator "[\[\]{}]"
+syn keyword postscrOperator array length get put getinterval putinterval astore aload copy
+syn keyword postscrRepeat forall
+
+" Dictionary operators
+syn keyword postscrOperator dict maxlength begin end def load store known where currentdict
+syn keyword postscrOperator countdictstack dictstack cleardictstack internaldict
+syn keyword postscrConstant $error systemdict userdict statusdict errordict
+
+" String operators
+syn keyword postscrOperator string anchorsearch search token
+
+" Logic operators
+syn keyword postscrLogicalOperator eq ne ge gt le lt and not or
+if exists("postscr_andornot_binaryop")
+ syn keyword postscrBinaryOperator and or not
+else
+ syn keyword postscrLogicalOperator and not or
+endif
+syn keyword postscrBinaryOperator xor bitshift
+syn keyword postscrBoolean true false
+
+" PS Type names
+syn keyword postscrConstant arraytype booleantype conditiontype dicttype filetype fonttype gstatetype
+syn keyword postscrConstant integertype locktype marktype nametype nulltype operatortype
+syn keyword postscrConstant packedarraytype realtype savetype stringtype
+
+" Control operators
+syn keyword postscrConditional if ifelse
+syn keyword postscrRepeat for repeat loop
+syn keyword postscrOperator exec exit stop stopped countexecstack execstack quit
+syn keyword postscrProcedure start
+
+" Object operators
+syn keyword postscrOperator type cvlit cvx xcheck executeonly noaccess readonly rcheck wcheck cvi cvn cvr
+syn keyword postscrOperator cvrs cvs
+
+" File operators
+syn keyword postscrOperator file closefile read write readhexstring writehexstring readstring writestring
+syn keyword postscrOperator bytesavailable flush flushfile resetfile status run currentfile print
+syn keyword postscrOperator stack pstack readline deletefile setfileposition fileposition renamefile
+syn keyword postscrRepeat filenameforall
+syn keyword postscrProcedure = ==
+
+" VM operators
+syn keyword postscrOperator save restore
+
+" Misc operators
+syn keyword postscrOperator bind null usertime executive echo realtime
+syn keyword postscrConstant product revision serialnumber version
+syn keyword postscrProcedure prompt
+
+" GState operators
+syn keyword postscrOperator gsave grestore grestoreall initgraphics setlinewidth setlinecap currentgray
+syn keyword postscrOperator currentlinejoin setmiterlimit currentmiterlimit setdash currentdash setgray
+syn keyword postscrOperator sethsbcolor currenthsbcolor setrgbcolor currentrgbcolor currentlinewidth
+syn keyword postscrOperator currentlinecap setlinejoin setcmykcolor currentcmykcolor
+
+" Device gstate operators
+syn keyword postscrOperator setscreen currentscreen settransfer currenttransfer setflat currentflat
+syn keyword postscrOperator currentblackgeneration setblackgeneration setundercolorremoval
+syn keyword postscrOperator setcolorscreen currentcolorscreen setcolortransfer currentcolortransfer
+syn keyword postscrOperator currentundercolorremoval
+
+" Matrix operators
+syn keyword postscrOperator matrix initmatrix identmatrix defaultmatrix currentmatrix setmatrix translate
+syn keyword postscrOperator concat concatmatrix transform dtransform itransform idtransform invertmatrix
+syn keyword postscrOperator scale rotate
+
+" Path operators
+syn keyword postscrOperator newpath currentpoint moveto rmoveto lineto rlineto arc arcn arcto curveto
+syn keyword postscrOperator closepath flattenpath reversepath strokepath charpath clippath pathbbox
+syn keyword postscrOperator initclip clip eoclip rcurveto
+syn keyword postscrRepeat pathforall
+
+" Painting operators
+syn keyword postscrOperator erasepage fill eofill stroke image imagemask colorimage
+
+" Device operators
+syn keyword postscrOperator showpage copypage nulldevice
+
+" Character operators
+syn keyword postscrProcedure findfont
+syn keyword postscrConstant FontDirectory ISOLatin1Encoding StandardEncoding
+syn keyword postscrOperator definefont scalefont makefont setfont currentfont show ashow
+syn keyword postscrOperator stringwidth kshow setcachedevice
+syn keyword postscrOperator setcharwidth widthshow awidthshow findencoding cshow rootfont setcachedevice2
+
+" Interpreter operators
+syn keyword postscrOperator vmstatus cachestatus setcachelimit
+
+" PS constants
+syn keyword postscrConstant contained Gray Red Green Blue All None DeviceGray DeviceRGB
+
+" PS Filters
+syn keyword postscrConstant contained ASCIIHexDecode ASCIIHexEncode ASCII85Decode ASCII85Encode LZWDecode
+syn keyword postscrConstant contained RunLengthDecode RunLengthEncode SubFileDecode NullEncode
+syn keyword postscrConstant contained GIFDecode PNGDecode LZWEncode
+
+" PS JPEG filter dictionary entries
+syn keyword postscrConstant contained DCTEncode DCTDecode Colors HSamples VSamples QuantTables QFactor
+syn keyword postscrConstant contained HuffTables ColorTransform
+
+" PS CCITT filter dictionary entries
+syn keyword postscrConstant contained CCITTFaxEncode CCITTFaxDecode Uncompressed K EndOfLine
+syn keyword postscrConstant contained Columns Rows EndOfBlock Blacks1 DamagedRowsBeforeError
+syn keyword postscrConstant contained EncodedByteAlign
+
+" PS Form dictionary entries
+syn keyword postscrConstant contained FormType XUID BBox Matrix PaintProc Implementation
+
+" PS Errors
+syn keyword postscrProcedure handleerror
+syn keyword postscrConstant contained configurationerror dictfull dictstackunderflow dictstackoverflow
+syn keyword postscrConstant contained execstackoverflow interrupt invalidaccess
+syn keyword postscrConstant contained invalidcontext invalidexit invalidfileaccess invalidfont
+syn keyword postscrConstant contained invalidid invalidrestore ioerror limitcheck nocurrentpoint
+syn keyword postscrConstant contained rangecheck stackoverflow stackunderflow syntaxerror timeout
+syn keyword postscrConstant contained typecheck undefined undefinedfilename undefinedresource
+syn keyword postscrConstant contained undefinedresult unmatchedmark unregistered VMerror
+
+if exists("postscr_fonts")
+" Font names
+ syn keyword postscrConstant contained Symbol Times-Roman Times-Italic Times-Bold Times-BoldItalic
+ syn keyword postscrConstant contained Helvetica Helvetica-Oblique Helvetica-Bold Helvetica-BoldOblique
+ syn keyword postscrConstant contained Courier Courier-Oblique Courier-Bold Courier-BoldOblique
+endif
+
+
+if exists("postscr_display")
+" Display PS only operators
+ syn keyword postscrOperator currentcontext fork join detach lock monitor condition wait notify yield
+ syn keyword postscrOperator viewclip eoviewclip rectviewclip initviewclip viewclippath deviceinfo
+ syn keyword postscrOperator sethalftonephase currenthalftonephase wtranslation defineusername
+endif
+
+" PS Character encoding names
+if exists("postscr_encodings")
+" Common encoding names
+ syn keyword postscrConstant contained .notdef
+
+" Standard and ISO encoding names
+ syn keyword postscrConstant contained space exclam quotedbl numbersign dollar percent ampersand quoteright
+ syn keyword postscrConstant contained parenleft parenright asterisk plus comma hyphen period slash zero
+ syn keyword postscrConstant contained one two three four five six seven eight nine colon semicolon less
+ syn keyword postscrConstant contained equal greater question at
+ syn keyword postscrConstant contained bracketleft backslash bracketright asciicircum underscore quoteleft
+ syn keyword postscrConstant contained braceleft bar braceright asciitilde
+ syn keyword postscrConstant contained exclamdown cent sterling fraction yen florin section currency
+ syn keyword postscrConstant contained quotesingle quotedblleft guillemotleft guilsinglleft guilsinglright
+ syn keyword postscrConstant contained fi fl endash dagger daggerdbl periodcentered paragraph bullet
+ syn keyword postscrConstant contained quotesinglbase quotedblbase quotedblright guillemotright ellipsis
+ syn keyword postscrConstant contained perthousand questiondown grave acute circumflex tilde macron breve
+ syn keyword postscrConstant contained dotaccent dieresis ring cedilla hungarumlaut ogonek caron emdash
+ syn keyword postscrConstant contained AE ordfeminine Lslash Oslash OE ordmasculine ae dotlessi lslash
+ syn keyword postscrConstant contained oslash oe germandbls
+" The following are valid names, but are used as short procedure names in generated PS!
+" 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
+" 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
+
+" Symbol encoding names
+ syn keyword postscrConstant contained universal existential suchthat asteriskmath minus
+ syn keyword postscrConstant contained congruent Alpha Beta Chi Delta Epsilon Phi Gamma Eta Iota theta1
+ syn keyword postscrConstant contained Kappa Lambda Mu Nu Omicron Pi Theta Rho Sigma Tau Upsilon sigma1
+ syn keyword postscrConstant contained Omega Xi Psi Zeta therefore perpendicular
+ syn keyword postscrConstant contained radicalex alpha beta chi delta epsilon phi gamma eta iota phi1
+ syn keyword postscrConstant contained kappa lambda mu nu omicron pi theta rho sigma tau upsilon omega1
+ syn keyword postscrConstant contained Upsilon1 minute lessequal infinity club diamond heart spade
+ syn keyword postscrConstant contained arrowboth arrowleft arrowup arrowright arrowdown degree plusminus
+ syn keyword postscrConstant contained second greaterequal multiply proportional partialdiff divide
+ syn keyword postscrConstant contained notequal equivalence approxequal arrowvertex arrowhorizex
+ syn keyword postscrConstant contained aleph Ifraktur Rfraktur weierstrass circlemultiply circleplus
+ syn keyword postscrConstant contained emptyset intersection union propersuperset reflexsuperset notsubset
+ syn keyword postscrConstant contained propersubset reflexsubset element notelement angle gradient
+ syn keyword postscrConstant contained registerserif copyrightserif trademarkserif radical dotmath
+ syn keyword postscrConstant contained logicalnot logicaland logicalor arrowdblboth arrowdblleft arrowdblup
+ syn keyword postscrConstant contained arrowdblright arrowdbldown omega xi psi zeta similar carriagereturn
+ syn keyword postscrConstant contained lozenge angleleft registersans copyrightsans trademarksans summation
+ syn keyword postscrConstant contained parenlefttp parenleftex parenleftbt bracketlefttp bracketleftex
+ syn keyword postscrConstant contained bracketleftbt bracelefttp braceleftmid braceleftbt braceex euro
+ syn keyword postscrConstant contained angleright integral integraltp integralex integralbt parenrighttp
+ syn keyword postscrConstant contained parenrightex parenrightbt bracketrighttp bracketrightex
+ syn keyword postscrConstant contained bracketrightbt bracerighttp bracerightmid bracerightbt
+
+" ISO Latin1 encoding names
+ syn keyword postscrConstant contained brokenbar copyright registered twosuperior threesuperior
+ syn keyword postscrConstant contained onesuperior onequarter onehalf threequarters
+ syn keyword postscrConstant contained Agrave Aacute Acircumflex Atilde Adieresis Aring Ccedilla Egrave
+ syn keyword postscrConstant contained Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis
+ syn keyword postscrConstant contained Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis Ugrave Uacute
+ syn keyword postscrConstant contained Ucircumflex Udieresis Yacute Thorn
+ syn keyword postscrConstant contained agrave aacute acircumflex atilde adieresis aring ccedilla egrave
+ syn keyword postscrConstant contained eacute ecircumflex edieresis igrave iacute icircumflex idieresis
+ syn keyword postscrConstant contained eth ntilde ograve oacute ocircumflex otilde odieresis ugrave uacute
+ syn keyword postscrConstant contained ucircumflex udieresis yacute thorn ydieresis
+ syn keyword postscrConstant contained zcaron exclamsmall Hungarumlautsmall dollaroldstyle dollarsuperior
+ syn keyword postscrConstant contained ampersandsmall Acutesmall parenleftsuperior parenrightsuperior
+ syn keyword postscrConstant contained twodotenleader onedotenleader zerooldstyle oneoldstyle twooldstyle
+ syn keyword postscrConstant contained threeoldstyle fouroldstyle fiveoldstyle sixoldstyle sevenoldstyle
+ syn keyword postscrConstant contained eightoldstyle nineoldstyle commasuperior
+ syn keyword postscrConstant contained threequartersemdash periodsuperior questionsmall asuperior bsuperior
+ syn keyword postscrConstant contained centsuperior dsuperior esuperior isuperior lsuperior msuperior
+ syn keyword postscrConstant contained nsuperior osuperior rsuperior ssuperior tsuperior ff ffi ffl
+ syn keyword postscrConstant contained parenleftinferior parenrightinferior Circumflexsmall hyphensuperior
+ syn keyword postscrConstant contained Gravesmall Asmall Bsmall Csmall Dsmall Esmall Fsmall Gsmall Hsmall
+ syn keyword postscrConstant contained Ismall Jsmall Ksmall Lsmall Msmall Nsmall Osmall Psmall Qsmall
+ syn keyword postscrConstant contained Rsmall Ssmall Tsmall Usmall Vsmall Wsmall Xsmall Ysmall Zsmall
+ syn keyword postscrConstant contained colonmonetary onefitted rupiah Tildesmall exclamdownsmall
+ syn keyword postscrConstant contained centoldstyle Lslashsmall Scaronsmall Zcaronsmall Dieresissmall
+ syn keyword postscrConstant contained Brevesmall Caronsmall Dotaccentsmall Macronsmall figuredash
+ syn keyword postscrConstant contained hypheninferior Ogoneksmall Ringsmall Cedillasmall questiondownsmall
+ syn keyword postscrConstant contained oneeighth threeeighths fiveeighths seveneighths onethird twothirds
+ syn keyword postscrConstant contained zerosuperior foursuperior fivesuperior sixsuperior sevensuperior
+ syn keyword postscrConstant contained eightsuperior ninesuperior zeroinferior oneinferior twoinferior
+ syn keyword postscrConstant contained threeinferior fourinferior fiveinferior sixinferior seveninferior
+ syn keyword postscrConstant contained eightinferior nineinferior centinferior dollarinferior periodinferior
+ syn keyword postscrConstant contained commainferior Agravesmall Aacutesmall Acircumflexsmall
+ syn keyword postscrConstant contained Atildesmall Adieresissmall Aringsmall AEsmall Ccedillasmall
+ syn keyword postscrConstant contained Egravesmall Eacutesmall Ecircumflexsmall Edieresissmall Igravesmall
+ syn keyword postscrConstant contained Iacutesmall Icircumflexsmall Idieresissmall Ethsmall Ntildesmall
+ syn keyword postscrConstant contained Ogravesmall Oacutesmall Ocircumflexsmall Otildesmall Odieresissmall
+ syn keyword postscrConstant contained OEsmall Oslashsmall Ugravesmall Uacutesmall Ucircumflexsmall
+ syn keyword postscrConstant contained Udieresissmall Yacutesmall Thornsmall Ydieresissmall Black Bold Book
+ syn keyword postscrConstant contained Light Medium Regular Roman Semibold
+
+" Sundry standard and expert encoding names
+ syn keyword postscrConstant contained trademark Scaron Ydieresis Zcaron scaron softhyphen overscore
+ syn keyword postscrConstant contained graybox Sacute Tcaron Zacute sacute tcaron zacute Aogonek Scedilla
+ syn keyword postscrConstant contained Zdotaccent aogonek scedilla Lcaron lcaron zdotaccent Racute Abreve
+ syn keyword postscrConstant contained Lacute Cacute Ccaron Eogonek Ecaron Dcaron Dcroat Nacute Ncaron
+ syn keyword postscrConstant contained Ohungarumlaut Rcaron Uring Uhungarumlaut Tcommaaccent racute abreve
+ syn keyword postscrConstant contained lacute cacute ccaron eogonek ecaron dcaron dcroat nacute ncaron
+ syn keyword postscrConstant contained ohungarumlaut rcaron uring uhungarumlaut tcommaaccent Gbreve
+ syn keyword postscrConstant contained Idotaccent gbreve blank apple
+endif
+
+
+" By default level 3 includes all level 2 operators
+if postscr_level == 2 || postscr_level == 3
+" Dictionary operators
+ syn match postscrOperator "\(<<\|>>\)"
+ syn keyword postscrOperator undef
+ syn keyword postscrConstant globaldict shareddict
+
+" Device operators
+ syn keyword postscrOperator setpagedevice currentpagedevice
+
+" Path operators
+ syn keyword postscrOperator rectclip setbbox uappend ucache upath ustrokepath arct
+
+" Painting operators
+ syn keyword postscrOperator rectfill rectstroke ufill ueofill ustroke
+
+" Array operators
+ syn keyword postscrOperator currentpacking setpacking packedarray
+
+" Misc operators
+ syn keyword postscrOperator languagelevel
+
+" Insideness operators
+ syn keyword postscrOperator infill ineofill instroke inufill inueofill inustroke
+
+" GState operators
+ syn keyword postscrOperator gstate setgstate currentgstate setcolor
+ syn keyword postscrOperator setcolorspace currentcolorspace setstrokeadjust currentstrokeadjust
+ syn keyword postscrOperator currentcolor
+
+" Device gstate operators
+ syn keyword postscrOperator sethalftone currenthalftone setoverprint currentoverprint
+ syn keyword postscrOperator setcolorrendering currentcolorrendering
+
+" Character operators
+ syn keyword postscrConstant GlobalFontDirectory SharedFontDirectory
+ syn keyword postscrOperator glyphshow selectfont
+ syn keyword postscrOperator addglyph undefinefont xshow xyshow yshow
+
+" Pattern operators
+ syn keyword postscrOperator makepattern setpattern execform
+
+" Resource operators
+ syn keyword postscrOperator defineresource undefineresource findresource resourcestatus
+ syn keyword postscrRepeat resourceforall
+
+" File operators
+ syn keyword postscrOperator filter printobject writeobject setobjectformat currentobjectformat
+
+" VM operators
+ syn keyword postscrOperator currentshared setshared defineuserobject execuserobject undefineuserobject
+ syn keyword postscrOperator gcheck scheck startjob currentglobal setglobal
+ syn keyword postscrConstant UserObjects
+
+" Interpreter operators
+ syn keyword postscrOperator setucacheparams setvmthreshold ucachestatus setsystemparams
+ syn keyword postscrOperator setuserparams currentuserparams setcacheparams currentcacheparams
+ syn keyword postscrOperator currentdevparams setdevparams vmreclaim currentsystemparams
+
+" PS2 constants
+ syn keyword postscrConstant contained DeviceCMYK Pattern Indexed Separation Cyan Magenta Yellow Black
+ syn keyword postscrConstant contained CIEBasedA CIEBasedABC CIEBasedDEF CIEBasedDEFG
+
+" PS2 $error dictionary entries
+ syn keyword postscrConstant contained newerror errorname command errorinfo ostack estack dstack
+ syn keyword postscrConstant contained recordstacks binary
+
+" PS2 Category dictionary
+ syn keyword postscrConstant contained DefineResource UndefineResource FindResource ResourceStatus
+ syn keyword postscrConstant contained ResourceForAll Category InstanceType ResourceFileName
+
+" PS2 Category names
+ syn keyword postscrConstant contained Font Encoding Form Pattern ProcSet ColorSpace Halftone
+ syn keyword postscrConstant contained ColorRendering Filter ColorSpaceFamily Emulator IODevice
+ syn keyword postscrConstant contained ColorRenderingType FMapType FontType FormType HalftoneType
+ syn keyword postscrConstant contained ImageType PatternType Category Generic
+
+" PS2 pagedevice dictionary entries
+ syn keyword postscrConstant contained PageSize MediaColor MediaWeight MediaType InputAttributes ManualFeed
+ syn keyword postscrConstant contained OutputType OutputAttributes NumCopies Collate Duplex Tumble
+ syn keyword postscrConstant contained Separations HWResolution Margins NegativePrint MirrorPrint
+ syn keyword postscrConstant contained CutMedia AdvanceMedia AdvanceDistance ImagingBBox
+ syn keyword postscrConstant contained Policies Install BeginPage EndPage PolicyNotFound PolicyReport
+ syn keyword postscrConstant contained ManualSize OutputFaceUp Jog
+ syn keyword postscrConstant contained Bind BindDetails Booklet BookletDetails CollateDetails
+ syn keyword postscrConstant contained DeviceRenderingInfo ExitJamRecovery Fold FoldDetails Laminate
+ syn keyword postscrConstant contained ManualFeedTimeout Orientation OutputPage
+ syn keyword postscrConstant contained PostRenderingEnhance PostRenderingEnhanceDetails
+ syn keyword postscrConstant contained PreRenderingEnhance PreRenderingEnhanceDetails
+ syn keyword postscrConstant contained Signature SlipSheet Staple StapleDetails Trim
+ syn keyword postscrConstant contained ProofSet REValue PrintQuality ValuesPerColorComponent AntiAlias
+
+" PS2 PDL resource entries
+ syn keyword postscrConstant contained Selector LanguageFamily LanguageVersion
+
+" PS2 halftone dictionary entries
+ syn keyword postscrConstant contained HalftoneType HalftoneName
+ syn keyword postscrConstant contained AccurateScreens ActualAngle Xsquare Ysquare AccurateFrequency
+ syn keyword postscrConstant contained Frequency SpotFunction Angle Width Height Thresholds
+ syn keyword postscrConstant contained RedFrequency RedSpotFunction RedAngle RedWidth RedHeight
+ syn keyword postscrConstant contained GreenFrequency GreenSpotFunction GreenAngle GreenWidth GreenHeight
+ syn keyword postscrConstant contained BlueFrequency BlueSpotFunction BlueAngle BlueWidth BlueHeight
+ syn keyword postscrConstant contained GrayFrequency GrayAngle GraySpotFunction GrayWidth GrayHeight
+ syn keyword postscrConstant contained GrayThresholds BlueThresholds GreenThresholds RedThresholds
+ syn keyword postscrConstant contained TransferFunction
+
+" PS2 CSR dictionaries
+ syn keyword postscrConstant contained RangeA DecodeA MatrixA RangeABC DecodeABC MatrixABC BlackPoint
+ syn keyword postscrConstant contained RangeLMN DecodeLMN MatrixLMN WhitePoint RangeDEF DecodeDEF RangeHIJ
+ syn keyword postscrConstant contained RangeDEFG DecodeDEFG RangeHIJK Table
+
+" PS2 CRD dictionaries
+ syn keyword postscrConstant contained ColorRenderingType EncodeLMB EncodeABC RangePQR MatrixPQR
+ syn keyword postscrConstant contained AbsoluteColorimetric RelativeColorimetric Saturation Perceptual
+ syn keyword postscrConstant contained TransformPQR RenderTable
+
+" PS2 Pattern dictionary
+ syn keyword postscrConstant contained PatternType PaintType TilingType XStep YStep
+
+" PS2 Image dictionary
+ syn keyword postscrConstant contained ImageType ImageMatrix MultipleDataSources DataSource
+ syn keyword postscrConstant contained BitsPerComponent Decode Interpolate
+
+" PS2 Font dictionaries
+ syn keyword postscrConstant contained FontType FontMatrix FontName FontInfo LanguageLevel WMode Encoding
+ syn keyword postscrConstant contained UniqueID StrokeWidth Metrics Metrics2 CDevProc CharStrings Private
+ syn keyword postscrConstant contained FullName Notice version ItalicAngle isFixedPitch UnderlinePosition
+ syn keyword postscrConstant contained FMapType Encoding FDepVector PrefEnc EscChar ShiftOut ShiftIn
+ syn keyword postscrConstant contained WeightVector Blend $Blend CIDFontType sfnts CIDSystemInfo CodeMap
+ syn keyword postscrConstant contained CMap CIDFontName CIDSystemInfo UIDBase CIDDevProc CIDCount
+ syn keyword postscrConstant contained CIDMapOffset FDArray FDBytes GDBytes GlyphData GlyphDictionary
+ syn keyword postscrConstant contained SDBytes SubrMapOffset SubrCount BuildGlyph CIDMap FID MIDVector
+ syn keyword postscrConstant contained Ordering Registry Supplement CMapName CMapVersion UIDOffset
+ syn keyword postscrConstant contained SubsVector UnderlineThickness FamilyName FontBBox CurMID
+ syn keyword postscrConstant contained Weight
+
+" PS2 User paramters
+ syn keyword postscrConstant contained MaxFontItem MinFontCompress MaxUPathItem MaxFormItem MaxPatternItem
+ syn keyword postscrConstant contained MaxScreenItem MaxOpStack MaxDictStack MaxExecStack MaxLocalVM
+ syn keyword postscrConstant contained VMReclaim VMThreshold
+
+" PS2 System paramters
+ syn keyword postscrConstant contained SystemParamsPassword StartJobPassword BuildTime ByteOrder RealFormat
+ syn keyword postscrConstant contained MaxFontCache CurFontCache MaxOutlineCache CurOutlineCache
+ syn keyword postscrConstant contained MaxUPathCache CurUPathCache MaxFormCache CurFormCache
+ syn keyword postscrConstant contained MaxPatternCache CurPatternCache MaxScreenStorage CurScreenStorage
+ syn keyword postscrConstant contained MaxDisplayList CurDisplayList
+
+" PS2 LZW Filters
+ syn keyword postscrConstant contained Predictor
+
+" Paper Size operators
+ syn keyword postscrOperator letter lettersmall legal ledger 11x17 a4 a3 a4small b5 note
+
+" Paper Tray operators
+ syn keyword postscrOperator lettertray legaltray ledgertray a3tray a4tray b5tray 11x17tray
+
+" SCC compatibility operators
+ syn keyword postscrOperator sccbatch sccinteractive setsccbatch setsccinteractive
+
+" Page duplexing operators
+ syn keyword postscrOperator duplexmode firstside newsheet setduplexmode settumble tumble
+
+" Device compatability operators
+ syn keyword postscrOperator devdismount devformat devmount devstatus
+ syn keyword postscrRepeat devforall
+
+" Imagesetter compatability operators
+ syn keyword postscrOperator accuratescreens checkscreen pagemargin pageparams setaccuratescreens setpage
+ syn keyword postscrOperator setpagemargin setpageparams
+
+" Misc compatability operators
+ syn keyword postscrOperator appletalktype buildtime byteorder checkpassword defaulttimeouts diskonline
+ syn keyword postscrOperator diskstatus manualfeed manualfeedtimeout margins mirrorprint pagecount
+ syn keyword postscrOperator pagestackorder printername processcolors sethardwareiomode setjobtimeout
+ syn keyword postscrOperator setpagestockorder setprintername setresolution doprinterrors dostartpage
+ syn keyword postscrOperator hardwareiomode initializedisk jobname jobtimeout ramsize realformat resolution
+ syn keyword postscrOperator setdefaulttimeouts setdoprinterrors setdostartpage setdosysstart
+ syn keyword postscrOperator setuserdiskpercent softwareiomode userdiskpercent waittimeout
+ syn keyword postscrOperator setsoftwareiomode dosysstart emulate setmargins setmirrorprint
+
+endif " PS2 highlighting
+
+if postscr_level == 3
+" Shading operators
+ syn keyword postscrOperator setsmoothness currentsmoothness shfill
+
+" Clip operators
+ syn keyword postscrOperator clipsave cliprestore
+
+" Pagedevive operators
+ syn keyword postscrOperator setpage setpageparams
+
+" Device gstate operators
+ syn keyword postscrOperator findcolorrendering
+
+" Font operators
+ syn keyword postscrOperator composefont
+
+" PS LL3 Output device resource entries
+ syn keyword postscrConstant contained DeviceN TrappingDetailsType
+
+" PS LL3 pagdevice dictionary entries
+ syn keyword postscrConstant contained DeferredMediaSelection ImageShift InsertSheet LeadingEdge MaxSeparations
+ syn keyword postscrConstant contained MediaClass MediaPosition OutputDevice PageDeviceName PageOffset ProcessColorModel
+ syn keyword postscrConstant contained RollFedMedia SeparationColorNames SeparationOrder Trapping TrappingDetails
+ syn keyword postscrConstant contained TraySwitch UseCIEColor
+ syn keyword postscrConstant contained ColorantDetails ColorantName ColorantType NeutralDensity TrappingOrder
+ syn keyword postscrConstant contained ColorantSetName
+
+" PS LL3 trapping dictionary entries
+ syn keyword postscrConstant contained BlackColorLimit BlackDensityLimit BlackWidth ColorantZoneDetails
+ syn keyword postscrConstant contained SlidingTrapLimit StepLimit TrapColorScaling TrapSetName TrapWidth
+ syn keyword postscrConstant contained ImageResolution ImageToObjectTrapping ImageTrapPlacement
+ syn keyword postscrConstant contained StepLimit TrapColorScaling Enabled ImageInternalTrapping
+
+" PS LL3 filters and entries
+ syn keyword postscrConstant contained ReusableStreamDecode CloseSource CloseTarget UnitSize LowBitFirst
+ syn keyword postscrConstant contained FlateEncode FlateDecode DecodeParams Intent AsyncRead
+
+" PS LL3 halftone dictionary entries
+ syn keyword postscrConstant contained Height2 Width2
+
+" PS LL3 function dictionary entries
+ syn keyword postscrConstant contained FunctionType Domain Range Order BitsPerSample Encode Size C0 C1 N
+ syn keyword postscrConstant contained Functions Bounds
+
+" PS LL3 image dictionary entries
+ syn keyword postscrConstant contained InterleaveType MaskDict DataDict MaskColor
+
+" PS LL3 Pattern and shading dictionary entries
+ syn keyword postscrConstant contained Shading ShadingType Background ColorSpace Coords Extend Function
+ syn keyword postscrConstant contained VerticesPerRow BitsPerCoordinate BitsPerFlag
+
+" PS LL3 image dictionary entries
+ syn keyword postscrConstant contained XOrigin YOrigin UnpaintedPath PixelCopy
+
+" PS LL3 colorrendering procedures
+ syn keyword postscrProcedure GetHalftoneName GetPageDeviceName GetSubstituteCRD
+
+" PS LL3 CIDInit procedures
+ syn keyword postscrProcedure beginbfchar beginbfrange begincidchar begincidrange begincmap begincodespacerange
+ syn keyword postscrProcedure beginnotdefchar beginnotdefrange beginrearrangedfont beginusematrix
+ syn keyword postscrProcedure endbfchar endbfrange endcidchar endcidrange endcmap endcodespacerange
+ syn keyword postscrProcedure endnotdefchar endnotdefrange endrearrangedfont endusematrix
+ syn keyword postscrProcedure StartData usefont usecmp
+
+" PS LL3 Trapping procedures
+ syn keyword postscrProcedure settrapparams currenttrapparams settrapzone
+
+" PS LL3 BitmapFontInit procedures
+ syn keyword postscrProcedure removeall removeglyphs
+
+" PS LL3 Font names
+ if exists("postscr_fonts")
+ syn keyword postscrConstant contained AlbertusMT AlbertusMT-Italic AlbertusMT-Light Apple-Chancery Apple-ChanceryCE
+ syn keyword postscrConstant contained AntiqueOlive-Roman AntiqueOlive-Italic AntiqueOlive-Bold AntiqueOlive-Compact
+ syn keyword postscrConstant contained AntiqueOliveCE-Roman AntiqueOliveCE-Italic AntiqueOliveCE-Bold AntiqueOliveCE-Compact
+ syn keyword postscrConstant contained ArialMT Arial-ItalicMT Arial-LightMT Arial-BoldMT Arial-BoldItalicMT
+ syn keyword postscrConstant contained ArialCE ArialCE-Italic ArialCE-Light ArialCE-Bold ArialCE-BoldItalic
+ syn keyword postscrConstant contained AvantGarde-Book AvantGarde-BookOblique AvantGarde-Demi AvantGarde-DemiOblique
+ syn keyword postscrConstant contained AvantGardeCE-Book AvantGardeCE-BookOblique AvantGardeCE-Demi AvantGardeCE-DemiOblique
+ syn keyword postscrConstant contained Bodoni Bodoni-Italic Bodoni-Bold Bodoni-BoldItalic Bodoni-Poster Bodoni-PosterCompressed
+ syn keyword postscrConstant contained BodoniCE BodoniCE-Italic BodoniCE-Bold BodoniCE-BoldItalic BodoniCE-Poster BodoniCE-PosterCompressed
+ syn keyword postscrConstant contained Bookman-Light Bookman-LightItalic Bookman-Demi Bookman-DemiItalic
+ syn keyword postscrConstant contained BookmanCE-Light BookmanCE-LightItalic BookmanCE-Demi BookmanCE-DemiItalic
+ syn keyword postscrConstant contained Carta Chicago ChicagoCE Clarendon Clarendon-Light Clarendon-Bold
+ syn keyword postscrConstant contained ClarendonCE ClarendonCE-Light ClarendonCE-Bold CooperBlack CooperBlack-Italic
+ syn keyword postscrConstant contained Copperplate-ThirtyTwoBC CopperPlate-ThirtyThreeBC Coronet-Regular CoronetCE-Regular
+ syn keyword postscrConstant contained CourierCE CourierCE-Oblique CourierCE-Bold CourierCE-BoldOblique
+ syn keyword postscrConstant contained Eurostile Eurostile-Bold Eurostile-ExtendedTwo Eurostile-BoldExtendedTwo
+ syn keyword postscrConstant contained Eurostile EurostileCE-Bold EurostileCE-ExtendedTwo EurostileCE-BoldExtendedTwo
+ syn keyword postscrConstant contained Geneva GenevaCE GillSans GillSans-Italic GillSans-Bold GillSans-BoldItalic GillSans-BoldCondensed
+ syn keyword postscrConstant contained GillSans-Light GillSans-LightItalic GillSans-ExtraBold
+ syn keyword postscrConstant contained GillSansCE-Roman GillSansCE-Italic GillSansCE-Bold GillSansCE-BoldItalic GillSansCE-BoldCondensed
+ syn keyword postscrConstant contained GillSansCE-Light GillSansCE-LightItalic GillSansCE-ExtraBold
+ syn keyword postscrConstant contained Goudy Goudy-Italic Goudy-Bold Goudy-BoldItalic Goudy-ExtraBould
+ syn keyword postscrConstant contained HelveticaCE HelveticaCE-Oblique HelveticaCE-Bold HelveticaCE-BoldOblique
+ syn keyword postscrConstant contained Helvetica-Condensed Helvetica-Condensed-Oblique Helvetica-Condensed-Bold Helvetica-Condensed-BoldObl
+ syn keyword postscrConstant contained HelveticaCE-Condensed HelveticaCE-Condensed-Oblique HelveticaCE-Condensed-Bold
+ syn keyword postscrConstant contained HelveticaCE-Condensed-BoldObl Helvetica-Narrow Helvetica-Narrow-Oblique Helvetica-Narrow-Bold
+ syn keyword postscrConstant contained Helvetica-Narrow-BoldOblique HelveticaCE-Narrow HelveticaCE-Narrow-Oblique HelveticaCE-Narrow-Bold
+ syn keyword postscrConstant contained HelveticaCE-Narrow-BoldOblique HoeflerText-Regular HoeflerText-Italic HoeflerText-Black
+ syn keyword postscrConstant contained HoeflerText-BlackItalic HoeflerText-Ornaments HoeflerTextCE-Regular HoeflerTextCE-Italic
+ syn keyword postscrConstant contained HoeflerTextCE-Black HoeflerTextCE-BlackItalic
+ syn keyword postscrConstant contained JoannaMT JoannaMT-Italic JoannaMT-Bold JoannaMT-BoldItalic
+ syn keyword postscrConstant contained JoannaMTCE JoannaMTCE-Italic JoannaMTCE-Bold JoannaMTCE-BoldItalic
+ syn keyword postscrConstant contained LetterGothic LetterGothic-Slanted LetterGothic-Bold LetterGothic-BoldSlanted
+ syn keyword postscrConstant contained LetterGothicCE LetterGothicCE-Slanted LetterGothicCE-Bold LetterGothicCE-BoldSlanted
+ syn keyword postscrConstant contained LubalinGraph-Book LubalinGraph-BookOblique LubalinGraph-Demi LubalinGraph-DemiOblique
+ syn keyword postscrConstant contained LubalinGraphCE-Book LubalinGraphCE-BookOblique LubalinGraphCE-Demi LubalinGraphCE-DemiOblique
+ syn keyword postscrConstant contained Marigold Monaco MonacoCE MonaLisa-Recut Oxford Symbol Tekton
+ syn keyword postscrConstant contained NewCennturySchlbk-Roman NewCenturySchlbk-Italic NewCenturySchlbk-Bold NewCenturySchlbk-BoldItalic
+ syn keyword postscrConstant contained NewCenturySchlbkCE-Roman NewCenturySchlbkCE-Italic NewCenturySchlbkCE-Bold
+ syn keyword postscrConstant contained NewCenturySchlbkCE-BoldItalic NewYork NewYorkCE
+ syn keyword postscrConstant contained Optima Optima-Italic Optima-Bold Optima-BoldItalic
+ syn keyword postscrConstant contained OptimaCE OptimaCE-Italic OptimaCE-Bold OptimaCE-BoldItalic
+ syn keyword postscrConstant contained Palatino-Roman Palatino-Italic Palatino-Bold Palatino-BoldItalic
+ syn keyword postscrConstant contained PalatinoCE-Roman PalatinoCE-Italic PalatinoCE-Bold PalatinoCE-BoldItalic
+ syn keyword postscrConstant contained StempelGaramond-Roman StempelGaramond-Italic StempelGaramond-Bold StempelGaramond-BoldItalic
+ syn keyword postscrConstant contained StempelGaramondCE-Roman StempelGaramondCE-Italic StempelGaramondCE-Bold StempelGaramondCE-BoldItalic
+ syn keyword postscrConstant contained TimesCE-Roman TimesCE-Italic TimesCE-Bold TimesCE-BoldItalic
+ syn keyword postscrConstant contained TimesNewRomanPSMT TimesNewRomanPS-ItalicMT TimesNewRomanPS-BoldMT TimesNewRomanPS-BoldItalicMT
+ syn keyword postscrConstant contained TimesNewRomanCE TimesNewRomanCE-Italic TimesNewRomanCE-Bold TimesNewRomanCE-BoldItalic
+ syn keyword postscrConstant contained Univers Univers-Oblique Univers-Bold Univers-BoldOblique
+ syn keyword postscrConstant contained UniversCE-Medium UniversCE-Oblique UniversCE-Bold UniversCE-BoldOblique
+ syn keyword postscrConstant contained Univers-Light Univers-LightOblique UniversCE-Light UniversCE-LightOblique
+ syn keyword postscrConstant contained Univers-Condensed Univers-CondensedOblique Univers-CondensedBold Univers-CondensedBoldOblique
+ syn keyword postscrConstant contained UniversCE-Condensed UniversCE-CondensedOblique UniversCE-CondensedBold UniversCE-CondensedBoldOblique
+ syn keyword postscrConstant contained Univers-Extended Univers-ExtendedObl Univers-BoldExt Univers-BoldExtObl
+ syn keyword postscrConstant contained UniversCE-Extended UniversCE-ExtendedObl UniversCE-BoldExt UniversCE-BoldExtObl
+ syn keyword postscrConstant contained Wingdings-Regular ZapfChancery-MediumItalic ZapfChanceryCE-MediumItalic ZapfDingBats
+ endif " Font names
+
+endif " PS LL3 highlighting
+
+
+if exists("postscr_ghostscript")
+ " GS gstate operators
+ syn keyword postscrOperator .setaccuratecurves .currentaccuratecurves .setclipoutside
+ syn keyword postscrOperator .setdashadapt .currentdashadapt .setdefaultmatrix .setdotlength
+ syn keyword postscrOperator .currentdotlength .setfilladjust2 .currentfilladjust2
+ syn keyword postscrOperator .currentclipoutside .setcurvejoin .currentcurvejoin
+ syn keyword postscrOperator .setblendmode .currentblendmode .setopacityalpha .currentopacityalpha .setshapealpha .currentshapealpha
+ syn keyword postscrOperator .setlimitclamp .currentlimitclamp .setoverprintmode .currentoverprintmode
+
+ " GS path operators
+ syn keyword postscrOperator .dashpath .rectappend
+
+ " GS painting operators
+ syn keyword postscrOperator .setrasterop .currentrasterop .setsourcetransparent
+ syn keyword postscrOperator .settexturetransparent .currenttexturetransparent
+ syn keyword postscrOperator .currentsourcetransparent
+
+ " GS character operators
+ syn keyword postscrOperator .charboxpath .type1execchar %Type1BuildChar %Type1BuildGlyph
+
+ " GS mathematical operators
+ syn keyword postscrMathOperator arccos arcsin
+
+ " GS dictionary operators
+ syn keyword postscrOperator .dicttomark .forceput .forceundef .knownget .setmaxlength
+
+ " GS byte and string operators
+ syn keyword postscrOperator .type1encrypt .type1decrypt
+ syn keyword postscrOperator .bytestring .namestring .stringmatch
+
+ " GS relational operators (seem like math ones to me!)
+ syn keyword postscrMathOperator max min
+
+ " GS file operators
+ syn keyword postscrOperator findlibfile unread writeppmfile
+ syn keyword postscrOperator .filename .fileposition .peekstring .unread
+
+ " GS vm operators
+ syn keyword postscrOperator .forgetsave
+
+ " GS device operators
+ syn keyword postscrOperator copydevice .getdevice makeimagedevice makewordimagedevice copyscanlines
+ syn keyword postscrOperator setdevice currentdevice getdeviceprops putdeviceprops flushpage
+ syn keyword postscrOperator finddevice findprotodevice .getbitsrect
+
+ " GS misc operators
+ syn keyword postscrOperator getenv .makeoperator .setdebug .oserrno .oserror .execn
+
+ " GS rendering stack operators
+ syn keyword postscrOperator .begintransparencygroup .discardtransparencygroup .endtransparencygroup
+ syn keyword postscrOperator .begintransparencymask .discardtransparencymask .endtransparencymask .inittransparencymask
+ syn keyword postscrOperator .settextknockout .currenttextknockout
+
+ " GS filters
+ syn keyword postscrConstant contained BCPEncode BCPDecode eexecEncode eexecDecode PCXDecode
+ syn keyword postscrConstant contained PixelDifferenceEncode PixelDifferenceDecode
+ syn keyword postscrConstant contained PNGPredictorDecode TBCPEncode TBCPDecode zlibEncode
+ syn keyword postscrConstant contained zlibDecode PNGPredictorEncode PFBDecode
+ syn keyword postscrConstant contained MD5Encode
+
+ " GS filter keys
+ syn keyword postscrConstant contained InitialCodeLength FirstBitLowOrder BlockData DecodedByteAlign
+
+ " GS device parameters
+ syn keyword postscrConstant contained BitsPerPixel .HWMargins HWSize Name GrayValues
+ syn keyword postscrConstant contained ColorValues TextAlphaBits GraphicsAlphaBits BufferSpace
+ syn keyword postscrConstant contained OpenOutputFile PageCount BandHeight BandWidth BandBufferSpace
+ syn keyword postscrConstant contained ViewerPreProcess GreenValues BlueValues OutputFile
+ syn keyword postscrConstant contained MaxBitmap RedValues
+
+endif " GhostScript highlighting
+
+" 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_postscr_syntax_inits")
+ if version < 508
+ let did_postscr_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink postscrComment Comment
+
+ HiLink postscrConstant Constant
+ HiLink postscrString String
+ HiLink postscrASCIIString postscrString
+ HiLink postscrHexString postscrString
+ HiLink postscrASCII85String postscrString
+ HiLink postscrNumber Number
+ HiLink postscrInteger postscrNumber
+ HiLink postscrHex postscrNumber
+ HiLink postscrRadix postscrNumber
+ HiLink postscrFloat Float
+ HiLink postscrBoolean Boolean
+
+ HiLink postscrIdentifier Identifier
+ HiLink postscrProcedure Function
+
+ HiLink postscrName Statement
+ HiLink postscrConditional Conditional
+ HiLink postscrRepeat Repeat
+ HiLink postscrOperator Operator
+ HiLink postscrMathOperator postscrOperator
+ HiLink postscrLogicalOperator postscrOperator
+ HiLink postscrBinaryOperator postscrOperator
+
+ HiLink postscrDSCComment SpecialComment
+ HiLink postscrSpecialChar SpecialChar
+
+ HiLink postscrTodo Todo
+
+ HiLink postscrError Error
+ HiLink postscrSpecialCharError postscrError
+ HiLink postscrASCII85CharError postscrError
+ HiLink postscrHexCharError postscrError
+ HiLink postscrIdentifierError postscrError
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "postscr"
+
+" vim: ts=8
diff --git a/runtime/syntax/pov.vim b/runtime/syntax/pov.vim
new file mode 100644
index 000000000..700bb315d
--- /dev/null
+++ b/runtime/syntax/pov.vim
@@ -0,0 +1,144 @@
+" 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
+" Required Vim Version: 6.0
+
+" Setup
+if version >= 600
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ " Croak when an old Vim is sourcing us.
+ echo "Sorry, but this syntax file relies on Vim 6 features. Either upgrade Vim or use a version of " . expand("<sfile>:t:r") . " syntax file appropriate for Vim " . version/100 . "." . version %100 . "."
+ finish
+endif
+
+syn case match
+
+" 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 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 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 density_file
+syn keyword povDescriptors area_light shadowless spotlight parallel
+syn keyword povDescriptors absorption confidence density emission intervals ratio samples scattering variance
+syn keyword povDescriptors distance fog_alt fog_offset fog_type turb_depth
+syn keyword povDescriptors b_spline bezier_spline cubic_spline evaluate face_indices form linear_spline max_gradient natural_spline normal_indices normal_vectors quadratic_spline uv_indices
+syn keyword povDescriptors target
+
+" 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 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 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 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 min_extent max_extent trace vcross vrotate vaxis_rotate vnormalize vturbulence
+syn keyword povFunctions chr concat 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
+
+" Comments
+syn region povComment start="/\*" end="\*/" contains=povTodo,povComment
+syn match povComment "//.*" contains=povTodo
+syn match povCommentError "\*/"
+syn sync ccomment povComment
+syn sync minlines=50
+syn keyword povTodo TODO FIXME XXX NOT contained
+syn cluster povPRIVATE add=povTodo
+
+" Language directives
+syn match povConditionalDir "#\s*\(else\|end\|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 povIncludeDir "#\s*include\>"
+syn match povFileDir "#\s*\(fclose\|fopen\|read\|write\)\>"
+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 region povString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=povSpecialChar oneline
+syn cluster povPRIVATE add=povSpecialChar
+
+" Catch errors caused by wrong parenthesization
+syn region povParen start='(' end=')' contains=ALLBUT,povParenError,@povPRIVATE transparent
+syn match povParenError ")"
+syn region povBrace start='{' end='}' contains=ALLBUT,povBraceError,@povPRIVATE transparent
+syn match povBraceError "}"
+
+" Numbers
+syn match povNumber "\(^\|\W\)\@<=[+-]\=\(\d\+\)\=\.\=\d\+\([eE][+-]\=\d\+\)\="
+
+" Define the default highlighting
+hi def link povComment Comment
+hi def link povTodo Todo
+hi def link povNumber Number
+hi def link povString String
+hi def link povFileOpen Constant
+hi def link povConsts Constant
+hi def link povDotItem Constant
+hi def link povBMPType povSpecial
+hi def link povCharset povSpecial
+hi def link povDensityType povSpecial
+hi def link povFontType povSpecial
+hi def link povOpenType povSpecial
+hi def link povSpecialChar povSpecial
+hi def link povSpecial Special
+hi def link povConditionalDir PreProc
+hi def link povLabelDir PreProc
+hi def link povDeclareDir Define
+hi def link povIncludeDir Include
+hi def link povFileDir PreProc
+hi def link povMessageDir Debug
+hi def link povAppearance povDescriptors
+hi def link povObjects povDescriptors
+hi def link povGlobalSettings povDescriptors
+hi def link povDescriptors Type
+hi def link povJuliaFunctions PovFunctions
+hi def link povModifiers povFunctions
+hi def link povFunctions Function
+hi def link povCommands Operator
+hi def link povTransform Operator
+hi def link povCSG Operator
+hi def link povParenError povError
+hi def link povBraceError povError
+hi def link povCommentError povError
+hi def link povError Error
+
+let b:current_syntax = "pov"
diff --git a/runtime/syntax/povini.vim b/runtime/syntax/povini.vim
new file mode 100644
index 000000000..02169ea23
--- /dev/null
+++ b/runtime/syntax/povini.vim
@@ -0,0 +1,62 @@
+" 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
+" Required Vim Version: 6.0
+
+" Setup
+if version >= 600
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ " Croak when an old Vim is sourcing us.
+ echo "Sorry, but this syntax file relies on Vim 6 features. Either upgrade Vim or usea version of " . expand("<sfile>:t:r") . " syntax file appropriate for Vim " . version/100 . "." . version %100 . "."
+ finish
+endif
+
+syn case ignore
+
+" Syntax
+syn match poviniInclude "^\s*[^[+-;]\S*\s*$" contains=poviniSection
+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 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 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 Pre_Scene_Return Pre_Frame_Return Post_Scene_Return Post_Frame_Return User_Abort_Return Fatal_Error_Return
+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
+syn match poviniShellOutSpecial "%[osnkhw%]" contained
+syn keyword poviniDeclare Declare
+syn match poviniComment ";.*$"
+syn match poviniOption "^\s*[+-]\S*"
+syn match poviniIncludeLabel "^\s*Include_INI\s*=" nextgroup=poviniIncludedFile skipwhite
+syn match poviniIncludedFile "[^;]\+" contains=poviniSection contained
+syn region poviniSection start="\[" end="\]"
+
+" Define the default highlighting
+hi def link poviniSection Special
+hi def link poviniComment Comment
+hi def link poviniDeclare poviniKeyword
+hi def link poviniShellOut poviniKeyword
+hi def link poviniIncludeLabel poviniKeyword
+hi def link poviniKeyword Type
+hi def link poviniShellOutSpecial Special
+hi def link poviniIncludedFile poviniInclude
+hi def link poviniInclude Include
+hi def link poviniOption Keyword
+hi def link poviniBool Constant
+hi def link poviniNumber Number
+
+let b:current_syntax = "povini"
diff --git a/runtime/syntax/ppd.vim b/runtime/syntax/ppd.vim
new file mode 100644
index 000000000..192f70c05
--- /dev/null
+++ b/runtime/syntax/ppd.vim
@@ -0,0 +1,48 @@
+" Vim syntax file
+" Language: PPD (PostScript printer description) file
+" Maintainer: Bjoern Jacke <bjacke@suse.de>
+" Last Change: 2001-10-06
+
+" 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 match ppdComment "^\*%.*"
+syn match ppdDef "\*[a-zA-Z0-9]\+"
+syn match ppdDefine "\*[a-zA-Z0-9\-_]\+:"
+syn match ppdUI "\*[a-zA-Z]*\(Open\|Close\)UI"
+syn match ppdUIGroup "\*[a-zA-Z]*\(Open\|Close\)Group"
+syn match ppdGUIText "/.*:"
+syn match ppdContraints "^*UIConstraints:"
+
+" 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_ahdl_syn_inits")
+ if version < 508
+ let did_ahdl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+
+ HiLink ppdComment Comment
+ HiLink ppdDefine Statement
+ HiLink ppdUI Function
+ HiLink ppdUIGroup Function
+ HiLink ppdDef String
+ HiLink ppdGUIText Type
+ HiLink ppdContraints Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ppd"
+
+" vim: ts=8
diff --git a/runtime/syntax/ppwiz.vim b/runtime/syntax/ppwiz.vim
new file mode 100644
index 000000000..d3d7b3a17
--- /dev/null
+++ b/runtime/syntax/ppwiz.vim
@@ -0,0 +1,97 @@
+" Vim syntax file
+" Language: PPWizard (preprocessor by Dennis Bareis)
+" Maintainer: Stefan Schwarzer <s.schwarzer@ndh.net>
+" URL: http://www.ndh.net/home/sschwarzer/download/ppwiz.vim
+" Last Change: 2003 May 11
+" Filename: ppwiz.vim
+
+" Remove old syntax stuff
+" 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
+
+if !exists("ppwiz_highlight_defs")
+ let ppwiz_highlight_defs = 1
+endif
+
+if !exists("ppwiz_with_html")
+ let ppwiz_with_html = 1
+endif
+
+" comments
+syn match ppwizComment "^;.*$"
+syn match ppwizComment ";;.*$"
+" HTML
+if ppwiz_with_html > 0
+ syn region ppwizHTML start="<" end=">" contains=ppwizArg,ppwizMacro
+ syn match ppwizHTML "\&\w\+;"
+endif
+" define, evaluate etc.
+if ppwiz_highlight_defs == 1
+ syn match ppwizDef "^\s*\#\S\+\s\+\S\+" contains=ALL
+ syn match ppwizDef "^\s*\#\(if\|else\|endif\)" contains=ALL
+ syn match ppwizDef "^\s*\#\({\|break\|continue\|}\)" contains=ALL
+" elseif ppwiz_highlight_defs == 2
+" syn region ppwizDef start="^\s*\#" end="[^\\]$" end="^$" keepend contains=ALL
+else
+ syn region ppwizDef start="^\s*\#" end="[^\\]$" end="^$" keepend contains=ppwizCont
+endif
+syn match ppwizError "\s.\\$"
+syn match ppwizCont "\s\([+\-%]\|\)\\$"
+" macros to execute
+syn region ppwizMacro start="<\$" end=">" contains=@ppwizArgVal,ppwizCont
+" macro arguments
+syn region ppwizArg start="{" end="}" contains=ppwizEqual,ppwizString
+syn match ppwizEqual "=" contained
+syn match ppwizOperator "<>\|=\|<\|>" contained
+" standard variables (builtin)
+syn region ppwizStdVar start="<?[^?]" end=">" contains=@ppwizArgVal
+" Rexx variables
+syn region ppwizRexxVar start="<??" end=">" contains=@ppwizArgVal
+" Constants
+syn region ppwizString start=+"+ end=+"+ contained contains=ppwizMacro,ppwizArg,ppwizHTML,ppwizCont,ppwizStdVar,ppwizRexxVar
+syn region ppwizString start=+'+ end=+'+ contained contains=ppwizMacro,ppwizArg,ppwizHTML,ppwizCont,ppwizStdVar,ppwizRexxVar
+syn match ppwizInteger "\d\+" contained
+
+" Clusters
+syn cluster ppwizArgVal add=ppwizString,ppwizInteger
+
+" 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_ppwiz_syn_inits")
+ if version < 508
+ let did_ppwiz_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ppwizSpecial Special
+ HiLink ppwizEqual ppwizSpecial
+ HiLink ppwizOperator ppwizSpecial
+ HiLink ppwizComment Comment
+ HiLink ppwizDef PreProc
+ HiLink ppwizMacro Statement
+ HiLink ppwizArg Identifier
+ HiLink ppwizStdVar Identifier
+ HiLink ppwizRexxVar Identifier
+ HiLink ppwizString Constant
+ HiLink ppwizInteger Constant
+ HiLink ppwizCont ppwizSpecial
+ HiLink ppwizError Error
+ HiLink ppwizHTML Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ppwiz"
+
+" vim: ts=4
+
diff --git a/runtime/syntax/procmail.vim b/runtime/syntax/procmail.vim
new file mode 100644
index 000000000..c2ffa3988
--- /dev/null
+++ b/runtime/syntax/procmail.vim
@@ -0,0 +1,67 @@
+" Vim syntax file
+" Language: Procmail definition file
+" Maintainer: Melchior FRANZ <mfranz@aon.at>
+" Last Change: 2003 Aug 14
+" Author: Sonia Heimann
+
+" 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 match procmailComment "#.*$" contains=procmailTodo
+syn keyword procmailTodo contained Todo TBD
+
+syn region procmailString start=+"+ skip=+\\"+ end=+"+
+syn region procmailString start=+'+ skip=+\\'+ end=+'+
+
+syn region procmailVarDeclRegion start="^\s*[a-zA-Z0-9_]\+\s*="hs=e-1 skip=+\\$+ end=+$+ contains=procmailVar,procmailVarDecl,procmailString
+syn match procmailVarDecl contained "^\s*[a-zA-Z0-9_]\+"
+syn match procmailVar "$[a-zA-Z0-9_]\+"
+
+syn match procmailCondition contained "^\s*\*.*"
+
+syn match procmailActionFolder contained "^\s*[-_a-zA-Z0-9/]\+"
+syn match procmailActionVariable contained "^\s*$[a-zA-Z_]\+"
+syn region procmailActionForward start=+^\s*!+ skip=+\\$+ end=+$+
+syn region procmailActionPipe start=+^\s*|+ skip=+\\$+ end=+$+
+syn region procmailActionNested start=+^\s*{+ end=+^\s*}+ contains=procmailRecipe,procmailComment,procmailVarDeclRegion
+
+syn region procmailRecipe start=+^\s*:.*$+ end=+^\s*\($\|}\)+me=e-1 contains=procmailComment,procmailCondition,procmailActionFolder,procmailActionVariable,procmailActionForward,procmailActionPipe,procmailActionNested,procmailVarDeclRegion
+
+" 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_procmail_syntax_inits")
+ if version < 508
+ let did_procmail_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink procmailComment Comment
+ HiLink procmailTodo Todo
+
+ HiLink procmailRecipe Statement
+ "HiLink procmailCondition Statement
+
+ HiLink procmailActionFolder procmailAction
+ HiLink procmailActionVariable procmailAction
+ HiLink procmailActionForward procmailAction
+ HiLink procmailActionPipe procmailAction
+ HiLink procmailAction Function
+ HiLink procmailVar Identifier
+ HiLink procmailVarDecl Identifier
+
+ HiLink procmailString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "procmail"
+
+" vim: ts=8
diff --git a/runtime/syntax/progress.vim b/runtime/syntax/progress.vim
new file mode 100644
index 000000000..dd29310ad
--- /dev/null
+++ b/runtime/syntax/progress.vim
@@ -0,0 +1,215 @@
+" Vim syntax file
+" Language: Progress 4GL
+" Filename extensions: *.p (collides with Pascal),
+" *.i (collides with assembler)
+" *.w (collides with cweb)
+" Maintainer: Philip Uren <philu@computer.org>
+" Contributors: Chris Ruprecht <chrup@mac.com>
+" Philip Uren <philu@computer.org>
+" Mikhail Kuperblum <mikhail@whasup.com>
+" URL: http://www.zeta.org.au/~philu/vim/progress.vim
+" Last Change: Thu May 3 08:49:47 EST 2001
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,-,!,#,$,%
+else
+ set iskeyword=@,48-57,_,-,!,#,$,%
+endif
+
+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\>" 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
+
+" 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 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] 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 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 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 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
+
+" 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 match ProgressIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>()"
+
+" syn match ProgressDelimiter "()"
+
+" 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]\+"
+
+" If you don't like tabs:
+"syn match ProgressShowTab "\t"
+"syn match ProgressShowTabc "\t"
+
+syn region ProgressComment start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
+syn match ProgressInclude "^[ ]*[{].*\.i[}]"
+
+syn match ProgressSubstitute "^[ ]*[{].*[^i][}]"
+syn match ProgressPreProc "^[ ]*&.*"
+
+syn match ProgressOperator "[!;|)(:.><+*=-]"
+
+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 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 ProgressType char[acter] int[eger] format
+syn keyword ProgressType var[iable] log[ical] da[te]
+
+syn sync lines=800
+
+" 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_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 StatusLine
+ HiLink ProgressConditional Conditional
+ HiLink ProgressDebug Debug
+ HiLink ProgressDo Repeat
+ HiLink ProgressEndError Error
+ HiLink ProgressFor Repeat
+ HiLink ProgressFunction Procedure
+ HiLink ProgressInclude Include
+ HiLink ProgressLabel Label
+ HiLink ProgressMatrixDelimiter Identifier
+ HiLink ProgressModifier Type
+ HiLink ProgressNumber Number
+ HiLink ProgressOperator Function
+ HiLink ProgressPreProc PreProc
+ HiLink ProgressProcedure Procedure
+ HiLink ProgressQuote Delimiter
+ HiLink ProgressRepeat Repeat
+ HiLink ProgressReserved Identifier
+ HiLink ProgressString String
+ HiLink ProgressStructure Structure
+ HiLink ProgressSubstitute PreProc
+ HiLink ProgressTodo Todo
+ HiLink ProgressType Statement
+ HiLink ProgressUnclassified Statement
+
+ " Optional highlighting
+ " HiLink ProgressDelimiter Identifier
+ " HiLink ProgressShowTab Error
+ " HiLink ProgressShowTabc Error
+ " HiLink ProgressIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "progress"
+
+" vim: ts=4 sw=2
diff --git a/runtime/syntax/prolog.vim b/runtime/syntax/prolog.vim
new file mode 100644
index 000000000..2ca1cfa44
--- /dev/null
+++ b/runtime/syntax/prolog.vim
@@ -0,0 +1,120 @@
+" Vim syntax file
+" Language: PROLOG
+" Maintainers: Ralph Becket <rwab1@cam.sri.co.uk>,
+" Thomas Koehler <jean-luc@picard.franken.de>
+" Last Change: 2003 May 11
+" URL: http://jeanluc-picard.de/vim/syntax/prolog.vim
+
+" There are two sets of highlighting in here:
+" If the "prolog_highlighting_clean" variable exists, it is rather sparse.
+" Otherwise you get more highlighting.
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Prolog is case sensitive.
+syn case match
+
+" 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 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=+:-\|\.$\|\.[ ]\|-->+
+
+if !exists("prolog_highlighting_clean")
+
+ " some keywords
+ " some common predicates are also highlighted as keywords
+ " is there a better solution?
+ syn keyword prologKeyword abolish current_output peek_code
+ syn keyword prologKeyword append current_predicate put_byte
+ 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 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 atomic halt set_stream_position
+ syn keyword prologKeyword bagof integer setof
+ syn keyword prologKeyword call is stream_property
+ syn keyword prologKeyword catch nl sub_atom
+ syn keyword prologKeyword char_code nonvar throw
+ 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 copy_term op write_canonical
+ syn keyword prologKeyword current_char_conversion open write_term
+ syn keyword prologKeyword current_input peek_byte writeq
+ syn keyword prologKeyword current_op peek_char
+
+ syn match prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|<\|>\|="
+ syn match prologAsIs "===\|\\===\|<=\|=>"
+
+ syn match prologNumber "\<[0123456789]*\>"
+ syn match prologCommentError "\*/"
+ syn match prologSpecialCharacter ";"
+ syn match prologSpecialCharacter "!"
+ syn match prologQuestion "?-.*\." contains=prologNumber
+
+
+endif
+
+syn sync ccomment maxlines=50
+
+
+" 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_prolog_syn_inits")
+ if version < 508
+ let did_prolog_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink prologComment Comment
+ HiLink prologCComment Comment
+ HiLink prologCharCode Special
+
+ if exists ("prolog_highlighting_clean")
+
+ HiLink prologKeyword Statement
+ HiLink prologClauseHead Statement
+
+ else
+
+ HiLink prologKeyword Keyword
+ HiLink prologClauseHead Constant
+ HiLink prologQuestion PreProc
+ HiLink prologSpecialCharacter Special
+ HiLink prologNumber Number
+ HiLink prologAsIs Normal
+ HiLink prologCommentError Error
+ HiLink prologAtom String
+ HiLink prologString String
+ HiLink prologOperator Operator
+
+ endif
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "prolog"
+
+" vim: ts=8
diff --git a/runtime/syntax/psf.vim b/runtime/syntax/psf.vim
new file mode 100644
index 000000000..2b376f94c
--- /dev/null
+++ b/runtime/syntax/psf.vim
@@ -0,0 +1,103 @@
+" Vim syntax file
+" Language: Software Distributor product specification file
+" (POSIX 1387.2-1995).
+" Maintainer: Rex Barzee <rex_barzee@hp.com>
+" Last change: 25 Apr 2001
+
+if version < 600
+ " Remove any old syntax stuff hanging around
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Product specification files are case sensitive
+syn case match
+
+syn keyword psfObject bundle category control_file depot distribution
+syn keyword psfObject end file fileset host installed_software media
+syn keyword psfObject product root subproduct vendor
+
+syn match psfUnquotString +[^"# ][^#]*+ contained
+syn region psfQuotString start=+"+ skip=+\\"+ end=+"+ contained
+
+syn match psfObjTag "\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*" contained
+syn match psfAttAbbrev ",\<\(fa\|fr\|[aclqrv]\)\(<\|>\|<=\|>=\|=\|==\)[^,]\+" contained
+syn match psfObjTags "\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*\(\s\+\<[-_+A-Z0-9a-z]\+\(\.[-_+A-Z0-9a-z]\+\)*\)*" contained
+
+syn match psfNumber "\<\d\+\>" contained
+syn match psfFloat "\<\d\+\>\(\.\<\d\+\>\)*" contained
+
+syn match psfLongDate "\<\d\d\d\d\d\d\d\d\d\d\d\d\.\d\d\>" contained
+
+syn keyword psfState available configured corrupt installed transient contained
+syn keyword psfPState applied committed superseded contained
+
+syn keyword psfBoolean false true contained
+
+
+"Some of the attributes covered by attUnquotString and attQuotString:
+" architecture category_tag control_directory copyright
+" create_date description directory file_permissions install_source
+" install_type location machine_type mod_date number os_name os_release
+" os_version pose_as_os_name pose_as_os_release readme revision
+" share_link title vendor_tag
+syn region psfAttUnquotString matchgroup=psfAttrib start=~^\s*[^# ]\+\s\+[^#" ]~rs=e-1 contains=psfUnquotString,psfComment end=~$~ keepend oneline
+
+syn region psfAttQuotString matchgroup=psfAttrib start=~^\s*[^# ]\+\s\+"~rs=e-1 contains=psfQuotString,psfComment skip=~\\"~ matchgroup=psfQuotString end=~"~ keepend
+
+
+" These regions are defined in attempt to do syntax checking for some
+" of the attributes.
+syn region psfAttTag matchgroup=psfAttrib start="^\s*tag\s\+" contains=psfObjTag,psfComment end="$" keepend oneline
+
+syn region psfAttSpec matchgroup=psfAttrib start="^\s*\(ancestor\|applied_patches\|applied_to\|contents\|corequisites\|exrequisites\|prerequisites\|software_spec\|supersedes\|superseded_by\)\s\+" contains=psfObjTag,psfAttAbbrev,psfComment end="$" keepend
+
+syn region psfAttTags matchgroup=psfAttrib start="^\s*all_filesets\s\+" contains=psfObjTags,psfComment end="$" keepend
+
+syn region psfAttNumber matchgroup=psfAttrib start="^\s*\(compressed_size\|instance_id\|media_sequence_number\|sequence_number\|size\)\s\+" contains=psfNumber,psfComment end="$" keepend oneline
+
+syn region psfAttTime matchgroup=psfAttrib start="^\s*\(create_time\|ctime\|mod_time\|mtime\|timestamp\)\s\+" contains=psfNumber,psfComment end="$" keepend oneline
+
+syn region psfAttFloat matchgroup=psfAttrib start="^\s*\(data_model_revision\|layout_version\)\s\+" contains=psfFloat,psfComment end="$" keepend oneline
+
+syn region psfAttLongDate matchgroup=psfAttrib start="^\s*install_date\s\+" contains=psfLongDate,psfComment end="$" keepend oneline
+
+syn region psfAttState matchgroup=psfAttrib start="^\s*\(state\)\s\+" contains=psfState,psfComment end="$" keepend oneline
+
+syn region psfAttPState matchgroup=psfAttrib start="^\s*\(patch_state\)\s\+" contains=psfPState,psfComment end="$" keepend oneline
+
+syn region psfAttBoolean matchgroup=psfAttrib start="^\s*\(is_kernel\|is_locatable\|is_patch\|is_protected\|is_reboot\|is_reference\|is_secure\|is_sparse\)\s\+" contains=psfBoolean,psfComment end="$" keepend oneline
+
+syn match psfComment "#.*$"
+
+
+" 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_psf_syntax_inits")
+ if version < 508
+ let did_psf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink psfObject Statement
+ HiLink psfAttrib Type
+ HiLink psfQuotString String
+ HiLink psfObjTag Identifier
+ HiLink psfAttAbbrev PreProc
+ HiLink psfObjTags Identifier
+
+ HiLink psfComment Comment
+
+ delcommand HiLink
+endif
+
+" Long descriptions and copyrights confuse the syntax highlighting, so
+" force vim to backup at least 100 lines before the top visible line
+" looking for a sync location.
+syn sync lines=100
+
+let b:current_syntax = "psf"
diff --git a/runtime/syntax/ptcap.vim b/runtime/syntax/ptcap.vim
new file mode 100644
index 000000000..45590cf61
--- /dev/null
+++ b/runtime/syntax/ptcap.vim
@@ -0,0 +1,107 @@
+" Vim syntax file
+" Language: printcap/termcap database
+" Maintainer: Haakon Riiser <hakonrk@fys.uio.no>
+" URL: http://folk.uio.no/hakonrk/vim/syntax/ptcap.vim
+" Last Change: 2001 May 15
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Since I only highlight based on the structure of the databases, not
+" specific keywords, case sensitivity isn't required
+syn case ignore
+
+" Since everything that is not caught by the syntax patterns is assumed
+" to be an error, we start parsing 20 lines up, unless something else
+" is specified
+if exists("ptcap_minlines")
+ exe "syn sync lines=".ptcap_minlines
+else
+ syn sync lines=20
+endif
+
+" Highlight everything that isn't caught by the rules as errors,
+" except blank lines
+syn match ptcapError "^.*\S.*$"
+
+syn match ptcapLeadBlank "^\s\+" contained
+
+" `:' and `|' are delimiters for fields and names, and should not be
+" highlighted. Hence, they are linked to `NONE'
+syn match ptcapDelimiter "[:|]" contained
+
+" Escaped characters receive special highlighting
+syn match ptcapEscapedChar "\\." contained
+syn match ptcapEscapedChar "\^." contained
+syn match ptcapEscapedChar "\\\o\{3}" contained
+
+" A backslash at the end of a line will suppress the newline
+syn match ptcapLineCont "\\$" contained
+
+" A number follows the same rules as an integer in C
+syn match ptcapNumber "#\(+\|-\)\=\d\+"lc=1 contained
+syn match ptcapNumberError "#\d*[^[:digit:]:\\]"lc=1 contained
+syn match ptcapNumber "#0x\x\{1,8}"lc=1 contained
+syn match ptcapNumberError "#0x\X"me=e-1,lc=1 contained
+syn match ptcapNumberError "#0x\x\{9}"lc=1 contained
+syn match ptcapNumberError "#0x\x*[^[:xdigit:]:\\]"lc=1 contained
+
+" The `@' operator clears a flag (i.e., sets it to zero)
+" The `#' operator assigns a following number to the flag
+" The `=' operator assigns a string to the preceding flag
+syn match ptcapOperator "[@#=]" contained
+
+" Some terminal capabilites have special names like `#5' and `@1', and we
+" need special rules to match these properly
+syn match ptcapSpecialCap "\W[#@]\d" contains=ptcapDelimiter contained
+
+" If editing a termcap file, an entry in the database is terminated by
+" a (non-escaped) newline. Otherwise, it is terminated by a line which
+" does not start with a colon (:)
+if exists("b:ptcap_type") && b:ptcap_type[0] == 't'
+ syn region ptcapEntry start="^\s*[^[:space:]:]" end="[^\\]\(\\\\\)*$" end="^$" contains=ptcapNames,ptcapField,ptcapLeadBlank keepend
+else
+ syn region ptcapEntry start="^\s*[^[:space:]:]"me=e-1 end="^\s*[^[:space:]:#]"me=e-1 contains=ptcapNames,ptcapField,ptcapLeadBlank,ptcapComment
+endif
+syn region ptcapNames start="^\s*[^[:space:]:]" skip="[^\\]\(\\\\\)*\\:" end=":"me=e-1 contains=ptcapDelimiter,ptcapEscapedChar,ptcapLineCont,ptcapLeadBlank,ptcapComment keepend contained
+syn region ptcapField start=":" skip="[^\\]\(\\\\\)*\\$" end="[^\\]\(\\\\\)*:"me=e-1 end="$" contains=ptcapDelimiter,ptcapString,ptcapNumber,ptcapNumberError,ptcapOperator,ptcapLineCont,ptcapSpecialCap,ptcapLeadBlank,ptcapComment keepend contained
+syn region ptcapString matchgroup=ptcapOperator start="=" skip="[^\\]\(\\\\\)*\\:" matchgroup=ptcapDelimiter end=":"me=e-1 matchgroup=NONE end="[^\\]\(\\\\\)*[^\\]$" end="^$" contains=ptcapEscapedChar,ptcapLineCont keepend contained
+syn region ptcapComment start="^\s*#" end="$" contains=ptcapLeadBlank
+
+if version >= 508 || !exists("did_ptcap_syntax_inits")
+ if version < 508
+ let did_ptcap_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ptcapComment Comment
+ HiLink ptcapDelimiter Delimiter
+ " The highlighting of "ptcapEntry" should always be overridden by
+ " its contents, so I use Todo highlighting to indicate that there
+ " is work to be done with the syntax file if you can see it :-)
+ HiLink ptcapEntry Todo
+ HiLink ptcapError Error
+ HiLink ptcapEscapedChar SpecialChar
+ HiLink ptcapField Type
+ HiLink ptcapLeadBlank NONE
+ HiLink ptcapLineCont Special
+ HiLink ptcapNames Label
+ HiLink ptcapNumber NONE
+ HiLink ptcapNumberError Error
+ HiLink ptcapOperator Operator
+ HiLink ptcapSpecialCap Type
+ HiLink ptcapString NONE
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ptcap"
+
+" vim: sts=4 sw=4 ts=8
diff --git a/runtime/syntax/purifylog.vim b/runtime/syntax/purifylog.vim
new file mode 100644
index 000000000..8bcfb4b00
--- /dev/null
+++ b/runtime/syntax/purifylog.vim
@@ -0,0 +1,119 @@
+" Vim syntax file
+" Language: purify log files
+" Maintainer: Gautam H. Mudunuri <gmudunur@informatica.com>
+" Last Change: 2003 May 11
+
+" 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
+
+" Purify header
+syn match purifyLogHeader "^\*\*\*\*.*$"
+
+" Informational messages
+syn match purifyLogFIU "^FIU:.*$"
+syn match purifyLogMAF "^MAF:.*$"
+syn match purifyLogMIU "^MIU:.*$"
+syn match purifyLogSIG "^SIG:.*$"
+syn match purifyLogWPF "^WPF:.*$"
+syn match purifyLogWPM "^WPM:.*$"
+syn match purifyLogWPN "^WPN:.*$"
+syn match purifyLogWPR "^WPR:.*$"
+syn match purifyLogWPW "^WPW:.*$"
+syn match purifyLogWPX "^WPX:.*$"
+
+" Warning messages
+syn match purifyLogABR "^ABR:.*$"
+syn match purifyLogBSR "^BSR:.*$"
+syn match purifyLogBSW "^BSW:.*$"
+syn match purifyLogFMR "^FMR:.*$"
+syn match purifyLogMLK "^MLK:.*$"
+syn match purifyLogMSE "^MSE:.*$"
+syn match purifyLogPAR "^PAR:.*$"
+syn match purifyLogPLK "^PLK:.*$"
+syn match purifyLogSBR "^SBR:.*$"
+syn match purifyLogSOF "^SOF:.*$"
+syn match purifyLogUMC "^UMC:.*$"
+syn match purifyLogUMR "^UMR:.*$"
+
+" Corrupting messages
+syn match purifyLogABW "^ABW:.*$"
+syn match purifyLogBRK "^BRK:.*$"
+syn match purifyLogFMW "^FMW:.*$"
+syn match purifyLogFNH "^FNH:.*$"
+syn match purifyLogFUM "^FUM:.*$"
+syn match purifyLogMRE "^MRE:.*$"
+syn match purifyLogSBW "^SBW:.*$"
+
+" Fatal messages
+syn match purifyLogCOR "^COR:.*$"
+syn match purifyLogNPR "^NPR:.*$"
+syn match purifyLogNPW "^NPW:.*$"
+syn match purifyLogZPR "^ZPR:.*$"
+syn match purifyLogZPW "^ZPW:.*$"
+
+" 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_purifyLog_syntax_inits")
+ if version < 508
+ let did_purifyLog_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink purifyLogFIU purifyLogInformational
+ HiLink purifyLogMAF purifyLogInformational
+ HiLink purifyLogMIU purifyLogInformational
+ HiLink purifyLogSIG purifyLogInformational
+ HiLink purifyLogWPF purifyLogInformational
+ HiLink purifyLogWPM purifyLogInformational
+ HiLink purifyLogWPN purifyLogInformational
+ HiLink purifyLogWPR purifyLogInformational
+ HiLink purifyLogWPW purifyLogInformational
+ HiLink purifyLogWPX purifyLogInformational
+
+ HiLink purifyLogABR purifyLogWarning
+ HiLink purifyLogBSR purifyLogWarning
+ HiLink purifyLogBSW purifyLogWarning
+ HiLink purifyLogFMR purifyLogWarning
+ HiLink purifyLogMLK purifyLogWarning
+ HiLink purifyLogMSE purifyLogWarning
+ HiLink purifyLogPAR purifyLogWarning
+ HiLink purifyLogPLK purifyLogWarning
+ HiLink purifyLogSBR purifyLogWarning
+ HiLink purifyLogSOF purifyLogWarning
+ HiLink purifyLogUMC purifyLogWarning
+ HiLink purifyLogUMR purifyLogWarning
+
+ HiLink purifyLogABW purifyLogCorrupting
+ HiLink purifyLogBRK purifyLogCorrupting
+ HiLink purifyLogFMW purifyLogCorrupting
+ HiLink purifyLogFNH purifyLogCorrupting
+ HiLink purifyLogFUM purifyLogCorrupting
+ HiLink purifyLogMRE purifyLogCorrupting
+ HiLink purifyLogSBW purifyLogCorrupting
+
+ HiLink purifyLogCOR purifyLogFatal
+ HiLink purifyLogNPR purifyLogFatal
+ HiLink purifyLogNPW purifyLogFatal
+ HiLink purifyLogZPR purifyLogFatal
+ HiLink purifyLogZPW purifyLogFatal
+
+ HiLink purifyLogHeader Comment
+ HiLink purifyLogInformational PreProc
+ HiLink purifyLogWarning Type
+ HiLink purifyLogCorrupting Error
+ HiLink purifyLogFatal Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "purifylog"
+
+" vim:ts=8
diff --git a/runtime/syntax/pyrex.vim b/runtime/syntax/pyrex.vim
new file mode 100644
index 000000000..f06b2d3d7
--- /dev/null
+++ b/runtime/syntax/pyrex.vim
@@ -0,0 +1,67 @@
+" Vim syntax file
+" Language: Pyrex
+" Maintainer: Marco Barisione <marco.bari@people.it>
+" URL: http://marcobari.altervista.org/pyrex_vim.html
+" Last Change: 2004 May 16
+
+" 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 Python syntax to start with
+if version < 600
+ so <sfile>:p:h/python.vim
+else
+ runtime! syntax/python.vim
+ unlet b:current_syntax
+endif
+
+" Pyrex extentions
+syn keyword pyrexStatement cdef typedef ctypedef sizeof
+syn keyword pyrexType int long short float double char object void
+syn keyword pyrexType signed unsigned
+syn keyword pyrexStructure struct union enum
+syn keyword pyrexPrecondit include cimport
+syn keyword pyrexAccess public private property readonly extern
+" If someome wants Python's built-ins highlighted probably he
+" also wants Pyrex's built-ins highlighted
+if exists("python_highlight_builtins") || exists("pyrex_highlight_builtins")
+ syn keyword pyrexBuiltin NULL
+endif
+
+" This deletes "from" from the keywords and re-adds it as a
+" match with lower priority than pyrexForFrom
+syn clear pythonPreCondit
+syn keyword pythonPreCondit import
+syn match pythonPreCondit "from"
+
+" With "for[^:]*\zsfrom" VIM does not match "for" anymore, so
+" I used the slower "\@<=" form
+syn match pyrexForFrom "\(for[^:]*\)\@<=from"
+
+" Default highlighting
+if version >= 508 || !exists("did_pyrex_syntax_inits")
+ if version < 508
+ let did_pyrex_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink pyrexStatement Statement
+ HiLink pyrexType Type
+ HiLink pyrexStructure Structure
+ HiLink pyrexPrecondit PreCondit
+ HiLink pyrexAccess pyrexStatement
+ if exists("python_highlight_builtins") || exists("pyrex_highlight_builtins")
+ HiLink pyrexBuiltin Function
+ endif
+ HiLink pyrexForFrom Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "pyrex"
diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim
new file mode 100644
index 000000000..a73dfa73e
--- /dev/null
+++ b/runtime/syntax/python.vim
@@ -0,0 +1,171 @@
+" Vim syntax file
+" Language: Python
+" Maintainer: Neil Schemenauer <nas@python.ca>
+" Updated: 2002-10-18
+"
+" Options to control Python syntax highlighting:
+"
+" For highlighted numbers:
+"
+" let python_highlight_numbers = 1
+"
+" For highlighted builtin functions:
+"
+" let python_highlight_builtins = 1
+"
+" For highlighted standard exceptions:
+"
+" let python_highlight_exceptions = 1
+"
+" Highlight erroneous whitespace:
+"
+" let python_highlight_space_errors = 1
+"
+" If you want all possible Python highlighting (the same as setting the
+" preceding options):
+"
+" let python_highlight_all = 1
+"
+
+" 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 keyword pythonStatement break continue del
+syn keyword pythonStatement except exec finally
+syn keyword pythonStatement pass print raise
+syn keyword pythonStatement return try
+syn keyword pythonStatement global assert
+syn keyword pythonStatement lambda yield
+syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite
+syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" contained
+syn keyword pythonRepeat for while
+syn keyword pythonConditional if elif else
+syn keyword pythonOperator and in is not or
+syn keyword pythonPreCondit import from
+syn match pythonComment "#.*$" contains=pythonTodo
+syn keyword pythonTodo TODO FIXME XXX contained
+
+" strings
+syn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape
+syn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape
+syn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape
+syn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape
+syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+
+syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+
+syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+
+syn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+
+syn match pythonEscape +\\[abfnrtv'"\\]+ contained
+syn match pythonEscape "\\\o\{1,3}" contained
+syn match pythonEscape "\\x\x\{2}" contained
+syn match pythonEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained
+syn match pythonEscape "\\$"
+
+if exists("python_highlight_all")
+ let python_highlight_numbers = 1
+ let python_highlight_builtins = 1
+ let python_highlight_exceptions = 1
+ let python_highlight_space_errors = 1
+endif
+
+if exists("python_highlight_numbers")
+ " numbers (including longs and complex)
+ syn match pythonNumber "\<0x\x\+[Ll]\=\>"
+ syn match pythonNumber "\<\d\+[LljJ]\=\>"
+ syn match pythonNumber "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
+ syn match pythonNumber "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"
+ syn match pythonNumber "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
+endif
+
+if exists("python_highlight_builtins")
+ " builtin functions, types and objects, not really part of the syntax
+ syn keyword pythonBuiltin Ellipsis None NotImplemented __import__ abs
+ syn keyword pythonBuiltin apply buffer callable chr classmethod cmp
+ syn keyword pythonBuiltin coerce compile complex delattr dict dir divmod
+ syn keyword pythonBuiltin eval execfile file filter float getattr globals
+ syn keyword pythonBuiltin hasattr hash hex id input int intern isinstance
+ syn keyword pythonBuiltin issubclass iter len list locals long map max
+ syn keyword pythonBuiltin min object oct open ord pow property range
+ syn keyword pythonBuiltin raw_input reduce reload repr round setattr
+ syn keyword pythonBuiltin slice staticmethod str super tuple type unichr
+ syn keyword pythonBuiltin unicode vars xrange zip
+endif
+
+if exists("python_highlight_exceptions")
+ " builtin exceptions and warnings
+ syn keyword pythonException ArithmeticError AssertionError AttributeError
+ syn keyword pythonException DeprecationWarning EOFError EnvironmentError
+ syn keyword pythonException Exception FloatingPointError IOError
+ syn keyword pythonException ImportError IndentationError IndexError
+ syn keyword pythonException KeyError KeyboardInterrupt LookupError
+ syn keyword pythonException MemoryError NameError NotImplementedError
+ syn keyword pythonException OSError OverflowError OverflowWarning
+ syn keyword pythonException ReferenceError RuntimeError RuntimeWarning
+ syn keyword pythonException StandardError StopIteration SyntaxError
+ syn keyword pythonException SyntaxWarning SystemError SystemExit TabError
+ syn keyword pythonException TypeError UnboundLocalError UnicodeError
+ syn keyword pythonException UserWarning ValueError Warning WindowsError
+ syn keyword pythonException ZeroDivisionError
+endif
+
+if exists("python_highlight_space_errors")
+ " trailing whitespace
+ syn match pythonSpaceError display excludenl "\S\s\+$"ms=s+1
+ " mixed tabs and spaces
+ syn match pythonSpaceError display " \+\t"
+ syn match pythonSpaceError display "\t\+ "
+endif
+
+" This is fast but code inside triple quoted strings screws it up. It
+" is impossible to fix because the only way to know if you are inside a
+" triple quoted string is to start from the beginning of the file. If
+" you have a fast machine you can try uncommenting the "sync minlines"
+" and commenting out the rest.
+syn sync match pythonSync grouphere NONE "):$"
+syn sync maxlines=200
+"syn sync minlines=2000
+
+if version >= 508 || !exists("did_python_syn_inits")
+ if version <= 508
+ let did_python_syn_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 pythonStatement Statement
+ HiLink pythonFunction Function
+ HiLink pythonConditional Conditional
+ HiLink pythonRepeat Repeat
+ HiLink pythonString String
+ HiLink pythonRawString String
+ HiLink pythonEscape Special
+ HiLink pythonOperator Operator
+ HiLink pythonPreCondit PreCondit
+ HiLink pythonComment Comment
+ HiLink pythonTodo Todo
+ if exists("python_highlight_numbers")
+ HiLink pythonNumber Number
+ endif
+ if exists("python_highlight_builtins")
+ HiLink pythonBuiltin Function
+ endif
+ if exists("python_highlight_exceptions")
+ HiLink pythonException Exception
+ endif
+ if exists("python_highlight_space_errors")
+ HiLink pythonSpaceError Error
+ endif
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "python"
+
+" vim: ts=8
diff --git a/runtime/syntax/qf.vim b/runtime/syntax/qf.vim
new file mode 100644
index 000000000..5c987a97b
--- /dev/null
+++ b/runtime/syntax/qf.vim
@@ -0,0 +1,24 @@
+" Vim syntax file
+" Language: Quickfix window
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2001 Jan 15
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" A bunch of useful C keywords
+syn match qfFileName "^[^|]*" nextgroup=qfSeparator
+syn match qfSeparator "|" nextgroup=qfLineNr contained
+syn match qfLineNr "[^|]*" contained contains=qfError
+syn match qfError "error" contained
+
+" The default highlighting.
+hi def link qfFileName Directory
+hi def link qfLineNr LineNr
+hi def link qfError Error
+
+let b:current_syntax = "qf"
+
+" vim: ts=8
diff --git a/runtime/syntax/quake.vim b/runtime/syntax/quake.vim
new file mode 100644
index 000000000..1ae8c71af
--- /dev/null
+++ b/runtime/syntax/quake.vim
@@ -0,0 +1,162 @@
+" Vim syntax file
+" Language: Quake[1-3] Configuration File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/quake/
+" Latest Revision: 2004-05-22
+" arch-tag: a95793d7-cab3-4544-a78c-1cea47b5870b
+" Variables: quake_is_quake1 - the syntax is to be used for quake1 configs
+" quake_is_quake2 - the syntax is to be used for quake2 configs
+" quake_is_quake3 - the syntax is to be used for quake3 configs
+
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk 48-57,65-90,97-122,+,-,_
+delcommand SetIsk
+
+
+" comments
+syn region quakeComment display oneline start="//" end="$" end=";" keepend contains=quakeTodo
+
+" todo
+syn keyword quakeTodo contained TODO FIXME XXX NOTE
+
+" string (can contain numbers (which should be hilighted as such)
+syn region quakeString display oneline start=+"+ skip=+\\"+ end=+"\|$+ contains=quakeNumbers,@quakeCommands
+
+" number
+syn case ignore
+syn match quakeNumbers display transparent "\<\d\|\.\d" contains=quakeNumber,quakeFloat,quakeOctalError,quakeOctal
+syn match quakeNumber display contained "\d\+\>"
+" Flag the first zero of an octal number as something special
+syn match quakeOctal display contained "0\o\+\>" contains=quakeOctalZero
+syn match quakeOctalZero display contained "\<0"
+" floating point number, with dot
+syn match quakeFloat display contained "\d\+\.\d*"
+" floating point number, starting with a dot
+syn match quakeFloat display contained "\.\d\+\>"
+" flag an octal number with wrong digits
+syn match quakeOctalError display contained "0\o*[89]\d*"
+syn case match
+
+" commands
+syn case ignore
+syn cluster quakeCommands contains=quakeCommand,quake1Command,quake12Command,Quake2Command,Quake23Command,Quake3Command
+
+syn keyword quakeCommand +attack +back +forward +left +lookdown +lookup
+syn keyword quakeCommand +mlook +movedown +moveleft +moveright +moveup
+syn keyword quakeCommand +right +speed +strafe -attack -back bind
+syn keyword quakeCommand bindlist centerview clear connect cvarlist dir
+syn keyword quakeCommand disconnect dumpuser echo error exec -forward
+syn keyword quakeCommand god heartbeat joy_advancedupdate kick kill
+syn keyword quakeCommand killserver -left -lookdown -lookup map
+syn keyword quakeCommand messagemode messagemode2 -mlook modellist
+syn keyword quakeCommand -movedown -moveleft -moveright -moveup play
+syn keyword quakeCommand quit rcon reconnect record -right say say_team
+syn keyword quakeCommand screenshot serverinfo serverrecord serverstop
+syn keyword quakeCommand set sizedown sizeup snd_restart soundinfo
+syn keyword quakeCommand soundlist -speed spmap status -strafe stopsound
+syn keyword quakeCommand toggleconsole unbind unbindall userinfo pause
+syn keyword quakeCommand vid_restart viewpos wait weapnext weapprev
+
+if exists("quake_is_quake1")
+syn keyword quake1Command sv
+endif
+
+if exists("quake_is_quake1") || exists("quake_is_quake2")
+syn keyword quake12Command +klook alias cd impulse link load save
+syn keyword quake12Command timerefresh changing info loading
+syn keyword quake12Command pingservers playerlist players score
+endif
+
+if exists("quake_is_quake2")
+syn keyword quake2Command cmd demomap +use condump download drop gamemap
+syn keyword quake2Command give gun_model setmaster sky sv_maplist wave
+syn keyword quake2Command cmdlist gameversiona gun_next gun_prev invdrop
+syn keyword quake2Command inven invnext invnextp invnextw invprev
+syn keyword quake2Command invprevp invprevw invuse menu_addressbook
+syn keyword quake2Command menu_credits menu_dmoptions menu_game
+syn keyword quake2Command menu_joinserver menu_keys menu_loadgame
+syn keyword quake2Command menu_main menu_multiplayer menu_options
+syn keyword quake2Command menu_playerconfig menu_quit menu_savegame
+syn keyword quake2Command menu_startserver menu_video
+syn keyword quake2Command notarget precache prog togglechat vid_front
+syn keyword quake2Command weaplast
+endif
+
+if exists("quake_is_quake2") || exists("quake_is_quake3")
+syn keyword quake23Command imagelist modellist path z_stats
+endif
+
+if exists("quake_is_quake3")
+syn keyword quake3Command +info +scores +zoom addbot arena banClient
+syn keyword quake3Command banUser callteamvote callvote changeVectors
+syn keyword quake3Command cinematic clientinfo clientkick cmd cmdlist
+syn keyword quake3Command condump configstrings crash cvar_restart devmap
+syn keyword quake3Command fdir follow freeze fs_openedList Fs_pureList
+syn keyword quake3Command Fs_referencedList gfxinfo globalservers
+syn keyword quake3Command hunk_stats in_restart -info levelshot
+syn keyword quake3Command loaddeferred localservers map_restart mem_info
+syn keyword quake3Command messagemode3 messagemode4 midiinfo model music
+syn keyword quake3Command modelist net_restart nextframe nextskin noclip
+syn keyword quake3Command notarget ping prevframe prevskin reset restart
+syn keyword quake3Command s_disable_a3d s_enable_a3d s_info s_list s_stop
+syn keyword quake3Command scanservers -scores screenshotJPEG sectorlist
+syn keyword quake3Command serverstatus seta setenv sets setu setviewpos
+syn keyword quake3Command shaderlist showip skinlist spdevmap startOribt
+syn keyword quake3Command stats stopdemo stoprecord systeminfo togglemenu
+syn keyword quake3Command tcmd team teamtask teamvote tell tell_attacker
+syn keyword quake3Command tell_target testgun testmodel testshader toggle
+syn keyword quake3Command touchFile vminfo vmprofile vmtest vosay
+syn keyword quake3Command vosay_team vote votell vsay vsay_team vstr
+syn keyword quake3Command vtaunt vtell vtell_attacker vtell_target weapon
+syn keyword quake3Command writeconfig -zoom
+syn match quake3Command display "\<[+-]button\(\d\|1[0-4]\)\>"
+endif
+
+syn case match
+
+" 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_screen_syn_inits")
+ if version < 508
+ let did_screen_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink quakeComment Comment
+ HiLink quakeTodo Todo
+ HiLink quakeString String
+ HiLink quakeNumber Number
+ HiLink quakeOctal Number
+ HiLink quakeOctalZero Number
+ HiLink quakeFloat Number
+ HiLink quakeOctalError Error
+ HiLink quakeCommand quakeCommands
+ HiLink quake1Command quakeCommands
+ HiLink quake12Command quakeCommands
+ HiLink quake2Command quakeCommands
+ HiLink quake23Command quakeCommands
+ HiLink quake3Command quakeCommands
+ HiLink quakeCommands Keyword
+
+ delcommand HiLink
+endif
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/r.vim b/runtime/syntax/r.vim
new file mode 100644
index 000000000..c2ecca4ef
--- /dev/null
+++ b/runtime/syntax/r.vim
@@ -0,0 +1,104 @@
+" Vim syntax file
+" Language: R (GNU S)
+" Maintainer: Tom Payne <tom@tompayne.org>
+" Last Change: 2003 May 11
+" Filenames: *.r
+" URL: http://www.tompayne.org/vim/syntax/r.vim
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,.
+else
+ set iskeyword=@,48-57,_,.
+endif
+
+syn case match
+
+" Comment
+syn match rComment /\#.*/
+
+" 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\+/
+
+" 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*/
+
+" 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
+syn keyword rConstant NULL
+syn keyword rBoolean FALSE TRUE
+syn keyword rNumber NA
+
+" Type
+syn keyword rType array category character complex double function integer list logical matrix numeric vector
+
+" Special
+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
+
+" 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 Identifier
+ HiLink rType Type
+ HiLink rDelimiter Delimiter
+ HiLink rError Error
+ HiLink rBraceError Error
+ HiLink rCurlyError Error
+ HiLink rParenError Error
+ delcommand HiLink
+endif
+
+let b:current_syntax="r"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/radiance.vim b/runtime/syntax/radiance.vim
new file mode 100644
index 000000000..461b708f0
--- /dev/null
+++ b/runtime/syntax/radiance.vim
@@ -0,0 +1,159 @@
+" Vim syntax file
+" Language: Radiance Scene Description
+" Maintainer: Georg Mischler <schorsch@schorsch.com>
+" Last change: 26. April. 2001
+
+" Radiance is a lighting simulation software package written
+" by Gregory Ward-Larson ("the computer artist formerly known
+" as Greg Ward"), then at LBNL.
+"
+" http://radsite.lbl.gov/radiance/HOME.html
+"
+" Of course, there is also information available about it
+" from http://www.schorsch.com/
+
+
+" We take a minimalist approach here, highlighting just the
+" essential properties of each object, its type and ID, as well as
+" comments, external command names and the null-modifier "void".
+
+
+" 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
+
+" all printing characters except '#' and '!' are valid in names.
+if version >= 600
+ setlocal iskeyword=\",$-~
+else
+ set iskeyword=\",$-~
+endif
+
+" The null-modifier
+syn keyword radianceKeyword void
+
+" The different kinds of scene description object types
+" Reference types
+syn keyword radianceExtraType contained alias instance
+" Surface types
+syn keyword radianceSurfType contained ring polygon sphere bubble
+syn keyword radianceSurfType contained cone cup cylinder tube source
+" Emitting material types
+syn keyword radianceLightType contained light glow illum spotlight
+" Material types
+syn keyword radianceMatType contained mirror mist prism1 prism2
+syn keyword radianceMatType contained metal plastic trans
+syn keyword radianceMatType contained metal2 plastic2 trans2
+syn keyword radianceMatType contained metfunc plasfunc transfunc
+syn keyword radianceMatType contained metdata plasdata transdata
+syn keyword radianceMatType contained dielectric interface glass
+syn keyword radianceMatType contained BRTDfunc antimatter
+" Pattern modifier types
+syn keyword radiancePatType contained colorfunc brightfunc
+syn keyword radiancePatType contained colordata colorpict brightdata
+syn keyword radiancePatType contained colortext brighttext
+" Texture modifier types
+syn keyword radianceTexType contained texfunc texdata
+" Mixture types
+syn keyword radianceMixType contained mixfunc mixdata mixpict mixtext
+
+
+" Each type name is followed by an ID.
+" This doesn't work correctly if the id is one of the type names of the
+" same class (which is legal for radiance), in which case the id will get
+" type color as well, and the int count (or alias reference) gets id color.
+
+syn region radianceID start="\<alias\>" end="\<\k*\>" contains=radianceExtraType
+syn region radianceID start="\<instance\>" end="\<\k*\>" contains=radianceExtraType
+
+syn region radianceID start="\<source\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<ring\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<polygon\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<sphere\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<bubble\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<cone\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<cup\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<cylinder\>" end="\<\k*\>" contains=radianceSurfType
+syn region radianceID start="\<tube\>" end="\<\k*\>" contains=radianceSurfType
+
+syn region radianceID start="\<light\>" end="\<\k*\>" contains=radianceLightType
+syn region radianceID start="\<glow\>" end="\<\k*\>" contains=radianceLightType
+syn region radianceID start="\<illum\>" end="\<\k*\>" contains=radianceLightType
+syn region radianceID start="\<spotlight\>" end="\<\k*\>" contains=radianceLightType
+
+syn region radianceID start="\<mirror\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<mist\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<prism1\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<prism2\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<metal\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<plastic\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<trans\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<metal2\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<plastic2\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<trans2\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<metfunc\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<plasfunc\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<transfunc\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<metdata\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<plasdata\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<transdata\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<dielectric\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<interface\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<glass\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<BRTDfunc\>" end="\<\k*\>" contains=radianceMatType
+syn region radianceID start="\<antimatter\>" end="\<\k*\>" contains=radianceMatType
+
+syn region radianceID start="\<colorfunc\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<brightfunc\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<colordata\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<brightdata\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<colorpict\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<colortext\>" end="\<\k*\>" contains=radiancePatType
+syn region radianceID start="\<brighttext\>" end="\<\k*\>" contains=radiancePatType
+
+syn region radianceID start="\<texfunc\>" end="\<\k*\>" contains=radianceTexType
+syn region radianceID start="\<texdata\>" end="\<\k*\>" contains=radianceTexType
+
+syn region radianceID start="\<mixfunc\>" end="\<\k*\>" contains=radianceMixType
+syn region radianceID start="\<mixdata\>" end="\<\k*\>" contains=radianceMixType
+syn region radianceID start="\<mixtext\>" end="\<\k*\>" contains=radianceMixType
+
+" external commands (generators, xform et al.)
+syn match radianceCommand "^\s*!\s*[^\s]\+\>"
+
+" The usual suspects
+syn keyword radianceTodo contained TODO XXX
+syn match radianceComment "#.*$" contains=radianceTodo
+
+" 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_radiance_syn_inits")
+ if version < 508
+ let did_radiance_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink radianceKeyword Keyword
+ HiLink radianceExtraType Type
+ HiLink radianceSurfType Type
+ HiLink radianceLightType Type
+ HiLink radianceMatType Type
+ HiLink radiancePatType Type
+ HiLink radianceTexType Type
+ HiLink radianceMixType Type
+ HiLink radianceComment Comment
+ HiLink radianceCommand Function
+ HiLink radianceID String
+ HiLink radianceTodo Todo
+ delcommand HiLink
+endif
+
+let b:current_syntax = "radiance"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/ratpoison.vim b/runtime/syntax/ratpoison.vim
new file mode 100644
index 000000000..39094fc10
--- /dev/null
+++ b/runtime/syntax/ratpoison.vim
@@ -0,0 +1,249 @@
+" Vim syntax file
+" Filename: ratpoison.vim
+" Language: Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/ratpoison.vim
+" Last Change: 2004 Apr 27
+
+" 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 match ratpoisonComment "^\s*#.*$" contains=ratpoisonTodo
+
+syn keyword ratpoisonTodo TODO NOTE FIXME XXX contained
+
+syn case ignore
+syn keyword ratpoisonBooleanArg on off contained
+syn case match
+
+syn keyword ratpoisonCommandArg abort addhook alias banish bind contained
+syn keyword ratpoisonCommandArg chdir clrunmanaged colon curframe defbarborder contained
+syn keyword ratpoisonCommandArg defbargravity defbarpadding defbgcolor defborder deffgcolor contained
+syn keyword ratpoisonCommandArg deffont defframesels definekey definputwidth defmaxsizegravity contained
+syn keyword ratpoisonCommandArg defpadding defresizeunit deftransgravity defwaitcursor defwinfmt contained
+syn keyword ratpoisonCommandArg defwingravity defwinliststyle defwinname delete delkmap contained
+syn keyword ratpoisonCommandArg echo escape exec fdump focus contained
+syn keyword ratpoisonCommandArg focusdown focuslast focusleft focusright focusup contained
+syn keyword ratpoisonCommandArg frestore fselect gdelete getenv gmerge contained
+syn keyword ratpoisonCommandArg gmove gnew gnewbg gnext gprev contained
+syn keyword ratpoisonCommandArg gravity groups gselect help hsplit contained
+syn keyword ratpoisonCommandArg info kill lastmsg license link contained
+syn keyword ratpoisonCommandArg listhook meta msgwait newkmap newwm contained
+syn keyword ratpoisonCommandArg next nextscreen number only other contained
+syn keyword ratpoisonCommandArg prev prevscreen quit readkey redisplay contained
+syn keyword ratpoisonCommandArg remhook remove resize restart rudeness contained
+syn keyword ratpoisonCommandArg select setenv shrink source split contained
+syn keyword ratpoisonCommandArg startup_message time title tmpwm unalias contained
+syn keyword ratpoisonCommandArg unbind unmanage unsetenv verbexec version contained
+syn keyword ratpoisonCommandArg vsplit warp windows syn case ignore contained
+
+syn match ratpoisonGravityArg "\<\(n\|north\)\>" contained
+syn match ratpoisonGravityArg "\<\(nw\|northwest\)\>" contained
+syn match ratpoisonGravityArg "\<\(ne\|northeast\)\>" contained
+syn match ratpoisonGravityArg "\<\(w\|west\)\>" contained
+syn match ratpoisonGravityArg "\<\(c\|center\)\>" contained
+syn match ratpoisonGravityArg "\<\(e\|east\)\>" contained
+syn match ratpoisonGravityArg "\<\(s\|south\)\>" contained
+syn match ratpoisonGravityArg "\<\(sw\|southwest\)\>" contained
+syn match ratpoisonGravityArg "\<\(se\|southeast\)\>" contained
+syn case match
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(F[1-9][0-9]\=\|\(\a\|\d\)\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(space\|exclam\|quotedbl\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(numbersign\|dollar\|percent\|ampersand\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(apostrophe\|quoteright\|parenleft\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(parenright\|asterisk\|plus\|comma\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(minus\|period\|slash\|colon\|semicolon\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(less\|equal\|greater\|question\|at\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(bracketleft\|backslash\|bracketright\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(asciicircum\|underscore\|grave\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(quoteleft\|braceleft\|bar\|braceright\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(asciitilde\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(BackSpace\|Tab\|Linefeed\|Clear\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Return\|Pause\|Scroll_Lock\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Sys_Req\|Escape\|Delete\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Home\|Left\|Up\|Right\|Down\|Prior\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Page_Up\|Next\|Page_Down\|End\|Begin\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Select\|Print\|Execute\|Insert\|Undo\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Redo\|Menu\|Find\|Cancel\|Help\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=\(Break\|Mode_switch\|script_switch\|Num_Lock\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Space\|Tab\|Enter\|F[1234]\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Home\|Left\|Up\|Right\|Down\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Prior\|Page_Up\|Next\|Page_Down\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(End\|Begin\|Insert\|Delete\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Equal\|Multiply\|Add\|Separator\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+syn match ratpoisonKeySeqArg "\<\([CMASH]\(-[CMASH]\)\{,4}-\)\=KP_\(Subtract\|Decimal\|Divide\|\d\)\>" contained nextgroup=ratpoisonCommandArg skipwhite
+
+syn match ratpoisonHookArg "\<\(key\|switchwin\|switchframe\|switchgroup\|quit\|restart\)\>" contained
+
+syn match ratpoisonNumberArg "\<\d\+\>" contained nextgroup=ratpoisonNumberArg skipwhite
+
+syn keyword ratpoisonSetArg barborder contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg bargravity contained nextgroup=ratpoisonGravityArg
+syn keyword ratpoisonSetArg barpadding contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg bgcolor
+syn keyword ratpoisonSetArg border contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg fgcolor
+syn keyword ratpoisonSetArg font
+syn keyword ratpoisonSetArg framesels
+syn keyword ratpoisonSetArg inputwidth contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg maxsizegravity contained nextgroup=ratpoisonGravityArg
+syn keyword ratpoisonSetArg padding contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg resizeunit contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg transgravity contained nextgroup=ratpoisonGravityArg
+syn keyword ratpoisonSetArg waitcursor contained nextgroup=ratpoisonNumberArg
+syn keyword ratpoisonSetArg winfmt contained nextgroup=ratpoisonWinFmtArg
+syn keyword ratpoisonSetArg wingravity contained nextgroup=ratpoisonGravityArg
+syn keyword ratpoisonSetArg winliststyle contained nextgroup=ratpoisonWinListArg
+syn keyword ratpoisonSetArg winname contained nextgroup=ratpoisonWinNameArg
+
+syn match ratpoisonWinFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite
+
+syn match ratpoisonWinListArg "\<\(row\|column\)\>" contained
+
+syn match ratpoisonWinNameArg "\<\(name\|title\|class\)\>" contained
+
+syn match ratpoisonDefCommand "^\s*set\s*" nextgroup=ratpoisonSetArg
+syn match ratpoisonDefCommand "^\s*defbarborder\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*defbargravity\s*" nextgroup=ratpoisonGravityArg
+syn match ratpoisonDefCommand "^\s*defbarpadding\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*defbgcolor\s*"
+syn match ratpoisonDefCommand "^\s*defborder\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*deffgcolor\s*"
+syn match ratpoisonDefCommand "^\s*deffont\s*"
+syn match ratpoisonDefCommand "^\s*defframesels\s*"
+syn match ratpoisonDefCommand "^\s*definputwidth\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*defmaxsizegravity\s*" nextgroup=ratpoisonGravityArg
+syn match ratpoisonDefCommand "^\s*defpadding\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*defresizeunit\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*deftransgravity\s*" nextgroup=ratpoisonGravityArg
+syn match ratpoisonDefCommand "^\s*defwaitcursor\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonDefCommand "^\s*defwinfmt\s*" nextgroup=ratpoisonWinFmtArg
+syn match ratpoisonDefCommand "^\s*defwingravity\s*" nextgroup=ratpoisonGravityArg
+syn match ratpoisonDefCommand "^\s*defwinliststyle\s*" nextgroup=ratpoisonWinListArg
+syn match ratpoisonDefCommand "^\s*defwinname\s*" nextgroup=ratpoisonWinNameArg
+syn match ratpoisonDefCommand "^\s*msgwait\s*" nextgroup=ratpoisonNumberArg
+
+syn match ratpoisonStringCommand "^\s*\zsaddhook\ze\s*" nextgroup=ratpoisonHookArg
+syn match ratpoisonStringCommand "^\s*\zsalias\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsbind\ze\s*" nextgroup=ratpoisonKeySeqArg
+syn match ratpoisonStringCommand "^\s*\zschdir\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zscolon\ze\s*" nextgroup=ratpoisonCommandArg
+syn match ratpoisonStringCommand "^\s*\zsdefinekey\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsdelkmap\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsecho\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsescape\ze\s*" nextgroup=ratpoisonKeySeqArg
+syn match ratpoisonStringCommand "^\s*\zsexec\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsfdump\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsfrestore\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsgdelete\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsgetenv\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsgravity\ze\s*" nextgroup=ratpoisonGravityArg
+syn match ratpoisonStringCommand "^\s*\zsgselect\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zslink\ze\s*" nextgroup=ratpoisonKeySeqArg
+syn match ratpoisonStringCommand "^\s*\zslisthook\ze\s*" nextgroup=ratpoisonHookArg
+syn match ratpoisonStringCommand "^\s*\zsnewkmap\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsnewwm\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsnumber\ze\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonStringCommand "^\s*\zsreadkey\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsremhook\ze\s*" nextgroup=ratpoisonHookArg
+syn match ratpoisonStringCommand "^\s*\zsresize\ze\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonStringCommand "^\s*\zsrudeness\ze\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonStringCommand "^\s*\zsselect\ze\s*" nextgroup=ratpoisonNumberArg
+syn match ratpoisonStringCommand "^\s*\zssetenv\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zssource\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsstartup_message\ze\s*" nextgroup=ratpoisonBooleanArg
+syn match ratpoisonStringCommand "^\s*\zstitle\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zstmpwm\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsunalias\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsunbind\ze\s*" nextgroup=ratpoisonKeySeqArg
+syn match ratpoisonStringCommand "^\s*\zsunmanage\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsunsetenv\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zsverbexec\ze\s*"
+syn match ratpoisonStringCommand "^\s*\zswarp\ze\s*" nextgroup=ratpoisonBooleanArg
+
+syn match ratpoisonVoidCommand "^\s*\zsabort\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsbanish\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsclrunmanaged\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zscurframe\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsdelete\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocusdown\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocuslast\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocusleft\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocusright\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocus\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfocusup\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsfselect\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgmerge\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgmove\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgnewbg\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgnew\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgnext\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgprev\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsgroups\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zshelp\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zshsplit\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsinfo\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zskill\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zslastmsg\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zslicense\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsmeta\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsnext\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsnextscreen\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsonly\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsother\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsprev\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsprevscreen\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsquit\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsredisplay\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsremove\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsrestart\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsshrink\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zssplit\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zstime\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsversion\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zsvsplit\ze\s*$"
+syn match ratpoisonVoidCommand "^\s*\zswindows\ze\s*$"
+
+" 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_ratpoison_syn_inits")
+ if version < 508
+ let did_ratpoison_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ratpoisonBooleanArg Boolean
+ HiLink ratpoisonCommandArg Keyword
+ HiLink ratpoisonComment Comment
+ HiLink ratpoisonDefCommand Identifier
+ HiLink ratpoisonGravityArg Constant
+ HiLink ratpoisonKeySeqArg Special
+ HiLink ratpoisonNumberArg Number
+ HiLink ratpoisonSetArg Keyword
+ HiLink ratpoisonStringCommand Identifier
+ HiLink ratpoisonTodo Todo
+ HiLink ratpoisonVoidCommand Identifier
+ HiLink ratpoisonWinFmtArg Special
+ HiLink ratpoisonWinNameArg Constant
+ HiLink ratpoisonWinListArg Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ratpoison"
+
+" vim: ts=8
diff --git a/runtime/syntax/rc.vim b/runtime/syntax/rc.vim
new file mode 100644
index 000000000..c3feb9781
--- /dev/null
+++ b/runtime/syntax/rc.vim
@@ -0,0 +1,200 @@
+" Vim syntax file
+" Language: M$ Resource files (*.rc)
+" Maintainer: Heiko Erhardt <Heiko.Erhardt@munich.netsurf.de>
+" Last Change: 2001 May 09
+
+" This file is based on the c.vim
+
+" 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
+
+" Common RC keywords
+syn keyword rcLanguage LANGUAGE
+
+syn keyword rcMainObject TEXTINCLUDE VERSIONINFO BITMAP ICON CURSOR CURSOR
+syn keyword rcMainObject MENU ACCELERATORS TOOLBAR DIALOG
+syn keyword rcMainObject STRINGTABLE MESSAGETABLE RCDATA DLGINIT DESIGNINFO
+
+syn keyword rcSubObject POPUP MENUITEM SEPARATOR
+syn keyword rcSubObject CONTROL LTEXT CTEXT EDITTEXT
+syn keyword rcSubObject BUTTON PUSHBUTTON DEFPUSHBUTTON GROUPBOX LISTBOX COMBOBOX
+syn keyword rcSubObject FILEVERSION PRODUCTVERSION FILEFLAGSMASK FILEFLAGS FILEOS
+syn keyword rcSubObject FILETYPE FILESUBTYPE
+
+syn keyword rcCaptionParam CAPTION
+syn keyword rcParam CHARACTERISTICS CLASS STYLE EXSTYLE VERSION FONT
+
+syn keyword rcStatement BEGIN END BLOCK VALUE
+
+syn keyword rcCommonAttribute PRELOAD LOADONCALL FIXED MOVEABLE DISCARDABLE PURE IMPURE
+
+syn keyword rcAttribute WS_OVERLAPPED WS_POPUP WS_CHILD WS_MINIMIZE WS_VISIBLE WS_DISABLED WS_CLIPSIBLINGS
+syn keyword rcAttribute WS_CLIPCHILDREN WS_MAXIMIZE WS_CAPTION WS_BORDER WS_DLGFRAME WS_VSCROLL WS_HSCROLL
+syn keyword rcAttribute WS_SYSMENU WS_THICKFRAME WS_GROUP WS_TABSTOP WS_MINIMIZEBOX WS_MAXIMIZEBOX WS_TILED
+syn keyword rcAttribute WS_ICONIC WS_SIZEBOX WS_TILEDWINDOW WS_OVERLAPPEDWINDOW WS_POPUPWINDOW WS_CHILDWINDOW
+syn keyword rcAttribute WS_EX_DLGMODALFRAME WS_EX_NOPARENTNOTIFY WS_EX_TOPMOST WS_EX_ACCEPTFILES
+syn keyword rcAttribute WS_EX_TRANSPARENT WS_EX_MDICHILD WS_EX_TOOLWINDOW WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE
+syn keyword rcAttribute WS_EX_CONTEXTHELP WS_EX_RIGHT WS_EX_LEFT WS_EX_RTLREADING WS_EX_LTRREADING
+syn keyword rcAttribute WS_EX_LEFTSCROLLBAR WS_EX_RIGHTSCROLLBAR WS_EX_CONTROLPARENT WS_EX_STATICEDGE
+syn keyword rcAttribute WS_EX_APPWINDOW WS_EX_OVERLAPPEDWINDOW WS_EX_PALETTEWINDOW
+syn keyword rcAttribute ES_LEFT ES_CENTER ES_RIGHT ES_MULTILINE ES_UPPERCASE ES_LOWERCASE ES_PASSWORD
+syn keyword rcAttribute ES_AUTOVSCROLL ES_AUTOHSCROLL ES_NOHIDESEL ES_OEMCONVERT ES_READONLY ES_WANTRETURN
+syn keyword rcAttribute ES_NUMBER
+syn keyword rcAttribute BS_PUSHBUTTON BS_DEFPUSHBUTTON BS_CHECKBOX BS_AUTOCHECKBOX BS_RADIOBUTTON BS_3STATE
+syn keyword rcAttribute BS_AUTO3STATE BS_GROUPBOX BS_USERBUTTON BS_AUTORADIOBUTTON BS_OWNERDRAW BS_LEFTTEXT
+syn keyword rcAttribute BS_TEXT BS_ICON BS_BITMAP BS_LEFT BS_RIGHT BS_CENTER BS_TOP BS_BOTTOM BS_VCENTER
+syn keyword rcAttribute BS_PUSHLIKE BS_MULTILINE BS_NOTIFY BS_FLAT BS_RIGHTBUTTON
+syn keyword rcAttribute SS_LEFT SS_CENTER SS_RIGHT SS_ICON SS_BLACKRECT SS_GRAYRECT SS_WHITERECT
+syn keyword rcAttribute SS_BLACKFRAME SS_GRAYFRAME SS_WHITEFRAME SS_USERITEM SS_SIMPLE SS_LEFTNOWORDWRAP
+syn keyword rcAttribute SS_OWNERDRAW SS_BITMAP SS_ENHMETAFILE SS_ETCHEDHORZ SS_ETCHEDVERT SS_ETCHEDFRAME
+syn keyword rcAttribute SS_TYPEMASK SS_NOPREFIX SS_NOTIFY SS_CENTERIMAGE SS_RIGHTJUST SS_REALSIZEIMAGE
+syn keyword rcAttribute SS_SUNKEN SS_ENDELLIPSIS SS_PATHELLIPSIS SS_WORDELLIPSIS SS_ELLIPSISMASK
+syn keyword rcAttribute DS_ABSALIGN DS_SYSMODAL DS_LOCALEDIT DS_SETFONT DS_MODALFRAME DS_NOIDLEMSG
+syn keyword rcAttribute DS_SETFOREGROUND DS_3DLOOK DS_FIXEDSYS DS_NOFAILCREATE DS_CONTROL DS_CENTER
+syn keyword rcAttribute DS_CENTERMOUSE DS_CONTEXTHELP
+syn keyword rcAttribute LBS_NOTIFY LBS_SORT LBS_NOREDRAW LBS_MULTIPLESEL LBS_OWNERDRAWFIXED
+syn keyword rcAttribute LBS_OWNERDRAWVARIABLE LBS_HASSTRINGS LBS_USETABSTOPS LBS_NOINTEGRALHEIGHT
+syn keyword rcAttribute LBS_MULTICOLUMN LBS_WANTKEYBOARDINPUT LBS_EXTENDEDSEL LBS_DISABLENOSCROLL
+syn keyword rcAttribute LBS_NODATA LBS_NOSEL LBS_STANDARD
+syn keyword rcAttribute CBS_SIMPLE CBS_DROPDOWN CBS_DROPDOWNLIST CBS_OWNERDRAWFIXED CBS_OWNERDRAWVARIABLE
+syn keyword rcAttribute CBS_AUTOHSCROLL CBS_OEMCONVERT CBS_SORT CBS_HASSTRINGS CBS_NOINTEGRALHEIGHT
+syn keyword rcAttribute CBS_DISABLENOSCROLL CBS_UPPERCASE CBS_LOWERCASE
+syn keyword rcAttribute SBS_HORZ SBS_VERT SBS_TOPALIGN SBS_LEFTALIGN SBS_BOTTOMALIGN SBS_RIGHTALIGN
+syn keyword rcAttribute SBS_SIZEBOXTOPLEFTALIGN SBS_SIZEBOXBOTTOMRIGHTALIGN SBS_SIZEBOX SBS_SIZEGRIP
+syn keyword rcAttribute CCS_TOP CCS_NOMOVEY CCS_BOTTOM CCS_NORESIZE CCS_NOPARENTALIGN CCS_ADJUSTABLE
+syn keyword rcAttribute CCS_NODIVIDER
+syn keyword rcAttribute LVS_ICON LVS_REPORT LVS_SMALLICON LVS_LIST LVS_TYPEMASK LVS_SINGLESEL LVS_SHOWSELALWAYS
+syn keyword rcAttribute LVS_SORTASCENDING LVS_SORTDESCENDING LVS_SHAREIMAGELISTS LVS_NOLABELWRAP
+syn keyword rcAttribute LVS_EDITLABELS LVS_OWNERDATA LVS_NOSCROLL LVS_TYPESTYLEMASK LVS_ALIGNTOP LVS_ALIGNLEFT
+syn keyword rcAttribute LVS_ALIGNMASK LVS_OWNERDRAWFIXED LVS_NOCOLUMNHEADER LVS_NOSORTHEADER LVS_AUTOARRANGE
+syn keyword rcAttribute TVS_HASBUTTONS TVS_HASLINES TVS_LINESATROOT TVS_EDITLABELS TVS_DISABLEDRAGDROP
+syn keyword rcAttribute TVS_SHOWSELALWAYS
+syn keyword rcAttribute TCS_FORCEICONLEFT TCS_FORCELABELLEFT TCS_TABS TCS_BUTTONS TCS_SINGLELINE TCS_MULTILINE
+syn keyword rcAttribute TCS_RIGHTJUSTIFY TCS_FIXEDWIDTH TCS_RAGGEDRIGHT TCS_FOCUSONBUTTONDOWN
+syn keyword rcAttribute TCS_OWNERDRAWFIXED TCS_TOOLTIPS TCS_FOCUSNEVER
+syn keyword rcAttribute ACS_CENTER ACS_TRANSPARENT ACS_AUTOPLAY
+syn keyword rcStdId IDI_APPLICATION IDI_HAND IDI_QUESTION IDI_EXCLAMATION IDI_ASTERISK IDI_WINLOGO IDI_WINLOGO
+syn keyword rcStdId IDI_WARNING IDI_ERROR IDI_INFORMATION
+syn keyword rcStdId IDCANCEL IDABORT IDRETRY IDIGNORE IDYES IDNO IDCLOSE IDHELP IDC_STATIC
+
+" Common RC keywords
+
+" Common RC keywords
+syn keyword rcTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match rcSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
+syn region rcString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rcSpecial
+syn match rcCharacter "'[^\\]'"
+syn match rcSpecialCharacter "'\\.'"
+syn match rcSpecialCharacter "'\\[0-7][0-7]'"
+syn match rcSpecialCharacter "'\\[0-7][0-7][0-7]'"
+
+"catch errors caused by wrong parenthesis
+syn region rcParen transparent start='(' end=')' contains=ALLBUT,rcParenError,rcIncluded,rcSpecial,rcTodo
+syn match rcParenError ")"
+syn match rcInParen contained "[{}]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match rcNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match rcFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match rcFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match rcFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match rcNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+"syn match rcIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+" flag an octal number with wrong digits
+syn match rcOctalError "\<0[0-7]*[89]"
+
+if exists("rc_comment_strings")
+ " A comment can contain rcString, rcCharacter and rcNumber.
+ " But a "*/" inside a rcString in a rcComment DOES end the comment! So we
+ " need to use a special type of rcString: rcCommentString, 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 rcCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region rcCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=rcSpecial,rcCommentSkip
+ syntax region rcComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=rcSpecial
+ syntax region rcComment start="/\*" end="\*/" contains=rcTodo,rcCommentString,rcCharacter,rcNumber,rcFloat
+ syntax match rcComment "//.*" contains=rcTodo,rcComment2String,rcCharacter,rcNumber
+else
+ syn region rcComment start="/\*" end="\*/" contains=rcTodo
+ syn match rcComment "//.*" contains=rcTodo
+endif
+syntax match rcCommentError "\*/"
+
+syn region rcPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=rcComment,rcString,rcCharacter,rcNumber,rcCommentError
+syn region rcIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match rcIncluded contained "<[^>]*>"
+syn match rcInclude "^\s*#\s*include\>\s*["<]" contains=rcIncluded
+"syn match rcLineSkip "\\$"
+syn region rcDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
+syn region rcPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,rcPreCondit,rcIncluded,rcInclude,rcDefine,rcInParen
+
+syn sync ccomment rcComment minlines=10
+
+" 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_rc_syntax_inits")
+ if version < 508
+ let did_rc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rcCharacter Character
+ HiLink rcSpecialCharacter rcSpecial
+ HiLink rcNumber Number
+ HiLink rcFloat Float
+ HiLink rcOctalError rcError
+ HiLink rcParenError rcError
+ HiLink rcInParen rcError
+ HiLink rcCommentError rcError
+ HiLink rcInclude Include
+ HiLink rcPreProc PreProc
+ HiLink rcDefine Macro
+ HiLink rcIncluded rcString
+ HiLink rcError Error
+ HiLink rcPreCondit PreCondit
+ HiLink rcCommentString rcString
+ HiLink rcComment2String rcString
+ HiLink rcCommentSkip rcComment
+ HiLink rcString String
+ HiLink rcComment Comment
+ HiLink rcSpecial SpecialChar
+ HiLink rcTodo Todo
+
+ HiLink rcAttribute rcCommonAttribute
+ HiLink rcStdId rcStatement
+ HiLink rcStatement Statement
+
+ " Default color overrides
+ hi def rcLanguage term=reverse ctermbg=Red ctermfg=Yellow guibg=Red guifg=Yellow
+ hi def rcMainObject term=underline ctermfg=Blue guifg=Blue
+ hi def rcSubObject ctermfg=Green guifg=Green
+ hi def rcCaptionParam term=underline ctermfg=DarkGreen guifg=Green
+ hi def rcParam ctermfg=DarkGreen guifg=DarkGreen
+ hi def rcStatement ctermfg=DarkGreen guifg=DarkGreen
+ hi def rcCommonAttribute ctermfg=Brown guifg=Brown
+
+ "HiLink rcIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rc"
+
+" vim: ts=8
diff --git a/runtime/syntax/rcs.vim b/runtime/syntax/rcs.vim
new file mode 100644
index 000000000..f4a90c62c
--- /dev/null
+++ b/runtime/syntax/rcs.vim
@@ -0,0 +1,76 @@
+" Vim syntax file
+" Language: RCS file
+" Maintainer: Dmitry Vasiliev <dima@hlabs.spb.ru>
+" URL: http://www.hlabs.spb.ru/vim/rcs.vim
+" Last Change: $Date$
+" Filenames: *,v
+" $Revision$
+"
+" Options:
+" rcs_folding = 1 For folding strings
+
+" 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
+
+" RCS file must end with a newline.
+syn match rcsEOFError ".\%$" containedin=ALL
+
+" Keywords.
+syn keyword rcsKeyword head branch access symbols locks strict
+syn keyword rcsKeyword comment expand date author state branches
+syn keyword rcsKeyword next desc log
+syn keyword rcsKeyword text nextgroup=rcsTextStr skipwhite skipempty
+
+" Revision numbers and dates.
+syn match rcsNumber "\<[0-9.]\+\>" display
+
+" Strings.
+if exists("rcs_folding") && has("folding")
+ " Folded strings.
+ syn region rcsString matchgroup=rcsString start="@" end="@" skip="@@" fold contains=rcsSpecial
+ syn region rcsTextStr matchgroup=rcsTextStr start="@" end="@" skip="@@" fold contained contains=rcsSpecial,rcsDiffLines
+else
+ syn region rcsString matchgroup=rcsString start="@" end="@" skip="@@" contains=rcsSpecial
+ syn region rcsTextStr matchgroup=rcsTextStr start="@" end="@" skip="@@" contained contains=rcsSpecial,rcsDiffLines
+endif
+syn match rcsSpecial "@@" contained
+syn match rcsDiffLines "[da]\d\+ \d\+$" contained
+
+" Synchronization.
+syn sync clear
+if exists("rcs_folding") && has("folding")
+ syn sync fromstart
+else
+ " We have incorrect folding if following sync patterns is turned on.
+ syn sync match rcsSync grouphere rcsString "[0-9.]\+\(\s\|\n\)\+log\(\s\|\n\)\+@"me=e-1
+ syn sync match rcsSync grouphere rcsTextStr "@\(\s\|\n\)\+text\(\s\|\n\)\+@"me=e-1
+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_rcs_syn_inits")
+ if version <= 508
+ let did_rcs_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rcsKeyword Keyword
+ HiLink rcsNumber Identifier
+ HiLink rcsString String
+ HiLink rcsTextStr String
+ HiLink rcsSpecial Special
+ HiLink rcsDiffLines Special
+ HiLink rcsEOFError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rcs"
diff --git a/runtime/syntax/rcslog.vim b/runtime/syntax/rcslog.vim
new file mode 100644
index 000000000..acacfa124
--- /dev/null
+++ b/runtime/syntax/rcslog.vim
@@ -0,0 +1,38 @@
+" Vim syntax file
+" Language: RCS log output
+" Maintainer: Joe Karthauser <joe@freebsd.org>
+" Last Change: 2001 May 09
+
+" 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 match rcslogRevision "^revision.*$"
+syn match rcslogFile "^RCS file:.*"
+syn match rcslogDate "^date: .*$"
+
+" 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_rcslog_syntax_inits")
+ if version < 508
+ let did_rcslog_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rcslogFile Type
+ HiLink rcslogRevision Constant
+ HiLink rcslogDate Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rcslog"
+
+" vim: ts=8
diff --git a/runtime/syntax/readline.vim b/runtime/syntax/readline.vim
new file mode 100644
index 000000000..8f72048ab
--- /dev/null
+++ b/runtime/syntax/readline.vim
@@ -0,0 +1,152 @@
+" Vim syntax file
+" Language: readline configuration file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/readline/
+" Latest Revision: 2004-05-22
+" arch-tag: 6d8e7da4-b39c-4bf7-8e6a-d9135f993457
+" Variables:
+" readline_has_bash - if defined add support for bash specific
+" settings/functions
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk 48-57,65-90,97-122,-
+delcommand SetIsk
+
+" comments
+syn region readlineComment display oneline matchgroup=readlineComment start="^\s*#" end="$" contains=readlineTodo
+
+" todo
+syn keyword readlineTodo contained TODO FIXME XXX NOTE
+
+" strings (argh...not the way i want it, but fine..."
+syn match readlineString "^\s*[A-Za-z-]\+:"me=e-1 contains=readlineKeys
+syn region readlineString display oneline start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=readlineKeysTwo
+
+" special key
+syn case ignore
+syn keyword readlineKeys contained Control Meta Del Esc Escape LFD Newline Ret Return Rubout Space Spc Tab
+syn case match
+
+syn match readlineKeysTwo contained +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{3}\)+
+
+" keymaps
+syn match readlineKeymaps contained "emacs\(-standard\|-meta\|-ctlx\)\="
+syn match readlineKeymaps contained "vi\(-move\|-command\|-insert\)\="
+
+" bell styles
+syn keyword readlineBellStyles contained audible visible none
+
+" numbers
+syn match readlineNumber contained "\<\d\+\>"
+
+" booleans
+syn case ignore
+syn keyword readlineBoolean contained on off
+syn case match
+
+" conditionals
+syn keyword readlineIfOps contained mode term
+
+syn region readlineConditional display oneline transparent matchgroup=readlineConditional start="^\s*$if" end="$" contains=readlineIfOps,readlineKeymaps
+syn match readlineConditional "^\s*$\(else\|endif\)\>"
+
+" include
+syn match readlineInclude "^\s*$include\>"
+
+" settings
+
+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
+syn keyword readlineSettings contained completion-query-items convert-meta disable-completion editing-mode enable-keypad
+syn keyword readlineSettings contained expand-tilde horizontal-scroll-mode mark-directories keymap mark-modified-lines meta-flag
+syn keyword readlineSettings contained input-meta output-meta print-completions-horizontally show-all-if-ambiguous visible-stats
+syn keyword readlineSettings contained prefer-visible-bell blink-matching-paren
+syn keyword readlineSettings contained match-hidden-files history-preserve-point isearch-terminators
+
+" bash extensions
+if exists("readline_has_bash")
+ "syn keyword readlineSettings contained
+endif
+
+" key bindings
+syn region readlineBinding display oneline transparent matchgroup=readlineKeyword start=":" end="$" contains=readlineKeys,readlineFunctions
+
+syn match readlineFunctions contained "\<\(beginning\|end\)-of-line\>"
+syn match readlineFunctions contained "\<\(backward\|forward\)-\(char\|word\)\>"
+syn match readlineFunctions contained "\<\(previous\|next\|\(beginning\|end\)-of\|\(non-incremental-\)\=\(reverse\|forward\)-search\)-history\>"
+syn match readlineFunctions contained "\<history-search-\(forward\|backward\)\>"
+syn match readlineFunctions contained "\<yank-\(nth\|last\)-arg\>"
+syn match readlineFunctions contained "\<\(backward-\)\=kill-\(\(whole-\)\=line\|word\)\>"
+syn match readlineFunctions contained "\<\(start\|end\|call-last\)-kbd-macro\>"
+syn match readlineFunctions contained "\<dump-\(functions\|variables\|macros\)\>"
+syn match readlineFunctions contained "\<non-incremental-\(reverse\|forward\)-search-history-again\>"
+syn keyword readlineFunctions contained clear-screen redraw-current-line accept-line delete-char backward-delete-char quoted-insert tab-insert
+syn keyword readlineFunctions contained self-insert transpose-chars transpose-words downcase-word capitalize-word unix-word-rubout
+syn keyword readlineFunctions contained delete-horizontal-space kill-region copy-region-as-kill copy-backward-word copy-forward-word yank yank-pop
+syn keyword readlineFunctions contained digit-argument universal-argument complete possible-completions insert-completions menu-complete
+syn keyword readlineFunctions contained re-read-init-file abort do-uppercase-version prefix-meta undo revert-line tilde-expand set-mark
+syn keyword readlineFunctions contained exchange-point-and-mark character-search character-search-backward insert-comment emacs-editing-mode vi-editing-mode
+syn keyword readlineFunctions contained unix-line-discard upcase-word backward-delete-word vi-eof-maybe vi-movement-mode vi-match vi-tilde-expand
+syn keyword readlineFunctions contained vi-complete vi-char-search vi-redo vi-search vi-arg-digit vi-append-eol vi-prev-word vi-change-to vi-delete-to
+syn keyword readlineFunctions contained vi-end-word vi-fetch-history vi-insert-beg vi-search-again vi-put vi-replace vi-subst vi-yank-to vi-first-print
+syn keyword readlineFunctions contained 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
+syn keyword readlineFunctions contained vi-subst vi-delete vi-yank-to vi-column vi-change-case vi-overstrike vi-overstrike-delete
+syn keyword readlineFunctions contained do-lowercase-version delete-char-or-list tty-status arrow-key-prefix
+syn keyword readlineFunctions contained vi-back-to-indent vi-bword vi-bWord vi-eword vi-eWord vi-fword vi-fWord vi-next-word
+
+" bash extensions
+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
+ syn keyword readlineFunctions contained operate-and-get-next forward-backward-delete-char delete-char-or-list complete-filename possible-filename-completions
+ syn keyword readlineFunctions contained complete-username possible-username-completions complete-variable possible-variable-completions complete-hostname
+ syn keyword readlineFunctions contained possible-hostname-completions complete-command possible-command-completions dynamic-complete-history complete-into-braces
+ syn keyword readlineFunctions contained glob-expand-word glob-list-expansions display-shell-version
+ syn keyword readlineFunctions contained glob-complete-word edit-and-execute-command
+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_readline_syn_inits")
+ if version < 508
+ let did_readline_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink readlineComment Comment
+ HiLink readlineTodo Todo
+ HiLink readlineString String
+ HiLink readlineKeys SpecialChar
+ HiLink readlineKeysTwo SpecialChar
+ HiLink readlineKeymaps Constant
+ HiLink readlineBellStyles Constant
+ HiLink readlineNumber Number
+ HiLink readlineBoolean Boolean
+ HiLink readlineIfOps Type
+ HiLink readlineConditional Conditional
+ HiLink readlineInclude Include
+ HiLink readlineKeyword Keyword
+ HiLink readlineSettings Type
+ HiLink readlineFunctions Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "readline"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/rebol.vim b/runtime/syntax/rebol.vim
new file mode 100644
index 000000000..e6395758f
--- /dev/null
+++ b/runtime/syntax/rebol.vim
@@ -0,0 +1,216 @@
+" Vim syntax file
+" Language: Rebol
+" Maintainer: Mike Williams <mrw@eandem.co.uk>
+" Filenames: *.r
+" Last Change: 27th June 2002
+" URL: http://www.eandem.co.uk/mrw/vim
+"
+
+" 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
+
+" Rebol is case insensitive
+syn case ignore
+
+" As per current users documentation
+if version < 600
+ set isk=@,48-57,?,!,.,',+,-,*,&,\|,=,_,~
+else
+ setlocal isk=@,48-57,?,!,.,',+,-,*,&,\|,=,_,~
+endif
+
+" Yer TODO highlighter
+syn keyword rebolTodo contained TODO
+
+" Comments
+syn match rebolComment ";.*$" contains=rebolTodo
+
+" Words
+syn match rebolWord "\a\k*"
+syn match rebolWordPath "[^[:space:]]/[^[:space]]"ms=s+1,me=e-1
+
+" Booleans
+syn keyword rebolBoolean true false on off yes no
+
+" Values
+" Integers
+syn match rebolInteger "\<[+-]\=\d\+\('\d*\)*\>"
+" Decimals
+syn match rebolDecimal "[+-]\=\(\d\+\('\d*\)*\)\=[,.]\d*\(e[+-]\=\d\+\)\="
+syn match rebolDecimal "[+-]\=\d\+\('\d*\)*\(e[+-]\=\d\+\)\="
+" Time
+syn match rebolTime "[+-]\=\(\d\+\('\d*\)*\:\)\{1,2}\d\+\('\d*\)*\([.,]\d\+\)\=\([AP]M\)\=\>"
+syn match rebolTime "[+-]\=:\d\+\([.,]\d*\)\=\([AP]M\)\=\>"
+" Dates
+" DD-MMM-YY & YYYY format
+syn match rebolDate "\d\{1,2}\([/-]\)\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)\1\(\d\{2}\)\{1,2}\>"
+" DD-month-YY & YYYY format
+syn match rebolDate "\d\{1,2}\([/-]\)\(January\|February\|March\|April\|May\|June\|July\|August\|September\|October\|November\|December\)\1\(\d\{2}\)\{1,2}\>"
+" DD-MM-YY & YY format
+syn match rebolDate "\d\{1,2}\([/-]\)\d\{1,2}\1\(\d\{2}\)\{1,2}\>"
+" YYYY-MM-YY format
+syn match rebolDate "\d\{4}-\d\{1,2}-\d\{1,2}\>"
+" DD.MM.YYYY format
+syn match rebolDate "\d\{1,2}\.\d\{1,2}\.\d\{4}\>"
+" Money
+syn match rebolMoney "\a*\$\d\+\('\d*\)*\([,.]\d\+\)\="
+" Strings
+syn region rebolString oneline start=+"+ skip=+^"+ end=+"+ contains=rebolSpecialCharacter
+syn region rebolString start=+[^#]{+ end=+}+ skip=+{[^}]*}+ contains=rebolSpecialCharacter
+" Binary
+syn region rebolBinary start=+\d*#{+ end=+}+ contains=rebolComment
+" Email
+syn match rebolEmail "\<\k\+@\(\k\+\.\)*\k\+\>"
+" File
+syn match rebolFile "%\(\k\+/\)*\k\+[/]\=" contains=rebolSpecialCharacter
+syn region rebolFile oneline start=+%"+ end=+"+ contains=rebolSpecialCharacter
+" URLs
+syn match rebolURL "http://\k\+\(\.\k\+\)*\(:\d\+\)\=\(/\(\k\+/\)*\(\k\+\)\=\)*"
+syn match rebolURL "file://\k\+\(\.\k\+\)*/\(\k\+/\)*\k\+"
+syn match rebolURL "ftp://\(\k\+:\k\+@\)\=\k\+\(\.\k\+\)*\(:\d\+\)\=/\(\k\+/\)*\k\+"
+syn match rebolURL "mailto:\k\+\(\.\k\+\)*@\k\+\(\.\k\+\)*"
+" Issues
+syn match rebolIssue "#\(\d\+-\)*\d\+"
+" Tuples
+syn match rebolTuple "\(\d\+\.\)\{2,}"
+
+" Characters
+syn match rebolSpecialCharacter contained "\^[^[:space:][]"
+syn match rebolSpecialCharacter contained "%\d\+"
+
+
+" Operators
+" Math operators
+syn match rebolMathOperator "\(\*\{1,2}\|+\|-\|/\{1,2}\)"
+syn keyword rebolMathFunction abs absolute add arccosine arcsine arctangent cosine
+syn keyword rebolMathFunction divide exp log-10 log-2 log-e max maximum min
+syn keyword rebolMathFunction minimum multiply negate power random remainder sine
+syn keyword rebolMathFunction square-root subtract tangent
+" Binary operators
+syn keyword rebolBinaryOperator complement and or xor ~
+" Logic operators
+syn match rebolLogicOperator "[<>=]=\="
+syn match rebolLogicOperator "<>"
+syn keyword rebolLogicOperator not
+syn keyword rebolLogicFunction all any
+syn keyword rebolLogicFunction head? tail?
+syn keyword rebolLogicFunction negative? positive? zero? even? odd?
+syn keyword rebolLogicFunction binary? block? char? date? decimal? email? empty?
+syn keyword rebolLogicFunction file? found? function? integer? issue? logic? money?
+syn keyword rebolLogicFunction native? none? object? paren? path? port? series?
+syn keyword rebolLogicFunction string? time? tuple? url? word?
+syn keyword rebolLogicFunction exists? input? same? value?
+
+" Datatypes
+syn keyword rebolType binary! block! char! date! decimal! email! file!
+syn keyword rebolType function! integer! issue! logic! money! native!
+syn keyword rebolType none! object! paren! path! port! string! time!
+syn keyword rebolType tuple! url! word!
+syn keyword rebolTypeFunction type?
+
+" Control statements
+syn keyword rebolStatement break catch exit halt reduce return shield
+syn keyword rebolConditional if else
+syn keyword rebolRepeat for forall foreach forskip loop repeat while until do
+
+" Series statements
+syn keyword rebolStatement change clear copy fifth find first format fourth free
+syn keyword rebolStatement func function head insert last match next parse past
+syn keyword rebolStatement pick remove second select skip sort tail third trim length?
+
+" Context
+syn keyword rebolStatement alias bind use
+
+" Object
+syn keyword rebolStatement import make make-object rebol info?
+
+" I/O statements
+syn keyword rebolStatement delete echo form format import input load mold prin
+syn keyword rebolStatement print probe read save secure send write
+syn keyword rebolOperator size? modified?
+
+" Debug statement
+syn keyword rebolStatement help probe trace
+
+" Misc statements
+syn keyword rebolStatement func function free
+
+" Constants
+syn keyword rebolConstant none
+
+
+" 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_rebol_syntax_inits")
+ if version < 508
+ let did_rebol_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rebolTodo Todo
+
+ HiLink rebolStatement Statement
+ HiLink rebolLabel Label
+ HiLink rebolConditional Conditional
+ HiLink rebolRepeat Repeat
+
+ HiLink rebolOperator Operator
+ HiLink rebolLogicOperator rebolOperator
+ HiLink rebolLogicFunction rebolLogicOperator
+ HiLink rebolMathOperator rebolOperator
+ HiLink rebolMathFunction rebolMathOperator
+ HiLink rebolBinaryOperator rebolOperator
+ HiLink rebolBinaryFunction rebolBinaryOperator
+
+ HiLink rebolType Type
+ HiLink rebolTypeFunction rebolOperator
+
+ HiLink rebolWord Identifier
+ HiLink rebolWordPath rebolWord
+ HiLink rebolFunction Function
+
+ HiLink rebolCharacter Character
+ HiLink rebolSpecialCharacter SpecialChar
+ HiLink rebolString String
+
+ HiLink rebolNumber Number
+ HiLink rebolInteger rebolNumber
+ HiLink rebolDecimal rebolNumber
+ HiLink rebolTime rebolNumber
+ HiLink rebolDate rebolNumber
+ HiLink rebolMoney rebolNumber
+ HiLink rebolBinary rebolNumber
+ HiLink rebolEmail rebolString
+ HiLink rebolFile rebolString
+ HiLink rebolURL rebolString
+ HiLink rebolIssue rebolNumber
+ HiLink rebolTuple rebolNumber
+ HiLink rebolFloat Float
+ HiLink rebolBoolean Boolean
+
+ HiLink rebolConstant Constant
+
+ HiLink rebolComment Comment
+
+ HiLink rebolError Error
+
+ delcommand HiLink
+endif
+
+if exists("my_rebol_file")
+ if file_readable(expand(my_rebol_file))
+ execute "source " . my_rebol_file
+ endif
+endif
+
+let b:current_syntax = "rebol"
+
+" vim: ts=8
diff --git a/runtime/syntax/registry.vim b/runtime/syntax/registry.vim
new file mode 100644
index 000000000..e9ff8fcab
--- /dev/null
+++ b/runtime/syntax/registry.vim
@@ -0,0 +1,114 @@
+" Vim syntax file
+" Language: Windows Registry export with regedit (*.reg)
+" Maintainer: Dominique Stéphan (dominique@mggen.com)
+" URL: http://www.mggen.com/vim/syntax/registry.zip
+" Last change: 2004 Apr 23
+
+" clear any unwanted syntax defs
+" 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
+
+" shut case off
+syn case ignore
+
+" Head of regedit .reg files, it's REGEDIT4 on Win9#/NT
+syn match registryHead "^REGEDIT[0-9]*$"
+
+" Comment
+syn match registryComment "^;.*$"
+
+" Registry Key constant
+syn keyword registryHKEY HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_CURRENT_USER
+syn keyword registryHKEY HKEY_USERS HKEY_CURRENT_CONFIG HKEY_DYN_DATA
+" Registry Key shortcuts
+syn keyword registryHKEY HKLM HKCR HKCU HKU HKCC HKDD
+
+" Some values often found in the registry
+" GUID (Global Unique IDentifier)
+syn match registryGUID "{[0-9A-Fa-f]\{8}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{4}\-[0-9A-Fa-f]\{12}}" contains=registrySpecial
+
+" Disk
+" syn match registryDisk "[a-zA-Z]:\\\\"
+
+" Special and Separator characters
+syn match registrySpecial "\\"
+syn match registrySpecial "\\\\"
+syn match registrySpecial "\\\""
+syn match registrySpecial "\."
+syn match registrySpecial ","
+syn match registrySpecial "\/"
+syn match registrySpecial ":"
+syn match registrySpecial "-"
+
+" String
+syn match registryString "\".*\"" contains=registryGUID,registrySpecial
+
+" Path
+syn region registryPath start="\[" end="\]" contains=registryHKEY,registryGUID,registrySpecial
+
+" Path to remove
+" like preceding path but with a "-" at begin
+syn region registryRemove start="\[\-" end="\]" contains=registryHKEY,registryGUID,registrySpecial
+
+" Subkey
+syn match registrySubKey "^\".*\"="
+" Default value
+syn match registrySubKey "^\@="
+
+" Numbers
+
+" Hex or Binary
+" The format can be precised between () :
+" 0 REG_NONE
+" 1 REG_SZ
+" 2 REG_EXPAND_SZ
+" 3 REG_BINARY
+" 4 REG_DWORD, REG_DWORD_LITTLE_ENDIAN
+" 5 REG_DWORD_BIG_ENDIAN
+" 6 REG_LINK
+" 7 REG_MULTI_SZ
+" 8 REG_RESOURCE_LIST
+" 9 REG_FULL_RESOURCE_DESCRIPTOR
+" 10 REG_RESOURCE_REQUIREMENTS_LIST
+" The value can take several lines, if \ ends the line
+" The limit to 999 matches is arbitrary, it avoids Vim crashing on a very long
+" line of hex values that ends in a comma.
+"syn match registryHex "hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
+syn match registryHex "hex\(([0-9]\{0,2})\)\=:\([0-9a-fA-F]\{2},\)*\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
+syn match registryHex "^\s*\([0-9a-fA-F]\{2},\)\{0,999}\([0-9a-fA-F]\{2}\|\\\)$" contains=registrySpecial
+" Dword (32 bits)
+syn match registryDword "dword:[0-9a-fA-F]\{8}$" contains=registrySpecial
+
+if version >= 508 || !exists("did_registry_syntax_inits")
+ if version < 508
+ let did_registry_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 registryComment Comment
+ HiLink registryHead Constant
+ HiLink registryHKEY Constant
+ HiLink registryPath Special
+ HiLink registryRemove PreProc
+ HiLink registryGUID Identifier
+ HiLink registrySpecial Special
+ HiLink registrySubKey Type
+ HiLink registryString String
+ HiLink registryHex Number
+ HiLink registryDword Number
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "registry"
+
+" vim:ts=8
diff --git a/runtime/syntax/remind.vim b/runtime/syntax/remind.vim
new file mode 100644
index 000000000..55d583ec3
--- /dev/null
+++ b/runtime/syntax/remind.vim
@@ -0,0 +1,64 @@
+" Vim syntax file
+" Language: Remind
+" Maintainer: Davide Alberani <alberanid@bigfoot.com>
+" Last Change: 28 Apr 2001
+" Version: 0.2
+" URL: http://digilander.iol.it/alberanid/vim/syntax/remind.vim
+"
+" remind is a sophisticated reminder service
+" you can download remind from http://www.roaringpenguin.com/remind.html
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" shut case off
+syn case ignore
+
+syn keyword remindCommands REM OMIT SET FSET UNSET
+syn keyword remindExpiry UNTIL SCANFROM SCAN WARN SCHED
+syn keyword remindTag PRIORITY TAG
+syn keyword remindTimed AT DURATION
+syn keyword remindMove ONCE SKIP BEFORE AFTER
+syn keyword remindSpecial INCLUDE INC BANNER PUSH-OMIT-CONTEXT PUSH CLEAR-OMIT-CONTEXT CLEAR POP-OMIT-CONTEXT POP
+syn keyword remindRun MSG MSF RUN CAL SATISFY SPECIAL PS PSFILE SHADE MOON
+syn keyword remindConditional IF ELSE ENDIF IFTRIG
+syn match remindComment "#.*$"
+syn region remindString start=+'+ end=+'+ skip=+\\\\\|\\'+ oneline
+syn region remindString start=+"+ end=+"+ skip=+\\\\\|\\"+ oneline
+syn keyword remindDebug DEBUG DUMPVARS DUMP ERRMSG FLUSH PRESERVE
+syn match remindVar "\$[_a-zA-Z][_a-zA-Z0-9]*"
+syn match remindSubst "%[^ ]"
+syn match remindAdvanceNumber "\(\*\|+\|-\|++\|--\)[0-9]\+"
+
+if version >= 508 || !exists("did_remind_syn_inits")
+ if version < 508
+ let did_remind_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink remindCommands Function
+ HiLink remindExpiry Repeat
+ HiLink remindTag Label
+ HiLink remindTimed Statement
+ HiLink remindMove Statement
+ HiLink remindSpecial Include
+ HiLink remindRun Function
+ HiLink remindConditional Conditional
+ HiLink remindComment Comment
+ HiLink remindString String
+ HiLink remindDebug Debug
+ HiLink remindVar Identifier
+ HiLink remindSubst Constant
+ HiLink remindAdvanceNumber Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "remind"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/resolv.vim b/runtime/syntax/resolv.vim
new file mode 100644
index 000000000..4fbc242e9
--- /dev/null
+++ b/runtime/syntax/resolv.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: resolver configuration file
+" Maintaner: Radu Dineiu <littledragon@altern.org>
+" URL: http://ld.yi.org/vim/resolv.vim
+" ChangeLog: http://ld.yi.org/vim/resolv.ChangeLog
+" Last Change: 2003 May 11
+" Version: 0.1
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Errors, comments and operators
+syn match resolvError /./
+syn match resolvNull /^\s*$/
+syn match resolvComment /^\s*#.*$/
+syn match resolvOperator /[\/:]/ contained
+
+" IP
+
+syn cluster resolvIPCluster contains=resolvIPError,resolvIPSpecial
+syn match resolvIPError /\%(\d\{4,}\|25[6-9]\|2[6-9]\d\|[3-9]\d\{2}\)[\.0-9]*/ contained
+syn match resolvIPSpecial /\%(127\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)/ contained
+
+" General
+syn match resolvIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@resolvIPCluster
+syn match resolvIPNetmask contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?/ contains=resolvOperator,@resolvIPCluster
+syn match resolvHostname contained /\w\{-}\.[-0-9A-Za-z_\.]*/
+
+" Particular
+syn match resolvIPNameserver contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\s\|$\)\)\{1,3}/ contains=@resolvIPCluster
+syn match resolvHostnameSearch contained /\%(\w\{-}\.[-0-9A-Za-z_\.]\{-}\%(\s\|$\)\)\{1,6}/
+syn match resolvIPNetmaskSortList contained /\%(\%(\d\{1,4}\.\)\{3}\d\{1,4}\%(\/\%(\%(\d\{1,4}\.\)\{,3}\d\{1,4}\)\)\?\%(\s\|$\)\)\{1,10}/ contains=resolvOperator,@resolvIPCluster
+
+" Identifiers
+syn match resolvNameserver /^nameserver / nextgroup=resolvIPNameserver
+syn match resolvDomain /^domain / nextgroup=resolvHostname
+syn match resolvSearch /^search / nextgroup=resolvHostnameSearch
+syn match resolvSortList /^sortlist / nextgroup=resolvIPNetmaskSortList
+syn match resolvOptions /^options / nextgroup=resolvOption
+
+" Options
+syn match resolvOption /\%(debug\|ndots:\d\)/ contained contains=resolvOperator
+
+" Additional errors
+syn match resolvError /^search .\{257,}/
+syn match resolvNull /\s\{1,}$/
+
+if version >= 508 || !exists("did_config_syntax_inits")
+ if version < 508
+ let did_config_syntax_inits = 1
+ command! -nargs=+ HiLink hi link <args>
+ else
+ command! -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink resolvIP Number
+ HiLink resolvIPNetmask Number
+ HiLink resolvHostname String
+ HiLink resolvOption String
+
+ HiLink resolvIPNameserver Number
+ HiLink resolvHostnameSearch String
+ HiLink resolvIPNetmaskSortList Number
+
+ HiLink resolvNameServer Identifier
+ HiLink resolvDomain Identifier
+ HiLink resolvSearch Identifier
+ HiLink resolvSortList Identifier
+ HiLink resolvOptions Identifier
+
+ HiLink resolvComment Comment
+ HiLink resolvOperator Operator
+ HiLink resolvError Error
+ HiLink resolvIPError Error
+ HiLink resolvIPSpecial Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "resolv"
+
+" vim: ts=8 ft=vim
diff --git a/runtime/syntax/rexx.vim b/runtime/syntax/rexx.vim
new file mode 100644
index 000000000..ef4b058b5
--- /dev/null
+++ b/runtime/syntax/rexx.vim
@@ -0,0 +1,113 @@
+" Vim syntax file
+" Language: Rexx
+" Maintainer: Thomas Geulig <geulig@nentec.de>
+" Last Change: 2001 May 2
+" URL: http://mywebpage.netscape.com/sharpPeople/vim/syntax/rexx.vim
+"
+" Special Thanks to Dan Sharp <dwsharp@hotmail.com> for comments and additions
+" (and providing the webspace)
+
+" 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
+
+" A Keyword is the first symbol in a clause. A clause begins at the start
+" of a line or after a semicolon. THEN, ELSE, OTHERWISE, and colons are always
+" followed by an implied semicolon.
+syn match rexxClause "\(^\|;\|:\|then \|else \|otherwise \)\s*\w\+" contains=ALL
+
+" Considered keywords when used together in a phrase and begin a clause
+syn match rexxKeyword contained "\<signal\( on \(error\|failure\|halt\|notready\|novalue\|syntax\|lostdigits\)\(\s\+name\)\=\)\=\>"
+syn match rexxKeyword contained "\<signal off \(error\|failure\|halt\|notready\|novalue\|syntax\|lostdigits\)\>"
+syn match rexxKeyword contained "\<call off \(error\|failure\|halt\|notready\)\>"
+syn match rexxKeyword contained "\<parse \(upper \)\=\(arg\|linein\|pull\|source\|var\|value\|version\)\>"
+syn match rexxKeyword contained "\<numeric \(digits\|form \(scientific\|engineering\|value\)\|fuzz\)\>"
+syn match rexxKeyword contained "\<\(address\|trace\)\( value\)\=\>"
+syn match rexxKeyword contained "\<procedure\( expose\)\=\>"
+syn match rexxKeyword contained "\<do\( forever\)\=\>"
+
+" Another keyword phrase, separated to aid highlighting in rexxFunction
+syn match rexxKeyword2 contained "\<call\( on \(error\|failure\|halt\|notready\)\(\s\+name\)\=\)\=\>"
+
+" Considered keywords when they begin a clause
+syn match rexxKeyword contained "\<\(arg\|drop\|end\|exit\|if\|interpret\|iterate\|leave\|nop\)\>"
+syn match rexxKeyword contained "\<\(options\|pull\|push\|queue\|return\|say\|select\|trace\)\>"
+
+" Conditional phrases
+syn match rexxConditional "\(^\s*\| \)\(to\|by\|for\|until\|while\|then\|when\|otherwise\|else\)\( \|\s*$\)" contains=ALLBUT,rexxConditional
+syn match rexxConditional contained "\<\(to\|by\|for\|until\|while\|then\|when\|else\|otherwise\)\>"
+
+" Assignments -- a keyword followed by an equal sign becomes a variable
+syn match rexxAssign "\<\w\+\s*=\s*" contains=rexxSpecialVariable
+
+" Functions/Procedures
+syn match rexxFunction "\<\h\w*\(/\*\s*\*/\)*("me=e-1 contains=rexxComment,rexxConditional,rexxKeyword
+syn match rexxFunction "\<\(arg\|trace\)\(/\*\s*\*/\)*("me=e-1
+syn match rexxFunction "\<call\( on \(error\|failure\|halt\|notready\)\(\s\+name\)\=\)\=\>\s\+\w\+\>" contains=rexxKeyword2
+
+" String constants
+syn region rexxString start=+"+ skip=+\\\\\|\\'+ end=+"+
+syn region rexxString start=+'+ skip=+\\\\\|\\"+ end=+'+
+syn match rexxCharacter +"'[^\\]'"+
+
+" Catch errors caused by wrong parenthesis
+syn region rexxParen transparent start='(' end=')' contains=ALLBUT,rexxParenError,rexxTodo,rexxUserLabel,rexxKeyword
+syn match rexxParenError ")"
+syn match rexxInParen "[\\[\\]{}]"
+
+" Comments
+syn region rexxComment start="/\*" end="\*/" contains=rexxTodo,rexxComment
+syn match rexxCommentError "\*/"
+
+syn keyword rexxTodo contained TODO FIXME XXX
+
+" Highlight User Labels
+syn match rexxUserLabel "\<\I\i*\s*:"me=e-1
+
+" Special Variables
+syn keyword rexxSpecialVariable sigl rc result
+syn match rexxCompoundVariable "\<\w\+\.\w*\>"
+
+if !exists("rexx_minlines")
+ let rexx_minlines = 10
+endif
+exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
+
+" 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_rexx_syn_inits")
+ if version < 508
+ let did_rexx_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rexxUserLabel Function
+ HiLink rexxCharacter Character
+ HiLink rexxParenError rexxError
+ HiLink rexxInParen rexxError
+ HiLink rexxCommentError rexxError
+ HiLink rexxError Error
+ HiLink rexxKeyword Statement
+ HiLink rexxKeyword2 rexxKeyword
+ HiLink rexxFunction Function
+ HiLink rexxString String
+ HiLink rexxComment Comment
+ HiLink rexxTodo Todo
+ HiLink rexxSpecialVariable Special
+ HiLink rexxConditional rexxKeyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rexx"
+
+"vim: ts=8
diff --git a/runtime/syntax/rib.vim b/runtime/syntax/rib.vim
new file mode 100644
index 000000000..6b9f2b0bd
--- /dev/null
+++ b/runtime/syntax/rib.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language: Renderman Interface Bytestream
+" Maintainer: Andrew Bromage <ajb@spamcop.net>
+" Last Change: 2003 May 11
+"
+
+" Remove any old syntax stuff hanging around
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+
+" Comments
+syn match ribLineComment "#.*$"
+syn match ribStructureComment "##.*$"
+
+syn case ignore
+syn match ribCommand /[A-Z][a-zA-Z]*/
+syn case match
+
+syn region ribString start=/"/ skip=/\\"/ end=/"/
+
+syn match ribStructure "[A-Z][a-zA-Z]*Begin\>\|[A-Z][a-zA-Z]*End"
+syn region ribSectionFold start="FrameBegin" end="FrameEnd" fold transparent keepend extend
+syn region ribSectionFold start="WorldBegin" end="WorldEnd" fold transparent keepend extend
+syn region ribSectionFold start="TransformBegin" end="TransformEnd" fold transparent keepend extend
+syn region ribSectionFold start="AttributeBegin" end="AttributeEnd" fold transparent keepend extend
+syn region ribSectionFold start="MotionBegin" end="MotionEnd" fold transparent keepend extend
+syn region ribSectionFold start="SolidBegin" end="SolidEnd" fold transparent keepend extend
+syn region ribSectionFold start="ObjectBegin" end="ObjectEnd" fold transparent keepend extend
+
+syn sync fromstart
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match ribNumbers display transparent "[-]\=\<\d\|\.\d" contains=ribNumber,ribFloat
+syn match ribNumber display contained "[-]\=\d\+\>"
+"floating point number, with dot, optional exponent
+syn match ribFloat display contained "[-]\=\d\+\.\d*\(e[-+]\=\d\+\)\="
+"floating point number, starting with a dot, optional exponent
+syn match ribFloat display contained "[-]\=\.\d\+\(e[-+]\=\d\+\)\=\>"
+"floating point number, without dot, with exponent
+syn match ribFloat display contained "[-]\=\d\+e[-+]\d\+\>"
+syn case match
+
+if version >= 508 || !exists("did_rib_syntax_inits")
+ if version < 508
+ let did_rib_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ribStructure Structure
+ HiLink ribCommand Statement
+
+ HiLink ribStructureComment SpecialComment
+ HiLink ribLineComment Comment
+
+ HiLink ribString String
+ HiLink ribNumber Number
+ HiLink ribFloat Float
+
+ delcommand HiLink
+end
+
+
+let b:current_syntax = "rib"
+
+" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim
diff --git a/runtime/syntax/rnc.vim b/runtime/syntax/rnc.vim
new file mode 100644
index 000000000..3878c8c1b
--- /dev/null
+++ b/runtime/syntax/rnc.vim
@@ -0,0 +1,94 @@
+" Vim syntax file
+" Language: Relax NG compact syntax
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/rnc/
+" Latest Revision: 2004-05-22
+" arch-tag: 061ee0a2-9efa-4e2a-b1a9-14cf5172d645
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Set iskeyword since we need `-' (and potentially others) in keywords.
+" For version 5.x: Set it globally
+" For version 6.x: Set it locally
+if version >= 600
+ command -nargs=1 SetIsk setlocal iskeyword=<args>
+else
+ command -nargs=1 SetIsk set iskeyword=<args>
+endif
+SetIsk @,48-57,_,-,.
+delcommand SetIsk
+
+" Todo
+syn keyword rncTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region rncComment matchgroup=rncComment start='^\s*#' end='$' contains=rncTodo
+
+" Operators
+syn match rncOperator '[-|,&+?*~]'
+syn match rncOperator '\%(|&\)\=='
+syn match rncOperator '>>'
+
+" Namespaces
+syn match rncNamespace '\<\k\+:'
+
+" Quoted Identifier
+syn match rncQuoted '\\\k\+\>'
+
+" Special Characters
+syn match rncSpecial '\\x{\x\+}'
+
+" Annotations
+syn region Annotation transparent start='\[' end='\]' contains=ALLBUT,rncComment,rncTodo
+
+" Literals
+syn region rncLiteral matchgroup=rncLiteral oneline start=+"+ end=+"+ contains=rncSpecial
+syn region rncLiteral matchgroup=rncLiteral oneline start=+'+ end=+'+
+syn region rncLiteral matchgroup=rncLiteral start=+"""+ end=+"""+ contains=rncSpecial
+syn region rncLiteral matchgroup=rncLiteral start=+'''+ end=+'''+
+
+" Delimiters
+syn match rncDelimiter '[{},()]'
+
+" Keywords
+syn keyword rncKeyword datatypes default div empty external grammar
+syn keyword rncKeyword include inherit list mixed name namespace
+syn keyword rncKeyword notAllowed parent start string text token
+
+" Identifiers
+syn match rncIdentifier '\k\+\_s*\%(=\|&=\||=\)\@=' nextgroup=rncOperator
+syn keyword rncKeyword nextgroup=rncIdName skipwhite skipempty element attribute
+syn match rncIdentifier contained '\k\+'
+
+" 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_rnc_syn_inits")
+ if version < 508
+ let did_rnc_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rncTodo Todo
+ HiLink rncComment Comment
+ HiLink rncOperator Operator
+ HiLink rncNamespace Identifier
+ HiLink rncQuoted Special
+ HiLink rncSpecial SpecialChar
+ HiLink rncLiteral String
+ HiLink rncDelimiter Delimiter
+ HiLink rncKeyword Keyword
+ HiLink rncIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rnc"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/robots.vim b/runtime/syntax/robots.vim
new file mode 100644
index 000000000..066628bb3
--- /dev/null
+++ b/runtime/syntax/robots.vim
@@ -0,0 +1,69 @@
+" Vim syntax file
+" Language: "Robots.txt" files
+" Robots.txt files indicate to WWW robots which parts of a web site should not be accessed.
+" Maintainer: Dominique Stéphan (dominique@mggen.com)
+" URL: http://www.mggen.com/vim/syntax/robots.zip
+" Last change: 2001 May 09
+
+" 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
+
+
+" shut case off
+syn case ignore
+
+" Comment
+syn match robotsComment "#.*$" contains=robotsUrl,robotsMail,robotsString
+
+" Star * (means all spiders)
+syn match robotsStar "\*"
+
+" :
+syn match robotsDelimiter ":"
+
+
+" The keywords
+" User-agent
+syn match robotsAgent "^[Uu][Ss][Ee][Rr]\-[Aa][Gg][Ee][Nn][Tt]"
+" Disallow
+syn match robotsDisallow "^[Dd][Ii][Ss][Aa][Ll][Ll][Oo][Ww]"
+
+" Disallow: or User-Agent: and the rest of the line before an eventual comment
+synt match robotsLine "\(^[Uu][Ss][Ee][Rr]\-[Aa][Gg][Ee][Nn][Tt]\|^[Dd][Ii][Ss][Aa][Ll][Ll][Oo][Ww]\):[^#]*" contains=robotsAgent,robotsDisallow,robotsStar,robotsDelimiter
+
+" Some frequent things in comments
+syn match robotsUrl "http[s]\=://\S*"
+syn match robotsMail "\S*@\S*"
+syn region robotsString start=+L\="+ skip=+\\\\\|\\"+ end=+"+
+
+if version >= 508 || !exists("did_robos_syntax_inits")
+ if version < 508
+ let did_robots_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink robotsComment Comment
+ HiLink robotsAgent Type
+ HiLink robotsDisallow Statement
+ HiLink robotsLine Special
+ HiLink robotsStar Operator
+ HiLink robotsDelimiter Delimiter
+ HiLink robotsUrl String
+ HiLink robotsMail String
+ HiLink robotsString String
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "robots"
+
+" vim: ts=8 sw=2
+
diff --git a/runtime/syntax/rpcgen.vim b/runtime/syntax/rpcgen.vim
new file mode 100644
index 000000000..edf87fb28
--- /dev/null
+++ b/runtime/syntax/rpcgen.vim
@@ -0,0 +1,63 @@
+" Vim syntax file
+" Language: rpcgen
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Nov 18, 2002
+" Version: 7
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+if version < 600
+ source <sfile>:p:h/c.vim
+else
+ runtime! syntax/c.vim
+endif
+
+syn keyword rpcProgram program skipnl skipwhite nextgroup=rpcProgName
+syn match rpcProgName contained "\<\i\I*\>" skipnl skipwhite nextgroup=rpcProgZone
+syn region rpcProgZone contained matchgroup=Delimiter start="{" matchgroup=Delimiter end="}\s*=\s*\(\d\+\|0x[23]\x\{7}\)\s*;"me=e-1 contains=rpcVersion,cComment,rpcProgNmbrErr
+syn keyword rpcVersion contained version skipnl skipwhite nextgroup=rpcVersName
+syn match rpcVersName contained "\<\i\I*\>" skipnl skipwhite nextgroup=rpcVersZone
+syn region rpcVersZone contained matchgroup=Delimiter start="{" matchgroup=Delimiter end="}\s*=\s*\d\+\s*;"me=e-1 contains=cType,cStructure,cStorageClass,rpcDecl,rpcProcNmbr,cComment
+syn keyword rpcDecl contained string
+syn match rpcProcNmbr contained "=\s*\d\+;"me=e-1
+syn match rpcProgNmbrErr contained "=\s*0x[^23]\x*"ms=s+1
+syn match rpcPassThru "^\s*%.*$"
+
+" 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_rpcgen_syntax_inits")
+ if version < 508
+ let did_rpcgen_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rpcProgName rpcName
+ HiLink rpcProgram rpcStatement
+ HiLink rpcVersName rpcName
+ HiLink rpcVersion rpcStatement
+
+ HiLink rpcDecl cType
+ HiLink rpcPassThru cComment
+
+ HiLink rpcName Special
+ HiLink rpcProcNmbr Delimiter
+ HiLink rpcProgNmbrErr Error
+ HiLink rpcStatement Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rpcgen"
+
+" vim: ts=8
diff --git a/runtime/syntax/rpl.vim b/runtime/syntax/rpl.vim
new file mode 100644
index 000000000..bc50475e1
--- /dev/null
+++ b/runtime/syntax/rpl.vim
@@ -0,0 +1,491 @@
+" Vim syntax file
+" Language: RPL/2
+" Version: 0.15.15 against RPL/2 version 4.00pre7i
+" Last Change: 2003 august 24
+" Maintainer: Joël BERTRAND <rpl2@free.fr>
+" URL: http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim
+" Credits: Nothing
+
+" 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
+
+" Keyword characters (not used)
+" set iskeyword=33-127
+
+" Case sensitive
+syntax case match
+
+" Constants
+syntax match rplConstant "\(^\|\s\+\)\(e\|i\)\ze\($\|\s\+\)"
+
+" Any binary number
+syntax match rplBinaryError "\(^\|\s\+\)#\s*\S\+b\ze"
+syntax match rplBinary "\(^\|\s\+\)#\s*[01]\+b\ze\($\|\s\+\)"
+syntax match rplOctalError "\(^\|\s\+\)#\s*\S\+o\ze"
+syntax match rplOctal "\(^\|\s\+\)#\s*\o\+o\ze\($\|\s\+\)"
+syntax match rplDecimalError "\(^\|\s\+\)#\s*\S\+d\ze"
+syntax match rplDecimal "\(^\|\s\+\)#\s*\d\+d\ze\($\|\s\+\)"
+syntax match rplHexadecimalError "\(^\|\s\+\)#\s*\S\+h\ze"
+syntax match rplHexadecimal "\(^\|\s\+\)#\s*\x\+h\ze\($\|\s\+\)"
+
+" Case unsensitive
+syntax case ignore
+
+syntax match rplControl "\(^\|\s\+\)abort\ze\($\|\s\+\)"
+syntax match rplControl "\(^\|\s\+\)kill\ze\($\|\s\+\)"
+syntax match rplControl "\(^\|\s\+\)cont\ze\($\|\s\+\)"
+syntax match rplControl "\(^\|\s\+\)halt\ze\($\|\s\+\)"
+syntax match rplControl "\(^\|\s\+\)cmlf\ze\($\|\s\+\)"
+syntax match rplControl "\(^\|\s\+\)sst\ze\($\|\s\+\)"
+
+syntax match rplConstant "\(^\|\s\+\)pi\ze\($\|\s\+\)"
+
+syntax match rplStatement "\(^\|\s\+\)return\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)last\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)syzeval\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)wait\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)type\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)kind\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)eval\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)use\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)remove\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)external\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)dup\([2n]\|\)\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)drop\([2n]\|\)\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)depth\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)roll\(d\|\)\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)pick\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)rot\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)swap\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)over\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)clear\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)warranty\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)copyright\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)convert\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)date\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)time\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)mem\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)clmf\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)->num\ze\($\|\s\+\)"
+syntax match rplStatement "\(^\|\s\+\)help\ze\($\|\s\+\)"
+
+syntax match rplStorage "\(^\|\s\+\)get\(i\|r\|c\|\)\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)put\(i\|r\|c\|\)\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)rcl\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)purge\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)sinv\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)sneg\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)sconj\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)steq\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)rceq\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)vars\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)clusr\ze\($\|\s\+\)"
+syntax match rplStorage "\(^\|\s\+\)sto\([+-/\*]\|\)\ze\($\|\s\+\)"
+
+syntax match rplAlgConditional "\(^\|\s\+\)ift\(e\|\)\ze\($\|\s\+\)"
+
+syntax match rplOperator "\(^\|\s\+\)and\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)\(x\|\)or\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)not\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)same\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)==\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)<=\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)=<\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)=>\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)>=\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)<>\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)>\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)<\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)[+-]\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)[/\*]\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)\^\ze\($\|\s\+\)"
+syntax match rplOperator "\(^\|\s\+\)\*\*\ze\($\|\s\+\)"
+
+syntax match rplBoolean "\(^\|\s\+\)true\ze\($\|\s\+\)"
+syntax match rplBoolean "\(^\|\s\+\)false\ze\($\|\s\+\)"
+
+syntax match rplReadWrite "\(^\|\s\+\)store\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)recall\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\(\|wf\|un\)lock\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)open\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)close\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)delete\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)create\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)format\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)rewind\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)backspace\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\(\|re\)write\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)read\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)inquire\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)sync\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)append\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)suppress\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)seek\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)pr\(1\|int\|st\|stc\|lcd\|var\|usr\|md\)\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)paper\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)cr\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)erase\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)disp\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)input\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)prompt\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)key\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)cllcd\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\(\|re\)draw\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)drax\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)indep\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)depnd\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)res\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)axes\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)label\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)pmin\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)pmax\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)centr\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)persist\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)title\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\(slice\|auto\|log\|\)scale\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)eyept\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\(p\|s\)par\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)function\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)polar\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)scatter\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)plotter\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)wireframe\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)parametric\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)slice\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\*w\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\*h\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\*d\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)\*s\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)->lcd\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)lcd->\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)edit\ze\($\|\s\+\)"
+syntax match rplReadWrite "\(^\|\s\+\)visit\ze\($\|\s\+\)"
+
+syntax match rplIntrinsic "\(^\|\s\+\)abs\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)arg\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)conj\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)re\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)im\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)mant\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)xpon\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)ceil\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)fact\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)fp\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)floor\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)inv\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)ip\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)max\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)min\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)mod\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)neg\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)relax\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)sign\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)sq\(\|rt\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)xroot\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)cos\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)sin\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)tan\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)tg\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)a\(\|rc\)cos\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)a\(\|rc\)sin\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)atan\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)arctg\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|a\)cosh\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|a\)sinh\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|a\)tanh\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|arg\)th\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)arg[cst]h\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|a\)log\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)ln\(\|1\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)exp\(\|m\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)trn\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)con\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)idn\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rdm\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rsd\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)cnrm\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)cross\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)d[eo]t\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)[cr]swp\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rci\(j\|\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(in\|de\)cr\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)bessel\ze\($\|\s\+\)"
+
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|g\)egvl\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|g\)\(\|l\|r\)egv\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rnrm\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(std\|fix\|sci\|eng\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(rad\|deg\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|n\)rand\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rdz\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|i\)fft\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(dec\|bin\|oct\|hex\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)rclf\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)stof\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)[cs]f\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)chr\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)num\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)pos\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)sub\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)size\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(st\|rc\)ws\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(r\|s\)\(r\|l\)\(\|b\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)as\(r\|l\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(int\|der\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)stos\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|r\)cls\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)drws\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)scls\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)ns\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)tot\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)mean\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|p\)sdev\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|p\)var\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)maxs\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)mins\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|p\)cov\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)cols\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)s\(x\(\|y\|2\)\|y\(\|2\)\)\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(x\|y\)col\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)corr\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)utp[cfnt]\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)comb\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)perm\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)\(\|p\)lu\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)[lu]chol\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)schur\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)%\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)%ch\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)%t\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)hms->\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)->hms\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)hms+\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)hms-\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)d->r\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)r->d\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)b->r\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)r->b\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)c->r\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)r->c\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)r->p\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)p->r\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)str->\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)->str\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)array->\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)->array\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)list->\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)->list\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)s+\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)s-\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)col-\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)col+\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)row-\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)row+\ze\($\|\s\+\)"
+syntax match rplIntrinsic "\(^\|\s\+\)->q\ze\($\|\s\+\)"
+
+syntax match rplObsolete "\(^\|\s\+\)arry->\ze\($\|\s\+\)"hs=e-5
+syntax match rplObsolete "\(^\|\s\+\)->arry\ze\($\|\s\+\)"hs=e-5
+
+" Conditional structures
+syntax match rplConditionalError "\(^\|\s\+\)case\ze\($\|\s\+\)"hs=e-3
+syntax match rplConditionalError "\(^\|\s\+\)then\ze\($\|\s\+\)"hs=e-3
+syntax match rplConditionalError "\(^\|\s\+\)else\ze\($\|\s\+\)"hs=e-3
+syntax match rplConditionalError "\(^\|\s\+\)elseif\ze\($\|\s\+\)"hs=e-5
+syntax match rplConditionalError "\(^\|\s\+\)end\ze\($\|\s\+\)"hs=e-2
+syntax match rplConditionalError "\(^\|\s\+\)\(step\|next\)\ze\($\|\s\+\)"hs=e-3
+syntax match rplConditionalError "\(^\|\s\+\)until\ze\($\|\s\+\)"hs=e-4
+syntax match rplConditionalError "\(^\|\s\+\)repeat\ze\($\|\s\+\)"hs=e-5
+syntax match rplConditionalError "\(^\|\s\+\)default\ze\($\|\s\+\)"hs=e-6
+
+" FOR/(CYCLE)/(EXIT)/NEXT
+" FOR/(CYCLE)/(EXIT)/STEP
+" START/(CYCLE)/(EXIT)/NEXT
+" START/(CYCLE)/(EXIT)/STEP
+syntax match rplCycle "\(^\|\s\+\)\(cycle\|exit\)\ze\($\|\s\+\)"
+syntax region rplForNext matchgroup=rplRepeat start="\(^\|\s\+\)\(for\|start\)\ze\($\|\s\+\)" end="\(^\|\s\+\)\(next\|step\)\ze\($\|\s\+\)" contains=ALL keepend extend
+
+" ELSEIF/END
+syntax region rplElseifEnd matchgroup=rplConditional start="\(^\|\s\+\)elseif\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained contains=ALLBUT,rplElseEnd keepend
+
+" ELSE/END
+syntax region rplElseEnd matchgroup=rplConditional start="\(^\|\s\+\)else\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained contains=ALLBUT,rplElseEnd,rplThenEnd,rplElseifEnd keepend
+
+" THEN/END
+syntax region rplThenEnd matchgroup=rplConditional start="\(^\|\s\+\)then\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contained containedin=rplIfEnd contains=ALLBUT,rplThenEnd keepend
+
+" IF/END
+syntax region rplIfEnd matchgroup=rplConditional start="\(^\|\s\+\)if\(err\|\)\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplElseEnd,rplElseifEnd keepend extend
+" if end is accepted !
+" select end too !
+
+" CASE/THEN
+syntax region rplCaseThen matchgroup=rplConditional start="\(^\|\s\+\)case\ze\($\|\s\+\)" end="\(^\|\s\+\)then\ze\($\|\s\+\)" contains=ALLBUT,rplCaseThen,rplCaseEnd,rplThenEnd keepend extend contained containedin=rplCaseEnd
+
+" CASE/END
+syntax region rplCaseEnd matchgroup=rplConditional start="\(^\|\s\+\)case\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplCaseEnd,rplThenEnd,rplElseEnd keepend extend contained containedin=rplSelectEnd
+
+" DEFAULT/END
+syntax region rplDefaultEnd matchgroup=rplConditional start="\(^\|\s\+\)default\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplDefaultEnd keepend contained containedin=rplSelectEnd
+
+" SELECT/END
+syntax region rplSelectEnd matchgroup=rplConditional start="\(^\|\s\+\)select\ze\($\|\s\+\)" end="\(^\|\s\+\)end\ze\($\|\s\+\)" contains=ALLBUT,rplThenEnd keepend extend
+" select end is accepted !
+
+" DO/UNTIL/END
+syntax region rplUntilEnd matchgroup=rplConditional start="\(^\|\s\+\)until\ze\($\|\s\+\)" end="\(^\|\s\+\)\zsend\ze\($\|\s\+\)" contains=ALLBUT,rplUntilEnd contained containedin=rplDoUntil extend keepend
+syntax region rplDoUntil matchgroup=rplConditional start="\(^\|\s\+\)do\ze\($\|\s\+\)" end="\(^\|\s\+\)until\ze\($\|\s\+\)" contains=ALL keepend extend
+
+" WHILE/REPEAT/END
+syntax region rplRepeatEnd matchgroup=rplConditional start="\(^\|\s\+\)repeat\ze\($\|\s\+\)" end="\(^\|\s\+\)\zsend\ze\($\|\s\+\)" contains=ALLBUT,rplRepeatEnd contained containedin=rplWhileRepeat extend keepend
+syntax region rplWhileRepeat matchgroup=rplConditional start="\(^\|\s\+\)while\ze\($\|\s\+\)" end="\(^\|\s\+\)repeat\ze\($\|\s\+\)" contains=ALL keepend extend
+
+" Comments
+syntax match rplCommentError "\*/"
+syntax region rplCommentString contained start=+"+ end=+"+ end=+\*/+me=s-1
+syntax region rplCommentLine start="\(^\|\s\+\)//\ze" skip="\\$" end="$" contains=NONE keepend extend
+syntax region rplComment start="\(^\|\s\+\)/\*\ze" end="\*/" contains=rplCommentString keepend extend
+
+" Catch errors caused by too many right parentheses
+syntax region rplParen transparent start="(" end=")" contains=ALLBUT,rplParenError,rplComplex,rplIncluded keepend extend
+syntax match rplParenError ")"
+
+" Subroutines
+" Catch errors caused by too many right '>>'
+syntax match rplSubError "\(^\|\s\+\)>>\ze\($\|\s\+\)"hs=e-1
+syntax region rplSub matchgroup=rplSubDelimitor start="\(^\|\s\+\)<<\ze\($\|\s\+\)" end="\(^\|\s\+\)>>\ze\($\|\s\+\)" contains=ALLBUT,rplSubError,rplIncluded,rplDefaultEnd,rplStorageSub keepend extend
+
+" Expressions
+syntax region rplExpr start="\(^\|\s\+\)'" end="'\ze\($\|\s\+\)" contains=rplParen,rplParenError
+
+" Local variables
+syntax match rplStorageError "\(^\|\s\+\)->\ze\($\|\s\+\)"hs=e-1
+syntax region rplStorageSub matchgroup=rplStorage start="\(^\|\s\+\)<<\ze\($\|\s\+\)" end="\(^\|\s\+\)>>\ze\($\|\s\+\)" contains=ALLBUT,rplSubError,rplIncluded,rplDefaultEnd,rplStorageExpr contained containedin=rplLocalStorage keepend extend
+syntax region rplStorageExpr matchgroup=rplStorage start="\(^\|\s\+\)'" end="'\ze\($\|\s\+\)" contains=rplParen,rplParenError extend contained containedin=rplLocalStorage
+syntax region rplLocalStorage matchgroup=rplStorage start="\(^\|\s\+\)->\ze\($\|\s\+\)" end="\(^\|\s\+\)\(<<\ze\($\|\s\+\)\|'\)" contains=rplStorageSub,rplStorageExpr,rplComment,rplCommentLine keepend extend
+
+" Catch errors caused by too many right brackets
+syntax match rplArrayError "\]"
+syntax match rplArray "\]" contained containedin=rplArray
+syntax region rplArray matchgroup=rplArray start="\[" end="\]" contains=ALLBUT,rplArrayError keepend extend
+
+" Catch errors caused by too many right '}'
+syntax match rplListError "}"
+syntax match rplList "}" contained containedin=rplList
+syntax region rplList matchgroup=rplList start="{" end="}" contains=ALLBUT,rplListError,rplIncluded keepend extend
+
+" cpp is used by RPL/2
+syntax match rplPreProc "\_^#\s*\(define\|undef\)\>"
+syntax match rplPreProc "\_^#\s*\(warning\|error\)\>"
+syntax match rplPreCondit "\_^#\s*\(if\|ifdef\|ifndef\|elif\|else\|endif\)\>"
+syntax match rplIncluded contained "\<<\s*\S*\s*>\>"
+syntax match rplInclude "\_^#\s*include\>\s*["<]" contains=rplIncluded,rplString
+"syntax match rplExecPath "\%^\_^#!\s*\S*"
+syntax match rplExecPath "\%^\_^#!\p*\_$"
+
+" Any integer
+syntax match rplInteger "\(^\|\s\+\)[-+]\=\d\+\ze\($\|\s\+\)"
+
+" Floating point number
+" [S][ip].[fp]
+syntax match rplFloat "\(^\|\s\+\)[-+]\=\(\d*\)\=[\.,]\(\d*\)\=\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
+" [S]ip[.fp]E[S]exp
+syntax match rplFloat "\(^\|\s\+\)[-+]\=\d\+\([\.,]\d*\)\=[eE]\([-+]\)\=\d\+\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
+" [S].fpE[S]exp
+syntax match rplFloat "\(^\|\s\+\)[-+]\=\(\d*\)\=[\.,]\d\+[eE]\([-+]\)\=\d\+\ze\($\|\s\+\)" contains=ALLBUT,rplPoint,rplSign
+syntax match rplPoint "\<[\.,]\>"
+syntax match rplSign "\<[+-]\>"
+
+" Complex number
+" (x,y)
+syntax match rplComplex "\(^\|\s\+\)([-+]\=\(\d*\)\=\.\=\d*\([eE][-+]\=\d\+\)\=\s*,\s*[-+]\=\(\d*\)\=\.\=\d*\([eE][-+]\=\d\+\)\=)\ze\($\|\s\+\)"
+" (x.y)
+syntax match rplComplex "\(^\|\s\+\)([-+]\=\(\d*\)\=,\=\d*\([eE][-+]\=\d\+\)\=\s*\.\s*[-+]\=\(\d*\)\=,\=\d*\([eE][-+]\=\d\+\)\=)\ze\($\|\s\+\)"
+
+" Strings
+syntax match rplStringGuilles "\\\""
+syntax match rplStringAntislash "\\\\"
+syntax region rplString start=+\(^\|\s\+\)"+ end=+"\ze\($\|\s\+\)+ contains=rplStringGuilles,rplStringAntislash
+
+syntax match rplTab "\t" transparent
+
+" 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_rpl_syntax_inits")
+ if version < 508
+ let did_rpl_syntax_inits = 1
+ command -nargs=+ HiLink highlight link <args>
+ else
+ command -nargs=+ HiLink highlight default link <args>
+ endif
+
+ " The default highlighting.
+
+ HiLink rplControl Statement
+ HiLink rplStatement Statement
+ HiLink rplAlgConditional Conditional
+ HiLink rplConditional Repeat
+ HiLink rplConditionalError Error
+ HiLink rplRepeat Repeat
+ HiLink rplCycle Repeat
+ HiLink rplUntil Repeat
+ HiLink rplIntrinsic Special
+ HiLink rplStorage StorageClass
+ HiLink rplStorageExpr StorageClass
+ HiLink rplStorageError Error
+ HiLink rplReadWrite rplIntrinsic
+
+ HiLink rplOperator Operator
+
+ HiLink rplList Special
+ HiLink rplArray Special
+ HiLink rplConstant Identifier
+ HiLink rplExpr Type
+
+ HiLink rplString String
+ HiLink rplStringGuilles String
+ HiLink rplStringAntislash String
+
+ HiLink rplBinary Boolean
+ HiLink rplOctal Boolean
+ HiLink rplDecimal Boolean
+ HiLink rplHexadecimal Boolean
+ HiLink rplInteger Number
+ HiLink rplFloat Float
+ HiLink rplComplex Float
+ HiLink rplBoolean Identifier
+
+ HiLink rplObsolete Todo
+
+ HiLink rplPreCondit PreCondit
+ HiLink rplInclude Include
+ HiLink rplIncluded rplString
+ HiLink rplInclude Include
+ HiLink rplExecPath Include
+ HiLink rplPreProc PreProc
+ HiLink rplComment Comment
+ HiLink rplCommentLine Comment
+ HiLink rplCommentString Comment
+ HiLink rplSubDelimitor rplStorage
+ HiLink rplCommentError Error
+ HiLink rplParenError Error
+ HiLink rplSubError Error
+ HiLink rplArrayError Error
+ HiLink rplListError Error
+ HiLink rplTab Error
+ HiLink rplBinaryError Error
+ HiLink rplOctalError Error
+ HiLink rplDecimalError Error
+ HiLink rplHexadecimalError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rpl"
+
+" vim: ts=8 tw=132
diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim
new file mode 100644
index 000000000..02d43c66d
--- /dev/null
+++ b/runtime/syntax/rst.vim
@@ -0,0 +1,107 @@
+" Vim syntax file
+" Language: reStructuredText Documentation Format
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/rst/
+" Latest Revision: 2004-05-13
+" arch-tag: 6fae09da-d5d4-49d8-aec1-e49008ea21e6
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" todo
+syn keyword rstTodo contained FIXME TODO XXX NOTE
+
+syn case ignore
+
+" comments
+syn region rstComment matchgroup=rstComment start="^\.\.\%( \%([a-z0-9_.-]\+::\)\@!\|$\)" end="^\s\@!" contains=rstTodo
+
+syn cluster rstCruft contains=rstFootnoteLabel,rstCitationLabel,rstSubstitutionLabel,rstInline,rstHyperlinks,rstInternalTarget
+
+" blocks
+" syn region rstBlock matchgroup=rstDelimiter start=":\@<!:$" skip="^$" end="^\s\@!" contains=@rstCruft
+syn region rstBlock matchgroup=rstDelimiter start="::$" skip="^$" end="^\s\@!"
+syn region rstDoctestBlock matchgroup=rstDelimiter start="^>>>\s" end="^$"
+
+" tables
+" TODO: these may actually be a bit too complicated to match correctly and
+" should perhaps be removed. Whon really needs it anyway?
+syn region rstTable transparent start="^\n\s*+[-=+]\+" end="^$" contains=rstTableLines,@rstCruft
+syn match rstTableLines contained "^\s*[|+=-]\+$"
+syn region rstSimpleTable transparent start="^\n\s*\%(=\+\s\+\)\%(=\+\s*\)\+$" end="^$" contains=rstSimpleTableLines,@rstCruft
+syn match rstSimpleTableLines contained "^\s*\%(=\+\s\+\)\%(=\+\s*\)\+$"
+
+" footnotes
+syn region rstFootnote matchgroup=rstDirective start="^\.\. \[\%([#*]\|[0-9]\+\|#[a-z0-9_.-]\+\)\]\s" end="^\s\@!" contains=@rstCruft
+syn match rstFootnoteLabel "\[\%([#*]\|[0-9]\+\|#[a-z0-9_.-]\+\)\]_"
+
+" citations
+syn region rstCitation matchgroup=rstDirective start="^\.\. \[[a-z0-9_.-]\+\]\s" end="^\s\@!" contains=@rstCruft
+syn match rstCitationLabel "\[[a-z0-9_.-]\+\]_"
+
+" directives
+syn region rstDirectiveBody matchgroup=rstDirective start="^\.\. [a-z0-9_.-]\+::" end="^\s\@!"
+
+" substitutions
+syn region rstSubstitution matchgroup=rstDirective start="^\.\. |[a-z0-9_.-]|\s[a-z0-9_.-]\+::\s" end="^\s\@!" contains=@rstCruft
+syn match rstSubstitutionLabel "|[a-z0-9_.-]|"
+
+" inline markup
+syn match rstInline "\*\{1,2}\S\%([^*]*\S\)\=\*\{1,2}"
+syn match rstInline "`\{1,2}\S\%([^`]*\S\)\=`\{1,2}"
+
+" hyperlinks
+syn region rstHyperlinks matchgroup=RstDirective start="^\.\. _[a-z0-9_. -]\+:\s" end="^\s\@!" contains=@rstCruft
+
+syn match rstHyperlinksLabel "`\S\%([^`]*\S\)\=`__\=\>"
+syn match rstHyperlinksLabel "\w\+__\=\>"
+
+" internal targets
+syn match rstInternalTarget "_`\S\%([^`]*\S\)\=`"
+
+" lists
+syn match rstListItem "^:\%(\w\+\s*\)\+:"
+syn match rstListItem "^\s*[-*+]\s\+"
+
+syn sync minlines=50
+
+" 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_rst_syn_inits")
+ if version < 508
+ let did_rst_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rstTodo Todo
+ HiLink rstComment Comment
+ HiLink rstDelimiter Delimiter
+ HiLink rstBlock String
+ HiLink rstDoctestBlock PreProc
+ HiLink rstTableLines Delimiter
+ HiLink rstSimpleTableLines rstTableLines
+ HiLink rstFootnote String
+ HiLink rstFootnoteLabel Identifier
+ HiLink rstCitation String
+ HiLink rstCitationLabel Identifier
+ HiLink rstDirective Keyword
+ HiLink rstDirectiveBody Type
+ HiLink rstSubstitution String
+ HiLink rstSubstitutionLabel Identifier
+ HiLink rstHyperlinks String
+ HiLink rstHyperlinksLabel Identifier
+ HiLink rstListItem Identifier
+ hi def rstInline term=italic cterm=italic gui=italic
+ hi def rstInternalTarget term=italic cterm=italic gui=italic
+ delcommand HiLink
+endif
+
+let b:current_syntax = "rst"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/rtf.vim b/runtime/syntax/rtf.vim
new file mode 100644
index 000000000..8f5ea71a3
--- /dev/null
+++ b/runtime/syntax/rtf.vim
@@ -0,0 +1,88 @@
+" Vim syntax file
+" Language: Rich Text Format
+" "*.rtf" files
+"
+" The Rich Text Format (RTF) Specification is a method of encoding formatted
+" text and graphics for easy transfer between applications.
+" .hlp (windows help files) use compiled rtf files
+" rtf documentation at http://night.primate.wisc.edu/software/RTF/
+"
+" Maintainer: Dominique Stéphan (dominique@mggen.com)
+" URL: http://www.mggen.com/vim/syntax/rtf.zip
+" Last change: 2001 Mai 02
+
+" TODO: render underline, italic, bold
+
+" 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
+
+" case on (all controls must be lower case)
+syn case match
+
+" Control Words
+syn match rtfControlWord "\\[a-z]\+[\-]\=[0-9]*"
+
+" New Control Words (not in the 1987 specifications)
+syn match rtfNewControlWord "\\\*\\[a-z]\+[\-]\=[0-9]*"
+
+" Control Symbol : any \ plus a non alpha symbol, *, \, { and } and '
+syn match rtfControlSymbol "\\[^a-zA-Z\*\{\}\\']"
+
+" { } and \ are special characters, to use them
+" we add a backslash \
+syn match rtfCharacter "\\\\"
+syn match rtfCharacter "\\{"
+syn match rtfCharacter "\\}"
+" Escaped characters (for 8 bytes characters upper than 127)
+syn match rtfCharacter "\\'[A-Za-z0-9][A-Za-z0-9]"
+" Unicode
+syn match rtfUnicodeCharacter "\\u[0-9][0-9]*"
+
+" Color values, we will put this value in Red, Green or Blue
+syn match rtfRed "\\red[0-9][0-9]*"
+syn match rtfGreen "\\green[0-9][0-9]*"
+syn match rtfBlue "\\blue[0-9][0-9]*"
+
+" Some stuff for help files
+syn match rtfFootNote "[#$K+]{\\footnote.*}" contains=rtfControlWord,rtfNewControlWord
+
+" 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_rtf_syntax_inits")
+ if version < 508
+ let did_rtf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+
+ HiLink rtfControlWord Statement
+ HiLink rtfNewControlWord Special
+ HiLink rtfControlSymbol Constant
+ HiLink rtfCharacter Character
+ HiLink rtfUnicodeCharacter SpecialChar
+ HiLink rtfFootNote Comment
+
+ " Define colors for the syntax file
+ hi rtfRed term=underline cterm=underline ctermfg=DarkRed gui=underline guifg=DarkRed
+ hi rtfGreen term=underline cterm=underline ctermfg=DarkGreen gui=underline guifg=DarkGreen
+ hi rtfBlue term=underline cterm=underline ctermfg=DarkBlue gui=underline guifg=DarkBlue
+
+ HiLink rtfRed rtfRed
+ HiLink rtfGreen rtfGreen
+ HiLink rtfBlue rtfBlue
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "rtf"
+
+" vim:ts=8
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
new file mode 100644
index 000000000..02f178d65
--- /dev/null
+++ b/runtime/syntax/ruby.vim
@@ -0,0 +1,285 @@
+" Vim syntax file
+" Language: Ruby
+" Maintainer: Doug Kearns
+" Previous Maintainer: Mirko Nasato
+" Last Change: 2003 May 31
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/ruby.vim
+
+" $Id$
+
+" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
+
+" 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
+
+" Expression Substitution and Backslash Notation
+syn match rubyExprSubst "\\\\\|\(\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\w\)\|\(\\\o\{3}\|\\x\x\{2}\|\\[abefnrstv]\)" contained
+syn match rubyExprSubst "#{[^}]*}" contained
+syn match rubyExprSubst "#[$@]\w\+" contained
+
+" Numbers and ASCII Codes
+syn match rubyNumber "\w\@<!\(?\(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\S\)\)"
+syn match rubyNumber "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>"
+
+" Identifiers - constant, class and instance, global, symbol, iterator, predefined
+syn match rubyLocalVariableOrMethod "[_[:lower:]][_[:alnum:]]*[?!=]\=" transparent contains=NONE
+
+if !exists("ruby_no_identifiers")
+ syn match rubyConstant "\(::\)\=\zs\u\w*"
+ syn match rubyClassVariable "@@\h\w*"
+ syn match rubyInstanceVariable "@\h\w*"
+ syn match rubyGlobalVariable "$\(\h\w*\|-.\)"
+ syn match rubySymbol ":\@<!:\(\$\|@@\=\)\=\h\w*[?!=]\="
+ syn match rubyIterator "|[ ,a-zA-Z0-9_*]\+|"
+
+ syn match rubyPredefinedVariable "$[!"$&'*+,./0:;<=>?@\\_`~1-9]"
+ syn match rubyPredefinedVariable "$-[0FIKadilpvw]"
+ syn match rubyPredefinedVariable "$\(defout\|stderr\|stdin\|stdout\)\>"
+ syn match rubyPredefinedVariable "$\(DEBUG\|FILENAME\|KCODE\|LOAD_PATH\|SAFE\|VERBOSE\)\>"
+ syn match rubyPredefinedConstant "__\(FILE\|LINE\)__\>"
+ syn match rubyPredefinedConstant "\<\(::\)\=\zs\(MatchingData\|NotImplementError\|ARGF\|ARGV\|ENV\)\>"
+ syn match rubyPredefinedConstant "\<\(::\)\=\zs\(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>"
+ syn match rubyPredefinedConstant "\<\(::\)\=\zs\(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>"
+ "Obsolete Global Constants
+ "syn match rubyPredefinedConstant "\<\(::\)\=\zs\(PLATFORM\|RELEASE\|VERSION\)\>"
+endif
+
+"
+" BEGIN Autogenerated Stuff
+"
+" Generalized Regular Expression
+syn region rubyString matchgroup=rubyStringDelimit start="%r!" end="![iomx]*" skip="\\\\\|\\!" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\"" end="\"[iomx]*" skip="\\\\\|\\\"" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r#" end="#[iomx]*" skip="\\\\\|\\#" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\$" end="\$[iomx]*" skip="\\\\\|\\\$" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r%" end="%[iomx]*" skip="\\\\\|\\%" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r&" end="&[iomx]*" skip="\\\\\|\\&" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r'" end="'[iomx]*" skip="\\\\\|\\'" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\*" end="\*[iomx]*" skip="\\\\\|\\\*" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r+" end="+[iomx]*" skip="\\\\\|\\+" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r-" end="-[iomx]*" skip="\\\\\|\\-" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\." end="\.[iomx]*" skip="\\\\\|\\\." contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r/" end="/[iomx]*" skip="\\\\\|\\/" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r:" end=":[iomx]*" skip="\\\\\|\\:" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r;" end=";[iomx]*" skip="\\\\\|\\;" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r=" end="=[iomx]*" skip="\\\\\|\\=" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r?" end="?[iomx]*" skip="\\\\\|\\?" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r@" end="@[iomx]*" skip="\\\\\|\\@" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\\" end="\\[iomx]*" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\^" end="\^[iomx]*" skip="\\\\\|\\\^" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r`" end="`[iomx]*" skip="\\\\\|\\`" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r|" end="|[iomx]*" skip="\\\\\|\\|" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\~" end="\~[iomx]*" skip="\\\\\|\\\~" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=rubyExprSubst fold
+syn region rubyString matchgroup=rubyStringDelimit start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=rubyExprSubst fold
+
+" Generalized Single Quoted String and Array of Strings
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]!" end="!" skip="\\\\\|\\!"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\"" end="\"" skip="\\\\\|\\\""
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]#" end="#" skip="\\\\\|\\#"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\$" end="\$" skip="\\\\\|\\\$"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]%" end="%" skip="\\\\\|\\%"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]&" end="&" skip="\\\\\|\\&"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]'" end="'" skip="\\\\\|\\'"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\*" end="\*" skip="\\\\\|\\\*"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]+" end="+" skip="\\\\\|\\+"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]-" end="-" skip="\\\\\|\\-"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\." end="\." skip="\\\\\|\\\."
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]/" end="/" skip="\\\\\|\\/"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]:" end=":" skip="\\\\\|\\:"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq];" end=";" skip="\\\\\|\\;"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]=" end="=" skip="\\\\\|\\="
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]?" end="?" skip="\\\\\|\\?"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]@" end="@" skip="\\\\\|\\@"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\\" end="\\"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\^" end="\^" skip="\\\\\|\\\^"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]`" end="`" skip="\\\\\|\\`"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]|" end="|" skip="\\\\\|\\|"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\~" end="\~" skip="\\\\\|\\\~"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]{" end="}" skip="\\\\\|\\}"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]<" end=">" skip="\\\\\|\\>"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq]\[" end="\]" skip="\\\\\|\\\]"
+syn region rubyString matchgroup=rubyStringDelimit start="%[wq](" end=")" skip="\\\\\|\\)"
+
+" Generalized Double Quoted String and Shell Command Output
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=!" end="!" skip="\\\\\|\\!" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\"" end="\"" skip="\\\\\|\\\"" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=#" end="#" skip="\\\\\|\\#" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\$" end="\$" skip="\\\\\|\\\$" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=%" end="%" skip="\\\\\|\\%" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=&" end="&" skip="\\\\\|\\&" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\='" end="'" skip="\\\\\|\\'" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\*" end="\*" skip="\\\\\|\\\*" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=+" end="+" skip="\\\\\|\\+" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=-" end="-" skip="\\\\\|\\-" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\." end="\." skip="\\\\\|\\\." contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=/" end="/" skip="\\\\\|\\/" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=:" end=":" skip="\\\\\|\\:" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=;" end=";" skip="\\\\\|\\;" contains=rubyExprSubst
+"syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\==" end="=" skip="\\\\\|\\=" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]=" end="=" skip="\\\\\|\\=" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=?" end="?" skip="\\\\\|\\?" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=@" end="@" skip="\\\\\|\\@" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\\" end="\\" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\^" end="\^" skip="\\\\\|\\\^" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=`" end="`" skip="\\\\\|\\`" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=|" end="|" skip="\\\\\|\\|" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\~" end="\~" skip="\\\\\|\\\~" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\={" end="}" skip="\\\\\|\\}" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=<" end=">" skip="\\\\\|\\>" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=\[" end="\]" skip="\\\\\|\\\]" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="%[Qx]\=(" end=")" skip="\\\\\|\\)" contains=rubyExprSubst
+
+" Normal String and Shell Command Output
+syn region rubyString matchgroup=rubyStringDelimit start="\"" end="\"" skip="\\\\\|\\\"" contains=rubyExprSubst
+syn region rubyString matchgroup=rubyStringDelimit start="'" end="'" skip="\\\\\|\\'"
+syn region rubyString matchgroup=rubyStringDelimit start="`" end="`" skip="\\\\\|\\`" contains=rubyExprSubst
+"
+" END Autogenerated Stuff
+"
+
+" Normal Regular Expression
+syn region rubyString matchgroup=rubyStringDelimit start="^\s*/" start="\<and\s*/"lc=3 start="\<or\s*/"lc=2 start="\<while\s*/"lc=5 start="\<until\s*/"lc=5 start="\<unless\s*/"lc=6 start="\<if\s*/"lc=2 start="\<elsif\s*/"lc=5 start="\<when\s*/"lc=4 start="[\~=!|&(,[]\s*/"lc=1 end="/[iomx]*" skip="\\\\\|\\/" contains=rubyExprSubst
+
+" Here Document
+if version < 600
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<-\(\u\{3,}\|'\u\{3,}'\|"\u\{3,}"\|`\u\{3,}`\)+hs=s+2 end=+^\s*\u\{3,}$+ fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<-\(EOF\|'EOF'\|"EOF"\|`EOF`\)+hs=s+2 end=+^\s*EOF$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<-\(EOS\|'EOS'\|"EOS"\|`EOS`\)+hs=s+2 end=+^\s*EOS$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<\(\u\{3,}\|'\u\{3,}'\|"\u\{3,}"\|`\u\{3,}`\)+hs=s+2 end=+^\u\{3,}$+ fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<\(EOF\|'EOF'\|"EOF"\|`EOF`\)+hs=s+2 end=+^EOF$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+<<\(EOS\|'EOS'\|"EOS"\|`EOS`\)+hs=s+2 end=+^EOS$+ contains=rubyExprSubst fold
+else
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<\z(\h\w*\)\s*$+hs=s+2 end=+^\z1$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<"\z(.*\)"\s*$+hs=s+2 end=+^\z1$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<'\z(.*\)'\s*$+hs=s+2 end=+^\z1$+ fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<`\z(.*\)`\s*$+hs=s+2 end=+^\z1$+ contains=rubyExprSubst fold
+
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<-\z(\h\w*\)\s*$+hs=s+3 end=+^\s*\z1$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<-"\z(.*\)"\s*$+hs=s+3 end=+^\s*\z1$+ contains=rubyExprSubst fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<-'\z(.*\)'\s*$+hs=s+3 end=+^\s*\z1$+ fold
+ syn region rubyString matchgroup=rubyStringDelimit start=+\(class\s*\)\@<!<<-`\z(.*\)`\s*$+hs=s+3 end=+^\s*\z1$+ contains=rubyExprSubst fold
+endif
+
+" Expensive Mode - colorize *end* according to opening statement
+if !exists("ruby_no_expensive")
+ syn region rubyFunction matchgroup=rubyDefine start="^\s*def\s" matchgroup=NONE end="\ze\(\s\|(\|;\|$\)" skip="\.\|\(::\)" oneline fold
+ syn region rubyClassOrModule matchgroup=rubyDefine start="^\s*\(class\|module\)\s" end="<\|$\|;\|\>"he=e-1 oneline fold
+
+ syn region rubyBlock start="^\s*def\s\+"rs=s matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,rubyExprSubst,rubyTodo nextgroup=rubyFunction fold
+ syn region rubyBlock start="^\s*\(class\|module\)\>"rs=s matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,rubyExprSubst,rubyTodo nextgroup=rubyClassOrModule fold
+
+ " modifiers + redundant *do*
+ syn match rubyControl "\<\(if\|unless\|while\|until\|do\)\>"
+
+ " *do* requiring *end*
+ syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,rubyExprSubst,rubyTodo fold
+
+ " *{* requiring *}*
+ syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,rubyExprSubst,rubyTodo fold
+
+ " statements without *do*
+ syn region rubyNoDoBlock matchgroup=rubyControl start="\<\(case\|begin\)\>" start="^\s*\(if\|unless\)\>" start=";\s*\(if\|unless\)\>"hs=s+1 end="\<end\>" contains=ALLBUT,rubyExprSubst,rubyTodo fold
+
+ " statement with optional *do*
+ syn region rubyOptDoBlock matchgroup=rubyControl start="\<for\>" start="^\s*\(while\|until\)\>" start=";\s*\(while\|until\)\>"hs=s+1 end="\<end\>" contains=ALLBUT,rubyExprSubst,rubyTodo,rubyDoBlock,rubyCurlyBlock fold
+
+ if !exists("ruby_minlines")
+ let ruby_minlines = 50
+ endif
+ exec "syn sync minlines=" . ruby_minlines
+
+else " not Expensive
+ syn region rubyFunction matchgroup=rubyControl start="^\s*def\s" matchgroup=NONE end="\ze\(\s\|(\|;\|$\)" skip="\.\|\(::\)" oneline fold
+ syn region rubyClassOrModule matchgroup=rubyControl start="^\s*\(class\|module\)\s" end="<\|$\|;\|\>"he=e-1 oneline fold
+ syn keyword rubyControl case begin do for if unless while until end
+endif " Expensive?
+
+" Keywords
+syn keyword rubyControl then else elsif when ensure rescue
+syn keyword rubyControl and or not in loop
+syn keyword rubyControl break redo retry next return
+syn match rubyKeyword "\<defined?"
+syn keyword rubyKeyword alias lambda proc super undef yield
+syn match rubyInclude "^\s*include\>"
+syn keyword rubyInclude load require
+syn keyword rubyTodo FIXME NOTE TODO XXX contained
+syn keyword rubyBoolean true false self nil
+syn keyword rubyException raise fail catch throw
+syn keyword rubyBeginEnd BEGIN END
+
+" Comments and Documentation
+if version < 600
+ syn match rubySharpBang "#!.*"
+else
+ syn match rubySharpBang "\%^#!.*"
+endif
+syn match rubyComment "#.*" contains=rubyTodo
+syn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubyTodo fold
+
+" Note: this is a hack to prevent 'keywords' being highlighted as such when used as method names
+syn match rubyKeywordAsMethod "\.\@<!\.\(\s*\n\s*\)*\(alias\|and\|begin\|break\|case\|catch\|class\|def\|do\|elsif\)\>" transparent contains=NONE
+syn match rubyKeywordAsMethod "\.\@<!\.\(\s*\n\s*\)*\(else\|fail\|false\|ensure\|for\|end\|if\|in\|include\|lambda\)\>" transparent contains=NONE
+syn match rubyKeywordAsMethod "\.\@<!\.\(\s*\n\s*\)*\(load\|loop\|module\|next\|nil\|not\|or\|proc\|raise\|require\)\>" transparent contains=NONE
+syn match rubyKeywordAsMethod "\.\@<!\.\(\s*\n\s*\)*\(redo\|rescue\|retry\|return\|self\|super\|then\|throw\|true\|unless\)\>" transparent contains=NONE
+syn match rubyKeywordAsMethod "\.\@<!\.\(\s*\n\s*\)*\(undef\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
+
+" __END__ Directive
+syn region rubyData matchgroup=rubyDataDirective start="^__END__$" matchgroup=NONE end="." skip="."
+
+" 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_ruby_syntax_inits")
+ if version < 508
+ let did_ruby_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink rubyDefine Define
+ HiLink rubyFunction Function
+ HiLink rubyControl Statement
+ HiLink rubyInclude Include
+ HiLink rubyNumber Number
+ HiLink rubyBoolean Boolean
+ HiLink rubyException Exception
+ HiLink rubyClassOrModule Type
+ HiLink rubyIdentifier Identifier
+ HiLink rubyClassVariable rubyIdentifier
+ HiLink rubyConstant rubyIdentifier
+ HiLink rubyGlobalVariable rubyIdentifier
+ HiLink rubyIterator rubyIdentifier
+ HiLink rubyInstanceVariable rubyIdentifier
+ HiLink rubyPredefinedIdentifier rubyIdentifier
+ HiLink rubyPredefinedConstant rubyPredefinedIdentifier
+ HiLink rubyPredefinedVariable rubyPredefinedIdentifier
+ HiLink rubySymbol rubyIdentifier
+ HiLink rubySharpBang PreProc
+ HiLink rubyKeyword Keyword
+ HiLink rubyBeginEnd Statement
+
+ HiLink rubyString String
+ HiLink rubyStringDelimit Delimiter
+ HiLink rubyExprSubst Special
+
+ HiLink rubyComment Comment
+ HiLink rubyDocumentation Comment
+ HiLink rubyTodo Todo
+ HiLink rubyData Comment
+ HiLink rubyDataDirective Delimiter
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "ruby"
+
+" vim: nowrap tabstop=8
diff --git a/runtime/syntax/samba.vim b/runtime/syntax/samba.vim
new file mode 100644
index 000000000..10f7edce6
--- /dev/null
+++ b/runtime/syntax/samba.vim
@@ -0,0 +1,117 @@
+" Vim syntax file
+" Language: samba configuration files (smb.conf)
+" Maintainer: Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+" URL: http://rgarciasuarez.free.fr/vim/syntax/samba.vim
+" Last change: 2002 May 06
+
+" Don't forget to run your config file through testparm(1)!
+
+" 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
+
+syn match sambaParameter /^[a-zA-Z \t]\+=/ contains=sambaKeyword
+syn match sambaSection /^\s*\[[a-zA-Z0-9_\-. ]\+\]/
+syn match sambaMacro /%[SPugUGHvhmLMNpRdaIT]/
+syn match sambaMacro /%$([a-zA-Z0-9_]\+)/
+syn match sambaComment /^\s*[;#].*/
+syn match sambaContinue /\\$/
+syn keyword sambaBoolean true false yes no
+
+" Keywords for Samba 2.0.5a
+syn keyword sambaKeyword contained account acl action add address admin aliases
+syn keyword sambaKeyword contained allow alternate always announce anonymous
+syn keyword sambaKeyword contained archive as auto available bind blocking
+syn keyword sambaKeyword contained bmpx break browsable browse browseable ca
+syn keyword sambaKeyword contained cache case casesignames cert certDir
+syn keyword sambaKeyword contained certFile change char character chars chat
+syn keyword sambaKeyword contained ciphers client clientcert code coding
+syn keyword sambaKeyword contained command comment compatibility config
+syn keyword sambaKeyword contained connections contention controller copy
+syn keyword sambaKeyword contained create deadtime debug debuglevel default
+syn keyword sambaKeyword contained delete deny descend dfree dir directory
+syn keyword sambaKeyword contained disk dns domain domains dont dos dot drive
+syn keyword sambaKeyword contained driver encrypt encrypted equiv exec fake
+syn keyword sambaKeyword contained file files filetime filetimes filter follow
+syn keyword sambaKeyword contained force fstype getwd group groups guest
+syn keyword sambaKeyword contained hidden hide home homedir hosts include
+syn keyword sambaKeyword contained interfaces interval invalid keepalive
+syn keyword sambaKeyword contained kernel key ldap length level level2 limit
+syn keyword sambaKeyword contained links list lm load local location lock
+syn keyword sambaKeyword contained locking locks log logon logons logs lppause
+syn keyword sambaKeyword contained lpq lpresume lprm machine magic mangle
+syn keyword sambaKeyword contained mangled mangling map mask master max mem
+syn keyword sambaKeyword contained message min mode modes mux name names
+syn keyword sambaKeyword contained netbios nis notify nt null offset ok ole
+syn keyword sambaKeyword contained only open oplock oplocks options order os
+syn keyword sambaKeyword contained output packet page panic passwd password
+syn keyword sambaKeyword contained passwords path permissions pipe port
+syn keyword sambaKeyword contained postexec postscript prediction preexec
+syn keyword sambaKeyword contained prefered preferred preload preserve print
+syn keyword sambaKeyword contained printable printcap printer printers
+syn keyword sambaKeyword contained printing program protocol proxy public
+syn keyword sambaKeyword contained queuepause queueresume raw read readonly
+syn keyword sambaKeyword contained realname remote require resign resolution
+syn keyword sambaKeyword contained resolve restrict revalidate rhosts root
+syn keyword sambaKeyword contained script security sensitive server servercert
+syn keyword sambaKeyword contained service services set share shared short
+syn keyword sambaKeyword contained size smb smbrun socket space ssl stack stat
+syn keyword sambaKeyword contained status strict string strip suffix support
+syn keyword sambaKeyword contained symlinks sync syslog system time timeout
+syn keyword sambaKeyword contained times timestamp to trusted ttl unix update
+syn keyword sambaKeyword contained use user username users valid version veto
+syn keyword sambaKeyword contained volume wait wide wins workgroup writable
+syn keyword sambaKeyword contained write writeable xmit
+
+" New keywords for Samba 2.0.6
+syn keyword sambaKeyword contained hook hires pid uid close rootpreexec
+
+" New keywords for Samba 2.0.7
+syn keyword sambaKeyword contained utmp wtmp hostname consolidate
+syn keyword sambaKeyword contained inherit source environment
+
+" New keywords for Samba 2.2.0
+syn keyword sambaKeyword contained addprinter auth browsing deleteprinter
+syn keyword sambaKeyword contained enhanced enumports filemode gid host jobs
+syn keyword sambaKeyword contained lanman msdfs object os2 posix processes
+syn keyword sambaKeyword contained scope separator shell show smbd template
+syn keyword sambaKeyword contained total vfs winbind wizard
+
+" New keywords for Samba 2.2.1
+syn keyword sambaKeyword contained large obey pam readwrite restrictions
+syn keyword sambaKeyword contained unreadable
+
+" New keywords for Samba 2.2.2 - 2.2.4
+syn keyword sambaKeyword contained acls allocate bytes count csc devmode
+syn keyword sambaKeyword contained disable dn egd entropy enum extensions mmap
+syn keyword sambaKeyword contained policy spin spoolss
+
+" 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_samba_syn_inits")
+ if version < 508
+ let did_samba_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink sambaParameter Normal
+ HiLink sambaKeyword Type
+ HiLink sambaSection Statement
+ HiLink sambaMacro PreProc
+ HiLink sambaComment Comment
+ HiLink sambaContinue Operator
+ HiLink sambaBoolean Constant
+ delcommand HiLink
+endif
+
+let b:current_syntax = "samba"
+
+" vim: ts=8
diff --git a/runtime/syntax/sas.vim b/runtime/syntax/sas.vim
new file mode 100644
index 000000000..68e8788e2
--- /dev/null
+++ b/runtime/syntax/sas.vim
@@ -0,0 +1,236 @@
+" Vim syntax file
+" Language: SAS
+" Maintainer: James Kidd <james.kidd@covance.com>
+" Last Change: 02 Jun 2003
+" Added highlighting for additional keywords and such;
+" Attempted to match SAS default syntax colors;
+" Changed syncing so it doesn't lose colors on large blocks;
+" Much thanks to Bob Heckel for knowledgeable tweaking.
+" 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
+
+syn region sasString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region sasString start=+'+ skip=+\\\\\|\\"+ end=+'+
+
+" Want region from 'cards;' to ';' to be captured (Bob Heckel)
+syn region sasCards start="^\s*CARDS.*" end="^\s*;\s*$"
+syn region sasCards start="^\s*DATALINES.*" end="^\s*;\s*$"
+
+syn match sasNumber "-\=\<\d*\.\=[0-9_]\>"
+
+syn region sasComment start="/\*" end="\*/" contains=sasTodo
+" Ignore misleading //JCL SYNTAX... (Bob Heckel)
+syn region sasComment start="[^/][^/]/\*" end="\*/" contains=sasTodo
+
+" Allow highlighting of embedded TODOs (Bob Heckel)
+syn match sasComment "^\s*\*.*;" contains=sasTodo
+
+" Allow highlighting of embedded TODOs (Bob Heckel)
+syn match sasComment ";\s*\*.*;"hs=s+1 contains=sasTodo
+
+" Handle macro comments too (Bob Heckel).
+syn match sasComment "^\s*%*\*.*;" contains=sasTodo
+
+" This line defines macro variables in code. HiLink at end of file
+" defines the color scheme. Begin region with ampersand and end with
+" any non-word character offset by -1; put ampersand in the skip list
+" just in case it is used to concatenate macro variable values.
+
+" Thanks to ronald höllwarth for this fix to an intra-versioning
+" problem with this little feature
+
+if version < 600
+ syn region sasMacroVar start="\&" skip="[_&]" end="\W"he=e-1
+else " for the older Vim's just do it their way ...
+ syn region sasMacroVar start="&" skip="[_&]" end="\W"he=e-1
+endif
+
+
+" I dont think specific PROCs need to be listed if use this line (Bob Heckel).
+syn match sasProc "^\s*PROC \w\+"
+syn keyword sasStep RUN QUIT DATA
+
+
+" Base SAS Procs - version 8.1
+
+syn keyword sasConditional DO ELSE END IF THEN UNTIL WHILE
+
+syn keyword sasStatement ABORT ARRAY ATTRIB BY CALL CARDS CARDS4 CATNAME
+syn keyword sasStatement CONTINUE DATALINES DATALINES4 DELETE DISPLAY
+syn keyword sasStatement DM DROP ENDSAS ERROR FILE FILENAME FOOTNOTE
+syn keyword sasStatement FORMAT GOTO INFILE INFORMAT INPUT KEEP
+syn keyword sasStatement LABEL LEAVE LENGTH LIBNAME LINK LIST LOSTCARD
+syn keyword sasStatement MERGE MISSING MODIFY OPTIONS OUTPUT PAGE
+syn keyword sasStatement PUT REDIRECT REMOVE RENAME REPLACE RETAIN
+syn keyword sasStatement RETURN SELECT SET SKIP STARTSAS STOP TITLE
+syn keyword sasStatement UPDATE WAITSAS WHERE WINDOW X SYSTASK
+
+" Keywords that are used in Proc SQL
+" I left them as statements because SAS's enhanced editor highlights
+" them the same as normal statements used in data steps (Jim Kidd)
+
+syn keyword sasStatement ADD AND ALTER AS CASCADE CHECK CREATE
+syn keyword sasStatement DELETE DESCRIBE DISTINCT DROP FOREIGN
+syn keyword sasStatement FROM GROUP HAVING INDEX INSERT INTO IN
+syn keyword sasStatement KEY LIKE MESSAGE MODIFY MSGTYPE NOT
+syn keyword sasStatement NULL ON OR ORDER PRIMARY REFERENCES
+syn keyword sasStatement RESET RESTRICT SELECT SET TABLE
+syn keyword sasStatement UNIQUE UPDATE VALIDATE VIEW WHERE
+
+
+syn match sasStatement "FOOTNOTE\d" "TITLE\d"
+
+syn match sasMacro "%BQUOTE" "%NRBQUOTE" "%CMPRES" "%QCMPRES"
+syn match sasMacro "%COMPSTOR" "%DATATYP" "%DISPLAY" "%DO"
+syn match sasMacro "%ELSE" "%END" "%EVAL" "%GLOBAL"
+syn match sasMacro "%GOTO" "%IF" "%INDEX" "%INPUT"
+syn match sasMacro "%KEYDEF" "%LABEL" "%LEFT" "%LENGTH"
+syn match sasMacro "%LET" "%LOCAL" "%LOWCASE" "%MACRO"
+syn match sasMacro "%MEND" "%NRBQUOTE" "%NRQUOTE" "%NRSTR"
+syn match sasMacro "%PUT" "%QCMPRES" "%QLEFT" "%QLOWCASE"
+syn match sasMacro "%QSCAN" "%QSUBSTR" "%QSYSFUNC" "%QTRIM"
+syn match sasMacro "%QUOTE" "%QUPCASE" "%SCAN" "%STR"
+syn match sasMacro "%SUBSTR" "%SUPERQ" "%SYSCALL" "%SYSEVALF"
+syn match sasMacro "%SYSEXEC" "%SYSFUNC" "%SYSGET" "%SYSLPUT"
+syn match sasMacro "%SYSPROD" "%SYSRC" "%SYSRPUT" "%THEN"
+syn match sasMacro "%TO" "%TRIM" "%UNQUOTE" "%UNTIL"
+syn match sasMacro "%UPCASE" "%VERIFY" "%WHILE" "%WINDOW"
+
+" SAS Functions
+
+syn keyword sasFunction ABS ADDR AIRY ARCOS ARSIN ATAN ATTRC ATTRN
+syn keyword sasFunction BAND BETAINV BLSHIFT BNOT BOR BRSHIFT BXOR
+syn keyword sasFunction BYTE CDF CEIL CEXIST CINV CLOSE CNONCT COLLATE
+syn keyword sasFunction COMPBL COMPOUND COMPRESS COS COSH CSS CUROBS
+syn keyword sasFunction CV DACCDB DACCDBSL DACCSL DACCSYD DACCTAB
+syn keyword sasFunction DAIRY DATE DATEJUL DATEPART DATETIME DAY
+syn keyword sasFunction DCLOSE DEPDB DEPDBSL DEPDBSL DEPSL DEPSL
+syn keyword sasFunction DEPSYD DEPSYD DEPTAB DEPTAB DEQUOTE DHMS
+syn keyword sasFunction DIF DIGAMMA DIM DINFO DNUM DOPEN DOPTNAME
+syn keyword sasFunction DOPTNUM DREAD DROPNOTE DSNAME ERF ERFC EXIST
+syn keyword sasFunction EXP FAPPEND FCLOSE FCOL FDELETE FETCH FETCHOBS
+syn keyword sasFunction FEXIST FGET FILEEXIST FILENAME FILEREF FINFO
+syn keyword sasFunction FINV FIPNAME FIPNAMEL FIPSTATE FLOOR FNONCT
+syn keyword sasFunction FNOTE FOPEN FOPTNAME FOPTNUM FPOINT FPOS
+syn keyword sasFunction FPUT FREAD FREWIND FRLEN FSEP FUZZ FWRITE
+syn keyword sasFunction GAMINV GAMMA GETOPTION GETVARC GETVARN HBOUND
+syn keyword sasFunction HMS HOSTHELP HOUR IBESSEL INDEX INDEXC
+syn keyword sasFunction INDEXW INPUT INPUTC INPUTN INT INTCK INTNX
+syn keyword sasFunction INTRR IRR JBESSEL JULDATE KURTOSIS LAG LBOUND
+syn keyword sasFunction LEFT LENGTH LGAMMA LIBNAME LIBREF LOG LOG10
+syn keyword sasFunction LOG2 LOGPDF LOGPMF LOGSDF LOWCASE MAX MDY
+syn keyword sasFunction MEAN MIN MINUTE MOD MONTH MOPEN MORT N
+syn keyword sasFunction NETPV NMISS NORMAL NOTE NPV OPEN ORDINAL
+syn keyword sasFunction PATHNAME PDF PEEK PEEKC PMF POINT POISSON POKE
+syn keyword sasFunction PROBBETA PROBBNML PROBCHI PROBF PROBGAM
+syn keyword sasFunction PROBHYPR PROBIT PROBNEGB PROBNORM PROBT PUT
+syn keyword sasFunction PUTC PUTN QTR QUOTE RANBIN RANCAU RANEXP
+syn keyword sasFunction RANGAM RANGE RANK RANNOR RANPOI RANTBL RANTRI
+syn keyword sasFunction RANUNI REPEAT RESOLVE REVERSE REWIND RIGHT
+syn keyword sasFunction ROUND SAVING SCAN SDF SECOND SIGN SIN SINH
+syn keyword sasFunction SKEWNESS SOUNDEX SPEDIS SQRT STD STDERR STFIPS
+syn keyword sasFunction STNAME STNAMEL SUBSTR SUM SYMGET SYSGET SYSMSG
+syn keyword sasFunction SYSPROD SYSRC SYSTEM TAN TANH TIME TIMEPART
+syn keyword sasFunction TINV TNONCT TODAY TRANSLATE TRANWRD TRIGAMMA
+syn keyword sasFunction TRIM TRIMN TRUNC UNIFORM UPCASE USS VAR
+syn keyword sasFunction VARFMT VARINFMT VARLABEL VARLEN VARNAME
+syn keyword sasFunction VARNUM VARRAY VARRAYX VARTYPE VERIFY VFORMAT
+syn keyword sasFunction VFORMATD VFORMATDX VFORMATN VFORMATNX VFORMATW
+syn keyword sasFunction VFORMATWX VFORMATX VINARRAY VINARRAYX VINFORMAT
+syn keyword sasFunction VINFORMATD VINFORMATDX VINFORMATN VINFORMATNX
+syn keyword sasFunction VINFORMATW VINFORMATWX VINFORMATX VLABEL
+syn keyword sasFunction VLABELX VLENGTH VLENGTHX VNAME VNAMEX VTYPE
+syn keyword sasFunction VTYPEX WEEKDAY YEAR YYQ ZIPFIPS ZIPNAME ZIPNAMEL
+syn keyword sasFunction ZIPSTATE
+
+" Handy settings for using vim with log files
+syn keyword sasLogMsg NOTE
+syn keyword sasWarnMsg WARNING
+syn keyword sasErrMsg ERROR
+
+" Always contained in a comment (Bob Heckel)
+syn keyword sasTodo TODO TBD FIXME contained
+
+" These don't fit anywhere else (Bob Heckel).
+syn match sasUnderscore "_NULL_"
+syn match sasUnderscore "_INFILE_"
+syn match sasUnderscore "_N_"
+syn match sasUnderscore "_WEBOUT_"
+syn match sasUnderscore "_NUMERIC_"
+syn match sasUnderscore "_CHARACTER_"
+syn match sasUnderscore "_ALL_"
+
+" End of SAS Functions
+
+" 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_sas_syntax_inits")
+ if version < 508
+ let did_sas_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Default sas enhanced editor color syntax
+ hi sComment term=bold cterm=NONE ctermfg=Green ctermbg=Black gui=NONE guifg=DarkGreen guibg=White
+ hi sCard term=bold cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Black guibg=LightYellow
+ hi sDate_Time term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White
+ hi sKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White
+ hi sFmtInfmt term=NONE cterm=NONE ctermfg=LightGreen ctermbg=Black gui=NONE guifg=SeaGreen guibg=White
+ hi sString term=NONE cterm=NONE ctermfg=Magenta ctermbg=Black gui=NONE guifg=Purple guibg=White
+ hi sText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
+ hi sNumber term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White
+ hi sProc term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
+ hi sSection term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
+ hi mDefine term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
+ hi mKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White
+ hi mReference term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Blue guibg=White
+ hi mSection term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
+ hi mText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
+
+" Colors that closely match SAS log colors for default color scheme
+ hi lError term=NONE cterm=NONE ctermfg=Red ctermbg=Black gui=none guifg=Red guibg=White
+ hi lWarning term=NONE cterm=NONE ctermfg=Green ctermbg=Black gui=none guifg=Green guibg=White
+ hi lNote term=NONE cterm=NONE ctermfg=Cyan ctermbg=Black gui=none guifg=Blue guibg=White
+
+
+ " Special hilighting for the SAS proc section
+
+ HiLink sasComment sComment
+ HiLink sasConditional sKeyword
+ HiLink sasStep sSection
+ HiLink sasFunction sKeyword
+ HiLink sasMacro mKeyword
+ HiLink sasMacroVar NonText
+ HiLink sasNumber sNumber
+ HiLink sasStatement sKeyword
+ HiLink sasString sString
+ HiLink sasProc sProc
+ " (Bob Heckel)
+ HiLink sasTodo Todo
+ HiLink sasErrMsg lError
+ HiLink sasWarnMsg lWarning
+ HiLink sasLogMsg lNote
+ HiLink sasCards sCard
+ " (Bob Heckel)
+ HiLink sasUnderscore PreProc
+ delcommand HiLink
+endif
+
+" Syncronize from beginning to keep large blocks from losing
+" syntax coloring while moving through code.
+syn sync fromstart
+
+let b:current_syntax = "sas"
+
+" vim: ts=8
diff --git a/runtime/syntax/sather.vim b/runtime/syntax/sather.vim
new file mode 100644
index 000000000..759591bf8
--- /dev/null
+++ b/runtime/syntax/sather.vim
@@ -0,0 +1,105 @@
+" Vim syntax file
+" Language: Sather/pSather
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/sather.vim
+" Last Change: 2003 May 11
+
+" Sather is a OO-language developped at the International Computer Science
+" Institute (ICSI) in Berkeley, CA. pSather is a parallel extension to Sather.
+" Homepage: http://www.icsi.berkeley.edu/~sather
+" Sather files use .sa as suffix
+
+" 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
+
+" keyword definitions
+syn keyword satherExternal extern
+syn keyword satherBranch break continue
+syn keyword satherLabel when then
+syn keyword satherConditional if else elsif end case typecase assert with
+syn match satherConditional "near$"
+syn match satherConditional "far$"
+syn match satherConditional "near *[^(]"he=e-1
+syn match satherConditional "far *[^(]"he=e-1
+syn keyword satherSynchronize lock guard sync
+syn keyword satherRepeat loop parloop do
+syn match satherRepeat "while!"
+syn match satherRepeat "break!"
+syn match satherRepeat "until!"
+syn keyword satherBoolValue true false
+syn keyword satherValue self here cluster
+syn keyword satherOperator new "== != & ^ | && ||
+syn keyword satherOperator and or not
+syn match satherOperator "[#!]"
+syn match satherOperator ":-"
+syn keyword satherType void attr where
+syn match satherType "near *("he=e-1
+syn match satherType "far *("he=e-1
+syn keyword satherStatement return
+syn keyword satherStorageClass static const
+syn keyword satherExceptions try raise catch
+syn keyword satherMethodDecl is pre post
+syn keyword satherClassDecl abstract value class include
+syn keyword satherScopeDecl public private readonly
+
+
+syn match satherSpecial contained "\\\d\d\d\|\\."
+syn region satherString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=satherSpecial
+syn match satherCharacter "'[^\\]'"
+syn match satherSpecialCharacter "'\\.'"
+syn match satherNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
+syn match satherCommentSkip contained "^\s*\*\($\|\s\+\)"
+syn region satherComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+$\|"+ contains=satherSpecial
+syn match satherComment "--.*" contains=satherComment2String,satherCharacter,satherNumber
+
+
+syn sync ccomment satherComment
+
+" 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_sather_syn_inits")
+ if version < 508
+ let did_sather_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink satherBranch satherStatement
+ HiLink satherLabel satherStatement
+ HiLink satherConditional satherStatement
+ HiLink satherSynchronize satherStatement
+ HiLink satherRepeat satherStatement
+ HiLink satherExceptions satherStatement
+ HiLink satherStorageClass satherDeclarative
+ HiLink satherMethodDecl satherDeclarative
+ HiLink satherClassDecl satherDeclarative
+ HiLink satherScopeDecl satherDeclarative
+ HiLink satherBoolValue satherValue
+ HiLink satherSpecial satherValue
+ HiLink satherString satherValue
+ HiLink satherCharacter satherValue
+ HiLink satherSpecialCharacter satherValue
+ HiLink satherNumber satherValue
+ HiLink satherStatement Statement
+ HiLink satherOperator Statement
+ HiLink satherComment Comment
+ HiLink satherType Type
+ HiLink satherValue String
+ HiLink satherString String
+ HiLink satherSpecial String
+ HiLink satherCharacter String
+ HiLink satherDeclarative Type
+ HiLink satherExternal PreCondit
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sather"
+
+" vim: ts=8
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
new file mode 100644
index 000000000..d3de35b6b
--- /dev/null
+++ b/runtime/syntax/scheme.vim
@@ -0,0 +1,189 @@
+" Vim syntax file
+" Language: Scheme (R5RS)
+" Maintainer: Dirk van Deun <dirk@igwe.vub.ac.be>
+" Last Change: April 30, 1998
+
+" 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.
+
+" Suggestions and bug reports are solicited by the author.
+
+" Initializing:
+
+" 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
+
+" Fascist highlighting: everything that doesn't fit the rules is an error...
+
+syn match schemeError oneline ![^ \t()";]*!
+syn match schemeError oneline ")"
+
+" Quoted and backquoted stuff
+
+syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+" R5RS Scheme Functions and Syntax:
+
+if version < 600
+ set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
+else
+ setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
+endif
+
+syn keyword schemeSyntax lambda and or if cond case define let let* letrec
+syn keyword schemeSyntax begin do delay set! else =>
+syn keyword schemeSyntax quote quasiquote unquote unquote-splicing
+syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules
+
+syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
+syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
+syn keyword schemeFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
+syn keyword schemeFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
+syn keyword schemeFunc cddaar cddadr cdddar cddddr null? list? list length
+syn keyword schemeFunc append reverse list-ref memq memv member assq assv assoc
+syn keyword schemeFunc symbol? symbol->string string->symbol number? complex?
+syn keyword schemeFunc real? rational? integer? exact? inexact? = < > <= >=
+syn keyword schemeFunc zero? positive? negative? odd? even? max min + * - / abs
+syn keyword schemeFunc quotient remainder modulo gcd lcm numerator denominator
+syn keyword schemeFunc floor ceiling truncate round rationalize exp log sin cos
+syn keyword schemeFunc tan asin acos atan sqrt expt make-rectangular make-polar
+syn keyword schemeFunc real-part imag-part magnitude angle exact->inexact
+syn keyword schemeFunc inexact->exact number->string string->number char=?
+syn keyword schemeFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
+syn keyword schemeFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
+syn keyword schemeFunc char-numeric? char-whitespace? char-upper-case?
+syn keyword schemeFunc char-lower-case?
+syn keyword schemeFunc char->integer integer->char char-upcase char-downcase
+syn keyword schemeFunc string? make-string string string-length string-ref
+syn keyword schemeFunc string-set! string=? string-ci=? string<? string-ci<?
+syn keyword schemeFunc string>? string-ci>? string<=? string-ci<=? string>=?
+syn keyword schemeFunc string-ci>=? substring string-append vector? make-vector
+syn keyword schemeFunc vector vector-length vector-ref vector-set! procedure?
+syn keyword schemeFunc apply map for-each call-with-current-continuation
+syn keyword schemeFunc call-with-input-file call-with-output-file input-port?
+syn keyword schemeFunc output-port? current-input-port current-output-port
+syn keyword schemeFunc open-input-file open-output-file close-input-port
+syn keyword schemeFunc close-output-port eof-object? read read-char peek-char
+syn keyword schemeFunc write display newline write-char call/cc
+syn keyword schemeFunc list-tail string->list list->string string-copy
+syn keyword schemeFunc string-fill! vector->list list->vector vector-fill!
+syn keyword schemeFunc force with-input-from-file with-output-to-file
+syn keyword schemeFunc char-ready? load transcript-on transcript-off eval
+syn keyword schemeFunc dynamic-wind port? values call-with-values
+syn keyword schemeFunc scheme-report-environment null-environment
+syn keyword schemeFunc interaction-environment
+
+" Writing out the complete description of Scheme numerals without
+" using variables is a day's work for a trained secretary...
+" This is a useful lax approximation:
+
+syn match schemeNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
+syn match schemeError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
+
+syn match schemeOther oneline ![+-][ \t()";]!me=e-1
+syn match schemeOther oneline ![+-]$!
+" ... so that a single + or -, inside a quoted context, would not be
+" interpreted as a number (outside such contexts, it's a schemeFunc)
+
+syn match schemeDelimiter oneline !\.[ \t()";]!me=e-1
+syn match schemeDelimiter oneline !\.$!
+" ... and a single dot is not a number but a delimiter
+
+" Simple literals:
+
+syn match schemeBoolean oneline "#[tf]"
+syn match schemeError oneline !#[tf][^ \t()";]\+!
+
+syn match schemeChar oneline "#\\"
+syn match schemeChar oneline "#\\."
+syn match schemeError oneline !#\\.[^ \t()";]\+!
+syn match schemeChar oneline "#\\space"
+syn match schemeError oneline !#\\space[^ \t()";]\+!
+syn match schemeChar oneline "#\\newline"
+syn match schemeError oneline !#\\newline[^ \t()";]\+!
+
+" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
+
+syn match schemeOther oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
+syn match schemeError oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+syn match schemeOther oneline "\.\.\."
+syn match schemeError oneline !\.\.\.[^ \t()";]\+!
+" ... a special identifier
+
+syn match schemeConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
+syn match schemeConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
+syn match schemeError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+syn match schemeConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
+syn match schemeConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
+syn match schemeError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+
+" Non-quoted lists, and strings:
+
+syn region schemeStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
+syn region schemeStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
+
+syn region schemeString start=+"+ skip=+\\[\\"]+ end=+"+
+
+" Comments:
+
+syn match schemeComment ";.*$"
+
+" Synchronization and the wrapping up...
+
+syn sync match matchPlace grouphere NONE "^[^ \t]"
+" ... i.e. synchronize on a line that starts at the left margin
+
+" 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_scheme_syntax_inits")
+ if version < 508
+ let did_scheme_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink schemeSyntax Statement
+ HiLink schemeFunc Function
+
+ HiLink schemeString String
+ HiLink schemeChar Character
+ HiLink schemeNumber Number
+ HiLink schemeBoolean Boolean
+
+ HiLink schemeDelimiter Delimiter
+ HiLink schemeConstant Constant
+
+ HiLink schemeComment Comment
+ HiLink schemeError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "scheme"
diff --git a/runtime/syntax/scilab.vim b/runtime/syntax/scilab.vim
new file mode 100644
index 000000000..1bfc00367
--- /dev/null
+++ b/runtime/syntax/scilab.vim
@@ -0,0 +1,115 @@
+"
+" Vim syntax file
+" Language : Scilab
+" Maintainer : Benoit Hamelin
+" File type : *.sci (see :help filetype)
+" History
+" 28jan2002 benoith 0.1 Creation. Adapted from matlab.vim.
+" 04feb2002 benoith 0.5 Fixed bugs with constant highlighting.
+"
+
+
+" 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
+
+
+" Reserved words.
+syn keyword scilabStatement abort clear clearglobal end exit global mode predef quit resume
+syn keyword scilabStatement return
+syn keyword scilabFunction function endfunction funptr
+syn keyword scilabPredicate null iserror isglobal
+syn keyword scilabKeyword typename
+syn keyword scilabDebug debug pause what where whereami whereis who whos
+syn keyword scilabRepeat for while break
+syn keyword scilabConditional if then else elseif
+syn keyword scilabMultiplex select case
+
+" Reserved constants.
+syn match scilabConstant "\(%\)[0-9A-Za-z?!#$]\+"
+syn match scilabBoolean "\(%\)[FTft]\>"
+
+" Delimiters and operators.
+syn match scilabDelimiter "[][;,()]"
+syn match scilabComparison "[=~]="
+syn match scilabComparison "[<>]=\="
+syn match scilabComparison "<>"
+syn match scilabLogical "[&|~]"
+syn match scilabAssignment "="
+syn match scilabArithmetic "[+-]"
+syn match scilabArithmetic "\.\=[*/\\]\.\="
+syn match scilabArithmetic "\.\=^"
+syn match scilabRange ":"
+syn match scilabMlistAccess "\."
+
+syn match scilabLineContinuation "\.\{2,}"
+
+syn match scilabTransposition "[])a-zA-Z0-9?!_#$.]'"lc=1
+
+" Comments and tools.
+syn keyword scilabTodo TODO todo FIXME fixme TBD tbd contained
+syn match scilabComment "//.*$" contains=scilabTodo
+
+" Constants.
+syn match scilabNumber "[0-9]\+\(\.[0-9]*\)\=\([DEde][+-]\=[0-9]\+\)\="
+syn match scilabNumber "\.[0-9]\+\([DEde][+-]\=[0-9]\+\)\="
+syn region scilabString start=+'+ skip=+''+ end=+'+ oneline
+syn region scilabString start=+"+ end=+"+ oneline
+
+" Identifiers.
+syn match scilabIdentifier "\<[A-Za-z?!_#$][A-Za-z0-9?!_#$]*\>"
+syn match scilabOverload "%[A-Za-z0-9?!_#$]\+_[A-Za-z0-9?!_#$]\+"
+
+
+" 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_scilab_syntax_inits")
+ if version < 508
+ let did_scilab_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink scilabStatement Statement
+ HiLink scilabFunction Keyword
+ HiLink scilabPredicate Keyword
+ HiLink scilabKeyword Keyword
+ HiLink scilabDebug Debug
+ HiLink scilabRepeat Repeat
+ HiLink scilabConditional Conditional
+ HiLink scilabMultiplex Conditional
+
+ HiLink scilabConstant Constant
+ HiLink scilabBoolean Boolean
+
+ HiLink scilabDelimiter Delimiter
+ HiLink scilabMlistAccess Delimiter
+ HiLink scilabComparison Operator
+ HiLink scilabLogical Operator
+ HiLink scilabAssignment Operator
+ HiLink scilabArithmetic Operator
+ HiLink scilabRange Operator
+ HiLink scilabLineContinuation Underlined
+ HiLink scilabTransposition Operator
+
+ HiLink scilabTodo Todo
+ HiLink scilabComment Comment
+
+ HiLink scilabNumber Number
+ HiLink scilabString String
+
+ HiLink scilabIdentifier Identifier
+ HiLink scilabOverload Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "scilab"
+
+"EOF vim: ts=4 noet tw=100 sw=4 sts=0
diff --git a/runtime/syntax/screen.vim b/runtime/syntax/screen.vim
new file mode 100644
index 000000000..eef74f26f
--- /dev/null
+++ b/runtime/syntax/screen.vim
@@ -0,0 +1,93 @@
+" Vim syntax file
+" Language: Screen Virtual Terminal Emulator/Manager Configuration File
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/screen/
+" Latest Revision: 2004-05-22
+" arch-tag: 6a97fb8f-fc88-497f-9c55-e946734ba034
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" comments
+syn region screenComment matchgroup=screenComment start="#" end="$" contains=screenTodo
+
+" todo
+syn keyword screenTodo contained TODO FIXME XXX NOTE
+
+" string (can contain variables)
+syn region screenString matchgroup=screenString start='"' skip='\\"' end='"\|$' contains=screenVariable,screenSpecial
+
+" literal string
+syn region screenLiteral matchgroup=screenLiteral start="'" skip="\\'" end="'\|$"
+
+" environment variables
+syn match screenVariable contained "$\(\h\w*\|{\h\w*}\)"
+
+" booleans
+syn keyword screenBoolean on off
+
+" numbers
+syn match screenNumbers "\<\d\+\>"
+
+" specials
+syn match screenSpecials contained "%\([%aAdDhlmMstuwWyY?:{]\|[0-9]*n\|0?cC\)"
+
+" commands
+syn keyword screenCommands acladd aclchg acldel aclgrp aclumask activity addacl allpartial at attrcolor
+syn keyword screenCommands autodetach bell_msg bind bindkey bufferfile caption chacl chdir clear colon
+syn keyword screenCommands command compacthist console copy copy_regcrlf debug detach digraph dinfo crlf
+syn keyword screenCommands displays dumptermcap echo exec fit focus height help history
+syn keyword screenCommands info kill lastmsg license lockscreen markkeys meta msgminwait msgwait
+syn keyword screenCommands multiuser nethack next nonblock number only other partial_state
+syn keyword screenCommands password paste pastefont pow_break pow_detach_msg prev printcmd process
+syn keyword screenCommands quit readbuf readreg redisplay register remove removebuf reset resize screen
+syn keyword screenCommands select sessionname setenv shelltitle silencewait verbose
+syn keyword screenCommands sleep sorendition split startup_message stuff su suspend time
+syn keyword screenCommands title umask version wall width writebuf xoff xon defmode hardstatus
+syn keyword screenCommands altscreen break breaktype copy_reg defbreaktype defencoding deflog encoding
+syn keyword screenCommands eval ignorecase ins_reg maxwin partial pow_detach setsid source unsetenv
+syn keyword screenCommands windowlist windows
+syn match screenCommands "\<\(def\)\=\(autonuke\|bce\|c1\|charset\|escape\|flow\|kanji\|login\|monitor\|hstatus\|obuflimit\)\>"
+syn match screenCommands "\<\(def\)\=\(scrollback\|shell\|silence\|slowpaste\|utf8\|wrap\|writelock\|zombie\|gr\)\>"
+syn match screenCommands "\<hard\(copy\(_append\|dir\)\=\|status\)\>"
+syn match screenCommands "\<log\(file\|in\|tstamp\)\=\>"
+syn match screenCommands "\<map\(default\|notnext\|timeout\)\>"
+syn match screenCommands "\<term\(cap\|info\|capinfo\)\=\>"
+syn match screenCommands "\<vbell\(_msg\|wait\)\=\>"
+
+if exists("screen_minlines")
+ let b:screen_minlines = screen_minlines
+else
+ let b:screen_minlines = 10
+endif
+exec "syn sync minlines=" . b:screen_minlines
+
+" 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_screen_syn_inits")
+ if version < 508
+ let did_screen_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink screenComment Comment
+ HiLink screenTodo Todo
+ HiLink screenString String
+ HiLink screenLiteral String
+ HiLink screenVariable Identifier
+ HiLink screenBoolean Boolean
+ HiLink screenNumbers Number
+ HiLink screenSpecials Special
+ HiLink screenCommands Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "screen"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/sdl.vim b/runtime/syntax/sdl.vim
new file mode 100644
index 000000000..d0165e760
--- /dev/null
+++ b/runtime/syntax/sdl.vim
@@ -0,0 +1,167 @@
+" Vim syntax file
+" Language: SDL
+" Maintainer: Michael Piefel <piefel@informatik.hu-berlin.de>
+" Last Change: 2 May 2001
+
+" 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
+
+if !exists("sdl_2000")
+ syntax case ignore
+endif
+
+" A bunch of useful SDL keywords
+syn keyword sdlStatement task else nextstate
+syn keyword sdlStatement in out with from interface
+syn keyword sdlStatement to via env and use
+syn keyword sdlStatement process procedure block system service type
+syn keyword sdlStatement endprocess endprocedure endblock endsystem
+syn keyword sdlStatement package endpackage connection endconnection
+syn keyword sdlStatement channel endchannel connect
+syn keyword sdlStatement synonym dcl signal gate timer signallist signalset
+syn keyword sdlStatement create output set reset call
+syn keyword sdlStatement operators literals
+syn keyword sdlStatement active alternative any as atleast constants
+syn keyword sdlStatement default endalternative endmacro endoperator
+syn keyword sdlStatement endselect endsubstructure external
+syn keyword sdlStatement if then fi for import macro macrodefinition
+syn keyword sdlStatement macroid mod nameclass nodelay not operator or
+syn keyword sdlStatement parent provided referenced rem
+syn keyword sdlStatement select spelling substructure xor
+syn keyword sdlNewState state endstate
+syn keyword sdlInput input start stop return none save priority
+syn keyword sdlConditional decision enddecision join
+syn keyword sdlVirtual virtual redefined finalized adding inherits
+syn keyword sdlExported remote exported export
+
+if !exists("sdl_no_96")
+ syn keyword sdlStatement all axioms constant endgenerator endrefinement endservice
+ syn keyword sdlStatement error fpar generator literal map noequality ordering
+ syn keyword sdlStatement refinement returns revealed reverse service signalroute
+ syn keyword sdlStatement view viewed
+ syn keyword sdlExported imported
+endif
+
+if exists("sdl_2000")
+ syn keyword sdlStatement abstract aggregation association break choice composition
+ syn keyword sdlStatement continue endmethod handle method
+ syn keyword sdlStatement ordered private protected public
+ syn keyword sdlException exceptionhandler endexceptionhandler onexception
+ syn keyword sdlException catch new raise
+ " The same in uppercase
+ syn keyword sdlStatement TASK ELSE NEXTSTATE
+ syn keyword sdlStatement IN OUT WITH FROM INTERFACE
+ syn keyword sdlStatement TO VIA ENV AND USE
+ syn keyword sdlStatement PROCESS PROCEDURE BLOCK SYSTEM SERVICE TYPE
+ syn keyword sdlStatement ENDPROCESS ENDPROCEDURE ENDBLOCK ENDSYSTEM
+ syn keyword sdlStatement PACKAGE ENDPACKAGE CONNECTION ENDCONNECTION
+ syn keyword sdlStatement CHANNEL ENDCHANNEL CONNECT
+ syn keyword sdlStatement SYNONYM DCL SIGNAL GATE TIMER SIGNALLIST SIGNALSET
+ syn keyword sdlStatement CREATE OUTPUT SET RESET CALL
+ syn keyword sdlStatement OPERATORS LITERALS
+ syn keyword sdlStatement ACTIVE ALTERNATIVE ANY AS ATLEAST CONSTANTS
+ syn keyword sdlStatement DEFAULT ENDALTERNATIVE ENDMACRO ENDOPERATOR
+ syn keyword sdlStatement ENDSELECT ENDSUBSTRUCTURE EXTERNAL
+ syn keyword sdlStatement IF THEN FI FOR IMPORT MACRO MACRODEFINITION
+ syn keyword sdlStatement MACROID MOD NAMECLASS NODELAY NOT OPERATOR OR
+ syn keyword sdlStatement PARENT PROVIDED REFERENCED REM
+ syn keyword sdlStatement SELECT SPELLING SUBSTRUCTURE XOR
+ syn keyword sdlNewState STATE ENDSTATE
+ syn keyword sdlInput INPUT START STOP RETURN NONE SAVE PRIORITY
+ syn keyword sdlConditional DECISION ENDDECISION JOIN
+ syn keyword sdlVirtual VIRTUAL REDEFINED FINALIZED ADDING INHERITS
+ syn keyword sdlExported REMOTE EXPORTED EXPORT
+
+ syn keyword sdlStatement ABSTRACT AGGREGATION ASSOCIATION BREAK CHOICE COMPOSITION
+ syn keyword sdlStatement CONTINUE ENDMETHOD ENDOBJECT ENDVALUE HANDLE METHOD OBJECT
+ syn keyword sdlStatement ORDERED PRIVATE PROTECTED PUBLIC
+ syn keyword sdlException EXCEPTIONHANDLER ENDEXCEPTIONHANDLER ONEXCEPTION
+ syn keyword sdlException CATCH NEW RAISE
+endif
+
+" String and Character contstants
+" Highlight special characters (those which have a backslash) differently
+syn match sdlSpecial contained "\\\d\d\d\|\\."
+syn region sdlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial
+syn region sdlString start=+'+ skip=+''+ end=+'+
+
+" No, this doesn't happen, I just wanted to scare you. SDL really allows all
+" these characters for identifiers; fortunately, keywords manage without them.
+" set iskeyword=@,48-57,_,192-214,216-246,248-255,-
+
+syn region sdlComment start="/\*" end="\*/"
+syn region sdlComment start="comment" end=";"
+syn region sdlComment start="--" end="--\|$"
+syn match sdlCommentError "\*/"
+
+syn keyword sdlOperator present
+syn keyword sdlType integer real natural duration pid boolean time
+syn keyword sdlType character charstring ia5string
+syn keyword sdlType self now sender offspring
+syn keyword sdlStructure asntype endasntype syntype endsyntype struct
+
+if !exists("sdl_no_96")
+ syn keyword sdlStructure newtype endnewtype
+endif
+
+if exists("sdl_2000")
+ syn keyword sdlStructure object endobject value endvalue
+ " The same in uppercase
+ syn keyword sdlStructure OBJECT ENDOBJECT VALUE ENDVALUE
+ syn keyword sdlOperator PRESENT
+ syn keyword sdlType INTEGER NATURAL DURATION PID BOOLEAN TIME
+ syn keyword sdlType CHARSTRING IA5STRING
+ syn keyword sdlType SELF NOW SENDER OFFSPRING
+ syn keyword sdlStructure ASNTYPE ENDASNTYPE SYNTYPE ENDSYNTYPE STRUCT
+endif
+
+" ASN.1 in SDL
+syn case match
+syn keyword sdlType SET OF BOOLEAN INTEGER REAL BIT OCTET
+syn keyword sdlType SEQUENCE CHOICE
+syn keyword sdlType STRING OBJECT IDENTIFIER NULL
+
+syn sync ccomment sdlComment
+
+" 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_sdl_syn_inits")
+ if version < 508
+ let did_sdl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ Hi hi <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ Hi hi def <args>
+ endif
+
+ HiLink sdlException Label
+ HiLink sdlConditional sdlStatement
+ HiLink sdlVirtual sdlStatement
+ HiLink sdlExported sdlFlag
+ HiLink sdlCommentError sdlError
+ HiLink sdlOperator Operator
+ HiLink sdlStructure sdlType
+ Hi sdlStatement term=bold ctermfg=4 guifg=Blue
+ Hi sdlFlag term=bold ctermfg=4 guifg=Blue gui=italic
+ Hi sdlNewState term=italic ctermfg=2 guifg=Magenta gui=underline
+ Hi sdlInput term=bold guifg=Red
+ HiLink sdlType Type
+ HiLink sdlString String
+ HiLink sdlComment Comment
+ HiLink sdlSpecial Special
+ HiLink sdlError Error
+
+ delcommand HiLink
+ delcommand Hi
+endif
+
+let b:current_syntax = "sdl"
+
+" vim: ts=8
diff --git a/runtime/syntax/sed.vim b/runtime/syntax/sed.vim
new file mode 100644
index 000000000..68e395bb5
--- /dev/null
+++ b/runtime/syntax/sed.vim
@@ -0,0 +1,122 @@
+" Vim syntax file
+" Language: sed
+" Maintainer: Haakon Riiser <hakonrk@fys.uio.no>
+" URL: http://folk.uio.no/hakonrk/vim/syntax/sed.vim
+" Last Change: 2003 May 11
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn match sedError "\S"
+
+syn match sedWhitespace "\s\+" contained
+syn match sedSemicolon ";"
+syn match sedAddress "[[:digit:]$]"
+syn match sedAddress "\d\+\~\d\+"
+syn region sedAddress matchgroup=Special start="[{,;]\s*/\(\\/\)\="lc=1 skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
+syn region sedAddress matchgroup=Special start="^\s*/\(\\/\)\=" skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
+syn match sedComment "^\s*#.*$"
+syn match sedFunction "[dDgGhHlnNpPqx=]\s*\($\|;\)" contains=sedSemicolon,sedWhitespace
+syn match sedLabel ":[^;]*"
+syn match sedLineCont "^\(\\\\\)*\\$" contained
+syn match sedLineCont "[^\\]\(\\\\\)*\\$"ms=e contained
+syn match sedSpecial "[{},!]"
+if exists("highlight_sedtabs")
+ syn match sedTab "\t" contained
+endif
+
+" Append/Change/Insert
+syn region sedACI matchgroup=sedFunction start="[aci]\\$" matchgroup=NONE end="^.*$" contains=sedLineCont,sedTab
+
+syn region sedBranch matchgroup=sedFunction start="[bt]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
+syn region sedRW matchgroup=sedFunction start="[rw]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
+
+" Substitution/transform with various delimiters
+syn region sedFlagwrite matchgroup=sedFlag start="w" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace contained
+syn match sedFlag "[[:digit:]gpI]*w\=" contains=sedFlagwrite contained
+syn match sedRegexpMeta "[.*^$]" contained
+syn match sedRegexpMeta "\\." contains=sedTab contained
+syn match sedRegexpMeta "\[.\{-}\]" contains=sedTab contained
+syn match sedRegexpMeta "\\{\d\*,\d*\\}" contained
+syn match sedRegexpMeta "\\(.\{-}\\)" contains=sedTab contained
+syn match sedReplaceMeta "&\|\\\($\|.\)" contains=sedTab contained
+
+" Metacharacters: $ * . \ ^ [ ~
+" @ is used as delimiter and treated on its own below
+let __at = char2nr("@")
+let __sed_i = char2nr(" ")
+if has("ebcdic")
+ let __sed_last = 255
+else
+ let __sed_last = 126
+endif
+let __sed_metacharacters = '$*.\^[~'
+while __sed_i <= __sed_last
+ let __sed_delimiter = escape(nr2char(__sed_i), __sed_metacharacters)
+ if __sed_i != __at
+ exe 'syn region sedAddress matchgroup=Special start=@\\'.__sed_delimiter.'\(\\'.__sed_delimiter.'\)\=@ skip=@[^\\]\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'I\=@ contains=sedTab'
+ exe 'syn region sedRegexp'.__sed_i 'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement'.__sed_i
+ exe 'syn region sedReplacement'.__sed_i 'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag'
+ endif
+ let __sed_i = __sed_i + 1
+endwhile
+syn region sedAddress matchgroup=Special start=+\\@\(\\@\)\=+ skip=+[^\\]\(\\\\\)*\\@+ end=+@I\=+ contains=sedTab,sedRegexpMeta
+syn region sedRegexp64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement64
+syn region sedReplacement64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag
+
+" Since the syntax for the substituion command is very similar to the
+" syntax for the transform command, I use the same pattern matching
+" for both commands. There is one problem -- the transform command
+" (y) does not allow any flags. To save memory, I ignore this problem.
+syn match sedST "[sy]" nextgroup=sedRegexp\d\+
+
+if version >= 508 || !exists("did_sed_syntax_inits")
+ if version < 508
+ let did_sed_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sedAddress Macro
+ HiLink sedACI NONE
+ HiLink sedBranch Label
+ HiLink sedComment Comment
+ HiLink sedDelete Function
+ HiLink sedError Error
+ HiLink sedFlag Type
+ HiLink sedFlagwrite Constant
+ HiLink sedFunction Function
+ HiLink sedLabel Label
+ HiLink sedLineCont Special
+ HiLink sedPutHoldspc Function
+ HiLink sedReplaceMeta Special
+ HiLink sedRegexpMeta Special
+ HiLink sedRW Constant
+ HiLink sedSemicolon Special
+ HiLink sedST Function
+ HiLink sedSpecial Special
+ HiLink sedWhitespace NONE
+ if exists("highlight_sedtabs")
+ HiLink sedTab Todo
+ endif
+ let __sed_i = 32
+ while __sed_i <= 126
+ exe "HiLink sedRegexp".__sed_i "Macro"
+ exe "HiLink sedReplacement".__sed_i "NONE"
+ let __sed_i = __sed_i + 1
+ endwhile
+
+ delcommand HiLink
+endif
+
+unlet __sed_i __sed_delimiter __sed_metacharacters
+
+let b:current_syntax = "sed"
+
+" vim: sts=4 sw=4 ts=8
diff --git a/runtime/syntax/sendpr.vim b/runtime/syntax/sendpr.vim
new file mode 100644
index 000000000..28a26e684
--- /dev/null
+++ b/runtime/syntax/sendpr.vim
@@ -0,0 +1,32 @@
+" Vim syntax file
+" Language: FreeBSD send-pr file
+" Maintainer: Hendrik Scholz <hendrik@scholz.net>
+" Last Change: 2002 Mar 21
+"
+" http://raisdorf.net/files/misc/send-pr.vim
+
+" 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 match sendprComment /^SEND-PR:/
+" email address
+syn match sendprType /<[a-zA-Z0-9\-\_\.]*@[a-zA-Z0-9\-\_\.]*>/
+" ^> lines
+syn match sendprString /^>[a-zA-Z\-]*:/
+syn region sendprLabel start="\[" end="\]"
+syn match sendprString /^To:/
+syn match sendprString /^From:/
+syn match sendprString /^Reply-To:/
+syn match sendprString /^Cc:/
+syn match sendprString /^X-send-pr-version:/
+syn match sendprString /^X-GNATS-Notify:/
+
+hi def link sendprComment Comment
+hi def link sendprType Type
+hi def link sendprString String
+hi def link sendprLabel Label
diff --git a/runtime/syntax/sgml.vim b/runtime/syntax/sgml.vim
new file mode 100644
index 000000000..bcc46c342
--- /dev/null
+++ b/runtime/syntax/sgml.vim
@@ -0,0 +1,337 @@
+" Vim syntax file
+" Language: SGML
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 15:05:21 CEST
+" Filenames: *.sgml,*.sgm
+" $Id$
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+let s:sgml_cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+" mark illegal characters
+syn match sgmlError "[<&]"
+
+
+" unicode numbers:
+" provide different highlithing for unicode characters
+" inside strings and in plain text (character data).
+"
+" EXAMPLE:
+"
+" \u4e88
+"
+syn match sgmlUnicodeNumberAttr +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierAttr
+syn match sgmlUnicodeSpecifierAttr +\\u+ contained
+syn match sgmlUnicodeNumberData +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierData
+syn match sgmlUnicodeSpecifierData +\\u+ contained
+
+
+" strings inside character data or comments
+"
+syn region sgmlString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=sgmlEntity,sgmlUnicodeNumberAttr display
+syn region sgmlString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=sgmlEntity,sgmlUnicodeNumberAttr display
+
+" punctuation (within attributes) e.g. <tag sgml:foo.attribute ...>
+" ^ ^
+syn match sgmlAttribPunct +[:.]+ contained display
+
+
+" no highlighting for sgmlEqual (sgmlEqual has no highlighting group)
+syn match sgmlEqual +=+
+
+
+" attribute, everything before the '='
+"
+" PROVIDES: @sgmlAttribHook
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^^^^^^^^^^^
+"
+syn match sgmlAttrib
+ \ +[^-'"<]\@<=\<[a-zA-Z0-9.:]\+\>\([^'">]\@=\|$\)+
+ \ contained
+ \ contains=sgmlAttribPunct,@sgmlAttribHook
+ \ display
+
+
+" UNQUOTED value (not including the '=' -- sgmlEqual)
+"
+" PROVIDES: @sgmlValueHook
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = value>
+" ^^^^^
+"
+syn match sgmlValue
+ \ +[^"' =/!?<>][^ =/!?<>]*+
+ \ contained
+ \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
+ \ display
+
+
+" QUOTED value (not including the '=' -- sgmlEqual)
+"
+" PROVIDES: @sgmlValueHook
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^^^^^
+" <tag foo.attribute = 'value'>
+" ^^^^^^^
+"
+syn region sgmlValue contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
+syn region sgmlValue contained start=+'+ skip=+\\\\\|\\'+ end=+'+
+ \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook
+
+
+" value, everything after (and including) the '='
+" no highlighting!
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^^^^^^^
+" <tag foo.attribute = value>
+" ^^^^^^^
+"
+syn match sgmlEqualValue
+ \ +=\s*[^ =/!?<>]\++
+ \ contained
+ \ contains=sgmlEqual,sgmlString,sgmlValue
+ \ display
+
+
+" start tag
+" use matchgroup=sgmlTag to skip over the leading '<'
+" see also sgmlEmptyTag below.
+"
+" PROVIDES: @sgmlTagHook
+"
+syn region sgmlTag
+ \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
+ \ matchgroup=sgmlTag end=+>+
+ \ contained
+ \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
+
+
+" tag content for empty tags. This is the same as sgmlTag
+" above, except the `matchgroup=sgmlEndTag for highlighting
+" the end '/>' differently.
+"
+" PROVIDES: @sgmlTagHook
+"
+syn region sgmlEmptyTag
+ \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
+ \ matchgroup=sgmlEndTag end=+/>+
+ \ contained
+ \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
+
+
+" end tag
+" highlight everything but not the trailing '>' which
+" was already highlighted by the containing sgmlRegion.
+"
+" PROVIDES: @sgmlTagHook
+" (should we provide a separate @sgmlEndTagHook ?)
+"
+syn match sgmlEndTag
+ \ +</[^ /!?>"']\+>+
+ \ contained
+ \ contains=@sgmlTagHook
+
+
+" [-- SGML SPECIFIC --]
+
+" SGML specific
+" tag content for abbreviated regions
+"
+" PROVIDES: @sgmlTagHook
+"
+syn region sgmlAbbrTag
+ \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+
+ \ matchgroup=sgmlTag end=+/+
+ \ contained
+ \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook
+
+
+" SGML specific
+" just highlight the trailing '/'
+syn match sgmlAbbrEndTag +/+
+
+
+" SGML specific
+" abbreviated regions
+"
+" No highlighing, highlighing is done by contained elements.
+"
+" PROVIDES: @sgmlRegionHook
+"
+" EXAMPLE:
+"
+" <bold/Im Anfang war das Wort/
+"
+syn match sgmlAbbrRegion
+ \ +<[^/!?>"']\+/\_[^/]\+/+
+ \ contains=sgmlAbbrTag,sgmlAbbrEndTag,sgmlCdata,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook
+
+" [-- END OF SGML SPECIFIC --]
+
+
+" real (non-empty) elements. We cannot do syntax folding
+" as in xml, because end tags may be optional in sgml depending
+" on the dtd.
+" No highlighing, highlighing is done by contained elements.
+"
+" PROVIDES: @sgmlRegionHook
+"
+" EXAMPLE:
+"
+" <tag id="whoops">
+" <!-- comment -->
+" <another.tag></another.tag>
+" <another.tag/>
+" some data
+" </tag>
+"
+" SGML specific:
+" compared to xmlRegion:
+" - removed folding
+" - added a single '/'in the start pattern
+"
+syn region sgmlRegion
+ \ start=+<\z([^ /!?>"']\+\)\(\(\_[^/>]*[^/!?]>\)\|>\)+
+ \ end=+</\z1>+
+ \ contains=sgmlTag,sgmlEndTag,sgmlCdata,@sgmlRegionCluster,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook
+ \ keepend
+ \ extend
+
+
+" empty tags. Just a container, no highlighting.
+" Compare this with sgmlTag.
+"
+" EXAMPLE:
+"
+" <tag id="lola"/>
+"
+" TODO use sgmlEmptyTag intead of sgmlTag
+syn match sgmlEmptyRegion
+ \ +<[^ /!?>"']\(\_[^"'<>]\|"\_[^"]*"\|'\_[^']*'\)*/>+
+ \ contains=sgmlEmptyTag
+
+
+" cluster which contains the above two elements
+syn cluster sgmlRegionCluster contains=sgmlRegion,sgmlEmptyRegion,sgmlAbbrRegion
+
+
+" &entities; compare with dtd
+syn match sgmlEntity "&[^; \t]*;" contains=sgmlEntityPunct
+syn match sgmlEntityPunct contained "[&.;]"
+
+
+" The real comments (this implements the comments as defined by sgml,
+" but not all sgml pages actually conform to it. Errors are flagged.
+syn region sgmlComment start=+<!+ end=+>+ contains=sgmlCommentPart,sgmlString,sgmlCommentError,sgmlTodo
+syn keyword sgmlTodo contained TODO FIXME XXX display
+syn match sgmlCommentError contained "[^><!]"
+syn region sgmlCommentPart contained start=+--+ end=+--+
+
+
+" CData sections
+"
+" PROVIDES: @sgmlCdataHook
+"
+syn region sgmlCdata
+ \ start=+<!\[CDATA\[+
+ \ end=+]]>+
+ \ contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook
+ \ keepend
+ \ extend
+" using the following line instead leads to corrupt folding at CDATA regions
+" syn match sgmlCdata +<!\[CDATA\[\_.\{-}]]>+ contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook
+syn match sgmlCdataStart +<!\[CDATA\[+ contained contains=sgmlCdataCdata
+syn keyword sgmlCdataCdata CDATA contained
+syn match sgmlCdataEnd +]]>+ contained
+
+
+" Processing instructions
+" This allows "?>" inside strings -- good idea?
+syn region sgmlProcessing matchgroup=sgmlProcessingDelim start="<?" end="?>" contains=sgmlAttrib,sgmlEqualValue
+
+
+" DTD -- we use dtd.vim here
+syn region sgmlDocType matchgroup=sgmlDocTypeDecl start="\c<!DOCTYPE"he=s+2,rs=s+2 end=">" contains=sgmlDocTypeKeyword,sgmlInlineDTD,sgmlString
+syn keyword sgmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM
+syn region sgmlInlineDTD contained start="\[" end="]" contains=@sgmlDTD
+syn include @sgmlDTD <sfile>:p:h/dtd.vim
+
+
+" synchronizing
+" TODO !!! to be improved !!!
+
+syn sync match sgmlSyncDT grouphere sgmlDocType +\_.\(<!DOCTYPE\)\@=+
+" syn sync match sgmlSyncDT groupthere NONE +]>+
+
+syn sync match sgmlSync grouphere sgmlRegion +\_.\(<[^ /!?>"']\+\)\@=+
+" syn sync match sgmlSync grouphere sgmlRegion "<[^ /!?>"']*>"
+syn sync match sgmlSync groupthere sgmlRegion +</[^ /!?>"']\+>+
+
+syn sync minlines=100
+
+
+" The default highlighting.
+hi def link sgmlTodo Todo
+hi def link sgmlTag Function
+hi def link sgmlEndTag Identifier
+" SGML specifig
+hi def link sgmlAbbrEndTag Identifier
+hi def link sgmlEmptyTag Function
+hi def link sgmlEntity Statement
+hi def link sgmlEntityPunct Type
+
+hi def link sgmlAttribPunct Comment
+hi def link sgmlAttrib Type
+
+hi def link sgmlValue String
+hi def link sgmlString String
+hi def link sgmlComment Comment
+hi def link sgmlCommentPart Comment
+hi def link sgmlCommentError Error
+hi def link sgmlError Error
+
+hi def link sgmlProcessingDelim Comment
+hi def link sgmlProcessing Type
+
+hi def link sgmlCdata String
+hi def link sgmlCdataCdata Statement
+hi def link sgmlCdataStart Type
+hi def link sgmlCdataEnd Type
+
+hi def link sgmlDocTypeDecl Function
+hi def link sgmlDocTypeKeyword Statement
+hi def link sgmlInlineDTD Function
+hi def link sgmlUnicodeNumberAttr Number
+hi def link sgmlUnicodeSpecifierAttr SpecialChar
+hi def link sgmlUnicodeNumberData Number
+hi def link sgmlUnicodeSpecifierData SpecialChar
+
+let b:current_syntax = "sgml"
+
+let &cpo = s:sgml_cpo_save
+unlet s:sgml_cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/sgmldecl.vim b/runtime/syntax/sgmldecl.vim
new file mode 100644
index 000000000..6a69fc5d2
--- /dev/null
+++ b/runtime/syntax/sgmldecl.vim
@@ -0,0 +1,79 @@
+" Vim syntax file
+" Language: SGML (SGML Declaration <!SGML ...>)
+" Last Change: jueves, 28 de diciembre de 2000, 13:51:44 CLST
+" Maintainer: "Daniel A. Molina W." <sickd@linux-chile.org>
+" You can modify and maintain this file, in other case send comments
+" the maintainer email address.
+
+" 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
+
+syn region sgmldeclDeclBlock transparent start=+<!SGML+ end=+>+
+syn region sgmldeclTagBlock transparent start=+<+ end=+>+
+ \ contains=ALLBUT,
+ \ @sgmlTagError,@sgmlErrInTag
+syn region sgmldeclComment contained start=+--+ end=+--+
+
+syn keyword sgmldeclDeclKeys SGML CHARSET CAPACITY SCOPE SYNTAX
+ \ FEATURES
+
+syn keyword sgmldeclTypes BASESET DESCSET DOCUMENT NAMING DELIM
+ \ NAMES QUANTITY SHUNCHAR DOCTYPE
+ \ ELEMENT ENTITY ATTLIST NOTATION
+ \ TYPE
+
+syn keyword sgmldeclStatem CONTROLS FUNCTION NAMECASE MINIMIZE
+ \ LINK OTHER APPINFO REF ENTITIES
+
+syn keyword sgmldeclVariables TOTALCAP GRPCAP ENTCAP DATATAG OMITTAG RANK
+ \ SIMPLE IMPLICIT EXPLICIT CONCUR SUBDOC FORMAL ATTCAP
+ \ ATTCHCAP AVGRPCAP ELEMCAP ENTCHCAP IDCAP IDREFCAP
+ \ SHORTTAG
+
+syn match sgmldeclNConst contained +[0-9]\++
+
+syn region sgmldeclString contained start=+"+ end=+"+
+
+syn keyword sgmldeclBool YES NO
+
+syn keyword sgmldeclSpecial SHORTREF SGMLREF UNUSED NONE GENERAL
+ \ SEEALSO ANY
+
+syn sync lines=250
+
+
+" 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_sgmldecl_syntax_init")
+ if version < 508
+ let did_sgmldecl_syntax_init = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sgmldeclDeclKeys Keyword
+ HiLink sgmldeclTypes Type
+ HiLink sgmldeclConst Constant
+ HiLink sgmldeclNConst Constant
+ HiLink sgmldeclString String
+ HiLink sgmldeclDeclBlock Normal
+ HiLink sgmldeclBool Boolean
+ HiLink sgmldeclSpecial Special
+ HiLink sgmldeclComment Comment
+ HiLink sgmldeclStatem Statement
+ HiLink sgmldeclVariables Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sgmldecl"
+" vim:set tw=78 ts=4:
diff --git a/runtime/syntax/sgmllnx.vim b/runtime/syntax/sgmllnx.vim
new file mode 100644
index 000000000..419e904ee
--- /dev/null
+++ b/runtime/syntax/sgmllnx.vim
@@ -0,0 +1,68 @@
+" Vim syntax file
+" Language: SGML-linuxdoc (supported by old sgmltools-1.x)
+" (for more information, visit www.sgmltools.org)
+" Maintainer: Nam SungHyun <namsh@kldp.org>
+" Last Change: 2001 Apr 26
+
+" 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
+
+" tags
+syn region sgmllnxEndTag start=+</+ end=+>+ contains=sgmllnxTagN,sgmllnxTagError
+syn region sgmllnxTag start=+<[^/]+ end=+>+ contains=sgmllnxTagN,sgmllnxTagError
+syn match sgmllnxTagN contained +<\s*[-a-zA-Z0-9]\++ms=s+1 contains=sgmllnxTagName
+syn match sgmllnxTagN contained +</\s*[-a-zA-Z0-9]\++ms=s+2 contains=sgmllnxTagName
+
+syn region sgmllnxTag2 start=+<\s*[a-zA-Z]\+/+ keepend end=+/+ contains=sgmllnxTagN2
+syn match sgmllnxTagN2 contained +/.*/+ms=s+1,me=e-1
+
+syn region sgmllnxSpecial oneline start="&" end=";"
+
+" tag names
+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 match sgmllnxTagName contained "sect\d\+"
+
+" Comments
+syn region sgmllnxComment start=+<!--+ end=+-->+
+syn region sgmllnxDocType start=+<!doctype+ end=+>+
+
+" 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_sgmllnx_syn_inits")
+ if version < 508
+ let did_sgmllnx_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sgmllnxTag2 Function
+ HiLink sgmllnxTagN2 Function
+ HiLink sgmllnxTag Special
+ HiLink sgmllnxEndTag Special
+ HiLink sgmllnxParen Special
+ HiLink sgmllnxEntity Type
+ HiLink sgmllnxDocEnt Type
+ HiLink sgmllnxTagName Statement
+ HiLink sgmllnxComment Comment
+ HiLink sgmllnxSpecial Special
+ HiLink sgmllnxDocType PreProc
+ HiLink sgmllnxTagError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sgmllnx"
+
+" vim:set tw=78 ts=8 sts=2 sw=2 noet:
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
new file mode 100644
index 000000000..c8f6ee0ac
--- /dev/null
+++ b/runtime/syntax/sh.vim
@@ -0,0 +1,538 @@
+" Vim syntax file
+" Language: shell (sh) Korn shell (ksh) bash (sh)
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
+" Last Change: Apr 28, 2004
+" Version: 68
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Using the following VIM variables:
+" b:is_kornshell if defined, enhance with kornshell syntax
+" b:is_bash if defined, enhance with bash syntax
+" is_kornshell if neither b:is_kornshell or b:is_bash is
+" defined, then if is_kornshell is set
+" b:is_kornshell is default
+" is_bash if none of the previous three variables are
+" defined, then if is_bash is set b:is_bash is default
+" g:sh_fold_enabled if non-zero, syntax folding is enabled
+" sh_minlines sets up syn sync minlines (default: 200)
+" sh_maxlines sets up syn sync maxlines (default: twice sh_minlines)
+"
+" This file includes many ideas from Éric Brunet (eric.brunet@ens.fr)
+
+" 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
+
+" 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,
+" respectively.
+if !exists("b:is_kornshell") && !exists("b:is_bash")
+ if exists("is_kornshell")
+ let b:is_kornshell= 1
+ if exists("b:is_sh")
+ unlet b:is_sh
+ endif
+ elseif exists("is_bash")
+ let b:is_bash= 1
+ if exists("b:is_sh")
+ unlet b:is_sh
+ endif
+ else
+ let b:is_sh= 1
+ endif
+endif
+
+if !exists("g:sh_fold_enabled")
+ let g:sh_fold_enabled= 0
+endif
+
+" sh syntax is case sensitive
+syn case match
+
+" Clusters: contains=@... clusters
+"==================================
+syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseSingleQuote,shCaseDoubleQuote,shSpecial
+syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,bkshFunction,shSpecial
+syn cluster shColonList contains=@shCaseList
+syn cluster shCommandSubList contains=shArithmetic,shDeref,shDerefSimple,shNumber,shOperator,shPosnParm,shSpecial,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias
+syn cluster shDblQuoteList contains=shCommandSub,shDeref,shDerefSimple,shSpecial,shPosnParm
+syn cluster shDerefList contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError
+syn cluster shDerefVarList contains=shDerefOp,shDerefVarArray,shDerefOpError
+syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shSingleQuote,shDoubleQuote,shSpecial
+syn cluster shExprList1 contains=shCharClass,shNumber,shOperator,shSingleQuote,shDoubleQuote,shSpecial,shExpr,shDblBrace,shDeref,shDerefSimple
+syn cluster shExprList2 contains=@shExprList1,@shCaseList
+syn cluster shFunctionList contains=@shCaseList,shOperator
+syn cluster shHereBeginList contains=@shCommandSubList
+syn cluster shHereList contains=shBeginHere,shHerePayload
+syn cluster shHereListDQ contains=shBeginHere,@shDblQuoteList,shHerePayload
+syn cluster shIdList contains=shCommandSub,shWrapLineOperator,shIdWhiteSpace,shDeref,shDerefSimple,shSpecial,shRedir,shSingleQuote,shDoubleQuote,shExpr
+syn cluster shLoopList contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac
+syn cluster shSubShList contains=@shCaseList
+syn cluster shTestList contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shSingleQuote,shSpecial,shTestOpr
+
+
+" Echo:
+" ====
+" This one is needed INSIDE a CommandSub, so that `echo bla` be correct
+syn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList
+syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList
+
+" This must be after the strings, so that bla \" be correct
+syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=shNumber,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shSpecial,shOperator,shDoubleQuote,shCharClass
+
+" Alias:
+" =====
+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="="
+endif
+
+" Error Codes
+" ===========
+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 ")"
+if exists("b:is_kornshell")
+ syn match shDTestError "]]"
+endif
+syn match shTestError "]"
+
+" Options interceptor
+" ===================
+syn match shOption "\s[\-+][a-zA-Z0-9]\+\>"ms=s+1
+syn match shOption "\s--\S\+"ms=s+1
+
+" Operators:
+" =========
+syn match shOperator "[!&;|]"
+syn match shOperator "\[[[^:]\|\]]"
+syn match shOperator "!\==" skipwhite nextgroup=shPattern
+syn match shPattern "\<\S\+\())\)\@=" contained contains=shSingleQuote,shDoubleQuote,shDeref
+
+" Subshells:
+" =========
+syn region shExpr transparent matchgroup=shExprRegion start="{" end="}" contains=@shExprList2
+syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")" contains=@shSubShList
+
+" Tests
+"======
+"syn region shExpr transparent matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
+syn region shExpr matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
+syn region shExpr transparent matchgroup=shStatement start="\<test\>" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
+syn match shTestOpr contained "<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!=<>]"
+if exists("b:is_kornshell") || exists("b:is_bash")
+ syn region shDblBrace matchgroup=Delimiter start="\[\[" skip=+\\\\\|\\$+ end="\]\]" contains=@shTestList
+ syn region shDblParen matchgroup=Delimiter start="((" skip=+\\\\\|\\$+ end="))" contains=@shTestList
+endif
+
+" Character Class in Range
+" ========================
+syn match shCharClass contained "\[:\(backspace\|escape\|return\|xdigit\|alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|tab\):\]"
+
+" Loops: do, if, while, until
+" =====
+syn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
+syn region shIf transparent matchgroup=shConditional start="\<if\>" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>" contains=@shLoopList,shDblBrace,shDblParen
+syn region shFor matchgroup=shLoop start="\<for\>" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen
+if exists("b:is_kornshell") || exists("b:is_bash")
+ syn cluster shCaseList add=shRepeat
+ syn region shRepeat matchgroup=shLoop start="\<while\>" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace
+ syn region shRepeat matchgroup=shLoop start="\<until\>" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace
+ syn region shCaseEsac matchgroup=shConditional start="\<select\>" matchgroup=shConditional end="\<in\>" end="\<do\>" contains=@shLoopList
+else
+ syn region shRepeat matchgroup=shLoop start="\<while\>" end="\<do\>"me=e-2 contains=@shLoopList
+ syn region shRepeat matchgroup=shLoop start="\<until\>" end="\<do\>"me=e-2 contains=@shLoopList
+endif
+
+" Case: case...esac
+" ====
+syn match shCaseBar contained skipwhite "[^|"`'()]\{-}|"hs=e nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseSingleQuote,shCaseDoubleQuote
+syn match shCaseStart contained skipwhite skipnl "(" nextgroup=shCase,shCaseBar
+syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="[^$()]\{-})"ms=s,hs=e end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,,shComment
+syn region shCaseEsac matchgroup=shConditional start="\<case\>" end="\<esac\>" contains=@shCaseEsacList
+syn keyword shCaseIn contained skipwhite skipnl in nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseSingleQuote,shCaseDoubleQuote
+syn region shCaseSingleQuote matchgroup=shOperator start=+'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained
+syn region shCaseDoubleQuote matchgroup=shOperator start=+"+ skip=+\\\\\|\\.+ end=+"+ contains=@shDblQuoteList,shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained
+syn region shCaseCommandSub start=+`+ skip=+\\\\\|\\.+ end=+`+ contains=@shCommandSubList skipwhite skipnl nextgroup=shCaseBar contained
+
+" Misc
+"=====
+syn match shWrapLineOperator "\\$"
+syn region shCommandSub start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList
+
+" $(..) is not supported by sh (Bourne shell). However, apparently
+" some systems (HP?) have as their /bin/sh a (link to) Korn shell
+" (ie. Posix compliant shell). /bin/ksh should work for those
+" systems too, however, so the following syntax will flag $(..) as
+" an Error under /bin/sh. By consensus of vimdev'ers!
+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=@shCommandSubList
+ syn match shSkipInitWS contained "^\s\+"
+else
+ syn region shCommandSub matchgroup=Error start="$(" end=")" contains=@shCommandSubList
+endif
+
+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 bashAdminStatement daemon killall killproc nice reload restart start status stop
+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
+endif
+
+syn match shSource "^\.\s"
+syn match shSource "\s\.\s"
+syn region shColon start="^\s*:" end="$\|" end="#"me=e-1 contains=@shColonList
+
+" String and Character constants
+"===============================
+syn match shNumber "-\=\<\d\+\>"
+syn match shSpecial "\\\d\d\d\|\\[abcfnrtv0]" contained
+syn region shSingleQuote matchgroup=shOperator start=+'+ end=+'+ contains=shStringSpecial
+syn region shDoubleQuote matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial
+syn match shStringSpecial "[^[:print:]]" contained
+syn match shSpecial "\\[\\\"\'`$()#]"
+
+" Comments
+"=========
+syn cluster shCommentGroup contains=shTodo,@Spell
+syn keyword shTodo contained TODO
+syn match shComment "#.*$" contains=@shCommentGroup
+
+" File redirection highlighted as operators
+"==========================================
+syn match shRedir "\d\=>\(&[-0-9]\)\="
+syn match shRedir "\d\=>>-\="
+syn match shRedir "\d\=<\(&[-0-9]\)\="
+syn match shRedir "\d<<-\="
+
+" Shell Input Redirection (Here Documents)
+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
+
+ if v:version > 602 || (v:version == 602 && has("patch219"))
+ syn region shHereDoc fold start="\(<<\s*\\\=\z(\S*\)\)\@=" matchgroup=shRedir end="^\z1$" contains=@shHereListDQ keepend
+ syn region shHereDoc fold start="\(<<\s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<\s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<\s*\\\_$\_s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<\s*\\\_$\_s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<\s*\\\_$\_s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\z1$" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<-\s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<-\s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\s*\z1$"" contains=@shHereListDQ keepend
+ syn region shHereDoc fold start="\(<<-\s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\s*\z1$"" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<-\s*\\\_$\_s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<-\s*\\\_$\_s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc fold start="\(<<-\s*\\\_$\_s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ else
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)" matchgroup=shRedir end="^\z1$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\z1$"
+ endif
+else
+ if v:version > 602 || (v:version == 602 && has("patch219"))
+ syn region shHereDoc start="\(<<\s*\\\=\z(\S*\)\)\@=" matchgroup=shRedir end="^\z1$" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<\s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereListDQ keepend
+ syn region shHereDoc start="\(<<\s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<\s*\\\_$\_s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<\s*\\\_$\_s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\z1$"" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<\s*\\\_$\_s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\z1$" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<-\s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<-\s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\s*\z1$"" contains=@shHereListDQ keepend
+ syn region shHereDoc start="\(<<-\s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\s*\z1$"" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<-\s*\\\_$\_s*'\z(\S*\)'\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<-\s*\\\_$\_s*\z(\S*\)\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ syn region shHereDoc start="\(<<-\s*\\\_$\_s*\"\z(\S*\)\"\)\@=" matchgroup=shRedir end="^\s*\z1$" contains=@shHereList keepend
+ else
+ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)" matchgroup=shRedir end="^\z1$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<\s*'\z(\S*\)'" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1$"
+ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1$"
+ endif
+ if v:version > 602 || (v:version == 602 && has("patch219"))
+ syn match shHerePayload "^.*$" contained skipnl nextgroup=shHerePayload contains=@shDblQuoteList
+ syn match shBeginLine ".*$" contained skipnl nextgroup=shHerePayload contains=@shCommandSubList
+ syn match shBeginHere "<<-\=\s*\S\+" contained nextgroup=shBeginLine
+ endif
+ if exists("b:is_bash")
+ syn match shRedir "<<<"
+ endif
+endif
+
+" Identifiers
+"============
+syn match shVariable "\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze=" nextgroup=shSetIdentifier
+syn match shIdWhiteSpace contained "\s"
+syn match shSetIdentifier contained "=" nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shSingleQuote
+if exists("b:is_bash")
+ syn region shSetList matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>[^/]"me=e-1 end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="#\|="me=e-1 contains=@shIdList
+ syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" end="[|)]"me=e-1 matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+ syn match shSet "\<\(declare\|typeset\|local\|export\|set\|unset\)$"
+elseif exists("b:is_kornshell")
+ syn region shSetList matchgroup=shSet start="\<\(typeset\|export\|unset\)\>[^/]"me=e-1 end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+ syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+ syn match shSet "\<\(typeset\|set\|export\|unset\)$"
+else
+ syn region shSetList matchgroup=shSet start="\<\(set\|export\|unset\)\>[^/]"me=e-1 end="$" end="[)|]"me=e-1 matchgroup=shOperator end="[;&]" matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+ syn match shStatement "\<\(set\|export\|unset\)$"
+endif
+
+" handles functions which start: Function () {
+" Apparently Bourne shell accepts functions too,
+" even though it isn't documented by my man pages
+" for it.
+syn cluster shCommandSubList add=bkshFunction
+if g:sh_fold_enabled
+ syn region bkshFunctionBody transparent fold matchgroup=Delimiter start="^\s*\<\h\w*\>\s*()\s*{" end="}" contains=bkshFunction,bkshFunctionDelim,@shFunctionList
+else
+ syn region bkshFunctionBody transparent matchgroup=Delimiter start="^\s*\<\h\w*\>\s*()\s*{" end="}" contains=bkshFunction,bkshFunctionDelim,@shFunctionList
+endif
+syn match bkshFunction "^\s*\<\h\w*\>\s*()" skipwhite skipnl contains=bkshFunctionParen
+syn match bkshFunctionParen "[()]" contained
+syn match bkshFunctionDelim "[{}]" contained
+
+" Parameter Dereferencing
+" =======================
+syn match shDerefSimple "\$\w\+"
+syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray
+syn match shDerefWordError "[^}$[]" contained
+syn match shDerefSimple "\$[-#*@!?]"
+syn match shDerefSimple "\$\$"
+if exists("b:is_bash") || exists("b:is_kornshell")
+ syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList
+endif
+
+" bash : ${!prefix*}
+" bash : ${#parameter}
+if exists("b:is_bash")
+ syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOp
+ syn match shDerefVar contained "{\@<=!\w\+" 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
+
+" sh ksh bash : ${var[... ]...} array reference
+syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
+
+" sh ksh bash : ${parameter:-word} word is default value
+" sh ksh bash : ${parameter:=word} assign word as default value
+" sh ksh bash : ${parameter:?word} display word if parameter is null
+" sh ksh bash : ${parameter:+word} use word if parameter is not null, otherwise nothing
+" ksh bash : ${parameter#pattern} remove small left pattern
+" ksh bash : ${parameter##pattern} remove large left pattern
+" ksh bash : ${parameter%pattern} remove small right pattern
+" ksh bash : ${parameter%%pattern} remove large right pattern
+syn cluster shDerefPatternList contains=shDerefPattern,shDerefString
+syn match shDerefOpError contained ":[[:punct:]]"
+syn match shDerefOp contained ":\=[-=?]" nextgroup=@shDerefPatternList
+syn match shDerefOp contained ":\=+" nextgroup=@shDerefPatternList
+if exists("b:is_bash") || exists("b:is_kornshell")
+ syn match shDerefOp contained "#\{1,2}" nextgroup=@shDerefPatternList
+ syn match shDerefOp contained "%\{1,2}" nextgroup=@shDerefPatternList
+ syn match shDerefPattern contained "[^{}]\+" contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub nextgroup=shDerefPattern
+ syn region shDerefPattern contained start="{" end="}" contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
+endif
+syn region shDerefString contained matchgroup=shOperator start=+'+ end=+'+ contains=shStringSpecial
+syn region shDerefString contained matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial
+syn match shDerefString contained "\\["']"
+
+" bash : ${parameter:offset}
+" bash : ${parameter:offset:length}
+" bash : ${parameter//pattern/string}
+" bash : ${parameter//pattern}
+if exists("b:is_bash")
+ syn region shDerefOp contained start=":[$[:alnum:]_]"me=e-1 end=":"me=e-1 end="}"me=e-1 contains=@shCommandSubList nextgroup=shDerefPOL
+ syn match shDerefPOL contained ":[^}]\{1,}" contains=@shCommandSubList
+ syn match shDerefOp contained "/\{1,2}" nextgroup=shDerefPat
+ syn match shDerefPat contained "[^/}]\{1,}" nextgroup=shDerefPatStringOp
+ syn match shDerefPatStringOp contained "/" nextgroup=shDerefPatString
+ syn match shDerefPatString contained "[^}]\{1,}"
+endif
+
+" A bunch of useful sh keywords
+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("b:is_kornshell") || exists("b:is_bash")
+ syn keyword shFunction function
+ syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup print printf r stop suspend time times true type unalias whence
+
+ if exists("b:is_bash")
+ syn keyword shStatement bind builtin dirs disown enable help local logout popd pushd shopt source
+ else
+ syn keyword shStatement login newgrp
+ endif
+endif
+
+" Syncs
+" =====
+if !exists("sh_minlines")
+ let sh_minlines = 200
+endif
+if !exists("sh_maxlines")
+ let sh_maxlines = 2 * sh_minlines
+endif
+exec "syn sync minlines=" . sh_minlines . " maxlines=" . sh_maxlines
+syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>"
+syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>"
+syn sync match shDoSync grouphere shDo "\<do\>"
+syn sync match shDoSync groupthere shDo "\<done\>"
+syn sync match shForSync grouphere shFor "\<for\>"
+syn sync match shForSync groupthere shFor "\<in\>"
+syn sync match shIfSync grouphere shIf "\<if\>"
+syn sync match shIfSync groupthere shIf "\<fi\>"
+syn sync match shUntilSync grouphere shRepeat "\<until\>"
+syn sync match shWhileSync grouphere shRepeat "\<while\>"
+
+" The default highlighting.
+hi def link shArithRegion shShellVariables
+hi def link shCaseBar shConditional
+hi def link shCaseIn shConditional
+hi def link shCaseCommandSub shCommandSub
+hi def link shCaseDoubleQuote shDoubleQuote
+hi def link shCaseSingleQuote shSingleQuote
+hi def link shCaseStart shConditional
+hi def link shCmdSubRegion shShellVariables
+hi def link shColon shStatement
+
+hi def link shDeref shShellVariables
+hi def link shDerefOp shOperator
+
+hi def link shDerefVar shDeref
+hi def link shDerefPOL shDerefOp
+hi def link shDerefPatString shDerefPattern
+hi def link shDerefPatStringOp shDerefOp
+hi def link shDerefSimple shDeref
+hi def link shDerefSpecial shDeref
+hi def link shDerefString shDoubleQuote
+hi def link shHerePayload shHereDoc
+hi def link shBeginHere shRedir
+
+hi def link shDoubleQuote shString
+hi def link shEcho shString
+hi def link shEmbeddedEcho shString
+hi def link shHereDoc shString
+hi def link shLoop shStatement
+hi def link shOption shCommandSub
+hi def link shPattern shString
+hi def link shPosnParm shShellVariables
+hi def link shRange shOperator
+hi def link shRedir shOperator
+hi def link shSingleQuote shString
+hi def link shSource shOperator
+hi def link shStringSpecial shSpecial
+hi def link shSubShRegion shOperator
+hi def link shTestOpr shConditional
+hi def link shVariable shSetList
+hi def link shWrapLineOperator shOperator
+
+if exists("b:is_bash")
+ hi def link bashAdminStatement shStatement
+ hi def link bashSpecialVariables shShellVariables
+ hi def link bashStatement shStatement
+ hi def link bkshFunction Function
+ hi def link bkshFunctionParen Delimiter
+ hi def link bkshFunctionDelim Delimiter
+endif
+if exists("b:is_kornshell")
+ hi def link kshSpecialVariables shShellVariables
+ hi def link kshStatement shStatement
+ hi def link bkshFunction Function
+ hi def link bkshFunctionParen 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
+endif
+
+hi def link shArithmetic Special
+hi def link shCharClass Identifier
+hi def link shSnglCase Statement
+hi def link shCommandSub Special
+hi def link shComment Comment
+hi def link shConditional Conditional
+hi def link shExprRegion Delimiter
+hi def link shFunction Function
+hi def link shFunctionName Function
+hi def link shNumber Number
+hi def link shOperator Operator
+hi def link shRepeat Repeat
+hi def link shSet Statement
+hi def link shSetList Identifier
+hi def link shShellVariables PreProc
+hi def link shSpecial Special
+hi def link shStatement Statement
+hi def link shString String
+hi def link shTodo Todo
+hi def link shAlias Identifier
+
+" Current Syntax
+" ==============
+if exists("b:is_bash")
+ let b:current_syntax = "bash"
+elseif exists("b:is_kornshell")
+ let b:current_syntax = "ksh"
+else
+ let b:current_syntax = "sh"
+endif
+
+" vim: ts=16
diff --git a/runtime/syntax/sicad.vim b/runtime/syntax/sicad.vim
new file mode 100644
index 000000000..7e32451be
--- /dev/null
+++ b/runtime/syntax/sicad.vim
@@ -0,0 +1,413 @@
+" Vim syntax file
+" Language: SiCAD (procedure language)
+" Maintainer: Zsolt Branyiczky <zbranyiczky@lmark.mgx.hu>
+" Last Change: 2003 May 11
+" URL: http://lmark.mgx.hu:81/download/vim/sicad.vim
+
+" 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
+
+" use SQL highlighting after 'sql' command
+if version >= 600
+ syn include @SQL syntax/sql.vim
+else
+ syn include @SQL <sfile>:p:h/sql.vim
+endif
+unlet b:current_syntax
+
+" spaces are used in (auto)indents since sicad hates tabulator characters
+if version >= 600
+ setlocal expandtab
+else
+ set expandtab
+endif
+
+" ignore case
+syn case ignore
+
+" most important commands - not listed by ausku
+syn keyword sicadStatement define
+syn keyword sicadStatement dialog
+syn keyword sicadStatement do
+syn keyword sicadStatement dop contained
+syn keyword sicadStatement end
+syn keyword sicadStatement enddo
+syn keyword sicadStatement endp
+syn keyword sicadStatement erroff
+syn keyword sicadStatement erron
+syn keyword sicadStatement exitp
+syn keyword sicadGoto goto contained
+syn keyword sicadStatement hh
+syn keyword sicadStatement if
+syn keyword sicadStatement in
+syn keyword sicadStatement msgsup
+syn keyword sicadStatement out
+syn keyword sicadStatement padd
+syn keyword sicadStatement parbeg
+syn keyword sicadStatement parend
+syn keyword sicadStatement pdoc
+syn keyword sicadStatement pprot
+syn keyword sicadStatement procd
+syn keyword sicadStatement procn
+syn keyword sicadStatement psav
+syn keyword sicadStatement psel
+syn keyword sicadStatement psymb
+syn keyword sicadStatement ptrace
+syn keyword sicadStatement ptstat
+syn keyword sicadStatement set
+syn keyword sicadStatement sql contained
+syn keyword sicadStatement step
+syn keyword sicadStatement sys
+syn keyword sicadStatement ww
+
+" functions
+syn match sicadStatement "\<atan("me=e-1
+syn match sicadStatement "\<atan2("me=e-1
+syn match sicadStatement "\<cos("me=e-1
+syn match sicadStatement "\<dist("me=e-1
+syn match sicadStatement "\<exp("me=e-1
+syn match sicadStatement "\<log("me=e-1
+syn match sicadStatement "\<log10("me=e-1
+syn match sicadStatement "\<sin("me=e-1
+syn match sicadStatement "\<sqrt("me=e-1
+syn match sicadStatement "\<tanh("me=e-1
+syn match sicadStatement "\<x("me=e-1
+syn match sicadStatement "\<y("me=e-1
+syn match sicadStatement "\<v("me=e-1
+syn match sicadStatement "\<x%g\=p[0-9]\{1,2}\>"me=s+1
+syn match sicadStatement "\<y%g\=p[0-9]\{1,2}\>"me=s+1
+
+" logical operators
+syn match sicadOperator "\.and\."
+syn match sicadOperator "\.ne\."
+syn match sicadOperator "\.not\."
+syn match sicadOperator "\.eq\."
+syn match sicadOperator "\.ge\."
+syn match sicadOperator "\.gt\."
+syn match sicadOperator "\.le\."
+syn match sicadOperator "\.lt\."
+syn match sicadOperator "\.or\."
+syn match sicadOperator "\.eqv\."
+syn match sicadOperator "\.neqv\."
+
+" variable name
+syn match sicadIdentifier "%g\=[irpt][0-9]\{1,2}\>"
+syn match sicadIdentifier "%g\=l[0-9]\>"
+syn match sicadIdentifier "%g\=[irptl]("me=e-1
+syn match sicadIdentifier "%error\>"
+syn match sicadIdentifier "%nsel\>"
+syn match sicadIdentifier "%nvar\>"
+syn match sicadIdentifier "%scl\>"
+syn match sicadIdentifier "%wd\>"
+syn match sicadIdentifier "\$[irt][0-9]\{1,2}\>" contained
+
+" label
+syn match sicadLabel1 "^ *\.[a-z][a-z0-9]\{0,7} \+[^ ]"me=e-1
+syn match sicadLabel1 "^ *\.[a-z][a-z0-9]\{0,7}\*"me=e-1
+syn match sicadLabel2 "\<goto \.\=[a-z][a-z0-9]\{0,7}\>" contains=sicadGoto
+syn match sicadLabel2 "\<goto\.[a-z][a-z0-9]\{0,7}\>" contains=sicadGoto
+
+" boolean
+syn match sicadBoolean "\.[ft]\."
+" integer without sign
+syn match sicadNumber "\<[0-9]\+\>"
+" floating point number, with dot, optional exponent
+syn match sicadFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, starting with a dot, optional exponent
+syn match sicadFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
+" floating point number, without dot, with exponent
+syn match sicadFloat "\<[0-9]\+e[-+]\=[0-9]\+\>"
+
+" without this extraString definition a ' ; ' could stop the comment
+syn region sicadString_ transparent start=+'+ end=+'+ oneline contained
+" string
+syn region sicadString start=+'+ end=+'+ oneline
+
+" comments - nasty ones in sicad
+
+" - ' * blabla' or ' * blabla;'
+syn region sicadComment start="^ *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
+" - ' .LABEL03 * blabla' or ' .LABEL03 * blabla;'
+syn region sicadComment start="^ *\.[a-z][a-z0-9]\{0,7} *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadLabel1,sicadString_
+" - '; * blabla' or '; * blabla;'
+syn region sicadComment start="; *\*"ms=s+1 skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
+" - comments between docbeg and docend
+syn region sicadComment matchgroup=sicadStatement start="\<docbeg\>" end="\<docend\>"
+
+" catch \ at the end of line
+syn match sicadLineCont "\\ *$"
+
+" parameters in dop block - for the time being it is not used
+"syn match sicadParameter " [a-z][a-z0-9]*[=:]"me=e-1 contained
+" dop block - for the time being it is not used
+syn region sicadDopBlock transparent matchgroup=sicadStatement start='\<dop\>' skip='\\ *$' end=';'me=e-1 end='$' contains=ALL
+
+" sql block - new highlighting mode is used (see syn include)
+syn region sicadSqlBlock transparent matchgroup=sicadStatement start='\<sql\>' skip='\\ *$' end=';'me=e-1 end='$' contains=@SQL,sicadIdentifier,sicadLineCont
+
+" synchronizing
+syn sync clear " clear sync used in sql.vim
+syn sync match sicadSyncComment groupthere NONE "\<docend\>"
+syn sync match sicadSyncComment grouphere sicadComment "\<docbeg\>"
+" next line must be examined too
+syn sync linecont "\\ *$"
+
+" catch error caused by tabulator key
+syn match sicadError "\t"
+" catch errors caused by wrong parenthesis
+"syn region sicadParen transparent start='(' end=')' contains=ALLBUT,sicadParenError
+syn region sicadParen transparent start='(' skip='\\ *$' end=')' end='$' contains=ALLBUT,sicadParenError
+syn match sicadParenError ')'
+"syn region sicadApostrophe transparent start=+'+ end=+'+ contains=ALLBUT,sicadApostropheError
+"syn match sicadApostropheError +'+
+" not closed apostrophe
+"syn region sicadError start=+'+ end=+$+ contains=ALLBUT,sicadApostropheError
+"syn match sicadApostropheError +'[^']*$+me=s+1 contained
+
+" SICAD keywords
+syn keyword sicadStatement abst add addsim adrin aib
+syn keyword sicadStatement aibzsn aidump aifgeo aisbrk alknam
+syn keyword sicadStatement alknr alksav alksel alktrc alopen
+syn keyword sicadStatement ansbo aractiv ararea arareao ararsfs
+syn keyword sicadStatement arbuffer archeck arcomv arcont arconv
+syn keyword sicadStatement arcopy arcopyo arcorr arcreate arerror
+syn keyword sicadStatement areval arflfm arflop arfrast argbkey
+syn keyword sicadStatement argenf argraph argrapho arinters arkompfl
+syn keyword sicadStatement arlasso arlcopy arlgraph arline arlining
+syn keyword sicadStatement arlisly armakea armemo arnext aroverl
+syn keyword sicadStatement arovers arparkmd arpars arrefp arselect
+syn keyword sicadStatement arset arstruct arunify arupdate arvector
+syn keyword sicadStatement arveinfl arvflfl arvoroni ausku basis
+syn keyword sicadStatement basisaus basisdar basisnr bebos befl
+syn keyword sicadStatement befla befli befls beo beorta
+syn keyword sicadStatement beortn bep bepan bepap bepola
+syn keyword sicadStatement bepoln bepsn bepsp ber berili
+syn keyword sicadStatement berk bewz bkl bli bma
+syn keyword sicadStatement bmakt bmakts bmbm bmerk bmerw
+syn keyword sicadStatement bmerws bminit bmk bmorth bmos
+syn keyword sicadStatement bmoss bmpar bmsl bmsum bmsums
+syn keyword sicadStatement bmver bmvero bmw bo bta
+syn keyword sicadStatement buffer bvl bw bza bzap
+syn keyword sicadStatement bzd bzgera bzorth cat catel
+syn keyword sicadStatement cdbdiff ce cgmparam close closesim
+syn keyword sicadStatement comgener comp comp conclose conclose coninfo
+syn keyword sicadStatement conopen conread contour conwrite cop
+syn keyword sicadStatement copar coparp coparp2 copel cr
+syn keyword sicadStatement cs cstat cursor d da
+syn keyword sicadStatement dal dasp dasps dataout dcol
+syn keyword sicadStatement dd defsr del delel deskrdef
+syn keyword sicadStatement df dfn dfns dfpos dfr
+syn keyword sicadStatement dgd dgm dgp dgr dh
+syn keyword sicadStatement diag diaus dir disbsd dkl
+syn keyword sicadStatement dktx dkur dlgfix dlgfre dma
+syn keyword sicadStatement dprio dr druse dsel dskinfo
+syn keyword sicadStatement dsr dv dve eba ebd
+syn keyword sicadStatement ebdmod ebs edbsdbin edbssnin edbsvtin
+syn keyword sicadStatement edt egaus egdef egdefs eglist
+syn keyword sicadStatement egloe egloenp egloes egxx eib
+syn keyword sicadStatement ekur ekuradd elel elpos epg
+syn keyword sicadStatement esau esauadd esek eta etap
+syn keyword sicadStatement etav feparam ficonv filse fl
+syn keyword sicadStatement fli flin flini flinit flins
+syn keyword sicadStatement flkor fln flnli flop flout
+syn keyword sicadStatement flowert flparam flraster flsy flsyd
+syn keyword sicadStatement flsym flsyms flsymt fmtatt fmtdia
+syn keyword sicadStatement fmtlib fpg gbadddb gbaim gbanrs
+syn keyword sicadStatement gbatw gbau gbaudit gbclosp gbcredic
+syn keyword sicadStatement gbcreem gbcreld gbcresdb gbcretd gbde
+syn keyword sicadStatement gbdeldb gbdeldic gbdelem gbdelld gbdelref
+syn keyword sicadStatement gbdeltd gbdisdb gbdisem gbdisld gbdistd
+syn keyword sicadStatement gbebn gbemau gbepsv gbgetdet gbgetes
+syn keyword sicadStatement gbgetmas gbgqel gbgqelr gbgqsa gbgrant
+syn keyword sicadStatement gbimpdic gbler gblerb gblerf gbles
+syn keyword sicadStatement gblocdic gbmgmg gbmntdb gbmoddb gbnam
+syn keyword sicadStatement gbneu gbopenp gbpoly gbpos gbpruef
+syn keyword sicadStatement gbpruefg gbps gbqgel gbqgsa gbrefdic
+syn keyword sicadStatement gbreftab gbreldic gbresem gbrevoke gbsav
+syn keyword sicadStatement gbsbef gbsddk gbsicu gbsrt gbss
+syn keyword sicadStatement gbstat gbsysp gbszau gbubp gbueb
+syn keyword sicadStatement gbunmdb gbuseem gbw gbweg gbwieh
+syn keyword sicadStatement gbzt gelp gera getvar hgw
+syn keyword sicadStatement hpg hr0 hra hrar icclchan
+syn keyword sicadStatement iccrecon icdescon icfree icgetcon icgtresp
+syn keyword sicadStatement icopchan icputcon icreacon icreqd icreqnw
+syn keyword sicadStatement icreqw icrespd icresrve icwricon imsget
+syn keyword sicadStatement imsgqel imsmget imsplot imsprint inchk
+syn keyword sicadStatement inf infd inst kbml kbmls
+syn keyword sicadStatement kbmm kbmms kbmt kbmtdps kbmts
+syn keyword sicadStatement khboe khbol khdob khe khetap
+syn keyword sicadStatement khfrw khktk khlang khld khmfrp
+syn keyword sicadStatement khmks khms khpd khpfeil khpl
+syn keyword sicadStatement khprofil khrand khsa khsabs khsaph
+syn keyword sicadStatement khsd khsdl khse khskbz khsna
+syn keyword sicadStatement khsnum khsob khspos khsvph khtrn
+syn keyword sicadStatement khver khzpe khzpl kib kldat
+syn keyword sicadStatement klleg klsch klsym klvert kmpg
+syn keyword sicadStatement kmtlage kmtp kmtps kodef kodefp
+syn keyword sicadStatement kodefs kok kokp kolae kom
+syn keyword sicadStatement kontly kopar koparp kopg kosy
+syn keyword sicadStatement kp kr krsek krtclose krtopen
+syn keyword sicadStatement ktk lad lae laesel language
+syn keyword sicadStatement lasso lbdes lcs ldesk ldesks
+syn keyword sicadStatement le leak leattdes leba lebas
+syn keyword sicadStatement lebaznp lebd lebm lebv lebvaus
+syn keyword sicadStatement lebvlist lede ledel ledepo ledepol
+syn keyword sicadStatement ledepos leder ledist ledm lee
+syn keyword sicadStatement leeins lees lege lekr lekrend
+syn keyword sicadStatement lekwa lekwas lel lelh lell
+syn keyword sicadStatement lelp lem lena lend lenm
+syn keyword sicadStatement lep lepe lepee lepko lepl
+syn keyword sicadStatement lepmko lepmkop lepos leposm leqs
+syn keyword sicadStatement leqsl leqssp leqsv leqsvov les
+syn keyword sicadStatement lesch lesr less lestd let
+syn keyword sicadStatement letaum letl lev levm levtm
+syn keyword sicadStatement levtp levtr lew lewm lexx
+syn keyword sicadStatement lfs li lining lldes lmode
+syn keyword sicadStatement loedk loepkt lop lose loses
+syn keyword sicadStatement lp lppg lppruef lr ls
+syn keyword sicadStatement lsop lsta lstat ly lyaus
+syn keyword sicadStatement lz lza lzae lzbz lze
+syn keyword sicadStatement lznr lzo lzpos ma ma0
+syn keyword sicadStatement ma1 mad map mapoly mcarp
+syn keyword sicadStatement mccfr mccgr mcclr mccrf mcdf
+syn keyword sicadStatement mcdma mcdr mcdrp mcdve mcebd
+syn keyword sicadStatement mcgse mcinfo mcldrp md me
+syn keyword sicadStatement mefd mefds minmax mipg ml
+syn keyword sicadStatement mmcmdme mmdbf mmdellb mmdir mmdome
+syn keyword sicadStatement mmfsb mminfolb mmlapp mmlbf mmlistlb
+syn keyword sicadStatement mmloadcm mmmsg mmreadlb mmsetlb mmshowcm
+syn keyword sicadStatement mmstatme mnp mpo mr mra
+syn keyword sicadStatement ms msav msgout msgsnd msp
+syn keyword sicadStatement mspf mtd nasel ncomp new
+syn keyword sicadStatement nlist nlistlt nlistly nlistnp nlistpo
+syn keyword sicadStatement np npa npdes npe npem
+syn keyword sicadStatement npinfa npruef npsat npss npssa
+syn keyword sicadStatement ntz oa oan odel odf
+syn keyword sicadStatement odfx oj oja ojaddsk ojaed
+syn keyword sicadStatement ojaeds ojaef ojaefs ojaen ojak
+syn keyword sicadStatement ojaks ojakt ojakz ojalm ojatkis
+syn keyword sicadStatement ojatt ojatw ojbsel ojcasel ojckon
+syn keyword sicadStatement ojde ojdtl ojeb ojebd ojel
+syn keyword sicadStatement ojelpas ojesb ojesbd ojex ojezge
+syn keyword sicadStatement ojko ojlb ojloe ojlsb ojmerk
+syn keyword sicadStatement ojmos ojnam ojpda ojpoly ojprae
+syn keyword sicadStatement ojs ojsak ojsort ojstrukt ojsub
+syn keyword sicadStatement ojtdef ojvek ojx old oldd
+syn keyword sicadStatement op opa opa1 open opensim
+syn keyword sicadStatement opnbsd orth osanz ot otp
+syn keyword sicadStatement otrefp param paranf pas passw
+syn keyword sicadStatement pcatchf pda pdadd pg pg0
+syn keyword sicadStatement pgauf pgaufsel pgb pgko pgm
+syn keyword sicadStatement pgr pgvs pily pkpg plot
+syn keyword sicadStatement plotf plotfr pmap pmdata pmdi
+syn keyword sicadStatement pmdp pmeb pmep pminfo pmlb
+syn keyword sicadStatement pmli pmlp pmmod pnrver poa
+syn keyword sicadStatement pos posa posaus post printfr
+syn keyword sicadStatement protect prs prssy prsym ps
+syn keyword sicadStatement psadd psclose psopen psparam psprw
+syn keyword sicadStatement psres psstat psw pswr qualif
+syn keyword sicadStatement rahmen raster rasterd rbbackup rbchang2
+syn keyword sicadStatement rbchange rbcmd rbcoldst rbcolor rbcopy
+syn keyword sicadStatement rbcut rbcut2 rbdbcl rbdbload rbdbop
+syn keyword sicadStatement rbdbwin rbdefs rbedit rbfdel rbfill
+syn keyword sicadStatement rbfill2 rbfload rbfload2 rbfnew rbfnew2
+syn keyword sicadStatement rbfpar rbfree rbg rbgetcol rbgetdst
+syn keyword sicadStatement rbinfo rbpaste rbpixel rbrstore rbsnap
+syn keyword sicadStatement rbsta rbtile rbtrpix rbvtor rcol
+syn keyword sicadStatement rd rdchange re reb rebmod
+syn keyword sicadStatement refunc ren renel rk rkpos
+syn keyword sicadStatement rohr rohrpos rpr rr rr0
+syn keyword sicadStatement rra rrar rs samtosdb sav
+syn keyword sicadStatement savd savesim savx scol scopy
+syn keyword sicadStatement scopye sdbtosam sddk sdwr se
+syn keyword sicadStatement selaus selpos seman semi sesch
+syn keyword sicadStatement setscl setvar sfclntpf sfconn sffetchf
+syn keyword sicadStatement sffpropi sfftypi sfqugeoc sfquwhcl sfself
+syn keyword sicadStatement sfstat sftest sge sid sie
+syn keyword sicadStatement sig sigp skk skks sn
+syn keyword sicadStatement sn21 snpa snpar snparp snparps
+syn keyword sicadStatement snpars snpas snpd snpi snpkor
+syn keyword sicadStatement snpl snpm sob sob0 sobloe
+syn keyword sicadStatement sobs sof sop split spr
+syn keyword sicadStatement sqdadd sqdlad sqdold sqdsav
+syn keyword sicadStatement sr sres srt sset stat
+syn keyword sicadStatement stdtxt string strukt strupru suinfl
+syn keyword sicadStatement suinflk suinfls supo supo1 sva
+syn keyword sicadStatement svr sy sya syly sysout
+syn keyword sicadStatement syu syux taa tabeg tabl
+syn keyword sicadStatement tabm tam tanr tapg tapos
+syn keyword sicadStatement tarkd tas tase tb tbadd
+syn keyword sicadStatement tbd tbext tbget tbint tbout
+syn keyword sicadStatement tbput tbsat tbsel tbstr tcaux
+syn keyword sicadStatement tccable tcchkrep tccomm tccond tcdbg
+syn keyword sicadStatement tcgbnr tcgrpos tcinit tclconv tcmodel
+syn keyword sicadStatement tcnwe tcpairs tcpath tcrect tcrmdli
+syn keyword sicadStatement tcscheme tcschmap tcse tcselc tcstar
+syn keyword sicadStatement tcstrman tcsubnet tcsymbol tctable tcthrcab
+syn keyword sicadStatement tctrans tctst tdb tdbdel tdbget
+syn keyword sicadStatement tdblist tdbput tgmod titel tmoff
+syn keyword sicadStatement tmon tp tpa tps tpta
+syn keyword sicadStatement tra trans transkdo transopt transpro
+syn keyword sicadStatement triangle trm trpg trrkd trs
+syn keyword sicadStatement ts tsa tx txa txchk
+syn keyword sicadStatement txcng txju txl txp txpv
+syn keyword sicadStatement txtcmp txv txz uckon uiinfo
+syn keyword sicadStatement uistatus umdk umdk1 umdka umge
+syn keyword sicadStatement umges umr verbo verflli verif
+syn keyword sicadStatement verly versinfo vfg vpactive vpcenter
+syn keyword sicadStatement vpcreate vpdelete vpinfo vpmodify vpscroll
+syn keyword sicadStatement vpsta wabsym wzmerk zdrhf zdrhfn
+syn keyword sicadStatement zdrhfw zdrhfwn zefp zfl zflaus
+syn keyword sicadStatement zka zlel zlels zortf zortfn
+syn keyword sicadStatement zortfw zortfwn zortp zortpn zparb
+syn keyword sicadStatement zparbn zparf zparfn zparfw zparfwn
+syn keyword sicadStatement zparp zparpn zwinkp zwinkpn
+
+" 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_sicad_syntax_inits")
+
+ if version < 508
+ let did_sicad_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sicadLabel PreProc
+ HiLink sicadLabel1 sicadLabel
+ HiLink sicadLabel2 sicadLabel
+ HiLink sicadConditional Conditional
+ HiLink sicadBoolean Boolean
+ HiLink sicadNumber Number
+ HiLink sicadFloat Float
+ HiLink sicadOperator Operator
+ HiLink sicadStatement Statement
+ HiLink sicadParameter sicadStatement
+ HiLink sicadGoto sicadStatement
+ HiLink sicadLineCont sicadStatement
+ HiLink sicadString String
+ HiLink sicadComment Comment
+ HiLink sicadSpecial Special
+ HiLink sicadIdentifier Type
+" HiLink sicadIdentifier Identifier
+ HiLink sicadError Error
+ HiLink sicadParenError sicadError
+ HiLink sicadApostropheError sicadError
+ HiLink sicadStringError sicadError
+ HiLink sicadCommentError sicadError
+" HiLink sqlStatement Special " modified highlight group in sql.vim
+
+ delcommand HiLink
+
+endif
+
+let b:current_syntax = "sicad"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/simula.vim b/runtime/syntax/simula.vim
new file mode 100644
index 000000000..e952ee26c
--- /dev/null
+++ b/runtime/syntax/simula.vim
@@ -0,0 +1,99 @@
+" Vim syntax file
+" Language: Simula
+" Maintainer: Haakon Riiser <hakonrk@fys.uio.no>
+" URL: http://folk.uio.no/hakonrk/vim/syntax/simula.vim
+" Last Change: 2001 May 15
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" No case sensitivity in Simula
+syn case ignore
+
+syn match simulaComment "^%.*$" contains=simulaTodo
+syn region simulaComment start="!\|\<comment\>" end=";" contains=simulaTodo
+
+" Text between the keyword 'end' and either a semicolon or one of the
+" keywords 'end', 'else', 'when' or 'otherwise' is also a comment
+syn region simulaComment start="\<end\>"lc=3 matchgroup=Statement end=";\|\<\(end\|else\|when\|otherwise\)\>"
+
+syn match simulaCharError "'.\{-2,}'"
+syn match simulaCharacter "'.'"
+syn match simulaCharacter "'!\d\{-}!'" contains=simulaSpecialChar
+syn match simulaString '".\{-}"' contains=simulaSpecialChar,simulaTodo
+
+syn keyword simulaBoolean true false
+syn keyword simulaCompound begin end
+syn keyword simulaConditional else if otherwise then until when
+syn keyword simulaConstant none notext
+syn keyword simulaFunction procedure
+syn keyword simulaOperator eq eqv ge gt imp in is le lt ne new not qua
+syn keyword simulaRepeat while for
+syn keyword simulaReserved activate after at before delay go goto label prior reactivate switch to
+syn keyword simulaStatement do inner inspect step this
+syn keyword simulaStorageClass external hidden name protected value
+syn keyword simulaStructure class
+syn keyword simulaType array boolean character integer long real short text virtual
+syn match simulaAssigned "\<\h\w*\s*\((.*)\)\=\s*:\(=\|-\)"me=e-2
+syn match simulaOperator "[&:=<>+\-*/]"
+syn match simulaOperator "\<and\(\s\+then\)\=\>"
+syn match simulaOperator "\<or\(\s\+else\)\=\>"
+syn match simulaReferenceType "\<ref\s*(.\{-})"
+syn match simulaSemicolon ";"
+syn match simulaSpecial "[(),.]"
+syn match simulaSpecialCharErr "!\d\{-4,}!" contained
+syn match simulaSpecialCharErr "!!" contained
+syn match simulaSpecialChar "!\d\{-}!" contains=simulaSpecialCharErr contained
+syn match simulaTodo "xxx\+" contained
+
+" Integer number (or float without `.')
+syn match simulaNumber "-\=\<\d\+\>"
+" Real with optional exponent
+syn match simulaReal "-\=\<\d\+\(\.\d\+\)\=\(&&\=[+-]\=\d\+\)\=\>"
+" Real starting with a `.', optional exponent
+syn match simulaReal "-\=\.\d\+\(&&\=[+-]\=\d\+\)\=\>"
+
+if version >= 508 || !exists("did_simula_syntax_inits")
+ if version < 508
+ let did_simula_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink simulaAssigned Identifier
+ HiLink simulaBoolean Boolean
+ HiLink simulaCharacter Character
+ HiLink simulaCharError Error
+ HiLink simulaComment Comment
+ HiLink simulaCompound Statement
+ HiLink simulaConditional Conditional
+ HiLink simulaConstant Constant
+ HiLink simulaFunction Function
+ HiLink simulaNumber Number
+ HiLink simulaOperator Operator
+ HiLink simulaReal Float
+ HiLink simulaReferenceType Type
+ HiLink simulaRepeat Repeat
+ HiLink simulaReserved Error
+ HiLink simulaSemicolon Statement
+ HiLink simulaSpecial Special
+ HiLink simulaSpecialChar SpecialChar
+ HiLink simulaSpecialCharErr Error
+ HiLink simulaStatement Statement
+ HiLink simulaStorageClass StorageClass
+ HiLink simulaString String
+ HiLink simulaStructure Structure
+ HiLink simulaTodo Todo
+ HiLink simulaType Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "simula"
+" vim: sts=4 sw=4 ts=8
diff --git a/runtime/syntax/sinda.vim b/runtime/syntax/sinda.vim
new file mode 100644
index 000000000..2bde267c2
--- /dev/null
+++ b/runtime/syntax/sinda.vim
@@ -0,0 +1,146 @@
+" Vim syntax file
+" Language: sinda85, sinda/fluint input file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.sin
+" URL: http://www.naglenet.org/vim/syntax/sinda.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for sinda input and output files.
+"
+
+" Force free-form fortran format
+let fortran_free_source=1
+
+" Load FORTRAN syntax file
+if version < 600
+ source <sfile>:p:h/fortran.vim
+else
+ runtime! syntax/fortran.vim
+endif
+unlet b:current_syntax
+
+
+
+" Define keywords for SINDA
+syn keyword sindaMacro BUILD BUILDF DEBON DEBOFF DEFMOD FSTART FSTOP
+
+syn keyword sindaOptions TITLE PPSAVE RSI RSO OUTPUT SAVE QMAP USER1 USER2
+syn keyword sindaOptions MODEL PPOUT NOLIST MLINE NODEBUG DIRECTORIES
+syn keyword sindaOptions DOUBLEPR
+
+syn keyword sindaRoutine FORWRD FWDBCK STDSTL FASTIC
+
+syn keyword sindaControl ABSZRO ACCELX ACCELY ACCELZ ARLXCA ATMPCA
+syn keyword sindaControl BACKUP CSGFAC DRLXCA DTIMEH DTIMEI DTIMEL
+syn keyword sindaControl DTIMES DTMPCA EBALNA EBALSA EXTLIM ITEROT
+syn keyword sindaControl ITERXT ITHOLD NLOOPS NLOOPT OUTPUT OPEITR
+syn keyword sindaControl PATMOS SIGMA TIMEO TIMEND UID
+
+syn keyword sindaSubRoutine ASKERS ADARIN ADDARY ADDMOD ARINDV
+syn keyword sindaSubRoutine RYINV ARYMPY ARYSUB ARYTRN BAROC
+syn keyword sindaSubRoutine BELACC BNDDRV BNDGET CHENNB CHGFLD
+syn keyword sindaSubRoutine CHGLMP CHGSUC CHGVOL CHKCHL CHKCHP
+syn keyword sindaSubRoutine CNSTAB COMBAL COMPLQ COMPRS CONTRN
+syn keyword sindaSubRoutine CPRINT CRASH CRVINT CRYTRN CSIFLX
+syn keyword sindaSubRoutine CVTEMP D11CYL C11DAI D11DIM D11MCY
+syn keyword sindaSubRoutine D11MDA D11MDI D11MDT D12CYL D12MCY
+syn keyword sindaSubRoutine D12MDA D1D1DA D1D1IM D1D1WM D1D2DA
+syn keyword sindaSubRoutine D1D2WM D1DEG1 D1DEG2 D1DG1I D1IMD1
+syn keyword sindaSubRoutine D1IMIM D1IMWM D1M1DA D1M2MD D1M2WM
+syn keyword sindaSubRoutine D1MDG1 D1MDG2 D2D1WM D1DEG1 D2DEG2
+syn keyword sindaSubRoutine D2D2
+
+syn keyword sindaIdentifier BIV CAL DIM DIV DPM DPV DTV GEN PER PIV PIM
+syn keyword sindaIdentifier SIM SIV SPM SPV TVS TVD
+
+
+
+" Define matches for SINDA
+syn match sindaFortran "^F[0-9 ]"me=e-1
+syn match sindaMotran "^M[0-9 ]"me=e-1
+
+syn match sindaComment "^C.*$"
+syn match sindaComment "^R.*$"
+syn match sindaComment "\$.*$"
+
+syn match sindaHeader "^header[^,]*"
+
+syn match sindaIncludeFile "include \+[^ ]\+"hs=s+8 contains=fortranInclude
+
+syn match sindaMacro "^PSTART"
+syn match sindaMacro "^PSTOP"
+syn match sindaMacro "^FAC"
+
+syn match sindaInteger "-\=\<[0-9]*\>"
+syn match sindaFloat "-\=\<[0-9]*\.[0-9]*"
+syn match sindaScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+syn match sindaEndData "^END OF DATA"
+
+if exists("thermal_todo")
+ execute 'syn match sindaTodo ' . '"^'.thermal_todo.'.*$"'
+else
+ syn match sindaTodo "^?.*$"
+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_sinda_syntax_inits")
+ if version < 508
+ let did_sinda_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sindaMacro Macro
+ HiLink sindaOptions Special
+ HiLink sindaRoutine Type
+ HiLink sindaControl Special
+ HiLink sindaSubRoutine Function
+ HiLink sindaIdentifier Identifier
+
+ HiLink sindaFortran PreProc
+ HiLink sindaMotran PreProc
+
+ HiLink sindaComment Comment
+ HiLink sindaHeader Typedef
+ HiLink sindaIncludeFile Type
+ HiLink sindaInteger Number
+ HiLink sindaFloat Float
+ HiLink sindaScientific Float
+
+ HiLink sindaEndData Macro
+
+ HiLink sindaTodo Todo
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "sinda"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/sindacmp.vim b/runtime/syntax/sindacmp.vim
new file mode 100644
index 000000000..87b483409
--- /dev/null
+++ b/runtime/syntax/sindacmp.vim
@@ -0,0 +1,74 @@
+" Vim syntax file
+" Language: sinda85, sinda/fluint compare file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.cmp
+" URL: http://www.naglenet.org/vim/syntax/sindacmp.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+" Begin syntax definitions for compare files.
+"
+
+" Define keywords for sinda compare (sincomp)
+syn keyword sindacmpUnit celsius fahrenheit
+
+
+
+" Define matches for sinda compare (sincomp)
+syn match sindacmpTitle "Steady State Temperature Comparison"
+
+syn match sindacmpLabel "File [1-6] is"
+
+syn match sindacmpHeader "^ *Node\( *File \d\)* *Node Description"
+
+syn match sindacmpInteger "^ *-\=\<[0-9]*\>"
+syn match sindacmpFloat "-\=\<[0-9]*\.[0-9]*"
+
+
+
+" 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_sindacmp_syntax_inits")
+ if version < 508
+ let did_sindacmp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sindacmpTitle Type
+ HiLink sindacmpUnit PreProc
+
+ HiLink sindacmpLabel Statement
+
+ HiLink sindacmpHeader sindaHeader
+
+ HiLink sindacmpInteger Number
+ HiLink sindacmpFloat Special
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "sindacmp"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/sindaout.vim b/runtime/syntax/sindaout.vim
new file mode 100644
index 000000000..b557e017e
--- /dev/null
+++ b/runtime/syntax/sindaout.vim
@@ -0,0 +1,100 @@
+" Vim syntax file
+" Language: sinda85, sinda/fluint output file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.out
+" URL: http://www.naglenet.org/vim/syntax/sindaout.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case match
+
+
+
+" Load SINDA syntax file
+if version < 600
+ source <sfile>:p:h/sinda.vim
+else
+ runtime! syntax/sinda.vim
+endif
+unlet b:current_syntax
+
+
+
+"
+"
+" Begin syntax definitions for sinda output files.
+"
+
+" Define keywords for sinda output
+syn case match
+
+syn keyword sindaoutPos ON SI
+syn keyword sindaoutNeg OFF ENG
+
+
+
+" Define matches for sinda output
+syn match sindaoutFile ": \w*\.TAK"hs=s+2
+
+syn match sindaoutInteger "T\=[0-9]*\>"ms=s+1
+
+syn match sindaoutSectionDelim "[-<>]\{4,}" contains=sindaoutSectionTitle
+syn match sindaoutSectionDelim ":\=\.\{4,}:\=" contains=sindaoutSectionTitle
+syn match sindaoutSectionTitle "[-<:] \w[0-9A-Za-z_() ]\+ [->:]"hs=s+1,me=e-1
+
+syn match sindaoutHeaderDelim "=\{5,}"
+syn match sindaoutHeaderDelim "|\{5,}"
+syn match sindaoutHeaderDelim "+\{5,}"
+
+syn match sindaoutLabel "Input File:" contains=sindaoutFile
+syn match sindaoutLabel "Begin Solution: Routine"
+
+syn match sindaoutError "<<< Error >>>"
+
+
+" 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_sindaout_syntax_inits")
+ if version < 508
+ let did_sindaout_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ hi sindaHeaderDelim ctermfg=Black ctermbg=Green guifg=Black guibg=Green
+
+ HiLink sindaoutPos Statement
+ HiLink sindaoutNeg PreProc
+ HiLink sindaoutTitle Type
+ HiLink sindaoutFile sindaIncludeFile
+ HiLink sindaoutInteger sindaInteger
+
+ HiLink sindaoutSectionDelim Delimiter
+ HiLink sindaoutSectionTitle Exception
+ HiLink sindaoutHeaderDelim SpecialComment
+ HiLink sindaoutLabel Identifier
+
+ HiLink sindaoutError Error
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "sindaout"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/skill.vim b/runtime/syntax/skill.vim
new file mode 100644
index 000000000..8b960441f
--- /dev/null
+++ b/runtime/syntax/skill.vim
@@ -0,0 +1,562 @@
+" Vim syntax file
+" Language: SKILL
+" Maintainer: Toby Schaffer <jtschaff@eos.ncsu.edu>
+" Last Change: 2003 May 11
+" Comments: SKILL is a Lisp-like programming language for use in EDA
+" tools from Cadence Design Systems. It allows you to have
+" a programming environment within the Cadence environment
+" that gives you access to the complete tool set and design
+" database. This file also defines syntax highlighting for
+" certain Design Framework II interface functions.
+
+" 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 keyword skillConstants t nil unbound
+
+" enumerate all the SKILL reserved words/functions
+syn match skillFunction "(abs\>"hs=s+1
+syn match skillFunction "\<abs("he=e-1
+syn match skillFunction "(a\=cos\>"hs=s+1
+syn match skillFunction "\<a\=cos("he=e-1
+syn match skillFunction "(add1\>"hs=s+1
+syn match skillFunction "\<add1("he=e-1
+syn match skillFunction "(addDefstructClass\>"hs=s+1
+syn match skillFunction "\<addDefstructClass("he=e-1
+syn match skillFunction "(alias\>"hs=s+1
+syn match skillFunction "\<alias("he=e-1
+syn match skillFunction "(alphalessp\>"hs=s+1
+syn match skillFunction "\<alphalessp("he=e-1
+syn match skillFunction "(alphaNumCmp\>"hs=s+1
+syn match skillFunction "\<alphaNumCmp("he=e-1
+syn match skillFunction "(append1\=\>"hs=s+1
+syn match skillFunction "\<append1\=("he=e-1
+syn match skillFunction "(apply\>"hs=s+1
+syn match skillFunction "\<apply("he=e-1
+syn match skillFunction "(arrayp\>"hs=s+1
+syn match skillFunction "\<arrayp("he=e-1
+syn match skillFunction "(arrayref\>"hs=s+1
+syn match skillFunction "\<arrayref("he=e-1
+syn match skillFunction "(a\=sin\>"hs=s+1
+syn match skillFunction "\<a\=sin("he=e-1
+syn match skillFunction "(assoc\>"hs=s+1
+syn match skillFunction "\<assoc("he=e-1
+syn match skillFunction "(ass[qv]\>"hs=s+1
+syn match skillFunction "\<ass[qv]("he=e-1
+syn match skillFunction "(a\=tan\>"hs=s+1
+syn match skillFunction "\<a\=tan("he=e-1
+syn match skillFunction "(ato[fim]\>"hs=s+1
+syn match skillFunction "\<ato[fim]("he=e-1
+syn match skillFunction "(bcdp\>"hs=s+1
+syn match skillFunction "\<bcdp("he=e-1
+syn match skillKeywords "(begin\>"hs=s+1
+syn match skillKeywords "\<begin("he=e-1
+syn match skillFunction "(booleanp\>"hs=s+1
+syn match skillFunction "\<booleanp("he=e-1
+syn match skillFunction "(boundp\>"hs=s+1
+syn match skillFunction "\<boundp("he=e-1
+syn match skillFunction "(buildString\>"hs=s+1
+syn match skillFunction "\<buildString("he=e-1
+syn match skillFunction "(c[ad]{1,3}r\>"hs=s+1
+syn match skillFunction "\<c[ad]{1,3}r("he=e-1
+syn match skillConditional "(caseq\=\>"hs=s+1
+syn match skillConditional "\<caseq\=("he=e-1
+syn match skillFunction "(ceiling\>"hs=s+1
+syn match skillFunction "\<ceiling("he=e-1
+syn match skillFunction "(changeWorkingDir\>"hs=s+1
+syn match skillFunction "\<changeWorkingDir("he=e-1
+syn match skillFunction "(charToInt\>"hs=s+1
+syn match skillFunction "\<charToInt("he=e-1
+syn match skillFunction "(clearExitProcs\>"hs=s+1
+syn match skillFunction "\<clearExitProcs("he=e-1
+syn match skillFunction "(close\>"hs=s+1
+syn match skillFunction "\<close("he=e-1
+syn match skillFunction "(compareTime\>"hs=s+1
+syn match skillFunction "\<compareTime("he=e-1
+syn match skillFunction "(compress\>"hs=s+1
+syn match skillFunction "\<compress("he=e-1
+syn match skillFunction "(concat\>"hs=s+1
+syn match skillFunction "\<concat("he=e-1
+syn match skillConditional "(cond\>"hs=s+1
+syn match skillConditional "\<cond("he=e-1
+syn match skillFunction "(cons\>"hs=s+1
+syn match skillFunction "\<cons("he=e-1
+syn match skillFunction "(copy\>"hs=s+1
+syn match skillFunction "\<copy("he=e-1
+syn match skillFunction "(copyDefstructDeep\>"hs=s+1
+syn match skillFunction "\<copyDefstructDeep("he=e-1
+syn match skillFunction "(createDir\>"hs=s+1
+syn match skillFunction "\<createDir("he=e-1
+syn match skillFunction "(csh\>"hs=s+1
+syn match skillFunction "\<csh("he=e-1
+syn match skillKeywords "(declare\>"hs=s+1
+syn match skillKeywords "\<declare("he=e-1
+syn match skillKeywords "(declare\(N\|SQN\)\=Lambda\>"hs=s+1
+syn match skillKeywords "\<declare\(N\|SQN\)\=Lambda("he=e-1
+syn match skillKeywords "(defmacro\>"hs=s+1
+syn match skillKeywords "\<defmacro("he=e-1
+syn match skillKeywords "(defprop\>"hs=s+1
+syn match skillKeywords "\<defprop("he=e-1
+syn match skillKeywords "(defstruct\>"hs=s+1
+syn match skillKeywords "\<defstruct("he=e-1
+syn match skillFunction "(defstructp\>"hs=s+1
+syn match skillFunction "\<defstructp("he=e-1
+syn match skillKeywords "(defun\>"hs=s+1
+syn match skillKeywords "\<defun("he=e-1
+syn match skillKeywords "(defUserInitProc\>"hs=s+1
+syn match skillKeywords "\<defUserInitProc("he=e-1
+syn match skillKeywords "(defvar\>"hs=s+1
+syn match skillKeywords "\<defvar("he=e-1
+syn match skillFunction "(delete\(Dir\|File\)\>"hs=s+1
+syn match skillKeywords "\<delete\(Dir\|File\)("he=e-1
+syn match skillFunction "(display\>"hs=s+1
+syn match skillFunction "\<display("he=e-1
+syn match skillFunction "(drain\>"hs=s+1
+syn match skillFunction "\<drain("he=e-1
+syn match skillFunction "(dtpr\>"hs=s+1
+syn match skillFunction "\<dtpr("he=e-1
+syn match skillFunction "(ed\(i\|l\|it\)\=\>"hs=s+1
+syn match skillFunction "\<ed\(i\|l\|it\)\=("he=e-1
+syn match skillFunction "(envobj\>"hs=s+1
+syn match skillFunction "\<envobj("he=e-1
+syn match skillFunction "(equal\>"hs=s+1
+syn match skillFunction "\<equal("he=e-1
+syn match skillFunction "(eqv\=\>"hs=s+1
+syn match skillFunction "\<eqv\=("he=e-1
+syn match skillFunction "(err\>"hs=s+1
+syn match skillFunction "\<err("he=e-1
+syn match skillFunction "(error\>"hs=s+1
+syn match skillFunction "\<error("he=e-1
+syn match skillFunction "(errset\>"hs=s+1
+syn match skillFunction "\<errset("he=e-1
+syn match skillFunction "(errsetstring\>"hs=s+1
+syn match skillFunction "\<errsetstring("he=e-1
+syn match skillFunction "(eval\>"hs=s+1
+syn match skillFunction "\<eval("he=e-1
+syn match skillFunction "(evalstring\>"hs=s+1
+syn match skillFunction "\<evalstring("he=e-1
+syn match skillFunction "(evenp\>"hs=s+1
+syn match skillFunction "\<evenp("he=e-1
+syn match skillFunction "(exists\>"hs=s+1
+syn match skillFunction "\<exists("he=e-1
+syn match skillFunction "(exit\>"hs=s+1
+syn match skillFunction "\<exit("he=e-1
+syn match skillFunction "(exp\>"hs=s+1
+syn match skillFunction "\<exp("he=e-1
+syn match skillFunction "(expandMacro\>"hs=s+1
+syn match skillFunction "\<expandMacro("he=e-1
+syn match skillFunction "(file\(Length\|Seek\|Tell\|TimeModified\)\>"hs=s+1
+syn match skillFunction "\<file\(Length\|Seek\|Tell\|TimeModified\)("he=e-1
+syn match skillFunction "(fixp\=\>"hs=s+1
+syn match skillFunction "\<fixp\=("he=e-1
+syn match skillFunction "(floatp\=\>"hs=s+1
+syn match skillFunction "\<floatp\=("he=e-1
+syn match skillFunction "(floor\>"hs=s+1
+syn match skillFunction "\<floor("he=e-1
+syn match skillRepeat "(for\(all\|each\)\=\>"hs=s+1
+syn match skillRepeat "\<for\(all\|each\)\=("he=e-1
+syn match skillFunction "([fs]\=printf\>"hs=s+1
+syn match skillFunction "\<[fs]\=printf("he=e-1
+syn match skillFunction "(f\=scanf\>"hs=s+1
+syn match skillFunction "\<f\=scanf("he=e-1
+syn match skillFunction "(funobj\>"hs=s+1
+syn match skillFunction "\<funobj("he=e-1
+syn match skillFunction "(gc\>"hs=s+1
+syn match skillFunction "\<gc("he=e-1
+syn match skillFunction "(gensym\>"hs=s+1
+syn match skillFunction "\<gensym("he=e-1
+syn match skillFunction "(get\(_pname\|_string\)\=\>"hs=s+1
+syn match skillFunction "\<get\(_pname\|_string\)\=("he=e-1
+syn match skillFunction "(getc\(har\)\=\>"hs=s+1
+syn match skillFunction "\<getc\(har\)\=("he=e-1
+syn match skillFunction "(getCurrentTime\>"hs=s+1
+syn match skillFunction "\<getCurrentTime("he=e-1
+syn match skillFunction "(getd\>"hs=s+1
+syn match skillFunction "\<getd("he=e-1
+syn match skillFunction "(getDirFiles\>"hs=s+1
+syn match skillFunction "\<getDirFiles("he=e-1
+syn match skillFunction "(getFnWriteProtect\>"hs=s+1
+syn match skillFunction "\<getFnWriteProtect("he=e-1
+syn match skillFunction "(getRunType\>"hs=s+1
+syn match skillFunction "\<getRunType("he=e-1
+syn match skillFunction "(getInstallPath\>"hs=s+1
+syn match skillFunction "\<getInstallPath("he=e-1
+syn match skillFunction "(getqq\=\>"hs=s+1
+syn match skillFunction "\<getqq\=("he=e-1
+syn match skillFunction "(gets\>"hs=s+1
+syn match skillFunction "\<gets("he=e-1
+syn match skillFunction "(getShellEnvVar\>"hs=s+1
+syn match skillFunction "\<getShellEnvVar("he=e-1
+syn match skillFunction "(getSkill\(Path\|Version\)\>"hs=s+1
+syn match skillFunction "\<getSkill\(Path\|Version\)("he=e-1
+syn match skillFunction "(getVarWriteProtect\>"hs=s+1
+syn match skillFunction "\<getVarWriteProtect("he=e-1
+syn match skillFunction "(getVersion\>"hs=s+1
+syn match skillFunction "\<getVersion("he=e-1
+syn match skillFunction "(getWarn\>"hs=s+1
+syn match skillFunction "\<getWarn("he=e-1
+syn match skillFunction "(getWorkingDir\>"hs=s+1
+syn match skillFunction "\<getWorkingDir("he=e-1
+syn match skillRepeat "(go\>"hs=s+1
+syn match skillRepeat "\<go("he=e-1
+syn match skillConditional "(if\>"hs=s+1
+syn match skillConditional "\<if("he=e-1
+syn keyword skillConditional then else
+syn match skillFunction "(index\>"hs=s+1
+syn match skillFunction "\<index("he=e-1
+syn match skillFunction "(infile\>"hs=s+1
+syn match skillFunction "\<infile("he=e-1
+syn match skillFunction "(inportp\>"hs=s+1
+syn match skillFunction "\<inportp("he=e-1
+syn match skillFunction "(in\(Scheme\|Skill\)\>"hs=s+1
+syn match skillFunction "\<in\(Scheme\|Skill\)("he=e-1
+syn match skillFunction "(instring\>"hs=s+1
+syn match skillFunction "\<instring("he=e-1
+syn match skillFunction "(integerp\>"hs=s+1
+syn match skillFunction "\<integerp("he=e-1
+syn match skillFunction "(intToChar\>"hs=s+1
+syn match skillFunction "\<intToChar("he=e-1
+syn match skillFunction "(is\(Callable\|Dir\|Executable\|File\|FileEncrypted\|FileName\|Link\|Macro\|Writable\)\>"hs=s+1
+syn match skillFunction "\<is\(Callable\|Dir\|Executable\|File\|FileEncrypted\|FileName\|Link\|Macro\|Writable\)("he=e-1
+syn match skillKeywords "(n\=lambda\>"hs=s+1
+syn match skillKeywords "\<n\=lambda("he=e-1
+syn match skillKeywords "(last\>"hs=s+1
+syn match skillKeywords "\<last("he=e-1
+syn match skillFunction "(lconc\>"hs=s+1
+syn match skillFunction "\<lconc("he=e-1
+syn match skillFunction "(length\>"hs=s+1
+syn match skillFunction "\<length("he=e-1
+syn match skillKeywords "(let\>"hs=s+1
+syn match skillKeywords "\<let("he=e-1
+syn match skillFunction "(lineread\(string\)\=\>"hs=s+1
+syn match skillFunction "\<lineread\(string\)\=("he=e-1
+syn match skillKeywords "(list\>"hs=s+1
+syn match skillKeywords "\<list("he=e-1
+syn match skillFunction "(listp\>"hs=s+1
+syn match skillFunction "\<listp("he=e-1
+syn match skillFunction "(listToVector\>"hs=s+1
+syn match skillFunction "\<listToVector("he=e-1
+syn match skillFunction "(loadi\=\>"hs=s+1
+syn match skillFunction "\<loadi\=("he=e-1
+syn match skillFunction "(loadstring\>"hs=s+1
+syn match skillFunction "\<loadstring("he=e-1
+syn match skillFunction "(log\>"hs=s+1
+syn match skillFunction "\<log("he=e-1
+syn match skillFunction "(lowerCase\>"hs=s+1
+syn match skillFunction "\<lowerCase("he=e-1
+syn match skillFunction "(makeTable\>"hs=s+1
+syn match skillFunction "\<makeTable("he=e-1
+syn match skillFunction "(makeTempFileName\>"hs=s+1
+syn match skillFunction "\<makeTempFileName("he=e-1
+syn match skillFunction "(makeVector\>"hs=s+1
+syn match skillFunction "\<makeVector("he=e-1
+syn match skillFunction "(map\(c\|can\|car\|list\)\>"hs=s+1
+syn match skillFunction "\<map\(c\|can\|car\|list\)("he=e-1
+syn match skillFunction "(max\>"hs=s+1
+syn match skillFunction "\<max("he=e-1
+syn match skillFunction "(measureTime\>"hs=s+1
+syn match skillFunction "\<measureTime("he=e-1
+syn match skillFunction "(member\>"hs=s+1
+syn match skillFunction "\<member("he=e-1
+syn match skillFunction "(mem[qv]\>"hs=s+1
+syn match skillFunction "\<mem[qv]("he=e-1
+syn match skillFunction "(min\>"hs=s+1
+syn match skillFunction "\<min("he=e-1
+syn match skillFunction "(minusp\>"hs=s+1
+syn match skillFunction "\<minusp("he=e-1
+syn match skillFunction "(mod\(ulo\)\=\>"hs=s+1
+syn match skillFunction "\<mod\(ulo\)\=("he=e-1
+syn match skillKeywords "([mn]\=procedure\>"hs=s+1
+syn match skillKeywords "\<[mn]\=procedure("he=e-1
+syn match skillFunction "(ncon[cs]\>"hs=s+1
+syn match skillFunction "\<ncon[cs]("he=e-1
+syn match skillFunction "(needNCells\>"hs=s+1
+syn match skillFunction "\<needNCells("he=e-1
+syn match skillFunction "(negativep\>"hs=s+1
+syn match skillFunction "\<negativep("he=e-1
+syn match skillFunction "(neq\(ual\)\=\>"hs=s+1
+syn match skillFunction "\<neq\(ual\)\=("he=e-1
+syn match skillFunction "(newline\>"hs=s+1
+syn match skillFunction "\<newline("he=e-1
+syn match skillFunction "(nindex\>"hs=s+1
+syn match skillFunction "\<nindex("he=e-1
+syn match skillFunction "(not\>"hs=s+1
+syn match skillFunction "\<not("he=e-1
+syn match skillFunction "(nth\(cdr\|elem\)\=\>"hs=s+1
+syn match skillFunction "\<nth\(cdr\|elem\)\=("he=e-1
+syn match skillFunction "(null\>"hs=s+1
+syn match skillFunction "\<null("he=e-1
+syn match skillFunction "(numberp\>"hs=s+1
+syn match skillFunction "\<numberp("he=e-1
+syn match skillFunction "(numOpenFiles\>"hs=s+1
+syn match skillFunction "\<numOpenFiles("he=e-1
+syn match skillFunction "(oddp\>"hs=s+1
+syn match skillFunction "\<oddp("he=e-1
+syn match skillFunction "(onep\>"hs=s+1
+syn match skillFunction "\<onep("he=e-1
+syn match skillFunction "(otherp\>"hs=s+1
+syn match skillFunction "\<otherp("he=e-1
+syn match skillFunction "(outfile\>"hs=s+1
+syn match skillFunction "\<outfile("he=e-1
+syn match skillFunction "(outportp\>"hs=s+1
+syn match skillFunction "\<outportp("he=e-1
+syn match skillFunction "(pairp\>"hs=s+1
+syn match skillFunction "\<pairp("he=e-1
+syn match skillFunction "(parseString\>"hs=s+1
+syn match skillFunction "\<parseString("he=e-1
+syn match skillFunction "(plist\>"hs=s+1
+syn match skillFunction "\<plist("he=e-1
+syn match skillFunction "(plusp\>"hs=s+1
+syn match skillFunction "\<plusp("he=e-1
+syn match skillFunction "(portp\>"hs=s+1
+syn match skillFunction "\<portp("he=e-1
+syn match skillFunction "(p\=print\>"hs=s+1
+syn match skillFunction "\<p\=print("he=e-1
+syn match skillFunction "(prependInstallPath\>"hs=s+1
+syn match skillFunction "\<prependInstallPath("he=e-1
+syn match skillFunction "(printl\(ev\|n\)\>"hs=s+1
+syn match skillFunction "\<printl\(ev\|n\)("he=e-1
+syn match skillFunction "(procedurep\>"hs=s+1
+syn match skillFunction "\<procedurep("he=e-1
+syn match skillKeywords "(prog[12n]\=\>"hs=s+1
+syn match skillKeywords "\<prog[12n]\=("he=e-1
+syn match skillFunction "(putd\>"hs=s+1
+syn match skillFunction "\<putd("he=e-1
+syn match skillFunction "(putpropq\{,2}\>"hs=s+1
+syn match skillFunction "\<putpropq\{,2}("he=e-1
+syn match skillFunction "(random\>"hs=s+1
+syn match skillFunction "\<random("he=e-1
+syn match skillFunction "(read\>"hs=s+1
+syn match skillFunction "\<read("he=e-1
+syn match skillFunction "(readString\>"hs=s+1
+syn match skillFunction "\<readString("he=e-1
+syn match skillFunction "(readTable\>"hs=s+1
+syn match skillFunction "\<readTable("he=e-1
+syn match skillFunction "(realp\>"hs=s+1
+syn match skillFunction "\<realp("he=e-1
+syn match skillFunction "(regExit\(After\|Before\)\>"hs=s+1
+syn match skillFunction "\<regExit\(After\|Before\)("he=e-1
+syn match skillFunction "(remainder\>"hs=s+1
+syn match skillFunction "\<remainder("he=e-1
+syn match skillFunction "(remdq\=\>"hs=s+1
+syn match skillFunction "\<remdq\=("he=e-1
+syn match skillFunction "(remExitProc\>"hs=s+1
+syn match skillFunction "\<remExitProc("he=e-1
+syn match skillFunction "(remove\>"hs=s+1
+syn match skillFunction "\<remove("he=e-1
+syn match skillFunction "(remprop\>"hs=s+1
+syn match skillFunction "\<remprop("he=e-1
+syn match skillFunction "(remq\>"hs=s+1
+syn match skillFunction "\<remq("he=e-1
+syn match skillKeywords "(return\>"hs=s+1
+syn match skillKeywords "\<return("he=e-1
+syn match skillFunction "(reverse\>"hs=s+1
+syn match skillFunction "\<reverse("he=e-1
+syn match skillFunction "(rexCompile\>"hs=s+1
+syn match skillFunction "\<rexCompile("he=e-1
+syn match skillFunction "(rexExecute\>"hs=s+1
+syn match skillFunction "\<rexExecute("he=e-1
+syn match skillFunction "(rexMagic\>"hs=s+1
+syn match skillFunction "\<rexMagic("he=e-1
+syn match skillFunction "(rexMatchAssocList\>"hs=s+1
+syn match skillFunction "\<rexMatchAssocList("he=e-1
+syn match skillFunction "(rexMatchList\>"hs=s+1
+syn match skillFunction "\<rexMatchList("he=e-1
+syn match skillFunction "(rexMatchp\>"hs=s+1
+syn match skillFunction "\<rexMatchp("he=e-1
+syn match skillFunction "(rexReplace\>"hs=s+1
+syn match skillFunction "\<rexReplace("he=e-1
+syn match skillFunction "(rexSubstitute\>"hs=s+1
+syn match skillFunction "\<rexSubstitute("he=e-1
+syn match skillFunction "(rindex\>"hs=s+1
+syn match skillFunction "\<rindex("he=e-1
+syn match skillFunction "(round\>"hs=s+1
+syn match skillFunction "\<round("he=e-1
+syn match skillFunction "(rplac[ad]\>"hs=s+1
+syn match skillFunction "\<rplac[ad]("he=e-1
+syn match skillFunction "(schemeTopLevelEnv\>"hs=s+1
+syn match skillFunction "\<schemeTopLevelEnv("he=e-1
+syn match skillFunction "(set\>"hs=s+1
+syn match skillFunction "\<set("he=e-1
+syn match skillFunction "(setarray\>"hs=s+1
+syn match skillFunction "\<setarray("he=e-1
+syn match skillFunction "(setc[ad]r\>"hs=s+1
+syn match skillFunction "\<setc[ad]r("he=e-1
+syn match skillFunction "(setFnWriteProtect\>"hs=s+1
+syn match skillFunction "\<setFnWriteProtect("he=e-1
+syn match skillFunction "(setof\>"hs=s+1
+syn match skillFunction "\<setof("he=e-1
+syn match skillFunction "(setplist\>"hs=s+1
+syn match skillFunction "\<setplist("he=e-1
+syn match skillFunction "(setq\>"hs=s+1
+syn match skillFunction "\<setq("he=e-1
+syn match skillFunction "(setShellEnvVar\>"hs=s+1
+syn match skillFunction "\<setShellEnvVar("he=e-1
+syn match skillFunction "(setSkillPath\>"hs=s+1
+syn match skillFunction "\<setSkillPath("he=e-1
+syn match skillFunction "(setVarWriteProtect\>"hs=s+1
+syn match skillFunction "\<setVarWriteProtect("he=e-1
+syn match skillFunction "(sh\(ell\)\=\>"hs=s+1
+syn match skillFunction "\<sh\(ell\)\=("he=e-1
+syn match skillFunction "(simplifyFilename\>"hs=s+1
+syn match skillFunction "\<simplifyFilename("he=e-1
+syn match skillFunction "(sort\(car\)\=\>"hs=s+1
+syn match skillFunction "\<sort\(car\)\=("he=e-1
+syn match skillFunction "(sqrt\>"hs=s+1
+syn match skillFunction "\<sqrt("he=e-1
+syn match skillFunction "(srandom\>"hs=s+1
+syn match skillFunction "\<srandom("he=e-1
+syn match skillFunction "(sstatus\>"hs=s+1
+syn match skillFunction "\<sstatus("he=e-1
+syn match skillFunction "(strn\=cat\>"hs=s+1
+syn match skillFunction "\<strn\=cat("he=e-1
+syn match skillFunction "(strn\=cmp\>"hs=s+1
+syn match skillFunction "\<strn\=cmp("he=e-1
+syn match skillFunction "(stringp\>"hs=s+1
+syn match skillFunction "\<stringp("he=e-1
+syn match skillFunction "(stringTo\(Function\|Symbol\|Time\)\>"hs=s+1
+syn match skillFunction "\<stringTo\(Function\|Symbol\|Time\)("he=e-1
+syn match skillFunction "(strlen\>"hs=s+1
+syn match skillFunction "\<strlen("he=e-1
+syn match skillFunction "(sub1\>"hs=s+1
+syn match skillFunction "\<sub1("he=e-1
+syn match skillFunction "(subst\>"hs=s+1
+syn match skillFunction "\<subst("he=e-1
+syn match skillFunction "(substring\>"hs=s+1
+syn match skillFunction "\<substring("he=e-1
+syn match skillFunction "(sxtd\>"hs=s+1
+syn match skillFunction "\<sxtd("he=e-1
+syn match skillFunction "(symbolp\>"hs=s+1
+syn match skillFunction "\<symbolp("he=e-1
+syn match skillFunction "(symbolToString\>"hs=s+1
+syn match skillFunction "\<symbolToString("he=e-1
+syn match skillFunction "(symeval\>"hs=s+1
+syn match skillFunction "\<symeval("he=e-1
+syn match skillFunction "(symstrp\>"hs=s+1
+syn match skillFunction "\<symstrp("he=e-1
+syn match skillFunction "(system\>"hs=s+1
+syn match skillFunction "\<system("he=e-1
+syn match skillFunction "(tablep\>"hs=s+1
+syn match skillFunction "\<tablep("he=e-1
+syn match skillFunction "(tableToList\>"hs=s+1
+syn match skillFunction "\<tableToList("he=e-1
+syn match skillFunction "(tailp\>"hs=s+1
+syn match skillFunction "\<tailp("he=e-1
+syn match skillFunction "(tconc\>"hs=s+1
+syn match skillFunction "\<tconc("he=e-1
+syn match skillFunction "(timeToString\>"hs=s+1
+syn match skillFunction "\<timeToString("he=e-1
+syn match skillFunction "(timeToTm\>"hs=s+1
+syn match skillFunction "\<timeToTm("he=e-1
+syn match skillFunction "(tmToTime\>"hs=s+1
+syn match skillFunction "\<tmToTime("he=e-1
+syn match skillFunction "(truncate\>"hs=s+1
+syn match skillFunction "\<truncate("he=e-1
+syn match skillFunction "(typep\=\>"hs=s+1
+syn match skillFunction "\<typep\=("he=e-1
+syn match skillFunction "(unalias\>"hs=s+1
+syn match skillFunction "\<unalias("he=e-1
+syn match skillConditional "(unless\>"hs=s+1
+syn match skillConditional "\<unless("he=e-1
+syn match skillFunction "(upperCase\>"hs=s+1
+syn match skillFunction "\<upperCase("he=e-1
+syn match skillFunction "(vector\(ToList\)\=\>"hs=s+1
+syn match skillFunction "\<vector\(ToList\)\=("he=e-1
+syn match skillFunction "(warn\>"hs=s+1
+syn match skillFunction "\<warn("he=e-1
+syn match skillConditional "(when\>"hs=s+1
+syn match skillConditional "\<when("he=e-1
+syn match skillRepeat "(while\>"hs=s+1
+syn match skillRepeat "\<while("he=e-1
+syn match skillFunction "(write\>"hs=s+1
+syn match skillFunction "\<write("he=e-1
+syn match skillFunction "(writeTable\>"hs=s+1
+syn match skillFunction "\<writeTable("he=e-1
+syn match skillFunction "(xcons\>"hs=s+1
+syn match skillFunction "\<xcons("he=e-1
+syn match skillFunction "(zerop\>"hs=s+1
+syn match skillFunction "\<zerop("he=e-1
+syn match skillFunction "(zxtd\>"hs=s+1
+syn match skillFunction "\<zxtd("he=e-1
+
+" DFII procedural interface routines
+
+" CDF functions
+syn match skillcdfFunctions "(cdf\u\a\+\>"hs=s+1
+syn match skillcdfFunctions "\<cdf\u\a\+("he=e-1
+" graphic editor functions
+syn match skillgeFunctions "(ge\u\a\+\>"hs=s+1
+syn match skillgeFunctions "\<ge\u\a\+("he=e-1
+" human interface functions
+syn match skillhiFunctions "(hi\u\a\+\>"hs=s+1
+syn match skillhiFunctions "\<hi\u\a\+("he=e-1
+" layout editor functions
+syn match skillleFunctions "(le\u\a\+\>"hs=s+1
+syn match skillleFunctions "\<le\u\a\+("he=e-1
+" database|design editor|design flow functions
+syn match skilldbefFunctions "(d[bef]\u\a\+\>"hs=s+1
+syn match skilldbefFunctions "\<d[bef]\u\a\+("he=e-1
+" design management & design data services functions
+syn match skillddFunctions "(dd[s]\=\u\a\+\>"hs=s+1
+syn match skillddFunctions "\<dd[s]\=\u\a\+("he=e-1
+" parameterized cell functions
+syn match skillpcFunctions "(pc\u\a\+\>"hs=s+1
+syn match skillpcFunctions "\<pc\u\a\+("he=e-1
+" tech file functions
+syn match skilltechFunctions "(\(tech\|tc\)\u\a\+\>"hs=s+1
+syn match skilltechFunctions "\<\(tech\|tc\)\u\a\+("he=e-1
+
+" strings
+syn region skillString start=+"+ skip=+\\"+ end=+"+
+
+syn keyword skillTodo contained TODO FIXME XXX
+syn keyword skillNote contained NOTE IMPORTANT
+
+" comments are either C-style or begin with a semicolon
+syn region skillComment start="/\*" end="\*/" contains=skillTodo,skillNote
+syn match skillComment ";.*" contains=skillTodo,skillNote
+syn match skillCommentError "\*/"
+
+syn sync ccomment skillComment minlines=10
+
+" 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_skill_syntax_inits")
+ if version < 508
+ let did_skill_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink skillcdfFunctions Function
+ HiLink skillgeFunctions Function
+ HiLink skillhiFunctions Function
+ HiLink skillleFunctions Function
+ HiLink skilldbefFunctions Function
+ HiLink skillddFunctions Function
+ HiLink skillpcFunctions Function
+ HiLink skilltechFunctions Function
+ HiLink skillConstants Constant
+ HiLink skillFunction Function
+ HiLink skillKeywords Statement
+ HiLink skillConditional Conditional
+ HiLink skillRepeat Repeat
+ HiLink skillString String
+ HiLink skillTodo Todo
+ HiLink skillNote Todo
+ HiLink skillComment Comment
+ HiLink skillCommentError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "skill"
+
+" vim: ts=4
diff --git a/runtime/syntax/sl.vim b/runtime/syntax/sl.vim
new file mode 100644
index 000000000..fa3bca06d
--- /dev/null
+++ b/runtime/syntax/sl.vim
@@ -0,0 +1,120 @@
+" Vim syntax file
+" Language: Renderman shader language
+" Maintainer: Dan Piponi <dan@tanelorn.demon.co.uk>
+" Last Change: 2001 May 09
+
+" 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
+
+" A bunch of useful Renderman keywords including special
+" RenderMan control structures
+syn keyword slStatement break return continue
+syn keyword slConditional if else
+syn keyword slRepeat while for
+syn keyword slRepeat illuminance illuminate solar
+
+syn keyword slTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match slSpecial contained "\\[0-9][0-9][0-9]\|\\."
+syn region slString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=slSpecial
+syn match slCharacter "'[^\\]'"
+syn match slSpecialCharacter "'\\.'"
+syn match slSpecialCharacter "'\\[0-9][0-9]'"
+syn match slSpecialCharacter "'\\[0-9][0-9][0-9]'"
+
+"catch errors caused by wrong parenthesis
+syn region slParen transparent start='(' end=')' contains=ALLBUT,slParenError,slIncluded,slSpecial,slTodo,slUserLabel
+syn match slParenError ")"
+syn match slInParen contained "[{}]"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match slNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match slFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match slFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match slFloat "\<[0-9]\+e[-+]\=[0-9]\+[fl]\=\>"
+"hex number
+syn match slNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+"syn match slIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+
+if exists("sl_comment_strings")
+ " A comment can contain slString, slCharacter and slNumber.
+ " But a "*/" inside a slString in a slComment DOES end the comment! So we
+ " need to use a special type of slString: slCommentString, 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 slCommentSkip contained "^\s*\*\($\|\s\+\)"
+ syntax region slCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=slSpecial,slCommentSkip
+ syntax region slComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=slSpecial
+ syntax region slComment start="/\*" end="\*/" contains=slTodo,slCommentString,slCharacter,slNumber
+else
+ syn region slComment start="/\*" end="\*/" contains=slTodo
+endif
+syntax match slCommentError "\*/"
+
+syn keyword slOperator sizeof
+syn keyword slType float point color string vector normal matrix void
+syn keyword slStorageClass varying uniform extern
+syn keyword slStorageClass light surface volume displacement transformation imager
+syn keyword slVariable Cs Os P dPdu dPdv N Ng u v du dv s t
+syn keyword slVariable L Cl Ol E I ncomps time Ci Oi
+syn keyword slVariable Ps alpha
+syn keyword slVariable dtime dPdtime
+
+syn sync ccomment slComment minlines=10
+
+" 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_sl_syntax_inits")
+ if version < 508
+ let did_sl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink slLabel Label
+ HiLink slUserLabel Label
+ HiLink slConditional Conditional
+ HiLink slRepeat Repeat
+ HiLink slCharacter Character
+ HiLink slSpecialCharacter slSpecial
+ HiLink slNumber Number
+ HiLink slFloat Float
+ HiLink slParenError slError
+ HiLink slInParen slError
+ HiLink slCommentError slError
+ HiLink slOperator Operator
+ HiLink slStorageClass StorageClass
+ HiLink slError Error
+ HiLink slStatement Statement
+ HiLink slType Type
+ HiLink slCommentError slError
+ HiLink slCommentString slString
+ HiLink slComment2String slString
+ HiLink slCommentSkip slComment
+ HiLink slString String
+ HiLink slComment Comment
+ HiLink slSpecial SpecialChar
+ HiLink slTodo Todo
+ HiLink slVariable Identifier
+ "HiLink slIdentifier Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sl"
+
+" vim: ts=8
diff --git a/runtime/syntax/slang.vim b/runtime/syntax/slang.vim
new file mode 100644
index 000000000..9fa89b4d6
--- /dev/null
+++ b/runtime/syntax/slang.vim
@@ -0,0 +1,102 @@
+" Vim syntax file
+" Language: S-Lang
+" Maintainer: Jan Hlavacek <lahvak@math.ohio-state.edu>
+" Last Change: 980216
+
+" 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 keyword slangStatement break return continue EXECUTE_ERROR_BLOCK
+syn match slangStatement "\<X_USER_BLOCK[0-4]\>"
+syn keyword slangLabel case
+syn keyword slangConditional !if if else switch
+syn keyword slangRepeat while for _for loop do forever
+syn keyword slangDefinition define typedef variable struct
+syn keyword slangOperator or and andelse orelse shr shl xor not
+syn keyword slangBlock EXIT_BLOCK ERROR_BLOCK
+syn match slangBlock "\<USER_BLOCK[0-4]\>"
+syn keyword slangConstant NULL
+syn keyword slangType Integer_Type Double_Type Complex_Type String_Type Struct_Type Ref_Type Null_Type Array_Type DataType_Type
+
+syn match slangOctal "\<0\d\+\>" contains=slangOctalError
+syn match slangOctalError "[89]\+" contained
+syn match slangHex "\<0[xX][0-9A-Fa-f]*\>"
+syn match slangDecimal "\<[1-9]\d*\>"
+syn match slangFloat "\<\d\+\."
+syn match slangFloat "\<\d\+\.\d\+\([Ee][-+]\=\d\+\)\=\>"
+syn match slangFloat "\<\d\+\.[Ee][-+]\=\d\+\>"
+syn match slangFloat "\<\d\+[Ee][-+]\=\d\+\>"
+syn match slangFloat "\.\d\+\([Ee][-+]\=\d\+\)\=\>"
+syn match slangImaginary "\.\d\+\([Ee][-+]\=\d*\)\=[ij]\>"
+syn match slangImaginary "\<\d\+\(\.\d*\)\=\([Ee][-+]\=\d\+\)\=[ij]\>"
+
+syn region slangString oneline start='"' end='"' skip='\\"'
+syn match slangCharacter "'[^\\]'"
+syn match slangCharacter "'\\.'"
+syn match slangCharacter "'\\[0-7]\{1,3}'"
+syn match slangCharacter "'\\d\d\{1,3}'"
+syn match slangCharacter "'\\x[0-7a-fA-F]\{1,2}'"
+
+syn match slangDelim "[][{};:,]"
+syn match slangOperator "[-%+/&*=<>|!~^@]"
+
+"catch errors caused by wrong parenthesis
+syn region slangParen matchgroup=slangDelim transparent start='(' end=')' contains=ALLBUT,slangParenError
+syn match slangParenError ")"
+
+syn match slangComment "%.*$"
+syn keyword slangOperator sizeof
+
+syn region slangPreCondit start="^\s*#\s*\(ifdef\>\|ifndef\>\|iftrue\>\|ifnfalse\>\|iffalse\>\|ifntrue\>\|if\$\|ifn\$\|\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=cComment,slangString,slangCharacter,slangNumber
+
+" 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_slang_syntax_inits")
+ if version < 508
+ let did_slang_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink slangDefinition Type
+ HiLink slangBlock slangDefinition
+ HiLink slangLabel Label
+ HiLink slangConditional Conditional
+ HiLink slangRepeat Repeat
+ HiLink slangCharacter Character
+ HiLink slangFloat Float
+ HiLink slangImaginary Float
+ HiLink slangDecimal slangNumber
+ HiLink slangOctal slangNumber
+ HiLink slangHex slangNumber
+ HiLink slangNumber Number
+ HiLink slangParenError Error
+ HiLink slangOctalError Error
+ HiLink slangOperator Operator
+ HiLink slangStructure Structure
+ HiLink slangInclude Include
+ HiLink slangPreCondit PreCondit
+ HiLink slangError Error
+ HiLink slangStatement Statement
+ HiLink slangType Type
+ HiLink slangString String
+ HiLink slangConstant Constant
+ HiLink slangRangeArray slangConstant
+ HiLink slangComment Comment
+ HiLink slangSpecial SpecialChar
+ HiLink slangTodo Todo
+ HiLink slangDelim Delimiter
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "slang"
+
+" vim: ts=8
diff --git a/runtime/syntax/slice.vim b/runtime/syntax/slice.vim
new file mode 100644
index 000000000..e8f876c8b
--- /dev/null
+++ b/runtime/syntax/slice.vim
@@ -0,0 +1,90 @@
+" Vim syntax file
+" Language: Slice (ZeroC's Specification Language for Ice)
+" Maintainer: Morel Bodin <bodin@tuxfamily.net>
+" Last Change: 2003 Sep 24
+
+" 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
+
+" The Slice keywords
+
+syn keyword sliceType bool byte double float int long short string void
+syn keyword sliceQualifier const extends idempotent implements local nonmutating out throws
+syn keyword sliceConstruct class enum exception dictionnary interface module LocalObject Object sequence struct
+syn keyword sliceQualifier const extends idempotent implements local nonmutating out throws
+syn keyword sliceBoolean false true
+
+" Include directives
+syn match sliceIncluded display contained "<[^>]*>"
+syn match sliceInclude display "^\s*#\s*include\>\s*["<]" contains=sliceIncluded
+
+" Double-include guards
+syn region sliceGuard start="^#\(define\|ifndef\|endif\)" end="$"
+
+" Strings and characters
+syn region sliceString start=+"+ end=+"+
+
+" Numbers (shamelessly ripped from c.vim, only slightly modified)
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match sliceNumbers display transparent "\<\d\|\.\d" contains=sliceNumber,sliceFloat,sliceOctal
+syn match sliceNumber display contained "\d\+"
+"hex number
+syn match sliceNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match sliceOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=sliceOctalZero
+syn match sliceOctalZero display contained "\<0"
+syn match sliceFloat display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match sliceFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match sliceFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match sliceFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn case match
+
+
+" Comments
+syn region sliceComment start="/\*" end="\*/"
+syn match sliceComment "//.*"
+
+syn sync ccomment sliceComment
+
+" 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_slice_syn_inits")
+ if version < 508
+ let did_slice_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sliceComment Comment
+ HiLink sliceConstruct Keyword
+ HiLink sliceType Type
+ HiLink sliceString String
+ HiLink sliceIncluded String
+ HiLink sliceQualifier Keyword
+ HiLink sliceInclude Include
+ HiLink sliceGuard PreProc
+ HiLink sliceBoolean Boolean
+ HiLink sliceFloat Number
+ HiLink sliceNumber Number
+ HiLink sliceOctal Number
+ HiLink sliceOctalZero Special
+ HiLink sliceNumberError Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "slice"
+
+" vim: ts=8
diff --git a/runtime/syntax/slrnrc.vim b/runtime/syntax/slrnrc.vim
new file mode 100644
index 000000000..c15d9afd8
--- /dev/null
+++ b/runtime/syntax/slrnrc.vim
@@ -0,0 +1,194 @@
+" Vim syntax file
+" Language: Slrn setup file (based on slrn 0.9.8.0)
+" Maintainer: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+" Last Change: 19 May 2004
+
+" 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 keyword slrnrcTodo contained Todo
+
+" In some places whitespace is illegal
+syn match slrnrcSpaceError contained "\s"
+
+syn match slrnrcNumber contained "-\=\<\d\+\>"
+syn match slrnrcNumber contained +'[^']\+'+
+
+syn match slrnrcSpecKey contained +\(\\[er"']\|\^[^'"]\|\\\o\o\o\)+
+
+syn match slrnrcKey contained "\S\+" contains=slrnrcSpecKey
+syn region slrnrcKey contained start=+"+ skip=+\\"+ end=+"+ oneline contains=slrnrcSpecKey
+syn region slrnrcKey contained start=+'+ skip=+\\'+ end=+'+ oneline contains=slrnrcSpecKey
+
+syn match slrnrcSpecChar contained +'+
+syn match slrnrcSpecChar contained +\\[n"]+
+syn match slrnrcSpecChar contained "%[dfmnrs%]"
+
+syn match slrnrcString contained /[^ \t%"']\+/ contains=slrnrcSpecChar
+syn region slrnrcString contained start=+"+ skip=+\\"+ end=+"+ oneline contains=slrnrcSpecChar
+
+syn match slrnSlangPreCondit "^#\s*ifn\=\(def\>\|false\>\|true\>\|\$\)"
+syn match slrnSlangPreCondit "^#\s*e\(lif\|lse\|ndif\)\>"
+
+syn match slrnrcComment "%.*$" contains=slrnrcTodo
+
+syn keyword slrnrcVarInt contained abort_unmodified_edits article_window_page_overlap auto_mark_article_as_read beep broken_xref broken_xref cc_followup check_new_groups
+syn keyword slrnrcVarInt contained color_by_score confirm_actions custom_sort_by_threads display_cursor_bar drop_bogus_groups editor_uses_mime_charset emphasized_text_mask
+syn keyword slrnrcVarInt contained emphasized_text_mode fold_headers fold_headers followup_strip_signature force_authentication force_authentication generate_date_header
+syn keyword slrnrcVarInt contained generate_email_from generate_email_from generate_message_id grouplens_port hide_pgpsignature hide_quotes hide_signature
+syn keyword slrnrcVarInt contained hide_verbatim_marks hide_verbatim_text highlight_unread_subjects highlight_urls ignore_signature kill_score lines_per_update
+syn keyword slrnrcVarInt contained mail_editor_is_mua max_low_score max_queued_groups min_high_score mouse netiquette_warnings new_subject_breaks_threads no_autosave
+syn keyword slrnrcVarInt contained no_backups prefer_head process_verbatim_marks query_next_article query_next_group query_read_group_cutoff read_active reject_long_lines
+syn keyword slrnrcVarInt contained scroll_by_page show_article show_thread_subject simulate_graphic_chars smart_quote sorting_method spoiler_char spoiler_char
+syn keyword slrnrcVarInt contained spoiler_display_mode spoiler_display_mode spool_check_up_on_nov spool_check_up_on_nov uncollapse_threads unsubscribe_new_groups use_blink
+syn keyword slrnrcVarInt contained use_color use_flow_control use_grouplens use_grouplens use_header_numbers use_inews use_inews use_localtime use_metamail use_mime use_mime
+syn keyword slrnrcVarInt contained use_recommended_msg_id use_slrnpull use_slrnpull use_tilde use_tmpdir use_uudeview use_uudeview warn_followup_to wrap_flags wrap_method
+syn keyword slrnrcVarInt contained write_newsrc_flags
+
+" Listed for removal
+syn keyword slrnrcVarInt contained author_display display_author_realname display_score group_dsc_start_column process_verbatum_marks prompt_next_group query_reconnect
+syn keyword slrnrcVarInt contained show_descriptions use_xgtitle
+
+" Match as a "string" too
+syn region slrnrcVarIntStr contained matchgroup=slrnrcVarInt start=+"+ end=+"+ oneline contains=slrnrcVarInt,slrnrcSpaceError
+
+syn keyword slrnrcVarStr contained Xbrowser art_help_line art_status_line cansecret_file cc_post_string charset custom_headers custom_sort_order decode_directory
+syn keyword slrnrcVarStr contained editor_command failed_posts_file followup_custom_headers followup_date_format followup_string followupto_string group_help_line
+syn keyword slrnrcVarStr contained group_status_line grouplens_host grouplens_pseudoname header_help_line header_status_line hostname inews_program macro_directory
+syn keyword slrnrcVarStr contained mail_editor_command metamail_command mime_charset non_Xbrowser organization overview_date_format post_editor_command post_object
+syn keyword slrnrcVarStr contained postpone_directory printer_name quote_string realname reply_custom_headers reply_string replyto save_directory save_posts save_replies
+syn keyword slrnrcVarStr contained score_editor_command scorefile sendmail_command server_object signature signoff_string spool_active_file spool_activetimes_file
+syn keyword slrnrcVarStr contained spool_inn_root spool_newsgroups_file spool_nov_file spool_nov_root spool_overviewfmt_file spool_root supersedes_custom_headers
+syn keyword slrnrcVarStr contained top_status_line username
+
+" Listed for removal
+syn keyword slrnrcVarStr contained followup cc_followup_string
+
+" Match as a "string" too
+syn region slrnrcVarStrStr contained matchgroup=slrnrcVarStr start=+"+ end=+"+ oneline contains=slrnrcVarStr,slrnrcSpaceError
+
+" Various commands
+syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(autobaud\|color\|compatible_charsets\|group_display_format\|grouplens_add\|header_display_format\|ignore_quotes\|include\|interpret\|mono\|nnrpaccess\|posting_host\|server\|set\|setkey\|strip_re_regexp\|strip_sig_regexp\|strip_was_regexp\|unsetkey\|visible_headers\)\>" end="$" oneline contains=slrnrc\(String\|Comment\)
+
+" Listed for removal
+syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(cc_followup_string\|decode_directory\|editor_command\|followup\|hostname\|organization\|quote_string\|realname\|replyto\|scorefile\|signature\|username\)\>" end="$" oneline contains=slrnrc\(String\|Comment\)
+
+" Setting variables
+syn keyword slrnrcSet contained set
+syn match slrnrcSetStr "^\s*set\s\+\S\+" skipwhite nextgroup=slrnrcString contains=slrnrcSet,slrnrcVarStr\(Str\)\=
+syn match slrnrcSetInt contained "^\s*set\s\+\S\+" contains=slrnrcSet,slrnrcVarInt\(Str\)\=
+syn match slrnrcSetIntLine "^\s*set\s\+\S\+\s\+\(-\=\d\+\>\|'[^']\+'\)" contains=slrnrcSetInt,slrnrcNumber,slrnrcVarInt
+
+" Color definitions
+syn match slrnrcColorObj contained "\<quotes\d\+\>"
+syn keyword slrnrcColorObj contained article author boldtext box cursor date description error frame from_myself group grouplens_display header_name header_number headers
+syn keyword slrnrcColorObj contained high_score italicstext menu menu_press message neg_score normal pgpsignature pos_score quotes response_char selection signature status
+syn keyword slrnrcColorObj contained subject thread_number tilde tree underlinetext unread_subject url verbatim
+
+" Listed for removal
+syn keyword slrnrcColorObj contained verbatum
+
+syn region slrnrcColorObjStr contained matchgroup=slrnrcColorObj start=+"+ end=+"+ oneline contains=slrnrcColorObj,slrnrcSpaceError
+syn keyword slrnrcColorVal contained default
+syn keyword slrnrcColorVal contained black blue brightblue brightcyan brightgreen brightmagenta brightred brown cyan gray green lightgray magenta red white yellow
+syn region slrnrcColorValStr contained matchgroup=slrnrcColorVal start=+"+ end=+"+ oneline contains=slrnrcColorVal,slrnrcSpaceError
+" Mathcing a function with three arguments
+syn keyword slrnrcColor contained color
+syn match slrnrcColorInit contained "^\s*color\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Obj\|ObjStr\)\=
+syn match slrnrcColorLine "^\s*color\s\+\S\+\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Init\|Val\|ValStr\)
+
+" Mono settings
+syn keyword slrnrcMonoVal contained blink bold none reverse underline
+syn region slrnrcMonoValStr contained matchgroup=slrnrcMonoVal start=+"+ end=+"+ oneline contains=slrnrcMonoVal,slrnrcSpaceError
+" Color object is inherited
+" Mono needs at least one argument
+syn keyword slrnrcMono contained mono
+syn match slrnrcMonoInit contained "^\s*mono\s\+\S\+" contains=slrnrcMono,slrnrcColorObj\(Str\)\=
+syn match slrnrcMonoLine "^\s*mono\s\+\S\+\s\+\S.*" contains=slrnrcMono\(Init\|Val\|ValStr\),slrnrcComment
+
+" Functions in article mode
+syn keyword slrnrcFunArt contained article_bob article_eob article_left article_line_down article_line_up article_page_down article_page_up article_right article_search
+syn keyword slrnrcFunArt contained author_search_backward author_search_forward browse_url cancel catchup catchup_all create_score decode delete delete_thread digit_arg
+syn keyword slrnrcFunArt contained enlarge_article_window evaluate_cmd exchange_mark expunge fast_quit followup forward forward_digest get_children_headers get_parent_header
+syn keyword slrnrcFunArt contained goto_article goto_last_read grouplens_rate_article header_bob header_eob header_line_down header_line_up header_page_down header_page_up
+syn keyword slrnrcFunArt contained help hide_article locate_article mark_spot next next_high_score next_same_subject pipe post post_postponed previous print quit redraw
+syn keyword slrnrcFunArt contained repeat_last_key reply request save show_spoilers shrink_article_window skip_quotes skip_to_next_group skip_to_previous_group
+syn keyword slrnrcFunArt contained subject_search_backward subject_search_forward supersede suspend tag_header toggle_collapse_threads toggle_header_formats
+syn keyword slrnrcFunArt contained toggle_header_tag toggle_headers toggle_pgpsignature toggle_quotes toggle_rot13 toggle_signature toggle_verbatim_marks
+syn keyword slrnrcFunArt contained toggle_verbatim_text uncatchup uncatchup_all undelete untag_headers view_scores wrap_article zoom_article_window
+
+" Listed for removal
+syn keyword slrnrcFunArt contained art_bob art_eob art_xpunge article_linedn article_lineup article_pagedn article_pageup down enlarge_window goto_beginning goto_end left
+syn keyword slrnrcFunArt contained locate_header_by_msgid pagedn pageup pipe_article prev print_article right scroll_dn scroll_up shrink_window skip_to_prev_group
+syn keyword slrnrcFunArt contained toggle_show_author up
+
+" Functions in group mode
+syn keyword slrnrcFunGroup contained add_group bob catchup digit_arg eob evaluate_cmd group_search group_search_backward group_search_forward help line_down line_up move_group
+syn keyword slrnrcFunGroup contained page_down page_up post post_postponed quit redraw refresh_groups repeat_last_key save_newsrc select_group subscribe suspend
+syn keyword slrnrcFunGroup contained toggle_group_formats toggle_hidden toggle_list_all toggle_scoring transpose_groups uncatchup unsubscribe
+
+" Listed for removal
+syn keyword slrnrcFunGroup contained down group_bob group_eob pagedown pageup toggle_group_display uncatch_up up
+
+" Functions in readline mode (actually from slang's slrline.c)
+syn keyword slrnrcFunRead contained bdel bol del deleol down enter eol left quoted_insert right self_insert trim up
+
+" Binding keys
+syn keyword slrnrcSetkeyObj contained article group readline
+syn region slrnrcSetkeyObjStr contained matchgroup=slrnrcSetkeyObj start=+"+ end=+"+ oneline contains=slrnrcSetkeyObj
+syn match slrnrcSetkeyArt contained '\("\=\)\<article\>\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunArt
+syn match slrnrcSetkeyGroup contained '\("\=\)\<group\>\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunGroup
+syn match slrnrcSetkeyRead contained '\("\=\)\<readline\>\1\s\+\S\+' skipwhite nextgroup=slrnrcKey contains=slrnrcSetKeyObj\(Str\)\=,slrnrcFunRead
+syn match slrnrcSetkey "^\s*setkey\>" skipwhite nextgroup=slrnrcSetkeyArt,slrnrcSetkeyGroup,slrnrcSetkeyRead
+
+" Unbinding keys
+syn match slrnrcUnsetkey '^\s*unsetkey\s\+\("\)\=\(article\|group\|readline\)\>\1' skipwhite nextgroup=slrnrcKey contains=slrnrcSetkeyObj\(Str\)\=
+
+" 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_slrnrc_syntax_inits")
+ if version < 508
+ let did_slrnrc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink slrnrcTodo Todo
+ HiLink slrnrcSpaceError Error
+ HiLink slrnrcNumber Number
+ HiLink slrnrcSpecKey SpecialChar
+ HiLink slrnrcKey String
+ HiLink slrnrcSpecChar SpecialChar
+ HiLink slrnrcString String
+ HiLink slrnSlangPreCondit Special
+ HiLink slrnrcComment Comment
+ HiLink slrnrcVarInt Identifier
+ HiLink slrnrcVarStr Identifier
+ HiLink slrnrcCmd slrnrcSet
+ HiLink slrnrcSet Operator
+ HiLink slrnrcColor Keyword
+ HiLink slrnrcColorObj Identifier
+ HiLink slrnrcColorVal String
+ HiLink slrnrcMono Keyword
+ HiLink slrnrcMonoObj Identifier
+ HiLink slrnrcMonoVal String
+ HiLink slrnrcFunArt Macro
+ HiLink slrnrcFunGroup Macro
+ HiLink slrnrcFunRead Macro
+ HiLink slrnrcSetkeyObj Identifier
+ HiLink slrnrcSetkey Keyword
+ HiLink slrnrcUnsetkey slrnrcSetkey
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "slrnrc"
+
+"EOF vim: ts=8 noet tw=120 sw=8 sts=0
diff --git a/runtime/syntax/slrnsc.vim b/runtime/syntax/slrnsc.vim
new file mode 100644
index 000000000..3f653cc4e
--- /dev/null
+++ b/runtime/syntax/slrnsc.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Slrn score file (based on slrn 0.9.8.0)
+" Maintainer: Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+" Last Change: 19 May 2004
+
+" 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
+
+" characters in newsgroup names
+if version < 600
+ set isk=@,48-57,.,-,_,+
+else
+ setlocal isk=@,48-57,.,-,_,+
+endif
+
+syn match slrnscComment "%.*$"
+syn match slrnscSectionCom ".].*"lc=2
+
+syn match slrnscGroup contained "\(\k\|\*\)\+"
+syn match slrnscNumber contained "\d\+"
+syn match slrnscDate contained "\(\d\{1,2}[-/]\)\{2}\d\{4}"
+syn match slrnscDelim contained ":"
+syn match slrnscComma contained ","
+syn match slrnscOper contained "\~"
+syn match slrnscEsc contained "\\[ecC<>.]"
+syn match slrnscEsc contained "[?^]"
+syn match slrnscEsc contained "[^\\]$\s*$"lc=1
+
+syn keyword slrnscInclude contained include
+syn match slrnscIncludeLine "^\s*Include\s\+\S.*$"
+
+syn region slrnscSection matchgroup=slrnscSectionStd start="^\s*\[" end='\]' contains=slrnscGroup,slrnscComma,slrnscSectionCom
+syn region slrnscSection matchgroup=slrnscSectionNot start="^\s*\[\~" end='\]' contains=slrnscGroup,slrnscCommas,slrnscSectionCom
+
+syn keyword slrnscItem contained Age Bytes Date Expires From Has-Body Lines Message-Id Newsgroup References Subject Xref
+
+syn match slrnscScoreItem contained "%.*$" skipempty nextgroup=slrnscScoreItem contains=slrnscComment
+syn match slrnscScoreItem contained "^\s*Expires:\s*\(\d\{1,2}[-/]\)\{2}\d\{4}\s*$" skipempty nextgroup=slrnscScoreItem contains=slrnscItem,slrnscDelim,slrnscDate
+syn match slrnscScoreItem contained "^\s*\~\=\(Age\|Bytes\|Has-Body\|Lines\):\s*\d\+\s*$" skipempty nextgroup=slrnscScoreItem contains=slrnscOper,slrnscItem,slrnscDelim,slrnscNumber
+syn match slrnscScoreItemFill contained ".*$" skipempty nextgroup=slrnscScoreItem contains=slrnscEsc
+syn match slrnscScoreItem contained "^\s*\~\=\(Date\|From\|Message-Id\|Newsgroup\|References\|Subject\|Xref\):" nextgroup=slrnscScoreItemFill contains=slrnscOper,slrnscItem,slrnscDelim
+syn region slrnscScoreItem contained matchgroup=Special start="^\s*\~\={::\=" end="^\s*}" skipempty nextgroup=slrnscScoreItem contains=slrnscScoreItem
+
+syn keyword slrnscScore contained Score
+syn match slrnscScoreIdent contained "%.*"
+syn match slrnScoreLine "^\s*Score::\=\s\+=\=-\=\d\+\s*\(%.*\)\=$" skipempty nextgroup=slrnscScoreItem contains=slrnscScore,slrnscDelim,slrnscOper,slrnscNumber,slrnscScoreIdent
+
+" 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_slrnsc_syntax_inits")
+ if version < 508
+ let did_slrnsc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink slrnscComment Comment
+ HiLink slrnscSectionCom slrnscComment
+ HiLink slrnscGroup String
+ HiLink slrnscNumber Number
+ HiLink slrnscDate Special
+ HiLink slrnscDelim Delimiter
+ HiLink slrnscComma SpecialChar
+ HiLink slrnscOper SpecialChar
+ HiLink slrnscEsc String
+ HiLink slrnscSectionStd Type
+ HiLink slrnscSectionNot Delimiter
+ HiLink slrnscItem Statement
+ HiLink slrnscScore Keyword
+ HiLink slrnscScoreIdent Identifier
+ HiLink slrnscInclude Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "slrnsc"
+
+"EOF vim: ts=8 noet tw=200 sw=8 sts=0
diff --git a/runtime/syntax/sm.vim b/runtime/syntax/sm.vim
new file mode 100644
index 000000000..f919d8732
--- /dev/null
+++ b/runtime/syntax/sm.vim
@@ -0,0 +1,96 @@
+" Vim syntax file
+" Language: sendmail
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 3
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+" Comments
+syn match smComment "^#.*$" contains=@Spell
+
+" Definitions, Classes, Files, Options, Precedence, Trusted Users, Mailers
+syn match smDefine "^[CDF]."
+syn match smDefine "^O[AaBcdDeFfgHiLmNoQqrSsTtuvxXyYzZ]"
+syn match smDefine "^O\s"he=e-1
+syn match smDefine "^M[a-zA-Z0-9]\+,"he=e-1
+syn match smDefine "^T" nextgroup=smTrusted
+syn match smDefine "^P" nextgroup=smMesg
+syn match smTrusted "\S\+$" contained
+syn match smMesg "\S*="he=e-1 contained nextgroup=smPrecedence
+syn match smPrecedence "-\=[0-9]\+" contained
+
+" Header Format H?list-of-mailer-flags?name: format
+syn match smHeaderSep contained "[?:]"
+syn match smHeader "^H\(?[a-zA-Z]\+?\)\=[-a-zA-Z_]\+:" contains=smHeaderSep
+
+" Variables
+syn match smVar "\$[a-z\.\|]"
+
+" Rulesets
+syn match smRuleset "^S\d*"
+
+" Rewriting Rules
+syn match smRewrite "^R" skipwhite nextgroup=smRewriteLhsToken,smRewriteLhsUser
+
+syn match smRewriteLhsUser contained "[^\t$]\+" skipwhite nextgroup=smRewriteLhsToken,smRewriteLhsSep
+syn match smRewriteLhsToken contained "\(\$[-*+]\|\$[-=][A-Za-z]\|\$Y\)\+" skipwhite nextgroup=smRewriteLhsUser,smRewriteLhsSep
+
+syn match smRewriteLhsSep contained "\t\+" skipwhite nextgroup=smRewriteRhsToken,smRewriteRhsUser
+
+syn match smRewriteRhsUser contained "[^\t$]\+" skipwhite nextgroup=smRewriteRhsToken,smRewriteRhsSep
+syn match smRewriteRhsToken contained "\(\$\d\|\$>\d\|\$#\|\$@\|\$:[-_a-zA-Z]\+\|\$[[\]]\|\$@\|\$:\|\$[A-Za-z]\)\+" skipwhite nextgroup=smRewriteRhsUser,smRewriteRhsSep
+
+syn match smRewriteRhsSep contained "\t\+" skipwhite nextgroup=smRewriteComment,smRewriteRhsSep
+syn match smRewriteRhsSep contained "$"
+
+syn match smRewriteComment contained "[^\t$]*$"
+
+" Clauses
+syn match smClauseError "\$\."
+syn match smElse contained "\$|"
+syn match smClauseCont contained "^\t"
+syn region smClause matchgroup=Delimiter start="\$?." matchgroup=Delimiter end="\$\." contains=smElse,smClause,smVar,smClauseCont
+
+" 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_smil_syntax_inits")
+ if version < 508
+ let did_smil_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink smClause Special
+ HiLink smClauseError Error
+ HiLink smComment Comment
+ HiLink smDefine Statement
+ HiLink smElse Delimiter
+ HiLink smHeader Statement
+ HiLink smHeaderSep String
+ HiLink smMesg Special
+ HiLink smPrecedence Number
+ HiLink smRewrite Statement
+ HiLink smRewriteComment Comment
+ HiLink smRewriteLhsToken String
+ HiLink smRewriteLhsUser Statement
+ HiLink smRewriteRhsToken String
+ HiLink smRuleset Preproc
+ HiLink smTrusted Special
+ HiLink smVar String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sm"
+
+" vim: ts=18
diff --git a/runtime/syntax/smarty.vim b/runtime/syntax/smarty.vim
new file mode 100644
index 000000000..6dda366ba
--- /dev/null
+++ b/runtime/syntax/smarty.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language: Smarty Templates
+" Maintainer: Manfred Stienstra manfred.stienstra@dwerg.net
+" Last Change: Mon Nov 4 11:42:23 CET 2002
+" Filenames: *.tpl
+" URL: http://www.dwerg.net/projects/vim/smarty.vim
+
+" For version 5.x: Clear all syntax items
+" For version 6.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 = 'smarty'
+endif
+
+syn case ignore
+
+runtime! syntax/html.vim
+"syn cluster htmlPreproc add=smartyUnZone
+
+syn match smartyBlock contained "[\[\]]"
+
+syn keyword smartyTagName capture config_load include include_php
+syn keyword smartyTagName insert if elseif else ldelim rdelim literal
+syn keyword smartyTagName php section sectionelse foreach foreachelse
+syn keyword smartyTagName strip assign counter cycle debug eval fetch
+syn keyword smartyTagName html_options html_select_date html_select_time
+syn keyword smartyTagName math popup_init popup html_checkboxes html_image
+syn keyword smartyTagName html_radios html_table mailto textformat
+
+syn keyword smartyModifier cat capitalize count_characters count_paragraphs
+syn keyword smartyModifier count_sentences count_words date_format default
+syn keyword smartyModifier escape indent lower nl2br regex_replace replace
+syn keyword smartyModifier spacify string_format strip strip_tags truncate
+syn keyword smartyModifier upper wordwrap
+
+syn keyword smartyInFunc neq eq
+
+syn keyword smartyProperty contained "file="
+syn keyword smartyProperty contained "loop="
+syn keyword smartyProperty contained "name="
+syn keyword smartyProperty contained "include="
+syn keyword smartyProperty contained "skip="
+syn keyword smartyProperty contained "section="
+
+syn keyword smartyConstant "\$smarty"
+
+syn keyword smartyDot .
+
+syn region smartyZone matchgroup=Delimiter start="{" end="}" contains=smartyProperty, smartyString, smartyBlock, smartyTagName, smartyConstant, smartyInFunc, smartyModifier
+
+syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,smartyZone
+syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,smartyZone
+ syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc,smartyZone
+
+
+if version >= 508 || !exists("did_smarty_syn_inits")
+ if version < 508
+ let did_smarty_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink smartyTagName Identifier
+ HiLink smartyProperty Constant
+ " if you want the text inside the braces to be colored, then
+ " remove the comment in from of the next statement
+ "HiLink smartyZone Include
+ HiLink smartyInFunc Function
+ HiLink smartyBlock Constant
+ HiLink smartyDot SpecialChar
+ HiLink smartyModifier Function
+ delcommand HiLink
+endif
+
+let b:current_syntax = "smarty"
+
+if main_syntax == 'smarty'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/smil.vim b/runtime/syntax/smil.vim
new file mode 100644
index 000000000..0b53d8ec3
--- /dev/null
+++ b/runtime/syntax/smil.vim
@@ -0,0 +1,154 @@
+" Vim syntax file
+" 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
+
+" To learn more about SMIL, please refer to http://www.w3.org/AudioVideo/
+" and to http://www.helio.org/products/smil/tutorial/
+
+" 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
+
+" SMIL is case sensitive
+syn case match
+
+" illegal characters
+syn match smilError "[<>&]"
+syn match smilError "[()&]"
+
+if !exists("main_syntax")
+ let main_syntax = 'smil'
+endif
+
+" tags
+syn match smilSpecial contained "\\\d\d\d\|\\."
+syn match smilSpecial contained "("
+syn match smilSpecial contained "id("
+syn match smilSpecial contained ")"
+syn keyword smilSpecial contained remove freeze true false on off overdub caption new pause replace
+syn keyword smilSpecial contained first last
+syn keyword smilSpecial contained fill meet slice scroll hidden
+syn region smilString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=smilSpecial
+syn region smilString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=smilSpecial
+syn match smilValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1
+syn region smilEndTag start=+</+ end=+>+ contains=smilTagN,smilTagError
+syn region smilTag start=+<[^/]+ end=+>+ contains=smilTagN,smilString,smilArg,smilValue,smilTagError,smilEvent,smilCssDefinition
+syn match smilTagN contained +<\s*[-a-zA-Z0-9]\++ms=s+1 contains=smilTagName,smilSpecialTagName
+syn match smilTagN contained +</\s*[-a-zA-Z0-9]\++ms=s+2 contains=smilTagName,smilSpecialTagName
+syn match smilTagError contained "[^>]<"ms=s+1
+
+" tag names
+syn keyword smilTagName contained smil head body anchor a switch region layout meta
+syn match smilTagName contained "root-layout"
+syn keyword smilTagName contained par seq
+syn keyword smilTagName contained animation video img audio ref text textstream
+syn match smilTagName contained "\<\(head\|body\)\>"
+
+
+" legal arg names
+syn keyword smilArg contained dur begin end href target id coords show title abstract author copyright alt
+syn keyword smilArg contained left top width height fit src name content fill longdesc repeat type
+syn match smilArg contained "z-index"
+syn match smilArg contained " end-sync"
+syn match smilArg contained " region"
+syn match smilArg contained "background-color"
+syn match smilArg contained "system-bitrate"
+syn match smilArg contained "system-captions"
+syn match smilArg contained "system-overdub-or-caption"
+syn match smilArg contained "system-language"
+syn match smilArg contained "system-required"
+syn match smilArg contained "system-screen-depth"
+syn match smilArg contained "system-screen-size"
+syn match smilArg contained "clip-begin"
+syn match smilArg contained "clip-end"
+syn match smilArg contained "skip-content"
+
+
+" SMIL Boston ext.
+" This are new SMIL functionnalities seen on www.w3.org on August 3rd 1999
+
+" Animation
+syn keyword smilTagName contained animate set move
+syn keyword smilArg contained calcMode from to by additive values origin path
+syn keyword smilArg contained accumulate hold attribute
+syn match smilArg contained "xml:link"
+syn keyword smilSpecial contained discrete linear spline parent layout
+syn keyword smilSpecial contained top left simple
+
+" Linking
+syn keyword smilTagName contained area
+syn keyword smilArg contained actuate behavior inline sourceVolume
+syn keyword smilArg contained destinationVolume destinationPlaystate tabindex
+syn keyword smilArg contained class style lang dir onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup shape nohref accesskey onfocus onblur
+syn keyword smilSpecial contained play pause stop rect circ poly child par seq
+
+" Media Object
+syn keyword smilTagName contained rtpmap
+syn keyword smilArg contained port transport encoding payload clipBegin clipEnd
+syn match smilArg contained "fmt-list"
+
+" Timing and Synchronization
+syn keyword smilTagName contained excl
+syn keyword smilArg contained beginEvent endEvent eventRestart endSync repeatCount repeatDur
+syn keyword smilArg contained syncBehavior syncTolerance
+syn keyword smilSpecial contained canSlip locked
+
+" special characters
+syn match smilSpecialChar "&[^;]*;"
+
+if exists("smil_wrong_comments")
+ syn region smilComment start=+<!--+ end=+-->+
+else
+ syn region smilComment start=+<!+ end=+>+ contains=smilCommentPart,smilCommentError
+ syn match smilCommentError contained "[^><!]"
+ syn region smilCommentPart contained start=+--+ end=+--+
+endif
+syn region smilComment start=+<!DOCTYPE+ keepend end=+>+
+
+" 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_smil_syntax_inits")
+ if version < 508
+ let did_smil_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink smilTag Function
+ HiLink smilEndTag Identifier
+ HiLink smilArg Type
+ HiLink smilTagName smilStatement
+ HiLink smilSpecialTagName Exception
+ HiLink smilValue Value
+ HiLink smilSpecialChar Special
+
+ HiLink smilSpecial Special
+ HiLink smilSpecialChar Special
+ HiLink smilString String
+ HiLink smilStatement Statement
+ HiLink smilComment Comment
+ HiLink smilCommentPart Comment
+ HiLink smilPreProc PreProc
+ HiLink smilValue String
+ HiLink smilCommentError smilError
+ HiLink smilTagError smilError
+ HiLink smilError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "smil"
+
+if main_syntax == 'smil'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/smith.vim b/runtime/syntax/smith.vim
new file mode 100644
index 000000000..e05ce6968
--- /dev/null
+++ b/runtime/syntax/smith.vim
@@ -0,0 +1,52 @@
+" Vim syntax file
+" Language: SMITH
+" Maintainer: Rafal M. Sulejman <rms@poczta.onet.pl>
+" Last Change: 21.07.2000
+
+" 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
+
+
+syn match smithComment ";.*$"
+
+syn match smithNumber "\<[+-]*[0-9]\d*\>"
+
+syn match smithRegister "R[\[]*[0-9]*[\]]*"
+
+syn match smithKeyword "COR\|MOV\|MUL\|NOT\|STOP\|SUB\|NOP\|BLA\|REP"
+
+syn region smithString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+
+syn case match
+
+" 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_smith_syntax_inits")
+ if version < 508
+ let did_smith_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink smithRegister Identifier
+ HiLink smithKeyword Keyword
+ HiLink smithComment Comment
+ HiLink smithString String
+ HiLink smithNumber Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "smith"
+
+" vim: ts=2
diff --git a/runtime/syntax/sml.vim b/runtime/syntax/sml.vim
new file mode 100644
index 000000000..b3c335b8b
--- /dev/null
+++ b/runtime/syntax/sml.vim
@@ -0,0 +1,230 @@
+" Vim syntax file
+" Language: SML
+" Filenames: *.sml *.sig
+" Maintainers: Markus Mottl <markus@oefai.at>
+" Fabrizio Zeno Cornelli <zeno@filibusta.crema.unimi.it>
+" URL: http://www.ai.univie.ac.at/~markus/vim/syntax/sml.vim
+" Last Change: 2003 May 11
+" 2001 Nov 20 - Fixed small highlighting bug with modules (MM)
+" 2001 Aug 29 - Fixed small highlighting bug (MM)
+
+" 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
+
+" SML is case sensitive.
+syn case match
+
+" lowercase identifier - the standard way to match
+syn match smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
+
+syn match smlKeyChar "|"
+
+" Errors
+syn match smlBraceErr "}"
+syn match smlBrackErr "\]"
+syn match smlParenErr ")"
+syn match smlCommentErr "\*)"
+syn match smlThenErr "\<then\>"
+
+" Error-highlighting of "end" without synchronization:
+" as keyword or as error (default)
+if exists("sml_noend_error")
+ syn match smlKeyword "\<end\>"
+else
+ syn match smlEndErr "\<end\>"
+endif
+
+" Some convenient clusters
+syn cluster smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErr
+
+syn cluster smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErr
+
+syn cluster smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod
+
+
+" Enclosing delimiters
+syn region smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErr
+syn region smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}" contains=ALLBUT,@smlContained,smlBraceErr
+syn region smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr
+syn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr
+
+
+" Comments
+syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo
+syn keyword smlTodo contained TODO FIXME XXX
+
+
+" let
+syn region smlEnd matchgroup=smlKeyword start="\<let\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+" local
+syn region smlEnd matchgroup=smlKeyword start="\<local\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+" abstype
+syn region smlNone matchgroup=smlKeyword start="\<abstype\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+" begin
+syn region smlEnd matchgroup=smlKeyword start="\<begin\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+" if
+syn region smlNone matchgroup=smlKeyword start="\<if\>" matchgroup=smlKeyword end="\<then\>" contains=ALLBUT,@smlContained,smlThenErr
+
+
+"" Modules
+
+" "struct"
+syn region smlStruct matchgroup=smlModule start="\<struct\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+" "sig"
+syn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr,smlModule
+syn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr
+
+" "open"
+syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment
+
+" "structure" - somewhat complicated stuff ;-)
+syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef
+syn region smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHS
+syn region smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1
+syn match smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestr
+
+syn region smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestr
+
+syn region smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3
+syn region smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\<end\>" contained contains=ALLBUT,@smlContained,smlEndErr,smlModule
+syn region smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWith
+syn match smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained
+syn match smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullMod
+syn region smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullMod
+syn match smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWith
+
+syn region smlFuncWith start="([^*]"me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStruct
+syn region smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr
+
+syn match smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained
+syn region smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWith
+syn match smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRest
+syn region smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained
+
+" "signature"
+syn region smlKeyword start="\<signature\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDef
+syn match smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s
+
+syn keyword smlKeyword and andalso case
+syn keyword smlKeyword datatype else eqtype
+syn keyword smlKeyword exception fn fun handle
+syn keyword smlKeyword in infix infixl infixr
+syn keyword smlKeyword match nonfix of orelse
+syn keyword smlKeyword raise handle type
+syn keyword smlKeyword val where while with withtype
+
+syn keyword smlType bool char exn int list option
+syn keyword smlType real string unit
+
+syn keyword smlOperator div mod not or quot rem
+
+syn keyword smlBoolean true false
+syn match smlConstructor "(\s*)"
+syn match smlConstructor "\[\s*\]"
+syn match smlConstructor "#\[\s*\]"
+syn match smlConstructor "\u\(\w\|'\)*\>"
+
+" Module prefix
+syn match smlModPath "\u\(\w\|'\)*\."he=e-1
+
+syn match smlCharacter +#"."\|#"\\\d\d\d"+
+syn match smlCharErr +#"\\\d\d"\|#"\\\d"+
+syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+
+
+syn match smlFunDef "=>"
+syn match smlRefAssign ":="
+syn match smlTopStop ";;"
+syn match smlOperator "\^"
+syn match smlOperator "::"
+syn match smlAnyVar "\<_\>"
+syn match smlKeyChar "!"
+syn match smlKeyChar ";"
+syn match smlKeyChar "\*"
+syn match smlKeyChar "="
+
+syn match smlNumber "\<-\=\d\+\>"
+syn match smlNumber "\<-\=0[x|X]\x\+\>"
+syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
+
+" Synchronization
+syn sync minlines=20
+syn sync maxlines=500
+
+syn sync match smlEndSync grouphere smlEnd "\<begin\>"
+syn sync match smlEndSync groupthere smlEnd "\<end\>"
+syn sync match smlStructSync grouphere smlStruct "\<struct\>"
+syn sync match smlStructSync groupthere smlStruct "\<end\>"
+syn sync match smlSigSync grouphere smlSig "\<sig\>"
+syn sync match smlSigSync groupthere smlSig "\<end\>"
+
+" 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_sml_syntax_inits")
+ if version < 508
+ let did_sml_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink smlBraceErr Error
+ HiLink smlBrackErr Error
+ HiLink smlParenErr Error
+
+ HiLink smlCommentErr Error
+
+ HiLink smlEndErr Error
+ HiLink smlThenErr Error
+
+ HiLink smlCharErr Error
+
+ HiLink smlComment Comment
+
+ HiLink smlModPath Include
+ HiLink smlModule Include
+ HiLink smlModParam1 Include
+ HiLink smlModType Include
+ HiLink smlMPRestr3 Include
+ HiLink smlFullMod Include
+ HiLink smlModTypeRestr Include
+ HiLink smlWith Include
+ HiLink smlMTDef Include
+
+ HiLink smlConstructor Constant
+
+ HiLink smlModPreRHS Keyword
+ HiLink smlMPRestr2 Keyword
+ HiLink smlKeyword Keyword
+ HiLink smlFunDef Keyword
+ HiLink smlRefAssign Keyword
+ HiLink smlKeyChar Keyword
+ HiLink smlAnyVar Keyword
+ HiLink smlTopStop Keyword
+ HiLink smlOperator Keyword
+
+ HiLink smlBoolean Boolean
+ HiLink smlCharacter Character
+ HiLink smlNumber Number
+ HiLink smlReal Float
+ HiLink smlString String
+ HiLink smlType Type
+ HiLink smlTodo Todo
+ HiLink smlEncl Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sml"
+
+" vim: ts=8
diff --git a/runtime/syntax/snnsnet.vim b/runtime/syntax/snnsnet.vim
new file mode 100644
index 000000000..6b24de563
--- /dev/null
+++ b/runtime/syntax/snnsnet.vim
@@ -0,0 +1,77 @@
+" Vim syntax file
+" Language: SNNS network file
+" Maintainer: Davide Alberani <alberanid@bigfoot.com>
+" Last Change: 28 Apr 2001
+" Version: 0.2
+" URL: http://digilander.iol.it/alberanid/vim/syntax/snnsnet.vim
+"
+" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/
+" is a simulator for neural networks.
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+syn match snnsnetTitle "no\."
+syn match snnsnetTitle "type name"
+syn match snnsnetTitle "unit name"
+syn match snnsnetTitle "act\( func\)\="
+syn match snnsnetTitle "out func"
+syn match snnsnetTitle "site\( name\)\="
+syn match snnsnetTitle "site function"
+syn match snnsnetTitle "source:weight"
+syn match snnsnetTitle "unitNo\."
+syn match snnsnetTitle "delta x"
+syn match snnsnetTitle "delta y"
+syn keyword snnsnetTitle typeName unitName bias st position subnet layer sites name target z LLN LUN Toff Soff Ctype
+
+syn match snnsnetType "SNNS network definition file [Vv]\d.\d.*" contains=snnsnetNumbers
+syn match snnsnetType "generated at.*" contains=snnsnetNumbers
+syn match snnsnetType "network name\s*:"
+syn match snnsnetType "source files\s*:"
+syn match snnsnetType "no\. of units\s*:.*" contains=snnsnetNumbers
+syn match snnsnetType "no\. of connections\s*:.*" contains=snnsnetNumbers
+syn match snnsnetType "no\. of unit types\s*:.*" contains=snnsnetNumbers
+syn match snnsnetType "no\. of site types\s*:.*" contains=snnsnetNumbers
+syn match snnsnetType "learning function\s*:"
+syn match snnsnetType "pruning function\s*:"
+syn match snnsnetType "subordinate learning function\s*:"
+syn match snnsnetType "update function\s*:"
+
+syn match snnsnetSection "unit definition section"
+syn match snnsnetSection "unit default section"
+syn match snnsnetSection "site definition section"
+syn match snnsnetSection "type definition section"
+syn match snnsnetSection "connection definition section"
+syn match snnsnetSection "layer definition section"
+syn match snnsnetSection "subnet definition section"
+syn match snnsnetSection "3D translation section"
+syn match snnsnetSection "time delay section"
+
+syn match snnsnetNumbers "\d" contained
+syn match snnsnetComment "#.*$" contains=snnsnetTodo
+syn keyword snnsnetTodo TODO XXX FIXME contained
+
+if version >= 508 || !exists("did_snnsnet_syn_inits")
+ if version < 508
+ let did_snnsnet_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink snnsnetType Type
+ HiLink snnsnetComment Comment
+ HiLink snnsnetNumbers Number
+ HiLink snnsnetSection Statement
+ HiLink snnsnetTitle Label
+ HiLink snnsnetTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "snnsnet"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/snnspat.vim b/runtime/syntax/snnspat.vim
new file mode 100644
index 000000000..3c07fad16
--- /dev/null
+++ b/runtime/syntax/snnspat.vim
@@ -0,0 +1,68 @@
+" Vim syntax file
+" Language: SNNS pattern file
+" Maintainer: Davide Alberani <alberanid@bigfoot.com>
+" Last Change: 28 Apr 2001
+" Version: 0.2
+" URL: http://digilander.iol.it/alberanid/vim/syntax/snnspat.vim
+"
+" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/
+" is a simulator for neural networks.
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+" anything that isn't part of the header, a comment or a number
+" is wrong
+syn match snnspatError ".*"
+" hoping that matches any kind of notation...
+syn match snnspatAccepted "\([-+]\=\(\d\+\.\|\.\)\=\d\+\([Ee][-+]\=\d\+\)\=\)"
+syn match snnspatAccepted "\s"
+syn match snnspatBrac "\[\s*\d\+\(\s\|\d\)*\]" contains=snnspatNumbers
+
+" the accepted fields in the header
+syn match snnspatNoHeader "No\. of patterns\s*:\s*" contained
+syn match snnspatNoHeader "No\. of input units\s*:\s*" contained
+syn match snnspatNoHeader "No\. of output units\s*:\s*" contained
+syn match snnspatNoHeader "No\. of variable input dimensions\s*:\s*" contained
+syn match snnspatNoHeader "No\. of variable output dimensions\s*:\s*" contained
+syn match snnspatNoHeader "Maximum input dimensions\s*:\s*" contained
+syn match snnspatNoHeader "Maximum output dimensions\s*:\s*" contained
+syn match snnspatGen "generated at.*" contained contains=snnspatNumbers
+syn match snnspatGen "SNNS pattern definition file [Vv]\d\.\d" contained contains=snnspatNumbers
+
+" the header, what is not an accepted field, is an error
+syn region snnspatHeader start="^SNNS" end="^\s*[-+\.]\=[0-9#]"me=e-2 contains=snnspatNoHeader,snnspatNumbers,snnspatGen,snnspatBrac
+
+" numbers inside the header
+syn match snnspatNumbers "\d" contained
+syn match snnspatComment "#.*$" contains=snnspatTodo
+syn keyword snnspatTodo TODO XXX FIXME contained
+
+if version >= 508 || !exists("did_snnspat_syn_inits")
+ if version < 508
+ let did_snnspat_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink snnspatGen Statement
+ HiLink snnspatHeader Error
+ HiLink snnspatNoHeader Define
+ HiLink snnspatNumbers Number
+ HiLink snnspatComment Comment
+ HiLink snnspatError Error
+ HiLink snnspatTodo Todo
+ HiLink snnspatAccepted NONE
+ HiLink snnspatBrac NONE
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "snnspat"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/snnsres.vim b/runtime/syntax/snnsres.vim
new file mode 100644
index 000000000..4c1d59600
--- /dev/null
+++ b/runtime/syntax/snnsres.vim
@@ -0,0 +1,60 @@
+" Vim syntax file
+" Language: SNNS result file
+" Maintainer: Davide Alberani <alberanid@bigfoot.com>
+" Last Change: 28 Apr 2001
+" Version: 0.2
+" URL: http://digilander.iol.it/alberanid/vim/syntax/snnsres.vim
+"
+" SNNS http://www-ra.informatik.uni-tuebingen.de/SNNS/
+" is a simulator for neural networks.
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" the accepted fields in the header
+syn match snnsresNoHeader "No\. of patterns\s*:\s*" contained
+syn match snnsresNoHeader "No\. of input units\s*:\s*" contained
+syn match snnsresNoHeader "No\. of output units\s*:\s*" contained
+syn match snnsresNoHeader "No\. of variable input dimensions\s*:\s*" contained
+syn match snnsresNoHeader "No\. of variable output dimensions\s*:\s*" contained
+syn match snnsresNoHeader "Maximum input dimensions\s*:\s*" contained
+syn match snnsresNoHeader "Maximum output dimensions\s*:\s*" contained
+syn match snnsresNoHeader "startpattern\s*:\s*" contained
+syn match snnsresNoHeader "endpattern\s*:\s*" contained
+syn match snnsresNoHeader "input patterns included" contained
+syn match snnsresNoHeader "teaching output included" contained
+syn match snnsresGen "generated at.*" contained contains=snnsresNumbers
+syn match snnsresGen "SNNS result file [Vv]\d\.\d" contained contains=snnsresNumbers
+
+" the header, what is not an accepted field, is an error
+syn region snnsresHeader start="^SNNS" end="^\s*[-+\.]\=[0-9#]"me=e-2 contains=snnsresNoHeader,snnsresNumbers,snnsresGen
+
+" numbers inside the header
+syn match snnsresNumbers "\d" contained
+syn match snnsresComment "#.*$" contains=snnsresTodo
+syn keyword snnsresTodo TODO XXX FIXME contained
+
+if version >= 508 || !exists("did_snnsres_syn_inits")
+ if version < 508
+ let did_snnsres_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink snnsresGen Statement
+ HiLink snnsresHeader Statement
+ HiLink snnsresNoHeader Define
+ HiLink snnsresNumbers Number
+ HiLink snnsresComment Comment
+ HiLink snnsresTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "snnsres"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/snobol4.vim b/runtime/syntax/snobol4.vim
new file mode 100644
index 000000000..d5475e5e7
--- /dev/null
+++ b/runtime/syntax/snobol4.vim
@@ -0,0 +1,93 @@
+" Vim syntax file
+" Language: SNOBOL4
+" Maintainer: Rafal Sulejman <rms@poczta.onet.pl>
+" Last change: 2004 May 16
+
+" 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
+
+syntax case ignore
+" Vanilla Snobol4 keywords
+syn keyword snobol4Keywoard any apply arb arbno arg array
+syn keyword snobol4Keywoard break
+syn keyword snobol4Keywoard char clear code collect convert copy
+syn keyword snobol4Keywoard data datatype date define detach differ dump dupl
+syn keyword snobol4Keywoard endfile eq eval
+syn keyword snobol4Keywoard field
+syn keyword snobol4Keywoard ge gt ident
+syn keyword snobol4Keywoard input integer item
+syn keyword snobol4Keywoard le len lgt local lpad lt
+syn keyword snobol4Keywoard ne notany
+syn keyword snobol4Keywoard opsyn output
+syn keyword snobol4Keywoard pos prototype
+syn keyword snobol4Keywoard remdr replace rpad rpos rtab
+syn keyword snobol4Keywoard size span stoptr
+syn keyword snobol4Keywoard tab table time trace trim
+syn keyword snobol4Keywoard unload
+syn keyword snobol4Keywoard value
+" Spitbol keywords
+" CSNOBOL keywords
+syn keyword snobol4Keywoard sset
+
+syn region snobol4String matchgroup=Quote start=+"+ skip=+\\"+ end=+"+
+syn region snobol4String matchgroup=Quote start=+'+ skip=+\\'+ end=+'+
+syn match snobol4Label "^[^- \t][^ \t]*"
+syn match snobol4Statement "^-[^ ][^ ]*"
+syn match snobol4Comment "^*.*$"
+syn match Constant "\.[a-z][a-z0-9\-]*"
+"syn match snobol4Label ":\([sf]*([^)]*)\)*" contains=ALLBUT,snobol4ParenError
+syn region snobol4Label start=":(" end=")" contains=ALLBUT,snobol4ParenError
+syn region snobol4Label start=":f(" end=")" contains=ALLBUT,snobol4ParenError
+syn region snobol4Label start=":s(" end=")" contains=ALLBUT,snobol4ParenError
+syn match snobol4Number "\<\d*\(\.\d\d*\)*\>"
+" Parens matching
+syn cluster snobol4ParenGroup contains=snobol4ParenError
+syn region snobol4Paren transparent start='(' end=')' contains=ALLBUT,@snobol4ParenGroup,snobol4ErrInBracket
+syn match snobol4ParenError display "[\])]"
+syn match snobol4ErrInParen display contained "[\]{}]\|<%\|%>"
+syn region snobol4Bracket transparent start='\[\|<:' end=']\|:>' contains=ALLBUT,@snobol4ParenGroup,snobol4ErrInParen
+syn match snobol4ErrInBracket display contained "[);{}]\|<%\|%>"
+
+" optional shell shebang line
+syn match snobol4Comment "^\#\!.*$"
+
+
+" 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_snobol4_syntax_inits")
+ if version < 508
+ let did_snobol4_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink snobol4Label Label
+ HiLink snobol4Conditional Conditional
+ HiLink snobol4Repeat Repeat
+ HiLink snobol4Number Number
+ HiLink snobol4Error Error
+ HiLink snobol4Statement PreProc
+ HiLink snobol4String String
+ HiLink snobol4Comment Comment
+ HiLink snobol4Special Special
+ HiLink snobol4Todo Todo
+ HiLink snobol4Keyword Statement
+ HiLink snobol4Function Statement
+ HiLink snobol4Keyword Keyword
+ HiLink snobol4MathsOperator Operator
+ HiLink snobol4ParenError snobol4Error
+ HiLink snobol4ErrInParen snobol4Error
+ HiLink snobol4ErrInBracket snobol4Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "snobol4"
+" vim: ts=8
diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim
new file mode 100644
index 000000000..fafb2d4af
--- /dev/null
+++ b/runtime/syntax/spec.vim
@@ -0,0 +1,236 @@
+" Filename: spec.vim
+" Purpose: Vim syntax file
+" Language: SPEC: Build/install scripts for Linux RPM packages
+" Maintainer: Donovan Rebbechi elflord@pegasus.rutgers.edu
+" URL: http://pegasus.rutgers.edu/~elflord/vim/syntax/spec.vim
+" Last Change: Tue Oct 3 17:35:15 BRST 2000 <aurelio@conectiva.com.br>
+
+" 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 sync minlines=1000
+
+syn match specSpecialChar contained '[][!$()\\|>^;:{}]'
+syn match specColon contained ':'
+syn match specPercent contained '%'
+
+syn match specVariables contained '\$\h\w*' contains=specSpecialVariablesNames,specSpecialChar
+syn match specVariables contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar
+
+syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent
+syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar
+
+syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}'
+syn match specCommandOpts contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1
+syn match specComment '^\s*#.*$'
+
+
+syn case match
+
+
+"matches with no highlight
+syn match specNoNumberHilite 'X11\|X11R6\|[a-zA-Z]*\.\d\|[a-zA-Z][-/]\d'
+syn match specManpageFile '[a-zA-Z]\.1'
+
+"Day, Month and most used license acronyms
+syn keyword specLicense contained GPL LGPL BSD MIT GNU
+syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun
+syn keyword specMonth contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec
+syn keyword specMonth contained January February March April May June July August September October November December
+
+"#, @, www
+syn match specNumber '\(^-\=\|[ \t]-\=\|-\)[0-9.-]*[0-9]'
+syn match specEmail contained "<\=\<[A-Za-z0-9_.-]\+@\([A-Za-z0-9_-]\+\.\)\+[A-Za-z]\+\>>\="
+syn match specURL contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#-]\+\>'
+syn match specURLMacro contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#%{}-]\+\>' contains=specMacroIdentifier
+
+"TODO take specSpecialVariables out of the cluster for the sh* contains (ALLBUT)
+"Special system directories
+syn match specListedFilesPrefix contained '/\(usr\|local\|opt\|X11R6\|X11\)/'me=e-1
+syn match specListedFilesBin contained '/s\=bin/'me=e-1
+syn match specListedFilesLib contained '/\(lib\|include\)/'me=e-1
+syn match specListedFilesDoc contained '/\(man\d*\|doc\|info\)\>'
+syn match specListedFilesEtc contained '/etc/'me=e-1
+syn match specListedFilesShare contained '/share/'me=e-1
+syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specListedFilesDoc,specListedFilesEtc,specListedFilesShare,specListedFilesPrefix,specVariables,specSpecialChar
+
+"specComands
+syn match specConfigure contained '\./configure'
+syn match specTarCommand contained '\<tar\s\+[cxvpzIf]\{,5}\s*'
+syn keyword specCommandSpecial contained root
+syn keyword specCommand contained make xmkmf mkdir chmod ln find sed rm strip moc echo grep ls rm mv mkdir install cp pwd cat tail then else elif cd gzip rmdir ln eval export touch
+syn cluster specCommands contains=specCommand,specTarCommand,specConfigure,specCommandSpecial
+
+"frequently used rpm env vars
+syn keyword specSpecialVariablesNames contained RPM_BUILD_ROOT RPM_BUILD_DIR RPM_SOURCE_DIR RPM_OPT_FLAGS LDFLAGS CC CC_FLAGS CPPNAME CFLAGS CXX CXXFLAGS CPPFLAGS
+
+"valid macro names from /usr/lib/rpm/macros
+syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags perl_sitearch release requires_eq vendor version
+syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>'
+
+"valid _macro names from /usr/lib/rpm/macros
+syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _install_langs _install_script_path _instchangelog _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _pgpbin _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor
+
+
+"------------------------------------------------------------------------------
+" here's is all the spec sections definitions: PreAmble, Description, Package,
+" Scripts, Files and Changelog
+
+"One line macros - valid in all ScriptAreas
+"tip: remember do include new itens on specScriptArea's skip section
+syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure\|GNUconfigure\|find_lang\|makeinstall\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
+syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
+
+"%% Files Section %%
+"TODO %config valid parameters: missingok\|noreplace
+"TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
+syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
+"tip: remember to include new itens in specFilesArea above
+syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>'
+
+"valid options for certain section headers
+syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1
+syn match specPackageOpts contained '\s-n\s*\w'ms=s+1,me=e-1
+syn match specFilesOpts contained '\s-f\s*\w'ms=s+1,me=e-1
+
+
+syn case ignore
+
+
+"%% PreAmble Section %%
+"Copyright and Serial were deprecated by License and Epoch
+syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
+syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
+
+"%% Description Section %%
+syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment
+
+"%% Package Section %%
+syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
+
+"%% Scripts Section %%
+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
+
+"%% Changelog Section %%
+syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
+
+
+
+"------------------------------------------------------------------------------
+"here's the shell syntax for all the Script Sections
+
+
+syn case match
+
+
+"sh-like comment stile, only valid in script part
+syn match shComment contained '#.*$'
+
+syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier
+syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier
+
+syn match shOperator contained '[><|!&;]\|[!=]='
+syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles
+
+syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%else" end='%endif' contains=ALLBUT, specIfError, shCase
+
+syn region shIf transparent matchgroup=specBlock start="\<if\>" end="\<fi\>" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles
+
+syn region shFor matchgroup=specBlock start="\<for\>" end="\<in\>" contains=ALLBUT,shFunction,shInError,shCase,@specListedFiles
+
+syn region shCaseEsac transparent matchgroup=specBlock start="\<case\>" matchgroup=NONE end="\<in\>"me=s-1 contains=ALLBUT,shFunction,shCaseError,@specListedFiles nextgroup=shCaseEsac
+syn region shCaseEsac matchgroup=specBlock start="\<in\>" end="\<esac\>" contains=ALLBUT,shFunction,shCaseError,@specListedFilesBin
+syn region shCase matchgroup=specBlock contained start=")" end=";;" contains=ALLBUT,shFunction,shCaseError,shCase,@specListedFiles
+
+syn sync match shDoSync grouphere shDo "\<do\>"
+syn sync match shDoSync groupthere shDo "\<done\>"
+syn sync match shIfSync grouphere shIf "\<if\>"
+syn sync match shIfSync groupthere shIf "\<fi\>"
+syn sync match specIfSync grouphere specIf "%ifarch\|%ifos\|%ifnos"
+syn sync match specIfSync groupthere specIf "%endIf"
+syn sync match shForSync grouphere shFor "\<for\>"
+syn sync match shForSync groupthere shFor "\<in\>"
+syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>"
+syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>"
+
+" 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_spec_syntax_inits")
+ if version < 508
+ let did_spec_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ "main types color definitions
+ HiLink specSection Structure
+ HiLink specSectionMacro Macro
+ HiLink specWWWlink PreProc
+ HiLink specOpts Operator
+
+ "yes, it's ugly, but white is sooo cool
+ if &background == "dark"
+ hi def specGlobalMacro ctermfg=white
+ else
+ HiLink specGlobalMacro Identifier
+ endif
+
+ "sh colors
+ HiLink shComment Comment
+ HiLink shIf Statement
+ HiLink shOperator Special
+ HiLink shQuote1 String
+ HiLink shQuote2 String
+ HiLink shQuoteDelim Statement
+
+ "spec colors
+ HiLink specBlock Function
+ HiLink specColon Special
+ HiLink specCommand Statement
+ HiLink specCommandOpts specOpts
+ HiLink specCommandSpecial Special
+ HiLink specComment Comment
+ HiLink specConfigure specCommand
+ HiLink specDate String
+ HiLink specDescriptionOpts specOpts
+ HiLink specEmail specWWWlink
+ HiLink specError Error
+ HiLink specFilesDirective specSectionMacro
+ HiLink specFilesOpts specOpts
+ HiLink specLicense String
+ HiLink specMacroNameLocal specGlobalMacro
+ HiLink specMacroNameOther specGlobalMacro
+ HiLink specManpageFile NONE
+ HiLink specMonth specDate
+ HiLink specNoNumberHilite NONE
+ HiLink specNumber Number
+ HiLink specPackageOpts specOpts
+ HiLink specPercent Special
+ HiLink specSpecialChar Special
+ HiLink specSpecialVariables specGlobalMacro
+ HiLink specSpecialVariablesNames specGlobalMacro
+ HiLink specTarCommand specCommand
+ HiLink specURL specWWWlink
+ HiLink specURLMacro specWWWlink
+ HiLink specVariables Identifier
+ HiLink specWeekday specDate
+ HiLink specListedFilesBin Statement
+ HiLink specListedFilesDoc Statement
+ HiLink specListedFilesEtc Statement
+ HiLink specListedFilesLib Statement
+ HiLink specListedFilesPrefix Statement
+ HiLink specListedFilesShare Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "spec"
+
+" vim: ts=8
diff --git a/runtime/syntax/specman.vim b/runtime/syntax/specman.vim
new file mode 100644
index 000000000..3fb77a2af
--- /dev/null
+++ b/runtime/syntax/specman.vim
@@ -0,0 +1,182 @@
+" Vim syntax file
+" Language: SPECMAN E-LANGUAGE
+" Maintainer: Or Freund <or@mobilian.com ;omf@gmx.co.uk; OrMeir@yahoo.com>
+" Last Update: Wed Oct 24 2001
+
+"---------------------------------------------------------
+"| If anyone found an error or fix the parenthesis part |
+"| I will be happy to hear about it |
+"| Thanks Or. |
+"---------------------------------------------------------
+
+" Remove any old syntax stuff hanging around
+" 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 keyword specmanTodo contained TODO todo ToDo FIXME XXX
+
+syn keyword specmanStatement var instance on compute start event expect check that routine
+syn keyword specmanStatement specman is also first only with like
+syn keyword specmanStatement list of all radix hex dec bin ignore illegal
+syn keyword specmanStatement traceable untraceable
+syn keyword specmanStatement cover using count_only trace_only at_least transition item ranges
+syn keyword specmanStatement cross text call task within
+
+syn keyword specmanMethod initialize non_terminal testgroup delayed exit finish
+syn keyword specmanMethod out append print outf appendf
+syn keyword specmanMethod post_generate pre_generate setup_test finalize_test extract_test
+syn keyword specmanMethod init run copy as_a set_config dut_error add clear lock quit
+syn keyword specmanMethod lock unlock release swap quit to_string value stop_run
+syn keyword specmanMethod crc_8 crc_32 crc_32_flip get_config add0 all_indices and_all
+syn keyword specmanMethod apply average count delete exists first_index get_indices
+syn keyword specmanMethod has insert is_a_permutation is_empty key key_exists key_index
+syn keyword specmanMethod last last_index max max_index max_value min min_index
+syn keyword specmanMethod min_value or_all pop pop0 push push0 product resize reverse
+syn keyword specmanMethod sort split sum top top0 unique clear is_all_iterations
+syn keyword specmanMethod get_enclosing_unit hdl_path exec deep_compare deep_compare_physical
+syn keyword specmanMethod pack unpack warning error fatal
+syn match specmanMethod "size()"
+syn keyword specmanPacking packing low high
+syn keyword specmanType locker address
+syn keyword specmanType body code vec chars
+syn keyword specmanType integer real bool int long uint byte bits bit time string
+syn keyword specmanType byte_array external_pointer
+syn keyword specmanBoolean TRUE FALSE
+syn keyword specmanPreCondit #ifdef #ifndef #else
+
+syn keyword specmanConditional choose matches
+syn keyword specmanConditional if then else when try
+
+
+
+syn keyword specmanLabel case casex casez default
+
+syn keyword specmanLogical and or not xor
+
+syn keyword specmanRepeat until repeat while for from to step each do break continue
+syn keyword specmanRepeat before next sequence always -kind network
+syn keyword specmanRepeat index it me in new return result select
+
+syn keyword specmanTemporal cycle sample events forever
+syn keyword specmanTemporal wait change negedge rise fall delay sync sim true detach eventually emit
+
+syn keyword specmanConstant MAX_INT MIN_INT NULL UNDEF
+
+syn keyword specmanDefine define as computed type extend
+syn keyword specmanDefine verilog vhdl variable global sys
+syn keyword specmanStructure struct unit
+syn keyword specmanInclude import
+syn keyword specmanConstraint gen keep keeping soft before
+
+syn keyword specmanSpecial untyped symtab ECHO DOECHO
+syn keyword specmanFile files load module ntv source_ref script read write
+syn keyword specmanFSM initial idle others posedge clock cycles
+
+
+syn match specmanOperator "[&|~><!)(*%@+/=?:;}{,.\^\-\[\]]"
+syn match specmanOperator "+="
+syn match specmanOperator "-="
+syn match specmanOperator "*="
+
+syn match specmanComment "//.*" contains=specmanTodo
+syn match specmanComment "--.*"
+syn region specmanComment start="^'>"hs=s+2 end="^<'"he=e-2
+
+syn match specmanHDL "'[`.a-zA-Z0-9_@\[\]]\+\>'"
+
+
+syn match specmanCompare "=="
+syn match specmanCompare "!==="
+syn match specmanCompare "==="
+syn match specmanCompare "!="
+syn match specmanCompare ">="
+syn match specmanCompare "<="
+syn match specmanNumber "[0-9]:[0-9]"
+syn match specmanNumber "\(\<\d\+\|\)'[bB]\s*[0-1_xXzZ?]\+\>"
+syn match specmanNumber "0[bB]\s*[0-1_xXzZ?]\+\>"
+syn match specmanNumber "\(\<\d\+\|\)'[oO]\s*[0-7_xXzZ?]\+\>"
+syn match specmanNumber "0[oO]\s*[0-9a-fA-F_xXzZ?]\+\>"
+syn match specmanNumber "\(\<\d\+\|\)'[dD]\s*[0-9_xXzZ?]\+\>"
+syn match specmanNumber "\(\<\d\+\|\)'[hH]\s*[0-9a-fA-F_xXzZ?]\+\>"
+syn match specmanNumber "0[xX]\s*[0-9a-fA-F_xXzZ?]\+\>"
+syn match specmanNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)\>"
+
+syn region specmanString start=+"+ end=+"+
+
+
+
+"**********************************************************************
+" I took this section from c.vim but I didnt succeded to make it work
+" ANY one who dare jumping to this deep watter is more than welocome!
+"**********************************************************************
+""catch errors caused by wrong parenthesis and brackets
+
+"syn cluster specmanParenGroup contains=specmanParenError
+"" ,specmanNumbera,specmanComment
+"if exists("specman_no_bracket_error")
+"syn region specmanParen transparent start='(' end=')' contains=ALLBUT,@specmanParenGroup
+"syn match specmanParenError ")"
+"syn match specmanErrInParen contained "[{}]"
+"else
+"syn region specmanParen transparent start='(' end=')' contains=ALLBUT,@specmanParenGroup,specmanErrInBracket
+"syn match specmanParenError "[\])]"
+"syn match specmanErrInParen contained "[\]{}]"
+"syn region specmanBracket transparent start='\[' end=']' contains=ALLBUT,@specmanParenGroup,specmanErrInParen
+"syn match specmanErrInBracket contained "[);{}]"
+"endif
+"
+
+"Modify the following as needed. The trade-off is performance versus
+"functionality.
+
+syn sync lines=50
+
+" 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_specman_syn_inits")
+ if version < 508
+ let did_specman_syn_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 specmanConditional Conditional
+ HiLink specmanConstraint Conditional
+ HiLink specmanRepeat Repeat
+ HiLink specmanString String
+ HiLink specmanComment Comment
+ HiLink specmanConstant Macro
+ HiLink specmanNumber Number
+ HiLink specmanCompare Operator
+ HiLink specmanOperator Operator
+ HiLink specmanLogical Operator
+ HiLink specmanStatement Statement
+ HiLink specmanHDL SpecialChar
+ HiLink specmanMethod Function
+ HiLink specmanInclude Include
+ HiLink specmanStructure Structure
+ HiLink specmanBoolean Boolean
+ HiLink specmanFSM Label
+ HiLink specmanSpecial Special
+ HiLink specmanType Type
+ HiLink specmanTemporal Type
+ HiLink specmanFile Include
+ HiLink specmanPreCondit Include
+ HiLink specmanDefine Typedef
+ HiLink specmanLabel Label
+ HiLink specmanPacking keyword
+ HiLink specmanTodo Todo
+ HiLink specmanParenError Error
+ HiLink specmanErrInParen Error
+ HiLink specmanErrInBracket Error
+ delcommand HiLink
+endif
+
+let b:current_syntax = "specman"
diff --git a/runtime/syntax/spice.vim b/runtime/syntax/spice.vim
new file mode 100644
index 000000000..ee1433ead
--- /dev/null
+++ b/runtime/syntax/spice.vim
@@ -0,0 +1,87 @@
+" Vim syntax file
+" Language: Spice circuit simulator input netlist
+" Maintainer: Noam Halevy <Noam.Halevy.motorola.com>
+" Last Change: 12/08/99
+"
+" This is based on sh.vim by Lennart Schultz
+" but greatly simplified
+
+" 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
+
+" spice syntax is case INsensitive
+syn case ignore
+
+syn keyword spiceTodo contained TODO
+
+syn match spiceComment "^ \=\*.*$"
+syn match spiceComment "\$.*$"
+
+" Numbers, all with engineering suffixes and optional units
+"==========================================================
+"floating point number, with dot, optional exponent
+syn match spiceNumber "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\="
+"floating point number, starting with a dot, optional exponent
+syn match spiceNumber "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\="
+"integer number with optional exponent
+syn match spiceNumber "\<[0-9]\+\(e[-+]\=[0-9]\+\)\=\(meg\=\|[afpnumkg]\)\="
+
+" Misc
+"=====
+syn match spiceWrapLineOperator "\\$"
+syn match spiceWrapLineOperator "^+"
+
+syn match spiceStatement "^ \=\.\I\+"
+
+" Matching pairs of parentheses
+"==========================================
+syn region spiceParen transparent matchgroup=spiceOperator start="(" end=")" contains=ALLBUT,spiceParenError
+syn region spiceSinglequote matchgroup=spiceOperator start=+'+ end=+'+
+
+" Errors
+"=======
+syn match spiceParenError ")"
+
+" Syncs
+" =====
+syn sync minlines=50
+
+" 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_spice_syntax_inits")
+ if version < 508
+ let did_spice_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink spiceTodo Todo
+ HiLink spiceWrapLineOperator spiceOperator
+ HiLink spiceSinglequote spiceExpr
+ HiLink spiceExpr Function
+ HiLink spiceParenError Error
+ HiLink spiceStatement Statement
+ HiLink spiceNumber Number
+ HiLink spiceComment Comment
+ HiLink spiceOperator Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "spice"
+
+" insert the following to $VIM/syntax/scripts.vim
+" to autodetect HSpice netlists and text listing output:
+"
+" " Spice netlists and text listings
+" elseif getline(1) =~ 'spice\>' || getline("$") =~ '^\.end'
+" so <sfile>:p:h/spice.vim
+
+" vim: ts=8
diff --git a/runtime/syntax/splint.vim b/runtime/syntax/splint.vim
new file mode 100644
index 000000000..2f283809d
--- /dev/null
+++ b/runtime/syntax/splint.vim
@@ -0,0 +1,260 @@
+" Vim syntax file
+" Language: splint (C with lclint/splint Annotations)
+" Maintainer: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+" Splint Home: http://www.splint.org/
+" Last Change: $Date$
+" $Revision$
+
+" Note: Splint annotated files are not detected by default.
+" If you want to use this file for highlighting C code,
+" please make sure splint.vim is sourced instead of c.vim,
+" for example by putting
+" /* vim: set filetype=splint : */
+" at the end of your code or something like
+" au! BufRead,BufNewFile *.c setfiletype splint
+" in your vimrc file or filetype.vim
+
+
+" 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
+if version < 600
+ so <sfile>:p:h/c.vim
+else
+ runtime! syntax/c.vim
+endif
+
+
+" FIXME: uses and changes several clusters defined in c.vim
+" so watch for changes there
+
+" TODO: make a little more grammar explicit
+" match flags with hyphen and underscore notation
+" match flag expanded forms
+" accept other comment char than @
+
+syn case match
+" splint annotations (taken from 'splint -help annotations')
+syn match splintStateAnnot contained "\(pre\|post\):\(only\|shared\|owned\|dependent\|observer\|exposed\|isnull\|notnull\)"
+syn keyword splintSpecialAnnot contained special
+syn keyword splintSpecTag contained uses sets defines allocated releases
+syn keyword splintModifies contained modifies
+syn keyword splintRequires contained requires ensures
+syn keyword splintGlobals contained globals
+syn keyword splintGlobitem contained internalState fileSystem
+syn keyword splintGlobannot contained undef killed
+syn keyword splintWarning contained warn
+
+syn keyword splintModitem contained internalState fileSystem nothing
+syn keyword splintReqitem contained MaxSet MaxRead result
+syn keyword splintIter contained iter yield
+syn keyword splintConst contained constant
+syn keyword splintAlt contained alt
+
+syn keyword splintType contained abstract concrete mutable immutable refcounted numabstract
+syn keyword splintGlobalType contained unchecked checkmod checked checkedstrict
+syn keyword splintMemMgm contained dependent keep killref only owned shared temp
+syn keyword splintAlias contained unique returned
+syn keyword splintExposure contained observer exposed
+syn keyword splintDefState contained out in partial reldef
+syn keyword splintGlobState contained undef killed
+syn keyword splintNullState contained null notnull relnull
+syn keyword splintNullPred contained truenull falsenull nullwhentrue falsewhennull
+syn keyword splintExit contained exits mayexit trueexit falseexit neverexit
+syn keyword splintExec contained noreturn maynotreturn noreturnwhentrue noreturnwhenfalse alwaysreturns
+syn keyword splintSef contained sef
+syn keyword splintDecl contained unused external
+syn keyword splintCase contained fallthrough
+syn keyword splintBreak contained innerbreak loopbreak switchbreak innercontinue
+syn keyword splintUnreach contained notreached
+syn keyword splintSpecFunc contained printflike scanflike messagelike
+
+" TODO: make these region or match
+syn keyword splintErrSupp contained i ignore end t
+syn match splintErrSupp contained "[it]\d\+\>"
+syn keyword splintTypeAcc contained access noaccess
+
+syn keyword splintMacro contained notfunction
+syn match splintSpecType contained "\(\|unsigned\|signed\)integraltype"
+
+" Flags taken from 'splint -help flags full' divided in local and global flags
+" Local Flags:
+syn keyword splintFlag contained abstract abstractcompare accessall accessczech accessczechoslovak
+syn keyword splintFlag contained accessfile accessmodule accessslovak aliasunique allblock
+syn keyword splintFlag contained allempty allglobs allimponly allmacros alwaysexits
+syn keyword splintFlag contained annotationerror ansi89limits assignexpose badflag bitwisesigned
+syn keyword splintFlag contained boolcompare boolfalse boolint boolops booltrue
+syn keyword splintFlag contained booltype bounds boundscompacterrormessages boundsread boundswrite
+syn keyword splintFlag contained branchstate bufferoverflow bufferoverflowhigh bugslimit casebreak
+syn keyword splintFlag contained caseinsensitivefilenames castexpose castfcnptr charindex charint
+syn keyword splintFlag contained charintliteral charunsignedchar checkedglobalias checkmodglobalias checkpost
+syn keyword splintFlag contained checkstrictglobalias checkstrictglobs codeimponly commentchar commenterror
+syn keyword splintFlag contained compdef compdestroy compmempass constmacros constprefix
+syn keyword splintFlag contained constprefixexclude constuse continuecomment controlnestdepth cppnames
+syn keyword splintFlag contained csvoverwrite czech czechconsts czechfcns czechmacros
+syn keyword splintFlag contained czechoslovak czechoslovakconsts czechoslovakfcns czechoslovakmacros czechoslovaktypes
+syn keyword splintFlag contained czechoslovakvars czechtypes czechvars debugfcnconstraint declundef
+syn keyword splintFlag contained deepbreak deparrays dependenttrans distinctexternalnames distinctinternalnames
+syn keyword splintFlag contained duplicatecases duplicatequals elseifcomplete emptyret enumindex
+syn keyword splintFlag contained enumint enummembers enummemuse enumprefix enumprefixexclude
+syn keyword splintFlag contained evalorder evalorderuncon exitarg exportany exportconst
+syn keyword splintFlag contained exportfcn exportheader exportheadervar exportiter exportlocal
+syn keyword splintFlag contained exportmacro exporttype exportvar exposetrans externalnamecaseinsensitive
+syn keyword splintFlag contained externalnamelen externalprefix externalprefixexclude fcnderef fcnmacros
+syn keyword splintFlag contained fcnpost fcnuse fielduse fileextensions filestaticprefix
+syn keyword splintFlag contained filestaticprefixexclude firstcase fixedformalarray floatdouble forblock
+syn keyword splintFlag contained forcehints forempty forloopexec formalarray formatcode
+syn keyword splintFlag contained formatconst formattype forwarddecl freshtrans fullinitblock
+syn keyword splintFlag contained globalias globalprefix globalprefixexclude globimponly globnoglobs
+syn keyword splintFlag contained globs globsimpmodsnothing globstate globuse gnuextensions
+syn keyword splintFlag contained grammar hasyield hints htmlfileformat ifblock
+syn keyword splintFlag contained ifempty ignorequals ignoresigns immediatetrans impabstract
+syn keyword splintFlag contained impcheckedglobs impcheckedspecglobs impcheckedstatics impcheckedstrictglobs impcheckedstrictspecglobs
+syn keyword splintFlag contained impcheckedstrictstatics impcheckmodglobs impcheckmodinternals impcheckmodspecglobs impcheckmodstatics
+syn keyword splintFlag contained impconj implementationoptional implictconstraint impouts imptype
+syn keyword splintFlag contained includenest incompletetype incondefs incondefslib indentspaces
+syn keyword splintFlag contained infloops infloopsuncon initallelements initsize internalglobs
+syn keyword splintFlag contained internalglobsnoglobs internalnamecaseinsensitive internalnamelen internalnamelookalike iso99limits
+syn keyword splintFlag contained isoreserved isoreservedinternal iterbalance iterloopexec iterprefix
+syn keyword splintFlag contained iterprefixexclude iteryield its4low its4moderate its4mostrisky
+syn keyword splintFlag contained its4risky its4veryrisky keep keeptrans kepttrans
+syn keyword splintFlag contained legacy libmacros likelyboundsread likelyboundswrite likelybool
+syn keyword splintFlag contained likelybounds limit linelen lintcomments localprefix
+syn keyword splintFlag contained localprefixexclude locindentspaces longint longintegral longsignedintegral
+syn keyword splintFlag contained longunsignedintegral longunsignedunsignedintegral loopexec looploopbreak looploopcontinue
+syn keyword splintFlag contained loopswitchbreak macroassign macroconstdecl macrodecl macroempty
+syn keyword splintFlag contained macrofcndecl macromatchname macroparams macroparens macroredef
+syn keyword splintFlag contained macroreturn macrostmt macrounrecog macrovarprefix macrovarprefixexclude
+syn keyword splintFlag contained maintype matchanyintegral matchfields mayaliasunique memchecks
+syn keyword splintFlag contained memimp memtrans misplacedsharequal misscase modfilesys
+syn keyword splintFlag contained modglobs modglobsnomods modglobsunchecked modinternalstrict modnomods
+syn keyword splintFlag contained modobserver modobserveruncon mods modsimpnoglobs modstrictglobsnomods
+syn keyword splintFlag contained moduncon modunconnomods modunspec multithreaded mustdefine
+syn keyword splintFlag contained mustfree mustfreefresh mustfreeonly mustmod mustnotalias
+syn keyword splintFlag contained mutrep namechecks needspec nestcomment nestedextern
+syn keyword splintFlag contained newdecl newreftrans nextlinemacros noaccess nocomments
+syn keyword splintFlag contained noeffect noeffectuncon noparams nopp noret
+syn keyword splintFlag contained null nullassign nullderef nullinit nullpass
+syn keyword splintFlag contained nullptrarith nullret nullstate nullterminated
+syn keyword splintFlag contained numabstract numabstractcast numabstractindex numabstractlit numabstractprint
+syn keyword splintFlag contained numenummembers numliteral numstructfields observertrans obviousloopexec
+syn keyword splintFlag contained oldstyle onlytrans onlyunqglobaltrans orconstraint overload
+syn keyword splintFlag contained ownedtrans paramimptemp paramuse parenfileformat partial
+syn keyword splintFlag contained passunknown portability predassign predbool predboolint
+syn keyword splintFlag contained predboolothers predboolptr preproc protoparammatch protoparamname
+syn keyword splintFlag contained protoparamprefix protoparamprefixexclude ptrarith ptrcompare ptrnegate
+syn keyword splintFlag contained quiet readonlystrings readonlytrans realcompare redecl
+syn keyword splintFlag contained redef redundantconstraints redundantsharequal refcounttrans relaxquals
+syn keyword splintFlag contained relaxtypes repeatunrecog repexpose retalias retexpose
+syn keyword splintFlag contained retimponly retval retvalbool retvalint retvalother
+syn keyword splintFlag contained sefparams sefuncon shadow sharedtrans shiftimplementation
+syn keyword splintFlag contained shiftnegative shortint showallconjs showcolumn showconstraintlocation
+syn keyword splintFlag contained showconstraintparens showdeephistory showfunc showloadloc showscan
+syn keyword splintFlag contained showsourceloc showsummary sizeofformalarray sizeoftype skipisoheaders
+syn keyword splintFlag contained skipposixheaders slashslashcomment slovak slovakconsts slovakfcns
+syn keyword splintFlag contained slovakmacros slovaktypes slovakvars specglobimponly specimponly
+syn keyword splintFlag contained specmacros specretimponly specstructimponly specundecl specundef
+syn keyword splintFlag contained stackref statemerge statetransfer staticinittrans statictrans
+syn keyword splintFlag contained strictbranchstate strictdestroy strictops strictusereleased stringliterallen
+syn keyword splintFlag contained stringliteralnoroom stringliteralnoroomfinalnull stringliteralsmaller stringliteraltoolong structimponly
+syn keyword splintFlag contained superuser switchloopbreak switchswitchbreak syntax sysdirerrors
+syn keyword splintFlag contained sysdirexpandmacros sysunrecog tagprefix tagprefixexclude temptrans
+syn keyword splintFlag contained tmpcomments toctou topuse trytorecover type
+syn keyword splintFlag contained typeprefix typeprefixexclude typeuse uncheckedglobalias uncheckedmacroprefix
+syn keyword splintFlag contained uncheckedmacroprefixexclude uniondef unixstandard unqualifiedinittrans unqualifiedtrans
+syn keyword splintFlag contained unreachable unrecog unrecogcomments unrecogdirective unrecogflagcomments
+syn keyword splintFlag contained unsignedcompare unusedspecial usedef usereleased usevarargs
+syn keyword splintFlag contained varuse voidabstract warnflags warnlintcomments warnmissingglobs
+syn keyword splintFlag contained warnmissingglobsnoglobs warnposixheaders warnrc warnsysfiles warnunixlib
+syn keyword splintFlag contained warnuse whileblock whileempty whileloopexec zerobool
+syn keyword splintFlag contained zeroptr
+" Global Flags:
+syn keyword splintGlobalFlag contained csv dump errorstream errorstreamstderr errorstreamstdout
+syn keyword splintGlobalFlag contained expect f help i isolib
+syn keyword splintGlobalFlag contained larchpath lclexpect lclimportdir lcs lh
+syn keyword splintGlobalFlag contained load messagestream messagestreamstderr messagestreamstdout mts
+syn keyword splintGlobalFlag contained neverinclude nof nolib posixlib posixstrictlib
+syn keyword splintGlobalFlag contained showalluses singleinclude skipsysheaders stats streamoverwrite
+syn keyword splintGlobalFlag contained strictlib supcounts sysdirs timedist tmpdir
+syn keyword splintGlobalFlag contained unixlib unixstrictlib warningstream warningstreamstderr warningstreamstdout
+syn keyword splintGlobalFlag contained whichlib
+syn match splintFlagExpr contained "[\+\-\=]" nextgroup=splintFlag,splintGlobalFlag
+
+" detect missing /*@ and wrong */
+syn match splintAnnError "@\*/"
+syn cluster cCommentGroup add=splintAnnError
+syn match splintAnnError2 "[^@]\*/"hs=s+1 contained
+syn region splintAnnotation start="/\*@" end="@\*/" contains=@splintAnnotElem,cType keepend
+syn match splintShortAnn "/\*@\*/"
+syn cluster splintAnnotElem contains=splintStateAnnot,splintSpecialAnnot,splintSpecTag,splintModifies,splintRequires,splintGlobals,splintGlobitem,splintGlobannot,splintWarning,splintModitem,splintIter,splintConst,splintAlt,splintType,splintGlobalType,splintMemMgm,splintAlias,splintExposure,splintDefState,splintGlobState,splintNullState,splintNullPred,splintExit,splintExec,splintSef,splintDecl,splintCase,splintBreak,splintUnreach,splintSpecFunc,splintErrSupp,splintTypeAcc,splintMacro,splintSpecType,splintAnnError2,splintFlagExpr
+syn cluster splintAllStuff contains=@splintAnnotElem,splintFlag,splintGlobalFlag
+syn cluster cParenGroup add=@splintAllStuff
+syn cluster cPreProcGroup add=@splintAllStuff
+syn cluster cMultiGroup add=@splintAllStuff
+
+" 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_splint_syntax_inits")
+ if version < 508
+ let did_splint_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink splintShortAnn splintAnnotation
+ HiLink splintAnnotation Comment
+ HiLink splintAnnError splintError
+ HiLink splintAnnError2 splintError
+ HiLink splintFlag SpecialComment
+ HiLink splintGlobalFlag splintError
+ HiLink splintSpecialAnnot splintAnnKey
+ HiLink splintStateAnnot splintAnnKey
+ HiLink splintSpecTag splintAnnKey
+ HiLink splintModifies splintAnnKey
+ HiLink splintRequires splintAnnKey
+ HiLink splintGlobals splintAnnKey
+ HiLink splintGlobitem Constant
+ HiLink splintGlobannot splintAnnKey
+ HiLink splintWarning splintAnnKey
+ HiLink splintModitem Constant
+ HiLink splintIter splintAnnKey
+ HiLink splintConst splintAnnKey
+ HiLink splintAlt splintAnnKey
+ HiLink splintType splintAnnKey
+ HiLink splintGlobalType splintAnnKey
+ HiLink splintMemMgm splintAnnKey
+ HiLink splintAlias splintAnnKey
+ HiLink splintExposure splintAnnKey
+ HiLink splintDefState splintAnnKey
+ HiLink splintGlobState splintAnnKey
+ HiLink splintNullState splintAnnKey
+ HiLink splintNullPred splintAnnKey
+ HiLink splintExit splintAnnKey
+ HiLink splintExec splintAnnKey
+ HiLink splintSef splintAnnKey
+ HiLink splintDecl splintAnnKey
+ HiLink splintCase splintAnnKey
+ HiLink splintBreak splintAnnKey
+ HiLink splintUnreach splintAnnKey
+ HiLink splintSpecFunc splintAnnKey
+ HiLink splintErrSupp splintAnnKey
+ HiLink splintTypeAcc splintAnnKey
+ HiLink splintMacro splintAnnKey
+ HiLink splintSpecType splintAnnKey
+ HiLink splintAnnKey Type
+ HiLink splintError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "splint"
+
+" vim: ts=8
diff --git a/runtime/syntax/spup.vim b/runtime/syntax/spup.vim
new file mode 100644
index 000000000..af5773740
--- /dev/null
+++ b/runtime/syntax/spup.vim
@@ -0,0 +1,277 @@
+" 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
+" Filename: spup.vim
+
+" Bugs
+" - in the appropriate sections keywords are always highlighted
+" even if they are not used with the appropriate meaning;
+" example: in
+" MODEL demonstration
+" TYPE
+" *area AS area
+" both "area" are highlighted as spupType.
+"
+" If you encounter problems or have questions or suggestions, mail me
+
+" Remove old syntax stuff
+" 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
+
+" don't hightlight several keywords like subsections
+"let strict_subsections = 1
+
+" highlight types usually found in DECLARE section
+if !exists("hightlight_types")
+ let highlight_types = 1
+endif
+
+" one line comment syntax (# comments)
+" 1. allow appended code after comment, do not complain
+" 2. show code beginnig with the second # as an error
+" 3. show whole lines with more than one # as an error
+if !exists("oneline_comments")
+ let oneline_comments = 2
+endif
+
+" Speedup SECTION regions
+syn case ignore
+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
+syn region spupExternal matchgroup=spupSection start="^EXTERNAL" end="^\*\*\*\*" contains=spupExternalSubs,@spupOrdinary
+syn region spupFlowsheet matchgroup=spupSection start="^FLOWSHEET" end="^\*\*\*\*" contains=spupFlowsheetSubs,@spupOrdinary,spupStreams,@spupTextproc
+syn region spupFunction matchgroup=spupSection start="^FUNCTION" end="^\*\*\*\*" contains=spupFunctionSubs,@spupOrdinary,spupHelp,spupCode,spupTypes
+syn region spupGlobal matchgroup=spupSection start="^GLOBAL" end="^\*\*\*\*" contains=spupGlobalSubs,@spupOrdinary
+syn region spupHomotopy matchgroup=spupSection start="^HOMOTOPY" end="^\*\*\*\*" contains=spupHomotopySubs,@spupOrdinary
+syn region spupMacro matchgroup=spupSection start="^MACRO" end="^\*\*\*\*" contains=spupMacroSubs,@spupOrdinary,@spupTextproc,spupTypes,spupStreams,spupOperator
+syn region spupModel matchgroup=spupSection start="^MODEL" end="^\*\*\*\*" contains=spupModelSubs,@spupOrdinary,spupConditional,spupOperator,spupTypes,spupStreams,@spupTextproc,spupHelp
+syn region spupOperation matchgroup=spupSection start="^OPERATION" end="^\*\*\*\*" contains=spupOperationSubs,@spupOrdinary,@spupTextproc
+syn region spupOptions matchgroup=spupSection start="^OPTIONS" end="^\*\*\*\*" contains=spupOptionsSubs,@spupOrdinary
+syn region spupProcedure matchgroup=spupSection start="^PROCEDURE" end="^\*\*\*\*" contains=spupProcedureSubs,@spupOrdinary,spupHelp,spupCode,spupTypes
+syn region spupProfiles matchgroup=spupSection start="^PROFILES" end="^\*\*\*\*" contains=@spupOrdinary,@spupTextproc
+syn region spupReport matchgroup=spupSection start="^REPORT" end="^\*\*\*\*" contains=spupReportSubs,@spupOrdinary,spupHelp,@spupTextproc
+syn region spupTitle matchgroup=spupSection start="^TITLE" end="^\*\*\*\*" contains=spupTitleSubs,spupComment,spupConstant,spupError
+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 spupDeclareSubs TYPE STREAM contained
+syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained
+syn keyword spupExternalSubs TRANSMIT RECEIVE contained
+syn keyword spupFlowsheetSubs STREAM contained
+syn keyword spupFunctionSubs INPUT OUTPUT contained
+syn keyword spupGlobalSubs VARIABLES MAXIMIZE MINIMIZE CONSTRAINT contained
+syn keyword spupHomotopySubs VARY OPTIONS contained
+syn keyword spupMacroSubs MODEL FLOWSHEET contained
+syn keyword spupModelSubs CATEGORY SET TYPE STREAM EQUATION PROCEDURE contained
+syn keyword spupOperationSubs SET PRESET INITIAL SSTATE FREE contained
+syn keyword spupOptionsSubs ROUTINES TRANSLATE EXECUTION contained
+syn keyword spupProcedureSubs INPUT OUTPUT SPACE PRECALL POSTCALL DERIVATIVE STREAM contained
+" no subsections for Profiles
+syn keyword spupReportSubs SET INITIAL FIELDS FIELDMARK DISPLAY WITHIN contained
+syn keyword spupUnitSubs ROUTINES SET contained
+
+" additional keywords for subsections
+if !exists( "strict_subsections" )
+ syn keyword spupConditionsSubs STOP PRINT contained
+ syn keyword spupDeclareSubs UNIT SET COMPONENTS THERMO OPTIONS contained
+ syn keyword spupEstimationSubs VARY MEASURE INITIAL contained
+ syn keyword spupFlowsheetSubs TYPE FEED PRODUCT INPUT OUTPUT CONNECTION OF IS contained
+ syn keyword spupMacroSubs CONNECTION STREAM SET INPUT OUTPUT OF IS FEED PRODUCT TYPE contained
+ syn keyword spupModelSubs AS ARRAY OF INPUT OUTPUT CONNECTION contained
+ syn keyword spupOperationSubs WITHIN contained
+ syn keyword spupReportSubs LEFT RIGHT CENTER CENTRE UOM TIME DATE VERSION RELDATE contained
+ syn keyword spupUnitSubs IS A contained
+endif
+
+" Speedup data types
+if exists( "highlight_types" )
+ syn keyword spupTypes act_coeff_liq area coefficient concentration contained
+ syn keyword spupTypes control_signal cond_liq cond_vap cp_mass_liq contained
+ syn keyword spupTypes cp_mol_liq cp_mol_vap cv_mol_liq cv_mol_vap contained
+ syn keyword spupTypes diffus_liq diffus_vap delta_p dens_mass contained
+ syn keyword spupTypes dens_mass_sol dens_mass_liq dens_mass_vap dens_mol contained
+ syn keyword spupTypes dens_mol_sol dens_mol_liq dens_mol_vap enthflow contained
+ syn keyword spupTypes enth_mass enth_mass_liq enth_mass_vap enth_mol contained
+ syn keyword spupTypes enth_mol_sol enth_mol_liq enth_mol_vap entr_mol contained
+ syn keyword spupTypes entr_mol_sol entr_mol_liq entr_mol_vap fraction contained
+ syn keyword spupTypes flow_mass flow_mass_liq flow_mass_vap flow_mol contained
+ syn keyword spupTypes flow_mol_vap flow_mol_liq flow_vol flow_vol_vap contained
+ syn keyword spupTypes flow_vol_liq fuga_vap fuga_liq fuga_sol contained
+ syn keyword spupTypes gibb_mol_sol heat_react heat_trans_coeff contained
+ syn keyword spupTypes holdup_heat holdup_heat_liq holdup_heat_vap contained
+ syn keyword spupTypes holdup_mass holdup_mass_liq holdup_mass_vap contained
+ syn keyword spupTypes holdup_mol holdup_mol_liq holdup_mol_vap k_value contained
+ syn keyword spupTypes length length_delta length_short liqfraction contained
+ syn keyword spupTypes liqmassfraction mass massfraction molefraction contained
+ syn keyword spupTypes molweight moment_inertia negative notype percent contained
+ syn keyword spupTypes positive pressure press_diff press_drop press_rise contained
+ syn keyword spupTypes ratio reaction reaction_mass rotation surf_tens contained
+ syn keyword spupTypes temperature temperature_abs temp_diff temp_drop contained
+ syn keyword spupTypes temp_rise time vapfraction vapmassfraction contained
+ syn keyword spupTypes velocity visc_liq visc_vap volume zmom_rate contained
+ syn keyword spupTypes seg_rate smom_rate tmom_rate zmom_mass seg_mass contained
+ syn keyword spupTypes smom_mass tmom_mass zmom_holdup seg_holdup contained
+ syn keyword spupTypes smom_holdup tmom_holdup contained
+endif
+
+" stream types
+syn keyword spupStreams mainstream vapour liquid contained
+
+" "conditional" keywords
+syn keyword spupConditional IF THEN ELSE ENDIF contained
+" Operators, symbols etc.
+syn keyword spupOperator AND OR NOT contained
+syn match spupSymbol "[,\-+=:;*/\"<>@%()]" contained
+syn match spupSpecial "[&\$?]" contained
+" Surprisingly, Speedup allows no unary + instead of the -
+syn match spupError "[(=+\-*/]\s*+\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained
+syn match spupError "[(=+\-*/]\s*+\d\+\.\([ed][+-]\=\d\+\)\=\>"lc=1 contained
+syn match spupError "[(=+\-*/]\s*+\d*\.\d\+\([ed][+-]\=\d\+\)\=\>"lc=1 contained
+" String
+syn region spupString start=+"+ end=+"+ oneline contained
+syn region spupString start=+'+ end=+'+ oneline contained
+" Identifier
+syn match spupIdentifier "\<[a-z][a-z0-9_]*\>" contained
+" Textprocessor directives
+syn match spupTextprocGeneric "?[a-z][a-z0-9_]*\>" contained
+syn region spupTextprocError matchgroup=spupTextprocGeneric start="?ERROR" end="?END"he=s-1 contained
+" Number, without decimal point
+syn match spupNumber "-\=\d\+\([ed][+-]\=\d\+\)\=" contained
+" Number, allows 1. before exponent
+syn match spupNumber "-\=\d\+\.\([ed][+-]\=\d\+\)\=" contained
+" Number allows .1 before exponent
+syn match spupNumber "-\=\d*\.\d\+\([ed][+-]\=\d\+\)\=" contained
+" Help subsections
+syn region spupHelp start="^HELP"hs=e+1 end="^\$ENDHELP"he=s-1 contained
+" Fortran code
+syn region spupCode start="^CODE"hs=e+1 end="^\$ENDCODE"he=s-1 contained
+" oneline comments
+if oneline_comments > 3
+ oneline_comments = 2 " default
+endif
+if oneline_comments == 1
+ syn match spupComment "#[^#]*#\="
+elseif oneline_comments == 2
+ syn match spupError "#.*$"
+ syn match spupComment "#[^#]*" nextgroup=spupError
+elseif oneline_comments == 3
+ syn match spupComment "#[^#]*"
+ syn match spupError "#[^#]*#.*"
+endif
+" multiline comments
+syn match spupOpenBrace "{" contained
+syn match spupError "}"
+syn region spupComment matchgroup=spupComment2 start="{" end="}" keepend contains=spupOpenBrace
+
+syn cluster spupOrdinary contains=spupNumber,spupIdentifier,spupSymbol
+syn cluster spupOrdinary add=spupError,spupString,spupComment
+syn cluster spupTextproc contains=spupTextprocGeneric,spupTextprocError
+
+" define syncronizing; especially OPERATION sections can become very large
+syn sync clear
+syn sync minlines=100
+syn sync maxlines=500
+
+syn sync match spupSyncOperation grouphere spupOperation "^OPERATION"
+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"
+syn sync match spupSyncExternal grouphere spupExternal "^EXTERNAL"
+syn sync match spupSyncFlowsheet grouphere spupFlowsheet "^FLOWSHEET"
+syn sync match spupSyncFunction grouphere spupFunction "^FUNCTION"
+syn sync match spupSyncGlobal grouphere spupGlobal "^GLOBAL"
+syn sync match spupSyncHomotopy grouphere spupHomotopy "^HOMOTOPY"
+syn sync match spupSyncMacro grouphere spupMacro "^MACRO"
+syn sync match spupSyncModel grouphere spupModel "^MODEL"
+syn sync match spupSyncOperation grouphere spupOperation "^OPERATION"
+syn sync match spupSyncOptions grouphere spupOptions "^OPTIONS"
+syn sync match spupSyncProcedure grouphere spupProcedure "^PROCEDURE"
+syn sync match spupSyncProfiles grouphere spupProfiles "^PROFILES"
+syn sync match spupSyncReport grouphere spupReport "^REPORT"
+syn sync match spupSyncTitle grouphere spupTitle "^TITLE"
+syn sync match spupSyncUnit grouphere spupUnit "^UNIT"
+
+" 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_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>
+ 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
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "spup"
+
+" vim:ts=4
diff --git a/runtime/syntax/spyce.vim b/runtime/syntax/spyce.vim
new file mode 100644
index 000000000..641aa8659
--- /dev/null
+++ b/runtime/syntax/spyce.vim
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language: SPYCE
+" Maintainer: Rimon Barr <rimon AT acm DOT org>
+" URL: http://spyce.sourceforge.net
+" Last Change: 2003 May 11
+
+" 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
+
+" we define it here so that included files can test for it
+if !exists("main_syntax")
+ let main_syntax='spyce'
+endif
+
+" Read the HTML syntax to start with
+let b:did_indent = 1 " don't perform HTML indentation!
+let html_no_rendering = 1 " do not render <b>,<i>, etc...
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+" include python
+syn include @Python <sfile>:p:h/python.vim
+syn include @Html <sfile>:p:h/html.vim
+
+" spyce definitions
+syn keyword spyceDirectiveKeyword include compact module import contained
+syn keyword spyceDirectiveArg name names file contained
+syn region spyceDirectiveString start=+"+ end=+"+ contained
+syn match spyceDirectiveValue "=[\t ]*[^'", \t>][^, \t>]*"hs=s+1 contained
+
+syn match spyceBeginErrorS ,\[\[,
+syn match spyceBeginErrorA ,<%,
+syn cluster spyceBeginError contains=spyceBeginErrorS,spyceBeginErrorA
+syn match spyceEndErrorS ,\]\],
+syn match spyceEndErrorA ,%>,
+syn cluster spyceEndError contains=spyceEndErrorS,spyceEndErrorA
+
+syn match spyceEscBeginS ,\\\[\[,
+syn match spyceEscBeginA ,\\<%,
+syn cluster spyceEscBegin contains=spyceEscBeginS,spyceEscBeginA
+syn match spyceEscEndS ,\\\]\],
+syn match spyceEscEndA ,\\%>,
+syn cluster spyceEscEnd contains=spyceEscEndS,spyceEscEndA
+syn match spyceEscEndCommentS ,--\\\]\],
+syn match spyceEscEndCommentA ,--\\%>,
+syn cluster spyceEscEndComment contains=spyceEscEndCommentS,spyceEscEndCommentA
+
+syn region spyceStmtS matchgroup=spyceStmtDelim start=,\[\[, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceStmtA matchgroup=spyceStmtDelim start=,<%, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceChunkS matchgroup=spyceChunkDelim start=,\[\[\\, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceChunkA matchgroup=spyceChunkDelim start=,<%\\, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceEvalS matchgroup=spyceEvalDelim start=,\[\[=, end=,\]\], contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceEvalA matchgroup=spyceEvalDelim start=,<%=, end=,%>, contains=@Python,spyceLambdaS,spyceLambdaA,spyceBeginError keepend
+syn region spyceDirectiveS matchgroup=spyceDelim start=,\[\[\., end=,\]\], contains=spyceBeginError,spyceDirectiveKeyword,spyceDirectiveArg,spyceDirectiveValue,spyceDirectiveString keepend
+syn region spyceDirectiveA matchgroup=spyceDelim start=,<%@, end=,%>, contains=spyceBeginError,spyceDirectiveKeyword,spyceDirectiveArg,spyceDirectiveValue,spyceDirectiveString keepend
+syn region spyceCommentS matchgroup=spyceCommentDelim start=,\[\[--, end=,--\]\],
+syn region spyceCommentA matchgroup=spyceCommentDelim start=,<%--, end=,--%>,
+syn region spyceLambdaS matchgroup=spyceLambdaDelim start=,\[\[spy!\?, end=,\]\], contains=@Html,@spyce extend
+syn region spyceLambdaA matchgroup=spyceLambdaDelim start=,<%spy!\?, end=,%>, contains=@Html,@spyce extend
+
+syn cluster spyce contains=spyceStmtS,spyceStmtA,spyceChunkS,spyceChunkA,spyceEvalS,spyceEvalA,spyceCommentS,spyceCommentA,spyceDirectiveS,spyceDirectiveA
+
+syn cluster htmlPreproc contains=@spyce
+
+hi link spyceDirectiveKeyword Special
+hi link spyceDirectiveArg Type
+hi link spyceDirectiveString String
+hi link spyceDirectiveValue String
+
+hi link spyceDelim Special
+hi link spyceStmtDelim spyceDelim
+hi link spyceChunkDelim spyceDelim
+hi link spyceEvalDelim spyceDelim
+hi link spyceLambdaDelim spyceDelim
+hi link spyceCommentDelim Comment
+
+hi link spyceBeginErrorS Error
+hi link spyceBeginErrorA Error
+hi link spyceEndErrorS Error
+hi link spyceEndErrorA Error
+
+hi link spyceStmtS spyce
+hi link spyceStmtA spyce
+hi link spyceChunkS spyce
+hi link spyceChunkA spyce
+hi link spyceEvalS spyce
+hi link spyceEvalA spyce
+hi link spyceDirectiveS spyce
+hi link spyceDirectiveA spyce
+hi link spyceCommentS Comment
+hi link spyceCommentA Comment
+hi link spyceLambdaS Normal
+hi link spyceLambdaA Normal
+
+hi link spyce Statement
+
+let b:current_syntax = "spyce"
+if main_syntax == 'spyce'
+ unlet main_syntax
+endif
+
diff --git a/runtime/syntax/sql.vim b/runtime/syntax/sql.vim
new file mode 100644
index 000000000..9083b8136
--- /dev/null
+++ b/runtime/syntax/sql.vim
@@ -0,0 +1,89 @@
+" Vim syntax file
+" Language: SQL, PL/SQL (Oracle 8i)
+" Maintainer: Paul Moore <gustav@morpheus.demon.co.uk>
+" Last Change: 2001 Apr 30
+
+" 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.
+
+syn keyword sqlSpecial false null true
+
+syn keyword sqlKeyword access add as asc begin by check cluster column
+syn keyword sqlKeyword compress connect current cursor decimal default desc
+syn keyword sqlKeyword else elsif end exception exclusive file for from
+syn keyword sqlKeyword function group having identified if immediate increment
+syn keyword sqlKeyword index initial into is level loop maxextents mode modify
+syn keyword sqlKeyword nocompress nowait of offline on online start
+syn keyword sqlKeyword successful synonym table then to trigger uid
+syn keyword sqlKeyword unique user validate values view whenever
+syn keyword sqlKeyword where with option order pctfree privileges procedure
+syn keyword sqlKeyword public resource return row rowlabel rownum rows
+syn keyword sqlKeyword session share size smallint type using
+
+syn keyword sqlOperator not and or
+syn keyword sqlOperator in any some all between exists
+syn keyword sqlOperator like escape
+syn keyword sqlOperator union intersect minus
+syn keyword sqlOperator prior distinct
+syn keyword sqlOperator sysdate out
+
+syn keyword sqlStatement alter analyze audit comment commit create
+syn keyword sqlStatement delete drop execute explain grant insert lock noaudit
+syn keyword sqlStatement rename revoke rollback savepoint select set
+syn keyword sqlStatement truncate update
+
+syn keyword sqlType boolean char character date float integer long
+syn keyword sqlType mlslabel number raw rowid varchar varchar2 varray
+
+" Strings and characters:
+syn region sqlString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region sqlString start=+'+ skip=+\\\\\|\\'+ end=+'+
+
+" Numbers:
+syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>"
+
+" Comments:
+syn region sqlComment start="/\*" end="\*/" contains=sqlTodo
+syn match sqlComment "--.*$" contains=sqlTodo
+
+syn sync ccomment sqlComment
+
+" Todo.
+syn keyword sqlTodo TODO FIXME XXX DEBUG NOTE
+
+" 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 def link <args>
+ endif
+
+ HiLink sqlComment Comment
+ HiLink sqlKeyword sqlSpecial
+ HiLink sqlNumber Number
+ HiLink sqlOperator sqlStatement
+ HiLink sqlSpecial Special
+ HiLink sqlStatement Statement
+ HiLink sqlString String
+ HiLink sqlType Type
+ HiLink sqlTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sql"
+
+" vim: ts=8
diff --git a/runtime/syntax/sqlforms.vim b/runtime/syntax/sqlforms.vim
new file mode 100644
index 000000000..055b2ae87
--- /dev/null
+++ b/runtime/syntax/sqlforms.vim
@@ -0,0 +1,168 @@
+" Vim syntax file
+" Language: SQL*Forms (Oracle 7), based on sql.vim (vim5.0)
+" Maintainer: Austin Ziegler (austin@halostatue.ca)
+" Last Change: 2003 May 11
+" Prev Change: 19980710
+" URL: http://www.halostatue.ca/vim/syntax/proc.vim
+"
+" TODO Find a new maintainer who knows SQL*Forms.
+
+ " 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
+
+syntax case ignore
+
+if version >= 600
+ setlocal iskeyword=a-z,A-Z,48-57,_,.,-,>
+else
+ set iskeyword=a-z,A-Z,48-57,_,.,-,>
+endif
+
+
+ " The SQL reserved words, defined as keywords.
+syntax match sqlTriggers /on-.*$/
+syntax match sqlTriggers /key-.*$/
+syntax match sqlTriggers /post-.*$/
+syntax match sqlTriggers /pre-.*$/
+syntax match sqlTriggers /user-.*$/
+
+syntax keyword sqlSpecial null false true
+
+syntax keyword sqlProcedure abort_query anchor_view bell block_menu break call
+syntax keyword sqlProcedure call_input call_query clear_block clear_eol
+syntax keyword sqlProcedure clear_field clear_form clear_record commit_form
+syntax keyword sqlProcedure copy count_query create_record default_value
+syntax keyword sqlProcedure delete_record display_error display_field down
+syntax keyword sqlProcedure duplicate_field duplicate_record edit_field
+syntax keyword sqlProcedure enter enter_query erase execute_query
+syntax keyword sqlProcedure execute_trigger exit_form first_Record go_block
+syntax keyword sqlProcedure go_field go_record help hide_menu hide_page host
+syntax keyword sqlProcedure last_record list_values lock_record message
+syntax keyword sqlProcedure move_view new_form next_block next_field next_key
+syntax keyword sqlProcedure next_record next_set pause post previous_block
+syntax keyword sqlProcedure previous_field previous_record print redisplay
+syntax keyword sqlProcedure replace_menu resize_view scroll_down scroll_up
+syntax keyword sqlProcedure set_field show_keys show_menu show_page
+syntax keyword sqlProcedure synchronize up user_exit
+
+syntax keyword sqlFunction block_characteristic error_code error_text
+syntax keyword sqlFunction error_type field_characteristic form_failure
+syntax keyword sqlFunction form_fatal form_success name_in
+
+syntax keyword sqlParameters hide no_hide replace no_replace ask_commit
+syntax keyword sqlParameters do_commit no_commit no_validate all_records
+syntax keyword sqlParameters for_update no_restrict restrict no_screen
+syntax keyword sqlParameters bar full_screen pull_down auto_help auto_skip
+syntax keyword sqlParameters fixed_length enterable required echo queryable
+syntax keyword sqlParameters updateable update_null upper_case attr_on
+syntax keyword sqlParameters attr_off base_table first_field last_field
+syntax keyword sqlParameters datatype displayed display_length field_length
+syntax keyword sqlParameters list page primary_key query_length x_pos y_pos
+
+syntax match sqlSystem /system\.block_status/
+syntax match sqlSystem /system\.current_block/
+syntax match sqlSystem /system\.current_field/
+syntax match sqlSystem /system\.current_form/
+syntax match sqlSystem /system\.current_value/
+syntax match sqlSystem /system\.cursor_block/
+syntax match sqlSystem /system\.cursor_field/
+syntax match sqlSystem /system\.cursor_record/
+syntax match sqlSystem /system\.cursor_value/
+syntax match sqlSystem /system\.form_status/
+syntax match sqlSystem /system\.last_query/
+syntax match sqlSystem /system\.last_record/
+syntax match sqlSystem /system\.message_level/
+syntax match sqlSystem /system\.record_status/
+syntax match sqlSystem /system\.trigger_block/
+syntax match sqlSystem /system\.trigger_field/
+syntax match sqlSystem /system\.trigger_record/
+syntax match sqlSystem /\$\$date\$\$/
+syntax match sqlSystem /\$\$time\$\$/
+
+syntax keyword sqlKeyword accept access add as asc by check cluster column
+syntax keyword sqlKeyword compress connect current decimal default
+syntax keyword sqlKeyword desc exclusive file for from group
+syntax keyword sqlKeyword having identified immediate increment index
+syntax keyword sqlKeyword initial into is level maxextents mode modify
+syntax keyword sqlKeyword nocompress nowait of offline on online start
+syntax keyword sqlKeyword successful synonym table to trigger uid
+syntax keyword sqlKeyword unique user validate values view whenever
+syntax keyword sqlKeyword where with option order pctfree privileges
+syntax keyword sqlKeyword public resource row rowlabel rownum rows
+syntax keyword sqlKeyword session share size smallint sql\*forms_version
+syntax keyword sqlKeyword terse define form name title procedure begin
+syntax keyword sqlKeyword default_menu_application trigger block field
+syntax keyword sqlKeyword enddefine declare exception raise when cursor
+syntax keyword sqlKeyword definition base_table pragma
+syntax keyword sqlKeyword column_name global trigger_type text description
+syntax match sqlKeyword "<<<"
+syntax match sqlKeyword ">>>"
+
+syntax keyword sqlOperator not and or out to_number to_date message erase
+syntax keyword sqlOperator in any some all between exists substr nvl
+syntax keyword sqlOperator exception_init
+syntax keyword sqlOperator like escape trunc lpad rpad sum
+syntax keyword sqlOperator union intersect minus to_char greatest
+syntax keyword sqlOperator prior distinct decode least avg
+syntax keyword sqlOperator sysdate true false field_characteristic
+syntax keyword sqlOperator display_field call host
+
+syntax keyword sqlStatement alter analyze audit comment commit create
+syntax keyword sqlStatement delete drop explain grant insert lock noaudit
+syntax keyword sqlStatement rename revoke rollback savepoint select set
+syntax keyword sqlStatement truncate update if elsif loop then
+syntax keyword sqlStatement open fetch close else end
+
+syntax keyword sqlType char character date long raw mlslabel number rowid
+syntax keyword sqlType varchar varchar2 float integer boolean global
+
+syntax keyword sqlCodes sqlcode no_data_found too_many_rows others
+syntax keyword sqlCodes form_trigger_failure notfound found
+syntax keyword sqlCodes validate no_commit
+
+ " Comments:
+syntax region sqlComment start="/\*" end="\*/"
+syntax match sqlComment "--.*"
+
+ " Strings and characters:
+syntax region sqlString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syntax region sqlString start=+'+ skip=+\\\\\|\\"+ end=+'+
+
+ " Numbers:
+syntax match sqlNumber "-\=\<[0-9]*\.\=[0-9_]\>"
+
+syntax sync ccomment sqlComment
+
+if version >= 508 || !exists("did_sqlforms_syn_inits")
+ if version < 508
+ let did_sqlforms_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sqlComment Comment
+ HiLink sqlKeyword Statement
+ HiLink sqlNumber Number
+ HiLink sqlOperator Statement
+ HiLink sqlProcedure Statement
+ HiLink sqlFunction Statement
+ HiLink sqlSystem Identifier
+ HiLink sqlSpecial Special
+ HiLink sqlStatement Statement
+ HiLink sqlString String
+ HiLink sqlType Type
+ HiLink sqlCodes Identifier
+ HiLink sqlTriggers PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sqlforms"
+
+" vim: ts=8 sw=4
diff --git a/runtime/syntax/sqlj.vim b/runtime/syntax/sqlj.vim
new file mode 100644
index 000000000..ba64bdfc0
--- /dev/null
+++ b/runtime/syntax/sqlj.vim
@@ -0,0 +1,100 @@
+" Vim syntax file
+" Language: sqlj
+" Maintainer: Andreas Fischbach <afisch@altavista.com>
+" This file is based on sql.vim && java.vim (thanx)
+" with a handful of additional sql words and still
+" a subset of whatever standard
+" Last change: 31th Dec 2001
+
+" au BufNewFile,BufRead *.sqlj so $VIM/syntax/sqlj.vim
+
+" Remove any old syntax stuff hanging around
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Read the Java syntax to start with
+source <sfile>:p:h/java.vim
+
+" SQLJ extentions
+" The SQL reserved words, defined as keywords.
+
+syn case ignore
+syn keyword sqljSpecial null
+
+syn keyword sqljKeyword access add as asc by check cluster column
+syn keyword sqljKeyword compress connect current decimal default
+syn keyword sqljKeyword desc else exclusive file for from group
+syn keyword sqljKeyword having identified immediate increment index
+syn keyword sqljKeyword initial into is level maxextents mode modify
+syn keyword sqljKeyword nocompress nowait of offline on online start
+syn keyword sqljKeyword successful synonym table then to trigger uid
+syn keyword sqljKeyword unique user validate values view whenever
+syn keyword sqljKeyword where with option order pctfree privileges
+syn keyword sqljKeyword public resource row rowlabel rownum rows
+syn keyword sqljKeyword session share size smallint
+
+syn keyword sqljKeyword fetch database context iterator field join
+syn keyword sqljKeyword foreign outer inner isolation left right
+syn keyword sqljKeyword match primary key
+
+syn keyword sqljOperator not and or
+syn keyword sqljOperator in any some all between exists
+syn keyword sqljOperator like escape
+syn keyword sqljOperator union intersect minus
+syn keyword sqljOperator prior distinct
+syn keyword sqljOperator sysdate
+
+syn keyword sqljOperator max min avg sum count hex
+
+syn keyword sqljStatement alter analyze audit comment commit create
+syn keyword sqljStatement delete drop explain grant insert lock noaudit
+syn keyword sqljStatement rename revoke rollback savepoint select set
+syn keyword sqljStatement truncate update begin work
+
+syn keyword sqljType char character date long raw mlslabel number
+syn keyword sqljType rowid varchar varchar2 float integer
+
+syn keyword sqljType byte text serial
+
+
+" Strings and characters:
+syn region sqljString start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region sqljString start=+'+ skip=+\\\\\|\\"+ end=+'+
+
+" Numbers:
+syn match sqljNumber "-\=\<\d*\.\=[0-9_]\>"
+
+" PreProc
+syn match sqljPre "#sql"
+
+" Comments:
+syn region sqljComment start="/\*" end="\*/"
+syn match sqlComment "--.*"
+
+syn sync ccomment sqljComment
+
+if version >= 508 || !exists("did_sqlj_syn_inits")
+ if version < 508
+ let did_sqlj_syn_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 sqljComment Comment
+ HiLink sqljKeyword sqljSpecial
+ HiLink sqljNumber Number
+ HiLink sqljOperator sqljStatement
+ HiLink sqljSpecial Special
+ HiLink sqljStatement Statement
+ HiLink sqljString String
+ HiLink sqljType Type
+ HiLink sqljPre PreProc
+endif
+
+let b:current_syntax = "sqlj"
+
diff --git a/runtime/syntax/sqr.vim b/runtime/syntax/sqr.vim
new file mode 100644
index 000000000..874944779
--- /dev/null
+++ b/runtime/syntax/sqr.vim
@@ -0,0 +1,295 @@
+" Vim syntax file
+" Language: Structured Query Report Writer (SQR)
+" Maintainer: Nathan Stratton Treadway (nathanst at ontko dot com)
+" URL: http://www.ontko.com/sqr/#editor_config_files
+"
+" Modification History:
+" 2002-Apr-12: Updated for SQR v6.x
+" 2002-Jul-30: Added { and } to iskeyword definition
+" 2003-Oct-15: Allow "." in variable names
+" highlight entire open '... literal when it contains
+" "''" inside it (e.g. "'I can''t say" is treated
+" as one open string, not one terminated and one open)
+" {} variables can occur inside of '...' literals
+"
+" Thanks to the previous maintainer of this file, Jeff Lanzarotta:
+" http://lanzarotta.tripod.com/vim.html
+" jefflanzarotta at yahoo dot com
+
+" 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
+
+if version >= 600
+ setlocal iskeyword=@,48-57,_,-,#,$,{,}
+else
+ set iskeyword=@,48-57,_,-,#,$,{,}
+endif
+
+syn case ignore
+
+" BEGIN GENERATED SECTION ============================================
+
+" Generated by generate_vim_syntax.sqr at 2002/04/11 13:04
+" (based on the UltraEdit syntax file for SQR 6.1.4
+" found at http://www.ontko.com/sqr/#editor_config_files )
+
+syn keyword sqrSection begin-footing begin-heading begin-procedure
+syn keyword sqrSection begin-program begin-report begin-setup
+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-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-layout declare-printer
+syn keyword sqrParagraph declare-report declare-procedure
+syn keyword sqrParagraph declare-toc declare-variable end-declare
+syn keyword sqrParagraph end-document end-select exit-select end-sql
+syn keyword sqrParagraph load-lookup
+
+syn keyword sqrReserved #current-column #current-date #current-line
+syn keyword sqrReserved #end-file #page-count #return-status
+syn keyword sqrReserved #sql-count #sql-status #sqr-max-columns
+syn keyword sqrReserved #sqr-max-lines #sqr-pid #sqr-toc-level
+syn keyword sqrReserved #sqr-toc-page $sqr-database {sqr-database}
+syn keyword sqrReserved $sqr-dbcs {sqr-dbcs} $sqr-encoding
+syn keyword sqrReserved {sqr-encoding} $sqr-encoding-console
+syn keyword sqrReserved {sqr-encoding-console}
+syn keyword sqrReserved $sqr-encoding-database
+syn keyword sqrReserved {sqr-encoding-database}
+syn keyword sqrReserved $sqr-encoding-file-input
+syn keyword sqrReserved {sqr-encoding-file-input}
+syn keyword sqrReserved $sqr-encoding-file-output
+syn keyword sqrReserved {sqr-encoding-file-output}
+syn keyword sqrReserved $sqr-encoding-report-input
+syn keyword sqrReserved {sqr-encoding-report-input}
+syn keyword sqrReserved $sqr-encoding-report-output
+syn keyword sqrReserved {sqr-encoding-report-output}
+syn keyword sqrReserved $sqr-encoding-source {sqr-encoding-source}
+syn keyword sqrReserved $sql-error $sqr-hostname {sqr-hostname}
+syn keyword sqrReserved $sqr-locale $sqr-platform {sqr-platform}
+syn keyword sqrReserved $sqr-program $sqr-report $sqr-toc-text
+syn keyword sqrReserved $sqr-ver $username
+
+syn keyword sqrPreProc #define #else #end-if #endif #if #ifdef
+syn keyword sqrPreProc #ifndef #include
+
+syn keyword sqrCommand add array-add array-divide array-multiply
+syn keyword sqrCommand array-subtract ask break call clear-array
+syn keyword sqrCommand close columns commit concat connect
+syn keyword sqrCommand create-array create-color-palette date-time
+syn keyword sqrCommand display divide do dollar-symbol else encode
+syn keyword sqrCommand end-evaluate end-if end-while evaluate
+syn keyword sqrCommand execute extract find get get-color goto
+syn keyword sqrCommand graphic if input last-page let lookup
+syn keyword sqrCommand lowercase mbtosbs money-symbol move
+syn keyword sqrCommand multiply new-page new-report next-column
+syn keyword sqrCommand next-listing no-formfeed open page-number
+syn keyword sqrCommand page-size position print print-bar-code
+syn keyword sqrCommand print-chart print-direct print-image
+syn keyword sqrCommand printer-deinit printer-init put read
+syn keyword sqrCommand rollback security set-color set-delay-print
+syn keyword sqrCommand set-generations set-levels set-members
+syn keyword sqrCommand sbtombs show stop string subtract toc-entry
+syn keyword sqrCommand unstring uppercase use use-column
+syn keyword sqrCommand use-printer-type use-procedure use-report
+syn keyword sqrCommand while write
+
+syn keyword sqrParam 3d-effects after after-bold after-page
+syn keyword sqrParam after-report after-toc and as at-end before
+syn keyword sqrParam background batch-mode beep before-bold
+syn keyword sqrParam before-page before-report before-toc blink
+syn keyword sqrParam bold border bottom-margin box break by
+syn keyword sqrParam caption center char char-size char-width
+syn keyword sqrParam chars-inch chart-size checksum cl
+syn keyword sqrParam clear-line clear-screen color color-palette
+syn keyword sqrParam cs color_ data-array
+syn keyword sqrParam data-array-column-count
+syn keyword sqrParam data-array-column-labels
+syn keyword sqrParam data-array-row-count data-labels date
+syn keyword sqrParam date-edit-mask date-seperator
+syn keyword sqrParam day-of-week-case day-of-week-full
+syn keyword sqrParam day-of-week-short decimal decimal-seperator
+syn keyword sqrParam default-numeric delay distinct dot-leader
+syn keyword sqrParam edit-option-ad edit-option-am
+syn keyword sqrParam edit-option-bc edit-option-na
+syn keyword sqrParam edit-option-pm encoding entry erase-page
+syn keyword sqrParam extent field fill fixed fixed_nolf float
+syn keyword sqrParam font font-style font-type footing
+syn keyword sqrParam footing-size foreground for-append
+syn keyword sqrParam for-reading for-reports for-tocs
+syn keyword sqrParam for-writing format formfeed from goto-top
+syn keyword sqrParam group having heading heading-size height
+syn keyword sqrParam horz-line image-size in indentation
+syn keyword sqrParam init-string input-date-edit-mask insert
+syn keyword sqrParam integer into item-color item-size key
+syn keyword sqrParam layout left-margin legend legend-placement
+syn keyword sqrParam legend-presentation legend-title level
+syn keyword sqrParam line-height line-size line-width lines-inch
+syn keyword sqrParam local locale loops max-columns max-lines
+syn keyword sqrParam maxlen money money-edit-mask money-sign
+syn keyword sqrParam money-sign-location months-case months-full
+syn keyword sqrParam months-short name need newline newpage
+syn keyword sqrParam no-advance nolf noline noprompt normal not
+syn keyword sqrParam nowait number number-edit-mask on-break
+syn keyword sqrParam on-error or order orientation page-depth
+syn keyword sqrParam paper-size pie-segment-explode
+syn keyword sqrParam pie-segment-percent-display
+syn keyword sqrParam pie-segment-quantity-display pitch
+syn keyword sqrParam point-markers point-size printer
+syn keyword sqrParam printer-type quiet record reset-string
+syn keyword sqrParam return_value reverse right-margin rows save
+syn keyword sqrParam select size skip skiplines sort source
+syn keyword sqrParam sqr-database sqr-platform startup-file
+syn keyword sqrParam status stop sub-title symbol-set system
+syn keyword sqrParam table text thousand-seperator
+syn keyword sqrParam time-seperator times title to toc
+syn keyword sqrParam top-margin type underline update using
+syn keyword sqrParam value vary vert-line wait warn when
+syn keyword sqrParam when-other where with x-axis-grid
+syn keyword sqrParam x-axis-label x-axis-major-increment
+syn keyword sqrParam x-axis-major-tick-marks x-axis-max-value
+syn keyword sqrParam x-axis-min-value x-axis-minor-increment
+syn keyword sqrParam x-axis-minor-tick-marks x-axis-rotate
+syn keyword sqrParam x-axis-scale x-axis-tick-mark-placement xor
+syn keyword sqrParam y-axis-grid y-axis-label
+syn keyword sqrParam y-axis-major-increment
+syn keyword sqrParam y-axis-major-tick-marks y-axis-max-value
+syn keyword sqrParam y-axis-min-value y-axis-minor-increment
+syn keyword sqrParam y-axis-minor-tick-marks y-axis-scale
+syn keyword sqrParam y-axis-tick-mark-placement y2-type
+syn keyword sqrParam y2-data-array y2-data-array-row-count
+syn keyword sqrParam y2-data-array-column-count
+syn keyword sqrParam y2-data-array-column-labels
+syn keyword sqrParam y2-axis-color-palette y2-axis-label
+syn keyword sqrParam y2-axis-major-increment
+syn keyword sqrParam y2-axis-major-tick-marks y2-axis-max-value
+syn keyword sqrParam y2-axis-min-value y2-axis-minor-increment
+syn keyword sqrParam y2-axis-minor-tick-marks y2-axis-scale
+
+syn keyword sqrFunction abs acos asin atan array ascii asciic ceil
+syn keyword sqrFunction cos cosh chr cond deg delete dateadd
+syn keyword sqrFunction datediff datenow datetostr e10 exp edit
+syn keyword sqrFunction exists floor getenv instr instrb isblank
+syn keyword sqrFunction isnull log log10 length lengthb lengthp
+syn keyword sqrFunction lengtht lower lpad ltrim mod nvl power rad
+syn keyword sqrFunction round range replace roman rpad rtrim rename
+syn keyword sqrFunction sign sin sinh sqrt substr substrb substrp
+syn keyword sqrFunction substrt strtodate tan tanh trunc to_char
+syn keyword sqrFunction to_multi_byte to_number to_single_byte
+syn keyword sqrFunction transform translate unicode upper wrapdepth
+
+" END GENERATED SECTION ==============================================
+
+" Variables
+syn match sqrVariable /\(\$\|#\|&\)\(\k\|\.\)*/
+
+
+" Debug compiler directives
+syn match sqrPreProc /\s*#debug\a\=\(\s\|$\)/
+syn match sqrSubstVar /{\k*}/
+
+
+" Strings
+" Note: if an undoubled ! is found, this is not a valid string
+" (SQR will treat the end of the line as a comment)
+syn match sqrString /'\(!!\|[^!']\)*'/ contains=sqrSubstVar
+syn match sqrStrOpen /'\(!!\|''\|[^!']\)*$/
+" If we find a ' followed by an unmatched ! before a matching ',
+" flag the error.
+syn match sqrError /'\(!!\|[^'!]\)*![^!]/me=e-1
+syn match sqrError /'\(!!\|[^'!]\)*!$/
+
+" Numbers:
+syn match sqrNumber /-\=\<\d*\.\=[0-9_]\>/
+
+
+
+" Comments:
+" Handle comments that start with "!=" specially; they are only valid
+" in the first column of the source line. Also, "!!" is only treated
+" as a start-comment if there is only whitespace ahead of it on the line.
+
+syn keyword sqrTodo TODO FIXME XXX DEBUG NOTE ###
+syn match sqrTodo /???/
+
+if version >= 600
+ " 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 !,
+ " 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
+ " just whitespace on the line ("!="
+ " preceeded by non-whitespace is treated
+ " as neither a comment nor an error, since
+ " it is often correct, i.e.
+ " if #count != 7
+ syn match sqrError /.\+\zs!!.*/
+ " a "!!" anywhere but at the beginning of
+ " the line is always an error
+else "For versions before 6.0, same idea as above but we are limited
+ "to simple patterns only. Also, the sqrString patterns above
+ "don't seem to take precedence in v5 as they do in v6, so
+ "we split the last rule to ignore comments found inside of
+ "string literals.
+ syn match sqrComment /!\([^!=].*\|$\)/ contains=sqrTodo
+ syn match sqrComment /^!=.*/ contains=sqrTodo
+ syn match sqrComment /^!!.*/ contains=sqrTodo
+ syn match sqrError /^\s\+!=.*/
+ syn match sqrError /^[^'!]\+!!/
+ " flag !! on lines that don't have ! or '
+ syn match sqrError /^\([^!']*'[^']*'[^!']*\)\+!!/
+ " flag !! found after matched ' ' chars
+ " (that aren't also commented)
+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 hightlighting yet.
+if version >= 508 || !exists("did_sqr_syn_inits")
+ if version < 508
+ let did_sqr_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sqrSection Statement
+ HiLink sqrParagraph Statement
+ HiLink sqrReserved Statement
+ HiLink sqrParameter Statement
+ HiLink sqrPreProc PreProc
+ HiLink sqrSubstVar PreProc
+ HiLink sqrCommand Statement
+ HiLink sqrParam Type
+ HiLink sqrFunction Special
+
+ HiLink sqrString String
+ HiLink sqrStrOpen Todo
+ HiLink sqrNumber Number
+ HiLink sqrVariable Identifier
+
+ HiLink sqrComment Comment
+ HiLink sqrTodo Todo
+ HiLink sqrError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sqr"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/squid.vim b/runtime/syntax/squid.vim
new file mode 100644
index 000000000..554bdca09
--- /dev/null
+++ b/runtime/syntax/squid.vim
@@ -0,0 +1,149 @@
+" Vim syntax file
+" Language: Squid config file
+" Maintainer: Klaus Muth <klaus@hampft.de>
+" Last Change: 2004 Feb 01
+" URL: http://www.hampft.de/vim/syntax/squid.vim
+" ThanksTo: Ilya Sher <iso8601@mail.ru>
+
+
+" 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
+
+" squid.conf syntax seems to be case insensitive
+syn case ignore
+
+syn keyword squidTodo contained TODO
+syn match squidComment "#.*$" contains=squidTodo,squidTag
+syn match squidTag contained "TAG: .*$"
+
+" Lots & lots of Keywords!
+syn keyword squidConf acl always_direct announce_host
+syn keyword squidConf announce_period announce_port announce_to
+syn keyword squidConf anonymize_headers append_domain
+syn keyword squidConf as_whois_server authenticate_children
+syn keyword squidConf authenticate_program authenticate_ttl
+syn keyword squidConf broken_posts buffered_logs cache_access_log
+syn keyword squidConf cache_announce cache_dir cache_dns_program
+syn keyword squidConf cache_effective_group cache_effective_user
+syn keyword squidConf cache_host cache_host_acl cache_host_domain
+syn keyword squidConf cache_log cache_mem cache_mem_high
+syn keyword squidConf cache_mem_low cache_mgr cachemgr_passwd
+syn keyword squidConf cache_peer cache_stoplist
+syn keyword squidConf cache_stoplist_pattern cache_store_log
+syn keyword squidConf cache_swap cache_swap_high cache_swap_log
+syn keyword squidConf cache_swap_low client_db client_lifetime
+syn keyword squidConf client_netmask connect_timeout coredump_dir
+syn keyword squidConf dead_peer_timeout debug_options delay_access
+syn keyword squidConf delay_class delay_initial_bucket_level
+syn keyword squidConf delay_parameters delay_pools dns_children
+syn keyword squidConf dns_defnames dns_nameservers dns_testnames
+syn keyword squidConf emulate_httpd_log err_html_text
+syn keyword squidConf fake_user_agent firewall_ip forwarded_for
+syn keyword squidConf forward_snmpd_port fqdncache_size
+syn keyword squidConf ftpget_options ftpget_program ftp_list_width
+syn keyword squidConf ftp_user half_closed_clients
+syn keyword squidConf hierarchy_stoplist htcp_port http_access
+syn keyword squidConf http_anonymizer httpd_accel httpd_accel_host
+syn keyword squidConf httpd_accel_port httpd_accel_uses_host_header
+syn keyword squidConf httpd_accel_with_proxy http_port
+syn keyword squidConf http_reply_access icp_access icp_hit_stale
+syn keyword squidConf icp_port icp_query_timeout ident_lookup
+syn keyword squidConf ident_lookup_access ident_timeout
+syn keyword squidConf incoming_http_average incoming_icp_average
+syn keyword squidConf inside_firewall ipcache_high ipcache_low
+syn keyword squidConf ipcache_size local_domain local_ip
+syn keyword squidConf logfile_rotate log_fqdn log_icp_queries
+syn keyword squidConf log_mime_hdrs maximum_object_size
+syn keyword squidConf maximum_single_addr_tries mcast_groups
+syn keyword squidConf mcast_icp_query_timeout mcast_miss_addr
+syn keyword squidConf mcast_miss_encode_key mcast_miss_port
+syn keyword squidConf memory_pools mime_table min_http_poll_cnt
+syn keyword squidConf min_icp_poll_cnt minimum_direct_hops
+syn keyword squidConf minimum_retry_timeout miss_access
+syn keyword squidConf negative_dns_ttl negative_ttl
+syn keyword squidConf neighbor_timeout neighbor_type_domain
+syn keyword squidConf netdb_high netdb_low netdb_ping_period
+syn keyword squidConf netdb_ping_rate no_cache passthrough_proxy
+syn keyword squidConf pconn_timeout pid_filename pinger_program
+syn keyword squidConf positive_dns_ttl prefer_direct proxy_auth
+syn keyword squidConf proxy_auth_realm query_icmp quick_abort
+syn keyword squidConf quick_abort quick_abort_max quick_abort_min
+syn keyword squidConf quick_abort_pct range_offset_limit
+syn keyword squidConf read_timeout redirect_children
+syn keyword squidConf redirect_program
+syn keyword squidConf redirect_rewrites_host_header reference_age
+syn keyword squidConf reference_age refresh_pattern reload_into_ims
+syn keyword squidConf request_size request_timeout
+syn keyword squidConf shutdown_lifetime single_parent_bypass
+syn keyword squidConf siteselect_timeout snmp_access
+syn keyword squidConf snmp_incoming_address snmp_port source_ping
+syn keyword squidConf ssl_proxy store_avg_object_size
+syn keyword squidConf store_objects_per_bucket strip_query_terms
+syn keyword squidConf swap_level1_dirs swap_level2_dirs
+syn keyword squidConf tcp_incoming_address tcp_outgoing_address
+syn keyword squidConf tcp_recv_bufsize test_reachability
+syn keyword squidConf udp_hit_obj udp_hit_obj_size
+syn keyword squidConf udp_incoming_address udp_outgoing_address
+syn keyword squidConf unique_hostname unlinkd_program
+syn keyword squidConf uri_whitespace useragent_log visible_hostname
+syn keyword squidConf wais_relay wais_relay_host wais_relay_port
+
+syn keyword squidOpt proxy-only weight ttl no-query default
+syn keyword squidOpt round-robin multicast-responder
+syn keyword squidOpt on off all deny allow
+
+" Security Actions for cachemgr_passwd
+syn keyword squidAction shutdown info parameter server_list
+syn keyword squidAction client_list
+syn match squidAction "stats/\(objects\|vm_objects\|utilization\|ipcache\|fqdncache\|dns\|redirector\|io\|reply_headers\|filedescriptors\|netdb\)"
+syn match squidAction "log\(/\(status\|enable\|disable\|clear\)\)\="
+syn match squidAction "squid\.conf"
+
+" Keywords for the acl-config
+syn keyword squidAcl url_regex urlpath_regex referer_regex port proto
+syn keyword squidAcl req_mime_type rep_mime_type
+syn keyword squidAcl method browser user src dst
+
+syn match squidNumber "\<\d\+\>"
+syn match squidIP "\<\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\>"
+syn match squidStr "\(^\s*acl\s\+\S\+\s\+\(\S*_regex\|re[pq]_mime_type\|browser\|_domain\|user\)\+\s\+\)\@<=.*" contains=squidRegexOpt
+syn match squidRegexOpt contained "\(^\s*acl\s\+\S\+\s\+\S\+\(_regex\|_mime_type\)\s\+\)\@<=[-+]i\s\+"
+
+" All config is in one line, so this has to be sufficient
+" Make it fast like hell :)
+syn sync minlines=3
+
+" 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_squid_syntax_inits")
+ if version < 508
+ let did_squid_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink squidTodo Todo
+ HiLink squidComment Comment
+ HiLink squidTag Special
+ HiLink squidConf Keyword
+ HiLink squidOpt Constant
+ HiLink squidAction String
+ HiLink squidNumber Number
+ HiLink squidIP Number
+ HiLink squidAcl Keyword
+ HiLink squidStr String
+ HiLink squidRegexOpt Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "squid"
+
+" vim: ts=8
diff --git a/runtime/syntax/sshconfig.vim b/runtime/syntax/sshconfig.vim
new file mode 100644
index 000000000..c2da72ad7
--- /dev/null
+++ b/runtime/syntax/sshconfig.vim
@@ -0,0 +1,99 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: OpenSSH server configuration file (ssh_config)
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003-05-06
+" URL: http://trific.ath.cx/Ftp/vim/syntax/sshconfig.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if version >= 600
+ setlocal iskeyword=_,-,a-z,A-Z,48-57
+else
+ set iskeyword=_,-,a-z,A-Z,48-57
+endif
+
+syn case ignore
+
+" Comments
+syn match sshconfigComment "#.*$" contains=sshconfigTodo
+syn keyword sshconfigTodo TODO FIXME NOT contained
+
+" Constants
+syn keyword sshconfigYesNo yes no ask
+syn keyword sshconfigCipher blowfish des 3des
+syn keyword sshconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
+syn keyword sshconfigCipher arcfour aes192-cbc aes256-cbc
+syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
+syn keyword sshconfigMAC hmac-md5-96
+syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss
+syn keyword sshconfigPreferredAuth hostbased publickey password
+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 LOCAL0 LOCAL1 LOCAL2
+syn keyword sshconfigSysLogFacility LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+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\+\>"
+
+" Keywords
+syn keyword sshconfigHostSect Host
+syn keyword sshconfigKeyword AFSTokenPassing BatchMode BindAddress
+syn keyword sshconfigKeyword ChallengeResponseAuthentication CheckHostIP
+syn keyword sshconfigKeyword Cipher Ciphers ClearAllForwardings Compression
+syn keyword sshconfigKeyword CompressionLevel ConnectionAttempts
+syn keyword sshconfigKeyword DynamicForward EscapeChar ForwardAgent ForwardX11
+syn keyword sshconfigKeyword GatewayPorts GlobalKnownHostsFile
+syn keyword sshconfigKeyword HostbasedAuthentication HostKeyAlgorithms
+syn keyword sshconfigKeyword HostKeyAlias HostName IdentityFile KeepAlive
+syn keyword sshconfigKeyword KerberosAuthentication KerberosTgtPassing
+syn keyword sshconfigKeyword LocalForward LogLevel MACs
+syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost
+syn keyword sshconfigKeyword NumberOfPasswordPrompts PasswordAuthentication
+syn keyword sshconfigKeyword Port PreferredAuthentications Protocol
+syn keyword sshconfigKeyword ProxyCommand PubkeyAuthentication RemoteForward
+syn keyword sshconfigKeyword RhostsAuthentication RhostsRSAAuthentication
+syn keyword sshconfigKeyword RSAAuthentication SmartcardDevice
+syn keyword sshconfigKeyword StrictHostKeyChecking UsePrivilegedPort User
+syn keyword sshconfigKeyword UserKnownHostsFile XAuthLocation
+
+" Define the default highlighting
+if version >= 508 || !exists("did_sshconfig_syntax_inits")
+ if version < 508
+ let did_sshconfig_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sshconfigComment Comment
+ HiLink sshconfigTodo Todo
+ HiLink sshconfigHostPort sshconfigConstant
+ HiLink sshconfigNumber sshconfigConstant
+ HiLink sshconfigConstant Constant
+ HiLink sshconfigYesNo sshconfigEnum
+ HiLink sshconfigCipher sshconfigEnum
+ HiLink sshconfigMAC sshconfigEnum
+ HiLink sshconfigHostKeyAlg sshconfigEnum
+ HiLink sshconfigLogLevel sshconfigEnum
+ HiLink sshconfigSysLogFacility sshconfigEnum
+ HiLink sshconfigPreferredAuth sshconfigEnum
+ HiLink sshconfigEnum Function
+ HiLink sshconfigSpecial Special
+ HiLink sshconfigKeyword Keyword
+ HiLink sshconfigHostSect Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sshconfig"
+
diff --git a/runtime/syntax/sshdconfig.vim b/runtime/syntax/sshdconfig.vim
new file mode 100644
index 000000000..c334304f9
--- /dev/null
+++ b/runtime/syntax/sshdconfig.vim
@@ -0,0 +1,98 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: OpenSSH server configuration file (sshd_config)
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003-05-06
+" URL: http://trific.ath.cx/Ftp/vim/syntax/sshdconfig.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+if version >= 600
+ setlocal iskeyword=_,-,a-z,A-Z,48-57
+else
+ set iskeyword=_,-,a-z,A-Z,48-57
+endif
+
+syn case ignore
+
+" Comments
+syn match sshdconfigComment "#.*$" contains=sshdconfigTodo
+syn keyword sshdconfigTodo TODO FIXME NOT contained
+
+" Constants
+syn keyword sshdconfigYesNo yes no
+syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
+syn keyword sshdconfigCipher aes192-cbc aes256-cbc
+syn keyword sshdconfigCipher arcfour
+syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
+syn keyword sshdconfigMAC hmac-md5-96
+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 LOCAL0 LOCAL1 LOCAL2
+syn keyword sshdconfigSysLogFacility LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+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\+\)\?\>"
+syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>"
+syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>"
+
+" Keywords
+syn keyword sshdconfigKeyword AFSTokenPassing AllowGroups AllowTcpForwarding
+syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile Banner
+syn keyword sshdconfigKeyword ChallengeResponseAuthentication Ciphers
+syn keyword sshdconfigKeyword ClientAliveInterval ClientAliveCountMax
+syn keyword sshdconfigKeyword Compression DenyGroups DenyUsers GatewayPorts
+syn keyword sshdconfigKeyword HostbasedAuthentication HostKey IgnoreRhosts
+syn keyword sshdconfigKeyword IgnoreUserKnownHosts KeepAlive
+syn keyword sshdconfigKeyword KerberosAuthentication KerberosOrLocalPasswd
+syn keyword sshdconfigKeyword KerberosTgtPassing KerberosTicketCleanup
+syn keyword sshdconfigKeyword KeyRegenerationInterval ListenAddress
+syn keyword sshdconfigKeyword LoginGraceTime LogLevel MACs MaxStartups
+syn keyword sshdconfigKeyword PAMAuthenticationViaKbdInt
+syn keyword sshdconfigKeyword PasswordAuthentication PermitEmptyPasswords
+syn keyword sshdconfigKeyword PermitRootLogin PermitUserEnvironment PidFile
+syn keyword sshdconfigKeyword Port PrintLastLog PrintMotd Protocol
+syn keyword sshdconfigKeyword PubkeyAuthentication RhostsAuthentication
+syn keyword sshdconfigKeyword RhostsRSAAuthentication RSAAuthentication
+syn keyword sshdconfigKeyword ServerKeyBits StrictModes Subsystem
+syn keyword sshdconfigKeyword SyslogFacility UseLogin UsePrivilegeSeparation
+syn keyword sshdconfigKeyword VerifyReverseMapping X11DisplayOffset
+syn keyword sshdconfigKeyword X11Forwarding X11UseLocalhost XAuthLocation
+
+" Define the default highlighting
+if version >= 508 || !exists("did_sshdconfig_syntax_inits")
+ if version < 508
+ let did_sshdconfig_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sshdconfigComment Comment
+ HiLink sshdconfigTodo Todo
+ HiLink sshdconfigHostPort sshdconfigConstant
+ HiLink sshdconfigTime sshdconfigConstant
+ HiLink sshdconfigNumber sshdconfigConstant
+ HiLink sshdconfigConstant Constant
+ HiLink sshdconfigYesNo sshdconfigEnum
+ HiLink sshdconfigCipher sshdconfigEnum
+ HiLink sshdconfigMAC sshdconfigEnum
+ HiLink sshdconfigRootLogin sshdconfigEnum
+ HiLink sshdconfigLogLevel sshdconfigEnum
+ HiLink sshdconfigSysLogFacility sshdconfigEnum
+ HiLink sshdconfigEnum Function
+ HiLink sshdconfigSpecial Special
+ HiLink sshdconfigKeyword Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sshdconfig"
diff --git a/runtime/syntax/st.vim b/runtime/syntax/st.vim
new file mode 100644
index 000000000..d629eb4ed
--- /dev/null
+++ b/runtime/syntax/st.vim
@@ -0,0 +1,102 @@
+" Vim syntax file
+" Language: Smalltalk
+" Maintainer: Arndt Hesse <hesse@self.de>
+" Last Change: 2001 May 09
+
+" 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
+
+" some Smalltalk keywords and standard methods
+syn keyword stKeyword super self class true false new not
+syn keyword stKeyword notNil isNil inspect out nil
+syn match stMethod "\<do\>:"
+syn match stMethod "\<whileTrue\>:"
+syn match stMethod "\<whileFalse\>:"
+syn match stMethod "\<ifTrue\>:"
+syn match stMethod "\<ifFalse\>:"
+syn match stMethod "\<put\>:"
+syn match stMethod "\<to\>:"
+syn match stMethod "\<at\>:"
+syn match stMethod "\<add\>:"
+syn match stMethod "\<new\>:"
+syn match stMethod "\<for\>:"
+syn match stMethod "\<methods\>:"
+syn match stMethod "\<methodsFor\>:"
+syn match stMethod "\<instanceVariableNames\>:"
+syn match stMethod "\<classVariableNames\>:"
+syn match stMethod "\<poolDictionaries\>:"
+syn match stMethod "\<subclass\>:"
+
+" the block of local variables of a method
+syn region stLocalVariables start="^[ \t]*|" end="|"
+
+" the Smalltalk comment
+syn region stComment start="\"" end="\""
+
+" the Smalltalk strings and single characters
+syn region stString start='\'' skip="''" end='\''
+syn match stCharacter "$."
+
+syn case ignore
+
+" the symols prefixed by a '#'
+syn match stSymbol "\(#\<[a-z_][a-z0-9_]*\>\)"
+syn match stSymbol "\(#'[^']*'\)"
+
+" the variables in a statement block for loops
+syn match stBlockVariable "\(:[ \t]*\<[a-z_][a-z0-9_]*\>[ \t]*\)\+|" contained
+
+" some representations of numbers
+syn match stNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+syn match stFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+syn match stFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+
+syn case match
+
+" a try to higlight paren mismatches
+syn region stParen transparent start='(' end=')' contains=ALLBUT,stParenError
+syn match stParenError ")"
+syn region stBlock transparent start='\[' end='\]' contains=ALLBUT,stBlockError
+syn match stBlockError "\]"
+syn region stSet transparent start='{' end='}' contains=ALLBUT,stSetError
+syn match stSetError "}"
+
+hi link stParenError stError
+hi link stSetError stError
+hi link stBlockError stError
+
+" synchronization for syntax analysis
+syn sync minlines=50
+
+" 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_st_syntax_inits")
+ if version < 508
+ let did_st_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink stKeyword Statement
+ HiLink stMethod Statement
+ HiLink stComment Comment
+ HiLink stCharacter Constant
+ HiLink stString Constant
+ HiLink stSymbol Special
+ HiLink stNumber Type
+ HiLink stFloat Type
+ HiLink stError Error
+ HiLink stLocalVariables Identifier
+ HiLink stBlockVariable Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "st"
diff --git a/runtime/syntax/stp.vim b/runtime/syntax/stp.vim
new file mode 100644
index 000000000..f4f0f3b61
--- /dev/null
+++ b/runtime/syntax/stp.vim
@@ -0,0 +1,167 @@
+" Vim syntax file
+" Language: Stored Procedures (STP)
+" Maintainer: Jeff Lanzarotta (jefflanzarotta@yahoo.com)
+" URL: http://lanzarotta.tripod.com/vim/syntax/stp.vim.zip
+" Last Change: March 05, 2002
+
+" 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
+
+" Specials.
+syn keyword stpSpecial null
+
+" Keywords.
+syn keyword stpKeyword begin break call case create deallocate dynamic
+syn keyword stpKeyword execute from function go grant
+syn keyword stpKeyword index insert into leave max min on output procedure
+syn keyword stpKeyword public result return returns scroll table to
+syn keyword stpKeyword when
+syn match stpKeyword "\<end\>"
+
+" Conditional.
+syn keyword stpConditional if else elseif then
+syn match stpConditional "\<end\s\+if\>"
+
+" Repeats.
+syn keyword stpRepeat for while loop
+syn match stpRepeat "\<end\s\+loop\>"
+
+" Operators.
+syn keyword stpOperator asc not and or desc group having in is any some all
+syn keyword stpOperator between exists like escape with union intersect minus
+syn keyword stpOperator out prior distinct sysdate
+
+" Statements.
+syn keyword stpStatement alter analyze as audit avg by close clustered comment
+syn keyword stpStatement commit continue count create cursor declare delete
+syn keyword stpStatement drop exec execute explain fetch from index insert
+syn keyword stpStatement into lock max min next noaudit nonclustered open
+syn keyword stpStatement order output print raiserror recompile rename revoke
+syn keyword stpStatement rollback savepoint select set sum transaction
+syn keyword stpStatement truncate unique update values where
+
+" Functions.
+syn keyword stpFunction abs acos ascii asin atan atn2 avg ceiling charindex
+syn keyword stpFunction charlength convert col_name col_length cos cot count
+syn keyword stpFunction curunreservedpgs datapgs datalength dateadd datediff
+syn keyword stpFunction datename datepart db_id db_name degree difference
+syn keyword stpFunction exp floor getdate hextoint host_id host_name index_col
+syn keyword stpFunction inttohex isnull lct_admin log log10 lower ltrim max
+syn keyword stpFunction min now object_id object_name patindex pi pos power
+syn keyword stpFunction proc_role radians rand replace replicate reserved_pgs
+syn keyword stpFunction reverse right rtrim rowcnt round show_role sign sin
+syn keyword stpFunction soundex space sqrt str stuff substr substring sum
+syn keyword stpFunction suser_id suser_name tan tsequal upper used_pgs user
+syn keyword stpFunction user_id user_name valid_name valid_user message
+
+" Types.
+syn keyword stpType binary bit char datetime decimal double float image
+syn keyword stpType int integer long money nchar numeric precision real
+syn keyword stpType smalldatetime smallint smallmoney text time tinyint
+syn keyword stpType timestamp varbinary varchar
+
+" Globals.
+syn match stpGlobals '@@char_convert'
+syn match stpGlobals '@@cient_csname'
+syn match stpGlobals '@@client_csid'
+syn match stpGlobals '@@connections'
+syn match stpGlobals '@@cpu_busy'
+syn match stpGlobals '@@error'
+syn match stpGlobals '@@identity'
+syn match stpGlobals '@@idle'
+syn match stpGlobals '@@io_busy'
+syn match stpGlobals '@@isolation'
+syn match stpGlobals '@@langid'
+syn match stpGlobals '@@language'
+syn match stpGlobals '@@max_connections'
+syn match stpGlobals '@@maxcharlen'
+syn match stpGlobals '@@ncharsize'
+syn match stpGlobals '@@nestlevel'
+syn match stpGlobals '@@pack_received'
+syn match stpGlobals '@@pack_sent'
+syn match stpGlobals '@@packet_errors'
+syn match stpGlobals '@@procid'
+syn match stpGlobals '@@rowcount'
+syn match stpGlobals '@@servername'
+syn match stpGlobals '@@spid'
+syn match stpGlobals '@@sqlstatus'
+syn match stpGlobals '@@testts'
+syn match stpGlobals '@@textcolid'
+syn match stpGlobals '@@textdbid'
+syn match stpGlobals '@@textobjid'
+syn match stpGlobals '@@textptr'
+syn match stpGlobals '@@textsize'
+syn match stpGlobals '@@thresh_hysteresis'
+syn match stpGlobals '@@timeticks'
+syn match stpGlobals '@@total_error'
+syn match stpGlobals '@@total_read'
+syn match stpGlobals '@@total_write'
+syn match stpGlobals '@@tranchained'
+syn match stpGlobals '@@trancount'
+syn match stpGlobals '@@transtate'
+syn match stpGlobals '@@version'
+
+" Todos.
+syn keyword stpTodo TODO FIXME XXX DEBUG NOTE
+
+" Strings and characters.
+syn match stpStringError "'.*$"
+syn match stpString "'\([^']\|''\)*'"
+
+" Numbers.
+syn match stpNumber "-\=\<\d*\.\=[0-9_]\>"
+
+" Comments.
+syn region stpComment start="/\*" end="\*/" contains=stpTodo
+syn match stpComment "--.*" contains=stpTodo
+syn sync ccomment stpComment
+
+" Parens.
+syn region stpParen transparent start='(' end=')' contains=ALLBUT,stpParenError
+syn match stpParenError ")"
+
+" Syntax Synchronizing.
+syn sync minlines=10 maxlines=100
+
+" Define the default highlighting.
+" For version 5.x and earlier, only when not done already.
+" For version 5.8 and later, only when and item doesn't have highlighting yet.
+if version >= 508 || !exists("did_stp_syn_inits")
+ if version < 508
+ let did_stp_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink stpConditional Conditional
+ HiLink stpComment Comment
+ HiLink stpKeyword Keyword
+ HiLink stpNumber Number
+ HiLink stpOperator Operator
+ HiLink stpSpecial Special
+ HiLink stpStatement Statement
+ HiLink stpString String
+ HiLink stpStringError Error
+ HiLink stpType Type
+ HiLink stpTodo Todo
+ HiLink stpFunction Function
+ HiLink stpGlobals Macro
+ HiLink stpParen Normal
+ HiLink stpParenError Error
+ HiLink stpSQLKeyword Function
+ HiLink stpRepeat Repeat
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "stp"
+
+" vim ts=8 sw=2
diff --git a/runtime/syntax/strace.vim b/runtime/syntax/strace.vim
new file mode 100644
index 000000000..80cd262ef
--- /dev/null
+++ b/runtime/syntax/strace.vim
@@ -0,0 +1,66 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: strace output
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2002-10-10
+" URL: http://trific.ath.cx/Ftp/vim/syntax/strace.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+syn case match
+
+" Parse the line
+syn match straceSpecialChar "\\\d\d\d\|\\." contained
+syn region straceString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=straceSpecialChar oneline
+syn match straceNumber "\W[+-]\=\(\d\+\)\=\.\=\d\+\([eE][+-]\=\d\+\)\="lc=1
+syn match straceNumber "\W0x\x\+"lc=1
+syn match straceNumberRHS "\W\(0x\x\+\|-\=\d\+\)"lc=1 contained
+syn match straceOtherRHS "?" contained
+syn match straceConstant "[A-Z_]\{2,}"
+syn region straceVerbosed start="(" end=")" matchgroup=Normal contained oneline
+syn region straceReturned start="\s=\s" end="$" contains=StraceEquals,straceNumberRHS,straceOtherRHS,straceConstant,straceVerbosed oneline transparent
+syn match straceEquals "\s=\s"ms=s+1,me=e-1
+syn match straceParenthesis "[][(){}]"
+syn match straceSysCall "^\w\+"
+syn match straceOtherPID "^\[[^]]*\]" contains=stracePID,straceNumber nextgroup=straceSysCallEmbed skipwhite
+syn match straceSysCallEmbed "\w\+" contained
+syn keyword stracePID pid contained
+syn match straceOperator "[-+=*/!%&|:,]"
+syn region straceComment start="/\*" end="\*/" oneline
+
+" Define the default highlighting
+if version >= 508 || !exists("did_strace_syntax_inits")
+ if version < 508
+ let did_strace_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink straceComment Comment
+ HiLink straceVerbosed Comment
+ HiLink stracePID PreProc
+ HiLink straceNumber Number
+ HiLink straceNumberRHS Type
+ HiLink straceOtherRHS Type
+ HiLink straceString String
+ HiLink straceConstant Function
+ HiLink straceEquals Type
+ HiLink straceSysCallEmbed straceSysCall
+ HiLink straceSysCall Statement
+ HiLink straceParenthesis Statement
+ HiLink straceOperator Normal
+ HiLink straceSpecialChar Special
+ HiLink straceOtherPID PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "strace"
diff --git a/runtime/syntax/svn.vim b/runtime/syntax/svn.vim
new file mode 100644
index 000000000..5ec3236c5
--- /dev/null
+++ b/runtime/syntax/svn.vim
@@ -0,0 +1,46 @@
+" Vim syntax file
+" Language: Subversion (svn) commit file
+" Maintainer: Dmitry Vasiliev <dima@hlabs.spb.ru>
+" URL: http://www.hlabs.spb.ru/vim/svn.vim
+" Last Change: $Date$
+" $Revision$
+
+" 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 region svnRegion start="--This line, and those below, will be ignored--" 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
+
+" Synchronization.
+syn sync clear
+syn sync match svnSync grouphere svnRegion "--This line, and those below, will be ignored--"me=s-1
+
+" 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_svn_syn_inits")
+ if version <= 508
+ let did_svn_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink svnRegion Comment
+ HiLink svnRemoved Constant
+ HiLink svnAdded Identifier
+ HiLink svnModified Special
+ HiLink svnProperty Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "svn"
diff --git a/runtime/syntax/syncolor.vim b/runtime/syntax/syncolor.vim
new file mode 100644
index 000000000..8d0064db1
--- /dev/null
+++ b/runtime/syntax/syncolor.vim
@@ -0,0 +1,85 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Sep 12
+
+" This file sets up the default methods for highlighting.
+" It is loaded from "synload.vim" and from Vim for ":syntax reset".
+" Also used from init_highlight().
+
+if !exists("syntax_cmd") || syntax_cmd == "on"
+ " ":syntax on" works like in Vim 5.7: set colors but keep links
+ command -nargs=* SynColor hi <args>
+ command -nargs=* SynLink hi link <args>
+else
+ if syntax_cmd == "enable"
+ " ":syntax enable" keeps any existing colors
+ command -nargs=* SynColor hi def <args>
+ command -nargs=* SynLink hi def link <args>
+ elseif syntax_cmd == "reset"
+ " ":syntax reset" resets all colors to the default
+ command -nargs=* SynColor hi <args>
+ command -nargs=* SynLink hi! link <args>
+ else
+ " User defined syncolor file has already set the colors.
+ finish
+ endif
+endif
+
+" Many terminals can only use six different colors (plus black and white).
+" Therefore the number of colors used is kept low. It doesn't look nice with
+" too many colors anyway.
+" Careful with "cterm=bold", it changes the color to bright for some terminals.
+" There are two sets of defaults: for a dark and a light background.
+if &background == "dark"
+ SynColor Comment term=bold cterm=NONE ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE
+ SynColor Constant term=underline cterm=NONE ctermfg=Magenta ctermbg=NONE gui=NONE guifg=#ffa0a0 guibg=NONE
+ SynColor Special term=bold cterm=NONE ctermfg=LightRed ctermbg=NONE gui=NONE guifg=Orange guibg=NONE
+ SynColor Identifier term=underline cterm=bold ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#40ffff guibg=NONE
+ SynColor Statement term=bold cterm=NONE ctermfg=Yellow ctermbg=NONE gui=bold guifg=#ffff60 guibg=NONE
+ SynColor PreProc term=underline cterm=NONE ctermfg=LightBlue ctermbg=NONE gui=NONE guifg=#ff80ff guibg=NONE
+ SynColor Type term=underline cterm=NONE ctermfg=LightGreen ctermbg=NONE gui=bold guifg=#60ff60 guibg=NONE
+ SynColor Underlined term=underline cterm=underline ctermfg=LightBlue gui=underline guifg=#80a0ff
+ SynColor Ignore term=NONE cterm=NONE ctermfg=black ctermbg=NONE gui=NONE guifg=bg guibg=NONE
+else
+ SynColor Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=NONE guifg=Blue guibg=NONE
+ SynColor Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=Magenta guibg=NONE
+ SynColor Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=SlateBlue guibg=NONE
+ SynColor Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=DarkCyan guibg=NONE
+ SynColor Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=Brown guibg=NONE
+ SynColor PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=Purple guibg=NONE
+ SynColor Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=SeaGreen guibg=NONE
+ SynColor Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=SlateBlue
+ SynColor Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE
+endif
+SynColor Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red
+SynColor Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg=Yellow
+
+" Common groups that link to default highlighting.
+" You can specify other highlighting easily.
+SynLink String Constant
+SynLink Character Constant
+SynLink Number Constant
+SynLink Boolean Constant
+SynLink Float Number
+SynLink Function Identifier
+SynLink Conditional Statement
+SynLink Repeat Statement
+SynLink Label Statement
+SynLink Operator Statement
+SynLink Keyword Statement
+SynLink Exception Statement
+SynLink Include PreProc
+SynLink Define PreProc
+SynLink Macro PreProc
+SynLink PreCondit PreProc
+SynLink StorageClass Type
+SynLink Structure Type
+SynLink Typedef Type
+SynLink Tag Special
+SynLink SpecialChar Special
+SynLink Delimiter Special
+SynLink SpecialComment Special
+SynLink Debug Special
+
+delcommand SynColor
+delcommand SynLink
diff --git a/runtime/syntax/synload.vim b/runtime/syntax/synload.vim
new file mode 100644
index 000000000..f816bc2d2
--- /dev/null
+++ b/runtime/syntax/synload.vim
@@ -0,0 +1,69 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 21
+
+" This file sets up for syntax highlighting.
+" It is loaded from "syntax.vim" and "manual.vim".
+" 1. Set the default highlight groups.
+" 2. Install Syntax autocommands for all the available syntax files.
+
+if !has("syntax")
+ finish
+endif
+
+" let others know that syntax has been switched on
+let syntax_on = 1
+
+" Set the default highlighting colors. Use a color scheme if specified.
+if exists("colors_name")
+ exe "colors " . colors_name
+else
+ runtime! syntax/syncolor.vim
+endif
+
+" Line continuation is used here, remove 'C' from 'cpoptions'
+let s:cpo_save = &cpo
+set cpo&vim
+
+" First remove all old syntax autocommands.
+au! Syntax
+
+au Syntax * call s:SynSet()
+
+fun! s:SynSet()
+ " clear syntax for :set syntax=OFF and any syntax name that doesn't exist
+ syn clear
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+
+ let s = expand("<amatch>")
+ if s == "ON"
+ " :set syntax=ON
+ if &filetype == ""
+ echohl ErrorMsg
+ echo "filetype unknown"
+ echohl None
+ endif
+ let s = &filetype
+ endif
+
+ if s != ""
+ " Load the syntax file(s)
+" if has("mac")
+" exe "runtime! syntax:" . s . ".vim"
+" else
+ exe "runtime! syntax/" . s . ".vim"
+" endif
+ endif
+endfun
+
+
+" Source the user-specified syntax highlighting file
+if exists("mysyntaxfile") && filereadable(expand(mysyntaxfile))
+ execute "source " . mysyntaxfile
+endif
+
+" Restore 'cpoptions'
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/syntax/syntax.vim b/runtime/syntax/syntax.vim
new file mode 100644
index 000000000..f274d93f4
--- /dev/null
+++ b/runtime/syntax/syntax.vim
@@ -0,0 +1,43 @@
+" Vim syntax support file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Sep 04
+
+" This file is used for ":syntax on".
+" It installs the autocommands and starts highlighting for all buffers.
+
+if !has("syntax")
+ finish
+endif
+
+" If Syntax highlighting appears to be on already, turn it off first, so that
+" any leftovers are cleared.
+if exists("syntax_on") || exists("syntax_manual")
+ so <sfile>:p:h/nosyntax.vim
+endif
+
+" Load the Syntax autocommands and set the default methods for highlighting.
+runtime syntax/synload.vim
+
+" Load the FileType autocommands if not done yet.
+if exists("did_load_filetypes")
+ let s:did_ft = 1
+else
+ filetype on
+ let s:did_ft = 0
+endif
+
+" Set up the connection between FileType and Syntax autocommands.
+" This makes the syntax automatically set when the file type is detected.
+augroup syntaxset
+ au! FileType * exe "set syntax=" . expand("<amatch>")
+augroup END
+
+
+" Execute the syntax autocommands for the each buffer.
+" If the filetype wasn't detected yet, do that now.
+" Always do the syntaxset autocommands, for buffers where the 'filetype'
+" already was set manually (e.g., help buffers).
+doautoall syntaxset FileType
+if !s:did_ft
+ doautoall filetypedetect BufRead
+endif
diff --git a/runtime/syntax/tads.vim b/runtime/syntax/tads.vim
new file mode 100644
index 000000000..70ffe6f21
--- /dev/null
+++ b/runtime/syntax/tads.vim
@@ -0,0 +1,184 @@
+" Vim syntax file
+" Language: TADS
+" Maintainer: Amir Karger <karger@post.harvard.edu>
+" $Date$
+" $Revision$
+" Stolen from: Bram Moolenaar's C language file
+" Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim
+" History info at the bottom of the file
+
+" TODO lots more keywords
+" global, self, etc. are special *objects*, not functions. They should
+" probably be a different color than the special functions
+" Actually, should cvtstr etc. be functions?! (change tadsFunction)
+" Make global etc. into Identifiers, since we don't have regular variables?
+
+" 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
+
+" A bunch of useful keywords
+syn keyword tadsStatement goto break return continue pass
+syn keyword tadsLabel case default
+syn keyword tadsConditional if else switch
+syn keyword tadsRepeat while for do
+syn keyword tadsStorageClass local compoundWord formatstring specialWords
+syn keyword tadsBoolean nil true
+
+" TADS keywords
+syn keyword tadsKeyword replace modify
+syn keyword tadsKeyword global self inherited
+" builtin functions
+syn keyword tadsKeyword cvtstr cvtnum caps lower upper substr
+syn keyword tadsKeyword say length
+syn keyword tadsKeyword setit setscore
+syn keyword tadsKeyword datatype proptype
+syn keyword tadsKeyword car cdr
+syn keyword tadsKeyword defined isclass
+syn keyword tadsKeyword find firstobj nextobj
+syn keyword tadsKeyword getarg argcount
+syn keyword tadsKeyword input yorn askfile
+syn keyword tadsKeyword rand randomize
+syn keyword tadsKeyword restart restore quit save undo
+syn keyword tadsException abort exit exitobj
+
+syn keyword tadsTodo contained TODO FIXME XXX
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match tadsSpecial contained "\\."
+syn region tadsDoubleString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded
+syn region tadsSingleString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial
+" Embedded expressions in strings
+syn region tadsEmbedded contained start="<<" end=">>" contains=tadsKeyword
+
+" TADS doesn't have \xxx, right?
+"syn match cSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
+"syn match cSpecialCharacter "'\\[0-7][0-7]'"
+"syn match cSpecialCharacter "'\\[0-7][0-7][0-7]'"
+
+"catch errors caused by wrong parenthesis
+"syn region cParen transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel
+"syn match cParenError ")"
+"syn match cInParen contained "[{}]"
+syn region tadsBrace transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo
+syn match tadsBraceError "}"
+
+"integer number (TADS has no floating point numbers)
+syn case ignore
+syn match tadsNumber "\<[0-9]\+\>"
+"hex number
+syn match tadsNumber "\<0x[0-9a-f]\+\>"
+syn match tadsIdentifier "\<[a-z][a-z0-9_$]*\>"
+syn case match
+" flag an octal number with wrong digits
+syn match tadsOctalError "\<0[0-7]*[89]"
+
+" Removed complicated c_comment_strings
+syn region tadsComment start="/\*" end="\*/" contains=tadsTodo
+syn match tadsComment "//.*" contains=tadsTodo
+syntax match tadsCommentError "\*/"
+
+syn region tadsPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError
+syn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match tadsIncluded contained "<[^>]*>"
+syn match tadsInclude "^\s*#\s*include\>\s*["<]" contains=tadsIncluded
+syn region tadsDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier
+
+syn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier
+
+" Highlight User Labels
+" TODO labels for gotos?
+"syn region cMulti transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+"syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel
+"syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel
+"syn match cUserCont "^\s*\I\i*\s*:[^:]" contains=cUserLabel
+"syn match cUserCont ";\s*\I\i*\s*:[^:]" contains=cUserLabel
+
+"syn match cUserLabel "\I\i*" contained
+
+" identifier: class-name [, class-name [...]] [property-list] ;
+" Don't highlight comment in class def
+syn match tadsClassDef "\<class\>[^/]*" contains=tadsObjectDef,tadsClass
+syn match tadsClass contained "\<class\>"
+syn match tadsObjectDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*[a-zA-Z0-9_$]\+\(\s*,\s*[a-zA-Z][a-zA-Z0-9_$]*\)*\(\s*;\)\="
+syn keyword tadsFunction contained function
+syn match tadsFunctionDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction
+"syn region tadsObject transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef
+
+" How far back do we go to find matching groups
+if !exists("tads_minlines")
+ let tads_minlines = 15
+endif
+exec "syn sync ccomment tadsComment minlines=" . tads_minlines
+if !exists("tads_sync_dist")
+ let tads_sync_dist = 100
+endif
+execute "syn sync maxlines=" . tads_sync_dist
+
+" 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_tads_syn_inits")
+ if version < 508
+ let did_tads_syn_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 tadsFunctionDef Function
+ HiLink tadsFunction Structure
+ HiLink tadsClass Structure
+ HiLink tadsClassDef Identifier
+ HiLink tadsObjectDef Identifier
+" no highlight for tadsEmbedded, so it prints as normal text w/in the string
+
+ HiLink tadsOperator Operator
+ HiLink tadsStructure Structure
+ HiLink tadsTodo Todo
+ HiLink tadsLabel Label
+ HiLink tadsConditional Conditional
+ HiLink tadsRepeat Repeat
+ HiLink tadsException Exception
+ HiLink tadsStatement Statement
+ HiLink tadsStorageClass StorageClass
+ HiLink tadsKeyWord Keyword
+ HiLink tadsSpecial SpecialChar
+ HiLink tadsNumber Number
+ HiLink tadsBoolean Boolean
+ HiLink tadsDoubleString tadsString
+ HiLink tadsSingleString tadsString
+
+ HiLink tadsOctalError tadsError
+ HiLink tadsCommentError tadsError
+ HiLink tadsBraceError tadsError
+ HiLink tadsInBrace tadsError
+ HiLink tadsError Error
+
+ HiLink tadsInclude Include
+ HiLink tadsPreProc PreProc
+ HiLink tadsDefine Macro
+ HiLink tadsIncluded tadsString
+ HiLink tadsPreCondit PreCondit
+
+ HiLink tadsString String
+ HiLink tadsComment Comment
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "tads"
+
+" Changes:
+" 11/18/99 Added a bunch of TADS functions, tadsException
+" 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines
+"
+" vim: ts=8
diff --git a/runtime/syntax/tags.vim b/runtime/syntax/tags.vim
new file mode 100644
index 000000000..8d87c2bee
--- /dev/null
+++ b/runtime/syntax/tags.vim
@@ -0,0 +1,47 @@
+" Language: tags
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchip@PcampbellAfamily.Mbiz>
+" Last Change: Nov 18, 2002
+" Version: 2
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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 match tagName "^[^\t]\+" skipwhite nextgroup=tagPath
+syn match tagPath "[^\t]\+" contained skipwhite nextgroup=tagAddr contains=tagBaseFile
+syn match tagBaseFile "[a-zA-Z_]\+[\.a-zA-Z_0-9]*\t"me=e-1 contained
+syn match tagAddr "\d*" contained skipwhite nextgroup=tagComment
+syn region tagAddr matchgroup=tagDelim start="/" skip="\(\\\\\)*\\/" matchgroup=tagDelim end="$\|/" oneline contained skipwhite nextgroup=tagComment
+syn match tagComment ";.*$" contained contains=tagField
+syn match tagComment "^!_TAG_.*$"
+syn match tagField contained "[a-z]*:"
+
+" 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_drchip_tags_inits")
+ if version < 508
+ let did_drchip_tags_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tagBaseFile PreProc
+ HiLink tagComment Comment
+ HiLink tagDelim Delimiter
+ HiLink tagField Number
+ HiLink tagName Identifier
+ HiLink tagPath PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tags"
+
+" vim: ts=12
diff --git a/runtime/syntax/tak.vim b/runtime/syntax/tak.vim
new file mode 100644
index 000000000..20186db14
--- /dev/null
+++ b/runtime/syntax/tak.vim
@@ -0,0 +1,136 @@
+" Vim syntax file
+" Language: TAK2, TAK3, TAK2000 thermal modeling input file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.tak
+" URL: http://www.naglenet.org/vim/syntax/tak.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for tak input file.
+"
+
+" Force free-form fortran format
+let fortran_free_source=1
+
+" Load FORTRAN syntax file
+if version < 600
+ source <sfile>:p:h/fortran.vim
+else
+ runtime! syntax/fortran.vim
+endif
+unlet b:current_syntax
+
+
+
+" Define keywords for TAK and TAKOUT
+syn keyword takOptions AUTODAMP CPRINT CSGDUMP GPRINT HPRINT LODTMP
+syn keyword takOptions LOGIC LPRINT NCVPRINT PLOTQ QPRINT QDUMP
+syn keyword takOptions SUMMARY SOLRTN UID DICTIONARIES
+
+syn keyword takRoutine SSITER FWDWRD FWDBCK BCKWRD
+
+syn keyword takControl ABSZRO BACKUP DAMP DTIMEI DTIMEL DTIMEH IFC
+syn keyword takControl MAXTEMP NLOOPS NLOOPT NODELIST OUTPUT PLOT
+syn keyword takControl SCALE SIGMA SSCRIT TIMEND TIMEN TIMEO TRCRIT
+syn keyword takControl PLOT
+
+syn keyword takSolids PLATE CYL
+syn keyword takSolidsArg ID MATNAM NTYPE TEMP XL YL ZL ISTRN ISTRG NNX
+syn keyword takSolidsArg NNY NNZ INCX INCY INCZ IAK IAC DIFF ARITH BOUN
+syn keyword takSolidsArg RMIN RMAX AXMAX NNR NNTHETA INCR INCTHETA END
+
+syn case ignore
+
+syn keyword takMacro fac pstart pstop
+syn keyword takMacro takcommon fstart fstop
+
+syn keyword takIdentifier flq flx gen ncv per sim siv stf stv tvd tvs
+syn keyword takIdentifier tvt pro thm
+
+
+
+" Define matches for TAK
+syn match takFortran "^F[0-9 ]"me=e-1
+syn match takMotran "^M[0-9 ]"me=e-1
+
+syn match takComment "^C.*$"
+syn match takComment "^R.*$"
+syn match takComment "\$.*$"
+
+syn match takHeader "^header[^,]*"
+
+syn match takIncludeFile "include \+[^ ]\+"hs=s+8 contains=fortranInclude
+
+syn match takInteger "-\=\<[0-9]*\>"
+syn match takFloat "-\=\<[0-9]*\.[0-9]*"
+syn match takScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+syn match takEndData "END OF DATA"
+
+if exists("thermal_todo")
+ execute 'syn match takTodo ' . '"^'.thermal_todo.'.*$"'
+else
+ syn match takTodo "^?.*$"
+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_tak_syntax_inits")
+ if version < 508
+ let did_tak_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink takMacro Macro
+ HiLink takOptions Special
+ HiLink takRoutine Type
+ HiLink takControl Special
+ HiLink takSolids Special
+ HiLink takSolidsArg Statement
+ HiLink takIdentifier Identifier
+
+ HiLink takFortran PreProc
+ HiLink takMotran PreProc
+
+ HiLink takComment Comment
+ HiLink takHeader Typedef
+ HiLink takIncludeFile Type
+ HiLink takInteger Number
+ HiLink takFloat Float
+ HiLink takScientific Float
+
+ HiLink takEndData Macro
+
+ HiLink takTodo Todo
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "tak"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/takcmp.vim b/runtime/syntax/takcmp.vim
new file mode 100644
index 000000000..a94609b32
--- /dev/null
+++ b/runtime/syntax/takcmp.vim
@@ -0,0 +1,82 @@
+" Vim syntax file
+" Language: TAK2, TAK3, TAK2000 thermal modeling compare file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.cmp
+" URL: http://www.naglenet.org/vim/syntax/takcmp.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for compare files.
+"
+" Define keywords for TAK compare
+ syn keyword takcmpUnit celsius fahrenheit
+
+
+
+" Define matches for TAK compare
+ syn match takcmpTitle "Steady State Temperature Comparison"
+
+ syn match takcmpLabel "Run Date:"
+ syn match takcmpLabel "Run Time:"
+ syn match takcmpLabel "Temp. File \d Units:"
+ syn match takcmpLabel "Filename:"
+ syn match takcmpLabel "Output Units:"
+
+ syn match takcmpHeader "^ *Node\( *File \d\)* *Node Description"
+
+ syn match takcmpDate "\d\d\/\d\d\/\d\d"
+ syn match takcmpTime "\d\d:\d\d:\d\d"
+ syn match takcmpInteger "^ *-\=\<[0-9]*\>"
+ syn match takcmpFloat "-\=\<[0-9]*\.[0-9]*"
+
+
+
+" 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_takcmp_syntax_inits")
+ if version < 508
+ let did_takcmp_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink takcmpTitle Type
+ HiLink takcmpUnit PreProc
+
+ HiLink takcmpLabel Statement
+
+ HiLink takcmpHeader takHeader
+
+ HiLink takcmpDate Identifier
+ HiLink takcmpTime Identifier
+ HiLink takcmpInteger Number
+ HiLink takcmpFloat Special
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "takcmp"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/takout.vim b/runtime/syntax/takout.vim
new file mode 100644
index 000000000..774353942
--- /dev/null
+++ b/runtime/syntax/takout.vim
@@ -0,0 +1,102 @@
+" Vim syntax file
+" Language: TAK2, TAK3, TAK2000 thermal modeling output file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.out
+" URL: http://www.naglenet.org/vim/syntax/takout.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case match
+
+
+
+" Load TAK syntax file
+if version < 600
+ source <sfile>:p:h/tak.vim
+else
+ runtime! syntax/tak.vim
+endif
+unlet b:current_syntax
+
+
+
+"
+"
+" Begin syntax definitions for tak output files.
+"
+
+" Define keywords for TAK output
+syn case match
+
+syn keyword takoutPos ON SI
+syn keyword takoutNeg OFF ENG
+
+
+
+" Define matches for TAK output
+syn match takoutTitle "TAK III"
+syn match takoutTitle "Release \d.\d\d"
+syn match takoutTitle " K & K Associates *Thermal Analysis Kit III *Serial Number \d\d-\d\d\d"
+
+syn match takoutFile ": \w*\.TAK"hs=s+2
+
+syn match takoutInteger "T\=[0-9]*\>"ms=s+1
+
+syn match takoutSectionDelim "[-<>]\{4,}" contains=takoutSectionTitle
+syn match takoutSectionDelim ":\=\.\{4,}:\=" contains=takoutSectionTitle
+syn match takoutSectionTitle "[-<:] \w[0-9A-Za-z_() ]\+ [->:]"hs=s+1,me=e-1
+
+syn match takoutHeaderDelim "=\{5,}"
+syn match takoutHeaderDelim "|\{5,}"
+syn match takoutHeaderDelim "+\{5,}"
+
+syn match takoutLabel "Input File:" contains=takoutFile
+syn match takoutLabel "Begin Solution: Routine"
+
+syn match takoutError "<<< Error >>>"
+
+
+" 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_takout_syntax_inits")
+ if version < 508
+ let did_takout_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink takoutPos Statement
+ HiLink takoutNeg PreProc
+ HiLink takoutTitle Type
+ HiLink takoutFile takIncludeFile
+ HiLink takoutInteger takInteger
+
+ HiLink takoutSectionDelim Delimiter
+ HiLink takoutSectionTitle Exception
+ HiLink takoutHeaderDelim SpecialComment
+ HiLink takoutLabel Identifier
+
+ HiLink takoutError Error
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "takout"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/tasm.vim b/runtime/syntax/tasm.vim
new file mode 100644
index 000000000..1cfc1218a
--- /dev/null
+++ b/runtime/syntax/tasm.vim
@@ -0,0 +1,122 @@
+" Vim syntax file
+" Language: TASM: turbo assembler by Borland
+" Maintaner: FooLman of United Force <foolman@bigfoot.com>
+" Last change: 22 aug 2000
+
+" 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
+syn match tasmLabel "^[\ \t]*[@a-z_$][a-z0-9_$@]*\ *:"
+syn keyword tasmDirective ALIAS ALIGN ARG ASSUME %BIN CATSRT CODESEG
+syn match tasmDirective "\<\(byte\|word\|dword\|qword\)\ ptr\>"
+" CALL extended syntax
+syn keyword tasmDirective COMM %CONDS CONST %CREF %CREFALL %CREFREF
+syn keyword tasmDirective %CREFUREF %CTLS DATASEG DB DD %DEPTH DF DISPLAY
+syn keyword tasmDirective DOSSEG DP DQ DT DW ELSE EMUL END ENDIF
+" IF XXXX
+syn keyword tasmDirective ENDM ENDP ENDS ENUM EQU ERR EVEN EVENDATA EXITCODE
+syn keyword tasmDirective EXITM EXTRN FARDATA FASTIMUL FLIPFLAG GETFIELD GLOBAL
+syn keyword tasmDirective GOTO GROUP IDEAL %INCL INCLUDE INCLUDELIB INSTR IRP
+"JMP
+syn keyword tasmDirective IRPC JUMPS LABEL LARGESTACK %LINUM %LIST LOCAL
+syn keyword tasmDirective LOCALS MACRO %MACS MASKFLAG MASM MASM51 MODEL
+syn keyword tasmDirective MULTERRS NAME %NEWPAGE %NOCONDS %NOCREF %NOCTLS
+syn keyword tasmDirective NOEMUL %NOINCL NOJUMPS %NOLIST NOLOCALS %NOMACS
+syn keyword tasmDirective NOMASM51 NOMULTERRS NOSMART %NOSYMS %NOTRUNC NOWARN
+syn keyword tasmDirective %PAGESIZE %PCNT PNO87 %POPLCTL POPSTATE PROC PROCDESC
+syn keyword tasmDirective PROCTYPE PUBLIC PUBLICDLL PURGE %PUSHCTL PUSHSTATE
+"rept, ret
+syn keyword tasmDirective QUIRKS RADIX RECORD RETCODE SEGMENT SETFIELD
+syn keyword tasmDirective SETFLAG SIZESTR SMALLSTACK SMART STACK STARTUPCODE
+syn keyword tasmDirective STRUC SUBSTR %SUBTTL %SYMS TABLE %TABSIZE TBLINIT
+syn keyword tasmDirective TBLINST TBLPTR TESTFLAG %TEXT %TITLE %TRUNC TYPEDEF
+syn keyword tasmDirective UDATASEG UFARDATA UNION USES VERSION WAR WHILE ?DEBUG
+
+syn keyword tasmInstruction AAA AAD AAM AAS ADC ADD AND ARPL BOUND BSF BSR
+syn keyword tasmInstruction BSWAP BT BTC BTR BTS CALL CBW CLC CLD CLI CLTS
+syn keyword tasmInstruction CMC CMP CMPXCHG CMPXCHG8B CPUID CWD CDQ CWDE
+syn keyword tasmInstruction DAA DAS DEC DIV ENTER RETN RETF F2XM1
+syn keyword tasmCoprocInstr FABS FADD FADDP FBLD FBSTP FCHG FCOM FCOM2 FCOMI
+syn keyword tasmCoprocInstr FCOMIP FCOMP FCOMP3 FCOMP5 FCOMPP FCOS FDECSTP
+syn keyword tasmCoprocInstr FDISI FDIV FDIVP FDIVR FENI FFREE FFREEP FIADD
+syn keyword tasmCoprocInstr FICOM FICOMP FIDIV FIDIVR FILD FIMUL FINIT FINCSTP
+syn keyword tasmCoprocInstr FIST FISTP FISUB FISUBR FLD FLD1 FLDCW FLDENV
+syn keyword tasmCoprocInstr FLDL2E FLDL2T FLDLG2 FLDLN2 FLDPI FLDZ FMUL FMULP
+syn keyword tasmCoprocInstr FNCLEX FNINIT FNOP FNSAVE FNSTCW FNSTENV FNSTSW
+syn keyword tasmCoprocInstr FPATAN FPREM FPREM1 FPTAN FRNDINT FRSTOR FSCALE
+syn keyword tasmCoprocInstr FSETPM FSIN FSINCOM FSQRT FST FSTP FSTP1 FSTP8
+syn keyword tasmCoprocInstr FSTP9 FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMI
+syn keyword tasmCoprocInstr FUCOMPP FWAIT FXAM FXCH FXCH4 FXCH7 FXTRACT FYL2X
+syn keyword tasmCoprocInstr FYL2XP1 FSTCW FCHS FSINCOS
+syn keyword tasmInstruction IDIV IMUL IN INC INT INTO INVD INVLPG IRET JMP
+syn keyword tasmInstruction LAHF LAR LDS LEA LEAVE LES LFS LGDT LGS LIDT LLDT
+syn keyword tasmInstruction LMSW LOCK LODSB LSL LSS LTR MOV MOVSX MOVZX MUL
+syn keyword tasmInstruction NEG NOP NOT OR OUT POP POPA POPAD POPF POPFD PUSH
+syn keyword tasmInstruction PUSHA PUSHAD PUSHF PUSHFD RCL RCR RDMSR RDPMC RDTSC
+syn keyword tasmInstruction REP RET ROL ROR RSM SAHF SAR SBB SGDT SHL SAL SHLD
+syn keyword tasmInstruction SHR SHRD SIDT SMSW STC STD STI STR SUB TEST VERR
+syn keyword tasmInstruction VERW WBINVD WRMSR XADD XCHG XLAT XOR
+syn keyword tasmMMXinst EMMS MOVD MOVQ PACKSSDW PACKSSWB PACKUSWB PADDB
+syn keyword tasmMMXinst PADDD PADDSB PADDSB PADDSW PADDUSB PADDUSW PADDW
+syn keyword tasmMMXinst PAND PANDN PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD
+syn keyword tasmMMXinst PCMPGTW PMADDWD PMULHW PMULLW POR PSLLD PSLLQ
+syn keyword tasmMMXinst PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW PSUBB PSUBD
+syn keyword tasmMMXinst PSUBSB PSUBSW PSUBUSB PSUBUSW PSUBW PUNPCKHBW
+syn keyword tasmMMXinst PUNPCKHBQ PUNPCKHWD PUNPCKLBW PUNPCKLDQ PUNPCKLWD
+syn keyword tasmMMXinst PXOR
+"FCMOV
+syn match tasmInstruction "\<\(CMPS\|MOVS\|OUTS\|SCAS\|STOS\|LODS\|INS\)[BWD]"
+syn match tasmInstruction "\<\(CMOV\|SET\|J\)N\=[ABCGLESXZ]\>"
+syn match tasmInstruction "\<\(CMOV\|SET\|J\)N\=[ABGL]E\>"
+syn match tasmInstruction "\<\(LOOP\|REP\)N\=[EZ]\=\>"
+syn match tasmRegister "\<[A-D][LH]\>"
+syn match tasmRegister "\<E\=\([A-D]X\|[SD]I\|[BS]P\)\>"
+syn match tasmRegister "\<[C-GS]S\>"
+syn region tasmComment start=";" end="$"
+"HACK! comment ? ... selection
+syn region tasmComment start="comment \+\$" end="\$"
+syn region tasmComment start="comment \+\~" end="\~"
+syn region tasmComment start="comment \+#" end="#"
+syn region tasmString start="'" end="'"
+syn region tasmString start='"' end='"'
+
+syn match tasmDec "\<-\=[0-9]\+\.\=[0-9]*\>"
+syn match tasmHex "\<[0-9][0-9A-F]*H\>"
+syn match tasmOct "\<[0-7]\+O\>"
+syn match tasmBin "\<[01]\+B\>"
+
+" 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_tasm_syntax_inits")
+ if version < 508
+ let did_tasm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tasmString String
+ HiLink tasmDec Number
+ HiLink tasmHex Number
+ HiLink tasmOct Number
+ HiLink tasmBin Number
+ HiLink tasmInstruction Keyword
+ HiLink tasmCoprocInstr Keyword
+ HiLink tasmMMXInst Keyword
+ HiLink tasmDirective PreProc
+ HiLink tasmRegister Identifier
+ HiLink tasmProctype PreProc
+ HiLink tasmComment Comment
+ HiLink tasmLabel Label
+
+ delcommand HiLink
+endif
+
+let b:curret_syntax = "tasm"
diff --git a/runtime/syntax/tcl.vim b/runtime/syntax/tcl.vim
new file mode 100644
index 000000000..145da9087
--- /dev/null
+++ b/runtime/syntax/tcl.vim
@@ -0,0 +1,235 @@
+" Vim syntax file
+" Language: TCL/TK
+" Maintainer: Dean Copsey <copsey@cs.ucdavis.edu>
+" (previously Matt Neumann <mattneu@purpleturtle.com>)
+" (previously Allan Kelly <allan@fruitloaf.co.uk>)
+" Original: Robin Becker <robin@jessikat.demon.co.uk>
+" Last Change: 2004 May 16
+"
+" Keywords TODO: format clock click anchor
+
+" 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
+
+" A bunch of useful keywords
+syn keyword tclStatement proc global return lindex
+syn keyword tclStatement llength lappend lreplace lrange list concat incr
+syn keyword tclStatement upvar set
+syn keyword tclLabel case default
+syn keyword tclConditional if then else elseif switch
+syn keyword tclRepeat while for foreach break continue
+syn keyword tcltkSwitch contained insert create polygon fill outline tag
+
+" WIDGETS
+" commands associated with widgets
+syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget
+syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth
+syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid
+syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus
+syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand
+syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand
+syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3
+syn keyword tcltkWidgetSwitch contained state tabs width wrap
+" button
+syn keyword tcltkWidgetSwitch contained command default
+" canvas
+syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient
+" checkbutton, radiobutton
+syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable
+" entry, frame
+syn keyword tcltkWidgetSwitch contained show class colormap container visual
+" listbox, menu
+syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type
+" menubutton, message
+syn keyword tcltkWidgetSwitch contained direction aspect justify
+" scale
+syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to
+" scrollbar
+syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth
+" image
+syn keyword tcltkWidgetSwitch contained delete names types create
+" variable reference
+ " ::optional::namespaces
+syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_.]*::\)*\)\a[a-zA-Z0-9_.]*"
+ " ${...} may contain any character except '}'
+syn match tclVarRef "${[^}]*}"
+" menu, mane add
+syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator
+syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak
+syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue
+syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable
+syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke
+syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate
+"syn keyword tcltkWidgetSwitch contained
+"syn match tcltkWidgetSwitch contained
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scrollbar\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+" These words are dual purpose.
+" match switches
+"syn match tcltkWidgetSwitch contained "-text"hs=s+1
+syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1
+syn match tcltkWidgetSwitch contained "-menu"hs=s+1
+syn match tcltkWidgetSwitch contained "-label"hs=s+1
+" match commands - 2 lines for pretty match.
+"variable
+" Special case - If a number follows a variable region, it must be at the end of
+" the pattern, by definition. Therefore, (1) either include a number as the region
+" end and exclude tclNumber from the contains list, or (2) make variable
+" keepend. As (1) would put variable out of step with everything else, use (2).
+syn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\s\<variable\>\|\[\<variable\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand
+" menu
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<menu\>\|\[\<menu\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+" label
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<label\>\|\[\<label\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+" text
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString
+syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<text\>\|\[\<text\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
+
+" This isn't contained (I don't think) so it's OK to just associate with the Color group.
+" TODO: This could be wrong.
+syn keyword tcltkWidgetColor toplevel
+
+
+syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<configure\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef keepend
+syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef
+
+
+" NAMESPACE
+" commands associated with namespace
+syn keyword tcltkNamespaceSwitch contained children code current delete eval
+syn keyword tcltkNamespaceSwitch contained export forget import inscope origin
+syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkNamespaceSwitch
+
+" EXPR
+" commands associated with expr
+syn keyword tcltkMaths contained acos cos hypot sinh
+syn keyword tcltkMaths contained asin cosh log sqrt
+syn keyword tcltkMaths contained atan exp log10 tan
+syn keyword tcltkMaths contained atan2 floor pow tanh
+syn keyword tcltkMaths contained ceil fmod sin
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<expr\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf
+
+" format
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<format\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf
+
+" PACK
+" commands associated with pack
+syn keyword tcltkPackSwitch contained forget info propogate slaves
+syn keyword tcltkPackConfSwitch contained after anchor before expand fill in ipadx ipady padx pady side
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<pack\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkPackSwitch,tcltkPackConf,tcltkPackConfSwitch,tclNumber,tclVarRef,tclString,tcltkCommand keepend
+
+" STRING
+" commands associated with string
+syn keyword tcltkStringSwitch contained compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
+
+" ARRAY
+" commands associated with array
+syn keyword tcltkArraySwitch contained anymore donesearch exists get names nextelement size startsearch set
+" match from command name to ] or EOL
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand
+
+" LSORT
+" switches for lsort
+syn keyword tcltkLsortSwitch contained ascii dictionary integer real command increasing decreasing index
+" match from command name to ] or EOL
+syn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
+
+syn keyword tclTodo contained TODO
+
+
+" String and Character contstants
+" Highlight special characters (those which have a backslash) differently
+syn match tclSpecial contained "\\\d\d\d\=\|\\."
+" A string needs the skip argument as it may legitimately contain \".
+" Match at start of line
+syn region tclString start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
+"Match all other legal strings.
+syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
+
+syn match tclLineContinue "\\\s*$"
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match tclNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match tclNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match tclNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match tclNumber "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match tclNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+"syn match tclIdentifier "\<[a-z_][a-z0-9_]*\>"
+syn case match
+
+syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo
+syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo
+
+"syn sync ccomment tclComment
+
+" 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_tcl_syntax_inits")
+ if version < 508
+ let did_tcl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tcltkSwitch Special
+ HiLink tclLabel Label
+ HiLink tclConditional Conditional
+ HiLink tclRepeat Repeat
+ HiLink tclNumber Number
+ HiLink tclError Error
+ HiLink tclStatement Statement
+ "HiLink tclStatementColor Statement
+ HiLink tclString String
+ HiLink tclComment Comment
+ HiLink tclSpecial Special
+ HiLink tclTodo Todo
+ " Below here are the commands and their options.
+ HiLink tcltkCommandColor Statement
+ HiLink tcltkWidgetColor Structure
+ HiLink tclLineContinue WarningMsg
+ HiLink tcltkStringSwitch Special
+ HiLink tcltkArraySwitch Special
+ HiLink tcltkLsortSwitch Special
+ HiLink tcltkPackSwitch Special
+ HiLink tcltkPackConfSwitch Special
+ HiLink tcltkMaths Special
+ HiLink tcltkNamespaceSwitch Special
+ HiLink tcltkWidgetSwitch Special
+ HiLink tcltkPackConfColor Identifier
+ "HiLink tcltkLsort Statement
+ HiLink tclVarRef Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tcl"
+
+" vim: ts=8
diff --git a/runtime/syntax/tcsh.vim b/runtime/syntax/tcsh.vim
new file mode 100644
index 000000000..29fbb2e3c
--- /dev/null
+++ b/runtime/syntax/tcsh.vim
@@ -0,0 +1,188 @@
+" Vim syntax file
+" Language: C-shell (tcsh)
+" Maintainor: Gautam Iyer <gautam@math.uchicago.edu>
+" Last Modified: Mon 23 Feb 2004 02:28:51 PM CST
+"
+" Description: We break up each statement into a "command" and an "end" part.
+" All groups are either a "command" or part of the "end" of a statement (ie
+" everything after the "command"). This is because blindly highlighting tcsh
+" statements as keywords caused way too many false positives. Eg:
+"
+" set history=200
+"
+" causes history to come up as a keyword, which we want to avoid.
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+
+" ----- Clusters -----
+syn cluster tcshModifiers contains=tcshModifier,tcshModifierError
+syn cluster tcshQuoteList contains=tcshDQuote,tcshSQuote,tcshBQuote
+syn cluster tcshStatementEnds contains=@tcshQuoteList,tcshComment,tcshUsrVar,TcshArgv,tcshSubst,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArguement
+syn cluster tcshStatements contains=tcshBuiltins,tcshCommands,tcshSet,tcshSetEnv,tcshAlias,tcshIf,tcshWhile
+syn cluster tcshVarList contains=tcshUsrVar,tcshArgv,tcshSubst
+
+" ----- Statements -----
+" Tcsh commands: Any filename / modifiable variable (must be first!)
+syn match tcshCommands '\v[a-zA-Z0-9\\./_$:-]+' contains=tcshSpecial,tcshUsrVar,tcshArgv,tcshVarError nextgroup=tcshStatementEnd
+
+" Builtin commands except (un)set(env), (un)alias, if, while, else
+syn keyword tcshBuiltins nextgroup=tcshStatementEnd alloc bg bindkey break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
+
+" StatementEnd is anything after a builtin / command till the lexical end of a
+" statement (;, |, ||, |&, && or end of line)
+syn region tcshStatementEnd transparent contained matchgroup=tcshBuiltins start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
+
+" set expressions (Contains shell variables)
+syn keyword tcshShellVar contained afsuser ampm argv autocorrect autoexpand autolist autologout backslash_quote catalog cdpath color colorcat command complete continue continue_args correct cwd dextract dirsfile dirstack dspmbyte dunique echo echo_style edit ellipsis fignore filec gid group histchars histdup histfile histlit history home ignoreeof implicitcd inputmode killdup killring listflags listjobs listlinks listmax listmaxrows loginsh logout mail matchbeep nobeep noclobber noding noglob nokanji nonomatch nostat notify oid owd path printexitvalue prompt prompt2 prompt3 promptchars pushdtohome pushdsilent recexact recognize_only_executables rmstar rprompt savedirs savehist sched shell shlvl status symlinks tcsh term time tperiod tty uid user verbose version visiblebell watch who wordchars
+syn keyword tcshSet nextgroup=tcshSetEnd set unset
+syn region tcshSetEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshShellVar,@tcshStatementEnds
+
+" setenv expressions (Contains enviorenment variables)
+syn keyword tcshEnvVar contained AFSUSER COLUMNS DISPLAY EDITOR GROUP HOME HOST HOSTTYPE HPATH LANG LC_CTYPE LINES LS_COLORS MACHTYPE NOREBIND OSTYPE PATH PWD REMOTEHOST SHLVL SYSTYPE TERM TERMCAP USER VENDOR VISUAL
+syn keyword tcshSetEnv nextgroup=tcshEnvEnd setenv unsetenv
+syn region tcshEnvEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshEnvVar,@tcshStatementEnds
+
+" alias and unalias (contains special aliases)
+syn keyword tcshAliases contained beemcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
+syn keyword tcshAlias nextgroup=tcshAliEnd alias unalias
+syn region tcshAliEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshAliases,@tcshStatementEnds
+
+" if statements (contains expressions / operators)
+syn keyword tcshIf nextgroup=tcshIfEnd if
+syn region tcshIfEnd contained matchgroup=tcshBuiltins start='' skip="\\$" end="\v<then>|$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+
+" else statements (nextgroup if)
+syn keyword tcshElse nextgroup=tcshIf skipwhite else
+
+" while statements (contains expressions / operators)
+syn keyword tcshWhile nextgroup=tcshWhEnd while
+syn region tcshWhEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="\v$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+
+" Expressions start with @.
+syn match tcshExprStart "\v\@\s+" nextgroup=tcshExprVar
+syn match tcshExprVar contained "\v\h\w*%(\[\d+\])?" contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
+syn match tcshExprOp contained "++\|--"
+syn match tcshExprOp contained "\v\s*\=" nextgroup=tcshExprEnd
+syn match tcshExprEnd contained "\v.*$"hs=e+1 contains=tcshOperator,tcshNumber,@tcshVarList
+syn match tcshExprEnd contained "\v.{-};"hs=e contains=tcshOperator,tcshNumber,@tcshVarList
+
+" ----- Comments: -----
+syn match tcshComment "#.*" contains=tcshTodo,tcshCommentTi,tcshCommentSp,@Spell
+syn match tcshSharpBang "^#! .*$"
+syn match tcshCommentTi contained '\v#\s*\u\w*(\s+\u\w*)*:'hs=s+1 contains=tcshTodo
+syn match tcshCommentSp contained '\v<\u{3,}>' contains=tcshTodo
+syn match tcshTodo contained '\v\c<todo>'
+
+" ----- Strings -----
+" Tcsh does not allow \" in strings unless the "backslash_quote" shell
+" variable is set. Set the vim variable "tcsh_backslash_quote" to 0 if you
+" want VIM to assume that no backslash quote constructs exist.
+
+" Backquotes are treated as commands, and are not contained in anything
+if(exists("tcsh_backslash_quote") && tcsh_backslash_quote == 0)
+ syn region tcshSQuote keepend contained start="\v\\@<!'" end="'" contains=@Spell
+ syn region tcshDQuote keepend contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
+ syn region tcshBQuote keepend start='\v\\@<!`' end='`' contains=@tcshStatements
+else
+ syn region tcshSQuote contained start="\v\\@<!'" skip="\v\\\\|\\'" end="'" contains=@Spell
+ syn region tcshDQuote contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
+ syn region tcshBQuote keepend matchgroup=tcshBQuoteGrp start='\v\\@<!`' skip='\v\\\\|\\`' end='`' contains=@tcshStatements
+endif
+
+" ----- Variables -----
+" Variable Errors. Must come first! \$ constructs will be flagged by
+" tcshSpecial, so we don't consider them here.
+syn match tcshVarError '\v\$\S*' contained
+
+" Modifiable Variables without {}.
+syn match tcshUsrVar contained "\v\$\h\w*%(\[\d+%(-\d+)?\])?" nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
+syn match tcshArgv contained "\v\$%(\d+|\*)" nextgroup=@tcshModifiers
+
+" Modifiable Variables with {}.
+syn match tcshUsrVar contained "\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}" contains=@tcshModifiers,tcshShellVar,tcshEnvVar
+syn match tcshArgv contained "\v\$\{%(\d+|\*)%(:\S*)?\}" contains=@tcshModifiers
+
+" UnModifiable Substitutions. Order is important here.
+syn match tcshSubst contained "\v\$[?#$!_<]" nextgroup=tcshModifierError
+syn match tcshSubst contained "\v\$[%#?]%(\h\w*|\d+)" nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
+syn match tcshSubst contained "\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}" contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
+
+" Variable Name Expansion Modifiers (order important)
+syn match tcshModifierError contained '\v:\S*'
+syn match tcshModifier contained '\v:[ag]?[htreuls&qx]' nextgroup=@tcshModifiers
+
+" ----- Operators / Specials -----
+" Standard redirects (except <<) [<, >, >>, >>&, >>!, >>&!]
+syn match tcshRedir contained "\v\<|\>\>?\&?!?"
+
+" Metachars
+syn match tcshMeta contained "\v[]{}*?[]"
+
+" Here Documents (<<)
+syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*\z(\h\w*)" end="^\z1$" contains=@tcshVarList,tcshSpecial
+syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start="\v\<\<\s*\\\z(\h\w*)$" end="^\z1$"
+
+" Operators
+syn match tcshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||"
+syn match tcshOperator contained "[(){}]"
+
+" Numbers
+syn match tcshNumber contained "\v<-?\d+>"
+
+" Arguements
+syn match tcshArguement contained "\v\s@<=-(\w|-)*"
+
+" Special charectors
+syn match tcshSpecial contained "\v\\@<!\\(\d{3}|.)"
+
+" ----- Syncronising -----
+if exists("tcsh_minlines")
+ exec "syn sync minlines=" . tcsh_minlines
+else
+ syn sync minlines=15 " Except 'here' documents, nothing is long
+endif
+
+" Define highlighting of syntax groups
+hi def link tcshBuiltins statement
+hi def link tcshShellVar preproc
+hi def link tcshEnvVar tcshShellVar
+hi def link tcshAliases tcshShellVar
+hi def link tcshCommands identifier
+hi def link tcshSet tcshBuiltins
+hi def link tcshSetEnv tcshBuiltins
+hi def link tcshAlias tcshBuiltins
+hi def link tcshIf tcshBuiltins
+hi def link tcshElse tcshBuiltins
+hi def link tcshWhile tcshBuiltins
+hi def link tcshExprStart tcshBuiltins
+hi def link tcshExprVar tcshUsrVar
+hi def link tcshExprOp tcshOperator
+hi def link tcshExprEnd tcshOperator
+hi def link tcshComment comment
+hi def link tcshCommentTi preproc
+hi def link tcshCommentSp WarningMsg
+hi def link tcshSharpBang preproc
+hi def link tcshTodo todo
+hi def link tcshSQuote constant
+hi def link tcshDQuote tcshSQuote
+hi def link tcshBQuoteGrp include
+hi def link tcshVarError error
+hi def link tcshUsrVar type
+hi def link tcshArgv tcshUsrVar
+hi def link tcshSubst tcshUsrVar
+hi def link tcshModifier tcshArguement
+hi def link tcshModifierError tcshVarError
+hi def link tcshMeta tcshSubst
+hi def link tcshRedir tcshOperator
+hi def link tcshHereDoc tcshSQuote
+hi def link tcshOperator operator
+hi def link tcshNumber number
+hi def link tcshArguement special
+hi def link tcshSpecial specialchar
+
+let b:current_syntax = "tcsh"
diff --git a/runtime/syntax/terminfo.vim b/runtime/syntax/terminfo.vim
new file mode 100644
index 000000000..6ac7ffaf3
--- /dev/null
+++ b/runtime/syntax/terminfo.vim
@@ -0,0 +1,115 @@
+" Vim syntax file
+" Language: Terminfo definition
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/terminfo/
+" Latest Revision: 2004-05-22
+" arch-tag: 8464dd47-0c5a-47d5-87ed-a2ad99e1196f
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" keywords (define first as to not mess up comments
+syn match terminfoKeywords "[,=#|]"
+
+" todo
+syn keyword terminfoTodo contained TODO FIXME XXX NOTE
+
+" comments
+syn region terminfoComment matchgroup=terminfoComment start="^#" end="$" contains=terminfoTodo
+
+" numbers
+syn match terminfoNumbers "\<[0-9]\+\>"
+
+" special keys
+syn match terminfoSpecialChar "\\\(\o\{3}\|[Eenlrtbfs^\,:0]\)"
+syn match terminfoSpecialChar "\^\a"
+
+" delays
+syn match terminfoDelay "$<[0-9]\+>"
+
+" boolean capabilities
+syn keyword terminfoBooleans bw am bce ccc xhp xhpa cpix crxw xt xenl eo gn
+syn keyword terminfoBooleans hc chts km daisy hs hls in lpix da db mir msgr
+syn keyword terminfoBooleans nxon xsb npc ndscr nrrmc os mc5i xcpa sam eslok
+syn keyword terminfoBooleans hz ul xon
+
+" numeric capabilities
+syn keyword terminfoNumerics cols it lh lw lines lm xmc ma colors pairs wnum
+syn keyword terminfoNumerics ncv nlab pb vt wsl bitwin bitype bufsz btns
+syn keyword terminfoNumerics spinh spinv maddr mjump mcs npins orc orhi orl
+syn keyword terminfoNumerics orvi cps widcs
+
+" string capabilities
+syn keyword terminfoStrings acsc cbt bel cr cpi lpi chr cvr csr rmp tbc mgc
+syn keyword terminfoStrings clear el1 el ed hpa cmdch cwin cup cud1 home
+syn keyword terminfoStrings civis cub1 mrcup cnorm cuf1 ll cuu1 cvvis defc
+syn keyword terminfoStrings dch1 dl1 dial dsl dclk hd enacs smacs smam blink
+syn keyword terminfoStrings bold smcup smdc dim swidm sdrfq smir sitm slm
+syn keyword terminfoStrings smicm snlq snrmq prot rev invis sshm smso ssubm
+syn keyword terminfoStrings ssupm smul sum smxon ech rmacs rmam sgr0 rmcup
+syn keyword terminfoStrings rmdc rwidm rmir ritm rlm rmicm rshm rmso rsubm
+syn keyword terminfoStrings rsupm rmul rum rmxon pause hook flash ff fsl
+syn keyword terminfoStrings wingo hup is1 is2 is3 if iprog initc initp ich1
+syn keyword terminfoStrings il1 ip ka1 ka3 kb2 kbs kbeg kcbt kc1 kc3 kcan
+syn keyword terminfoStrings ktbc kclr kclo kcmd kcpy kcrt kctab kdch1 kdl1
+syn keyword terminfoStrings kcud1 krmir kend kent kel ked kext
+syn match terminfoStrings "\<kf\([0-9]\|[0-5][0-9]\|6[0-3]\)\>"
+syn keyword terminfoStrings kfnd khlp khome kich1 kil1 kcub1 kll kmrk
+syn keyword terminfoStrings kmsg kmov knxt knp kopn kopt kpp kprv kprt krdo
+syn keyword terminfoStrings kref krfr krpl krst kres kcuf1 ksav kBEG kCAN
+syn keyword terminfoStrings kCMD kCPY kCRT kDC kDL kslt kEND kEOL kEXT kind
+syn keyword terminfoStrings kFND kHLP kHOM kIC kLFT kMSG kMOV kNXT kOPT kPRV
+syn keyword terminfoStrings kPRT kri kRDO kRPL kRIT kRES kSAV kSPD khts kUND
+syn keyword terminfoStrings kspd kund kcuu1 rmkx smkx lf0 lf1 lf10 lf2 lf3
+syn keyword terminfoStrings lf4 lf5 lf6 lf7 lf8 lf9 fln rmln smln rmm smm
+syn keyword terminfoStrings mhpa mcud1 mcub1 mcuf1 mvpa mcuu1 nel porder oc
+syn keyword terminfoStrings op pad dch dl cud mcud ich indn il cub mcub cuf
+syn keyword terminfoStrings mcuf rin cuu mccu pfkey pfloc pfx pln mc0 mc5p
+syn keyword terminfoStrings mc4 mc5 pulse qdial rmclk rep rfi rs1 rs2 rs3 rf
+syn keyword terminfoStrings rc vpa sc ind ri scs sgr setbsmgb smgbp sclk scp
+syn keyword terminfoStrings setb setf smgl smglp smgr smgrp hts smgt smgtp
+syn keyword terminfoStrings wind sbim scsd rbim rcsd subcs supcs ht docr
+syn keyword terminfoStrings tsl tone uc hu
+syn match terminfoStrings "\<u[0-9]\>"
+syn keyword terminfoStrings wait xoffc xonc zerom
+syn keyword terminfoStrings scesa bicr binel birep csnm csin colornm defbi
+syn keyword terminfoStrings devt dispc endbi smpch smsc rmpch rmsc getm
+syn keyword terminfoStrings kmous minfo pctrm pfxl reqmp scesc s0ds s1ds
+syn keyword terminfoStrings s2ds s3ds setab setaf setcolor smglr slines
+syn keyword terminfoStrings smgtb ehhlm elhlm erhlm ethlm evhlm sgr1
+syn keyword terminfoStrings slengthsL
+
+" parameterized strings
+syn match terminfoParameters "%[%dcspl+*/mAO&|^=<>!~i?te;-]"
+syn match terminfoParameters "%\('[A-Z]'\|{[0-9]\{1,2}}\|p[1-9]\|P[a-z]\|g[A-Z]\)"
+
+" 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_terminfo_syn_inits")
+ if version < 508
+ let did_terminfo_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink terminfoComment Comment
+ HiLink terminfoTodo Todo
+ HiLink terminfoNumbers Number
+ HiLink terminfoSpecialChar SpecialChar
+ HiLink terminfoDelay Special
+ HiLink terminfoBooleans Type
+ HiLink terminfoNumerics Type
+ HiLink terminfoStrings Type
+ HiLink terminfoParameters Keyword
+ HiLink terminfoKeywords Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "terminfo"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
new file mode 100644
index 000000000..6eb134dce
--- /dev/null
+++ b/runtime/syntax/tex.vim
@@ -0,0 +1,480 @@
+" Vim syntax file
+" Language: TeX
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Jun 01, 2004
+" Version: 24
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Notes: {{{1
+"
+" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
+" use %stopzone.
+"
+" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
+" by suitable use of %stopzone.
+"
+" 3. If you have a slow computer, you may wish to modify
+"
+" syn sync maxlines=200
+" syn sync minlines=50
+"
+" to values that are more to your liking.
+"
+" 4. There is no match-syncing for $...$ and $$...$$; hence large
+" equation blocks constructed that way may exhibit syncing problems.
+" (there's no difference between begin/end patterns)
+"
+" 5. If you have the variable "g:tex_no_error" defined then none of the
+" lexical error-checking will be done.
+"
+" ie. let g:tex_no_error=1
+
+" Version Clears: {{{1
+" 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
+
+" Define the default highlighting. {{{1
+" 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_tex_syntax_inits")
+ let did_tex_syntax_inits = 1
+ if version < 508
+ command -nargs=+ HiLink hi link <args>
+ else
+ 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
+endif
+
+" Determine whether or not to use "*.sty" mode
+" The user may override the normal determination by setting
+" 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")
+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"
+ let b:tex_stylish= 1
+ else
+ let b:tex_stylish= 0
+ endif
+endif
+
+" (La)TeX keywords: only use the letters a-zA-Z {{{1
+" but _ is the only one that causes problems.
+if version < 600
+ set isk-=_
+ if b:tex_stylish
+ set isk+=@
+ endif
+else
+ setlocal isk-=_
+ if b:tex_stylish
+ setlocal isk+=@
+ endif
+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 add=texMathError
+endif
+syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
+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
+if !exists("tex_no_math")
+ syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
+ syn cluster texMatchGroup add=@texMathZones
+ 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,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
+ if !exists("g:tex_no_error")
+ syn cluster texMathMatchGroup add=texMathError
+ syn cluster texMathZoneGroup add=texMathError
+ endif
+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
+endif
+syn region texParen start="(" end=")" contains=@texMatchGroup
+if !exists("g: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
+endif
+
+" TeX/LaTeX keywords: {{{1
+" Instead of trying to be All Knowing, I just match \..alphameric..
+" Note that *.tex files may not have "@" in their \commands
+if exists("g:tex_tex") || b:tex_stylish
+ syn match texStatement "\\[a-zA-Z@]\+"
+else
+ syn match texStatement "\\\a\+"
+ if !exists("g:tex_no_error")
+ syn match texError "\\\a*@[a-zA-Z@]*"
+ endif
+endif
+
+" TeX/LaTeX delimiters: {{{1
+syn match texDelimiter "&"
+syn match texDelimiter "\\\\"
+
+" Tex/Latex Options: {{{1
+syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
+
+" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
+if b:tex_stylish
+ syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
+ syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
+else
+ syn match texAccent "\\[bcdvuH]\A"me=e-1
+ syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
+endif
+syn match texAccent "\\[bcdvuH]$"
+syn match texAccent +\\[=^.\~"`']+
+syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
+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
+syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained
+
+" \documentclass, \documentstyle, \usepackage: {{{1
+syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
+syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName
+
+" TeX input: {{{1
+syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
+syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies
+syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
+syn match texInputCurlies "[{}]" contained
+syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained
+
+" Type Styles (LaTeX 2.09): {{{1
+syn match texTypeStyle "\\rm\>"
+syn match texTypeStyle "\\em\>"
+syn match texTypeStyle "\\bf\>"
+syn match texTypeStyle "\\it\>"
+syn match texTypeStyle "\\sl\>"
+syn match texTypeStyle "\\sf\>"
+syn match texTypeStyle "\\sc\>"
+syn match texTypeStyle "\\tt\>"
+
+" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
+syn match texTypeStyle "\\textbf\>"
+syn match texTypeStyle "\\textit\>"
+syn match texTypeStyle "\\textmd\>"
+syn match texTypeStyle "\\textrm\>"
+syn match texTypeStyle "\\textsc\>"
+syn match texTypeStyle "\\textsf\>"
+syn match texTypeStyle "\\textsl\>"
+syn match texTypeStyle "\\texttt\>"
+syn match texTypeStyle "\\textup\>"
+syn match texTypeStyle "\\emph\>"
+
+syn match texTypeStyle "\\mathbb\>"
+syn match texTypeStyle "\\mathbf\>"
+syn match texTypeStyle "\\mathcal\>"
+syn match texTypeStyle "\\mathfrak\>"
+syn match texTypeStyle "\\mathit\>"
+syn match texTypeStyle "\\mathnormal\>"
+syn match texTypeStyle "\\mathrm\>"
+syn match texTypeStyle "\\mathsf\>"
+syn match texTypeStyle "\\mathtt\>"
+
+syn match texTypeStyle "\\rmfamily\>"
+syn match texTypeStyle "\\sffamily\>"
+syn match texTypeStyle "\\ttfamily\>"
+
+syn match texTypeStyle "\\itshape\>"
+syn match texTypeStyle "\\scshape\>"
+syn match texTypeStyle "\\slshape\>"
+syn match texTypeStyle "\\upshape\>"
+
+syn match texTypeStyle "\\bfseries\>"
+syn match texTypeStyle "\\mdseries\>"
+
+" Some type sizes: {{{1
+syn match texTypeSize "\\tiny\>"
+syn match texTypeSize "\\scriptsize\>"
+syn match texTypeSize "\\footnotesize\>"
+syn match texTypeSize "\\small\>"
+syn match texTypeSize "\\normalsize\>"
+syn match texTypeSize "\\large\>"
+syn match texTypeSize "\\Large\>"
+syn match texTypeSize "\\LARGE\>"
+syn match texTypeSize "\\huge\>"
+syn match texTypeSize "\\Huge\>"
+
+" Spacecodes (TeX'isms): {{{1
+" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
+syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
+syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
+
+" Sections, subsections, etc: {{{1
+syn match texSection "\\\(sub\)*section\*\=\>"
+syn match texSection "\\\(title\|author\|part\|chapter\|paragraph\|subparagraph\)\>"
+syn match texSection "\\begin\s*{\s*abstract\s*}\|\\end\s*{\s*abstract\s*}"
+
+" Bad Math (mismatched): {{{1
+if !exists("tex_no_math")
+ 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 "\\[\])]"
+endif
+
+" Math Zones: {{{1
+if !exists("tex_no_math")
+ " TexNewMathZone: creates a mathzone with the given suffix and mathzone name. {{{2
+ " Starred forms are created if starform is true. Starred
+ " forms have syntax group and synchronization groups with a
+ " "S" appended. Handles: cluster, syntax, sync, and HiLink.
+ fun! TexNewMathZone(sfx,mathzone,starform)
+ let grpname = "texMathZone".a:sfx
+ let syncname = "texSyncMathZone".a:sfx
+ 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'
+ 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*}"'
+ exe 'HiLink '.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'
+ 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*}"'
+ exe 'HiLink '.grpname.' texMath'
+ endif
+ endfun
+
+ " Standard Math Zones: {{{2
+ call TexNewMathZone("A","align",1)
+ call TexNewMathZone("B","alignat",1)
+ call TexNewMathZone("C","displaymath",1)
+ call TexNewMathZone("D","eqnarray",1)
+ call TexNewMathZone("E","equation",1)
+ call TexNewMathZone("F","flalign",1)
+ call TexNewMathZone("G","gather",1)
+ call TexNewMathZone("H","math",1)
+ call TexNewMathZone("I","multline",1)
+ call TexNewMathZone("J","subequations",0)
+ call TexNewMathZone("K","xalignat",1)
+ call TexNewMathZone("L","xxalignat",0)
+
+ " Inline Math Zones: {{{2
+ 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
+ syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
+
+ syn match texMathOper "[_^=]" contained
+
+ " \left..something.. and \right..something.. support: {{{2
+ syn match texMathDelimBad contained "\S"
+ syn match texMathDelim contained "\\\(left\|right\|[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
+syn match texSpecialChar "\\[$&%#{}_]"
+if b:tex_stylish
+ syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
+else
+ syn match texSpecialChar "\\[SP@]\A"me=e-1
+endif
+syn match texSpecialChar "\\\\"
+if !exists("tex_no_math")
+ syn match texOnlyMath "[_^]"
+endif
+syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
+
+" Comments: {{{1
+" Normal TeX LaTeX : %....
+" Documented TeX Format: ^^A... -and- leading %s (only)
+syn cluster texCommentGroup contains=texTodo,@Spell
+syn case ignore
+syn keyword texTodo contained combak fixme todo
+syn case match
+if b:extfname == "dtx"
+ syn match texComment "\^\^A.*$" contains=@texCommentGroup
+ syn match texComment "^%\+" contains=@texCommentGroup
+else
+ syn match texComment "%.*$" contains=@texCommentGroup
+endif
+
+" Separate lines used for verb` and verb# so that the end conditions {{{1
+" will appropriately terminate. Ideally vim would let me save a
+" character from the start pattern and re-use it in the end-pattern.
+syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%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="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
+ endif
+endif
+
+" Tex Reference Zones: {{{1
+syn region texZone start="@samp{" end="}\|%stopzone\>"
+syn region texRefZone matchgroup=texStatement start="\\nocite{" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\bibliography{" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\cite\([tp]\*\=\)\={" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\label{" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+syn region texRefZone matchgroup=texStatement start="\\v\=ref{" keepend end="}\|%stopzone\>" contains=texComment,texDelimiter
+
+" 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
+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
+
+" Definitions/Commands: {{{1
+syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
+if b:tex_stylish
+ syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
+ syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
+else
+ syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
+ syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
+endif
+syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
+syn match texDefParm contained "#\d\+"
+
+" TeX Lengths: {{{1
+syn match texLength "\<\d\+\(\.\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
+
+" TeX String Delimiters: {{{1
+syn match texString "\(``\|''\|,,\)"
+
+" LaTeX synchronization: {{{1
+syn sync maxlines=200
+syn sync minlines=50
+
+syn sync match texSyncStop groupthere NONE "%stopzone\>"
+
+" Synchronization: {{{1
+" The $..$ and $$..$$ make for impossible sync patterns
+" (one can't tell if a "$$" starts or stops a math zone by itself)
+" The following grouptheres coupled with minlines above
+" help improve the odds of good syncing.
+if !exists("tex_no_math")
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
+ syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
+endif
+
+" Highlighting: {{{1
+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")
+ HiLink texBadMath texError
+ HiLink texMathDelimBad texError
+ HiLink texMathError texError
+ if !b:tex_stylish
+ HiLink texOnlyMath texError
+ endif
+ endif
+ HiLink texError Error
+ endif
+
+ HiLink texDefCmd texDef
+ HiLink texDefName texDef
+ HiLink texDocType texCmdName
+ HiLink texDocTypeArgs texCmdArgs
+ HiLink texInputFileOpt texCmdArgs
+ HiLink texInputCurlies texDelimiter
+ HiLink texLigature texSpecialChar
+ if !exists("tex_no_math")
+ HiLink texMathDelimSet1 texMathDelim
+ HiLink texMathDelimSet2 texMathDelim
+ HiLink texMathDelimKey texMathDelim
+ HiLink texMathMatcher texMath
+ HiLink texMathZoneW texMath
+ HiLink texMathZoneX texMath
+ HiLink texMathZoneY texMath
+ HiLink texMathZoneZ texMath
+ endif
+ HiLink texSectionMarker texCmdName
+ HiLink texSectionName texSection
+ HiLink texSpaceCode texStatement
+ HiLink texTypeSize texType
+ HiLink texTypeStyle texType
+
+ " Basic TeX highlighting groups
+ HiLink texCmdArgs Number
+ HiLink texCmdName Statement
+ HiLink texComment Comment
+ HiLink texDef Statement
+ HiLink texDefParm Special
+ HiLink texDelimiter Delimiter
+ HiLink texInput Special
+ HiLink texInputFile Special
+ HiLink texLength Number
+ HiLink texMath Special
+ HiLink texMathDelim Statement
+ HiLink texMathOper Operator
+ HiLink texNewCmd Statement
+ HiLink texNewEnv Statement
+ HiLink texOption Number
+ HiLink texRefZone Special
+ HiLink texSection PreCondit
+ HiLink texSpaceCodeChar Special
+ HiLink texSpecialChar SpecialChar
+ HiLink texStatement Statement
+ HiLink texString String
+ HiLink texTodo Todo
+ HiLink texType Type
+ HiLink texZone PreCondit
+
+ delcommand HiLink
+endif
+
+" Current Syntax: {{{1
+unlet b:extfname
+let b:current_syntax = "tex"
+" vim: ts=8 fdm=marker
diff --git a/runtime/syntax/texinfo.vim b/runtime/syntax/texinfo.vim
new file mode 100644
index 000000000..c7d5d8ec7
--- /dev/null
+++ b/runtime/syntax/texinfo.vim
@@ -0,0 +1,409 @@
+" Vim syntax file
+" Language: Texinfo (macro package for TeX)
+" Maintainer: Sandor Kopanyi <sandor.kopanyi@mailbox.hu>
+" URL: <->
+" Last Change: 2003 May 11
+"
+" the file follows the Texinfo manual structure; this file is based
+" on manual for Texinfo version 4.0, 28 September 1999
+" since @ can have special meanings, everything is 'match'-ed and 'region'-ed
+" (including @ in 'iskeyword' option has unexpected effects)
+
+" Remove any old syntax stuff hanging around, if needed
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'texinfo'
+endif
+
+"in Texinfo can be real big things, like tables; sync for that
+syn sync lines=200
+
+"some general stuff
+"syn match texinfoError "\S" contained TODO
+syn match texinfoIdent "\k\+" contained "IDENTifier
+syn match texinfoAssignment "\k\+\s*=\s*\k\+\s*$" contained "assigment statement ( var = val )
+syn match texinfoSinglePar "\k\+\s*$" contained "single parameter (used for several @-commands)
+syn match texinfoIndexPar "\k\k\s*$" contained "param. used for different *index commands (+ @documentlanguage command)
+
+
+"marking words and phrases (chap. 9 in Texinfo manual)
+"(almost) everything appears as 'contained' too; is for tables (@table)
+
+"this chapter is at the beginning of this file to avoid overwritings
+
+syn match texinfoSpecialChar "@acronym" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@acronym{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@b" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@b{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@cite" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@cite{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@code" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@code{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@command" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@command{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@dfn" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@dfn{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@email" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@email{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@emph" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@emph{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@env" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@env{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@file" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@file{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@i" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@i{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@kbd" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@kbd{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@key" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@key{" end="}" contains=texinfoSpecialChar
+syn match texinfoSpecialChar "@option" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@option{" end="}" contains=texinfoSpecialChar
+syn match texinfoSpecialChar "@r" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@r{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@samp" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@samp{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@sc" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@sc{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@strong" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@strong{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@t" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@t{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@url" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@url{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoSpecialChar "@var" contained
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@var{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn match texinfoAtCmd "^@kbdinputstyle" nextgroup=texinfoSinglePar skipwhite
+
+
+"overview of Texinfo (chap. 1 in Texinfo manual)
+syn match texinfoComment "@c .*"
+syn match texinfoComment "@c$"
+syn match texinfoComment "@comment .*"
+syn region texinfoMltlnAtCmd matchgroup=texinfoComment start="^@ignore\s*$" end="^@end ignore\s*$" contains=ALL
+
+
+"beginning a Texinfo file (chap. 3 in Texinfo manual)
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="@center " skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd oneline
+syn region texinfoMltlnDMAtCmd matchgroup=texinfoAtCmd start="^@detailmenu\s*$" end="^@end detailmenu\s*$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@setfilename " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@settitle " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@shorttitlepage " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@title " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@titlefont{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@titlepage\s*$" end="^@end titlepage\s*$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoMltlnDMAtCmd,texinfoAtCmd,texinfoPrmAtCmd,texinfoMltlnAtCmd
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@vskip " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn match texinfoAtCmd "^@exampleindent" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "^@headings" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "^\\input" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "^@paragraphindent" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "^@setchapternewpage" nextgroup=texinfoSinglePar skipwhite
+
+
+"ending a Texinfo file (chap. 4 in Texinfo manual)
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="@author " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+"all below @bye should be comment TODO
+syn match texinfoAtCmd "^@bye\s*$"
+syn match texinfoAtCmd "^@contents\s*$"
+syn match texinfoAtCmd "^@printindex" nextgroup=texinfoIndexPar skipwhite
+syn match texinfoAtCmd "^@setcontentsaftertitlepage\s*$"
+syn match texinfoAtCmd "^@setshortcontentsaftertitlepage\s*$"
+syn match texinfoAtCmd "^@shortcontents\s*$"
+syn match texinfoAtCmd "^@summarycontents\s*$"
+
+
+"chapter structuring (chap. 5 in Texinfo manual)
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@appendix" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@appendixsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@appendixsection" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@appendixsubsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@appendixsubsubsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@centerchap" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@chapheading" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@chapter" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@heading" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@majorheading" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@section" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@subheading " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@subsection" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@subsubheading" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@subsubsection" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@subtitle" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@unnumbered" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@unnumberedsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@unnumberedsubsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@unnumberedsubsubsec" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn match texinfoAtCmd "^@lowersections\s*$"
+syn match texinfoAtCmd "^@raisesections\s*$"
+
+
+"nodes (chap. 6 in Texinfo manual)
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@anchor{" end="}"
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@top" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@node" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+
+
+"menus (chap. 7 in Texinfo manual)
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@menu\s*$" end="^@end menu\s*$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoMltlnDMAtCmd
+
+
+"cross references (chap. 8 in Texinfo manual)
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@inforef{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@pxref{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@ref{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@uref{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@xref{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+
+
+"marking words and phrases (chap. 9 in Texinfo manual)
+"(almost) everything appears as 'contained' too; is for tables (@table)
+
+"this chapter is at the beginning of this file to avoid overwritings
+
+
+"quotations and examples (chap. 10 in Texinfo manual)
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@cartouche\s*$" end="^@end cartouche\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@display\s*$" end="^@end display\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@example\s*$" end="^@end example\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@flushleft\s*$" end="^@end flushleft\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@flushright\s*$" end="^@end flushright\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@format\s*$" end="^@end format\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@lisp\s*$" end="^@end lisp\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@quotation\s*$" end="^@end quotation\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@smalldisplay\s*$" end="^@end smalldisplay\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@smallexample\s*$" end="^@end smallexample\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@smallformat\s*$" end="^@end smallformat\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@smalllisp\s*$" end="^@end smalllisp\s*$" contains=ALL
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@exdent" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn match texinfoAtCmd "^@noindent\s*$"
+syn match texinfoAtCmd "^@smallbook\s*$"
+
+
+"lists and tables (chap. 11 in Texinfo manual)
+syn match texinfoAtCmd "@asis" contained
+syn match texinfoAtCmd "@columnfractions" contained
+syn match texinfoAtCmd "@item" contained
+syn match texinfoAtCmd "@itemx" contained
+syn match texinfoAtCmd "@tab" contained
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@enumerate" end="^@end enumerate\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ftable" end="^@end ftable\s*$" contains=ALL
+syn region texinfoMltlnNAtCmd matchgroup=texinfoAtCmd start="^@itemize" end="^@end itemize\s*$" contains=ALL
+syn region texinfoMltlnNAtCmd matchgroup=texinfoAtCmd start="^@multitable" end="^@end multitable\s*$" contains=ALL
+syn region texinfoMltlnNAtCmd matchgroup=texinfoAtCmd start="^@table" end="^@end table\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@vtable" end="^@end vtable\s*$" contains=ALL
+
+
+"indices (chap. 12 in Texinfo manual)
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@\(c\|f\|k\|p\|t\|v\)index" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@..index" skip="\\$" end="$" contains=texinfoSpecialChar oneline
+"@defcodeindex and @defindex is defined after chap. 15's @def* commands (otherwise those ones will overwrite these ones)
+syn match texinfoSIPar "\k\k\s*\k\k\s*$" contained
+syn match texinfoAtCmd "^@syncodeindex" nextgroup=texinfoSIPar skipwhite
+syn match texinfoAtCmd "^@synindex" nextgroup=texinfoSIPar skipwhite
+
+"special insertions (chap. 13 in Texinfo manual)
+syn match texinfoSpecialChar "@\(!\|?\|@\|\s\)"
+syn match texinfoSpecialChar "@{"
+syn match texinfoSpecialChar "@}"
+"accents
+syn match texinfoSpecialChar "@=."
+syn match texinfoSpecialChar "@\('\|\"\|\^\|`\)[aeiouyAEIOUY]"
+syn match texinfoSpecialChar "@\~[aeinouyAEINOUY]"
+syn match texinfoSpecialChar "@dotaccent{.}"
+syn match texinfoSpecialChar "@H{.}"
+syn match texinfoSpecialChar "@,{[cC]}"
+syn match texinfoSpecialChar "@AA{}"
+syn match texinfoSpecialChar "@aa{}"
+syn match texinfoSpecialChar "@L{}"
+syn match texinfoSpecialChar "@l{}"
+syn match texinfoSpecialChar "@O{}"
+syn match texinfoSpecialChar "@o{}"
+syn match texinfoSpecialChar "@ringaccent{.}"
+syn match texinfoSpecialChar "@tieaccent{..}"
+syn match texinfoSpecialChar "@u{.}"
+syn match texinfoSpecialChar "@ubaraccent{.}"
+syn match texinfoSpecialChar "@udotaccent{.}"
+syn match texinfoSpecialChar "@v{.}"
+"ligatures
+syn match texinfoSpecialChar "@AE{}"
+syn match texinfoSpecialChar "@ae{}"
+syn match texinfoSpecialChar "@copyright{}"
+syn match texinfoSpecialChar "@bullet" contained "for tables and lists
+syn match texinfoSpecialChar "@bullet{}"
+syn match texinfoSpecialChar "@dotless{i}"
+syn match texinfoSpecialChar "@dotless{j}"
+syn match texinfoSpecialChar "@dots{}"
+syn match texinfoSpecialChar "@enddots{}"
+syn match texinfoSpecialChar "@equiv" contained "for tables and lists
+syn match texinfoSpecialChar "@equiv{}"
+syn match texinfoSpecialChar "@error{}"
+syn match texinfoSpecialChar "@exclamdown{}"
+syn match texinfoSpecialChar "@expansion{}"
+syn match texinfoSpecialChar "@minus" contained "for tables and lists
+syn match texinfoSpecialChar "@minus{}"
+syn match texinfoSpecialChar "@OE{}"
+syn match texinfoSpecialChar "@oe{}"
+syn match texinfoSpecialChar "@point" contained "for tables and lists
+syn match texinfoSpecialChar "@point{}"
+syn match texinfoSpecialChar "@pounds{}"
+syn match texinfoSpecialChar "@print{}"
+syn match texinfoSpecialChar "@questiondown{}"
+syn match texinfoSpecialChar "@result" contained "for tables and lists
+syn match texinfoSpecialChar "@result{}"
+syn match texinfoSpecialChar "@ss{}"
+syn match texinfoSpecialChar "@TeX{}"
+"other
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@dmn{" end="}"
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@footnote{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@image{" end="}"
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@math{" end="}"
+syn match texinfoAtCmd "@footnotestyle" nextgroup=texinfoSinglePar skipwhite
+
+
+"making and preventing breaks (chap. 14 in Texinfo manual)
+syn match texinfoSpecialChar "@\(\*\|-\|\.\)"
+syn match texinfoAtCmd "^@need" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "^@page\s*$"
+syn match texinfoAtCmd "^@sp" nextgroup=texinfoSinglePar skipwhite
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@group\s*$" end="^@end group\s*$" contains=ALL
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@hyphenation{" end="}"
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@w{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+
+
+"definition commands (chap. 15 in Texinfo manual)
+syn match texinfoMltlnAtCmdFLine "^@def\k\+" contained
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@def\k\+" end="^@end def\k\+$" contains=ALL
+
+"next 2 commands are from chap. 12; must be defined after @def* commands above to overwrite them
+syn match texinfoAtCmd "@defcodeindex" nextgroup=texinfoIndexPar skipwhite
+syn match texinfoAtCmd "@defindex" nextgroup=texinfoIndexPar skipwhite
+
+
+"conditionally visible text (chap. 16 in Texinfo manual)
+syn match texinfoAtCmd "^@clear" nextgroup=texinfoSinglePar skipwhite
+syn region texinfoMltln2AtCmd matchgroup=texinfoAtCmd start="^@html\s*$" end="^@end html\s*$"
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifclear" end="^@end ifclear\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifhtml" end="^@end ifhtml\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifinfo" end="^@end ifinfo\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifnothtml" end="^@end ifnothtml\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifnotinfo" end="^@end ifnotinfo\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifnottex" end="^@end ifnottex\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@ifset" end="^@end ifset\s*$" contains=ALL
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@iftex" end="^@end iftex\s*$" contains=ALL
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@set " skip="\\$" end="$" contains=texinfoSpecialChar oneline
+syn region texinfoTexCmd start="\$\$" end="\$\$" contained
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@tex" end="^@end tex\s*$" contains=texinfoTexCmd
+syn region texinfoBrcPrmAtCmd matchgroup=texinfoAtCmd start="@value{" end="}" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+
+
+"internationalization (chap. 17 in Texinfo manual)
+syn match texinfoAtCmd "@documentencoding" nextgroup=texinfoSinglePar skipwhite
+syn match texinfoAtCmd "@documentlanguage" nextgroup=texinfoIndexPar skipwhite
+
+
+"defining new texinfo commands (chap. 18 in Texinfo manual)
+syn match texinfoAtCmd "@alias" nextgroup=texinfoAssignment skipwhite
+syn match texinfoDIEPar "\S*\s*,\s*\S*\s*,\s*\S*\s*$" contained
+syn match texinfoAtCmd "@definfoenclose" nextgroup=texinfoDIEPar skipwhite
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@macro" end="^@end macro\s*$" contains=ALL
+
+
+"formatting hardcopy (chap. 19 in Texinfo manual)
+syn match texinfoAtCmd "^@afourlatex\s*$"
+syn match texinfoAtCmd "^@afourpaper\s*$"
+syn match texinfoAtCmd "^@afourwide\s*$"
+syn match texinfoAtCmd "^@finalout\s*$"
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@pagesizes" end="$" oneline
+
+
+"creating and installing Info Files (chap. 20 in Texinfo manual)
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@dircategory" skip="\\$" end="$" oneline
+syn region texinfoMltlnAtCmd matchgroup=texinfoAtCmd start="^@direntry\s*$" end="^@end direntry\s*$" contains=texinfoSpecialChar
+syn match texinfoAtCmd "^@novalidate\s*$"
+
+
+"include files (appendix E in Texinfo manual)
+syn match texinfoAtCmd "^@include" nextgroup=texinfoSinglePar skipwhite
+
+
+"page headings (appendix F in Texinfo manual)
+syn match texinfoHFSpecialChar "@|" contained
+syn match texinfoThisAtCmd "@thischapter" contained
+syn match texinfoThisAtCmd "@thischaptername" contained
+syn match texinfoThisAtCmd "@thisfile" contained
+syn match texinfoThisAtCmd "@thispage" contained
+syn match texinfoThisAtCmd "@thistitle" contained
+syn match texinfoThisAtCmd "@today{}" contained
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@evenfooting" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@evenheading" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@everyfooting" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@everyheading" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@oddfooting" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+syn region texinfoPrmAtCmd matchgroup=texinfoAtCmd start="^@oddheading" skip="\\$" end="$" contains=texinfoSpecialChar,texinfoBrcPrmAtCmd,texinfoThisAtCmd,texinfoHFSpecialChar oneline
+
+
+"refilling paragraphs (appendix H in Texinfo manual)
+syn match texinfoAtCmd "@refill"
+
+
+syn cluster texinfoAll contains=ALLBUT,{texinfoThisAtCmd,texinfoHFSpecialChar}
+syn cluster texinfoReducedAll contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
+"==============================================================================
+" 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_texinfo_syn_inits")
+
+ if version < 508
+ let did_texinfo_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink texinfoSpecialChar Special
+ HiLink texinfoHFSpecialChar Special
+
+ HiLink texinfoError Error
+ HiLink texinfoIdent Identifier
+ HiLink texinfoAssignment Identifier
+ HiLink texinfoSinglePar Identifier
+ HiLink texinfoIndexPar Identifier
+ HiLink texinfoSIPar Identifier
+ HiLink texinfoDIEPar Identifier
+ HiLink texinfoTexCmd PreProc
+
+
+ HiLink texinfoAtCmd Statement "@-command
+ HiLink texinfoPrmAtCmd String "@-command in one line with unknown nr. of parameters
+ "is String because is found as a region and is 'matchgroup'-ed
+ "to texinfoAtCmd
+ HiLink texinfoBrcPrmAtCmd String "@-command with parameter(s) in braces ({})
+ "is String because is found as a region and is 'matchgroup'-ed to texinfoAtCmd
+ HiLink texinfoMltlnAtCmdFLine texinfoAtCmd "repeated embedded First lines in @-commands
+ HiLink texinfoMltlnAtCmd String "@-command in multiple lines
+ "is String because is found as a region and is 'matchgroup'-ed to texinfoAtCmd
+ HiLink texinfoMltln2AtCmd PreProc "@-command in multiple lines (same as texinfoMltlnAtCmd, just with other colors)
+ HiLink texinfoMltlnDMAtCmd PreProc "@-command in multiple lines (same as texinfoMltlnAtCmd, just with other colors; used for @detailmenu, which can be included in @menu)
+ HiLink texinfoMltlnNAtCmd Normal "@-command in multiple lines (same as texinfoMltlnAtCmd, just with other colors)
+ HiLink texinfoThisAtCmd Statement "@-command used in headers and footers (@this... series)
+
+ HiLink texinfoComment Comment
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "texinfo"
+
+if main_syntax == 'texinfo'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/texmf.vim b/runtime/syntax/texmf.vim
new file mode 100644
index 000000000..7b91168f0
--- /dev/null
+++ b/runtime/syntax/texmf.vim
@@ -0,0 +1,86 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: Web2C TeX texmf.cnf configuration file
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2001-05-13
+" URL: http://physics.muni.cz/~yeti/download/syntax/texmf.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+syn case match
+
+" Comments
+syn match texmfComment "%..\+$" contains=texmfTodo
+syn match texmfComment "%\s*$" contains=texmfTodo
+syn keyword texmfTodo TODO FIXME XXX NOT contained
+
+" Constants and parameters
+syn match texmfPassedParameter "[-+]\=%\w\W"
+syn match texmfPassedParameter "[-+]\=%\w$"
+syn match texmfNumber "\<\d\+\>"
+syn match texmfVariable "\$\(\w\k*\|{\w\k*}\)"
+syn match texmfSpecial +\\"\|\\$+
+syn region texmfString start=+"+ end=+"+ skip=+\\"\\\\+ contains=texmfVariable,texmfSpecial,texmfPassedParameter
+
+" Assignments
+syn match texmfLHSStart "^\s*\w\k*" nextgroup=texmfLHSDot,texmfEquals
+syn match texmfLHSVariable "\w\k*" contained nextgroup=texmfLHSDot,texmfEquals
+syn match texmfLHSDot "\." contained nextgroup=texmfLHSVariable
+syn match texmfEquals "\s*=" contained
+
+" Specialities
+syn match texmfComma "," contained
+syn match texmfColons ":\|;"
+syn match texmfDoubleExclam "!!" contained
+
+" Catch errors caused by wrong parenthesization
+syn region texmfBrace matchgroup=texmfBraceBrace start="{" end="}" contains=ALLBUT,texmfTodo,texmfBraceError,texmfLHSVariable,texmfLHSDot transparent
+syn match texmfBraceError "}"
+
+" Define the default highlighting
+if version >= 508 || !exists("did_texmf_syntax_inits")
+ if version < 508
+ let did_texmf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink texmfComment Comment
+ HiLink texmfTodo Todo
+
+ HiLink texmfPassedParameter texmfVariable
+ HiLink texmfVariable Identifier
+
+ HiLink texmfNumber Number
+ HiLink texmfString String
+
+ HiLink texmfLHSStart texmfLHS
+ HiLink texmfLHSVariable texmfLHS
+ HiLink texmfLHSDot texmfLHS
+ HiLink texmfLHS Type
+
+ HiLink texmfEquals Normal
+
+ HiLink texmfBraceBrace texmfDelimiter
+ HiLink texmfComma texmfDelimiter
+ HiLink texmfColons texmfDelimiter
+ HiLink texmfDelimiter Preproc
+
+ HiLink texmfDoubleExclam Statement
+ HiLink texmfSpecial Special
+
+ HiLink texmfBraceError texmfError
+ HiLink texmfError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "texmf"
diff --git a/runtime/syntax/tf.vim b/runtime/syntax/tf.vim
new file mode 100644
index 000000000..2a9a99988
--- /dev/null
+++ b/runtime/syntax/tf.vim
@@ -0,0 +1,209 @@
+" Vim syntax file
+" Language: tf
+" Maintainer: Lutz Eymers <ixtab@polzin.com>
+" URL: http://www.isp.de/data/tf.vim
+" Email: send syntax_vim.tgz
+" Last Change: 2001 May 10
+"
+" Options lite_minlines = x to sync at least x lines backwards
+
+" Remove any old syntax stuff hanging around
+
+" 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 match
+
+if !exists("main_syntax")
+ let main_syntax = 'tf'
+endif
+
+" Special global variables
+syn keyword tfVar HOME LANG MAIL SHELL TERM TFHELP TFLIBDIR TFLIBRARY TZ contained
+syn keyword tfVar background backslash contained
+syn keyword tfVar bamf bg_output borg clearfull cleardone clock connect contained
+syn keyword tfVar emulation end_color gag gethostbyname gpri hook hilite contained
+syn keyword tfVar hiliteattr histsize hpri insert isize istrip kecho contained
+syn keyword tfVar kprefix login lp lpquote maildelay matching max_iter contained
+syn keyword tfVar max_recur mecho more mprefix oldslash promt_sec contained
+syn keyword tfVar prompt_usec proxy_host proxy_port ptime qecho qprefix contained
+syn keyword tfVar quite quitdone redef refreshtime scroll shpause snarf sockmload contained
+syn keyword tfVar start_color tabsize telopt sub time_format visual contained
+syn keyword tfVar watch_dog watchname wordpunct wrap wraplog wrapsize contained
+syn keyword tfVar wrapspace contained
+
+" Worldvar
+syn keyword tfWorld world_name world_character world_password world_host contained
+syn keyword tfWorld world_port world_mfile world_type contained
+
+" Number
+syn match tfNumber "-\=\<\d\+\>"
+
+" Float
+syn match tfFloat "\(-\=\<\d+\|-\=\)\.\d\+\>"
+
+" Operator
+syn match tfOperator "[-+=?:&|!]"
+syn match tfOperator "/[^*~@]"he=e-1
+syn match tfOperator ":="
+syn match tfOperator "[^/%]\*"hs=s+1
+syn match tfOperator "$\+[([{]"he=e-1,me=e-1
+syn match tfOperator "\^\[\+"he=s+1 contains=tfSpecialCharEsc
+
+" Relational
+syn match tfRelation "&&"
+syn match tfRelation "||"
+syn match tfRelation "[<>/!=]="
+syn match tfRelation "[<>]"
+syn match tfRelation "[!=]\~"
+syn match tfRelation "[=!]/"
+
+
+" Readonly Var
+syn match tfReadonly "[#*]" contained
+syn match tfReadonly "\<-\=L\=\d\{-}\>" contained
+syn match tfReadonly "\<P\(\d\+\|R\|L\)\>" contained
+syn match tfReadonly "\<R\>" contained
+
+" Identifier
+syn match tfIdentifier "%\+[a-zA-Z_#*-0-9]\w*" contains=tfVar,tfReadonly
+syn match tfIdentifier "%\+[{]"he=e-1,me=e-1
+syn match tfIdentifier "\$\+{[a-zA-Z_#*-0-9]\w*}" contains=tfWorld
+
+" Function names
+syn keyword tfFunctions ascii char columns echo filename ftime fwrite getopts
+syn keyword tfFunctions getpid idle kbdel kbgoto kbhead kblen kbmatch kbpoint
+syn keyword tfFunctions kbtail kbwordleft kbwordright keycode lines mod
+syn keyword tfFunctions moresize pad rand read regmatch send strcat strchr
+syn keyword tfFunctions strcmp strlen strncmp strrchr strrep strstr substr
+syn keyword tfFunctions systype time tolower toupper
+
+syn keyword tfStatement addworld bamf beep bind break cat changes connect contained
+syn keyword tfStatement dc def dokey echo edit escape eval export expr fg for contained
+syn keyword tfStatement gag getfile grab help hilite histsize hook if input contained
+syn keyword tfStatement kill lcd let list listsockets listworlds load contained
+syn keyword tfStatement localecho log nohilite not partial paste ps purge contained
+syn keyword tfStatement purgeworld putfile quit quote recall recordline save contained
+syn keyword tfStatement saveworld send sh shift sub substitute contained
+syn keyword tfStatement suspend telnet test time toggle trig trigger unbind contained
+syn keyword tfStatement undef undefn undeft unhook untrig unworld contained
+syn keyword tfStatement version watchdog watchname while world contained
+
+" Hooks
+syn keyword tfHook ACTIVITY BACKGROUND BAMF CONFAIL CONFLICT CONNECT DISCONNECT
+syn keyword tfHook KILL LOAD LOADFAIL LOG LOGIN MAIL MORE PENDING PENDING
+syn keyword tfHook PROCESS PROMPT PROXY REDEF RESIZE RESUME SEND SHADOW SHELL
+syn keyword tfHook SIGHUP SIGTERM SIGUSR1 SIGUSR2 WORLD
+
+" Conditional
+syn keyword tfConditional if endif then else elseif contained
+
+" Repeat
+syn keyword tfRepeat while do done repeat for contained
+
+" Statement
+syn keyword tfStatement break quit contained
+
+" Include
+syn keyword tfInclude require load save loaded contained
+
+" Define
+syn keyword tfDefine bind unbind def undef undefn undefn purge hook unhook trig untrig contained
+syn keyword tfDefine set unset setenv contained
+
+" Todo
+syn keyword tfTodo TODO Todo todo contained
+
+" SpecialChar
+syn match tfSpecialChar "\\[abcfnrtyv\\]" contained
+syn match tfSpecialChar "\\\d\{3}" contained contains=tfOctalError
+syn match tfSpecialChar "\\x[0-9a-fA-F]\{2}" contained
+syn match tfSpecialCharEsc "\[\+" contained
+
+syn match tfOctalError "[89]" contained
+
+" Comment
+syn region tfComment start="^;" end="$" contains=tfTodo
+
+" String
+syn region tfString oneline matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tfIdentifier,tfSpecialChar,tfEscape
+syn region tfString matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tfIdentifier,tfSpecialChar,tfEscape
+
+syn match tfParentError "[)}\]]"
+
+" Parents
+syn region tfParent matchgroup=Delimiter start="(" end=")" contains=ALLBUT,tfReadonly
+syn region tfParent matchgroup=Delimiter start="\[" end="\]" contains=ALL
+syn region tfParent matchgroup=Delimiter start="{" end="}" contains=ALL
+
+syn match tfEndCommand "%%\{-};"
+syn match tfJoinLines "\\$"
+
+" Types
+
+syn match tfType "/[a-zA-Z_~@][a-zA-Z0-9_]*" contains=tfConditional,tfRepeat,tfStatement,tfInclude,tfDefine,tfStatement
+
+" Catch /quote .. '
+syn match tfQuotes "/quote .\{-}'" contains=ALLBUT,tfString
+" Catch $(/escape )
+syn match tfEscape "(/escape .*)"
+
+" sync
+if exists("tf_minlines")
+ exec "syn sync minlines=" . tf_minlines
+else
+ syn sync minlines=100
+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_tf_syn_inits")
+ if version < 508
+ let did_tf_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tfComment Comment
+ HiLink tfString String
+ HiLink tfNumber Number
+ HiLink tfFloat Float
+ HiLink tfIdentifier Identifier
+ HiLink tfVar Identifier
+ HiLink tfWorld Identifier
+ HiLink tfReadonly Identifier
+ HiLink tfHook Identifier
+ HiLink tfFunctions Function
+ HiLink tfRepeat Repeat
+ HiLink tfConditional Conditional
+ HiLink tfLabel Label
+ HiLink tfStatement Statement
+ HiLink tfType Type
+ HiLink tfInclude Include
+ HiLink tfDefine Define
+ HiLink tfSpecialChar SpecialChar
+ HiLink tfSpecialCharEsc SpecialChar
+ HiLink tfParentError Error
+ HiLink tfTodo Todo
+ HiLink tfEndCommand Delimiter
+ HiLink tfJoinLines Delimiter
+ HiLink tfOperator Operator
+ HiLink tfRelation Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tf"
+
+if main_syntax == 'tf'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/tidy.vim b/runtime/syntax/tidy.vim
new file mode 100644
index 000000000..06518033b
--- /dev/null
+++ b/runtime/syntax/tidy.vim
@@ -0,0 +1,153 @@
+" Vim syntax file
+" Filename: tidy.vim
+" Language: HMTL Tidy configuration file ( /etc/tidyrc ~/.tidyrc )
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/tidy.vim
+" Last Change: 2002 Oct 24
+
+" 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
+
+if version < 600
+ set iskeyword=@,48-57,-
+else
+ setlocal iskeyword=@,48-57,-
+endif
+
+syn match tidyComment "^\s*//.*$" contains=tidyTodo
+syn match tidyComment "^\s*#.*$" contains=tidyTodo
+syn keyword tidyTodo TODO NOTE FIXME XXX contained
+
+syn match tidyAssignment "^[a-z0-9-]\+:\s*.*$" contains=tidyOption,@tidyValue,tidyDelimiter
+syn match tidyDelimiter ":" contained
+
+syn match tidyNewTagAssignment "^new-\l\+-tags:\s*.*$" contains=tidyNewTagOption,tidyNewTagDelimiter,tidyNewTagValue,tidyDelimiter
+syn match tidyNewTagDelimiter "," contained
+syn match tidyNewTagValue "\<\w\+\>" contained
+
+syn case ignore
+syn keyword tidyBoolean t[rue] f[alse] y[es] n[o] contained
+syn case match
+syn match tidyDoctype "\<omit\|auto\|strict\|loose\|transitional\>" contained
+" NOTE: use match rather than keyword here so that tidyEncoding raw does not always have precedence over tidyOption raw
+syn match tidyEncoding "\<\(ascii\|latin1\|raw\|utf8\|iso2022\|mac\|utf16le\|utf16be\|utf16\|win1252\|big5\|shiftjis\)\>" contained
+syn match tidyNumber "\<\d\+\>" contained
+syn match tidyRepeat "\<keep-first\|keep-last\>" contained
+syn region tidyString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
+syn region tidyString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
+syn cluster tidyValue contains=tidyBoolean,tidyDoctype,tidyEncoding,tidyNumber,tidyRepeat,tidyString
+
+syn match tidyOption "^accessibility-check" contained
+syn match tidyOption "^add-xml-decl" contained
+syn match tidyOption "^add-xml-pi" contained
+syn match tidyOption "^add-xml-space" contained
+syn match tidyOption "^alt-text" contained
+syn match tidyOption "^ascii-chars" contained
+syn match tidyOption "^assume-xml-procins" contained
+syn match tidyOption "^bare" contained
+syn match tidyOption "^break-before-br" contained
+syn match tidyOption "^char-encoding" contained
+syn match tidyOption "^clean" contained
+syn match tidyOption "^css-prefix" contained
+syn match tidyOption "^doctype" contained
+syn match tidyOption "^drop-empty-paras" contained
+syn match tidyOption "^drop-font-tags" contained
+syn match tidyOption "^drop-proprietary-attributes" contained
+syn match tidyOption "^enclose-block-text" contained
+syn match tidyOption "^enclose-text" contained
+syn match tidyOption "^error-file" contained
+syn match tidyOption "^escape-cdata" contained
+syn match tidyOption "^fix-backslash" contained
+syn match tidyOption "^fix-bad-comments" contained
+syn match tidyOption "^fix-uri" contained
+syn match tidyOption "^force-output" contained
+syn match tidyOption "^gnu-emacs" contained
+syn match tidyOption "^hide-comments" contained
+syn match tidyOption "^hide-endtags" contained
+syn match tidyOption "^indent" contained
+syn match tidyOption "^indent-attributes" contained
+syn match tidyOption "^indent-cdata" contained
+syn match tidyOption "^indent-spaces" contained
+syn match tidyOption "^input-encoding" contained
+syn match tidyOption "^input-xml" contained
+syn match tidyOption "^join-classes" contained
+syn match tidyOption "^join-styles" contained
+syn match tidyOption "^keep-time" contained
+syn match tidyOption "^language" contained
+syn match tidyOption "^literal-attributes" contained
+syn match tidyOption "^logical-emphasis" contained
+syn match tidyOption "^lower-literals" contained
+syn match tidyOption "^markup" contained
+syn match tidyOption "^ncr" contained
+syn match tidyOption "^numeric-entities" contained
+syn match tidyOption "^output-bom" contained
+syn match tidyOption "^output-encoding" contained
+syn match tidyOption "^output-html" contained
+syn match tidyOption "^output-xhtml" contained
+syn match tidyOption "^output-xml" contained
+syn match tidyOption "^quiet" contained
+syn match tidyOption "^quote-ampersand" contained
+syn match tidyOption "^quote-marks" contained
+syn match tidyOption "^quote-nbsp" contained
+syn match tidyOption "^raw" contained
+syn match tidyOption "^repeated-attributes" contained
+syn match tidyOption "^replace-color" contained
+syn match tidyOption "^show-body-only" contained
+syn match tidyOption "^show-errors" contained
+syn match tidyOption "^show-warnings" contained
+syn match tidyOption "^slide-style" contained
+syn match tidyOption "^split" contained
+syn match tidyOption "^tab-size" contained
+syn match tidyOption "^tidy-mark" contained
+syn match tidyOption "^uppercase-attributes" contained
+syn match tidyOption "^uppercase-tags" contained
+syn match tidyOption "^word-2000" contained
+syn match tidyOption "^wrap" contained
+syn match tidyOption "^wrap-asp" contained
+syn match tidyOption "^wrap-attributes" contained
+syn match tidyOption "^wrap-jste" contained
+syn match tidyOption "^wrap-php" contained
+syn match tidyOption "^wrap-script-literals" contained
+syn match tidyOption "^wrap-sections" contained
+syn match tidyOption "^write-back" contained
+syn match tidyNewTagOption "^new-blocklevel-tags" contained
+syn match tidyNewTagOption "^new-empty-tags" contained
+syn match tidyNewTagOption "^new-inline-tags" contained
+syn match tidyNewTagOption "^new-pre-tags" contained
+
+" 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_tidy_syn_inits")
+ if version < 508
+ let did_tidy_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tidyBoolean Boolean
+ HiLink tidyComment Comment
+ HiLink tidyDelimiter Special
+ HiLink tidyDoctype Constant
+ HiLink tidyEncoding Constant
+ HiLink tidyNewTagDelimiter Special
+ HiLink tidyNewTagOption Identifier
+ HiLink tidyNewTagValue Constant
+ HiLink tidyNumber Number
+ HiLink tidyOption Identifier
+ HiLink tidyRepeat Constant
+ HiLink tidyString String
+ HiLink tidyTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tidy"
+
+" vim: ts=8
diff --git a/runtime/syntax/tilde.vim b/runtime/syntax/tilde.vim
new file mode 100644
index 000000000..568805013
--- /dev/null
+++ b/runtime/syntax/tilde.vim
@@ -0,0 +1,41 @@
+" Vim syntax file
+" This file works only for Vim6.x
+" Language: Tilde
+" Maintainer: Tobias Rundström <tobi@tildesoftware.net>
+" URL: http://www.tildesoftware.net
+" CVS: $Id$
+
+if exists("b:current_syntax")
+ finish
+endif
+
+"tilde dosent care ...
+syn case ignore
+
+syn match tildeFunction "\~[a-z_0-9]\+"ms=s+1
+syn region tildeParen start="(" end=")" contains=tildeString,tildeNumber,tildeVariable,tildeField,tildeSymtab,tildeFunction,tildeParen,tildeHexNumber,tildeOperator
+syn region tildeString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ keepend
+syn region tildeString contained start=+'+ skip=+\\\\\|\\"+ end=+'+ keepend
+syn match tildeNumber "\d" contained
+syn match tildeOperator "or\|and" contained
+syn match tildeHexNumber "0x[a-z0-9]\+" contained
+syn match tildeVariable "$[a-z_0-9]\+" contained
+syn match tildeField "%[a-z_0-9]\+" contained
+syn match tildeSymtab "@[a-z_0-9]\+" contained
+syn match tildeComment "^#.*"
+syn region tildeCurly start=+{+ end=+}+ contained contains=tildeLG,tildeString,tildeNumber,tildeVariable,tildeField,tildeFunction,tildeSymtab,tildeHexNumber
+syn match tildeLG "=>" contained
+
+
+hi def link tildeComment Comment
+hi def link tildeFunction Operator
+hi def link tildeOperator Operator
+hi def link tildeString String
+hi def link tildeNumber Number
+hi def link tildeHexNumber Number
+hi def link tildeVariable Identifier
+hi def link tildeField Identifier
+hi def link tildeSymtab Identifier
+hi def link tildeError Error
+
+let b:current_syntax = "tilde"
diff --git a/runtime/syntax/tli.vim b/runtime/syntax/tli.vim
new file mode 100644
index 000000000..5685a6cbf
--- /dev/null
+++ b/runtime/syntax/tli.vim
@@ -0,0 +1,71 @@
+" Vim syntax file
+" Language: TealInfo source files (*.tli)
+" Maintainer: Kurt W. Andrews <kandrews@fastrans.net>
+" Last Change: 2001 May 10
+" Version: 1.0
+
+" 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
+
+" TealInfo Objects
+
+syn keyword tliObject LIST POPLIST WINDOW POPWINDOW OUTLINE CHECKMARK GOTO
+syn keyword tliObject LABEL IMAGE RECT TRES PASSWORD POPEDIT POPIMAGE CHECKLIST
+
+" TealInfo Fields
+
+syn keyword tliField X Y W H BX BY BW BH SX SY FONT BFONT CYCLE DELAY TABS
+syn keyword tliField STYLE BTEXT RECORD DATABASE KEY TARGET DEFAULT TEXT
+syn keyword tliField LINKS MAXVAL
+
+" TealInfo Styles
+
+syn keyword tliStyle INVERTED HORIZ_RULE VERT_RULE NO_SCROLL NO_BORDER BOLD_BORDER
+syn keyword tliStyle ROUND_BORDER ALIGN_RIGHT ALIGN_CENTER ALIGN_LEFT_START ALIGN_RIGHT_START
+syn keyword tliStyle ALIGN_CENTER_START ALIGN_LEFT_END ALIGN_RIGHT_END ALIGN_CENTER_END
+syn keyword tliStyle LOCKOUT BUTTON_SCROLL BUTTON_SELECT STROKE_FIND FILLED REGISTER
+
+" String and Character constants
+
+syn match tliSpecial "@"
+syn region tliString start=+"+ end=+"+
+
+"TealInfo Numbers, identifiers and comments
+
+syn case ignore
+syn match tliNumber "\d*"
+syn match tliIdentifier "\<\h\w*\>"
+syn match tliComment "#.*"
+syn case match
+
+" 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_tli_syntax_inits")
+ if version < 508
+ let did_tli_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tliNumber Number
+ HiLink tliString String
+ HiLink tliComment Comment
+ HiLink tliSpecial SpecialChar
+ HiLink tliIdentifier Identifier
+ HiLink tliObject Statement
+ HiLink tliField Type
+ HiLink tliStyle PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tli"
+
+" vim: ts=8
diff --git a/runtime/syntax/trasys.vim b/runtime/syntax/trasys.vim
new file mode 100644
index 000000000..cfecc1c1f
--- /dev/null
+++ b/runtime/syntax/trasys.vim
@@ -0,0 +1,177 @@
+" Vim syntax file
+" Language: TRASYS input file
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.inp
+" URL: http://www.naglenet.org/vim/syntax/trasys.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+" Force free-form fortran format
+let fortran_free_source=1
+
+" Load FORTRAN syntax file
+if version < 600
+ source <sfile>:p:h/fortran.vim
+else
+ runtime! syntax/fortran.vim
+endif
+unlet b:current_syntax
+
+
+" Ignore case
+syn case ignore
+
+
+
+" Define keywords for TRASYS
+syn keyword trasysOptions model rsrec info maxfl nogo dmpdoc
+syn keyword trasysOptions rsi rti rso rto bcdou cmerg emerg
+syn keyword trasysOptions user1 nnmin erplot
+
+syn keyword trasysSurface icsn tx ty tz rotx roty rotz inc bcsn
+syn keyword trasysSurface nnx nny nnz nnax nnr nnth unnx
+syn keyword trasysSurface unny unnz unnax unnr unnth type idupsf
+syn keyword trasysSurface imagsf act active com shade bshade axmin
+syn keyword trasysSurface axmax zmin zmax rmin rmax thmin thmin
+syn keyword trasysSurface thmax alpha emiss trani trans spri sprs
+syn keyword trasysSurface refno posit com dupbcs dimensions
+syn keyword trasysSurface dimension position prop surfn
+
+syn keyword trasysSurfaceType rect trap disk cyl cone sphere parab
+syn keyword trasysSurfaceType box5 box6 shpero tor ogiv elem tape poly
+
+syn keyword trasysSurfaceArgs ff di top bottom in out both no only
+
+syn keyword trasysArgs fig smn nodea zero only ir sol
+syn keyword trasysArgs both wband stepn initl
+
+syn keyword trasysOperations orbgen build
+
+"syn keyword trasysSubRoutine call
+syn keyword trasysSubRoutine chgblk ndata ndatas odata odatas
+syn keyword trasysSubRoutine pldta ffdata cmdata adsurf rbdata
+syn keyword trasysSubRoutine rtdata pffshd orbit1 orbit2 orient
+syn keyword trasysSubRoutine didt1 didt1s didt2 didt2s spin
+syn keyword trasysSubRoutine spinav dicomp distab drdata gbdata
+syn keyword trasysSubRoutine gbaprx rkdata rcdata aqdata stfaq
+syn keyword trasysSubRoutine qodata qoinit modar modpr modtr
+syn keyword trasysSubRoutine modprs modshd moddat rstoff rston
+syn keyword trasysSubRoutine rsmerg ffread diread ffusr1 diusr1
+syn keyword trasysSubRoutine surfp didt3 didt3s romain stfrc
+syn keyword trasysSubRoutine rornt rocstr romove flxdata title
+
+syn keyword trassyPrcsrSegm nplot oplot plot cmcal ffcal rbcal
+syn keyword trassyPrcsrSegm rtcal dical drcal sfcal gbcal rccal
+syn keyword trassyPrcsrSegm rkcal aqcal qocal
+
+
+
+" Define matches for TRASYS
+syn match trasysOptions "list source"
+syn match trasysOptions "save source"
+syn match trasysOptions "no print"
+
+"syn match trasysSurface "^K *.* [^$]"
+"syn match trasysSurface "^D *[0-9]*\.[0-9]\+"
+"syn match trasysSurface "^I *.*[0-9]\+\.\="
+"syn match trasysSurface "^N *[0-9]\+"
+"syn match trasysSurface "^M *[a-z[A-Z0-9]\+"
+"syn match trasysSurface "^B[C][S] *[a-zA-Z0-9]*"
+"syn match trasysSurface "^S *SURFN.*[0-9]"
+syn match trasysSurface "P[0-9]* *="he=e-1
+
+syn match trasysIdentifier "^L "he=e-1
+syn match trasysIdentifier "^K "he=e-1
+syn match trasysIdentifier "^D "he=e-1
+syn match trasysIdentifier "^I "he=e-1
+syn match trasysIdentifier "^N "he=e-1
+syn match trasysIdentifier "^M "he=e-1
+syn match trasysIdentifier "^B[C][S]"
+syn match trasysIdentifier "^S "he=e-1
+
+syn match trasysComment "^C.*$"
+syn match trasysComment "^R.*$"
+syn match trasysComment "\$.*$"
+
+syn match trasysHeader "^header[^,]*"
+
+syn match trasysMacro "^FAC"
+
+syn match trasysInteger "-\=\<[0-9]*\>"
+syn match trasysFloat "-\=\<[0-9]*\.[0-9]*"
+syn match trasysScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+syn match trasysBlank "' \+'"hs=s+1,he=e-1
+
+syn match trasysEndData "^END OF DATA"
+
+if exists("thermal_todo")
+ execute 'syn match trasysTodo ' . '"^'.thermal_todo.'.*$"'
+else
+ syn match trasysTodo "^?.*$"
+endif
+
+
+
+" Define regions for TRASYS
+syn region trasysComment matchgroup=trasysHeader start="^HEADER DOCUMENTATION DATA" end="^HEADER[^,]*"
+
+
+
+" Define synchronizing patterns for TRASYS
+syn sync maxlines=500
+syn sync match trasysSync grouphere trasysComment "^HEADER DOCUMENTATION DATA"
+
+
+
+" 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_trasys_syntax_inits")
+ if version < 508
+ let did_trasys_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink trasysOptions Special
+ HiLink trasysSurface Special
+ HiLink trasysSurfaceType Constant
+ HiLink trasysSurfaceArgs Constant
+ HiLink trasysArgs Constant
+ HiLink trasysOperations Statement
+ HiLink trasysSubRoutine Statement
+ HiLink trassyPrcsrSegm PreProc
+ HiLink trasysIdentifier Identifier
+ HiLink trasysComment Comment
+ HiLink trasysHeader Typedef
+ HiLink trasysMacro Macro
+ HiLink trasysInteger Number
+ HiLink trasysFloat Float
+ HiLink trasysScientific Float
+
+ HiLink trasysBlank SpecialChar
+
+ HiLink trasysEndData Macro
+
+ HiLink trasysTodo Todo
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "trasys"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/tsalt.vim b/runtime/syntax/tsalt.vim
new file mode 100644
index 000000000..56f17558b
--- /dev/null
+++ b/runtime/syntax/tsalt.vim
@@ -0,0 +1,214 @@
+" Vim syntax file
+" Language: Telix (Modem Comm Program) SALT Script
+" Maintainer: Sean M. McKee <mckee@misslink.net>
+" Last Change: 2001 May 09
+" Version Info: @(#)tsalt.vim 1.5 97/12/16 08:11:15
+
+" 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
+
+" turn case matching off
+syn case ignore
+
+"FUNCTIONS
+" Character Handling Functions
+syn keyword tsaltFunction IsAscii IsAlNum IsAlpha IsCntrl IsDigit
+syn keyword tsaltFunction IsLower IsUpper ToLower ToUpper
+
+" Connect Device Operations
+syn keyword tsaltFunction Carrier cInp_Cnt cGetC cGetCT cPutC cPutN
+syn keyword tsaltFunction cPutS cPutS_TR FlushBuf Get_Baud
+syn keyword tsaltFunction Get_DataB Get_Port Get_StopB Hangup
+syn keyword tsaltFunction KillConnectDevice MakeConnectDevice
+syn keyword tsaltFunction Send_Brk Set_ConnectDevice Set_Port
+
+" File Input/Output Operations
+syn keyword tsaltFunction fClearErr fClose fDelete fError fEOF fFlush
+syn keyword tsaltFunction fGetC fGetS FileAttr FileFind FileSize
+syn keyword tsaltFunction FileTime fnStrip fOpen fPutC fPutS fRead
+syn keyword tsaltFunction fRename fSeek fTell fWrite
+
+" File Transfers and Logs
+syn keyword tsaltFunction Capture Capture_Stat Printer Receive Send
+syn keyword tsaltFunction Set_DefProt UsageLog Usage_Stat UStamp
+
+" Input String Matching
+syn keyword tsaltFunction Track Track_AddChr Track_Free Track_Hit
+syn keyword tsaltFunction WaitFor
+
+" Keyboard Operations
+syn keyword tsaltFunction InKey InKeyW KeyGet KeyLoad KeySave KeySet
+
+" Miscellaneous Functions
+syn keyword tsaltFunction ChatMode Dos Dial DosFunction ExitTelix
+syn keyword tsaltFunction GetEnv GetFon HelpScreen LoadFon NewDir
+syn keyword tsaltFunction Randon Redial RedirectDOS Run
+syn keyword tsaltFunction Set_Terminal Show_Directory TelixVersion
+syn keyword tsaltFunction Terminal TransTab Update_Term
+
+" Script Management
+syn keyword tsaltFunction ArgCount Call CallD CompileScript GetRunPath
+syn keyword tsaltFunction Is_Loaded Load_Scr ScriptVersion
+syn keyword tsaltFunction TelixForWindows Unload_Scr
+
+" Sound Functions
+syn keyword tsaltFunction Alarm PlayWave Tone
+
+" String Handling
+syn keyword tsaltFunction CopyChrs CopyStr DelChrs GetS GetSXY
+syn keyword tsaltFunction InputBox InsChrs ItoS SetChr StoI StrCat
+syn keyword tsaltFunction StrChr StrCompI StrLen StrLower StrMaxLen
+syn keyword tsaltFunction StrPos StrPosI StrUpper SubChr SubChrs
+syn keyword tsaltFunction SubStr
+
+" Time, Date, and Timer Operations
+syn keyword tsaltFunction CurTime Date Delay Delay_Scr Get_OnlineTime
+syn keyword tsaltFunction tDay tHour tMin tMonth tSec tYear Time
+syn keyword tsaltFunction Time_Up Timer_Free Time_Restart
+syn keyword tsaltFunction Time_Start Time_Total
+
+" Video Operations
+syn keyword tsaltFunction Box CNewLine Cursor_OnOff Clear_Scr
+syn keyword tsaltFunction GetTermHeight GetTermWidth GetX GetY
+syn keyword tsaltFunction GotoXY MsgBox NewLine PrintC PrintC_Trm
+syn keyword tsaltFunction PrintN PrintN_Trm PrintS PrintS_Trm
+syn keyword tsaltFunction PrintSC PRintSC_Trm
+syn keyword tsaltFunction PStrA PStrAXY Scroll Status_Wind vGetChr
+syn keyword tsaltFunction vGetChrs vGetChrsA vPutChr vPutChrs
+syn keyword tsaltFunction vPutChrsA vRstrArea vSaveArea
+
+" Dynamic Data Exchange (DDE) Operations
+syn keyword tsaltFunction DDEExecute DDEInitate DDEPoke DDERequest
+syn keyword tsaltFunction DDETerminate DDETerminateAll
+"END FUNCTIONS
+
+"PREDEFINED VARAIABLES
+syn keyword tsaltSysVar _add_lf _alarm_on _answerback_str _asc_rcrtrans
+syn keyword tsaltSysVar _asc_remabort _asc_rlftrans _asc_scpacing
+syn keyword tsaltSysVar _asc_scrtrans _asc_secho _asc_slpacing
+syn keyword tsaltSysVar _asc_spacechr _asc_striph _back_color
+syn keyword tsaltSysVar _capture_fname _connect_str _dest_bs
+syn keyword tsaltSysVar _dial_pause _dial_time _dial_post
+syn keyword tsaltSysVar _dial_pref1 _dial_pref2 _dial_pref3
+syn keyword tsaltSysVar _dial_pref4 _dir_prog _down_dir
+syn keyword tsaltSysVar _entry_bbstype _entry_comment _entry_enum
+syn keyword tsaltSysVar _entry_name _entry_num _entry_logonname
+syn keyword tsaltSysVar _entry_pass _fore_color _image_file
+syn keyword tsaltSysVar _local_echo _mdm_hang_str _mdm_init_str
+syn keyword tsaltSysVar _no_connect1 _no_connect2 _no_connect3
+syn keyword tsaltSysVar _no_connect4 _no_connect5 _redial_stop
+syn keyword tsaltSysVar _scr_chk_key _script_dir _sound_on
+syn keyword tsaltSysVar _strip_high _swap_bs _telix_dir _up_dir
+syn keyword tsaltSysVar _usage_fname _zmodauto _zmod_rcrash
+syn keyword tsaltSysVar _zmod_scrash
+"END PREDEFINED VARAIABLES
+
+"TYPE
+syn keyword tsaltType str int
+"END TYPE
+
+"KEYWORDS
+syn keyword tsaltStatement goto break return continue
+syn keyword tsaltConditional if then else
+syn keyword tsaltRepeat while for do
+"END KEYWORDS
+
+syn keyword tsaltTodo contained TODO
+
+" the rest is pretty close to C -----------------------------------------
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match tsaltSpecial contained "\^\d\d\d\|\^."
+syn region tsaltString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tsaltSpecial
+syn match tsaltCharacter "'[^\\]'"
+syn match tsaltSpecialCharacter "'\\.'"
+
+"catch errors caused by wrong parenthesis
+syn region tsaltParen transparent start='(' end=')' contains=ALLBUT,tsaltParenError,tsaltIncluded,tsaltSpecial,tsaltTodo
+syn match tsaltParenError ")"
+syn match tsaltInParen contained "[{}]"
+
+hi link tsaltParenError tsaltError
+hi link tsaltInParen tsaltError
+
+"integer number, or floating point number without a dot and with "f".
+syn match tsaltNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
+"floating point number, with dot, optional exponent
+syn match tsaltFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, starting with a dot, optional exponent
+syn match tsaltFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match tsaltFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
+"hex number
+syn match tsaltNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
+"syn match cIdentifier "\<[a-z_][a-z0-9_]*\>"
+
+syn region tsaltComment start="/\*" end="\*/" contains=cTodo
+syn match tsaltComment "//.*" contains=cTodo
+syn match tsaltCommentError "\*/"
+
+syn region tsaltPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tsaltComment,tsaltString,tsaltCharacter,tsaltNumber,tsaltCommentError
+syn region tsaltIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match tsaltIncluded contained "<[^>]*>"
+syn match tsaltInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=tsaltIncluded
+"syn match TelixSalyLineSkip "\\$"
+syn region tsaltDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tsaltPreCondit,tsaltIncluded,tsaltInclude,tsaltDefine,tsaltInParen
+syn region tsaltPreProc start="^[ \t]*#[ \t]*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tsaltPreCondit,tsaltIncluded,tsaltInclude,tsaltDefine,tsaltInParen
+
+" Highlight User Labels
+syn region tsaltMulti transparent start='?' end=':' contains=ALLBUT,tsaltIncluded,tsaltSpecial,tsaltTodo
+
+syn sync ccomment tsaltComment
+
+
+" 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_tsalt_syntax_inits")
+ if version < 508
+ let did_tsalt_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tsaltFunction Statement
+ HiLink tsaltSysVar Type
+ "HiLink tsaltLibFunc UserDefFunc
+ "HiLink tsaltConstants Type
+ "HiLink tsaltFuncArg Type
+ "HiLink tsaltOperator Operator
+ "HiLink tsaltLabel Label
+ "HiLink tsaltUserLabel Label
+ HiLink tsaltConditional Conditional
+ HiLink tsaltRepeat Repeat
+ HiLink tsaltCharacter SpecialChar
+ HiLink tsaltSpecialCharacter SpecialChar
+ HiLink tsaltNumber Number
+ HiLink tsaltFloat Float
+ HiLink tsaltCommentError tsaltError
+ HiLink tsaltInclude Include
+ HiLink tsaltPreProc PreProc
+ HiLink tsaltDefine Macro
+ HiLink tsaltIncluded tsaltString
+ HiLink tsaltError Error
+ HiLink tsaltStatement Statement
+ HiLink tsaltPreCondit PreCondit
+ HiLink tsaltType Type
+ HiLink tsaltString String
+ HiLink tsaltComment Comment
+ HiLink tsaltSpecial Special
+ HiLink tsaltTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "tsalt"
+
+" vim: ts=8
diff --git a/runtime/syntax/tsscl.vim b/runtime/syntax/tsscl.vim
new file mode 100644
index 000000000..3fc18c684
--- /dev/null
+++ b/runtime/syntax/tsscl.vim
@@ -0,0 +1,217 @@
+" Vim syntax file
+" Language: TSS (Thermal Synthesizer System) Command Line
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.tsscl
+" URL: http://www.naglenet.org/vim/syntax/tsscl.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for tss geomtery file.
+"
+
+" Load TSS geometry syntax file
+"source $VIM/myvim/tssgm.vim
+"source $VIMRUNTIME/syntax/c.vim
+
+" Define keywords for TSS
+syn keyword tssclCommand begin radk list heatrates attr draw
+
+syn keyword tssclKeyword cells rays error nodes levels objects cpu
+syn keyword tssclKeyword units length positions energy time unit solar
+syn keyword tssclKeyword solar_constant albedo planet_power
+
+syn keyword tssclEnd exit
+
+syn keyword tssclUnits cm feet meters inches
+syn keyword tssclUnits Celsius Kelvin Fahrenheit Rankine
+
+
+
+" Define matches for TSS
+syn match tssclString /"[^"]\+"/ contains=ALLBUT,tssInteger,tssclKeyword,tssclCommand,tssclEnd,tssclUnits
+
+syn match tssclComment "#.*$"
+
+" rational and logical operators
+" < Less than
+" > Greater than
+" <= Less than or equal
+" >= Greater than or equal
+" == or = Equal to
+" != Not equal to
+" && or & Logical AND
+" || or | Logical OR
+" ! Logical NOT
+"
+" algebraic operators:
+" ^ or ** Exponentation
+" * Multiplication
+" / Division
+" % Remainder
+" + Addition
+" - Subtraction
+"
+syn match tssclOper "||\||\|&&\|&\|!=\|!\|>=\|<=\|>\|<\|+\|-\|^\|\*\*\|\*\|/\|%\|==\|=\|\." skipwhite
+
+" CLI Directive Commands, with arguments
+"
+" BASIC COMMAND LIST
+" *ADD input_source
+" *ARITHMETIC { [ON] | OFF }
+" *CLOSE unit_number
+" *CPU
+" *DEFINE
+" *ECHO[/qualifiers] { [ON] | OFF }
+" *ELSE [IF { 0 | 1 } ]
+" *END { IF | WHILE }
+" *EXIT
+" *IF { 0 | 1 }
+" *LIST/n list variable
+" *OPEN[/r | /r+ | /w | /w+ ] unit_number file_name
+" *PROMPT prompt_string sybol_name
+" *READ/unit=unit_number[/LOCAL | /GLOBAL ] sym1 [sym2, [sym3 ...]]
+" *REWIND
+" *STOP
+" *STRCMP string_1 string_2 difference
+" *SYSTEM command
+" *UNDEFINE[/LOCAL][/GLOBAL] symbol_name
+" *WHILE { 0 | 1 }
+" *WRITE[/unit=unit_number] output text
+"
+syn match tssclDirective "\*ADD"
+syn match tssclDirective "\*ARITHMETIC \+\(ON\|OFF\)"
+syn match tssclDirective "\*CLOSE"
+syn match tssclDirective "\*CPU"
+syn match tssclDirective "\*DEFINE"
+syn match tssclDirective "\*ECHO"
+syn match tssclConditional "\*ELSE"
+syn match tssclConditional "\*END \+\(IF\|WHILE\)"
+syn match tssclDirective "\*EXIT"
+syn match tssclConditional "\*IF"
+syn match tssclDirective "\*LIST"
+syn match tssclDirective "\*OPEN"
+syn match tssclDirective "\*PROMPT"
+syn match tssclDirective "\*READ"
+syn match tssclDirective "\*REWIND"
+syn match tssclDirective "\*STOP"
+syn match tssclDirective "\*STRCMP"
+syn match tssclDirective "\*SYSTEM"
+syn match tssclDirective "\*UNDEFINE"
+syn match tssclConditional "\*WHILE"
+syn match tssclDirective "\*WRITE"
+
+syn match tssclContChar "-$"
+
+" C library functoins
+" Bessel functions (jn, yn)
+" Error and complementary error fuctions (erf, erfc)
+" Exponential functions (exp)
+" Logrithm (log, log10)
+" Power (pow)
+" Square root (sqrt)
+" Floor (floor)
+" Ceiling (ceil)
+" Floating point remainder (fmod)
+" Floating point absolute value (fabs)
+" Gamma (gamma)
+" Euclidean distance function (hypot)
+" Hperbolic functions (sinh, cosh, tanh)
+" Trigometric functions in radians (sin, cos, tan, asin, acos, atan, atan2)
+" Trigometric functions in degrees (sind, cosd, tand, asind, acosd, atand,
+" atan2d)
+"
+" local varialbles: cl_arg1, cl_arg2, etc. (cl_arg is an array of arguments)
+" cl_args is the number of arguments
+"
+"
+" I/O: *PROMPT, *WRITE, *READ
+"
+" Conditional branching:
+" IF, ELSE IF, END
+" *IF value *IF I==10
+" *ELSE IF value *ELSE IF I<10
+" *ELSE *ELSE
+" *ENDIF *ENDIF
+"
+"
+" Iterative looping:
+" WHILE
+" *WHILE test
+" .....
+" *END WHILE
+"
+"
+" EXAMPLE:
+" *DEFINE I = 1
+" *WHILE (I <= 10)
+" *WRITE I = 'I'
+" *DEFINE I = (I + 1)
+" *END WHILE
+"
+
+syn match tssclQualifier "/[^/ ]\+"hs=s+1
+syn match tssclSymbol "'\S\+'"
+"syn match tssclSymbol2 " \S\+ " contained
+
+syn match tssclInteger "-\=\<[0-9]*\>"
+syn match tssclFloat "-\=\<[0-9]*\.[0-9]*"
+syn match tssclScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+
+
+" 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_tsscl_syntax_inits")
+ if version < 508
+ let did_tsscl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tssclCommand Statement
+ HiLink tssclKeyword Special
+ HiLink tssclEnd Macro
+ HiLink tssclUnits Special
+
+ HiLink tssclComment Comment
+ HiLink tssclDirective Statement
+ HiLink tssclConditional Conditional
+ HiLink tssclContChar Macro
+ HiLink tssclQualifier Typedef
+ HiLink tssclSymbol Identifier
+ HiLink tssclSymbol2 Symbol
+ HiLink tssclString String
+ HiLink tssclOper Operator
+
+ HiLink tssclInteger Number
+ HiLink tssclFloat Number
+ HiLink tssclScientific Number
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "tsscl"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/tssgm.vim b/runtime/syntax/tssgm.vim
new file mode 100644
index 000000000..b8182d48e
--- /dev/null
+++ b/runtime/syntax/tssgm.vim
@@ -0,0 +1,111 @@
+" Vim syntax file
+" Language: TSS (Thermal Synthesizer System) Geometry
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.tssgm
+" URL: http://www.naglenet.org/vim/syntax/tssgm.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for tss geomtery file.
+"
+
+" Define keywords for TSS
+syn keyword tssgmParam units mirror param active sides submodel include
+syn keyword tssgmParam iconductor nbeta ngamma optics material thickness color
+syn keyword tssgmParam initial_temp
+syn keyword tssgmParam initial_id node_ids node_add node_type
+syn keyword tssgmParam gamma_boundaries gamma_add beta_boundaries
+syn keyword tssgmParam p1 p2 p3 p4 p5 p6 rot1 rot2 rot3 tx ty tz
+
+syn keyword tssgmSurfType rectangle trapezoid disc ellipse triangle
+syn keyword tssgmSurfType polygon cylinder cone sphere ellipic-cone
+syn keyword tssgmSurfType ogive torus box paraboloid hyperboloid ellipsoid
+syn keyword tssgmSurfType quadrilateral trapeziod
+
+syn keyword tssgmArgs OUT IN DOWN BOTH DOUBLE NONE SINGLE RADK CC FECC
+syn keyword tssgmArgs white red blue green yellow orange violet pink
+syn keyword tssgmArgs turquoise grey black
+syn keyword tssgmArgs Arithmetic Boundary Heater
+
+syn keyword tssgmDelim assembly
+
+syn keyword tssgmEnd end
+
+syn keyword tssgmUnits cm feet meters inches
+syn keyword tssgmUnits Celsius Kelvin Fahrenheit Rankine
+
+
+
+" Define matches for TSS
+syn match tssgmDefault "^DEFAULT/LENGTH = \(ft\|in\|cm\|m\)"
+syn match tssgmDefault "^DEFAULT/TEMP = [CKFR]"
+
+syn match tssgmComment /comment \+= \+".*"/ contains=tssParam,tssgmCommentString
+syn match tssgmCommentString /".*"/ contained
+
+syn match tssgmSurfIdent " \S\+\.\d\+ \=$"
+
+syn match tssgmString /"[^" ]\+"/ms=s+1,me=e-1 contains=ALLBUT,tssInteger
+
+syn match tssgmArgs / = [xyz],"/ms=s+3,me=e-2
+
+syn match tssgmInteger "-\=\<[0-9]*\>"
+syn match tssgmFloat "-\=\<[0-9]*\.[0-9]*"
+syn match tssgmScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+
+
+" 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_tssgm_syntax_inits")
+ if version < 508
+ let did_tssgm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tssgmParam Statement
+ HiLink tssgmSurfType Type
+ HiLink tssgmArgs Special
+ HiLink tssgmDelim Typedef
+ HiLink tssgmEnd Macro
+ HiLink tssgmUnits Special
+
+ HiLink tssgmDefault SpecialComment
+ HiLink tssgmComment Statement
+ HiLink tssgmCommentString Comment
+ HiLink tssgmSurfIdent Identifier
+ HiLink tssgmString Delimiter
+
+ HiLink tssgmInteger Number
+ HiLink tssgmFloat Float
+ HiLink tssgmScientific Float
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "tssgm"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/tssop.vim b/runtime/syntax/tssop.vim
new file mode 100644
index 000000000..d416df054
--- /dev/null
+++ b/runtime/syntax/tssop.vim
@@ -0,0 +1,87 @@
+" Vim syntax file
+" Language: TSS (Thermal Synthesizer System) Optics
+" Maintainer: Adrian Nagle, anagle@ball.com
+" Last Change: 2003 May 11
+" Filenames: *.tssop
+" URL: http://www.naglenet.org/vim/syntax/tssop.vim
+" MAIN URL: http://www.naglenet.org/vim/
+
+
+
+" 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
+
+
+
+" Ignore case
+syn case ignore
+
+
+
+"
+"
+" Begin syntax definitions for tss optics file.
+"
+
+" Define keywords for TSS
+syn keyword tssopParam ir_eps ir_trans ir_spec ir_tspec ir_refract
+syn keyword tssopParam sol_eps sol_trans sol_spec sol_tspec sol_refract
+syn keyword tssopParam color
+
+"syn keyword tssopProp property
+
+syn keyword tssopArgs white red blue green yellow orange violet pink
+syn keyword tssopArgs turquoise grey black
+
+
+
+" Define matches for TSS
+syn match tssopComment /comment \+= \+".*"/ contains=tssopParam,tssopCommentString
+syn match tssopCommentString /".*"/ contained
+
+syn match tssopProp "property "
+syn match tssopProp "edit/optic "
+syn match tssopPropName "^property \S\+" contains=tssopProp
+syn match tssopPropName "^edit/optic \S\+$" contains=tssopProp
+
+syn match tssopInteger "-\=\<[0-9]*\>"
+syn match tssopFloat "-\=\<[0-9]*\.[0-9]*"
+syn match tssopScientific "-\=\<[0-9]*\.[0-9]*E[-+]\=[0-9]\+\>"
+
+
+
+" 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_tssop_syntax_inits")
+ if version < 508
+ let did_tssop_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink tssopParam Statement
+ HiLink tssopProp Identifier
+ HiLink tssopArgs Special
+
+ HiLink tssopComment Statement
+ HiLink tssopCommentString Comment
+ HiLink tssopPropName Typedef
+
+ HiLink tssopInteger Number
+ HiLink tssopFloat Float
+ HiLink tssopScientific Float
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "tssop"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/uc.vim b/runtime/syntax/uc.vim
new file mode 100644
index 000000000..7eab1d48a
--- /dev/null
+++ b/runtime/syntax/uc.vim
@@ -0,0 +1,178 @@
+" Vim syntax file
+" Language: UnrealScript
+" Maintainer: Mark Ferrell <major@chaoticdreams.org>
+" URL: ftp://ftp.chaoticdreams.org/pub/ut/vim/uc.vim
+" Credits: Based on the java.vim syntax file by Claudio Fleiner
+" Last change: 2003 May 31
+
+" Please check :help uc.vim for comments on some of the options available.
+
+" 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
+
+" some characters that cannot be in a UnrealScript program (outside a string)
+syn match ucError "[\\@`]"
+syn match ucError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
+
+" we define it here so that included files can test for it
+if !exists("main_syntax")
+ let main_syntax='uc'
+endif
+
+syntax case ignore
+
+" keyword definitions
+syn keyword ucBranch break continue
+syn keyword ucConditional if else switch
+syn keyword ucRepeat while for do foreach
+syn keyword ucBoolean true false
+syn keyword ucConstant null
+syn keyword ucOperator new instanceof
+syn keyword ucType boolean char byte short int long float double
+syn keyword ucType void Pawn sound state auto exec function ipaddr
+syn keyword ucType ELightType actor ammo defaultproperties bool
+syn keyword ucType native noexport var out vector name local string
+syn keyword ucType event
+syn keyword ucStatement return
+syn keyword ucStorageClass static synchronized transient volatile final
+syn keyword ucMethodDecl synchronized throws
+
+" UnrealScript defines classes in sorta fscked up fashion
+syn match ucClassDecl "^[Cc]lass[\s$]*\S*[\s$]*expands[\s$]*\S*;" contains=ucSpecial,ucSpecialChar,ucClassKeys
+syn keyword ucClassKeys class expands extends
+syn match ucExternal "^\#exec.*" contains=ucCommentString,ucNumber
+syn keyword ucScopeDecl public protected private abstract
+
+" UnrealScript Functions
+syn match ucFuncDef "^.*function\s*[\(]*" contains=ucType,ucStorageClass
+syn match ucEventDef "^.*event\s*[\(]*" contains=ucType,ucStorageClass
+syn match ucClassLabel "[a-zA-Z0-9]*\'[a-zA-Z0-9]*\'" contains=ucCharacter
+
+syn region ucLabelRegion transparent matchgroup=ucLabel start="\<case\>" matchgroup=NONE end=":" contains=ucNumber
+syn match ucUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=ucLabel
+syn keyword ucLabel default
+
+" The following cluster contains all java groups except the contained ones
+syn cluster ucTop contains=ucExternal,ucError,ucError,ucBranch,ucLabelRegion,ucLabel,ucConditional,ucRepeat,ucBoolean,ucConstant,ucTypedef,ucOperator,ucType,ucType,ucStatement,ucStorageClass,ucMethodDecl,ucClassDecl,ucClassDecl,ucClassDecl,ucScopeDecl,ucError,ucError2,ucUserLabel,ucClassLabel
+
+" Comments
+syn keyword ucTodo contained TODO FIXME XXX
+syn region ucCommentString contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=ucSpecial,ucCommentStar,ucSpecialChar
+syn region ucComment2String contained start=+"+ end=+$\|"+ contains=ucSpecial,ucSpecialChar
+syn match ucCommentCharacter contained "'\\[^']\{1,6\}'" contains=ucSpecialChar
+syn match ucCommentCharacter contained "'\\''" contains=ucSpecialChar
+syn match ucCommentCharacter contained "'[^\\]'"
+syn region ucComment start="/\*" end="\*/" contains=ucCommentString,ucCommentCharacter,ucNumber,ucTodo
+syn match ucCommentStar contained "^\s*\*[^/]"me=e-1
+syn match ucCommentStar contained "^\s*\*$"
+syn match ucLineComment "//.*" contains=ucComment2String,ucCommentCharacter,ucNumber,ucTodo
+hi link ucCommentString ucString
+hi link ucComment2String ucString
+hi link ucCommentCharacter ucCharacter
+
+syn cluster ucTop add=ucComment,ucLineComment
+
+" match the special comment /**/
+syn match ucComment "/\*\*/"
+
+" Strings and constants
+syn match ucSpecialError contained "\\."
+"syn match ucSpecialCharError contained "[^']"
+syn match ucSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn region ucString start=+"+ end=+"+ contains=ucSpecialChar,ucSpecialError
+syn match ucStringError +"\([^"\\]\|\\.\)*$+
+syn match ucCharacter "'[^']*'" contains=ucSpecialChar,ucSpecialCharError
+syn match ucCharacter "'\\''" contains=ucSpecialChar
+syn match ucCharacter "'[^\\]'"
+syn match ucNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
+syn match ucNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match ucNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+syn match ucNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+
+" unicode characters
+syn match ucSpecial "\\u\d\{4\}"
+
+syn cluster ucTop add=ucString,ucCharacter,ucNumber,ucSpecial,ucStringError
+
+" catch errors caused by wrong parenthesis
+syn region ucParen transparent start="(" end=")" contains=@ucTop,ucParen
+syn match ucParenError ")"
+hi link ucParenError ucError
+
+if !exists("uc_minlines")
+ let uc_minlines = 10
+endif
+exec "syn sync ccomment ucComment minlines=" . uc_minlines
+
+" 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_uc_syntax_inits")
+ if version < 508
+ let did_uc_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink ucFuncDef Conditional
+ HiLink ucEventDef Conditional
+ HiLink ucBraces Function
+ HiLink ucBranch Conditional
+ HiLink ucLabel Label
+ HiLink ucUserLabel Label
+ HiLink ucConditional Conditional
+ HiLink ucRepeat Repeat
+ HiLink ucStorageClass StorageClass
+ HiLink ucMethodDecl ucStorageClass
+ HiLink ucClassDecl ucStorageClass
+ HiLink ucScopeDecl ucStorageClass
+ HiLink ucBoolean Boolean
+ HiLink ucSpecial Special
+ HiLink ucSpecialError Error
+ HiLink ucSpecialCharError Error
+ HiLink ucString String
+ HiLink ucCharacter Character
+ HiLink ucSpecialChar SpecialChar
+ HiLink ucNumber Number
+ HiLink ucError Error
+ HiLink ucStringError Error
+ HiLink ucStatement Statement
+ HiLink ucOperator Operator
+ HiLink ucOverLoaded Operator
+ HiLink ucComment Comment
+ HiLink ucDocComment Comment
+ HiLink ucLineComment Comment
+ HiLink ucConstant ucBoolean
+ HiLink ucTypedef Typedef
+ HiLink ucTodo Todo
+
+ HiLink ucCommentTitle SpecialComment
+ HiLink ucDocTags Special
+ HiLink ucDocParam Function
+ HiLink ucCommentStar ucComment
+
+ HiLink ucType Type
+ HiLink ucExternal Include
+
+ HiLink ucClassKeys Conditional
+ HiLink ucClassLabel Conditional
+
+ HiLink htmlComment Special
+ HiLink htmlCommentPart Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "uc"
+
+if main_syntax == 'uc'
+ unlet main_syntax
+endif
+
+" vim: ts=8
diff --git a/runtime/syntax/uil.vim b/runtime/syntax/uil.vim
new file mode 100644
index 000000000..bdc4e95b6
--- /dev/null
+++ b/runtime/syntax/uil.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Motif UIL (User Interface Language)
+" Maintainer: Thomas Koehler <jean-luc@picard.franken.de>
+" Last Change: 2002 Sep 20
+" URL: http://jeanluc-picard.de/vim/syntax/uil.vim
+
+" Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" A bunch of useful keywords
+syn keyword uilType arguments callbacks color
+syn keyword uilType compound_string controls end
+syn keyword uilType exported file include
+syn keyword uilType module object procedure
+syn keyword uilType user_defined xbitmapfile
+
+syn keyword uilTodo contained TODO
+
+" String and Character contstants
+" 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 match uilCharacter "'[^\\]'"
+syn region uilString start=+'+ skip=+\\\\\|\\"+ end=+'+ contains=uilSpecial
+syn match uilSpecialCharacter "'\\.'"
+syn match uilSpecialStatement "Xm[^ =(){}]*"
+syn match uilSpecialFunction "MrmNcreateCallback"
+syn match uilRessource "XmN[^ =(){}]*"
+
+syn match uilNumber "-\=\<\d*\.\=\d\+\(e\=f\=\|[uU]\=[lL]\=\)\>"
+syn match uilNumber "0[xX][0-9a-fA-F]\+\>"
+
+syn region uilComment start="/\*" end="\*/" contains=uilTodo
+syn match uilComment "!.*" contains=uilTodo
+syn match uilCommentError "\*/"
+
+syn region uilPreCondit start="^#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=uilComment,uilString,uilCharacter,uilNumber,uilCommentError
+syn match uilIncluded contained "<[^>]*>"
+syn match uilInclude "^#\s*include\s\+." contains=uilString,uilIncluded
+syn match uilLineSkip "\\$"
+syn region uilDefine start="^#\s*\(define\>\|undef\>\)" end="$" contains=uilLineSkip,uilComment,uilString,uilCharacter,uilNumber,uilCommentError
+
+syn sync ccomment uilComment
+
+" 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_uil_syn_inits")
+ if version < 508
+ let did_uil_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting.
+ HiLink uilCharacter uilString
+ HiLink uilSpecialCharacter uilSpecial
+ HiLink uilNumber uilString
+ HiLink uilCommentError uilError
+ HiLink uilInclude uilPreCondit
+ HiLink uilDefine uilPreCondit
+ HiLink uilIncluded uilString
+ HiLink uilSpecialFunction uilRessource
+ HiLink uilRessource Identifier
+ HiLink uilSpecialStatement Keyword
+ HiLink uilError Error
+ HiLink uilPreCondit PreCondit
+ HiLink uilType Type
+ HiLink uilString String
+ HiLink uilComment Comment
+ HiLink uilSpecial Special
+ HiLink uilTodo Todo
+
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "uil"
+
+" vim: ts=8
diff --git a/runtime/syntax/valgrind.vim b/runtime/syntax/valgrind.vim
new file mode 100644
index 000000000..f23b7924b
--- /dev/null
+++ b/runtime/syntax/valgrind.vim
@@ -0,0 +1,99 @@
+" Vim syntax file
+" Language: Valgrind Memory Debugger Output
+" Maintainer: Roger Luethi <rl@hellgate.ch>
+" Program URL: http://devel-home.kde.org/~sewardj/
+" Last Change: 2002 Apr 07
+"
+" Notes: mostly based on strace.vim and xml.vim
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+syn sync minlines=50
+
+syn match valgrindSpecLine "^[+-]\{2}\d\+[+-]\{2}.*$"
+
+syn region valgrindRegion
+ \ start=+^==\z(\d\+\)== \w.*$+
+ \ skip=+^==\z1==\( \| .*\)$+
+ \ end=+^+
+ \ fold
+ \ keepend
+ \ contains=valgrindPidChunk,valgrindLine
+
+syn region valgrindPidChunk
+ \ start=+\(^==\)\@<=+
+ \ end=+\(==\)\@=+
+ \ contained
+ \ contains=valgrindPid0,valgrindPid1,valgrindPid2,valgrindPid3,valgrindPid4,valgrindPid5,valgrindPid6,valgrindPid7,valgrindPid8,valgrindPid9
+ \ keepend
+
+syn match valgrindPid0 "\d\+0=" contained
+syn match valgrindPid1 "\d\+1=" contained
+syn match valgrindPid2 "\d\+2=" contained
+syn match valgrindPid3 "\d\+3=" contained
+syn match valgrindPid4 "\d\+4=" contained
+syn match valgrindPid5 "\d\+5=" contained
+syn match valgrindPid6 "\d\+6=" contained
+syn match valgrindPid7 "\d\+7=" contained
+syn match valgrindPid8 "\d\+8=" contained
+syn match valgrindPid9 "\d\+9=" contained
+
+syn region valgrindLine
+ \ start=+\(^==\d\+== \)\@<=+
+ \ end=+$+
+ \ keepend
+ \ contained
+ \ contains=valgrindOptions,valgrindMsg,valgrindLoc
+
+syn match valgrindOptions "[ ]\{3}-.*$" contained
+
+syn match valgrindMsg "\S.*$" contained
+ \ contains=valgrindError,valgrindNote,valgrindSummary
+syn match valgrindError "\(Invalid\|\d\+ errors\|.* definitely lost\).*$" contained
+syn match valgrindNote ".*still reachable.*" contained
+syn match valgrindSummary ".*SUMMARY:" contained
+
+syn match valgrindLoc "\s\+\(by\|at\|Address\).*$" contained
+ \ contains=valgrindAt,valgrindAddr,valgrindFunc,valgrindBin,valgrindSrc
+syn match valgrindAt "at\s\@=" contained
+syn match valgrindAddr "\(\W\)\@<=0x\x\+" contained
+syn match valgrindFunc "\(: \)\@<=\w\+" contained
+syn match valgrindBin "\((\(with\|\)in \)\@<=\S\+\()\)\@=" contained
+syn match valgrindSrc "\((\)\@<=.*:\d\+\()\)\@=" contained
+
+" Define the default highlighting
+
+hi def link valgrindSpecLine Type
+"hi def link valgrindRegion Special
+
+hi def link valgrindPid0 Special
+hi def link valgrindPid1 Comment
+hi def link valgrindPid2 Type
+hi def link valgrindPid3 Constant
+hi def link valgrindPid4 Number
+hi def link valgrindPid5 Identifier
+hi def link valgrindPid6 Statement
+hi def link valgrindPid7 Error
+hi def link valgrindPid8 LineNr
+hi def link valgrindPid9 Normal
+"hi def link valgrindLine Special
+
+hi def link valgrindOptions Type
+"hi def link valgrindMsg Special
+"hi def link valgrindLoc Special
+
+hi def link valgrindError Special
+hi def link valgrindNote Comment
+hi def link valgrindSummary Type
+
+hi def link valgrindAt Special
+hi def link valgrindAddr Number
+hi def link valgrindFunc Type
+hi def link valgrindBin Comment
+hi def link valgrindSrc Statement
+
+let b:current_syntax = "valgrind"
diff --git a/runtime/syntax/vb.vim b/runtime/syntax/vb.vim
new file mode 100644
index 000000000..a107e7d9f
--- /dev/null
+++ b/runtime/syntax/vb.vim
@@ -0,0 +1,273 @@
+" Vim syntax file
+" Language: Visual Basic
+" Maintainer: Tim Chase <vb.vim@tim.thechases.com>
+" Former Maintainer: Robert M. Cortopassi <cortopar@mindspring.com>
+" (tried multiple times to contact, but email bounced)
+" Last Change: 2004 May 25
+" 2004 May 30 Added a few keywords
+
+" This was thrown together after seeing numerous requests on the
+" VIM and VIM-DEV mailing lists. It is by no means complete.
+" Send comments, suggestions and requests to the maintainer.
+
+" 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
+
+" VB is case insensitive
+syn case ignore
+
+syn keyword vbStatement Alias AppActivate As Base Beep Call Case
+syn keyword vbStatement ChDir ChDrive Const Declare DefBool DefByte
+syn keyword vbStatement DefCur DefDate DefDbl DefDec DefInt
+syn keyword vbStatement DefLng DefObj DefSng DefStr Deftype
+syn keyword vbStatement DefVar DeleteSetting Dim Do Each Else
+syn keyword vbStatement ElseIf End Enum Erase Event Exit Explicit
+syn keyword vbStatement FileCopy For ForEach Function Get GoSub
+syn keyword vbStatement GoTo If Implements Kill Let Lib LineInput
+syn keyword vbStatement Lock Loop LSet MkDir Name Next OnError On
+syn keyword vbStatement Option Preserve Private Property Public Put
+syn keyword vbStatement RaiseEvent Randomize ReDim Reset Resume
+syn keyword vbStatement Return RmDir RSet SavePicture SaveSetting
+syn keyword vbStatement SendKeys Select SetAttr Static Step Sub
+syn keyword vbStatement Then Type Unlock Until Wend While Width
+syn keyword vbStatement With Write
+
+syn keyword vbFunction Abs Array Asc AscB AscW Atn Avg CBool
+syn keyword vbFunction CByte CCur CDate CDbl Cdec Choose Chr
+syn keyword vbFunction ChrB ChrW CInt CLng Command Cos Count
+syn keyword vbFunction CreateObject CSng CStr CurDir CVar
+syn keyword vbFunction CVDate CVErr DateAdd DateDiff DatePart
+syn keyword vbFunction DateSerial DateValue Day DDB Dir
+syn keyword vbFunction DoEvents Environ EOF Error Exp FileAttr
+syn keyword vbFunction FileDateTime FileLen Fix Format FreeFile
+syn keyword vbFunction FV GetAllStrings GetAttr
+syn keyword vbFunction GetAutoServerSettings GetObject
+syn keyword vbFunction GetSetting Hex Hour IIf IMEStatus Input
+syn keyword vbFunction InputB InputBox InStr InstB Int IPmt
+syn keyword vbFunction IsArray IsDate IsEmpty IsError IsMissing
+syn keyword vbFunction IsNull IsNumeric IsObject LBound LCase
+syn keyword vbFunction Left LeftB Len LenB LoadPicture Loc LOF
+syn keyword vbFunction Log LTrim Max Mid MidB Min Minute MIRR
+syn keyword vbFunction Month MsgBox Now NPer NPV Oct Partition
+syn keyword vbFunction Pmt PPmt PV QBColor Rate RGB Right
+syn keyword vbFunction RightB Rnd RTrim Second Seek Sgn Shell
+syn keyword vbFunction Sin SLN Space Spc Sqr StDev StDevP Str
+syn keyword vbFunction StrComp StrConv String Switch Sum SYD
+syn keyword vbFunction Tab Tan Time Timer TimeSerial TimeValue
+syn keyword vbFunction Trim TypeName UBound UCase Val Var VarP
+syn keyword vbFunction VarType Weekday Year
+
+syn keyword vbMethods Accept Activate Add AddCustom AddFile
+syn keyword vbMethods AddFromFile AddFromTemplate AddItem
+syn keyword vbMethods AddNew AddToAddInToolbar
+syn keyword vbMethods AddToolboxProgID Append AppendChunk
+syn keyword vbMethods Arrange Assert AsyncRead BatchUpdate
+syn keyword vbMethods BeginTrans Bind Cancel CancelAsyncRead
+syn keyword vbMethods CancelBatch CancelUpdate
+syn keyword vbMethods CanPropertyChange CaptureImage CellText
+syn keyword vbMethods CellValue Circle Clear ClearFields
+syn keyword vbMethods ClearSel ClearSelCols Clone Close Cls
+syn keyword vbMethods ColContaining ColumnSize CommitTrans
+syn keyword vbMethods CompactDatabase Compose Connect Copy
+syn keyword vbMethods CopyQueryDef CreateDatabase
+syn keyword vbMethods CreateDragImage CreateEmbed CreateField
+syn keyword vbMethods CreateGroup CreateIndex CreateLink
+syn keyword vbMethods CreatePreparedStatement CreatePropery
+syn keyword vbMethods CreateQuery CreateQueryDef
+syn keyword vbMethods CreateRelation CreateTableDef CreateUser
+syn keyword vbMethods CreateWorkspace Customize Delete
+syn keyword vbMethods DeleteColumnLabels DeleteColumns
+syn keyword vbMethods DeleteRowLabels DeleteRows DoVerb Drag
+syn keyword vbMethods Draw Edit EditCopy EditPaste EndDoc
+syn keyword vbMethods EnsureVisible EstablishConnection
+syn keyword vbMethods Execute ExtractIcon Fetch FetchVerbs
+syn keyword vbMethods Files FillCache Find FindFirst FindItem
+syn keyword vbMethods FindLast FindNext FindPrevious Forward
+syn keyword vbMethods GetBookmark GetChunk GetClipString
+syn keyword vbMethods GetData GetFirstVisible GetFormat
+syn keyword vbMethods GetHeader GetLineFromChar GetNumTicks
+syn keyword vbMethods GetRows GetSelectedPart GetText
+syn keyword vbMethods GetVisibleCount GoBack GoForward Hide
+syn keyword vbMethods HitTest HoldFields Idle InitializeLabels
+syn keyword vbMethods InsertColumnLabels InsertColumns
+syn keyword vbMethods InsertObjDlg InsertRowLabels InsertRows
+syn keyword vbMethods Item KillDoc Layout Line LinkExecute
+syn keyword vbMethods LinkPoke LinkRequest LinkSend Listen
+syn keyword vbMethods LoadFile LoadResData LoadResPicture
+syn keyword vbMethods LoadResString LogEvent MakeCompileFile
+syn keyword vbMethods MakeReplica MoreResults Move MoveData
+syn keyword vbMethods MoveFirst MoveLast MoveNext MovePrevious
+syn keyword vbMethods NavigateTo NewPage NewPassword
+syn keyword vbMethods NextRecordset OLEDrag OnAddinsUpdate
+syn keyword vbMethods OnConnection OnDisconnection
+syn keyword vbMethods OnStartupComplete Open OpenConnection
+syn keyword vbMethods OpenDatabase OpenQueryDef OpenRecordset
+syn keyword vbMethods OpenResultset OpenURL Overlay
+syn keyword vbMethods PaintPicture Paste PastSpecialDlg
+syn keyword vbMethods PeekData Play Point PopulatePartial
+syn keyword vbMethods PopupMenu Print PrintForm
+syn keyword vbMethods PropertyChanged PSet Quit Raise
+syn keyword vbMethods RandomDataFill RandomFillColumns
+syn keyword vbMethods RandomFillRows rdoCreateEnvironment
+syn keyword vbMethods rdoRegisterDataSource ReadFromFile
+syn keyword vbMethods ReadProperty Rebind ReFill Refresh
+syn keyword vbMethods RefreshLink RegisterDatabase Reload
+syn keyword vbMethods Remove RemoveAddInFromToolbar RemoveItem
+syn keyword vbMethods Render RepairDatabase Reply ReplyAll
+syn keyword vbMethods Requery ResetCustom ResetCustomLabel
+syn keyword vbMethods ResolveName RestoreToolbar Resync
+syn keyword vbMethods Rollback RollbackTrans RowBookmark
+syn keyword vbMethods RowContaining RowTop Save SaveAs
+syn keyword vbMethods SaveFile SaveToFile SaveToolbar
+syn keyword vbMethods SaveToOle1File Scale ScaleX ScaleY
+syn keyword vbMethods Scroll SelectAll SelectPart SelPrint
+syn keyword vbMethods Send SendData Set SetAutoServerSettings
+syn keyword vbMethods SetData SetFocus SetOption SetSize
+syn keyword vbMethods SetText SetViewport Show ShowColor
+syn keyword vbMethods ShowFont ShowHelp ShowOpen ShowPrinter
+syn keyword vbMethods ShowSave ShowWhatsThis SignOff SignOn
+syn keyword vbMethods Size Span SplitContaining StartLabelEdit
+syn keyword vbMethods StartLogging Stop Synchronize TextHeight
+syn keyword vbMethods TextWidth ToDefaults TwipsToChartPart
+syn keyword vbMethods TypeByChartType Update UpdateControls
+syn keyword vbMethods UpdateRecord UpdateRow Upto
+syn keyword vbMethods WhatsThisMode WriteProperty ZOrder
+
+syn keyword vbEvents AccessKeyPress AfterAddFile
+syn keyword vbEvents AfterChangeFileName AfterCloseFile
+syn keyword vbEvents AfterColEdit AfterColUpdate AfterDelete
+syn keyword vbEvents AfterInsert AfterLabelEdit
+syn keyword vbEvents AfterRemoveFile AfterUpdate
+syn keyword vbEvents AfterWriteFile AmbienChanged
+syn keyword vbEvents ApplyChanges Associate AsyncReadComplete
+syn keyword vbEvents AxisActivated AxisLabelActivated
+syn keyword vbEvents AxisLabelSelected AxisLabelUpdated
+syn keyword vbEvents AxisSelected AxisTitleActivated
+syn keyword vbEvents AxisTitleSelected AxisTitleUpdated
+syn keyword vbEvents AxisUpdated BeforeClick BeforeColEdit
+syn keyword vbEvents BeforeColUpdate BeforeConnect
+syn keyword vbEvents BeforeDelete BeforeInsert
+syn keyword vbEvents BeforeLabelEdit BeforeLoadFile
+syn keyword vbEvents BeforeUpdate ButtonClick ButtonCompleted
+syn keyword vbEvents ButtonGotFocus ButtonLostFocus Change
+syn keyword vbEvents ChartActivated ChartSelected
+syn keyword vbEvents ChartUpdated Click ColEdit Collapse
+syn keyword vbEvents ColResize ColumnClick Compare
+syn keyword vbEvents ConfigChageCancelled ConfigChanged
+syn keyword vbEvents ConnectionRequest DataArrival
+syn keyword vbEvents DataChanged DataUpdated DblClick
+syn keyword vbEvents Deactivate DeviceArrival
+syn keyword vbEvents DeviceOtherEvent DeviceQueryRemove
+syn keyword vbEvents DeviceQueryRemoveFailed
+syn keyword vbEvents DeviceRemoveComplete DeviceRemovePending
+syn keyword vbEvents DevModeChange Disconnect DisplayChanged
+syn keyword vbEvents Dissociate DoGetNewFileName Done
+syn keyword vbEvents DonePainting DownClick DragDrop DragOver
+syn keyword vbEvents DropDown EditProperty EnterCell
+syn keyword vbEvents EnterFocus ExitFocus Expand
+syn keyword vbEvents FootnoteActivated FootnoteSelected
+syn keyword vbEvents FootnoteUpdated GotFocus HeadClick
+syn keyword vbEvents InfoMessage Initialize IniProperties
+syn keyword vbEvents ItemActivated ItemAdded ItemCheck
+syn keyword vbEvents ItemClick ItemReloaded ItemRemoved
+syn keyword vbEvents ItemRenamed ItemSeletected KeyDown
+syn keyword vbEvents KeyPress KeyUp LeaveCell LegendActivated
+syn keyword vbEvents LegendSelected LegendUpdated LinkClose
+syn keyword vbEvents LinkError LinkNotify LinkOpen Load
+syn keyword vbEvents LostFocus MouseDown MouseMove MouseUp
+syn keyword vbEvents NodeClick ObjectMove OLECompleteDrag
+syn keyword vbEvents OLEDragDrop OLEDragOver OLEGiveFeedback
+syn keyword vbEvents OLESetData OLEStartDrag OnAddNew OnComm
+syn keyword vbEvents Paint PanelClick PanelDblClick
+syn keyword vbEvents PathChange PatternChange PlotActivated
+syn keyword vbEvents PlotSelected PlotUpdated PointActivated
+syn keyword vbEvents PointLabelActivated PointLabelSelected
+syn keyword vbEvents PointLabelUpdated PointSelected
+syn keyword vbEvents PointUpdated PowerQuerySuspend
+syn keyword vbEvents PowerResume PowerStatusChanged
+syn keyword vbEvents PowerSuspend QueryChangeConfig
+syn keyword vbEvents QueryComplete QueryCompleted
+syn keyword vbEvents QueryTimeout QueryUnload ReadProperties
+syn keyword vbEvents Reposition RequestChangeFileName
+syn keyword vbEvents RequestWriteFile Resize ResultsChanged
+syn keyword vbEvents RowColChange RowCurrencyChange RowResize
+syn keyword vbEvents RowStatusChanged SelChange
+syn keyword vbEvents SelectionChanged SendComplete
+syn keyword vbEvents SendProgress SeriesActivated
+syn keyword vbEvents SeriesSelected SeriesUpdated
+syn keyword vbEvents SettingChanged SplitChange StateChanged
+syn keyword vbEvents StatusUpdate SysColorsChanged Terminate
+syn keyword vbEvents TimeChanged TitleActivated TitleSelected
+syn keyword vbEvents TitleActivated UnboundAddData
+syn keyword vbEvents UnboundDeleteRow
+syn keyword vbEvents UnboundGetRelativeBookmark
+syn keyword vbEvents UnboundReadData UnboundWriteData Unload
+syn keyword vbEvents UpClick Updated Validate ValidationError
+syn keyword vbEvents WillAssociate WillChangeData
+syn keyword vbEvents WillDissociate WillExecute
+syn keyword vbEvents WillUpdateRows WriteProperties
+
+syn keyword vbTypes Boolean Byte Currency Date Decimal
+syn keyword vbTypes Double Empty Integer Long Single String
+
+syn match vbOperator "[()+.,\-/*=&]"
+syn match vbOperator "[<>]=\="
+syn match vbOperator "<>"
+syn match vbOperator "\s\+_$"
+syn keyword vbOperator And Or Not Xor Mod In Is Imp Eqv
+syn keyword vbOperator To ByVal ByRef
+syn keyword vbConst True False Null Nothing
+
+syn keyword vbTodo contained TODO
+
+"integer number, or floating point number without a dot.
+syn match vbNumber "\<\d\+\>"
+"floating point number, with dot
+syn match vbNumber "\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match vbNumber "\.\d\+\>"
+
+" String and Character contstants
+syn region vbString start=+"+ end=+"+
+syn region vbComment start="\<REM\>" end="$" contains=vbTodo
+syn region vbComment start="'" end="$" contains=vbTodo
+syn region vbLineNumber start="^\d" end="\s"
+syn match vbTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1
+
+" 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_vb_syntax_inits")
+ if version < 508
+ let did_vb_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink vbLineNumber Comment
+ HiLink vbNumber Number
+ HiLink vbConst Constant
+ HiLink vbError Error
+ HiLink vbStatement Statement
+ HiLink vbString String
+ HiLink vbComment Comment
+ HiLink vbTodo Todo
+ HiLink vbFunction Identifier
+ HiLink vbMethods PreProc
+ HiLink vbEvents Special
+ HiLink vbTypeSpecifier Type
+ HiLink vbTypes Type
+ HiLink vbOperator Operator
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vb"
+
+" vim: ts=8
diff --git a/runtime/syntax/verilog.vim b/runtime/syntax/verilog.vim
new file mode 100644
index 000000000..2e0179942
--- /dev/null
+++ b/runtime/syntax/verilog.vim
@@ -0,0 +1,134 @@
+" Vim syntax file
+" Language: Verilog
+" Maintainer: Mun Johl <mun_johl@sierralogic.com>
+" Last Update: Tue Nov 4 09:39:40 PST 2003
+
+" 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
+
+" Set the local value of the 'iskeyword' option
+if version >= 600
+ setlocal iskeyword=@,48-57,_,192-255
+else
+ set iskeyword=@,48-57,_,192-255
+endif
+
+" A bunch of useful Verilog keywords
+
+syn keyword verilogStatement always and assign automatic buf
+syn keyword verilogStatement bufif0 bufif1 cell cmos
+syn keyword verilogStatement config deassign defparam design
+syn keyword verilogStatement disable edge endconfig
+syn keyword verilogStatement endfunction endgenerate endmodule
+syn keyword verilogStatement endprimitive endspecify endtable endtask
+syn keyword verilogStatement event force function
+syn keyword verilogStatement generate genvar highz0 highz1 ifnone
+syn keyword verilogStatement incdir include initial inout input
+syn keyword verilogStatement instance integer large liblist
+syn keyword verilogStatement library localparam macromodule medium
+syn keyword verilogStatement module nand negedge nmos nor
+syn keyword verilogStatement noshowcancelled not notif0 notif1 or
+syn keyword verilogStatement output parameter pmos posedge primitive
+syn keyword verilogStatement pull0 pull1 pulldown pullup
+syn keyword verilogStatement pulsestyle_onevent pulsestyle_ondetect
+syn keyword verilogStatement rcmos real realtime reg release
+syn keyword verilogStatement rnmos rpmos rtran rtranif0 rtranif1
+syn keyword verilogStatement scalared showcancelled signed small
+syn keyword verilogStatement specify specparam strong0 strong1
+syn keyword verilogStatement supply0 supply1 table task time tran
+syn keyword verilogStatement tranif0 tranif1 tri tri0 tri1 triand
+syn keyword verilogStatement trior trireg unsigned use vectored wait
+syn keyword verilogStatement wand weak0 weak1 wire wor xnor xor
+syn keyword verilogLabel begin end fork join
+syn keyword verilogConditional if else case casex casez default endcase
+syn keyword verilogRepeat forever repeat while for
+
+syn keyword verilogTodo contained TODO
+
+syn match verilogOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"
+
+syn region verilogComment start="/\*" end="\*/" contains=verilogTodo
+syn match verilogComment "//.*" contains=verilogTodo
+
+"syn match verilogGlobal "`[a-zA-Z0-9_]\+\>"
+syn match verilogGlobal "`celldefine"
+syn match verilogGlobal "`default_nettype"
+syn match verilogGlobal "`define"
+syn match verilogGlobal "`else"
+syn match verilogGlobal "`elsif"
+syn match verilogGlobal "`endcelldefine"
+syn match verilogGlobal "`endif"
+syn match verilogGlobal "`ifdef"
+syn match verilogGlobal "`ifndef"
+syn match verilogGlobal "`include"
+syn match verilogGlobal "`line"
+syn match verilogGlobal "`nounconnected_drive"
+syn match verilogGlobal "`resetall"
+syn match verilogGlobal "`timescale"
+syn match verilogGlobal "`unconnected_drive"
+syn match verilogGlobal "`undef"
+syn match verilogGlobal "$[a-zA-Z0-9_]\+\>"
+
+syn match verilogConstant "\<[A-Z][A-Z0-9_]\+\>"
+
+syn match verilogNumber "\(\<\d\+\|\)'[bB]\s*[0-1_xXzZ?]\+\>"
+syn match verilogNumber "\(\<\d\+\|\)'[oO]\s*[0-7_xXzZ?]\+\>"
+syn match verilogNumber "\(\<\d\+\|\)'[dD]\s*[0-9_xXzZ?]\+\>"
+syn match verilogNumber "\(\<\d\+\|\)'[hH]\s*[0-9a-fA-F_xXzZ?]\+\>"
+syn match verilogNumber "\<[+-]\=[0-9_]\+\(\.[0-9_]*\|\)\(e[0-9_]*\|\)\>"
+
+syn region verilogString start=+"+ skip=+\\"+ end=+"+ contains=verilogEscape
+syn match verilogEscape +\\[nt"\\]+ contained
+syn match verilogEscape "\\\o\o\=\o\=" contained
+
+" Directives
+syn match verilogDirective "//\s*synopsys\>.*$"
+syn region verilogDirective start="/\*\s*synopsys\>" end="\*/"
+syn region verilogDirective start="//\s*synopsys dc_script_begin\>" end="//\s*synopsys dc_script_end\>"
+
+syn match verilogDirective "//\s*\$s\>.*$"
+syn region verilogDirective start="/\*\s*\$s\>" end="\*/"
+syn region verilogDirective start="//\s*\$s dc_script_begin\>" end="//\s*\$s dc_script_end\>"
+
+"Modify the following as needed. The trade-off is performance versus
+"functionality.
+syn sync lines=50
+
+" 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_verilog_syn_inits")
+ if version < 508
+ let did_verilog_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " 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 verilogEscape Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "verilog"
+
+" vim: ts=8
diff --git a/runtime/syntax/vgrindefs.vim b/runtime/syntax/vgrindefs.vim
new file mode 100644
index 000000000..a4b81b7ef
--- /dev/null
+++ b/runtime/syntax/vgrindefs.vim
@@ -0,0 +1,61 @@
+" Vim syntax file
+" Language: Vgrindefs
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Apr 25
+
+" The Vgrindefs file is used to specify a language for vgrind
+
+" 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
+
+" Comments
+syn match vgrindefsComment "^#.*"
+
+" The fields that vgrind recognizes
+syn match vgrindefsField ":ab="
+syn match vgrindefsField ":ae="
+syn match vgrindefsField ":pb="
+syn match vgrindefsField ":bb="
+syn match vgrindefsField ":be="
+syn match vgrindefsField ":cb="
+syn match vgrindefsField ":ce="
+syn match vgrindefsField ":sb="
+syn match vgrindefsField ":se="
+syn match vgrindefsField ":lb="
+syn match vgrindefsField ":le="
+syn match vgrindefsField ":nc="
+syn match vgrindefsField ":tl"
+syn match vgrindefsField ":oc"
+syn match vgrindefsField ":kw="
+
+" Also find the ':' at the end of the line, so all ':' are highlighted
+syn match vgrindefsField ":\\$"
+syn match vgrindefsField ":$"
+syn match vgrindefsField "\\$"
+
+" 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_vgrindefs_syntax_inits")
+ if version < 508
+ let did_vgrindefs_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 vgrindefsField Statement
+ HiLink vgrindefsComment Comment
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vgrindefs"
+
+" vim: ts=8
diff --git a/runtime/syntax/vhdl.vim b/runtime/syntax/vhdl.vim
new file mode 100644
index 000000000..96fbcd620
--- /dev/null
+++ b/runtime/syntax/vhdl.vim
@@ -0,0 +1,184 @@
+" Vim syntax file
+" Language: VHDL
+" Maintainer: Czo <Olivier.Sirol@lip6.fr>
+" Credits: Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
+" $Id$
+
+" VHSIC Hardware Description Language
+" Very High Scale Integrated Circuit
+
+" 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
+
+" 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.
+syn match cDefine "^#ifdef[ ]\+[A-Za-z_]\+"
+syn match cDefine "^#endif"
+
+" case is not significant
+syn case ignore
+
+" VHDL keywords
+syn keyword vhdlStatement access after alias all assert
+syn keyword vhdlStatement architecture array attribute
+syn keyword vhdlStatement begin block body buffer bus
+syn keyword vhdlStatement case component configuration constant
+syn keyword vhdlStatement disconnect downto
+syn keyword vhdlStatement elsif end entity exit
+syn keyword vhdlStatement file for function
+syn keyword vhdlStatement generate generic group guarded
+syn keyword vhdlStatement impure in inertial inout is
+syn keyword vhdlStatement label library linkage literal loop
+syn keyword vhdlStatement map
+syn keyword vhdlStatement new next null
+syn keyword vhdlStatement of on open others out
+syn keyword vhdlStatement package port postponed procedure process pure
+syn keyword vhdlStatement range record register reject report return
+syn keyword vhdlStatement select severity signal shared
+syn keyword vhdlStatement subtype
+syn keyword vhdlStatement then to transport type
+syn keyword vhdlStatement unaffected units until use
+syn keyword vhdlStatement variable wait when while with
+syn keyword vhdlStatement note warning error failure
+
+" Special match for "if" and "else" since "else if" shouldn't be highlighted.
+" The right keyword is "elsif"
+syn match vhdlStatement "\<\(if\|else\)\>"
+syn match vhdlNone "\<else\s\+if\>$"
+syn match vhdlNone "\<else\s\+if\>\s"
+
+" Predifined 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
+syn keyword vhdlType positive natural signed unsigned
+syn keyword vhdlType line text
+syn keyword vhdlType std_logic std_logic_vector
+syn keyword vhdlType std_ulogic std_ulogic_vector
+" Predefined non standard VHDL types for Mentor Graphics Sys1076/QuickHDL
+syn keyword vhdlType qsim_state qsim_state_vector
+syn keyword vhdlType qsim_12state qsim_12state_vector
+syn keyword vhdlType qsim_strength
+" Predefined non standard VHDL types for Alliance VLSI CAD
+syn keyword vhdlType mux_bit mux_vector reg_bit reg_vector wor_bit wor_vector
+
+" array attributes
+syn match vhdlAttribute "\'high"
+syn match vhdlAttribute "\'left"
+syn match vhdlAttribute "\'length"
+syn match vhdlAttribute "\'low"
+syn match vhdlAttribute "\'range"
+syn match vhdlAttribute "\'reverse_range"
+syn match vhdlAttribute "\'right"
+syn match vhdlAttribute "\'ascending"
+" block attributes
+syn match vhdlAttribute "\'behaviour"
+syn match vhdlAttribute "\'structure"
+syn match vhdlAttribute "\'simple_name"
+syn match vhdlAttribute "\'instance_name"
+syn match vhdlAttribute "\'path_name"
+syn match vhdlAttribute "\'foreign"
+" signal attribute
+syn match vhdlAttribute "\'active"
+syn match vhdlAttribute "\'delayed"
+syn match vhdlAttribute "\'event"
+syn match vhdlAttribute "\'last_active"
+syn match vhdlAttribute "\'last_event"
+syn match vhdlAttribute "\'last_value"
+syn match vhdlAttribute "\'quiet"
+syn match vhdlAttribute "\'stable"
+syn match vhdlAttribute "\'transaction"
+syn match vhdlAttribute "\'driving"
+syn match vhdlAttribute "\'driving_value"
+" type attributes
+syn match vhdlAttribute "\'base"
+syn match vhdlAttribute "\'high"
+syn match vhdlAttribute "\'left"
+syn match vhdlAttribute "\'leftof"
+syn match vhdlAttribute "\'low"
+syn match vhdlAttribute "\'pos"
+syn match vhdlAttribute "\'pred"
+syn match vhdlAttribute "\'rightof"
+syn match vhdlAttribute "\'succ"
+syn match vhdlAttribute "\'val"
+syn match vhdlAttribute "\'image"
+syn match vhdlAttribute "\'value"
+
+syn keyword vhdlBoolean true false
+
+" for this vector values case is significant
+syn case match
+" Values for standard VHDL types
+syn match vhdlVector "\'[0L1HXWZU\-\?]\'"
+" Values for non standard VHDL types qsim_12state for Mentor Graphics Sys1076/QuickHDL
+syn keyword vhdlVector S0S S1S SXS S0R S1R SXR S0Z S1Z SXZ S0I S1I SXI
+syn case ignore
+
+syn match vhdlVector "B\"[01_]\+\""
+syn match vhdlVector "O\"[0-7_]\+\""
+syn match vhdlVector "X\"[0-9a-f_]\+\""
+syn match vhdlCharacter "'.'"
+syn region vhdlString start=+"+ end=+"+
+
+" floating numbers
+syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
+syn match vhdlNumber "-\=\<\d\+\.\d\+\>"
+syn match vhdlNumber "0*2#[01_]\+\.[01_]\+#\(E[+\-]\=\d\+\)\="
+syn match vhdlNumber "0*16#[0-9a-f_]\+\.[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
+" integer numbers
+syn match vhdlNumber "-\=\<\d\+\(E[+\-]\=\d\+\)\>"
+syn match vhdlNumber "-\=\<\d\+\>"
+syn match vhdlNumber "0*2#[01_]\+#\(E[+\-]\=\d\+\)\="
+syn match vhdlNumber "0*16#[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
+" operators
+syn keyword vhdlOperator and nand or nor xor xnor
+syn keyword vhdlOperator rol ror sla sll sra srl
+syn keyword vhdlOperator mod rem abs not
+syn match vhdlOperator "[&><=:+\-*\/|]"
+syn match vhdlSpecial "[().,;]"
+" time
+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 vhdlGlobal "[\'$#~!%@?\^\[\]{}\\]"
+
+" 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_vhdl_syntax_inits")
+ if version < 508
+ let did_vhdl_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink cDefine PreProc
+ HiLink vhdlSpecial Special
+ HiLink vhdlStatement Statement
+ HiLink vhdlCharacter String
+ HiLink vhdlString String
+ HiLink vhdlVector String
+ HiLink vhdlBoolean String
+ HiLink vhdlComment Comment
+ HiLink vhdlNumber String
+ HiLink vhdlTime String
+ HiLink vhdlType Type
+ HiLink vhdlOperator Type
+ HiLink vhdlGlobal Error
+ HiLink vhdlAttribute Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vhdl"
+
+" vim: ts=8
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
new file mode 100644
index 000000000..bfad112a1
--- /dev/null
+++ b/runtime/syntax/vim.vim
@@ -0,0 +1,642 @@
+" Vim syntax file
+" Language: Vim 6.3 script
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: May 25, 2004
+" Version: 6.3-04
+" Automatically generated keyword lists: {{{1
+
+" Quit when a syntax file was already loaded {{{2
+if exists("b:current_syntax")
+ finish
+endif
+
+" vimTodo: contains common special-notices for comments {{{2
+" Use the vimCommentGroup cluster to add your own.
+syn keyword vimTodo contained COMBAK NOT RELEASED TODO WIP
+syn cluster vimCommentGroup contains=vimTodo,@Spell
+
+" regular vim commands {{{2
+syn keyword vimCommand contained ab[breviate] abc[lear] abo[veleft] al[l] arga[dd] argd[elete] argdo arge[dit] argg[lobal] argl[ocal] ar[gs] argu[ment] as[cii] bad[d] ba[ll] bd[elete] be bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bN[ext] bo[tright] bp[revious] brea[k] breaka[dd] breakd[el] breakl[ist] br[ewind] bro[wse] bufdo b[uffer] buffers bun[load] bw[ipeout] ca[bbrev] cabc[lear] cal[l] cat[ch] cc ccl[ose] cd ce[nter] cf[ile] cfir[st] cg[etfile] c[hange] changes chd[ir] che[ckpath] checkt[ime] cla[st] cl[ist] clo[se] cmapc[lear] cnew[er] cn[ext] cN[ext] cnf[ile] cNf[ile] cnorea[bbrev] col[der] colo[rscheme] comc[lear] comp[iler] conf[irm] con[tinue] cope[n] co[py] cpf[ile] cp[revious] cq[uit] cr[ewind] cuna[bbrev] cu[nmap] cw[indow] debugg[reedy] delc[ommand] d[elete] DeleteFirst delf[unction] delm[ark] diffg[et] diffpatch diffpu[t] diffsplit diffthis dig[raphs] di[splay] dj[ump] dl[ist] dr[op] ds[earch] dsp[lit] echoe[rr] echom[sg] echon e[dit] el[se] elsei[f] em[enu] emenu* endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] fu[nction] g[lobal] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] hid[e] his[tory] I ia[bbrev] iabc[lear] if ij[ump] il[ist] imapc[lear] inorea[bbrev] is[earch] isp[lit] iuna[bbrev] iu[nmap] j[oin] ju[mps] k keepj[umps] kee[pmarks] lan[guage] la[st] lc[d] lch[dir] le[ft] lefta[bove] l[ist] lm[ap] lmapc[lear] ln[oremap] lo[adview] loc[kmarks] ls lu[nmap] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mkvie[w] mkv[imrc] mod[e] m[ove] new n[ext] N[ext] nmapc[lear] noh[lsearch] norea[bbrev] norm[al] Nread nu[mber] nun[map] Nw omapc[lear] on[ly] o[pen] opt[ions] ou[nmap] pc[lose] ped[it] pe[rl] perld[o] po[p] popu popu[p] pp[op] pre[serve] prev[ious] p[rint] P[rint] prompt promptf[ind] promptr[epl] ps[earch] pta[g] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptN[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] pyf[ile] py[thon] qa[ll] q[uit] quita[ll] r[ead] rec[over] redi[r] red[o] redr[aw] redraws[tatus] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] rub[y] rubyd[o] rubyf[ile] ru[ntime] rv[iminfo] sal[l] sa[rgument] sav[eas] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbN[ext] sbp[revious] sbr[ewind] sb[uffer] scripte[ncoding] scrip[tnames] se[t] setf[iletype] setg[lobal] setl[ocal] sf[ind] sfir[st sh[ell] sign sil[ent] sim[alt] sla[st] sl[eep] sm[agic] sn[ext] sN[ext] sni[ff] sno[magic] so[urce] sp[lit] spr[evious] sre[wind] sta[g] star[tinsert] startr[eplace] stj[ump] st[op] stopi[nsert] sts[elect] sun[hide] sus[pend] sv[iew] syncbind t ta[g] tags tc[l] tcld[o] tclf[ile] te[aroff] tf[irst] the th[row] tj[ump] tl[ast] tm tm[enu] tn[ext] tN[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] tu tu[nmenu] una[bbreviate] u[ndo] unh[ide] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] v[global] vie[w] vi[sual] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] winpos* win[size] wn[ext] wN[ext] wp[revous] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] y[ank]
+syn match vimCommand contained "\<z[-+^.=]"
+
+" vimOptions are caught only when contained in a vimSet {{{2
+syn keyword vimOption contained : acd ai akm al aleph allowrevins altkeymap ambiwidth ambw anti antialias ar arab arabic arabicshape ari arshape autochdir autoindent autoread autowrite autowriteall aw awa background backspace backup backupcopy backupdir backupext backupskip balloondelay ballooneval bdir bdlay beval bex bg bh bin binary biosk bioskey bk bkc bl bomb breakat brk browsedir bs bsdir bsk bt bufhidden buflisted buftype casemap cb ccv cd cdpath cedit cf ch charconvert ci cin cindent cink cinkeys cino cinoptions cinw cinwords clipboard cmdheight cmdwinheight cmp cms co columns com comments commentstring compatible complete conc conceallevel confirm consk conskey copyindent cp cpo cpoptions cpt crb cscopepathcomp cscopeprg cscopequickfix cscopetag cscopetagorder cscopeverbose cspc csprg csqf cst csto csverb cursorbind cwh debug deco def define delcombine dex dg dict dictionary diff diffexpr diffopt digraph dip dir directory display dy ea ead eadirection eb ed edcompatible ef efm ei ek enc encoding endofline eol ep equalalways equalprg errorbells errorfile errorformat esckeys et eventignore ex expandtab exrc fcl fcs fdc fde fdi fdl fdls fdm fdn fdo fdt fen fenc fencs ff ffs fileencoding fileencodings fileformat fileformats filetype fillchars fk fkmap fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatoptions formatprg fp ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg guicursor guifont guifontset guifontwide guiheadroom guioptions guipty helpfile helpheight helplang hf hh hi hid hidden highlight history hk hkmap hkmapp hkp hl hlg hls hlsearch ic icon iconstring ignorecase im imactivatekey imak imc imcmdline imd imdisable imi iminsert ims imsearch inc include includeexpr incsearch inde indentexpr indentkeys indk inex inf infercase insertmode is isf isfname isi isident isk iskeyword isp isprint joinspaces js key keymap keymodel keywordprg km kmp kp langmap langmenu laststatus lazyredraw lbr lcs linebreak lines linespace lisp lispwords list listchars lm lmap loadplugins lpl ls lsp lw lz ma magic makeef makeprg mat matchpairs matchtime maxfuncdepth maxmapdepth maxmem maxmemtot mef menuitems mfd mh mis ml mls mm mmd mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps nf nrformats nu number oft osfiletype pa para paragraphs paste pastetoggle patchexpr patchmode path pdev penc pex pexpr pfn pheader pi pm popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printoptions pt pvh pvw readonly remap report restorescreen revins ri rightleft rightleftcmd rl rlc ro rs rtp ru ruf ruler rulerformat runtimepath sb sbo sbr sc scb scr scroll scrollbind scrolljump scrolloff scrollopt scs sect sections secure sel selection selectmode sessionoptions sft sh shcf shell shellcmdflag shellpipe shellquote shellredir shellslash shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smd sn so softtabstop sol sp splitbelow splitright spr sr srr ss ssl ssop st sta startofline statusline stl sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn syntax ta tabstop tag tagbsearch taglength tagrelative tags tagstack tb tbi tbidi tbis tbs tenc term termbidi termencoding terse textauto textmode textwidth tf tgst thesaurus tildeop timeout timeoutlen title titlelen titleold titlestring tl tm to toolbar toolbariconsize top tr ts tsl tsr ttimeout ttimeoutlen ttm tty ttybuiltin ttyfast ttym ttymouse ttyscroll ttytype tw tx uc ul undolevels updatecount updatetime ut vb vbs vdir ve verbose vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wh whichwrap wig wildchar wildcharm wildignore wildmenu wildmode wim winaltkeys winfixheight winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw wrap wrapmargin wrapscan write writeany writebackup writedelay ws ww
+
+" vimOptions: These are the turn-off setting variants {{{2
+syn keyword vimOption contained noacd noai noakm noallowrevins noaltkeymap noanti noantialias noar noarab noarabic noarabicshape noari noarshape noautochdir noautoindent noautoread noautowrite noautowriteall noaw noawa nobackup noballooneval nobeval nobin nobinary nobiosk nobioskey nobk nobl nobomb nobuflisted nocf noci nocin nocindent nocompatible noconfirm noconsk noconskey nocopyindent nocp nocrb nocscopetag nocscopeverbose nocst nocsverb nocursorbind nodeco nodelcombine nodg nodiff nodigraph nodisable noea noeb noed noedcompatible noek noendofline noeol noequalalways noerrorbells noesckeys noet noex noexpandtab noexrc nofen nofk nofkmap nofoldenable nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkmapp nohkp nohls nohlsearch noic noicon noignorecase noim noimc noimcmdline noimd noincsearch noinf noinfercase noinsertmode nois nojoinspaces nojs nolazyredraw nolbr nolinebreak nolisp nolist noloadplugins nolpl nolz noma nomagic nomh noml nomod nomodeline nomodifiable nomodified nomore nomousef nomousefocus nomousehide nonu nonumber nopaste nopi nopreserveindent nopreviewwindow nopvw noreadonly noremap norestorescreen norevins nori norightleft norightleftcmd norl norlc noro nors noru noruler nosb nosc noscb noscrollbind noscs nosecure nosft noshellslash noshiftround noshortname noshowcmd noshowfulltag noshowmatch noshowmode nosi nosm nosmartcase nosmartindent nosmarttab nosmd nosn nosol nosplitbelow nosplitright nospr nosr nossl nosta nostartofline noswapfile noswf nota notagbsearch notagrelative notagstack notbi notbidi notbs notermbidi noterse notextauto notextmode notf notgst notildeop notimeout notitle noto notop notr nottimeout nottybuiltin nottyfast notx novb novisualbell nowa nowarn nowb noweirdinvert nowfh nowildmenu nowinfixheight nowiv nowmnu nowrap nowrapscan nowrite nowriteany nowritebackup nows
+
+" vimOptions: These are the invertible variants {{{2
+syn keyword vimOption contained invacd invai invakm invallowrevins invaltkeymap invanti invantialias invar invarab invarabic invarabicshape invari invarshape invautochdir invautoindent invautoread invautowrite invautowriteall invaw invawa invbackup invballooneval invbeval invbin invbinary invbiosk invbioskey invbk invbl invbomb invbuflisted invcf invci invcin invcindent invcompatible invconfirm invconsk invconskey invcopyindent invcp invcrb invcscopetag invcscopeverbose invcst invcsverb invcursorbind invdeco invdelcombine invdg invdiff invdigraph invdisable invea inveb inved invedcompatible invek invendofline inveol invequalalways inverrorbells invesckeys invet invex invexpandtab invexrc invfen invfk invfkmap invfoldenable invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkmapp invhkp invhls invhlsearch invic invicon invignorecase invim invimc invimcmdline invimd invincsearch invinf invinfercase invinsertmode invis invjoinspaces invjs invlazyredraw invlbr invlinebreak invlisp invlist invloadplugins invlpl invlz invma invmagic invmh invml invmod invmodeline invmodifiable invmodified invmore invmousef invmousefocus invmousehide invnu invnumber invpaste invpi invpreserveindent invpreviewwindow invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invsplitbelow invsplitright invspr invsr invssl invsta invstartofline invswapfile invswf invta invtagbsearch invtagrelative invtagstack invtbi invtbidi invtbs invtermbidi invterse invtextauto invtextmode invtf invtgst invtildeop invtimeout invtitle invto invtop invtr invttimeout invttybuiltin invttyfast invtx invvb invvisualbell invwa invwarn invwb invweirdinvert invwfh invwildmenu invwinfixheight invwiv invwmnu invwrap invwrapscan invwrite invwriteany invwritebackup invws
+
+" termcap codes (which can also be set) {{{2
+syn keyword vimOption contained t_AB t_AF t_al t_AL t_bc t_cd t_ce t_cl t_cm t_Co t_cs t_CS t_CV t_da t_db t_dl t_DL 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_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
+syn match vimOption contained "t_%1"
+syn match vimOption contained "t_#2"
+syn match vimOption contained "t_#4"
+syn match vimOption contained "t_@7"
+syn match vimOption contained "t_*7"
+syn match vimOption contained "t_&8"
+syn match vimOption contained "t_%i"
+syn match vimOption contained "t_k;"
+
+" unsupported settings: these are supported by vi but don't do anything in vim {{{2
+syn keyword vimErrSetting contained hardtabs ht w1200 w300 w9600 wi window
+
+" AutoBuf 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 CursorHold E135 E143 E200 E201 E203 E204 EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter RemoteReply StdinReadPost StdinReadPre Syntax TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre 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
+
+" Default highlighting groups {{{2
+syn keyword vimHLGroup contained Conceal Cursor CursorIM DiffAdd DiffChange DiffDelete DiffText Directory ErrorMsg FoldColumn Folded IncSearch LineNr Menu ModeMsg MoreMsg NonText Normal Question Scrollbar Search SignColumn SpecialKey StatusLine StatusLineNC Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
+syn case match
+
+" Function Names {{{2
+syn keyword vimFuncName contained append argc argidx argv browse bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line char2nr cindent col confirm cscope_connection cursor delete did_filetype escape eventhandler executable exists expand filereadable filewritable fnamemodify foldclosed foldclosedend foldlevel foldtext foreground function getbufvar getchar getcharmod getcmdline getcmdpos getcwd getfsize getftime getline getreg getregtype getwinposx getwinposy getwinvar glob globpath has hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent input inputdialog inputrestore inputsave inputsecret isdirectory libcall libcallnr line line2byte lispindent localtime maparg mapcheck match matchend matchstr mode nextnonblank nr2char prevnonblank remote_expr remote_foreground remote_peek remote_read remote_send rename resolve search searchpair server2client serverlist setbufvar setcmdpos setline setreg setwinvar simplify strftime stridx strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tempname tolower toupper type virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winwidth
+
+"--- syntax above generated by mkvimvim ---
+
+" Special Vim Highlighting {{{1
+
+" Numbers {{{1
+" =======
+syn match vimNumber "\<\d\+\([lL]\|\.\d\+\)\="
+syn match vimNumber "-\d\+\([lL]\|\.\d\+\)\="
+syn match vimNumber "\<0[xX]\x\+"
+syn match vimNumber "#\x\{6}"
+
+" All vimCommands are contained by vimIsCommands. {{{1
+syn match vimCmdSep "[:|]\+" skipwhite nextgroup=vimAddress,vimAutoCmd,vimCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
+syn match vimIsCommand "\<\a\+\>" contains=vimCommand
+syn match vimVar "\<[bwglsav]:\K\k*\>"
+syn match vimVar contained "\<\K\k*\>"
+
+" Insertions And Appends: insert append {{{1
+" =======================
+syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$""
+syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$""
+syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$""
+
+" Behave! {{{1
+" =======
+syn match vimBehave "\<be\%[have]\>" skipwhite nextgroup=vimBehaveModel,vimBehaveError
+syn keyword vimBehaveModel contained mswin xterm
+syn match vimBehaveError contained "[^ ]\+"
+
+" Filetypes {{{1
+" =========
+syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*\(|\|$\)" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
+syn match vimFTError contained "\I\i*"
+syn keyword vimFTCmd contained filet[ype]
+syn keyword vimFTOption contained detect indent off on plugin
+
+" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{1
+" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
+syn cluster vimAugroupList contains=vimIsCommand,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn region vimAugroup start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>" contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
+syn keyword vimAugroupKey contained aug[roup]
+
+" Functions : Tag is provided for those who wish to highlight tagged functions {{{1
+" =========
+syn cluster vimFuncList contains=vimFuncKey,Tag,vimFuncSID
+syn cluster vimFuncBodyList contains=vimIsCommand,vimFunction,vimFunctionError,vimFuncBody,vimLineComment,vimSpecFile,vimOper,vimNumber,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn match vimFunctionError "\<fu\%[nction]!\=\s\+\zs\U\i\{-}\ze\s*(" contains=vimFuncKey,vimFuncBlank nextgroup=vimFuncBody
+syn match vimFunction "\<fu\%[nction]!\=\s\+\(<[sS][iI][dD]>\|[Ss]:\|\u\)\i*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
+syn region vimFuncBody contained start=")" end="\<endf\%[unction]" contains=@vimFuncBodyList
+syn match vimFuncVar contained "a:\(\I\i*\|\d\+\)"
+syn match vimFuncSID contained "\c<sid>\|\<s:"
+syn keyword vimFuncKey contained fu[nction]
+syn match vimFuncBlank contained "\s\+"
+
+syn keyword vimPattern contained start skip end
+
+" Operators: {{{1
+" =========
+syn cluster vimOperGroup contains=vimOper,vimOperParen,vimNumber,vimString
+syn match vimOper "\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
+syn match vimOper "||\|&&\|[-+.]" skipwhite nextgroup=vimString,vimSpecFile
+syn region vimOperParen matchgroup=vimOper start="(" end=")" contains=@vimOperGroup
+syn match vimOperError ")"
+
+" Special Filenames, Modifiers, Extension Removal: {{{1
+" ===============================================
+syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst
+syn match vimSpecFileMod "\(:[phtre]\)\+" contained
+
+" User-Specified Commands: {{{1
+" =======================
+syn cluster vimUserCmdList contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vimCtrlChar,vimEscapeBrace,vimFilter,vimFunc,vimFunction,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimLet,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,vimSynLine
+syn keyword vimUserCommand contained com[mand]
+syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserCommand,@vimUserCmdList
+syn match vimUserAttrb contained "-n\%[args]=[01*?+]" contains=vimUserAttrbKey,vimOper
+syn match vimUserAttrb contained "-com\%[plete]=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
+syn match vimUserAttrb contained "-ra\%[nge]\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
+syn match vimUserAttrb contained "-cou\%[nt]=\d\+" contains=vimNumber,vimOper,vimUserAttrbKey
+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
+syn match vimUserCmdError contained "\S\+\>"
+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 tag tag_listfiles var
+syn case match
+syn match vimUserAttrbCmplt contained "custom,\u\w*"
+
+" Errors: {{{1
+" ======
+syn match vimElseIfErr "\<else\s\+if\>"
+
+" Lower Priority Comments: after some vim commands... {{{1
+" =======================
+syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
+syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
+syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
+syn region vimCommentString contained oneline start='\S\s\+"'ms=s+1 end='"'
+
+" Environment Variables: {{{1
+" =====================
+syn match vimEnvvar "\$\I\i*"
+syn match vimEnvvar "\${\I\i*}"
+
+" In-String Specials: {{{1
+" Try to catch strings, if nothing else matches (therefore it must precede the others!)
+" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
+syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\^\=\]\=" skip="\\\\\|\\\]" end="\]"me=e-1
+syn match vimPatSepErr contained "\\)"
+syn match vimPatSep contained "\\|"
+syn region vimPatSepZone oneline contained transparent matchgroup=vimPatSep start="\\%\=(" skip="\\\\" end="\\)" contains=@vimStringGroup
+syn region vimPatSepZone oneline contained matchgroup=vimPatSep start="\\%\=(" skip="\\\\" end="\\)" contains=@vimStringGroup
+syn region vimPatRegion contained transparent matchgroup=vimPatSep start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
+syn match vimNotPatSep contained "\\\\"
+syn cluster vimStringGroup contains=vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone
+syn region vimString oneline keepend start=+[^:a-zA-Z>!\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+ contains=@vimStringGroup
+syn region vimString oneline keepend start=+[^:a-zA-Z>!\\]'+lc=1 end=+'+ contains=@vimStringGroup
+syn region vimString oneline start=+=!+lc=1 skip=+\\\\\|\\!+ end=+!+ contains=@vimStringGroup
+syn region vimString oneline start="=+"lc=1 skip="\\\\\|\\+" end="+" contains=@vimStringGroup
+syn region vimString oneline start="[^\\]+\s*[^a-zA-Z0-9. \t]"lc=1 skip="\\\\\|\\+" end="+" contains=@vimStringGroup
+syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup
+syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
+syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
+
+" Substitutions: {{{1
+" =============
+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\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat contained
+syn match vimSubst "/\zss\%[ubstitute]\ze/" nextgroup=vimSubstPat
+syn match vimSubst1 contained "s\%[ubstitute]\>" nextgroup=vimSubstPat
+syn region vimSubstPat contained matchgroup=vimSubstDelim start="\z([^a-zA-Z( \t[\]&]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1 contains=@vimSubstList nextgroup=vimSubstRep4 oneline
+syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
+syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
+syn match vimCollClassErr contained "\[:.\{-\}:\]"
+syn match vimCollClass contained transparent "\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|return\|tab\|escape\|backspace\):\]"
+syn match vimSubstSubstr contained "\\z\=\d"
+syn match vimSubstTwoBS contained "\\\\"
+syn match vimSubstFlagErr contained "[^< \t\r]\+" contains=vimSubstFlags
+syn match vimSubstFlags contained "[&cegiIpr]\+"
+
+" 'String': {{{1
+syn match vimString "[^(,]'[^']\{-}'"lc=1 contains=@vimStringGroup
+
+" Marks, Registers, Addresses, Filters: {{{1
+syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match vimMark ",\zs'[<>]\ze" nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match vimMarkNumber "[-+]\d\+" nextgroup=vimSubst contained contains=vimOper
+syn match vimPlainMark contained "'[a-zA-Z0-9]"
+
+syn match vimRegister '[^(,;.]"[a-zA-Z0-9.%#:_\-/][^a-zA-Z_"]'lc=1,me=e-1
+syn match vimRegister '\<norm\s\+"[a-zA-Z0-9]'lc=5
+syn match vimRegister '\<normal\s\+"[a-zA-Z0-9]'lc=7
+syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
+
+syn match vimAddress ",[.$]"lc=1 skipwhite nextgroup=vimSubst1
+syn match vimAddress "%\a"me=e-1 skipwhite nextgroup=vimString,vimSubst1
+
+syn match vimFilter contained "^!.\{-}\(|\|$\)" contains=vimSpecFile
+syn match vimFilter contained "\A!.\{-}\(|\|$\)"ms=s+1 contains=vimSpecFile
+
+" Complex repeats (:h complex-repeat) {{{1
+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 {{{1
+syn region vimSet matchgroup=vimCommand start="\<setlocal\|set\>" end="|"me=e-1 end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
+syn region vimSetEqual contained start="=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation
+syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
+syn match vimSetSep contained "[,:]"
+syn match vimSetMod contained "&vim\|[!&]\|all&"
+
+" Let {{{1
+" ===
+syn keyword vimLet let unl[et] skipwhite nextgroup=vimVar
+
+" Autocmd {{{1
+" =======
+syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
+syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
+syn match vimAutoCmdSfxList contained "\S*"
+syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
+
+" Echo and Execute -- prefer strings! {{{1
+" ================
+syn region vimEcho oneline excludenl matchgroup=vimCommand start="\<ec\%[ho]\>" skip="\(\\\\\)*\\|" end="$\||" contains=vimFunc,vimString,varVar
+syn region vimExecute oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimIsCommand,vimString,vimOper,vimVar,vimNotation
+syn match vimEchoHL "echohl\=" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchoHLNone
+syn case ignore
+syn keyword vimEchoHLNone none
+syn case match
+
+" Maps {{{1
+" ====
+syn cluster vimMapGroup contains=vimMapBang,vimMapLhs,vimMapMod
+syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] map nm[ap] nn[oremap] no[remap] om[ap] ono[remap] vm[ap] vn[oremap] skipwhite nextgroup=@vimMapGroup
+syn match vimMapLhs contained "\S\+" contains=vimNotation,vimCtrlChar
+syn match vimMapBang contained "!" skipwhite nextgroup=vimMapLhs
+syn match vimMapMod contained "\c<\(buffer\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMapGroup
+syn case ignore
+syn keyword vimMapModKey contained buffer leader localleader plug script sid silent unique
+syn case match
+
+" Menus {{{1
+" =====
+syn cluster vimMenuList contains=vimMenuBang,vimMenuPriority,vimMenuName,vimMenuMod
+syn keyword vimCommand am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] skipwhite nextgroup=@vimMenuList
+syn match vimMenuName "[^ \t\\<]\+" contained nextgroup=vimMenuNameMore,vimMenuMap
+syn match vimMenuPriority "\d\+\(\.\d\+\)*" contained skipwhite nextgroup=vimMenuName
+syn match vimMenuNameMore "\c\\\s\|<tab>\|\\\." contained nextgroup=vimMenuName,vimMenuNameMore contains=vimNotation
+syn match vimMenuMod contained "\c<\(script\|silent\)\+>" skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMenuList
+syn match vimMenuMap "\s" contained skipwhite nextgroup=vimMenuRhs
+syn match vimMenuRhs ".*$" contained contains=vimString,vimComment,vimIsCommand
+syn match vimMenuBang "!" contained skipwhite nextgroup=@vimMenuList
+
+" Angle-Bracket Notation (tnx to Michael Geddes) {{{1
+" ======================
+syn case ignore
+syn match vimNotation "\(\\\|<lt>\)\=<\([scam]-\)\{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>\)\=<\([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
+syn match vimNotation '\(\\\|<lt>\)\=<\(line[12]\|count\|bang\|reg\|args\|lt\|[qf]-args\)>' contains=vimBracket
+syn match vimNotation "\(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>" contains=vimBracket
+syn match vimBracket contained "[\\<>]"
+syn case match
+
+" User Function Highlighting (following Gautam Iyer's suggestion)
+" ==========================
+syn match vimFunc "\%([sS]:\|<[sS][iI][dD]>\)\=\I\i*\ze\s*(" contains=vimUserFunc,vimFuncName
+syn match vimUserFunc "\%([sS]:\|<[sS][iI][dD]>\)\i\+\|\<\u\i*\>\|\<if\>" contained contains=vimNotation,vimCommand
+
+" Syntax {{{1
+"=======
+syn match vimGroupList contained "@\=[^ \t,]*" contains=vimGroupSpecial,vimPatSep
+syn match vimGroupList contained "@\=[^ \t,]*," nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
+syn keyword vimGroupSpecial contained ALL ALLBUT
+syn match vimSynError contained "\i\+"
+syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
+syn match vimSynContains contained "\<contain\(s\|edin\)=" nextgroup=vimGroupList
+syn match vimSynKeyContainedin contained "\<containedin=" nextgroup=vimGroupList
+syn match vimSynNextgroup contained "nextgroup=" nextgroup=vimGroupList
+
+syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+syn match vimAuSyntax contained "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+
+" Syntax: case {{{1
+syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
+syn match vimSynCaseError contained "\i\+"
+syn keyword vimSynCase contained ignore match
+
+" Syntax: clear {{{1
+syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
+
+" Syntax: cluster {{{1
+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 match vimGroupAdd contained "add=" nextgroup=vimGroupList
+syn match vimGroupRem contained "remove=" nextgroup=vimGroupList
+
+" Syntax: include {{{1
+syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
+
+" Syntax: keyword {{{1
+syn cluster vimSynKeyGroup contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
+syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
+syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
+syn match vimSynKeyOpt contained "\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
+
+" Syntax: match {{{1
+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 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 vimSynMtchCchar contained "."
+endif
+
+" Syntax: off and on {{{1
+syn keyword vimSynType contained enable list manual off on reset
+
+" Syntax: region {{{1
+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 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
+syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
+syn match vimSynPatMod contained "\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
+syn match vimSynPatMod contained "\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
+syn match vimSynPatMod contained "lc=\d\+"
+syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
+syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
+syn match vimSynNotPatRange contained "\\\\\|\\\["
+syn match vimMtchComment contained '"[^"]\+$'
+
+" Syntax: sync {{{1
+" ============
+syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinecont,vimSyncRegion
+syn match vimSyncError contained "\i\+"
+syn keyword vimSyncC contained ccomment clear fromstart
+syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
+syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
+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 vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
+syn match vimSyncGroup contained "\k\+" skipwhite nextgroup=vimSynRegPat,vimSyncNone
+syn keyword vimSyncNone contained NONE
+
+" Additional IsCommand, here by reasons of precedence {{{1
+" ====================
+syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
+
+" Highlighting {{{1
+" ============
+syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
+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
+syn keyword vimFgBgAttrib contained none bg background fg foreground
+syn case match
+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 case match
+syn match vimHiFontname contained "[a-zA-Z\-*]\+"
+syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
+syn match vimHiGuiRgb contained "#\x\{6}"
+syn match vimHiCtermError contained "[^0-9]\i*"
+
+" Highlighting: hi group key=arg ... {{{1
+syn cluster vimHiCluster contains=vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
+syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster
+syn match vimHiKeyError contained "\i\+="he=e-1
+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 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="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
+syn match vimHiTermcap contained "\S\+" contains=vimNotation
+
+" Highlight: clear {{{1
+syn keyword vimHiClear contained clear nextgroup=vimHiGroup
+
+" Highlight: link {{{1
+syn region vimHiLink contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+
+" Control Characters {{{1
+" ==================
+syn match vimCtrlChar "[- -]"
+
+" Beginners - Patterns that involve ^ {{{1
+" =========
+syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
+syn match vimCommentTitle '"\s*\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
+syn match vimContinue "^\s*\\"
+syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
+syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
+
+" Scripts : perl,ruby : Benoit Cerrina {{{1
+" ======= python,tcl: Johannes Zellner
+
+" allow users to prevent embedded script syntax highlighting
+" when vim doesn't have perl/python/ruby/tcl support. Do
+" so by setting g:vimembedscript= 0 in the user's <.vimrc>.
+if !exists("g:vimembedscript")
+ let g:vimembedscript= 1
+endif
+
+" [-- perl --] {{{2
+if (has("perl") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/perl.vim")
+ unlet! b:current_syntax
+ syn include @vimPerlScript <sfile>:p:h/perl.vim
+ syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPerlScript
+ syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+endif
+
+" [-- ruby --] {{{2
+if (has("ruby") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/ruby.vim")
+ unlet! b:current_syntax
+ syn include @vimRubyScript <sfile>:p:h/ruby.vim
+ syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimRubyScript
+ syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
+endif
+
+" [-- python --] {{{2
+if (has("python") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/python.vim")
+ unlet! b:current_syntax
+ syn include @vimPythonScript <sfile>:p:h/python.vim
+ syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPythonScript
+ syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript
+endif
+
+" [-- tcl --] {{{2
+if (has("tcl") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/tcl.vim")
+ unlet! b:current_syntax
+ syn include @vimTclScript <sfile>:p:h/tcl.vim
+ syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
+ syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
+endif
+
+" Synchronize (speed) {{{1
+"============
+if exists("g:vim_minlines")
+ exe "syn sync minlines=".g:vim_minlines
+endif
+if exists("g:vim_maxlines")
+ exe "syn sync maxlines=".g:vim_maxlines
+else
+ syn sync maxlines=60
+endif
+syn sync linecont "^\s\+\\"
+syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
+
+" Highlighting Settings {{{1
+" ====================
+
+hi def link vimAuHighlight vimHighlight
+hi def link vimSubst1 vimSubst
+hi def link vimBehaveModel vimBehave
+
+hi def link vimAddress vimMark
+" hi def link vimAugroupError vimError
+hi def link vimAugroupKey vimCommand
+hi def link vimAutoCmdOpt vimOption
+hi def link vimAutoCmd vimCommand
+hi def link vimAutoSet vimCommand
+hi def link vimBehaveError vimError
+hi def link vimBehave vimCommand
+hi def link vimCollClassErr vimError
+hi def link vimCommentString vimString
+hi def link vimCondHL vimCommand
+hi def link vimEchoHLNone vimGroup
+hi def link vimEchoHL vimCommand
+hi def link vimElseif vimCondHL
+hi def link vimErrSetting vimError
+hi def link vimFgBgAttrib vimHiAttrib
+hi def link vimFTCmd vimCommand
+hi def link vimFTError vimError
+hi def link vimFTOption vimSynType
+hi def link VimFunc vimError
+hi def link vimFuncKey vimCommand
+hi def link vimFunctionError vimError
+hi def link vimGroupAdd vimSynOption
+hi def link vimGroupRem vimSynOption
+hi def link vimHiAttribList vimError
+hi def link vimHiCtermError vimError
+hi def link vimHiCtermFgBg vimHiTerm
+hi def link vimHiCTerm vimHiTerm
+hi def link vimHighlight vimCommand
+hi def link vimHiGroup vimGroupName
+hi def link vimHiGuiFgBg vimHiTerm
+hi def link vimHiGuiFont vimHiTerm
+hi def link vimHiGuiRgb vimNumber
+hi def link vimHiGui vimHiTerm
+hi def link vimHiKeyError vimError
+hi def link vimHiStartStop vimHiTerm
+hi def link vimHLGroup vimGroup
+hi def link vimInsert vimString
+hi def link vimKeyCodeError vimError
+hi def link vimKeyCode vimSpecFile
+hi def link vimLet vimCommand
+hi def link vimLineComment vimComment
+hi def link vimMapBang vimCommand
+hi def link vimMapModErr vimError
+hi def link vimMapModKey vimFuncSID
+hi def link vimMapMod vimBracket
+hi def link vimMap vimCommand
+hi def link vimMarkNumber vimNumber
+hi def link vimMenuMod vimMapMod
+hi def link vimMenuNameMore vimMenuName
+hi def link vimMtchComment vimComment
+hi def link vimNotFunc vimCommand
+hi def link vimNotPatSep vimString
+hi def link vimPatSepErr vimPatSep
+hi def link vimPatSepZone vimString
+hi def link vimPlainMark vimMark
+hi def link vimPlainRegister vimRegister
+hi def link vimSetMod vimOption
+hi def link vimSetString vimString
+hi def link vimSpecFileMod vimSpecFile
+hi def link vimStringCont vimString
+hi def link vimSubstFlagErr vimError
+hi def link vimSubstTwoBS vimString
+hi def link vimSubst vimCommand
+hi def link vimSynCaseError vimError
+hi def link vimSyncGroupName vimGroupName
+hi def link vimSyncGroup vimGroupName
+hi def link vimSynContains vimSynOption
+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 vimSynPatRange vimString
+hi def link vimSynRegOpt vimSynOption
+hi def link vimSynRegPat vimString
+hi def link vimSyntax vimCommand
+hi def link vimSynType vimSpecial
+hi def link vimUserAttrbCmplt vimSpecial
+hi def link vimUserAttrbKey vimOption
+hi def link vimUserAttrb vimSpecial
+hi def link vimUserCommand vimCommand
+hi def link vimUserFunc Normal
+
+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 vimGroup Type
+hi def link vimGroupSpecial Special
+hi def link vimHLMod PreProc
+hi def link vimHiAttrib PreProc
+hi def link vimHiTerm Type
+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 vimOper Operator
+hi def link vimOption PreProc
+hi def link vimOperError Error
+hi def link vimPatSep SpecialChar
+hi def link vimPattern Type
+hi def link vimRegister SpecialChar
+hi def link vimScriptDelim Comment
+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 vimSynCase Type
+hi def link vimSynCaseError Error
+hi def link vimSynError Error
+hi def link vimSynOption Special
+hi def link vimSynReg Type
+hi def link vimSyncC Type
+hi def link vimSyncError Error
+hi def link vimSyncKey Type
+hi def link vimSyncNone Type
+hi def link vimTodo Todo
+hi def link vimUserCmdError Error
+
+" Current Syntax Variable: {{{1
+let b:current_syntax = "vim"
+" vim:ts=18 fdm=marker
diff --git a/runtime/syntax/viminfo.vim b/runtime/syntax/viminfo.vim
new file mode 100644
index 000000000..46d5b892a
--- /dev/null
+++ b/runtime/syntax/viminfo.vim
@@ -0,0 +1,53 @@
+" Vim syntax file
+" Language: Vim .viminfo file
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 Apr 25
+
+" 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
+
+" The lines that are NOT recognized
+syn match viminfoError "^[^\t].*"
+
+" The one-character one-liners that are recognized
+syn match viminfoStatement "^[/&$@:?=%!<]"
+
+" The two-character one-liners that are recognized
+syn match viminfoStatement "^[-'>"]."
+syn match viminfoStatement +^"".+
+syn match viminfoStatement "^\~[/&]"
+syn match viminfoStatement "^\~[hH]"
+syn match viminfoStatement "^\~[mM][sS][lL][eE]\d\+\~\=[/&]"
+
+syn match viminfoOption "^\*.*=" contains=viminfoOptionName
+syn match viminfoOptionName "\*\a*"ms=s+1 contained
+
+" Comments
+syn match viminfoComment "^#.*"
+
+" 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_viminfo_syntax_inits")
+ if version < 508
+ let did_viminfo_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink viminfoComment Comment
+ HiLink viminfoError Error
+ HiLink viminfoStatement Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "viminfo"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/virata.vim b/runtime/syntax/virata.vim
new file mode 100644
index 000000000..e597b8e31
--- /dev/null
+++ b/runtime/syntax/virata.vim
@@ -0,0 +1,219 @@
+" Vim syntax file
+" Language: Virata AConfig Configuration Script
+" Maintainer: Manuel M.H. Stol <mmh.stol@gmx.net>
+" Last Change: 2003 May 11
+" Vim URL: http://www.vim.org/lang.html
+" Virata URL: http://www.globespanvirata.com/
+
+
+" Virata AConfig Configuration Script syntax
+" Can be detected by: 1) Extension .hw, .sw, .pkg and .module
+" 2) The file name pattern "mk.*\.cfg"
+" 3) The string "Virata" in the first 5 lines
+
+
+" Setup Syntax:
+if version < 600
+ " Clear old syntax settings
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+" Virata syntax is case insensitive (mostly)
+syn case ignore
+
+
+
+" Comments:
+" Virata comments start with %, but % is not a keyword character
+syn region virataComment start="^%" start="\s%"lc=1 keepend end="$" contains=@virataGrpInComments
+syn region virataSpclComment start="^%%" start="\s%%"lc=1 keepend end="$" contains=@virataGrpInComments
+syn keyword virataInCommentTodo contained TODO FIXME XXX[XXXXX] REVIEW TBD
+syn cluster virataGrpInComments contains=virataInCommentTodo
+syn cluster virataGrpComments contains=@virataGrpInComments,virataComment,virataSpclComment
+
+
+" Constants:
+syn match virataStringError +["]+
+syn region virataString start=+"+ skip=+\(\\\\\|\\"\)+ end=+"+ oneline contains=virataSpclCharError,virataSpclChar,@virataGrpDefSubsts
+syn match virataCharacter +'[^']\{-}'+ contains=virataSpclCharError,virataSpclChar
+syn match virataSpclChar contained +\\\(x\x\+\|\o\{1,3}\|['\"?\\abefnrtv]\)+
+syn match virataNumberError "\<\d\{-1,}\I\{-1,}\>"
+syn match virataNumberError "\<0x\x*\X\x*\>"
+syn match virataNumberError "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
+syn match virataDecNumber "\<\d\+U\=L\=\>"
+syn match virataHexNumber "\<0x\x\+U\=L\=\>"
+syn match virataSizeNumber "\<\d\+[BKM]\>"he=e-1
+syn match virataSizeNumber "\<\d\+[KM]B\>"he=e-2
+syn cluster virataGrpNumbers contains=virataNumberError,virataDecNumber,virataHexNumber,virataSizeNumber
+syn cluster virataGrpConstants contains=@virataGrpNumbers,virataStringError,virataString,virataCharacter,virataSpclChar
+
+
+" Identifiers:
+syn match virataIdentError contained "\<\D\S*\>"
+syn match virataIdentifier contained "\<\I\i\{-}\(\-\i\{-1,}\)*\>" contains=@virataGrpDefSubsts
+syn match virataFileIdent contained "\F\f*" contains=@virataGrpDefSubsts
+syn cluster virataGrpIdents contains=virataIdentifier,virataIdentError
+syn cluster virataGrpFileIdents contains=virataFileIdent,virataIdentError
+
+
+" Statements:
+syn match virataStatement "^\s*Config\(\(/Kernel\)\=\.\(hs\=\|s\)\)\=\>"
+syn match virataStatement "^\s*Config\s\+\I\i\{-}\(\-\i\{-1,}\)*\.\(hs\=\|s\)\>"
+syn match virataStatement "^\s*Make\.\I\i\{-}\(\-\i\{-1}\)*\>" skipwhite nextgroup=@virataGrpIdents
+syn match virataStatement "^\s*Make\.c\(at\)\=++\s"me=e-1 skipwhite nextgroup=@virataGrpIdents
+syn match virataStatement "^\s*\(Architecture\|GetEnv\|Reserved\|\(Un\)\=Define\|Version\)\>" skipwhite nextgroup=@virataGrpIdents
+syn match virataStatement "^\s*\(Hardware\|ModuleSource\|\(Release\)\=Path\|Software\)\>" skipwhite nextgroup=@virataGrpFileIdents
+syn match virataStatement "^\s*\(DefaultPri\|Hydrogen\)\>" skipwhite nextgroup=virataDecNumber,virataNumberError
+syn match virataStatement "^\s*\(NoInit\|PCI\|SysLink\)\>"
+syn match virataStatement "^\s*Allow\s\+\(ModuleConfig\)\>"
+syn match virataStatement "^\s*NoWarn\s\+\(Export\|Parse\=able\|Relative]\)\>"
+syn match virataStatement "^\s*Debug\s\+O\(ff\|n\)\>"
+
+" Import (Package <exec>|Module <name> from <dir>)
+syn region virataImportDef transparent matchgroup=virataStatement start="^\s*Import\>" keepend end="$" contains=virataInImport,virataModuleDef,virataNumberError,virataStringError,@virataGrpDefSubsts
+syn match virataInImport contained "\<\(Module\|Package\|from\)\>" skipwhite nextgroup=@virataGrpFileIdents
+" Export (Header <header file>|SLibrary <obj file>)
+syn region virataExportDef transparent matchgroup=virataStatement start="^\s*Export\>" keepend end="$" contains=virataInExport,virataNumberError,virataStringError,@virataGrpDefSubsts
+syn match virataInExport contained "\<\(Header\|[SU]Library\)\>" skipwhite nextgroup=@virataGrpFileIdents
+" Process <name> is <dir/exec>
+syn region virataProcessDef transparent matchgroup=virataStatement start="^\s*Process\>" keepend end="$" contains=virataInProcess,virataInExec,virataNumberError,virataStringError,@virataGrpDefSubsts,@virataGrpIdents
+syn match virataInProcess contained "\<is\>"
+" Instance <name> of <module>
+syn region virataInstanceDef transparent matchgroup=virataStatement start="^\s*Instance\>" keepend end="$" contains=virataInInstance,virataNumberError,virataStringError,@virataGrpDefSubsts,@virataGrpIdents
+syn match virataInInstance contained "\<of\>"
+" Module <name> from <dir>
+syn region virataModuleDef transparent matchgroup=virataStatement start="^\s*\(Package\|Module\)\>" keepend end="$" contains=virataInModule,virataNumberError,virataStringError,@virataGrpDefSubsts
+syn match virataInModule contained "^\s*Package\>"hs=e-7 skipwhite nextgroup=@virataGrpIdents
+syn match virataInModule contained "^\s*Module\>"hs=e-6 skipwhite nextgroup=@virataGrpIdents
+syn match virataInModule contained "\<from\>" skipwhite nextgroup=@virataGrpFileIdents
+" Colour <name> from <dir>
+syn region virataColourDef transparent matchgroup=virataStatement start="^\s*Colour\>" keepend end="$" contains=virataInColour,virataNumberError,virataStringError,@virataGrpDefSubsts
+syn match virataInColour contained "^\s*Colour\>"hs=e-6 skipwhite nextgroup=@virataGrpIdents
+syn match virataInColour contained "\<from\>" skipwhite nextgroup=@virataGrpFileIdents
+" Link {<link cmds>}
+" Object {Executable [<ExecOptions>]}
+syn match virataStatement "^\s*\(Link\|Object\)"
+" Executable <name> [<ExecOptions>]
+syn region virataExecDef transparent matchgroup=virataStatement start="^\s*Executable\>" keepend end="$" contains=virataInExec,virataNumberError,virataStringError
+syn match virataInExec contained "^\s*Executable\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpIdents
+syn match virataInExec contained "\<\(epilogue\|pro\(logue\|cess\)\|qhandler\)\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpIdents
+syn match virataInExec contained "\<\(priority\|stack\)\>" skipwhite nextgroup=@virataGrpDefSubsts,@virataGrpNumbers
+" Message <name> {<msg format>}
+" MessageId <number>
+syn match virataStatement "^\s*Message\(Id\)\=\>" skipwhite nextgroup=@virataGrpNumbers
+" MakeRule <make suffix=file> {<make cmds>}
+syn region virataMakeDef transparent matchgroup=virataStatement start="^\s*MakeRule\>" keepend end="$" contains=virataInMake,@virataGrpDefSubsts
+syn case match
+syn match virataInMake contained "\<N\>"
+syn case ignore
+" (Append|Edit|Copy)Rule <make suffix=file> <subst cmd>
+syn match virataStatement "^\s*\(Append\|Copy\|Edit\)Rule\>"
+" AlterRules in <file> <subst cmd>
+syn region virataAlterDef transparent matchgroup=virataStatement start="^\s*AlterRules\>" keepend end="$" contains=virataInAlter,@virataGrpDefSubsts
+syn match virataInAlter contained "\<in\>" skipwhite nextgroup=@virataGrpIdents
+" Clustering
+syn cluster virataGrpInStatmnts contains=virataInImport,virataInExport,virataInExec,virataInProcess,virataInAlter,virataInInstance,virataInModule,virataInColour
+syn cluster virataGrpStatements contains=@virataGrpInStatmnts,virataStatement,virataImportDef,virataExportDef,virataExecDef,virataProcessDef,virataAlterDef,virataInstanceDef,virataModuleDef,virataColourDef
+
+
+" MkFlash.Cfg File Statements:
+syn region virataCfgFileDef transparent matchgroup=virataCfgStatement start="^\s*Dir\>" start="^\s*\a\{-}File\>" start="^\s*OutputFile\d\d\=\>" start="^\s*\a\w\{-}[NP]PFile\>" keepend end="$" contains=@virataGrpFileIdents
+syn region virataCfgSizeDef transparent matchgroup=virataCfgStatement start="^\s*\a\{-}Size\>" start="^\s*ConfigInfo\>" keepend end="$" contains=@virataGrpNumbers,@virataGrpDefSubsts,virataIdentError
+syn region virataCfgNumberDef transparent matchgroup=virataCfgStatement start="^\s*FlashchipNum\(b\(er\=\)\=\)\=\>" start="^\s*Granularity\>" keepend end="$" contains=@virataGrpNumbers,@virataGrpDefSubsts
+syn region virataCfgMacAddrDef transparent matchgroup=virataCfgStatement start="^\s*MacAddress\>" keepend end="$" contains=virataNumberError,virataStringError,virataIdentError,virataInMacAddr,@virataGrpDefSubsts
+syn match virataInMacAddr contained "\x[:]\x\{1,2}\>"lc=2
+syn match virataInMacAddr contained "\s\x\{1,2}[:]\x"lc=1,me=e-1,he=e-2 nextgroup=virataInMacAddr
+syn match virataCfgStatement "^\s*Target\>" skipwhite nextgroup=@virataGrpIdents
+syn cluster virataGrpCfgs contains=virataCfgStatement,virataCfgFileDef,virataCfgSizeDef,virataCfgNumberDef,virataCfgMacAddrDef,virataInMacAddr
+
+
+
+" PreProcessor Instructions:
+" Defines
+syn match virataDefine "^\s*\(Un\)\=Set\>" skipwhite nextgroup=@virataGrpIdents
+syn match virataInclude "^\s*Include\>" skipwhite nextgroup=@virataGrpFileIdents
+syn match virataDefSubstError "[^$]\$"lc=1
+syn match virataDefSubstError "\$\(\w\|{\(.\{-}}\)\=\)"
+syn case match
+syn match virataDefSubst "\$\(\d\|[DINORS]\|{\I\i\{-}\(\-\i\{-1,}\)*}\)"
+syn case ignore
+" Conditionals
+syn cluster virataGrpCntnPreCon contains=ALLBUT,@virataGrpInComments,@virataGrpFileIdents,@virataGrpInStatmnts
+syn region virataPreConDef transparent matchgroup=virataPreCondit start="^\s*If\>" end="^\s*Endif\>" contains=@virataGrpCntnPreCon
+syn match virataPreCondit contained "^\s*Else\(\s\+If\)\=\>"
+syn region virataPreConDef transparent matchgroup=virataPreCondit start="^\s*ForEach\>" end="^\s*Done\>" contains=@virataGrpCntnPreCon
+" Pre-Processors
+syn region virataPreProc start="^\s*Error\>" start="^\s*Warning\>" oneline end="$" contains=@virataGrpConstants,@virataGrpDefSubsts
+syn cluster virataGrpDefSubsts contains=virataDefSubstError,virataDefSubst
+syn cluster virataGrpPreProcs contains=@virataGrpDefSubsts,virataDefine,virataInclude,virataPreConDef,virataPreCondit,virataPreProc
+
+
+" Synchronize Syntax:
+syn sync clear
+syn sync minlines=50 "for multiple region nesting
+
+
+
+" 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_virata_syntax_inits")
+ if version < 508
+ let did_virata_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Sub Links:
+ HiLink virataDefSubstError virataPreProcError
+ HiLink virataDefSubst virataPreProc
+ HiLink virataInAlter virataOperator
+ HiLink virataInExec virataOperator
+ HiLink virataInExport virataOperator
+ HiLink virataInImport virataOperator
+ HiLink virataInInstance virataOperator
+ HiLink virataInMake virataOperator
+ HiLink virataInModule virataOperator
+ HiLink virataInProcess virataOperator
+ HiLink virataInMacAddr virataHexNumber
+
+ " Comment Group:
+ HiLink virataComment Comment
+ HiLink virataSpclComment SpecialComment
+ HiLink virataInCommentTodo Todo
+
+ " Constant Group:
+ HiLink virataString String
+ HiLink virataStringError Error
+ HiLink virataCharacter Character
+ HiLink virataSpclChar Special
+ HiLink virataDecNumber Number
+ HiLink virataHexNumber Number
+ HiLink virataSizeNumber Number
+ HiLink virataNumberError Error
+
+ " Identifier Group:
+ HiLink virataIdentError Error
+
+ " PreProc Group:
+ HiLink virataPreProc PreProc
+ HiLink virataDefine Define
+ HiLink virataInclude Include
+ HiLink virataPreCondit PreCondit
+ HiLink virataPreProcError Error
+ HiLink virataPreProcWarn Todo
+
+ " Directive Group:
+ HiLink virataStatement Statement
+ HiLink virataCfgStatement Statement
+ HiLink virataOperator Operator
+ HiLink virataDirective Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "virata"
+
+" vim:ts=8:sw=2:noet:
diff --git a/runtime/syntax/vmasm.vim b/runtime/syntax/vmasm.vim
new file mode 100644
index 000000000..85d044125
--- /dev/null
+++ b/runtime/syntax/vmasm.vim
@@ -0,0 +1,251 @@
+" Vim syntax file
+" Language: (VAX) Macro Assembly
+" Maintainer: Tom Uijldert <tom.uijldert [at] cmg.nl>
+" Last change: 2004 May 16
+"
+" This is incomplete. Feel free to contribute...
+"
+
+" 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
+
+" Partial list of register symbols
+syn keyword vmasmReg r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12
+syn keyword vmasmReg ap fp sp pc iv dv
+
+" All matches - order is important!
+syn keyword vmasmOpcode adawi adwc ashl ashq bitb bitw bitl decb decw decl
+syn keyword vmasmOpcode ediv emul incb incw incl mcomb mcomw mcoml
+syn keyword vmasmOpcode movzbw movzbl movzwl popl pushl rotl sbwc
+syn keyword vmasmOpcode cmpv cmpzv cmpc3 cmpc5 locc matchc movc3 movc5
+syn keyword vmasmOpcode movtc movtuc scanc skpc spanc crc extv extzv
+syn keyword vmasmOpcode ffc ffs insv aobleq aoblss bbc bbs bbcci bbssi
+syn keyword vmasmOpcode blbc blbs brb brw bsbb bsbw caseb casew casel
+syn keyword vmasmOpcode jmp jsb rsb sobgeq sobgtr callg calls ret
+syn keyword vmasmOpcode bicpsw bispsw bpt halt index movpsl nop popr pushr xfc
+syn keyword vmasmOpcode insqhi insqti insque remqhi remqti remque
+syn keyword vmasmOpcode addp4 addp6 ashp cmpp3 cmpp4 cvtpl cvtlp cvtps cvtpt
+syn keyword vmasmOpcode cvtsp cvttp divp movp mulp subp4 subp6 editpc
+syn keyword vmasmOpcode prober probew rei ldpctx svpctx mfpr mtpr bugw bugl
+syn keyword vmasmOpcode vldl vldq vgathl vgathq vstl vstq vscatl vscatq
+syn keyword vmasmOpcode vvcvt iota mfvp mtvp vsync
+syn keyword vmasmOpcode beql[u] bgtr[u] blss[u]
+syn match vmasmOpcode "\<add[bwlfdgh][23]\>"
+syn match vmasmOpcode "\<bi[cs][bwl][23]\>"
+syn match vmasmOpcode "\<clr[bwlqofdgh]\>"
+syn match vmasmOpcode "\<cmp[bwlfdgh]\>"
+syn match vmasmOpcode "\<cvt[bwlfdgh][bwlfdgh]\>"
+syn match vmasmOpcode "\<cvtr[fdgh]l\>"
+syn match vmasmOpcode "\<div[bwlfdgh][23]\>"
+syn match vmasmOpcode "\<emod[fdgh]\>"
+syn match vmasmOpcode "\<mneg[bwlfdgh]\>"
+syn match vmasmOpcode "\<mov[bwlqofdgh]\>"
+syn match vmasmOpcode "\<mul[bwlfdgh][23]\>"
+syn match vmasmOpcode "\<poly[fdgh]\>"
+syn match vmasmOpcode "\<sub[bwlfdgh][23]\>"
+syn match vmasmOpcode "\<tst[bwlfdgh]\>"
+syn match vmasmOpcode "\<xor[bwl][23]\>"
+syn match vmasmOpcode "\<mova[bwlfqdgho]\>"
+syn match vmasmOpcode "\<push[bwlfqdgho]\>"
+syn match vmasmOpcode "\<acb[bwlfgdh]\>"
+syn match vmasmOpcode "\<b[lng]equ\=\>"
+syn match vmasmOpcode "\<b[cv][cs]\>"
+syn match vmasmOpcode "\<bb[cs][cs]\>"
+syn match vmasmOpcode "\<v[vs]add[lfdg]\>"
+syn match vmasmOpcode "\<v[vs]cmp[lfdg]\>"
+syn match vmasmOpcode "\<v[vs]div[fdg]\>"
+syn match vmasmOpcode "\<v[vs]mul[lfdg]\>"
+syn match vmasmOpcode "\<v[vs]sub[lfdg]\>"
+syn match vmasmOpcode "\<v[vs]bi[cs]l\>"
+syn match vmasmOpcode "\<v[vs]xorl\>"
+syn match vmasmOpcode "\<v[vs]merge\>"
+syn match vmasmOpcode "\<v[vs]s[rl]ll\>"
+
+" Various number formats
+syn match vmasmdecNumber "[+-]\=[0-9]\+\>"
+syn match vmasmdecNumber "^d[0-9]\+\>"
+syn match vmasmhexNumber "^x[0-9a-f]\+\>"
+syn match vmasmoctNumber "^o[0-7]\+\>"
+syn match vmasmbinNumber "^b[01]\+\>"
+syn match vmasmfloatNumber "[-+]\=[0-9]\+E[-+]\=[0-9]\+"
+syn match vmasmfloatNumber "[-+]\=[0-9]\+\.[0-9]*\(E[-+]\=[0-9]\+\)\="
+
+" Valid labels
+syn match vmasmLabel "^[a-z_$.][a-z0-9_$.]\{,30}::\="
+syn match vmasmLabel "\<[0-9]\{1,5}\$:\=" " Local label
+
+" Character string constants
+" Too complex really. Could be "<...>" but those could also be
+" expressions. Don't know how to handle chosen delimiters
+" ("^<sep>...<sep>")
+" syn region vmasmString start="<" end=">" oneline
+
+" Operators
+syn match vmasmOperator "[-+*/@&!\\]"
+syn match vmasmOperator "="
+syn match vmasmOperator "==" " Global assignment
+syn match vmasmOperator "%length(.*)"
+syn match vmasmOperator "%locate(.*)"
+syn match vmasmOperator "%extract(.*)"
+syn match vmasmOperator "^[amfc]"
+syn match vmasmOperator "[bwlg]^"
+
+syn match vmasmOperator "\<\(not_\)\=equal\>"
+syn match vmasmOperator "\<less_equal\>"
+syn match vmasmOperator "\<greater\(_equal\)\=\>"
+syn match vmasmOperator "\<less_than\>"
+syn match vmasmOperator "\<\(not_\)\=defined\>"
+syn match vmasmOperator "\<\(not_\)\=blank\>"
+syn match vmasmOperator "\<identical\>"
+syn match vmasmOperator "\<different\>"
+syn match vmasmOperator "\<eq\>"
+syn match vmasmOperator "\<[gl]t\>"
+syn match vmasmOperator "\<n\=df\>"
+syn match vmasmOperator "\<n\=b\>"
+syn match vmasmOperator "\<idn\>"
+syn match vmasmOperator "\<[nlg]e\>"
+syn match vmasmOperator "\<dif\>"
+
+" Special items for comments
+syn keyword vmasmTodo contained todo
+
+" Comments
+syn match vmasmComment ";.*" contains=vmasmTodo
+
+" Include
+syn match vmasmInclude "\.library\>"
+
+" Macro definition
+syn match vmasmMacro "\.macro\>"
+syn match vmasmMacro "\.mexit\>"
+syn match vmasmMacro "\.endm\>"
+syn match vmasmMacro "\.mcall\>"
+syn match vmasmMacro "\.mdelete\>"
+
+" Conditional assembly
+syn match vmasmPreCond "\.iff\=\>"
+syn match vmasmPreCond "\.if_false\>"
+syn match vmasmPreCond "\.iftf\=\>"
+syn match vmasmPreCond "\.if_true\(_false\)\=\>"
+syn match vmasmPreCond "\.iif\>"
+
+" Loop control
+syn match vmasmRepeat "\.irpc\=\>"
+syn match vmasmRepeat "\.repeat\>"
+syn match vmasmRepeat "\.rept\>"
+syn match vmasmRepeat "\.endr\>"
+
+" Directives
+syn match vmasmDirective "\.address\>"
+syn match vmasmDirective "\.align\>"
+syn match vmasmDirective "\.asci[cdiz]\>"
+syn match vmasmDirective "\.blk[abdfghloqw]\>"
+syn match vmasmDirective "\.\(signed_\)\=byte\>"
+syn match vmasmDirective "\.\(no\)\=cross\>"
+syn match vmasmDirective "\.debug\>"
+syn match vmasmDirective "\.default displacement\>"
+syn match vmasmDirective "\.[dfgh]_floating\>"
+syn match vmasmDirective "\.disable\>"
+syn match vmasmDirective "\.double\>"
+syn match vmasmDirective "\.dsabl\>"
+syn match vmasmDirective "\.enable\=\>"
+syn match vmasmDirective "\.endc\=\>"
+syn match vmasmDirective "\.entry\>"
+syn match vmasmDirective "\.error\>"
+syn match vmasmDirective "\.even\>"
+syn match vmasmDirective "\.external\>"
+syn match vmasmDirective "\.extrn\>"
+syn match vmasmDirective "\.float\>"
+syn match vmasmDirective "\.globa\=l\>"
+syn match vmasmDirective "\.ident\>"
+syn match vmasmDirective "\.link\>"
+syn match vmasmDirective "\.list\>"
+syn match vmasmDirective "\.long\>"
+syn match vmasmDirective "\.mask\>"
+syn match vmasmDirective "\.narg\>"
+syn match vmasmDirective "\.nchr\>"
+syn match vmasmDirective "\.nlist\>"
+syn match vmasmDirective "\.ntype\>"
+syn match vmasmDirective "\.octa\>"
+syn match vmasmDirective "\.odd\>"
+syn match vmasmDirective "\.opdef\>"
+syn match vmasmDirective "\.packed\>"
+syn match vmasmDirective "\.page\>"
+syn match vmasmDirective "\.print\>"
+syn match vmasmDirective "\.psect\>"
+syn match vmasmDirective "\.quad\>"
+syn match vmasmDirective "\.ref[1248]\>"
+syn match vmasmDirective "\.ref16\>"
+syn match vmasmDirective "\.restore\(_psect\)\=\>"
+syn match vmasmDirective "\.save\(_psect\)\=\>"
+syn match vmasmDirective "\.sbttl\>"
+syn match vmasmDirective "\.\(no\)\=show\>"
+syn match vmasmDirective "\.\(sub\)\=title\>"
+syn match vmasmDirective "\.transfer\>"
+syn match vmasmDirective "\.warn\>"
+syn match vmasmDirective "\.weak\>"
+syn match vmasmDirective "\.\(signed_\)\=word\>"
+
+syn case match
+
+" 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_macro_syntax_inits")
+ if version < 508
+ let did_macro_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
+ " Comment Constant Error Identifier PreProc Special Statement Todo Type
+ "
+ " Constant Boolean Character Number String
+ " Identifier Function
+ " PreProc Define Include Macro PreCondit
+ " Special Debug Delimiter SpecialChar SpecialComment Tag
+ " Statement Conditional Exception Keyword Label Operator Repeat
+ " Type StorageClass Structure Typedef
+
+ HiLink vmasmComment Comment
+ HiLink vmasmTodo Todo
+
+ HiLink vmasmhexNumber Number " Constant
+ HiLink vmasmoctNumber Number " Constant
+ HiLink vmasmbinNumber Number " Constant
+ HiLink vmasmdecNumber Number " Constant
+ HiLink vmasmfloatNumber Number " Constant
+
+" HiLink vmasmString String " Constant
+
+ HiLink vmasmReg Identifier
+ HiLink vmasmOperator Identifier
+
+ HiLink vmasmInclude Include " PreProc
+ HiLink vmasmMacro Macro " PreProc
+ " HiLink vmasmMacroParam Keyword " Statement
+
+ HiLink vmasmDirective Special
+ HiLink vmasmPreCond Special
+
+
+ HiLink vmasmOpcode Statement
+ HiLink vmasmCond Conditional " Statement
+ HiLink vmasmRepeat Repeat " Statement
+
+ HiLink vmasmLabel Type
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vmasm"
+
+" vim: ts=8 sw=2
diff --git a/runtime/syntax/vrml.vim b/runtime/syntax/vrml.vim
new file mode 100644
index 000000000..651a39b91
--- /dev/null
+++ b/runtime/syntax/vrml.vim
@@ -0,0 +1,239 @@
+" Vim syntax file
+" Language: VRML97
+" Modified from: VRML 1.0C by David Brown <dbrown@cgs.c4.gmeds.com>
+" Maintainer: Gregory Seidman <gseidman@acm.org>
+" URL: http://www.cs.brown.edu/~gss/vim/syntax/vrml.vim
+" Last change: 2003 May 11
+
+" 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
+
+" keyword definitions
+
+syn keyword VRMLFields ambientIntensity appearance attenuation
+syn keyword VRMLFields autoOffset avatarSize axisOfRotation backUrl
+syn keyword VRMLFields bboxCenter bboxSize beamWidth beginCap
+syn keyword VRMLFields bottom bottomRadius bottomUrl ccw center
+syn keyword VRMLFields children choice collide color colorIndex
+syn keyword VRMLFields colorPerVertex convex coord coordIndex
+syn keyword VRMLFields creaseAngle crossSection cutOffAngle
+syn keyword VRMLFields cycleInterval description diffuseColor
+syn keyword VRMLFields directOutput direction diskAngle
+syn keyword VRMLFields emissiveColor enabled endCap family
+syn keyword VRMLFields fieldOfView fogType fontStyle frontUrl
+syn keyword VRMLFields geometry groundAngle groundColor headlight
+syn keyword VRMLFields height horizontal info intensity jump
+syn keyword VRMLFields justify key keyValue language leftToRight
+syn keyword VRMLFields leftUrl length level location loop material
+syn keyword VRMLFields maxAngle maxBack maxExtent maxFront
+syn keyword VRMLFields maxPosition minAngle minBack minFront
+syn keyword VRMLFields minPosition mustEvaluate normal normalIndex
+syn keyword VRMLFields normalPerVertex offset on orientation
+syn keyword VRMLFields parameter pitch point position priority
+syn keyword VRMLFields proxy radius range repeatS repeatT rightUrl
+syn keyword VRMLFields rotation scale scaleOrientation shininess
+syn keyword VRMLFields side size skyAngle skyColor solid source
+syn keyword VRMLFields spacing spatialize specularColor speed spine
+syn keyword VRMLFields startTime stopTime string style texCoord
+syn keyword VRMLFields texCoordIndex texture textureTransform title
+syn keyword VRMLFields top topToBottom topUrl translation
+syn keyword VRMLFields transparency type url vector visibilityLimit
+syn keyword VRMLFields visibilityRange whichChoice xDimension
+syn keyword VRMLFields xSpacing zDimension zSpacing
+syn match VRMLFields "\<[A-Za-z_][A-Za-z0-9_]*\>" contains=VRMLComment,VRMLProtos,VRMLfTypes
+" syn match VRMLFields "\<[A-Za-z_][A-Za-z0-9_]*\>\(,\|\s\)*\(#.*$\)*\<IS\>\(#.*$\)*\(,\|\s\)*\<[A-Za-z_][A-Za-z0-9_]*\>\(,\|\s\)*\(#.*$\)*" contains=VRMLComment,VRMLProtos
+" syn region VRMLFields start="\<[A-Za-z_][A-Za-z0-9_]*\>" end=+\(,\|#\|\s\)+me=e-1 contains=VRMLComment,VRMLProtos
+
+syn keyword VRMLEvents addChildren ambientIntensity_changed
+syn keyword VRMLEvents appearance_changed attenuation_changed
+syn keyword VRMLEvents autoOffset_changed avatarSize_changed
+syn keyword VRMLEvents axisOfRotation_changed backUrl_changed
+syn keyword VRMLEvents beamWidth_changed bindTime bottomUrl_changed
+syn keyword VRMLEvents center_changed children_changed
+syn keyword VRMLEvents choice_changed collideTime collide_changed
+syn keyword VRMLEvents color_changed coord_changed
+syn keyword VRMLEvents cutOffAngle_changed cycleInterval_changed
+syn keyword VRMLEvents cycleTime description_changed
+syn keyword VRMLEvents diffuseColor_changed direction_changed
+syn keyword VRMLEvents diskAngle_changed duration_changed
+syn keyword VRMLEvents emissiveColor_changed enabled_changed
+syn keyword VRMLEvents enterTime exitTime fogType_changed
+syn keyword VRMLEvents fontStyle_changed fraction_changed
+syn keyword VRMLEvents frontUrl_changed geometry_changed
+syn keyword VRMLEvents groundAngle_changed headlight_changed
+syn keyword VRMLEvents hitNormal_changed hitPoint_changed
+syn keyword VRMLEvents hitTexCoord_changed intensity_changed
+syn keyword VRMLEvents isActive isBound isOver jump_changed
+syn keyword VRMLEvents keyValue_changed key_changed leftUrl_changed
+syn keyword VRMLEvents length_changed level_changed
+syn keyword VRMLEvents location_changed loop_changed
+syn keyword VRMLEvents material_changed maxAngle_changed
+syn keyword VRMLEvents maxBack_changed maxExtent_changed
+syn keyword VRMLEvents maxFront_changed maxPosition_changed
+syn keyword VRMLEvents minAngle_changed minBack_changed
+syn keyword VRMLEvents minFront_changed minPosition_changed
+syn keyword VRMLEvents normal_changed offset_changed on_changed
+syn keyword VRMLEvents orientation_changed parameter_changed
+syn keyword VRMLEvents pitch_changed point_changed position_changed
+syn keyword VRMLEvents priority_changed radius_changed
+syn keyword VRMLEvents removeChildren rightUrl_changed
+syn keyword VRMLEvents rotation_changed scaleOrientation_changed
+syn keyword VRMLEvents scale_changed set_ambientIntensity
+syn keyword VRMLEvents set_appearance set_attenuation
+syn keyword VRMLEvents set_autoOffset set_avatarSize
+syn keyword VRMLEvents set_axisOfRotation set_backUrl set_beamWidth
+syn keyword VRMLEvents set_bind set_bottomUrl set_center
+syn keyword VRMLEvents set_children set_choice set_collide
+syn keyword VRMLEvents set_color set_colorIndex set_coord
+syn keyword VRMLEvents set_coordIndex set_crossSection
+syn keyword VRMLEvents set_cutOffAngle set_cycleInterval
+syn keyword VRMLEvents set_description set_diffuseColor
+syn keyword VRMLEvents set_direction set_diskAngle
+syn keyword VRMLEvents set_emissiveColor set_enabled set_fogType
+syn keyword VRMLEvents set_fontStyle set_fraction set_frontUrl
+syn keyword VRMLEvents set_geometry set_groundAngle set_headlight
+syn keyword VRMLEvents set_height set_intensity set_jump set_key
+syn keyword VRMLEvents set_keyValue set_leftUrl set_length
+syn keyword VRMLEvents set_level set_location set_loop set_material
+syn keyword VRMLEvents set_maxAngle set_maxBack set_maxExtent
+syn keyword VRMLEvents set_maxFront set_maxPosition set_minAngle
+syn keyword VRMLEvents set_minBack set_minFront set_minPosition
+syn keyword VRMLEvents set_normal set_normalIndex set_offset set_on
+syn keyword VRMLEvents set_orientation set_parameter set_pitch
+syn keyword VRMLEvents set_point set_position set_priority
+syn keyword VRMLEvents set_radius set_rightUrl set_rotation
+syn keyword VRMLEvents set_scale set_scaleOrientation set_shininess
+syn keyword VRMLEvents set_size set_skyAngle set_skyColor
+syn keyword VRMLEvents set_source set_specularColor set_speed
+syn keyword VRMLEvents set_spine set_startTime set_stopTime
+syn keyword VRMLEvents set_string set_texCoord set_texCoordIndex
+syn keyword VRMLEvents set_texture set_textureTransform set_topUrl
+syn keyword VRMLEvents set_translation set_transparency set_type
+syn keyword VRMLEvents set_url set_vector set_visibilityLimit
+syn keyword VRMLEvents set_visibilityRange set_whichChoice
+syn keyword VRMLEvents shininess_changed size_changed
+syn keyword VRMLEvents skyAngle_changed skyColor_changed
+syn keyword VRMLEvents source_changed specularColor_changed
+syn keyword VRMLEvents speed_changed startTime_changed
+syn keyword VRMLEvents stopTime_changed string_changed
+syn keyword VRMLEvents texCoord_changed textureTransform_changed
+syn keyword VRMLEvents texture_changed time topUrl_changed
+syn keyword VRMLEvents touchTime trackPoint_changed
+syn keyword VRMLEvents translation_changed transparency_changed
+syn keyword VRMLEvents type_changed url_changed value_changed
+syn keyword VRMLEvents vector_changed visibilityLimit_changed
+syn keyword VRMLEvents visibilityRange_changed whichChoice_changed
+syn region VRMLEvents start="\S+[^0-9]+\.[A-Za-z_]+"ms=s+1 end="\(,\|$\|\s\)"me=e-1
+
+syn keyword VRMLNodes Anchor Appearance AudioClip Background
+syn keyword VRMLNodes Billboard Box Collision Color
+syn keyword VRMLNodes ColorInterpolator Cone Coordinate
+syn keyword VRMLNodes CoordinateInterpolator Cylinder
+syn keyword VRMLNodes CylinderSensor DirectionalLight
+syn keyword VRMLNodes ElevationGrid Extrusion Fog FontStyle
+syn keyword VRMLNodes Group ImageTexture IndexedFaceSet
+syn keyword VRMLNodes IndexedLineSet Inline LOD Material
+syn keyword VRMLNodes MovieTexture NavigationInfo Normal
+syn keyword VRMLNodes NormalInterpolator OrientationInterpolator
+syn keyword VRMLNodes PixelTexture PlaneSensor PointLight
+syn keyword VRMLNodes PointSet PositionInterpolator
+syn keyword VRMLNodes ProximitySensor ScalarInterpolator
+syn keyword VRMLNodes Script Shape Sound Sphere SphereSensor
+syn keyword VRMLNodes SpotLight Switch Text TextureCoordinate
+syn keyword VRMLNodes TextureTransform TimeSensor TouchSensor
+syn keyword VRMLNodes Transform Viewpoint VisibilitySensor
+syn keyword VRMLNodes WorldInfo
+
+" the following line doesn't catch <node><newline><openbrace> since \n
+" doesn't match as an atom yet :-(
+syn match VRMLNodes "[A-Za-z_][A-Za-z0-9_]*\(,\|\s\)*{"me=e-1
+syn region VRMLNodes start="\<EXTERNPROTO\>\(,\|\s\)*[A-Za-z_]"ms=e start="\<EXTERNPROTO\>\(,\|\s\)*" end="[\s]*\["me=e-1 contains=VRMLProtos,VRMLComment
+syn region VRMLNodes start="PROTO\>\(,\|\s\)*[A-Za-z_]"ms=e start="PROTO\>\(,\|\s\)*" end="[\s]*\["me=e-1 contains=VRMLProtos,VRMLComment
+
+syn keyword VRMLTypes SFBool SFColor MFColor SFFloat MFFloat
+syn keyword VRMLTypes SFImage SFInt32 MFInt32 SFNode MFNode
+syn keyword VRMLTypes SFRotation MFRotation SFString MFString
+syn keyword VRMLTypes SFTime MFTime SFVec2f MFVec2f SFVec3f MFVec3f
+
+syn keyword VRMLfTypes field exposedField eventIn eventOut
+
+syn keyword VRMLValues TRUE FALSE NULL
+
+syn keyword VRMLProtos contained EXTERNPROTO PROTO IS
+
+syn keyword VRMLRoutes contained ROUTE TO
+
+if version >= 502
+"containment!
+ syn include @jscript $VIMRUNTIME/syntax/javascript.vim
+ syn region VRMLjScriptString contained start=+"\(\(javascript\)\|\(vrmlscript\)\|\(ecmascript\)\):+ms=e+1 skip=+\\\\\|\\"+ end=+"+me=e-1 contains=@jscript
+endif
+
+" match definitions.
+syn match VRMLSpecial contained "\\[0-9][0-9][0-9]\|\\."
+syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=VRMLSpecial,VRMLjScriptString
+syn match VRMLCharacter "'[^\\]'"
+syn match VRMLSpecialCharacter "'\\.'"
+syn match VRMLNumber "[-+]\=\<[0-9]\+\(\.[0-9]\+\)\=\([eE]\{1}[-+]\=[0-9]\+\)\=\>\|0[xX][0-9a-fA-F]\+\>"
+syn match VRMLNumber "0[xX][0-9a-fA-F]\+\>"
+syn match VRMLComment "#.*$"
+
+" newlines should count as whitespace, but they can't be matched yet :-(
+syn region VRMLRouteNode start="[^O]TO\(,\|\s\)*" end="\."me=e-1 contains=VRMLRoutes,VRMLComment
+syn region VRMLRouteNode start="ROUTE\(,\|\s\)*" end="\."me=e-1 contains=VRMLRoutes,VRMLComment
+syn region VRMLInstName start="DEF\>"hs=e+1 skip="DEF\(,\|\s\)*" end="[A-Za-z0-9_]\(\s\|$\|,\)"me=e contains=VRMLInstances,VRMLComment
+syn region VRMLInstName start="USE\>"hs=e+1 skip="USE\(,\|\s\)*" end="[A-Za-z0-9_]\(\s\|$\|,\)"me=e contains=VRMLInstances,VRMLComment
+
+syn keyword VRMLInstances contained DEF USE
+syn sync minlines=1
+
+if version >= 600
+"FOLDS!
+ syn sync fromstart
+ setlocal foldmethod=syntax
+ syn region braceFold start="{" end="}" transparent fold contains=TOP
+ syn region bracketFold start="\[" end="]" transparent fold contains=TOP
+ syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ fold contains=VRMLSpecial,VRMLjScriptString
+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_VRML_syntax_inits")
+ if version < 508
+ let did_VRML_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink VRMLCharacter VRMLString
+ HiLink VRMLSpecialCharacter VRMLSpecial
+ HiLink VRMLNumber VRMLString
+ HiLink VRMLValues VRMLString
+ HiLink VRMLString String
+ HiLink VRMLSpecial Special
+ HiLink VRMLComment Comment
+ HiLink VRMLNodes Statement
+ HiLink VRMLFields Type
+ HiLink VRMLEvents Type
+ HiLink VRMLfTypes LineNr
+" hi VRMLfTypes ctermfg=6 guifg=Brown
+ HiLink VRMLInstances PreCondit
+ HiLink VRMLRoutes PreCondit
+ HiLink VRMLProtos PreProc
+ HiLink VRMLRouteNode Identifier
+ HiLink VRMLInstName Identifier
+ HiLink VRMLTypes Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vrml"
+
+" vim: ts=8
diff --git a/runtime/syntax/vsejcl.vim b/runtime/syntax/vsejcl.vim
new file mode 100644
index 000000000..f4f00c65e
--- /dev/null
+++ b/runtime/syntax/vsejcl.vim
@@ -0,0 +1,49 @@
+" Vim syntax file
+" Language: JCL job control language - DOS/VSE
+" Maintainer: Davyd Ondrejko <david.ondrejko@safelite.com>
+" URL:
+" Last change: 2001 May 10
+
+" 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
+
+" tags
+syn keyword vsejclKeyword DLBL EXEC JOB ASSGN EOJ
+syn keyword vsejclField JNM CLASS DISP USER SYSID JSEP SIZE
+syn keyword vsejclField VSAM
+syn region vsejclComment start="^/\*" end="$"
+syn region vsejclComment start="^[\* ]\{}$" end="$"
+syn region vsejclMisc start="^ " end="$" contains=Jparms
+syn match vsejclString /'.\{-}'/
+syn match vsejclParms /(.\{-})/ contained
+
+" 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_vsejcl_syntax")
+ if version < 508
+ let did_vsejcl_syntax = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink vsejclComment Comment
+ HiLink vsejclField Type
+ HiLink vsejclKeyword Statement
+ HiLink vsejclObject Constant
+ HiLink vsejclString Constant
+ HiLink vsejclMisc Special
+ HiLink vsejclParms Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "vsejcl"
+
+" vim: ts=4
diff --git a/runtime/syntax/wdiff.vim b/runtime/syntax/wdiff.vim
new file mode 100644
index 000000000..9cd061181
--- /dev/null
+++ b/runtime/syntax/wdiff.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language: wDiff (wordwise diff)
+" Maintainer: Gerfried Fuchs <alfie@ist.org>
+" Last Change: 25 Apr 2001
+" URL: http://alfie.ist.org/vim/syntax/wdiff.vim
+"
+" Comments are very welcome - but please make sure that you are commenting on
+" the latest version of this file.
+" SPAM is _NOT_ welcome - be ready to be reported!
+
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+syn region wdiffOld start=+\[-+ end=+-]+
+syn region wdiffNew start="{+" end="+}"
+
+
+" 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_wdiff_syn_inits")
+ let did_wdiff_syn_inits = 1
+ if version < 508
+ let did_wdiff_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink wdiffOld Special
+ HiLink wdiffNew Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "wdiff"
diff --git a/runtime/syntax/web.vim b/runtime/syntax/web.vim
new file mode 100644
index 000000000..f7a7fdfdc
--- /dev/null
+++ b/runtime/syntax/web.vim
@@ -0,0 +1,39 @@
+" Vim syntax file
+" Language: WEB
+" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: April 30, 2001
+
+" Details of the WEB language can be found in the article by Donald E. Knuth,
+" "The WEB System of Structured Documentation", included as "webman.tex" in
+" the standard WEB distribution, available for anonymous ftp at
+" ftp://labrea.stanford.edu/pub/tex/web/.
+
+" 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
+
+" Although WEB is the ur-language for the "Literate Programming" paradigm,
+" we base this syntax file on the modern superset, CWEB. Note: This shortcut
+" may introduce some illegal constructs, e.g., CWEB's "@c" does _not_ start a
+" code section in WEB. Anyway, I'm not a WEB programmer.
+if version < 600
+ source <sfile>:p:h/cweb.vim
+else
+ runtime! syntax/cweb.vim
+ unlet b:current_syntax
+endif
+
+" Replace C/C++ syntax by Pascal syntax.
+syntax include @webIncludedC <sfile>:p:h/pascal.vim
+
+" Double-@ means single-@, anywhere in the WEB source (as in CWEB).
+" Don't misinterpret "@'" as the start of a Pascal string.
+syntax match webIgnoredStuff "@[@']"
+
+let b:current_syntax = "web"
+
+" vim: ts=8
diff --git a/runtime/syntax/webmacro.vim b/runtime/syntax/webmacro.vim
new file mode 100644
index 000000000..3b863f7c3
--- /dev/null
+++ b/runtime/syntax/webmacro.vim
@@ -0,0 +1,82 @@
+" WebMacro syntax file
+" Language: WebMacro
+" Maintainer: Claudio Fleiner <claudio@fleiner.com>
+" URL: http://www.fleiner.com/vim/syntax/webmacro.vim
+" Last Change: 2003 May 11
+
+" webmacro is a nice little language that you should
+" check out if you use java servlets.
+" webmacro: http://www.webmacro.org
+
+" For version 5.x: Clear all syntax items
+" For version 6.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 = 'webmacro'
+endif
+
+
+if version < 600
+ source <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+ unlet b:current_syntax
+endif
+
+syn cluster htmlPreProc add=webmacroIf,webmacroUse,webmacroBraces,webmacroParse,webmacroInclude,webmacroSet,webmacroForeach,webmacroComment
+
+syn match webmacroVariable "\$[a-zA-Z0-9.()]*;\="
+syn match webmacroNumber "[-+]\=\d\+[lL]\=" contained
+syn keyword webmacroBoolean true false contained
+syn match webmacroSpecial "\\." contained
+syn region webmacroString contained start=+"+ end=+"+ contains=webmacroSpecial,webmacroVariable
+syn region webmacroString contained start=+'+ end=+'+ contains=webmacroSpecial,webmacroVariable
+syn region webmacroList contained matchgroup=Structure start="\[" matchgroup=Structure end="\]" contains=webmacroString,webmacroVariable,webmacroNumber,webmacroBoolean,webmacroList
+
+syn region webmacroIf start="#if" start="#else" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces
+syn region webmacroForeach start="#foreach" end="{"me=e-1 contains=webmacroVariable,webmacroNumber,webmacroString,webmacroBoolean,webmacroList nextgroup=webmacroBraces
+syn match webmacroSet "#set .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn match webmacroInclude "#include .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn match webmacroParse "#parse .*$" contains=webmacroVariable,webmacroNumber,webmacroNumber,webmacroBoolean,webmacroString,webmacroList
+syn region webmacroUse matchgroup=PreProc start="#use .*" matchgroup=PreProc end="^-.*" contains=webmacroHash,@HtmlTop
+syn region webmacroBraces matchgroup=Structure start="{" matchgroup=Structure end="}" contained transparent
+syn match webmacroBracesError "[{}]"
+syn match webmacroComment "##.*$"
+syn match webmacroHash "[#{}\$]" contained
+
+" 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_webmacro_syn_inits")
+ if version < 508
+ let did_webmacro_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink webmacroComment CommentTitle
+ HiLink webmacroVariable PreProc
+ HiLink webmacroIf webmacroStatement
+ HiLink webmacroForeach webmacroStatement
+ HiLink webmacroSet webmacroStatement
+ HiLink webmacroInclude webmacroStatement
+ HiLink webmacroParse webmacroStatement
+ HiLink webmacroStatement Function
+ HiLink webmacroNumber Number
+ HiLink webmacroBoolean Boolean
+ HiLink webmacroSpecial Special
+ HiLink webmacroString String
+ HiLink webmacroBracesError Error
+ delcommand HiLink
+endif
+
+let b:current_syntax = "webmacro"
+
+if main_syntax == 'webmacro'
+ unlet main_syntax
+endif
diff --git a/runtime/syntax/wget.vim b/runtime/syntax/wget.vim
new file mode 100644
index 000000000..801f76d8d
--- /dev/null
+++ b/runtime/syntax/wget.vim
@@ -0,0 +1,159 @@
+" Wget syntax file
+" Filename: wget.vim
+" Language: Wget configuration file ( /etc/wgetrc ~/.wgetrc )
+" Maintainer: Doug Kearns <djkea2@mugca.its.monash.edu.au>
+" URL: http://mugca.its.monash.edu.au/~djkea2/vim/syntax/wget.vim
+" Last Change: 2003 May 11
+
+" TODO: all commands are actually underscore and hyphen insensitive, though
+" they are normally named as listed below
+
+" 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 match wgetComment "^\s*#.*$" contains=wgetTodo
+
+syn keyword wgetTodo TODO NOTE FIXME XXX contained
+
+syn match wgetAssignment "^\s*[A-Za-z_-]\+\s*=\s*.*$" contains=wgetCommand,wgetAssignmentOperator,wgetString,wgetBoolean,wgetNumber,wgetValue,wgetQuota
+
+syn match wgetAssignmentOperator "=" contained
+
+syn region wgetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
+syn region wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
+
+" Make this a match so that always_rest matches properly
+syn case ignore
+syn match wgetBoolean "\<on\|off\|always\|never\|1\|0\>" contained
+syn case match
+
+syn match wgetNumber "\<\d\+\|inf\>" contained
+
+syn match wgetQuota "\<\d\+[kKmM]\?\>" contained
+
+syn case ignore
+syn keyword wgetValue default binary mega giga micro contained
+syn case match
+
+syn case ignore
+syn match wgetCommand "^\s*accept" contained
+syn match wgetCommand "^\s*add[-_]\=hostdir" contained
+syn match wgetCommand "^\s*always[-_]\=rest" contained
+syn match wgetCommand "^\s*background" contained
+syn match wgetCommand "^\s*backup[-_]\=converted" contained
+syn match wgetCommand "^\s*backups" contained
+syn match wgetCommand "^\s*base" contained
+syn match wgetCommand "^\s*bind[-_]\=address" contained
+syn match wgetCommand "^\s*cache" contained
+syn match wgetCommand "^\s*continue" contained
+syn match wgetCommand "^\s*convert[-_]\=links" contained
+syn match wgetCommand "^\s*cookies" contained
+syn match wgetCommand "^\s*cut[-_]\=dirs" contained
+syn match wgetCommand "^\s*debug" contained
+syn match wgetCommand "^\s*delete[-_]\=after" contained
+syn match wgetCommand "^\s*dir[-_]\=prefix" contained
+syn match wgetCommand "^\s*dir[-_]\=struct" contained
+syn match wgetCommand "^\s*domains" contained
+syn match wgetCommand "^\s*dot[-_]\=bytes" contained
+syn match wgetCommand "^\s*dots[-_]\=in[-_]\=line" contained
+syn match wgetCommand "^\s*dot[-_]\=spacing" contained
+syn match wgetCommand "^\s*dot[-_]\=style" contained
+syn match wgetCommand "^\s*egd[-_]\=file" contained
+syn match wgetCommand "^\s*exclude[-_]\=directories" contained
+syn match wgetCommand "^\s*exclude[-_]\=domains" contained
+syn match wgetCommand "^\s*follow[-_]\=ftp" contained
+syn match wgetCommand "^\s*follow[-_]\=tags" contained
+syn match wgetCommand "^\s*force[-_]\=html" contained
+syn match wgetCommand "^\s*ftp[-_]\=proxy" contained
+syn match wgetCommand "^\s*glob" contained
+syn match wgetCommand "^\s*header" contained
+syn match wgetCommand "^\s*html[-_]\=extension" contained
+syn match wgetCommand "^\s*htmlify" contained
+syn match wgetCommand "^\s*http[-_]\=keep[-_]\=alive" contained
+syn match wgetCommand "^\s*http[-_]\=passwd" contained
+syn match wgetCommand "^\s*http[-_]\=proxy" contained
+syn match wgetCommand "^\s*https[-_]\=proxy" contained
+syn match wgetCommand "^\s*http[-_]\=user" contained
+syn match wgetCommand "^\s*ignore[-_]\=length" contained
+syn match wgetCommand "^\s*ignore[-_]\=tags" contained
+syn match wgetCommand "^\s*include[-_]\=directories" contained
+syn match wgetCommand "^\s*input" contained
+syn match wgetCommand "^\s*kill[-_]\=longer" contained
+syn match wgetCommand "^\s*limit[-_]\=rate" contained
+syn match wgetCommand "^\s*load[-_]\=cookies" contained
+syn match wgetCommand "^\s*logfile" contained
+syn match wgetCommand "^\s*login" contained
+syn match wgetCommand "^\s*mirror" contained
+syn match wgetCommand "^\s*netrc" contained
+syn match wgetCommand "^\s*no[-_]\=clobber" contained
+syn match wgetCommand "^\s*no[-_]\=parent" contained
+syn match wgetCommand "^\s*no[-_]\=proxy" contained
+" Note: this option is deprecated, use 'tries' instead
+syn match wgetCommand "^\s*numtries" contained
+syn match wgetCommand "^\s*output[-_]\=document" contained
+syn match wgetCommand "^\s*page[-_]\=requisites" contained
+syn match wgetCommand "^\s*passive[-_]\=ftp" contained
+syn match wgetCommand "^\s*passwd" contained
+syn match wgetCommand "^\s*progress" contained
+syn match wgetCommand "^\s*proxy[-_]\=passwd" contained
+syn match wgetCommand "^\s*proxy[-_]\=user" contained
+syn match wgetCommand "^\s*quiet" contained
+syn match wgetCommand "^\s*quota" contained
+syn match wgetCommand "^\s*random[-_]\=wait" contained
+syn match wgetCommand "^\s*reclevel" contained
+syn match wgetCommand "^\s*recursive" contained
+syn match wgetCommand "^\s*referer" contained
+syn match wgetCommand "^\s*reject" contained
+syn match wgetCommand "^\s*relative[-_]\=only" contained
+syn match wgetCommand "^\s*remove[-_]\=listing" contained
+syn match wgetCommand "^\s*retr[-_]\=symlinks" contained
+syn match wgetCommand "^\s*robots" contained
+syn match wgetCommand "^\s*save[-_]\=cookies" contained
+syn match wgetCommand "^\s*save[-_]\=headers" contained
+syn match wgetCommand "^\s*server[-_]\=response" contained
+" Note: this option was removed in wget 1.8
+syn match wgetCommand "^\s*simple[-_]\=host[-_]\=check" contained
+syn match wgetCommand "^\s*span[-_]\=hosts" contained
+syn match wgetCommand "^\s*spider" contained
+syn match wgetCommand "^\s*sslcertfile" contained
+syn match wgetCommand "^\s*sslcertkey" contained
+syn match wgetCommand "^\s*timeout" contained
+syn match wgetCommand "^\s*time[-_]\=stamping" contained
+syn match wgetCommand "^\s*tries" contained
+syn match wgetCommand "^\s*use[-_]\=proxy" contained
+syn match wgetCommand "^\s*user[-_]\=agent" contained
+syn match wgetCommand "^\s*verbose" contained
+syn match wgetCommand "^\s*wait" contained
+syn match wgetCommand "^\s*wait[-_]\=retry" contained
+syn case match
+
+" 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_wget_syn_inits")
+ if version < 508
+ let did_wget_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink wgetAssignmentOperator Special
+ HiLink wgetBoolean Boolean
+ HiLink wgetCommand Identifier
+ HiLink wgetComment Comment
+ HiLink wgetNumber Number
+ HiLink wgetQuota Number
+ HiLink wgetString String
+ HiLink wgetTodo Todo
+ HiLink wgetValue Constant
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "wget"
diff --git a/runtime/syntax/whitespace.vim b/runtime/syntax/whitespace.vim
new file mode 100644
index 000000000..4d2e32eb7
--- /dev/null
+++ b/runtime/syntax/whitespace.vim
@@ -0,0 +1,13 @@
+" Simplistic way to make spaces and Tabs visible
+
+" This can be added to an already active syntax.
+
+syn match Space " "
+syn match Tab "\t"
+if &background == "dark"
+ hi def Space ctermbg=darkred guibg=#500000
+ hi def Tab ctermbg=darkgreen guibg=#003000
+else
+ hi def Space ctermbg=lightred guibg=#ffd0d0
+ hi def Tab ctermbg=lightgreen guibg=#d0ffd0
+endif
diff --git a/runtime/syntax/winbatch.vim b/runtime/syntax/winbatch.vim
new file mode 100644
index 000000000..aea2cdebc
--- /dev/null
+++ b/runtime/syntax/winbatch.vim
@@ -0,0 +1,187 @@
+" Vim syntax file
+" Language: WinBatch/Webbatch (*.wbt, *.web)
+" Maintainer: dominique@mggen.com
+" URL: http://www.mggen.com/vim/syntax/winbatch.zip
+" Last change: 2001 May 10
+
+" 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
+
+syn keyword winbatchCtl if then else endif break end return exit next
+syn keyword winbatchCtl while for gosub goto switch select to case
+syn keyword winbatchCtl endselect endwhile endselect endswitch
+
+" String
+syn region winbatchVar start=+%+ end=+%+
+" %var% in strings
+syn region winbatchString start=+"+ end=+"+ contains=winbatchVar
+
+syn match winbatchComment ";.*$"
+syn match winbatchLabel "^\ *:[0-9a-zA-Z_\-]\+\>"
+
+" constant (bezgin by @)
+syn match winbatchConstant "@[0_9a-zA-Z_\-]\+"
+
+" number
+syn match winbatchNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>"
+
+syn keyword winbatchImplicit aboveicons acc_attrib acc_chng_nt acc_control acc_create
+syn keyword winbatchImplicit acc_delete acc_full_95 acc_full_nt acc_list acc_pfull_nt
+syn keyword winbatchImplicit acc_pmang_nt acc_print_nt acc_read acc_read_95 acc_read_nt
+syn keyword winbatchImplicit acc_write amc arrange ascending attr_a attr_a attr_ci attr_ci
+syn keyword winbatchImplicit attr_dc attr_dc attr_di attr_di attr_dm attr_dm attr_h attr_h
+syn keyword winbatchImplicit attr_ic attr_ic attr_p attr_p attr_ri attr_ri attr_ro attr_ro
+syn keyword winbatchImplicit attr_sh attr_sh attr_sy attr_sy attr_t attr_t attr_x attr_x
+syn keyword winbatchImplicit avogadro backscan boltzmann cancel capslock check columns
+syn keyword winbatchImplicit commonformat cr crlf ctrl default default deg2rad descending
+syn keyword winbatchImplicit disable drive electric enable eulers false faraday float8
+syn keyword winbatchImplicit fwdscan gftsec globalgroup gmtsec goldenratio gravitation hidden
+syn keyword winbatchImplicit icon lbutton lclick ldblclick lf lightmps lightmtps localgroup
+syn keyword winbatchImplicit magfield major mbokcancel mbutton mbyesno mclick mdblclick minor
+syn keyword winbatchImplicit msformat multiple ncsaformat no none none noresize normal
+syn keyword winbatchImplicit notify nowait numlock off on open parsec parseonly pi
+syn keyword winbatchImplicit planckergs planckjoules printer rad2deg rbutton rclick rdblclick
+syn keyword winbatchImplicit regclasses regcurrent regmachine regroot regusers rows save
+syn keyword winbatchImplicit scrolllock server shift single sorted stack string tab tile
+syn keyword winbatchImplicit true uncheck unsorted wait wholesection word1 word2 word4 yes
+syn keyword winbatchImplicit zoomed about abs acos addextender appexist appwaitclose asin
+syn keyword winbatchImplicit askfilename askfiletext askitemlist askline askpassword askyesno
+syn keyword winbatchImplicit atan average beep binaryalloc binarycopy binaryeodget binaryeodset
+syn keyword winbatchImplicit binaryfree binaryhashrec binaryincr binaryincr2 binaryincr4
+syn keyword winbatchImplicit binaryincrflt binaryindex binaryindexnc binaryoletype binarypeek
+syn keyword winbatchImplicit binarypeek2 binarypeek4 binarypeekflt binarypeekstr binarypoke
+syn keyword winbatchImplicit binarypoke2 binarypoke4 binarypokeflt binarypokestr binaryread
+syn keyword winbatchImplicit binarysort binarystrcnt binarywrite boxbuttondraw boxbuttonkill
+syn keyword winbatchImplicit boxbuttonstat boxbuttonwait boxcaption boxcolor
+syn keyword winbatchImplicit boxdataclear boxdatatag
+syn keyword winbatchImplicit boxdestroy boxdrawcircle boxdrawline boxdrawrect boxdrawtext
+syn keyword winbatchImplicit boxesup boxmapmode boxnew boxopen boxpen boxshut boxtext boxtextcolor
+syn keyword winbatchImplicit boxtextfont boxtitle boxupdates break buttonnames by call
+syn keyword winbatchImplicit callext ceiling char2num clipappend clipget clipput
+syn keyword winbatchImplicit continue cos cosh datetime
+syn keyword winbatchImplicit ddeexecute ddeinitiate ddepoke dderequest ddeterminate
+syn keyword winbatchImplicit ddetimeout debug debugdata decimals delay dialog
+syn keyword winbatchImplicit dialogbox dirattrget dirattrset dirchange direxist
+syn keyword winbatchImplicit dirget dirhome diritemize dirmake dirremove dirrename
+syn keyword winbatchImplicit dirwindows diskexist diskfree diskinfo diskscan disksize
+syn keyword winbatchImplicit diskvolinfo display dllcall dllfree dllhinst dllhwnd dllload
+syn keyword winbatchImplicit dosboxcursorx dosboxcursory dosboxgetall dosboxgetdata
+syn keyword winbatchImplicit dosboxheight dosboxscrmode dosboxversion dosboxwidth dosversion
+syn keyword winbatchImplicit drop edosgetinfo edosgetvar edoslistvars edospathadd edospathchk
+syn keyword winbatchImplicit edospathdel edossetvar
+syn keyword winbatchImplicit endsession envgetinfo envgetvar environment
+syn keyword winbatchImplicit environset envitemize envlistvars envpathadd envpathchk
+syn keyword winbatchImplicit envpathdel envsetvar errormode exclusive execute exetypeinfo
+syn keyword winbatchImplicit exp fabs fileappend fileattrget fileattrset fileclose
+syn keyword winbatchImplicit filecompare filecopy filedelete fileexist fileextension filefullname
+syn keyword winbatchImplicit fileitemize filelocate filemapname filemove filenameeval1
+syn keyword winbatchImplicit filenameeval2 filenamelong filenameshort fileopen filepath
+syn keyword winbatchImplicit fileread filerename fileroot filesize filetimecode filetimeget
+syn keyword winbatchImplicit filetimeset filetimetouch fileverinfo filewrite fileymdhms
+syn keyword winbatchImplicit findwindow floor getexacttime gettickcount
+syn keyword winbatchImplicit iconarrange iconreplace ignoreinput inidelete inideletepvt
+syn keyword winbatchImplicit iniitemize iniitemizepvt iniread inireadpvt iniwrite iniwritepvt
+syn keyword winbatchImplicit installfile int intcontrol isdefined isfloat isint iskeydown
+syn keyword winbatchImplicit islicensed isnumber itemcount itemextract iteminsert itemlocate
+syn keyword winbatchImplicit itemremove itemselect itemsort keytoggleget keytoggleset
+syn keyword winbatchImplicit lasterror log10 logdisk loge max message min mod mouseclick
+syn keyword winbatchImplicit mouseclickbtn mousedrag mouseinfo mousemove msgtextget n3attach
+syn keyword winbatchImplicit n3captureend n3captureprt n3chgpassword n3detach n3dirattrget
+syn keyword winbatchImplicit n3dirattrset n3drivepath n3drivepath2 n3drivestatus n3fileattrget
+syn keyword winbatchImplicit n3fileattrset n3getloginid n3getmapped n3getnetaddr n3getuser
+syn keyword winbatchImplicit n3getuserid n3logout n3map n3mapdelete n3mapdir n3maproot n3memberdel
+syn keyword winbatchImplicit n3memberget n3memberset n3msgsend n3msgsendall n3serverinfo
+syn keyword winbatchImplicit n3serverlist n3setsrchdrv n3usergroups n3version n4attach
+syn keyword winbatchImplicit n4captureend n4captureprt n4chgpassword n4detach n4dirattrget
+syn keyword winbatchImplicit n4dirattrset n4drivepath n4drivestatus n4fileattrget n4fileattrset
+syn keyword winbatchImplicit n4getloginid n4getmapped n4getnetaddr n4getuser n4getuserid
+syn keyword winbatchImplicit n4login n4logout n4map n4mapdelete n4mapdir n4maproot n4memberdel
+syn keyword winbatchImplicit n4memberget n4memberset n4msgsend n4msgsendall n4serverinfo
+syn keyword winbatchImplicit n4serverlist n4setsrchdrv n4usergroups n4version netadddrive
+syn keyword winbatchImplicit netaddprinter netcancelcon netdirdialog netgetcon netgetuser
+syn keyword winbatchImplicit netinfo netresources netversion num2char objectclose
+syn keyword winbatchImplicit objectopen parsedata pause playmedia playmidi playwaveform
+syn keyword winbatchImplicit print random regapp regclosekey regconnect regcreatekey
+syn keyword winbatchImplicit regdeletekey regdelvalue regentrytype regloadhive regopenkey
+syn keyword winbatchImplicit regquerybin regquerydword regqueryex regqueryexpsz regqueryitem
+syn keyword winbatchImplicit regquerykey regquerymulsz regqueryvalue regsetbin
+syn keyword winbatchImplicit regsetdword regsetex regsetexpsz regsetmulsz regsetvalue
+syn keyword winbatchImplicit regunloadhive reload reload rtstatus run runenviron
+syn keyword winbatchImplicit runexit runhide runhidewait runicon runiconwait runshell runwait
+syn keyword winbatchImplicit runzoom runzoomwait sendkey sendkeyschild sendkeysto
+syn keyword winbatchImplicit sendmenusto shellexecute shortcutedit shortcutextra shortcutinfo
+syn keyword winbatchImplicit shortcutmake sin sinh snapshot sounds sqrt
+syn keyword winbatchImplicit srchfree srchinit srchnext strcat strcharcount strcmp
+syn keyword winbatchImplicit strfill strfix strfixchars stricmp strindex strlen
+syn keyword winbatchImplicit strlower strreplace strscan strsub strtrim strupper
+syn keyword winbatchImplicit tan tanh tcpaddr2host tcpftpchdir tcpftpclose tcpftpget
+syn keyword winbatchImplicit tcpftplist tcpftpmode tcpftpopen tcpftpput tcphost2addr tcphttpget
+syn keyword winbatchImplicit tcphttppost tcpparmget tcpparmset tcpping tcpsmtp terminate
+syn keyword winbatchImplicit textbox textboxsort textoutbufdel textoutbuffer textoutdebug
+syn keyword winbatchImplicit textoutfree textoutinfo textoutreset textouttrack textouttrackb
+syn keyword winbatchImplicit textouttrackp textoutwait textselect timeadd timedate
+syn keyword winbatchImplicit timedelay timediffdays timediffsecs timejulianday timejultoymd
+syn keyword winbatchImplicit timesubtract timewait timeymdhms version versiondll
+syn keyword winbatchImplicit w3addcon w3cancelcon w3dirbrowse w3getcaps w3getcon w3netdialog
+syn keyword winbatchImplicit w3netgetuser w3prtbrowse w3version w95accessadd w95accessdel
+syn keyword winbatchImplicit w95adddrive w95addprinter w95cancelcon w95dirdialog w95getcon
+syn keyword winbatchImplicit w95getuser w95resources w95shareadd w95sharedel w95shareset
+syn keyword winbatchImplicit w95version waitforkey wallpaper webbaseconv webcloselog
+syn keyword winbatchImplicit webcmddata webcondata webcounter webdatdata webdumperror webhashcode
+syn keyword winbatchImplicit webislocal weblogline webopenlog webout weboutfile webparamdata
+syn keyword winbatchImplicit webparamnames websettimeout webverifycard winactivate
+syn keyword winbatchImplicit winactivchild winarrange winclose winclosenot winconfig winexename
+syn keyword winbatchImplicit winexist winparset winparget winexistchild wingetactive
+syn keyword winbatchImplicit winhelp winhide winiconize winidget winisdos winitemchild
+syn keyword winbatchImplicit winitemize winitemnameid winmetrics winname winparmget
+syn keyword winbatchImplicit winparmset winplace winplaceget winplaceset
+syn keyword winbatchImplicit winposition winresources winshow winstate winsysinfo
+syn keyword winbatchImplicit wintitle winversion winwaitchild winwaitclose winwaitexist
+syn keyword winbatchImplicit winzoom wnaddcon wncancelcon wncmptrinfo wndialog
+syn keyword winbatchImplicit wndlgbrowse wndlgcon wndlgcon2 wndlgcon3
+syn keyword winbatchImplicit wndlgcon4 wndlgdiscon wndlgnoshare wndlgshare wngetcaps
+syn keyword winbatchImplicit wngetcon wngetuser wnnetnames wnrestore wnservers wnsharecnt
+syn keyword winbatchImplicit wnsharename wnsharepath wnshares wntaccessadd wntaccessdel
+syn keyword winbatchImplicit wntaccessget wntadddrive wntaddprinter wntcancelcon wntdirdialog
+syn keyword winbatchImplicit wntgetcon wntgetuser wntlistgroups wntmemberdel wntmemberget
+syn keyword winbatchImplicit wntmembergrps wntmemberlist wntmemberset wntresources wntshareadd
+syn keyword winbatchImplicit wntsharedel wntshareset wntversion wnversion wnwrkgroups wwenvunload
+syn keyword winbatchImplicit xbaseconvert xcursorset xdisklabelget xdriveready xextenderinfo
+syn keyword winbatchImplicit xgetchildhwnd xgetelapsed xhex xmemcompact xmessagebox
+syn keyword winbatchImplicit xsendmessage xverifyccard yield
+
+" 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_winbatch_syntax_inits")
+ if version < 508
+ let did_winbatch_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink winbatchLabel PreProc
+ HiLink winbatchCtl Operator
+ HiLink winbatchStatement Statement
+ HiLink winbatchTodo Todo
+ HiLink winbatchString String
+ HiLink winbatchVar Type
+ HiLink winbatchComment Comment
+ HiLink winbatchImplicit Special
+ HiLink winbatchNumber Number
+ HiLink winbatchConstant StorageClass
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "winbatch"
+
+" vim: ts=8
diff --git a/runtime/syntax/wml.vim b/runtime/syntax/wml.vim
new file mode 100644
index 000000000..5957930c8
--- /dev/null
+++ b/runtime/syntax/wml.vim
@@ -0,0 +1,172 @@
+" Vim syntax file
+" Language: WML - Website MetaLanguage
+" Maintainer: Gerfried Fuchs <alfie@ist.org>
+" Filenames: *.wml
+" Last Change: 07 Feb 2002
+" URL: http://alfie.ist.org/software/vim/syntax/wml.vim
+"
+" Original Version: Craig Small <csmall@eye-net.com.au>
+
+" Comments are very welcome - but please make sure that you are commenting on
+" the latest version of this file.
+" SPAM is _NOT_ welcome - be ready to be reported!
+
+" If you are looking for the "Wireless Markup Language" syntax file,
+" please take a look at the wap.vim file done by Ralf Schandl, soon in a
+" vim-package around your corner :)
+
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+
+" A lot of the web stuff looks like HTML so we load that first
+if version < 600
+ so <sfile>:p:h/html.vim
+else
+ runtime! syntax/html.vim
+endif
+unlet b:current_syntax
+
+if !exists("main_syntax")
+ let main_syntax = 'wml'
+endif
+
+" special character
+syn match wmlNextLine "\\$"
+
+" Redfine htmlTag
+syn clear htmlTag
+syn region htmlTag start=+<[^/<]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition
+
+"
+" Add in extra Arguments used by wml
+syn keyword htmlTagName contained gfont imgbg imgdot lowsrc
+syn keyword htmlTagName contained navbar:define navbar:header
+syn keyword htmlTagName contained navbar:footer navbar:prolog
+syn keyword htmlTagName contained navbar:epilog navbar:button
+syn keyword htmlTagName contained navbar:filter navbar:debug
+syn keyword htmlTagName contained navbar:render
+syn keyword htmlTagName contained preload rollover
+syn keyword htmlTagName contained space hspace vspace over
+syn keyword htmlTagName contained ps ds pi ein big sc spaced headline
+syn keyword htmlTagName contained ue subheadline zwue verbcode
+syn keyword htmlTagName contained isolatin pod sdf text url verbatim
+syn keyword htmlTagName contained xtable
+syn keyword htmlTagName contained csmap fsview import box
+syn keyword htmlTagName contained case:upper case:lower
+syn keyword htmlTagName contained grid cell info lang: logo page
+syn keyword htmlTagName contained set-var restore
+syn keyword htmlTagName contained array:push array:show set-var ifdef
+syn keyword htmlTagName contained say m4 symbol dump enter divert
+syn keyword htmlTagName contained toc
+syn keyword htmlTagName contained wml card do refresh oneevent catch spawn
+
+"
+" The wml arguments
+syn keyword htmlArg contained adjust background base bdcolor bdspace
+syn keyword htmlArg contained bdwidth complete copyright created crop
+syn keyword htmlArg contained direction description domainname eperlfilter
+syn keyword htmlArg contained file hint imgbase imgstar interchar interline
+syn keyword htmlArg contained keephr keepindex keywords layout spacing
+syn keyword htmlArg contained padding nonetscape noscale notag notypo
+syn keyword htmlArg contained onload oversrc pos select slices style
+syn keyword htmlArg contained subselected txtcol_select txtcol_normal
+syn keyword htmlArg contained txtonly via
+syn keyword htmlArg contained mode columns localsrc ordered
+
+
+" Lines starting with an # are usually comments
+syn match wmlComment "^\s*#.*"
+" The different exceptions to comments
+syn match wmlSharpBang "^#!.*"
+syn match wmlUsed contained "\s\s*[A-Za-z:_-]*"
+syn match wmlUse "^\s*#\s*use\s\+" contains=wmlUsed
+syn match wmlInclude "^\s*#\s*include.+"
+
+syn region wmlBody contained start=+<<+ end=+>>+
+
+syn match wmlLocationId contained "[A-Za-z]\+"
+syn region wmlLocation start=+<<+ end=+>>+ contains=wmlLocationId
+"syn region wmlLocation start=+{#+ end=+#}+ contains=wmlLocationId
+"syn region wmlLocationed contained start=+<<+ end=+>>+ contains=wmlLocationId
+
+syn match wmlDivert "\.\.[a-zA-Z_]\+>>"
+syn match wmlDivertEnd "<<\.\."
+" new version
+"syn match wmlDivert "{#[a-zA-Z_]\+#:"
+"syn match wmlDivertEnd ":##}"
+
+syn match wmlDefineName contained "\s\+[A-Za-z-]\+"
+syn region htmlTagName start="\<\(define-tag\|define-region\)" end="\>" contains=wmlDefineName
+
+" The perl include stuff
+if main_syntax != 'perl'
+ " Perl script
+ if version < 600
+ syn include @wmlPerlScript <sfile>:p:h/perl.vim
+ else
+ syn include @wmlPerlScript syntax/perl.vim
+ endif
+ unlet b:current_syntax
+
+ syn region perlScript start=+<perl>+ keepend end=+</perl>+ contains=@wmlPerlScript,wmlPerlTag
+" eperl between '<:' and ':>' -- Alfie [1999-12-26]
+ syn region perlScript start=+<:+ keepend end=+:>+ contains=@wmlPerlScript,wmlPerlTag
+ syn match wmlPerlTag contained "</*perl>" contains=wmlPerlTagN
+ syn keyword wmlPerlTagN contained perl
+
+ hi link wmlPerlTag htmlTag
+ hi link wmlPerlTagN htmlStatement
+endif
+
+" verbatim tags -- don't highlight anything in between -- Alfie [2002-02-07]
+syn region wmlVerbatimText start=+<verbatim>+ keepend end=+</verbatim>+ contains=wmlVerbatimTag
+syn match wmlVerbatimTag contained "</*verbatim>" contains=wmlVerbatimTagN
+syn keyword wmlVerbatimTagN contained verbatim
+hi link wmlVerbatimTag htmlTag
+hi link wmlVerbatimTagN htmlStatement
+
+if main_syntax == "html"
+ syn sync match wmlHighlight groupthere NONE "</a-zA-Z]"
+ syn sync match wmlHighlight groupthere perlScript "<perl>"
+ syn sync match wmlHighlightSkip "^.*['\"].*$"
+ syn sync minlines=10
+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_wml_syn_inits")
+ let did_wml_syn_inits = 1
+ if version < 508
+ let did_wml_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink wmlNextLine Special
+ HiLink wmlUse Include
+ HiLink wmlUsed String
+ HiLink wmlBody Special
+ HiLink wmlDiverted Label
+ HiLink wmlDivert Delimiter
+ HiLink wmlDivertEnd Delimiter
+ HiLink wmlLocationId Label
+ HiLink wmlLocation Delimiter
+" HiLink wmlLocationed Delimiter
+ HiLink wmlDefineName String
+ HiLink wmlComment Comment
+ HiLink wmlInclude Include
+ HiLink wmlSharpBang PreProc
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "wml"
diff --git a/runtime/syntax/wsh.vim b/runtime/syntax/wsh.vim
new file mode 100644
index 000000000..98ba105a7
--- /dev/null
+++ b/runtime/syntax/wsh.vim
@@ -0,0 +1,45 @@
+" Vim syntax file
+" Language: Windows Scripting Host
+" Maintainer: Paul Moore <gustav@morpheus.demon.co.uk>
+" Last Change: Fre, 24 Nov 2000 21:54:09 +0100
+
+" This reuses the XML, VB and JavaScript syntax files. While VB is not
+" VBScript, it's close enough for us. No attempt is made to handle
+" other languages.
+" Send comments, suggestions and requests to the maintainer.
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:wsh_cpo_save = &cpo
+set cpo&vim
+
+runtime! syntax/xml.vim
+unlet b:current_syntax
+
+syn case ignore
+syn include @wshVBScript <sfile>:p:h/vb.vim
+unlet b:current_syntax
+syn include @wshJavaScript <sfile>:p:h/javascript.vim
+unlet b:current_syntax
+syn region wshVBScript
+ \ matchgroup=xmlTag start="<script[^>]*VBScript\(>\|[^>]*[^/>]>\)"
+ \ matchgroup=xmlEndTag end="</script>"
+ \ fold
+ \ contains=@wshVBScript
+ \ keepend
+syn region wshJavaScript
+ \ matchgroup=xmlTag start="<script[^>]*J\(ava\)\=Script\(>\|[^>]*[^/>]>\)"
+ \ matchgroup=xmlEndTag end="</script>"
+ \ fold
+ \ contains=@wshJavaScript
+ \ keepend
+
+syn cluster xmlRegionHook add=wshVBScript,wshJavaScript
+
+let b:current_syntax = "wsh"
+
+let &cpo = s:wsh_cpo_save
+unlet s:wsh_cpo_save
diff --git a/runtime/syntax/wvdial.vim b/runtime/syntax/wvdial.vim
new file mode 100644
index 000000000..035138b65
--- /dev/null
+++ b/runtime/syntax/wvdial.vim
@@ -0,0 +1,28 @@
+" Vim syntax file
+" Language: Configuration file for WvDial
+" Maintainer: Prahlad Vaidyanathan <slime@vsnl.net>
+" Last Update: Mon, 15 Oct 2001 09:39:03 Indian Standard Time
+
+" Quit if syntax file is already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+syn match wvdialComment "^;.*$"lc=1
+syn match wvdialComment "[^\\];.*$"lc=1
+syn match wvdialSection "^\s*\[.*\]"
+syn match wvdialValue "=.*$"ms=s+1
+syn match wvdialValue "\s*[^ ;"' ]\+"lc=1
+syn match wvdialVar "^\s*\(Inherits\|Modem\|Baud\|Init.\|Phone\|Area\ Code\|Dial\ Prefix\|Dial\ Command\|Login\|Login\| Prompt\|Password\|Password\ Prompt\|PPPD\ Path\|Force\ Address\|Remote\ Name\|Carrier\ Check\|Stupid\ [Mm]ode\|New\ PPPD\|Default\ Reply\|Auto\ Reconnect\|SetVolume\|Username\)"
+syn match wvdialEqual "="
+
+" The default highlighting
+hi def link wvdialComment Comment
+hi def link wvdialSection PreProc
+hi def link wvdialVar Identifier
+hi def link wvdialValue String
+hi def link wvdialEqual Statement
+
+let b:current_syntax = "wvdial"
+
+"EOF vim: tw=78:ft=vim:ts=8
diff --git a/runtime/syntax/xdefaults.vim b/runtime/syntax/xdefaults.vim
new file mode 100644
index 000000000..64d3b6953
--- /dev/null
+++ b/runtime/syntax/xdefaults.vim
@@ -0,0 +1,145 @@
+" Vim syntax file
+" Language: X resources files like ~/.Xdefaults (xrdb)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Author and previous maintainer:
+" Gautam H. Mudunuri <gmudunur@informatica.com>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" $Id$
+"
+" REFERENCES:
+" xrdb manual page
+" xrdb source: ftp://ftp.x.org/pub/R6.4/xc/programs/xrdb/xrdb.c
+
+" 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
+
+" turn case on
+syn case match
+
+
+if !exists("xdefaults_no_colon_errors")
+ " mark lines which do not contain a colon as errors.
+ " This does not really catch all errors but only lines
+ " which contain at least two WORDS and no colon. This
+ " was done this way so that a line is not marked as
+ " error while typing (which would be annoying).
+ syntax match xdefaultsErrorLine "^\s*[a-zA-Z.*]\+\s\+[^: ]\+"
+endif
+
+
+" syn region xdefaultsLabel start=+^[^:]\{-}:+he=e-1 skip=+\\+ end="$"
+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+
+syn match xdefaultsSpecial contained +#augment+
+syn match xdefaultsPunct contained +[.*:]+
+syn match xdefaultsLineEnd contained +\\$+
+syn match xdefaultsLineEnd contained +\\n\\$+
+syn match xdefaultsLineEnd contained +\\n$+
+
+
+
+" COMMENTS
+
+" note, that the '!' must be at the very first position of the line
+syn match xdefaultsComment "^!.*$" contains=xdefaultsTodo
+
+" lines starting with a '#' mark and which are not preprocessor
+" lines are skipped. This is not part of the xrdb documentation.
+" It was reported by Bram Moolenaar and could be confirmed by
+" having a look at xrdb.c:GetEntries()
+syn match xdefaultsCommentH "^#.*$"
+"syn region xdefaultsComment start="^#" end="$" keepend contains=ALL
+syn region xdefaultsComment start="/\*" end="\*/" contains=xdefaultsTodo
+
+syntax match xdefaultsCommentError "\*/"
+
+syn keyword xdefaultsTodo contained TODO FIXME XXX display
+
+
+
+" PREPROCESSOR STUFF
+
+syn region xdefaultsPreProc start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\|else\|endif\)\>" skip="\\$" end="$" contains=xdefaultsSymbol
+if !exists("xdefaults_no_if0")
+ syn region xdefaultsCppOut start="^\s*#\s*if\s\+0\>" end=".\|$" contains=xdefaultsCppOut2
+ syn region xdefaultsCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=xdefaultsCppSkip
+ syn region xdefaultsCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=xdefaultsCppSkip
+endif
+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
+
+
+
+" symbols as defined by xrdb
+syn keyword xdefaultsSymbol contained SERVERHOST
+syn match xdefaultsSymbol contained "SRVR_[a-zA-Z0-9_]\+"
+syn keyword xdefaultsSymbol contained HOST
+syn keyword xdefaultsSymbol contained DISPLAY_NUM
+syn keyword xdefaultsSymbol contained CLIENTHOST
+syn match xdefaultsSymbol contained "CLNT_[a-zA-Z0-9_]\+"
+syn keyword xdefaultsSymbol contained RELEASE
+syn keyword xdefaultsSymbol contained REVISION
+syn keyword xdefaultsSymbol contained VERSION
+syn keyword xdefaultsSymbol contained VENDOR
+syn match xdefaultsSymbol contained "VNDR_[a-zA-Z0-9_]\+"
+syn match xdefaultsSymbol contained "EXT_[a-zA-Z0-9_]\+"
+syn keyword xdefaultsSymbol contained NUM_SCREENS
+syn keyword xdefaultsSymbol contained SCREEN_NUM
+syn keyword xdefaultsSymbol contained BITS_PER_RGB
+syn keyword xdefaultsSymbol contained CLASS
+syn keyword xdefaultsSymbol contained StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor
+syn match xdefaultsSymbol contained "CLASS_\(StaticGray\|GrayScale\|StaticColor\|PseudoColor\|TrueColor\|DirectColor\)"
+syn keyword xdefaultsSymbol contained COLOR
+syn match xdefaultsSymbol contained "CLASS_\(StaticGray\|GrayScale\|StaticColor\|PseudoColor\|TrueColor\|DirectColor\)_[0-9]\+"
+syn keyword xdefaultsSymbol contained HEIGHT
+syn keyword xdefaultsSymbol contained WIDTH
+syn keyword xdefaultsSymbol contained PLANES
+syn keyword xdefaultsSymbol contained X_RESOLUTION
+syn keyword xdefaultsSymbol contained Y_RESOLUTION
+
+" 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_xdefaults_syntax_inits")
+ if version < 508
+ let did_xdefaults_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+ HiLink xdefaultsLabel Type
+ HiLink xdefaultsValue Constant
+ HiLink xdefaultsComment Comment
+ HiLink xdefaultsCommentH xdefaultsComment
+ HiLink xdefaultsPreProc PreProc
+ HiLink xdefaultsInclude xdefaultsPreProc
+ HiLink xdefaultsCppSkip xdefaultsCppOut
+ HiLink xdefaultsCppOut2 xdefaultsCppOut
+ HiLink xdefaultsCppOut Comment
+ HiLink xdefaultsIncluded String
+ HiLink xdefaultsDefine Macro
+ HiLink xdefaultsSymbol Statement
+ HiLink xdefaultsSpecial Statement
+ HiLink xdefaultsErrorLine Error
+ HiLink xdefaultsCommentError Error
+ HiLink xdefaultsPunct Normal
+ HiLink xdefaultsLineEnd Special
+ HiLink xdefaultsTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xdefaults"
+
+" vim:ts=8
diff --git a/runtime/syntax/xf86conf.vim b/runtime/syntax/xf86conf.vim
new file mode 100644
index 000000000..8d0f60638
--- /dev/null
+++ b/runtime/syntax/xf86conf.vim
@@ -0,0 +1,209 @@
+" 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: 2003-05-01
+" URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
+" Required Vim Version: 6.0
+"
+" Options: let xf86conf_xfree86_version = 3 or 4
+" to force XFree86 3.x or 4.x XF86Config syntax
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ echo "Sorry, but this syntax file relies on Vim 6 features. Either upgrade Vim or usea version of " . expand("<sfile>:t:r") . " syntax file appropriate for Vim " . version/100 . "." . version %100 . "."
+ finish
+endif
+
+if !exists("b:xf86conf_xfree86_version")
+ if exists("xf86conf_xfree86_version")
+ let b:xf86conf_xfree86_version = xf86conf_xfree86_version
+ else
+ let b:xf86conf_xfree86_version = 4
+ endif
+endif
+
+syn case ignore
+
+" Comments
+syn match xf86confComment "#.*$" contains=xf86confTodo
+syn case match
+syn keyword xf86confTodo FIXME TODO XXX NOT contained
+syn case ignore
+syn match xf86confTodo "???" contained
+
+" Sectioning errors
+syn keyword xf86confSectionError Section contained
+syn keyword xf86confSectionError EndSection
+syn keyword xf86confSubSectionError SubSection
+syn keyword xf86confSubSectionError EndSubSection
+syn keyword xf86confModeSubSectionError Mode
+syn keyword xf86confModeSubSectionError EndMode
+syn cluster xf86confSectionErrors contains=xf86confSectionError,xf86confSubSectionError,xf86confModeSubSectionError
+
+" Values
+if b:xf86conf_xfree86_version >= 4
+ syn region xf86confString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=xf86confSpecialChar,xf86confConstant,xf86confOptionName oneline keepend nextgroup=xf86confValue skipwhite
+else
+ syn region xf86confString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=xf86confSpecialChar,xf86confOptionName oneline keepend
+endif
+syn match xf86confSpecialChar "\\\d\d\d\|\\." contained
+syn match xf86confDecimalNumber "\(\s\|-\)\zs\d*\.\=\d\+\>"
+syn match xf86confFrequency "\(\s\|-\)\zs\d\+\.\=\d*\(Hz\|k\|kHz\|M\|MHz\)"
+syn match xf86confOctalNumber "\<0\o\+\>"
+syn match xf86confOctalNumberError "\<0\o\+[89]\d*\>"
+syn match xf86confHexadecimalNumber "\<0x\x\+\>"
+syn match xf86confValue "\s\+.*$" contained contains=xf86confComment,xf86confString,xf86confFrequency,xf86conf\w\+Number,xf86confConstant
+syn keyword xf86confOption Option nextgroup=xf86confString skipwhite
+syn match xf86confModeLineValue "\"[^\"]\+\"\(\_s\+[0-9.]\+\)\{9}" nextgroup=xf86confSync skipwhite skipnl
+
+" 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\|Vendor\|Keyboard\|Pointer\)\"" 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
+ syn region xf86confSectionScreen matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Screen\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionDisplay,xf86confComment,xf86confOption,xf86confKeyword
+ syn region xf86confSubSectionAny matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"[^\"]\+\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,@xf86confSectionErrors
+ syn region xf86confSubSectionMode matchgroup=xf86confSectionDelim start="^\s*Mode\s\+\"[^\"]\+\"" end="^\s*EndMode\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confKeyword,@xf86confSectionErrors
+ syn region xf86confSubSectionDisplay matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"Display\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,@xf86confSectionErrors
+else
+ syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Device\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword
+ syn region xf86confSectionMX matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Module\|Xinput\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword
+ syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword
+ syn region xf86confSectionScreen matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Screen\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionDisplay,xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword
+ syn region xf86confSubSectionAny matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"[^\"]\+\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors
+ syn region xf86confSubSectionMode matchgroup=xf86confSectionDelim start="^\s*Mode\s\+\"[^\"]\+\"" end="^\s*EndMode\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors
+ syn region xf86confSubSectionDisplay matchgroup=xf86confSectionDelim start="^\s*SubSection\s\+\"Display\"" end="^\s*EndSubSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOptionName,xf86confOption,xf86confKeyword,@xf86confSectionErrors
+endif
+
+" Options
+if b:xf86conf_xfree86_version >= 4
+ command -nargs=+ Xf86confdeclopt syn keyword xf86confOptionName <args> contained
+else
+ command -nargs=+ Xf86confdeclopt syn keyword xf86confOptionName <args> contained nextgroup=xf86confValue,xf86confComment skipwhite
+endif
+
+Xf86confdeclopt 18bitBus AGPFastWrite AGPMode Accel AllowClosedownGrabs AllowDeactivateGrabs
+Xf86confdeclopt AllowMouseOpenFail AllowNonLocalModInDev AllowNonLocalXvidtune AlwaysCore
+Xf86confdeclopt AngleOffset AutoRepeat BaudRate BeamTimeout Beep BlankTime BlockWrite BottomX
+Xf86confdeclopt BottomY ButtonNumber ButtonThreshold Buttons ByteSwap CacheLines ChordMiddle
+Xf86confdeclopt ClearDTR ClearDTS ClickMode CloneDisplay CloneHSync CloneMode CloneVRefresh
+Xf86confdeclopt ColorKey Composite CompositeSync CoreKeyboard CorePointer Crt2Memory CrtScreen
+Xf86confdeclopt CrtcNumber CyberShadow CyberStretch DDC DDCMode DMAForXv DPMS Dac6Bit DacSpeed
+Xf86confdeclopt DataBits Debug DebugLevel DefaultServerLayout DeltaX DeltaY Device DeviceName
+Xf86confdeclopt DisableModInDev DisableVidModeExtension Display Display1400 DontVTSwitch
+Xf86confdeclopt DontZap DontZoom DoubleScan DozeMode DozeScan DozeTime DragLockButtons
+Xf86confdeclopt DualCount DualRefresh EarlyRasPrecharge Emulate3Buttons Emulate3Timeout
+Xf86confdeclopt EmulateWheel EmulateWheelButton EmulateWheelInertia EnablePageFlip EnterCount
+Xf86confdeclopt EstimateSizesAggressively ExternDisp FPClock16 FPClock24 FPClock32
+Xf86confdeclopt FPClock8 FPDither FastDram FifoAggresive FifoConservative FifoModerate
+Xf86confdeclopt FireGL3000 FixPanelSize FlatPanel FlipXY FlowControl ForceCRT1 ForceCRT2Type
+Xf86confdeclopt ForceLegacyCRT ForcePCIMode FpmVRAM FrameBufferWC FullMMIO GammaBrightness
+Xf86confdeclopt HWClocks HWCursor HandleSpecialKeys HistorySize Interlace Interlaced InternDisp
+Xf86confdeclopt InvX InvY InvertX InvertY KeepShape LCDClock LateRasPrecharge LcdCenter
+Xf86confdeclopt LeftAlt Linear MGASDRAM MMIO MMIOCache MTTR MaxX MaxY MaximumXPosition
+Xf86confdeclopt MaximumYPosition MinX MinY MinimumXPosition MinimumYPosition NoAccel
+Xf86confdeclopt NoAllowMouseOpenFail NoAllowNonLocalModInDev NoAllowNonLocalXvidtune
+Xf86confdeclopt NoBlockWrite NoCompositeSync NoCompression NoCrtScreen NoCyberShadow NoDCC
+Xf86confdeclopt NoDDC NoDac6Bit NoDebug NoDisableModInDev NoDisableVidModeExtension NoDontZap
+Xf86confdeclopt NoDontZoom NoFireGL3000 NoFixPanelSize NoFpmVRAM NoFrameBufferWC NoHWClocks
+Xf86confdeclopt NoHWCursor NoHal NoLcdCenter NoLinear NoMGASDRAM NoMMIO NoMMIOCache NoMTTR
+Xf86confdeclopt NoOverClockMem NoOverlay NoPC98 NoPM NoPciBurst NoPciRetry NoProbeClock
+Xf86confdeclopt NoSTN NoSWCursor NoShadowFb NoShowCache NoSlowEDODRAM NoStretch NoSuspendHack
+Xf86confdeclopt NoTexturedVideo NoTrapSignals NoUseFBDev NoUseModeline NoUseVclk1 NoVTSysReq
+Xf86confdeclopt NoXVideo NvAGP OSMImageBuffers OffTime Origin OverClockMem Overlay
+Xf86confdeclopt PC98 PCIBurst PM PWMActive PWMSleep PanelDelayCompensation PanelHeight
+Xf86confdeclopt PanelOff PanelWidth Parity PciBurst PciRetry Pixmap Port PressDur PressPitch
+Xf86confdeclopt PressVol ProbeClocks ProgramFPRegs Protocol RGBBits ReleaseDur ReleasePitch
+Xf86confdeclopt ReportingMode Resolution RightAlt RightCtl Rotate STN SWCursor SampleRate
+Xf86confdeclopt ScreenNumber ScrollLock SendCoreEvents SendDragEvents Serial ServerNumLock
+Xf86confdeclopt SetLcdClk SetMClk SetRefClk ShadowFb ShadowStatus ShowCache SleepMode
+Xf86confdeclopt SleepScan SleepTime SlowDram SlowEDODRAM StandbyTime StopBits Stretch
+Xf86confdeclopt SuspendHack SuspendTime SwapXY SyncOnGreen TV TVOutput TVOverscan TVStandard
+Xf86confdeclopt TVXPosOffset TVYPosOffset TexturedVideo Threshold Tilt TopX TopY TouchTime
+Xf86confdeclopt TrapSignals Type USB UseBIOS UseFB UseFBDev UseFlatPanel UseModeline
+Xf86confdeclopt UseROMData UseVclk1 VTInit VTSysReq VTime VideoKey Vmin XAxisMapping
+Xf86confdeclopt XLeds XVideo XaaNoCPUToScreenColorExpandFill XaaNoColor8x8PatternFillRect
+Xf86confdeclopt XaaNoColor8x8PatternFillTrap XaaNoDashedBresenhamLine XaaNoDashedTwoPointLine
+Xf86confdeclopt XaaNoImageWriteRect XaaNoMono8x8PatternFillRect XaaNoMono8x8PatternFillTrap
+Xf86confdeclopt XaaNoOffscreenPixmaps XaaNoPixmapCache XaaNoScanlineCPUToScreenColorExpandFill
+Xf86confdeclopt XaaNoScanlineImageWriteRect XaaNoScreenToScreenColorExpandFill
+Xf86confdeclopt XaaNoScreenToScreenCopy XaaNoSolidBresenhamLine XaaNoSolidFillRect
+Xf86confdeclopt XaaNoSolidFillTrap XaaNoSolidHorVertLine XaaNoSolidTwoPointLine Xinerama
+Xf86confdeclopt XkbCompat XkbDisable XkbGeometry XkbKeycodes XkbKeymap XkbLayout XkbModel
+Xf86confdeclopt XkbOptions XkbRules XkbSymbols XkbTypes XkbVariant XvBskew XvHsync XvOnCRT2
+Xf86confdeclopt XvRskew XvVsync YAxisMapping ZAxisMapping ZoomOnLCD
+
+delcommand Xf86confdeclopt
+
+" Keywords
+syn keyword xf86confKeyword Device Driver FontPath Group Identifier Load ModelName ModulePath Monitor RGBPath VendorName VideoAdaptor Visual nextgroup=xf86confComment,xf86confString skipwhite
+syn keyword xf86confKeyword BiosBase Black BoardName BusID ChipID ChipRev Chipset nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword ClockChip Clocks DacSpeed DefaultDepth DefaultFbBpp nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword DefaultColorDepth nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword Depth DisplaySize DotClock FbBpp Flags Gamma HorizSync nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword Hskew HTimings InputDevice IOBase MemBase Mode nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword Modes Ramdac Screen TextClockFreq UseModes VendorName nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword VertRefresh VideoRam ViewPort Virtual VScan VTimings nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confKeyword Weight White nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confModeLine ModeLine nextgroup=xf86confComment,xf86confModeLineValue skipwhite skipnl
+
+" Constants
+if b:xf86conf_xfree86_version >= 4
+ syn keyword xf86confConstant true false on off yes no omit contained
+else
+ syn keyword xf86confConstant Meta Compose Control
+endif
+syn keyword xf86confConstant StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor contained
+syn keyword xf86confConstant Absolute RightOf LeftOf Above Below Relative StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor contained
+syn match xf86confSync "\(\s\+[+-][CHV]_*Sync\)\+" contained
+
+" 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\|Vendor\|Keyboard\|Pointer\)\""
+ syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\""
+ syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\""
+else
+ syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Device\|Keyboard\|Pointer\)\""
+ syn sync match xf86confSyncSectionMX grouphere xf86confSectionMX "^\s*Section\s\+\"\(Module\|Xinput\)\""
+endif
+syn sync match xf86confSyncSectionMonitor groupthere xf86confSectionMonitor "^\s*Section\s\+\"Monitor\""
+syn sync match xf86confSyncSectionScreen groupthere xf86confSectionScreen "^\s*Section\s\+\"Screen\""
+syn sync match xf86confSyncEndSection groupthere NONE "^\s*End_*Section\s*$"
+
+" Define the default highlighting
+hi def link xf86confComment Comment
+hi def link xf86confTodo Todo
+hi def link xf86confSectionDelim Statement
+hi def link xf86confOptionName Identifier
+
+hi def link xf86confSectionError xf86confError
+hi def link xf86confSubSectionError xf86confError
+hi def link xf86confModeSubSectionError xf86confError
+hi def link xf86confOctalNumberError xf86confError
+hi def link xf86confError Error
+
+hi def link xf86confOption xf86confKeyword
+hi def link xf86confModeLine xf86confKeyword
+hi def link xf86confKeyword Type
+
+hi def link xf86confDecimalNumber xf86confNumber
+hi def link xf86confOctalNumber xf86confNumber
+hi def link xf86confHexadecimalNumber xf86confNumber
+hi def link xf86confFrequency xf86confNumber
+hi def link xf86confModeLineValue Constant
+hi def link xf86confNumber Constant
+
+hi def link xf86confSync xf86confConstant
+hi def link xf86confConstant Special
+hi def link xf86confSpecialChar Special
+hi def link xf86confString String
+
+hi def link xf86confValue Constant
+
+let b:current_syntax = "xf86conf"
diff --git a/runtime/syntax/xhtml.vim b/runtime/syntax/xhtml.vim
new file mode 100644
index 000000000..0c6ea7340
--- /dev/null
+++ b/runtime/syntax/xhtml.vim
@@ -0,0 +1,11 @@
+" Vim syntax file
+" Language: XHTML
+" Maintainer: noone
+" Last Change: 2003 Feb 04
+
+" Load the HTML syntax for now.
+runtime! syntax/html.vim
+
+let b:current_syntax = "xhtml"
+
+" vim: ts=8
diff --git a/runtime/syntax/xkb.vim b/runtime/syntax/xkb.vim
new file mode 100644
index 000000000..ff9bfd0da
--- /dev/null
+++ b/runtime/syntax/xkb.vim
@@ -0,0 +1,91 @@
+" Vim syntax file
+" This is a GENERATED FILE. Please always refer to source file at the URI below.
+" Language: XKB (X Keyboard Extension) components
+" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2003-04-13
+" URL: http://trific.ath.cx/Ftp/vim/syntax/xkb.vim
+
+" Setup
+if version >= 600
+ if exists("b:current_syntax")
+ finish
+ endif
+else
+ syntax clear
+endif
+
+syn case match
+syn sync minlines=100
+
+" Comments
+syn region xkbComment start="//" skip="\\$" end="$" keepend contains=xkbTodo
+syn region xkbComment start="/\*" matchgroup=NONE end="\*/" contains=xkbCommentStartError,xkbTodo
+syn match xkbCommentError "\*/"
+syntax match xkbCommentStartError "/\*" contained
+syn sync ccomment xkbComment
+syn keyword xkbTodo TODO FIXME contained
+
+" Literal strings
+syn match xkbSpecialChar "\\\d\d\d\|\\." contained
+syn region xkbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=xkbSpecialChar oneline
+
+" Catch errors caused by wrong parenthesization
+syn region xkbParen start='(' end=')' contains=ALLBUT,xkbParenError,xkbSpecial,xkbTodo transparent
+syn match xkbParenError ")"
+syn region xkbBrace start='{' end='}' contains=ALLBUT,xkbBraceError,xkbSpecial,xkbTodo transparent
+syn match xkbBraceError "}"
+syn region xkbBracket start='\[' end='\]' contains=ALLBUT,xkbBracketError,xkbSpecial,xkbTodo transparent
+syn match xkbBracketError "\]"
+
+" Physical keys
+syn match xkbPhysicalKey "<\w\+>"
+
+" Keywords
+syn keyword xkbPreproc augment include replace
+syn keyword xkbConstant False True
+syn keyword xkbModif override replace
+syn keyword xkbIdentifier action affect alias allowExplicit approx baseColor button clearLocks color controls cornerRadius count ctrls description driveskbd font fontSize gap group groups height indicator indicatorDrivesKeyboard interpret key keys labelColor latchToLock latchMods left level_name map maximum minimum modifier_map modifiers name offColor onColor outline preserve priority repeat row section section setMods shape slant solid symbols text top type useModMapMods virtualModifier virtualMods virtual_modifiers weight whichModState width
+syn keyword xkbFunction AnyOf ISOLock LatchGroup LatchMods LockControls LockGroup LockMods LockPointerButton MovePtr NoAction PointerButton SetControls SetGroup SetMods SetPtrDflt Terminate
+syn keyword xkbTModif default hidden partial virtual
+syn keyword xkbSect alphanumeric_keys alternate_group function_keys keypad_keys modifier_keys xkb_compatibility xkb_geometry xkb_keycodes xkb_keymap xkb_semantics xkb_symbols xkb_types
+
+" Define the default highlighting
+if version >= 508 || !exists("did_xkb_syntax_inits")
+ if version < 508
+ let did_xkb_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink xkbModif xkbPreproc
+ HiLink xkbTModif xkbPreproc
+ HiLink xkbPreproc Preproc
+
+ HiLink xkbIdentifier Keyword
+ HiLink xkbFunction Function
+ HiLink xkbSect Type
+ HiLink xkbPhysicalKey Identifier
+ HiLink xkbKeyword Keyword
+
+ HiLink xkbComment Comment
+ HiLink xkbTodo Todo
+
+ HiLink xkbConstant Constant
+ HiLink xkbString String
+
+ HiLink xkbSpecialChar xkbSpecial
+ HiLink xkbSpecial Special
+
+ HiLink xkbParenError xkbBalancingError
+ HiLink xkbBraceError xkbBalancingError
+ HiLink xkbBraketError xkbBalancingError
+ HiLink xkbBalancingError xkbError
+ HiLink xkbCommentStartError xkbCommentError
+ HiLink xkbCommentError xkbError
+ HiLink xkbError Error
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xkb"
diff --git a/runtime/syntax/xmath.vim b/runtime/syntax/xmath.vim
new file mode 100644
index 000000000..21962fb42
--- /dev/null
+++ b/runtime/syntax/xmath.vim
@@ -0,0 +1,235 @@
+" Vim syntax file
+" Language: xmath (a simulation tool)
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Sep 02, 2003
+" Version: 3
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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
+
+" parenthesis sanity checker
+syn region xmathZone matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" transparent contains=ALLBUT,xmathError,xmathBraceError,xmathCurlyError
+syn region xmathZone matchgroup=Delimiter start="{" matchgroup=Delimiter end="}" transparent contains=ALLBUT,xmathError,xmathBraceError,xmathParenError
+syn region xmathZone matchgroup=Delimiter start="\[" matchgroup=Delimiter end="]" transparent contains=ALLBUT,xmathError,xmathCurlyError,xmathParenError
+syn match xmathError "[)\]}]"
+syn match xmathBraceError "[)}]" contained
+syn match xmathCurlyError "[)\]]" contained
+syn match xmathParenError "[\]}]" contained
+syn match xmathComma "[,;:]"
+syn match xmathComma "\.\.\.$"
+
+" A bunch of useful xmath keywords
+syn case ignore
+syn keyword xmathFuncCmd function endfunction command endcommand
+syn keyword xmathStatement abort beep debug default define
+syn keyword xmathStatement execute exit pause return undefine
+syn keyword xmathConditional if else elseif endif
+syn keyword xmathRepeat while for endwhile endfor
+syn keyword xmathCmd anigraph deletedatastore keep renamedatastore
+syn keyword xmathCmd autocode deletestd linkhyper renamestd
+syn keyword xmathCmd build deletesuperblock linksim renamesuperblock
+syn keyword xmathCmd comment deletetransition listusertype save
+syn keyword xmathCmd copydatastore deleteusertype load sbadisplay
+syn keyword xmathCmd copystd detailmodel lock set
+syn keyword xmathCmd copysuperblock display minmax_display setsbdefault
+syn keyword xmathCmd createblock documentit modifyblock show
+syn keyword xmathCmd createbubble editcatalog modifybubble showlicense
+syn keyword xmathCmd createconnection erase modifystd showsbdefault
+syn keyword xmathCmd creatertf expandsuperbubble modifysuperblock stop
+syn keyword xmathCmd createstd for modifytransition stopcosim
+syn keyword xmathCmd createsuperblock go modifyusertype syntax
+syn keyword xmathCmd createsuperbubble goto new unalias
+syn keyword xmathCmd createtransition hardcopy next unlock
+syn keyword xmathCmd createusertype help polargraph usertype
+syn keyword xmathCmd delete hyperbuild print whatis
+syn keyword xmathCmd deleteblock if printmodel while
+syn keyword xmathCmd deletebubble ifilter quit who
+syn keyword xmathCmd deleteconnection ipcwc remove xgraph
+
+syn keyword xmathFunc abcd eye irea querystdoptions
+syn keyword xmathFunc abs eyepattern is querysuperblock
+syn keyword xmathFunc acos feedback ISID querysuperblockopt
+syn keyword xmathFunc acosh fft ISID Models querytransition
+syn keyword xmathFunc adconversion fftpdm kronecker querytransitionopt
+syn keyword xmathFunc afeedback filter length qz
+syn keyword xmathFunc all find limit rampinvar
+syn keyword xmathFunc ambiguity firparks lin random
+syn keyword xmathFunc amdemod firremez lin30 randpdm
+syn keyword xmathFunc analytic firwind linearfm randpert
+syn keyword xmathFunc analyze fmdemod linfnorm randsys
+syn keyword xmathFunc any forwdiff lintodb rank
+syn keyword xmathFunc append fprintf list rayleigh
+syn keyword xmathFunc argn frac log rcepstrum
+syn keyword xmathFunc argv fracred log10 rcond
+syn keyword xmathFunc arma freq logm rdintegrate
+syn keyword xmathFunc arma2ss freqcircle lognormal read
+syn keyword xmathFunc armax freqcont logspace real
+syn keyword xmathFunc ascii frequencyhop lowpass rectify
+syn keyword xmathFunc asin fsesti lpopt redschur
+syn keyword xmathFunc asinh fslqgcomp lqgcomp reflect
+syn keyword xmathFunc atan fsregu lqgltr regulator
+syn keyword xmathFunc atan2 fwls ls residue
+syn keyword xmathFunc atanh gabor ls2unc riccati
+syn keyword xmathFunc attach_ac100 garb ls2var riccati_eig
+syn keyword xmathFunc backdiff gaussian lsjoin riccati_schur
+syn keyword xmathFunc balance gcexp lu ricean
+syn keyword xmathFunc balmoore gcos lyapunov rifd
+syn keyword xmathFunc bandpass gdfileselection makecontinuous rlinfo
+syn keyword xmathFunc bandstop gdmessage makematrix rlocus
+syn keyword xmathFunc bj gdselection makepoly rms
+syn keyword xmathFunc blknorm genconv margin rootlocus
+syn keyword xmathFunc bode get markoff roots
+syn keyword xmathFunc bpm get_info30 matchedpz round
+syn keyword xmathFunc bpm2inn get_inn max rref
+syn keyword xmathFunc bpmjoin gfdm maxlike rve_get
+syn keyword xmathFunc bpmsplit gfsk mean rve_info
+syn keyword xmathFunc bst gfskernel mergeseg rve_reset
+syn keyword xmathFunc buttconstr gfunction min rve_update
+syn keyword xmathFunc butterworth ggauss minimal samplehold
+syn keyword xmathFunc cancel giv mkpert schur
+syn keyword xmathFunc canform giv2var mkphase sdf
+syn keyword xmathFunc ccepstrum givjoin mma sds
+syn keyword xmathFunc char gpsk mmaget sdtrsp
+syn keyword xmathFunc chebconstr gpulse mmaput sec
+syn keyword xmathFunc chebyshev gqam mod sech
+syn keyword xmathFunc check gqpsk modal siginterp
+syn keyword xmathFunc cholesky gramp modalstate sign
+syn keyword xmathFunc chop gsawtooth modcarrier sim
+syn keyword xmathFunc circonv gsigmoid mreduce sim30
+syn keyword xmathFunc circorr gsin mtxplt simin
+syn keyword xmathFunc clock gsinc mu simin30
+syn keyword xmathFunc clocus gsqpsk mulhank simout
+syn keyword xmathFunc clsys gsquarewave multipath simout30
+syn keyword xmathFunc coherence gstep musynfit simtransform
+syn keyword xmathFunc colorind GuiDialogCreate mxstr2xmstr sin
+syn keyword xmathFunc combinepf GuiDialogDestroy mxstring2xmstring singriccati
+syn keyword xmathFunc commentof GuiFlush names sinh
+syn keyword xmathFunc compare GuiGetValue nichols sinm
+syn keyword xmathFunc complementaryerf GuiManage noisefilt size
+syn keyword xmathFunc complexenvelope GuiPlot none smargin
+syn keyword xmathFunc complexfreqshift GuiPlotGet norm sns2sys
+syn keyword xmathFunc concatseg GuiSetValue numden sort
+syn keyword xmathFunc condition GuiShellCreate nyquist spectrad
+syn keyword xmathFunc conj GuiShellDeiconify obscf spectrum
+syn keyword xmathFunc conmap GuiShellDestroy observable spline
+syn keyword xmathFunc connect GuiShellIconify oe sprintf
+syn keyword xmathFunc conpdm GuiShellLower ones sqrt
+syn keyword xmathFunc constellation GuiShellRaise ophank sqrtm
+syn keyword xmathFunc consys GuiShellRealize optimize sresidualize
+syn keyword xmathFunc controllable GuiShellUnrealize optscale ss2arma
+syn keyword xmathFunc convolve GuiTimer orderfilt sst
+syn keyword xmathFunc correlate GuiToolCreate orderstate ssv
+syn keyword xmathFunc cos GuiToolDestroy orth stable
+syn keyword xmathFunc cosh GuiToolExist oscmd stair
+syn keyword xmathFunc cosm GuiUnmanage oscope starp
+syn keyword xmathFunc cot GuiWidgetExist osscale step
+syn keyword xmathFunc coth h2norm padcrop stepinvar
+syn keyword xmathFunc covariance h2syn partialsum string
+syn keyword xmathFunc csc hadamard pdm stringex
+syn keyword xmathFunc csch hankelsv pdmslice substr
+syn keyword xmathFunc csum hessenberg pem subsys
+syn keyword xmathFunc ctrcf highpass perfplots sum
+syn keyword xmathFunc ctrlplot hilbert period svd
+syn keyword xmathFunc daug hilberttransform pfscale svplot
+syn keyword xmathFunc dbtolin hinfcontr phaseshift sweep
+syn keyword xmathFunc dct hinfnorm pinv symbolmap
+syn keyword xmathFunc decimate hinfsyn plot sys2sns
+syn keyword xmathFunc defFreqRange histogram plot30 sysic
+syn keyword xmathFunc defTimeRange idfreq pmdemod Sysid
+syn keyword xmathFunc delay idimpulse poisson system
+syn keyword xmathFunc delsubstr idsim poissonimpulse tan
+syn keyword xmathFunc det ifft poleplace tanh
+syn keyword xmathFunc detrend imag poles taper
+syn keyword xmathFunc dht impinvar polezero tfid
+syn keyword xmathFunc diagonal impplot poltrend toeplitz
+syn keyword xmathFunc differentiate impulse polyfit trace
+syn keyword xmathFunc directsequence index polynomial tril
+syn keyword xmathFunc discretize indexlist polyval trim
+syn keyword xmathFunc divide initial polyvalm trim30
+syn keyword xmathFunc domain initmodel prbs triu
+syn keyword xmathFunc dst initx0 product trsp
+syn keyword xmathFunc eig inn2bpm psd truncate
+syn keyword xmathFunc ellipconstr inn2pe put_inn tustin
+syn keyword xmathFunc elliptic inn2unc qpopt uniform
+syn keyword xmathFunc erf insertseg qr val
+syn keyword xmathFunc error int quantize variance
+syn keyword xmathFunc estimator integrate queryblock videolines
+syn keyword xmathFunc etfe integratedump queryblockoptions wcbode
+syn keyword xmathFunc exist interp querybubble wcgain
+syn keyword xmathFunc exp interpolate querybubbleoptionswindow
+syn keyword xmathFunc expm inv querycatalog wtbalance
+syn keyword xmathFunc extractchan invhilbert queryconnection zeros
+syn keyword xmathFunc extractseg iqmix querystd
+
+syn case match
+
+" Labels (supports xmath's goto)
+syn match xmathLabel "^\s*<[a-zA-Z_][a-zA-Z0-9]*>"
+
+" String and Character constants
+" Highlight special characters (those which have a backslash) differently
+syn match xmathSpecial contained "\\\d\d\d\|\\."
+syn region xmathString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=xmathSpecial
+syn match xmathCharacter "'[^\\]'"
+syn match xmathSpecialChar "'\\.'"
+
+syn match xmathNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
+
+" Comments:
+" xmath supports #... (like Unix shells)
+" and #{ ... }# comment blocks
+syn keyword xmathTodo contained TODO Todo DEBUG
+syn match xmathComment "#.*$" contains=xmathString,xmathTodo,@Spell
+syn region xmathCommentBlock start="#{" end="}#" contains=xmathString,xmathTodo
+
+" synchronizing
+syn sync match xmathSyncComment grouphere xmathCommentBlock "#{"
+syn sync match xmathSyncComment groupthere NONE "}#"
+
+" 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_xmath_syntax_inits")
+ if version < 508
+ let did_xmath_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink xmathBraceError xmathError
+ HiLink xmathCmd xmathStatement
+ HiLink xmathCommentBlock xmathComment
+ HiLink xmathCurlyError xmathError
+ HiLink xmathFuncCmd xmathStatement
+ HiLink xmathParenError xmathError
+
+ " The default methods for highlighting. Can be overridden later
+ HiLink xmathCharacter Character
+ HiLink xmathComma Delimiter
+ HiLink xmathComment Comment
+ HiLink xmathCommentBlock Comment
+ HiLink xmathConditional Conditional
+ HiLink xmathError Error
+ HiLink xmathFunc Function
+ HiLink xmathLabel PreProc
+ HiLink xmathNumber Number
+ HiLink xmathRepeat Repeat
+ HiLink xmathSpecial Type
+ HiLink xmathSpecialChar SpecialChar
+ HiLink xmathStatement Statement
+ HiLink xmathString String
+ HiLink xmathTodo Todo
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xmath"
+
+" vim: ts=17
diff --git a/runtime/syntax/xml.vim b/runtime/syntax/xml.vim
new file mode 100644
index 000000000..af6c626cf
--- /dev/null
+++ b/runtime/syntax/xml.vim
@@ -0,0 +1,344 @@
+" Vim syntax file
+" Language: XML
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Author and previous maintainer:
+" Paul Siegmann <pauls@euronet.nl>
+" Last Change: Fri, 04 Jun 2004 10:41:54 CEST
+" Filenames: *.xml
+" $Id$
+
+" CONFIGURATION:
+" syntax folding can be turned on by
+"
+" let g:xml_syntax_folding = 1
+"
+" before the syntax file gets loaded (e.g. in ~/.vimrc).
+" This might slow down syntax highlighting significantly,
+" especially for large files.
+"
+" CREDITS:
+" The original version was derived by Paul Siegmann from
+" Claudio Fleiner's html.vim.
+"
+" REFERENCES:
+" [1] http://www.w3.org/TR/2000/REC-xml-20001006
+" [2] http://www.w3.org/XML/1998/06/xmlspec-report-19980910.htm
+"
+" as <hirauchi@kiwi.ne.jp> pointed out according to reference [1]
+"
+" 2.3 Common Syntactic Constructs
+" [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
+" [5] Name ::= (Letter | '_' | ':') (NameChar)*
+"
+" NOTE:
+" 1) empty tag delimiters "/>" inside attribute values (strings)
+" confuse syntax highlighting.
+" 2) for large files, folding can be pretty slow, especially when
+" loading a file the first time and viewoptions contains 'folds'
+" so that folds of previous sessions are applied.
+" Don't use 'foldmethod=syntax' in this case.
+
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:xml_cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+" mark illegal characters
+syn match xmlError "[<&]"
+
+" strings (inside tags) aka VALUES
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^^^^^
+syn region xmlString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=xmlEntity display
+syn region xmlString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=xmlEntity display
+
+
+" punctuation (within attributes) e.g. <tag xml:foo.attribute ...>
+" ^ ^
+" syn match xmlAttribPunct +[-:._]+ contained display
+syn match xmlAttribPunct +[:.]+ contained display
+
+" no highlighting for xmlEqual (xmlEqual has no highlighting group)
+syn match xmlEqual +=+ display
+
+
+" attribute, everything before the '='
+"
+" PROVIDES: @xmlAttribHook
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^^^^^^^^^^^
+"
+syn match xmlAttrib
+ \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
+ \ contained
+ \ contains=xmlAttribPunct,@xmlAttribHook
+ \ display
+
+
+" namespace spec
+"
+" PROVIDES: @xmlNamespaceHook
+"
+" EXAMPLE:
+"
+" <xsl:for-each select = "lola">
+" ^^^
+"
+if exists("g:xml_namespace_transparent")
+syn match xmlNamespace
+ \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+ \ contained
+ \ contains=@xmlNamespaceHook
+ \ transparent
+ \ display
+else
+syn match xmlNamespace
+ \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+ \ contained
+ \ contains=@xmlNamespaceHook
+ \ display
+endif
+
+
+" tag name
+"
+" PROVIDES: @xmlTagHook
+"
+" EXAMPLE:
+"
+" <tag foo.attribute = "value">
+" ^^^
+"
+syn match xmlTagName
+ \ +[<]\@<=[^ /!?<>"']\++
+ \ contained
+ \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
+ \ display
+
+
+if exists('g:xml_syntax_folding')
+
+ " start tag
+ " use matchgroup=xmlTag to skip over the leading '<'
+ "
+ " PROVIDES: @xmlStartTagHook
+ "
+ " EXAMPLE:
+ "
+ " <tag id="whoops">
+ " s^^^^^^^^^^^^^^^e
+ "
+ syn region xmlTag
+ \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+
+ \ matchgroup=xmlTag end=+>+
+ \ contained
+ \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook
+
+
+ " highlight the end tag
+ "
+ " PROVIDES: @xmlTagHook
+ " (should we provide a separate @xmlEndTagHook ?)
+ "
+ " EXAMPLE:
+ "
+ " </tag>
+ " ^^^^^^
+ "
+ syn match xmlEndTag
+ \ +</[^ /!?<>"']\+>+
+ \ contained
+ \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
+
+
+ " tag elements with syntax-folding.
+ " NOTE: NO HIGHLIGHTING -- highlighting is done by contained elements
+ "
+ " PROVIDES: @xmlRegionHook
+ "
+ " EXAMPLE:
+ "
+ " <tag id="whoops">
+ " <!-- comment -->
+ " <another.tag></another.tag>
+ " <empty.tag/>
+ " some data
+ " </tag>
+ "
+ syn region xmlRegion
+ \ start=+<\z([^ /!?<>"']\+\)+
+ \ skip=+<!--\_.\{-}-->+
+ \ end=+</\z1\_\s\{-}>+
+ \ matchgroup=xmlEndTag end=+/>+
+ \ fold
+ \ contains=xmlTag,xmlEndTag,xmlCdata,xmlRegion,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook
+ \ keepend
+ \ extend
+
+else
+
+ " no syntax folding:
+ " - contained attribute removed
+ " - xmlRegion not defined
+ "
+ syn region xmlTag
+ \ matchgroup=xmlTag start=+<[^ /!?<>"']\@=+
+ \ matchgroup=xmlTag end=+>+
+ \ contains=xmlError,xmlTagName,xmlAttrib,xmlEqual,xmlString,@xmlStartTagHook
+
+ syn match xmlEndTag
+ \ +</[^ /!?<>"']\+>+
+ \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
+
+endif
+
+
+" &entities; compare with dtd
+syn match xmlEntity "&[^; \t]*;" contains=xmlEntityPunct
+syn match xmlEntityPunct contained "[&.;]"
+
+if exists('g:xml_syntax_folding')
+
+ " The real comments (this implements the comments as defined by xml,
+ " but not all xml pages actually conform to it. Errors are flagged.
+ syn region xmlComment
+ \ start=+<!+
+ \ end=+>+
+ \ contains=xmlCommentPart,xmlCommentError
+ \ extend
+ \ fold
+
+else
+
+ " no syntax folding:
+ " - fold attribute removed
+ "
+ syn region xmlComment
+ \ start=+<!+
+ \ end=+>+
+ \ contains=xmlCommentPart,xmlCommentError
+ \ extend
+
+endif
+
+syn keyword xmlTodo contained TODO FIXME XXX display
+syn match xmlCommentError contained "[^><!]"
+syn region xmlCommentPart
+ \ start=+--+
+ \ end=+--+
+ \ contained
+ \ contains=xmlTodo,@xmlCommentHook
+
+
+" CData sections
+"
+" PROVIDES: @xmlCdataHook
+"
+syn region xmlCdata
+ \ start=+<!\[CDATA\[+
+ \ end=+]]>+
+ \ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook
+ \ keepend
+ \ extend
+
+" using the following line instead leads to corrupt folding at CDATA regions
+" syn match xmlCdata +<!\[CDATA\[\_.\{-}]]>+ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook
+syn match xmlCdataStart +<!\[CDATA\[+ contained contains=xmlCdataCdata
+syn keyword xmlCdataCdata CDATA contained
+syn match xmlCdataEnd +]]>+ contained
+
+
+" Processing instructions
+" This allows "?>" inside strings -- good idea?
+syn region xmlProcessing matchgroup=xmlProcessingDelim start="<?" end="?>" contains=xmlAttrib,xmlEqual,xmlString
+
+
+if exists('g:xml_syntax_folding')
+
+ " DTD -- we use dtd.vim here
+ syn region xmlDocType matchgroup=xmlDocTypeDecl
+ \ start="<!DOCTYPE"he=s+2,rs=s+2 end=">"
+ \ fold
+ \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString
+else
+
+ " no syntax folding:
+ " - fold attribute removed
+ "
+ syn region xmlDocType matchgroup=xmlDocTypeDecl
+ \ start="<!DOCTYPE"he=s+2,rs=s+2 end=">"
+ \ contains=xmlDocTypeKeyword,xmlInlineDTD,xmlString
+
+endif
+
+syn keyword xmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM
+syn region xmlInlineDTD contained matchgroup=xmlDocTypeDecl start="\[" end="]" contains=@xmlDTD
+syn include @xmlDTD <sfile>:p:h/dtd.vim
+unlet b:current_syntax
+
+
+" synchronizing
+" TODO !!! to be improved !!!
+
+syn sync match xmlSyncDT grouphere xmlDocType +\_.\(<!DOCTYPE\)\@=+
+" syn sync match xmlSyncDT groupthere NONE +]>+
+
+if exists('g:xml_syntax_folding')
+ syn sync match xmlSync grouphere xmlRegion +\_.\(<[^ /!?<>"']\+\)\@=+
+ " syn sync match xmlSync grouphere xmlRegion "<[^ /!?<>"']*>"
+ syn sync match xmlSync groupthere xmlRegion +</[^ /!?<>"']\+>+
+endif
+
+syn sync minlines=100
+
+
+" The default highlighting.
+hi def link xmlTodo Todo
+hi def link xmlTag Function
+hi def link xmlTagName Function
+hi def link xmlEndTag Identifier
+if !exists("g:xml_namespace_transparent")
+ hi def link xmlNamespace Tag
+endif
+hi def link xmlEntity Statement
+hi def link xmlEntityPunct Type
+
+hi def link xmlAttribPunct Comment
+hi def link xmlAttrib Type
+
+hi def link xmlString String
+hi def link xmlComment Comment
+hi def link xmlCommentPart Comment
+hi def link xmlCommentError Error
+hi def link xmlError Error
+
+hi def link xmlProcessingDelim Comment
+hi def link xmlProcessing Type
+
+hi def link xmlCdata String
+hi def link xmlCdataCdata Statement
+hi def link xmlCdataStart Type
+hi def link xmlCdataEnd Type
+
+hi def link xmlDocTypeDecl Function
+hi def link xmlDocTypeKeyword Statement
+hi def link xmlInlineDTD Function
+
+let b:current_syntax = "xml"
+
+let &cpo = s:xml_cpo_save
+unlet s:xml_cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/xmodmap.vim b/runtime/syntax/xmodmap.vim
new file mode 100644
index 000000000..77218845c
--- /dev/null
+++ b/runtime/syntax/xmodmap.vim
@@ -0,0 +1,172 @@
+" Vim syntax file
+" Language: xmodmap definition file
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/xmodmap/
+" Latest Revision: 2004-05-22
+" arch-tag: 8c37ed41-655a-479d-8050-e15dc6770338
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" comments
+syn region xmodmapComment display oneline matchgroup=xmodmapComment start=/^!/ end=/$/ contains=xmodmapTodo
+
+" todo
+syn keyword xmodmapTodo contained TODO FIXME XXX NOTE
+
+" numbers
+syn case ignore
+syn match xmodmapInt display "\<\d\+\>"
+syn match xmodmapHex display "\<0x\x\+\>"
+syn match xmodmapOctal display "\<0\o\+\>"
+syn match xmodmapOctalError display "\<0\o*[89]\d*"
+syn case match
+
+" keysyms (taken from <X11/keysymdef.h>)
+syn keyword xmodmapKeySym VoidSymbol BackSpace Tab Linefeed Clear Return Pause Scroll_Lock Sys_Req Escape Delete Multi_key Codeinput SingleCandidate MultipleCandidate
+syn keyword xmodmapKeySym PreviousCandidate Kanji Muhenkan Henkan_Mode Henkan Romaji Hiragana Katakana Hiragana_Katakana Zenkaku Hankaku Zenkaku_Hankaku Touroku Massyo Kana_Lock
+syn keyword xmodmapKeySym Kana_Shift Eisu_Shift Eisu_toggle Kanji_Bangou Zen_Koho Mae_Koho Home Left Up Right Down Prior Page_Up Next Page_Down
+syn keyword xmodmapKeySym End Begin Select Print Execute Insert Undo Redo Menu Find Cancel Help Break Mode_switch script_switch
+syn keyword xmodmapKeySym Num_Lock KP_Space KP_Tab KP_Enter KP_F1 KP_F2 KP_F3 KP_F4 KP_Home KP_Left KP_Up KP_Right KP_Down KP_Prior KP_Page_Up
+syn keyword xmodmapKeySym KP_Next KP_Page_Down KP_End KP_Begin KP_Insert KP_Delete KP_Equal KP_Multiply KP_Add KP_Separator KP_Subtract KP_Decimal KP_Divide KP_0 KP_1
+syn keyword xmodmapKeySym KP_2 KP_3 KP_4 KP_5 KP_6 KP_7 KP_8 KP_9 F1 F2 F3 F4 F5 F6 F7
+syn keyword xmodmapKeySym F8 F9 F10 F11 L1 F12 L2 F13 L3 F14 L4 F15 L5 F16 L6
+syn keyword xmodmapKeySym F17 L7 F18 L8 F19 L9 F20 L10 F21 R1 F22 R2 F23 R3 F24
+syn keyword xmodmapKeySym R4 F25 R5 F26 R6 F27 R7 F28 R8 F29 R9 F30 R10 F31 R11
+syn keyword xmodmapKeySym F32 R12 F33 R13 F34 R14 F35 R15 Shift_L Shift_R Control_L Control_R Caps_Lock Shift_Lock Meta_L
+syn keyword xmodmapKeySym Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Lock ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Group_Shift ISO_Group_Latch ISO_Group_Lock
+syn keyword xmodmapKeySym ISO_Next_Group ISO_Next_Group_Lock ISO_Prev_Group ISO_Prev_Group_Lock ISO_First_Group ISO_First_Group_Lock ISO_Last_Group ISO_Last_Group_Lock ISO_Left_Tab ISO_Move_Line_Up ISO_Move_Line_Down ISO_Partial_Line_Up ISO_Partial_Line_Down ISO_Partial_Space_Left ISO_Partial_Space_Right
+syn keyword xmodmapKeySym ISO_Set_Margin_Left ISO_Set_Margin_Right ISO_Release_Margin_Left ISO_Release_Margin_Right ISO_Release_Both_Margins ISO_Fast_Cursor_Left ISO_Fast_Cursor_Right ISO_Fast_Cursor_Up ISO_Fast_Cursor_Down ISO_Continuous_Underline ISO_Discontinuous_Underline ISO_Emphasize ISO_Center_Object ISO_Enter dead_grave
+syn keyword xmodmapKeySym dead_acute dead_circumflex dead_tilde dead_macron dead_breve dead_abovedot dead_diaeresis dead_abovering dead_doubleacute dead_caron dead_cedilla dead_ogonek dead_iota dead_voiced_sound dead_semivoiced_sound
+syn keyword xmodmapKeySym dead_belowdot dead_hook dead_horn First_Virtual_Screen Prev_Virtual_Screen Next_Virtual_Screen Last_Virtual_Screen Terminate_Server AccessX_Enable AccessX_Feedback_Enable RepeatKeys_Enable SlowKeys_Enable BounceKeys_Enable StickyKeys_Enable MouseKeys_Enable
+syn keyword xmodmapKeySym MouseKeys_Accel_Enable Overlay1_Enable Overlay2_Enable AudibleBell_Enable Pointer_Left Pointer_Right Pointer_Up Pointer_Down Pointer_UpLeft Pointer_UpRight Pointer_DownLeft Pointer_DownRight Pointer_Button_Dflt Pointer_Button1 Pointer_Button2
+syn keyword xmodmapKeySym Pointer_Button3 Pointer_Button4 Pointer_Button5 Pointer_DblClick_Dflt Pointer_DblClick1 Pointer_DblClick2 Pointer_DblClick3 Pointer_DblClick4 Pointer_DblClick5 Pointer_Drag_Dflt Pointer_Drag1 Pointer_Drag2 Pointer_Drag3 Pointer_Drag4 Pointer_Drag5
+syn keyword xmodmapKeySym Pointer_EnableKeys Pointer_Accelerate Pointer_DfltBtnNext Pointer_DfltBtnPrev 3270_Duplicate 3270_FieldMark 3270_Right2 3270_Left2 3270_BackTab 3270_EraseEOF 3270_EraseInput 3270_Reset 3270_Quit 3270_PA1 3270_PA2
+syn keyword xmodmapKeySym 3270_PA3 3270_Test 3270_Attn 3270_CursorBlink 3270_AltCursor 3270_KeyClick 3270_Jump 3270_Ident 3270_Rule 3270_Copy 3270_Play 3270_Setup 3270_Record 3270_ChangeScreen 3270_DeleteWord
+syn keyword xmodmapKeySym 3270_ExSelect 3270_CursorSelect 3270_PrintScreen 3270_Enter space exclam quotedbl numbersign dollar percent ampersand apostrophe quoteright parenleft parenright
+syn keyword xmodmapKeySym asterisk plus comma minus period slash 0 1 2 3 4 5 6 7 8
+syn keyword xmodmapKeySym 9 colon semicolon less equal greater question at A B C D E F G
+syn keyword xmodmapKeySym H I J K L M N O P Q R S T U V
+syn keyword xmodmapKeySym W X Y Z bracketleft backslash bracketright asciicircum underscore grave quoteleft a b c d
+syn keyword xmodmapKeySym e f g h i j k l m n o p q r s
+syn keyword xmodmapKeySym t u v w x y z braceleft bar braceright asciitilde nobreakspace exclamdown cent sterling
+syn keyword xmodmapKeySym currency yen brokenbar section diaeresis copyright ordfeminine guillemotleft notsign hyphen registered macron degree plusminus twosuperior
+syn keyword xmodmapKeySym threesuperior acute mu paragraph periodcentered cedilla onesuperior masculine guillemotright onequarter onehalf threequarters questiondown Agrave Aacute
+syn keyword xmodmapKeySym Acircumflex Atilde Adiaeresis Aring AE Ccedilla Egrave Eacute Ecircumflex Ediaeresis Igrave Iacute Icircumflex Idiaeresis ETH
+syn keyword xmodmapKeySym Eth Ntilde Ograve Oacute Ocircumflex Otilde Odiaeresis multiply Ooblique Oslash Ugrave Uacute Ucircumflex Udiaeresis Yacute
+syn keyword xmodmapKeySym THORN Thorn ssharp agrave aacute acircumflex atilde adiaeresis aring ae ccedilla egrave eacute ecircumflex ediaeresis
+syn keyword xmodmapKeySym igrave iacute icircumflex idiaeresis eth ntilde ograve oacute ocircumflex otilde odiaeresis division oslash ooblique ugrave
+syn keyword xmodmapKeySym uacute ucircumflex udiaeresis yacute thorn ydiaeresis Aogonek breve Lstroke Lcaron Sacute Scaron Scedilla Tcaron Zacute
+syn keyword xmodmapKeySym Zcaron Zabovedot aogonek ogonek lstroke lcaron sacute caron scaron scedilla tcaron zacute doubleacute zcaron zabovedot
+syn keyword xmodmapKeySym Racute Abreve Lacute Cacute Ccaron Eogonek Ecaron Dcaron Dstroke Nacute Ncaron Odoubleacute Rcaron Uring Udoubleacute
+syn keyword xmodmapKeySym Tcedilla racute abreve lacute cacute ccaron eogonek ecaron dcaron dstroke nacute ncaron odoubleacute udoubleacute rcaron
+syn keyword xmodmapKeySym uring tcedilla abovedot Hstroke Hcircumflex Iabovedot Gbreve Jcircumflex hstroke hcircumflex idotless gbreve jcircumflex Cabovedot Ccircumflex
+syn keyword xmodmapKeySym Gabovedot Gcircumflex Ubreve Scircumflex cabovedot ccircumflex gabovedot gcircumflex ubreve scircumflex kra kappa Rcedilla Itilde Lcedilla
+syn keyword xmodmapKeySym Emacron Gcedilla Tslash rcedilla itilde lcedilla emacron gcedilla tslash ENG eng Amacron Iogonek Eabovedot Imacron
+syn keyword xmodmapKeySym Ncedilla Omacron Kcedilla Uogonek Utilde Umacron amacron iogonek eabovedot imacron ncedilla omacron kcedilla uogonek utilde
+syn keyword xmodmapKeySym umacron Babovedot babovedot Dabovedot Wgrave Wacute dabovedot Ygrave Fabovedot fabovedot Mabovedot mabovedot Pabovedot wgrave pabovedot
+syn keyword xmodmapKeySym wacute Sabovedot ygrave Wdiaeresis wdiaeresis sabovedot Wcircumflex Tabovedot Ycircumflex wcircumflex tabovedot ycircumflex OE oe Ydiaeresis
+syn keyword xmodmapKeySym overline kana_fullstop kana_openingbracket kana_closingbracket kana_comma kana_conjunctive kana_middledot kana_WO kana_a kana_i kana_u kana_e kana_o kana_ya kana_yu
+syn keyword xmodmapKeySym kana_yo kana_tsu kana_tu prolongedsound kana_A kana_I kana_U kana_E kana_O kana_KA kana_KI kana_KU kana_KE kana_KO kana_SA
+syn keyword xmodmapKeySym kana_SHI kana_SU kana_SE kana_SO kana_TA kana_CHI kana_TI kana_TSU kana_TU kana_TE kana_TO kana_NA kana_NI kana_NU kana_NE
+syn keyword xmodmapKeySym kana_NO kana_HA kana_HI kana_FU kana_HU kana_HE kana_HO kana_MA kana_MI kana_MU kana_ME kana_MO kana_YA kana_YU kana_YO
+syn keyword xmodmapKeySym kana_RA kana_RI kana_RU kana_RE kana_RO kana_WA kana_N voicedsound semivoicedsound kana_switch Farsi_0 Farsi_1 Farsi_2 Farsi_3 Farsi_4
+syn keyword xmodmapKeySym Farsi_5 Farsi_6 Farsi_7 Farsi_8 Farsi_9 Arabic_percent Arabic_superscript_alef Arabic_tteh Arabic_peh Arabic_tcheh Arabic_ddal Arabic_rreh Arabic_comma Arabic_fullstop Arabic_0
+syn keyword xmodmapKeySym Arabic_1 Arabic_2 Arabic_3 Arabic_4 Arabic_5 Arabic_6 Arabic_7 Arabic_8 Arabic_9 Arabic_semicolon Arabic_question_mark Arabic_hamza Arabic_maddaonalef Arabic_hamzaonalef Arabic_hamzaonwaw
+syn keyword xmodmapKeySym Arabic_hamzaunderalef Arabic_hamzaonyeh Arabic_alef Arabic_beh Arabic_tehmarbuta Arabic_teh Arabic_theh Arabic_jeem Arabic_hah Arabic_khah Arabic_dal Arabic_thal Arabic_ra Arabic_zain Arabic_seen
+syn keyword xmodmapKeySym Arabic_sheen Arabic_sad Arabic_dad Arabic_tah Arabic_zah Arabic_ain Arabic_ghain Arabic_tatweel Arabic_feh Arabic_qaf Arabic_kaf Arabic_lam Arabic_meem Arabic_noon Arabic_ha
+syn keyword xmodmapKeySym Arabic_heh Arabic_waw Arabic_alefmaksura Arabic_yeh Arabic_fathatan Arabic_dammatan Arabic_kasratan Arabic_fatha Arabic_damma Arabic_kasra Arabic_shadda Arabic_sukun Arabic_madda_above Arabic_hamza_above Arabic_hamza_below
+syn keyword xmodmapKeySym Arabic_jeh Arabic_veh Arabic_keheh Arabic_gaf Arabic_noon_ghunna Arabic_heh_doachashmee Farsi_yeh Arabic_farsi_yeh Arabic_yeh_baree Arabic_heh_goal Arabic_switch Cyrillic_GHE_bar Cyrillic_ghe_bar Cyrillic_ZHE_descender Cyrillic_zhe_descender
+syn keyword xmodmapKeySym Cyrillic_KA_descender Cyrillic_ka_descender Cyrillic_KA_vertstroke Cyrillic_ka_vertstroke Cyrillic_EN_descender Cyrillic_en_descender Cyrillic_U_straight Cyrillic_u_straight Cyrillic_U_straight_bar Cyrillic_u_straight_bar Cyrillic_HA_descender Cyrillic_ha_descender Cyrillic_CHE_descender Cyrillic_che_descender Cyrillic_CHE_vertstroke
+syn keyword xmodmapKeySym Cyrillic_che_vertstroke Cyrillic_SHHA Cyrillic_shha Cyrillic_SCHWA Cyrillic_schwa Cyrillic_I_macron Cyrillic_i_macron Cyrillic_O_bar Cyrillic_o_bar Cyrillic_U_macron Cyrillic_u_macron Serbian_dje Macedonia_gje Cyrillic_io Ukrainian_ie
+syn keyword xmodmapKeySym Ukranian_je Macedonia_dse Ukrainian_i Ukranian_i Ukrainian_yi Ukranian_yi Cyrillic_je Serbian_je Cyrillic_lje Serbian_lje Cyrillic_nje Serbian_nje Serbian_tshe Macedonia_kje Ukrainian_ghe_with_upturn
+syn keyword xmodmapKeySym Byelorussian_shortu Cyrillic_dzhe Serbian_dze numerosign Serbian_DJE Macedonia_GJE Cyrillic_IO Ukrainian_IE Ukranian_JE Macedonia_DSE Ukrainian_I Ukranian_I Ukrainian_YI Ukranian_YI Cyrillic_JE
+syn keyword xmodmapKeySym Serbian_JE Cyrillic_LJE Serbian_LJE Cyrillic_NJE Serbian_NJE Serbian_TSHE Macedonia_KJE Ukrainian_GHE_WITH_UPTURN Byelorussian_SHORTU Cyrillic_DZHE Serbian_DZE Cyrillic_yu Cyrillic_a Cyrillic_be Cyrillic_tse
+syn keyword xmodmapKeySym Cyrillic_de Cyrillic_ie Cyrillic_ef Cyrillic_ghe Cyrillic_ha Cyrillic_i Cyrillic_shorti Cyrillic_ka Cyrillic_el Cyrillic_em Cyrillic_en Cyrillic_o Cyrillic_pe Cyrillic_ya Cyrillic_er
+syn keyword xmodmapKeySym Cyrillic_es Cyrillic_te Cyrillic_u Cyrillic_zhe Cyrillic_ve Cyrillic_softsign Cyrillic_yeru Cyrillic_ze Cyrillic_sha Cyrillic_e Cyrillic_shcha Cyrillic_che Cyrillic_hardsign Cyrillic_YU Cyrillic_A
+syn keyword xmodmapKeySym Cyrillic_BE Cyrillic_TSE Cyrillic_DE Cyrillic_IE Cyrillic_EF Cyrillic_GHE Cyrillic_HA Cyrillic_I Cyrillic_SHORTI Cyrillic_KA Cyrillic_EL Cyrillic_EM Cyrillic_EN Cyrillic_O Cyrillic_PE
+syn keyword xmodmapKeySym Cyrillic_YA Cyrillic_ER Cyrillic_ES Cyrillic_TE Cyrillic_U Cyrillic_ZHE Cyrillic_VE Cyrillic_SOFTSIGN Cyrillic_YERU Cyrillic_ZE Cyrillic_SHA Cyrillic_E Cyrillic_SHCHA Cyrillic_CHE Cyrillic_HARDSIGN
+syn keyword xmodmapKeySym Greek_ALPHAaccent Greek_EPSILONaccent Greek_ETAaccent Greek_IOTAaccent Greek_IOTAdieresis Greek_IOTAdiaeresis Greek_OMICRONaccent Greek_UPSILONaccent Greek_UPSILONdieresis Greek_OMEGAaccent Greek_accentdieresis Greek_horizbar Greek_alphaaccent Greek_epsilonaccent Greek_etaaccent
+syn keyword xmodmapKeySym Greek_iotaaccent Greek_iotadieresis Greek_iotaaccentdieresis Greek_omicronaccent Greek_upsilonaccent Greek_upsilondieresis Greek_upsilonaccentdieresis Greek_omegaaccent Greek_ALPHA Greek_BETA Greek_GAMMA Greek_DELTA Greek_EPSILON Greek_ZETA Greek_ETA
+syn keyword xmodmapKeySym Greek_THETA Greek_IOTA Greek_KAPPA Greek_LAMDA Greek_LAMBDA Greek_MU Greek_NU Greek_XI Greek_OMICRON Greek_PI Greek_RHO Greek_SIGMA Greek_TAU Greek_UPSILON Greek_PHI
+syn keyword xmodmapKeySym Greek_CHI Greek_PSI Greek_OMEGA Greek_alpha Greek_beta Greek_gamma Greek_delta Greek_epsilon Greek_zeta Greek_eta Greek_theta Greek_iota Greek_kappa Greek_lamda Greek_lambda
+syn keyword xmodmapKeySym Greek_mu Greek_nu Greek_xi Greek_omicron Greek_pi Greek_rho Greek_sigma Greek_finalsmallsigma Greek_tau Greek_upsilon Greek_phi Greek_chi Greek_psi Greek_omega Greek_switch
+syn keyword xmodmapKeySym leftradical topleftradical horizconnector topintegral botintegral vertconnector topleftsqbracket botleftsqbracket toprightsqbracket botrightsqbracket topleftparens botleftparens toprightparens botrightparens leftmiddlecurlybrace
+syn keyword xmodmapKeySym rightmiddlecurlybrace topleftsummation botleftsummation topvertsummationconnector botvertsummationconnector toprightsummation botrightsummation rightmiddlesummation lessthanequal notequal greaterthanequal integral therefore variation infinity
+syn keyword xmodmapKeySym nabla approximate similarequal ifonlyif implies identical radical includedin includes intersection union logicaland logicalor partialderivative function
+syn keyword xmodmapKeySym leftarrow uparrow rightarrow downarrow blank soliddiamond checkerboard ht ff cr lf nl vt lowrightcorner uprightcorner
+syn keyword xmodmapKeySym upleftcorner lowleftcorner crossinglines horizlinescan1 horizlinescan3 horizlinescan5 horizlinescan7 horizlinescan9 leftt rightt bott topt vertbar emspace enspace
+syn keyword xmodmapKeySym em3space em4space digitspace punctspace thinspace hairspace emdash endash signifblank ellipsis doubbaselinedot onethird twothirds onefifth twofifths
+syn keyword xmodmapKeySym threefifths fourfifths onesixth fivesixths careof figdash leftanglebracket decimalpoint rightanglebracket marker oneeighth threeeighths fiveeighths seveneighths trademark
+syn keyword xmodmapKeySym signaturemark trademarkincircle leftopentriangle rightopentriangle emopencircle emopenrectangle leftsinglequotemark rightsinglequotemark leftdoublequotemark rightdoublequotemark prescription minutes seconds latincross hexagram
+syn keyword xmodmapKeySym filledrectbullet filledlefttribullet filledrighttribullet emfilledcircle emfilledrect enopencircbullet enopensquarebullet openrectbullet opentribulletup opentribulletdown openstar enfilledcircbullet enfilledsqbullet filledtribulletup filledtribulletdown
+syn keyword xmodmapKeySym leftpointer rightpointer club diamond heart maltesecross dagger doubledagger checkmark ballotcross musicalsharp musicalflat malesymbol femalesymbol telephone
+syn keyword xmodmapKeySym telephonerecorder phonographcopyright caret singlelowquotemark doublelowquotemark cursor leftcaret rightcaret downcaret upcaret overbar downtack upshoe downstile underbar
+syn keyword xmodmapKeySym jot quad uptack circle upstile downshoe rightshoe leftshoe lefttack righttack hebrew_doublelowline hebrew_aleph hebrew_bet hebrew_beth hebrew_gimel
+syn keyword xmodmapKeySym hebrew_gimmel hebrew_dalet hebrew_daleth hebrew_he hebrew_waw hebrew_zain hebrew_zayin hebrew_chet hebrew_het hebrew_tet hebrew_teth hebrew_yod hebrew_finalkaph hebrew_kaph hebrew_lamed
+syn keyword xmodmapKeySym hebrew_finalmem hebrew_mem hebrew_finalnun hebrew_nun hebrew_samech hebrew_samekh hebrew_ayin hebrew_finalpe hebrew_pe hebrew_finalzade hebrew_finalzadi hebrew_zade hebrew_zadi hebrew_qoph hebrew_kuf
+syn keyword xmodmapKeySym hebrew_resh hebrew_shin hebrew_taw hebrew_taf Hebrew_switch Thai_kokai Thai_khokhai Thai_khokhuat Thai_khokhwai Thai_khokhon Thai_khorakhang Thai_ngongu Thai_chochan Thai_choching Thai_chochang
+syn keyword xmodmapKeySym Thai_soso Thai_chochoe Thai_yoying Thai_dochada Thai_topatak Thai_thothan Thai_thonangmontho Thai_thophuthao Thai_nonen Thai_dodek Thai_totao Thai_thothung Thai_thothahan Thai_thothong Thai_nonu
+syn keyword xmodmapKeySym Thai_bobaimai Thai_popla Thai_phophung Thai_fofa Thai_phophan Thai_fofan Thai_phosamphao Thai_moma Thai_yoyak Thai_rorua Thai_ru Thai_loling Thai_lu Thai_wowaen Thai_sosala
+syn keyword xmodmapKeySym Thai_sorusi Thai_sosua Thai_hohip Thai_lochula Thai_oang Thai_honokhuk Thai_paiyannoi Thai_saraa Thai_maihanakat Thai_saraaa Thai_saraam Thai_sarai Thai_saraii Thai_saraue Thai_sarauee
+syn keyword xmodmapKeySym Thai_sarau Thai_sarauu Thai_phinthu Thai_maihanakat_maitho Thai_baht Thai_sarae Thai_saraae Thai_sarao Thai_saraaimaimuan Thai_saraaimaimalai Thai_lakkhangyao Thai_maiyamok Thai_maitaikhu Thai_maiek Thai_maitho
+syn keyword xmodmapKeySym Thai_maitri Thai_maichattawa Thai_thanthakhat Thai_nikhahit Thai_leksun Thai_leknung Thai_leksong Thai_leksam Thai_leksi Thai_lekha Thai_lekhok Thai_lekchet Thai_lekpaet Thai_lekkao Hangul
+syn keyword xmodmapKeySym Hangul_Start Hangul_End Hangul_Hanja Hangul_Jamo Hangul_Romaja Hangul_Codeinput Hangul_Jeonja Hangul_Banja Hangul_PreHanja Hangul_PostHanja Hangul_SingleCandidate Hangul_MultipleCandidate Hangul_PreviousCandidate Hangul_Special Hangul_switch
+syn keyword xmodmapKeySym Hangul_Kiyeog Hangul_SsangKiyeog Hangul_KiyeogSios Hangul_Nieun Hangul_NieunJieuj Hangul_NieunHieuh Hangul_Dikeud Hangul_SsangDikeud Hangul_Rieul Hangul_RieulKiyeog Hangul_RieulMieum Hangul_RieulPieub Hangul_RieulSios Hangul_RieulTieut Hangul_RieulPhieuf
+syn keyword xmodmapKeySym Hangul_RieulHieuh Hangul_Mieum Hangul_Pieub Hangul_SsangPieub Hangul_PieubSios Hangul_Sios Hangul_SsangSios Hangul_Ieung Hangul_Jieuj Hangul_SsangJieuj Hangul_Cieuc Hangul_Khieuq Hangul_Tieut Hangul_Phieuf Hangul_Hieuh
+syn keyword xmodmapKeySym Hangul_A Hangul_AE Hangul_YA Hangul_YAE Hangul_EO Hangul_E Hangul_YEO Hangul_YE Hangul_O Hangul_WA Hangul_WAE Hangul_OE Hangul_YO Hangul_U Hangul_WEO
+syn keyword xmodmapKeySym Hangul_WE Hangul_WI Hangul_YU Hangul_EU Hangul_YI Hangul_I Hangul_J_Kiyeog Hangul_J_SsangKiyeog Hangul_J_KiyeogSios Hangul_J_Nieun Hangul_J_NieunJieuj Hangul_J_NieunHieuh Hangul_J_Dikeud Hangul_J_Rieul Hangul_J_RieulKiyeog
+syn keyword xmodmapKeySym Hangul_J_RieulMieum Hangul_J_RieulPieub Hangul_J_RieulSios Hangul_J_RieulTieut Hangul_J_RieulPhieuf Hangul_J_RieulHieuh Hangul_J_Mieum Hangul_J_Pieub Hangul_J_PieubSios Hangul_J_Sios Hangul_J_SsangSios Hangul_J_Ieung Hangul_J_Jieuj Hangul_J_Cieuc Hangul_J_Khieuq
+syn keyword xmodmapKeySym Hangul_J_Tieut Hangul_J_Phieuf Hangul_J_Hieuh Hangul_RieulYeorinHieuh Hangul_SunkyeongeumMieum Hangul_SunkyeongeumPieub Hangul_PanSios Hangul_KkogjiDalrinIeung Hangul_SunkyeongeumPhieuf Hangul_YeorinHieuh Hangul_AraeA Hangul_AraeAE Hangul_J_PanSios Hangul_J_KkogjiDalrinIeung Hangul_J_YeorinHieuh
+syn keyword xmodmapKeySym Korean_Won Armenian_eternity Armenian_ligature_ew Armenian_full_stop Armenian_verjaket Armenian_parenright Armenian_parenleft Armenian_guillemotright Armenian_guillemotleft Armenian_em_dash Armenian_dot Armenian_mijaket Armenian_separation_mark Armenian_but Armenian_comma
+syn keyword xmodmapKeySym Armenian_en_dash Armenian_hyphen Armenian_yentamna Armenian_ellipsis Armenian_exclam Armenian_amanak Armenian_accent Armenian_shesht Armenian_question Armenian_paruyk Armenian_AYB Armenian_ayb Armenian_BEN Armenian_ben Armenian_GIM
+syn keyword xmodmapKeySym Armenian_gim Armenian_DA Armenian_da Armenian_YECH Armenian_yech Armenian_ZA Armenian_za Armenian_E Armenian_e Armenian_AT Armenian_at Armenian_TO Armenian_to Armenian_ZHE Armenian_zhe
+syn keyword xmodmapKeySym Armenian_INI Armenian_ini Armenian_LYUN Armenian_lyun Armenian_KHE Armenian_khe Armenian_TSA Armenian_tsa Armenian_KEN Armenian_ken Armenian_HO Armenian_ho Armenian_DZA Armenian_dza Armenian_GHAT
+syn keyword xmodmapKeySym Armenian_ghat Armenian_TCHE Armenian_tche Armenian_MEN Armenian_men Armenian_HI Armenian_hi Armenian_NU Armenian_nu Armenian_SHA Armenian_sha Armenian_VO Armenian_vo Armenian_CHA Armenian_cha
+syn keyword xmodmapKeySym Armenian_PE Armenian_pe Armenian_JE Armenian_je Armenian_RA Armenian_ra Armenian_SE Armenian_se Armenian_VEV Armenian_vev Armenian_TYUN Armenian_tyun Armenian_RE Armenian_re Armenian_TSO
+syn keyword xmodmapKeySym Armenian_tso Armenian_VYUN Armenian_vyun Armenian_PYUR Armenian_pyur Armenian_KE Armenian_ke Armenian_O Armenian_o Armenian_FE Armenian_fe Armenian_apostrophe Armenian_section_sign Georgian_an Georgian_ban
+syn keyword xmodmapKeySym Georgian_gan Georgian_don Georgian_en Georgian_vin Georgian_zen Georgian_tan Georgian_in Georgian_kan Georgian_las Georgian_man Georgian_nar Georgian_on Georgian_par Georgian_zhar Georgian_rae
+syn keyword xmodmapKeySym Georgian_san Georgian_tar Georgian_un Georgian_phar Georgian_khar Georgian_ghan Georgian_qar Georgian_shin Georgian_chin Georgian_can Georgian_jil Georgian_cil Georgian_char Georgian_xan Georgian_jhan
+syn keyword xmodmapKeySym Georgian_hae Georgian_he Georgian_hie Georgian_we Georgian_har Georgian_hoe Georgian_fi Ccedillaabovedot Xabovedot Qabovedot Ibreve IE UO Zstroke Gcaron
+syn keyword xmodmapKeySym Obarred ccedillaabovedot xabovedot Ocaron qabovedot ibreve ie uo zstroke gcaron ocaron obarred SCHWA schwa Lbelowdot
+syn keyword xmodmapKeySym Lstrokebelowdot lbelowdot lstrokebelowdot Gtilde gtilde Abelowdot abelowdot Ahook ahook Acircumflexacute acircumflexacute Acircumflexgrave acircumflexgrave Acircumflexhook acircumflexhook
+syn keyword xmodmapKeySym Acircumflextilde acircumflextilde Acircumflexbelowdot acircumflexbelowdot Abreveacute abreveacute Abrevegrave abrevegrave Abrevehook abrevehook Abrevetilde abrevetilde Abrevebelowdot abrevebelowdot Ebelowdot
+syn keyword xmodmapKeySym ebelowdot Ehook ehook Etilde etilde Ecircumflexacute ecircumflexacute Ecircumflexgrave ecircumflexgrave Ecircumflexhook ecircumflexhook Ecircumflextilde ecircumflextilde Ecircumflexbelowdot ecircumflexbelowdot
+syn keyword xmodmapKeySym Ihook ihook Ibelowdot ibelowdot Obelowdot obelowdot Ohook ohook Ocircumflexacute ocircumflexacute Ocircumflexgrave ocircumflexgrave Ocircumflexhook ocircumflexhook Ocircumflextilde
+syn keyword xmodmapKeySym ocircumflextilde Ocircumflexbelowdot ocircumflexbelowdot Ohornacute ohornacute Ohorngrave ohorngrave Ohornhook ohornhook Ohorntilde ohorntilde Ohornbelowdot ohornbelowdot Ubelowdot ubelowdot
+syn keyword xmodmapKeySym Uhook uhook Uhornacute uhornacute Uhorngrave uhorngrave Uhornhook uhornhook Uhorntilde uhorntilde Uhornbelowdot uhornbelowdot Ybelowdot ybelowdot Yhook
+syn keyword xmodmapKeySym yhook Ytilde ytilde Ohorn ohorn Uhorn uhorn combining_tilde combining_grave combining_acute combining_hook combining_belowdot EcuSign ColonSign CruzeiroSign
+syn keyword xmodmapKeySym FFrancSign LiraSign MillSign NairaSign PesetaSign RupeeSign WonSign NewSheqelSign DongSign EuroSign
+syn match xmodmapKeySym "\<[A-Za-z]\>"
+
+" keywords
+syn keyword xmodmapKeyword keycode keysym clear add remove pointer
+
+" 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_xmodmap_syn_inits")
+ if version < 508
+ let did_xmodmap_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink xmodmapComment Comment
+ HiLink xmodmapTodo Todo
+ HiLink xmodmapInt Number
+ HiLink xmodmapHex Number
+ HiLink xmodmapOctal Number
+ HiLink xmodmapOctalError Error
+ HiLink xmodmapKeySym Constant
+ HiLink xmodmapKeyword Keyword
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xmodmap"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/xpm.vim b/runtime/syntax/xpm.vim
new file mode 100644
index 000000000..4cbda82fb
--- /dev/null
+++ b/runtime/syntax/xpm.vim
@@ -0,0 +1,144 @@
+" Vim syntax file
+" Language: X Pixmap
+" Maintainer: Ronald Schild <rs@scutum.de>
+" Last Change: 2001 May 09
+" Version: 5.4n.1
+
+" 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 keyword xpmType char
+syn keyword xpmStorageClass static
+syn keyword xpmTodo TODO FIXME XXX contained
+syn region xpmComment start="/\*" end="\*/" contains=xpmTodo
+syn region xpmPixelString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@xpmColors
+
+if has("gui_running")
+
+let color = ""
+let chars = ""
+let colors = 0
+let cpp = 0
+let n = 0
+let i = 1
+
+while i <= line("$") " scanning all lines
+
+ let s = matchstr(getline(i), '".\{-1,}"')
+ if s != "" " does line contain a string?
+
+ if n == 0 " first string is the Values string
+
+ " get the 3rd value: colors = number of colors
+ let colors = substitute(s, '"\s*\d\+\s\+\d\+\s\+\(\d\+\).*"', '\1', '')
+ " get the 4th value: cpp = number of character per pixel
+ let cpp = substitute(s, '"\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\d\+\).*"', '\1', '')
+
+ " highlight the Values string as normal string (no pixel string)
+ exe 'syn match xpmValues /'.s.'/'
+ hi link xpmValues String
+
+ let n = 1 " n = color index
+
+ elseif n <= colors " string is a color specification
+
+ " get chars = <cpp> length string representing the pixels
+ " (first incl. the following whitespace)
+ let chars = substitute(s, '"\(.\{'.cpp.'}\s\).*"', '\1', '')
+
+ " now get color, first try 'c' key if any (color visual)
+ let color = substitute(s, '".*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*"', '\1', '')
+ if color == s
+ " no 'c' key, try 'g' key (grayscale with more than 4 levels)
+ let color = substitute(s, '".*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*"', '\1', '')
+ if color == s
+ " next try: 'g4' key (4-level grayscale)
+ let color = substitute(s, '".*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*"', '\1', '')
+ if color == s
+ " finally try 'm' key (mono visual)
+ let color = substitute(s, '".*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*"', '\1', '')
+ if color == s
+ let color = ""
+ endif
+ endif
+ endif
+ endif
+
+ " Vim cannot handle RGB codes with more than 6 hex digits
+ if color =~ '#\x\{10,}$'
+ let color = substitute(color, '\(\x\x\)\x\x', '\1', 'g')
+ elseif color =~ '#\x\{7,}$'
+ let color = substitute(color, '\(\x\x\)\x', '\1', 'g')
+ " nor with 3 digits
+ elseif color =~ '#\x\{3}$'
+ let color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '')
+ endif
+
+ " escape meta characters in patterns
+ let s = escape(s, '/\*^$.~[]')
+ let chars = escape(chars, '/\*^$.~[]')
+
+ " now create syntax items
+ " highlight the color string as normal string (no pixel string)
+ exe 'syn match xpmCol'.n.'Def /'.s.'/ contains=xpmCol'.n.'inDef'
+ exe 'hi link xpmCol'.n.'Def String'
+
+ " but highlight the first whitespace after chars in its color
+ exe 'syn match xpmCol'.n.'inDef /"'.chars.'/hs=s+'.(cpp+1).' contained'
+ exe 'hi link xpmCol'.n.'inDef xpmColor'.n
+
+ " remove the following whitespace from chars
+ let chars = substitute(chars, '.$', '', '')
+
+ " and create the syntax item contained in the pixel strings
+ exe 'syn match xpmColor'.n.' /'.chars.'/ contained'
+ exe 'syn cluster xpmColors add=xpmColor'.n
+
+ " if no color or color = "None" show background
+ if color == "" || substitute(color, '.*', '\L&', '') == 'none'
+ exe 'hi xpmColor'.n.' guifg=bg'
+ exe 'hi xpmColor'.n.' guibg=NONE'
+ else
+ exe 'hi xpmColor'.n." guifg='".color."'"
+ exe 'hi xpmColor'.n." guibg='".color."'"
+ endif
+ let n = n + 1
+ else
+ break " no more color string
+ endif
+ endif
+ let i = i + 1
+endwhile
+
+unlet color chars colors cpp n i s
+
+endif " has("gui_running")
+
+" 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_xpm_syntax_inits")
+ if version < 508
+ let did_xpm_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink xpmType Type
+ HiLink xpmStorageClass StorageClass
+ HiLink xpmTodo Todo
+ HiLink xpmComment Comment
+ HiLink xpmPixelString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xpm"
+
+" vim: ts=8:sw=3:noet:
diff --git a/runtime/syntax/xpm2.vim b/runtime/syntax/xpm2.vim
new file mode 100644
index 000000000..3a3de6f54
--- /dev/null
+++ b/runtime/syntax/xpm2.vim
@@ -0,0 +1,156 @@
+" Vim syntax file
+" Language: X Pixmap v2
+" Maintainer: Steve Wall (hitched97@velnet.com)
+" Last Change: 2001 Apr 25
+" Version: 5.8
+"
+" Made from xpm.vim by Ronald Schild <rs@scutum.de>
+
+" 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 region xpm2PixelString start="^" end="$" contains=@xpm2Colors
+syn keyword xpm2Todo TODO FIXME XXX contained
+syn match xpm2Comment "\!.*$" contains=xpm2Todo
+
+
+if version < 508
+ command -nargs=+ HiLink hi link <args>
+ command -nargs=+ Hi hi <args>
+else
+ command -nargs=+ HiLink hi def link <args>
+ command -nargs=+ Hi hi def <args>
+endif
+
+if has("gui_running")
+
+ let color = ""
+ let chars = ""
+ let colors = 0
+ let cpp = 0
+ let n = 0
+ let i = 1
+
+ while i <= line("$") " scanning all lines
+
+ let s = getline(i)
+ if match(s,"\!.*$") != -1
+ let s = matchstr(s, "^[^\!]*")
+ endif
+ if s != "" " does line contain a string?
+
+ if n == 0 " first string is the Values string
+
+ " get the 3rd value: colors = number of colors
+ let colors = substitute(s, '\s*\d\+\s\+\d\+\s\+\(\d\+\).*', '\1', '')
+ " get the 4th value: cpp = number of character per pixel
+ let cpp = substitute(s, '\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\d\+\).*', '\1', '')
+
+ " highlight the Values string as normal string (no pixel string)
+ exe 'syn match xpm2Values /'.s.'/'
+ HiLink xpm2Values Statement
+
+ let n = 1 " n = color index
+
+ elseif n <= colors " string is a color specification
+
+ " get chars = <cpp> length string representing the pixels
+ " (first incl. the following whitespace)
+ let chars = substitute(s, '\(.\{'.cpp.'}\s\+\).*', '\1', '')
+
+ " now get color, first try 'c' key if any (color visual)
+ let color = substitute(s, '.*\sc\s\+\(.\{-}\)\s*\(\(g4\=\|[ms]\)\s.*\)*\s*', '\1', '')
+ if color == s
+ " no 'c' key, try 'g' key (grayscale with more than 4 levels)
+ let color = substitute(s, '.*\sg\s\+\(.\{-}\)\s*\(\(g4\|[ms]\)\s.*\)*\s*', '\1', '')
+ if color == s
+ " next try: 'g4' key (4-level grayscale)
+ let color = substitute(s, '.*\sg4\s\+\(.\{-}\)\s*\([ms]\s.*\)*\s*', '\1', '')
+ if color == s
+ " finally try 'm' key (mono visual)
+ let color = substitute(s, '.*\sm\s\+\(.\{-}\)\s*\(s\s.*\)*\s*', '\1', '')
+ if color == s
+ let color = ""
+ endif
+ endif
+ endif
+ endif
+
+ " Vim cannot handle RGB codes with more than 6 hex digits
+ if color =~ '#\x\{10,}$'
+ let color = substitute(color, '\(\x\x\)\x\x', '\1', 'g')
+ elseif color =~ '#\x\{7,}$'
+ let color = substitute(color, '\(\x\x\)\x', '\1', 'g')
+ " nor with 3 digits
+ elseif color =~ '#\x\{3}$'
+ let color = substitute(color, '\(\x\)\(\x\)\(\x\)', '0\10\20\3', '')
+ endif
+
+ " escape meta characters in patterns
+ let s = escape(s, '/\*^$.~[]')
+ let chars = escape(chars, '/\*^$.~[]')
+
+ " change whitespace to "\s\+"
+ let s = substitute(s, "[ \t][ \t]*", "\\\\s\\\\+", "g")
+ let chars = substitute(chars, "[ \t][ \t]*", "\\\\s\\\\+", "g")
+
+ " now create syntax items
+ " highlight the color string as normal string (no pixel string)
+ exe 'syn match xpm2Col'.n.'Def /'.s.'/ contains=xpm2Col'.n.'inDef'
+ exe 'HiLink xpm2Col'.n.'Def Constant'
+
+ " but highlight the first whitespace after chars in its color
+ exe 'syn match xpm2Col'.n.'inDef /^'.chars.'/hs=s+'.(cpp).' contained'
+ exe 'HiLink xpm2Col'.n.'inDef xpm2Color'.n
+
+ " remove the following whitespace from chars
+ let chars = substitute(chars, '\\s\\+$', '', '')
+
+ " and create the syntax item contained in the pixel strings
+ exe 'syn match xpm2Color'.n.' /'.chars.'/ contained'
+ exe 'syn cluster xpm2Colors add=xpm2Color'.n
+
+ " if no color or color = "None" show background
+ if color == "" || substitute(color, '.*', '\L&', '') == 'none'
+ exe 'Hi xpm2Color'.n.' guifg=bg guibg=NONE'
+ else
+ exe 'Hi xpm2Color'.n." guifg='".color."' guibg='".color."'"
+ endif
+ let n = n + 1
+ else
+ break " no more color string
+ endif
+ endif
+ let i = i + 1
+ endwhile
+
+ unlet color chars colors cpp n i s
+
+endif " has("gui_running")
+
+" 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_xpm2_syntax_inits")
+ if version < 508
+ let did_xpm2_syntax_inits = 1
+ endif
+
+ " The default highlighting.
+ HiLink xpm2Type Type
+ HiLink xpm2StorageClass StorageClass
+ HiLink xpm2Todo Todo
+ HiLink xpm2Comment Comment
+ HiLink xpm2PixelString String
+endif
+delcommand HiLink
+delcommand Hi
+
+let b:current_syntax = "xpm2"
+
+" vim: ts=8:sw=2:noet:
diff --git a/runtime/syntax/xs.vim b/runtime/syntax/xs.vim
new file mode 100644
index 000000000..9f1054a89
--- /dev/null
+++ b/runtime/syntax/xs.vim
@@ -0,0 +1,54 @@
+" Vim syntax file
+" Language: XS (Perl extension interface language)
+" Maintainer: Michael W. Dodge <sarge@pobox.com>
+" Last Change: 2001 May 09
+
+" 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
+if version < 600
+ source <sfile>:p:h/c.vim
+else
+ runtime! syntax/c.vim
+endif
+
+" 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.
+" 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
+
+ HiLink xsKeyword Keyword
+ HiLink xsMacro Macro
+ HiLink xsVariable Identifier
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xs"
+
+" vim: ts=8
diff --git a/runtime/syntax/xsd.vim b/runtime/syntax/xsd.vim
new file mode 100644
index 000000000..c3431f42e
--- /dev/null
+++ b/runtime/syntax/xsd.vim
@@ -0,0 +1,61 @@
+" Vim syntax file
+" Language: XSD (XML Schema)
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Tue, 27 Apr 2004 14:54:59 CEST
+" Filenames: *.xsd
+" $Id$
+
+" REFERENCES:
+" [1] http://www.w3.org/TR/xmlschema-0
+"
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+runtime syntax/xml.vim
+
+syn cluster xmlTagHook add=xsdElement
+syn case match
+
+syn match xsdElement '\%(xsd:\)\@<=all'
+syn match xsdElement '\%(xsd:\)\@<=annotation'
+syn match xsdElement '\%(xsd:\)\@<=any'
+syn match xsdElement '\%(xsd:\)\@<=anyAttribute'
+syn match xsdElement '\%(xsd:\)\@<=appInfo'
+syn match xsdElement '\%(xsd:\)\@<=attribute'
+syn match xsdElement '\%(xsd:\)\@<=attributeGroup'
+syn match xsdElement '\%(xsd:\)\@<=choice'
+syn match xsdElement '\%(xsd:\)\@<=complexContent'
+syn match xsdElement '\%(xsd:\)\@<=complexType'
+syn match xsdElement '\%(xsd:\)\@<=documentation'
+syn match xsdElement '\%(xsd:\)\@<=element'
+syn match xsdElement '\%(xsd:\)\@<=enumeration'
+syn match xsdElement '\%(xsd:\)\@<=extension'
+syn match xsdElement '\%(xsd:\)\@<=field'
+syn match xsdElement '\%(xsd:\)\@<=group'
+syn match xsdElement '\%(xsd:\)\@<=import'
+syn match xsdElement '\%(xsd:\)\@<=include'
+syn match xsdElement '\%(xsd:\)\@<=key'
+syn match xsdElement '\%(xsd:\)\@<=keyref'
+syn match xsdElement '\%(xsd:\)\@<=length'
+syn match xsdElement '\%(xsd:\)\@<=list'
+syn match xsdElement '\%(xsd:\)\@<=maxInclusive'
+syn match xsdElement '\%(xsd:\)\@<=maxLength'
+syn match xsdElement '\%(xsd:\)\@<=minInclusive'
+syn match xsdElement '\%(xsd:\)\@<=minLength'
+syn match xsdElement '\%(xsd:\)\@<=pattern'
+syn match xsdElement '\%(xsd:\)\@<=redefine'
+syn match xsdElement '\%(xsd:\)\@<=restriction'
+syn match xsdElement '\%(xsd:\)\@<=schema'
+syn match xsdElement '\%(xsd:\)\@<=selector'
+syn match xsdElement '\%(xsd:\)\@<=sequence'
+syn match xsdElement '\%(xsd:\)\@<=simpleContent'
+syn match xsdElement '\%(xsd:\)\@<=simpleType'
+syn match xsdElement '\%(xsd:\)\@<=union'
+syn match xsdElement '\%(xsd:\)\@<=unique'
+
+hi def link xsdElement Statement
+
+" vim: ts=8
diff --git a/runtime/syntax/xslt.vim b/runtime/syntax/xslt.vim
new file mode 100644
index 000000000..98dd86919
--- /dev/null
+++ b/runtime/syntax/xslt.vim
@@ -0,0 +1,62 @@
+" Vim syntax file
+" Language: XSLT
+" Maintainer: Johannes Zellner <johannes@zellner.org>
+" Last Change: Sun, 28 Oct 2001 21:22:24 +0100
+" Filenames: *.xsl
+" $Id$
+
+" REFERENCES:
+" [1] http://www.w3.org/TR/xslt
+"
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+runtime syntax/xml.vim
+
+syn cluster xmlTagHook add=xslElement
+syn case match
+
+syn match xslElement '\%(xsl:\)\@<=apply-imports'
+syn match xslElement '\%(xsl:\)\@<=apply-templates'
+syn match xslElement '\%(xsl:\)\@<=attribute'
+syn match xslElement '\%(xsl:\)\@<=attribute-set'
+syn match xslElement '\%(xsl:\)\@<=call-template'
+syn match xslElement '\%(xsl:\)\@<=choose'
+syn match xslElement '\%(xsl:\)\@<=comment'
+syn match xslElement '\%(xsl:\)\@<=copy'
+syn match xslElement '\%(xsl:\)\@<=copy-of'
+syn match xslElement '\%(xsl:\)\@<=decimal-format'
+syn match xslElement '\%(xsl:\)\@<=document'
+syn match xslElement '\%(xsl:\)\@<=element'
+syn match xslElement '\%(xsl:\)\@<=fallback'
+syn match xslElement '\%(xsl:\)\@<=for-each'
+syn match xslElement '\%(xsl:\)\@<=if'
+syn match xslElement '\%(xsl:\)\@<=include'
+syn match xslElement '\%(xsl:\)\@<=import'
+syn match xslElement '\%(xsl:\)\@<=key'
+syn match xslElement '\%(xsl:\)\@<=message'
+syn match xslElement '\%(xsl:\)\@<=namespace-alias'
+syn match xslElement '\%(xsl:\)\@<=number'
+syn match xslElement '\%(xsl:\)\@<=otherwise'
+syn match xslElement '\%(xsl:\)\@<=output'
+syn match xslElement '\%(xsl:\)\@<=param'
+syn match xslElement '\%(xsl:\)\@<=processing-instruction'
+syn match xslElement '\%(xsl:\)\@<=preserve-space'
+syn match xslElement '\%(xsl:\)\@<=script'
+syn match xslElement '\%(xsl:\)\@<=sort'
+syn match xslElement '\%(xsl:\)\@<=strip-space'
+syn match xslElement '\%(xsl:\)\@<=stylesheet'
+syn match xslElement '\%(xsl:\)\@<=template'
+syn match xslElement '\%(xsl:\)\@<=transform'
+syn match xslElement '\%(xsl:\)\@<=text'
+syn match xslElement '\%(xsl:\)\@<=value-of'
+syn match xslElement '\%(xsl:\)\@<=variable'
+syn match xslElement '\%(xsl:\)\@<=when'
+syn match xslElement '\%(xsl:\)\@<=with-param'
+
+hi def link xslElement Statement
+
+" vim: ts=8
diff --git a/runtime/syntax/xxd.vim b/runtime/syntax/xxd.vim
new file mode 100644
index 000000000..1ed543c20
--- /dev/null
+++ b/runtime/syntax/xxd.vim
@@ -0,0 +1,42 @@
+" Vim syntax file
+" Language: bin using xxd
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Nov 18, 2002
+" Version: 6
+" Notes: use :help xxd to see how to invoke it
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+
+" 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 match xxdAddress "^[0-9a-f]\+:" contains=xxdSep
+syn match xxdSep contained ":"
+syn match xxdAscii " .\{,16\}\r\=$"hs=s+2 contains=xxdDot
+syn match xxdDot contained "[.\r]"
+
+" 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_xxd_syntax_inits")
+ if version < 508
+ let did_xxd_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink xxdAddress Constant
+ HiLink xxdSep Identifier
+ HiLink xxdAscii Statement
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "xxd"
+
+" vim: ts=4
diff --git a/runtime/syntax/yacc.vim b/runtime/syntax/yacc.vim
new file mode 100644
index 000000000..532a39a95
--- /dev/null
+++ b/runtime/syntax/yacc.vim
@@ -0,0 +1,98 @@
+" Vim syntax file
+" Language: Yacc
+" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Nov 18, 2002
+" Version: 2
+" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
+"
+" Option:
+" yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
+
+" 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
+if version >= 600
+ if exists("yacc_uses_cpp")
+ runtime! syntax/cpp.vim
+ else
+ runtime! syntax/c.vim
+ endif
+elseif exists("yacc_uses_cpp")
+ so <sfile>:p:h/cpp.vim
+else
+ so <sfile>:p:h/c.vim
+endif
+
+" Clusters
+syn cluster yaccActionGroup contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
+syn cluster yaccUnionGroup contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
+
+" Yacc stuff
+syn match yaccDelim "^\s*[:|;]"
+syn match yaccOper "@\d\+"
+
+syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
+syn match yaccKey "\s%\(prec\|expect\)\>"
+syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
+syn keyword yaccKeyActn yyerrok yyclearin
+
+syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion
+syn region yaccUnion contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
+syn region yaccUnionCurly contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
+syn match yaccBrkt contained "[<>]"
+syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt
+syn match yaccDefinition "^[A-Za-z][A-Za-z0-9_]*[ \t]*:"
+
+" special Yacc separators
+syn match yaccSectionSep "^[ \t]*%%"
+syn match yaccSep "^[ \t]*%{"
+syn match yaccSep "^[ \t]*%}"
+
+" I'd really like to highlight just the outer {}. Any suggestions???
+syn match yaccCurlyError "[{}]"
+syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
+
+
+" 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_yacc_syn_inits")
+ if version < 508
+ let did_yacchdl_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Internal yacc highlighting links
+ HiLink yaccBrkt yaccStmt
+ HiLink yaccKey yaccStmt
+ HiLink yaccOper yaccStmt
+ HiLink yaccUnionStart yaccKey
+
+ " External yacc highlighting links
+ HiLink yaccCurly Delimiter
+ HiLink yaccCurlyError Error
+ HiLink yaccDefinition Function
+ HiLink yaccDelim Function
+ HiLink yaccKeyActn Special
+ HiLink yaccSectionSep Todo
+ HiLink yaccSep Delimiter
+ HiLink yaccStmt Statement
+ HiLink yaccType Type
+
+ " since Bram doesn't like my Delimiter :|
+ HiLink Delimiter Type
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "yacc"
+
+" vim: ts=15
diff --git a/runtime/syntax/yaml.vim b/runtime/syntax/yaml.vim
new file mode 100644
index 000000000..56e578b30
--- /dev/null
+++ b/runtime/syntax/yaml.vim
@@ -0,0 +1,105 @@
+" Vim syntax file
+" Language: YAML (YAML Ain't Markup Language)
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/vim/syntax/pcp/yaml/
+" Latest Revision: 2004-05-22
+" arch-tag: 01bf8ef1-335f-4692-a228-4846cb64cd16
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Todo
+syn keyword yamlTodo contained TODO FIXME XXX NOTE
+
+" Comments (4.2.2)
+syn region yamlComment matchgroup=yamlComment start='\%(^\|\s\)#' end='$' contains=yamlTodo
+
+" Node Properties (4.3.4)
+syn match yamlNodeProperty '!\%(![^\\^% ]\+\|[^!][^:/ ]*\)'
+
+" Anchors (4.3.6)
+syn match yamlAnchor '&.\+'
+
+" Aliases (4.3.7)
+syn match yamlAlias '\*.\+'
+
+" Operators, Blocks, Keys, and Delimiters
+syn match yamlDelimiter '[-,:]'
+syn match yamlBlock '[\[\]{}>|]'
+syn match yamlOperator '[?+-]'
+syn match yamlKey '\w\+\(\s\+\w\+\)*\ze\s*:'
+
+" Strings (4.6.8, 4.6.9)
+syn region yamlString start=+"+ skip=+\\"+ end=+"+ contains=yamlEscape
+syn region yamlString start=+'+ skip=+''+ end=+'+ contains=yamlSingleEscape
+syn match yamlEscape contained +\\[\\"abefnrtv^0_ NLP]+
+syn match yamlEscape contained '\\x\x\{2}'
+syn match yamlEscape contained '\\u\x\{4}'
+syn match yamlEscape contained '\\U\x\{8}'
+" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
+syn match yamlEscape '\\\%(\r\n\|[\r\n]\)'
+syn match yamlSingleEscape contained +''+
+
+" Numbers
+" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
+syn match yamlNumber '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
+syn match yamlNumber '0\o\+'
+syn match yamlNumber '0x\x\+'
+syn match yamlNumber '([+-]\=[iI]nf)'
+syn match yamlNumber '(NaN)'
+
+" Constants
+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
+
+" Timestamps
+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\)\='
+
+" Documents (4.3.1)
+syn region yamlDocumentHeader start='---' end='$' contains=yamlDirective
+syn match yamlDocumentEnd '\.\.\.'
+
+" Directives (4.3.2)
+syn match yamlDirective contained '%[^:]\+:.\+'
+
+" 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_yaml_syn_inits")
+ if version < 508
+ let did_yaml_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink yamlTodo Todo
+ HiLink yamlComment Comment
+ HiLink yamlDocumentHeader PreProc
+ HiLink yamlDocumentEnd PreProc
+ HiLink yamlDirective Keyword
+ HiLink yamlNodeProperty Type
+ HiLink yamlAnchor Type
+ HiLink yamlAlias Type
+ HiLink yamlDelimiter Delimiter
+ HiLink yamlBlock Operator
+ HiLink yamlOperator Operator
+ HiLink yamlKey Identifier
+ HiLink yamlString String
+ HiLink yamlEscape SpecialChar
+ HiLink yamlSingleEscape SpecialChar
+ HiLink yamlNumber Number
+ HiLink yamlConstant Constant
+ HiLink yamlTimestamp Number
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "yaml"
+
+" vim: set sts=2 sw=2:
diff --git a/runtime/syntax/z8a.vim b/runtime/syntax/z8a.vim
new file mode 100644
index 000000000..a3a8a2bbd
--- /dev/null
+++ b/runtime/syntax/z8a.vim
@@ -0,0 +1,114 @@
+" Vim syntax file
+" Language: Z80 assembler asz80
+" Maintainer: Milan Pikula <www@fornax.elf.stuba.sk>
+" Last Change: 2003 May 11
+
+" 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
+
+" Common Z80 Assembly instructions
+syn keyword z8aInstruction adc add and bit ccf cp cpd cpdr cpi cpir cpl
+syn keyword z8aInstruction daa di djnz ei exx halt im in
+syn keyword z8aInstruction ind ini indr inir jp jr ld ldd lddr ldi ldir
+syn keyword z8aInstruction neg nop or otdr otir out outd outi
+syn keyword z8aInstruction res rl rla rlc rlca rld
+syn keyword z8aInstruction rr rra rrc rrca rrd sbc scf set sla sra
+syn keyword z8aInstruction srl sub xor
+" syn keyword z8aInstruction push pop call ret reti retn inc dec ex rst
+
+" Any other stuff
+syn match z8aIdentifier "[a-z_][a-z0-9_]*"
+
+" Instructions changing stack
+syn keyword z8aSpecInst push pop call ret reti retn rst
+syn match z8aInstruction "\<inc\>"
+syn match z8aInstruction "\<dec\>"
+syn match z8aInstruction "\<ex\>"
+syn match z8aSpecInst "\<inc\s\+sp\>"me=s+3
+syn match z8aSpecInst "\<dec\s\+sp\>"me=s+3
+syn match z8aSpecInst "\<ex\s\+(\s*sp\s*)\s*,\s*hl\>"me=s+2
+
+"Labels
+syn match z8aLabel "[a-z_][a-z0-9_]*:"
+syn match z8aSpecialLabel "[a-z_][a-z0-9_]*::"
+
+" PreProcessor commands
+syn match z8aPreProc "\.org"
+syn match z8aPreProc "\.globl"
+syn match z8aPreProc "\.db"
+syn match z8aPreProc "\.dw"
+syn match z8aPreProc "\.ds"
+syn match z8aPreProc "\.byte"
+syn match z8aPreProc "\.word"
+syn match z8aPreProc "\.blkb"
+syn match z8aPreProc "\.blkw"
+syn match z8aPreProc "\.ascii"
+syn match z8aPreProc "\.asciz"
+syn match z8aPreProc "\.module"
+syn match z8aPreProc "\.title"
+syn match z8aPreProc "\.sbttl"
+syn match z8aPreProc "\.even"
+syn match z8aPreProc "\.odd"
+syn match z8aPreProc "\.area"
+syn match z8aPreProc "\.page"
+syn match z8aPreProc "\.setdp"
+syn match z8aPreProc "\.radix"
+syn match z8aInclude "\.include"
+syn match z8aPreCondit "\.if"
+syn match z8aPreCondit "\.else"
+syn match z8aPreCondit "\.endif"
+
+" Common strings
+syn match z8aString "\".*\""
+syn match z8aString "\'.*\'"
+
+" Numbers
+syn match z8aNumber "[0-9]\+"
+syn match z8aNumber "0[xXhH][0-9a-fA-F]\+"
+syn match z8aNumber "0[bB][0-1]*"
+syn match z8aNumber "0[oO\@qQ][0-7]\+"
+syn match z8aNumber "0[dD][0-9]\+"
+
+" Character constant
+syn match z8aString "\#\'."hs=s+1
+
+" Comments
+syn match z8aComment ";.*"
+
+syn case match
+
+" 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_z8a_syntax_inits")
+ if version < 508
+ let did_z8a_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink z8aSection Special
+ HiLink z8aLabel Label
+ HiLink z8aSpecialLabel Label
+ HiLink z8aComment Comment
+ HiLink z8aInstruction Statement
+ HiLink z8aSpecInst Statement
+ HiLink z8aInclude Include
+ HiLink z8aPreCondit PreCondit
+ HiLink z8aPreProc PreProc
+ HiLink z8aNumber Number
+ HiLink z8aString String
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "z8a"
+" vim: ts=8
diff --git a/runtime/syntax/zsh.vim b/runtime/syntax/zsh.vim
new file mode 100644
index 000000000..83763a627
--- /dev/null
+++ b/runtime/syntax/zsh.vim
@@ -0,0 +1,118 @@
+" Vim syntax file
+" Language: Z shell (zsh)
+" Maintainer: Felix von Leitner <leitner@math.fu-berlin.de>
+" Heavily based on sh.vim by Lennart Schultz
+" Last Change: 2003 May 11
+
+" 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
+
+" String and Character contstants
+" Highlight special characters (those which have a backslash) differently
+syn match zshSpecial "\\\d\d\d\|\\[abcfnrtv\\']"
+syn region zshSinglequote start=+'+ skip=+\\'+ end=+'+
+" A bunch of useful zsh keywords
+" syn keyword zshFunction function
+syn keyword zshStatement bg break cd chdir continue echo eval exec
+syn keyword zshStatement exit export fg getopts hash jobs kill
+syn keyword zshStatement pwd read readonly return set zshift function
+syn keyword zshStatement stop suspend test times trap type ulimit
+syn keyword zshStatement umask unset wait setopt compctl source
+syn keyword zshStatement whence disown shift which unhash unalias
+syn keyword zshStatement alias functions unfunction getln disable
+syn keyword zshStatement vared getopt enable unsetopt autoload
+syn keyword zshStatement bindkey pushln command limit unlimit fc
+syn keyword zshStatement print builtin noglob sched r time
+syn keyword zshStatement typeset declare local integer
+
+syn keyword zshConditional if else esac case then elif fi in
+syn keyword zshRepeat while for do done
+
+" Following is worth to notice: command substitution, file redirection and functions (so these features turns red)
+syn match zshFunctionName "\h\w*\s*()"
+syn region zshCommandSub start=+`+ skip=+\\`+ end=+`+
+" contains=ALLBUT,zshFunction
+syn match zshRedir "\d\=\(<\|<<\|>\|>>\)\(|\|&\d\)\="
+
+syn keyword zshTodo contained TODO
+
+syn keyword zshShellVariables USER LOGNAME HOME PATH CDPATH SHELL
+syn keyword zshShellVariables LC_TYPE LC_MESSAGE MAIL MAILCHECK
+syn keyword zshShellVariables PS1 PS2 IFS EGID EUID ERRNO GID UID
+syn keyword zshShellVariables HOST LINENO MACHTYPE OLDPWD OPTARG
+syn keyword zshShellVariables OPTIND OSTYPE PPID PWD RANDOM SECONDS
+syn keyword zshShellVariables SHLVL TTY signals TTYIDLE USERNAME
+syn keyword zshShellVariables VENDOR ZSH_NAME ZSH_VERSION ARGV0
+syn keyword zshShellVariables BAUD COLUMNS cdpath DIRSTACKSIZE
+syn keyword zshShellVariables FCEDIT fignore fpath histchars HISTCHARS
+syn keyword zshShellVariables HISTFILE HISTSIZE KEYTIMEOUT LANG
+syn keyword zshShellVariables LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
+syn keyword zshShellVariables LC_TIME LINES LISTMAX LOGCHECK mailpath
+syn keyword zshShellVariables MAILPATH MANPATH manpath module_path
+syn keyword zshShellVariables MODULE_PATH NULLCMD path POSTEDIT
+syn keyword zshShellVariables PS3 PS4 PROMPT PROMPT2 PROMPT3 PROMPT4
+syn keyword zshShellVariables psvar PSVAR prompt READNULLCMD
+syn keyword zshShellVariables REPORTTIME RPROMPT RPS1 SAVEHIST
+syn keyword zshShellVariables SPROMPT STTY TIMEFMT TMOUT TMPPREFIX
+syn keyword zshShellVariables watch WATCH WATCHFMT WORDCHARS ZDOTDIR
+syn match zshSpecialShellVar "\$[-#@*$?!0-9]"
+syn keyword zshSetVariables ignoreeof noclobber
+syn region zshDerefOpr start="\${" end="}" contains=zshShellVariables
+syn match zshDerefIdentifier "\$[a-zA-Z_][a-zA-Z0-9_]*\>"
+syn match zshOperator "[][}{&;|)(]"
+
+
+
+syn match zshNumber "-\=\<\d\+\>"
+syn match zshComment "#.*$" contains=zshNumber,zshTodo
+
+
+syn match zshTestOpr "-\<[oeaznlg][tfqet]\=\>\|!\==\|-\<[b-gkLprsStuwjxOG]\>"
+"syn region zshTest start="\[" skip="\\$" end="\]" contains=zshString,zshTestOpr,zshDerefIdentifier,zshDerefOpr
+syn region zshString start=+"+ skip=+\\"+ end=+"+ contains=zshSpecial,zshOperator,zshDerefIdentifier,zshDerefOpr,zshSpecialShellVar,zshSinglequote,zshCommandSub
+
+" 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_zsh_syntax_inits")
+ if version < 508
+ let did_zsh_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink zshSinglequote zshString
+ HiLink zshConditional zshStatement
+ HiLink zshRepeat zshStatement
+ HiLink zshFunctionName zshFunction
+ HiLink zshCommandSub zshOperator
+ HiLink zshRedir zshOperator
+ HiLink zshSetVariables zshShellVariables
+ HiLink zshSpecialShellVar zshShellVariables
+ HiLink zshTestOpr zshOperator
+ HiLink zshDerefOpr zshSpecial
+ HiLink zshDerefIdentifier zshShellVariables
+ HiLink zshOperator Operator
+ HiLink zshStatement Statement
+ HiLink zshNumber Number
+ HiLink zshString String
+ HiLink zshComment Comment
+ HiLink zshSpecial Special
+ HiLink zshTodo Todo
+ HiLink zshShellVariables Special
+" hi zshOperator term=underline ctermfg=6 guifg=Purple gui=bold
+" hi zshShellVariables term=underline ctermfg=2 guifg=SeaGreen gui=bold
+" hi zshFunction term=bold ctermbg=1 guifg=Red
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "zsh"
+
+" vim: ts=8
diff --git a/runtime/termcap b/runtime/termcap
new file mode 100644
index 000000000..38790c49d
--- /dev/null
+++ b/runtime/termcap
@@ -0,0 +1,135 @@
+#
+# Demonstration of a termcap file (for the Amiga and Archimedes)
+#
+# Maintainer: Bram Moolenaar <Bram@vim.org>
+# Last change: 1999 Feb 02
+#
+sx|ansi|any ansi terminal with pessimistic assumptions:\
+ :co#80:li#24:cl=50\E[;H\E[2J:bs:am:cm=\E[%i%d;%dH:\
+ :nd=\E[C:up=\E[A:ce=\E[K:ho=\E[H:pt:
+
+Mu|sun|Sun Microsystems Workstation console:\
+ :am:bs:km:mi:ms:pt:li#34:co#80:cl=^L:cm=\E[%i%d;%dH:\
+ :ce=\E[K:cd=\E[J:\
+ :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:rs=\E[s:\
+ :md=\E[1m:mr=\E[7m:me=\E[m:\
+ :al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
+ :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
+ :up=\E[A:nd=\E[C:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
+ :k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:\
+ :k6=\E[229z:k7=\E[230z:k8=\E[231z:k9=\E[232z:
+
+M-|sun-e|sun-nic|sune|Sun Microsystems Workstation without insert character:\
+ :ic@:im@:ei@:tc=sun:
+Mu|sun-s|Sun Microsystems Workstation window with status line:\
+ :hs:ts=\E]l:fs=\E\\:ds=\E]l\E\\:tc=sun:
+Mu|sun-e-s|sun-s-e|Sun Microsystems Workstation with status hacked for emacs:\
+ :hs:ts=\E]l:fs=\E\\:ds=\E]l\E\\:tc=sun-e:
+M0|sun-48|Sun 48-line window:\
+ :li#48:co#80:tc=sun:
+M1|sun-34|Sun 34-line window:\
+ :li#34:co#80:tc=sun:
+M2|sun-24|Sun 24-line window:\
+ :li#24:co#80:tc=sun:
+M3|sun-17|Sun 17-line window:\
+ :li#17:co#80:tc=sun:
+
+v9|925a|tvi925a|TeleVideo Model 925:\
+ :al=\EE:am:bs:bt=\EI:bw:cd=\EY:ce=\ET:cl=^Z:cm=\E=%+ %+ :co#80:dc=\EW:\
+ :dl=\ER:do=^V:ei=:ic=\EQ:if=/usr/share/lib/tabset/std:im=:kb=^H:kd=^V:\
+ :kh=^^:kl=^H:kn#12:kr=^L:ku=^K:li#24:nd=^L:pt:se=\EG0:sg#1:so=\EG4:\
+ :ue=\EG0:ug#1:ul:up=^K:us=\EG8:is=\El\
+ :vb=\Eb\200\200\200\200\200\200\200\200\200\200\200\200\200\200\Ed:\
+ :ve=\E.4:vs=\E.2:
+
+d0|vt100|vt100-am|vt100am|dec vt100:\
+ :do=^J:co#80:li#24:cl=50\E[;H\E[2J:sf=5\ED:\
+ :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:\
+ :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
+ :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\
+ :rf=/usr/share/lib/tabset/vt100:\
+ :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\
+ :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\
+ :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=5\EM:vt#3:xn:\
+ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
+
+# Amiga termcap by Bram Moolenaar
+AA|amiga|Amiga ANSI:\
+ :co#80:li#25:am:do=\E[B:ce=\E[K:cd=\E[J:\
+ :cl=\014:ku=\233A:kd=\233B:kl=\233D:kr=\233C:kb=^H:\
+ :#4=\233 A:%i=\233 @:%1=\233?~:\
+ :k1=\2330~:k2=\2331~:k3=\2332~:k4=\2333~:k5=\2334~:\
+ :k6=\2335~:k7=\2336~:k8=\2337~:k9=\2338~:k;=\2339~:\
+ :F1=\23310~:F2=\23311~:F3=\23312~:F4=\23313~:F5=\23314~:\
+ :F6=\23315~:F7=\23316~:F8=\23317~:F9=\23318~:FA=\23319~:\
+ :al=\E[L:AL=\E[%dL:dl=\E[M:DL=\E[%dM:le=^H:cm=\E[%i%d;%dH:\
+ :nd=\E[C:RI=\E[%dC:up=\E[A:\
+ :ce=\E[K:ho=\E[H:dc=\E[P:ic=\E[@:vi=\E[0 p:ve=\E[1 p:\
+ :so=\E[2m:se=\E[m:us=\E[4m:ue=\E[m:mr=\E[7m:mb=\E[7;2m:me=\E[m:
+
+# Acorn VDU
+# For non-green text, change the ^B in the :cl= line to
+# your favourite control code.
+a0|acorn0|Acorn VDU Driver Mode 0:\
+ :cl=^V\200^S^A^B\200\200\200:\
+ :is=^C^F^D^O^V\200^S^A^B\200\200\200:\
+ :tc=acorn_generic
+
+ag|acorn_generic|Acorn Generic VDU driver:\
+ :li#32:\
+ :co#80:\
+ :am:\
+ :bs:\
+ :bw:\
+ :bl=^G:\
+ :ce=^W^H^E^F\200\200\200\200\200\200:\
+ :cl=^L:\
+ :cm=^_%r%.%.:\
+ :ho=^^:\
+ :le=\010:\
+ :cr=\015:\
+ :me=^W^Q^E\200\200\200\200\200\200\200:\
+ :mr=^W^Q^E\200\200\200\200\200\200\200:\
+ :sb=^W^G^A^B\200\200\200\200\200\200:\
+ :se=^W^Q^E\200\200\200\200\200\200\200:\
+ :sf=^W^G^A^C\200\200\200\200\200\200:\
+ :so=^W^Q^E\200\200\200\200\200\200\200:\
+ :sr=^W^G^A^B\200\200\200\200\200\200:\
+ :up=^K:\
+ :vb=^R^C^G^Y^D\200\200\200\200^Ye\200^E\200^D^Ye\200\200\200\200:\
+ :vi=^W^A\200\200\200\200\200\200\200\200:\
+ :ve=^W^A^A\200\200\200\200\200\200\200:\
+ :ku=\317:\
+ :kd=\316:\
+ :kl=\314:\
+ :kr=\315:\
+ :kP=\337:\
+ :kN=\336:\
+ :kh=\036:\
+ :kH=\313:\
+ :su=\337:\
+ :sd=\336:\
+ :#4=\334:\
+ :%i=\335:\
+ :k1=\301:\
+ :k2=\302:\
+ :k3=\303:\
+ :k4=\304:\
+ :k5=\305:\
+ :k6=\306:\
+ :k7=\307:\
+ :k8=\310:\
+ :k9=\311:\
+ :F1=\321:\
+ :F2=\322:\
+ :F3=\323:\
+ :F4=\324:\
+ :F5=\325:\
+ :F6=\326:\
+ :F7=\327:\
+ :F8=\330:\
+ :F9=\331
+
+#
+# END OF TERMCAP
+#
diff --git a/runtime/tools.info b/runtime/tools.info
new file mode 100755
index 000000000..4d173b0bc
--- /dev/null
+++ b/runtime/tools.info
Binary files differ
diff --git a/runtime/tools/README.txt b/runtime/tools/README.txt
new file mode 100644
index 000000000..3133f13ca
--- /dev/null
+++ b/runtime/tools/README.txt
@@ -0,0 +1,37 @@
+Some tools that can be used with Vim:
+
+blink.c: C program to make the cursor blink in an xterm.
+
+ccfilter*: C program to filter the output of a few compilers to a common
+ QuickFix format.
+
+efm_filter.*: Perl script to filter compiler messages to QuickFix format.
+
+efm_perl.pl: Perl script to filter error messages from the Perl interpreter
+ for use with Vim quickfix mode.
+
+mve.* Awk script to filter error messages to QuickFix format.
+
+pltags.pl: Perl script to create a tags file from Perl scripts.
+
+ref: Shell script for the K command.
+
+shtags.*: Perl script to create a tags file from a shell script.
+
+tcltags: Shell + Awk script to create a tags file from a TCL file.
+
+vim132: Shell script to edit in 132 column mode on vt100 compatible
+ terminals.
+
+vimm: Shell script to start Vim on a DEC terminal with mouse
+ enabled.
+
+vimspell.*: Shell script for highlighting spelling mistakes.
+
+vim_vs_net.cmd: MS-Windows command file to use Vim with MS Visual Studio 7 and
+ later.
+
+xcmdsrv_client.c: Example for a client program that communicates with a Vim
+ server through the X-Windows interface.
+
+[xxd (and tee for OS/2) can be found in the src directory]
diff --git a/runtime/tools/blink.c b/runtime/tools/blink.c
new file mode 100644
index 000000000..1ffd848ed
--- /dev/null
+++ b/runtime/tools/blink.c
@@ -0,0 +1,21 @@
+/*
+ * An extremely simple program to make the cursor blink in an xterm.
+ * This is useful when the cursor is hard to spot in a highlighted file.
+ * Start in the background: "blink&" Stop by killing it.
+ * Bram Moolenaar 980109 (based on an idea from John Lange).
+ */
+
+#include <stdio.h>
+
+main()
+{
+ while (1)
+ {
+ printf("\e[?25h");
+ fflush(stdout);
+ usleep(400000); /* on time */
+ printf("\e[?25l");
+ fflush(stdout);
+ usleep(250000); /* off time */
+ }
+}
diff --git a/runtime/tools/ccfilter.1 b/runtime/tools/ccfilter.1
new file mode 100644
index 000000000..e3de38da1
--- /dev/null
+++ b/runtime/tools/ccfilter.1
@@ -0,0 +1,93 @@
+.TH ccfilter 1 "01-Apr-97"
+.SH NAME
+ccfilter \- a compiler's output filter for vim quickfix
+.SH SYNOPSIS
+ccfilter [
+.B <options>
+]
+.SH DESCRIPTION
+The ccfilter utility "filters" the output of several compilers
+and makers (make/gmake) from several platforms (see NOTES below)
+to a standardized format which easily fits in vim's quickfix
+feature. For further details, see in vim ":help quickfix".
+.PP
+ccfilter reads
+.B 'stdin'
+and outputs to
+.B 'stdout'
+\.
+.PP
+The need for ccfilter is clear, as some compilers have irregular
+and/or multiple line error messages (with the relevant information on
+line 2), which makes it impossible for the errorformat to correctly
+display them !
+
+When working on different platforms, and with different compilers,
+ccfilter eases the utilization of quickfix, due to it's standardized
+output, allowing to have in .vimrc a plain
+.br
+.B \ \ \ \ :set\ errorformat=%f:%l:%c:%t:%m
+
+.SH USAGE
+When using ccfilter, one would include the following lines in .vimrc:
+.br
+.B \ \ \ \ :set shellpipe=\\\\|&ccfilter\\\\>
+.br
+.B \ \ \ \ :set errorformat=%f:%l:%c:%t:%m
+
+.SH OPTIONS
+.TP 16
+-c
+Decrement column by one. This may be needed, depending on
+the compiler being used.
+.TP
+-r
+Decrement row by one. This may be needed, depending on
+the compiler being used.
+.TP
+-v
+Verbose (Outputs also invalid lines).
+This option makes ccfilter output also the lines that
+couldn't be correctly parsed. This is used mostly for
+ccfilter debugging.
+.TP
+-o <COMPILER>
+Treat input as <COMPILER>'s output.
+Even when configuring ccfilter to assume a default
+COMPILER, sometimes it's helpful to be able to specify
+the COMPILER used to generate ccfilter's input.
+For example, when cross-compiling on a network from a
+single machine.
+.TP
+-h
+Shows a brief help, describing the configured default COMPILER
+and the valid parameters for COMPILER.
+
+.SH NOTES
+Currently, ccfilter accepts output from several compilers, as
+described below:
+.TP 10
+GCC
+GCC compiler
+.TP
+AIX
+AIX's C compiler
+.TP
+ATT
+AT&T/NCR's High Performance C Compiler
+.TP
+IRIX
+IRIX's MIPS/MIPSpro C compiler
+.TP
+SOLARIS
+SOLARIS's SparcWorks C compiler
+.TP
+HPUX
+HPUX's C compiler
+
+.SH AUTHOR
+.B ccfilter
+was developed by
+.B Pablo Ariel Kohan
+.BR
+.B mailto:pablo@memco.co.il
diff --git a/runtime/tools/ccfilter.c b/runtime/tools/ccfilter.c
new file mode 100644
index 000000000..270333910
--- /dev/null
+++ b/runtime/tools/ccfilter.c
@@ -0,0 +1,326 @@
+/* ======================================================================= */
+/* Project : VIM */
+/* Module : ccfilter Version: 02.01.01 */
+/* File : ccfilter.c */
+/* Purpose : Filter gmake/cc output into a standardized form */
+/* ======================================================================= */
+/* Created On: 12-Sep-95 20:32 */
+/* Last modification: 03-Feb-98 */
+/* -e option added by Bernd Feige */
+/* ======================================================================= */
+/* Copyright : */
+/* This source file is copyright (c) to Pablo Ariel Kohan */
+/* ======================================================================= */
+#define __CCFILTER_C__
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#define LINELENGTH 2048
+
+/* Collector(s) */
+char Line[LINELENGTH];
+char Line2[LINELENGTH];
+/* Components */
+char FileName[1024];
+char BasePath[1024];
+char CWD[1024];
+unsigned long Row;
+unsigned long Col;
+char Severity;
+char Reason[LINELENGTH];
+
+#define COMPILER_UNKNOWN 0
+#define COMPILER_GCC 1
+#define COMPILER_AIX 2
+#define COMPILER_ATT 3
+#define COMPILER_IRIX 4
+#define COMPILER_SOLARIS 5
+#define COMPILER_HPUX 6
+
+char *COMPILER_Names[][2] =
+ {
+ /* Name Description */
+ { "N/A", "" },
+ { "GCC", "GCC compiler" },
+ { "AIX", "AIX's C compiler" },
+ { "ATT", "AT&T/NCR's High Performance C Compiler" },
+ { "IRIX", "IRIX's MIPS/MIPSpro C compiler" },
+ { "SOLARIS", "SOLARIS's SparcWorks C compiler" },
+ { "HPUX", "HPUX's C compiler" }
+ };
+#define COMPILER_QTY (sizeof(COMPILER_Names)/sizeof(COMPILER_Names[0]))
+
+#if defined(_GCC)
+# define COMPILER_DEFAULT COMPILER_GCC
+#elif defined(_AIX)
+# define COMPILER_DEFAULT COMPILER_AIX
+#elif defined(_ATT)
+# define COMPILER_DEFAULT COMPILER_ATT
+#elif defined(_IRIX)
+# define COMPILER_DEFAULT COMPILER_IRIX
+#elif defined(_SOLARIS)
+# define COMPILER_DEFAULT COMPILER_SOLARIS
+#elif defined(_HPUX)
+# define COMPILER_DEFAULT COMPILER_HPUX
+#else
+# define COMPILER_DEFAULT COMPILER_UNKNOWN
+#endif
+
+const char USAGE[] =
+"ccfilter v2.1 (c)1994-1997 by Pablo Ariel Kohan\n"
+"Filter Out compiler's output, and converts it to fit VIM\n\n"
+"Usage:\n"
+" ccfilter [<options>]\n"
+"Where: <options> is one or more of:\n"
+" -c Decrement column by one\n"
+" -r Decrement row by one\n"
+" -e Echo stdin to stderr\n"
+" -v Verbose (Outputs also invalid lines)\n"
+" -o <COMPILER> Treat input as <COMPILER>'s output\n"
+" Note: COMPILER may be preceded by an _\n"
+" -h This usage.\n";
+
+
+int ShowUsage( char *szError )
+{ int i;
+
+ fprintf( stderr, USAGE );
+
+ fprintf( stderr, "Current default <COMPILER>: %s\n",
+ COMPILER_Names[COMPILER_DEFAULT][0] );
+
+ fprintf( stderr, "Acceptable parameters for <COMPILER> are:\n" );
+ for (i=1; i < COMPILER_QTY; i++)
+ fprintf( stderr, " %-15.15s %s\n",
+ COMPILER_Names[i][0],
+ COMPILER_Names[i][1] );
+ fprintf(stderr, szError);
+ return 0;
+}
+
+char *echogets(char *s, int echo) {
+ char * const retval=fgets(s, LINELENGTH, stdin);
+ if (echo!=0 && retval!=NULL) {
+ fputs(retval, stderr);
+ }
+ return retval;
+}
+
+int main( int argc, char *argv[] )
+{ int rv, i, j, ok;
+ int stay;
+ int prefetch;
+ char *p;
+ int dec_col = 0; /* Decrement column value by 1 */
+ int dec_row = 0; /* Decrement row value by 1 */
+ int echo = 0; /* Echo stdin to stderr */
+ int verbose = 0; /* Include Bad Formatted Lines */
+ int CWDlen;
+ int COMPILER = COMPILER_DEFAULT;
+
+ getcwd( CWD, sizeof(CWD) );
+ CWDlen = strlen(CWD);
+
+ for (i=1; i<argc; i++)
+ {
+ if (argv[i][0] != '-')
+ return ShowUsage("");
+ switch ( argv[i][1] )
+ {
+ case 'c':
+ dec_col = 1;
+ break;
+ case 'r':
+ dec_row = 1;
+ break;
+ case 'e':
+ echo = 1;
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case 'o':
+ {
+ if (i+1 >= argc)
+ return ShowUsage("Error: Missing parameter for -o\n");
+ i++;
+ COMPILER = -1;
+ for (j=1; j<COMPILER_QTY; j++)
+ if ( (strcmp(argv[i], COMPILER_Names[j][0]) == 0) ||
+ ( (argv[i][0] == '_') &&
+ (strcmp(&argv[i][1], COMPILER_Names[j][0]) == 0) ) )
+ COMPILER = j;
+ if (COMPILER == -1)
+ return ShowUsage("Error: Invalid COMPILER specified\n");
+ }
+ break;
+ case 'h':
+ return ShowUsage("");
+ default:
+ return ShowUsage("Error: Invalid option\n");
+ }
+ }
+ if (COMPILER == 0)
+ return ShowUsage("Error: COMPILER must be specified in this system\n");
+
+ stay = ( echogets(Line, echo) != NULL );
+ prefetch = 0;
+
+ while( stay )
+ {
+ *FileName = 0;
+ Row = 0;
+ Col = 0;
+ Severity = ' ';
+ *Reason = 0;
+ ok = 0;
+ switch (COMPILER)
+ {
+ case COMPILER_GCC:
+ Severity = 'e';
+#ifdef GOTO_FROM_WHERE_INCLUDED
+ rv = sscanf( Line, "In file included from %[^:]:%u:",
+ FileName, &Row );
+ if ( rv == 2 )
+ {
+ ok = (echogets(Reason, echo) != NULL);
+ }
+ else
+#endif
+ {
+ if ((rv = sscanf( Line, "%[^:]:%u: warning: %[^\n]",
+ FileName, &Row, Reason ))==3) {
+ Severity = 'w';
+ } else {
+ rv = sscanf( Line, "%[^:]:%u: %[^\n]",
+ FileName, &Row, Reason );
+ }
+ ok = ( rv == 3 );
+ }
+ Col = (dec_col ? 1 : 0 );
+ break;
+ case COMPILER_AIX:
+ rv = sscanf( Line, "\"%[^\"]\", line %u.%u: %*s (%c) %[^\n]",
+ FileName, &Row, &Col, &Severity, Reason );
+ ok = ( rv == 5 );
+ break;
+ case COMPILER_HPUX:
+ rv = sscanf( Line, "cc: \"%[^\"]\", line %u: %c%*[^:]: %[^\n]",
+ FileName, &Row, &Severity, Reason );
+ ok = ( rv == 4 );
+ Col = (dec_col ? 1 : 0 );
+ break;
+ case COMPILER_SOLARIS:
+ rv = sscanf( Line, "\"%[^\"]\", line %u: warning: %[^\n]",
+ FileName, &Row, Reason );
+ Severity = 'w';
+ ok = ( rv == 3 );
+ if ( rv != 3 )
+ {
+ rv = sscanf( Line, "\"%[^\"]\", line %u: %[^\n]",
+ FileName, &Row, Reason );
+ Severity = 'e';
+ ok = ( rv == 3 );
+ }
+ Col = (dec_col ? 1 : 0 );
+ break;
+ case COMPILER_ATT:
+ rv = sscanf( Line, "%c \"%[^\"]\",L%u/C%u%*[^:]:%[^\n]",
+ &Severity, FileName, &Row, &Col, Reason );
+ ok = ( rv == 5 );
+
+ if (rv != 5)
+ { rv = sscanf( Line, "%c \"%[^\"]\",L%u/C%u: %[^\n]",
+ &Severity, FileName, &Row, &Col, Reason );
+ ok = ( rv == 5 );
+ }
+
+ if (rv != 5)
+ { rv = sscanf( Line, "%c \"%[^\"]\",L%u: %[^\n]",
+ &Severity, FileName, &Row, Reason );
+ ok = ( rv == 4 );
+ Col = (dec_col ? 1 : 0 );
+ }
+
+ stay = (echogets(Line2, echo) != NULL);
+ while ( stay && (Line2[0] == '|') )
+ { for (p=&Line2[2]; (*p) && (isspace(*p)); p++);
+ strcat( Reason, ": " );
+ strcat( Reason, p );
+ Line2[0] = 0;
+ stay = (echogets(Line2, echo) != NULL);
+ }
+ prefetch = 1;
+ strcpy( Line, Line2 );
+ break;
+ case COMPILER_IRIX:
+ Col = 1;
+ prefetch = 0;
+ rv = 0;
+ ok = 0;
+ if ( !strncmp(Line, "cfe: ", 5) )
+ { p = &Line[5];
+ Severity = tolower(*p);
+ p = strchr( &Line[5], ':' );
+ if (p == NULL)
+ { ok = 0;
+ }
+ else
+ {
+ rv = sscanf( p+2, "%[^:]: %u: %[^\n]",
+ FileName, &Row, Reason );
+ if (rv != 3)
+ rv = sscanf( p+2, "%[^,], line %u: %[^\n]",
+ FileName, &Row, Reason );
+ ok = ( rv == 3 );
+ }
+
+ if (ok)
+ { prefetch = 1;
+ stay = (echogets(Line, echo) != NULL);
+ if (Line[0] == ' ')
+ stay = (echogets(Line2, echo) != NULL);
+ if ( (Line2[0] == ' ') &&
+ ( (Line2[1] == '-') || (Line2[1] == '^') ) )
+ { Col = strlen(Line2)-1;
+ prefetch = 0;
+ }
+ else
+ { strcat( Line, "\n" );
+ strcat( Line, Line2 );
+ }
+ }
+ }
+ break;
+ }
+ if (dec_col) Col--;
+ if (dec_row) Row--;
+ if (!ok)
+ {
+ if ( Line[0] == 'g' )
+ p = &Line[1];
+ else
+ p = &Line[0];
+ ok = sscanf( p, "make[%*d]: Entering directory `%[^']",
+ BasePath );
+ if (verbose)
+ printf( "[%u]?%s\n", ok, Line );
+ }
+ else
+ {
+ for (p=Reason; (*p) && (isspace(*p)); p++);
+ if ( BasePath[CWDlen] == 0 )
+ printf( "%s:%u:%u:%c:%s\n", FileName, Row, Col, Severity, p );
+ else
+ {
+ printf( "%s/%s:%u:%u:%c:%s\n", &BasePath[CWDlen+1], FileName, Row, Col, Severity, p );
+ }
+ }
+ if (!prefetch)
+ stay = ( echogets(Line, echo) != NULL );
+ }
+ return 0;
+}
diff --git a/runtime/tools/ccfilter_README.txt b/runtime/tools/ccfilter_README.txt
new file mode 100644
index 000000000..ff658c92f
--- /dev/null
+++ b/runtime/tools/ccfilter_README.txt
@@ -0,0 +1,91 @@
+COMPILING AND INSTALLING:
+=========================
+
+To compile ccfilter, you can just do a plain:
+ cc ccfilter.c -o ccfilter
+Though, it may be wise to have your default compiler defined,
+so you would normally compile it with one of the following:
+ cc -D_GCC ccfilter.c -o ccfilter
+ cc -D_AIX ccfilter.c -o ccfilter
+ cc -D_ATT ccfilter.c -o ccfilter
+ 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).
+The man page ccfilter.1 has to be copied to somewhere in your MANPATH,
+under a man1 directory (i.e: /usr/local/man/man1).
+
+
+SUPPORTED COMPILERS/PORTING NOTES:
+==================================
+
+The supported formats for the different compilers are described below:
+In this section, meta-names are used as place-holders in the line
+formats: <FILE> <ROW> <COL> <SEVERITY> <REASON> <>
+The <> denotes ignored text.
+Line formats are delimited by the ^ (caret) symbol.
+
+0) Special case: "gmake directory change" lines:
+ Lines with a format like:
+ ^gmake[<NUM>]: Entering directory `<DIR>'^
+ are used to follow the directory changes during the make process,
+ providing in the <FILE> part, a relative (if possible) directory
+ path to the erroneous file.
+
+
+1) GCC:
+ Recognized lines are of the format:
+ - ^In file included from <FILE>:<ROW>:^
+ Line following this one is used as <REASON>
+ <SEVERITY> is always 'e' (error)
+ <COL> is always '0'
+
+ - ^<FILE>:<ROW>:<REASON>^
+ <SEVERITY> is always 'e' (error)
+ <COL> is always '0'
+
+
+2) AIX:
+ Recognized lines are of the format:
+ - ^"<FILE>", line <ROW>.<COL>: <> (<SEVERITY>) <REASON>",
+
+
+3) HPUX:
+ Recognized lines are of the format:
+ - ^cc: "<FILE>", line <ROW>: <SEVERITY>: <REASON>^
+ <COL> is always '0'
+
+
+4) SOLARIS:
+ Recognized lines are of the format:
+ - ^"<FILE>", line <ROW>: warning: <REASON>^
+ This assumes <SEVERITY> is "W"
+ <COL> is always '0'
+
+ - ^"<FILE>", line <ROW>: <REASON>^
+ This assumes <SEVERITY> is "E"
+ <COL> is always '0'
+
+
+5) ATT / NCR:
+ Recognized lines are of the format:
+ - ^<SEVERITY> "<FILE>",L<ROW>/C<COL><>:<REASON>^
+ or
+ - ^<SEVERITY> "<FILE>",L<ROW>/C<COL>:<REASON>^
+ Following lines beginning with a pipe (|) are continuation
+ lines, and are therefore appended to the <REASON>
+
+ - ^<SEVERITY> "<FILE>",L<ROW>:<REASON>^
+ <COL> is '0'
+ Following lines beginning with a pipe (|) are continuation
+ lines, and are therefore appended to the <REASON>
+
+
+6) SGI-IRIX:
+ Recognized lines are of the format:
+ - ^cfe: <SEVERITY>: <FILE>: <ROW>: <REASON>^
+ or
+ ^cfe: <SEVERITY>: <FILE>, line <ROW>: <REASON>^
+ Following lines beginning with a dash (-) are "column-bar"
+ that end with a caret in the column of the error. These lines
+ are analyzed to generate the <COL>.
diff --git a/runtime/tools/efm_filter.pl b/runtime/tools/efm_filter.pl
new file mode 100755
index 000000000..1d1a4f303
--- /dev/null
+++ b/runtime/tools/efm_filter.pl
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl
+#
+# This program works as a filter that reads from stdin, copies to
+# stdout *and* creates an error file that can be read by vim.
+#
+# This program has only been tested on SGI, Irix5.3.
+#
+# Written by Ives Aerts in 1996. This little program is not guaranteed
+# to do (or not do) anything at all and can be freely used for
+# whatever purpose you can think of.
+
+$args = @ARGV;
+
+unless ($args == 1) {
+ die("Usage: vimccparse <output filename>\n");
+}
+
+$filename = @ARGV[0];
+open (OUT, ">$filename") || die ("Can't open file: \"$filename\"");
+
+while (<STDIN>) {
+ print;
+ if ( (/"(.*)", line (\d+): (e)rror\((\d+)\):/)
+ || (/"(.*)", line (\d+): (w)arning\((\d+)\):/) ) {
+ $file=$1;
+ $line=$2;
+ $errortype="\u$3";
+ $errornr=$4;
+ chop($errormsg=<STDIN>);
+ $errormsg =~ s/^\s*//;
+ $sourceline=<STDIN>;
+ $column=index(<STDIN>, "^") - 1;
+
+ print OUT "$file>$line:$column:$errortype:$errornr:$errormsg\n";
+ }
+}
+
+close(OUT);
+exit(0);
diff --git a/runtime/tools/efm_filter.txt b/runtime/tools/efm_filter.txt
new file mode 100644
index 000000000..d3f97f45a
--- /dev/null
+++ b/runtime/tools/efm_filter.txt
@@ -0,0 +1,31 @@
+[adopted from a message that Ives posted in the Vim mailing list]
+
+Some compilers produce an error message that cannot be handled with
+'errorformat' in Vim. Following is an example of a Perl script that
+translates one error message into something that Vim understands.
+
+
+The compiler that generates this kind of error messages (4 lines):
+
+"/tmp_mnt/cm/src/apertos/MoU/MetaCore/MetaCore/common/src/MetaCoreImp_M.cc",
+line 50: error(3114):
+ identifier "PRIMITIVE_M" is undefined
+ return(ExecuteCore(PRIMITIVE_M,
+
+You can find a small perl program at the end.
+The way I use it is:
+
+:set errorformat=%f>%l:%c:%t:%n:%m
+:set makeprg=clearmake\ -C\ gnu
+:set shellpipe=2>&1\|\ vimccparse
+
+If somebody thinks this is useful: feel free to do whatever you can think
+of with this code.
+
+-Ives
+____________________________________________________________
+Ives Aerts (SW Developer) Sony Telecom Europe
+ives@sonytel.be St.Stevens Woluwestr. 55
+`Death could create most things, B-1130 Brussels, Belgium
+ except for plumbing.' PHONE : +32 2 724 19 67
+ (Soul Music - T.Pratchett) FAX : +32 2 726 26 86
diff --git a/runtime/tools/efm_perl.pl b/runtime/tools/efm_perl.pl
new file mode 100755
index 000000000..570d6e766
--- /dev/null
+++ b/runtime/tools/efm_perl.pl
@@ -0,0 +1,153 @@
+#!/usr/bin/perl -w
+
+# vimparse.pl - Reformats the error messages of the Perl interpreter for use
+# with the quickfix mode of Vim
+#
+# Copyright (©) 2001 by Jörg 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
+# description and '# ') and enjoy (be sure to adjust the paths to vimparse.pl
+# before):
+#
+# Program is run interactively with 'perl -w':
+#
+# set makeprg=$HOME/bin/vimparse.pl\ %\ $*
+# set errorformat=%f:%l:%m
+#
+# Program is only compiled with 'perl -wc':
+#
+# set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*
+# set errorformat=%f:%l:%m
+#
+# Usage:
+# vimparse.pl [-c] [-f <errorfile>] <programfile> [programargs]
+#
+# -c compile only, don't run (perl -wc)
+# -f write errors to <errorfile>
+#
+# Example usages:
+# * From the command line:
+# vimparse.pl program.pl
+#
+# vimparse.pl -c -f errorfile program.pl
+# Then run vim -q errorfile to edit the errors with Vim.
+#
+# * From Vim:
+# Edit in Vim (and save, if you don't have autowrite on), then
+# type ':mak' or ':mak args' (args being the program arguments)
+# to error check.
+#
+# Version history:
+# 0.2 (04/12/2001):
+# * First public version (sent to Bram)
+# * -c command line option for compiling only
+# * grammatical fix: 'There was 1 error.'
+# * bug fix for multiple arguments
+# * more error checks
+# * documentation (top of file, &usage)
+# * minor code clean ups
+# 0.1 (02/02/2001):
+# * Initial version
+# * Basic functionality
+#
+# Todo:
+# * test on more systems
+# * use portable way to determine the location of perl ('use Config')
+# * include option that shows perldiag messages for each error
+# * allow to pass in program by STDIN
+# * more intuitive behaviour if no error is found (show message)
+#
+# Tested under SunOS 5.7 with Perl 5.6.0. Let me know if it's not working for
+# you.
+
+use strict;
+use Getopt::Std;
+
+use vars qw/$opt_c $opt_f $opt_h/; # needed for Getopt in combination with use strict 'vars'
+
+use constant VERSION => 0.2;
+
+getopts('cf:h');
+
+&usage if $opt_h; # not necessarily needed, but good for further extension
+
+if (defined $opt_f) {
+
+ open FILE, "> $opt_f" or do {
+ warn "Couldn't open $opt_f: $!. Using STDOUT instead.\n";
+ undef $opt_f;
+ };
+
+};
+
+my $handle = (defined $opt_f ? \*FILE : \*STDOUT);
+
+(my $file = shift) or &usage; # display usage if no filename is supplied
+my $args = (@ARGV ? ' ' . join ' ', @ARGV : '');
+
+my @lines = `perl @{[defined $opt_c ? '-c ' : '' ]} -w "$file$args" 2>&1`;
+
+my $errors = 0;
+foreach my $line (@lines) {
+
+ chomp($line);
+ my ($file, $lineno, $message, $rest);
+
+ if ($line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(\.|,\snear\s\".*\")$/) {
+
+ ($message, $file, $lineno, $rest) = ($1, $2, $3, $4);
+ $errors++;
+ $message .= $rest if ($rest =~ s/^,//);
+ print $handle "$file:$lineno:$message\n";
+
+ } else { next };
+
+}
+
+if (defined $opt_f) {
+
+ my $msg;
+ if ($errors == 1) {
+
+ $msg = "There was 1 error.\n";
+
+ } else {
+
+ $msg = "There were $errors errors.\n";
+
+ };
+
+ print STDOUT $msg;
+ close FILE;
+ unlink $opt_f unless $errors;
+
+};
+
+sub usage {
+
+ (local $0 = $0) =~ s/^.*\/([^\/]+)$/$1/; # remove path from name of program
+ print<<EOT;
+Usage:
+ $0 [-c] [-f <errorfile>] <programfile> [programargs]
+
+ -c compile only, don't run (executes 'perl -wc')
+ -f write errors to <errorfile>
+
+Examples:
+ * At the command line:
+ $0 program.pl
+ Displays output on STDOUT.
+
+ $0 -c -f errorfile program.pl
+ Then run 'vim -q errorfile' to edit the errors with Vim.
+
+ * In Vim:
+ Edit in Vim (and save, if you don't have autowrite on), then
+ type ':mak' or ':mak args' (args being the program arguments)
+ to error check.
+EOT
+
+ exit 0;
+
+};
diff --git a/runtime/tools/mve.awk b/runtime/tools/mve.awk
new file mode 100755
index 000000000..396f80677
--- /dev/null
+++ b/runtime/tools/mve.awk
@@ -0,0 +1,23 @@
+#!/usr/bin/nawk -f
+#
+# Change "nawk" to "awk" or "gawk" if you get errors.
+#
+# Make Vim Errors
+# Processes errors from cc for use by Vim's quick fix tools
+# specifically it translates the ---------^ notation to a
+# column number
+#
+BEGIN { FS="[:,]" }
+
+/^cfe/ { file=$3
+ msg=$5
+ split($4,s," ")
+ line=s[2]
+}
+
+# You may have to substitute a tab character for the \t here:
+/^[\t-]*\^/ {
+ p=match($0, ".*\\^" )
+ col=RLENGTH-2
+ printf("%s, line %d, col %d : %s\n", file,line,col,msg)
+}
diff --git a/runtime/tools/mve.txt b/runtime/tools/mve.txt
new file mode 100644
index 000000000..8aa5cf66b
--- /dev/null
+++ b/runtime/tools/mve.txt
@@ -0,0 +1,20 @@
+[ The mve awk script was posted on the vimdev mailing list ]
+
+From: jimmer@barney.mdhc.mdc.com (J. McGlasson)
+Date: Mon, 31 Mar 1997 13:16:49 -0700 (Mar)
+
+My compiler (SGI MIPSpro C compiler - IRIX 6.4) works like this.
+I have written a script mve (make vim errors), through which I pipe my make
+output, which translates output of the following form:
+
+cfe: Error: syntax.c, line 4: Syntax Error
+ int i[12;
+ ------------^
+
+into:
+
+ cl.c, line 4, col 12 : Syntax Error
+
+(in vim notation: %f, line %l, col %c : %m)
+
+You might be able to tailor this for your compiler's output.
diff --git a/runtime/tools/pltags.pl b/runtime/tools/pltags.pl
new file mode 100755
index 000000000..7a74682b8
--- /dev/null
+++ b/runtime/tools/pltags.pl
@@ -0,0 +1,300 @@
+#!/usr/bin/env perl
+
+# pltags - create a tags file for Perl code, for use by vi(m)
+#
+# Distributed with Vim <http://www.vim.org/>, latest version always available
+# at <http://www.mscha.com/mscha.html?pltags#tools>
+#
+# Version 2.3, 28 February 2002
+#
+# Written by Michael Schaap <pltags@mscha.com>. Suggestions for improvement
+# are very welcome!
+#
+# This script will not work with Perl 4 or below!
+#
+# Revision history:
+# 1.0 1997? Original version, quickly hacked together
+# 2.0 1999? Completely rewritten, better structured and documented,
+# support for variables, packages, Exuberant Ctags extensions
+# 2.1 Jun 2000 Fixed critical bug (typo in comment) ;-)
+# Support multiple level packages (e.g. Archive::Zip::Member)
+# 2.2 Jul 2001 'Glob' wildcards - especially useful under Windows
+# (thanks to Serge Sivkov and Jason King)
+# Bug fix: reset package name for each file
+# 2.21 Jul 2001 Oops... bug in variable detection (/local../ -> /^local.../)
+# 2.3 Feb 2002 Support variables declared with "our"
+# (thanks to Lutz Mende)
+
+# Complain about undeclared variables
+use strict;
+
+# Used modules
+use Getopt::Long;
+
+# Options with their defaults
+my $do_subs = 1; # --subs, --nosubs include subs in tags file?
+my $do_vars = 1; # --vars, --novars include variables in tags file?
+my $do_pkgs = 1; # --pkgs, --nopkgs include packages in tags file?
+my $do_exts = 1; # --extensions, --noextensions
+ # include Exuberant Ctags extensions
+
+# Global variables
+my $VERSION = "2.21"; # pltags version
+my $status = 0; # GetOptions return value
+my $file = ""; # File being processed
+my @tags = (); # List of produced tags
+my $is_pkg = 0; # Are we tagging a package?
+my $has_subs = 0; # Has this file any subs yet?
+my $package_name = ""; # Name of current package
+my $var_continues = 0; # Variable declaration continues on last line
+my $line = ""; # Current line in file
+my $stmt = ""; # Current Perl statement
+my @vars = (); # List of variables in declaration
+my $var = ""; # Variable in declaration
+my $tagline = ""; # Tag file line
+
+# Create a tag file line and push it on the list of found tags
+sub MakeTag($$$$$)
+{
+ my ($tag, # Tag name
+ $type, # Type of tag
+ $is_static, # Is this a static tag?
+ $file, # File in which tag appears
+ $line) = @_; # Line in which tag appears
+
+ my $tagline = ""; # Created tag line
+
+ # Only process tag if not empty
+ if ($tag)
+ {
+ # Get rid of \n, and escape / and \ in line
+ chomp $line;
+ $line =~ s/\\/\\\\/g;
+ $line =~ s/\//\\\//g;
+
+ # Create a tag line
+ $tagline = "$tag\t$file\t/^$line\$/";
+
+ # If we're told to do so, add extensions
+ if ($do_exts)
+ {
+ $tagline .= ";\"\t$type"
+ . ($is_static ? "\tfile:" : "")
+ . ($package_name ? "\tclass:$package_name" : "");
+ }
+
+ # Push it on the stack
+ push (@tags, $tagline);
+ }
+}
+
+# Parse package name from statement
+sub PackageName($)
+{
+ my ($stmt) = @_; # Statement
+
+ # Look for the argument to "package". Return it if found, else return ""
+ if ($stmt =~ /^package\s+([\w:]+)/)
+ {
+ my $pkgname = $1;
+
+ # Remove any parent package name(s)
+ $pkgname =~ s/.*://;
+ return $pkgname;
+ }
+ else
+ {
+ return "";
+ }
+}
+
+# Parse sub name from statement
+sub SubName($)
+{
+ my ($stmt) = @_; # Statement
+
+ # Look for the argument to "sub". Return it if found, else return ""
+ if ($stmt =~ /^sub\s+([\w:]+)/)
+ {
+ my $subname = $1;
+
+ # Remove any parent package name(s)
+ $subname =~ s/.*://;
+ return $subname;
+ }
+ else
+ {
+ return "";
+ }
+}
+
+# Parse all variable names from statement
+sub VarNames($)
+{
+ my ($stmt) = @_;
+
+ # Remove my or local from statement, if present
+ $stmt =~ s/^(my|our|local)\s+//;
+
+ # Remove any assignment piece
+ $stmt =~ s/\s*=.*//;
+
+ # Now find all variable names, i.e. "words" preceded by $, @ or %
+ @vars = ($stmt =~ /[\$\@\%]([\w:]+)\b/g);
+
+ # Remove any parent package name(s)
+ map(s/.*://, @vars);
+
+ return (@vars);
+}
+
+############### Start ###############
+
+print "\npltags $VERSION by Michael Schaap <mscha\@mscha.com>\n\n";
+
+# Get options
+$status = GetOptions("subs!" => \$do_subs,
+ "vars!" => \$do_vars,
+ "pkgs!" => \$do_pkgs,
+ "extensions!" => \$do_exts);
+
+# Usage if error in options or no arguments given
+unless ($status && @ARGV)
+{
+ print "\n" unless ($status);
+ print " Usage: $0 [options] filename ...\n\n";
+ print " Where options can be:\n";
+ print " --subs (--nosubs) (don't) include sub declarations in tag file\n";
+ print " --vars (--novars) (don't) include variable declarations in tag file\n";
+ print " --pkgs (--nopkgs) (don't) include package declarations in tag file\n";
+ print " --extensions (--noextensions)\n";
+ print " (don't) include Exuberant Ctags / Vim style\n";
+ print " extensions in tag file\n\n";
+ print " Default options: ";
+ print ($do_subs ? "--subs " : "--nosubs ");
+ print ($do_vars ? "--vars " : "--novars ");
+ print ($do_pkgs ? "--pkgs " : "--nopkgs ");
+ print ($do_exts ? "--extensions\n\n" : "--noextensions\n\n");
+ print " Example: $0 *.pl *.pm ../shared/*.pm\n\n";
+ exit;
+}
+
+# Loop through files on command line - 'glob' any wildcards, since Windows
+# doesn't do this for us
+foreach $file (map { glob } @ARGV)
+{
+ # Skip if this is not a file we can open. Also skip tags files and backup
+ # files
+ next unless ((-f $file) && (-r $file) && ($file !~ /tags$/)
+ && ($file !~ /~$/));
+
+ print "Tagging file $file...\n";
+
+ $is_pkg = 0;
+ $package_name = "";
+ $has_subs = 0;
+ $var_continues = 0;
+
+ open (IN, $file) or die "Can't open file '$file': $!";
+
+ # Loop through file
+ foreach $line (<IN>)
+ {
+ # Statement is line with comments and whitespace trimmed
+ ($stmt = $line) =~ s/#.*//;
+ $stmt =~ s/^\s*//;
+ $stmt =~ s/\s*$//;
+
+ # Nothing left? Never mind.
+ next unless ($stmt);
+
+ # This is a variable declaration if one was started on the previous
+ # line, or if this line starts with my or local
+ if ($var_continues or ($stmt =~/^my\b/)
+ or ($stmt =~/^our\b/) or ($stmt =~/^local\b/))
+ {
+ # The declaration continues if the line does not end with ;
+ $var_continues = ($stmt !~ /;$/);
+
+ # Loop through all variable names in the declaration
+ foreach $var (VarNames($stmt))
+ {
+ # Make a tag for this variable unless we're told not to. We
+ # assume that a variable is always static, unless it appears
+ # in a package before any sub. (Not necessarily true, but
+ # it's ok for most purposes and Vim works fine even if it is
+ # incorrect)
+ if ($do_vars)
+ {
+ MakeTag($var, "v", (!$is_pkg or $has_subs), $file, $line);
+ }
+ }
+ }
+
+ # This is a package declaration if the line starts with package
+ elsif ($stmt =~/^package\b/)
+ {
+ # Get name of the package
+ $package_name = PackageName($stmt);
+
+ if ($package_name)
+ {
+ # Remember that we're doing a package
+ $is_pkg = 1;
+
+ # Make a tag for this package unless we're told not to. A
+ # package is never static.
+ if ($do_pkgs)
+ {
+ MakeTag($package_name, "p", 0, $file, $line);
+ }
+ }
+ }
+
+ # This is a sub declaration if the line starts with sub
+ elsif ($stmt =~/^sub\b/)
+ {
+ # Remember that this file has subs
+ $has_subs = 1;
+
+ # Make a tag for this sub unless we're told not to. We assume
+ # that a sub is static, unless it appears in a package. (Not
+ # necessarily true, but it's ok for most purposes and Vim works
+ # fine even if it is incorrect)
+ if ($do_subs)
+ {
+ MakeTag(SubName($stmt), "s", (!$is_pkg), $file, $line);
+ }
+ }
+ }
+ close (IN);
+}
+
+# Do we have any tags? If so, write them to the tags file
+if (@tags)
+{
+ # Add some tag file extensions if we're told to
+ if ($do_exts)
+ {
+ push (@tags, "!_TAG_FILE_FORMAT\t2\t/extended format/");
+ push (@tags, "!_TAG_FILE_SORTED\t1\t/0=unsorted, 1=sorted/");
+ push (@tags, "!_TAG_PROGRAM_AUTHOR\tMichael Schaap\t/mscha\@mscha.com/");
+ push (@tags, "!_TAG_PROGRAM_NAME\tpltags\t//");
+ push (@tags, "!_TAG_PROGRAM_VERSION\t$VERSION\t/supports multiple tags and extended format/");
+ }
+
+ print "\nWriting tags file.\n";
+
+ open (OUT, ">tags") or die "Can't open tags file: $!";
+
+ foreach $tagline (sort @tags)
+ {
+ print OUT "$tagline\n";
+ }
+
+ close (OUT);
+}
+else
+{
+ print "\nNo tags found.\n";
+}
diff --git a/runtime/tools/ref b/runtime/tools/ref
new file mode 100755
index 000000000..77bfc805e
--- /dev/null
+++ b/runtime/tools/ref
@@ -0,0 +1,11 @@
+#!/bin/sh
+#
+# ref - Check spelling of the arguments
+#
+# Usage: ref word ..
+#
+# can be used for the K command of Vim
+#
+spell <<EOF
+$*
+EOF
diff --git a/runtime/tools/shtags.1 b/runtime/tools/shtags.1
new file mode 100644
index 000000000..314df883c
--- /dev/null
+++ b/runtime/tools/shtags.1
@@ -0,0 +1,61 @@
+.TH shtags 1 "local Utilities"
+.SH NAME
+shtags \- Create tags for shell scripts
+.SH SYNOPSIS
+.B shtags
+[\fI-mvw\fP] [\fI-t <file>\fP] [\fI-s <shell>\fP] <files>
+.SH DESCRIPTION
+\fBshtags\fP creates a \fBvi(1)\fP tags file for shell scripts - which
+essentially turns your code into a hypertext document. \fBshtags\fP
+attempts to create tags for all function and variable definitions,
+although this is a little difficult, because in most shell languages,
+variables don't need to be explicitly defined, and as such there is
+often no distinct "variable definition". If this is the case,
+\fBshtags\fP simply creates a tag for the first instance of a variable
+which is being set in a simple way, ie: \fIset x = 5\fP.
+.SH OPTIONS
+.IP "\fB-t <file>\fP"
+Name of tags file to create. (default is 'tags')
+.IP "\fB-s <shell>\fP"
+The name of the shell used by the script(s). By default,
+\fBshtags\fP tries to work out which is the appropriate shell for each
+file individually by looking at the first line of each file. This wont
+work however, if the script starts as a bourne shell script and tries
+to be clever about starting the shell it really wants.
+.b
+Currently supported shells are:
+.RS
+.IP \fBsh\fP
+Bourne Shell
+.IP \fBperl\fP
+Perl (versions 4 and 5)
+.IP \fBksh\fP
+Korn Shell
+.IP \fBtclsh\fP
+The TCL shell
+.IP \fBwish\fP
+The TK Windowing shell (same as tclsh)
+.RE
+
+.IP \fB-v\fP
+Include variable definitions (variables mentioned at the start of a line)
+.IP \fB-V\fP
+Print version information.
+.IP \fB-w\fP
+Suppress "duplicate tag" warning messages.
+.IP \fB-x\fP
+Explicitly create a new tags file. Normally new tags are merged with
+the old tags file.
+.PP
+\fBshtags\fP scans the specified files for subroutines and possibly
+variable definitions, and creates a \fBvi\fP style tags file.
+.SH FILES
+.IP \fBtags\fP
+A tags file contains a sorted list of tags, one tag per line. The
+format is the same as that used by \fBvi\fP(1)
+.SH AUTHOR
+Stephen Riehm
+.br
+sr@pc-plus.de
+.SH "SEE ALSO"
+ctags(1), etags(1), perl(1), tclsh(1), wish(1), sh(1), ksh(1).
diff --git a/runtime/tools/shtags.pl b/runtime/tools/shtags.pl
new file mode 100755
index 000000000..48dcdc747
--- /dev/null
+++ b/runtime/tools/shtags.pl
@@ -0,0 +1,144 @@
+#!/usr/bin/env perl
+#
+# shtags: create a tags file for perl scripts
+#
+# Author: Stephen Riehm
+# Last Changed: 96/11/27 19:46:06
+#
+# "@(#) shtags 1.1 by S. Riehm"
+#
+
+# obvious... :-)
+sub usage
+ {
+ print <<_EOUSAGE_ ;
+USAGE: $program [-kvwVx] [-t <file>] <files>
+ -t <file> Name of tags file to create. (default is 'tags')
+ -s <shell> Name of the shell language in the script
+ -v Include variable definitions.
+ (variables mentioned at the start of a line)
+ -V Print version information.
+ -w Suppress "duplicate tag" warnings.
+ -x Explicitly create a new tags file. Normally tags are merged.
+ <files> List of files to scan for tags.
+_EOUSAGE_
+ exit 0
+ }
+
+sub version
+{
+ #
+ # Version information
+ #
+ @id = split( ', ', 'scripts/bin/shtags, /usr/local/, LOCAL_SCRIPTS, 1.1, 96/11/27, 19:46:06' );
+ $id[0] =~ s,.*/,,;
+ print <<_EOVERS;
+$id[0]: $id[3]
+Last Modified: @id[4,5]
+Component: $id[1]
+Release: $id[2]
+_EOVERS
+ exit( 1 );
+}
+
+#
+# initialisations
+#
+($program = $0) =~ s,.*/,,;
+require 'getopts.pl';
+
+#
+# parse command line
+#
+&Getopts( "t:s:vVwx" ) || &usage();
+$tags_file = $opt_t || 'tags';
+$explicit = $opt_x;
+$variable_tags = $opt_v;
+$allow_warnings = ! $opt_w;
+&version if $opt_V;
+&usage() unless @ARGV != 0;
+
+# slurp up the existing tags. Some will be replaced, the ones that aren't
+# will be re-written exactly as they were read
+if( ! $explicit && open( TAGS, "< $tags_file" ) )
+ {
+ while( <TAGS> )
+ {
+ /^\S+/;
+ $tags{$&} = $_;
+ }
+ close( TAGS );
+ }
+
+#
+# for each line of every file listed on the command line, look for a
+# 'sub' definition, or, if variables are wanted aswell, look for a
+# variable definition at the start of a line
+#
+while( <> )
+ {
+ &check_shell($_), ( $old_file = $ARGV ) if $ARGV ne $old_file;
+ next unless $shell;
+ if( $shell eq "sh" )
+ {
+ next unless /^\s*(((\w+)))\s*\(\s*\)/
+ || ( $variable_tags && /^(((\w+)=))/ );
+ $match = $3;
+ }
+ if( $shell eq "ksh" )
+ {
+ # ksh
+ next unless /^\s*function\s+(((\w+)))/
+ || ( $variable_tags && /^(((\w+)=))/ );
+ $match = $3;
+ }
+ if( $shell eq "perl" )
+ {
+ # perl
+ next unless /^\s*sub\s+(\w+('|::))?(\w+)/
+ || /^\s*(((\w+))):/
+ || ( $variable_tags && /^(([(\s]*[\$\@\%]{1}(\w+).*=))/ );
+ $match = $3;
+ }
+ if( $shell eq "tcl" )
+ {
+ next unless /^\s*proc\s+(((\S+)))/
+ || ( $variable_tags && /^\s*set\s+(((\w+)\s))/ );
+ $match = $3;
+ }
+ chop;
+ warn "$match - duplicate ignored\n"
+ if ( $new{$match}++
+ || !( $tags{$match} = sprintf( "%s\t%s\t?^%s\$?\n", $match, $ARGV, $_ ) ) )
+ && $allow_warnings;
+ }
+
+# write the new tags to the tags file - note that the whole file is rewritten
+open( TAGS, "> $tags_file" );
+foreach( sort( keys %tags ) )
+ {
+ print TAGS "$tags{$_}";
+ }
+close( TAGS );
+
+sub check_shell
+ {
+ local( $_ ) = @_;
+ # read the first line of a script, and work out which shell it is,
+ # unless a shell was specified on the command line
+ #
+ # This routine can't handle clever scripts which start sh and then
+ # use sh to start the shell they really wanted.
+ if( $opt_s )
+ {
+ $shell = $opt_s;
+ }
+ else
+ {
+ $shell = "sh" if /^:$/ || /^#!.*\/bin\/sh/;
+ $shell = "ksh" if /^#!.*\/ksh/;
+ $shell = "perl" if /^#!.*\/perl/;
+ $shell = "tcl" if /^#!.*\/wish/;
+ printf "Using $shell for $ARGV\n";
+ }
+ }
diff --git a/runtime/tools/tcltags b/runtime/tools/tcltags
new file mode 100755
index 000000000..952415279
--- /dev/null
+++ b/runtime/tools/tcltags
@@ -0,0 +1,159 @@
+#!/bin/sh
+# vim:ts=4:
+# Generates a tag file for TCL code. Slow, but gets the job done.
+#
+# Written by Darren Hiebert <darren@hiebert.com>
+
+program_name=`basename $0`
+program_version="0.3"
+program_author="Darren Hiebert"
+author_email="darren@hiebert.com"
+tmp_tagfile=/tmp/${program_name}.$$
+
+usage="\
+Usage: $program_name [-au] [-{f|o} tagfile] [--format=n] file(s)
+ -a append to current tag file
+ -f tagfile specify output tag file name (default=tags)
+ -o alternative for -f
+ -u unsorted
+ --format=n specify tag file format (default=2)
+ --help print this help message
+"
+
+# defaults
+#
+append=0
+format=2
+sorted=1
+tagfile=tags
+filelist=
+
+# read options
+#
+getparam()
+{
+ if [ -n "$1" ]; then
+ # set variable to word passed in
+ echo "$2='$1'; opt="
+ else
+ # set variable to next word on command line
+ echo "$2="'$1'"; shift"
+ fi
+}
+
+finished=0
+while [ $# -gt 0 -a $finished -eq 0 ]
+do
+ case "$1" in
+ --*)
+ opt=`echo "$1" | cut -c 3-`
+ shift
+ opt_name=`echo "$opt" | awk -F= '{print $1}'`
+ opt_value=`echo "$opt" | awk -F= '{print $2}'`
+ case "$opt_name" in
+ format) case "$opt_value" in
+ 1|2) format=$opt_value;;
+ *) echo "--$opt: unsupported value" >&2; exit 1;;
+ esac
+ ;;
+ help) echo "$usage"; exit 0;;
+ *) echo "$opt_name: unsupported option" >&2; exit 1;;
+ esac
+ ;;
+ -*)
+ # chop off leading '-'
+ opt=`echo "$1" | cut -c 2-`
+ shift
+ while [ -n "$opt" ]
+ do
+ opt_char=`echo "$opt" | cut -c 1`
+ opt=`echo "$opt" | cut -c 2-`
+ case "$opt_char" in
+ a) append=1;;
+ u) sorted=0;;
+ o|f) eval `getparam "$opt" tagfile`;;
+ *) echo "$opt: unsupported option" >&2; exit 1;;
+ esac
+ done
+ ;;
+ *) filelist="$*"; break;;
+ esac
+done
+
+if [ -z "$filelist" ] ;then
+ echo "$usage" >&2; exit 1
+fi
+
+# awk program for generating tags
+#
+ext_flags=""
+ttype=""
+if [ $format -eq 2 ] ;then
+ ext_flags=';\" %s'
+ ttype=", type"
+fi
+awkprg='
+function trim_comment(string) {
+ comment = index(string, "#")
+ if (comment != 0)
+ string = substr(string, 0, comment-1)
+ return string
+}
+function maketag(tagname, pattern, type, line_end) {
+ gsub(/\\/, "\\\\", pattern)
+ gsub(/\//, "\\/", pattern)
+ if (line_end)
+ terminator="$"
+ else
+ terminator=""
+ printf("%s\t%s\t/^%s%s/'"$ext_flags"'\n", \
+ tagname, FILENAME, pattern, terminator'"$ttype"')
+}
+$1 == "proc" && $3 ~ /^{/ {
+ pattern = substr($0, 0, index($0, "{"))
+ maketag($2, pattern, "f", 0)
+}
+/^set[ \t]/ && $2 !~ /\(/ {
+ pattern = substr($0, 0, index($0, $2) + length($2))
+ maketag($2, pattern, "v", 0)
+}
+/^array[ \t]*set[ \t]/ && $3 !~ /\(/ {
+ pattern = substr($0, 0, index($0, $3) + length($3))
+ maketag($3, pattern, "v", 0)
+}'
+
+# add or correct the pseudo tags
+#
+if [ "$tagfile" != "-" ] ;then
+ if [ $append -eq 1 ]; then
+ # ensure existing sort flag is correct
+ sed -e "/^!_TAG_FILE_SORTED/s/ [01] / $sorted /" \
+ -e "/^!_TAG_FILE_FORMAT/s/ 1 / $format /" \
+ $tagfile > $tmp_tagfile
+ else
+ echo -ne "\
+!_TAG_FILE_FORMAT $format /extended format; --format=1 will not append ;\" to lines/
+!_TAG_FILE_SORTED $sorted /0=unsorted, 1=sorted/
+!_TAG_PROGRAM_AUTHOR $program_author /$author_email/
+!_TAG_PROGRAM_NAME $program_name //
+!_TAG_PROGRAM_VERSION $program_version //
+" > $tmp_tagfile
+ fi
+fi
+
+# generate tags
+#
+awk "$awkprg" $filelist >> $tmp_tagfile
+
+if [ $sorted -eq 1 ] ;then
+ sort -u -o $tmp_tagfile $tmp_tagfile
+fi
+
+if [ "$tagfile" = '-' ] ;then
+ cat $tmp_tagfile
+else
+ cp $tmp_tagfile $tagfile
+fi
+rm $tmp_tagfile
+
+exit 0
diff --git a/runtime/tools/vim132 b/runtime/tools/vim132
new file mode 100755
index 000000000..29ea4ce1f
--- /dev/null
+++ b/runtime/tools/vim132
@@ -0,0 +1,13 @@
+#!/bin/csh
+#
+# Shell script for use with UNIX
+# Starts up Vim with the terminal in 132 column mode
+# Only works on VT-100 terminals and lookalikes
+# You need to have a termcap entry "vt100-w". Same as vt100 but 132 columns.
+#
+set oldterm=$term
+echo "[?3h"
+setenv TERM vt100-w
+vim $*
+set term=$oldterm
+echo "[?3l"
diff --git a/runtime/tools/vim_vs_net.cmd b/runtime/tools/vim_vs_net.cmd
new file mode 100644
index 000000000..6307d95a5
--- /dev/null
+++ b/runtime/tools/vim_vs_net.cmd
@@ -0,0 +1,24 @@
+@rem
+@rem To use this with Visual Studio .Net
+@rem Tools->External Tools...
+@rem Add
+@rem Title - Vim
+@rem Command - d:\files\util\vim_vs_net.cmd
+@rem Arguments - +$(CurLine) $(ItemPath)
+@rem Init Dir - Empty
+@rem
+@rem Coutesy 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
+@rem --servername VS_NET
+@rem This will create a new instance of vim called VS_NET. So if you
+open
+@rem multiple files from VS, they will use the same instance of Vim.
+@rem This allows you to have multiple copies of Vim running, but you can
+@rem control which one has VS files in it.
+@rem
+start /b gvim.exe --servername VS_NET --remote-silent "%1" "%2"
diff --git a/runtime/tools/vimm b/runtime/tools/vimm
new file mode 100755
index 000000000..042c4a022
--- /dev/null
+++ b/runtime/tools/vimm
@@ -0,0 +1,6 @@
+#!/bin/sh
+# enable DEC locator input model on remote terminal
+echo "\033[1;2'z\033[1;3'{\c"
+vim "$@"
+# disable DEC locator input model on remote terminal
+echo "\033[2;4'{\033[0'z\c"
diff --git a/runtime/tools/vimspell.sh b/runtime/tools/vimspell.sh
new file mode 100755
index 000000000..42072222c
--- /dev/null
+++ b/runtime/tools/vimspell.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Spell a file & generate the syntax statements necessary to
+# highlight in vim. Based on a program from Krishna Gadepalli
+# <krishna@stdavids.picker.com>.
+#
+# I use the following mappings (in .vimrc):
+#
+# noremap <F8> :so `vimspell.sh %`<CR><CR>
+# noremap <F7> :syntax clear SpellErrors<CR>
+#
+# Neil Schemenauer <nascheme@ucalgary.ca>
+# March 1999
+
+INFILE=$1
+OUTFILE=/tmp/vimspell.$$
+# if you have "tempfile", use the following line
+#OUTFILE=`tempfile`
+
+#
+# local spellings
+#
+LOCAL_DICT=${LOCAL_DICT-$HOME/local/lib/local_dict}
+
+if [ -f $LOCAL_DICT ]
+then
+ SPELL_ARGS="+$LOCAL_DICT"
+fi
+
+spell $SPELL_ARGS $INFILE | sort -u |
+awk '
+ {
+ printf "syntax match SpellErrors \"\\<%s\\>\"\n", $0 ;
+ }
+
+END {
+ printf "highlight link SpellErrors ErrorMsg\n\n" ;
+ }
+' > $OUTFILE
+echo "!rm $OUTFILE" >> $OUTFILE
+echo $OUTFILE
diff --git a/runtime/tools/vimspell.txt b/runtime/tools/vimspell.txt
new file mode 100644
index 000000000..2842af7bd
--- /dev/null
+++ b/runtime/tools/vimspell.txt
@@ -0,0 +1,22 @@
+vimspell.sh
+===========
+
+This is a simple script to spell check a file and generate the syntax
+statements necessary to highlight the errors in vim. It is based on a
+similar program by Krishna Gadepalli <krishna@stdavids.picker.com>.
+
+To use this script, first place it in a directory in your path. Next,
+you should add some convenient key mappings. I use the following (in
+.vimrc):
+
+ noremap <F8> :so `vimspell.sh %`<CR><CR>
+ noremap <F7> :syntax clear SpellErrors<CR>
+
+This program requires the old Unix "spell" command. On my Debian
+system, "spell" is a wrapper around "ispell". For better security,
+you should uncomment the line in the script that uses "tempfile" to
+create a temporary file. As all systems don't have "tempfile" the
+insecure "pid method" is used.
+
+
+ Neil Schemenauer <nascheme@ucalgary.ca>
diff --git a/runtime/tools/xcmdsrv_client.c b/runtime/tools/xcmdsrv_client.c
new file mode 100644
index 000000000..a0e6211a1
--- /dev/null
+++ b/runtime/tools/xcmdsrv_client.c
@@ -0,0 +1,584 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ * X-Windows communication by Flemming Madsen
+ *
+ * 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.
+ *
+ * Client for sending commands to an '+xcmdsrv' enabled vim.
+ * This is mostly a de-Vimified version of if_xcmdsrv.c in vim.
+ * See that file for a protocol specification.
+ *
+ * You can make a test program with a Makefile like:
+ * xcmdsrv_client: xcmdsrv_client.c
+ * cc -o $@ -g -DMAIN -I/usr/X11R6/include -L/usr/X11R6/lib $< -lX11
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_SELECT
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#else
+#include <sys/poll.h>
+#endif
+#include <X11/Intrinsic.h>
+#include <X11/Xatom.h>
+
+#define __ARGS(x) x
+
+/* Client API */
+char * sendToVim __ARGS((Display *dpy, char *name, char *cmd, int asKeys, int *code));
+
+#ifdef MAIN
+/* A sample program */
+main(int argc, char **argv)
+{
+ char *res;
+ int code;
+
+ if (argc == 4)
+ {
+ if ((res = sendToVim(XOpenDisplay(NULL), argv[2], argv[3],
+ argv[1][0] != 'e', &code)) != NULL)
+ {
+ if (code)
+ printf("Error code returned: %d\n", code);
+ puts(res);
+ }
+ exit(0);
+ }
+ else
+ fprintf(stderr, "Usage: %s {k|e} <server> <command>", argv[0]);
+
+ exit(1);
+}
+#endif
+
+/*
+ * Maximum size property that can be read at one time by
+ * this module:
+ */
+
+#define MAX_PROP_WORDS 100000
+
+/*
+ * Forward declarations for procedures defined later in this file:
+ */
+
+static int x_error_check __ARGS((Display *dpy, XErrorEvent *error_event));
+static int AppendPropCarefully __ARGS((Display *display,
+ Window window, Atom property, char *value, int length));
+static Window LookupName __ARGS((Display *dpy, char *name,
+ int delete, char **loose));
+static int SendInit __ARGS((Display *dpy));
+static char *SendEventProc __ARGS((Display *dpy, XEvent *eventPtr,
+ int expect, int *code));
+static int IsSerialName __ARGS((char *name));
+
+/* Private variables */
+static Atom registryProperty = None;
+static Atom commProperty = None;
+static Window commWindow = None;
+static int got_x_error = FALSE;
+
+
+/*
+ * sendToVim --
+ * Send to an instance of Vim via the X display.
+ *
+ * Results:
+ * A string with the result or NULL. Caller must free if non-NULL
+ */
+
+ char *
+sendToVim(dpy, name, cmd, asKeys, code)
+ Display *dpy; /* Where to send. */
+ char *name; /* Where to send. */
+ char *cmd; /* What to send. */
+ int asKeys; /* Interpret as keystrokes or expr ? */
+ int *code; /* Return code. 0 => OK */
+{
+ Window w;
+ Atom *plist;
+ XErrorHandler old_handler;
+#define STATIC_SPACE 500
+ char *property, staticSpace[STATIC_SPACE];
+ int length;
+ int res;
+ static int serial = 0; /* Running count of sent commands.
+ * Used to give each command a
+ * different serial number. */
+ XEvent event;
+ XPropertyEvent *e = (XPropertyEvent *)&event;
+ time_t start;
+ char *result;
+ char *loosename = NULL;
+
+ if (commProperty == None && dpy != NULL)
+ {
+ if (SendInit(dpy) < 0)
+ return NULL;
+ }
+
+ /*
+ * Bind the server name to a communication window.
+ *
+ * Find any survivor with a serialno attached to the name if the
+ * original registrant of the wanted name is no longer present.
+ *
+ * Delete any lingering names from dead editors.
+ */
+
+ old_handler = XSetErrorHandler(x_error_check);
+ while (TRUE)
+ {
+ got_x_error = FALSE;
+ w = LookupName(dpy, name, 0, &loosename);
+ /* Check that the window is hot */
+ if (w != None)
+ {
+ plist = XListProperties(dpy, w, &res);
+ XSync(dpy, False);
+ if (plist != NULL)
+ XFree(plist);
+ if (got_x_error)
+ {
+ LookupName(dpy, loosename ? loosename : name,
+ /*DELETE=*/TRUE, NULL);
+ continue;
+ }
+ }
+ break;
+ }
+ if (w == None)
+ {
+ fprintf(stderr, "no registered server named %s\n", name);
+ return NULL;
+ }
+ else if (loosename != NULL)
+ name = loosename;
+
+ /*
+ * Send the command to target interpreter by appending it to the
+ * comm window in the communication window.
+ */
+
+ length = strlen(name) + strlen(cmd) + 10;
+ if (length <= STATIC_SPACE)
+ property = staticSpace;
+ else
+ property = (char *) malloc((unsigned) length);
+
+ serial++;
+ sprintf(property, "%c%c%c-n %s%c-s %s",
+ 0, asKeys ? 'k' : 'c', 0, name, 0, cmd);
+ if (name == loosename)
+ free(loosename);
+ if (!asKeys)
+ {
+ /* Add a back reference to our comm window */
+ sprintf(property + length, "%c-r %x %d", 0, (uint) commWindow, serial);
+ length += strlen(property + length + 1) + 1;
+ }
+
+ res = AppendPropCarefully(dpy, w, commProperty, property, length + 1);
+ if (length > STATIC_SPACE)
+ free(property);
+ if (res < 0)
+ {
+ fprintf(stderr, "Failed to send command to the destination program\n");
+ return NULL;
+ }
+
+ if (asKeys) /* There is no answer for this - Keys are sent async */
+ return NULL;
+
+
+ /*
+ * Enter a loop processing X events & pooling chars until we see the result
+ */
+
+#define SEND_MSEC_POLL 50
+
+ time(&start);
+ while ((time((time_t *) 0) - start) < 60)
+ {
+ /* Look out for the answer */
+#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)
+ break;
+#endif
+ while (XEventsQueued(dpy, QueuedAfterReading) > 0)
+ {
+ XNextEvent(dpy, &event);
+ if (event.type == PropertyNotify && e->window == commWindow)
+ if ((result = SendEventProc(dpy, &event, serial, code)) != NULL)
+ return result;
+ }
+ }
+ return NULL;
+}
+
+
+/*
+ * SendInit --
+ * This procedure is called to initialize the
+ * communication channels for sending commands and
+ * receiving results.
+ */
+
+ static int
+SendInit(dpy)
+ Display *dpy;
+{
+ XErrorHandler old_handler;
+
+ /*
+ * Create the window used for communication, and set up an
+ * event handler for it.
+ */
+ old_handler = XSetErrorHandler(x_error_check);
+ got_x_error = FALSE;
+
+ commProperty = XInternAtom(dpy, "Comm", False);
+ /* Change this back to "InterpRegistry" to talk to tk processes */
+ registryProperty = XInternAtom(dpy, "VimRegistry", False);
+
+ if (commWindow == None)
+ {
+ commWindow =
+ XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy),
+ getpid(), 0, 10, 10, 0,
+ WhitePixel(dpy, DefaultScreen(dpy)),
+ WhitePixel(dpy, DefaultScreen(dpy)));
+ XSelectInput(dpy, commWindow, PropertyChangeMask);
+ }
+
+ XSync(dpy, False);
+ (void) XSetErrorHandler(old_handler);
+
+ return got_x_error ? -1 : 0;
+}
+
+/*
+ * LookupName --
+ * Given an interpreter name, see if the name exists in
+ * the interpreter registry for a particular display.
+ *
+ * Results:
+ * If the given name is registered, return the ID of
+ * the window associated with the name. If the name
+ * isn't registered, then return 0.
+ */
+
+ static Window
+LookupName(dpy, name, delete, loose)
+ Display *dpy; /* Display whose registry to check. */
+ char *name; /* Name of an interpreter. */
+ int delete; /* If non-zero, delete info about name. */
+ char **loose; /* Do another search matching -999 if not found
+ Return result here if a match is found */
+{
+ unsigned char *regProp, *entry;
+ unsigned char *p;
+ int result, actualFormat;
+ unsigned long numItems, bytesAfter;
+ Atom actualType;
+ Window returnValue;
+
+ /*
+ * Read the registry property.
+ */
+
+ regProp = NULL;
+ result = XGetWindowProperty(dpy, RootWindow(dpy, 0), registryProperty, 0,
+ MAX_PROP_WORDS, False, XA_STRING, &actualType,
+ &actualFormat, &numItems, &bytesAfter,
+ &regProp);
+
+ if (actualType == None)
+ return 0;
+
+ /*
+ * If the property is improperly formed, then delete it.
+ */
+
+ if ((result != Success) || (actualFormat != 8) || (actualType != XA_STRING))
+ {
+ if (regProp != NULL)
+ XFree(regProp);
+ XDeleteProperty(dpy, RootWindow(dpy, 0), registryProperty);
+ return 0;
+ }
+
+ /*
+ * Scan the property for the desired name.
+ */
+
+ returnValue = None;
+ entry = NULL; /* Not needed, but eliminates compiler warning. */
+ for (p = regProp; (p - regProp) < numItems; )
+ {
+ entry = p;
+ while ((*p != 0) && (!isspace(*p)))
+ p++;
+ if ((*p != 0) && (strcasecmp(name, p + 1) == 0))
+ {
+ sscanf(entry, "%x", (uint*) &returnValue);
+ break;
+ }
+ while (*p != 0)
+ p++;
+ p++;
+ }
+
+ if (loose != NULL && returnValue == None && !IsSerialName(name))
+ {
+ for (p = regProp; (p - regProp) < numItems; )
+ {
+ entry = p;
+ while ((*p != 0) && (!isspace(*p)))
+ p++;
+ if ((*p != 0) && IsSerialName(p + 1)
+ && (strncmp(name, p + 1, strlen(name)) == 0))
+ {
+ sscanf(entry, "%x", (uint*) &returnValue);
+ *loose = strdup(p + 1);
+ break;
+ }
+ while (*p != 0)
+ p++;
+ p++;
+ }
+ }
+
+ /*
+ * Delete the property, if that is desired (copy down the
+ * remainder of the registry property to overlay the deleted
+ * info, then rewrite the property).
+ */
+
+ if ((delete) && (returnValue != None))
+ {
+ int count;
+
+ while (*p != 0)
+ p++;
+ p++;
+ count = numItems - (p-regProp);
+ if (count > 0)
+ memcpy(entry, p, count);
+ XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING,
+ 8, PropModeReplace, regProp,
+ (int) (numItems - (p-entry)));
+ XSync(dpy, False);
+ }
+
+ XFree(regProp);
+ return returnValue;
+}
+
+ static char *
+SendEventProc(dpy, eventPtr, expected, code)
+ Display *dpy;
+ XEvent *eventPtr; /* Information about event. */
+ int expected; /* The one were waiting for */
+ int *code; /* Return code. 0 => OK */
+{
+ unsigned char *propInfo;
+ unsigned char *p;
+ int result, actualFormat;
+ int retCode;
+ unsigned long numItems, bytesAfter;
+ Atom actualType;
+
+ if ((eventPtr->xproperty.atom != commProperty)
+ || (eventPtr->xproperty.state != PropertyNewValue))
+ {
+ return;
+ }
+
+ /*
+ * Read the comm property and delete it.
+ */
+
+ propInfo = NULL;
+ result = XGetWindowProperty(dpy, commWindow, commProperty, 0,
+ MAX_PROP_WORDS, True, XA_STRING, &actualType,
+ &actualFormat, &numItems, &bytesAfter,
+ &propInfo);
+
+ /*
+ * If the property doesn't exist or is improperly formed
+ * then ignore it.
+ */
+
+ if ((result != Success) || (actualType != XA_STRING)
+ || (actualFormat != 8))
+ {
+ if (propInfo != NULL)
+ {
+ XFree(propInfo);
+ }
+ return;
+ }
+
+ /*
+ * Several commands and results could arrive in the property at
+ * one time; each iteration through the outer loop handles a
+ * single command or result.
+ */
+
+ for (p = propInfo; (p - propInfo) < numItems; )
+ {
+ /*
+ * Ignore leading NULs; each command or result starts with a
+ * NUL so that no matter how badly formed a preceding command
+ * is, we'll be able to tell that a new command/result is
+ * starting.
+ */
+
+ if (*p == 0)
+ {
+ p++;
+ continue;
+ }
+
+ if ((*p == 'r') && (p[1] == 0))
+ {
+ int serial, gotSerial;
+ char *res;
+
+ /*
+ * This is a reply to some command that we sent out. Iterate
+ * over all of its options. Stop when we reach the end of the
+ * property or something that doesn't look like an option.
+ */
+
+ p += 2;
+ gotSerial = 0;
+ res = "";
+ retCode = 0;
+ while (((p-propInfo) < numItems) && (*p == '-'))
+ {
+ switch (p[1])
+ {
+ case 'r':
+ if (p[2] == ' ')
+ res = p + 3;
+ break;
+ case 's':
+ if (sscanf(p + 2, " %d", &serial) == 1)
+ gotSerial = 1;
+ break;
+ case 'c':
+ if (sscanf(p + 2, " %d", &retCode) != 1)
+ retCode = 0;
+ break;
+ }
+ while (*p != 0)
+ p++;
+ p++;
+ }
+
+ if (!gotSerial)
+ continue;
+
+ if (code != NULL)
+ *code = retCode;
+ return serial == expected ? strdup(res) : NULL;
+ }
+ else
+ {
+ /*
+ * Didn't recognize this thing. Just skip through the next
+ * null character and try again.
+ * Also, throw away commands that we cant process anyway.
+ */
+
+ while (*p != 0)
+ p++;
+ p++;
+ }
+ }
+ XFree(propInfo);
+}
+
+/*
+ * AppendPropCarefully --
+ *
+ * Append a given property to a given window, but set up
+ * an X error handler so that if the append fails this
+ * procedure can return an error code rather than having
+ * Xlib panic.
+ *
+ * Return:
+ * 0 on OK - -1 on error
+ *--------------------------------------------------------------
+ */
+
+ static int
+AppendPropCarefully(dpy, window, property, value, length)
+ Display *dpy; /* Display on which to operate. */
+ Window window; /* Window whose property is to
+ * be modified. */
+ Atom property; /* Name of property. */
+ char *value; /* Characters to append to property. */
+ int length; /* How much to append */
+{
+ XErrorHandler old_handler;
+
+ old_handler = XSetErrorHandler(x_error_check);
+ got_x_error = FALSE;
+ XChangeProperty(dpy, window, property, XA_STRING, 8,
+ PropModeAppend, value, length);
+ XSync(dpy, False);
+ (void) XSetErrorHandler(old_handler);
+ return got_x_error ? -1 : 0;
+}
+
+
+/*
+ * Another X Error handler, just used to check for errors.
+ */
+/* ARGSUSED */
+ static int
+x_error_check(dpy, error_event)
+ Display *dpy;
+ XErrorEvent *error_event;
+{
+ got_x_error = TRUE;
+ return 0;
+}
+
+/*
+ * Check if "str" looks like it had a serial number appended.
+ * Actually just checks if the name ends in a digit.
+ */
+ static int
+IsSerialName(str)
+ char *str;
+{
+ int len = strlen(str);
+
+ return (len > 1 && isdigit(str[len - 1]));
+}
diff --git a/runtime/tutor.info b/runtime/tutor.info
new file mode 100755
index 000000000..f8ceda364
--- /dev/null
+++ b/runtime/tutor.info
Binary files differ
diff --git a/runtime/tutor/Makefile b/runtime/tutor/Makefile
new file mode 100644
index 000000000..05a59615a
--- /dev/null
+++ b/runtime/tutor/Makefile
@@ -0,0 +1,15 @@
+# Makefile for the Vim tutor.
+#
+# The Japanese tutor exists in three encodings. Use the UTF-8 version as the
+# original and create the others with conversion.
+
+all: tutor.ja.sjis tutor.ja.euc tutor.ko.euc
+
+tutor.ja.sjis: tutor.ja.utf-8
+ nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
+
+tutor.ja.euc: tutor.ja.utf-8
+ nkf -WXe tutor.ja.utf-8 > tutor.ja.euc
+
+tutor.ko.euc: tutor.ko.utf-8
+ iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
diff --git a/runtime/tutor/README.gr.cp737.txt b/runtime/tutor/README.gr.cp737.txt
new file mode 100644
index 000000000..426f929c6
--- /dev/null
+++ b/runtime/tutor/README.gr.cp737.txt
@@ -0,0 +1,24 @@
+’¦ Tutor œå¤˜  £å˜ "®œ ¨¦¤˜¡« ¡ã" §œ¨ ãšž©ž š ˜ ¤â¦¬ª ®¨ã©«œª «¦¬
+©¬¤«á¡«ž Vim.
+
+Ž  §œ¨ ©©æ«œ¨¦  ¤â¦  ®¨ã©«œª £§¦¨¦ç¤ ¤˜ «¦ «œ¢œ é©¦¬¤ ©œ ¢ šæ«œ¨¦ ˜§æ
+£å˜ 騘. ’¦ ˜§¦«â¢œ©£˜ œå¤˜  æ«  £§¦¨œå«œ ¤˜ ¡á¤œ«œ £å˜ ˜§¢ã œ¨š˜©å˜
+œ§œ¥œ¨š˜©å˜ª ¡œ £â¤¦¬ ®¨ž© £¦§¦ é¤«˜ª «¦¤ ©¬¤«á¡«ž Vim.
+
+’¦ Tutor œå¤˜  ⤘ ˜¨®œå¦ §¦¬ §œ¨ â®œ  «˜ £˜Ÿã£˜«˜ «žª §¨¦§˜¨˜©¡œ¬ãª.
+‹§¦¨œå«œ ¤˜ œ¡«œ¢â©œ«œ ˜§¢á "vim tutor" ¡˜  £œ«á ¤˜ ˜¡¦¢¦¬Ÿã©œ«œ « ª
+¦›žšåœª ©«˜ £˜Ÿã£˜«˜. ’˜ £˜Ÿã£˜«˜ Ÿ˜ ©˜ª §¦ç¤œ ¤˜ «¨¦§¦§¦ ã©œ«œ
+«¦ ˜¨®œå¦, œ§¦£â¤àª ‹†Œ ’Ž ‰€Œ„’„ ‘’Ž —’Ž’“Ž €Œ’ˆ‚€”Ž ‘€‘.
+
+‘œ ©ç©«ž£˜ Unix £§¦¨œå«œ œ§å©žª ¤˜ ®¨ž© £¦§¦ ã©œ«œ «¦ §¨æš¨˜££˜ "vimtutor".
+‡˜ ›ž£ ¦¬¨šã©œ  §¨é«˜ ⤘ §¨æ®œ ¨¦ ˜¤«åš¨˜­¦ «¦¬ tutor.
+
+ë®à ©¡œ­«œå ¤˜ §¨¦©Ÿâ©à §œ¨ ©©æ«œ¨˜ §¨¦®à¨ž£â¤˜ £˜Ÿã£˜«˜ ˜¢¢á ›œ¤ â®à ™¨œ 
+«¦¤ ˜§˜¨˜å«ž«¦ ®¨æ¤¦. „¤ž£œ¨é©«œ £œ §˜¨˜¡˜¢é §éª Ÿ˜ «¦ Ÿâ¢˜«œ ¡˜  ©«œå¢œ«œ
+£¦¬ ¦§¦ œ©›ã§¦«œ ™œ¢« é©œ ª ¡á¤œ«œ.
+
+Bob Ware, Colorado School of Mines, Golden, Co 80401, USA
+(303) 273-3987
+bware@mines.colorado.edu bware@slate.mines.colorado.edu bware@mines.bitnet
+
+[’¦ ˜¨®œå¦ ˜¬«æ «¨¦§¦§¦ ãŸž¡œ š ˜ «¦¤ Vim ˜§æ «¦¤ Bram Moolenaar]
diff --git a/runtime/tutor/README.gr.txt b/runtime/tutor/README.gr.txt
new file mode 100644
index 000000000..b2f5e0746
--- /dev/null
+++ b/runtime/tutor/README.gr.txt
@@ -0,0 +1,24 @@
+Ôï Tutor åßíáé ìßá "÷åéñïíáêôéêÞ" ðåñéÞãçóç ãéá íÝïõò ÷ñÞóôåò ôïõ
+óõíôÜêôç Vim.
+
+Ïé ðåñéóóüôåñïé íÝïé ÷ñÞóôåò ìðïñïýí íá ôï ôåëåéþóïõí óå ëéãüôåñï áðü
+ìßá þñá. Ôï áðïôÝëåóìá åßíáé üôé ìðïñåßôå íá êÜíåôå ìßá áðëÞ åñãáóßá
+åðåîåñãáóßáò êåéìÝíïõ ÷ñçóéìïðïéþíôáò ôïí óõíôÜêôç Vim.
+
+Ôï Tutor åßíáé Ýíá áñ÷åßï ðïõ ðåñéÝ÷åé ôá ìáèÞìáôá ôçò ðñïðáñáóêåõÞò.
+Ìðïñåßôå íá åêôåëÝóåôå áðëÜ "vim tutor" êáé ìåôÜ íá áêïëïõèÞóåôå ôéò
+ïäçãßåò óôá ìáèÞìáôá. Ôá ìáèÞìáôá èá óáò ðïýíå íá ôñïðïðïéÞóåôå
+ôï áñ÷åßï, åðïìÝíùò ÌÇÍ ÔÏ ÊÁÍÅÔÅ ÓÔÏ ÐÑÙÔÏÔÕÐÏ ÁÍÔÉÃÑÁÖÏ ÓÁÓ.
+
+Óå óýóôçìá Unix ìðïñåßôå åðßóçò íá ÷ñçóéìïðïéÞóåôå ôï ðñüãñáììá "vimtutor".
+Èá äçìéïõñãÞóåé ðñþôá Ýíá ðñü÷åéñï áíôßãñáöï ôïõ tutor.
+
+¸÷ù óêåöôåß íá ðñïóèÝóù ðåñéóóüôåñá ðñï÷ùñçìÝíá ìáèÞìáôá áëëÜ äåí Ý÷ù âñåé
+ôïí áðáñáßôçôï ÷ñüíï. Åíçìåñþóôå ìå ðáñáêáëþ ðþò èá ôï èÝëáôå êáé óôåßëåôå
+ìïõ ïðïéåóäÞðïôå âåëôéþóåéò êÜíåôå.
+
+Bob Ware, Colorado School of Mines, Golden, Co 80401, USA
+(303) 273-3987
+bware@mines.colorado.edu bware@slate.mines.colorado.edu bware@mines.bitnet
+
+[Ôï áñ÷åßï áõôü ôñïðïðïéÞèçêå ãéá ôïí Vim áðü ôïí Bram Moolenaar]
diff --git a/runtime/tutor/README.txt b/runtime/tutor/README.txt
new file mode 100644
index 000000000..77097c199
--- /dev/null
+++ b/runtime/tutor/README.txt
@@ -0,0 +1,22 @@
+Tutor is a "hands on" tutorial for new users of the Vim editor.
+
+Most new users can get through it in less than one hour. The result
+is that you can do a simple editing task using the Vim editor.
+
+Tutor is a file that contains the tutorial lessons. You can simply
+execute "vim tutor" and then follow the instructions in the lessons.
+The lessons tell you to modify the file, so DON'T DO THIS ON YOUR
+ORIGINAL COPY.
+
+On Unix you can also use the "vimtutor" program. It will make a
+scratch copy of the tutor first.
+
+I have considered adding more advanced lessons but have not found the
+time. Please let me know how you like it and send any improvements you
+make.
+
+Bob Ware, Colorado School of Mines, Golden, Co 80401, USA
+(303) 273-3987
+bware@mines.colorado.edu bware@slate.mines.colorado.edu bware@mines.bitnet
+
+[This file was modified for Vim by Bram Moolenaar]
diff --git a/runtime/tutor/README.txt.info b/runtime/tutor/README.txt.info
new file mode 100755
index 000000000..238b11fa9
--- /dev/null
+++ b/runtime/tutor/README.txt.info
Binary files differ
diff --git a/runtime/tutor/tutor b/runtime/tutor/tutor
new file mode 100644
index 000000000..7da46f037
--- /dev/null
+++ b/runtime/tutor/tutor
@@ -0,0 +1,808 @@
+===============================================================================
+= W e l c o m e t o t h e V I M T u t o r - Version 1.5 =
+===============================================================================
+
+ Vim is a very powerful editor that has many commands, too many to
+ explain in a tutor such as this. This tutor is designed to describe
+ enough of the commands that you will be able to easily use Vim as
+ an all-purpose editor.
+
+ The approximate time required to complete the tutor is 25-30 minutes,
+ depending upon how much time is spent with experimentation.
+
+ The commands in the lessons will modify the text. Make a copy of this
+ file to practise on (if you started "vimtutor" this is already a copy).
+
+ It is important to remember that this tutor is set up to teach by
+ use. That means that you need to execute the commands to learn them
+ properly. If you only read the text, you will forget the commands!
+
+ Now, make sure that your Shift-Lock key is NOT depressed and press
+ the j key enough times to move the cursor so that Lesson 1.1
+ completely fills the screen.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.1: MOVING THE CURSOR
+
+
+ ** To move the cursor, press the h,j,k,l keys as indicated. **
+ ^
+ k Hint: The h key is at the left and moves left.
+ < h l > The l key is at the right and moves right.
+ j The j key looks like a down arrow
+ v
+ 1. Move the cursor around the screen until you are comfortable.
+
+ 2. Hold down the down key (j) until it repeats.
+---> Now you know how to move to the next lesson.
+
+ 3. Using the down key, move to Lesson 1.2.
+
+Note: If you are ever unsure about something you typed, press <ESC> to place
+ you in Normal mode. Then retype the command you wanted.
+
+Note: The cursor keys should also work. But using hjkl you will be able to
+ move around much faster, once you get used to it.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.2: ENTERING AND EXITING VIM
+
+
+ !! NOTE: Before executing any of the steps below, read this entire lesson!!
+
+ 1. Press the <ESC> key (to make sure you are in Normal mode).
+
+ 2. Type: :q! <ENTER>.
+
+---> This exits the editor WITHOUT saving any changes you have made.
+ If you want to save the changes and exit type:
+ :wq <ENTER>
+
+ 3. When you see the shell prompt, type the command that got you into this
+ tutor. That could be: vimtutor <ENTER>
+ Normally you would use: vim tutor <ENTER>
+
+---> 'vim' means enter the vim editor, 'tutor' is the file you wish to edit.
+
+ 4. If you have these steps memorized and are confident, execute steps
+ 1 through 3 to exit and re-enter the editor. Then move the cursor down
+ to Lesson 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.3: TEXT EDITING - DELETION
+
+
+** While in Normal mode press x to delete the character under the cursor. **
+
+ 1. Move the cursor to the line below marked --->.
+
+ 2. To fix the errors, move the cursor until it is on top of the
+ character to be deleted.
+
+ 3. Press the x key to delete the unwanted character.
+
+ 4. Repeat steps 2 through 4 until the sentence is correct.
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. Now that the line is correct, go on to Lesson 1.4.
+
+NOTE: As you go through this tutor, do not try to memorize, learn by usage.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.4: TEXT EDITING - INSERTION
+
+
+ ** While in Normal mode press i to insert text. **
+
+ 1. Move the cursor to the first line below marked --->.
+
+ 2. To make the first line the same as the second, move the cursor on top
+ of the first character AFTER where the text is to be inserted.
+
+ 3. Press i and type in the necessary additions.
+
+ 4. As each error is fixed press <ESC> to return to Normal mode.
+ Repeat steps 2 through 4 to correct the sentence.
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. When you are comfortable inserting text move to the summary below.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 1 SUMMARY
+
+
+ 1. The cursor is moved using either the arrow keys or the hjkl keys.
+ h (left) j (down) k (up) l (right)
+
+ 2. To enter Vim (from the % prompt) type: vim FILENAME <ENTER>
+
+ 3. To exit Vim type: <ESC> :q! <ENTER> to trash all changes.
+ OR type: <ESC> :wq <ENTER> to save the changes.
+
+ 4. To delete a character under the cursor in Normal mode type: x
+
+ 5. To insert text at the cursor while in Normal mode type:
+ i type in text <ESC>
+
+NOTE: Pressing <ESC> will place you in Normal mode or will cancel
+ an unwanted and partially completed command.
+
+Now continue with Lesson 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.1: DELETION COMMANDS
+
+
+ ** Type dw to delete to the end of a word. **
+
+ 1. Press <ESC> to make sure you are in Normal mode.
+
+ 2. Move the cursor to the line below marked --->.
+
+ 3. Move the cursor to the beginning of a word that needs to be deleted.
+
+ 4. Type dw to make the word disappear.
+
+ NOTE: The letters dw will appear on the last line of the screen as you type
+ them. If you typed something wrong, press <ESC> and start over.
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+ 5. Repeat steps 3 and 4 until the sentence is correct and go to Lesson 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.2: MORE DELETION COMMANDS
+
+
+ ** Type d$ to delete to the end of the line. **
+
+ 1. Press <ESC> to make sure you are in Normal mode.
+
+ 2. Move the cursor to the line below marked --->.
+
+ 3. Move the cursor to the end of the correct line (AFTER the first . ).
+
+ 4. Type d$ to delete to the end of the line.
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+ 5. Move on to Lesson 2.3 to understand what is happening.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: ON COMMANDS AND OBJECTS
+
+
+ The format for the d delete command is as follows:
+
+ [number] d object OR d [number] object
+ Where:
+ number - is how many times to execute the command (optional, default=1).
+ d - is the command to delete.
+ object - is what the command will operate on (listed below).
+
+ A short list of objects:
+ w - from the cursor to the end of the word, including the space.
+ e - from the cursor to the end of the word, NOT including the space.
+ $ - from the cursor to the end of the line.
+
+NOTE: For the adventurous, pressing just the object while in Normal mode
+ without a command will move the cursor as specified in the object list.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.4: AN EXCEPTION TO 'COMMAND-OBJECT'
+
+
+ ** Type dd to delete a whole line. **
+
+ Due to the frequency of whole line deletion, the designers of Vi decided
+ it would be easier to simply type two d's in a row to delete a line.
+
+ 1. Move the cursor to the second line in the phrase below.
+ 2. Type dd to delete the line.
+ 3. Now move to the fourth line.
+ 4. Type 2dd (remember number-command-object) to delete the two lines.
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.5: THE UNDO COMMAND
+
+
+ ** Press u to undo the last commands, U to fix a whole line. **
+
+ 1. Move the cursor to the line below marked ---> and place it on the
+ first error.
+ 2. Type x to delete the first unwanted character.
+ 3. Now type u to undo the last command executed.
+ 4. This time fix all the errors on the line using the x command.
+ 5. Now type a capital U to return the line to its original state.
+ 6. Now type u a few times to undo the U and preceding commands.
+ 7. Now type CTRL-R (keeping CTRL key pressed while hitting R) a few times
+ to redo the commands (undo the undo's).
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+ 8. These are very useful commands. Now move on to the Lesson 2 Summary.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 2 SUMMARY
+
+
+ 1. To delete from the cursor to the end of a word type: dw
+
+ 2. To delete from the cursor to the end of a line type: d$
+
+ 3. To delete a whole line type: dd
+
+ 4. The format for a command in Normal mode is:
+
+ [number] command object OR command [number] object
+ where:
+ number - is how many times to repeat the command
+ command - is what to do, such as d for delete
+ object - is what the command should act upon, such as w (word),
+ $ (to the end of line), etc.
+
+ 5. To undo previous actions, type: u (lowercase u)
+ To undo all the changes on a line type: U (capital U)
+ To undo the undo's type: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.1: THE PUT COMMAND
+
+
+ ** Type p to put the last deletion after the cursor. **
+
+ 1. Move the cursor to the first line in the set below.
+
+ 2. Type dd to delete the line and store it in Vim's buffer.
+
+ 3. Move the cursor to the line ABOVE where the deleted line should go.
+
+ 4. While in Normal mode, type p to replace the line.
+
+ 5. Repeat steps 2 through 4 to put all the lines in correct order.
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: THE REPLACE COMMAND
+
+
+ ** Type r and a character to replace the character under the cursor. **
+
+ 1. Move the cursor to the first line below marked --->.
+
+ 2. Move the cursor so that it is on top of the first error.
+
+ 3. Type r and then the character which should replace the error.
+
+ 4. Repeat steps 2 and 3 until the first line is correct.
+
+---> Whan this lime was tuoed in, someone presswd some wrojg keys!
+---> When this line was typed in, someone pressed some wrong keys!
+
+ 5. Now move on to Lesson 3.2.
+
+NOTE: Remember that you should be learning by use, not memorization.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.3: THE CHANGE COMMAND
+
+
+ ** To change part or all of a word, type cw . **
+
+ 1. Move the cursor to the first line below marked --->.
+
+ 2. Place the cursor on the u in lubw.
+
+ 3. Type cw and the correct word (in this case, type 'ine'.)
+
+ 4. Press <ESC> and move to the next error (the first character to be changed.)
+
+ 5. Repeat steps 3 and 4 until the first sentence is the same as the second.
+
+---> 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.
+
+Notice that cw not only replaces the word, but also places you in insert.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.4: MORE CHANGES USING c
+
+
+ ** The change command is used with the same objects as delete. **
+
+ 1. The change command works in the same way as delete. The format is:
+
+ [number] c object OR c [number] object
+
+ 2. The objects are also the same, such as w (word), $ (end of line), etc.
+
+ 3. Move to the first line below marked --->.
+
+ 4. Move the cursor to the first error.
+
+ 5. Type c$ to make the rest of the line like the second and press <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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 3 SUMMARY
+
+
+ 1. To replace text that has already been deleted, type p . This Puts the
+ deleted text AFTER the cursor (if a line was deleted it will go on the
+ line below the cursor).
+
+ 2. To replace the character under the cursor, type r and then the
+ character which will replace the original.
+
+ 3. The change command allows you to change the specified object from the
+ cursor to the end of the object. eg. Type cw to change from the
+ cursor to the end of the word, c$ to change to the end of a line.
+
+ 4. The format for change is:
+
+ [number] c object OR c [number] object
+
+Now go on to the next lesson.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.1: LOCATION AND FILE STATUS
+
+
+ ** Type CTRL-g to show your location in the file and the file status.
+ Type SHIFT-G to move to a line in the file. **
+
+ Note: Read this entire lesson before executing any of the steps!!
+
+ 1. Hold down the Ctrl key and press g . A status line will appear at the
+ bottom of the page with the filename and the line you are on. Remember
+ the line number for Step 3.
+
+ 2. Press shift-G to move you to the bottom of the file.
+
+ 3. Type in the number of the line you were on and then shift-G. This will
+ return you to the line you were on when you first pressed Ctrl-g.
+ (When you type in the numbers, they will NOT be displayed on the screen.)
+
+ 4. If you feel confident to do this, execute steps 1 through 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.2: THE SEARCH COMMAND
+
+
+ ** Type / followed by a phrase to search for the phrase. **
+
+ 1. In Normal mode type the / character. Notice that it and the cursor
+ appear at the bottom of the screen as with the : command.
+
+ 2. Now type 'errroor' <ENTER>. This is the word you want to search for.
+
+ 3. To search for the same phrase again, simply type n .
+ To search for the same phrase in the opposite direction, type Shift-N .
+
+ 4. If you want to search for a phrase in the backwards direction, use the
+ command ? instead of /.
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+Note: When the search reaches the end of the file it will continue at the
+ start.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.3: MATCHING PARENTHESES SEARCH
+
+
+ ** Type % to find a matching ),], or } . **
+
+ 1. Place the cursor on any (, [, or { in the line below marked --->.
+
+ 2. Now type the % character.
+
+ 3. The cursor should be on the matching parenthesis or bracket.
+
+ 4. Type % to move the cursor back to the first bracket (by matching).
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+Note: This is very useful in debugging a program with unmatched parentheses!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.4: A WAY TO CHANGE ERRORS
+
+
+ ** Type :s/old/new/g to substitute 'new' for 'old'. **
+
+ 1. Move the cursor to the line below marked --->.
+
+ 2. Type :s/thee/the <ENTER> . Note that this command only changes the
+ first occurrence on the line.
+
+ 3. Now type :s/thee/the/g meaning substitute globally on the line.
+ This changes all occurrences on the line.
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. To change every occurrence of a character string between two lines,
+ type :#,#s/old/new/g where #,# are the numbers of the two lines.
+ Type :%s/old/new/g to change every occurrence in the whole file.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 4 SUMMARY
+
+
+ 1. Ctrl-g displays your location in the file and the file status.
+ Shift-G moves to the end of the file. A line number followed
+ by Shift-G moves to that line number.
+
+ 2. Typing / followed by a phrase searches FORWARD for the phrase.
+ Typing ? followed by a phrase searches BACKWARD for the phrase.
+ After a search type n to find the next occurrence in the same direction
+ or Shift-N to search in the opposite direction.
+
+ 3. Typing % while the cursor is on a (,),[,],{, or } locates its
+ matching pair.
+
+ 4. To substitute new for the first old on a line type :s/old/new
+ To substitute new for all 'old's on a line type :s/old/new/g
+ To substitute phrases between two line #'s type :#,#s/old/new/g
+ To substitute all occurrences in the file type :%s/old/new/g
+ To ask for confirmation each time add 'c' :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.1: HOW TO EXECUTE AN EXTERNAL COMMAND
+
+
+ ** Type :! followed by an external command to execute that command. **
+
+ 1. Type the familiar command : to set the cursor at the bottom of the
+ screen. This allows you to enter a command.
+
+ 2. Now type the ! (exclamation point) character. This allows you to
+ execute any external shell command.
+
+ 3. As an example type ls following the ! and then hit <ENTER>. This
+ will show you a listing of your directory, just as if you were at the
+ shell prompt. Or use :!dir if ls doesn't work.
+
+Note: It is possible to execute any external command this way.
+
+Note: All : commands must be finished by hitting <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.2: MORE ON WRITING FILES
+
+
+ ** To save the changes made to the file, type :w FILENAME. **
+
+ 1. Type :!dir or :!ls to get a listing of your directory.
+ You already know you must hit <ENTER> after this.
+
+ 2. Choose a filename that does not exist yet, such as TEST.
+
+ 3. Now type: :w TEST (where TEST is the filename you chose.)
+
+ 4. This saves the whole file (Vim Tutor) under the name TEST.
+ To verify this, type :!dir again to see your directory
+
+Note: If you were to exit Vim and enter again with the filename TEST, the file
+ would be an exact copy of the tutor when you saved it.
+
+ 5. Now remove the file by typing (MS-DOS): :!del TEST
+ or (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.3: A SELECTIVE WRITE COMMAND
+
+
+ ** To save part of the file, type :#,# w FILENAME **
+
+ 1. Once again, type :!dir or :!ls to obtain a listing of your directory
+ and choose a suitable filename such as TEST.
+
+ 2. Move the cursor to the top of this page and type Ctrl-g to find the
+ number of that line. REMEMBER THIS NUMBER!
+
+ 3. Now move to the bottom of the page and type Ctrl-g again. REMEMBER THIS
+ LINE NUMBER ALSO!
+
+ 4. To save ONLY a section to a file, type :#,# w TEST where #,# are
+ the two numbers you remembered (top,bottom) and TEST is your filename.
+
+ 5. Again, see that the file is there with :!dir but DO NOT remove it.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.4: RETRIEVING AND MERGING FILES
+
+
+ ** To insert the contents of a file, type :r FILENAME **
+
+ 1. Type :!dir to make sure your TEST filename is present from before.
+
+ 2. Place the cursor at the top of this page.
+
+NOTE: After executing Step 3 you will see Lesson 5.3. Then move DOWN to
+ this lesson again.
+
+ 3. Now retrieve your TEST file using the command :r TEST where TEST is
+ the name of the file.
+
+NOTE: The file you retrieve is placed starting where the cursor is located.
+
+ 4. To verify that a file was retrieved, cursor back and notice that there
+ are now two copies of Lesson 5.3, the original and the file version.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 5 SUMMARY
+
+
+ 1. :!command executes an external command.
+
+ Some useful examples are:
+ (MS-DOS) (Unix)
+ :!dir :!ls - shows a directory listing.
+ :!del FILENAME :!rm FILENAME - removes file FILENAME.
+
+ 2. :w FILENAME writes the current Vim file to disk with name FILENAME.
+
+ 3. :#,#w FILENAME saves the lines # through # in file FILENAME.
+
+ 4. :r FILENAME retrieves disk file FILENAME and inserts it into the
+ current file following the cursor position.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.1: THE OPEN COMMAND
+
+
+ ** Type o to open a line below the cursor and place you in Insert mode. **
+
+ 1. Move the cursor to the line below marked --->.
+
+ 2. Type o (lowercase) to open up a line BELOW the cursor and place you in
+ Insert mode.
+
+ 3. Now copy the line marked ---> and press <ESC> to exit Insert mode.
+
+---> After typing o the cursor is placed on the open line in Insert mode.
+
+ 4. To open up a line ABOVE the cursor, simply type a capital O , rather
+ than a lowercase o. Try this on the line below.
+Open up a line above this by typing Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.2: THE APPEND COMMAND
+
+
+ ** Type a to insert text AFTER the cursor. **
+
+ 1. Move the cursor to the end of the first line below marked ---> by
+ typing $ in Normal mode.
+
+ 2. Type an a (lowercase) to append text AFTER the character under the
+ cursor. (Uppercase A appends to the end of the line.)
+
+Note: This avoids typing i , the last character, the text to insert, <ESC>,
+ cursor-right, and finally, x , just to append to the end of a line!
+
+ 3. Now complete the first line. Note also that append is exactly the same
+ as Insert mode, except for the location where text is inserted.
+
+---> This line will allow you to practice
+---> This line will allow you to practice appending text to the end of a line.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.3: ANOTHER VERSION OF REPLACE
+
+
+ ** Type a capital R to replace more than one character. **
+
+ 1. Move the cursor to the first line below marked --->.
+
+ 2. Place the cursor at the beginning of the first word that is different
+ from the second line marked ---> (the word 'last').
+
+ 3. Now type R and replace the remainder of the text on the first line by
+ typing over the old text to make the first line the same as the second.
+
+---> 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. Note that when you press <ESC> to exit, any unaltered text remains.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.4: SET OPTION
+
+ ** Set an option so a search or substitute ignores case **
+
+ 1. Search for 'ignore' by entering:
+ /ignore
+ Repeat several times by hitting the n key
+
+ 2. Set the 'ic' (Ignore case) option by typing:
+ :set ic
+
+ 3. Now search for 'ignore' again by entering: n
+ Repeat search several more times by hitting the n key
+
+ 4. Set the 'hlsearch' and 'incsearch' options:
+ :set hls is
+
+ 5. Now enter the search command again, and see what happens:
+ /ignore
+
+ 6. To remove the highlighting of matches, type:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 6 SUMMARY
+
+
+ 1. Typing o opens a line BELOW the cursor and places the cursor on the open
+ line in Insert mode.
+ Typing a capital O opens the line ABOVE the line the cursor is on.
+
+ 2. Type an a to insert text AFTER the character the cursor is on.
+ Typing a capital A automatically appends text to the end of the line.
+
+ 3. Typing a capital R enters Replace mode until <ESC> is pressed to exit.
+
+ 4. Typing ":set xxx" sets the option "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 7: ON-LINE HELP COMMANDS
+
+
+ ** Use the on-line help system **
+
+ Vim has a comprehensive on-line help system. To get started, try one of
+ these three:
+ - press the <HELP> key (if you have one)
+ - press the <F1> key (if you have one)
+ - type :help <ENTER>
+
+ Type :q <ENTER> to close the help window.
+
+ You can find help on just about any subject, by giving an argument to the
+ ":help" command. Try these (don't forget pressing <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 8: CREATE A STARTUP SCRIPT
+
+ ** Switch on Vim features **
+
+ Vim has many more features than Vi, but most of them are disabled by default.
+ To start using more features you have to create a "vimrc" file.
+
+ 1. Start editing the "vimrc" file, this depends on your system:
+ :edit ~/.vimrc for Unix
+ :edit $VIM/_vimrc for MS-Windows
+
+ 2. Now read the example "vimrc" file text:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Write the file with:
+
+ :write
+
+ The next time you start Vim it will use syntax highlighting.
+ You can add all your preferred settings to this "vimrc" file.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ This concludes the Vim Tutor. It was intended to give a brief overview of
+ the Vim editor, just enough to allow you to use the editor fairly easily.
+ It is far from complete as Vim has many many more commands. Read the user
+ manual next: ":help user-manual".
+
+ For further reading and studying, this book is recommended:
+ Vim - Vi Improved - by Steve Oualline
+ Publisher: New Riders
+ The first book completely dedicated to Vim. Especially useful for beginners.
+ There are many examples and pictures.
+ See http://iccf-holland.org/click5.html
+
+ This book is older and more about Vi than Vim, but also recommended:
+ Learning the Vi Editor - by Linda Lamb
+ Publisher: O'Reilly & Associates Inc.
+ It is a good book to get to know almost anything you want to do with Vi.
+ The sixth edition also includes information on Vim.
+
+ This tutorial was written by Michael C. Pierce and Robert K. Ware,
+ Colorado School of Mines using ideas supplied by Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.ca b/runtime/tutor/tutor.ca
new file mode 100644
index 000000000..603a34756
--- /dev/null
+++ b/runtime/tutor/tutor.ca
@@ -0,0 +1,807 @@
+===============================================================================
+= B e n v i n g u t s a l t u t o r d e l V I M - Versió 1.5 =
+===============================================================================
+
+ El Vim és un editor molt potent que té moltes ordres, masses com per
+ explicar-les totes un tutor com aquest. Aquest tutor està dissenyat
+ per descriure les ordres bàsiques que us permetin fer servir el Vim com
+ a editor de propòsit general.
+
+ El temps aproximat de seguir el tutor complet és d'uns 25 o 30 minuts
+ depenent de quant temps dediqueu a experimentar.
+
+ Feu una còpia d'aquest fitxer per practicar-hi (si heu començat amb el
+ programa vimtutor això que esteu llegint ja és una còpia).
+
+ És important recordar que aquest tutor està pensat per ensenyar
+ practicant. És a dir, que haureu d'executar les ordres si les voleu
+ aprendre. Si només llegiu el text el més probable és que les oblideu.
+
+ Ara assegureu-vos que la tecla de bloqueig de majúscules no està
+ activada i premeu la tecla j per moure el cursor avall, fins que
+ la lliçó 1.1 ocupi completament la pantalla.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 1.1: MOURE EL CURSOR
+
+
+ ** Per moure el cursor premeu les tecles h,j,k,l tal com està indicat. **
+ ^
+ k Pista: La h és a l'esquerra i mou el cursor cap a l'esquerra.
+ < h l > La l és a la dreta i mou el cursor cap a la dreta.
+ j La j sembla una fletxa cap avall.
+ v
+ 1. Moveu el cursor per la pantalla fins que us sentiu confortables.
+
+ 2. Mantingueu premuda la tecla avall (j) una estona.
+---> Ara sabeu com moure-us fins a la pròxima lliçó.
+
+ 3. Usant la tecla avall, aneu a la lliçó 1.2.
+
+Nota: Si no esteu segurs de la tecla que heu premut, premeu <ESC> per tornar
+ al mode Normal. Llavors torneu a teclejar l'ordre que volíeu.
+
+Nota: Les tecles de moviment del cursor (fletxes) també funcionen. Però usant
+ hjkl anireu més ràpid, quan us hi hàgiu acostumant.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 1.2: ENTRAR I SORTIR DEL VIM
+
+
+ !! NOTA: Abans de seguir els passos següents llegiu *tota* la lliçó!!
+
+ 1. Premeu <ESC> (per estar segurs que esteu en el mode Normal).
+
+ 2. Teclegeu: :q! <ENTRAR>.
+
+---> Amb això sortireu de l'editor SENSE desar els canvis que hàgiu pogut
+ fer. Si voleu desar els canvis teclegeu:
+ :wq <ENTRAR>
+
+ 3. Quan vegeu l'introductor de la shell escriviu l'ordre amb la qual heu
+ arribat a aquest tutor. Podria ser: vimtutor <ENTRAR>
+ O bé: vim tutor <ENTRAR>
+
+---> 'vim' és l'editor vim, i 'tutor' és el fitxer que voleu editar.
+
+ 4. Si heu memoritzat les ordres, feu els passos anteriors, de l'1 al 3,
+ per sortir i tornar a entrar a l'editor. Llavors moveu el cursor avall
+ fins la lliçó 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 1.3: EDITAR TEXT - ESBORRAR
+
+
+ ** En mode Normal premeu x per esborrar el caràcter de sota el cursor. **
+
+ 1. Moveu el cursor fins la línia que hi ha més avall marcada amb --->.
+
+ 2. Poseu el cursor a sobre el caràcter que cal esborrar, per corregir els
+ errors.
+
+ 3. Premeu la tecla x per esborrar el caràcter.
+
+ 4. Repetiu els passos 2 i 3 fins que la frase sigui correcta.
+
+---> Unna vaaca vva salttar sobbree la llluna.
+
+ 5. Ara que la línia és correcta, aneu a la lliçó 1.4.
+
+NOTA: Mentre aneu fent no tracteu de memoritzar, practiqueu i prou.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 1.4: EDITAR TEXT - INSERIR
+
+
+ ** En mode Normal premeu i per inserir text. **
+
+ 1. Moveu el cursor avall fins la primera línia marcada amb --->.
+
+ 2. Per fer la primera línia igual que la segona poseu el cursor sobre el
+ primer caràcter POSTERIOR al text que s'ha d'inserir.
+
+ 3. Premeu la tecla i i escriviu el text que falta.
+
+ 4. Quan hàgiu acabat premeu <ESC> per tornar al mode Normal. Repetiu
+ els passos 2, 3 i 4 per corregir la frase.
+
+---> Falten carctrs en aquesta .
+---> Falten alguns caràcters en aquesta línia.
+
+ 5. Quan us trobeu còmodes inserint text aneu al sumari de baix.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 1 SUMARI
+
+
+ 1. El cursor es mou amb les fletxes o bé amb les tecles hjkl.
+ h (esquerra) j (avall) k (amunt) l (dreta)
+
+ 2. Per entrar al Vim (des de la shell) escriviu: vim FITXER <ENTRAR>
+
+ 3. Per sortir teclegeu: <ESC> :q! <ENTRAR> per descartar els canvis.
+ O BÉ teclegeu: <ESC> :wq <ENTRAR> per desar els canvis.
+
+ 4. Per esborrar el caràcter de sota el cursor en el mode Normal premeu: x
+
+ 5. Per inserir text on hi ha el cursor, en mode Normal, premeu:
+ i escriviu el text <ESC>
+
+NOTA: La tecla <ESC> us portarà al mode Normal o cancel·larà una ordre
+ que estigui a mitges.
+
+Ara continueu amb la lliçó 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 2.1: ORDRES PER ESBORRAR
+
+
+ ** Teclegeu dw per esborrar fins al final d'una paraula. **
+
+ 1. Premeu <ESC> per estar segurs que esteu en mode normal.
+
+ 2. Moveu el cursor avall fins la línia marcada amb --->.
+
+ 3. Moveu el cursor fins el principi de la paraula que s'ha d'esborrar.
+
+ 4. Teclegeu dw per fer desaparèixer la paraula.
+
+NOTA: Les lletres dw apareixeran a la línia de baix de la pantalla mentre
+ les aneu escrivint. Si us equivoqueu premeu <ESC> i torneu a començar.
+
+---> Hi han algunes paraules divertit que no pertanyen paper a aquesta frase.
+
+ 5. Repetiu el passos 3 i 4 fins que la frase sigui correcta i continueu a
+ la lliçó 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 2.2: MÉS ORDRES PER ESBORRAR
+
+
+ ** Escriviu d$ per esborrar fins al final de la línia. **
+
+ 1. Premeu <ESC> per estar segurs que esteu en el mode Normal.
+
+ 2. Moveu el cursor avall fins a la línia marcada amb --->.
+
+ 3. Moveu el cursor fins el final de la línia correcta
+ (DESPRÉS del primer . ).
+
+ 4. Teclegeu d$ per esborrar fins al final de la línia.
+
+---> Algú ha escrit el final d'aquesta línia dos cops. línia dos cops.
+
+ 5. Aneu a la lliçó 2.3 per entendre què està passant.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 2.3: SOBRE ORDRES I OBJECTES
+
+
+ El format de l'ordre d'esborrar d és el següent:
+
+ [nombre] d objecte O BÉ d [nombre] objecte
+ On:
+ nombre - és el nombre de cops que s'ha d'executar (opcional, omissió=1).
+ d - és l'ordre per esborrar.
+ objecte - és la cosa amb la qual operar (llista a baix).
+
+ Una petita llista d'objectes:
+ w - des del cursor fins al final de la paraula, incloent-hi l'espai.
+ e - des del cursor fins al final de la paraula, SENSE incloure l'espai.
+ $ - des del cursor fins al final de la línia.
+
+NOTA: Per als aventurers: si teclegeu només l'objecte, en el mode Normal,
+ sense cap ordre, el cursor es mourà tal com està especificat a la
+ llista d'objectes.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 2.4: UNA EXCEPCIÓ A 'ORDRE-OBJECTE'
+
+
+ ** Teclegeu dd esborrar tota la línia. **
+
+ Com que molt sovint s'han d'eliminar línies senceres els dissenyadors del
+ Vi van creure que seria més fàcil teclejar dd per esborrar tota la línia.
+
+ 1. Moveu el cursor a la segona línia de la frase de baix.
+ 2. Teclegeu dd per esborrar la línia.
+ 3. Ara aneu a la quarta línia.
+ 4. Teclegeu 2dd per esborrar dues línies (recordeu nombre-ordre-objecte).
+
+ 1) Les roses són vermelles,
+ 2) El fang és divertit,
+ 3) Les violetes són blaves,
+ 4) Tinc un cotxe,
+ 5) Els rellotges diuen l'hora,
+ 6) El sucre és dolç,
+ 7) Igual que tu.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 2.5: L'ORDRE DESFER
+
+
+ ** Premeu u per desfer els últims canvis, U per arreglar tota la línia. **
+
+ 1. Moveu el cursor sobre el primer error de línia de baix marcada amb --->
+ 2. Premeu x per esborrar el caràcter no desitjat.
+ 3. Ara premeu u per desfer l'última ordre executada.
+ 4. Aquest cop corregiu tots els errors de la línia amb l'ordre x.
+ 5. Ara premeu U per restablir la línia al seu estat original.
+ 6. Ara premeu u uns quants cops per desfer U i les ordres anteriors.
+ 7. Ara premeu CONTROL-R (les dues tecles al mateix temps) uns quants cops
+ per refer les ordres.
+
+---> Correegiu els errors d'aqquesta línia i dessfeu-los aamb desfer.
+
+ 8. Aquestes ordres són molt útils. Ara aneu al sumari de la lliçó 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 2 SUMARI
+
+
+ 1. Per esborrar del cursor al final de la paraula teclegeu: dw
+
+ 2. Per esborrar del cursor al final de la línia teclegeu: d$
+
+ 3. Per esborrar una línia sencera teclegeu: dd
+
+ 4. El format de qualsevol ordre del mode Normal és:
+
+ [nombre] ordre objecte O BÉ ordre [nombre] objecte
+ on:
+ nombre - és quants cops repetir l'ordre
+ ordre - és què fer, com ara d per esborrar
+ objecte - és amb què s'ha d'actuar, com ara w (paraula),
+ $ (fins a final de línia), etc.
+
+ 5. Per desfer les accions anteriors premeu: u
+ Per desfer tots el canvis en una línia premeu: U
+ Per desfer l'ordre desfer premeu: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 3.1: L'ORDRE 'POSAR'
+
+
+ ** Premeu p per posar l'última cosa que heu esborrat després del cursor. **
+
+
+ 1. Moveu el cursor a la primera línia de llista de baix.
+
+ 2. Teclegeu dd per esborrar la línia i desar-la a la memòria.
+
+ 3. Moveu el cursor a la línia ANTERIOR on hauria d'anar.
+
+ 4. En mode Normal, premeu p per inserir la línia.
+
+ 5. Repetiu els passos 2, 3 i 4 per ordenar les línies correctament.
+
+ d) Pots aprendre tu?
+ b) Les violetes són blaves,
+ c) L'intel·ligència s'aprèn,
+ a) Les roses són vermelles,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 3.2: L'ORDRE SUBSTITUIR
+
+
+ ** Premeu r i un caràcter per substituir el caràcter de sota el cursor. **
+
+ 1. Moveu el cursor a la primera línia de sota marcada amb --->.
+
+ 2. Moveu el cursor a sobre del primer caràcter equivocat.
+
+ 3. Premeu r i tot seguit el caràcter correcte per corregir l'error.
+
+ 4. Repetiu els passos 2 i 3 fins que la línia sigui correcta.
+
+---> Quen van escroure aquerta línia, algh va apretar tikles equivocades!
+---> Quan van escriure aquesta línia, algú va apretar tecles equivocades!
+
+ 5. Ara continueu a la lliçó 3.2.
+
+NOTA: Recordeu que heu de practicar, no memoritzar.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 3.3: L'ORDRE CANVIAR
+
+
+ ** Per canviar una part o tota la paraula, escriviu cw . **
+
+ 1. Moveu el cursor a la primera línia de sota marcada amb --->.
+
+ 2. Poseu el cursor sobre la u de 'lughc'.
+
+ 3. Teclegeu cw i corregiu la paraula (en aquest cas escriviu 'ínia'.)
+
+ 4. Premeu <ESC> i aneu al següent error.
+
+ 5. Repetiu els passos 3 i 4 fins que les dues frases siguin iguals.
+
+---> Aquesta lughc té algunes paradskl que s'han de cdddf.
+---> Aquesta línia té algunes paraules que s'han de canviar.
+
+Noteu que cw no només canvia la paraula, també us posa en mode d'inserció.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 3.4: MÉS CANVIS AMB c
+
+
+ ** L'ordre canviar s'usa amb els mateixos objectes que l'ordre esborrar. **
+
+ 1. L'ordre canviar funciona igual que la d'esborrar. El format és:
+
+ [nombre] c objecte O BÉ c [nombre] objecte
+
+ 2. Els objectes són els mateixos, com w (paraula), $ (final de línia), etc.
+
+ 3. Moveu el cursor fins la primera línia marcada amb --->.
+
+ 4. Avanceu fins al primer error.
+
+ 5. Premeu c$ per fer la línia igual que la segona i premeu <ESC>.
+
+---> El final d'aquesta línia necessita canvis per ser igual que la segona.
+---> El final d'aquesta línia s'ha de corregir amb l'ordre c$.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 3 SUMARI
+
+
+ 1. Per tornar a posar el text que s'ha esborrat, premeu p . Això posa el
+ text esborrat DESPRÉS del cursor (si heu esborrat una línia anirà a
+ parar a la línia SEGÜENT d'on hi ha el cursor).
+
+ 2. Per substituir el caràcter de sota el cursor, premeu r i tot seguit
+ el caràcter que ha de reemplaçar l'original.
+
+ 3. L'ordre canviar permet canviar l'objecte especificat des del cursor
+ fins el final de l'objecte. Per exemple, cw canvia el que hi ha des
+ del cursor fins al final de la paraula, i c$ fins al final de línia.
+
+ 4. El format de l'ordre canviar és:
+
+ [nombre] c objecte O BÉ c [nombre] objecte
+
+Ara aneu a la pròxima lliçó.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 4.1: SITUACIÓ I ESTAT DEL FITXER
+
+
+ ** Premeu CTRL-g per veure la situació dins del fitxer i el seu estat.
+ Premeu SHIFT-G per anar a una línia determinada. **
+
+ Nota: No proveu res fins que hàgiu llegit TOTA la lliçó!!
+
+ 1. Mantingueu premuda la tecla Control i premeu g . A la part de baix de
+ la pàgina apareixerà un línia amb el nom del fitxer i la línia en la
+ qual us trobeu. Recordeu el número de la línia pel Pas 3.
+
+ 2. Premeu Shift-G per anar al final de tot del fitxer.
+
+ 3. Teclegeu el número de la línia on éreu i després premeu Shift-G. Això
+ us tornarà a la línia on éreu quan heu premut per primer cop Ctrl-g.
+ (Quan teclegeu el número NO es veurà a la pantalla.)
+
+ 4. Ara executeu els passos de l'1 al 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 4.2: L'ORDRE CERCAR
+
+
+ ** Premeu / seguit de la frase que vulgueu cercar. **
+
+ 1. En el mode Normal premeu el caràcter / . Noteu que el cursor apareix
+ a la part de baix de la pantalla igual que amb l'ordre : .
+
+ 2. Ara escriviu 'errroor' <ENTRAR>. Aquesta és la paraula que voleu
+ cercar.
+
+ 3. Per tornar a cercar la mateixa frase, premeu n .
+ Per cercar la mateixa frase en direcció contraria, premeu Shift-N .
+
+ 4. Si voleu cercar una frase en direcció ascendent, useu l'ordre ? en
+ lloc de /.
+
+---> "errroor" no és com s'escriu error; errroor és un error.
+
+Note: Quan la cerca arribi al final del fitxer continuarà a l'inici.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 4.3: CERCA DE PARÈNTESIS
+
+
+ ** Premeu % per cercar el ),], o } corresponent. **
+
+ 1. Poseu el cursor en qualsevol (, [, o { de la línia marcada amb --->.
+
+ 2. Ara premeu el caràcter % .
+
+ 3. El cursor hauria d'anar a la clau o parèntesis corresponent.
+
+ 4. Premeu % per tornar el cursor al primer parèntesi.
+
+---> Això ( és una línia amb caràcters (, [ ] i { } de prova. ))
+
+Nota: Això és molt útil per trobar errors en programes informàtics!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 4.4: UNA MANERA DE CANVIAR ERRORS
+
+
+ ** Escriviu :s/vell/nou/g per substituir 'vell' per 'nou'. **
+
+ 1. Moveu el cursor a la línia de sota marcada amb --->.
+
+ 2. Escriviu :s/laa/la <ENTRAR> . Aquesta ordre només canvia la primera
+ coincidència que es trobi a la línia.
+
+ 3. Ara escriviu :s/laa/la/g per fer una substitució global. Això
+ canviarà totes les coincidències que es trobin a la línia.
+
+---> laa millor època per veure laa flor és laa primavera.
+
+ 4. Per canviar totes les coincidències d'una cadena entre dues línies,
+ escriviu :#,#s/vell/nou/g on #,# són els nombres de les línies.
+ Escriviu :%s/vell/nou/g per substituir la cadena a tot el fitxer.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 4 SUMARI
+
+
+ 1. Ctrl-g mostra la posició dins del fitxer i l'estat del mateix.
+ Shift-G us porta al final del fitxer. Un número seguit de Shift-G
+ us porta a la línia corresponent.
+
+ 2. L'ordre / seguida d'una frase cerca la frase ENDAVANT.
+ L'ordre ? seguida d'una frase cerca la frase ENDARRERE.
+ Després d'una cerca premeu n per trobar la pròxima coincidència en
+ la mateixa direcció, o Shift-N per cercar en la direcció contrària.
+
+ 3. L'ordre % quan el cursor és a sobre un (,),[,],{, o } troba la
+ parella corresponent.
+
+ 4. Per substituir el primer 'vell' per 'nou' en una línia :s/vell/nou
+ Per substituir tots els 'vell' per 'nou' en una línia :s/vell/nou/g
+ Per substituir frases entre les línies # i # :#,#s/vell/nou/g
+ Per substituir totes les coincidències en el fitxer :%s/vell/nou/g
+ Per demanar confirmació cada cop afegiu 'c' :%s/vell/nou/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 5.1: COM EXECUTAR UNA ORDRE EXTERNA
+
+
+ ** Teclegeu :! seguit d'una ordre externa per executar-la. **
+
+ 1. Premeu el familiar : per col·locar el cursor a la part de baix de
+ la pantalla. Això us permet entrar una ordre.
+
+ 2. Ara teclegeu el caràcter ! (signe d'exclamació). Això us permet
+ executar qualsevol ordre de la shell.
+
+ 3. Com a exemple escriviu ls i tot seguit premeu <ENTRAR>. Això us
+ mostrarà el contingut del directori, tal com si estiguéssiu a la
+ línia d'ordres. Feu servir :!dir si ls no funciona.
+
+Nota: D'aquesta manera es pot executar qualsevol ordre externa.
+
+Nota: Totes les ordres : s'han d'acabar amb la tecla <ENTRAR>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 5.2: MÉS SOBRE L'ESCRIPTURA DE FITXERS
+
+
+ ** Per desar els canvis fets, escriviu :w FITXER. ***
+
+ 1. Escriviu :!dir o bé :!ls per obtenir un llistat del directori.
+ Ja sabeu que heu de prémer <ENTRAR> després d'això.
+
+ 2. Trieu un nom de fitxer que no existeixi, com ara PROVA.
+
+ 3. Ara feu: :w PROVA (on PROVA és el nom que heu triat.)
+
+ 4. Això desa tot el fitxer amb el nom de PROVA. Per comprovar-ho
+ escriviu :!dir per veure el contingut del directori.
+
+Note: Si sortiu del Vim i entreu una altra vegada amb el fitxer PROVA, el
+ fitxer serà una còpia exacta del tutor que heu desat.
+
+ 5. Ara esborreu el fitxer teclejant (MS-DOS): :!del PROVA
+ o bé (Unix): :!rm PROVA
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 5.3: UNA ORDRE SELECTIVA PER DESAR
+
+
+ ** Per desar una part del fitxer, escriviu :#,# w FITXER **
+
+ 1. Un altre cop, feu :!dir o :!ls per obtenir un llistat del directori
+ i trieu un nom de fitxer adequat com ara PROVA.
+
+ 2. Moveu el cursor a dalt de tot de la pàgina i premeu Ctrl-g per
+ saber el número de la línia. RECORDEU AQUEST NÚMERO!
+
+ 3. Ara aneu a baix de tot de la pàgina i torneu a prémer Ctrl-g.
+ RECORDEU AQUEST NÚMERO TAMBÉ!
+
+ 4. Per desar NOMÉS una secció en un fitxer, escriviu :#,# w PROVA on
+ #,# són els dos números que heu recordat (dalt,baix) i PROVA el nom
+ del fitxer.
+
+ 5. Mireu que el fitxer nou hi sigui amb :!dir però no l'esborreu.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 5.4: OBTENIR I AJUNTAR FITXERS
+
+
+ ** Per inserir el contingut d'un fitxer, feu :r FITXER **
+
+ 1. Assegureu-vos, amb l'ordre :!dir , que el fitxer PROVA encara hi és.
+
+ 2. Poseu el cursor a dalt de tot d'aquesta pàgina.
+
+NOTA: Després d'executar el Pas 3 veureu la lliçó 5.3. Aleshores moveu-vos
+ cap avall fins a aquesta lliçó un altre cop.
+
+ 3. Ara obtingueu el fitxer PROVA amb l'ordre :r PROVA on PROVA és el
+ nom del fitxer.
+
+NOTA: El fitxer que obtingueu es posa en el lloc on hi hagi el cursor.
+
+ 4. Per comprovar que s'ha obtingut el fitxer tireu enrere i mireu com
+ ara hi han dues còpies de la lliçó 5.3: l'original i la del fitxer.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 5 SUMARI
+
+
+ 1. :!ordre executa una ordre externa.
+
+ Alguns exemples útils són:
+ (MS-DOS) (Unix)
+ :!dir :!ls - mostra un llistat del directori
+ :!del FITXER :!rm FITXER - esborra el fitxer FITXER
+
+ 2. :w FITXER escriu el fitxer editat al disc dur, amb el nom FITXER.
+
+ 3. :#,#w FITXER desa les línies de # a # en el fitxer FITXER.
+
+ 4. :r FITXER llegeix el fitxer FITXER del disc dur i l'insereix en el
+ fitxer editat a la posició on hi ha el cursor.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 6.1: L'ORDRE OBRIR
+
+
+** Premeu o per obrir una línia sota el cursor i entrar en mode inserció. **
+
+ 1. Moveu el cursor a la línia de sota marcada amb --->.
+
+ 2. Premeu o (minúscula) per obrir una línia SOTA el cursor i situar-vos
+ en mode d'inserció.
+
+ 3. Ara copieu la línia marcada amb ---> i premeu <ESC> per tornar al mode
+ normal.
+
+---> Després de prémer o el cursor es situa a la línia nova en mode inserció.
+
+ 4. Per obrir una línia SOBRE el cursor, premeu la O majúscula, en lloc
+ de la minúscula. Proveu-ho amb la línia de sota.
+Obriu una línia sobre aquesta amb Shift-O amb el cursor en aquesta línia.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 6.2: L'ORDRE AFEGIR
+
+
+ ** Premeu a per afegir text DESPRÉS del cursor. **
+
+ 1. Moveu el cursor al final de la primera línia de sota marcada
+ amb ---> prement $ en el mode Normal.
+
+ 2. Premeu la lletra a (minúscula) per afegir text DESPRÉS del caràcter
+ sota el cursor. (La A majúscula afegeix text al final de línia.)
+
+Nota: Així s'evita haver de prémer i , l'últim caràcter, el text a inserir,
+ la tecla <ESC>, cursor a la dreta, i finalment x , només per afegir
+ text a final de línia.
+
+ 3. Ara completeu la primera línia. Tingueu en compte que aquesta ordre
+ és exactament igual que la d'inserir, excepte pel que fa al lloc on
+ s'insereix el text.
+
+---> Aquesta línia us permetrà practicar
+---> Aquesta línia us permetrà practicar afegir text a final de línia.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 6.3: UNA ALTRA MANERA DE SUBSTITUIR
+
+
+ ** Teclegeu una R majúscula per substituir més d'un caràcter. **
+
+ 1. Moveu el cursor a la línia de sota marcada amb --->.
+
+ 2. Poseu el cursor al principi de la primera paraula que es diferent
+ respecte a la segona línia marcada amb ---> (la paraula "l'última").
+
+ 3. Ara premeu R i substituïu el que queda de text a la primera línia
+ escrivint sobre el text vell, per fer-la igual que la segona.
+
+---> Per fer aquesta línia igual que l'última useu les tecles.
+---> Per fer aquesta línia igual que la segona, premeu R i el text nou.
+
+ 4. Tingueu en compte que en prémer <ESC> per sortir, el text que no
+ s'hagi alterat es manté.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lliçó 6.4: ESTABLIR OPCIONS
+
+ ** Feu que les ordres cercar o substituir ignorin les diferències
+ entre majúscules i minúscules **
+
+ 1. Cerqueu la paraula 'ignorar' amb: /ignorar
+ Repetiu-ho uns quants cops amb la tecla n.
+
+ 2. Establiu l'opció 'ic' (Ignorar Capitals) escrivint:
+ :set ic
+
+ 3. Ara cerqueu 'ignorar' un altre cop amb la tecla n.
+ Repetiu-ho uns quants cops més.
+
+ 4. Establiu les opcions 'hlsearch' i 'incsearch':
+ :set hls is
+
+ 5. Ara torneu a executar una ordre de cerca, i mireu què passa:
+ /ignorar
+
+ 6. Per treure el ressalt dels resultats, feu:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 6 SUMARI
+
+
+ 1. L'ordre o obre una línia SOTA la del cursor i mou el cursor a la nova
+ línia, en mode Inserció.
+ La O majúscula obre la línia a SOBRE la que hi ha el cursor.
+
+ 2. Premeu una a per afegir text DESPRÉS del caràcter sota el cursor.
+ La A majúscula afegeix automàticament el text a final de línia.
+
+ 3. L'ordre R majúscula us posa en mode substitució fins que premeu <ESC>.
+
+ 4. Escriviu ":set xxx" per establir l'opció "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 7: ORDRES D'AJUDA
+
+
+ ** Utilitzeu el sistema intern d'ajuda **
+
+ El Vim té un extens sistema d'ajuda. Per llegir una introducció proveu una
+ d'aquestes tres coses:
+ - premeu la tecla <AJUDA> (si en teniu alguna)
+ - premeu la tecla <F1> (si en teniu alguna)
+ - escriviu :help <ENTRAR>
+
+ Teclegeu :q <ENTRAR> per tancar la finestra d'ajuda.
+
+ Podeu trobar ajuda sobre pràcticament qualsevol tema donant un argument
+ a l'ordre ":help". Proveu això (no oblideu prémer <ENTRAR>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LLIÇÓ 8: CREAR UN SCRIPT D'INICI
+
+ ** Activar funcions automàticament **
+
+ El Vim té moltes més funcions que el Vi, però moltes estan desactivades per
+ omissió. Per començar a utilitzar més funcions heu de crear un fitxer "vimrc".
+
+ 1. Comenceu a editar el fitxer "vimrc", depenent del sistema
+ :edit ~/.vimrc per Unix
+ :edit $VIM/_vimrc per MS-Windows
+
+ 2. Ara llegiu el fitxer "vimrc" d'exemple:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Deseu el fitxer amb:
+
+ :write
+
+ El pròxim cop que executeu el Vim usarà ressalt de sintaxi.
+ Podeu afegir els ajustos que vulgueu en aquest fitxer "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Aquí conclou el Tutor del Vim. Ha sigut un intent de fer-vos una breu
+ introducció a l'editor Vim, suficient com per què el pugueu començar a fer
+ servir. Està lluny de ser complet perquè el Vim té moltes més ordres.
+ Llegiu el manual de l'usuari: ":help user-manual".
+
+ Per un estudi més profund us recomanem el següent llibre:
+ Vim - Vi Improved - de Steve Oualline
+ Editorial: New Riders
+ És el primer llibre dedicat completament al Vim, especialment útil per a
+ usuaris novells. Té molts exemples i dibuixos.
+ Vegeu http://iccf-holland.org/click5.html
+
+ Aquest altre és més vell i tracta més sobre el Vi que sobre el Vim:
+ Learning the Vi Editor - de Linda Lamb
+ Editorial: O'Reilly & Associates Inc.
+ És un bon llibre per saber qualsevol cosa que desitgeu sobre el Vi.
+ La sisena edició també inclou informació sobre el Vim.
+
+ Aquest tutorial ha estat escrit per Michael C. Pierce i Robert K. Ware,
+ Colorado School of Mines amb la col·laboració de Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ Modificat pel Vim per Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.de b/runtime/tutor/tutor.de
new file mode 100644
index 000000000..2a8f0909a
--- /dev/null
+++ b/runtime/tutor/tutor.de
@@ -0,0 +1,849 @@
+===============================================================================
+= W i l l k o m m e n z u m V I M T u t o r - Version 1.5D =
+===============================================================================
+
+ Vim ist ein sehr mächtiger Editor, der viele Befehle bereitstellt;
+ zu viele, um alle in einem Tutor wie diesem zu erklären.
+ Dieser Tutor ist so gestaltet, um genug Befehle vorzustellen, so dass Du
+ die Fähigkeit erlangst, Vim mit Leichtigkeit als einen Allzweck-Editor
+ zu benutzen.
+
+ Die Zeit für das Durcharbeiten dieses Tutors beträgt ca. 25-30 Minuten,
+ abhängig davon, wie viel Zeit Du mit Experimentieren verbringst.
+
+ Die in den Lektionen angewendeten Kommandos werden den Text modifizieren.
+ Erstelle eine Kopie dieser Datei, in der Du üben willst
+ (falls Du "vimtutor.bat" aufgerufen hast, ist dies bereits eine Kopie).
+
+ Es ist wichtig, sich zu vergegenwärtigen, dass dieser Tutor angelegt ist,
+ um über das Anwenden zu lehren. Das bedeutet, dass Du die Befehle ausführen
+ musst, um sie richtig zu lernen. Wenn Du nur den Text liest, vergisst Du die
+ Befehle!
+
+ Jetzt stelle sicher, dass Deine Umstelltaste NICHT gedrückt ist, und
+ betätige die j Taste genügend Male, um den Cursor nach unten
+ zu bewegen, so dass Lektion 1.1 den Bildschirm vollkommen ausfüllt.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.1: BEWEGEN DES CURSORS
+
+
+ ** Um den Cursor zu bewegen, drücke die h,j,k,l Tasten wie unten gezeigt. **
+
+ ^ Hilfestellung:
+ k Die h Taste befindet sich links und bewegt nach links.
+ < h l > Die l Taste liegt rechts und bewegt nach rechts.
+ j Die j Taste ähnelt einem Pfeil nach unten.
+ v
+ 1. Bewege den Cursor auf dem Bildschirm herum, bis Du Dich sicher fühlst.
+
+ 2. Halte die Nach-Unten-Taste (j) gedrückt, bis sie sich wiederholt.
+---> Jetzt weißt Du, wie Du Dich zur nächsten Lektion bewegen kannst.
+
+ 3. Benutze die Nach-Unten-Taste, um Dich zu Lektion 1.2 zu bewegen.
+
+Bemerkung: Immer, wenn Du Dir unsicher bist über das, was Du getippt hast,
+ drücke <ESC> , um Dich in den Normal-Modus zu begeben.
+ Dann gib das gewünschte Kommando noch einmal ein.
+
+Bemerkung: Die Cursor-Tasten sollten ebenfalls funktionieren. Aber wenn Du
+ hjkl benutzt, wirst Du in der Lage sein, Dich sehr viel schneller
+ umherzubewegen, wenn Du Dich erst einmal daran gewöhnt hast.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.2: STARTEN UND VERLASSEN VON VIM
+
+
+ !! ACHTUNG: Bevor Du einen der unten aufgeführten Schritte ausführst, lies
+ diese gesamte Lektion!!
+
+ 1. Drücke die <ESC> Taste (um sicherzustellen, dass Du im Normal-Modus bist).
+
+ 2. Tippe: :q! <ENTER>.
+
+---> Dies beendet den Editor OHNE jedwelche Änderungen, die Du gemacht hast.
+ Wenn Du die Änderungen speichern und beenden willst, tippe:
+ :wq <ENTER>
+
+ 3. Wenn Du die Eingabeaufforderung siehst, tippe das Kommando, dass Dich zu
+ diesem Tutor geführt hat. Das könnte sein: vimtutor <ENTER>
+ Im Normalfall würdest Du eingeben Vim tutor <ENTER>
+
+---> 'Vim' ist der Aufruf des Editors, 'tutor' ist die zu editierende Datei.
+
+ 4. Wenn Du Dir diese Schritte eingeprägt hast und Du Dich sicher genug fühlst,
+ führe Schritte 1 bis 3 aus, um den Editor zu verlassen und wieder
+ hineinzugelangen. Dann bewege den Cursor nach unten zur Lektion 1.3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.3: TEXT EDITIEREN - LÖSCHEN
+
+
+ ** Im Normal-Modus, drücke x um das Zeichen unter dem Cursor zu löschen. **
+
+ 1. Bewege den Cursor zu der mit ---> markierten Zeile unten.
+
+ 2. Um die Fehler zu beheben, bewege den Cursor, bis er auf dem Zeichen steht,
+ das gelöscht werden soll.
+
+ 3. Drücke die x Taste, um das überflüssige Zeichen zu löschen.
+
+ 4. Wiederhole die Schritte 2 bis 4, bis der Satz korrekt ist.
+
+---> Die Kkuh sprangg übber deen Moond.
+
+ 5. Wenn nun die Zeile korrekt ist, gehe weiter zur Lektion 1.4.
+
+Anmerkung: Während Du durch diesen Tutor gehst, versuche nicht, auswendig zu
+ lernen, lerne vielmehr durch Anwenden.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.4: TEXT EDITIEREN - EINFÜGEN
+
+
+ ** Während Du im Normal-Modus bist, drücke i , um Text einzufügen. **
+
+ 1.Bewege den Cursor zu der mit ---> markierten Zeile unten.
+
+ 2. Um die erste Zeile mit der zweiten gleichzumachen, bewege den Cursor auf
+ das erste Zeichen NACH der Stelle, wo der Text eingefügt werden soll.
+
+ 3. Drücke i und gib die notwendige Ergänzung ein.
+
+ 4. Wenn jeweils ein Fehler beseitigt ist, drücke <ESC> , um zum Normal-Modus
+ zurückzukehren.
+ Wiederhole die Schritte 2 bis 4, um den Satz zu korrigieren.
+
+---> In dieser ft etwas .
+---> In dieser Zeile fehlt etwas Text.
+
+ 5. Wenn Du Dich mit dem Einfügen von Text sicher fühlst, bewege den Cursor zur
+ untenstehenden Zusammenfassung.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON LEKTION 1
+
+
+ 1. Der Cursor wird bewegt, indem man entweder die Pfeiltasten oder die
+ hjkl Tasten benutzt.
+ h (links) j (unten) k (aufwärts) l (rechts)
+
+ 2. Um Vim aufzurufen (vom % prompt) tippe: vim DATEINAME <ENTER>
+
+ 3. Um Vim zu verlassen, tippe: <ESC> :q! <ENTER> ,
+ um alle Änderungen zu verwerfen.
+ ODER tippe: <ESC> :wq <ENTER> ,
+ um die Änderungen zu speichern.
+
+ 4. Um ein Zeichen im Normal-Modus zu löschen, tippe: x
+
+ 5. Um Text beim Cursor einzugeben, während Du im Normal-Modus bist, tippe:
+ i Text eingeben <ESC>
+
+Bemerkung: Drücken von <ESC> bringt Dich in den Normal-Modus oder bricht ein
+ ungewolltes, erst teilweise eingegebenes Kommando ab.
+
+Nun fahre mit Lektion 2 fort.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.1: LÖSCHKOMMANDOS
+
+
+ ** Tippe dw , um bis zum Ende des Wortes zu löschen **
+
+ 1. Drücke <ESC> um sicherzustellen, dass Du im Normal-Modus bist.
+
+ 2. Bewege den Cursor zu der mit ---> markierten Zeile unten.
+
+ 3. Bewege den Cursor zum Anfang eines Wortes, das gelöscht werden soll.
+
+ 4. Tippe dw , um das Wort zu entfernen.
+
+ Bemerkung: Die Buchstaben dw erscheinen auf der letzten Zeile des
+ Bildschirms, wenn Du sie eingibst. Wenn Du etwas falsch eingetippt hast,
+ drücke <ESC> und fahre fort.
+
+---> Einige Wörter lustig gehören nicht Papier in diesen Satz.
+
+ 5. Wiederhole die Schritte 3 und 4, bis der Satz korrekt ist und gehe
+ danach zur Lektion 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.2: WEITERE LÖSCHKOMMANDOS
+
+
+ ** Tippe d$ , um bis zum Ende der Zeile zu löschen. **
+
+ 1. Drücke <ESC> ,um sicherzustellen, dass Du im Normal-Modus bist.
+
+ 2. Bewege den Cursor zu der mit ---> markierten Zeile unten.
+
+ 3. Bewege den Cursor zum Ende der korrekten Zeile (NACH dem ersten . ).
+
+ 4. Tippe d$ ,um bis zum Ende der Zeile zu löschen.
+
+---> Jemand hat das Ende der Zeile doppelt eingegeben. doppelt eingegeben.
+
+
+ 5. Gehe weiter zur Lektion 2.3 , um zu verstehen, was hierbei passiert.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.3: ÜBER KOMMANDOS UND OBJEKTE
+
+
+ Das Format für das Löschkommando d ist folgendermaßen:
+
+ [Nummer] d Objekt ODER d [Nummer] Objekt
+
+ Wobei:
+ Nummer - gibt an, wie viele Male das Kommando ausgeführt werden soll
+ (optional, standardmäßig 1).
+ d - ist das Löschkommando.
+ Objekt - bedeutet, worauf das Kommando angewendet wird (unten aufgeführt).
+
+ Eine kurze Liste von Objekten:
+ w - vom Cursor an bis zum Ende des Wortes, inklusive dem Leerzeichen.
+ e - vom Cursor an bis zum Ende des Wortes, OHNE das Leerzeichen.
+ $ - vom Cursor an bis zum Ende der Zeile.
+
+Bemerkung: Für die Wagemutigen: die Eingabe lediglich des Objekt-Teils im
+ Normal-Modus ohne ein Kommando bewegt den Cursor so,
+ wie in der Objektliste angegeben ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.4: EINE AUSNAHME ZU 'KOMMANDO-OBJEKT'
+
+
+ ** Tippe dd , um eine ganze Zeile zu löschen. **
+
+ Wegen der Häufigkeit, dass man ganze Zeilen löscht, kamen die
+ Entwickler von Vim darauf, dass es leichter wäre, zwei d's hintereinander
+ einzugeben, um eine Zeile zu löschen.
+
+ 1. Bewege den Cursor zur zweiten Zeile in der unten stehenden Redewendung.
+ 2. Tippe dd , um die Zeile zu löschen.
+ 3. Nun bewege Dich zur vierten Zeile.
+ 4. Tippe 2dd (erinnere Dich an Nummer-Kommando-Objekt),
+ um die überflüssigen Zeilen zu löschen.
+
+ 1) Rosen sind rot,
+ 2) Matsch ist lustig,
+ 3) Veilchen sind blau,
+ 4) Ich habe ein Auto,
+ 5) Die Uhr sagt die Zeit,
+ 6) Zucker ist süß,
+ 7) So wie Du auch.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.5: RÜCKGÄNGIG MACHEN (UNDO)
+
+
+ ** Tippe u , um die letzten Kommandos rückgängig zu machen **
+ ** oder U um eine ganze Zeile wiederherzustellen. **
+
+ 1. Bewege den Cursor zu der mit ---> markierten Zeile unten
+ und setze ihn auf den ersten Fehler.
+ 2. Tippe x , um das erste überflüssige Zeichen zu löschen.
+ 3. Nun tippe u um das soeben ausgeführte Kommando rückgängig zu machen.
+ 4. Dieses Mal behebe alle Fehler auf der Zeile, indem Du das x Kommando
+ anwendest.
+ 5. Nun tippe ein großes U , um die Zeile in ihren Ursprungszustand
+ wiederherzustellen.
+ 6. Nun tippe u mehrere Male, um das U und die vorhergehenden Kommandos
+ rückgängig zu machen.
+ 7. Nun tippe CTRL-R (halte die CTRL-Taste gedrückt und drücke R )
+ mehrere Male, um die Kommandos rückgängig zu machen
+ (die Rückgängigmachungen rückgängig machen).
+
+---> Beehebe die Fehller diesser Zeile und sttelle sie mitt 'undo' wieder her.
+
+ 8. Dieses sind sehr nützliche Kommandos.
+ Nun gehe weiter zur Zusammenfassung von Lektion 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON LEKTION 2
+
+
+ 1. Um vom Cursor bis zum Ende eines Wortes zu löschen, tippe: dw
+
+ 2. Um vom Cursor bis zum Ende einer Zeile zu löschen, tippe: d$
+
+ 3. Um eine ganze Zeile zu löschen, tippe: dd
+
+ 4. Das Format für ein Kommandos im Normal-Modus ist:
+
+ [Nummer] Kommando Objekt ODER Kommando [Nummer] Objekt
+ wobei:
+ Nummer - gibt an, wie oft das Kommando wiederholt wird
+ Kommando - gibt an, was getan werden soll, zum Beispiel d für delete
+ Objekt - gibt an, worauf das Kommando angewendet werden soll,
+ zum Beispiel w (Wort), $ (zum Ende der Zeile), etc.
+
+ 5. Um vorherige Aktionen rückgängig zu machen, tippe: u (kleines u)
+ Um alle Änderungen auf einer Zeile rückgängig zu machen: U (großes U)
+ Um die Rückgängigmachungen rückgängig zu machen, tippe: CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.1: ANFÜGEN (PUT)
+
+
+ ** Tippe p ,um das zuletzt Gelöschte nach dem Cursor anzufügen. **
+
+ 1. Bewege den Cursor zur ersten Zeile des unten stehenden Sinnspruchs.
+
+ 2. Tippe dd , um die Zeile zu löschen und sie im Vims Puffer zu speichern.
+
+ 3. Bewege den Cursor zur Zeile ÜBER derjenigen,
+ wo die gelöschte Zeile platziert werden soll.
+
+ 4. Im Normal-Modus, tippe p , um die Zeile zu platzieren.
+
+ 5. Wiederhole die Schritte 2 bis 4, um alle Zeilen in die richtige Reihenfolge
+ zu bringen.
+
+ d) Kannst Du das auch?
+ b) Veilchen sind blau,
+ c) Intelligenz ist erlernbar,
+ a) Rosen sind rot,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.2: ERSETZEN (REPLACE)
+
+
+ ** Tippe r und ein Zeichen, um das Zeichen unter dem Cursor zu ersetzen. **
+
+ 1. Bewege den Cursor zur ersten unten stehenden, mit ---> markierten Zeile.
+
+ 2. Bewege den Cursor, bis er sich auf dem ersten Fehler befindet.
+
+ 3. Tippe r und anschließend das Zeichen, welches den Fehler beheben sollte.
+
+ 4. Wiederhole die Schritte 2 und 3, bis die erste Zeile korrekt ist.
+
+---> Als diese Zeite eingegoben wurde, wurden einike falsche Tasten gelippt.
+---> Als diese Zeile eingegeben wurde, wurden einige falsche Tasten getippt.
+
+ 5. Nun fahre fort mit Lektion 3.2.
+
+Bemerkung: Erinnere Dich, dass Du durch Anwenden lernen solltest, nicht durch
+ Auswendiglernen.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.3: ÄNDERN (CHANGE)
+
+
+ ** Um ein Wortteil oder ein ganzes Wort zu ändern, tippe cw . **
+
+ 1. Bewege den Cursor zur ersten unten stehenden, mit ---> markierten Zeile.
+
+ 2. Plaziere den Cursor auf das s von Wstwr.
+
+ 3. Tippe cw und die Wortkorrektur ein (in diesem Fall, tippe 'örter'.)
+
+ 4. Drücke <ESC> und bewege den Cursor zum nächsten Fehler
+ (Das erste zu ändernde Zeichen.)
+
+ 5. Wiederhole Schritte 3 und 4 bis der erste Satz gleich dem zweiten ist.
+
+---> Einige Wstwr dieser Zlaww lasdjlaf mit dem Ändern-Kommando gaaauu werden.
+---> Einige Wörter dieser Zeile sollen mit dem Ändern-Kommando geändert werden.
+
+Bemerke, dass cw nicht nur das Wort ersetzt, sondern Dich außerdem in den
+ Eingabemodus versetzt.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.4: MEHR ÄNDERUNGEN MITTELS c
+
+
+ ** Das change-Kommando arbeitet mit denselben Objekten wie delete **
+
+ 1. Das change Kommando arbeitet gleicher Weise wie delete. Das Format ist:
+
+ [Nummer] c Objekt ODER c [Nummer] Objekt
+
+ 2. Auch sind die Objekte gleich, so wie w (Wort), $ (Ende der Zeile), etc.
+
+ 3. Bewege den Cursor zur ersten unten stehenden, mit ---> markierten Zeile.
+
+ 4. Bewege den Cursor zum ersten Unterschied zur anderen Zeile.
+
+ 5. Tippe c$ , um den Rest der Zeile an die zweite anzugleichen
+ und drücke abschließend <ESC> .
+
+---> Das Ende dieser Zeile sollte an die zweite Zeile angeglichen werden.
+---> Das Ende dieser Zeile sollte mit dem 'c$' Kommando korrigiert werden.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON LEKTION 3
+
+
+ 1. Um einen vorher gelöschten Text anzufügen, tippe p . Diese fügt den
+ gelöschten Text NACH dem Cursor an (wenn es sich um eine ganze Zeile
+ handelt, wird ab der Zeile unter dem Cursor eingefügt).
+
+ 2. Um das Zeichen unter dem Cursor zu ersetzen, tippe r ; das danach
+ eingegebene Zeichen ersetzt das Original.
+
+ 3. Das Änderungs- (change) Kommando erlaubt, das angegebene Objekt vom Cursor
+ bis zum Ende des Objektes zu ändern. Tippe z.B. cw , um eine Änderung vom
+ Cursor bis zum Ende des Wortes vorzunehmen; c$ bis zum Ende der Zeile.
+
+ 4. Das Format für change ist:
+
+ [Nummer] c Objekt ODER c [Nummer] Objekt
+
+Nun fahre mit der nächsten Lektion fort.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.1: DATEIPOSITION UND DATEISTATUS
+
+
+ ** Tippe CTRL-g , um Deine Dateiposition sowie den Dateistatus anzuzeigen. **
+ ** Tippe SHIFT-G , um Dich zu einer Zeile in der Datei zu bewegen. **
+
+ Bemerkung: Lies diese gesamte Lektion, bevor Du irgendeinen Schritt ausführst!!
+
+ 1. Halte die Ctrl Taste unten und drücke g . Eine Statuszeile erscheint in
+ der untersten Zeile des Fensters mit dem Dateinamen und der Zeile,
+ auf der Du Dich befindest. Präge Dir die Zeilennummer für Schritt 3 ein.
+
+ 2. Drücke Shift-G , um Dich zum Ende der Datei zu begeben.
+
+ 3. Gib die Nummer der Zeile ein, auf der Du vorher warst, gefolgt von Shift-G.
+ Dieses bringt Dich zurück zu der Zeile, auf der Du gestanden hast, als Du
+ das erste Mal Ctrl-g gedrückt hast.
+ (Wenn Du die Ziffern eingibst, werden sie NICHT auf dem Schirm angezeigt.)
+
+ 4. Wenn Du sicher genug fühlst, führe die Schritte 1 bis 3 aus.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.2: DAS SUCHEN - KOMMANDO
+
+
+ ** Tippe / gefolgt von einem Ausdruck, um nach dem Ausdruck zu suchen. **
+
+ 1. Wenn Du im Normal-Modus bist, tippe das / Zeichen. Beachte, dass das /
+ und der Cursor auf der untersten Zeile des Schirms erscheinen,
+ so wie beim : Kommando.
+
+ 2. Nun tippe 'Fehhler' <ENTER>. Dies ist das Wort, nach dem Du suchen willst.
+
+ 3. Um nach demselben Ausdruck weiterzusuchen, tippe einfach n (für *n*ext).
+ Um nach demselben Ausdruck in der anderen Richtung zu suchen, Shift-N .
+
+ 4. Wenn Du nach einem Ausdruck rückwärts in der Datei suchen willst,
+ benutze das Kommando ? statt / .
+
+---> Wenn die Suche das Dateiende erreicht hat, wird sie am Anfang fortgesetzt.
+
+ Fehler schreibt sich nicht "Fehhler"; "Fehhler" ist ein Fehler
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.3: PASSENDE KLAMMERN FINDEN
+
+
+ ** Tippe % , um eine korrespondierende Klammer ),], oder } zu finden. **
+
+ 1. Plaziere den Cursor auf irgendeinem der Zeichen (, [, oder {
+ in der unten stehenden Zeile, die mit ---> markiert ist.
+
+ 2. Nun tippe das % Zeichen.
+
+ 3. Der Cursor sollte sich nun auf der gegenüberliegenden Klammer befinden.
+
+ 4. Tippe % , um den Cursor zurück auf die erste Gegenklammer zurückzubewegen.
+
+---> Dies ( ist eine Testzeile mit ( verschiedenen [ Klammern ] { xx } darin. ))
+
+Bemerkung: Diese Funktionalität ist sehr nützlich bei der Fehlersuche in einem
+ Programmtext, in dem eine passende Klammer fehlt!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.4: WEGE, UM FEHLER ZU BEHEBEN
+
+
+ ** Tippe :s/alt/neu/g , um 'alt' durch 'neu' zu ersetzen. **
+
+ 1. Bewege den Cursor zu der unten stehenden mit ---> markierten Zeile.
+
+ 2. Tippe :s/diee/die <ENTER> . Bemerke, dass der Befehl nur das erste
+ Vorkommen auf der Zeile ersetzt.
+
+ 3. Nun tippe :s/diee/die/g , welches bedeutet, eine zeilenweite
+ (*g*lobale) Ersetzung vorzunehmen.
+ Dies ersetzt alle Vorkommen auf der Zeile.
+
+---> diee schönste Zeit, um diee Blumen anzuschauen, ist diee Frühlingszeit.
+
+ 4. Um alle Vorkommen einer Zeichenkette zwischen zwei Zeilen zu ändern,
+ tippe :#,#s/alt/neu/g , wobei #,# die zwei Nummern der Zeilen sind.
+ Tippe :%s/alt/neu/g , um alle Vorkommen in der gesamten Datei zu ändern.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON LEKTION 4
+
+
+ 1. Ctrl-g zeigt die aktuelle Dateiposition sowie den Dateistatus.
+ Shift-G bringt Dich bis zum Ende der Datei. Eine Zeilennummer
+ gefolgt von Shift-G bewegt den Cursor zu der Zeilennummer.
+
+ 2. Die Eingabe von / gefolgt von einem Ausdruck sucht VORWÄRTS nach dem
+ Ausdruck.
+ Die Eingabe von ? gefolgt von einem Ausdruck sucht RÜCKWÄRTS nach dem
+ Ausdruck.
+ Tippe nach einer Suche n , um das nächste Vorkommen in der gleichen
+ Richtung zu finden; oder Shift-N , um in der entgegengesetzten Richtung
+ zu suchen.
+
+ 3. Die Eingabe von % , wenn der Cursor sich auf (,),[,],{, oder }
+ befindet, findet die korrespondierende Gegenklammer.
+
+ 4. Um das ERSTE Vorkommen von alt in eine Zeile durch neu zu ersetzen, tippe
+ :s/alt/neu
+ Um ALLE Vorkommen von alt in eine Zeile durch neu zu ersetzen, tippe
+ :s/alt/neu/g
+ Um Ausdrücke innerhalb von zwei Zeilen zu ersetzen, tippe
+ :#,#s/alt/neu/g
+ Um alle Vorkommen in der ganzen Datei zu ersetzen, tippe
+ :%s/alt/neu/g
+ Um jedes Mal nach einer Bestätigung gefragt zu werden, füge 'c' hinzu.
+ :%s/alt/neu/gc (*c*onfirm)
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.1: AUSFÜHREN EINES EXTERNEN KOMMANDOS
+
+
+ ** Gib :! , gefolgt von einem externen Kommando ein, um es auszuführen. **
+
+ 1. Tippe das vertraute Kommando : , um den Cursor auf die unterste Zeile
+ des Fensters zu setzen. Dies erlaubt Dir, ein Kommando einzugeben.
+
+ 2. Nun tippe ein ! (Ausrufezeichen). Dieses ermöglicht Dir, ein
+ beliebiges, externes Shellkommando auszuführen.
+
+ 3. Als Beispiel tippe ls nach dem ! und drücke <ENTER>. Dies zeigt
+ eine Auflistung Deines Verzeichnisses; genauso, als wenn Du auf der
+ Eingabeaufforderung wärst.
+ Verwende :!dir , falls ls nicht funktioniert.
+
+---> Bemerkung: Mit dieser Methode kann jedes beliebige externe Kommando
+ ausgeführt werden.
+
+---> Bemerkung: Alle : Kommandos müssen durch Eingabe von <ENTER>
+ abgeschlossen werden.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.2: MEHR ÜBER DAS SCHREIBEN VON DATEIEN
+
+
+** Um an der Datei durchgeführte Änderungen zu sichern , tippe :w DATEINAME. **
+
+ 1. Tippe :!ls oder :!dir , um eine Auflistung Deines Verzeichnisses
+ zu erhalten.
+ Du weißt nun bereits, dass Du danach <ENTER> eingeben musst.
+
+ 2. Wähle einen Dateinamen, der dort noch nicht existiert, z.B. TEST.
+
+ 3. Nun tippe: :w TEST (wobei TEST der gewählte Dateiname ist.)
+
+ 4. Dieses speichert diese ganze Datei (Vim Tutor) unter dem Namen TEST.
+ Um dieses zu überprüfen, tippe nochmals :!ls bzw. !dir,
+ um Deinen Verzeichnisinhalt zu sehen.
+
+---> Beachte: würdest Du Vim jetzt beenden und danach wieder mit dem Dateinamen
+ TEST öffnen, dann wäre diese Datei eine exakte Kopie des Tutors zu dem
+ Zeitpunkt, als Du ihn gespeichert hast.
+
+ 5. Nun entferne die Datei durch Eingabe von :!rm TEST bzw. :!del TEST.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.3: SELEKTIVES SCHREIBEN VON DATEIEN
+
+
+ ** Um einen Abschnitt der Datei zu speichern tippe :#,# w DATEINAME **
+
+ 1. Gib nochmals :!ls bzw :!dir ein, um eine Auflistung Deines
+ Verzeichnisses zu erhalten und wähle einen geeigneten Dateinamen wie TEST.
+
+ 2. Bewege den Cursor zum Anfang dieses Kapitels und tippe Ctrl-g , um die
+ Nummer dieser Zeile zu erhalten. PRÄGE DIR DIESE NUMMER EIN!
+
+ 3. Nun bewege Dich zum Ende dieses Kapitels und tippe wieder Ctrl-g .
+ PRÄGE DIR AUCH DIESE ZEILENNUMMER EIN!
+
+ 4. Um NUR einen Abschnitt einer Datei zu speichern, tippe :#,# w TEST
+ wobei #,# die zwei Nummern sind, die Du im Gedächtnis hast (oben, unten);
+ und TEST Dein Dateiname ist.
+
+ 5. Überprüfe wiederum mit :!ls oder :!dir nach, dass die Datei
+ existiert, aber lösche sie NICHT.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.4: EINLESEN UND ZUSAMMENFÜHREN VON DATEIEN
+
+
+ ** Um den Inhalt einer Datei einzulesen, tippe :r DATEINAME **
+
+ 1. Tippe :!ls bzw. !dir , um sicherzustellen, dass Deine Datei TEST
+ von vorhin vorhanden ist.
+
+ 2. Plaziere den Cursor auf der ersten Zeile dieses Kapitels.
+
+BEACHTE: Nachdem Du Schritt 3 ausgeführt hast, wirst Du Lektion 5.3 sehen.
+ An diesem Punkt bewege Dich wieder ABWÄRTS zu dieser Lektion.
+
+ 3. Nun lies Deine Datei TEST ein indem Du das Kommando :r TEST ausführst,
+ wobei TEST der Name der Datei ist.
+
+BEMERKUNG: Die Datei, die Du einliest, wird an der Stelle eingefügt, an der
+ sich der Cursor befindet.
+
+ 4. Um zu überprüfen, dass eine Datei eingelesen wurde, gehe zurück und
+ sehe, dass es jetzt zwei Kopien von Lektion 5.3 gibt, das Original und die
+ eingefügte Version.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON Lektion 5
+
+
+ 1. :!Kommando führt ein externes (Shell-)Kommando aus.
+
+ Einige nützliche Beispiele sind
+ UNIX:
+ :!ls - Auflistung des aktuellen Verzeichnisses
+ :!rm DATEINAME - entfernt Datei DATEINAME
+ MS-DOS/Windows:
+ :!dir - Auflistung des aktuellen Verzeichnisses
+ :!del DATEINAME - entfernt Datei DATEINAME
+
+ 2. :w DATEINAME schreibt die aktuelle Vim-Datei als DATEINAME auf die
+ Platte.
+
+ 3. :#,#w DATEINAME speichert die Zeilen # bis # in der Datei DATEINAME.
+
+ 4. :r DATEINAME lädt die Datei DATEINAME von der Platte und fügt sie in
+ die aktuelle Datei nach der Cursorposition ein.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.1: ZEILEN ÖFFNEN (OPEN)
+
+
+ ** Tippe o , um eine Zeile unter dem Cursor zu öffnen und Dich in den **
+ ** Einfügemodus zu begeben. **
+
+ 1. Bewege den Cursor zu der unten stehenden Zeile, die mit ---> markiert ist.
+
+ 2. Tippe o (klein geschrieben), um eine Zeile UNTER dem Cursor aufzumachen
+ und Dich in den Einfügemodus zu begeben.
+
+ 3. Nun tippe den Text der mit ---> markierte Zeile ab und drücke <ESC> , um
+ den Einfügemodus zu verlassen.
+
+---> Mit o wird der Cursor auf der geöffneten Zeile im Eingabemodus platziert.
+
+ 4. Um eine Zeile ÜBER dem Cursor aufzumachen, gib einfach ein großes O
+ anstelle eines kleinen o ein. Versuche dies auf der unten stehenden
+ Zeile.
+Öffne eine Zeile über dieser mit Shift-O , wenn der Cursor auf dieser Zeile ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.2: TEXT ANFÜGEN (APPEND)
+
+
+ ** Tippe a , um Text NACH dem Cursor einzufügen. **
+
+ 1. Bewege den Cursor zum Ende der unten stehenden Zeile, die mit --->
+ markiert ist, indem Du im Normal-Modus $ eingibst.
+
+ 2. Tippe ein a (klein geschrieben), um Text NACH dem Zeichen unter dem
+ Cursor einzugeben. (Ein großes A fügt nach dem Ende der Zeile an.)
+
+Bemerkung: Dies macht es überflüssig, erst i zu tippen, dann das letzte
+ Zeichen, den anzuhängenden Text, <ESC>, Cursor-Rechts,
+ und schließlich, x, nur um Text an eine Zeile anzuhängen!
+
+ 3. Nun vervollständige die erste Zeile. Beachte außerdem , dass Anfügen
+ (Append) genau das gleiche ist, wie der Einfüge- (Insert-) Modus,
+ abgesehen von der Stelle, an dem der Text eingefügt wird.
+
+---> Diese Zeile bietet Gelegenheit
+---> Diese Zeile bietet Gelegenheit, Text an ihr Ende anzufügen.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.3: EINE ANDERE VERSION DES ERSETZENS (REPLACE)
+
+
+ ** Tippe ein großes R , um mehr als ein Zeichen zu ersetzen. **
+
+ 1. Bewege den Cursor zur ersten unten stehenden, mit ---> markierten Zeile.
+
+ 2. Plaziere den Cursor auf den Anfang des ersten Wortes, welches sich von
+ der zweiten mit ---> markierten Zeile unterscheidet (das Wort 'benutze').
+
+ 3. Nun gib ein R ein, und ersetze den Rest des Textes auf der ersten
+ Zeile, um diese gleich der zweiten zu machen, indem Du den alten Text
+ überschreibst.
+
+---> Um die erste Zeile gleich der zweiten zu machen, benutze die Tastatur.
+---> Um die erste Zeile gleich der zweiten zu machen, tippe R und neuen Text.
+
+ 4. Beachte, dass, wenn Du zum Verlassen <ESC> drückst, sämtlicher
+ ungeänderte Text bestehen bleibt.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.4: OPTIONEN SETZEN
+
+
+ ** Setze eine Option so, dass eine Suche oder eine Ersetzung Groß- **
+ ** und Kleinschreibung ignoriert **
+
+
+ 1. Suche nach 'igno', indem Du /igno eingibst.
+ Wiederhole die Suche einige Male, indem Du die n - Taste drückst.
+
+ 2. Setze die 'ic' (ignorecase; Ignoriere Groß-/Kleinschreibung) - Option,
+ indem Du :set ic eingibst.
+
+ 3. Nun suche wieder nach 'igno', indem Du n tippst.
+ Wiederhole dieses noch einige Male, indem Du die n Taste drückst.
+
+ 4. Setze die 'hlsearch' (Suche hervorheben) und 'incsearch' (Inkrementelle
+ Suche) - Optionen:
+ :set hls is
+
+ 5. Jetzt gib den Suchen-Befehl noch einmal ein und beobachte, was passiert:
+ /igno
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZUSAMMENFASSUNG VON Lektion 6
+
+
+ 1. Die Eingabe von o macht eine Zeile UNTER dem Cursor auf und
+ platziert den Cursor auf der geöffneten Zeile im Einfügemodus.
+ Die Eingabe eines großen O öffnet eine Zeile ÜBER derjenigen,
+ auf der sich der Cursor befindet.
+
+ 2. Gib ein a ein, um Text NACH dem Zeichen, auf dem sich der Cursor
+ befindet, einzufügen.
+ Die Eingabe eines großen A erlaubt das Anfügen von Text nach dem
+ Ende der Zeile.
+
+ 3. Die Eingabe eines großen R wechselt in den Ersetzungs-(Replace)-Modus,
+ bis zum Verlassen <ESC> eingegeben wird.
+
+ 4. Die Eingabe von ":set xxx" setzt die Option "xxx"
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 7 : DIE ONLINE-HILFE
+
+ ** Nutze das eingebaute Hilfesystem **
+
+ Vim besitzt ein umfassendes eingebautes Hilfesystem. Für den Anfang probiere
+ eins der drei folgenden Dinge aus:
+ - Drücke die <Hilfe> - Taste (falls Du eine besitzt)
+ - Drücke die <F1> Taste (falls Du eine besitzt)
+ - Tippe :help <ENTER>
+
+ Tippe :q <ENTER> , um das Hilfefenster zu schließen.
+
+ Du kannst Hilfe über praktisch jedes Thema finden, indem Du dem ":help"
+ Kommando ein Argument gibst. Probiere folgendes (<ENTER> nicht vergessen):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 8: ERSTELLE EIN START-SKRIPT
+
+ ** Aktiviere die Funktionalitäten von Vim **
+
+ Vim besitzt viele Funktionalitäten, die über Vi hinausgehen, aber die meisten
+ von ihnen sind standardmäßig deaktiviert.
+ Um diese zu aktivieren, musst Du eine "vimrc" - Datei erstellen.
+
+1. Starte das Editieren der "vimrc"-Datei, dies ist von Deinem System abhängig:
+ :edit ~/.vimrc für Unix
+ :edit $VIM/_vimrc für MS-Windows
+
+2. Nun lies die Beispiel - "vimrc" ein:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+3. Speichere die Datei mit:
+
+ :write
+
+Das nächste Mal, wenn Du Vim startest, wird die Syntax-Hervorhebung
+aktiviert sein.
+Du kannst all Deine Lieblingsoptionen zu dieser "vimrc" - Datei zufügen.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Damit ist der Vim Tutor beendet. Die Intention war, einen kurzen und
+ bündigen Überblick über den Vim Editor zu liefern; gerade genug, um relativ
+ leicht mit ihm umgehen zu können.
+ Der Vim Tutor hat nicht den geringsten Anspruch auf Vollständigkeit;
+ Vim hat noch weitaus mehr Kommandos.
+ Wage Dich als nächstes an das User Manual: ":help user-manual".
+
+ Für weiteres Lesen und Lernen kann folgendes Buch empfohlen werden:
+ Vim - Vi Improved - von Steve Oualline
+ Verlag: New Riders
+ Das erste Buch, dass durchgängig Vim gewidmet ist. Besonders nützlich
+ für Anfänger.
+ Viele Beispiele und Bilder sind enthalten.
+ Siehe http://www.iccf.nl/click5.html
+
+ Folgendes Buch ist älter und mehr über Vi als Vim, aber auch empfehlenswert:
+ Linda Lamb und Arnold Robbins
+ Textbearbeitung mit dem vi-Editor
+ Verlag O'Reilly - ISBN: 3897211262
+ In diesem Buch kann man fast alles finden, was man mit Vi tun möchte.
+ Die sechste Ausgabe enthält auch Informationen über Vim.
+
+ Dieses Tutorial wurde geschrieben von Michael C. Pierce and Robert K. Ware,
+ Colorado School of Mines. Es benutzt Ideen, die Charles Smith,
+ Colorado State University, zur Verfügung stellte.
+ E-mail: bware@mines.colorado.edu.
+
+ Bearbeitet für Vim von Bram Moolenaar.
+
+ Deutsche Übersetzung von Joachim Hofmann, September 2002.
+ E-mail: Joachim.Hof@gmx.de
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.es b/runtime/tutor/tutor.es
new file mode 100644
index 000000000..bbdb13d1f
--- /dev/null
+++ b/runtime/tutor/tutor.es
@@ -0,0 +1,769 @@
+===============================================================================
+= B i e n v e n i d o a l t u t o r d e V I M - Versión 1.4 =
+===============================================================================
+
+ Vim es un editor muy potente que dispone de muchos mandatos, demasiados
+ para ser explicados en un tutor como éste. Este tutor está diseñado
+ para describir suficientes mandatos para que usted sea capaz de
+ aprender fácilmente a usar Vim como un editor de propósito general.
+
+ El tiempo necesario para completar el tutor es aproximadamente de 25-30
+ minutos, dependiendo de cuanto tiempo se dedique a la experimentación.
+
+ Los mandatos de estas lecciones modificarán el texto. Haga una copia de
+ este fichero para practicar (con «vimtutor» esto ya es una copia).
+
+ Es importante recordar que este tutor está pensado para enseñar con
+ la práctica. Esto significa que es necesario ejecutar los mandatos
+ para aprenderlos adecuadamente. Si únicamente se lee el texto, se
+ olvidarán los mandatos.
+
+ Ahora, asegúrese de que la tecla de bloqueo de mayúsculas no está
+ activada y pulse la tecla j lo suficiente para mover el cursor
+ de forma que la Lección 1.1 ocupe completamente la pantalla.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 1.1: MOVIMIENTOS DEL CURSOR
+
+ ** Para mover el cursor, pulse las teclas h,j,k,l de la forma que se indica. **
+ ^
+ k Indicación: La tecla h está a la izquierda y mueve a la izquierda.
+ < h l > La tecla l está a la derecha y mueve a la derecha.
+ j La tecla j parece una flecha que apunta hacia abajo.
+ v
+
+ 1. Mueva el cursor por la pantalla hasta que se sienta cómodo con ello.
+
+ 2. Mantenga pulsada la tecla j hasta que se repita «automágicamente».
+---> Ahora ya sabe como llegar a la lección siguiente.
+
+ 3. Utilizando la tecla abajo, vaya a la Lección 1.2.
+
+Nota: Si alguna vez no está seguro sobre algo que ha tecleado, pulse <ESC>
+ para situarse en modo Normal. Luego vuelva a teclear la orden que deseaba.
+
+Nota: Las teclas de movimiento del cursor también funcionan. Pero usando
+ hjkl podrá moverse mucho más rápido una vez que se acostumbre a ello.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 1.2: ENTRANDO Y SALIENDO DE VIM
+
+ ¡¡ NOTA: Antes de ejecutar alguno de los pasos siguientes lea primero
+ la lección entera!!
+
+ 1. Pulse la tecla <ESC> (para asegurarse de que está en modo Normal).
+
+ 2. Escriba: :q! <INTRO>
+
+---> Esto provoca la salida del editor SIN guardar ningún cambio que se haya
+ hecho. Si quiere guardar los cambios y salir escriba:
+ :wq <INTRO>
+
+ 3. Cuando vea el símbolo del sistema, escriba el mandato que le trajo a este
+ tutor. Éste puede haber sido: vimtutor <INTRO>
+ Normalmente se usaría: vim tutor <INTRO>
+
+---> 'vim' significa entrar al editor, 'tutor' es el fichero a editar.
+
+ 4. Si ha memorizado estos pasos y se se siente con confianza, ejecute los
+ pasos 1 a 3 para salir y volver a entrar al editor. Después mueva el
+ cursor hasta la Lección 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 1.3: EDICIÓN DE TEXTO - BORRADO
+
+** Estando en modo Normal pulse x para borrar el carácter sobre el cursor. **j
+
+
+ 1. Mueva el cursor a la línea de abajo señalada con --->.
+
+ 2. Para corregir los errores, mueva el cursor hasta que esté bajo el
+ carácter que va aser borrado.
+
+ 3. Pulse la tecla x para borrar el carácter sobrante.
+
+ 4. Repita los pasos 2 a 4 hasta que la frase sea la correcta.
+
+---> La vvaca saltóó soobree laa luuuuna.
+
+ 5. Ahora que la línea esta correcta, continúe con la Lección 1.4.
+
+
+NOTA: A medida que vaya avanzando en este tutor no intente memorizar,
+ aprenda practicando.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 1.4: EDICIÓN DE TEXTO - INSERCIÓN
+
+ ** Estando en modo Normal pulse i para insertar texto. **
+
+
+ 1. Mueva el cursor a la primera línea de abajo señalada con --->.
+
+ 2. Para que la primera línea se igual a la segunda mueva el cursor bajo el
+ primer carácter que sigue al texto que ha de ser insertado.
+
+ 3. Pulse i y escriba los caracteres a añadir.
+
+ 4. A medida que sea corregido cada error pulse <ESC> para volver al modo
+ Normal. Repita los pasos 2 a 4 para corregir la frase.
+
+---> Flta texto en esta .
+---> Falta algo de texto en esta línea.
+
+ 5. Cuando se sienta cómodo insertando texto pase al resumen que esta más
+ abajo.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 1
+
+
+ 1. El cursor se mueve utilizamdo las teclas de las flechas o las teclas hjkl.
+ h (izquierda) j (abajo) k (arriba) l (derecha)
+
+ 2. Para acceder a Vim (desde el símbolo del sistema %) escriba:
+ vin FILENAME <INTRO>
+
+ 3. Para salir de Vim escriba: <ESC> :q! <INTRO> para eliminar todos
+ los cambios.
+
+ 4. Para borrar un carácter sobre el cursor en modo Normal pulse: x
+
+ 5. Para insertar texto en la posición del cursor estando en modo Normal:
+ pulse i escriba el texto pulse <ESC>
+
+NOTA: Pulsando <ESC> se vuelve al modo Normal o cancela un mandato no deseado
+ o incompleto.
+
+Ahora continúe con la Lección 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 2.1: MANDATOS PARA BORRAR
+
+
+ ** Escriba dw para borrar hasta el final de una palabra **
+
+
+ 1. Pulse <ESC> para asegurarse de que está en el modo Normal.
+
+ 2. Mueva el cursor a la línea de abajo señalada con --->.
+
+ 3. Mueva el cursor al comienzo de una palabra que desee borrar.
+
+ 4. Pulse dw para hacer que la palabra desaparezca.
+
+
+ NOTA: Las letras dw aparecerán en la última línea de la pantalla cuando
+ las escriba. Si escribe algo equivocado pulse <ESC> y comience de nuevo.
+
+
+---> Hay algunas palabras pásalo bien que no pertenecen papel a esta frase.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 2.2: MÁS MANDATOS PARA BORRAR
+
+
+ ** Escriba d$ para borrar hasta el final de la línea. **
+
+
+ 1. Pulse <ESC> para asegurarse de que está en el modo Normal.
+
+ 2. Mueva el cursor a la línea de abajo señalada con --->.
+
+ 3. Mueva el cursor al final de la línea correcta (DESPUÉS del primer . ).
+
+ 4. Escriba d$ para borrar hasta el final de la línea.
+
+---> Alguien ha escrito el final de esta línea dos veces. esta línea dos veces.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 2.3: SOBRE MANDATOS Y OBJETOS
+
+
+ El formato del mandato de borrar d es como sigue:
+
+ [número] d objeto O d [número] objeto
+ donde:
+ número - es cuántas veces se ha de ejecutar el mandato (opcional, defecto=1).
+ d - es el mandato para borrar.
+ objeto - es sobre lo que el mandato va a operar (lista, abajo).
+
+ Una lista corta de objetos:
+ w - desde el cursor hasta el final de la palabra, incluyendo el espacio.
+ e - desde el cursor hasta el final de la palabra, SIN incluir el espacio.
+ $ - desde el cursor hasta el final de la línea.
+
+NOTE: Para los aventureros, pulsando sólo el objeto estando en modo Normal
+ sin un mandato moverá el cursor como se especifica en la lista de objetos.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 2.4: UNA EXCEPCIÓN AL 'MANDATO-OBJETO'
+
+ ** Escriba dd para borrar una línea entera. **
+
+ Debido a la frecuencia con que se borran líneas enteras, los diseñadores
+ de Vim decidieron que sería más fácil el escribir simplemente dos des en
+ una fila para borrar una línea.
+
+ 1. Mueva el cursor a la segunda línea de la lista de abajo.
+ 2. Escriba dd para borrar la línea.
+ 3. Muévase ahora a la cuarta línea.
+ 4. Escriba 2dd (recuerde número-mandato-objeto) para borrar las dos
+ líneas.
+
+ 1) Las rosas son rojas,
+ 2) El barro es divertido,
+ 3) El cielo es azul,
+ 4) Yo tengo un coche,
+ 5) Los relojes marcan la hora,
+ 6) El azucar es dulce,
+ 7) Y así eres tu.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 2.5: EL MANDATO DESHACER
+
+
+ ** Pulse u para deshacer los últimos mandatos,
+ U para deshacer una línea entera. **
+
+ 1. Mueva el cursor a la línea de abajo señalada con ---> y sitúelo bajo el
+ primer error.
+ 2. Pulse x para borrar el primer caráter erróneo.
+ 3. Pulse ahora u para deshacer el último mandato ejecutado.
+ 4. Ahora corrija todos los errores de la línea usando el mandato x.
+ 5. Pulse ahora U mayúscula para devolver la línea a su estado original.
+ 6. Pulse ahora u unas pocas veces para deshacer lo hecho por U y los
+ mandatos previos.
+ 7. Ahora pulse CTRL-R (mantenga pulsada la tecla CTRL y pulse R) unas
+ pocas veces para volver a ejecutar los mandatos (deshacer lo deshecho).
+
+---> Corrrija los errores dee esttta línea y vuuelva a ponerlos coon deshacer.
+
+ 8. Estos mandatos son muy útiles. Ahora pase al resumen de la Lección 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 2
+
+ 1. Para borrar desde el cursor hasta el final de una palabra pulse: dw
+
+ 2. Para borrar desde el cursor hasta el final de una línea pulse: d$
+
+ 3. Para borrar una línea enter pulse: dd
+
+ 4. El formato de un mandato en modo Normal es:
+
+ [número] mandato objeto O mandato [número] objeto
+ donde:
+ número - es cuántas veces se ha de ejecutar el mandato
+ mandato - es lo que hay que hacer, por ejemplo, d para borrar
+ objeto - es sobre lo que el mandato va a operar, por ejemplo
+ w (palabra), $ (hasta el final de la línea), etc.
+
+ 5. Para deshacer acciones previas pulse: u (u minúscula)
+ Para deshacer todos los cambios de una línea pulse: U (U mayúscula)
+ Para deshacer lo deshecho pulse: CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 3.1: EL MANDATO «PUT» (poner)
+
+ ** Pulse p para poner lo último que ha borrado después del cursor. **
+
+ 1. Mueva el cursor al final de la lista de abajo.
+
+ 2. Escriba dd para borrar la línea y almacenarla en el buffer de Vim.
+
+ 3. Mueva el cursor a la línea que debe quedar por debajo de la
+ línea a mover.
+
+ 4. Estando en mod Normal, pulse p para restituir la línea borrada.
+
+ 5. Repita los pasos 2 a 4 para poner todas las líneas en el orden correcto.
+
+ d) ¿Puedes aprenderla tu?
+ b) Las violetas son azules,
+ c) La inteligencia se aprende,
+ a) Las rosas son rojas,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 3.2: EL MANDATO «REPLACE» (remplazar)
+
+
+ ** Pulse r y un carácter para sustituir el carácter sobre el cursor. **
+
+
+ 1. Mueva el cursor a la primera línea de abajo señalada con --->.
+
+ 2. Mueva el cursor para situarlo bajo el primer error.
+
+ 3. Pulse r y el carácter que debe sustituir al erróneo.
+
+ 4. Repita los pasos 2 y 3 hasta que la primera línea esté corregida.
+
+---> ¡Cuendo esta línea fue rscrita alguien pulso algunas teclas equibocadas!
+---> ¡Cuando esta línea fue escrita alguien pulsó algunas teclas equivocadas!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 3.3: EL MANDATO «CHANGE» (cambiar)
+
+
+ ** Para cambiar parte de una palabra o toda ella escriba cw . **
+
+
+ 1. Mueva el cursor a la primera línea de abajo señalada con --->.
+
+ 2. Sitúe el cursor en la u de lubrs.
+
+ 3. Escriba cw y corrija la palabra (en este caso, escriba 'ínea').
+
+ 4. Pulse <ESC> y mueva el cursor al error siguiente (el primer carácter
+ que deba cambiarse).
+
+ 5. Repita los pasos 3 y 4 hasta que la primera frase sea igual a la segunda.
+
+---> Esta lubrs tiene unas pocas pskavtad que corregir usem el mandato change.
+---> Esta línea tiene unas pocas palabras que corregir usando el mandato change.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 3.4: MÁS CAMBIOS USANDO c
+
+ ** El mandato change se utiliza con los mismos objetos que delete. **
+
+ 1. El mandato change funciona de la misma forma que delete. El formato es:
+
+ [número] c objeto O c [número] objeto
+
+ 2. Los objetos son tambiém los mismos, tales como w (palabra), $ (fin de
+ la línea), etc.
+
+ 3. Mueva el cursor a la primera línea de abajo señalada con --->.
+
+ 4. Mueva el cursor al primer error.
+
+ 5. Escriba c$ para hacer que el resto de la línea sea como la segunda
+ y pulse <ESC>.
+
+---> El final de esta línea necesita alguna ayuda para que sea como la segunda.
+---> El final de esta línea necesita ser corregido usando el mandato c$.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 3
+
+
+ 1. Para sustituir texto que ha sido borrado, pulse p . Esto Pone el texto
+ borrado DESPUÉS del cursor (si lo que se ha borrado es una línea se
+ situará sobre la línea que está sobre el cursor).
+
+ 2. Para sustituir el carácter bajo el cursor, pulse r y luego el
+ carácter que sustituirá al original.
+
+ 3. El mandato change le permite cambiar el objeto especificado desde la
+ posición del cursor hasta el final del objeto; e.g. Pulse cw para
+ cambiar desde el cursor hasta el final de la palabra, c$ para cambiar
+ hasta el final de la línea.
+
+ 4. El formato para change es:
+
+ [número] c objeto O c [número] objeto
+
+ Pase ahora a la lección siguiente.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 4.1: SITUACIÓN EN EL FICHERO Y SU ESTADO
+
+
+ ** Pulse CTRL-g para mostrar su situación en el fichero y su estado.
+ Pulse MAYU-G para moverse a una determinada línea del fichero. **
+
+ Nota: ¡¡Lea esta lección entera antes de ejecutar alguno de los pasos!!
+
+
+ 1. Mantenga pulsada la tecla Ctrl y pulse g . Aparece una línea de estado
+ al final de la pantalla con el nombre del fichero y la línea en la que
+ está situado. Recuerde el número de la línea para el Paso 3.
+
+ 2. Pulse Mayu-G para ir al final del fichero.
+
+ 3. Escriba el número de la línea en la que estaba y despúes Mayu-G. Esto
+ le volverá a la línea en la que estaba cuando pulsó Ctrl-g.
+ (Cuando escriba los números NO se mostrarán en la pantalla).
+
+ 4. Si se siente confiado en poder hacer esto ejecute los pasos 1 a 3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 4.2: EL MANDATO «SEARCH» (buscar)
+
+ ** Escriba / seguido de una frase para buscar la frase. **
+
+ 1. En modo Normal pulse el carácter / . Fíjese que tanto el carácter /
+ como el cursor aparecen en la última línea de la pantalla, lo mismo
+ que el mandato : .
+
+ 2. Escriba ahora errroor <INTRO>. Esta es la palabra que quiere buscar.
+
+ 3. Para repetir la búsqueda, simplemente pulse n .
+ Para busacar la misma frase en la dirección opuesta, pulse Mayu-N .
+
+ 4. Si quiere buscar una frase en la dirección opuesta (hacia arriba),
+ utilice el mandato ? en lugar de / .
+
+---> Cuando la búsqueda alcanza el final del fichero continuará desde el
+ principio.
+
+ «errroor» no es la forma de deletrear error; errroor es un error.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 4.3: BÚSQUEDA PARA COMPROBAR PARÉNTESIS
+
+ ** Pulse % para encontrar el paréntesis correspondiente a ),] o } . **
+
+
+ 1. Sitúe el cursor en cualquiera de los caracteres ), ] o } en la línea de
+ abajo señalada con --->.
+
+ 2. Pulse ahora el carácter % .
+
+ 3. El cursor debería situarse en el paréntesis (, corchete [ o llave {
+ correspondiente.
+
+ 4. Pulse % para mover de nuevo el cursor al paréntesis, corchete o llave
+ correspondiente.
+
+---> Esto ( es una línea de prueba con (, [, ], {, y } en ella. )).
+
+Nota: ¡Esto es muy útil en la detección de errores en un programa con
+ paréntesis, corchetes o llaves disparejos.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 4.4: UNA FORMA DE CAMBIAR ERRORES
+
+
+ ** Escriba :s/viejo/nuevo/g para sustituir 'viejo' por 'nuevo'. **
+
+
+ 1. Mueva el cursor a la línea de abajo señalada con --->.
+
+ 2. Escriba :s/laas/las/ <INTRO> . Tenga en cuenta que este mandato cambia
+ sólo la primera aparición en la línea de la expresión a cambiar.
+
+---> Laas mejores épocas para ver laas flores son laas primaveras.
+
+ 4. Para cambiar todas las apariciones de una expresión ente dos líneas
+ escriba :#,#s/viejo/nuevo/g donde #,# son los números de las dos
+ líneas. Escriba :%s/viejo/nuevo/g para hacer los cambios en todo
+ el fichero.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 4
+
+
+ 1. Ctrl-g muestra la posición del cursor en el fichero y su estado.
+ Mayu-G mueve el cursor al final del fichero. Un número de línea
+ sewguido de Mayu-G mueve el cursor a la línea con ese número.
+
+ 2. Pulsando / seguido de una frase busca la frase hacia ADELANTE.
+ Pulsando ? seguido de una frase busca la frase hacia ATRÁS.
+ Después de una búsqueda pulse n para encontrar la aparición
+ siguiente en la misma dirección.
+
+ 3. Pulsando % cuando el cursor esta sobre (,), [,], { o } localiza
+ la pareja correspondiente.
+
+ 4. Para cambiar viejo por nuevo en una línea pulse :s/viejo/nuevo
+ Para cambiar todos los viejo por nuevo en una línea pulse :s/viejo/nuevo/g
+ Para cambiar frases entre dos números de líneas pulse :#,#s/viejo/nuevo/g
+ Para cambiar viejo por nuevo en todo el fichero pulse :%s/viejo/nuevo/g
+ Para pedir confirmación en cada caso añada 'c' :%s/viejo/nuevo/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 5.1: CÓMO EJECUTAR UN MANDATO EXTERNO
+
+
+ ** Escriba :! seguido de un mandato externo para ejecutar ese mandato. **
+
+
+ 1. Escriba el conocido mandato : para situar el cursor al final de la
+ pantalla. Esto le permitirá introducir un mandato.
+
+ 2. Ahora escriba el carácter ! (signo de admiración). Esto le permitirá
+ ejecutar cualquier mandato del sistema.
+
+ 3. Como ejemplo escriba ls después del ! y luego pulse <INTRO>. Esto
+ le mostrará una lista de su directorio, igual que si estuviera en el
+ símbolo del sistema. Si ls no funciona utilice !:dir .
+
+--->Nota: De esta manera es posible ejecutar cualquier mandato externo.
+
+--->Nota: Todos los mandatos : deben finalizarse pulsando <INTRO>.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 5.2: MÁS SOBRE GUARDAR FICHEROS
+
+
+ ** Para guardar los cambios hechos en un fichero,
+ escriba :w NOMBRE_DE_FICHERO. **
+
+
+ 1. Escriba :!dir o :!ls para ver una lista de su directorio.
+ Ya sabe que debe pulsar <INTRO> después de ello.
+
+ 2. Elija un nombre de fichero que todavía no exista, como TEST.
+
+ 3. Ahora escriba :w TEST (donde TEST es el nombre de fichero elegido).
+
+ 4. Esta acción guarda todo el fichero (Vim Tutor) bajo el nombre TEST.
+ Para comprobarlo escriba :!dir de nuevo y vea su directorio.
+
+---> Tenga en cuenta que si sale de Vim y entra de nuevo con el nombre de
+ fichero TEST, el fichero sería una copia exacta del tutor cuando lo
+ ha guardado.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 5.3: UN MANDATO DE ESCRITURA SELECTIVO
+
+ ** Para guardar parte del fuchero escriba :#,# NOMBRE_DEL_FICHERO **
+
+
+ 1. Escriba de nuevo, una vez más, :!dir o :!ls para obtener una lista
+ de su directorio y elija nombre de fichero adecuado, como TEST.
+
+ 2. Mueva el cursor al principio de la pantalla y pulse Ctrl-g para saber
+ el número de la línea correspondiente. ¡RECUERDE ESTE NÚMERO!
+
+ 3. Ahora mueva el cursor a la última línea de la pantalla y pulse Ctrl-g
+ de nuevo. ¡RECUERDE TAMBIÉN ESTE NÚMERO!
+
+ 4. Para guardar SOLAMENTE una parte de un fichero, escriba :#,# w TEST
+ donde #,# son los números que usted ha recordado (primera línea,
+ última línea) y TEST es su nombre de dichero.
+
+ 5. De nuevo, vea que el fichero esta ahí con :!dir pero NO lo borre.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 5.4: RECUPERANDO Y MEZCLANDO FICHEROS
+
+ ** Para insertar el contenido de un fichero escriba :r NOMBRE_DEL_FICHERO **
+
+ 1. Escriba :!dir para asegurarse de que su fichero TEST del ejercicio
+ anterior está presente.
+
+ 2. Situe el cursor al principio de esta pantalla.
+
+NOTA: Después de ejecutar el paso 3 se verá la Lección 5.3. Luego muévase
+ hacia ABAJO para ver esta lección de nuevo.
+
+ 3. Ahora recupere el fichero TEST utilizando el mandato :r TEST donde
+ TEST es el nombre del fichero.
+
+NOTA: El fichero recuperado se sitúa a partir de la posición del cursor.
+
+ 4. Para verificar que el fichero ha sido recuperado, mueva el cursor hacia
+ arriba y vea que hay dos copias de la Lección 5.3, la original y la
+ versión del fichero.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 5
+
+
+ 1. :!mandato ejecuta un mandato externo.
+
+ Algunos ejemplos útiles son:
+ :!dir - muestra el contenido de un directorio.
+ :!del NOMBRE_DE_FICHERO - borra el fichero NOMBRE_DE FICHERO.
+
+ 2. :#,#w NOMBRE_DE _FICHERO guarda desde las líneas # hasta la # en el
+ fichero NOMBRE_DE_FICHERO.
+
+ 3. :r NOMBRE_DE _FICHERO recupera el fichero del disco NOMBRE_DE FICHERO
+ y lo inserta en el fichero en curso a partir de la posición del cursor.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 6.1: EL MANDATO «OPEN» (abrir)
+
+
+ ** Pulse o para abrir una línea debajo del cursor
+ y situarle en modo Insert **
+
+
+ 1. Mueva el cursor a la línea de abajo señalada con --->.
+
+ 2. Pulse o (minúscula) para abrir una línea por DEBAJO del cursor
+ y situarle en modo Insert.
+
+ 3. Ahora copie la línea señalada con ---> y pulse <ESC> para salir del
+ modo Insert.
+
+---> Luego de pulsar o el cursor se sitúa en la línea abierta en modo Insert.
+
+ 4. Para abrir una línea por encima del cursor, simplemente pulse una O
+ mayúscula, en lugar de una o minúscula. Pruebe este en la línea siguiente.
+Abra una línea sobre ésta pulsando Mayu-O cuando el curso está en esta línea.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 6.2: EL MANDATO «APPEND» (añadir)
+
+ ** Pulse a para insertar texto DESPUÉS del cursor. **
+
+
+ 1. Mueva el cursor al final de la primera línea de abajo señalada con --->
+ pulsando $ en modo Normal.
+
+ 2. Escriba una a (minúscula) para añadir texto DESPUÉS del carácter
+ que está sobre el cursor. (A mayúscula añade texto al final de la línea).
+
+Nota: ¡Esto evita el pulsar i , el último carácter, el texto a insertar,
+ <ESC>, cursor a la derecha y, finalmente, x , sólo para añadir algo
+ al final de una línea!
+
+ 3. Complete ahora la primera línea. Nótese que append es exactamente lo
+ mismo que modo Insert, excepto por el lugar donde se inserta el texto.
+
+---> Esta línea le permitirá praticar
+---> Esta línea le permitirá praticar el añadido de texto al final de una línea.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 6.3: OTRA VERSIÓN DE «REPLACE» (remplazar)
+
+ ** Pulse una R mayúscula para sustituir más de un carácter. **
+
+
+ 1. Mueva el cursor a la primera línea de abajo señalada con --->.
+
+ 2. Sitúe el cursor al comienzo de la primera palabra que sea diferente
+ de las de la segunda línea marcada con ---> (la palabra 'anterior').
+
+ 3. Ahora pulse R y sustituya el resto del texto de la primera línea
+ escribiendo sobre el viejo texto para que la primera línea sea igual
+ que la primera.
+
+---> Para hacer que esta línea sea igual que la anterior use las teclas.
+---> Para hacer que esta línea sea igual que la siguiente escriba R y el texto.
+
+ 4. Nótese que cuando pulse <ESC> para salir, el texto no alterado permanece.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 6.4: FIJAR OPCIONES
+
+ ** Fijar una opción de forma que una búsqueda o sustitución ignore la caja **
+ (Para el concepto de caja de una letra, véase la nota al final del fichero)
+
+
+ 1. Busque 'ignorar' introduciendo:
+ /ignorar
+ Repita varias veces la búsque pulsando la tecla n
+
+ 2. Fije la opción 'ic' (Ignorar la caja de la letra) escribiendo:
+ :set ic
+
+ 3. Ahora busque 'ignorar' de nuevo pulsando n
+ Repita la búsqueda varias veces más pulsando la tecla n
+
+ 4. Fije las opciones 'hlsearch' y 'insearch':
+ :set hls is
+
+ 5. Ahora introduzca la orden de búsqueda otra vez, y vea qué pasa:
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RESUMEN DE LA LECCIÓN 6
+
+
+ 1. Pulsando o abre una línea por DEBAJO del cursor y sitúa el cursor en
+ la línea abierta en modo Insert.
+ Pulsando una O mayúscula se abre una línea SOBRE la que está el cursor.
+
+ 2. Pulse una a para insertar texto DESPUÉS del carácter sobre el cursor.
+ Pulsando una A mayúscula añade automáticamente texto al final de la
+ línea.
+
+ 3. Pulsando una R mayúscula se entra en modo Replace hasta que, para salir,
+ se pulse <ESC>.
+
+ 4. Escribiendo «:set xxx» fija la opción «xxx»
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lección 7: MANDATOS PARA LA AYUDA EN LÍNEA
+
+ ** Utilice el sistema de ayuda en línea **
+
+
+ Vim dispone de un sistema de ayuda en línea. Para activarlo, pruebe una
+ de estas tres formas:
+ - pulse la tecla <AYUDA> (si dispone de ella)
+ - pulse la tecla <F1> (si dispone de ella)
+ - escriba :help <INTRO>
+
+ Escriba :q <INTRO> para cerrar la ventana de ayuda.
+
+ Puede encontrar ayuda en casi cualquier tema añadiendo un argumento al
+ mandato «:help» mandato. Pruebe éstos:
+
+ :help w <INTRO>
+ :help c_<T <INTRO>
+ :help insert-index <INTRO>
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Aquí concluye el tutor de Vim. Está pensado para dar una visión breve del
+ editor Vim, lo suficiente para permitirle usar el editor de forma bastante
+ sencilla. Está muy lejos de estar completo pues Vim tiene muchísimos más
+ mandatos.
+
+ Para lecturas y estudios posteriores se recomienda el libro:
+ Learning the Vi Editor - por Linda Lamb
+ Editorial: O'Reilly & Associates Inc.
+ Es un buen libro para llegar a saber casi todo lo que desee hacer con Vi.
+ La sexta edición incluye también información sobre Vim.
+
+ Este tutorial ha sido escrito por Michael C. Pierce y Robert K. Ware,
+ Colorado School of Mines utilizando ideas suministradas por Charles Smith,
+ Colorado State University.
+ E-mail: bware@mines.colorado.edu.
+
+ Modificado para Vim por Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Traducido del inglés por:
+
+ Eduardo F. Amatria
+ Correo electrónico: eferna1@platea.pntic.mec.es
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.fr b/runtime/tutor/tutor.fr
new file mode 100644
index 000000000..bc566894b
--- /dev/null
+++ b/runtime/tutor/tutor.fr
@@ -0,0 +1,809 @@
+===============================================================================
+= 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.5.fr.2 =
+===============================================================================
+
+ Vim est un éditeur très puissant qui a trop de commandes pour pouvoir
+ toutes les expliquer dans un cours comme celui-ci, qui est conçu pour en
+ décrire suffisamment afin de vous permettre d'utiliser simplement Vim.
+
+ Le temps requis pour suivre ce cours est d'environ 25 à 30 minutes, selon
+ le temps que vous passerez à expérimenter. Les commandes utilisées dans
+ les leçons modifieront le texte. Faites une copie de ce fichier afin de
+ vous entraîner dessus (si vous avez lancé "vimtutor" ceci est déjà une
+ copie).
+
+ Il est important de garder en tête que ce cours est conçu pour apprendre
+ par la pratique. Cela signifie que vous devez exécuter les commandes
+ pour les apprendre correctement. Si vous vous contentez de lire le
+ texte, vous oublierez les commandes !
+
+ Maintenant, vérifiez que votre clavier n'est PAS verouillé en majuscules,
+ et appuyez la touche j le nombre de fois suffisant pour que la leçon
+ 1.1 remplisse complètement l'écran.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 1.1 : DÉPLACEMENT DU CURSEUR
+
+
+ ** Pour déplacer le curseur, appuyez les touches h,j,k,l comme indiqué. **
+ ^
+ k Astuce: La touche h est à gauche et déplace à gauche.
+ < h l > La touche l est à droite et déplace à droite.
+ j La touche j ressemble à une flèche vers le bas.
+ v
+ 1. Déplacez le curseur sur l'écran jusqu'à vous sentir à l'aise.
+
+ 2. Maintenez la touche Bas (j) enfoncée jusqu'à ce qu'elle se répète.
+---> Maintenant vous êtes capable de vous déplacer jusqu'à la leçon suivante.
+
+ 3. En utilisant la touche Bas, allez à la Leçon 1.2.
+
+Note: Si jamais vous doutez de ce que vous venez de taper, appuyez <Échap>
+ pour revenir en mode Normal. Puis retapez la commande que vous vouliez.
+
+Note: Les touches fléchées devraient également fonctionner. Mais en utilisant
+ hjkl vous pourrez vous déplacer beaucoup plus rapidement, une fois que
+ vous aurez pris l'habitude.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 1.2 : ENTRÉE ET SORTIE DE VIM
+
+
+ !! NOTE: Avant d'effectuer les étapes ci-dessous, lisez toute cette leçon !!
+
+ 1. Appuyez la touche <Échap> (pour être sûr d'être en mode Normal).
+
+ 2. Tapez: :q! <Entrée>
+
+---> Ceci quitte l'éditeur SANS sauver les changements que vous avez faits.
+ Si vous voulez enregistrer les changements et sortir, tapez:
+ :wq <Entrée>
+
+ 3. Lorsque l'invite du 'shell' vous sera présentée, tapez la commande qui
+ vous a amené dans ce tutoriel. Cela pourrait être: vimtutor <Entrée>
+ Normalement, vous utiliseriez: vim tutor <Entrée>
+
+---> 'vim' lance l'éditeur, 'tutor' est le fichier que vous souhaitez éditer.
+
+ 4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes
+ 1 à 3 pour sortir puis rentrer dans l'éditeur. Déplacez ensuite le
+ curseur jusqu'à la Leçon 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 1.3 : ÉDITION DE TEXTE - EFFACEMENT
+
+
+ ** En mode Normal, appuyez x pour effacer le caractère sous le curseur. **
+
+ 1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
+
+ 2. Pour corriger les erreurs, déplacez le curseur jusqu'à ce qu'il soit
+ sur un caractère à effacer.
+
+ 3. Appuyez la touche x pour effacer le caractère redondant.
+
+ 4. Répétez les étapes 2 à 4 jusqu'à ce que la phrase soit correcte.
+
+---> La vvache à sautéé au-ddessus dde la luune.
+
+ 5. Maintenant que la ligne est correcte, passez à la leçon 1.4.
+
+NOTE: En avançant dans ce cours, n'essayez pas de mémoriser, apprenez par
+ la pratique.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 1.4 : ÉDITION DE TEXTE - INSERTION
+
+
+ ** En mode Normal, appuyez i pour insérer du texte. **
+
+ 1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+
+ 2. Pour rendre la première ligne identique à la seconde, mettez le curseur
+ sur le premier caractère APRÈS l'endroit où insérer le texte.
+
+ 3. Appuyez i et tapez les caractères qui manquent.
+
+ 4. Une fois qu'une erreur est corrigée, appuyez <Échap> pour revenir en mode
+ Normal. Répétez les étapes 2 à 4 pour corriger la phrase.
+
+---> Il mnqe caractères cette .
+---> Il manque des caractères dans cette ligne.
+
+ 5. Une fois que vous êtes à l'aise avec l'insertion de texte, allez au
+ résumé ci-dessous.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 1
+
+ 1. Le curseur se déplace avec les touches fléchées ou les touches hjkl.
+ h (gauche) j (bas) k (haut) l (droite)
+
+ 2. Pour entrer dans Vim (à l'invite %) tapez: vim FICHIER <Entrée>
+
+ 3. Pour quitter Vim tapez: <Échap> :q! <Entrée> pour perdre tous les
+ changements.
+ OU tapez: <Échap> :wq <Entrée> pour enregistrer les
+ changements.
+
+ 4. Pour effacer un caractère sous le curseur en mode Normal tapez: x
+
+ 5. Pour insérer du texte au niveau du curseur en mode Normal tapez:
+ i tapez le texte <Échap>
+
+NOTE: Appuyer <Échap> vous place en mode Normal ou annule une commande
+ partiellement tapée dont vous ne voudriez plus.
+
+Passez maintenant à la Leçon 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 2.1 : EFFACEMENTS
+
+
+ ** Tapez dw pour effacer jusqu'à la fin d'un mot. **
+
+ 1. Appuyez <Échap> pour être sûr d'être en mode Normal.
+
+ 2. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
+
+ 3. Placez le curseur sur le début d'un mot qui a besoin d'être effacé.
+
+ 4. Tapez dw pour faire disparaître ce mot.
+
+NOTE: Les lettres dw apparaîtront sur la dernière ligne de l'écran lors de
+ votre frappe. Si vous avez mal tapé quelque chose, appuyez <Échap> et
+ recommencez.
+
+---> Il y a quelques drôle mots qui n'ont rien à faire papier sur cette ligne.
+
+ 5. Répétez les étapes 3 et 4 jusqu'à ce que la phrase soit correcte et allez
+ à la Leçon 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 2.2 : PLUS D'EFFACEMENTS
+
+
+ ** Tapez d$ pour effacer jusqu'à la fin de la ligne. **
+
+ 1. Appuyez <Échap> pour être sûr d'être en mode Normal.
+
+ 2. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
+
+ 3. Déplacez le curseur jusqu'à la fin correcte de la ligne
+ (APRÈS le premier . ).
+
+ 4. Tapez d$ pour effacer jusqu'à la fin de la ligne.
+
+---> Quelqu'un a tapé la fin de cette ligne deux fois. cette ligne deux fois.
+
+ 5. Allez à la Leçon 2.3 pour comprendre ce qui se passe.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 2.3 : DES COMMANDES ET DES OBJETS
+
+
+ Le format de la commande d'effacement d est le suivant:
+
+ [nombre] d objet OU d [nombre] objet
+ où:
+ nombre - est combien de fois exécuter la commande (optionnel, défaut: 1).
+ d - est la commande d'effacement.
+ objet - est ce sur quoi la commande va opérer (liste ci-dessous).
+
+ Une courte liste d'objets:
+ w - du curseur jusqu'à la fin du mot, y compris l'espace qui suit.
+ e - du curseur jusqu'à la fin du mot, SANS l'espace qui suit.
+ $ - du curseur jusqu'à la fin de la ligne.
+
+NOTE: Pour les aventureux, le seul appui d' objet en mode Normal, sans
+ commande, déplace le curseur comme indiqué dans la liste des objets.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 2.4 : UNE EXCEPTION À 'COMMANDE-OBJET'
+
+ ** Tapez dd pour effacer une ligne complète. **
+
+ Vu le nombre de fois où l'on efface des lignes complètes, les concepteurs
+ de Vi ont décidé qu'il serait plus facile de taper simplement deux d à la
+ suite pour effacer une ligne.
+
+ 1. Placez le curseur sur la seconde ligne de la phrase ci-dessous.
+ 2. Tapez dd pour effacer la ligne.
+ 3. Maintenant allez à la quatrième ligne.
+ 4. Tapez 2dd (rappelez-vous, nombre-commande-objet) pour effacer les
+ deux lignes.
+
+ 1) Les roses sont rouges,
+ 2) La boue c'est drôle,
+ 3) Les violettes sont bleues,
+ 4) J'ai une voiture,
+ 5) Les horloges donnent l'heure,
+ 6) Le sucre est doux
+ 7) Tout comme vous.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 2.5 : L'ANNULATION
+
+ ** Tapez u pour annuler les dernières commandes. **
+ ** Tapez U pour récupérer toute une ligne. **
+
+ 1. Déplacez le curseur sur la ligne marquée ---> ci-dessous et placez-le sur
+ la première erreur.
+ 2. Tapez x pour effacer le premier caractère redondant.
+ 3. Puis tapez u pour annuler la dernière commande exécutée.
+ 4. Cette fois, corrigez toutes les erreurs de la ligne avec la commande x .
+ 5. Puis tapez un U majuscule pour remettre la ligne dans son état initial.
+ 6. Puis tapez u deux-trois fois pour annuler le U et les commandes
+ précédentes.
+ 7. Maintenant tapez Ctrl-R (maintenez la touche Ctrl enfoncée pendant que
+ vous appuyez sur R) deux-trois fois pour refaire les commandes (annuler
+ les annulations).
+
+---> Coorrigez les erreurs suur ccette ligne et reemettez-les avvec 'annuler'.
+
+ 8. Ce sont des commandes très utiles. Maintenant, allez au résumé de la
+ Leçon 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 2
+
+
+ 1. Pour effacer du curseur jusqu'à la fin d'un mot tapez: dw
+
+ 2. Pour effacer du curseur jusqu'à la fin d'une ligne tapez: d$
+
+ 3. Pour effacer toute une ligne tapez: dd
+
+ 4. Le format d'une commande en mode Normal est:
+
+ [nombre] commande objet OU commande [nombre] objet
+ où:
+ nombre - est combien de fois répéter la commande
+ commande - est ce qu'il faut faire, par exemple d pour effacer
+ objet - est ce sur quoi la commande devrait agir, par exemple w (mot),
+ $ (jusqu'à la fin de la ligne), etc.
+
+ 5. Pour annuler des actions précédentes, tapez: u (u minuscule)
+ Pour annuler tous les changements sur une ligne tapez: U (U majuscule)
+ Pour annuler l'annulation tapez: Ctrl-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 3.1 : LE COLLAGE
+
+
+ ** Tapez p pour placer après le curseur ce qui vient d'être effacé. **
+
+ 1. Placez le curseur sur la première ligne du "poème" ci-dessous.
+
+ 2. Tapez dd pour effacer la ligne et la placer dans le tampon de Vim.
+
+ 3. Déplacez le curseur sur la ligne qui PRÉCÈDE l'endroit où vous voulez
+ remettre la ligne effacée.
+
+ 4. En mode Normal, tapez p pour remettre la ligne.
+
+ 5. Répétez les étapes 2 à 4 pour mettre toutes les lignes dans le bon ordre.
+
+ d) Et vous, qu'apprenez-vous ?
+ b) Les violettes sont bleues,
+ c) L'intelligence s'apprend,
+ a) Les roses sont rouges,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 3.2 : LE REMPLACEMENT
+
+
+ ** Tapez r et un caractère pour remplacer le caractère sous le curseur. **
+
+ 1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+
+ 2. Placez le curseur de manière à ce qu'il surplombe la première erreur.
+
+ 3. Tapez r suivi du caractère qui doit corriger l'erreur.
+
+ 4. Répétez les étapes 2 et 3 jusqu'à ce que la première ligne soit correcte.
+
+---> Quand cette ligne a été sauvie, quelqu'un a lait des faunes de frappe !
+---> Quand cette ligne a été saisie, quelqu'un a fait des fautes de frappe !
+
+ 5. Maintenant, allez à la Leçon 3.3.
+
+NOTE: N'oubliez pas que vous devriez apprendre par la pratique, pas par
+ mémorisation.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 3.3 : LE CHANGEMENT
+
+
+ ** Pour changer tout ou partie d'un mot, tapez cw .**
+
+ 1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+
+ 2. Placez le curseur sur le u de luhko.
+
+ 3. Tapez cw et corrigez le mot (dans notre cas, tapez 'igne'.)
+
+ 4. Appuyez <Échap> et placez-vous sur l'erreur suivante (le premier
+ caractère qui doit être changé).
+
+ 5. Répétez les étapes 3 et 4 jusqu'à ce que la première phrase soit
+ identique à la seconde.
+
+---> Cette luhko contient quelques myqa qui ont ricne d'être chantufip.
+---> Cette ligne contient quelques mots qui ont besoin d'être changés.
+
+Notez que cw efface le mot et vous place ensuite en mode Insertion.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 3.4 : PLUS DE CHANGEMENTS AVEC c
+
+
+ ** Le changement fonctionne avec les mêmes objets que l'effacement. **
+
+ 1. Le changement fonctionne de la même manière que l'effacement.
+ Le format est:
+
+ [nombre] c objet OU c [nombre] objet
+
+ 2. Les objets sont également les mêmes: w (mot), $ (fin de ligne), etc.
+
+ 3. Déplacez-vous à la première ligne marquée ---> ci-dessous.
+
+ 4. Placez le curseur sur la première erreur.
+
+ 5. Tapez c$ pour changer la fin de la ligne, rendez-là identique à la
+ seconde ligne, puis tapez <Échap>.
+
+---> La fin de cette ligne doit être rendue identique à la seconde.
+---> La fin de cette ligne doit être corrigée avec la commande c$ .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 3
+
+
+ 1. Pour remettre du texte qui vient d'être effacé, tapez p . Cela Place le
+ texte effacé APRÈS le curseur (si une ligne complète a été effacée, elle
+ sera placée sous la ligne du curseur).
+
+ 2. Pour remplacer le caractère sous le curseur, tapez r suivi du caractère
+ qui remplacera l'original.
+
+ 3. Le changement vous permet de changer l'objet spécifié, du curseur jusqu'à
+ la fin de l'objet. Par exemple, tapez cw pour changer du curseur
+ jusqu'à la fin du mot, c$ pour changer jusqu'à la fin d'une ligne.
+
+ 4. Le format pour le changement est:
+
+ [nombre] c objet OU c [nombre] objet
+
+Passez maintenant à la leçon suivante.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 4.1 : POSITION ET ÉTAT DU FICHIER
+
+
+ ** Tapez Ctrl-G pour afficher votre position dans le fichier et son état.
+ Utilisez Maj-G pour vous rendre à une ligne donnée du fichier. **
+
+ Note: Lisez toute cette leçon avant d'effectuer l'une des étapes !
+
+ 1. Maintenez enfoncée la touche Ctrl et appuyez sur G . Une ligne d'état
+ va apparaître en bas de l'écran avec le nom du fichier et le numéro de la
+ ligne où vous êtes. Notez ce numéro, il servira lors de l'étape 3.
+
+ 2. Tapez G majuscule (Maj-G) pour vous rendre à la fin du fichier.
+
+ 3. Tapez le numéro de la ligne où vous étiez suivi de Maj-G. Cela vous
+ ramènera à la ligne où vous étiez au départ.
+ (Lorsque vous tapez les chiffres, ils n'apparaissent PAS à l'écran).
+
+ 4. Si vous vous sentez prêt à faire ceci, effectuez les étapes 1 à 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 4.2 : LA RECHERCHE
+
+
+ ** Tapez / suivi d'un texte pour rechercher ce texte. **
+
+ 1. Tapez le caractère / en mode Normal. Notez que celui-ci et le curseur
+ apparaissent en bas de l'écran, comme lorsque l'on utilise : .
+
+ 2. Puis tapez 'errreuur' <Entrée>. C'est le mot que vous voulez rechercher.
+
+ 3. Pour rechercher à nouveau le même texte, tapez simplement n .
+ Pour rechercher le même texte dans la direction opposée, tapez Maj-N .
+
+ 4. Si vous voulez rechercher un texte vers le haut du fichier, utilisez ?
+ à la place de / .
+
+---> erreur ne s'écrit pas "errreuur"; errreuur est une erreur.
+
+Note: Quand la recherche atteint la fin du fichier, elle reprend au début.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 4.3 : RECHERCHE DES PARENTHÈSES CORRESPONDANTES
+
+
+ ** Tapez % pour trouver des ), ] ou } correspondants. **
+
+ 1. Placez le curseur sur l'un des (, [ ou { de la ligne marquée --->
+ ci-dessous.
+
+ 2. Puis tapez le caractère % .
+
+ 3. Le curseur devrait se placer sur la parenthèse correspondante.
+
+ 4. Tapez % pour replacer le curseur sur l'autre parenthèse.
+
+---> Voici ( une ligne de test contenant des (, des [ ] et des { } )).
+
+Note: Cette fonctionnalité est très utile lors du débogage d'un programme qui
+ contient des parenthèses déséquilibrées !
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 4.4 : UNE MANIÈRE DE CORRIGER LES ERREURS
+
+
+ ** Tapez :s/ancien/nouveau/g pour remplacer 'ancien' par 'nouveau'. **
+
+ 1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
+
+ 2. Tapez :s/lee/le <Entrée> . Notez que cette commande change seulement la
+ première occurence sur la ligne.
+
+ 3. Puis tapez :s/lee/le/g qui ordonne de faire une substitution globale
+ sur la ligne. Cela change toutes les occurences sur la ligne
+
+---> lee meilleur moment pour regarder lees fleurs est pendant lee Printemps.
+
+ 4. Pour changer toutes les occurences d'un texte, entre deux lignes,
+ tapez :#,#s/ancien/nouveau/g où #,# sont les numéros des deux lignes.
+ Tapez :%s/ancien/nouveau/g pour changer chaque occurence dans tout
+ le fichier.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 4
+
+
+ 1. Ctrl-G affiche votre position dans le fichier et l'état de celui-ci.
+ Maj-G vous place à la fin du fichier. Un numéro de ligne suivi de Maj-G
+ vous place à cette ligne.
+
+ 2. Taper / suivi d'un texte recherche ce texte vers l'AVANT.
+ Taper ? suivi d'un texte recherche ce texte vers l'ARRIÈRE.
+ Après une recherche tapez n pour trouver l'occurence suivante dans la
+ même direction ou Maj-N pour rechercher dans la direction opposée.
+
+ 3. Taper % lorsque le curseur est sur (, ), [, ], { ou } déplace
+ celui-ci sur le caractère correspondant.
+
+ 4. Pour remplacer le premier aa par bb sur une ligne tapez :s/aa/bb
+ Pour remplacer tous les aa par bb sur une ligne tapez :s/aa/bb/g
+ Pour remplacer du texte entre deux numéros de ligne tapez :#,#s/aa/bb/g
+ Pour remplacer toutes les occurences dans le fichier tapez :%s/aa/bb/g
+ Pour demander une confirmation à chaque fois ajoutez 'c' :%s/aa/bb/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 5.1 : COMMENT EXÉCUTER UNE COMMANDE EXTERNE
+
+
+ ** Tapez :! suivi d'une commande externe pour exécuter cette commande. **
+
+ 1. Tapez le : familier pour mettre le curseur en bas de l'écran. Cela vous
+ permet de saisir une commande.
+
+ 2. Puis tapez un ! (point d'exclamation). Cela vous permet d'exécuter
+ n'importe quelle commande valide pour votre interpréteur (shell).
+
+ 3. Par exemple, tapez ls après le ! et appuyez <Entrée>. Ceci affichera
+ la liste des fichiers du dossier courant, comme si vous aviez tapé la
+ commande à l'invite du shell. Utilisez :!dir si :!ls ne marche pas.
+
+Note: Il est possible d'exécuter n'importe quelle commande externe de cette
+ manière.
+
+Note: Toutes les commandes : doivent finir par la frappe de <Entrée>.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 5.2 : PLUS DE DÉTAILS SUR L'ENREGISTREMENT DE FICHIERS
+
+
+ ** Pour enregistrer les changements faits au fichier, tapez :w FICHIER . **
+
+ 1. Tapez :!dir ou :!ls pour avoir la liste des fichiers du dossier
+ courant. Vous savez déjà qu'il faut appuyer <Entrée> après cela.
+
+ 2. Choisissez un nom de fichier qui n'existe pas encore, par exemple TEST.
+
+ 3. Puis tapez :w TEST (où TEST est le nom que vous avez choisi).
+
+ 4. Cela sauvegarde tout le fichier (Tutoriel Vim) sous le nom TEST.
+ Pour le vérifier, tapez :!dir pour revisualiser le contenu du dossier.
+
+Notez que si vous quittez Vim et y retournez avec le fichier TEST, celui-ci
+sera une copie exacte du cours au moment où vous l'avez sauvé.
+
+ 5. Maintenant, effacez le fichier en tapant (MS-DOS): :!del TEST
+ ou (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 5.3 : UN ENREGISTREMENT SÉLECTIF
+
+
+ ** Pour enregistrer une portion de fichier, tapez :#,#w FICHIER **
+
+ 1. Tapez à nouveau :!dir ou :!ls pour visualiser le contenu du dossier
+ courant et choisissez un nom de fichier, tel que TEST.
+
+ 2. Déplacez le curseur jusqu'en haut de cette page et tapez Ctrl-G pour
+ connaître le numéro de cette ligne. NOTEZ CE NUMÉRO !
+
+ 3. Puis rendez-vous au bas de cette page et tapez à nouveau Ctrl-G .
+ NOTEZ ÉGALEMENT CE NUMÉRO !
+
+ 4. Pour enregistrer SEULEMENT une portion d'un fichier, tapez :#,#w TEST
+ où #,# sont les deux numéros que vous avez notés (haut,bas) et TEST est
+ le nom du fichier.
+
+ 5. Une fois encore, vérifiez la présence du fichier avec :!dir mais NE
+ L'EFFACEZ PAS.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 5.4 : RÉCUPÉRATION ET FUSION DE FICHIERS
+
+
+ ** Pour insérer le contenu d'un fichier, tapez :r FICHIER **
+
+ 1. Tapez :!dir pour vérifier que votre fichier TEST est encore là.
+
+ 2. Placez le curseur en haut de cette page.
+
+NOTE: Après avoir suivi l'étape 3 vous verrez à l'écran la Leçon 5.3.
+ Déplacez-vous vers le bas jusqu'à revenir à cette leçon.
+
+ 3. Maintenant récupérez votre fichier TEST en utilisant la commande :r TEST
+ où TEST est le nom de votre fichier.
+
+NOTE: Le fichier que vous récupérez est placé là où se trouve le curseur.
+
+ 4. Pour vérifier que le fichier a bien été inséré, remontez et vérifiez
+ qu'il y a maintenant deux copies de la Leçon 5.3, l'originale et celle
+ contenue dans le fichier.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 5
+
+
+ 1. :!commande exécute une commande externe.
+
+ Quelques exemples pratiques:
+ (MS-DOS) (Unix)
+ :!dir :!ls affiche le contenu du dossier courant.
+ :!del FICHIER :!rm FICHIER efface FICHIER.
+
+ 2. :w FICHIER enregistre le fichier Vim courant sur le disque avec pour
+ nom FICHIER.
+
+ 3. :#,#w FICHIER enregistre les lignes # à # dans le fichier FICHIER.
+
+ 4. :r FICHIER récupère le fichier FICHIER et l'insère dans le fichier
+ courant à partir de la position du curseur.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 6.1 : L'OUVERTURE
+
+
+** Tapez o pour ouvrir une ligne sous le curseur et y aller en Insertion. **
+
+ 1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
+
+ 2. Tapez o (minuscule) pour ouvrir une ligne SOUS le curseur et vous y
+ placer en mode Insertion.
+
+ 3. Puis recopiez la ligne marquée ---> et appuyez sur <Échap> pour quitter
+ le mode Insertion.
+
+---> En tapant o le curseur se met sur la ligne ouverte, en mode Insertion.
+
+ 4. Pour ouvrir une ligne au DESSUS du curseur, tapez simplement un O
+ majuscule, plutôt qu'un o minuscule. Faites un essai sur la ligne
+ ci-dessous.
+Ouvrez une ligne ci-dessus en tapant MAJ-O lorsque le curseur est ici.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 6.2 : L'AJOUT
+
+
+ ** Tapez a pour insérer du texte APRÈS le curseur. **
+
+ 1. Placez le curseur à la fin de la première ligne marquée ---> ci-dessous
+ en tapant $ en mode Normal.
+
+ 2. Tapez un a (minuscule) pour ajouter du texte APRÈS le caractère situé
+ sous le curseur. ( A majuscule ajoute du texte à la fin de la ligne).
+
+Note: Ceci évite de taper i , le dernier caractère, le texte à insérer,
+ <Échap>, curseur-à-droite, et finalement x , juste pour ajouter du
+ texte à la fin d'une ligne !
+
+ 3. Maintenant, complétez la première ligne. Notez également que l'ajout est
+ identique au mode Insertion, hormis la position où le texte est inséré.
+
+---> Cette ligne vous permet de pratiquer
+---> Cette ligne vous permet de pratiquer l'ajout de texte en fin de ligne.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 6.3 : UNE AUTRE VERSION DU REMPLACEMENT
+
+
+ ** Tapez un R majuscule pour remplacer plus d'un caractère. **
+
+ 1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+
+ 2. Placez le curseur au début du premier mot qui diffère de la seconde ligne
+ marquée ---> (le mot 'celle').
+
+ 3. Puis tapez R et remplacez le reste du texte de la première ligne en
+ tapant par dessus celui-ci, de manière à rendre la première ligne
+ identique à la seconde.
+
+---> Pour rendre cette ligne identique à celle du dessous utilisez le clavier.
+---> Pour rendre cette ligne identique à la seconde, tapez R et la correction.
+
+ 4. Notez que lorsque vous appuyez <Échap>, le texte qui n'a pas encore été
+ remplacé reste.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 6.4 : RÉGLAGE DES OPTIONS
+
+
+ ** Réglons une option afin que la recherche et la substitution ignorent la
+ casse des caractères. **
+
+ 1. Recherchez 'ignore' en tapant /ignore .
+ Répétez ceci plusieurs fois en utilisant la touche n .
+
+ 2. Activez l'option 'ic' (Ignorer casse) en tapant :set ic .
+
+ 3. Puis poursuivez votre recherche en utilisant n .
+ Répétez cette recherche plusieurs fois avec la touche n .
+
+ 4. Activez les options 'hlsearch' et 'incsearch' avec :set hls is .
+
+ 5. Puis recommencez une recherche, et faites bien attention à ce qui se
+ produit: /ignore .
+
+ 6. Pour interrompre la mise en surbrillance des résultats, tapez:
+ :nohlsearch
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ RÉSUMÉ DE LA LEÇON 6
+
+
+ 1. Taper o ouvre une ligne SOUS le curseur et y place celui-ci en mode
+ Insertion. Taper un O majuscule ouvre une ligne au DESSUS de la ligne
+ où se trouve le curseur.
+
+ 2. Tapez un a pour insérer du texte APRÈS le caractère où se trouve le
+ curseur. Taper un A majuscule ajoute du texte automatiquement à la fin
+ de la ligne.
+
+ 3. Taper un R majuscule active le mode Remplacement jusqu'à ce que la
+ touche <Échap> soit appuyée pour en sortir.
+
+ 4. Taper :set xxx active l'option 'xxx'.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 7 : ACCÉDER À L'AIDE EN LIGNE
+
+ ** Utiliser le système d'aide en ligne. **
+
+ Vim a un système complet d'aide en ligne. Pour y accéder, essayez l'une de
+ ces trois méthodes:
+ - appuyez la touche <Help> (si vous en avez une)
+ - appuyez la touche <F1> (si vous en avez une)
+ - tapez :help <Entrée>
+
+ Tapez :q <Entrée> pour fermer la fenêtre d'aide.
+
+ Vous pouvez accéder à l'aide sur à peu près n'importe quel sujet en donnant
+ des arguments à la commande :help . Essayez par exemple (n'oubliez pas
+ d'appuyer sur <Entrée>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leçon 8 : CRÉER UN SCRIPT DE DÉMARRAGE
+
+ ** Activer les fonctionnalités de Vim. **
+
+ Vim a beaucoup plus de fonctionnalités que Vi, mais la plupart de celles-ci
+ sont désactivées par défaut. Pour commencer à les utiliser, vous devez
+ créer un fichier "vimrc".
+
+ 1. Commencez à éditer le fichier "vimrc". Ceci dépend de votre système:
+ :edit ~/.vimrc pour Unix
+ :edit $VIM/_vimrc pour MS-Windows
+
+ 2. Intégrez maintenant le texte du fichier "vimrc" d'exemple:
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Enregistrez le fichier avec:
+ :write
+
+ La prochaine fois que vous démarrerez Vim, le surlignage syntactique sera
+ activé. Vous pouvez ajouter tous vos réglages préférés dans ce fichier.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ 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 .
+
+ 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.
+ L'éditeur Vi - Collection Précis et concis - par Arnold Robbins
+ Éditeur: O'Reilly France
+ ISBN: 2-84177-102-4
+
+ Deux livres en anglais sont également mentionnés dans la version originale
+ de ce tutoriel, dont un qui traite spécifiquement de Vim. Merci de vous y
+ référer si vous êtes intéressé.
+
+ Ce tutoriel a été écrit par Michael C. Pierce et Robert K. Ware de l'École
+ des Mines du Colorado et reprend des idées fournies par Charles Smith,
+ Universté 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.
+ E-mail: version.francaise@free.fr
+ Last Change: 2003 May 29
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.gr b/runtime/tutor/tutor.gr
new file mode 100644
index 000000000..528977b04
--- /dev/null
+++ b/runtime/tutor/tutor.gr
@@ -0,0 +1,815 @@
+===============================================================================
+= Ê áë ù ó Þ ñ è á ô å ó ô ï V I M T u t o r - ¸êäïóç 1.5 =
+===============================================================================
+
+ Ï Vim åßíáé Ýíáò ðáíßó÷õñïò óõíôÜêôçò ðïõ Ý÷åé ðïëëÝò åíôïëÝò, ðÜñá
+ ðïëëÝò ãéá íá åîçãÞóïõìå óå ìßá ðåñéÞãçóç üðùò áõôÞ. ÁõôÞ ç ðåñéÞãçóç
+ ó÷åäéÜóôçêå ãéá íá ðåñéãñÜøåé éêáíïðïéçôéêÜ ôéò åíôïëÝò ðïõ èá óáò
+ êÜíïõí íá ÷ñçóéìïðïéåßôå åýêïëá ôïí Vim óáí Ýíáí ãåíéêÞò ÷ñÞóçò óõíôÜêôç.
+
+ Ï êáôÜ ðñïóÝããéóç ÷ñüíïò ðïõ áðáéôåßôáé ãéá íá ïëïêëçñþóåôå ôçí ðåñéÞãçóç
+ åßíáé 25-30 ëåðôÜ, åîáñôþíôáò áðü ôï ðüóï ÷ñüíï èá îïäÝøåôå ãéá
+ ðåéñáìáôéóìïýò.
+
+ Ïé åíôïëÝò óôá ìáèÞìáôá èá ôñïðïðïéÞóïõí ôï êåßìåíï. ÄçìéïõñãÞóôå Ýíá
+ áíôßãñáöï áõôïý ôïõ áñ÷åßïõ ãéá íá åîáóêçèåßôå (áí îåêéíÞóáôå ôï
+ "Vimtutor" áõôü åßíáé Þäç Ýíá áíôßãñáöï).
+
+ Åßíáé óçìáíôéêü íá èõìÜóôå üôé áõôÞ ç ðåñéÞãçóç åßíáé ïñãáíùìÝíç Ýôóé
+ þóôå íá äéäÜóêåé ìÝóù ôçò ÷ñÞóçò. Áõôü óçìáßíåé üôé ÷ñåéÜæåôáé íá
+ åêôåëåßôå ôéò åíôïëÝò ãéá íá ôéò ìÜèåôå óùóôÜ. Áí äéáâÜæåôå ìüíï ôï
+ êåßìåíï, èá ôéò îå÷Üóåôå!
+
+ Ôþñá, âåâáéùèåßôå üôé ôï ðëÞêôñï Shift-Lock ÄÅÍ åßíáé ðáôçìÝíï êáé
+ ðáôÞóôå ôï ðëÞêôñï j áñêåôÝò öïñÝò ãéá íá ìåôáêéíÞóåôå ôïí äñïìÝá Ýôóé
+ þóôå ôï ÌÜèçìá 1.1 íá ãåìßóåé ðëÞñùò ôçí ïèüíç.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 1.1: ÌÅÔÁÊÉÍÏÍÔÁÓ ÔÏÍ ÄÑÏÌÅÁ
+
+ ** Ãéá íá êéíÞóåôå ôïí äñïìÝá, ðáôÞóôå ôá ðëÞêôñá h,j,k,l üðùò äåß÷íåôáé. **
+ ^
+ k Hint: Ôï ðëÞêôñï h åßíáé áñéóôåñÜ êáé êéíåß óô' áñéóôåñÜ.
+ < h l > Ôï ðëÞêôñï l åßíáé äåîéÜ êáé êéíåß óôá äåîéÜ.
+ j Ôï ðëÞêôñï j ìïéÜæåé ìå âåëÜêé ðñïò ôá êÜôù.
+ v
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá ôñéãýñù óôçí ïèüíç ìÝ÷ñé íá íïéþèåôå Üíåôá.
+
+ 2. ÊñáôÞóôå ðáôçìÝíï ôï êÜôù ðëÞêôñï (j) ìÝ÷ñé íá åðáíáëçöèåß.
+---> Ôþñá îÝñåôå ðþò íá ìåôáêéíçèåßôå óôï åðüìåíï ìÜèçìá.
+
+ 3. ×ñçóéìïðïéþíôáò ôï êÜôù ðëÞêôñï, ìåôáêéíçèåßôå óôï ÌÜèçìá 1.2.
+
+Óçìåßùóç: Áí áìöéâÜëëåôå ãéá êÜôé ðïõ ðáôÞóáôå, ðáôÞóôå <ESC> ãéá íá âñåèåßôå
+ óôçí ÊáíïíéêÞ ÊáôÜóôáóç. ÌåôÜ ðáôÞóôå îáíÜ ôçí åíôïëÞ ðïõ èÝëáôå.
+
+Óçìåßùóç: Ôá ðëÞêôñá ôïõ äñïìÝá èá ðñÝðåé åðßóçò íá äïõëåýïõí. ÁëëÜ ìå ôá hjkl
+ èá ìðïñåßôå íá êéíçèåßôå ðïëý ãñçãïñüôåñá, ìüëéò ôá óõíçèßóåôå.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 1.2: ÌÐÁÉÍÏÍÔÁÓ ÊÁÉ ÂÃÁÉÍÏÍÔÁÓ ÓÔÏÍ VIM
+
+ !! ÓÇÌÅÉÙÓÇ: Ðñéí åêôåëÝóåôå êÜðïéï áðü ôá âÞìáôá, äéáâÜóôå üëï ôï ìÜèçìá!!
+
+ 1. ÐáôÞóôå ôï ðëÞêôñï <ESC> (ãéá íá åßóôå óßãïõñá óôçí ÊáíïíéêÞ ÊáôÜóôáóç).
+
+ 2. ÐëçêôñïëïãÞóôå: :q! <ENTER>.
+
+---> Áõôü åîÝñ÷åôáé áðü ôïí óõíôÜêôç ×ÙÑÉÓ íá óþóåé üðïéåò áëëáãÝò Ý÷åôå êÜíåé.
+ Áí èÝëåôå íá óþóåôå ôéò áëëáãÝò êáé íá åîÝñèåôå ðëçêôñïëïãÞóôå:
+ :wq <ENTER>
+
+ 3. ¼ôáí äåßôå ôçí ðñïôñïðÞ ôïõ öëïéïý, ðëçêôñïëïãÞóôå ôçí åíôïëÞ ìå ôçí ïðïßá
+ ìðÞêáôå óå áõôÞí ôçí ðåñéÞãçóç. Ìðïñåß íá åßíáé: vimtutor <ENTER>
+ ÊáíïíéêÜ èá ÷ñçóéìïðïéïýóáôå: vim tutor <ENTER>
+
+---> 'vim' óçìáßíåé åéóáãùãÞ óôïí óõíôÜêôç vim, 'tutor' åßíáé ôï áñ÷åßï ðïõ
+ èÝëïõìå íá äéïñèþóïõìå.
+
+ 4. Áí Ý÷åôå áðïìíçìïíåýóåé áõôÜ ôá âÞìáôá êáé Ý÷åôå áõôïðåðïßèçóç, åêôåëÝóôå
+ ôá âÞìáôá 1 Ýùò 3 ãéá íá âãåßôå êáé íá ìðåßôå îáíÜ óôïí óõíôÜêôç. ÌåôÜ
+ ìåôáêéíÞóôå ôïí äñïìÝá êÜôù óôï ÌÜèçìá 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 1.3: ÄÉÏÑÈÙÓÇ ÊÅÉÌÅÍÏÕ - ÄÉÁÃÑÁÖÇ
+
+ ** ¼óï åßóôå óôçí ÊáíïíéêÞ ÊáôÜóôáóç ðáôÞóôå x ãéá íá äéáãñÜøåôå ôïí
+ ÷áñáêôÞñá êÜôù áðü ôïí äñïìÝá. **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá óôçí ðáñáêÜôù ãñáììÞ óçìåéùìÝíç ìå --->.
+
+ 2. Ãéá íá äéïñèþóåôå ôá ëÜèç, êéíåßóôå ôïí äñïìÝá ìÝ÷ñé íá åßíáé ðÜíù áðü
+ ôïí ÷áñáêôÞñá ðïõ èá äéáãñáöåß.
+
+ 3. ÐáôÞóôå ôï ðëÞêôñï x ãéá íá äéáãñÜøåôå ôïí áíåðéèýìçôï ÷áñáêôÞñá.
+
+ 4. ÅðáíáëÜâåôå ôá âÞìáôá 2 ìÝ÷ñé 4 ìÝ÷ñé ç ðñüôáóç íá åßíáé óùóôÞ.
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. Ôþñá ðïõ ç ãñáììÞ åßíáé óùóôÞ, ðçãáßíôå óôï ÌÜèçìá 1.4.
+
+ÓÇÌÅÉÙÓÇ: Êáèþò äéáôñÝ÷åôå áõôÞí ôçí ðåñéÞãçóç, ðñïóðáèÞóôå íá ìçí
+ áðïìíçìïíåýåôå, ìáèáßíåôå ìå ôç ÷ñÞóç.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 1.4: ÄÉÏÑÈÙÓÇ ÊÅÉÌÅÍÏÕ - ÐÁÑÅÌÂÏËÇ
+
+ ** ¼óï åßóôå óå ÊáíïíéêÞ ÊáôÜóôáóç ðáôÞóôå i ãéá íá ðáñåìâÜëëåôå êåßìåíï. **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá ìÝ÷ñé ôçí ðñþôç ãñáììÞ ðáñáêÜôù óçìåéùìÝíç ìå --->.
+
+ 2. Ãéá íá êÜíåôå ôçí ðñþôç ãñáììÞ ßäéá ìå ôçí äåýôåñç, ìåôáêéíåßóôå ôïí
+ äñïìÝá ðÜíù óôïí ðñþôï ÷áñáêôÞñá ÌÅÔÁ áðü üðïõ èá ðáñåìâëçèåß ôï êåßìåíï.
+
+ 3. ÐáôÞóôå ôï i êáé ðëçêôñïëïãÞóôå ôéò áðáñáßôçôåò ðñïóèÞêåò.
+
+ 4. Êáèþò äéïñèþíåôå êÜèå ëÜèïò ðáôÞóôå <ESC> ãéá íá åðéóôñÝøåôå óôçí
+ ÊáíïíéêÞ ÊáôÜóôáóç. ÅðáíáëÜâåôå ôá âÞìáôá 2 ìÝ÷ñé 4 ãéá íá äéïñèþóåôå
+ ôçí ðñüôáóç.
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. ¼ôáí åßóôå Üíåôïé ìå ôçí ðáñåìâïëÞ êåéìÝíïõ ìåôáêéíçèåßôå óôçí
+ ðáñáêÜôù ðåñßëçøç.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 1 ÐÅÑÉËÇØÇ
+
+
+ 1. Ï äñïìÝáò êéíåßôáé ÷ñçóéìïðïéþíôáò åßôå ôá ðëÞêôñá äñïìÝá Þ ôá hjkl.
+ h (áñéóôÝñá) j (êÜôù) k (ðÜíù) l (äåîéÜ)
+
+ 2. Ãéá íá ìðåßôå óôïí Vim (áðü ôçí ðñïôñïðÞ %) ãñÜøôå: vim ÁÑ×ÅÉÏ <ENTER>
+
+ 3. Ãéá íá âãåßôå ãñÜøôå: <ESC> :q! <ENTER> ãéá áðüññéøç ôùí áëëáãþí.
+ ¹ ãñÜøôå: <ESC> :wq <ENTER> ãéá áðïèÞêåõóç ôùí áëëáãþí.
+
+ 4. Ãéá íá äéáãñÜøåôå Ýíáí ÷áñáêôÞñá êÜôù áðü ôïí äñïìÝá óå
+ ÊáíïíéêÞ ÊáôÜóôáóç ðáôÞóôå: x
+
+ 5. Ãéá íá åéóÜãåôå êåßìåíï óôïí äñïìÝá üóï åßóôå óå ÊáíïíéêÞ ÊáôÜóôáóç ãñÜøôå:
+ i ðëçêôñïëïãÞóôå ôï êåßìåíï <ESC>
+
+ÓÇÌÅÉÙÓÇ: Ðáôþíôáò <ESC> èá ôïðïèåôçèåßôå óôçí ÊáíïíéêÞ ÊáôÜóôáóç Þ èá
+ áêõñþóåôå ìßá áíåðéèýìçôç êáé ìåñéêþò ïëïêëçñùìÝíç åíôïëÞ.
+
+Ôþñá óõíå÷ßóôå ìå ôï ÌÜèçìá 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 2.1: ÅÍÔÏËÅÓ ÄÉÁÃÑÁÖÇÓ
+
+ ** ÃñÜøôå 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 ìÝ÷ñé ç ðñüôáóç íá åßíáé óùóôÞ êáé
+ ðçãáßíåôå óôï ÌÜèçìá 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 2.2: ÐÅÑÉÓÓÏÔÅÑÅÓ ÅÍÔÏËÅÓ ÄÉÁÃÑÁÖÇÓ
+
+ ** ÐëçêôñïëïãÞóôå d$ ãéá íá äéáãñÜøåôå ìÝ÷ñé ôï ôÝëïò ôçò ãñáììÞò. **
+
+ 1. ÐáôÞóôå <ESC> ãéá íá âåâáéùèåßôå üôé åßóôå óôçí ÊáíïíéêÞ ÊáôÜóôáóç.
+
+ 2. Ìåôáêéíåßóôå ôïí äñïìÝá óôçí ðáñáêÜôù ãñáììÞ óçìåéùìÝíç ìå --->.
+
+ 3. Ìåôáêéíåßóôå ôïí äñïìÝá óôï ôÝëïò ôçò óùóôÞò ãñáììÞò (ÌÅÔÁ ôçí ðñþôç . ).
+
+ 4. ÐáôÞóôå d$ ãéá íá äéáãñÜøåôå ìÝ÷ñé ôï ôÝëïò ôçò ãñáììÞò.
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+ 5. Ðçãáßíåôå óôï ÌÜèçìá 2.3 ãéá íá êáôáëÜâåôå ôé óõìâáßíåé.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 2.3: ÐÅÑÉ ÅÍÔÏËÙÍ ÊÁÉ ÁÍÔÉÊÅÉÌÅÍÙÍ
+
+
+Ç ìïñöÞ ôçò åíôïëÞò äéáãñáöÞò d åßíáé ùò åîÞò:
+
+ [áñéèìüò] d áíôéêåßìåíï ¹ d [áñéèìüò] áíôéêåßìåíï
+ ¼ðïõ:
+ áñéèìüò - ðüóåò öïñÝò èá åêôåëåóôåß ç åíôïëÞ (ðñïáéñåôéêü, åî' ïñéóìïý=1).
+ d - ç åíôïëÞ ôçò äéáãñáöÞò.
+ áíôéêåßìåíï - ðÜíù óå ôé èá ëåéôïõñãÞóåé ç åíôïëÞ (ðáñáêÜôù ëßóôá).
+
+ Ìßá ìéêñÞ ëßóôá áðü áíôéêåßìåíá:
+ w - áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ôçò ëÝîçò, ðåñéëáìâÜíïíôáò ôï äéÜóôçìá.
+ e - áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ôçò ëÝîçò, ×ÙÑÉÓ ôï äéÜóôçìá.
+ $ - áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ôçò ãñáììÞò.
+
+ÓÇÌÅÉÙÓÇ: Ãéá ôïõò ôýðïõò ôçò ðåñéðÝôåéáò, ðáôþíôáò áðëþò ôï áíôéêåßìåíï üóï
+ åßóôå óôçí ÊáíïíéêÞ ÊáôÜóôáóç ÷ùñßò êÜðïéá åíôïëÞ èá ìåôáêéíÞóåôå
+ ôïí äñïìÝá üðùò êáèïñßæåôáé óôçí ëßóôá áíôéêåéìÝíùí.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 2.4: ÌÉÁ ÅÎÁÉÑÅÓÇ ÓÔÇÍ 'ÅÍÔÏËÇ-ÁÍÔÉÊÅÉÌÅÍÏ'
+
+ ** ÐëçêôñïëïãÞóôå dd ãéá íá äéáãñÜøåôå üëç ôç ãñáììÞ. **
+
+ Åîáéôßáò ôçò óõ÷íüôçôáò ôçò äéáãñáöÞò ïëüêëçñçò ãñáììÞò, ïé ó÷åäéáóôÝò
+ ôïõ Vim áðïöÜóéóáí üôé èá Þôáí åõêïëüôåñï íá ãñÜöåôå áðëþò äýï 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.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 2.5: Ç ÅÍÔÏËÇ ÁÍÁÉÑÅÓÇÓ
+
+ ** ÐáôÞóôå 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. ÁõôÝò åßíáé ðïëý ÷ñÞóéìåò åíôïëÝò. Ôþñá ðçãáßíåôå óôçí
+ Ðåñßëçøç ôïõ ÌáèÞìáôïò 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 2 ÐÅÑÉËÇØÇ
+
+
+ 1. Ãéá íá äéáãñÜøåôå áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ëÝîçò ãñÜøôå: dw
+
+ 2. Ãéá íá äéáãñÜøåôå áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ãñáììÞò ãñÜøôå: d$
+
+ 3. Ãéá íá äéáãñÜøåôå ïëüêëçñç ôç ãñáììÞ ãñÜøôå: dd
+
+ 4. Ç ìïñöÞ ãéá ìßá åíôïëÞ óôçí ÊáíïíéêÞ ÊáôÜóôáóç åßíáé:
+
+ [áñéèìüò] åíôïëÞ áíôéêåßìåíï ¹ åíôïëÞ [áñéèìüò] áíôéêåßìåíï
+ üðïõ:
+ áñéèìüò - ðüóåò öïñÝò íá åðáíáëçöèåß ç åíôïëÞ
+ åíôïëÞ - ôé íá ãßíåé, üðùò ç d ãéá äéáãñáöÞ
+ áíôéêåßìåíï - ðÜíù óå ôé íá åíåñãÞóåé ç åíôïëÞ, üðùò w (ëÝîç),
+ $ (ôÝëïò ôçò ãñáììÞò), êôë.
+
+ 5. Ãéá íá áíáéñÝóåôå ðñïçãïýìåíåò åíÝñãåéåò, ðáôÞóôå: u (ðåæü u)
+ Ãéá íá áíáéñÝóåôå üëåò ôéò áëëáãÝò óôç ãñáììÞ, ðáôÞóôå: U (êåöáëáßï U)
+ Ãéá íá áíáéñÝóåôå ôéò áíáéñÝóåéò, ðáôÞóôå: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 3.1: Ç ÅÍÔÏËÇ ÔÏÐÏÈÅÔÇÓÇÓ
+
+
+ ** ÐáôÞóôå p ãéá íá ôïðïèåôÞóåôå ôçí ôåëåõôáßá äéáãñáöÞ ìåôÜ ôïí äñïìÝá. **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá óôçí ðñþôç ãñáììÞ ôçò ðáñáêÜôù ïìÜäáò.
+
+ 2. ÐáôÞóôå dd ãéá íá äéáãñÜøåôå ôç ãñáììÞ êáé íá ôçí áðïèçêåýóåôå óå
+ ðñïóùñéíÞ ìíÞìç ôïõ Vim.
+
+ 3. Ìåôáêéíåßóôå ôïí äñïìÝá óôç ãñáììÞ ÐÁÍÙ áðü åêåß ðïõ èá ðñÝðåé íá ðÜåé
+ ç äéáãñáììÝíç ãñáììÞ.
+
+ 4. ¼óï åßóôå óå ÊáíïíéêÞ ÊáôÜóôáóç, ðáôÞóôå p ãéá íá âÜëåôå ôç ãñáììÞ.
+
+ 5. ÅðáíáëÜâåôå ôá âÞìáôá 2 Ýùò 4 ãéá íá âÜëåôå üëåò ôéò ãñáììÝò óôç
+ óùóôÞ óåéñÜ.
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 3.2: Ç ÅÍÔÏËÇ ÁÍÔÉÊÁÔÁÓÔÁÓÇÓ
+
+
+ ** ÐáôÞóôå 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. Ôþñá ðçãáßíåôå óôï ÌÜèçìá 3.2.
+
+ÓÇÌÅÉÙÓÇ: Íá èõìÜóôå üôé ðñÝðåé íá ìáèáßíåôå ìå ôç ÷ñÞóç, êáé ü÷é ìå
+ ôçí áðïìíçìüíåõóç.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 3.3: Ç ÅÍÔÏËÇ ÁËËÁÃÇÓ
+
+ ** Ãéá íá áëëÜîåôå ôìÞìá Þ üëç ôç ëÝîç, ðáôÞóôå cw . **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá óôçí ðñþôç ãñáììÞ ðáñáêÜôù óçìåéùìÝíç ìå --->.
+
+ 2. ÔïðïèåôÞóôå ôïí äñïìÝá ðÜíù óôï u ôçò ëÝîçò lubw.
+
+ 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 ü÷é ìüíï áíôéêáèéóôÜåé ôç ëÝîç, áëëÜ óáò åéóÜãåé
+åðßóçò óå ðáñåìâïëÞ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 3.4: ÐÅÑÉÓÓÏÔÅÑÅÓ ÁËËÁÃÅÓ ÌÅ c
+
+
+ ** Ç åíôïëÞ áëëáãÞò ÷ñçóéìïðïéåßôáé ìå ôá ßäéá áíôéêåßìåíá ôçò äéáãñáöÞò. **
+
+
+ 1. Ç åíôïëÞ áëëáãÞò äïõëåýåé ìå ôïí ßäéï ôñüðï üðùò ç äéáãñáöÞ. Ç ìïñöÞ åßíáé:
+
+ [áñéèìüò] c áíôéêåßìåíï ¹ c [áñéèìüò] áíôéêåßìåíï
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 3 ÐÅÑÉËÇØÇ
+
+
+ 1. Ãéá íá ôïðïèåôÞóåôå êåßìåíï ðïõ ìüëéò Ý÷åé äéáãñáöåß, ðáôÞóôå p .
+ Áõôü ôïðïèåôåß ôï äéáãñáììÝíï êåßìåíï ÌÅÔÁ ôïí äñïìÝá (áí äéáãñÜöôçêå
+ ãñáììÞ èá ðÜåé ìåôÜ óôç ãñáììÞ êÜôù áðü ôïí äñïìÝá.
+
+ 2. Ãéá íá áíôéêáôáóôÞóåôå ôïí ÷áñáêôÞñá êÜôù áðü ôïí äñïìÝá, ðáôÞóôå r
+ êáé ìåôÜ ôïí ÷áñáêôÞñá ðïõ èá áíôéêáôáóôÞóåé ôïí áñ÷éêü.
+
+ 3. Ç åíôïëÞ áëëáãÞò óáò åðéôñÝðåé íá áëëÜîåôå ôï êáèïñéóìÝíï áíôéêåßìåíï
+ áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ôïõ áíôéêåßìåíï. Ð.÷. ãñÜøôå cw ãéá íá
+ áëëÜîåôå áðü ôïí äñïìÝá ìÝ÷ñé ôï ôÝëïò ôçò ëÝîçò, c$ ãéá íá áëëÜîåôå
+ ìÝ÷ñé ôï ôÝëïò ãñáììÞò.
+
+ 4. Ç ìïñöÞ ãéá ôçí áëëáãÞ åßíáé:
+
+ [áñéèìüò] c áíôéêåßìåíï ¹ c [áñéèìüò] áíôéêåßìåíï
+
+Ôþñá óõíå÷ßóôå ìå ôï åðüìåíï ìÜèçìá.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 4.1: ÈÅÓÇ ÊÁÉ ÊÁÔÁÓÔÁÓÇ ÁÑ×ÅÉÏÕ
+
+
+ ** ÐáôÞóôå CTRL-g ãéá íá åìöáíéóôåß ç èÝóç óáò óôï áñ÷åßï êáé ç êáôÜóôáóÞ ôïõ.
+ ÐáôÞóôå SHIFT-G ãéá íá ðÜôå óå ìßá ãñáììÞ óôï áñ÷åßï. **
+
+ Óçìåßùóç: ÄéáâÜóôå ïëüêëçñï ôï ìÜèçìá ðñéí åêôåëÝóåôå êÜðïéï áðü ôá âÞìáôá!!
+
+ 1. ÊñáôÞóôå ðáôçìÝíï ôï ðëÞêôñï Ctrl êáé ðáôÞóôå g . Ìßá ãñáììÞ êáôÜóôáóçò
+ èá åìöáíéóôåß óôï êÜôù ìÝñïò ôçò óåëßäáò ìå ôï üíïìá áñ÷åßïõ êáé ôç
+ ãñáììÞ ðïõ åßóôå. Èõìçèåßôå ôïí áñéèìü ãñáììÞò ãéá ôï ÂÞìá 3.
+
+ 2. ÐáôÞóôå shift-G ãéá íá ìåôáêéíçèåßôå óôï ôÝëïò ôïõ áñ÷åßïõ.
+
+ 3. ÐáôÞóôå ôïí áñéèìü ôçò ãñáììÞò ðïõ Þóáóôáí êáé ìåôÜ shift-G. Áõôü èá
+ óáò åðéóôñÝøåé óôç ãñáììÞ ðïõ Þóáóôáí ðñéí ðáôÞóåôå ãéá ðñþôç öïñÜ Ctrl-g.
+ (¼ôáí ðëçêôñïëïãåßôå ôïõò áñéèìïýò, ÄÅÍ èá åìöáíßæïíôáé óôçí ïèüíç).
+
+ 4. Áí íïéþèåôå óßãïõñïò ãéá áõôü, åêôåëÝóôå ôá âÞìáôá 1 Ýùò 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 4.2: Ç ÅÍÔÏËÇ ÁÍÁÆÇÔÇÓÇÓ
+
+
+ ** ÐáôÞóôå / áêïëïõèïýìåíï áðü ôç öñÜóç ðïõ øÜ÷íåôå. **
+
+ 1. Óå ÊáíïíéêÞ ÊáôÜóôáóç ðáôÞóôå ôïí ÷áñáêôÞñá / . ÐáñáôçñÞóôå üôé áõôüò êáé
+ ï äñïìÝáò åìöáíßæïíôáé óôï êÜôù ìÝñïò ôçò ïèüíçò üðùò ìå ôçí åíôïëÞ : .
+
+ 2. Ôþñá ãñÜøôå 'errroor' <ENTER>. ÁõôÞ åßíáé ç ëÝîç ðïõ èÝëåôå íá øÜîåôå.
+
+ 3. Ãéá íá øÜîåôå îáíÜ ãéá ôçí ßäéá öñÜóç, ðáôÞóôå áðëþò n .
+ Ãéá íá øÜîåôå ôçí ßäéá öñÜóç óôçí áíôßèåôç êáôåýèõíóç, ðáôÞóôå Shift-N .
+
+ 4. Áí èÝëåôå íá øÜîåôå ãéá ìßá öñÜóç ðñïò ôá ðßóù, ÷ñçóéìïðïéÞóôå ôçí åíôïëÞ ? áíôß ôçò / .
+
+---> ¼ôáí ç áíáæÞôçóç öôÜóåé óôï ôÝëïò ôïõ áñ÷åßïõ èá óõíå÷ßóåé áðü ôçí áñ÷Þ.
+
+ "errroor" is not the way to spell error; errroor is an error.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 4.3: ÅÕÑÅÓÇ ÔÁÉÑÉÁÓÔÙÍ ÐÁÑÅÍÈÅÓÅÙÍ
+
+
+ ** ÐáôÞóôå % ãéá íá âñåßôå ôçí áíôßóôïé÷ç ), ], Þ } . **
+
+ 1. ÔïðïèåôÞóôå ôïí äñïìÝá óå êÜðïéá (, [, Þ { óôçí ðáñáêÜôù ãñáììÞ
+ óçìåéùìÝíç ìå --->.
+
+ 2. Ôþñá ðáôÞóôå ôïí ÷áñáêôÞñá % .
+
+ 3. Ï äñïìÝáò èá ðñÝðåé íá åßíáé óôçí áíôßóôïé÷ç ðáñÝíèåóç Þ áãêýëç.
+
+ 4. ÐáôÞóôå % ãéá íá ìåôáêéíÞóåôå ôïí äñïìÝá ðßóù óôçí ðñþôç áãêýëç
+ (ôïõ æåõãáñéïý).
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+ÓÇÌÅÉÙÓÇ: Áõôü åßíáé ðïëý ÷ñÞóéìï óôçí áðïóöáëìÜôùóç åíüò ðñïãñÜììáôïò
+ ìå ìç ôáéñéáóôÝò ðáñåíèÝóåéò!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 4.4: ÅÍÁÓ ÔÑÏÐÏÓ ÃÉÁ ÁËËÁÃÇ ËÁÈÙÍ
+
+
+ ** ÃñÜøôå :s/old/new/g ãéá íá áëëÜîåôå ôï 'new' ìå ôï 'old'. **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá óôçí ðáñáêÜôù ãñáììÞ óçìåéùìÝíç ìå --->.
+
+ 2. ÃñÜøôå :s/thee/the <ENTER> . Óçìåéþóôå üôé áõôÞ ç åíôïëÞ áëëÜæåé ìüíï
+ ôçí ðñþôç åìöÜíéóç óôç ãñáììÞ.
+
+ 3. Ôþñá ãñÜøôå :s/thee/the/g åííïþíôáò ãåíéêÞ áíôéêáôÜóôáóç óôç
+ ãñáììÞ. Áõôü áëëÜæåé üëåò ôéò åìöáíßóåéò åðß ôçò ãñáììÞò.
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. Ãéá íá áëëÜîåôå êÜèå åìöÜíéóç ìßáò óõìâïëïóåéñÜò ìåôáîý äýï ãñáììþí,
+ ãñÜøôå :#,#s/old/new/g üðïõ #,# ïé áñéèìïß ôùí äýï ãñáììþí.
+ ÃñÜøôå :%s/old/new/g ãéá íá áëëÜîåôå êÜèå åìöÜíéóç óå üëï ôï áñ÷åßï.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 4 ÐÅÑÉËÇØÇ
+
+
+ 1. Ôï Ctrl-g åìöáíßæåé ôç èÝóç óáò óôï áñ÷åßï êáé ôçí êáôÜóôáóÞ ôïõ.
+ Ôï Shift-G ðçãáßíåé óôï ôÝëïò ôïõ áñ÷åßïõ. ¸íáò áñéèìüò ãñáììÞò
+ áêïëïõèïýìåíïò áðü Shift-G ðçãáßíåé óå åêåßíç ôç ãñáììÞ.
+
+ 2. ÃñÜöïíôáò / áêïëïõèïýìåíï áðü ìßá öñÜóç øÜ÷íåé ðñïò ôá ÌÐÑÏÓÔÁ ãéá
+ ôç öñÜóç. ÃñÜöïíôáò ? áêïëïõèïýìåíï áðü ìßá öñÜóç øÜ÷íåé ðñïò ôá ÐÉÓÙ
+ ãéá ôç öñÜóç. ÌåôÜ áðü ìßá áíáæÞôçóç ðáôÞóôå n ãéá íá âñåßôå ôçí
+ åðüìåíç åìöÜíéóç ðñïò ôçí ßäéá êáôåýèõíóç Þ Shift-N ãéá íá øÜîåôå
+ ðñïò ôçí áíôßèåôç êáôåýèõíóç.
+
+ 3. Ðáôþíôáò % üóï ï äñïìÝáò åßíáé ðÜíù óå ìßá (,),[,],{, Þ } åíôïðßæåé
+ ôï áíôßóôïé÷ï ôáßñé ôïõ æåõãáñéïý.
+
+ 4. Ãéá áíôéêáôÜóôáóç ìå new ôïõ ðñþôïõ old óôç ãñáììÞ ãñÜøôå :s/old/new
+ Ãéá áíôéêáôÜóôáóç ìå new üëùí ôùí 'old' óôç ãñáììÞ ãñÜøôå :s/old/new/g
+ Ãéá áíôéêáôÜóôáóç öñÜóåùí ìåôáîý äýï # ãñáììþí ãñÜøôå :#,#s/old/new/g
+ Ãéá áíôéêáôÜóôáóç üëùí ôùí åìöáíßóåùí óôï áñ÷åßï ãñÜøôå :%s/old/new/g
+ Ãéá åñþôçóç åðéâåâáßùóçò êÜèå öïñÜ ðñïóèÝóôå Ýíá 'c' "%s/old/new/gc
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 5.1: ÐÙÓ ÅÊÔÅËÙ ÌÉÁ ÅÎÙÔÅÑÉÊÇ ÅÍÔÏËÇ
+
+
+** ÃñÜøôå :! áêïëïõèïýìåíï áðü ìßá åîùôåñéêÞ åíôïëÞ ãéá íá ôçí åêôåëÝóåôå. **
+
+ 1. ÐáôÞóôå ôçí ïéêåßá åíôïëÞ : ãéá íá èÝóåôå ôïí äñïìÝá óôï êÜôù ìÝñïò
+ ôçò ïèüíçò. Áõôü óáò åðéôñÝðåé íá äþóåôå ìßá åíôïëÞ.
+
+ 2. Ôþñá ðáôÞóôå ôï ! (èáõìáóôéêü). Áõôü óáò åðéôñÝðåé íá åêôåëÝóåôå
+ ïðïéáäÞðïôå åîùôåñéêÞ åíôïëÞ ôïõ öëïéïý.
+
+ 3. Óáí ðáñÜäåéãìá ãñÜøôå ls ìåôÜ áðü ôï ! êáé ðáôÞóôå <ENTER>. Áõôü èá
+ óáò åìöáíßóåé ìßá ëßóôá ôïõ êáôáëüãïõ óáò, áêñéâþò óáí íá Þóáóôáí óôçí
+ ðñïôñïðÞ ôïõ öëïéïý. ¹ ÷ñçóéìïðïéÞóôå :!dir áí ôï ls äåí äïõëåýåé.
+
+---> Óçìåßùóç: Åßíáé äõíáôüí íá åêôåëÝóåôå ïðïéáäÞðïôå åîùôåñéêÞ åíôïëÞ
+ ìå áõôüí ôïí ôñüðï.
+
+---> Óçìåßùóç: ¼ëåò ïé åíôïëÝò : ðñÝðåé íá ôåñìáôßæïíôáé ðáôþíôáò ôï <ENTER>.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 5.2: ÐÅÑÉÓÓÏÔÅÑÁ ÐÅÑÉ ÅÃÃÑÁÖÇÓ ÁÑ×ÅÉÙÍ
+
+
+ ** Ãéá íá óþóåôå ôéò áëëÜãåò ðïõ êÜíáôå óôï áñ÷åßï, ãñÜøôå :w ÁÑ×ÅÉÏ. **
+
+ 1. ÃñÜøôå :!dir Þ :!ls ãéá íá ðÜñåôå ìßá ëßóôá ôïõ êáôáëüãïõ óáò.
+ ¹äç îÝñåôå üôé ðñÝðåé íá ðáôÞóåôå <ENTER> ìåôÜ áðü áõôü.
+
+ 2. ÄéáëÝîôå Ýíá üíïìá áñ÷åßïõ ðïõ äåí õðÜñ÷åé áêüìá, üðùò ôï TEST.
+
+ 3. Ôþñá ãñÜøôå: :w TEST (üðïõ TEST åßíáé ôï üíïìá áñ÷åßïõ ðïõ äéáëÝîáôå).
+
+ 4. Áõôü óþæåé üëï ôï áñ÷åßï (vim Tutor) ìå ôï üíïìá TEST. Ãéá íá ôï
+ åðáëçèåýóåôå, ãñÜøôå îáíÜ :!dir ãéá íá äåßôå ôïí êáôÜëïãü óáò.
+
+---> Óçìåéþóôå üôé áí âãáßíáôå áðü ôïí Vim êáé ìðáßíáôå îáíÜ ìå ôï üíïìá
+ áñ÷åßïõ TEST, ôï áñ÷åßï èá Þôáí áêñéâÝò áíôßãñáöï ôïõ tutor üôáí ôï óþóáôå.
+
+ 5. Ôþñá äéáãñÜøôå ôï áñ÷åßï ãñÜöïíôáò (MS-DOS): :!del TEST
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 5.3: ÅÐÉËÅÊÔÉÊÇ ÅÍÔÏËÇ ÅÃÃÑÁÖÇÓ
+
+
+ ** Ãéá íá óþóåôå ôìÞìá ôïõ áñ÷åßïõ, ãñÜøôå :#,# w ÁÑ×ÅÉÏ **
+
+ 1. ¢ëëç ìéá öïñÜ, ãñÜøôå :!dir Þ :!ls ãéá íá ðÜñåôå ìßá ëßóôá áðü ôïí
+ êáôÜëïãü óáò êáé äéáëÝîôå Ýíá êáôÜëëçëï üíïìá áñ÷åßïõ üðùò ôï TEST.
+
+ 2. Ìåôáêéíåßóôå ôïí äñïìÝá óôï ðÜíù ìÝñïò áõôÞò ôçò óåëßäáò êáé ðáôÞóôå
+ Ctrl-g ãéá íá âñåßôå ôïí áñéèìü áõôÞò ôçò ãñáììÞò.
+ ÍÁ ÈÕÌÁÓÔÅ ÁÕÔÏÍ ÔÏÍ ÁÑÉÈÌÏ!
+
+ 3. Ôþñá ðçãáßíåôå óôï êÜôù ìÝñïò ôçò óåëßäáò êáé ðáôÞóôå Ctrl-g îáíÜ.
+ ÍÁ ÈÕÌÁÓÔÅ ÊÁÉ ÁÕÔÏÍ ÔÏÍ ÁÑÉÈÌÏ!
+
+ 4. Ãéá íá óþóåôå ÌÏÍÏ Ýíá ôìÞìá óå áñ÷åßï, ãñÜøôå :#,# w TEST
+ üðïõ #,# ïé äýï áñéèìïß ðïõ áðïìíçìïíåýóáôå (ðÜíù,êÜôù) êáé TEST ôï
+ üíïìá ôïõ áñ÷åßïõ óáò.
+
+ 5. ÎáíÜ, äåßôå üôé ôï áñ÷åßï åßíáé åêåß ìå ôçí :!dir áëëÜ ÌÇÍ ôï äéáãñÜøåôå.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 5.4: ÁÍÁÊÔÙÍÔÁÓ ÊÁÉ ÅÍÙÍÏÍÔÁÓ ÁÑ×ÅÉÁ
+
+
+ ** Ãéá íá åéóÜãåôå ôá ðåñéå÷üìåíá åíüò áñ÷åßïõ, ãñÜøôå :r ÁÑ×ÅÉÏ **
+
+ 1. ÃñÜøôå :!dir ãéá íá âåâáéùèåßôå üôé ôï TEST õðÜñ÷åé áðü ðñéí.
+
+ 2. ÔïðïèåôÞóôå ôïí äñïìÝá óôï ðÜíù ìÝñïò ôçò óåëßäáò.
+
+ÓÇÌÅÉÙÓÇ: Áöüôïõ åêôåëÝóåôå ôï ÂÞìá 3 èá äåßôå ôï ÌÜèçìá 5.3.
+ ÌåôÜ êéíçèåßôå ÊÁÔÙ îáíÜ ðñïò ôï ìÜèçìá áõôü.
+
+ 3. Ôþñá áíáêôÞóôå ôï áñ÷åßï óáò TEST ÷ñçóéìïðïéþíôáò ôçí åíôïëÞ :r TEST
+ üðïõ TEST åßíáé ôï üíïìá ôïõ áñ÷åßïõ.
+
+ÓÇÌÅÉÙÓÇ: Ôï áñ÷åßï ðïõ áíáêôÜôå ôïðïèåôåßôáé îåêéíþíôáò åêåß ðïõ âñßóêåôáé
+ ï äñïìÝáò.
+
+ 4. Ãéá íá åðáëçèåýóåôå üôé ôï áñ÷åßï áíáêôÞèçêå, ðßóù ôïí äñïìÝá êáé
+ ðáñáôçñÞóôå üôé õðÜñ÷ïõí ôþñá äýï áíôßãñáöá ôïõ ÌáèÞìáôïò 5.3, ôï
+ áñ÷éêü êáé ç Ýêäïóç ôïõ áñ÷åßïõ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 5 ÐÅÑÉËÇØÇ
+
+
+ 1. :!åíôïëÞ åêôåëåß ìßá åîùôåñéêÞ åíôïëÞ.
+
+ ÌåñéêÜ ÷ñÞóéìá ðáñáäåßãìáôá åßíáé (MS-DOS):
+ :!dir - åìöÜíéóç ëßóôáò åíüò êáôáëüãïõ.
+ :!del ÁÑ×ÅÉÏ - äéáãñÜöåé ôï ÁÑ×ÅÉÏ.
+
+ 2. :w ÁÑ×ÅÉÏ ãñÜöåé ôï ôñÝ÷ùí áñ÷åßï ôïõ Vim óôï äßóêï ìå üíïìá ÁÑ×ÅÉÏ.
+
+ 3. :#,#w ÁÑ×ÅÉÏ óþæåé ôéò ãñáììÝò áðü # ìÝ÷ñé # óôï ÁÑ×ÅÉÏ.
+
+ 4. :r ÁÑ×ÅÉÏ áíáêôåß ôï áñ÷åßï äßóêïõ ÁÑ×ÅÉÏ êáé ôï ðáñåìâÜëëåé ìÝóá
+ óôï ôñÝ÷ïí áñ÷åßï ìåôÜ áðü ôç èÝóç ôïõ äñïìÝá.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 6.1: Ç ÅÍÔÏËÇ ÁÍÏÉÃÌÁÔÏÓ
+
+
+ ** ÐáôÞóôå 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 üóï ï äñïìÝáò åßíáé óôç ãñáììÞ
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 6.2: Ç ÅÍÔÏËÇ ÐÑÏÓÈÇÊÇÓ
+
+ ** ÐáôÞóôå a ãéá íá åéóÜãåôå êåßìåíï ÌÅÔ¢ ôïí äñïìÝá. **
+
+ 1. Ìåôáêéíåßóôå ôïí äñïìÝá óôï ôÝëïò ôçò ðñþôçò ãñáììÞò ðáñáêÜôù
+ óçìåéùìÝíç ìå ---> ðáôþíôáò $ óôçí ÊáíïíéêÞ ÊáôÜóôáóç.
+
+ 2. ÐáôÞóôå Ýíá 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.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 6.3: ÁËËÇ ÅÊÄÏÓÇ ÔÇÓ ÁÍÔÉÊÁÔÁÓÔÁÓÇÓ
+
+
+ ** ÐáôÞóôå êåöáëáßï 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> ãéá íá âãåßôå, ðáñáìÝíåé ïðïéïäÞðïôå
+ áíáëëïßùôï êåßìåíï.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÜèçìá 6.4: ÑÕÈÌÉÓÇ ÅÐÉËÏÃÇÓ
+
+
+ ** Ñõèìßóôå ìßá åðéëïãÞ Ýôóé þóôå ç áíáæÞôçóç Þ ç áíôéêáôÜóôáóç íá áãíïåß
+ ôç äéáöïñÜ ðåæþí-êåöáëáßùí **
+
+ 1. ØÜîôå ãéá 'ignore' åéóÜãïíôáò:
+ /ignore
+ Óõíå÷ßóôå áñêåôÝò öïñÝò ðáôþíôáò ôï ðëÞêôñï n.
+
+ 2. ÈÝóôå ôçí åðéëïãÞ 'ic' (Ignore case) ãñÜöïíôáò:
+ :set ic
+
+ 3. ØÜîôå ôþñá îáíÜ ãéá 'ignore' ðáôþíôáò: n
+ Óõíå÷ßóôå ôçí áíáæÞôçóç ìåñéêÝò áêüìá öïñÝò ðáôþíôáò ôï ðëÞêôñï n
+
+ 4. ÈÝóôå ôéò åðéëïãÝò 'hlsearch' êáé 'incsearch':
+ :set hls is
+
+ 5. ÅéóÜãåôå ôþñá îáíÜ ôçí åíôïëÞ áíáæÞôçóçò, êáé äåßôå ôé óõìâáßíåé
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 6 ÐÅÑÉËÇØÇ
+
+
+ 1. Ðáôþíôáò o áíïßãåé ìßá ãñáììÞ ÊÁÔÙ áðü ôïí äñïìÝá êáé ôïðïèåôåß ôïí
+ äñïìÝá óôçí áíïé÷ôÞ ãñáììÞ óå ÊáôÜóôáóç ÊåéìÝíïõ.
+
+ 2. ÐáôÞóôå a ãéá íá åéóÜãåôå êåßìåíï ÌÅÔÁ ôïí ÷áñáêôÞñá óôïí ïðïßï åßíáé
+ ï äñïìÝáò. Ðáôþíôáò êåöáëáßï A áõôüìáôá ðñïóèÝôåé êåßìåíï óôï ôÝëïò
+ ôçò ãñáììÞò.
+
+ 3. Ðáôþíôáò êåöáëáßï R åéóÝñ÷åôáé óôçí ÊáôÜóôáç ÁíôéêáôÜóôáóçò ìÝ÷ñé íá
+ ðáôçèåß ôï <ESC> êáé íá åîÝëèåé.
+
+ 4. ÃñÜöïíôáò ":set xxx" ñõèìßæåé ôçí åðéëïãÞ "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 7: ON-LINE ÅÍÔÏËÅÓ ÂÏÇÈÅÉÁÓ
+
+
+ ** ×ñçóéìïðïéÞóôå ôï on-line óýóôçìá âïÞèåéáò **
+
+ Ï Vim Ý÷åé Ýíá ðåñéåêôéêü on-line óýóôçìá âïÞèåéáò. Ãéá íá îåêéíÞóåé,
+ äïêéìÜóôå êÜðïéï áðü ôá ôñßá:
+ - ðáôÞóôå ôï ðëÞêôñï <HELP> (áí Ý÷åôå êÜðïéï)
+ - ðáôÞóôå ôï ðëÞêôñï <F1> (áí Ý÷åôå êÜðïéï)
+ - ãñÜøôå :help <ENTER>
+
+ ÃñÜøôå :q <ENTER> ãéá íá êëåßóåôå ôï ðáñÜèõñï ôçò âïÞèåéáò.
+
+ Ìðïñåßôå íá âñåßôå âïÞèåéá ðÜíù óå êÜèå áíôéêåßìåíï, äßíïíôáò ìßá ðáñÜìåôñï
+ óôçí åíôïëÞ ":help". ÄïêéìÜóôå áõôÜ (ìçí îå÷íÜôå íá ðáôÜôå <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÌÁÈÇÌÁ 8: ÄÇÌÉÏÕÑÃÇÓÔÅ ÅÍÁ SCRIPT ÅÊÊÉÍÇÓÇÓ
+
+ ** ÅíåñãïðïéÞóôå ÷áñáêôçñéóôéêÜ ôïõ Vim **
+
+ Ï Vim Ý÷åé ðïëëÜ ðåñéóóüôåñá ÷áñáêôçñéóôéêÜ áð' ü,ôé ï Vi, áëëÜ ôá
+ ðåñéóóüôåñá åßíáé áñ÷éêÜ áðåíåñãïðïéçìÝíá. Ãéá íá áñ÷ßóåôå íá ÷ñçóéìïðïéåßôå
+ ðåñéóóüôåñá ÷áñáêôçñéóôéêÜ ðñÝðåé íá öôéÜîåôå Ýíá áñ÷åßï "vimrc".
+
+ 1. Áñ÷ßóôå äéïñèþíïíôáò ôï áñ÷åßï "vimrc", áõôü åîáñôÜôáé áðü ôï óýóôçìÜ óáò:
+ :edit ~/.vimrc ãéá Unix
+ :edit $VIM/_vimrc ãéá MS-Windows
+
+ 2. Ôþñá åéóÜãåôå ôï êåßìåíï ðáñáäåßãìáôïò ãéá áñ÷åßï "vimrc":
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. ÃñÜøôå ôï áñ÷åßï ìå ôçí:
+ :write
+
+ Ôçí åðüìåíç öïñÜ ðïõ èá îåêéíÞóåôå ôïí Vim èá ÷ñçóéìïðïéÞóåé öùôéóìü
+ óýíôáîçò. Ìðïñåßôå íá ðñïóèÝóåôå üëåò ôéò ðñïôéìþìåíåò åðéëïãÝò ó' áõôü
+ ôï áñ÷åßï "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Åäþ ïëïêëçñþíåôáé ôï Vim Tutor. Óêïðüò ôïõ Þôáí íá äþóåé ìßá óýíôïìç
+ ðåñßëçøç ôïõ óõíôÜêôç Vim, ôïõëÜ÷éóôïí ôüóç þóôå íá óáò åðéôñÝøåé íá
+ ÷ñçóéìïðïéÞóåôå ôïí óõíôÜêôç áñêåôÜ åýêïëá. ÁðÝ÷åé ðïëý áðü ìßá
+ ïëïêëçñùìÝíç ðáñïõóßáóç êáèþò ï Vim Ý÷åé ðÜñá ðïëëÝò åíôïëÝò. ÄéáâÜóôå
+ êáôüðéí ôï åã÷åéñßäéï ÷ñÞóçò:
+ ":help user-manual".
+
+ Ãéá ðåñáéôÝñù äéÜâáóìá êáé ìåëÝôç, óõóôÞíåôáé áõôü ôï âéâëßï:
+ Vim - Vi Improved - by Steve Oualline
+ Publisher: New Riders
+ Ôï ðñþôï âéâëßï ðëÞñùò áöéåñùìÝíï óôïí Vim.
+ Éäéáßôåñá ÷ñÞóéìï ãéá áñ÷Üñéïõò.
+ ÕðÜñ÷ïõí ðïëëÜ ðáñáäåßãìáôá êáé åéêüíåò.
+ Äåßôå ôçí http://iccf-holland.org/click5.html
+
+ Áõôü ôï âéâëßï åßíáé ðáëéüôåñï êáé ðåñéóóüôåñï ãéá ôïí Vi ðáñÜ ãéá ôïí Vim,
+ áëëÜ åðßóçò óõíéóôþìåíï:
+ Learning the Vi Editor - by Linda Lamb
+ Publisher: O'Reilly & Associates Inc.
+ Åßíáé Ýíá êáëü âéâëßï ãéá íá ìÜèåôå ó÷åäüí ôá ðÜíôá ðïõ èÝëåôå
+ íá êÜíåôå ìå ôïí Vi.
+ Ç Ýêôç Ýêäïóç ðåñéÝ÷åé áêüìá ðëçñïöïñßåò ãéá ôïí Vim.
+
+ ÁõôÞ ç ðåñéÞãçóç ãñÜöôçêå áðü ôïõò Michael C. Pierce êáé Robert K. Ware,
+ Colorado School of Mines ÷ñçóéìïðïéþíôáò éäÝåò áðü ôïí Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ ÐñïóáñìïãÞ ãéá ôïí Vim áðü ôïí Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.gr.cp737 b/runtime/tutor/tutor.gr.cp737
new file mode 100644
index 000000000..6ad372e3c
--- /dev/null
+++ b/runtime/tutor/tutor.gr.cp737
@@ -0,0 +1,815 @@
+===============================================================================
+= ‰ ˜¢ à © ã ¨ Ÿ ˜ « œ © « ¦ V I M T u t o r - ë¡›¦©ž 1.5 =
+===============================================================================
+
+ Ž Vim œå¤˜  ⤘ª §˜¤å©®¬¨¦ª ©¬¤«á¡«žª §¦¬ ⮜  §¦¢¢âª œ¤«¦¢âª, §á¨˜
+ §¦¢¢âª š ˜ ¤˜ œ¥žšã©¦¬£œ ©œ £å˜ §œ¨ ãšž©ž æ§àª ˜¬«ã. €¬«ã ž §œ¨ ãšž©ž
+ ©®œ› á©«ž¡œ š ˜ ¤˜ §œ¨ š¨á¯œ   ¡˜¤¦§¦ ž« ¡á « ª œ¤«¦¢âª §¦¬ Ÿ˜ ©˜ª
+ ¡á¤¦¬¤ ¤˜ ®¨ž© £¦§¦ œå«œ œç¡¦¢˜ «¦¤ Vim ©˜¤ ⤘¤ šœ¤ ¡ãª ®¨ã©žª ©¬¤«á¡«ž.
+
+ Ž ¡˜«á §¨¦©âšš ©ž ®¨æ¤¦ª §¦¬ ˜§˜ «œå«˜  š ˜ ¤˜ ¦¢¦¡¢ž¨é©œ«œ «ž¤ §œ¨ ãšž©ž
+ œå¤˜  25-30 ¢œ§«á, œ¥˜¨«é¤«˜ª ˜§æ «¦ §æ©¦ ®¨æ¤¦ Ÿ˜ ¥¦›â¯œ«œ š ˜
+ §œ ¨˜£˜« ©£¦çª.
+
+ Ž  œ¤«¦¢âª ©«˜ £˜Ÿã£˜«˜ Ÿ˜ «¨¦§¦§¦ ã©¦¬¤ «¦ ¡œå£œ¤¦. ƒž£ ¦¬¨šã©«œ ⤘
+ ˜¤«åš¨˜­¦ ˜¬«¦ç «¦¬ ˜¨®œå¦¬ š ˜ ¤˜ œ¥˜©¡žŸœå«œ (˜¤ ¥œ¡ ¤ã©˜«œ «¦
+ "Vimtutor" ˜¬«æ œå¤˜  㛞 ⤘ ˜¤«åš¨˜­¦).
+
+ „夘  ©ž£˜¤« ¡æ ¤˜ Ÿ¬£á©«œ æ«  ˜¬«ã ž §œ¨ ãšž©ž œå¤˜  ¦¨š˜¤à£â¤ž â«© 
+ é©«œ ¤˜ › ›á©¡œ  £â©à «žª ®¨ã©žª. €¬«æ ©ž£˜å¤œ  æ«  ®¨œ áœ«˜  ¤˜
+ œ¡«œ¢œå«œ « ª œ¤«¦¢âª š ˜ ¤˜ « ª £áŸœ«œ ©à©«á. €¤ › ˜™áœ«œ £æ¤¦ «¦
+ ¡œå£œ¤¦, Ÿ˜ « ª ¥œ®á©œ«œ!
+
+ ’騘, ™œ™˜ àŸœå«œ æ«  «¦ §¢ã¡«¨¦ Shift-Lock ƒ„Œ œå¤˜  §˜«ž£â¤¦ ¡˜ 
+ §˜«ã©«œ «¦ §¢ã¡«¨¦ j ˜¨¡œ«âª ­¦¨âª š ˜ ¤˜ £œ«˜¡ ¤ã©œ«œ «¦¤ ›¨¦£â˜ â«© 
+ é©«œ «¦ ‹áŸž£˜ 1.1 ¤˜ šœ£å©œ  §¢ã¨àª «ž¤ ¦Ÿæ¤ž.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 1.1: ‹„’€‰ˆŒŽŒ’€‘ ’ŽŒ ƒŽ‹„€
+
+ ** ‚ ˜ ¤˜ ¡ ¤ã©œ«œ «¦¤ ›¨¦£â˜, §˜«ã©«œ «˜ §¢ã¡«¨˜ h,j,k,l æ§àª ›œå®¤œ«˜ . **
+ ^
+ k Hint: ’¦ §¢ã¡«¨¦ h œå¤˜  ˜¨ ©«œ¨á ¡˜  ¡ ¤œå ©«' ˜¨ ©«œ¨á.
+ < h l > ’¦ §¢ã¡«¨¦ l œå¤˜  ›œ¥ á ¡˜  ¡ ¤œå ©«˜ ›œ¥ á.
+ j ’¦ §¢ã¡«¨¦ j £¦ áœ  £œ ™œ¢á¡  §¨¦ª «˜ ¡á«à.
+ v
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ «¨ šç¨à ©«ž¤ ¦Ÿæ¤ž £â®¨  ¤˜ ¤¦ éŸœ«œ ᤜ«˜.
+
+ 2. ‰¨˜«ã©«œ §˜«ž£â¤¦ «¦ ¡á«à §¢ã¡«¨¦ (j) £â®¨  ¤˜ œ§˜¤˜¢ž­Ÿœå.
+---> ’騘 ¥â¨œ«œ §éª ¤˜ £œ«˜¡ ¤žŸœå«œ ©«¦ œ§æ£œ¤¦ £áŸž£˜.
+
+ 3. •¨ž© £¦§¦ é¤«˜ª «¦ ¡á«à §¢ã¡«¨¦, £œ«˜¡ ¤žŸœå«œ ©«¦ ‹áŸž£˜ 1.2.
+
+‘ž£œåà©ž: €¤ ˜£­ ™á¢¢œ«œ š ˜ ¡á«  §¦¬ §˜«ã©˜«œ, §˜«ã©«œ <ESC> š ˜ ¤˜ ™¨œŸœå«œ
+ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž. ‹œ«á §˜«ã©«œ ¥˜¤á «ž¤ œ¤«¦¢ã §¦¬ Ÿâ¢˜«œ.
+
+‘ž£œåà©ž: ’˜ §¢ã¡«¨˜ «¦¬ ›¨¦£â˜ Ÿ˜ §¨â§œ  œ§å©žª ¤˜ ›¦¬¢œç¦¬¤. €¢¢á £œ «˜ hjkl
+ Ÿ˜ £§¦¨œå«œ ¤˜ ¡ ¤žŸœå«œ §¦¢ç š¨žš¦¨æ«œ¨˜, £æ¢ ª «˜ ©¬¤žŸå©œ«œ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 1.2: ‹€ˆŒŽŒ’€‘ ‰€ˆ ‚€ˆŒŽŒ’€‘ ‘’ŽŒ VIM
+
+ !! ‘†‹„ˆ—‘†: ¨ ¤ œ¡«œ¢â©œ«œ ¡á§¦ ¦ ˜§æ «˜ ™ã£˜«˜, › ˜™á©«œ 梦 «¦ £áŸž£˜!!
+
+ 1. ˜«ã©«œ «¦ §¢ã¡«¨¦ <ESC> (š ˜ ¤˜ œå©«œ ©åš¦¬¨˜ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž).
+
+ 2. ¢ž¡«¨¦¢¦šã©«œ: :q! <ENTER>.
+
+---> €¬«æ œ¥â¨®œ«˜  ˜§æ «¦¤ ©¬¤«á¡«ž •—ˆ‘ ¤˜ ©é©œ  槦 œª ˜¢¢˜šâª ⮜«œ ¡á¤œ .
+ €¤ Ÿâ¢œ«œ ¤˜ ©é©œ«œ « ª ˜¢¢˜šâª ¡˜  ¤˜ œ¥â¨Ÿœ«œ §¢ž¡«¨¦¢¦šã©«œ:
+ :wq <ENTER>
+
+ 3. ¤ ›œå«œ «ž¤ §¨¦«¨¦§ã «¦¬ ­¢¦ ¦ç, §¢ž¡«¨¦¢¦šã©«œ «ž¤ œ¤«¦¢ã £œ «ž¤ ¦§¦å˜
+ £§ã¡˜«œ ©œ ˜¬«ã¤ «ž¤ §œ¨ ãšž©ž. ‹§¦¨œå ¤˜ œå¤˜ : vimtutor <ENTER>
+ ‰˜¤¦¤ ¡á Ÿ˜ ®¨ž© £¦§¦ ¦ç©˜«œ: vim tutor <ENTER>
+
+---> 'vim' ©ž£˜å¤œ  œ ©˜šàšã ©«¦¤ ©¬¤«á¡«ž vim, 'tutor' œå¤˜  «¦ ˜¨®œå¦ §¦¬
+ Ÿâ¢¦¬£œ ¤˜ › ¦¨Ÿé©¦¬£œ.
+
+ 4. €¤ ⮜«œ ˜§¦£¤ž£¦¤œç©œ  ˜¬«á «˜ ™ã£˜«˜ ¡˜  ⮜«œ ˜¬«¦§œ§¦åŸž©ž, œ¡«œ¢â©«œ
+ «˜ ™ã£˜«˜ 1 âઠ3 š ˜ ¤˜ ™šœå«œ ¡˜  ¤˜ £§œå«œ ¥˜¤á ©«¦¤ ©¬¤«á¡«ž. ‹œ«á
+ £œ«˜¡ ¤ã©«œ «¦¤ ›¨¦£â˜ ¡á«à ©«¦ ‹áŸž£˜ 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 1.3: ƒˆŽ‡—‘† ‰„ˆ‹„ŒŽ“ - ƒˆ€‚€”†
+
+ **  œå©«œ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž §˜«ã©«œ x š ˜ ¤˜ › ˜š¨á¯œ«œ «¦¤
+ ®˜¨˜¡«ã¨˜ ¡á«à ˜§æ «¦¤ ›¨¦£â˜. **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž¤ §˜¨˜¡á«à š¨˜££ã ©ž£œ à£â¤ž £œ --->.
+
+ 2. ‚ ˜ ¤˜ › ¦¨Ÿé©œ«œ «˜ ¢áŸž, ¡ ¤œå©«œ «¦¤ ›¨¦£â˜ £â®¨  ¤˜ œå¤˜  §á¤à ˜§æ
+ «¦¤ ®˜¨˜¡«ã¨˜ §¦¬ Ÿ˜ › ˜š¨˜­œå.
+
+ 3. ˜«ã©«œ «¦ §¢ã¡«¨¦ x š ˜ ¤˜ › ˜š¨á¯œ«œ «¦¤ ˜¤œ§ Ÿç£ž«¦ ®˜¨˜¡«ã¨˜.
+
+ 4. „§˜¤˜¢á™œ«œ «˜ ™ã£˜«˜ 2 £â®¨  4 £â®¨  ž §¨æ«˜©ž ¤˜ œå¤˜  ©à©«ã.
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. ’騘 §¦¬ ž š¨˜££ã œå¤˜  ©à©«ã, §žš˜å¤œ«œ ©«¦ ‹áŸž£˜ 1.4.
+
+‘†‹„ˆ—‘†: ‰˜Ÿéª › ˜«¨â®œ«œ ˜¬«ã¤ «ž¤ §œ¨ ãšž©ž, §¨¦©§˜Ÿã©«œ ¤˜ £ž¤
+ ˜§¦£¤ž£¦¤œçœ«œ, £˜Ÿ˜å¤œ«œ £œ «ž ®¨ã©ž.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 1.4: ƒˆŽ‡—‘† ‰„ˆ‹„ŒŽ“ - €„‹ŽŠ†
+
+ **  œå©«œ ©œ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž §˜«ã©«œ i š ˜ ¤˜ §˜¨œ£™á¢¢œ«œ ¡œå£œ¤¦. **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ £â®¨  «ž¤ §¨é«ž š¨˜££ã §˜¨˜¡á«à ©ž£œ à£â¤ž £œ --->.
+
+ 2. ‚ ˜ ¤˜ ¡á¤œ«œ «ž¤ §¨é«ž š¨˜££ã å› ˜ £œ «ž¤ ›œç«œ¨ž, £œ«˜¡ ¤œå©«œ «¦¤
+ ›¨¦£â˜ §á¤à ©«¦¤ §¨é«¦ ®˜¨˜¡«ã¨˜ ‹„’€ ˜§æ 槦¬ Ÿ˜ §˜¨œ£™¢žŸœå «¦ ¡œå£œ¤¦.
+
+ 3. ˜«ã©«œ «¦ i ¡˜  §¢ž¡«¨¦¢¦šã©«œ « ª ˜§˜¨˜å«ž«œª §¨¦©Ÿã¡œª.
+
+ 4. ‰˜Ÿéª › ¦¨Ÿé¤œ«œ ¡áŸœ ¢áŸ¦ª §˜«ã©«œ <ESC> š ˜ ¤˜ œ§ ©«¨â¯œ«œ ©«ž¤
+ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž. „§˜¤˜¢á™œ«œ «˜ ™ã£˜«˜ 2 £â®¨  4 š ˜ ¤˜ › ¦¨Ÿé©œ«œ
+ «ž¤ §¨æ«˜©ž.
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. ¤ œå©«œ ᤜ«¦  £œ «ž¤ §˜¨œ£™¦¢ã ¡œ £â¤¦¬ £œ«˜¡ ¤žŸœå«œ ©«ž¤
+ §˜¨˜¡á«à §œ¨å¢ž¯ž.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 1 „ˆŠ†–†
+
+
+ 1. Ž ›¨¦£â˜ª ¡ ¤œå«˜  ®¨ž© £¦§¦ é¤«˜ª œå«œ «˜ §¢ã¡«¨˜ ›¨¦£â˜ ã «˜ hjkl.
+ h (˜¨ ©«â¨˜) j (¡á«à) k (§á¤à) l (›œ¥ á)
+
+ 2. ‚ ˜ ¤˜ £§œå«œ ©«¦¤ Vim (˜§æ «ž¤ §¨¦«¨¦§ã %) š¨á¯«œ: vim €•„ˆŽ <ENTER>
+
+ 3. ‚ ˜ ¤˜ ™šœå«œ š¨á¯«œ: <ESC> :q! <ENTER> š ˜ ˜§æ¨¨ ¯ž «à¤ ˜¢¢˜šé¤.
+ ì š¨á¯«œ: <ESC> :wq <ENTER> š ˜ ˜§¦Ÿã¡œ¬©ž «à¤ ˜¢¢˜šé¤.
+
+ 4. ‚ ˜ ¤˜ › ˜š¨á¯œ«œ ⤘¤ ®˜¨˜¡«ã¨˜ ¡á«à ˜§æ «¦¤ ›¨¦£â˜ ©œ
+ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž §˜«ã©«œ: x
+
+ 5. ‚ ˜ ¤˜ œ ©ášœ«œ ¡œå£œ¤¦ ©«¦¤ ›¨¦£â˜ 橦 œå©«œ ©œ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž š¨á¯«œ:
+ i §¢ž¡«¨¦¢¦šã©«œ «¦ ¡œå£œ¤¦ <ESC>
+
+‘†‹„ˆ—‘†: ˜«é¤«˜ª <ESC> Ÿ˜ «¦§¦Ÿœ«žŸœå«œ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž ã Ÿ˜
+ ˜¡¬¨é©œ«œ £å˜ ˜¤œ§ Ÿç£ž«ž ¡˜  £œ¨ ¡éª ¦¢¦¡¢ž¨à£â¤ž œ¤«¦¢ã.
+
+’騘 ©¬¤œ®å©«œ £œ «¦ ‹áŸž£˜ 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 2.1: „Œ’ŽŠ„‘ ƒˆ€‚€”†‘
+
+ ** ‚¨á¯«œ 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 £â®¨  ž §¨æ«˜©ž ¤˜ œå¤˜  ©à©«ã ¡˜ 
+ §žš˜å¤«œ ©«¦ ‹áŸž£˜ 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 2.2: „ˆ‘‘Ž’„„‘ „Œ’ŽŠ„‘ ƒˆ€‚€”†‘
+
+ ** ¢ž¡«¨¦¢¦šã©«œ d$ š ˜ ¤˜ › ˜š¨á¯œ«œ £â®¨  «¦ «â¢¦ª «žª š¨˜££ãª. **
+
+ 1. ˜«ã©«œ <ESC> š ˜ ¤˜ ™œ™˜ àŸœå«œ æ«  œå©«œ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž.
+
+ 2. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž¤ §˜¨˜¡á«à š¨˜££ã ©ž£œ à£â¤ž £œ --->.
+
+ 3. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«¦ «â¢¦ª «žª ©à©«ãª š¨˜££ãª (‹„’€ «ž¤ §¨é«ž . ).
+
+ 4. ˜«ã©«œ d$ š ˜ ¤˜ › ˜š¨á¯œ«œ £â®¨  «¦ «â¢¦ª «žª š¨˜££ãª.
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+ 5. žš˜å¤œ«œ ©«¦ ‹áŸž£˜ 2.3 š ˜ ¤˜ ¡˜«˜¢á™œ«œ «  ©¬£™˜å¤œ .
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 2.3: „ˆ „Œ’ŽŠ—Œ ‰€ˆ €Œ’ˆ‰„ˆ‹„Œ—Œ
+
+
+† £¦¨­ã «žª œ¤«¦¢ãª › ˜š¨˜­ãª d œå¤˜  ઠœ¥ãª:
+
+ [˜¨ Ÿ£æª] d ˜¤« ¡œå£œ¤¦ ì d [˜¨ Ÿ£æª] ˜¤« ¡œå£œ¤¦
+ ¬:
+ ˜¨ Ÿ£æª - §æ©œª ­¦¨âª Ÿ˜ œ¡«œ¢œ©«œå ž œ¤«¦¢ã (§¨¦˜ ¨œ« ¡æ, œ¥' ¦¨ ©£¦ç=1).
+ d - ž œ¤«¦¢ã «žª › ˜š¨˜­ãª.
+ ˜¤« ¡œå£œ¤¦ - §á¤à ©œ «  Ÿ˜ ¢œ «¦¬¨šã©œ  ž œ¤«¦¢ã (§˜¨˜¡á«à ¢å©«˜).
+
+ ‹å˜ £ ¡¨ã ¢å©«˜ ˜§æ ˜¤« ¡œå£œ¤˜:
+ w - ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª «žª ¢â¥žª, §œ¨ ¢˜£™á¤¦¤«˜ª «¦ › á©«ž£˜.
+ e - ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª «žª ¢â¥žª, •—ˆ‘ «¦ › á©«ž£˜.
+ $ - ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª «žª š¨˜££ãª.
+
+‘†‹„ˆ—‘†: ‚ ˜ «¦¬ª «ç§¦¬ª «žª §œ¨ §â«œ ˜ª, §˜«é¤«˜ª ˜§¢éª «¦ ˜¤« ¡œå£œ¤¦ 橦
+ œå©«œ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž ®à¨åª ¡á§¦ ˜ œ¤«¦¢ã Ÿ˜ £œ«˜¡ ¤ã©œ«œ
+ «¦¤ ›¨¦£â˜ æ§àª ¡˜Ÿ¦¨åœ«˜  ©«ž¤ ¢å©«˜ ˜¤« ¡œ £â¤à¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 2.4: ‹ˆ€ „€ˆ„‘† ‘’†Œ '„Œ’ŽŠ†-€Œ’ˆ‰„ˆ‹„ŒŽ'
+
+ ** ¢ž¡«¨¦¢¦šã©«œ dd š ˜ ¤˜ › ˜š¨á¯œ«œ 梞 «ž š¨˜££ã. **
+
+ „¥˜ «å˜ª «žª ©¬®¤æ«ž«˜ª «žª › ˜š¨˜­ãª ¦¢æ¡¢ž¨žª š¨˜££ãª, ¦  ©®œ› ˜©«âª
+ «¦¬ Vim ˜§¦­á© ©˜¤ æ«  Ÿ˜ 㫘¤ œ¬¡¦¢æ«œ¨¦ ¤˜ š¨á­œ«œ ˜§¢éª ›ç¦ 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.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 2.5: † „Œ’ŽŠ† €Œ€ˆ„‘†‘
+
+ ** ˜«ã©«œ 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. €¬«âª œå¤˜  §¦¢ç ®¨ã© £œª œ¤«¦¢âª. ’騘 §žš˜å¤œ«œ ©«ž¤
+ œ¨å¢ž¯ž «¦¬ ‹˜Ÿã£˜«¦ª 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 2 „ˆŠ†–†
+
+
+ 1. ‚ ˜ ¤˜ › ˜š¨á¯œ«œ ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª ¢â¥žª š¨á¯«œ: dw
+
+ 2. ‚ ˜ ¤˜ › ˜š¨á¯œ«œ ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª š¨˜££ãª š¨á¯«œ: d$
+
+ 3. ‚ ˜ ¤˜ › ˜š¨á¯œ«œ ¦¢æ¡¢ž¨ž «ž š¨˜££ã š¨á¯«œ: dd
+
+ 4. † £¦¨­ã š ˜ £å˜ œ¤«¦¢ã ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž œå¤˜ :
+
+ [˜¨ Ÿ£æª] œ¤«¦¢ã ˜¤« ¡œå£œ¤¦ ì œ¤«¦¢ã [˜¨ Ÿ£æª] ˜¤« ¡œå£œ¤¦
+ 槦¬:
+ ˜¨ Ÿ£æª - §æ©œª ­¦¨âª ¤˜ œ§˜¤˜¢ž­Ÿœå ž œ¤«¦¢ã
+ œ¤«¦¢ã - «  ¤˜ šå¤œ , æ§àª ž d š ˜ › ˜š¨˜­ã
+ ˜¤« ¡œå£œ¤¦ - §á¤à ©œ «  ¤˜ œ¤œ¨šã©œ  ž œ¤«¦¢ã, æ§àª w (¢â¥ž),
+ $ («â¢¦ª «žª š¨˜££ãª), ¡«¢.
+
+ 5. ‚ ˜ ¤˜ ˜¤˜ ¨â©œ«œ §¨¦žš¦ç£œ¤œª œ¤â¨šœ œª, §˜«ã©«œ: u (§œæ u)
+ ‚ ˜ ¤˜ ˜¤˜ ¨â©œ«œ 梜ª « ª ˜¢¢˜šâª ©«ž š¨˜££ã, §˜«ã©«œ: U (¡œ­˜¢˜å¦ U)
+ ‚ ˜ ¤˜ ˜¤˜ ¨â©œ«œ « ª ˜¤˜ ¨â©œ ª, §˜«ã©«œ: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 3.1: † „Œ’ŽŠ† ’ŽŽ‡„’†‘†‘
+
+ ** ˜«ã©«œ p š ˜ ¤˜ «¦§¦Ÿœ«ã©œ«œ «ž¤ «œ¢œ¬«˜å˜ › ˜š¨˜­ã £œ«á «¦¤ ›¨¦£â˜. **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž¤ §¨é«ž š¨˜££ã «žª §˜¨˜¡á«à ¦£á›˜ª.
+
+ 2. ˜«ã©«œ dd š ˜ ¤˜ › ˜š¨á¯œ«œ «ž š¨˜££ã ¡˜  ¤˜ «ž¤ ˜§¦Ÿž¡œç©œ«œ ©œ
+ §¨¦©à¨ ¤ã £¤ã£ž «¦¬ Vim.
+
+ 3. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž š¨˜££ã €Œ— ˜§æ œ¡œå §¦¬ Ÿ˜ §¨â§œ  ¤˜ §áœ 
+ ž › ˜š¨˜££â¤ž š¨˜££ã.
+
+ 4.  œå©«œ ©œ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž, §˜«ã©«œ p š ˜ ¤˜ ™á¢œ«œ «ž š¨˜££ã.
+
+ 5. „§˜¤˜¢á™œ«œ «˜ ™ã£˜«˜ 2 âઠ4 š ˜ ¤˜ ™á¢œ«œ 梜ª « ª š¨˜££âª ©«ž
+ ©à©«ã ©œ ¨á.
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 3.2: † „Œ’ŽŠ† €Œ’ˆ‰€’€‘’€‘†‘
+
+
+ ** ˜«ã©«œ 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. ’騘 §žš˜å¤œ«œ ©«¦ ‹áŸž£˜ 3.2.
+
+‘†‹„ˆ—‘†: Œ˜ Ÿ¬£á©«œ æ«  §¨â§œ  ¤˜ £˜Ÿ˜å¤œ«œ £œ «ž ®¨ã©ž, ¡˜  æ®  £œ
+ «ž¤ ˜§¦£¤ž£æ¤œ¬©ž.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 3.3: † „Œ’ŽŠ† €ŠŠ€‚†‘
+
+ ** ‚ ˜ ¤˜ ˜¢¢á¥œ«œ «£ã£˜ ã 梞 «ž ¢â¥ž, §˜«ã©«œ cw . **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž¤ §¨é«ž š¨˜££ã §˜¨˜¡á«à ©ž£œ à£â¤ž £œ --->.
+
+ 2. ’¦§¦Ÿœ«ã©«œ «¦¤ ›¨¦£â˜ §á¤à ©«¦ u «žª ¢â¥žª lubw.
+
+ 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 æ®  £æ¤¦ ˜¤« ¡˜Ÿ ©«áœ  «ž ¢â¥ž, ˜¢¢á ©˜ª œ ©ášœ 
+œ§å©žª ©œ §˜¨œ£™¦¢ã.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 3.4: „ˆ‘‘Ž’„„‘ €ŠŠ€‚„‘ ‹„ c
+
+
+ ** † œ¤«¦¢ã ˜¢¢˜šãª ®¨ž© £¦§¦ œå«˜  £œ «˜ å› ˜ ˜¤« ¡œå£œ¤˜ «žª › ˜š¨˜­ãª. **
+
+
+ 1. † œ¤«¦¢ã ˜¢¢˜šãª ›¦¬¢œçœ  £œ «¦¤ å› ¦ «¨æ§¦ æ§àª ž › ˜š¨˜­ã. † £¦¨­ã œå¤˜ :
+
+ [˜¨ Ÿ£æª] c ˜¤« ¡œå£œ¤¦ ì c [˜¨ Ÿ£æª] ˜¤« ¡œå£œ¤¦
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 3 „ˆŠ†–†
+
+
+ 1. ‚ ˜ ¤˜ «¦§¦Ÿœ«ã©œ«œ ¡œå£œ¤¦ §¦¬ £æ¢ ª ⮜  › ˜š¨˜­œå, §˜«ã©«œ p .
+ €¬«æ «¦§¦Ÿœ«œå «¦ › ˜š¨˜££â¤¦ ¡œå£œ¤¦ ‹„’€ «¦¤ ›¨¦£â˜ (˜¤ › ˜š¨á­«ž¡œ
+ š¨˜££ã Ÿ˜ §áœ  £œ«á ©«ž š¨˜££ã ¡á«à ˜§æ «¦¤ ›¨¦£â˜.
+
+ 2. ‚ ˜ ¤˜ ˜¤« ¡˜«˜©«ã©œ«œ «¦¤ ®˜¨˜¡«ã¨˜ ¡á«à ˜§æ «¦¤ ›¨¦£â˜, §˜«ã©«œ r
+ ¡˜  £œ«á «¦¤ ®˜¨˜¡«ã¨˜ §¦¬ Ÿ˜ ˜¤« ¡˜«˜©«ã©œ  «¦¤ ˜¨® ¡æ.
+
+ 3. † œ¤«¦¢ã ˜¢¢˜šãª ©˜ª œ§ «¨â§œ  ¤˜ ˜¢¢á¥œ«œ «¦ ¡˜Ÿ¦¨ ©£â¤¦ ˜¤« ¡œå£œ¤¦
+ ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª «¦¬ ˜¤« ¡œå£œ¤¦. .®. š¨á¯«œ cw š ˜ ¤˜
+ ˜¢¢á¥œ«œ ˜§æ «¦¤ ›¨¦£â˜ £â®¨  «¦ «â¢¦ª «žª ¢â¥žª, c$ š ˜ ¤˜ ˜¢¢á¥œ«œ
+ £â®¨  «¦ «â¢¦ª š¨˜££ãª.
+
+ 4. † £¦¨­ã š ˜ «ž¤ ˜¢¢˜šã œå¤˜ :
+
+ [˜¨ Ÿ£æª] c ˜¤« ¡œå£œ¤¦ ì c [˜¨ Ÿ£æª] ˜¤« ¡œå£œ¤¦
+
+’騘 ©¬¤œ®å©«œ £œ «¦ œ§æ£œ¤¦ £áŸž£˜.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 4.1: ‡„‘† ‰€ˆ ‰€’€‘’€‘† €•„ˆŽ“
+
+
+ ** ˜«ã©«œ CTRL-g š ˜ ¤˜ œ£­˜¤ ©«œå ž Ÿâ©ž ©˜ª ©«¦ ˜¨®œå¦ ¡˜  ž ¡˜«á©«˜©ã «¦¬.
+ ˜«ã©«œ SHIFT-G š ˜ ¤˜ §á«œ ©œ £å˜ š¨˜££ã ©«¦ ˜¨®œå¦. **
+
+ ‘ž£œåà©ž: ƒ ˜™á©«œ ¦¢æ¡¢ž¨¦ «¦ £áŸž£˜ §¨ ¤ œ¡«œ¢â©œ«œ ¡á§¦ ¦ ˜§æ «˜ ™ã£˜«˜!!
+
+ 1. ‰¨˜«ã©«œ §˜«ž£â¤¦ «¦ §¢ã¡«¨¦ Ctrl ¡˜  §˜«ã©«œ g . ‹å˜ š¨˜££ã ¡˜«á©«˜©žª
+ Ÿ˜ œ£­˜¤ ©«œå ©«¦ ¡á«à £â¨¦ª «žª ©œ¢å›˜ª £œ «¦ 椦£˜ ˜¨®œå¦¬ ¡˜  «ž
+ š¨˜££ã §¦¬ œå©«œ. ‡¬£žŸœå«œ «¦¤ ˜¨ Ÿ£æ š¨˜££ãª š ˜ «¦ 㣘 3.
+
+ 2. ˜«ã©«œ shift-G š ˜ ¤˜ £œ«˜¡ ¤žŸœå«œ ©«¦ «â¢¦ª «¦¬ ˜¨®œå¦¬.
+
+ 3. ˜«ã©«œ «¦¤ ˜¨ Ÿ£æ «žª š¨˜££ãª §¦¬ 㩘©«˜¤ ¡˜  £œ«á shift-G. €¬«æ Ÿ˜
+ ©˜ª œ§ ©«¨â¯œ  ©«ž š¨˜££ã §¦¬ 㩘©«˜¤ §¨ ¤ §˜«ã©œ«œ š ˜ §¨é«ž ­¦¨á Ctrl-g.
+ (¤ §¢ž¡«¨¦¢¦šœå«œ «¦¬ª ˜¨ Ÿ£¦çª, ƒ„Œ Ÿ˜ œ£­˜¤å¦¤«˜  ©«ž¤ ¦Ÿæ¤ž).
+
+ 4. €¤ ¤¦ éŸœ«œ ©åš¦¬¨¦ª š ˜ ˜¬«æ, œ¡«œ¢â©«œ «˜ ™ã£˜«˜ 1 âઠ3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 4.2: † „Œ’ŽŠ† €Œ€…†’†‘†‘
+
+
+ ** ˜«ã©«œ / ˜¡¦¢¦¬Ÿ¦ç£œ¤¦ ˜§æ «ž ­¨á©ž §¦¬ ¯á®¤œ«œ. **
+
+ 1. ‘œ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž §˜«ã©«œ «¦¤ ®˜¨˜¡«ã¨˜ / . ˜¨˜«ž¨ã©«œ æ«  ˜¬«æª ¡˜ 
+ ¦ ›¨¦£â˜ª œ£­˜¤å¦¤«˜  ©«¦ ¡á«à £â¨¦ª «žª ¦Ÿæ¤žª æ§àª £œ «ž¤ œ¤«¦¢ã : .
+
+ 2. ’騘 š¨á¯«œ 'errroor' <ENTER>. €¬«ã œå¤˜  ž ¢â¥ž §¦¬ Ÿâ¢œ«œ ¤˜ ¯á¥œ«œ.
+
+ 3. ‚ ˜ ¤˜ ¯á¥œ«œ ¥˜¤á š ˜ «ž¤ å› ˜ ­¨á©ž, §˜«ã©«œ ˜§¢éª n .
+ ‚ ˜ ¤˜ ¯á¥œ«œ «ž¤ å› ˜ ­¨á©ž ©«ž¤ ˜¤«åŸœ«ž ¡˜«œçŸ¬¤©ž, §˜«ã©«œ Shift-N .
+
+ 4. €¤ Ÿâ¢œ«œ ¤˜ ¯á¥œ«œ š ˜ £å˜ ­¨á©ž §¨¦ª «˜ §å©à, ®¨ž© £¦§¦ ã©«œ «ž¤ œ¤«¦¢ã ? ˜¤«å «žª / .
+
+---> ¤ ž ˜¤˜ã«ž©ž ­«á©œ  ©«¦ «â¢¦ª «¦¬ ˜¨®œå¦¬ Ÿ˜ ©¬¤œ®å©œ  ˜§æ «ž¤ ˜¨®ã.
+
+ "errroor" is not the way to spell error; errroor is an error.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 4.3: „“„‘† ’€ˆˆ€‘’—Œ €„Œ‡„‘„—Œ
+
+
+ ** ˜«ã©«œ % š ˜ ¤˜ ™¨œå«œ «ž¤ ˜¤«å©«¦ ®ž ), ], ã } . **
+
+ 1. ’¦§¦Ÿœ«ã©«œ «¦¤ ›¨¦£â˜ ©œ ¡á§¦ ˜ (, [, ã { ©«ž¤ §˜¨˜¡á«à š¨˜££ã
+ ©ž£œ à£â¤ž £œ --->.
+
+ 2. ’騘 §˜«ã©«œ «¦¤ ®˜¨˜¡«ã¨˜ % .
+
+ 3. Ž ›¨¦£â˜ª Ÿ˜ §¨â§œ  ¤˜ œå¤˜  ©«ž¤ ˜¤«å©«¦ ®ž §˜¨â¤Ÿœ©ž ã ˜š¡ç¢ž.
+
+ 4. ˜«ã©«œ % š ˜ ¤˜ £œ«˜¡ ¤ã©œ«œ «¦¤ ›¨¦£â˜ §å©à ©«ž¤ §¨é«ž ˜š¡ç¢ž
+ («¦¬ œ¬š˜¨ ¦ç).
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+‘†‹„ˆ—‘†: €¬«æ œå¤˜  §¦¢ç ®¨ã© £¦ ©«ž¤ ˜§¦©­˜¢£á«à©ž œ¤æª §¨¦š¨á££˜«¦ª
+ £œ £ž «˜ ¨ ˜©«âª §˜¨œ¤Ÿâ©œ ª!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 4.4: „Œ€‘ ’ŽŽ‘ ‚ˆ€ €ŠŠ€‚† Š€‡—Œ
+
+
+ ** ‚¨á¯«œ :s/old/new/g š ˜ ¤˜ ˜¢¢á¥œ«œ «¦ 'new' £œ «¦ 'old'. **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«ž¤ §˜¨˜¡á«à š¨˜££ã ©ž£œ à£â¤ž £œ --->.
+
+ 2. ‚¨á¯«œ :s/thee/the <ENTER> . ‘ž£œ é©«œ æ«  ˜¬«ã ž œ¤«¦¢ã ˜¢¢áœ  £æ¤¦
+ «ž¤ §¨é«ž œ£­á¤ ©ž ©«ž š¨˜££ã.
+
+ 3. ’騘 š¨á¯«œ :s/thee/the/g œ¤¤¦é¤«˜ª šœ¤ ¡ã ˜¤« ¡˜«á©«˜©ž ©«ž
+ š¨˜££ã. €¬«æ ˜¢¢áœ  梜ª « ª œ£­˜¤å©œ ª œ§å «žª š¨˜££ãª.
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. ‚ ˜ ¤˜ ˜¢¢á¥œ«œ ¡áŸœ œ£­á¤ ©ž £å˜ª ©¬£™¦¢¦©œ ¨áª £œ«˜¥ç ›ç¦ š¨˜££é¤,
+ š¨á¯«œ :#,#s/old/new/g 槦¬ #,# ¦  ˜¨ Ÿ£¦å «à¤ ›ç¦ š¨˜££é¤.
+ ‚¨á¯«œ :%s/old/new/g š ˜ ¤˜ ˜¢¢á¥œ«œ ¡áŸœ œ£­á¤ ©ž ©œ 梦 «¦ ˜¨®œå¦.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 4 „ˆŠ†–†
+
+
+ 1. ’¦ Ctrl-g œ£­˜¤åœ  «ž Ÿâ©ž ©˜ª ©«¦ ˜¨®œå¦ ¡˜  «ž¤ ¡˜«á©«˜©ã «¦¬.
+ ’¦ Shift-G §žš˜å¤œ  ©«¦ «â¢¦ª «¦¬ ˜¨®œå¦¬. 뤘ª ˜¨ Ÿ£æª š¨˜££ãª
+ ˜¡¦¢¦¬Ÿ¦ç£œ¤¦ª ˜§æ Shift-G §žš˜å¤œ  ©œ œ¡œå¤ž «ž š¨˜££ã.
+
+ 2. ‚¨á­¦¤«˜ª / ˜¡¦¢¦¬Ÿ¦ç£œ¤¦ ˜§æ £å˜ ­¨á©ž ¯á®¤œ  §¨¦ª «˜ ‹Ž‘’€ š ˜
+ «ž ­¨á©ž. ‚¨á­¦¤«˜ª ? ˜¡¦¢¦¬Ÿ¦ç£œ¤¦ ˜§æ £å˜ ­¨á©ž ¯á®¤œ  §¨¦ª «˜ ˆ‘—
+ š ˜ «ž ­¨á©ž. ‹œ«á ˜§æ £å˜ ˜¤˜ã«ž©ž §˜«ã©«œ n š ˜ ¤˜ ™¨œå«œ «ž¤
+ œ§æ£œ¤ž œ£­á¤ ©ž §¨¦ª «ž¤ å› ˜ ¡˜«œçŸ¬¤©ž ã Shift-N š ˜ ¤˜ ¯á¥œ«œ
+ §¨¦ª «ž¤ ˜¤«åŸœ«ž ¡˜«œçŸ¬¤©ž.
+
+ 3. ˜«é¤«˜ª % 橦 ¦ ›¨¦£â˜ª œå¤˜  §á¤à ©œ £å˜ (,),[,],{, ã } œ¤«¦§åœ 
+ «¦ ˜¤«å©«¦ ®¦ «˜å¨  «¦¬ œ¬š˜¨ ¦ç.
+
+ 4. ‚ ˜ ˜¤« ¡˜«á©«˜©ž £œ new «¦¬ §¨é«¦¬ old ©«ž š¨˜££ã š¨á¯«œ :s/old/new
+ ‚ ˜ ˜¤« ¡˜«á©«˜©ž £œ new æ¢à¤ «à¤ 'old' ©«ž š¨˜££ã š¨á¯«œ :s/old/new/g
+ ‚ ˜ ˜¤« ¡˜«á©«˜©ž ­¨á©œà¤ £œ«˜¥ç ›ç¦ # š¨˜££é¤ š¨á¯«œ :#,#s/old/new/g
+ ‚ ˜ ˜¤« ¡˜«á©«˜©ž æ¢à¤ «à¤ œ£­˜¤å©œà¤ ©«¦ ˜¨®œå¦ š¨á¯«œ :%s/old/new/g
+ ‚ ˜ œ¨é«ž©ž œ§ ™œ™˜åà©žª ¡áŸœ ­¦¨á §¨¦©Ÿâ©«œ ⤘ 'c' "%s/old/new/gc
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 5.1: —‘ „‰’„Š— ‹ˆ€ „—’„ˆ‰† „Œ’ŽŠ†
+
+
+** ‚¨á¯«œ :! ˜¡¦¢¦¬Ÿ¦ç£œ¤¦ ˜§æ £å˜ œ¥à«œ¨ ¡ã œ¤«¦¢ã š ˜ ¤˜ «ž¤ œ¡«œ¢â©œ«œ. **
+
+ 1. ˜«ã©«œ «ž¤ ¦ ¡œå˜ œ¤«¦¢ã : š ˜ ¤˜ Ÿâ©œ«œ «¦¤ ›¨¦£â˜ ©«¦ ¡á«à £â¨¦ª
+ «žª ¦Ÿæ¤žª. €¬«æ ©˜ª œ§ «¨â§œ  ¤˜ ›é©œ«œ £å˜ œ¤«¦¢ã.
+
+ 2. ’騘 §˜«ã©«œ «¦ ! (Ÿ˜¬£˜©« ¡æ). €¬«æ ©˜ª œ§ «¨â§œ  ¤˜ œ¡«œ¢â©œ«œ
+ ¦§¦ ˜›ã§¦«œ œ¥à«œ¨ ¡ã œ¤«¦¢ã «¦¬ ­¢¦ ¦ç.
+
+ 3. ‘˜¤ §˜¨á›œ š£˜ š¨á¯«œ ls £œ«á ˜§æ «¦ ! ¡˜  §˜«ã©«œ <ENTER>. €¬«æ Ÿ˜
+ ©˜ª œ£­˜¤å©œ  £å˜ ¢å©«˜ «¦¬ ¡˜«˜¢æš¦¬ ©˜ª, ˜¡¨ ™éª ©˜¤ ¤˜ 㩘©«˜¤ ©«ž¤
+ §¨¦«¨¦§ã «¦¬ ­¢¦ ¦ç. ì ®¨ž© £¦§¦ ã©«œ :!dir ˜¤ «¦ ls ›œ¤ ›¦¬¢œçœ .
+
+---> ‘ž£œåà©ž: „夘  ›¬¤˜«æ¤ ¤˜ œ¡«œ¢â©œ«œ ¦§¦ ˜›ã§¦«œ œ¥à«œ¨ ¡ã œ¤«¦¢ã
+ £œ ˜¬«æ¤ «¦¤ «¨æ§¦.
+
+---> ‘ž£œåà©ž: ª ¦  œ¤«¦¢âª : §¨â§œ  ¤˜ «œ¨£˜«å¦¤«˜  §˜«é¤«˜ª «¦ <ENTER>.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 5.2: „ˆ‘‘Ž’„€ „ˆ „‚‚€”†‘ €•„ˆ—Œ
+
+
+ ** ‚ ˜ ¤˜ ©é©œ«œ « ª ˜¢¢ášœª §¦¬ ¡á¤˜«œ ©«¦ ˜¨®œå¦, š¨á¯«œ :w €•„ˆŽ. **
+
+ 1. ‚¨á¯«œ :!dir ã :!ls š ˜ ¤˜ §á¨œ«œ £å˜ ¢å©«˜ «¦¬ ¡˜«˜¢æš¦¬ ©˜ª.
+ 웞 ¥â¨œ«œ æ«  §¨â§œ  ¤˜ §˜«ã©œ«œ <ENTER> £œ«á ˜§æ ˜¬«æ.
+
+ 2. ƒ ˜¢â¥«œ ⤘ 椦£˜ ˜¨®œå¦¬ §¦¬ ›œ¤ ¬§á¨®œ  ˜¡æ£˜, æ§àª «¦ TEST.
+
+ 3. ’騘 š¨á¯«œ: :w TEST (槦¬ TEST œå¤˜  «¦ 椦£˜ ˜¨®œå¦¬ §¦¬ › ˜¢â¥˜«œ).
+
+ 4. €¬«æ ©éœ  梦 «¦ ˜¨®œå¦ (vim Tutor) £œ «¦ 椦£˜ TEST. ‚ ˜ ¤˜ «¦
+ œ§˜¢žŸœç©œ«œ, š¨á¯«œ ¥˜¤á :!dir š ˜ ¤˜ ›œå«œ «¦¤ ¡˜«á¢¦šæ ©˜ª.
+
+---> ‘ž£œ é©«œ æ«  ˜¤ ™š˜å¤˜«œ ˜§æ «¦¤ Vim ¡˜  £§˜å¤˜«œ ¥˜¤á £œ «¦ 椦£˜
+ ˜¨®œå¦¬ TEST, «¦ ˜¨®œå¦ Ÿ˜ 㫘¤ ˜¡¨ ™âª ˜¤«åš¨˜­¦ «¦¬ tutor 櫘¤ «¦ ©é©˜«œ.
+
+ 5. ’騘 › ˜š¨á¯«œ «¦ ˜¨®œå¦ š¨á­¦¤«˜ª (MS-DOS): :!del TEST
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 5.3: „ˆŠ„‰’ˆ‰† „Œ’ŽŠ† „‚‚€”†‘
+
+
+ ** ‚ ˜ ¤˜ ©é©œ«œ «£ã£˜ «¦¬ ˜¨®œå¦¬, š¨á¯«œ :#,# w €•„ˆŽ **
+
+ 1. ꢢž £ ˜ ­¦¨á, š¨á¯«œ :!dir ã :!ls š ˜ ¤˜ §á¨œ«œ £å˜ ¢å©«˜ ˜§æ «¦¤
+ ¡˜«á¢¦šæ ©˜ª ¡˜  › ˜¢â¥«œ ⤘ ¡˜«á¢¢ž¢¦ 椦£˜ ˜¨®œå¦¬ æ§àª «¦ TEST.
+
+ 2. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«¦ §á¤à £â¨¦ª ˜¬«ãª «žª ©œ¢å›˜ª ¡˜  §˜«ã©«œ
+ Ctrl-g š ˜ ¤˜ ™¨œå«œ «¦¤ ˜¨ Ÿ£æ ˜¬«ãª «žª š¨˜££ãª.
+ Œ€ ‡“‹€‘’„ €“’ŽŒ ’ŽŒ €ˆ‡‹Ž!
+
+ 3. ’騘 §žš˜å¤œ«œ ©«¦ ¡á«à £â¨¦ª «žª ©œ¢å›˜ª ¡˜  §˜«ã©«œ Ctrl-g ¥˜¤á.
+ Œ€ ‡“‹€‘’„ ‰€ˆ €“’ŽŒ ’ŽŒ €ˆ‡‹Ž!
+
+ 4. ‚ ˜ ¤˜ ©é©œ«œ ‹ŽŒŽ ⤘ «£ã£˜ ©œ ˜¨®œå¦, š¨á¯«œ :#,# w TEST
+ 槦¬ #,# ¦  ›ç¦ ˜¨ Ÿ£¦å §¦¬ ˜§¦£¤ž£¦¤œç©˜«œ (§á¤à,¡á«à) ¡˜  TEST «¦
+ 椦£˜ «¦¬ ˜¨®œå¦¬ ©˜ª.
+
+ 5. ˜¤á, ›œå«œ æ«  «¦ ˜¨®œå¦ œå¤˜  œ¡œå £œ «ž¤ :!dir ˜¢¢á ‹†Œ «¦ › ˜š¨á¯œ«œ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 5.4: €Œ€‰’—Œ’€‘ ‰€ˆ „Œ—ŒŽŒ’€‘ €•„ˆ€
+
+
+ ** ‚ ˜ ¤˜ œ ©ášœ«œ «˜ §œ¨ œ®æ£œ¤˜ œ¤æª ˜¨®œå¦¬, š¨á¯«œ :r €•„ˆŽ **
+
+ 1. ‚¨á¯«œ :!dir š ˜ ¤˜ ™œ™˜ àŸœå«œ æ«  «¦ TEST ¬§á¨®œ  ˜§æ §¨ ¤.
+
+ 2. ’¦§¦Ÿœ«ã©«œ «¦¤ ›¨¦£â˜ ©«¦ §á¤à £â¨¦ª «žª ©œ¢å›˜ª.
+
+‘†‹„ˆ—‘†: €­æ«¦¬ œ¡«œ¢â©œ«œ «¦ 㣘 3 Ÿ˜ ›œå«œ «¦ ‹áŸž£˜ 5.3.
+ ‹œ«á ¡ ¤žŸœå«œ ‰€’— ¥˜¤á §¨¦ª «¦ £áŸž£˜ ˜¬«æ.
+
+ 3. ’騘 ˜¤˜¡«ã©«œ «¦ ˜¨®œå¦ ©˜ª TEST ®¨ž© £¦§¦ é¤«˜ª «ž¤ œ¤«¦¢ã :r TEST
+ 槦¬ TEST œå¤˜  «¦ 椦£˜ «¦¬ ˜¨®œå¦¬.
+
+‘†‹„ˆ—‘†: ’¦ ˜¨®œå¦ §¦¬ ˜¤˜¡«á«œ «¦§¦Ÿœ«œå«˜  ¥œ¡ ¤é¤«˜ª œ¡œå §¦¬ ™¨å©¡œ«˜ 
+ ¦ ›¨¦£â˜ª.
+
+ 4. ‚ ˜ ¤˜ œ§˜¢žŸœç©œ«œ æ«  «¦ ˜¨®œå¦ ˜¤˜¡«ãŸž¡œ, §å©à «¦¤ ›¨¦£â˜ ¡˜ 
+ §˜¨˜«ž¨ã©«œ æ«  ¬§á¨®¦¬¤ «é¨˜ ›ç¦ ˜¤«åš¨˜­˜ «¦¬ ‹˜Ÿã£˜«¦ª 5.3, «¦
+ ˜¨® ¡æ ¡˜  ž â¡›¦©ž «¦¬ ˜¨®œå¦¬.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 5 „ˆŠ†–†
+
+
+ 1. :!œ¤«¦¢ã œ¡«œ¢œå £å˜ œ¥à«œ¨ ¡ã œ¤«¦¢ã.
+
+ ‹œ¨ ¡á ®¨ã© £˜ §˜¨˜›œåš£˜«˜ œå¤˜  (MS-DOS):
+ :!dir - œ£­á¤ ©ž ¢å©«˜ª œ¤æª ¡˜«˜¢æš¦¬.
+ :!del €•„ˆŽ - › ˜š¨á­œ  «¦ €•„ˆŽ.
+
+ 2. :w €•„ˆŽ š¨á­œ  «¦ «¨â®à¤ ˜¨®œå¦ «¦¬ Vim ©«¦ ›å©¡¦ £œ 椦£˜ €•„ˆŽ.
+
+ 3. :#,#w €•„ˆŽ ©éœ  « ª š¨˜££âª ˜§æ # £â®¨  # ©«¦ €•„ˆŽ.
+
+ 4. :r €•„ˆŽ ˜¤˜¡«œå «¦ ˜¨®œå¦ ›å©¡¦¬ €•„ˆŽ ¡˜  «¦ §˜¨œ£™á¢¢œ  £â©˜
+ ©«¦ «¨â®¦¤ ˜¨®œå¦ £œ«á ˜§æ «ž Ÿâ©ž «¦¬ ›¨¦£â˜.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 6.1: † „Œ’ŽŠ† €ŒŽˆ‚‹€’Ž‘
+
+
+ ** ˜«ã©«œ 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 橦 ¦ ›¨¦£â˜ª œå¤˜  ©«ž š¨˜££ã
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 6.2: † „Œ’ŽŠ† Ž‘‡†‰†‘
+
+ ** ˜«ã©«œ a š ˜ ¤˜ œ ©ášœ«œ ¡œå£œ¤¦ ‹„’ê «¦¤ ›¨¦£â˜. **
+
+ 1. ‹œ«˜¡ ¤œå©«œ «¦¤ ›¨¦£â˜ ©«¦ «â¢¦ª «žª §¨é«žª š¨˜££ãª §˜¨˜¡á«à
+ ©ž£œ à£â¤ž £œ ---> §˜«é¤«˜ª $ ©«ž¤ ‰˜¤¦¤ ¡ã ‰˜«á©«˜©ž.
+
+ 2. ˜«ã©«œ ⤘ 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.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 6.3: €ŠŠ† „‰ƒŽ‘† ’†‘ €Œ’ˆ‰€’€‘’€‘†‘
+
+
+ ** ˜«ã©«œ ¡œ­˜¢˜å¦ 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> š ˜ ¤˜ ™šœå«œ, §˜¨˜£â¤œ  ¦§¦ ¦›ã§¦«œ
+ ˜¤˜¢¢¦å૦ ¡œå£œ¤¦.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹áŸž£˜ 6.4: “‡‹ˆ‘† „ˆŠŽ‚†‘
+
+
+ ** ¬Ÿ£å©«œ £å˜ œ§ ¢¦šã â«©  é©«œ ž ˜¤˜ã«ž©ž ã ž ˜¤« ¡˜«á©«˜©ž ¤˜ ˜š¤¦œå
+ «ž › ˜­¦¨á §œé¤-¡œ­˜¢˜åठ**
+
+ 1. –ᥫœ š ˜ 'ignore' œ ©áš¦¤«˜ª:
+ /ignore
+ ‘¬¤œ®å©«œ ˜¨¡œ«âª ­¦¨âª §˜«é¤«˜ª «¦ §¢ã¡«¨¦ n.
+
+ 2. ‡â©«œ «ž¤ œ§ ¢¦šã 'ic' (Ignore case) š¨á­¦¤«˜ª:
+ :set ic
+
+ 3. –ᥫœ «é¨˜ ¥˜¤á š ˜ 'ignore' §˜«é¤«˜ª: n
+ ‘¬¤œ®å©«œ «ž¤ ˜¤˜ã«ž©ž £œ¨ ¡âª ˜¡æ£˜ ­¦¨âª §˜«é¤«˜ª «¦ §¢ã¡«¨¦ n
+
+ 4. ‡â©«œ « ª œ§ ¢¦šâª 'hlsearch' ¡˜  'incsearch':
+ :set hls is
+
+ 5. „ ©ášœ«œ «é¨˜ ¥˜¤á «ž¤ œ¤«¦¢ã ˜¤˜ã«ž©žª, ¡˜  ›œå«œ «  ©¬£™˜å¤œ 
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 6 „ˆŠ†–†
+
+
+ 1. ˜«é¤«˜ª o ˜¤¦åšœ  £å˜ š¨˜££ã ‰€’— ˜§æ «¦¤ ›¨¦£â˜ ¡˜  «¦§¦Ÿœ«œå «¦¤
+ ›¨¦£â˜ ©«ž¤ ˜¤¦ ®«ã š¨˜££ã ©œ ‰˜«á©«˜©ž ‰œ £â¤¦¬.
+
+ 2. ˜«ã©«œ a š ˜ ¤˜ œ ©ášœ«œ ¡œå£œ¤¦ ‹„’€ «¦¤ ®˜¨˜¡«ã¨˜ ©«¦¤ ¦§¦å¦ œå¤˜ 
+ ¦ ›¨¦£â˜ª. ˜«é¤«˜ª ¡œ­˜¢˜å¦ A ˜¬«æ£˜«˜ §¨¦©Ÿâ«œ  ¡œå£œ¤¦ ©«¦ «â¢¦ª
+ «žª š¨˜££ãª.
+
+ 3. ˜«é¤«˜ª ¡œ­˜¢˜å¦ R œ ©â¨®œ«˜  ©«ž¤ ‰˜«á©«˜ž €¤« ¡˜«á©«˜©žª £â®¨  ¤˜
+ §˜«žŸœå «¦ <ESC> ¡˜  ¤˜ œ¥â¢Ÿœ .
+
+ 4. ‚¨á­¦¤«˜ª ":set xxx" ¨¬Ÿ£åœ  «ž¤ œ§ ¢¦šã "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 7: ON-LINE „Œ’ŽŠ„‘ Ž†‡„ˆ€‘
+
+
+ ** •¨ž© £¦§¦ ã©«œ «¦ on-line ©ç©«ž£˜ ™¦ãŸœ ˜ª **
+
+ Ž Vim ⮜  ⤘ §œ¨ œ¡« ¡æ on-line ©ç©«ž£˜ ™¦ãŸœ ˜ª. ‚ ˜ ¤˜ ¥œ¡ ¤ã©œ ,
+ ›¦¡ £á©«œ ¡á§¦ ¦ ˜§æ «˜ «¨å˜:
+ - §˜«ã©«œ «¦ §¢ã¡«¨¦ <HELP> (˜¤ ⮜«œ ¡á§¦ ¦)
+ - §˜«ã©«œ «¦ §¢ã¡«¨¦ <F1> (˜¤ ⮜«œ ¡á§¦ ¦)
+ - š¨á¯«œ :help <ENTER>
+
+ ‚¨á¯«œ :q <ENTER> š ˜ ¤˜ ¡¢œå©œ«œ «¦ §˜¨áŸ¬¨¦ «žª ™¦ãŸœ ˜ª.
+
+ ‹§¦¨œå«œ ¤˜ ™¨œå«œ ™¦ãŸœ ˜ §á¤à ©œ ¡áŸœ ˜¤« ¡œå£œ¤¦, ›å¤¦¤«˜ª £å˜ §˜¨á£œ«¨¦
+ ©«ž¤ œ¤«¦¢ã ":help". ƒ¦¡ £á©«œ ˜¬«á (£ž¤ ¥œ®¤á«œ ¤˜ §˜«á«œ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ‹€‡†‹€ 8: ƒ†‹ˆŽ“‚†‘’„ „Œ€ SCRIPT „‰‰ˆŒ†‘†‘
+
+ ** „¤œ¨š¦§¦ ã©«œ ®˜¨˜¡«ž¨ ©« ¡á «¦¬ Vim **
+
+ Ž Vim ⮜  §¦¢¢á §œ¨ ©©æ«œ¨˜ ®˜¨˜¡«ž¨ ©« ¡á ˜§' æ,«  ¦ Vi, ˜¢¢á «˜
+ §œ¨ ©©æ«œ¨˜ œå¤˜  ˜¨® ¡á ˜§œ¤œ¨š¦§¦ ž£â¤˜. ‚ ˜ ¤˜ ˜¨®å©œ«œ ¤˜ ®¨ž© £¦§¦ œå«œ
+ §œ¨ ©©æ«œ¨˜ ®˜¨˜¡«ž¨ ©« ¡á §¨â§œ  ¤˜ ­« á¥œ«œ ⤘ ˜¨®œå¦ "vimrc".
+
+ 1. €¨®å©«œ › ¦¨Ÿé¤¦¤«˜ª «¦ ˜¨®œå¦ "vimrc", ˜¬«æ œ¥˜¨«á«˜  ˜§æ «¦ ©ç©«ž£á ©˜ª:
+ :edit ~/.vimrc š ˜ Unix
+ :edit $VIM/_vimrc š ˜ MS-Windows
+
+ 2. ’騘 œ ©ášœ«œ «¦ ¡œå£œ¤¦ §˜¨˜›œåš£˜«¦ª š ˜ ˜¨®œå¦ "vimrc":
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. ‚¨á¯«œ «¦ ˜¨®œå¦ £œ «ž¤:
+ :write
+
+ ’ž¤ œ§æ£œ¤ž ­¦¨á §¦¬ Ÿ˜ ¥œ¡ ¤ã©œ«œ «¦¤ Vim Ÿ˜ ®¨ž© £¦§¦ ã©œ  ­à« ©£æ
+ ©ç¤«˜¥žª. ‹§¦¨œå«œ ¤˜ §¨¦©Ÿâ©œ«œ 梜ª « ª §¨¦« £é£œ¤œª œ§ ¢¦šâª ©' ˜¬«æ
+ «¦ ˜¨®œå¦ "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ „›é ¦¢¦¡¢ž¨é¤œ«˜  «¦ Vim Tutor. ‘¡¦§æª «¦¬ 㫘¤ ¤˜ ›é©œ  £å˜ ©ç¤«¦£ž
+ §œ¨å¢ž¯ž «¦¬ ©¬¤«á¡«ž Vim, «¦¬¢á® ©«¦¤ «æ©ž é©«œ ¤˜ ©˜ª œ§ «¨â¯œ  ¤˜
+ ®¨ž© £¦§¦ ã©œ«œ «¦¤ ©¬¤«á¡«ž ˜¨¡œ«á œç¡¦¢˜. €§â®œ  §¦¢ç ˜§æ £å˜
+ ¦¢¦¡¢ž¨à£â¤ž §˜¨¦¬©å˜©ž ¡˜Ÿéª ¦ Vim ⮜  §á¨˜ §¦¢¢âª œ¤«¦¢âª. ƒ ˜™á©«œ
+ ¡˜«æ§ ¤ «¦ œš®œ ¨å› ¦ ®¨ã©žª:
+ ":help user-manual".
+
+ ‚ ˜ §œ¨˜ «â¨à › á™˜©£˜ ¡˜  £œ¢â«ž, ©¬©«ã¤œ«˜  ˜¬«æ «¦ ™ ™¢å¦:
+ Vim - Vi Improved - by Steve Oualline
+ Publisher: New Riders
+ ’¦ §¨é«¦ ™ ™¢å¦ §¢ã¨àª ˜­ œ¨à£â¤¦ ©«¦¤ Vim.
+ ˆ› ˜å«œ¨˜ ®¨ã© £¦ š ˜ ˜¨®á¨ ¦¬ª.
+ “§á¨®¦¬¤ §¦¢¢á §˜¨˜›œåš£˜«˜ ¡˜  œ ¡æ¤œª.
+ ƒœå«œ «ž¤ http://iccf-holland.org/click5.html
+
+ €¬«æ «¦ ™ ™¢å¦ œå¤˜  §˜¢ æ«œ¨¦ ¡˜  §œ¨ ©©æ«œ¨¦ š ˜ «¦¤ Vi §˜¨á š ˜ «¦¤ Vim,
+ ˜¢¢á œ§å©žª ©¬¤ ©«é£œ¤¦:
+ Learning the Vi Editor - by Linda Lamb
+ Publisher: O'Reilly & Associates Inc.
+ „夘  ⤘ ¡˜¢æ ™ ™¢å¦ š ˜ ¤˜ £áŸœ«œ ©®œ›æ¤ «˜ §á¤«˜ §¦¬ Ÿâ¢œ«œ
+ ¤˜ ¡á¤œ«œ £œ «¦¤ Vi.
+ † â¡«ž â¡›¦©ž §œ¨ â®œ  ˜¡æ£˜ §¢ž¨¦­¦¨åœª š ˜ «¦¤ Vim.
+
+ €¬«ã ž §œ¨ ãšž©ž š¨á­«ž¡œ ˜§æ «¦¬ª Michael C. Pierce ¡˜  Robert K. Ware,
+ Colorado School of Mines ®¨ž© £¦§¦ é¤«˜ª  ›âœª ˜§æ «¦¤ Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ ¨¦©˜¨£¦šã š ˜ «¦¤ Vim ˜§æ «¦¤ Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
diff --git a/runtime/tutor/tutor.info b/runtime/tutor/tutor.info
new file mode 100644
index 000000000..dccf4be6f
--- /dev/null
+++ b/runtime/tutor/tutor.info
Binary files differ
diff --git a/runtime/tutor/tutor.it b/runtime/tutor/tutor.it
new file mode 100644
index 000000000..b7b70de7a
--- /dev/null
+++ b/runtime/tutor/tutor.it
@@ -0,0 +1,805 @@
+===============================================================================
+= Benvenuto alla G u i d a all'Editor V I M - Versione 1.5 =
+===============================================================================
+
+ Vim è un Editor molto potente ed ha parecchi comandi, troppi per
+ spiegarli tutti in una guida come questa. Questa guida serve a
+ descrivere quei comandi che ti permettono di usare facilmente
+ Vim come Editor di uso generale.
+
+ Il tempo necessario per completare la guida è circa 25-30 minuti,
+ a seconda di quanto tempo dedichi alla sperimentazione.
+
+ I comandi nelle lezioni modificano questo testo. Fai una copia di questo
+ file per esercitarti (se hai usato "vimtutor", stai già usando una copia).
+
+ E' importante non scordare che questa guida vuole insegnare tramite
+ l'uso. Questo vuol dire che devi eseguire i comandi per impararli
+ davvero. Se leggi il testo e basta, dimenticherai presto i comandi!
+
+ Adesso, assicurati che il tasto BLOCCA-MAIUSCOLO non sia schiacciato
+ e premi il tasto j tanto da muovere il cursore fino a che la
+ Lezione 1.1 riempia completamente lo schermo.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 1.1: MOVIMENTI DEL CURSORE
+
+
+ ** Per muovere il cursore, premi i tasti h,j,k,l come indicato. **
+ ^
+ k NOTA: Il tasto h è a sinistra e muove a sinistra.
+ < h l > Il tasto l è a destra e muove a destra.
+ j Il tasto j ricorda una freccia in giù.
+ v
+ 1. Muovi il cursore sullo schermo finché non ti senti a tuo agio.
+
+ 2. Tieni schiacciato il tasto "giù" (j) finché non si ripete il movimento.
+---> Adesso sai come arrivare fino alla lezione successiva.
+
+ 3. Usando il tasto "giù" spostati alla Lezione 1.2.
+
+NOTA: Quando non sei sicuro del tasto che hai premuto, premi <ESC> per andare
+ in Modalità Normale [Normal Mode]. Poi ri-immetti il comando che volevi.
+
+NOTA: I tasti con le frecce fanno lo stesso servizio. Ma usando hjkl riesci
+ a muoverti molto più rapidamente, una volta presa l'abitudine.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 1.2: ENTRARE E USCIRE DA VIM
+
+
+ !! NOTA: Prima di eseguire quanto richiesto, leggi la Lezione per intero!!
+
+ 1. Premi il tasto <ESC> (per assicurarti di essere in Modalità Normale).
+
+ 2. Batti: :q! <INVIO>.
+
+---> Così esci dall'Editor SENZA SALVARE alcuna modifica fatta.
+ Se vuoi uscire SALVANDO le modifiche batti:
+ :wq <INVIO>
+
+ 3. Quando vedi il PROMPT della Shell, batti il comando con cui sei arrivato
+ qui. Potrebbe essere: vimtutor <INVIO>
+ Normalmente useresti: vim tutor <INVIO>
+
+---> 'vim' indica l'Editor vim, 'tutor' è il nome del file che tu vuoi aprire.
+
+ 4. Se hai memorizzato questi comandi e ti senti pronto, esegui i passi
+ da 1 a 3 per uscire e rientrare nell'Editor. Poi muovi il cursore in giù
+ fino alla Lezione 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 1.3: EDITING DI TESTI - CANCELLAZIONE
+
+
+** In Modalità Normale premi x per cancellare il carattere sotto al cursore **
+
+ 1. Muovi il cursore alla linea più sotto, indicata da --->
+
+ 2. Per correggere errori, muovi il cursore fino a posizionarlo sopra il
+ carattere da cancellare.
+
+ 3. Premi il tasto x per cancellare il carattere sbagliato.
+
+ 4. Ripeti i passi da 2 a 4 finché la frase è corretta.
+
+---> La mmucca saltòò finnoo allaa lunnna.
+
+ 5. Ora che la linea è corretta, vai alla Lezione 1.4
+
+NOTA: Mentre segui questa guida, non cercare di imparare a memoria,
+ ma impara facendo pratica.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 1.4: EDITING DI TESTI - INSERIMENTO
+
+
+ ** Quando sei in Modalità Normale premi i per inserire testo. **
+
+ 1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+
+ 2. Per rendere la prima linea uguale alla seconda, muovi il cursore sopra
+ il primo carattere DOPO la posizione in cui il testo va inserito.
+
+ 3. Premi i e batti le aggiunte opportune.
+
+ 4. Quando un errore è corretto, premi <ESC> per tornare in Modalità Normale.
+ Ripeti i passi da 2 a 4 fino a completare la correzione della frase.
+
+---> C'era del tsto mncnt questa .
+---> C'era del testo mancante da questa linea.
+
+ 5. Quando sei a tuo agio nell'inserimento di testo vai al sommario sotto.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 1 SOMMARIO
+
+
+ 1. Il cursore si muove usando i tasti con le frecce o i tasti hjkl.
+ h (sinistra) j (giù) k (su) l (destra)
+
+ 2. Per eseguire Vim (dal prompt %) batti: vim NOMEFILE <INVIO>
+
+ 3. Per uscire da Vim batti: <ESC> :q! <INVIO> per uscire senza salvare.
+ oppure batti: <ESC> :wq <INVIO> per uscire salvando modifiche.
+
+ 4. Per cancellare il carattere sotto al cursore in Modalità Normale batti: x
+
+ 5. Per inserire testo subito prima del cursore in Modalità Normale batti:
+ i batti del testo <ESC>
+
+NOTA: premendo <ESC> ritornerai in Modalità Normale o annullerai
+ un comando errato che puoi aver inserito in parte.
+
+Ora continua con la Lezione 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2.1: COMANDI DI CANCELLAZIONE
+
+
+ ** Batti dw per cancellare fino a fine parola. **
+
+ 1. Premi <ESC> per accertarti di essere in Modalità Normale.
+
+ 2. Muovi il cursore fino alla linea qui sotto, indicata da --->
+
+ 3. Muovi il cursore all'inizio di una parola che vuoi cancellare.
+
+ 4. Batti dw per cancellare la parola.
+
+NOTA: Le lettere dw saranno visibili sull'ultima linea dello schermo mentre le
+ batti. Se hai battuto qualcosa di sbagliato, premi <ESC> e ricomincia.
+
+---> Ci sono le alcune parole gioia che non c'entrano carta in questa frase.
+
+ 5. Ripeti i passi 3 e 4 finché la frase è corretta, poi vai alla Lezione 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2.2: ALTRI COMANDI DI CANCELLAZIONE
+
+
+ ** Batti d$ per cancellare fino a fine linea. **
+
+ 1. Premi <ESC> per accertarti di essere in Modalità Normale.
+
+ 2. Muovi il cursore fino alla linea qui sotto, indicata da --->
+
+ 3. Muovi il cursore alla fine della linea corretta (DOPO il primo . ).
+
+ 4. Batti d$ per cancellare fino a fine linea.
+
+---> Qualcuno ha battuto la fine di questa linea due volte. linea due volte.
+
+
+ 5. Vai alla Lezione 2.3 per capire il funzionamento di questo comando.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2.3: COMANDI E OGGETTI
+
+
+ Il formato del comando d [delete] cancella è il seguente:
+
+ [numero] d oggetto OPPURE d [numero] oggetto
+ Dove:
+ numero - indica quante volte va eseguito il comando (se omesso, vale 1).
+ d - è il comando di cancellazione.
+ oggetto - indica dove il comando va applicato (lista qui sotto).
+
+ Breve lista di oggetti:
+ w - dal cursore alla fine della parola, incluso lo spazio.
+ e - dal cursore alla fine della parola, ESCLUSO lo spazio.
+ $ - dal cursore fino a fine linea.
+
+NOTA: Per amanti dell'avventura: premendo solo il tasto che indica l'oggetto
+ mentre siete in Modalità Normale, senza dare un comando, sposta
+ il cursore come specificato nella "lista di oggetti" qui sopra.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2.4: UNA ECCEZIONE A 'COMANDO-OGGETTO'
+
+ ** Batti dd per cancellare un'intera linea. **
+
+ Per la frequenza con cui capita di cancellare linee intere, chi
+ ha progettato Vi ha deciso che sarebbe stato più semplice
+ battere due d consecutive per cancellare una linea.
+
+ 1. Muovi il cursore alla linea 2) nella frase qui sotto.
+ 2. Batti dd per cancellare la linea.
+ 3. Ora spostati alla linea 4).
+ 4. Batti 2dd (ricorda: numero-comando-oggetto) per cancellare due linee.
+
+ 1) Le rose sono rosse,
+ 2) Nel fango ci si diverte,
+ 3) Le viole sono blu,
+ 4) Io ho un'automobile,
+ 5) Gli orologi segnano il tempo,
+ 6) Il miele è dolce,
+ 7) E lo sei anche tu.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2.5: IL COMANDO UNDO [ANNULLA]
+
+ ** Premi u per annullare gli ultimi comandi eseguiti. **
+ ** Premi U per annullare le modifiche all'ultima linea. **
+
+ 1. Muovi il cursore fino alla linea qui sotto, indicata da --->
+ e posizionati sul primo errore.
+ 2. Batti x per cancellare il primo carattere sbagliato.
+ 3. Adesso batti u per annullare l'ultimo comando eseguito.
+ 4. Ora invece, correggi tutti gli errori sulla linea usando il comando x .
+ 5. Adesso batti una U Maiuscola per riportare la linea al suo stato originale.
+ 6. Adesso batti u più volte per annullare la U e i comandi precedenti.
+ 7. Adesso batti più volte CTRL-r (tenendo il tasto CTRL schiacciato
+ mentre batti r) per rifare i comandi (annullare l'annullamento).
+
+---> Correeggi gli errori ssu quuesta linea e riimpiazzali coon "undo".
+
+ 8. Questi comandi sono molto utili. Ora spostati al Sommario della Lezione 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 2 SOMMARIO
+
+
+ 1. Per cancellare dal cursore fino alla fine di una parola batti: dw
+
+ 2. Per cancellare dal cursore fino alla fine della linea batti: d$
+
+ 3. Per cancellare un'intera linea batti: dd
+
+ 4. Il formato per un comando in Modalità Normale è:
+
+ [numero] comando oggetto OPPURE comando [numero] oggetto
+ Dove:
+ numero - indica quante volte va eseguito il comando (se omesso, vale 1).
+ comando - è il comando da eseguire, ad es. d per [delete] cancellare.
+ oggetto - indica dove il comando va applicato, ad es. w [word] parola,
+ $ (fino alla fine della linea), etc.
+
+ 5. Per annullare i comandi precedenti, batti: u (u minuscola)
+ Per annullare tutte le modifiche a una linea batti: U (U Maiuscola)
+ Per annullare l'annullamento [gli "undo"] batti: CTRL-r
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 3.1: IL COMANDO PUT [METTI, PONI]
+
+
+ ** Batti p per porre [put] l'ultima cancellazione dopo il cursore. **
+
+ 1. Muovi il cursore alla prima linea fra quelle qui in basso.
+
+ 2. Batti dd per cancellare la linea e depositarla nel buffer di Vim.
+
+ 3. Muovi il cursore fino alla linea SOPRA quella dove andrebbe spostata
+ la linea che hai appena cancellato.
+
+ 4. Mentre sei in Modalità Normale, batti p per reinserire la linea.
+
+ 5. Ripeti i passi da 2 a 4 per mettere tutte le linee nel corretto ordine.
+
+ d) Riesci a impararla tu?
+ b) Le viole sono blu,
+ c) La saggezza si impara,
+ a) Le rose sono rosse,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 3.2: IL COMANDO REPLACE [RIMPIAZZA]
+
+
+ ** Batti r e una lettera per rimpiazzare il carattere sotto al cursore. **
+
+ 1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+
+ 2. Muovi il cursore fino a posizionarlo sopra il primo errore.
+
+ 3. Batti r e poi il carattere che dovrebbe rimpiazzare l'errore.
+
+ 4. Ripeti i passi 2 e 3 finché la prima linea è corretta.
+
+---> Immattendo quetta libea, qualcuno ho predato alcuni tosti sballiati!
+---> Immettendo questa linea, qualcuno ha premuto alcuni tasti sbagliati!
+
+ 5. Ora passa alla Lezione 3.2.
+
+NOTA: Ricordati che dovresti imparare con la pratica, non solo leggendo.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 3.3: IL COMANDO CHANGE [CAMBIA]
+
+
+ ** Per cambiare una parola in tutto o in parte, batti cw . **
+
+ 1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+
+ 2. Posiziona il cursore alla u in lubw.
+
+ 3. Batti cw e la parola corretta (in questo caso, batti inea ).
+
+ 4. Premi <ESC> e vai sull'errore seguente (sul primo carattere da modificare).
+
+ 5. Ripeti i passi 3 e 4 finché la prima frase è uguale alla seconda.
+
+---> Questa lubw ha alcune pptfd da asdert usgfk il comando CHANGE.
+---> Questa linea ha alcune parole da cambiare usando il comando CHANGE.
+
+Nota che cw non solo rimpiazza la parola, ma ti mette anche in Modalità
+Inserimento [Insert Mode]
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 3.4: ALTRI CAMBIAMENTI USANDO c
+
+
+** Il comando c [CHANGE] agisce sugli stessi oggetti del comando d [DELETE] **
+
+ 1. Il comando CHANGE si comporta come DELETE. Il formato è:
+
+ [numero] c oggetto OPPURE c [numero] oggetto
+
+ 2. Gli oggetti sono gli stessi, ad es. w (word, parola), $ (fine linea), etc.
+
+ 3. Muovi il cursore alla prima linea qui sotto, indicata da --->
+
+ 4. Posiziona il cursore al primo errore.
+
+ 5. Batti c$ per modificare il resto della linea secondo il modello della
+ linea successiva, e quando hai finito premi <ESC>
+
+---> La fine di questa linea deve essere aiutata a divenire come la seguente.
+---> La fine di questa linea deve essere corretta usando il comando c$ .
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 3 SOMMARIO
+
+
+ 1. Per reinserire testo che hai appena cancellato, batti p . Questo
+ inserisce [pone] il testo cancellato DOPO il cursore (se era stata tolta
+ una linea intera, questa verrà messa nella linea SOTTO il cursore).
+
+ 2. Per rimpiazzare il carattere sotto il cursore, batti r e poi il
+ carattere sostitutivo.
+
+ 3. Il comando CHANGE ti permette di cambiare l'oggetto specificato dal
+ cursore fino alla fine dell'oggetto. Ad es. Batti cw per cambiare dal
+ cursore alla fine della parola, c$ per cambiare fino a fine linea.
+
+ 4. Il formato del comando CHANGE è:
+
+ [numero] c oggetto OPPURE c [numero] oggetto
+
+Ora vai alla prossima Lezione.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 4.1: POSIZIONAMENTE E SITUAZIONE FILE
+
+
+ ** Batti CTRL-g per vedere a che punto sei nel file e la situazione del file.
+ Batti [numero] G per raggiungere il numero della linea [numero] nel file.
+ Batti [numero] % per posizionarti alla percentuale [numero] nel file **
+
+ NOTA: Leggi l'intera Lezione prima di eseguire un qualunque comando!!
+
+ 1. Tieni premuto il tasto CTRL e batti g . Una linea di situazione
+ sarà visibile in fondo alla pagina con il NOME FILE e la linea
+ in cui sei posizionato. Ricordati il numero della linea per il Passo 3.
+
+ 2. Premi G [G Maiuscolo] per posizionarti alla fine del file.
+
+ 3. Batti il numero della linea in cui ti trovavi e poi G . Questo ti
+ riporterà fino alla linea in cui ti trovavi quando avevi battuto CTRL-g.
+ (Mentre batti i numeri, questi NON saranno visualizzati sullo schermo.)
+
+ 4. Se ti senti sicuro nel farlo, esegui i passi da 1 a 3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 4.2: IL COMANDO SEARCH [RICERCA]
+
+
+ ** Batti / seguito da una frase per ricercare quella frase. **
+
+ 1. in Modalità Normale batti il carattere / . Nota che la "/" e il cursore
+ sono visibili in fondo dello schermo come quando si usa il comando : .
+
+ 2. Adesso batti 'errroore' <INVIO>. Questa è la parola che vuoi ricercare.
+
+ 3. Per ricercare ancora la stessa frase, batti soltanto n .
+ Per ricercare la stessa frase in direzione opposta, batti N .
+
+ 4. Se vuoi ricercare una frase in direzione opposta (in su), usa il
+ comando ? invece che / .
+
+---> Quando la ricerca arriva a fine file, ricomincia dall'inizio del file.
+
+ "errroore" non è il modo giusto di digitare errore; errroore è un errore.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 4.3: RICERCA DI PARENTESI CORRISPONDENTI
+
+
+ ** Batti % per trovare una ),], o } corripondenti. **
+
+ 1. Posiziona il cursore su un (, [, or { nella linea, indicata da --->
+
+ 2. Adesso batti il carattere % .
+
+ 3. Il cursore dovrebbe ora trovarsi sulla parentesi corrispondente.
+
+ 4. Batti % per muovere il cursore alla parentesi di prima (corrispondente)
+
+---> Questa ( è una linea di test con (, [ ] e { } al suo interno. ))
+
+NOTA: Questo è molto utile nel "debug" di un programma con parentesi errate!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 4.4: UN MODO PER CORREGGERE GLI ERRORI
+
+
+ ** Batti :s/vecchio/nuovo/g per sostituire 'nuovo' a 'vecchio'. **
+
+ 1. Muovi il cursore fino alla linea qui sotto, indicata da --->.
+
+ 2. Batti :s/lla/la <INVIO> . Nota che questo comando cambia solo
+ LA PRIMA occorrenza di "lla" sulla linea.
+
+ 3. Adesso batti :s/lla/la/g dove "g" sta per "globalmente" sulla linea.
+ Questo cambia TUTTE le occorrenze di "lla" sulla linea.
+
+---> lla stagione migliore per lla fioritura è lla primavera.
+
+ 4. Per cambiare ogni ricorrenza di una stringa di caratteri tra due linee,
+ batti :#,#s/vecchio/nuovo/g dove #,# sono i numeri delle due linee.
+ Batti :%s/vecchio/nuovo/g per cambiare ogni occorrenza nell'intero file.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 4 SOMMARIO
+
+
+1. CTRL-g visualizza a che punto sei nel file e la situazione del file.
+ G [G Maiuscolo] ti porta alla fine del file. Un numero di linea
+ seguito da G [G Maiuscolo] ti porta a quel numero di linea nel file.
+
+2. Battendo / seguito da una frase ricerca IN AVANTI quella frase.
+ Battendo ? seguito da una frase ricerca ALL'INDIETRO quella frase.
+ DOPO una ricerca batti n per trovare la prossima occorrenza nella
+ stessa direzione, oppure N per cercare in direzione opposta.
+
+3. Battendo % mentre il cursore si trova su (,),[,],{, oppure }
+ ti posizioni sulla corrispondente parentesi.
+
+4. Per sostituire "nuovo" al primo "vecchio" in 1 linea batti :s/vecchio/nuovo
+ Per sostituire "nuovo" ad ogni "vecchio" in 1 linea batti :s/vecchio/nuovo/g
+ Per sostituire frasi tra 2 numeri di linea [#] batti :#,#s/vecchio/nuovo/g
+ Per sostituire tutte le occorrenze nel file batti :%s/vecchio/nuovo/g
+ Per chiedere conferma ogni volta aggiungi 'c' :%s/vecchio/nuovo/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 5.1: COME ESEGUIRE UN COMANDO ESTERNO
+
+
+ ** Batti :! seguito da un comando esterno per eseguire il comando. **
+
+ 1. Batti il comando : Per posizionare il cursore in fondo allo schermo.
+ Ciò ti permette di immettere un comando.
+
+ 2. Adesso batti il carattere ! (punto esclamativo). Ciò ti permette di
+ eseguire qualsiasi comando esterno che si può eseguire nella "shell".
+
+ 3. Ad esempio batti ls dopo il ! e poi premi <INVIO>. Questo
+ visualizza una lista della tua directory, proprio come se fossi in una
+ "shell". Usa :!dir se ls non funziona. [Unix:ls MSDOS:dir]
+
+---> NOTA: E' possibile in questo modo eseguire un comando a piacere.
+
+---> NOTA: Tutti i comandi : devono essere terminati premendo <INVIO>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 5.2: ANCORA SULLA SCRITTURA DEI FILES
+
+
+ ** Per salvare le modifiche apportate a un file batti :w NOMEFILE. **
+
+ 1. Batti :!dir or :!ls per procurarti una lista della tua directory.
+ Già sai che devi premere <INVIO> dopo aver scritto il comando.
+
+ 2. Scegli un NOMEFILE che ancora non esista, ad es. TEST .
+
+ 3. Adesso batti: :w TEST (dove TEST è il NOMEFILE che hai scelto).
+
+ 4. Questo salva l'intero file ("tutor.it") con il nome di TEST.
+ Per una verifica batti ancora :!dir per listare la tua directory.
+
+---> Nota che se esci da Vim e riesegui Vim usando come NOMEFILE TEST,
+ il file sarà una copia esatta di "tutor.it" al momento del salvataggio.
+
+ 5. Ora cancella il file battendo: :!rm TEST [sotto Unix] oppure
+ :!del TEST [sotto MSDOS]
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 5.3: SCRIVERE IN MANIERA SELETTIVA
+
+
+ ** Per salvare una porzione del file, batti :#,# w NOMEFILE **
+
+ 1. Batti ancora :!dir o :!ls per procurarti una lista della tua directory
+ e scegli un NOMEFILE adatto, come ad es. TEST .
+
+ 2. Muovi il cursore in cima a questa pagina e batti CTRL-g per procurarti
+ il numero di linea. RICORDATI QUESTO NUMERO!
+
+ 3. Ora spostati in fondo alla pagina e batti CTRL-g again.
+ RICORDATI ANCHE QUESTO NUMERO!
+
+ 4. Per salvare SOLO una parte in un file, batti :#,# w TEST
+ dove #,# sono i due numeri che hai memorizzato (cima,fondo) e TEST
+ è il tuo NOMEFILE.
+
+ 5. Ancora una volta, controlla che il file esista con il comando :!dir
+ ma NON CANCELLARLO.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 5.4: INSERIRE E RIUNIRE FILE
+
+
+ ** Per inserire il contenuto di un file, batti :r NOMEFILE **
+
+ 1. Batti :!dir per accertarti che il tuo NOMEFILE TEST sia ancora presente.
+
+ 2. Posiziona il cursore all'inizio di questa pagina.
+
+NOTA: DOPO aver eseguito il Passo 3 vedrai ancora la Lezione 5.3.
+ Quindi spostati IN GIU' per tornare ancora a questa Lezione.
+
+ 3. Ora inserisci il tuo file TEST con il comando :r TEST dove TEST è
+ il nome del file.
+
+NOTA: Il file che tu richiedi è inserito a partire da dove si trova il cursore.
+
+ 4. Per verificare che un file è stato inserito, torna indietro col cursore
+ e nota che ci sono ora 2 copie della Lezione 5.3, quella originale e quella
+ da te inserita.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 5 SOMMARIO
+
+
+ 1. :!comando esegue un comando esterno.
+
+ Alcuni esempi utili sono [in MSDOS]:
+ :!dir - visualizza lista directory
+ :!del NOMEFILE - cancella file NOMEFILE.
+
+ 2. :w NOMEFILE scrive su disco il file che stai editando con nome NOMEFILE.
+
+ 3. :#,#w NOMEFILE salva le linee da # a # nel file NOMEFILE.
+
+ 4. :r NOMEFILE legge il file NOMEFILE da disco e lo inserisce nel
+ file che stai editando, dopo il punto dove è posizionato il cursore.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 6.1: IL COMANDO OPEN [APRI]
+
+
+ ** Batti o per aprire una linea sotto il cursore e per passare in
+ Modalità Inserimento. **
+
+ 1. Muovi il cursore fino alla linea qui sotto, indicata da --->.
+
+ 2. Batti o (minuscolo) per aprire una linea sotto il cursore e per
+ passare in Modalità Inserimento.
+
+ 3. Adesso ricopia la linea indicata da --->
+ e premi <ESC> per uscire dalla Modalità Inserimento.
+
+---> Dopo battuto o il cursore è sulla linea aperta (in Modalità Inserimento)
+
+ 4. Per aprire una linea SOPRA il cursore, batti O [Maiuscola], invece
+ che una o minuscola. Prova sulla linea subito sotto.
+Apri una linea SOPRA questa battendo O quando il cursore è su questa linea.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 6.2: IL COMANDO APPEND [AGGIUNGI]
+
+
+ ** Batti a per inserire testo DOPO il cursore. **
+
+ 1. Muovi il cursore alla fine della prima linea qui sotto, indicata da --->
+ battendo $ mentre sei in Modalità Normale.
+
+ 2. Batti una a (minuscola) per aggiungere testo DOPO il carattere sotto
+ il cursore. (A Maiuscola aggiunge alla fine della linea).
+
+NOTA: Eviti così di battere i , l'ultimo carattere, il testo da aggiungere,
+ <ESC>, spostare il cursore a sinistra e battere x solo per aggiungere
+ qualcosa alla fine della linea!
+
+ 3. Adesso completa la prima linea. Nota anche che l'aggiunta funziona come
+ la Modalità Inserimento, tranne che per il luogo dove il testo è inserito.
+
+---> Questa linea ti permetterà di esercitarti
+---> Questa linea ti permetterà di esercitarti ad aggiungere testo a fine linea.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 6.3: UN'ALTRA VARIANTE DI REPLACE [RIMPIAZZA]
+
+
+ ** Batti una R Maiuscola per rimpiazzare più di un carattere. **
+
+ 1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
+
+ 2. Posiziona il cursore all'inizio della prima parola differente
+ dalla seconda linea indicata da ---> (la parola "'ultima").
+
+ 3. Adesso batti R e rimpiazza il resto del testo sulla prima linea battendo
+ sopra il testo preesistente per rendere la prima linea uguale alla seconda.
+
+---> Per rendere la prima linea uguale alla ultima su questa pagina usa i tasti.
+---> Per rendere la prima linea uguale alla seconda, batti R e il nuovo testo.
+
+ 4. Nota che quando premi <ESC> per uscire, ogni testo non toccato resta
+ uguale.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 6.4: SET [IMPOSTA] UN'OPZIONE
+
+ ** Imposta un'opzione per ignorare maiuscole/minuscole
+ durante la ricerca/sostituzione **
+
+ 1. Ricerca 'ignora' battendo:
+ /ignora
+ Ripeti la ricerca più volte usando il tasto n
+
+ 2. Imposta l'opzione 'ic' (Ignore case, [Ignora Maiuscolo/minuscolo]) battendo:
+ :set ic
+
+ 3. Adesso ricerca ancora 'ignora' premendo il tasto n
+ Ripeti la ricerca più volte usando il tasto n
+
+ 4. Imposta le opzioni 'hlsearch' e 'incsearch' [evidenzia_ricerca subito]
+ :set hls is
+
+ 5. Adesso ribatti ancora il comando di ricerca, e guarda cosa succede:
+ /ignore
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 6 SOMMARIO
+
+
+ 1. Battendo o aggiungi una linea SOTTO il cursore ed il cursore
+ si posiziona sulla linea appena aperta, in Modalità Inserimento.
+ Battendo O [Maiuscola] apri la linea SOPRA la linea su cui è il cursore.
+
+ 2. Batti una a per inserire testo DOPO il carattere su cui è il cursore.
+ Battendo A [Maiuscola] aggiungi testo alla fine della linea.
+
+ 3. Battendo R [Maiuscola] entri in Modalità Rimpiazzo [Replace mode]
+ e ci resti finché non premi <ESC> per uscirne.
+
+ 4. Battendo ":set xxx" imposti l'opzione "xxx"
+ Battendo ":h xxx" vedi la documentazione [inglese] per l'opzione "xxx"
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lezione 7: COMANDI DI AIUTO ON-LINE
+
+
+ ** Usa il sistema di help on-line **
+
+ Vim ha un esauriente sistema di aiuto on-line. Per cominciare, prova una di
+ queste alternative:
+ - premi il tasto <AIUTO> (se ce n'è uno)
+ - premi il tasto <F1> (se ce n'è uno)
+ - batti :help <INVIO> OPPURE :h <INVIO>
+
+ Batti :q <INVIO> per chiudere la finestra di help.
+
+ Puoi trovare aiuto su quasi tutto, dando un argomento al comando ":help"
+ Prova questi (non dimenticare di premere <INVIO>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEZIONE 8: PREPARA UNO SCRIPT INIZIALE
+
+ ** Attiva le opzioni Vim **
+
+ Vim ha molte più opzioni di Vi, ma molte di esse sono predefinite inattive.
+ Per cominciare a usare più opzioni, devi preparare un file "vimrc".
+
+ 1. Comincia a editare il file "vimrc", a seconda del tuo sistema operativo:
+ :edit ~/.vimrc per Unix
+ :edit $VIM/_vimrc per MS-Windows
+
+ 2. Ora inserisci il file "vimrc" d'esempio:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Scrivi il file con:
+
+ :write
+
+ La prossima volta che apri Vim, vedrai in uso la colorazione sintattica.
+ Puoi aggiungere a questo file "vimrc" tutte le tue impostazioni preferite.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Qui finisce la Guida a Vim. Il suo intento è di fornire una breve panoramica
+ dell'Editor Vim, che ti consenta di usare l'Editor abbastanza facilmente.
+ Questa guida è largamente incompleta poiché Vim ha moltissimi altri comandi.
+ Puoi anche leggere il manuale utente: ":help user-manual".
+
+ Per ulteriore lettura e studio, raccomandiamo:
+ Vim - Vi Improved - di Steve Oualline Editore: New Riders
+ Il primo libro completamente dedicato a Vim. Utile specie per principianti.
+ Contiene molti esempi e figure.
+ Vedi http://iccf-holland.org/click5.html
+
+ Quest'altro libro è più su Vi che su Vim, ma è pure consigliato:
+ Learning the Vi Editor - di Linda Lamb e Arnold Robbins
+ Editore: O'Reilly & Associates Inc.
+ E' un buon libro per imparare quasi tutto ciò che puoi voler fare con Vi.
+ Ne esiste una traduzione italiana, basata su una vecchia edizione.
+
+ Questa guida è stata scritta da Michael C. Pierce e Robert K. Ware,
+ Colorado School of Mines, usando idee fornite da Charles Smith,
+ Colorado State University - E-mail: bware@mines.colorado.edu
+ Modificato per Vim da Bram Moolenaar.
+ Segnalare refusi ad Antonio Colombo - E-mail: antonio.colombo@jrc.it
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.ja.euc b/runtime/tutor/tutor.ja.euc
new file mode 100644
index 000000000..02753d75d
--- /dev/null
+++ b/runtime/tutor/tutor.ja.euc
@@ -0,0 +1,811 @@
+===============================================================================
+= V I M ¶µ ËÜ (¥Á¥å¡¼¥È¥ê¥¢¥ë) ¤Ø ¤è ¤¦ ¤³ ¤½ - Version 1.5 =
+===============================================================================
+
+ Vim ¤Ï¡¢¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤ÇÀâÌÀ¤¹¤ë¤Ë¤Ï¿¤¹¤®¤ëÄø¤Î¥³¥Þ¥ó¥É¤òÈ÷¤¨¤¿
+ Èó¾ï¤Ë¶¯ÎϤʥ¨¥Ç¥£¥¿¡¼¤Ç¤¹¡£¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Ï¡¢¤¢¤Ê¤¿¤¬ Vim
+ ¤òËüǽ¥¨¥Ç¥£¥¿¡¼¤È¤·¤Æ»È¤¤¤³¤Ê¤»¤ë¤è¤¦¤Ë¤Ê¤ë¤Î¤Ë½½Ê¬¤Ê¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤Æ
+ ÀâÌÀ¤ò¤¹¤ë¤è¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+ ¥Á¥å¡¼¥È¥ê¥¢¥ë¤ò´°Î»¤¹¤ë¤Î¤ËɬÍפʻþ´Ö¤Ï¡¢³Ð¤¨¤¿¥³¥Þ¥ó¥É¤ò»î¤¹¤Î¤Ë¤É¤ì
+ ¤À¤±»þ´Ö¤ò»È¤¦¤Î¤«¤Ë¤â¤è¤ê¤Þ¤¹¤¬¡¢¤ª¤è¤½25¡Á30ʬ¤Ç¤¹¡£
+
+ ³Ø¤Ö¥³¥Þ¥ó¥É¤Ë¤Ï¤³¤Îʸ¾Ï¤òÊѹ¹¤¹¤ë¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£Îý½¬¤ò»Ï¤á¤ëÁ°¤Ë¥³
+ ¥Ô¡¼¤òºîÀ®¤·¤Þ¤·¤ç¤¦("vimtutor"¤·¤¿¤Ê¤é¤Ð¡¢´û¤Ë¥³¥Ô¡¼¤µ¤ì¤Æ¤¤¤Þ¤¹)¡£
+
+ ¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤¬¡¢»È¤¦¤³¤È¤Ç³Ð¤¨¤é¤ì¤ë»ÅÁȤߤˤʤäƤ¤¤ë¤³¤È¤ò¡¢¿´
+ ¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµ¤·¤¯³Ø½¬¤¹¤ë¤Ë¤Ï¥³¥Þ¥ó¥É¤ò¼ÂºÝ¤Ë»î¤µ¤Ê¤±
+ ¤ì¤Ð¤Ê¤é¤Ê¤¤¤Î¤Ç¤¹¡£Ê¸¾Ï¤òÆɤó¤À¤À¤±¤Ê¤é¤Ð¡¢¤­¤Ã¤È˺¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹!¡£
+
+ ¤µ¤¡¡¢Caps¥í¥Ã¥¯(Shift-Lock)¥­¡¼¤¬²¡¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Îǧ¤·¤¿¸å¡¢
+ ²èÌ̤˥ì¥Ã¥¹¥ó1.1 ¤¬Á´Éôɽ¼¨¤µ¤ì¤ë¤È¤³¤í¤Þ¤Ç¡¢j ¥­¡¼¤ò²¡¤·¤Æ¥«¡¼¥½¥ë¤ò
+ °ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 1.1: ¥«¡¼¥½¥ë¤Î°ÜÆ°
+
+
+ ** ¥«¡¼¥½¥ë¤ò°ÜÆ°¤¹¤ë¤Ë¤Ï¡¢¼¨¤µ¤ì¤ëÍÍ¤Ë h,j,k,l ¤ò²¡¤·¤Þ¤¹ **
+ ^
+ k ¥Ò¥ó¥È: h ¥­¡¼¤Ïº¸Êý¸þ¤Ë°ÜÆ°¤·¤Þ¤¹¡£
+ < h l > l ¥­¡¼¤Ï±¦Êý¸þ¤Ë°ÜÆ°¤·¤Þ¤¹¡£
+ j j ¥­¡¼¤Ï²¼Ìð°õ¥­¡¼¤Î¤è¤¦¤Ê¥­¡¼¤Ç¤¹¡£
+ v
+ 1. °ÜÆ°¤Ë´·¤ì¤ë¤Þ¤Ç¡¢¥¹¥¯¥ê¡¼¥ó¤Ç¥«¡¼¥½¥ë°ÜÆ°¤µ¤»¤Þ¤·¤ç¤¦¡£
+
+ 2. ²¼¤Ø¤Î¥­¡¼(j)¤ò²¡¤·¤Ä¤Å¤±¤ë¤È¡¢Ï¢Â³¤·¤Æ°ÜÆ°¤Ç¤­¤Þ¤¹¡£
+---> ¤³¤ì¤Ç¼¡¤Î¥ì¥Ã¥¹¥ó¤Ë°ÜÆ°¤¹¤ëÊýË¡¤¬¤ï¤«¤ê¤Þ¤·¤¿¤Í¡£
+
+ 3. ²¼¤Ø¤Î¥­¡¼¤ò»È¤Ã¤Æ¡¢¥ì¥Ã¥¹¥ó1.2 ¤Ë°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+NOTE: ²¿¤ò¥¿¥¤¥×¤·¤Æ¤¤¤ë¤«È½¤é¤Ê¤¯¤Ê¤Ã¤¿¤é¡¢<ESC>¤ò²¡¤·¤Æ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤·¤Þ
+ ¤¹¡£¤½¤ì¤«¤éÆþÎϤ·¤è¤¦¤È¤·¤Æ¤¤¤¿¥³¥Þ¥ó¥É¤òºÆÆþÎϤ·¤Þ¤·¤ç¤¦¡£
+
+NOTE: ¥«¡¼¥½¥ë¥­¡¼¤Ç¤â°ÜÆ°¤Ç¤­¤Þ¤¹¡£¤·¤«¤· hjkl ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ë°ìÅÙ´·¤ì¤Æ¤·¤Þ
+ ¤¨¤Ð¡¢¤Ï¤ë¤«¤Ë®¤¯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 1.2: VIM ¤Îµ¯Æ°¤È½ªÎ»
+
+
+ !! NOTE: °Ê²¼¤Î¤¢¤é¤æ¤ë¥¹¥Æ¥Ã¥×¤ò¹Ô¤¦Á°¤Ë¡¢¤³¤Î¥ì¥Ã¥¹¥ó¤òÆɤߤޤ·¤ç¤¦!!
+
+ 1. <ESC>¥­¡¼¤ò²¡¤·¤Þ¤·¤ç¤¦¡£(³Î¼Â¤Ë¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤¹¤ë¤¿¤á)
+
+ 2. ¼¡¤Î¤è¤¦¤Ë¥¿¥¤¥×: :q! <ENTER>
+
+---> ¤³¤ì¤Ë¤è¤êÊÔ½¸¤·¤¿ÆâÍƤòÊݸ¤»¤º¤Ë¥¨¥Ç¥£¥¿¤¬½ªÎ»¤·¤Þ¤¹¡£
+ ÊÔ½¸ÆâÍƤòÊݸ¤·¤Æ½ªÎ»¤¹¤ë¤È¤­¤Ï¼¡¤Î¤è¤¦¤Ë¥¿¥¤¥×¤·¤Þ¤¹:
+ :wq <ENTER>
+
+ 3. ¥·¥§¥ë¥×¥í¥ó¥×¥È¤«¤é¥Á¥å¡¼¥È¥ê¥¢¥ë¤ò»Ï¤á¤ë¤Ë¤Ï¥³¥Þ¥ó¥É¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+ ¤½¤Î¥³¥Þ¥ó¥É¤Ï: vimtutor <ENTER>
+ Ä̾ï¤Ï¤³¤¦¤Ç¤·¤ç¤¦: vim tutor <ENTER>
+
+---> 'vim' ¤Ï Vim ¥¨¥Ç¥£¥¿¤Îµ¯Æ°¤ò¡¢'tutor' ¤ÏÊÔ½¸¤·¤¿¤¤¥Õ¥¡¥¤¥ë¤ò°ÕÌ£¤·¤Þ¤¹¡£
+
+ 4. ¤³¤ì¤Þ¤Ç¤Î¥¹¥Æ¥Ã¥×¤ò³Ð¤¨¼«¿®¤¬¤Ä¤¤¤¿¤Ê¤é¤Ð¡¢¥¹¥Æ¥Ã¥× 1 ¤«¤é 3 ¤Þ¤Ç¤ò¼Â
+ ºÝ¤Ë»î¤·¤Æ¡¢Vim ¤ò1ÅÙ½ªÎ»¤·¤Æ¤«¤éºÆ¤Óµ¯Æ°¤·¤Þ¤·¤ç¤¦¡£¤½¤ì¤«¤é¥ì¥Ã¥¹¥ó
+ 1.3¤Þ¤Ç¥«¡¼¥½¥ë¤ò°ÜÆ°¤µ¤»¤Þ¤·¤ç¤¦¡£
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 1.3: ¥Æ¥­¥¹¥ÈÊÔ½¸ - ºï½ü
+
+
+ ** ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤Æ¥«¡¼¥½¥ë¤Î²¼¤Îʸ»ú¤òºï½ü¤¹¤ë¤Ë¤Ï x ¤ò²¡¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. ´Ö°ã¤¤¤ò½¤Àµ¤¹¤ë¤¿¤á¤Ë¡¢ºï½ü¤¹¤ëºÇ½é¤Îʸ»ú¤Þ¤Ç¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤¹¡£
+
+ 3. ÉÔɬÍפÊʸ»ú¤ò x ¤ò²¡¤·¤Æºï½ü¤·¤Þ¤·¤ç¤¦¡£
+
+ 4. ʸ¤¬Àµ¤·¤¯¤Ê¤ë¤Þ¤Ç ¥¹¥Æ¥Ã¥× 2 ¤«¤é 4 ¤ò·«¤êÊÖ¤·¤Þ¤·¤ç¤¦¡£
+
+---> ¤½¤Î ¤¦¤¦¤µ¤® ¤Ï ¤Ä¤Ä¤­¤­ ¤ò ¤³¤¨¤¨¤Æ¤Æ ¤È¤Ó¤Ï¤Í¤¿¤¿
+
+ 5. ¹Ô¤¬Àµ¤·¤¯¤Ê¤Ã¤¿¤é¡¢¥ì¥Ã¥¹¥ó 1.4 ¤Ë°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+NOTE: Á´¤Æ¤Î¥ì¥Ã¥¹¥ó¤òÄ̤¸¤Æ¡¢³Ð¤¨¤è¤¦¤È¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¼ÂºÝ¤Ë¤ä¤Ã¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 1.4: ¥Æ¥­¥¹¥ÈÊÔ½¸ - ÁÞÆþ
+
+
+ ** ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤Æ¥Æ¥­¥¹¥È¤òÁÞÆþ¤¹¤ë¤Ë¤Ï i ¤ò²¡¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿ºÇ½é¤Î¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. 1¹ÔÌܤò2¹ÔÌܤÈƱ¤¸Íͤˤ¹¤ë¤¿¤á¤Ë¡¢¥Æ¥­¥¹¥È¤òÁÞÆþ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤°Ì
+ Ã֤μ¡¤Îʸ»ú¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤¹¡£
+
+ 3. i ¥­¡¼¤ò²¡¤·¤Æ¤«¤é¡¢Äɲä¬É¬ÍפÊʸ»ú¤ò¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ 4. ´Ö°ã¤¤¤ò½¤Àµ¤·¤¿¤é <ESC> ¤ò²¡¤·¤Æ¥³¥Þ¥ó¥É¥â¡¼¥É¤ËÌá¤ê¡¢Àµ¤·¤¤Ê¸¤Ë
+ ¤Ê¤ëÍͤ˥¹¥Æ¥Ã¥× 2 ¤«¤é 4 ¤ò·«¤êÊÖ¤·¤Þ¤·¤ç¤¦¡£
+
+---> ¤³¤Î ¤Ë¤Ï ­¤ê¤Ê¤¤ ¥Æ¥­¥¹¥È ¤¢¤ë¡£
+---> ¤³¤Î ¹Ô ¤Ë¤Ï ´ö¤Ä¤« ­¤ê¤Ê¤¤ ¥Æ¥­¥¹¥È ¤¬ ¤¢¤ë¡£
+
+ 5. ÁÞÆþ¤ÎÊýË¡¤¬¤ï¤«¤Ã¤¿¤é²¼¤Î¥ì¥Ã¥¹¥ó1¤ÎÍ×Ìó¤ò¸«¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 1 Í×Ìó
+
+
+ 1. ¥«¡¼¥½¥ë¤ÏÌð°õ¥­¡¼¤â¤·¤¯¤Ï hjkl ¥­¡¼¤Ç°ÜÆ°¤·¤Þ¤¹¡£
+ h (º¸) j (²¼) k (¾å) l (±¦)
+
+ 2. Vim ¤òµ¯Æ°¤¹¤ë¤Ë¤Ï¥×¥í¥ó¥×¥È¤«¤é vim ¥Õ¥¡¥¤¥ë̾ <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 3. Vim ¤ò½ªÎ»¤¹¤ë¤Ë¤Ï <ESC> :q! <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤¹(Êѹ¹¤òÇË´þ)¡£
+ ¤â¤·¤¯¤Ï <ESC> :wq <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤¹(Êѹ¹¤òÊݸ)¡£
+
+ 4. ¥«¡¼¥½¥ë¤Î²¼¤Îʸ»ú¤òºï½ü¤¹¤ë¤Ë¤Ï¡¢¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç x ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 5. ¥«¡¼¥½¥ë¤Î°ÌÃÖ¤Ëʸ»ú¤òÁÞÆþ¤¹¤ë¤Ë¤Ï¡¢¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç i ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+ i ¥Æ¥­¥¹¥È¤Î¥¿¥¤¥× <ESC>
+
+NOTE: <ESC> ¥­¡¼¤ò²¡¤¹¤È¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë°Ü¹Ô¤·¤Þ¤¹¡£¤½¤ÎºÝ¡¢´Ö°ã¤Ã¤¿¤êÆþÎÏÅÓÃæ
+ ¤Î¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
+
+¤µ¤Æ¡¢Â³¤±¤Æ¥ì¥Ã¥¹¥ó 2 ¤ò»Ï¤á¤Þ¤·¤ç¤¦¡£
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 2.1: ºï½ü¥³¥Þ¥ó¥É
+
+
+ ** ñ¸ì¤ÎËöÈø¤Þ¤Ç¤òºï½ü¤¹¤ë¤Ë¤Ï dw ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦ **
+
+ 1. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç¤¢¤ë¤³¤È¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë <ESC> ¤ò²¡¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. ¾Ã¤·¤¿¤¤Ã±¸ì¤ÎÀèƬ¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 4. ñ¸ì¤òºï½ü¤¹¤ë¤¿¤á¤Ë dw ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ NOTE: ¥¿¥¤¥×¤¹¤ë¤È¡¢dw ¤È¤¤¤¦Ê¸»ú¤¬¥¹¥¯¥ê¡¼¥ó¤ÎºÇ²¼¹Ô¤Ë¸½¤ï¤ì¤Þ¤¹¡£
+ ¥¿¥¤¥×¤ò´Ö°ã¤Ã¤Æ¤·¤Þ¤Ã¤¿»þ¤Ë¤Ï <ESC> ¤ò²¡¤·¤Æ¤ä¤êľ¤·¤Þ¤·¤ç¤¦¡£
+
+---> ¤³¤Î ʸ »æ ¤Ë¤Ï ¤¤¤¯¤Ä¤«¤Î ¤¿¤Î¤·¤¤ ɬÍפΤʤ¤ ñ¸ì ¤¬ ´Þ¤Þ¤ì¤Æ ¤¤¤Þ¤¹¡£
+
+ 5. 3 ¤«¤é 4 ¤Þ¤Ç¤òʸ¤¬Àµ¤·¤¯¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤·¡¢¥ì¥Ã¥¹¥ó 2.2 ¤Ë°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 2.2: ¤½¤Î¾¤Îºï½ü¥³¥Þ¥ó¥É
+
+
+ ** ¹Ô¤ÎËöÈø¤Þ¤Ç¤òºï½ü¤¹¤ë¤Ë¤Ï d$ ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦ **
+
+ 1. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç¤¢¤ë¤³¤È¤ò³Îǧ¤¹¤ë¤Î¤Ë <ESC> ¤ò²¡¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. Àµ¤·¤¤Ê¸¤ÎËöÈø¤Ø¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦(ºÇ½é¤Î . ¤Î¸å¤Ç¤¹)¡£
+
+ 4. ¹ÔËö¤Þ¤Çºï½ü¤¹¤ë¤Î¤Ë d$ ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+---> 狼¤¬¤³¤Î¹Ô¤ÎºÇ¸å¤ò2ÅÙ¥¿¥¤¥×¤·¤Þ¤·¤¿¡£ 2ÅÙ¥¿¥¤¥×¤·¤Þ¤·¤¿¡£
+
+
+ 5. ¤É¤¦¤¤¤¦¤³¤È¤«Íý²ò¤¹¤ë¤¿¤á¤Ë¡¢¥ì¥Ã¥¹¥ó 2.3 ¤Ø°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: ¥³¥Þ¥ó¥É¤ÈÌÜŪ¸ì
+
+
+ ºï½ü¥³¥Þ¥ó¥É d ¤Î·Á¼°¤Ï¼¡¤ÎÍͤˤʤäƤ¤¤Þ¤¹:
+
+ [²ó¿ô] d ÌÜŪ¸ì ¤â¤·¤¯¤Ï d [²ó¿ô] ÌÜŪ¸ì
+ ¤½¤ì¤¾¤ì:
+ ²ó¿ô - ¤½¤Î¥³¥Þ¥ó¥É¤ò²¿²ó·«¤êÊÖ¤¹¤«(¾Êά²Äǽ, ¾Êά¤·¤¿»þ¤Ï =1)¡£
+ d - ºï½ü¥³¥Þ¥ó¥É¡£
+ ÌÜŪ¸ì - ²¿¤ËÂФ·¤ÆƯ¤­¤«¤±¤ë¤«(°Ê²¼¤Ëµó¤²¤Þ¤¹)¡£
+
+ ÌÜŪ¸ì°ìÍ÷:
+ w - ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¶õÇò¤ò´Þ¤àñ¸ì¤ÎËöÈø¤Þ¤Ç¡£
+ e - ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¶õÇò¤ò´Þ¤Þ¤Ê¤¤Ã±¸ì¤ÎËöÈø¤Þ¤Ç¡£
+ $ - ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¹ÔËö¤Þ¤Ç¡£
+
+NOTE: ËÁ¸±¤·¤¿¤¤¿Í¤Ï¡¢¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤Æ¥³¥Þ¥ó¥É¤Ê¤·¤ËÌÜŪ¸ì¤ò²¡¤·¤Æ
+ ¤ß¤Þ¤·¤ç¤¦¡£¥«¡¼¥½¥ë¤¬ÌÜŪ¸ì°ìÍ÷¤Ç¼¨¤µ¤ì¤ë°ÌÃ֤˰ÜÆ°¤¹¤ë¤Ï¤º¤Ç¤¹¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 2.4: ¤½¤ì°Ê³°¤Î·Á¤Î¥³¥Þ¥ó¥É
+
+
+ ** ¹ÔÁ´ÂΤòºï½ü¤¹¤ë¤Ë¤Ï dd ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦ **
+
+ ¹ÔÁ´ÂΤκï½ü¤ÏÉÑÈˤ˹Ԥʤ¦ºî¶È¤Ê¤Î¤Ç¡¢Vim ¤ÎÀ߷׼ԤϹԤòºï½ü¤¹¤ë¤Î¤Ë¤Ï¡¢
+ ñ¤ËÎóÆâ¤Ë¤Æ2²ó d ¤ò¥¿¥¤¥×¤¹¤ëÊý¤¬´Êñ¤À¤í¤¦¤ÈȽÃǤ·¤Þ¤·¤¿¡£
+
+ 1. ²¼¤Ë¤¢¤ë°ìÏ¢¤Î¥Õ¥ì¡¼¥º¤Î2¹ÔÌܤ˥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+ 2. dd ¤È¥¿¥¤¥×¤·¤Æ¹Ô¤òºï½ü¤·¤Þ¤·¤ç¤¦¡£
+ 3. ¤Ç¤Ï4¹ÔÌܤ˰ÜÆ°¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+ 4. 2dd ¤È¥¿¥¤¥×¤·¤Æ2¹Ôºï½ü¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+ (²ó¿ô-¥³¥Þ¥ó¥É-ÌÜŪ¸ì ¤Î·Á¼°¤ò»×¤¤½Ð¤·¤Þ¤·¤ç¤¦)
+
+ 1) ¥Ð¥é¤ÏÀÖ¤¤¡¢
+ 2) ¤Ä¤Þ¤é¤Ê¤¤¤â¤Î¤Ï³Ú¤·¤¤¡¢
+ 3) ¥¹¥ß¥ì¤ÏÀĤ¤¡¢
+ 4) »ä¤Ï¼Ö¤ò¤â¤Ã¤Æ¤¤¤ë¡¢
+ 5) »þ·×¤¬»þ¹ï¤ò¹ð¤²¤ë¡¢
+ 6) º½Åü¤Ï´Å¤¤
+ 7) ¥ª¥Þ¥¨¥â¥Ê¡¼
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 2.5: ¤ä¤êľ¤·¥³¥Þ¥ó¥É
+
+
+ ** ºÇ¸å¤Î¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤¹¤Ë¤Ï u ¤ò²¡¤·¤Þ¤¹¡£U ¤Ï¹ÔÁ´ÂΤμè¾Ã¤Ç¤¹¡£ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¡¢ºÇ½é¤Î´Ö°ã¤¤¤Ë¥«¡¼¥½¥ë
+ ¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+ 2. x ¤ò¥¿¥¤¥×¤·¤Æ¤¤¤é¤Ê¤¤ÀèƬ¤Îʸ»ú¤òºï½ü¤·¤Þ¤·¤ç¤¦¡£
+ 3. ¤µ¤¡¡¢u ¤ò¥¿¥¤¥×¤·¤ÆºÇ¸å¤Ë¼Â¹Ô¤·¤¿¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤·¤Þ¤·¤ç¤¦¡£
+ 4. º£Å٤ϡ¢x ¤ò»ÈÍѤ·¤Æ¸í¤ê¤òÁ´¤Æ½¤Àµ¤·¤Þ¤·¤ç¤¦¡£
+ 5. Âçʸ»ú¤Î U ¤ò¥¿¥¤¥×¤·¤Æ¡¢¹Ô¤ò¸µ¤Î¾õÂÖ¤ËÌᤷ¤Þ¤·¤ç¤¦¡£
+ 6. u ¤ò¥¿¥¤¥×¤·¤ÆľÁ°¤Î U ¥³¥Þ¥ó¥É¤ò¼è¾Ã¤·¤Þ¤·¤ç¤¦¡£
+ 7. ¤Ç¤Ï¥³¥Þ¥ó¥É¤òºÆ¼Â¹Ô¤¹¤ë¤Î¤Ë CTRL-R (CTRL ¤ò²¡¤·¤¿¤Þ¤Þ R ¤òÂǤÄ)¤ò
+ ¿ô²ó¥¿¥¤¥×¤·¤Æ¤ß¤Þ¤·¤ç¤¦(¼è¾Ã¤Î¼è¾Ã)¡£
+
+---> ¤³¤Î¤Î¹Ô¤Î¤Î´Ö°ã¤¤¤ò½¤Àµ¡¹¤·¡¢¸å¤Ç¤½¤ì¤é¤Î½¤Àµ¤ò¤ò¼è¾Ã¤·¤Þ¤Þ¤¹¤¹¡£
+
+ 8. ¤³¤ì¤Ï¤È¤Æ¤âÊØÍø¤Ê¥³¥Þ¥ó¥É¤Ç¤¹¡£¤µ¤¡¥ì¥Ã¥¹¥ó 2 Í×Ìó¤Ë°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 2 Í×Ìó
+
+
+ 1. ¥«¡¼¥½¥ë°ÌÃÖ¤«¤éñ¸ì¤ÎËöÈø¤Þ¤Ç¤òºï½ü¤¹¤ë¤Ë¤Ï dw ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 2. ¥«¡¼¥½¥ë°ÌÃÖ¤«¤é¹Ô¤ÎËöÈø¤Þ¤Ç¤òºï½ü¤¹¤ë¤Ë¤Ï d$ ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 3. ¹ÔÁ´ÂΤòºï½ü¤¹¤ë¤Ë¤Ï dd ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 4. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç¤Î¥³¥Þ¥ó¥É·Á¼°¤Ï
+
+ [²ó¿ô] ¥³¥Þ¥ó¥É ÌÜŪ¸ì ¤â¤·¤¯¤Ï ¥³¥Þ¥ó¥É [²ó¿ô] ÌÜŪ¸ì
+ ¤½¤ì¤¾¤ì:
+ ²ó¿ô - ¤½¤Î¥³¥Þ¥ó¥É¤ò²¿²ó·«¤êÊÖ¤¹¤«¡£
+ ¥³¥Þ¥ó¥É - ºï½ü d ¤ÎÎà¤Ç²¿¤ò¤¹¤ë¤«¡£
+ ÌÜŪ¸ì - ñ¸ì w ¤ä¹ÔËö $ ¤Ê¤É¤ÎÎà¤Ç²¿¤ËÂФ·¤ÆƯ¤­¤«¤±¤ë¤«¡£
+
+ 5. Á°²ó¤ÎÆ°ºî¤ò¼è¾Ã¤¹: u (¾®Ê¸»ú u)
+ ¹ÔÁ´ÂΤÎÊѹ¹¤ò¼è¾Ã¤¹: U (Âçʸ»ú U)
+ ¼è¾Ã¤·¤Î¼è¾Ã¤·: CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 3.1: Ž¤êÉÕ¤±¥³¥Þ¥ó¥É
+
+
+ ** ºÇ¸å¤Ëºï½ü¤µ¤ì¤¿¹Ô¤ò¥«¡¼¥½¥ë¤Î¸å¤ËŽ¤êÉÕ¤±¤ë¤Ë¤Ï p ¤ò¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤ÎÃÊÍî¤ÎºÇ½é¤Î¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. dd ¤È¥¿¥¤¥×¤·¤Æ¹Ô¤òºï½ü¤·¡¢Vim ¤Î¥Ð¥Ã¥Õ¥¡¤Ë³ÊǼ¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. ºï½ü¤·¤¿¹Ô¤¬ËÜÍ褢¤ë¤Ù¤­°ÌÃ֤ξå¤Î¹Ô¤Þ¤Ç¡¢¥«¡¼¥½¥ë¤ò°ÜÆ°¤µ¤»¤Þ¤·¤ç¤¦¡£
+
+ 4. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç p ¤ò¥¿¥¤¥×¤·¤Æ³ÊǼ¤·¤¿¹Ô¤ò²èÌ̤ËÌᤷ¤Þ¤¹¡£
+
+ 5. ½çÈÖ¤¬Àµ¤·¤¯¤Ê¤ëÍͤ˥¹¥Æ¥Ã¥× 2 ¤«¤é 4 ¤ò·«¤êÊÖ¤·¤Þ¤·¤ç¤¦¡£
+
+ d) µ®Êý¤â³Ø¤Ö¤³¤È¤¬¤Ç¤­¤ë?
+ b) ¥¹¥ß¥ì¤ÏÀĤ¤¡¢
+ c) ÃηäȤϳؤ֤â¤Î¡¢
+ a) ¥Ð¥é¤ÏÀÖ¤¤¡¢
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 3.2: ÃÖ¤­´¹¤¨¥³¥Þ¥ó¥É
+
+
+ ** ¥«¡¼¥½¥ë¤Î²¼¤Îʸ»ú¤òÃÖ¤­´¹¤¨¤ë¤Ë¤Ï r ¤ò¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿ºÇ½é¤Î¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. ºÇ½é¤Î´Ö°ã¤¤¤ÎÀèƬ¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. r ¤È¥¿¥¤¥×¤·¡¢´Ö°ã¤Ã¤Æ¤¤¤ëʸ»ú¤òÃÖ¤­´¹¤¨¤ë¡¢Àµ¤·¤¤Ê¸»ú¤ò¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ 4. ºÇ½é¤Î¹Ô¤¬Àµ¤·¤¯¤Ê¤ë¤Þ¤Ç¥¹¥Æ¥Ã¥× 2 ¤«¤é 3 ¤ò·«¤êÊÖ¤·¤Þ¤·¤ç¤¦¡£
+
+---> ¤³¤Î¹ç¤ò¿ÍÎϤ·¤¿»þ¤Í¡¢¤½¤Î¿Í¤Ï´ö¤Ä¤«Ìä°ã¤Ã¤¿¥­¡¼¤ò²¡¤·¤â¤·¤¿!
+---> ¤³¤Î¹Ô¤òÆþÎϤ·¤¿»þ¤Ë¡¢¤½¤Î¿Í¤Ï´ö¤Ä¤«´Ö°ã¤Ã¤¿¥­¡¼¤ò²¡¤·¤Þ¤·¤¿!
+
+ 5. ¤µ¤¡¡¢¥ì¥Ã¥¹¥ó 3.2 ¤Ë°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+NOTE: ¼ÂºÝ¤Ë»î¤·¤Þ¤·¤ç¤¦¡£·è¤·¤Æ³Ð¤¨¤ë¤À¤±¤Ë¤Ï¤·¤Ê¤¤¤³¤È¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 3.3: Êѹ¹¥³¥Þ¥ó¥É
+
+
+ ** ñ¸ì¤Î°ìÉô¡¢¤â¤·¤¯¤ÏÁ´ÂΤòÊѹ¹¤¹¤ë¤Ë¤Ï 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 ¤Ïñ¸ì¤òÊѹ¹¤¹¤ë¤À¤±¤Ç¤Ê¤¯¡¢ÁÞÆþ¤â¹Ô¤¨¤ë¤³¤È¤ËÃí°Õ¤·¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 3.4: c ¤ò»ÈÍѤ·¤¿¤½¤Î¾¤ÎÊѹ¹
+
+
+ ** Êѹ¹¥³¥Þ¥ó¥É¤Ï¡¢ºï½ü¥³¥Þ¥ó¥É¤ÈƱ¤¸Íͤ˥ª¥Ö¥¸¥§¥¯¥È¤ò»ÈÍѤ·¤Þ¤¹ **
+
+
+ 1. Êѹ¹¥³¥Þ¥ó¥É¤Ï¡¢ºï½ü¥³¥Þ¥ó¥É¤ÈƱ¤¸¤è¤¦¤ÊÆ°ºî¤ò¤·¤Þ¤¹¡£¤½¤Î·Á¼°¤Ï
+
+ [²ó¿ô] c ÌÜŪ¸ì ¤â¤·¤¯¤Ï c [²ó¿ô] ÌÜŪ¸ì
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 3 Í×Ìó
+
+
+ 1. ´û¤Ëºï½ü¤µ¤ì¤¿¥Æ¥­¥¹¥È¤òºÆÇÛÃÖ¤¹¤ë¤Ë¤Ï¡¢p ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£¤³¤ì¤Ïºï½ü¤µ
+ ¤ì¤¿¥Æ¥­¥¹¥È¤ò¥«¡¼¥½¥ë¤Î¸å¤ËÁÞÆþ¤·¤Þ¤¹(¹Ôñ°Ì¤Çºï½ü¤µ¤ì¤¿¤Î¤Ê¤é¤Ð¡¢¥«¡¼
+ ¥½¥ë¤Î¤¢¤ë¼¡¤Î¹Ô¤ËÁÞÆþ¤µ¤ì¤Þ¤¹)¡£
+
+ 2. ¥«¡¼¥½¥ë¤Î²¼¤Îʸ»ú¤òÃÖ¤­´¹¤¨¤ë¤Ë¤Ï¡¢r ¤ò¥¿¥¤¥×¤·¤¿¸å¡¢¤½¤ì¤òÃÖ¤­´¹¤¨¤ë
+ ʸ»ú¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 3. Êѹ¹¥³¥Þ¥ó¥É¤Ç¤Ï¥«¡¼¥½¥ë°ÌÃÖ¤«¤éÆÃÄê¤ÎÌÜŪ¸ì¤Ç»ØÄꤵ¤ì¤ë½ªÃ¼¤Þ¤Ç¤òÊѹ¹
+ ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£Î㤨¤Ð cw ¤Ê¤é¤Ð¥«¡¼¥½¥ë°ÌÃÖ¤«¤éñ¸ì¤Î½ª¤ï¤ê¤Þ¤Ç¡¢
+ c$ ¤Ê¤é¤Ð¹Ô¤Î½ª¤ï¤ê¤Þ¤Ç¤òÊѹ¹¤·¤Þ¤¹¡£
+
+ 4. Êѹ¹¥³¥Þ¥ó¥É¤Î·Á¼°¤Ï
+
+ [²ó¿ô] c ÌÜŪ¸ì ¤â¤·¤¯¤Ï c [²ó¿ô] ÌÜŪ¸ì
+
+¤µ¤¡¡¢¼¡¤Î¥ì¥Ã¥¹¥ó¤Ë°Ü¤ê¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 4.1: °ÌÃ֤ȥե¡¥¤¥ë¤Î¾ðÊó
+
+
+ ** ¥Õ¥¡¥¤¥ëÆâ¤Ç¤Î°ÌÃ֤ȥե¡¥¤¥ë¤Î¾õÂÖ¤òɽ¼¨¤¹¤ë¤Ë¤Ï CTRL-g ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+ ¥Õ¥¡¥¤¥ëÆâ¤Î¤¢¤ë¹Ô¤Ë°ÜÆ°¤¹¤ë¤Ë¤Ï SHIFT-G ¤ò¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ NOTE: ¥¹¥Æ¥Ã¥×¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¡¢¤³¤Î¥ì¥Ã¥¹¥óÁ´¤Æ¤ËÌܤòÄ̤·¤Þ¤·¤ç¤¦!!
+
+ 1. CTRL ¤ò²¡¤·¤¿¤Þ¤Þ g ¤ò²¡¤·¤Þ¤·¤ç¤¦¡£¥Ú¡¼¥¸¤Î°ìÈÖ²¼¤Ë¤¢¤ë¥¹¥Æ¡¼¥¿¥¹¹Ô
+ ¤Ë¥Õ¥¡¥¤¥ë̾¤È¹Ô¤¬É½¼¨¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡£ ¥¹¥Æ¥Ã¥× 3 ¤Î¤¿¤á¤Ë¹ÔÈÖ¹æ¤ò
+ ³Ð¤¨¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡£(Ìõ¼ÔÃí:¥ë¡¼¥é¡¼¤¬¤¢¤ë¾ì¹ç¤Ï¤½¤Á¤é¤ËÃíÌÜ)
+
+ 2. ºÇ²¼¹Ô¤Ë°ÜÆ°¤¹¤ë¤¿¤á¤Ë shift-G ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. Àè¤Û¤É¤Î¹Ô¤ÎÈÖ¹æ¤ò¥¿¥¤¥×¤·¡¢ shift-G ¤ò¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+ ºÇ½é¤Ë Ctrl-g ¤ò²¡¤·¤¿¹Ô¤ËÌá¤Ã¤ÆÍè¤ë¤Ï¤º¤Ç¤¹¡£
+ (¿ô»ú¤ò¥¿¥¤¥×¤·¤Æ¤¤¤ë¤È¤­¤Ë¤Ï²èÌ̤Ëɽ¼¨¤µ¤ì¤Þ¤»¤ó)
+
+ 4. ¼«¿®¤¬»ý¤Æ¤¿¤é¥¹¥Æ¥Ã¥× 1 ¤«¤é 3 ¤ò¼Â¹Ô¤·¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 4.2: ¸¡º÷¥³¥Þ¥ó¥É
+
+
+ ** ¸ì¶ç¤ò¸¡º÷¤¹¤ë¤Ë¤Ï / ¤È¡¢Á°Êý¸¡º÷¤¹¤ë¸ì¶ç¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£**
+
+ 1. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ç / ¤È¤¤¤¦Ê¸»ú¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£²èÌÌ°ìÈÖ²¼¤Ë : ¥³¥Þ¥ó¥É
+ ¤ÈƱ¤¸ÍÍ¤Ë / ¤¬¸½¤ì¤ë¤³¤È¤Ëµ¤¤Å¤¯¤Ç¤·¤ç¤¦¡£
+
+ 2. ¤Ç¤Ï¡¢'errroor' <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£¤³¤ì¤¬¸¡º÷¤·¤¿¤¤Ã±¸ì¤Ç¤¹¡£
+
+ 3. Ʊ¤¸¸ì¤ò¤â¤¦°ìÅÙ¸¡º÷¤¹¤ë¤È¤­¤Ï ñ¤Ë n ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+ µÕÊý¸þ¤Ë¸ì¶ç¤ò¸¡º÷¤¹¤ë¤È¤­¤Ï N ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ 4. µÕÊý¸þ¤Ë¸ì¶ç¤ò¸¡º÷¤·¤¿¤¤¾ì¹ç¤Ï¡¢/ ¥³¥Þ¥ó¥É¤Î¤«¤ï¤ê¤Ë ? ¥³¥Þ¥ó¥É¤ò»ÈÍѤ·
+ ¤Þ¤¹¡£
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+¸¡º÷¤¬¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Ë㤹¤ë¤È¡¢¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤«¤é¸¡º÷¤ò³¹Ô¤·¤Þ¤¹¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 4.3: Âбþ¤¹¤ë³ç¸Ì¤ò¸¡º÷
+
+
+ ** Âбþ¤¹¤ë ),] ¤ä } ¤ò¸¡º÷¤¹¤ë¤Ë¤Ï % ¤ò¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ç (,[ ¤« { ¤Î¤É¤ì¤«¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°
+ ¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. ¤½¤³¤Ç % ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ 3. ¥«¡¼¥½¥ë¤ÏÂбþ¤¹¤ë³ç¸Ì¤Ë°ÜÆ°¤¹¤ë¤Ï¤º¤Ç¤¹¡£
+
+ 4. ºÇ½é¤Î³ç¸Ì¤Ë°ÜÆ°¤¹¤ë¤Ë¤Ï % ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+NOTE: ¤³¤Îµ¡Ç½¤Ï³ç¸Ì¤¬°ìÃפ·¤Æ¤¤¤Ê¤¤¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤Î¤Ë¤È¤Æ¤âÌòΩ¤Á
+ ¤Þ¤¹¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 4.4: ´Ö°ã¤¤¤òÊѹ¹¤¹¤ëÊýË¡
+
+
+ ** 'old' ¤ò 'new' ¤ËÃÖ´¹¤¹¤ë¤Ë¤Ï :s/old/new/g ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. :s/thee/the <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£¤³¤Î¥³¥Þ¥ó¥É¤Ï¤½¤Î¹Ô¤ÇºÇ½é¤Ë¸«
+ ¤Ä¤«¤Ã¤¿¤â¤Î¤Ë¤À¤±¹Ô¤Ê¤ï¤ì¤ë¤³¤È¤Ëµ¤¤ò¤Ä¤±¤Þ¤·¤ç¤¦¡£
+
+ 3. ¤Ç¤Ï :s/thee/the/g ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£¹ÔÁ´ÂΤòÃÖ´¹¤¹¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£
+ ¤³¤ÎÊѹ¹¤Ï¤½¤Î¹Ô¤Ç¸«¤Ä¤«¤Ã¤¿Á´¤Æ¤Î²Õ½ê¤ËÂФ·¤Æ¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. Ê£¿ô¹Ô¤«¤é¸«¤Ä¤«¤ëʸ»ú¤òÊѹ¹¤¹¤ë¤Ë¤Ï
+ :#,#s/old/new/g #,# ¤Ï£²¹Ô¤Î¹ÔÈÖ¹æ¤ò»Ø¤·¤Þ¤¹¡£
+ :%s/old/new/g ¥Õ¥¡¥¤¥ëÁ´ÂΤǸ«¤Ä¤«¤ë¤â¤Î¤ËÂФ·¤ÆÊѹ¹¤¹¤ë¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 4 Í×Ìó
+
+
+ 1. Ctrl-g ¤Ï¥Õ¥¡¥¤¥ë¤Ç¤Î°ÌÃ֤ȥե¡¥¤¥ë¤Î¾ÜºÙ¤òɽ¼¨¤·¤Þ¤¹¡£
+ Shift-G ¤Ï¥Õ¥¡¥¤¥ë¤ÎºÇ²¼¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡£¹ÔÈÖ¹æ¸å¤Ë Shift-G ¤È¤¹¤ë¤È
+ ¤½¤Î¹Ô¤Ë°ÜÆ°¤·¤Þ¤¹¡£
+
+ 2. / ¤Î¸å¤Ë¸ì¶ç¤ò¥¿¥¤¥×¤¹¤ë¤ÈÁ°Êý¤Ë¸ì¶ç¤ò¸¡º÷¤·¤Þ¤¹¡£
+ ? ¤Î¸å¤Ë¸ì¶ç¤ò¥¿¥¤¥×¤¹¤ë¤È¸åÊý¤Ë¸ì¶ç¤ò¸¡º÷¤·¤Þ¤¹¡£
+ ¸¡º÷¤Î¸å n ¤Ç¡¢Æ±Êý¸þ¤Ë¸¡º÷¤òºÆ¤Ó¹Ô¤¤¡¢¤Þ¤¿ N ¤ÇµÕÊý¸þ¤Ë¸¡º÷¤ò¹Ô¤Ê¤¤¤Þ
+ ¤¹¡£
+
+ 3. (,),[,],{, or } ¾å¤Ë¥«¡¼¥½¥ë¤¬¤¢¤ë¾õÂÖ¤Ç % ¤ò¥¿¥¤¥×¤¹¤ë¤È
+ Âбþ¤·¤¿ÂФ˰ÜÆ°¤·¤Þ¤¹¡£
+
+ 4. ¸½ºß¹Ô¤ÎºÇ½é¤Î old ¤ò new ¤ËÃÖ´¹¤¹¤ë¡£ :s/old/new
+ ¸½ºß¹Ô¤ÎÁ´¤Æ¤Î old ¤ò new ¤ËÃÖ´¹¤¹¤ë¡£ :s/old/new/g
+ 2¤Ä¤Î # ´Ö¤Ç¸ì¶ç¤òÃÖ´¹¤¹¤ë¡£ :#,#s/old/new/g
+ ¥Õ¥¡¥¤¥ë¤ÎÃæ¤ÎÁ´¤Æ¤Î¸¡º÷¸ì¶ç¤òÃÖ´¹¤¹¤ë¡£ :%s/old/new/g
+ 'c' ¤ò²Ã¤¨¤ë¤ÈÃÖ´¹¤ÎÅ٤˳Îǧ¤òµá¤á¤ë¡£ :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 5.1: ³°Éô¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ëÊýË¡
+
+
+ ** :! ¤Î¸å¤Ë¼Â¹Ô¤¹¤ë³°Éô¥³¥Þ¥ó¥É¤ò¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. ²èÌ̤κDz¼Éô¤Ë¥«¡¼¥½¥ë¤¬°ÜÆ°¤¹¤ë¤è¤¦¡¢´·¤ì¿Æ¤·¤ó¤À : ¤ò¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+ ¤³¤ì¤Ç¥³¥Þ¥ó¥É¤¬¥¿¥¤¥×¤Ç¤­¤ëÍͤˤʤê¤Þ¤¹¡£
+
+ 2. ¤³¤³¤Ç ! ¤È¤¤¤¦Ê¸»ú(´¶Ã²Éä)¤ò¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+ ¤³¤ì¤Ç³°Éô¥·¥§¥ë¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤Ç¤­¤ëÍͤˤʤê¤Þ¤¹¡£
+
+ 3. Îã¤È¤·¤Æ ! ¤Ë³¤±¤Æ ls ¤È¥¿¥¤¥×¤· <ENTER> ¤ò²¡¤·¤Þ¤·¤ç¤¦¡£
+ ¥·¥§¥ë¥×¥í¥ó¥×¥È¤Î¤è¤¦¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤Î°ìÍ÷¤¬É½¼¨¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡£
+ ¤â¤·¤¯¤Ï ls ¤¬Æ°¤«¤Ê¤¤¤Ê¤é¤Ð :!dir ¤ò»ÈÍѤ·¤Þ¤·¤ç¤¦¡£
+
+---> NOTE: ¤³¤ÎÊýË¡¤Ë¤è¤Ã¤Æ¤¢¤é¤æ¤ë¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
+
+---> NOTE: Á´¤Æ¤Î : ¥³¥Þ¥ó¥É¤Ï <ENTER> ¤ò²¡¤·¤Æ½ªÎ»¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 5.2: ¤½¤Î¾¤Î¥Õ¥¡¥¤¥ë¤Ø½ñ¤­¹þ¤ß
+
+
+ ** ¥Õ¥¡¥¤¥ë¤ØÊѹ¹¤òÊݸ¤¹¤ë¤Ë¤Ï :w ¥Õ¥¡¥¤¥ë̾ ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. ¥Ç¥£¥ì¥¯¥È¥ê¤Î°ìÍ÷¤òÆÀ¤ë¤¿¤á¤Ë :!dir ¤â¤·¤¯¤Ï :!ls ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+ ¤³¤Î¤¢¤È <ENTER> ¤ò²¡¤¹¤Î¤Ï´û¤Ë¤´Â¸ÃΤǤ¹¤Í¡£
+
+ 2. TEST ¤Î¤è¤¦¤Ë¡¢¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë̵¤¤¥Õ¥¡¥¤¥ë̾¤ò°ì¤ÄÁª¤Ó¤Þ¤¹¡£
+
+ 3. ¤Ç¤Ï :w TEST ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦ (TEST ¤Ï¡¢Áª¤ó¤À¥Õ¥¡¥¤¥ë̾¤Ç¤¹)¡£
+
+ 4. ¤³¤ì¤Ë¤è¤ê¥Õ¥¡¥¤¥ëÁ´ÂΤ¬ TEST ¤È¤¤¤¦Ì¾Á°¤ÇÊݸ¤µ¤ì¤Þ¤¹¡£
+ ¤â¤¦°ìÅÙ :!dir ¤È¥¿¥¤¥×¤·¤Æ³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+
+---> ¤³¤³¤Ç Vim ¤ò½ªÎ»¤·¡¢¥Õ¥¡¥¤¥ë̾ TEST ¤È¶¦¤Ëµ¯Æ°¤¹¤ë¤È¡¢Êݸ¤·¤¿»þ¤Î
+ ¥Á¥å¡¼¥È¥ê¥¢¥ë¤ÎÊ£À½¤¬¤Ç¤­¾å¤¬¤ë¤Ï¤º¤Ç¤¹¡£
+
+ 5. ¤Ç¤Ï¡¢ :!del TEST ¤È¥¿¥¤¥×¤·¤Æ¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 5.3: ÁªÂò¤·¤¿½ñ¤­¹þ¤ß
+
+
+ ** ÉôʬŪ¤ËÊݸ¤¹¤ë¤Ë¤Ï :#,# w ¥Õ¥¡¥¤¥ë̾ ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. ¤â¤¦°ìÅ٥ǥ£¥ì¥¯¥È¥ê¤Î°ìÍ÷¤ò¼èÆÀ¤¹¤ë¤¿¤á¤Ë :!ls ¤È¥¿¥¤¥×¤·¡¢TEST ¤ÎÍͤË
+ ¥Õ¥¡¥¤¥ë¤ò°ì¤ÄÁª¤ó¤Ç¤ß¤Þ¤·¤ç¤¦¡£
+
+ 2. ¤³¤Î¥Ú¡¼¥¸¤Î»Ï¤á¤Þ¤Ç¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¡¢¥Õ¥¡¥¤¥ë¤Î¹Ô¿ô¤òÃΤ뤿¤á¤Ë Ctrl-g ¤È
+ ¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£¤½¤Î¹ÔÈÖ¹æ¤ò²±¤¨¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡£
+
+ 3. ¤½¤·¤Æ¥Ú¡¼¥¸¤Î½ª¤ê¤Þ¤Ç°ÜÆ°¤·¡¢ºÆÅÙ Ctrl-g ¤ò¹Ô¤¤¤Þ¤¹¡£
+ ¤³¤Î¹ÔÈÖ¹æ¤â²±¤¨¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡£
+
+ 4. ¤¢¤ëÉôʬ¤À¤±¤ò TEST ¤È¤¤¤¦Ì¾¤ÇÊݸ¤¹¤ë¤¿¤á¤Ë¡¢:#,# w TEST ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+ ¤³¤Î #,# ¤Ï³Ð¤¨¤Æ¤ª¤¤¤¿£²¤Ä¤ÎÈÖ¹æ(¾åü,²¼Ã¼) ¤Ç¤¢¤ê¡¢ TEST ¤¬¥Õ¥¡¥¤¥ë̾
+ ¤È¤Ê¤ê¤Þ¤¹¡£
+
+ 5. ºÆÅÙ¡¢¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¤³¤È¤ò³Îǧ¤¹¤ë¤¿¤á¤Ë :!dir ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+ ¤¿¤À¤·¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¾Ã¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 5.4: ¥Õ¥¡¥¤¥ë¤Î¼è¹þ¤È¹çÊ»
+
+
+ ** ¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤òÁÞÆþ¤¹¤ë¤Ë¤Ï :r ¥Õ¥¡¥¤¥ë̾ ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. Àè¤Û¤É¤Î TEST ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ë¤³¤È¤ò³Î¤«¤á¤ë¤¿¤á¤Ë :!dir ¤È
+ ¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. ¥«¡¼¥½¥ë¤ò¤³¤Î¥Ú¡¼¥¸¤ÎÀèƬ¤Ë°ÜÆ°¤·¤Þ¤¹¡£
+
+NOTE: ¥¹¥Æ¥Ã¥× 3 ¤ò¼Â¹Ô¤¹¤ë¤È¡¢²èÌÌ¤Ë ¥ì¥Ã¥¹¥ó 5.3 ¤¬¸½¤ï¤ì¤ë¤Î¤Ç¡¢¥«¡¼¥½¥ë¤ò
+ ²¼¤Ë°ÜÆ°¤·¤³¤Î¥ì¥Ã¥¹¥ó¤Þ¤ÇÌá¤ê¤Þ¤·¤ç¤¦¡£
+
+ 3. ¤Ç¤Ï¡¢:r TEST ¤È¥¿¥¤¥×¤·¤Æ TEST ¥Õ¥¡¥¤¥ë¤ò¼è¹þ¤ß¤Þ¤·¤ç¤¦¡£¤³¤Î TEST ¤Ï
+ ¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£
+
+NOTE: ¥Õ¥¡¥¤¥ë¤Î¼è¹þ¤ß¤Ï¥«¡¼¥½¥ë¤Î°ÌÃÖ¤«¤é¹Ô¤ï¤ì¤Þ¤¹¡£
+
+ 4. ¼è¹þ¤ó¤À¥Õ¥¡¥¤¥ë¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£¥«¡¼¥½¥ë¤òÌ᤹¤È¡¢¥ì¥Ã¥¹¥ó5.3 ¤Î
+ ¥ª¥ê¥¸¥Ê¥ë¤È¥Õ¥¡¥¤¥ë¤Ë¤è¤ë¤â¤Î¤Î2¤Ä¤¬¤¢¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 5 Í×Ìó
+
+
+ 1. :!command ¤Ë¤è¤Ã¤Æ ³°Éô¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£
+
+ ¤è¤¯»È¤¦Îã:
+ :!ls - ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Õ¥¡¥¤¥ë°ìÍ÷¤ò¸«¤ë¡£
+ :!del ¥Õ¥¡¥¤¥ë̾ - ¥Õ¥¡¥¤¥ë̾¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Îºï½ü¤¹¤ë¡£
+
+ 2. :w ¥Õ¥¡¥¤¥ë̾ ¤Ë¤è¤Ã¤Æ¥Õ¥¡¥¤¥ë̾¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬¥Ç¥£¥¹¥¯¤Ë½ñ¤­¹þ¤Þ¤ì¤ë¡£
+
+ 3. :#,# w ¥Õ¥¡¥¤¥ë̾ ¤Ë¤è¤Ã¤Æ # ¤«¤é # ¤Þ¤Ç¤òÊݸ¤¹¤ë¡£
+
+ 4. :r ¥Õ¥¡¥¤¥ë̾ ¤Ë¤è¤ê¥Õ¥¡¥¤¥ë̾¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬¥Ç¥£¥¹¥¯¤è¤ê¼è¹þ¤Þ¤ì¡¢
+ ¥«¡¼¥½¥ë°ÌÃ֤β¼¤ËÁÞÆþ¤µ¤ì¤ë¡£
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 6.1: ¥ª¡¼¥×¥ó¥³¥Þ¥ó¥É
+
+
+ ** o ¤ò¥¿¥¤¥×¤¹¤ë¤È¡¢¥«¡¼¥½¥ë¤Î²¼¤Î¹Ô¤¬³«¤­¡¢ÁÞÆþ¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹ **
+
+ 1. °Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. o (¾®Ê¸»ú) ¤ò¥¿¥¤¥×¤·¤Æ¡¢¥«¡¼¥½¥ë¤Î²¼¤Î¹Ô¤ò³«¤­¡¢ÁÞÆþ¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹¡£
+
+ 3. ---> ¤Èµ­¤µ¤ì¤¿¹Ô¤ò¼Ì¤·¡¢<ESC> ¤È¥¿¥¤¥×¤·¤ÆÄɲå⡼¥É¤ò½ªÎ»¤·¤Þ¤·¤ç¤¦¡£
+
+---> o ¤ò¥¿¥¤¥×¤¹¤ë¤È¥«¡¼¥½¥ë¤Ï³«¤¤¤¿¹Ô¤Ø°ÜÆ°¤·ÁÞÆþ¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹¡£
+
+ 4. ¥«¡¼¥½¥ë¤Î¾å¤Î¹Ô¤ËÁÞÆþ¤¹¤ë¤Ë¤Ï¡¢¾®Ê¸»ú¤Î o ¤Ç¤Ï¤Ê¤¯¡¢Ã±½ã¤ËÂçʸ»ú¤Î O
+ ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£¼¡¤Î¹Ô¤Ç»î¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+¤³¤Î¹Ô¤Î¾å¤ØÁÞÆþ¤¹¤ë¤Ë¤Ï¡¢¤³¤Î¹Ô¤Ø¥«¡¼¥½¥ë¤òÃÖ¤¤¤Æ Shift-O ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 6.2: Äɲå³¥Þ¥ó¥É
+
+
+ ** ¥«¡¼¥½¥ë¤Î¼¡¤Î°ÌÃÖ¤«¤é¥Æ¥­¥¹¥È¤òÄɲ乤ë¤Ë¤Ï a ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
+
+ 1. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤·¤Æ°Ê²¼¤Î ---> ¤Èµ­¤µ¤ì¤¿¤µ¤ì¤¿ºÇ½é¤Î¹Ô¤Ç $ ¤ò¥¿¥¤¥×¤·
+ ¤Æ¡¢½ªÃ¼¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
+
+ 2. ¥«¡¼¥½¥ë¤Îʸ»ú¤Î¸å¤í¤Ë¥Æ¥­¥¹¥È¤òÄɲ乤뤿¤á¤Ë a (¾®Ê¸»ú) ¤ò¥¿¥¤¥×¤·¤Þ
+ ¤¹¡£
+
+NOTE: ¤³¤ì¤ÏºÇ¸å¤Îʸ»ú¤Ë¤Æ¥Æ¥­¥¹¥È¤òÁÞÆþ¤·¡¢<ESC> ¤ò¥¿¥¤¥×¤·¤Æ¥«¡¼¥½¥ë¤ò±¦¤Ë
+ °ÜÆ°¤·¡¢ºÇ¸å¤Ë x ¥¿¥¤¥×¤·¤Æ¹ÔËö¤ËÄɲ乤ë¤È¤¤¤Ã¤¿¤è¤¦¤Ê i ¤Î¥¿¥¤¥×¤ò
+ Èò¤±¤ë¤³¤È¤¬¤­¤Þ¤¹¡£
+
+ 3. ¤µ¤ÆºÇ½é¤Î¹Ô¤ò´°À®¤·¤Þ¤·¤ç¤¦¡£¥Æ¥­¥¹¥È¤¬ÁÞÆþ¤µ¤ì¤ë°ÌÃÖ¤ò½ü¤±¤Ð¡¢
+ Äɲå³¥Þ¥ó¥É¤ÏÁÞÆþ¥â¡¼¥É¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¹¡£
+
+---> ¤³¤Î¹Ô¤Ç¡¢¹ÔËö¤Ëʸ¾Ï¤òÄɲ乤ë
+---> ¤³¤Î¹Ô¤Ç¡¢¹ÔËö¤Ëʸ¾Ï¤òÄɲ乤ëÎý½¬¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 6.3: ¤½¤Î¾¤ÎÃÖ´¹
+
+
+ ** 1ʸ»ú°Ê¾å¤òÃÖ¤­´¹¤¨¤ë¤Ë¤ÏÂçʸ»ú¤Î 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> ¤ò¥¿¥¤¥×¤¹¤ë¤È¡¢Êѹ¹¤·¤Æ¤¤¤Ê¤¤Éôʬ¤¬»Ä¤ë¤³¤È
+ ¤ËÃí°Õ¤·¤Þ¤·¤ç¤¦¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 6.4: ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê
+
+
+ ** ¸¡º÷¤äÃÖ´¹¤ÎºÝ¤ËÂçʸ»ú¤È¾®Ê¸»ú¤ò̵»ë¤¹¤ëÍͤ˥ª¥×¥·¥ç¥ó¤òÀßÄꤷ¤Þ¤¹ **
+
+
+ 1. °Ê²¼¤ÎÍͤ˥¿¥¤¥×¤·¤Æ 'ignore' ¤ò¸¡º÷¤·¤Þ¤·¤ç¤¦:
+ /ignore
+ n ¤ò²¡¤·¤Æ²¿ÅÙ¤«¸¡º÷¤ò·«¤êÊÖ¤·¤Þ¤¹¡£
+
+ 2. °Ê²¼¤ÎÍͤ˥¿¥¤¥×¤·¤Æ 'ic' (Ignore Case ¤Îά¤Ç¤¹) ¥ª¥×¥·¥ç¥ó¤òÀßÄꤷ¤Þ¤¹¡£
+ :set ic
+
+ 3. ¤Ç¤Ï n ¤Ë¤è¤Ã¤Æ¤â¤¦1ÅÙ 'ignore' ¤ò¸¡º÷¤·¤Þ¤¹¡£
+ n ¤ò²¡¤·¤Æ¤µ¤é¤Ë¿ô²ó¸¡º÷¤ò·«¤êÊÖ¤·¤Þ¤·¤ç¤¦¡£
+
+ 4. 'hlsearch' ¤È 'incsearch' ¥ª¥×¥·¥ç¥ó¤ò°Ê²¼¤ÎÍͤËÀßÄꤷ¤Þ¤·¤ç¤¦¡£
+ :set hls is
+
+ 5. ¤â¤¦°ìÅÙ¸¡º÷¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Æ¡¢²¿¤¬µ¯¤³¤ë¤«¸«¤Æ¤ß¤Þ¤·¤ç¤¦:
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 6 Í×Ìó
+
+
+ 1. o ¤ò¥¿¥¤¥×¤¹¤ë¤È¥«¡¼¥½¥ë¤Î²¼¤Î¹Ô¤ò³«¤±¤Æ¡¢¤½¤³¤ÇÁÞÆþ¥â¡¼¥É¤Ë¤Ê¤ë¡£
+ O (Âçʸ»ú) ¤ò¥¿¥¤¥×¤¹¤ë¤È¥«¡¼¥½¥ë¤Î¾å¤Î¹Ô¤ÇÁÞÆþ¥â¡¼¥É¤Ë¤Ê¤ë¡£
+
+ 2. ¥«¡¼¥½¥ë¾å¤Îʸ»ú¤Î¼¡¤«¤é¥Æ¥­¥¹¥È¤òÄɲ乤ë¤Ë¤Ï a ¤È¥¿¥¤¥×¤¹¤ë¡£
+ ¹ÔËö¤Ë¼«Æ°¤Ç¥Æ¥­¥¹¥È¤òÁÞÆþ¤¹¤ë¤Ë¤ÏÂçʸ»ú A ¤ò¥¿¥¤¥×¤¹¤ë¡£
+
+ 3. Âçʸ»ú¤Î R ¤ò¥¿¥¤¥×¤¹¤ë¤ÈÃÖ´¹¥â¡¼¥É¤ËÆþ¤ê¡¢<ESC>¤ò²¡¤¹¤ÈÈ´¤±¤ë¡£
+
+ 4. ":set xxx" ¤È¥¿¥¤¥×¤¹¤ë¤È¥ª¥×¥·¥ç¥ó "xxx" ¤¬ÀßÄꤵ¤ì¤ë¡£
+
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 7: ¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¥³¥Þ¥ó¥É
+
+ ** ¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¤ò»ÈÍѤ·¤Þ¤·¤ç¤¦ **
+
+ Vim ¤Ë¤Ï¹­ÈϤˤ錄¤ë¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¥·¥¹¥Æ¥à¤¬¤¢¤ê¤Þ¤¹¡£
+ ¥Ø¥ë¥×¤ò³«»Ï¤¹¤ë¤Ë¤Ï¡¢¤³¤ì¤é3¤Ä¤Î¤É¤ì¤«1¤Ä¤ò»î¤·¤Æ¤ß¤Þ¤·¤ç¤¦:
+ - ¥Ø¥ë¥×¥­¡¼ <HELP> ¤ò²¡¤¹(¤â¤·¤¢¤ë¤Ê¤é¤Ð)¡£
+ - <F1> ¥­¡¼¤ò²¡¤¹(¤â¤·¤¢¤ë¤Ê¤é¤Ð)¡£
+ - :help <ENTER> ¤È¥¿¥¤¥×¤¹¤ë¡£
+
+ ¥Ø¥ë¥×¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë¤Ë¤Ï :q <ENTER> ¤È¥¿¥¤¥×¤·¤Þ¤¹¡£
+
+ ":help" ¥³¥Þ¥ó¥É¤Ë°ú¿ô¤òÍ¿¤¨¤ë¤³¤È¤Ë¤è¤ê¡¢¤¢¤é¤æ¤ëÂê̾¤Î¥Ø¥ë¥×¤ò¸«¤Ä¤±¤ë
+ ¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤é¤ò»î¤·¤Æ¤ß¤Þ¤·¤ç¤¦(<ENTER> ¤ò¥¿¥¤¥×¤·Ëº¤ì¤Ê¤¤¤è¤¦¤Ë):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ¥ì¥Ã¥¹¥ó 8: µ¯Æ°¥¹¥¯¥ê¥×¥È¤ÎºîÀ®
+
+ ** Vim ¤ÎÆÃħ¤òȯ´ø¤¹¤ë **
+
+ Vim ¤Ë¤Ï Vi ¤è¤ê¤â¿¤¯¤ÎÆÃħ¤òƧ¤Þ¤¨¤Æ¤¤¤Þ¤¬¡¢¤½¤Î¤Û¤È¤ó¤É¤Ï½é´ü¾õÂ֤ˤÆ
+ »ÈÍÑÉԲĤȤʤäƤ¤¤Þ¤¹¡£¤è¤ê¿¤¯¤ÎÆÃħ¤ò»È¤¤¤Ï¤¸¤á¤ë¤Ë¤Ï "vimrc" ¥Õ¥¡¥¤¥ë
+ ¤òºîÀ®¤·¤Þ¤¹¡£
+
+ 1. "vimrc" ¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸¤ò³«»Ï¤¹¤ë¡£¤³¤ì¤Ï¥·¥¹¥Æ¥à¤Ë°Í¸¤·¤Þ¤¹¡£
+ :edit ~/.vimrc UNIX ¸þ¤±
+ :edit $VIM/_vimrc MS-Windows ¸þ¤±
+
+ 2. ¤³¤³¤Ç¥µ¥ó¥×¥ë¤Î "vimrc" ¤òÆɤ߹þ¤ß¤Þ¤¹¡£
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. °Ê²¼¤Î¤è¤¦¤Ë¥Õ¥¡¥¤¥ë¤Ø½ñ¤­¹þ¤ß¤Þ¤¹¡£
+
+ :write
+
+ ¼¡²ó Vim ¤òµ¯Æ°¤¹¤ë¤È¡¢¿§¤Å¤±¹½Ê¸¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
+ ¤³¤Î "vimrc" ¥Õ¥¡¥¤¥ë¤Ø¡¢¤ª¹¥¤ß¤ÎÀßÄê¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ ¤³¤ì¤Ë¤Æ Vim ¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤ò½ª¤ï¤ê¤Þ¤¹¡£¥¨¥Ç¥£¥¿¤ò´Êñ¤Ë¡¢¤·¤«¤â½¼Ê¬¤Ë
+ »È¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤È¡¢Vim ¤Î»ý¤Ä³µÇ°¤ÎÍ×ÅÀ¤Î¤ß¤òÅÁ¤¨¤è¤¦¤È¤·¤Þ¤·¤¿¡£
+ Vim ¤Ë¤Ï¤µ¤é¤Ë¿¤¯¤Î¥³¥Þ¥ó¥É¤¬¤¢¤ê¡¢¤³¤³¤ÇÁ´¤Æ¤òÀâÌÀ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
+ °Ê¹ß¤Ï¥æ¡¼¥¶¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤¯¤À¤µ¤¤: "help :user-manual"
+
+ ¤³¤ì°Ê¸å¤Î³Ø½¬¤Î¤¿¤á¤Ë¡¢¼¡¤ÎËܤò¿äÁ¦¤·¤Þ¤¹¡£
+ Vim - Vi Improved - by Steve Oualline
+ ½ÐÈǼÒ: New Riders
+ ºÇ½é¤ÎËܤϴ°Á´¤Ë Vim ¤Î¤¿¤á¤Ë½ñ¤«¤ì¤Þ¤·¤¿¡£¤È¤ê¤ï¤±½é¿´¼Ô¤Ë¤Ï¤ª¾©¤á¤Ç¤¹¡£
+ ¿¤¯¤ÎÎãÂê¤ä¿ÞÈǤ¬·ÇºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+ ¼¡¤ÎURL¤ò»²¾È¤·¤Æ²¼¤µ¤¤ http://iccf-holland.org/click5.html
+
+ ¼¡¤Ï Vim ¤è¤ê¤â Vi ¤Ë¤Ä¤¤¤Æ½ñ¤«¤ì¤¿¸Å¤¤ËܤǤ¹¤¬¿äÁ¦¤·¤Þ¤¹:
+ Learning the Vi Editor - by Linda Lamb
+ ½ÐÈǼÒ: O'Reilly & Associates Inc.
+ Vi ¤Ç¤ä¤ê¤¿¤¤¤È»×¤¦¤³¤È¤Û¤ÜÁ´¤Æ¤òÃΤ뤳¤È¤¬¤Ç¤­¤ëÎɽñ¤Ç¤¹¡£
+ Âè6ÈǤǤϡ¢Vim ¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤â´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+ ¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Ï Colorado State University ¤Î Charles Smith ¤Î¥¢¥¤¥Ç¥¢
+ ¤ò´ð¤Ë¡¢Colorado School of Mines ¤Î Michael C. Pierce ¤È Robert K. Ware ¤Î
+ ξ̾¤Ë¤è¤Ã¤Æ½ñ¤«¤ì¤Þ¤·¤¿¡£ E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+ ÆüËܸìÌõ ¾¾ËÜÂÙ¹° E-mail:mattn@mail.goo.ne.jp
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ vi:set ts=8 sts=4 sw=4 tw=76:
diff --git a/runtime/tutor/tutor.ja.sjis b/runtime/tutor/tutor.ja.sjis
new file mode 100644
index 000000000..3bc8a4c4a
--- /dev/null
+++ b/runtime/tutor/tutor.ja.sjis
@@ -0,0 +1,811 @@
+===============================================================================
+= V I M ‹³ –{ (ƒ`ƒ…[ƒgƒŠƒAƒ‹) ‚Ö ‚æ ‚¤ ‚± ‚» - Version 1.5 =
+===============================================================================
+
+ Vim ‚ÍA‚±‚̃`ƒ…[ƒgƒŠƒAƒ‹‚Åà–¾‚·‚é‚É‚Í‘½‚·‚¬‚é’ö‚̃Rƒ}ƒ“ƒh‚ð”õ‚¦‚½
+ ”ñí‚É‹­—͂ȃGƒfƒBƒ^[‚Å‚·B‚±‚̃`ƒ…[ƒgƒŠƒAƒ‹‚ÍA‚ ‚È‚½‚ª Vim
+ ‚𖜔\ƒGƒfƒBƒ^[‚Æ‚µ‚ÄŽg‚¢‚±‚È‚¹‚é‚悤‚É‚È‚é‚Ì‚É\•ª‚ȃRƒ}ƒ“ƒh‚ɂ‚¢‚Ä
+ à–¾‚ð‚·‚é‚悤‚È‚Á‚Ä‚¢‚Ü‚·B
+
+ ƒ`ƒ…[ƒgƒŠƒAƒ‹‚ðŠ®—¹‚·‚é‚Ì‚É•K—v‚ÈŽžŠÔ‚ÍAŠo‚¦‚½ƒRƒ}ƒ“ƒh‚ðŽŽ‚·‚Ì‚É‚Ç‚ê
+ ‚¾‚¯ŽžŠÔ‚ðŽg‚¤‚Ì‚©‚É‚à‚æ‚è‚Ü‚·‚ªA‚¨‚æ‚»25`30•ª‚Å‚·B
+
+ Šw‚ÔƒRƒ}ƒ“ƒh‚É‚Í‚±‚Ì•¶Í‚ð•ÏX‚·‚é‚à‚Ì‚à‚ ‚è‚Ü‚·B—ûK‚ðŽn‚ß‚é‘O‚ɃR
+ ƒs[‚ð쬂µ‚Ü‚µ‚傤("vimtutor"‚µ‚½‚È‚ç‚ÎAŠù‚ɃRƒs[‚³‚ê‚Ä‚¢‚Ü‚·)B
+
+ ‚±‚̃`ƒ…[ƒgƒŠƒAƒ‹‚ªAŽg‚¤‚±‚Æ‚ÅŠo‚¦‚ç‚ê‚éŽd‘g‚Ý‚É‚È‚Á‚Ä‚¢‚邱‚Æ‚ðAS
+ ‚µ‚Ä‚¨‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB³‚µ‚­ŠwK‚·‚é‚ɂ̓Rƒ}ƒ“ƒh‚ðŽÀÛ‚ÉŽŽ‚³‚È‚¯
+ ‚ê‚΂Ȃç‚È‚¢‚Ì‚Å‚·B•¶Í‚ð“Ç‚ñ‚¾‚¾‚¯‚È‚ç‚ÎA‚«‚Á‚Æ–Y‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·!B
+
+ ‚³‚ŸACapsƒƒbƒN(Shift-Lock)ƒL[‚ª‰Ÿ‚³‚ê‚Ä‚¢‚È‚¢‚±‚Æ‚ðŠm”F‚µ‚½ŒãA
+ ‰æ–ʂɃŒƒbƒXƒ“1.1 ‚ª‘S•”•\Ž¦‚³‚ê‚é‚Æ‚±‚ë‚Ü‚ÅAj ƒL[‚ð‰Ÿ‚µ‚ăJ[ƒ\ƒ‹‚ð
+ ˆÚ“®‚µ‚Ü‚µ‚傤B
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 1.1: ƒJ[ƒ\ƒ‹‚̈ړ®
+
+
+ ** ƒJ[ƒ\ƒ‹‚ðˆÚ“®‚·‚é‚É‚ÍAŽ¦‚³‚ê‚é—l‚É h,j,k,l ‚ð‰Ÿ‚µ‚Ü‚· **
+ ^
+ k ƒqƒ“ƒg: h ƒL[‚Ͷ•ûŒü‚Ɉړ®‚µ‚Ü‚·B
+ < h l > l ƒL[‚͉E•ûŒü‚Ɉړ®‚µ‚Ü‚·B
+ j j ƒL[‚͉º–îˆóƒL[‚̂悤‚ȃL[‚Å‚·B
+ v
+ 1. ˆÚ“®‚ÉŠµ‚ê‚é‚Ü‚ÅAƒXƒNƒŠ[ƒ“‚ŃJ[ƒ\ƒ‹ˆÚ“®‚³‚¹‚Ü‚µ‚傤B
+
+ 2. ‰º‚ւ̃L[(j)‚ð‰Ÿ‚µ‚‚¯‚é‚ÆA˜A‘±‚µ‚Ĉړ®‚Å‚«‚Ü‚·B
+---> ‚±‚ê‚ÅŽŸ‚̃ŒƒbƒXƒ“‚Ɉړ®‚·‚é•û–@‚ª‚í‚©‚è‚Ü‚µ‚½‚ËB
+
+ 3. ‰º‚ւ̃L[‚ðŽg‚Á‚ÄAƒŒƒbƒXƒ“1.2 ‚Ɉړ®‚µ‚Ü‚µ‚傤B
+
+NOTE: ‰½‚ðƒ^ƒCƒv‚µ‚Ä‚¢‚é‚©”»‚ç‚È‚­‚È‚Á‚½‚çA<ESC>‚ð‰Ÿ‚µ‚ăm[ƒ}ƒ‹ƒ‚[ƒh‚É‚µ‚Ü
+ ‚·B‚»‚ê‚©‚ç“ü—Í‚µ‚悤‚Æ‚µ‚Ä‚¢‚½ƒRƒ}ƒ“ƒh‚ðÄ“ü—Í‚µ‚Ü‚µ‚傤B
+
+NOTE: ƒJ[ƒ\ƒ‹ƒL[‚Å‚àˆÚ“®‚Å‚«‚Ü‚·B‚µ‚©‚µ hjkl ‚ðŽg—p‚·‚邱‚ƂɈê“xŠµ‚ê‚Ä‚µ‚Ü
+ ‚¦‚ÎA‚Í‚é‚©‚É‘¬‚­ˆÚ“®‚·‚邱‚Æ‚ª‚Å‚«‚é‚Å‚µ‚傤B
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 1.2: VIM ‚Ì‹N“®‚ÆI—¹
+
+
+ !! NOTE: ˆÈ‰º‚Ì‚ ‚ç‚ä‚éƒXƒeƒbƒv‚ðs‚¤‘O‚ÉA‚±‚̃ŒƒbƒXƒ“‚ð“Ç‚Ý‚Ü‚µ‚傤!!
+
+ 1. <ESC>ƒL[‚ð‰Ÿ‚µ‚Ü‚µ‚傤B(ŠmŽÀ‚Ƀm[ƒ}ƒ‹ƒ‚[ƒh‚É‚·‚邽‚ß)
+
+ 2. ŽŸ‚̂悤‚Ƀ^ƒCƒv: :q! <ENTER>
+
+---> ‚±‚ê‚É‚æ‚è•ÒW‚µ‚½“à—e‚ð•Û‘¶‚¹‚¸‚ɃGƒfƒBƒ^‚ªI—¹‚µ‚Ü‚·B
+ •ÒW“à—e‚ð•Û‘¶‚µ‚ÄI—¹‚·‚é‚Æ‚«‚ÍŽŸ‚̂悤‚Ƀ^ƒCƒv‚µ‚Ü‚·:
+ :wq <ENTER>
+
+ 3. ƒVƒFƒ‹ƒvƒƒ“ƒvƒg‚©‚çƒ`ƒ…[ƒgƒŠƒAƒ‹‚ðŽn‚ß‚é‚ɂ̓Rƒ}ƒ“ƒh‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+ ‚»‚̃Rƒ}ƒ“ƒh‚Í: vimtutor <ENTER>
+ ’Êí‚Í‚±‚¤‚Å‚µ‚傤: vim tutor <ENTER>
+
+---> 'vim' ‚Í Vim ƒGƒfƒBƒ^‚Ì‹N“®‚ðA'tutor' ‚Í•ÒW‚µ‚½‚¢ƒtƒ@ƒCƒ‹‚ðˆÓ–¡‚µ‚Ü‚·B
+
+ 4. ‚±‚ê‚܂ł̃Xƒeƒbƒv‚ðŠo‚¦Ž©M‚ª‚‚¢‚½‚È‚ç‚ÎAƒXƒeƒbƒv 1 ‚©‚ç 3 ‚Ü‚Å‚ðŽÀ
+ Û‚ÉŽŽ‚µ‚ÄAVim ‚ð1“xI—¹‚µ‚Ä‚©‚çÄ‚Ñ‹N“®‚µ‚Ü‚µ‚傤B‚»‚ê‚©‚烌ƒbƒXƒ“
+ 1.3‚܂ŃJ[ƒ\ƒ‹‚ðˆÚ“®‚³‚¹‚Ü‚µ‚傤B
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 1.3: ƒeƒLƒXƒg•ÒW - íœ
+
+
+ ** ƒm[ƒ}ƒ‹ƒ‚[ƒh‚ɂăJ[ƒ\ƒ‹‚̉º‚Ì•¶Žš‚ð휂·‚é‚É‚Í x ‚ð‰Ÿ‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. ŠÔˆá‚¢‚ðC³‚·‚邽‚ß‚ÉA휂·‚éʼn‚Ì•¶Žš‚܂ŃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B
+
+ 3. •s•K—v‚È•¶Žš‚ð x ‚ð‰Ÿ‚µ‚Ä휂µ‚Ü‚µ‚傤B
+
+ 4. •¶‚ª³‚µ‚­‚È‚é‚Ü‚Å ƒXƒeƒbƒv 2 ‚©‚ç 4 ‚ðŒJ‚è•Ô‚µ‚Ü‚µ‚傤B
+
+---> ‚»‚Ì ‚¤‚¤‚³‚¬ ‚Í ‚‚‚«‚« ‚ð ‚±‚¦‚¦‚Ä‚Ä ‚Æ‚Ñ‚Í‚Ë‚½‚½
+
+ 5. s‚ª³‚µ‚­‚È‚Á‚½‚çAƒŒƒbƒXƒ“ 1.4 ‚Ɉڂè‚Ü‚µ‚傤B
+
+NOTE: ‘S‚ẴŒƒbƒXƒ“‚ð’Ê‚¶‚ÄAŠo‚¦‚悤‚Æ‚·‚é‚Ì‚Å‚Í‚È‚­ŽÀÛ‚É‚â‚Á‚Ä‚Ý‚Ü‚µ‚傤B
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 1.4: ƒeƒLƒXƒg•ÒW - ‘}“ü
+
+
+ ** ƒm[ƒ}ƒ‹ƒ‚[ƒh‚ɂăeƒLƒXƒg‚ð‘}“ü‚·‚é‚É‚Í i ‚ð‰Ÿ‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽʼn‚Ìs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. 1s–Ú‚ð2s–Ú‚Æ“¯‚¶—l‚É‚·‚邽‚ß‚ÉAƒeƒLƒXƒg‚ð‘}“ü‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ˆÊ
+ ’u‚ÌŽŸ‚Ì•¶Žš‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B
+
+ 3. i ƒL[‚ð‰Ÿ‚µ‚Ä‚©‚çA’ljÁ‚ª•K—v‚È•¶Žš‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ 4. ŠÔˆá‚¢‚ðC³‚µ‚½‚ç <ESC> ‚ð‰Ÿ‚µ‚ăRƒ}ƒ“ƒhƒ‚[ƒh‚É–ß‚èA³‚µ‚¢•¶‚É
+ ‚È‚é—l‚ɃXƒeƒbƒv 2 ‚©‚ç 4 ‚ðŒJ‚è•Ô‚µ‚Ü‚µ‚傤B
+
+---> ‚±‚Ì ‚É‚Í ‘«‚è‚È‚¢ ƒeƒLƒXƒg ‚ ‚éB
+---> ‚±‚Ì s ‚É‚Í Šô‚‚© ‘«‚è‚È‚¢ ƒeƒLƒXƒg ‚ª ‚ ‚éB
+
+ 5. ‘}“ü‚Ì•û–@‚ª‚í‚©‚Á‚½‚牺‚̃ŒƒbƒXƒ“1‚Ì—v–ñ‚ðŒ©‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 1 —v–ñ
+
+
+ 1. ƒJ[ƒ\ƒ‹‚Í–îˆóƒL[‚à‚µ‚­‚Í hjkl ƒL[‚ňړ®‚µ‚Ü‚·B
+ h (¶) j (‰º) k (ã) l (‰E)
+
+ 2. Vim ‚ð‹N“®‚·‚é‚ɂ̓vƒƒ“ƒvƒg‚©‚ç vim ƒtƒ@ƒCƒ‹–¼ <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ 3. Vim ‚ðI—¹‚·‚é‚É‚Í <ESC> :q! <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚·(•ÏX‚ð”jŠü)B
+ ‚à‚µ‚­‚Í <ESC> :wq <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚·(•ÏX‚ð•Û‘¶)B
+
+ 4. ƒJ[ƒ\ƒ‹‚̉º‚Ì•¶Žš‚ð휂·‚é‚É‚ÍAƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å x ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ 5. ƒJ[ƒ\ƒ‹‚̈ʒu‚É•¶Žš‚ð‘}“ü‚·‚é‚É‚ÍAƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å i ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+ i ƒeƒLƒXƒg‚̃^ƒCƒv <ESC>
+
+NOTE: <ESC> ƒL[‚ð‰Ÿ‚·‚ƃm[ƒ}ƒ‹ƒ‚[ƒh‚ɈÚs‚µ‚Ü‚·B‚»‚ÌÛAŠÔˆá‚Á‚½‚è“ü—Í“r’†
+ ‚̃Rƒ}ƒ“ƒh‚ðŽæ‚èÁ‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B
+
+‚³‚ÄA‘±‚¯‚ăŒƒbƒXƒ“ 2 ‚ðŽn‚ß‚Ü‚µ‚傤B
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 2.1: 휃Rƒ}ƒ“ƒh
+
+
+ ** ’PŒê‚Ì––”ö‚Ü‚Å‚ð휂·‚é‚É‚Í dw ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 **
+
+ 1. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å‚ ‚邱‚Æ‚ðŠm”F‚·‚邽‚ß‚É <ESC> ‚ð‰Ÿ‚µ‚Ü‚µ‚傤B
+
+ 2. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 3. Á‚µ‚½‚¢’PŒê‚Ì擪‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 4. ’PŒê‚ð휂·‚邽‚ß‚É dw ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ NOTE: ƒ^ƒCƒv‚·‚é‚ÆAdw ‚Æ‚¢‚¤•¶Žš‚ªƒXƒNƒŠ[ƒ“‚Ìʼnºs‚ÉŒ»‚í‚ê‚Ü‚·B
+ ƒ^ƒCƒv‚ðŠÔˆá‚Á‚Ä‚µ‚Ü‚Á‚½Žž‚É‚Í <ESC> ‚ð‰Ÿ‚µ‚Ä‚â‚è’¼‚µ‚Ü‚µ‚傤B
+
+---> ‚±‚Ì •¶ Ž† ‚É‚Í ‚¢‚­‚‚©‚Ì ‚½‚Ì‚µ‚¢ •K—v‚Ì‚È‚¢ ’PŒê ‚ª ŠÜ‚Ü‚ê‚Ä ‚¢‚Ü‚·B
+
+ 5. 3 ‚©‚ç 4 ‚܂ł𕶂ª³‚µ‚­‚È‚é‚Ü‚ÅŒJ‚è•Ô‚µAƒŒƒbƒXƒ“ 2.2 ‚Ɉڂè‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 2.2: ‚»‚Ì‘¼‚Ì휃Rƒ}ƒ“ƒh
+
+
+ ** s‚Ì––”ö‚Ü‚Å‚ð휂·‚é‚É‚Í d$ ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 **
+
+ 1. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚Ì‚É <ESC> ‚ð‰Ÿ‚µ‚Ü‚µ‚傤B
+
+ 2. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 3. ³‚µ‚¢•¶‚Ì––”ö‚ÖƒJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤(ʼn‚Ì . ‚ÌŒã‚Å‚·)B
+
+ 4. s––‚Ü‚Å휂·‚é‚Ì‚É d$ ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+---> ’N‚©‚ª‚±‚Ìs‚ÌÅŒã‚ð2“xƒ^ƒCƒv‚µ‚Ü‚µ‚½B 2“xƒ^ƒCƒv‚µ‚Ü‚µ‚½B
+
+
+ 5. ‚Ç‚¤‚¢‚¤‚±‚Æ‚©—‰ð‚·‚邽‚ß‚ÉAƒŒƒbƒXƒ“ 2.3 ‚ÖˆÚ‚è‚Ü‚µ‚傤B
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: ƒRƒ}ƒ“ƒh‚Æ–Ú“IŒê
+
+
+ 휃Rƒ}ƒ“ƒh d ‚ÌŒ`Ž®‚ÍŽŸ‚Ì—l‚É‚È‚Á‚Ä‚¢‚Ü‚·:
+
+ [‰ñ”] d –Ú“IŒê ‚à‚µ‚­‚Í d [‰ñ”] –Ú“IŒê
+ ‚»‚ꂼ‚ê:
+ ‰ñ” - ‚»‚̃Rƒ}ƒ“ƒh‚ð‰½‰ñŒJ‚è•Ô‚·‚©(È—ª‰Â”\, È—ª‚µ‚½Žž‚Í =1)B
+ d - 휃Rƒ}ƒ“ƒhB
+ –Ú“IŒê - ‰½‚ɑ΂µ‚Ä“­‚«‚©‚¯‚é‚©(ˆÈ‰º‚É‹“‚°‚Ü‚·)B
+
+ –Ú“IŒêˆê——:
+ w - ƒJ[ƒ\ƒ‹ˆÊ’u‚©‚ç‹ó”’‚ðŠÜ‚Þ’PŒê‚Ì––”ö‚Ü‚ÅB
+ e - ƒJ[ƒ\ƒ‹ˆÊ’u‚©‚ç‹ó”’‚ðŠÜ‚Ü‚È‚¢’PŒê‚Ì––”ö‚Ü‚ÅB
+ $ - ƒJ[ƒ\ƒ‹ˆÊ’u‚©‚çs––‚Ü‚ÅB
+
+NOTE: –`Œ¯‚µ‚½‚¢l‚ÍAƒm[ƒ}ƒ‹ƒ‚[ƒh‚ɂăRƒ}ƒ“ƒh‚È‚µ‚É–Ú“IŒê‚ð‰Ÿ‚µ‚Ä
+ ‚Ý‚Ü‚µ‚傤BƒJ[ƒ\ƒ‹‚ª–Ú“IŒêˆê——‚ÅŽ¦‚³‚ê‚éˆÊ’u‚Ɉړ®‚·‚é‚Í‚¸‚Å‚·B
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 2.4: ‚»‚êˆÈŠO‚ÌŒ`‚̃Rƒ}ƒ“ƒh
+
+
+ ** s‘S‘Ì‚ð휂·‚é‚É‚Í dd ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 **
+
+ s‘S‘Ì‚Ì휂͕p”É‚És‚È‚¤ì‹Æ‚È‚Ì‚ÅAVim ‚ÌÝŒvŽÒ‚Ís‚ð휂·‚é‚Ì‚É‚ÍA
+ ’P‚É—ñ“à‚É‚Ä2‰ñ d ‚ðƒ^ƒCƒv‚·‚é•û‚ªŠÈ’P‚¾‚낤‚Æ”»’f‚µ‚Ü‚µ‚½B
+
+ 1. ‰º‚É‚ ‚éˆê˜A‚̃tƒŒ[ƒY‚Ì2s–ڂɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+ 2. dd ‚ƃ^ƒCƒv‚µ‚Äs‚ð휂µ‚Ü‚µ‚傤B
+ 3. ‚Å‚Í4s–ڂɈړ®‚µ‚Ä‚Ý‚Ü‚µ‚傤B
+ 4. 2dd ‚ƃ^ƒCƒv‚µ‚Ä2s휂µ‚Ä‚Ý‚Ü‚µ‚傤B
+ (‰ñ”-ƒRƒ}ƒ“ƒh-–Ú“IŒê ‚ÌŒ`Ž®‚ðŽv‚¢o‚µ‚Ü‚µ‚傤)
+
+ 1) ƒoƒ‰‚ÍÔ‚¢A
+ 2) ‚‚܂ç‚È‚¢‚à‚Ì‚ÍŠy‚µ‚¢A
+ 3) ƒXƒ~ƒŒ‚Í‚¢A
+ 4) Ž„‚ÍŽÔ‚ð‚à‚Á‚Ä‚¢‚éA
+ 5) ŽžŒv‚ªŽž‚ð‚°‚éA
+ 6) »“œ‚͊¢
+ 7) ƒIƒ}ƒGƒ‚ƒi[
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 2.5: ‚â‚è’¼‚µƒRƒ}ƒ“ƒh
+
+
+ ** ÅŒã‚̃Rƒ}ƒ“ƒh‚ðŽæ‚èÁ‚·‚É‚Í u ‚ð‰Ÿ‚µ‚Ü‚·BU ‚Ís‘S‘Ì‚ÌŽæÁ‚Å‚·B **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µAʼn‚̊ԈႢ‚ɃJ[ƒ\ƒ‹
+ ‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+ 2. x ‚ðƒ^ƒCƒv‚µ‚Ä‚¢‚ç‚È‚¢æ“ª‚Ì•¶Žš‚ð휂µ‚Ü‚µ‚傤B
+ 3. ‚³‚ŸAu ‚ðƒ^ƒCƒv‚µ‚ÄÅŒã‚ÉŽÀs‚µ‚½ƒRƒ}ƒ“ƒh‚ðŽæ‚èÁ‚µ‚Ü‚µ‚傤B
+ 4. ¡“x‚ÍAx ‚ðŽg—p‚µ‚ÄŒë‚è‚ð‘S‚ÄC³‚µ‚Ü‚µ‚傤B
+ 5. ‘啶Žš‚Ì U ‚ðƒ^ƒCƒv‚µ‚ÄAs‚ðŒ³‚Ìó‘Ô‚É–ß‚µ‚Ü‚µ‚傤B
+ 6. u ‚ðƒ^ƒCƒv‚µ‚Ä’¼‘O‚Ì U ƒRƒ}ƒ“ƒh‚ðŽæÁ‚µ‚Ü‚µ‚傤B
+ 7. ‚ł̓Rƒ}ƒ“ƒh‚ðÄŽÀs‚·‚é‚Ì‚É CTRL-R (CTRL ‚ð‰Ÿ‚µ‚½‚Ü‚Ü R ‚ð‘Å‚Â)‚ð
+ ”‰ñƒ^ƒCƒv‚µ‚Ä‚Ý‚Ü‚µ‚傤(ŽæÁ‚ÌŽæÁ)B
+
+---> ‚±‚Ì‚Ìs‚̂̊ԈႢ‚ðC³X‚µAŒã‚Å‚»‚ê‚ç‚ÌC³‚ð‚ðŽæÁ‚µ‚Ü‚Ü‚·‚·B
+
+ 8. ‚±‚ê‚Í‚Æ‚Ä‚à•Ö—˜‚ȃRƒ}ƒ“ƒh‚Å‚·B‚³‚ŸƒŒƒbƒXƒ“ 2 —v–ñ‚Ɉڂè‚Ü‚µ‚傤B
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 2 —v–ñ
+
+
+ 1. ƒJ[ƒ\ƒ‹ˆÊ’u‚©‚ç’PŒê‚Ì––”ö‚Ü‚Å‚ð휂·‚é‚É‚Í dw ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ 2. ƒJ[ƒ\ƒ‹ˆÊ’u‚©‚çs‚Ì––”ö‚Ü‚Å‚ð휂·‚é‚É‚Í d$ ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ 3. s‘S‘Ì‚ð휂·‚é‚É‚Í dd ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ 4. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚ł̃Rƒ}ƒ“ƒhŒ`Ž®‚Í
+
+ [‰ñ”] ƒRƒ}ƒ“ƒh –Ú“IŒê ‚à‚µ‚­‚Í ƒRƒ}ƒ“ƒh [‰ñ”] –Ú“IŒê
+ ‚»‚ꂼ‚ê:
+ ‰ñ” - ‚»‚̃Rƒ}ƒ“ƒh‚ð‰½‰ñŒJ‚è•Ô‚·‚©B
+ ƒRƒ}ƒ“ƒh - íœ d ‚̗ނʼn½‚ð‚·‚é‚©B
+ –Ú“IŒê - ’PŒê w ‚âs–– $ ‚Ȃǂ̗ނʼn½‚ɑ΂µ‚Ä“­‚«‚©‚¯‚é‚©B
+
+ 5. ‘O‰ñ‚Ì“®ì‚ðŽæÁ‚·: u (¬•¶Žš u)
+ s‘S‘Ì‚Ì•ÏX‚ðŽæÁ‚·: U (‘啶Žš U)
+ ŽæÁ‚µ‚ÌŽæÁ‚µ: CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 3.1: “\‚è•t‚¯ƒRƒ}ƒ“ƒh
+
+
+ ** ÅŒã‚É휂³‚ꂽs‚ðƒJ[ƒ\ƒ‹‚ÌŒã‚É“\‚è•t‚¯‚é‚É‚Í p ‚ðƒ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì’i—Ž‚Ìʼn‚Ìs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. dd ‚ƃ^ƒCƒv‚µ‚Äs‚ð휂µAVim ‚̃oƒbƒtƒ@‚ÉŠi”[‚µ‚Ü‚µ‚傤B
+
+ 3. 휂µ‚½s‚ª–{—ˆ‚ ‚é‚ׂ«ˆÊ’u‚Ìã‚Ìs‚Ü‚ÅAƒJ[ƒ\ƒ‹‚ðˆÚ“®‚³‚¹‚Ü‚µ‚傤B
+
+ 4. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å p ‚ðƒ^ƒCƒv‚µ‚ÄŠi”[‚µ‚½s‚ð‰æ–Ê‚É–ß‚µ‚Ü‚·B
+
+ 5. ‡”Ô‚ª³‚µ‚­‚È‚é—l‚ɃXƒeƒbƒv 2 ‚©‚ç 4 ‚ðŒJ‚è•Ô‚µ‚Ü‚µ‚傤B
+
+ d) ‹M•û‚àŠw‚Ô‚±‚Æ‚ª‚Å‚«‚é?
+ b) ƒXƒ~ƒŒ‚Í‚¢A
+ c) ’mŒb‚Æ‚ÍŠw‚Ô‚à‚ÌA
+ a) ƒoƒ‰‚ÍÔ‚¢A
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 3.2: ’u‚«Š·‚¦ƒRƒ}ƒ“ƒh
+
+
+ ** ƒJ[ƒ\ƒ‹‚̉º‚Ì•¶Žš‚ð’u‚«Š·‚¦‚é‚É‚Í r ‚ðƒ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽʼn‚Ìs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. ʼn‚̊ԈႢ‚Ì擪‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 3. r ‚ƃ^ƒCƒv‚µAŠÔˆá‚Á‚Ä‚¢‚镶Žš‚ð’u‚«Š·‚¦‚éA³‚µ‚¢•¶Žš‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ 4. ʼn‚Ìs‚ª³‚µ‚­‚È‚é‚܂ŃXƒeƒbƒv 2 ‚©‚ç 3 ‚ðŒJ‚è•Ô‚µ‚Ü‚µ‚傤B
+
+---> ‚±‚̇‚ðl—Í‚µ‚½Žž‚ËA‚»‚Ìl‚ÍŠô‚‚©–âˆá‚Á‚½ƒL[‚ð‰Ÿ‚µ‚à‚µ‚½!
+---> ‚±‚Ìs‚ð“ü—Í‚µ‚½Žž‚ÉA‚»‚Ìl‚ÍŠô‚‚©ŠÔˆá‚Á‚½ƒL[‚ð‰Ÿ‚µ‚Ü‚µ‚½!
+
+ 5. ‚³‚ŸAƒŒƒbƒXƒ“ 3.2 ‚Ɉڂè‚Ü‚µ‚傤B
+
+NOTE: ŽÀÛ‚ÉŽŽ‚µ‚Ü‚µ‚傤BŒˆ‚µ‚ÄŠo‚¦‚邾‚¯‚É‚Í‚µ‚È‚¢‚±‚ÆB
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 3.3: •ÏXƒRƒ}ƒ“ƒh
+
+
+ ** ’PŒê‚̈ꕔA‚à‚µ‚­‚Í‘S‘Ì‚ð•ÏX‚·‚é‚É‚Í cw ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽʼn‚Ìs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. lubw ‚Ì u ‚̈ʒu‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 3. cw ‚ƃ^ƒCƒv‚µA³‚µ‚¢’PŒê‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤(‚±‚Ìê‡ 'ine' ‚ƃ^ƒCƒv)B
+
+ 4. ŽŸ‚̊ԈႢ(•ÏX‚·‚ׂ«•¶Žš‚Ì擪)‚Ɉړ®‚·‚邽‚ß‚É <ESC> ‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+
+ 5. ʼn‚Ìs‚ªŽŸ‚Ìs‚Ì—l‚É‚È‚é‚܂ŃXƒeƒbƒv 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.
+
+cw ‚Í’PŒê‚ð•ÏX‚·‚邾‚¯‚Å‚È‚­A‘}“ü‚às‚¦‚邱‚Æ‚É’ˆÓ‚µ‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 3.4: c ‚ðŽg—p‚µ‚½‚»‚Ì‘¼‚Ì•ÏX
+
+
+ ** •ÏXƒRƒ}ƒ“ƒh‚ÍA휃Rƒ}ƒ“ƒh‚Æ“¯‚¶—l‚ɃIƒuƒWƒFƒNƒg‚ðŽg—p‚µ‚Ü‚· **
+
+
+ 1. •ÏXƒRƒ}ƒ“ƒh‚ÍA휃Rƒ}ƒ“ƒh‚Æ“¯‚¶‚悤‚È“®ì‚ð‚µ‚Ü‚·B‚»‚ÌŒ`Ž®‚Í
+
+ [‰ñ”] c –Ú“IŒê ‚à‚µ‚­‚Í c [‰ñ”] –Ú“IŒê
+
+ 2. ƒIƒuƒWƒFƒNƒg‚à“¯‚¶‚ÅAw ‚Í’PŒêA $ ‚Ís––‚È‚Ç‚Æ‚¢‚Á‚½‚à‚Ì‚Å‚·B
+
+ 3. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 4. ʼn‚̊ԈႢ‚ÖƒJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 5. c$ ‚ƃ^ƒCƒv‚µ‚Äs‚ÌŽc‚è‚ð‚Qs–Ú‚Ì—l‚É‚µA<ESC> ‚ð‰Ÿ‚µ‚Ü‚µ‚傤B
+
+---> 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 3 —v–ñ
+
+
+ 1. Šù‚É휂³‚ꂽƒeƒLƒXƒg‚ðÄ”z’u‚·‚é‚É‚ÍAp ‚ðƒ^ƒCƒv‚µ‚Ü‚·B‚±‚ê‚Í휂³
+ ‚ꂽƒeƒLƒXƒg‚ðƒJ[ƒ\ƒ‹‚ÌŒã‚É‘}“ü‚µ‚Ü‚·(s’PˆÊ‚Å휂³‚ꂽ‚Ì‚È‚ç‚ÎAƒJ[
+ ƒ\ƒ‹‚Ì‚ ‚鎟‚Ìs‚É‘}“ü‚³‚ê‚Ü‚·)B
+
+ 2. ƒJ[ƒ\ƒ‹‚̉º‚Ì•¶Žš‚ð’u‚«Š·‚¦‚é‚É‚ÍAr ‚ðƒ^ƒCƒv‚µ‚½ŒãA‚»‚ê‚ð’u‚«Š·‚¦‚é
+ •¶Žš‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+
+ 3. •ÏXƒRƒ}ƒ“ƒh‚ł̓J[ƒ\ƒ‹ˆÊ’u‚©‚ç“Á’è‚Ì–Ú“IŒê‚ÅŽw’肳‚ê‚éI’[‚Ü‚Å‚ð•ÏX
+ ‚·‚邱‚Æ‚ª‰Â”\‚Å‚·B—Ⴆ‚Î cw ‚È‚ç‚΃J[ƒ\ƒ‹ˆÊ’u‚©‚ç’PŒê‚ÌI‚í‚è‚Ü‚ÅA
+ c$ ‚È‚ç‚Îs‚ÌI‚í‚è‚Ü‚Å‚ð•ÏX‚µ‚Ü‚·B
+
+ 4. •ÏXƒRƒ}ƒ“ƒh‚ÌŒ`Ž®‚Í
+
+ [‰ñ”] c –Ú“IŒê ‚à‚µ‚­‚Í c [‰ñ”] –Ú“IŒê
+
+‚³‚ŸAŽŸ‚̃ŒƒbƒXƒ“‚Ɉڂè‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 4.1: ˆÊ’u‚ƃtƒ@ƒCƒ‹‚Ìî•ñ
+
+
+ ** ƒtƒ@ƒCƒ‹“à‚ł̈ʒu‚ƃtƒ@ƒCƒ‹‚Ìó‘Ô‚ð•\Ž¦‚·‚é‚É‚Í CTRL-g ‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+ ƒtƒ@ƒCƒ‹“à‚Ì‚ ‚és‚Ɉړ®‚·‚é‚É‚Í SHIFT-G ‚ðƒ^ƒCƒv‚µ‚Ü‚· **
+
+ NOTE: ƒXƒeƒbƒv‚ðŽÀs‚·‚é‘O‚ÉA‚±‚̃ŒƒbƒXƒ“‘S‚Ä‚É–Ú‚ð’Ê‚µ‚Ü‚µ‚傤!!
+
+ 1. CTRL ‚ð‰Ÿ‚µ‚½‚Ü‚Ü g ‚ð‰Ÿ‚µ‚Ü‚µ‚傤Bƒy[ƒW‚̈ê”Ô‰º‚É‚ ‚éƒXƒe[ƒ^ƒXs
+ ‚Ƀtƒ@ƒCƒ‹–¼‚Æs‚ª•\Ž¦‚³‚ê‚é‚Í‚¸‚Å‚·B ƒXƒeƒbƒv 3 ‚Ì‚½‚ß‚És”Ô†‚ð
+ Šo‚¦‚Ä‚¨‚«‚Ü‚µ‚傤B(–óŽÒ’:ƒ‹[ƒ‰[‚ª‚ ‚éꇂ͂»‚¿‚ç‚É’–Ú)
+
+ 2. ʼnºs‚Ɉړ®‚·‚邽‚ß‚É shift-G ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ 3. æ‚Ù‚Ç‚Ìs‚̔Ԇ‚ðƒ^ƒCƒv‚µA shift-G ‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+ ʼn‚É Ctrl-g ‚ð‰Ÿ‚µ‚½s‚É–ß‚Á‚Ä—ˆ‚é‚Í‚¸‚Å‚·B
+ (”Žš‚ðƒ^ƒCƒv‚µ‚Ä‚¢‚é‚Æ‚«‚ɂ͉æ–Ê‚É•\Ž¦‚³‚ê‚Ü‚¹‚ñ)
+
+ 4. Ž©M‚ªŽ‚Ä‚½‚çƒXƒeƒbƒv 1 ‚©‚ç 3 ‚ðŽÀs‚µ‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 4.2: ŒŸõƒRƒ}ƒ“ƒh
+
+
+ ** Œê‹å‚ðŒŸõ‚·‚é‚É‚Í / ‚ÆA‘O•ûŒŸõ‚·‚éŒê‹å‚ðƒ^ƒCƒv‚µ‚Ü‚·B**
+
+ 1. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚Å / ‚Æ‚¢‚¤•¶Žš‚ðƒ^ƒCƒv‚µ‚Ü‚·B‰æ–ʈê”Ô‰º‚É : ƒRƒ}ƒ“ƒh
+ ‚Æ“¯‚¶—l‚É / ‚ªŒ»‚ê‚邱‚Æ‚É‹C‚­‚Å‚µ‚傤B
+
+ 2. ‚Å‚ÍA'errroor' <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B‚±‚ꂪŒŸõ‚µ‚½‚¢’PŒê‚Å‚·B
+
+ 3. “¯‚¶Œê‚ð‚à‚¤ˆê“xŒŸõ‚·‚é‚Æ‚«‚Í ’P‚É n ‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+ ‹t•ûŒü‚ÉŒê‹å‚ðŒŸõ‚·‚é‚Æ‚«‚Í N ‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+
+ 4. ‹t•ûŒü‚ÉŒê‹å‚ðŒŸõ‚µ‚½‚¢ê‡‚ÍA/ ƒRƒ}ƒ“ƒh‚Ì‚©‚í‚è‚É ? ƒRƒ}ƒ“ƒh‚ðŽg—p‚µ
+ ‚Ü‚·B
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+ŒŸõ‚ªƒtƒ@ƒCƒ‹‚ÌI‚í‚è‚É’B‚·‚é‚ÆAƒtƒ@ƒCƒ‹‚Ì擪‚©‚猟õ‚ð‘±s‚µ‚Ü‚·B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 4.3: ‘Ήž‚·‚銇ŒÊ‚ðŒŸõ
+
+
+ ** ‘Ήž‚·‚é ),] ‚â } ‚ðŒŸõ‚·‚é‚É‚Í % ‚ðƒ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚Å (,[ ‚© { ‚Ì‚Ç‚ê‚©‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®
+ ‚µ‚Ü‚µ‚傤B
+
+ 2. ‚»‚±‚Å % ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ 3. ƒJ[ƒ\ƒ‹‚͑Ήž‚·‚銇ŒÊ‚Ɉړ®‚·‚é‚Í‚¸‚Å‚·B
+
+ 4. ʼn‚ÌŠ‡ŒÊ‚Ɉړ®‚·‚é‚É‚Í % ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+NOTE: ‚±‚Ì‹@”\‚ÍŠ‡ŒÊ‚ªˆê’v‚µ‚Ä‚¢‚È‚¢ƒvƒƒOƒ‰ƒ€‚ðƒfƒoƒbƒO‚·‚é‚Ì‚É‚Æ‚Ä‚à–𗧂¿
+ ‚Ü‚·B
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 4.4: ŠÔˆá‚¢‚ð•ÏX‚·‚é•û–@
+
+
+ ** 'old' ‚ð 'new' ‚É’uŠ·‚·‚é‚É‚Í :s/old/new/g ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. :s/thee/the <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B‚±‚̃Rƒ}ƒ“ƒh‚Í‚»‚Ìs‚Åʼn‚ÉŒ©
+ ‚‚©‚Á‚½‚à‚Ì‚É‚¾‚¯s‚È‚í‚ê‚邱‚Æ‚É‹C‚ð‚‚¯‚Ü‚µ‚傤B
+
+ 3. ‚Å‚Í :s/thee/the/g ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤Bs‘S‘Ì‚ð’uŠ·‚·‚邱‚Æ‚ðˆÓ–¡‚µ‚Ü‚·B
+ ‚±‚Ì•ÏX‚Í‚»‚Ìs‚ÅŒ©‚‚©‚Á‚½‘S‚Ẳӊ‚ɑ΂µ‚Äs‚È‚í‚ê‚Ü‚·B
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. •¡”s‚©‚猩‚‚©‚镶Žš‚ð•ÏX‚·‚é‚É‚Í
+ :#,#s/old/new/g #,# ‚Í‚Qs‚Ìs”Ô†‚ðŽw‚µ‚Ü‚·B
+ :%s/old/new/g ƒtƒ@ƒCƒ‹‘S‘Ì‚ÅŒ©‚‚©‚é‚à‚̂ɑ΂µ‚Ä•ÏX‚·‚éB
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 4 —v–ñ
+
+
+ 1. Ctrl-g ‚̓tƒ@ƒCƒ‹‚ł̈ʒu‚ƃtƒ@ƒCƒ‹‚ÌÚׂð•\Ž¦‚µ‚Ü‚·B
+ Shift-G ‚̓tƒ@ƒCƒ‹‚Ìʼnºs‚Ɉړ®‚µ‚Ü‚·Bs”Ô†Œã‚É Shift-G ‚Æ‚·‚é‚Æ
+ ‚»‚Ìs‚Ɉړ®‚µ‚Ü‚·B
+
+ 2. / ‚ÌŒã‚ÉŒê‹å‚ðƒ^ƒCƒv‚·‚é‚Æ‘O•û‚ÉŒê‹å‚ðŒŸõ‚µ‚Ü‚·B
+ ? ‚ÌŒã‚ÉŒê‹å‚ðƒ^ƒCƒv‚·‚é‚ÆŒã•û‚ÉŒê‹å‚ðŒŸõ‚µ‚Ü‚·B
+ ŒŸõ‚ÌŒã n ‚ÅA“¯•ûŒü‚ÉŒŸõ‚ðÄ‚Ñs‚¢A‚Ü‚½ N ‚Å‹t•ûŒü‚ÉŒŸõ‚ðs‚È‚¢‚Ü
+ ‚·B
+
+ 3. (,),[,],{, or } ã‚ɃJ[ƒ\ƒ‹‚ª‚ ‚éó‘Ô‚Å % ‚ðƒ^ƒCƒv‚·‚é‚Æ
+ ‘Ήž‚µ‚½‘΂Ɉړ®‚µ‚Ü‚·B
+
+ 4. Œ»Ýs‚Ìʼn‚Ì old ‚ð new ‚É’uŠ·‚·‚éB :s/old/new
+ Œ»Ýs‚Ì‘S‚Ä‚Ì old ‚ð new ‚É’uŠ·‚·‚éB :s/old/new/g
+ 2‚Â‚Ì # ŠÔ‚ÅŒê‹å‚ð’uŠ·‚·‚éB :#,#s/old/new/g
+ ƒtƒ@ƒCƒ‹‚Ì’†‚Ì‘S‚Ä‚ÌŒŸõŒê‹å‚ð’uŠ·‚·‚éB :%s/old/new/g
+ 'c' ‚ð‰Á‚¦‚é‚Æ’uŠ·‚Ì“x‚ÉŠm”F‚ð‹‚ß‚éB :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 5.1: ŠO•”ƒRƒ}ƒ“ƒh‚ðŽÀs‚·‚é•û–@
+
+
+ ** :! ‚ÌŒã‚ÉŽÀs‚·‚éŠO•”ƒRƒ}ƒ“ƒh‚ðƒ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ‰æ–Ê‚Ìʼnº•”‚ɃJ[ƒ\ƒ‹‚ªˆÚ“®‚·‚é‚悤AŠµ‚êe‚µ‚ñ‚¾ : ‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+ ‚±‚ê‚ŃRƒ}ƒ“ƒh‚ªƒ^ƒCƒv‚Å‚«‚é—l‚É‚È‚è‚Ü‚·B
+
+ 2. ‚±‚±‚Å ! ‚Æ‚¢‚¤•¶Žš(Š´’Q•„)‚ðƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+ ‚±‚ê‚ÅŠO•”ƒVƒFƒ‹ƒRƒ}ƒ“ƒh‚ªŽÀs‚Å‚«‚é—l‚É‚È‚è‚Ü‚·B
+
+ 3. —á‚Æ‚µ‚Ä ! ‚É‘±‚¯‚Ä ls ‚ƃ^ƒCƒv‚µ <ENTER> ‚ð‰Ÿ‚µ‚Ü‚µ‚傤B
+ ƒVƒFƒ‹ƒvƒƒ“ƒvƒg‚̂悤‚ɃfƒBƒŒƒNƒgƒŠ‚̈ꗗ‚ª•\Ž¦‚³‚ê‚é‚Í‚¸‚Å‚·B
+ ‚à‚µ‚­‚Í ls ‚ª“®‚©‚È‚¢‚È‚ç‚Î :!dir ‚ðŽg—p‚µ‚Ü‚µ‚傤B
+
+---> NOTE: ‚±‚Ì•û–@‚É‚æ‚Á‚Ä‚ ‚ç‚ä‚éƒRƒ}ƒ“ƒh‚ªŽÀs‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
+
+---> NOTE: ‘S‚Ä‚Ì : ƒRƒ}ƒ“ƒh‚Í <ENTER> ‚ð‰Ÿ‚µ‚ÄI—¹‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 5.2: ‚»‚Ì‘¼‚̃tƒ@ƒCƒ‹‚Ö‘‚«ž‚Ý
+
+
+ ** ƒtƒ@ƒCƒ‹‚Ö•ÏX‚ð•Û‘¶‚·‚é‚É‚Í :w ƒtƒ@ƒCƒ‹–¼ ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ƒfƒBƒŒƒNƒgƒŠ‚̈ꗗ‚𓾂邽‚ß‚É :!dir ‚à‚µ‚­‚Í :!ls ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+ ‚±‚Ì‚ ‚Æ <ENTER> ‚ð‰Ÿ‚·‚Ì‚ÍŠù‚É‚²‘¶’m‚Å‚·‚ËB
+
+ 2. TEST ‚̂悤‚ÉA‚»‚̃fƒBƒŒƒNƒgƒŠ‚É–³‚¢ƒtƒ@ƒCƒ‹–¼‚ðˆê‚‘I‚Ñ‚Ü‚·B
+
+ 3. ‚Å‚Í :w TEST ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 (TEST ‚ÍA‘I‚ñ‚¾ƒtƒ@ƒCƒ‹–¼‚Å‚·)B
+
+ 4. ‚±‚ê‚É‚æ‚èƒtƒ@ƒCƒ‹‘S‘Ì‚ª TEST ‚Æ‚¢‚¤–¼‘O‚Å•Û‘¶‚³‚ê‚Ü‚·B
+ ‚à‚¤ˆê“x :!dir ‚ƃ^ƒCƒv‚µ‚ÄŠm”F‚µ‚Ä‚Ý‚Ü‚µ‚傤B
+
+---> ‚±‚±‚Å Vim ‚ðI—¹‚µAƒtƒ@ƒCƒ‹–¼ TEST ‚Æ‹¤‚É‹N“®‚·‚é‚ÆA•Û‘¶‚µ‚½Žž‚Ì
+ ƒ`ƒ…[ƒgƒŠƒAƒ‹‚Ì•¡»‚ª‚Å‚«ã‚ª‚é‚Í‚¸‚Å‚·B
+
+ 5. ‚Å‚ÍA :!del TEST ‚ƃ^ƒCƒv‚µ‚ătƒ@ƒCƒ‹‚ð휂µ‚Ä‚Ý‚Ü‚µ‚傤B
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 5.3: ‘I‘ð‚µ‚½‘‚«ž‚Ý
+
+
+ ** •”•ª“I‚É•Û‘¶‚·‚é‚É‚Í :#,# w ƒtƒ@ƒCƒ‹–¼ ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ‚à‚¤ˆê“xƒfƒBƒŒƒNƒgƒŠ‚̈ꗗ‚ðŽæ“¾‚·‚邽‚ß‚É :!ls ‚ƃ^ƒCƒv‚µATEST ‚Ì—l‚É
+ ƒtƒ@ƒCƒ‹‚ðˆê‚‘I‚ñ‚Å‚Ý‚Ü‚µ‚傤B
+
+ 2. ‚±‚̃y[ƒW‚ÌŽn‚߂܂ŃJ[ƒ\ƒ‹‚ðˆÚ“®‚µAƒtƒ@ƒCƒ‹‚Ìs”‚ð’m‚邽‚ß‚É Ctrl-g ‚Æ
+ ƒ^ƒCƒv‚µ‚Ü‚µ‚傤B‚»‚Ìs”Ô†‚ð‰¯‚¦‚Ä‚¨‚«‚Ü‚µ‚傤B
+
+ 3. ‚»‚µ‚ăy[ƒW‚ÌI‚è‚܂ňړ®‚µAÄ“x Ctrl-g ‚ðs‚¢‚Ü‚·B
+ ‚±‚Ìs”Ô†‚à‰¯‚¦‚Ä‚¨‚«‚Ü‚µ‚傤B
+
+ 4. ‚ ‚é•”•ª‚¾‚¯‚ð TEST ‚Æ‚¢‚¤–¼‚Å•Û‘¶‚·‚邽‚ß‚ÉA:#,# w TEST ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+ ‚±‚Ì #,# ‚ÍŠo‚¦‚Ä‚¨‚¢‚½‚Q‚‚̔Ԇ(ã’[,‰º’[) ‚Å‚ ‚èA TEST ‚ªƒtƒ@ƒCƒ‹–¼
+ ‚Æ‚È‚è‚Ü‚·B
+
+ 5. Ä“xAƒtƒ@ƒCƒ‹‚ª‘¶Ý‚·‚邱‚Æ‚ðŠm”F‚·‚邽‚ß‚É :!dir ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤B
+ ‚½‚¾‚µ‚±‚̃tƒ@ƒCƒ‹‚ÍÁ‚µ‚Ä‚Í‚¢‚¯‚Ü‚¹‚ñB
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 5.4: ƒtƒ@ƒCƒ‹‚̎枂Ƈ•¹
+
+
+ ** ƒtƒ@ƒCƒ‹‚Ì’†g‚ð‘}“ü‚·‚é‚É‚Í :r ƒtƒ@ƒCƒ‹–¼ ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. æ‚Ù‚Ç‚Ì TEST ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚·‚邱‚Æ‚ðŠm‚©‚߂邽‚ß‚É :!dir ‚Æ
+ ƒ^ƒCƒv‚µ‚Ü‚µ‚傤B
+
+ 2. ƒJ[ƒ\ƒ‹‚ð‚±‚Ìƒy[ƒW‚Ì擪‚Ɉړ®‚µ‚Ü‚·B
+
+NOTE: ƒXƒeƒbƒv 3 ‚ðŽÀs‚·‚é‚ÆA‰æ–Ê‚É ƒŒƒbƒXƒ“ 5.3 ‚ªŒ»‚í‚ê‚é‚Ì‚ÅAƒJ[ƒ\ƒ‹‚ð
+ ‰º‚Ɉړ®‚µ‚±‚̃ŒƒbƒXƒ“‚Ü‚Å–ß‚è‚Ü‚µ‚傤B
+
+ 3. ‚Å‚ÍA:r TEST ‚ƃ^ƒCƒv‚µ‚Ä TEST ƒtƒ@ƒCƒ‹‚ðŽæž‚Ý‚Ü‚µ‚傤B‚±‚Ì TEST ‚Í
+ ƒtƒ@ƒCƒ‹–¼‚Å‚·B
+
+NOTE: ƒtƒ@ƒCƒ‹‚̎枂݂̓J[ƒ\ƒ‹‚̈ʒu‚©‚çs‚í‚ê‚Ü‚·B
+
+ 4. Žæž‚ñ‚¾ƒtƒ@ƒCƒ‹‚ðŠm”F‚µ‚Ä‚Ý‚Ü‚µ‚傤BƒJ[ƒ\ƒ‹‚ð–ß‚·‚ÆAƒŒƒbƒXƒ“5.3 ‚Ì
+ ƒIƒŠƒWƒiƒ‹‚ƃtƒ@ƒCƒ‹‚É‚æ‚é‚à‚Ì‚Ì2‚‚ª‚ ‚邱‚Æ‚ª‚í‚©‚è‚Ü‚·B
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 5 —v–ñ
+
+
+ 1. :!command ‚É‚æ‚Á‚Ä ŠO•”ƒRƒ}ƒ“ƒh‚ðŽÀs‚µ‚Ü‚·B
+
+ ‚æ‚­Žg‚¤—á:
+ :!ls - ƒfƒBƒŒƒNƒgƒŠ‚̃tƒ@ƒCƒ‹ˆê——‚ðŒ©‚éB
+ :!del ƒtƒ@ƒCƒ‹–¼ - ƒtƒ@ƒCƒ‹–¼‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚Ì휂·‚éB
+
+ 2. :w ƒtƒ@ƒCƒ‹–¼ ‚É‚æ‚Á‚ătƒ@ƒCƒ‹–¼‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ªƒfƒBƒXƒN‚É‘‚«ž‚Ü‚ê‚éB
+
+ 3. :#,# w ƒtƒ@ƒCƒ‹–¼ ‚É‚æ‚Á‚Ä # ‚©‚ç # ‚Ü‚Å‚ð•Û‘¶‚·‚éB
+
+ 4. :r ƒtƒ@ƒCƒ‹–¼ ‚É‚æ‚èƒtƒ@ƒCƒ‹–¼‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ªƒfƒBƒXƒN‚æ‚èŽæž‚Ü‚êA
+ ƒJ[ƒ\ƒ‹ˆÊ’u‚̉º‚É‘}“ü‚³‚ê‚éB
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 6.1: ƒI[ƒvƒ“ƒRƒ}ƒ“ƒh
+
+
+ ** o ‚ðƒ^ƒCƒv‚·‚é‚ÆAƒJ[ƒ\ƒ‹‚̉º‚Ìs‚ªŠJ‚«A‘}“üƒ‚[ƒh‚É“ü‚è‚Ü‚· **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. o (¬•¶Žš) ‚ðƒ^ƒCƒv‚µ‚ÄAƒJ[ƒ\ƒ‹‚̉º‚Ìs‚ðŠJ‚«A‘}“üƒ‚[ƒh‚É“ü‚è‚Ü‚·B
+
+ 3. ---> ‚Æ‹L‚³‚ꂽs‚ðŽÊ‚µA<ESC> ‚ƃ^ƒCƒv‚µ‚ĒljÁƒ‚[ƒh‚ðI—¹‚µ‚Ü‚µ‚傤B
+
+---> o ‚ðƒ^ƒCƒv‚·‚é‚ƃJ[ƒ\ƒ‹‚ÍŠJ‚¢‚½s‚ÖˆÚ“®‚µ‘}“üƒ‚[ƒh‚É“ü‚è‚Ü‚·B
+
+ 4. ƒJ[ƒ\ƒ‹‚Ìã‚Ìs‚É‘}“ü‚·‚é‚É‚ÍA¬•¶Žš‚Ì o ‚Å‚Í‚È‚­A’Pƒ‚ɑ啶Žš‚Ì O
+ ‚ðƒ^ƒCƒv‚µ‚Ü‚·BŽŸ‚Ìs‚ÅŽŽ‚µ‚Ä‚Ý‚Ü‚µ‚傤B
+‚±‚Ìs‚Ìã‚Ö‘}“ü‚·‚é‚É‚ÍA‚±‚Ìs‚ÖƒJ[ƒ\ƒ‹‚ð’u‚¢‚Ä Shift-O ‚ðƒ^ƒCƒv‚µ‚Ü‚·B
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 6.2: ’ljÁƒRƒ}ƒ“ƒh
+
+
+ ** ƒJ[ƒ\ƒ‹‚ÌŽŸ‚̈ʒu‚©‚çƒeƒLƒXƒg‚ð’ljÁ‚·‚é‚É‚Í a ‚ƃ^ƒCƒv‚µ‚Ü‚· **
+
+ 1. ƒm[ƒ}ƒ‹ƒ‚[ƒh‚É‚µ‚Ĉȉº‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽʼn‚Ìs‚Å $ ‚ðƒ^ƒCƒv‚µ
+ ‚ÄAI’[‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. ƒJ[ƒ\ƒ‹‚Ì•¶Žš‚ÌŒã‚ë‚ɃeƒLƒXƒg‚ð’ljÁ‚·‚邽‚ß‚É a (¬•¶Žš) ‚ðƒ^ƒCƒv‚µ‚Ü
+ ‚·B
+
+NOTE: ‚±‚ê‚ÍÅŒã‚Ì•¶Žš‚ɂăeƒLƒXƒg‚ð‘}“ü‚µA<ESC> ‚ðƒ^ƒCƒv‚µ‚ăJ[ƒ\ƒ‹‚ð‰E‚É
+ ˆÚ“®‚µAÅŒã‚É x ƒ^ƒCƒv‚µ‚Äs––‚ɒljÁ‚·‚é‚Æ‚¢‚Á‚½‚悤‚È i ‚̃^ƒCƒv‚ð
+ ”ð‚¯‚é‚±‚Æ‚ª‚«‚Ü‚·B
+
+ 3. ‚³‚Äʼn‚Ìs‚ðŠ®¬‚µ‚Ü‚µ‚傤BƒeƒLƒXƒg‚ª‘}“ü‚³‚ê‚éˆÊ’u‚𜂯‚ÎA
+ ’ljÁƒRƒ}ƒ“ƒh‚Í‘}“üƒ‚[ƒh‚Æ‚Ü‚Á‚½‚­“¯‚¶‚Å‚·B
+
+---> ‚±‚Ìs‚ÅAs––‚É•¶Í‚ð’ljÁ‚·‚é
+---> ‚±‚Ìs‚ÅAs––‚É•¶Í‚ð’ljÁ‚·‚é—ûK‚ð‚·‚é‚±‚Æ‚ª‚Å‚«‚é‚Å‚µ‚傤B
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 6.3: ‚»‚Ì‘¼‚Ì’uŠ·
+
+
+ ** 1•¶ŽšˆÈã‚ð’u‚«Š·‚¦‚é‚ɂ͑啶Žš‚Ì R ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 **
+
+ 1. ˆÈ‰º‚Ì ---> ‚Æ‹L‚³‚ꂽ‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+
+ 2. ---> ‚Æ‹L‚³‚ꂽ‚Qs–ڂƈႤAʼn‚Ì’PŒê‚Ì擪‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B
+ (’PŒê 'last')
+
+ 3. ‚±‚±‚Å R ‚ðƒ^ƒCƒv‚µ‚ÄAʼn‚Ìs‚ÆŽŸ‚Ìs‚ª“¯‚¶‚É‚È‚é‚悤‚ÉŠù‘¶‚̃eƒLƒXƒg
+ ‚Öã‘‚«ƒ^ƒCƒv‚µA‚Ps–Ú‚ÌŽc‚è‚Ì•”•ª‚ð‘‚«Š·‚¦‚Ü‚µ‚傤B
+
+---> 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. ƒ‚[ƒh‚𔲂¯‚邽‚ß‚É <ESC> ‚ðƒ^ƒCƒv‚·‚é‚ÆA•ÏX‚µ‚Ä‚¢‚È‚¢•”•ª‚ªŽc‚邱‚Æ
+ ‚É’ˆÓ‚µ‚Ü‚µ‚傤B
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 6.4: ƒIƒvƒVƒ‡ƒ“‚ÌÝ’è
+
+
+ ** ŒŸõ‚â’uŠ·‚Ìۂɑ啶Žš‚Ƭ•¶Žš‚𖳎‹‚·‚é—l‚ɃIƒvƒVƒ‡ƒ“‚ðݒ肵‚Ü‚· **
+
+
+ 1. ˆÈ‰º‚Ì—l‚Ƀ^ƒCƒv‚µ‚Ä 'ignore' ‚ðŒŸõ‚µ‚Ü‚µ‚傤:
+ /ignore
+ n ‚ð‰Ÿ‚µ‚ĉ½“x‚©ŒŸõ‚ðŒJ‚è•Ô‚µ‚Ü‚·B
+
+ 2. ˆÈ‰º‚Ì—l‚Ƀ^ƒCƒv‚µ‚Ä 'ic' (Ignore Case ‚Ì—ª‚Å‚·) ƒIƒvƒVƒ‡ƒ“‚ðݒ肵‚Ü‚·B
+ :set ic
+
+ 3. ‚Å‚Í n ‚É‚æ‚Á‚Ä‚à‚¤1“x 'ignore' ‚ðŒŸõ‚µ‚Ü‚·B
+ n ‚ð‰Ÿ‚µ‚Ä‚³‚ç‚É”‰ñŒŸõ‚ðŒJ‚è•Ô‚µ‚Ü‚µ‚傤B
+
+ 4. 'hlsearch' ‚Æ 'incsearch' ƒIƒvƒVƒ‡ƒ“‚ðˆÈ‰º‚Ì—l‚Éݒ肵‚Ü‚µ‚傤B
+ :set hls is
+
+ 5. ‚à‚¤ˆê“xŒŸõƒRƒ}ƒ“ƒh‚ð“ü—Í‚µ‚ÄA‰½‚ª‹N‚±‚é‚©Œ©‚Ä‚Ý‚Ü‚µ‚傤:
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 6 —v–ñ
+
+
+ 1. o ‚ðƒ^ƒCƒv‚·‚é‚ƃJ[ƒ\ƒ‹‚̉º‚Ìs‚ðŠJ‚¯‚ÄA‚»‚±‚Å‘}“üƒ‚[ƒh‚É‚È‚éB
+ O (‘啶Žš) ‚ðƒ^ƒCƒv‚·‚é‚ƃJ[ƒ\ƒ‹‚Ìã‚Ìs‚Å‘}“üƒ‚[ƒh‚É‚È‚éB
+
+ 2. ƒJ[ƒ\ƒ‹ã‚Ì•¶Žš‚ÌŽŸ‚©‚çƒeƒLƒXƒg‚ð’ljÁ‚·‚é‚É‚Í a ‚ƃ^ƒCƒv‚·‚éB
+ s––‚ÉŽ©“®‚ŃeƒLƒXƒg‚ð‘}“ü‚·‚é‚ɂ͑啶Žš A ‚ðƒ^ƒCƒv‚·‚éB
+
+ 3. ‘啶Žš‚Ì R ‚ðƒ^ƒCƒv‚·‚é‚Æ’uŠ·ƒ‚[ƒh‚É“ü‚èA<ESC>‚ð‰Ÿ‚·‚Æ”²‚¯‚éB
+
+ 4. ":set xxx" ‚ƃ^ƒCƒv‚·‚é‚ƃIƒvƒVƒ‡ƒ“ "xxx" ‚ªÝ’肳‚ê‚éB
+
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 7: ƒIƒ“ƒ‰ƒCƒ“ƒwƒ‹ƒvƒRƒ}ƒ“ƒh
+
+ ** ƒIƒ“ƒ‰ƒCƒ“ƒwƒ‹ƒv‚ðŽg—p‚µ‚Ü‚µ‚傤 **
+
+ Vim ‚É‚ÍL”͂ɂ킽‚éƒIƒ“ƒ‰ƒCƒ“ƒwƒ‹ƒvƒVƒXƒeƒ€‚ª‚ ‚è‚Ü‚·B
+ ƒwƒ‹ƒv‚ðŠJŽn‚·‚é‚É‚ÍA‚±‚ê‚ç3‚‚̂ǂꂩ1‚Â‚ðŽŽ‚µ‚Ä‚Ý‚Ü‚µ‚傤:
+ - ƒwƒ‹ƒvƒL[ <HELP> ‚ð‰Ÿ‚·(‚à‚µ‚ ‚é‚È‚ç‚Î)B
+ - <F1> ƒL[‚ð‰Ÿ‚·(‚à‚µ‚ ‚é‚È‚ç‚Î)B
+ - :help <ENTER> ‚ƃ^ƒCƒv‚·‚éB
+
+ ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE‚ð•Â‚¶‚é‚É‚Í :q <ENTER> ‚ƃ^ƒCƒv‚µ‚Ü‚·B
+
+ ":help" ƒRƒ}ƒ“ƒh‚Ɉø”‚ð—^‚¦‚邱‚Æ‚É‚æ‚èA‚ ‚ç‚ä‚é‘è–¼‚̃wƒ‹ƒv‚ðŒ©‚Â‚¯‚é
+ ‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚ê‚ç‚ðŽŽ‚µ‚Ä‚Ý‚Ü‚µ‚傤(<ENTER> ‚ðƒ^ƒCƒv‚µ–Y‚ê‚È‚¢‚悤‚É):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ƒŒƒbƒXƒ“ 8: ‹N“®ƒXƒNƒŠƒvƒg‚Ìì¬
+
+ ** Vim ‚Ì“Á’¥‚ð”­Šö‚·‚é **
+
+ Vim ‚É‚Í Vi ‚æ‚è‚à‘½‚­‚Ì“Á’¥‚𓥂܂¦‚Ä‚¢‚Ü‚ªA‚»‚Ì‚Ù‚Æ‚ñ‚ǂ͉Šúó‘Ô‚É‚Ä
+ Žg—p•s‰Â‚Æ‚È‚Á‚Ä‚¢‚Ü‚·B‚æ‚葽‚­‚Ì“Á’¥‚ðŽg‚¢‚Í‚¶‚ß‚é‚É‚Í "vimrc" ƒtƒ@ƒCƒ‹
+ ‚ð쬂µ‚Ü‚·B
+
+ 1. "vimrc" ƒtƒ@ƒCƒ‹‚Ì•ÒW‚ðŠJŽn‚·‚éB‚±‚ê‚̓VƒXƒeƒ€‚Ɉˑ¶‚µ‚Ü‚·B
+ :edit ~/.vimrc UNIX Œü‚¯
+ :edit $VIM/_vimrc MS-Windows Œü‚¯
+
+ 2. ‚±‚±‚ŃTƒ“ƒvƒ‹‚Ì "vimrc" ‚ð“Ç‚Ýž‚Ý‚Ü‚·B
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. ˆÈ‰º‚̂悤‚Ƀtƒ@ƒCƒ‹‚Ö‘‚«ž‚Ý‚Ü‚·B
+
+ :write
+
+ ŽŸ‰ñ Vim ‚ð‹N“®‚·‚é‚ÆAF‚¯\•¶‚ªŽg‚¦‚é‚悤‚É‚È‚é‚Å‚µ‚傤B
+ ‚±‚Ì "vimrc" ƒtƒ@ƒCƒ‹‚ÖA‚¨D‚Ý‚ÌÝ’è‚ð’ljÁ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ ‚±‚ê‚É‚Ä Vim ‚̃`ƒ…[ƒgƒŠƒAƒ‹‚ðI‚í‚è‚Ü‚·BƒGƒfƒBƒ^‚ðŠÈ’P‚ÉA‚µ‚©‚à[•ª‚É
+ Žg‚¤‚±‚Æ‚ª‚Å‚«‚é‚悤‚É‚ÆAVim ‚ÌŽ‚ŠT”O‚Ì—v“_‚Ì‚Ý‚ð“`‚¦‚悤‚Æ‚µ‚Ü‚µ‚½B
+ Vim ‚É‚Í‚³‚ç‚É‘½‚­‚̃Rƒ}ƒ“ƒh‚ª‚ ‚èA‚±‚±‚Å‘S‚Ä‚ðà–¾‚·‚邱‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB
+ ˆÈ~‚̓†[ƒUƒ}ƒjƒ…ƒAƒ‹‚ðŽQÆ‚­‚¾‚³‚¢: "help :user-manual"
+
+ ‚±‚êˆÈŒã‚ÌŠwK‚Ì‚½‚ß‚ÉAŽŸ‚Ì–{‚ð„‘E‚µ‚Ü‚·B
+ Vim - Vi Improved - by Steve Oualline
+ o”ÅŽÐ: New Riders
+ ʼn‚Ì–{‚ÍŠ®‘S‚É Vim ‚Ì‚½‚ß‚É‘‚©‚ê‚Ü‚µ‚½B‚Æ‚è‚킯‰SŽÒ‚É‚Í‚¨§‚ß‚Å‚·B
+ ‘½‚­‚Ì—á‘è‚â}”Å‚ªŒfÚ‚³‚ê‚Ä‚¢‚Ü‚·B
+ ŽŸ‚ÌURL‚ðŽQÆ‚µ‚ĉº‚³‚¢ http://iccf-holland.org/click5.html
+
+ ŽŸ‚Í Vim ‚æ‚è‚à Vi ‚ɂ‚¢‚Ä‘‚©‚ꂽŒÃ‚¢–{‚Å‚·‚ª„‘E‚µ‚Ü‚·:
+ Learning the Vi Editor - by Linda Lamb
+ o”ÅŽÐ: O'Reilly & Associates Inc.
+ Vi ‚Å‚â‚肽‚¢‚ÆŽv‚¤‚±‚Æ‚Ù‚Ú‘S‚Ä‚ð’m‚邱‚Æ‚ª‚Å‚«‚é—Ç‘‚Å‚·B
+ ‘æ6”Å‚Å‚ÍAVim ‚ɂ‚¢‚Ä‚Ìî•ñ‚àŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B
+
+ ‚±‚̃`ƒ…[ƒgƒŠƒAƒ‹‚Í Colorado State University ‚Ì Charles Smith ‚̃AƒCƒfƒA
+ ‚ðŠî‚ÉAColorado School of Mines ‚Ì Michael C. Pierce ‚Æ Robert K. Ware ‚Ì
+ —¼–¼‚É‚æ‚Á‚Ä‘‚©‚ê‚Ü‚µ‚½B E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+ “ú–{Œê–ó ¼–{‘×O E-mail:mattn@mail.goo.ne.jp
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ vi:set ts=8 sts=4 sw=4 tw=76:
diff --git a/runtime/tutor/tutor.ja.utf-8 b/runtime/tutor/tutor.ja.utf-8
new file mode 100644
index 000000000..ae5677ba3
--- /dev/null
+++ b/runtime/tutor/tutor.ja.utf-8
@@ -0,0 +1,811 @@
+===============================================================================
+= V I M æ•™ 本 (ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«) 㸠よ ㆠ㓠ã - Version 1.5 =
+===============================================================================
+
+ Vim ã¯ã€ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§èª¬æ˜Žã™ã‚‹ã«ã¯å¤šã™ãŽã‚‹ç¨‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å‚™ãˆãŸ
+ éžå¸¸ã«å¼·åŠ›ãªã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã§ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã€ã‚ãªãŸãŒ Vim
+ を万能エディターã¨ã—ã¦ä½¿ã„ã“ãªã›ã‚‹ã‚ˆã†ã«ãªã‚‹ã®ã«å分ãªã‚³ãƒžãƒ³ãƒ‰ã«ã¤ã„ã¦
+ 説明をã™ã‚‹ã‚ˆã†ãªã£ã¦ã„ã¾ã™ã€‚
+
+ ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’完了ã™ã‚‹ã®ã«å¿…è¦ãªæ™‚é–“ã¯ã€è¦šãˆãŸã‚³ãƒžãƒ³ãƒ‰ã‚’試ã™ã®ã«ã©ã‚Œ
+ ã ã‘時間を使ã†ã®ã‹ã«ã‚‚よりã¾ã™ãŒã€ãŠã‚ˆã25〜30分ã§ã™ã€‚
+
+ å­¦ã¶ã‚³ãƒžãƒ³ãƒ‰ã«ã¯ã“ã®æ–‡ç« ã‚’変更ã™ã‚‹ã‚‚ã®ã‚‚ã‚ã‚Šã¾ã™ã€‚練習を始ã‚ã‚‹å‰ã«ã‚³
+ ピーを作æˆã—ã¾ã—ょã†("vimtutor"ã—ãŸãªã‚‰ã°ã€æ—¢ã«ã‚³ãƒ”ーã•ã‚Œã¦ã„ã¾ã™)。
+
+ ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ãŒã€ä½¿ã†ã“ã¨ã§è¦šãˆã‚‰ã‚Œã‚‹ä»•çµ„ã¿ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’ã€å¿ƒ
+ ã—ã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。正ã—ã学習ã™ã‚‹ã«ã¯ã‚³ãƒžãƒ³ãƒ‰ã‚’実際ã«è©¦ã•ãªã‘
+ ã‚Œã°ãªã‚‰ãªã„ã®ã§ã™ã€‚文章を読んã ã ã‘ãªã‚‰ã°ã€ãã£ã¨å¿˜ã‚Œã¦ã—ã¾ã„ã¾ã™!。
+
+ ã•ãã€Capsロック(Shift-Lock)キーãŒæŠ¼ã•ã‚Œã¦ã„ãªã„ã“ã¨ã‚’確èªã—ãŸå¾Œã€
+ ç”»é¢ã«ãƒ¬ãƒƒã‚¹ãƒ³1.1 ãŒå…¨éƒ¨è¡¨ç¤ºã•ã‚Œã‚‹ã¨ã“ã‚ã¾ã§ã€j キーを押ã—ã¦ã‚«ãƒ¼ã‚½ãƒ«ã‚’
+ 移動ã—ã¾ã—ょã†ã€‚
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 1.1: カーソルã®ç§»å‹•
+
+
+ ** カーソルを移動ã™ã‚‹ã«ã¯ã€ç¤ºã•ã‚Œã‚‹æ§˜ã« h,j,k,l を押ã—ã¾ã™ **
+ ^
+ k ヒント: h キーã¯å·¦æ–¹å‘ã«ç§»å‹•ã—ã¾ã™ã€‚
+ < h l > l キーã¯å³æ–¹å‘ã«ç§»å‹•ã—ã¾ã™ã€‚
+ j j キーã¯ä¸‹çŸ¢å°ã‚­ãƒ¼ã®ã‚ˆã†ãªã‚­ãƒ¼ã§ã™ã€‚
+ v
+ 1. 移動ã«æ…£ã‚Œã‚‹ã¾ã§ã€ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã§ã‚«ãƒ¼ã‚½ãƒ«ç§»å‹•ã•ã›ã¾ã—ょã†ã€‚
+
+ 2. 下ã¸ã®ã‚­ãƒ¼(j)を押ã—ã¤ã¥ã‘ã‚‹ã¨ã€é€£ç¶šã—ã¦ç§»å‹•ã§ãã¾ã™ã€‚
+---> ã“ã‚Œã§æ¬¡ã®ãƒ¬ãƒƒã‚¹ãƒ³ã«ç§»å‹•ã™ã‚‹æ–¹æ³•ãŒã‚ã‹ã‚Šã¾ã—ãŸã­ã€‚
+
+ 3. 下ã¸ã®ã‚­ãƒ¼ã‚’使ã£ã¦ã€ãƒ¬ãƒƒã‚¹ãƒ³1.2 ã«ç§»å‹•ã—ã¾ã—ょã†ã€‚
+
+NOTE: 何をタイプã—ã¦ã„ã‚‹ã‹åˆ¤ã‚‰ãªããªã£ãŸã‚‰ã€<ESC>を押ã—ã¦ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã—ã¾
+ ã™ã€‚ãã‚Œã‹ã‚‰å…¥åŠ›ã—よã†ã¨ã—ã¦ã„ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’å†å…¥åŠ›ã—ã¾ã—ょã†ã€‚
+
+NOTE: カーソルキーã§ã‚‚移動ã§ãã¾ã™ã€‚ã—ã‹ã— hjkl を使用ã™ã‚‹ã“ã¨ã«ä¸€åº¦æ…£ã‚Œã¦ã—ã¾
+ ãˆã°ã€ã¯ã‚‹ã‹ã«é€Ÿã移動ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 1.2: VIM ã®èµ·å‹•ã¨çµ‚了
+
+
+ !! NOTE: 以下ã®ã‚らゆるステップを行ã†å‰ã«ã€ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’読ã¿ã¾ã—ょã†!!
+
+ 1. <ESC>キーを押ã—ã¾ã—ょã†ã€‚(確実ã«ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã™ã‚‹ãŸã‚)
+
+ 2. 次ã®ã‚ˆã†ã«ã‚¿ã‚¤ãƒ—: :q! <ENTER>
+
+---> ã“ã‚Œã«ã‚ˆã‚Šç·¨é›†ã—ãŸå†…容をä¿å­˜ã›ãšã«ã‚¨ãƒ‡ã‚£ã‚¿ãŒçµ‚了ã—ã¾ã™ã€‚
+ 編集内容をä¿å­˜ã—ã¦çµ‚了ã™ã‚‹ã¨ãã¯æ¬¡ã®ã‚ˆã†ã«ã‚¿ã‚¤ãƒ—ã—ã¾ã™:
+ :wq <ENTER>
+
+ 3. シェルプロンプトã‹ã‚‰ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’始ã‚ã‚‹ã«ã¯ã‚³ãƒžãƒ³ãƒ‰ã‚’タイプã—ã¾ã™ã€‚
+ ãã®ã‚³ãƒžãƒ³ãƒ‰ã¯: vimtutor <ENTER>
+ 通常ã¯ã“ã†ã§ã—ょã†: vim tutor <ENTER>
+
+---> 'vim' 㯠Vim エディタã®èµ·å‹•ã‚’ã€'tutor' ã¯ç·¨é›†ã—ãŸã„ファイルをæ„味ã—ã¾ã™ã€‚
+
+ 4. ã“ã‚Œã¾ã§ã®ã‚¹ãƒ†ãƒƒãƒ—を覚ãˆè‡ªä¿¡ãŒã¤ã„ãŸãªã‚‰ã°ã€ã‚¹ãƒ†ãƒƒãƒ— 1 ã‹ã‚‰ 3 ã¾ã§ã‚’実
+ éš›ã«è©¦ã—ã¦ã€Vim ã‚’1度終了ã—ã¦ã‹ã‚‰å†ã³èµ·å‹•ã—ã¾ã—ょã†ã€‚ãã‚Œã‹ã‚‰ãƒ¬ãƒƒã‚¹ãƒ³
+ 1.3ã¾ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã•ã›ã¾ã—ょã†ã€‚
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 1.3: テキスト編集 - 削除
+
+
+ ** ノーマルモードã«ã¦ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã®æ–‡å­—を削除ã™ã‚‹ã«ã¯ x を押ã—ã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. é–“é•ã„を修正ã™ã‚‹ãŸã‚ã«ã€å‰Šé™¤ã™ã‚‹æœ€åˆã®æ–‡å­—ã¾ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã™ã€‚
+
+ 3. ä¸å¿…è¦ãªæ–‡å­—ã‚’ x を押ã—ã¦å‰Šé™¤ã—ã¾ã—ょã†ã€‚
+
+ 4. æ–‡ãŒæ­£ã—ããªã‚‹ã¾ã§ ステップ 2 ã‹ã‚‰ 4 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ょã†ã€‚
+
+---> ãã® ã†ã†ã•ãŽ 㯠ã¤ã¤ãã ã‚’ ã“ãˆãˆã¦ã¦ ã¨ã³ã¯ã­ãŸãŸ
+
+ 5. è¡ŒãŒæ­£ã—ããªã£ãŸã‚‰ã€ãƒ¬ãƒƒã‚¹ãƒ³ 1.4 ã«ç§»ã‚Šã¾ã—ょã†ã€‚
+
+NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã実際ã«ã‚„ã£ã¦ã¿ã¾ã—ょã†ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 1.4: テキスト編集 - 挿入
+
+
+ ** ノーマルモードã«ã¦ãƒ†ã‚­ã‚¹ãƒˆã‚’挿入ã™ã‚‹ã«ã¯ i を押ã—ã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸæœ€åˆã®è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. 1行目を2行目ã¨åŒã˜æ§˜ã«ã™ã‚‹ãŸã‚ã«ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’挿入ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ä½
+ ç½®ã®æ¬¡ã®æ–‡å­—ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã™ã€‚
+
+ 3. i キーを押ã—ã¦ã‹ã‚‰ã€è¿½åŠ ãŒå¿…è¦ãªæ–‡å­—をタイプã—ã¾ã—ょã†ã€‚
+
+ 4. é–“é•ã„を修正ã—ãŸã‚‰ <ESC> を押ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã‚Šã€æ­£ã—ã„æ–‡ã«
+ ãªã‚‹æ§˜ã«ã‚¹ãƒ†ãƒƒãƒ— 2 ã‹ã‚‰ 4 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ょã†ã€‚
+
+---> ã“ã® ã«ã¯ 足りãªã„ テキスト ã‚る。
+---> ã“ã® è¡Œ ã«ã¯ å¹¾ã¤ã‹ 足りãªã„ テキスト ㌠ã‚る。
+
+ 5. 挿入ã®æ–¹æ³•ãŒã‚ã‹ã£ãŸã‚‰ä¸‹ã®ãƒ¬ãƒƒã‚¹ãƒ³1ã®è¦ç´„を見ã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 1 è¦ç´„
+
+
+ 1. カーソルã¯çŸ¢å°ã‚­ãƒ¼ã‚‚ã—ã㯠hjkl キーã§ç§»å‹•ã—ã¾ã™ã€‚
+ h (å·¦) j (下) k (上) l (å³)
+
+ 2. Vim ã‚’èµ·å‹•ã™ã‚‹ã«ã¯ãƒ—ロンプトã‹ã‚‰ vim ファイルå <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ 3. Vim を終了ã™ã‚‹ã«ã¯ <ESC> :q! <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™(変更を破棄)。
+ ã‚‚ã—ã㯠<ESC> :wq <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™(変更をä¿å­˜)。
+
+ 4. カーソルã®ä¸‹ã®æ–‡å­—を削除ã™ã‚‹ã«ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã§ x ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ 5. カーソルã®ä½ç½®ã«æ–‡å­—を挿入ã™ã‚‹ã«ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã§ i ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+ i テキストã®ã‚¿ã‚¤ãƒ— <ESC>
+
+NOTE: <ESC> キーを押ã™ã¨ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã—ã¾ã™ã€‚ãã®éš›ã€é–“é•ã£ãŸã‚Šå…¥åŠ›é€”中
+ ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+ã•ã¦ã€ç¶šã‘ã¦ãƒ¬ãƒƒã‚¹ãƒ³ 2 を始ã‚ã¾ã—ょã†ã€‚
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 2.1: 削除コマンド
+
+
+ ** å˜èªžã®æœ«å°¾ã¾ã§ã‚’削除ã™ã‚‹ã«ã¯ dw ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょㆠ**
+
+ 1. ノーマルモードã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã« <ESC> を押ã—ã¾ã—ょã†ã€‚
+
+ 2. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 3. 消ã—ãŸã„å˜èªžã®å…ˆé ­ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 4. å˜èªžã‚’削除ã™ã‚‹ãŸã‚ã« dw ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+
+ NOTE: タイプã™ã‚‹ã¨ã€dw ã¨ã„ã†æ–‡å­—ãŒã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã®æœ€ä¸‹è¡Œã«ç¾ã‚ã‚Œã¾ã™ã€‚
+ タイプを間é•ã£ã¦ã—ã¾ã£ãŸæ™‚ã«ã¯ <ESC> を押ã—ã¦ã‚„ã‚Šç›´ã—ã¾ã—ょã†ã€‚
+
+---> ã“ã® æ–‡ ç´™ ã«ã¯ ã„ãã¤ã‹ã® ãŸã®ã—ã„ å¿…è¦ã®ãªã„ å˜èªž ㌠å«ã¾ã‚Œã¦ ã„ã¾ã™ã€‚
+
+ 5. 3 ã‹ã‚‰ 4 ã¾ã§ã‚’æ–‡ãŒæ­£ã—ããªã‚‹ã¾ã§ç¹°ã‚Šè¿”ã—ã€ãƒ¬ãƒƒã‚¹ãƒ³ 2.2 ã«ç§»ã‚Šã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 2.2: ãã®ä»–ã®å‰Šé™¤ã‚³ãƒžãƒ³ãƒ‰
+
+
+ ** è¡Œã®æœ«å°¾ã¾ã§ã‚’削除ã™ã‚‹ã«ã¯ d$ ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょㆠ**
+
+ 1. ノーマルモードã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã®ã« <ESC> を押ã—ã¾ã—ょã†ã€‚
+
+ 2. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 3. æ­£ã—ã„æ–‡ã®æœ«å°¾ã¸ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†(最åˆã® . ã®å¾Œã§ã™)。
+
+ 4. 行末ã¾ã§å‰Šé™¤ã™ã‚‹ã®ã« d$ ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+
+---> 誰ã‹ãŒã“ã®è¡Œã®æœ€å¾Œã‚’2度タイプã—ã¾ã—ãŸã€‚ 2度タイプã—ã¾ã—ãŸã€‚
+
+
+ 5. ã©ã†ã„ã†ã“ã¨ã‹ç†è§£ã™ã‚‹ãŸã‚ã«ã€ãƒ¬ãƒƒã‚¹ãƒ³ 2.3 ã¸ç§»ã‚Šã¾ã—ょã†ã€‚
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: コマンドã¨ç›®çš„語
+
+
+ 削除コマンド d ã®å½¢å¼ã¯æ¬¡ã®æ§˜ã«ãªã£ã¦ã„ã¾ã™:
+
+ [回数] d 目的語 ã‚‚ã—ã㯠d [回数] 目的語
+ ãã‚Œãžã‚Œ:
+ 回数 - ãã®ã‚³ãƒžãƒ³ãƒ‰ã‚’何回繰り返ã™ã‹(çœç•¥å¯èƒ½, çœç•¥ã—ãŸæ™‚㯠=1)。
+ d - 削除コマンド。
+ 目的語 - 何ã«å¯¾ã—ã¦åƒãã‹ã‘ã‚‹ã‹(以下ã«æŒ™ã’ã¾ã™)。
+
+ 目的語一覧:
+ w - カーソルä½ç½®ã‹ã‚‰ç©ºç™½ã‚’å«ã‚€å˜èªžã®æœ«å°¾ã¾ã§ã€‚
+ e - カーソルä½ç½®ã‹ã‚‰ç©ºç™½ã‚’å«ã¾ãªã„å˜èªžã®æœ«å°¾ã¾ã§ã€‚
+ $ - カーソルä½ç½®ã‹ã‚‰è¡Œæœ«ã¾ã§ã€‚
+
+NOTE: 冒険ã—ãŸã„人ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã¦ã‚³ãƒžãƒ³ãƒ‰ãªã—ã«ç›®çš„語を押ã—ã¦
+ ã¿ã¾ã—ょã†ã€‚カーソルãŒç›®çš„語一覧ã§ç¤ºã•ã‚Œã‚‹ä½ç½®ã«ç§»å‹•ã™ã‚‹ã¯ãšã§ã™ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 2.4: ãれ以外ã®å½¢ã®ã‚³ãƒžãƒ³ãƒ‰
+
+
+ ** 行全体を削除ã™ã‚‹ã«ã¯ dd ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょㆠ**
+
+ 行全体ã®å‰Šé™¤ã¯é »ç¹ã«è¡Œãªã†ä½œæ¥­ãªã®ã§ã€Vim ã®è¨­è¨ˆè€…ã¯è¡Œã‚’削除ã™ã‚‹ã®ã«ã¯ã€
+ å˜ã«åˆ—内ã«ã¦2回 d をタイプã™ã‚‹æ–¹ãŒç°¡å˜ã ã‚ã†ã¨åˆ¤æ–­ã—ã¾ã—ãŸã€‚
+
+ 1. 下ã«ã‚る一連ã®ãƒ•ãƒ¬ãƒ¼ã‚ºã®2行目ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+ 2. dd ã¨ã‚¿ã‚¤ãƒ—ã—ã¦è¡Œã‚’削除ã—ã¾ã—ょã†ã€‚
+ 3. ã§ã¯4行目ã«ç§»å‹•ã—ã¦ã¿ã¾ã—ょã†ã€‚
+ 4. 2dd ã¨ã‚¿ã‚¤ãƒ—ã—ã¦2行削除ã—ã¦ã¿ã¾ã—ょã†ã€‚
+ (回数-コマンド-目的語 ã®å½¢å¼ã‚’æ€ã„出ã—ã¾ã—ょã†)
+
+ 1) ãƒãƒ©ã¯èµ¤ã„ã€
+ 2) ã¤ã¾ã‚‰ãªã„ã‚‚ã®ã¯æ¥½ã—ã„ã€
+ 3) スミレã¯é’ã„ã€
+ 4) ç§ã¯è»Šã‚’ã‚‚ã£ã¦ã„ã‚‹ã€
+ 5) 時計ãŒæ™‚刻を告ã’ã‚‹ã€
+ 6) ç ‚ç³–ã¯ç”˜ã„
+ 7) オマエモナー
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 2.5: ã‚„ã‚Šç›´ã—コマンド
+
+
+ ** 最後ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã™ã«ã¯ u を押ã—ã¾ã™ã€‚U ã¯è¡Œå…¨ä½“ã®å–消ã§ã™ã€‚ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€æœ€åˆã®é–“é•ã„ã«ã‚«ãƒ¼ã‚½ãƒ«
+ を移動ã—ã¾ã—ょã†ã€‚
+ 2. x をタイプã—ã¦ã„らãªã„先頭ã®æ–‡å­—を削除ã—ã¾ã—ょã†ã€‚
+ 3. ã•ãã€u をタイプã—ã¦æœ€å¾Œã«å®Ÿè¡Œã—ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã—ã¾ã—ょã†ã€‚
+ 4. 今度ã¯ã€x を使用ã—ã¦èª¤ã‚Šã‚’å…¨ã¦ä¿®æ­£ã—ã¾ã—ょã†ã€‚
+ 5. 大文字㮠U をタイプã—ã¦ã€è¡Œã‚’å…ƒã®çŠ¶æ…‹ã«æˆ»ã—ã¾ã—ょã†ã€‚
+ 6. u をタイプã—ã¦ç›´å‰ã® U コマンドをå–消ã—ã¾ã—ょã†ã€‚
+ 7. ã§ã¯ã‚³ãƒžãƒ³ãƒ‰ã‚’å†å®Ÿè¡Œã™ã‚‹ã®ã« CTRL-R (CTRL を押ã—ãŸã¾ã¾ R を打ã¤)ã‚’
+ 数回タイプã—ã¦ã¿ã¾ã—ょã†(å–消ã®å–消)。
+
+---> ã“ã®ã®è¡Œã®ã®é–“é•ã„を修正々ã—ã€å¾Œã§ãれらã®ä¿®æ­£ã‚’ã‚’å–消ã—ã¾ã¾ã™ã™ã€‚
+
+ 8. ã“ã‚Œã¯ã¨ã¦ã‚‚便利ãªã‚³ãƒžãƒ³ãƒ‰ã§ã™ã€‚ã•ãレッスン 2 è¦ç´„ã«ç§»ã‚Šã¾ã—ょã†ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 2 è¦ç´„
+
+
+ 1. カーソルä½ç½®ã‹ã‚‰å˜èªžã®æœ«å°¾ã¾ã§ã‚’削除ã™ã‚‹ã«ã¯ dw ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ 2. カーソルä½ç½®ã‹ã‚‰è¡Œã®æœ«å°¾ã¾ã§ã‚’削除ã™ã‚‹ã«ã¯ d$ ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ 3. 行全体を削除ã™ã‚‹ã«ã¯ dd ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ 4. ノーマルモードã§ã®ã‚³ãƒžãƒ³ãƒ‰å½¢å¼ã¯
+
+ [回数] コマンド 目的語 ã‚‚ã—ã㯠コマンド [回数] 目的語
+ ãã‚Œãžã‚Œ:
+ 回数 - ãã®ã‚³ãƒžãƒ³ãƒ‰ã‚’何回繰り返ã™ã‹ã€‚
+ コマンド - 削除 d ã®é¡žã§ä½•ã‚’ã™ã‚‹ã‹ã€‚
+ 目的語 - å˜èªž w や行末 $ ãªã©ã®é¡žã§ä½•ã«å¯¾ã—ã¦åƒãã‹ã‘ã‚‹ã‹ã€‚
+
+ 5. å‰å›žã®å‹•ä½œã‚’å–消ã™: u (å°æ–‡å­— u)
+ 行全体ã®å¤‰æ›´ã‚’å–消ã™: U (大文字 U)
+ å–消ã—ã®å–消ã—: CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 3.1: 貼り付ã‘コマンド
+
+
+ ** 最後ã«å‰Šé™¤ã•ã‚ŒãŸè¡Œã‚’カーソルã®å¾Œã«è²¼ã‚Šä»˜ã‘ã‚‹ã«ã¯ p をタイプã—ã¾ã™ **
+
+ 1. 以下ã®æ®µè½ã®æœ€åˆã®è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. dd ã¨ã‚¿ã‚¤ãƒ—ã—ã¦è¡Œã‚’削除ã—ã€Vim ã®ãƒãƒƒãƒ•ã‚¡ã«æ ¼ç´ã—ã¾ã—ょã†ã€‚
+
+ 3. 削除ã—ãŸè¡ŒãŒæœ¬æ¥ã‚ã‚‹ã¹ãä½ç½®ã®ä¸Šã®è¡Œã¾ã§ã€ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã•ã›ã¾ã—ょã†ã€‚
+
+ 4. ノーマルモード㧠p をタイプã—ã¦æ ¼ç´ã—ãŸè¡Œã‚’ç”»é¢ã«æˆ»ã—ã¾ã™ã€‚
+
+ 5. 順番ãŒæ­£ã—ããªã‚‹æ§˜ã«ã‚¹ãƒ†ãƒƒãƒ— 2 ã‹ã‚‰ 4 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ょã†ã€‚
+
+ d) 貴方も学ã¶ã“ã¨ãŒã§ãã‚‹?
+ b) スミレã¯é’ã„ã€
+ c) 知æµã¨ã¯å­¦ã¶ã‚‚ã®ã€
+ a) ãƒãƒ©ã¯èµ¤ã„ã€
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 3.2: ç½®ãæ›ãˆã‚³ãƒžãƒ³ãƒ‰
+
+
+ ** カーソルã®ä¸‹ã®æ–‡å­—ã‚’ç½®ãæ›ãˆã‚‹ã«ã¯ r をタイプã—ã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸæœ€åˆã®è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. 最åˆã®é–“é•ã„ã®å…ˆé ­ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 3. r ã¨ã‚¿ã‚¤ãƒ—ã—ã€é–“é•ã£ã¦ã„る文字を置ãæ›ãˆã‚‹ã€æ­£ã—ã„文字をタイプã—ã¾ã—ょã†ã€‚
+
+ 4. 最åˆã®è¡ŒãŒæ­£ã—ããªã‚‹ã¾ã§ã‚¹ãƒ†ãƒƒãƒ— 2 ã‹ã‚‰ 3 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ょã†ã€‚
+
+---> ã“ã®åˆã‚’人力ã—ãŸæ™‚ã­ã€ãã®äººã¯å¹¾ã¤ã‹å•é•ã£ãŸã‚­ãƒ¼ã‚’押ã—ã‚‚ã—ãŸ!
+---> ã“ã®è¡Œã‚’入力ã—ãŸæ™‚ã«ã€ãã®äººã¯å¹¾ã¤ã‹é–“é•ã£ãŸã‚­ãƒ¼ã‚’押ã—ã¾ã—ãŸ!
+
+ 5. ã•ãã€ãƒ¬ãƒƒã‚¹ãƒ³ 3.2 ã«ç§»ã‚Šã¾ã—ょã†ã€‚
+
+NOTE: 実際ã«è©¦ã—ã¾ã—ょã†ã€‚決ã—ã¦è¦šãˆã‚‹ã ã‘ã«ã¯ã—ãªã„ã“ã¨ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 3.3: 変更コマンド
+
+
+ ** å˜èªžã®ä¸€éƒ¨ã€ã‚‚ã—ãã¯å…¨ä½“を変更ã™ã‚‹ã«ã¯ 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 ã¯å˜èªžã‚’変更ã™ã‚‹ã ã‘ã§ãªãã€æŒ¿å…¥ã‚‚è¡Œãˆã‚‹ã“ã¨ã«æ³¨æ„ã—ã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 3.4: c を使用ã—ãŸãã®ä»–ã®å¤‰æ›´
+
+
+ ** 変更コマンドã¯ã€å‰Šé™¤ã‚³ãƒžãƒ³ãƒ‰ã¨åŒã˜æ§˜ã«ã‚ªãƒ–ジェクトを使用ã—ã¾ã™ **
+
+
+ 1. 変更コマンドã¯ã€å‰Šé™¤ã‚³ãƒžãƒ³ãƒ‰ã¨åŒã˜ã‚ˆã†ãªå‹•ä½œã‚’ã—ã¾ã™ã€‚ãã®å½¢å¼ã¯
+
+ [回数] c 目的語 ã‚‚ã—ã㯠c [回数] 目的語
+
+ 2. オブジェクトもåŒã˜ã§ã€w ã¯å˜èªžã€ $ ã¯è¡Œæœ«ãªã©ã¨ã„ã£ãŸã‚‚ã®ã§ã™ã€‚
+
+ 3. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 4. 最åˆã®é–“é•ã„ã¸ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 5. c$ ã¨ã‚¿ã‚¤ãƒ—ã—ã¦è¡Œã®æ®‹ã‚Šã‚’2行目ã®æ§˜ã«ã—ã€<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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 3 è¦ç´„
+
+
+ 1. æ—¢ã«å‰Šé™¤ã•ã‚ŒãŸãƒ†ã‚­ã‚¹ãƒˆã‚’å†é…ç½®ã™ã‚‹ã«ã¯ã€p をタイプã—ã¾ã™ã€‚ã“ã‚Œã¯å‰Šé™¤ã•
+ ã‚ŒãŸãƒ†ã‚­ã‚¹ãƒˆã‚’カーソルã®å¾Œã«æŒ¿å…¥ã—ã¾ã™(è¡Œå˜ä½ã§å‰Šé™¤ã•ã‚ŒãŸã®ãªã‚‰ã°ã€ã‚«ãƒ¼
+ ソルã®ã‚る次ã®è¡Œã«æŒ¿å…¥ã•ã‚Œã¾ã™)。
+
+ 2. カーソルã®ä¸‹ã®æ–‡å­—ã‚’ç½®ãæ›ãˆã‚‹ã«ã¯ã€r をタイプã—ãŸå¾Œã€ãれを置ãæ›ãˆã‚‹
+ 文字をタイプã—ã¾ã™ã€‚
+
+ 3. 変更コマンドã§ã¯ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã‹ã‚‰ç‰¹å®šã®ç›®çš„語ã§æŒ‡å®šã•ã‚Œã‚‹çµ‚端ã¾ã§ã‚’変更
+ ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚例ãˆã° cw ãªã‚‰ã°ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã‹ã‚‰å˜èªžã®çµ‚ã‚ã‚Šã¾ã§ã€
+ c$ ãªã‚‰ã°è¡Œã®çµ‚ã‚ã‚Šã¾ã§ã‚’変更ã—ã¾ã™ã€‚
+
+ 4. 変更コマンドã®å½¢å¼ã¯
+
+ [回数] c 目的語 ã‚‚ã—ã㯠c [回数] 目的語
+
+ã•ãã€æ¬¡ã®ãƒ¬ãƒƒã‚¹ãƒ³ã«ç§»ã‚Šã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 4.1: ä½ç½®ã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®æƒ…å ±
+
+
+ ** ファイル内ã§ã®ä½ç½®ã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®çŠ¶æ…‹ã‚’表示ã™ã‚‹ã«ã¯ CTRL-g をタイプã—ã¾ã™ã€‚
+ ファイル内ã®ã‚ã‚‹è¡Œã«ç§»å‹•ã™ã‚‹ã«ã¯ SHIFT-G をタイプã—ã¾ã™ **
+
+ NOTE: ステップを実行ã™ã‚‹å‰ã«ã€ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³å…¨ã¦ã«ç›®ã‚’通ã—ã¾ã—ょã†!!
+
+ 1. CTRL を押ã—ãŸã¾ã¾ g を押ã—ã¾ã—ょã†ã€‚ページã®ä¸€ç•ªä¸‹ã«ã‚るステータス行
+ ã«ãƒ•ã‚¡ã‚¤ãƒ«åã¨è¡ŒãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¯ãšã§ã™ã€‚ ステップ 3 ã®ãŸã‚ã«è¡Œç•ªå·ã‚’
+ 覚ãˆã¦ãŠãã¾ã—ょã†ã€‚(訳者注:ルーラーãŒã‚ã‚‹å ´åˆã¯ãã¡ã‚‰ã«æ³¨ç›®)
+
+ 2. 最下行ã«ç§»å‹•ã™ã‚‹ãŸã‚ã« shift-G ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+
+ 3. å…ˆã»ã©ã®è¡Œã®ç•ªå·ã‚’タイプã—〠shift-G をタイプã—ã¾ã—ょã†ã€‚
+ 最åˆã« Ctrl-g を押ã—ãŸè¡Œã«æˆ»ã£ã¦æ¥ã‚‹ã¯ãšã§ã™ã€‚
+ (数字をタイプã—ã¦ã„ã‚‹ã¨ãã«ã¯ç”»é¢ã«è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“)
+
+ 4. 自信ãŒæŒã¦ãŸã‚‰ã‚¹ãƒ†ãƒƒãƒ— 1 ã‹ã‚‰ 3 を実行ã—ã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 4.2: 検索コマンド
+
+
+ ** 語å¥ã‚’検索ã™ã‚‹ã«ã¯ / ã¨ã€å‰æ–¹æ¤œç´¢ã™ã‚‹èªžå¥ã‚’タイプã—ã¾ã™ã€‚**
+
+ 1. ノーマルモード㧠/ ã¨ã„ã†æ–‡å­—をタイプã—ã¾ã™ã€‚ç”»é¢ä¸€ç•ªä¸‹ã« : コマンド
+ ã¨åŒã˜æ§˜ã« / ãŒç¾ã‚Œã‚‹ã“ã¨ã«æ°—ã¥ãã§ã—ょã†ã€‚
+
+ 2. ã§ã¯ã€'errroor' <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚ã“ã‚ŒãŒæ¤œç´¢ã—ãŸã„å˜èªžã§ã™ã€‚
+
+ 3. åŒã˜èªžã‚’ã‚‚ã†ä¸€åº¦æ¤œç´¢ã™ã‚‹ã¨ã㯠å˜ã« n をタイプã—ã¾ã™ã€‚
+ 逆方å‘ã«èªžå¥ã‚’検索ã™ã‚‹ã¨ã㯠N をタイプã—ã¾ã™ã€‚
+
+ 4. 逆方å‘ã«èªžå¥ã‚’検索ã—ãŸã„å ´åˆã¯ã€/ コマンドã®ã‹ã‚ã‚Šã« ? コマンドを使用ã—
+ ã¾ã™ã€‚
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+検索ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã«é”ã™ã‚‹ã¨ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®å…ˆé ­ã‹ã‚‰æ¤œç´¢ã‚’続行ã—ã¾ã™ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 4.3: 対応ã™ã‚‹æ‹¬å¼§ã‚’検索
+
+
+ ** 対応ã™ã‚‹ ),] ã‚„ } を検索ã™ã‚‹ã«ã¯ % をタイプã—ã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã§ (,[ ã‹ { ã®ã©ã‚Œã‹ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動
+ ã—ã¾ã—ょã†ã€‚
+
+ 2. ãã“㧠% ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+
+ 3. カーソルã¯å¯¾å¿œã™ã‚‹æ‹¬å¼§ã«ç§»å‹•ã™ã‚‹ã¯ãšã§ã™ã€‚
+
+ 4. 最åˆã®æ‹¬å¼§ã«ç§»å‹•ã™ã‚‹ã«ã¯ % ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+NOTE: ã“ã®æ©Ÿèƒ½ã¯æ‹¬å¼§ãŒä¸€è‡´ã—ã¦ã„ãªã„プログラムをデãƒãƒƒã‚°ã™ã‚‹ã®ã«ã¨ã¦ã‚‚役立ã¡
+ ã¾ã™ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 4.4: é–“é•ã„を変更ã™ã‚‹æ–¹æ³•
+
+
+ ** 'old' ã‚’ 'new' ã«ç½®æ›ã™ã‚‹ã«ã¯ :s/old/new/g ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. :s/thee/the <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ãã®è¡Œã§æœ€åˆã«è¦‹
+ ã¤ã‹ã£ãŸã‚‚ã®ã«ã ã‘è¡Œãªã‚れるã“ã¨ã«æ°—ã‚’ã¤ã‘ã¾ã—ょã†ã€‚
+
+ 3. ã§ã¯ :s/thee/the/g ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚行全体を置æ›ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚
+ ã“ã®å¤‰æ›´ã¯ãã®è¡Œã§è¦‹ã¤ã‹ã£ãŸå…¨ã¦ã®ç®‡æ‰€ã«å¯¾ã—ã¦è¡Œãªã‚ã‚Œã¾ã™ã€‚
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. 複数行ã‹ã‚‰è¦‹ã¤ã‹ã‚‹æ–‡å­—を変更ã™ã‚‹ã«ã¯
+ :#,#s/old/new/g #,# ã¯ï¼’è¡Œã®è¡Œç•ªå·ã‚’指ã—ã¾ã™ã€‚
+ :%s/old/new/g ファイル全体ã§è¦‹ã¤ã‹ã‚‹ã‚‚ã®ã«å¯¾ã—ã¦å¤‰æ›´ã™ã‚‹ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 4 è¦ç´„
+
+
+ 1. Ctrl-g ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã§ã®ä½ç½®ã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®è©³ç´°ã‚’表示ã—ã¾ã™ã€‚
+ Shift-G ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ€ä¸‹è¡Œã«ç§»å‹•ã—ã¾ã™ã€‚行番å·å¾Œã« Shift-G ã¨ã™ã‚‹ã¨
+ ãã®è¡Œã«ç§»å‹•ã—ã¾ã™ã€‚
+
+ 2. / ã®å¾Œã«èªžå¥ã‚’タイプã™ã‚‹ã¨å‰æ–¹ã«èªžå¥ã‚’検索ã—ã¾ã™ã€‚
+ ? ã®å¾Œã«èªžå¥ã‚’タイプã™ã‚‹ã¨å¾Œæ–¹ã«èªžå¥ã‚’検索ã—ã¾ã™ã€‚
+ 検索ã®å¾Œ n ã§ã€åŒæ–¹å‘ã«æ¤œç´¢ã‚’å†ã³è¡Œã„ã€ã¾ãŸ N ã§é€†æ–¹å‘ã«æ¤œç´¢ã‚’è¡Œãªã„ã¾
+ ã™ã€‚
+
+ 3. (,),[,],{, or } 上ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒã‚る状態㧠% をタイプã™ã‚‹ã¨
+ 対応ã—ãŸå¯¾ã«ç§»å‹•ã—ã¾ã™ã€‚
+
+ 4. ç¾åœ¨è¡Œã®æœ€åˆã® old ã‚’ new ã«ç½®æ›ã™ã‚‹ã€‚ :s/old/new
+ ç¾åœ¨è¡Œã®å…¨ã¦ã® old ã‚’ new ã«ç½®æ›ã™ã‚‹ã€‚ :s/old/new/g
+ 2ã¤ã® # é–“ã§èªžå¥ã‚’ç½®æ›ã™ã‚‹ã€‚ :#,#s/old/new/g
+ ファイルã®ä¸­ã®å…¨ã¦ã®æ¤œç´¢èªžå¥ã‚’ç½®æ›ã™ã‚‹ã€‚ :%s/old/new/g
+ 'c' を加ãˆã‚‹ã¨ç½®æ›ã®åº¦ã«ç¢ºèªã‚’求ã‚る。 :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 5.1: 外部コマンドを実行ã™ã‚‹æ–¹æ³•
+
+
+ ** :! ã®å¾Œã«å®Ÿè¡Œã™ã‚‹å¤–部コマンドをタイプã—ã¾ã™ **
+
+ 1. ç”»é¢ã®æœ€ä¸‹éƒ¨ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒç§»å‹•ã™ã‚‹ã‚ˆã†ã€æ…£ã‚Œè¦ªã—ã‚“ã  : をタイプã—ã¾ã—ょã†ã€‚
+ ã“ã‚Œã§ã‚³ãƒžãƒ³ãƒ‰ãŒã‚¿ã‚¤ãƒ—ã§ãる様ã«ãªã‚Šã¾ã™ã€‚
+
+ 2. ã“ã“㧠! ã¨ã„ã†æ–‡å­—(感嘆符)をタイプã—ã¾ã—ょã†ã€‚
+ ã“ã‚Œã§å¤–部シェルコマンドãŒå®Ÿè¡Œã§ãる様ã«ãªã‚Šã¾ã™ã€‚
+
+ 3. 例ã¨ã—㦠! ã«ç¶šã‘㦠ls ã¨ã‚¿ã‚¤ãƒ—ã— <ENTER> を押ã—ã¾ã—ょã†ã€‚
+ シェルプロンプトã®ã‚ˆã†ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸€è¦§ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¯ãšã§ã™ã€‚
+ ã‚‚ã—ã㯠ls ãŒå‹•ã‹ãªã„ãªã‚‰ã° :!dir を使用ã—ã¾ã—ょã†ã€‚
+
+---> NOTE: ã“ã®æ–¹æ³•ã«ã‚ˆã£ã¦ã‚らゆるコマンドãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+---> NOTE: å…¨ã¦ã® : コマンド㯠<ENTER> を押ã—ã¦çµ‚了ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 5.2: ãã®ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¸æ›¸ãè¾¼ã¿
+
+
+ ** ファイルã¸å¤‰æ›´ã‚’ä¿å­˜ã™ã‚‹ã«ã¯ :w ファイルå ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ **
+
+ 1. ディレクトリã®ä¸€è¦§ã‚’å¾—ã‚‹ãŸã‚ã« :!dir ã‚‚ã—ã㯠:!ls ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+ ã“ã®ã‚㨠<ENTER> を押ã™ã®ã¯æ—¢ã«ã”存知ã§ã™ã­ã€‚
+
+ 2. TEST ã®ã‚ˆã†ã«ã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç„¡ã„ファイルåを一ã¤é¸ã³ã¾ã™ã€‚
+
+ 3. ã§ã¯ :w TEST ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょㆠ(TEST ã¯ã€é¸ã‚“ã ãƒ•ã‚¡ã‚¤ãƒ«åã§ã™)。
+
+ 4. ã“ã‚Œã«ã‚ˆã‚Šãƒ•ã‚¡ã‚¤ãƒ«å…¨ä½“㌠TEST ã¨ã„ã†åå‰ã§ä¿å­˜ã•ã‚Œã¾ã™ã€‚
+ ã‚‚ã†ä¸€åº¦ :!dir ã¨ã‚¿ã‚¤ãƒ—ã—ã¦ç¢ºèªã—ã¦ã¿ã¾ã—ょã†ã€‚
+
+---> ã“ã“㧠Vim を終了ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«å TEST ã¨å…±ã«èµ·å‹•ã™ã‚‹ã¨ã€ä¿å­˜ã—ãŸæ™‚ã®
+ ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã®è¤‡è£½ãŒã§ã上ãŒã‚‹ã¯ãšã§ã™ã€‚
+
+ 5. ã§ã¯ã€ :!del TEST ã¨ã‚¿ã‚¤ãƒ—ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¦ã¿ã¾ã—ょã†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 5.3: é¸æŠžã—ãŸæ›¸ãè¾¼ã¿
+
+
+ ** 部分的ã«ä¿å­˜ã™ã‚‹ã«ã¯ :#,# w ファイルå ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ **
+
+ 1. ã‚‚ã†ä¸€åº¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸€è¦§ã‚’å–å¾—ã™ã‚‹ãŸã‚ã« :!ls ã¨ã‚¿ã‚¤ãƒ—ã—ã€TEST ã®æ§˜ã«
+ ファイルを一ã¤é¸ã‚“ã§ã¿ã¾ã—ょã†ã€‚
+
+ 2. ã“ã®ãƒšãƒ¼ã‚¸ã®å§‹ã‚ã¾ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®è¡Œæ•°ã‚’知るãŸã‚ã« Ctrl-g ã¨
+ タイプã—ã¾ã—ょã†ã€‚ãã®è¡Œç•ªå·ã‚’憶ãˆã¦ãŠãã¾ã—ょã†ã€‚
+
+ 3. ãã—ã¦ãƒšãƒ¼ã‚¸ã®çµ‚ã‚Šã¾ã§ç§»å‹•ã—ã€å†åº¦ Ctrl-g ã‚’è¡Œã„ã¾ã™ã€‚
+ ã“ã®è¡Œç•ªå·ã‚‚憶ãˆã¦ãŠãã¾ã—ょã†ã€‚
+
+ 4. ã‚る部分ã ã‘ã‚’ TEST ã¨ã„ã†åã§ä¿å­˜ã™ã‚‹ãŸã‚ã«ã€:#,# w TEST ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+ ã“ã® #,# ã¯è¦šãˆã¦ãŠã„ãŸï¼’ã¤ã®ç•ªå·(上端,下端) ã§ã‚り〠TEST ãŒãƒ•ã‚¡ã‚¤ãƒ«å
+ ã¨ãªã‚Šã¾ã™ã€‚
+
+ 5. å†åº¦ã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã« :!dir ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
+ ãŸã ã—ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¶ˆã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 5.4: ファイルã®å–è¾¼ã¨åˆä½µ
+
+
+ ** ファイルã®ä¸­èº«ã‚’挿入ã™ã‚‹ã«ã¯ :r ファイルå ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ **
+
+ 1. å…ˆã»ã©ã® TEST ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確ã‹ã‚ã‚‹ãŸã‚ã« :!dir ã¨
+ タイプã—ã¾ã—ょã†ã€‚
+
+ 2. カーソルをã“ã®ãƒšãƒ¼ã‚¸ã®å…ˆé ­ã«ç§»å‹•ã—ã¾ã™ã€‚
+
+NOTE: ステップ 3 を実行ã™ã‚‹ã¨ã€ç”»é¢ã« レッスン 5.3 ãŒç¾ã‚れるã®ã§ã€ã‚«ãƒ¼ã‚½ãƒ«ã‚’
+ 下ã«ç§»å‹•ã—ã“ã®ãƒ¬ãƒƒã‚¹ãƒ³ã¾ã§æˆ»ã‚Šã¾ã—ょã†ã€‚
+
+ 3. ã§ã¯ã€:r TEST ã¨ã‚¿ã‚¤ãƒ—ã—㦠TEST ファイルをå–è¾¼ã¿ã¾ã—ょã†ã€‚ã“ã® TEST ã¯
+ ファイルåã§ã™ã€‚
+
+NOTE: ファイルã®å–è¾¼ã¿ã¯ã‚«ãƒ¼ã‚½ãƒ«ã®ä½ç½®ã‹ã‚‰è¡Œã‚ã‚Œã¾ã™ã€‚
+
+ 4. å–込んã ãƒ•ã‚¡ã‚¤ãƒ«ã‚’確èªã—ã¦ã¿ã¾ã—ょã†ã€‚カーソルを戻ã™ã¨ã€ãƒ¬ãƒƒã‚¹ãƒ³5.3 ã®
+ オリジナルã¨ãƒ•ã‚¡ã‚¤ãƒ«ã«ã‚ˆã‚‹ã‚‚ã®ã®2ã¤ãŒã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 5 è¦ç´„
+
+
+ 1. :!command ã«ã‚ˆã£ã¦ 外部コマンドを実行ã—ã¾ã™ã€‚
+
+ よã使ã†ä¾‹:
+ :!ls - ディレクトリã®ãƒ•ã‚¡ã‚¤ãƒ«ä¸€è¦§ã‚’見る。
+ :!del ファイルå - ファイルåã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ã®å‰Šé™¤ã™ã‚‹ã€‚
+
+ 2. :w ファイルå ã«ã‚ˆã£ã¦ãƒ•ã‚¡ã‚¤ãƒ«åã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒãƒ‡ã‚£ã‚¹ã‚¯ã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ã€‚
+
+ 3. :#,# w ファイルå ã«ã‚ˆã£ã¦ # ã‹ã‚‰ # ã¾ã§ã‚’ä¿å­˜ã™ã‚‹ã€‚
+
+ 4. :r ファイルå ã«ã‚ˆã‚Šãƒ•ã‚¡ã‚¤ãƒ«åã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒãƒ‡ã‚£ã‚¹ã‚¯ã‚ˆã‚Šå–è¾¼ã¾ã‚Œã€
+ カーソルä½ç½®ã®ä¸‹ã«æŒ¿å…¥ã•ã‚Œã‚‹ã€‚
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 6.1: オープンコマンド
+
+
+ ** o をタイプã™ã‚‹ã¨ã€ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã®è¡ŒãŒé–‹ãã€æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ **
+
+ 1. 以下㮠---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. o (å°æ–‡å­—) をタイプã—ã¦ã€ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã®è¡Œã‚’é–‹ãã€æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ã€‚
+
+ 3. ---> ã¨è¨˜ã•ã‚ŒãŸè¡Œã‚’写ã—ã€<ESC> ã¨ã‚¿ã‚¤ãƒ—ã—ã¦è¿½åŠ ãƒ¢ãƒ¼ãƒ‰ã‚’終了ã—ã¾ã—ょã†ã€‚
+
+---> o をタイプã™ã‚‹ã¨ã‚«ãƒ¼ã‚½ãƒ«ã¯é–‹ã„ãŸè¡Œã¸ç§»å‹•ã—挿入モードã«å…¥ã‚Šã¾ã™ã€‚
+
+ 4. カーソルã®ä¸Šã®è¡Œã«æŒ¿å…¥ã™ã‚‹ã«ã¯ã€å°æ–‡å­—ã® o ã§ã¯ãªãã€å˜ç´”ã«å¤§æ–‡å­—ã® O
+ をタイプã—ã¾ã™ã€‚次ã®è¡Œã§è©¦ã—ã¦ã¿ã¾ã—ょã†ã€‚
+ã“ã®è¡Œã®ä¸Šã¸æŒ¿å…¥ã™ã‚‹ã«ã¯ã€ã“ã®è¡Œã¸ã‚«ãƒ¼ã‚½ãƒ«ã‚’ç½®ã„㦠Shift-O をタイプã—ã¾ã™ã€‚
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 6.2: 追加コマンド
+
+
+ ** カーソルã®æ¬¡ã®ä½ç½®ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã™ã‚‹ã«ã¯ a ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ **
+
+ 1. ノーマルモードã«ã—ã¦ä»¥ä¸‹ã® ---> ã¨è¨˜ã•ã‚ŒãŸã•ã‚ŒãŸæœ€åˆã®è¡Œã§ $ をタイプã—
+ ã¦ã€çµ‚端ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
+
+ 2. カーソルã®æ–‡å­—ã®å¾Œã‚ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã™ã‚‹ãŸã‚ã« a (å°æ–‡å­—) をタイプã—ã¾
+ ã™ã€‚
+
+NOTE: ã“ã‚Œã¯æœ€å¾Œã®æ–‡å­—ã«ã¦ãƒ†ã‚­ã‚¹ãƒˆã‚’挿入ã—ã€<ESC> をタイプã—ã¦ã‚«ãƒ¼ã‚½ãƒ«ã‚’å³ã«
+ 移動ã—ã€æœ€å¾Œã« x タイプã—ã¦è¡Œæœ«ã«è¿½åŠ ã™ã‚‹ã¨ã„ã£ãŸã‚ˆã†ãª i ã®ã‚¿ã‚¤ãƒ—ã‚’
+ é¿ã‘ã‚‹ã“ã¨ãŒãã¾ã™ã€‚
+
+ 3. ã•ã¦æœ€åˆã®è¡Œã‚’完æˆã—ã¾ã—ょã†ã€‚テキストãŒæŒ¿å…¥ã•ã‚Œã‚‹ä½ç½®ã‚’除ã‘ã°ã€
+ 追加コマンドã¯æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã¨ã¾ã£ãŸãåŒã˜ã§ã™ã€‚
+
+---> ã“ã®è¡Œã§ã€è¡Œæœ«ã«æ–‡ç« ã‚’追加ã™ã‚‹
+---> ã“ã®è¡Œã§ã€è¡Œæœ«ã«æ–‡ç« ã‚’追加ã™ã‚‹ç·´ç¿’ã‚’ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 6.3: ãã®ä»–ã®ç½®æ›
+
+
+ ** 1文字以上を置ãæ›ãˆã‚‹ã«ã¯å¤§æ–‡å­—ã® 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> をタイプã™ã‚‹ã¨ã€å¤‰æ›´ã—ã¦ã„ãªã„部分ãŒæ®‹ã‚‹ã“ã¨
+ ã«æ³¨æ„ã—ã¾ã—ょã†ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 6.4: オプションã®è¨­å®š
+
+
+ ** 検索や置æ›ã®éš›ã«å¤§æ–‡å­—ã¨å°æ–‡å­—を無視ã™ã‚‹æ§˜ã«ã‚ªãƒ—ションを設定ã—ã¾ã™ **
+
+
+ 1. 以下ã®æ§˜ã«ã‚¿ã‚¤ãƒ—ã—㦠'ignore' を検索ã—ã¾ã—ょã†:
+ /ignore
+ n を押ã—ã¦ä½•åº¦ã‹æ¤œç´¢ã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
+
+ 2. 以下ã®æ§˜ã«ã‚¿ã‚¤ãƒ—ã—㦠'ic' (Ignore Case ã®ç•¥ã§ã™) オプションを設定ã—ã¾ã™ã€‚
+ :set ic
+
+ 3. ã§ã¯ n ã«ã‚ˆã£ã¦ã‚‚ã†1度 'ignore' を検索ã—ã¾ã™ã€‚
+ n を押ã—ã¦ã•ã‚‰ã«æ•°å›žæ¤œç´¢ã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ょã†ã€‚
+
+ 4. 'hlsearch' 㨠'incsearch' オプションを以下ã®æ§˜ã«è¨­å®šã—ã¾ã—ょã†ã€‚
+ :set hls is
+
+ 5. ã‚‚ã†ä¸€åº¦æ¤œç´¢ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã—ã¦ã€ä½•ãŒèµ·ã“ã‚‹ã‹è¦‹ã¦ã¿ã¾ã—ょã†:
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 6 è¦ç´„
+
+
+ 1. o をタイプã™ã‚‹ã¨ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã®è¡Œã‚’é–‹ã‘ã¦ã€ãã“ã§æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«ãªã‚‹ã€‚
+ O (大文字) をタイプã™ã‚‹ã¨ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸Šã®è¡Œã§æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«ãªã‚‹ã€‚
+
+ 2. カーソル上ã®æ–‡å­—ã®æ¬¡ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã™ã‚‹ã«ã¯ a ã¨ã‚¿ã‚¤ãƒ—ã™ã‚‹ã€‚
+ 行末ã«è‡ªå‹•ã§ãƒ†ã‚­ã‚¹ãƒˆã‚’挿入ã™ã‚‹ã«ã¯å¤§æ–‡å­— A をタイプã™ã‚‹ã€‚
+
+ 3. 大文字㮠R をタイプã™ã‚‹ã¨ç½®æ›ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã€<ESC>を押ã™ã¨æŠœã‘る。
+
+ 4. ":set xxx" ã¨ã‚¿ã‚¤ãƒ—ã™ã‚‹ã¨ã‚ªãƒ—ション "xxx" ãŒè¨­å®šã•ã‚Œã‚‹ã€‚
+
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 7: オンラインヘルプコマンド
+
+ ** オンラインヘルプを使用ã—ã¾ã—ょㆠ**
+
+ Vim ã«ã¯åºƒç¯„ã«ã‚ãŸã‚‹ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—システムãŒã‚ã‚Šã¾ã™ã€‚
+ ヘルプを開始ã™ã‚‹ã«ã¯ã€ã“れら3ã¤ã®ã©ã‚Œã‹1ã¤ã‚’試ã—ã¦ã¿ã¾ã—ょã†:
+ - ヘルプキー <HELP> を押ã™(ã‚‚ã—ã‚ã‚‹ãªã‚‰ã°)。
+ - <F1> キーを押ã™(ã‚‚ã—ã‚ã‚‹ãªã‚‰ã°)。
+ - :help <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã™ã‚‹ã€‚
+
+ ヘルプウィンドウを閉ã˜ã‚‹ã«ã¯ :q <ENTER> ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã™ã€‚
+
+ ":help" コマンドã«å¼•æ•°ã‚’与ãˆã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚らゆる題åã®ãƒ˜ãƒ«ãƒ—を見ã¤ã‘ã‚‹
+ ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらを試ã—ã¦ã¿ã¾ã—ょã†(<ENTER> をタイプã—忘れãªã„よã†ã«):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ レッスン 8: 起動スクリプトã®ä½œæˆ
+
+ ** Vim ã®ç‰¹å¾´ã‚’発æ®ã™ã‚‹ **
+
+ Vim ã«ã¯ Vi よりも多ãã®ç‰¹å¾´ã‚’è¸ã¾ãˆã¦ã„ã¾ãŒã€ãã®ã»ã¨ã‚“ã©ã¯åˆæœŸçŠ¶æ…‹ã«ã¦
+ 使用ä¸å¯ã¨ãªã£ã¦ã„ã¾ã™ã€‚より多ãã®ç‰¹å¾´ã‚’使ã„ã¯ã˜ã‚ã‚‹ã«ã¯ "vimrc" ファイル
+ を作æˆã—ã¾ã™ã€‚
+
+ 1. "vimrc" ファイルã®ç·¨é›†ã‚’開始ã™ã‚‹ã€‚ã“ã‚Œã¯ã‚·ã‚¹ãƒ†ãƒ ã«ä¾å­˜ã—ã¾ã™ã€‚
+ :edit ~/.vimrc UNIX å‘ã‘
+ :edit $VIM/_vimrc MS-Windows å‘ã‘
+
+ 2. ã“ã“ã§ã‚µãƒ³ãƒ—ル㮠"vimrc" を読ã¿è¾¼ã¿ã¾ã™ã€‚
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. 以下ã®ã‚ˆã†ã«ãƒ•ã‚¡ã‚¤ãƒ«ã¸æ›¸ãè¾¼ã¿ã¾ã™ã€‚
+
+ :write
+
+ 次回 Vim ã‚’èµ·å‹•ã™ã‚‹ã¨ã€è‰²ã¥ã‘構文ãŒä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚‹ã§ã—ょã†ã€‚
+ ã“ã® "vimrc" ファイルã¸ã€ãŠå¥½ã¿ã®è¨­å®šã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ ã“ã‚Œã«ã¦ Vim ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’終ã‚ã‚Šã¾ã™ã€‚エディタを簡å˜ã«ã€ã—ã‹ã‚‚充分ã«
+ 使ã†ã“ã¨ãŒã§ãるよã†ã«ã¨ã€Vim ã®æŒã¤æ¦‚念ã®è¦ç‚¹ã®ã¿ã‚’ä¼ãˆã‚ˆã†ã¨ã—ã¾ã—ãŸã€‚
+ Vim ã«ã¯ã•ã‚‰ã«å¤šãã®ã‚³ãƒžãƒ³ãƒ‰ãŒã‚ã‚Šã€ã“ã“ã§å…¨ã¦ã‚’説明ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ 以é™ã¯ãƒ¦ãƒ¼ã‚¶ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ãã ã•ã„: "help :user-manual"
+
+ ã“れ以後ã®å­¦ç¿’ã®ãŸã‚ã«ã€æ¬¡ã®æœ¬ã‚’推薦ã—ã¾ã™ã€‚
+ Vim - Vi Improved - by Steve Oualline
+ 出版社: New Riders
+ 最åˆã®æœ¬ã¯å®Œå…¨ã« Vim ã®ãŸã‚ã«æ›¸ã‹ã‚Œã¾ã—ãŸã€‚ã¨ã‚Šã‚ã‘åˆå¿ƒè€…ã«ã¯ãŠå¥¨ã‚ã§ã™ã€‚
+ 多ãã®ä¾‹é¡Œã‚„図版ãŒæŽ²è¼‰ã•ã‚Œã¦ã„ã¾ã™ã€‚
+ 次ã®URLã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ http://iccf-holland.org/click5.html
+
+ 次㯠Vim よりも Vi ã«ã¤ã„ã¦æ›¸ã‹ã‚ŒãŸå¤ã„本ã§ã™ãŒæŽ¨è–¦ã—ã¾ã™:
+ Learning the Vi Editor - by Linda Lamb
+ 出版社: O'Reilly & Associates Inc.
+ Vi ã§ã‚„ã‚ŠãŸã„ã¨æ€ã†ã“ã¨ã»ã¼å…¨ã¦ã‚’知るã“ã¨ãŒã§ãる良書ã§ã™ã€‚
+ 第6版ã§ã¯ã€Vim ã«ã¤ã„ã¦ã®æƒ…報もå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
+
+ ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ Colorado State University ã® Charles Smith ã®ã‚¢ã‚¤ãƒ‡ã‚¢
+ を基ã«ã€Colorado School of Mines ã® Michael C. Pierce 㨠Robert K. Ware ã®
+ 両åã«ã‚ˆã£ã¦æ›¸ã‹ã‚Œã¾ã—ãŸã€‚ E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+ 日本語訳 æ¾æœ¬æ³°å¼˜ E-mail:mattn@mail.goo.ne.jp
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ vi:set ts=8 sts=4 sw=4 tw=76:
diff --git a/runtime/tutor/tutor.ko.euc b/runtime/tutor/tutor.ko.euc
new file mode 100644
index 000000000..ddfc5ac81
--- /dev/null
+++ b/runtime/tutor/tutor.ko.euc
@@ -0,0 +1,812 @@
+===============================================================================
+= ºö ±æÀâÀÌ (VIM Tutor) ¿¡ ¿À½Å °ÍÀ» ȯ¿µÇÕ´Ï´Ù - Version 1.5 =
+===============================================================================
+
+ ºö(Vim)Àº ÀÌ ±æÀâÀÌ¿¡¼­ ´Ù ¼³¸íÇÒ ¼ö ¾øÀ» ¸¸Å­ ¸¹Àº ¸í·ÉÀ» °¡Áø
+ ¸Å¿ì °­·ÂÇÑ ÆíÁý±âÀÔ´Ï´Ù. ÀÌ ±æÀâÀÌ´Â ºöÀ» ½±°Ô ÀüõÈÄ ÆíÁý±â·Î »ç¿ëÇÒ
+ ¼ö ÀÖµµ·Ï ÃæºÐÇÑ ¸í·É¿¡ ´ëÇØ ¼³¸íÇÏ°í ÀÖ½À´Ï´Ù.
+
+ ÀÌ ±æÀâÀ̸¦ ¶¼´Â µ¥¿¡´Â ½Ç½ÀÇÏ´Â µ¥¿¡ ¾ó¸¶³ª ½Ã°£À» ¾²´Â °¡¿¡ µû¶ó¼­
+ 25-30 ºÐ Á¤µµ°¡ °É¸³´Ï´Ù.
+
+ ÀÌ ¿¬½À¿¡ Æ÷ÇÔµÈ ¸í·ÉÀº ³»¿ëÀ» °íĨ´Ï´Ù. ÀÌ ÆÄÀÏÀÇ º¹»çº»À» ¸¸µé¾î¼­
+ ¿¬½ÀÇϼ¼¿ä. (vimtutor ¸¦ ÅëÇØ ½ÃÀÛÇß´Ù¸é, ÀÌ¹Ì º¹»çº»À» »ç¿ëÇÏ´Â
+ ÁßÀÔ´Ï´Ù.)
+
+ Áß¿äÇÑ °ÍÀº, ÀÌ ±æÀâÀÌ°¡ Á÷Á¢ ½áº¸¸é¼­ ¹è¿ìµµ·Ï °í·ÁµÇ¾î ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
+ ¸í·ÉÀ» Á¦´ë·Î ÀÍÈ÷·Á¸é, Á÷Á¢ ½ÇÇàÇغ¸´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ³»¿ëÀ» ÀдÂ
+ °Í¸¸À¸·Î´Â, ¸í·ÉÀ» Àؾî¹ö¸®°Ô µÉ °ÍÀÔ´Ï´Ù.
+
+ ÀÚ ÀÌÁ¦, Caps Lock(Shift-Lock) Å°°¡ ´­·ÁÀÖÁö ¾ÊÀºÁö È®ÀÎÇغ¸½Ã°í, j Å°¸¦
+ ÃæºÐÈ÷ ´­·¯¼­ Lesson 1.1ÀÌ È­¸é¿¡ °¡µæ Â÷µµ·Ï ¿òÁ÷¿©º¾½Ã´Ù.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.1: Ä¿¼­ ¿òÁ÷À̱â
+
+ ** Ä¿¼­¸¦ ¿òÁ÷ÀÌ·Á¸é, Ç¥½ÃµÈ ´ë·Î h,j,k,l Å°¸¦ ´©¸£½Ê½Ã¿À. **
+ ^
+ k ÈùÆ®: h Å°´Â ¿ÞÂÊ¿¡ ÀÖÀ¸¸ç, ¿ÞÂÊÀ¸·Î ¿òÁ÷ÀÔ´Ï´Ù.
+ < h l > l Å°´Â ¿À¸¥ÂÊ¿¡ ÀÖÀ¸¸ç, ¿À¸¥ÂÊÀ¸·Î
+ j ¿òÁ÷ÀÔ´Ï´Ù.
+ v j Å°´Â ¾Æ·¡¹æÇâ È­»ìǥó·³ »ý°å½À´Ï´Ù.
+
+ 1. Àͼ÷ÇØÁú ¶§±îÁö Ä¿¼­¸¦ ½ºÅ©¸° »ó¿¡¼­ ¿òÁ÷¿© º¸½Ê½Ã¿À.
+
+ 2. ¾Æ·¡ ¹æÇâÅ° (j)¸¦ ¹Ýº¹ÀÔ·ÂÀÌ µÉ ¶§±îÁö ´©¸£°í °è½Ê½Ã¿À.
+---> ÀÌÁ¦ ´ÙÀ½ lessonÀ¸·Î °¡´Â ¹æ¹ýÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù.
+
+ 3. ¾Æ·¡ ¹æÇâÅ°¸¦ ÀÌ¿ëÇÏ¿©, Lesson 1.2 ·Î °¡½Ê½Ã¿À.
+
+Âü°í: ¿øÇÏÁö ¾Ê´Â ¹«¾ð°¡°¡ ÀÔ·ÂÀÌ µÇ¾ú´Ù¸é, <ESC>¸¦ ´­·¯¼­, ¸í·É ¸ðµå·Î
+ µ¹¾Æ°¡½Ê½Ã¿À. ±× ÈÄ¿¡ ¿øÇÏ´Â ¸í·ÉÀ» ´Ù½Ã ÀÔ·ÂÇϽʽÿÀ.
+
+Âü°í: Ä¿¼­Å° ¶ÇÇÑ ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ hjkl¿¡ Àͼ÷ÇØÁö¸é, Ä¿¼­Å°º¸´Ù
+ ÈξÀ ºü¸£°Ô À̵¿ÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.2: ºöÀ» ½ÃÀÛÇÏ°í ³¡³»±â
+
+
+ !! ÁÖÀÇ: ¾Æ·¡ ÀÖ´Â ´Ü°è¸¦ ½ÇÇàÇϱâ Àü¿¡, ÀÌ lesson Àüü¸¦ ÀÐÀ¸½Ê½Ã¿À!!
+
+ 1. <ESC> Å°¸¦ ´­·¯¼­ È®½ÇÇÏ°Ô ¸í·É ¸ðµå·Î ºüÁ® ³ª¿É´Ï´Ù.
+
+ 2. ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÕ´Ï´Ù: :q! <ENTER>
+
+---> ÀÌ·¸°Ô Çϸé, ¹Ù²ï ³»¿ëÀ» *ÀúÀåÇÏÁö ¾Ê°í* ÆíÁý±â¸¦ ºüÁ®³ª°©´Ï´Ù.
+ ÀúÀåÇÑ ÈÄ ºüÁ®³ª°¡·Á¸é ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÕ´Ï´Ù:
+ :wq <ENTER>
+
+ 3. ½© ÇÁ·ÒÇÁÆ®°¡ º¸Àδٸé, ´Ù½Ã ±æÀâÀÌ·Î µ¹¾Æ¿À±â À§ÇØ ´ÙÀ½°ú °°ÀÌ
+ ÀÔ·ÂÇÕ´Ï´Ù.
+ vimtutor <ENTER>
+ ¶Ç´Â ´ÙÀ½°ú °°À» ¼öµµ ÀÖ½À´Ï´Ù.
+ vim tutor.ko <ENTER>
+
+---> 'vim' Àº ºö ÆíÁý±â·Î µé¾î°¡´Â °ÍÀ» ¶æÇϸç, 'tutor.ko'´Â ÆíÁýÇÏ·Á´Â
+ ÆÄÀÏÀ» ¶æÇÕ´Ï´Ù.
+
+ 4. À§¿¡¼­ À̾߱âÇÑ ´Ü°è¸¦ ±â¾ïÇÏ¿´À¸¸ç, È®½ÅÀÌ ¼­¸é, 1¿¡¼­ 3±îÁö¸¦
+ ¼öÇàÇÏ¿© ÆíÁý±â¸¦ ³ª°¬´Ù°¡ ´Ù½Ã µé¾î¿Íº¸½Ê½Ã¿À. ±× ÈÄ Ä¿¼­¸¦ ¾Æ·¡·Î
+ ¿òÁ÷¿© Lesson 1.3 À¸·Î °¡½Ê½Ã¿À.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.3: ÅؽºÆ® ÆíÁý - Áö¿ì±â
+
+
+** ¸í·É ¸ðµå¿¡¼­ x ¸¦ ´©¸£¸é Ä¿¼­°¡ À§Ä¡ÇÑ °÷ÀÇ ±ÛÀÚ¸¦ Áö¿ï ¼ö ÀÖ½À´Ï´Ù. **
+
+ 1. ----> ·Î Ç¥½ÃµÈ °÷À¸·Î Ä¿¼­¸¦ ¿Å°Üº¸½Ê½Ã¿À.
+
+ 2. ¿ÀŸ¸¦ ¼öÁ¤Çϱâ À§ÇØ, Ä¿¼­¸¦ Áö¿ï ±ÛÀÚ À§·Î ¿òÁ÷¿© º¸½Ê½Ã¿À.
+
+ 3. x Å°¸¦ ´­·¯¼­ Áö¿ö¾ßÇÒ ±ÛÀÚ¸¦ Áö¿ì½Ê½Ã¿À.
+
+ 4. 2¿¡¼­ 4±îÁö¸¦ ¹Ýº¹ÇÏ¿© ¹®ÀåÀÌ ¿Ã¹Ù¸£°Ô µÇµµ·Ï ÇÏ¿© º¸½Ê½Ã¿À.
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. ¹®ÀåÀÌ Á¤È®ÇØÁ³´Ù¸é, Lesson 1.4·Î °¡½Ê½Ã¿À.
+
+ÁÖÀÇ: ÀÌ ±æÀâÀ̸¦ º¸¸é¼­ ¿Ü¿ì·Á°í ÇÏÁö¸»°í, Á÷Á¢ »ç¿ëÇغ¸¸é¼­ ÀÍÈ÷±æ
+ ¹Ù¶ø´Ï´Ù.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.4: ÅؽºÆ® ÆíÁý - »ðÀÔ (INSERTION)
+
+
+ ** ¸í·É ¸ðµå¿¡¼­ i ¸¦ ´©¸£¸é ÅؽºÆ®¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù. **
+
+ 1. Ä¿¼­¸¦ ù¹ø° ---> ·Î Ç¥½ÃµÈ ÁÙ·Î ¿òÁ÷ÀÔ´Ï´Ù.
+
+ 2. ù¹ø° ÁÙÀ» µÎ¹ø° ÁÙ°ú ¶È°°ÀÌ ¸¸µé°ÍÀÔ´Ï´Ù. ÅؽºÆ®°¡ µé¾î°¡¾ßÇÒ
+ °÷ ´ÙÀ½ºÎÅÍ Ã¹¹ø° ±ÛÀÚ À§¿¡ Ä¿¼­¸¦ ¿Å°Ü ³õ½À´Ï´Ù.
+
+ 3. i Å°¸¦ ´©¸¥ ÈÄ, ÇÊ¿äÇÑ ³»¿ëÀ» ÀÔ·ÂÇÕ´Ï´Ù.
+
+ 4. ¼öÁ¤ÇÑ ÈÄ¿¡´Â <ESC> ¸¦ ´­·¯¼­ ¸í·É ¸ðµå·Î µ¹¾Æ°©´Ï´Ù.
+ ¹®ÀåÀ» ¿Ã¹Ù¸£°Ô ¸¸µé±â À§ÇØ 2¿¡¼­ 4ÀÇ °úÁ¤À» ¹Ýº¹ÇÕ´Ï´Ù.
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. ÅؽºÆ®¸¦ »ðÀÔÇÏ´Â µ¥¿¡ Àͼ÷ÇØÁ³´Ù¸é, ¿ä¾àÀ» ºÁÁֽʽÿÀ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 1 ¿ä¾à
+
+
+ 1. Ä¿¼­¸¦ ¿òÁ÷ÀÏ ¶§¿¡´Â È­»ìÇ¥ Å°³ª hjkl Å°¸¦ ÀÌ¿ëÇÕ´Ï´Ù.
+ h (¿ÞÂÊ) j (¾Æ·¡) k (À§) l (¿À¸¥ÂÊ)
+
+ 2. ½© ÇÁ·ÒÇÁÆ®¿¡¼­ ºöÀ» ½ÃÀÛÇÏ·Á¸é vim FILENAME <ENTER>
+
+ 3. ¼öÁ¤ÇÑ ³»¿ëÀ» ¹«½ÃÇÑ Ã¤·Î ºö¿¡¼­ ºüÁ®³ª°¡·Á¸é <ESC> :q! <ENTER>
+ ÀúÀåÇÑ ÈÄ ºö¿¡¼­ ºüÁ®³ª°¡·Á¸é <ESC> :wq <ENTER>
+
+ 4. ¸í·É ¸ðµå¿¡¼­ Ä¿¼­°¡ À§Ä¡ÇÑ °÷ÀÇ ±ÛÀÚ¸¦ Áö¿ì·Á¸é x ¸¦ ÀÔ·ÂÇÕ´Ï´Ù.
+
+ 5. ¸í·É ¸ðµå¿¡¼­ Ä¿¼­°¡ À§Ä¡ÇÑ °÷¿¡ ÅؽºÆ®¸¦ »ðÀÔÇÏ·Á¸é
+ i ¸¦ ´©¸¥ ÈÄ ÅؽºÆ®¸¦ ÀÔ·ÂÇÏ°í <ESC> ¸¦ ´©¸¨´Ï´Ù.
+
+Âü°í: <ESC>´Â ¸í·É ¸ðµå·Î µ¹¾Æ°¡´Â µ¥ ¾²¸ç, ¿øÄ¡ ¾Ê´Â ¸í·ÉÀ̳ª ¿ÏÀüÈ÷ ÀԷµÇÁö
+ ¾ÊÀº ¸í·ÉÀ» Ãë¼ÒÇÏ´Â µ¥¿¡µµ ¾¹´Ï´Ù.
+
+±×·³ Lesson 2¸¦ ½ÃÀÛÇսôÙ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.1: »èÁ¦(DELETION) ¸í·É
+
+
+ ** ÇÑ ´Ü¾î¸¦ ³¡±îÁö Áö¿ì·Á¸é 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¹ø °úÁ¤À» ´Ù½Ã ÇÏ¿© ¹®ÀåÀ» Á¤È®ÇÏ°Ô ¸¸µç µÚ Lesson 2.2·Î °¡½Ê½Ã¿À.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.2: ´Ù¸¥ »èÁ¦ ¸í·É
+
+ ** d$ ¶ó°í Ä¡¸é ±× ÁÙ ³¡±îÁö Áö¿öÁý´Ï´Ù. **
+
+ 1. <ESC> Å°¸¦ ´­·¯¼­ È®½ÇÇÏ°Ô ¸í·É ¸ðµå·Î ºüÁ® ³ª¿É´Ï´Ù.
+
+ 2. ¾Æ·¡¿¡ ---> ·Î Ç¥½ÃµÈ ÁÙ ±îÁö Ä¿¼­¸¦ ¿Å±é´Ï´Ù.
+
+ 3. ¿Ã¹Ù¸¥ ÁÙÀÇ ³¡À¸·Î Ä¿¼­¸¦ ¿Å±é´Ï´Ù. (ù¹ø°·Î ³ª¿À´Â . ´ÙÀ½ÀÔ´Ï´Ù.)
+
+ 4. d$ ¶ó°í Ãļ­ ÁÙ ³¡±îÁö Áö¿ó´Ï´Ù.
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+ 5. ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö ÀÌÇØÇϱâ À§ÇØ Lesson 2.3 À¸·Î °¡½Ê½Ã¿À.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: ¸í·É°ú Àû¿ë ´ë»ó¿¡ ´ëÇØ
+
+
+ »èÁ¦ ¸í·É dÀÇ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
+
+ [Ƚ¼ö] d ´ë»ó ¶Ç´Â d [Ƚ¼ö] ´ë»ó
+ ¿©±â¼­
+ Ƚ¼ö - ¸í·ÉÀ» ¸î ¹ø ¼öÇàÇÒ Áö (¿É¼Ç, ±âº»°ª=1).
+ d - Áö¿ì´Â ¸í·É
+ ´ë»ó - ¾Æ·¡¿¡ Á¦½ÃµÈ ´ë»ó¿¡ ´ëÇØ ¸í·ÉÀ» ¼öÇà
+
+ Àû¿ë °¡´ÉÇÑ ´ë»óÀÇ Á¾·ù:
+ w - Ä¿¼­¿¡¼­ ±× ´Ü¾îÀÇ ³¡±îÁö (°ø¹é Æ÷ÇÔ.)
+ e - Ä¿¼­¿¡¼­ ±× ´Ü¾îÀÇ ³¡±îÁö (°ø¹éÀ» Æ÷ÇÔÇÏÁö ¾ÊÀ½.)
+ $ - Ä¿¼­¿¡¼­ ±× ÁÙÀÇ ³¡±îÁö
+
+Âü°í: È£±â½ÉÀÌ ÀÖ´Ù¸é, ¸í·É ¸ðµå¿¡¼­ ¸í·É ¾øÀÌ ´ë»óÀ» ÀÔ·ÂÇغ¸½Ê½Ã¿À.
+ À§¿¡¼­ À̾߱âÇÑ ´ë»óÀÇ ¸ñ·Ï¿¡ µû¶ó Ä¿¼­°¡ ¿òÁ÷ÀÌ°Ô µË´Ï´Ù.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.4: '¸í·É-´ë»ó' ¿¡ ´ëÇÑ ¿¹¿Ü
+
+
+ ** 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.5: Ãë¼Ò(UNDO) ¸í·É
+
+
+ ** 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. ÀÌ ¸í·ÉÀº ¸Å¿ì À¯¿ëÇÕ´Ï´Ù. ±×·³ Lesson 2 ¿ä¾àÀ¸·Î ³Ñ¾î°¡µµ·Ï ÇսôÙ.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 2 ¿ä¾à
+
+
+ 1. Ä¿¼­°¡ À§Ä¡ÇÑ °÷ºÎÅÍ ´Ü¾îÀÇ ³¡±îÁö Áö¿ì·Á¸é: dw
+
+ 2. Ä¿¼­°¡ À§Ä¡ÇÑ °÷ºÎÅÍ ÁÙ ³¡±îÁö Áö¿ì·Á¸é: d$
+
+ 3. ÁÙ Àüü¸¦ Áö¿ì·Á¸é: dd
+
+ 4. ¸í·É ¸ðµå¿¡¼­ ³»¸®´Â ¸í·ÉÀÇ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù:
+
+ [Ƚ¼ö] ¸í·É ´ë»ó ¶Ç´Â ¸í·É [Ƚ¼ö] ´ë»ó
+ ¿©±â¼­:
+ Ƚ¼ö - ±× ¸í·ÉÀ» ¸î ¹ø ¹Ýº¹ÇÒ °ÍÀΰ¡
+ ¸í·É - ¾î¶² ¸í·ÉÀ» ³»¸± °ÍÀΰ¡ ( ¿¹¸¦ µé¾î, »èÁ¦ÀÎ °æ¿ì´Â d )
+ ´ë»ó - ¸í·ÉÀÌ µ¿ÀÛÇÒ ´ë»ó, ¿¹¸¦ µé¾î w (´Ü¾î), $ (ÁÙÀÇ ³¡) µî.
+
+ 5. ÀÌÀü ÇൿÀ» Ãë¼ÒÇÏ·Á¸é: u (¼Ò¹®ÀÚ u)
+ ÇÑ ÁÙ¿¡¼­ ¼öÁ¤ÇÑ °ÍÀ» ¸ðµÎ Ãë¼ÒÇÏ·Á¸é: U (´ë¹®ÀÚ U)
+ Ãë¼ÒÇÑ °ÍÀ» ´Ù½Ã ½ÇÇàÇÏ·Á¸é: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.1: ºÙÀ̱â(PUT) ¸í·É
+
+
+ ** p ¸¦ ÀÔ·ÂÇÏ¿© ¸¶Áö¸·À¸·Î Áö¿î ³»¿ëÀ» Ä¿¼­ µÚ¿¡ ºÙÀÔ´Ï´Ù. **
+
+ 1. ¾Æ·¡¿¡ ÀÖ´Â ¹®´ÜÀÇ Ã¹ ÁÙ·Î Ä¿¼­¸¦ ¿òÁ÷À̽ʽÿÀ.
+
+ 2. dd ¸¦ ÀÔ·ÂÇÏ¿© ±× ÁÙÀ» Áö¿ö¼­ ºöÀÇ ¹öÆÛ¿¡ ÀúÀåÇÕ´Ï´Ù.
+
+ 3. ¾Æ±î Áö¿î ÁÙÀÌ °¡¾ßÇÒ À§Ä¡ÀÇ *À­ÁÙ·Î* Ä¿¼­¸¦ ¿Å±é´Ï´Ù.
+
+ 4. ¸í·É ¸ðµå¿¡¼­, p ¸¦ ÀÔ·ÂÇÏ¿© ±× ÁÙÀ» Á¦´ë·Î µÈ ÀÚ¸®·Î ¿Å±é´Ï´Ù.
+
+ 5. 2¿¡¼­ 4¸¦ ¹Ýº¹ÇÏ¿© ¸ðµç ÁÙÀÇ ¼ø¼­¸¦ ¹Ù·Î ÀâÀ¸½Ê½Ã¿À.
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: ġȯ(REPLACE) ¸í·É
+
+
+ ** Ä¿¼­ ¾Æ·¡ÀÇ ±ÛÀÚ Çϳª¸¦ ¹Ù²Ù·Á¸é, 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. Lesson 3.2 ·Î À̵¿ÇսôÙ.
+
+ÁÖÀÇ: ¿Ü¿ìÁö ¸»°í, Á÷Á¢ Çغ¸¸é¼­ ÀÍÇô¾ß ÇÑ´Ù´Â °ÍÀ» ÀØÁö ¸¶½Ê½Ã¿À.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.3: º¯È¯(CHANGE) ¸í·É
+
+
+ ** ÇÑ ´Ü¾îÀÇ ÀϺγª Àüü¸¦ ¹Ù²Ù·Á¸é, 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 ´Â ´Ü¾î¸¦ ġȯÇÏ´Â °Í »Ó¸¸ ¾Æ´Ï¶ó, ³»¿ëÀ» »ðÀÔÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù´Â °Í¿¡
+ÁÖÀÇÇսôÙ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.4: c ¸¦ ÀÌ¿ëÇÑ ´Ù¸¥ º¯È¯ ¸í·É
+
+
+ ** º¯È¯ ¸í·ÉÀº »èÁ¦ÇÒ ¶§ ÀÌ¿ëÇÑ ´ë»ó¿¡ ´ëÇØ Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. **
+
+ 1. º¯È¯ ¸í·ÉÀº »èÁ¦¿Í µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù:
+
+ [Ƚ¼ö] c ´ë»ó ¶Ç´Â c [Ƚ¼ö] ´ë»ó
+
+ 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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 3 ¿ä¾à
+
+
+ 1. ÀÌ¹Ì Áö¿î ³»¿ëÀ» µÇµ¹¸®·Á¸é, p ¸¦ ´©¸£½Ê½Ã¿À. ÀÌ ¸í·ÉÀº Ä¿¼­ *´ÙÀ½¿¡*
+ Áö¿öÁø ³»¿ëÀ» ºÙÀÔ´Ï´Ù(PUT). (ÇÑ ÁÙÀ» Áö¿î °æ¿ì¿¡´Â Ä¿¼­ ´ÙÀ½ ÁÙ¿¡
+ Áö¿öÁø ³»¿ëÀÌ ºÙ½À´Ï´Ù.)
+
+ 2. Ä¿¼­ ¾Æ·¡ÀÇ ±ÛÀÚ¸¦ ġȯÇÏ·Á¸é(REPLACE), r À» ´©¸¥ ÈÄ ¿ø·¡ ±ÛÀÚ ´ë½Å
+ ¹Ù²Ù¾î ³ÖÀ» ±ÛÀÚ¸¦ ÀÔ·ÂÇÕ´Ï´Ù.
+
+ 3. º¯È¯ ¸í·É(CHANGE)Àº Ä¿¼­¿¡¼­ ºÎÅÍ ÁöÁ¤ÇÑ ´ë»óÀÇ ³¡±îÁö ¹Ù²Ü ¼ö ÀÖ´Â
+ ¸í·ÉÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, Ä¿¼­ À§Ä¡¿¡¼­ ´Ü¾îÀÇ ³¡±îÁö ¹Ù²Ù·Á¸é, cw ¸¦
+ ÀÔ·ÂÇÏ¸é µÇ¸ç, c$ ´Â ÁÙ ³¡±îÁö ¹Ù²Ù´Â µ¥ ¾²ÀÔ´Ï´Ù.
+
+ 4. º¯È¯ ¸í·ÉÀÇ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù:
+
+ [Ƚ¼ö] c ´ë»ó ¶Ç´Â c [Ƚ¼ö] ´ë»ó
+
+°è¼ÓÇؼ­ ´ÙÀ½ Lesson À» ÁøÇàÇսôÙ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.1: À§Ä¡¿Í ÆÄÀÏÀÇ »óÅÂ
+
+
+ ** CTRL-g ¸¦ ´©¸£¸é ÆÄÀÏ ³»¿¡¼­ÀÇ ÇöÀç À§Ä¡¿Í ÆÄÀÏÀÇ »óŸ¦ º¼ ¼ö ÀÖ½À´Ï´Ù.
+ SHIFT-G ¸¦ ´©¸£¸é ÆÄÀÏ ³»ÀÇ ÁÙ·Î À̵¿ÇÕ´Ï´Ù. **
+
+ ÁÖÀÇ: ¾Æ·¡ÀÇ ´Ü°è¸¦ µû¶óÇϱâ Àü¿¡, ÀÌ Lesson Àüü¸¦ ¸ÕÀú ÀÐÀ¸½Ê½Ã¿À.
+
+ 1. CTRL Å°¸¦ ´©¸¥ »óÅ¿¡¼­ g ¸¦ ´©¸¨´Ï´Ù. ÆÄÀÏ À̸§°ú ÇöÀç À§Ä¡ÇÑ ÁÙÀÌ
+ Ç¥½ÃµÈ »óÅÂÁÙÀÌ È­¸é ¾Æ·¡¿¡ Ç¥½ÃµÉ °ÍÀÔ´Ï´Ù. 3¹ø° ´Ü°è¸¦ À§ÇØ ±×
+ ÁÙ ¹øÈ£¸¦ ±â¾ïÇÏ°í °è½Ê½Ã¿À.
+
+ 2. SHIFT-G ¸¦ ´©¸£¸é ÆÄÀÏÀÇ ¸¶Áö¸·À¸·Î À̵¿ÇÕ´Ï´Ù.
+
+ 3. ¾Æ±î ±â¾ïÇß´ø ÁÙ ¹øÈ£¸¦ ÀÔ·ÂÇÑ ÈÄ SHIFT-G ¸¦ ´©¸£½Ê½Ã¿À. ÀÌ·¸°Ô Çϸé
+ óÀ½¿¡ CTRL-g ¸¦ ´­·¶´ø Àå¼Ò·Î µÇµ¹¾Æ°¡°Ô µÉ °ÍÀÔ´Ï´Ù.
+ (¹øÈ£¸¦ ÀÔ·ÂÇÒ ¶§, ÀÌ°ÍÀº È­¸é¿¡ Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù.)
+
+ 4. ÀÚ½ÅÀÌ »ý°å´Ù¸é, 1¿¡¼­ 3±îÁö¸¦ ½ÇÇàÇغ¸½Ê½Ã¿À.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.2: ã±â ¸í·É
+
+
+ ** / ¸¦ ´©¸¥ ÈÄ °Ë»öÇÒ ¹®±¸¸¦ ÀÔ·ÂÇϽʽÿÀ. **
+
+ 1. ¸í·É ¸ðµå¿¡¼­ / ¸¦ ÀÔ·ÂÇϽʽÿÀ. : ¸í·É¿¡¼­¿Í ¸¶Âù°¡Áö·Î, È­¸é ¾Æ·¡¿¡
+ / ¿Í Ä¿¼­°¡ Ç¥½ÃµÉ °ÍÀÔ´Ï´Ù.
+
+ 2. 'errroor' ¶ó°í Ä£ ÈÄ <ENTER> ¸¦ Ä¡½Ê½Ã¿À. ÀÌ ´Ü¾î¸¦ ãÀ¸·Á°í ÇÕ´Ï´Ù.
+
+ 3. °°Àº ¹®±¸¸¦ ´Ù½Ã ãÀ¸·Á¸é, °£´ÜÈ÷ n À» ÀÔ·ÂÇϽʽÿÀ.
+ °°Àº ¹®±¸¸¦ ¹Ý´ë ¹æÇâÀ¸·Î ãÀ¸·Á¸é, Shift-N À» ÀÔ·ÂÇϽʽÿÀ.
+
+ 4. ¹®±¸¸¦ ¿ª¹æÇâÀ¸·Î ãÀ¸·Á¸é, / ´ë½Å ? ¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù.
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+Âü°í: ã´Â Áß¿¡ ÆÄÀÏÀÇ ³¡¿¡ ´Ù´Ù¸£°Ô µÇ¸é, ÆÄÀÏÀÇ Ã³À½ºÎÅÍ ´Ù½Ã ã°Ô µË´Ï´Ù.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.3: °ýÈ£ÀÇ Â¦ ã±â
+
+
+ ** % ¸¦ ´­·¯¼­ ), ], } ÀÇ Â¦À» ã½À´Ï´Ù. **
+
+ 1. Ä¿¼­¸¦ ---> ·Î Ç¥½ÃµÈ ÁÙÀÇ (, [, { Áß Çϳª¿¡ °¡Á®´Ù ³õ½À´Ï´Ù.
+
+ 2. % ¸¦ ÀÔ·ÂÇØ º¾½Ã´Ù.
+
+ 3. Ä¿¼­°¡ ¦ÀÌ ¸Â´Â °ýÈ£·Î À̵¿ÇÒ °ÍÀÔ´Ï´Ù.
+
+ 4. % ¸¦ ÀÔ·ÂÇÏ¿©, ÀÌÀü °ýÈ£·Î µÇµ¹¾Æ ¿É½Ã´Ù.
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+Âü°í: ¦ÀÌ ¸ÂÁö ¾Ê´Â °ýÈ£°¡ ÀÖ´Â ÇÁ·Î±×·¥À» µð¹ö±ëÇÒ ¶§¿¡ ¸Å¿ì À¯¿ëÇÕ´Ï´Ù!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.4: ¿¡·¯¸¦ ¼öÁ¤ÇÏ´Â ¹æ¹ý
+
+
+ ** :s/old/new/g Çϸé 'old' ¸¦ 'new' ·Î ġȯ(SUBTITUTE)ÇÕ´Ï´Ù. **
+
+ 1. Ä¿¼­¸¦ ---> ·Î Ç¥½ÃµÈ ÁÙ¿¡ °¡Á®´Ù ³õ½À´Ï´Ù.
+
+ 2. :s/thee/the ¸¦ ÀÔ·ÂÇÑ ÈÄ <ENTER> ¸¦ Ĩ´Ï´Ù. ÀÌ ¸í·ÉÀº ±× ÁÙ¿¡¼­
+ óÀ½À¸·Î ¹ß°ßµÈ °Í¸¸ ¹Ù²Û´Ù´Â °Í¿¡ ÁÖÀÇÇϽʽÿÀ.
+
+ 3. À̹ø¿¡´Â :s/thee/the/g ¸¦ ÀÔ·ÂÇÕ´Ï´Ù. ÀÌ´Â ±× ÁÙ Àüü(globally)¸¦
+ ġȯÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. µÎ ÁÙ »çÀÌÀÇ ¸ðµç ¹®ÀÚ¿­¿¡ ´ëÇØ Ä¡È¯ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù,
+ :#,#s/old/new/g #,# ´Â µÎ ÁÙÀÇ ÁÙ¹øÈ£¸¦ ¶æÇÕ´Ï´Ù.
+ :%s/old/new/g ÆÄÀÏ Àüü¿¡¼­ ¹ß°ßµÈ ¸ðµç °ÍÀ» ġȯÇÏ´Â °æ¿ìÀÔ´Ï´Ù.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 4 ¿ä¾à
+
+
+ 1. CTRL-g ´Â ÆÄÀÏÀÇ »óÅÂ¿Í ÆÄÀÏ ³»¿¡¼­ÀÇ ÇöÀç À§Ä¡¸¦ Ç¥½ÃÇÕ´Ï´Ù.
+ SHIFT-G ´Â ÆÄÀÏÀÇ ³¡À¸·Î À̵¿ÇÕ´Ï´Ù. ÁÙ¹øÈ£¸¦ ÀÔ·ÂÇÑ ÈÄ SHIFT-G¸¦
+ ÀÔ·ÂÇϸé, ±× ÁÙ·Î À̵¿ÇÕ´Ï´Ù.
+
+ 2. / ¸¦ ÀÔ·ÂÇÑ ÈÄ ¹®±¸¸¦ ÀÔ·ÂÇÏ¸é ±× ¹®±¸¸¦ ¾Æ·§¹æÇâÀ¸·Î ã½À´Ï´Ù.
+ ? ¸¦ ÀÔ·ÂÇÑ ÈÄ ¹®±¸¸¦ ÀÔ·ÂÇϸé À­¹æÇâÀ¸·Î ã½À´Ï´Ù.
+ °Ë»ö ÈÄ, n À» ÀÔ·ÂÇÏ¸é °°Àº ¹æÇâÀ¸·Î ´ÙÀ½ ¹®±¸¸¦ ãÀ¸¸ç,
+ Shift-N À» ÀÔ·ÂÇÏ¸é ¹Ý´ë ¹æÇâÀ¸·Î ã½À´Ï´Ù.
+
+ 3. Ä¿¼­°¡ (,),[,],{,} À§¿¡ ÀÖÀ» ¶§¿¡ % ¸¦ ÀÔ·ÂÇÏ¸é »óÀÀÇϴ ¦À»
+ ã¾Æ°©´Ï´Ù.
+
+ 4. ¾î¶² ÁÙ¿¡ óÀ½ µîÀåÇÏ´Â old¸¦ new·Î ¹Ù²Ù·Á¸é :s/old/new
+ ÇÑ ÁÙ¿¡ µîÀåÇÏ´Â ¸ðµç old¸¦ new·Î ¹Ù²Ù·Á¸é :s/old/new/g
+ µÎ ÁÙ #,# »çÀÌ¿¡¼­ ġȯÀ» ÇÏ·Á¸é :#,#s/old/new/g
+ ÆÄÀÏ ³»ÀÇ ¸ðµç ¹®±¸¸¦ ġȯÇÏ·Á¸é :%s/old/new/g
+ ¹Ù²Ü ¶§¸¶´Ù È®ÀÎÀ» °ÅÄ¡·Á¸é 'c'¸¦ ºÙ¿©¼­ :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.1: ¿ÜºÎ ¸í·É ½ÇÇàÇÏ´Â ¹æ¹ý
+
+
+ ** :! À» ÀÔ·ÂÇÑ ÈÄ ½ÇÇàÇÏ·Á´Â ¸í·ÉÀ» ÀÔ·ÂÇϽʽÿÀ. **
+
+ 1. Ä£¼÷ÇÑ ¸í·ÉÀÎ : ¸¦ ÀÔ·ÂÇϸé Ä¿¼­°¡ È­¸é ¾Æ·¡·Î À̵¿ÇÕ´Ï´Ù. ¸í·ÉÀ»
+ ÀÔ·ÂÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
+
+ 2. ÀÌÁ¦ ! (´À³¦Ç¥) ¸¦ ÀÔ·ÂÇϽʽÿÀ. ÀÌ·¸°Ô ÇÏ¸é ¿ÜºÎ ½© ¸í·ÉÀ» ½ÇÇàÇÒ
+ ¼ö ÀÖ½À´Ï´Ù.
+
+ 3. ½ÃÇè»ï¾Æ ! ´ÙÀ½¿¡ ls ¸¦ ÀÔ·ÂÇÑ ÈÄ <ENTER> ¸¦ Ãĺ¸½Ê½Ã¿À. ½© ÇÁ·ÒÇÁÆ®
+ ¿¡¼­Ã³·³ µð·ºÅ丮ÀÇ ¸ñ·ÏÀÌ Ãâ·ÂµÉ °ÍÀÔ´Ï´Ù. ls °¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é
+ :!dir À» ½ÃµµÇØ º¸½Ê½Ã¿À.
+
+Âü°í: ¾î¶² ¿ÜºÎ ¸í·Éµµ ÀÌ ¹æ¹ýÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
+
+Âü°í: ¸ðµç : ¸í·ÉÀº <ENTER> ¸¦ ÃÄ¾ß ¸¶¹«¸® µË´Ï´Ù.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.2: º¸´Ù ÀÚ¼¼ÇÑ ÆÄÀÏ ÀúÀå
+
+
+ ** ¼öÁ¤µÈ ³»¿ëÀ» ÆÄÀÏ·Î ÀúÀåÇÏ·Á¸é, :w FILENAME ÇϽʽÿÀ. **
+
+ 1. :!dir ¶Ç´Â :!ls ¸¦ ÀÔ·ÂÇÏ¿© µð·ºÅ丮ÀÇ ¸®½ºÆ®¸¦ ¾ò¾î¿É´Ï´Ù.
+ À§ÀÇ ¸í·É ÈÄ <ENTER>¸¦ ÃľßÇÑ´Ù´Â °ÍÀº ÀÌ¹Ì ¾Ë°í ÀÖÀ» °ÍÀÔ´Ï´Ù.
+
+ 2. TEST ó·³ Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏ À̸§À» Çϳª °í¸£½Ê½Ã¿À.
+
+ 3. ÀÌÁ¦ :w TEST ¶ó°í ÀÔ·ÂÇϽʽÿÀ. (TEST´Â ´ç½ÅÀÌ ¼±ÅÃÇÑ ÆÄÀÏ À̸§ÀÔ´Ï´Ù.)
+
+ 4. ÀÌ·¸°Ô ÇÏ¸é ºö ±æÀâÀÌ ÆÄÀÏ Àüü¸¦ TEST¶ó´Â À̸§À¸·Î ÀúÀåÇÕ´Ï´Ù.
+ È®ÀÎÇÏ·Á¸é, :!dir À» ´Ù½Ã ÀÔ·ÂÇÏ¿©, µð·ºÅ丮¸¦ »ìÆ캸½Ê½Ã¿À.
+
+Âü°í: ºöÀ» Á¾·áÇÑ ÈÄ, ºöÀ» ´Ù½Ã ½ÇÇàÇÏ¿© TEST¶ó´Â ÆÄÀÏÀ» ¿­¸é, ±× ÆÄÀÏÀº
+ ÀúÀåÇßÀ» ¶§¿Í ¿Ïº®È÷ °°Àº º¹»çº»ÀÏ °ÍÀÔ´Ï´Ù.
+
+ 5. ÀÌÁ¦ ±× ÆÄÀÏÀ» Áö¿ó½Ã´Ù.
+ (MS-DOS¿¡¼­): !del TEST
+ (Unix¿¡¼­): !rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.3: ¼±ÅÃÀûÀ¸·Î ÀúÀåÇÏ´Â ¸í·É
+
+
+ ** ÆÄÀÏÀÇ ÀϺθ¦ ÀúÀåÇÏ·Á¸é, :#,# w FILENAME ÇϽʽÿÀ. **
+
+ 1. ´Ù½Ã Çѹø, :!dir À̳ª !ls ¸¦ ÀÔ·ÂÇÏ¿© µð·ºÅ丮ÀÇ ¸ñ·ÏÀ» ¹Þ¾Æ¿Â ÈÄ
+ TEST °°Àº ÀûÇÕÇÑ À̸§À» ¼±ÅÃÇÕ´Ï´Ù.
+
+ 2. Ä¿¼­¸¦ ÀÌ ÆäÀÌÁöÀÇ Ã³À½À¸·Î ¿Å±ä ÈÄ, Ctrl-g ¸¦ ÀÔ·ÂÇÏ¿© ±× ÁÙÀÇ ÁÙ¹øÈ£¸¦
+ ¾Ë¾Æ³À´Ï´Ù. ÀÌ ¹øÈ£¸¦ ±â¾ïÇϽʽÿÀ!
+
+ 3. ÀÌÁ¦ ÀÌ ÆäÀÌÁöÀÇ ¸¶Áö¸·À¸·Î °¡¼­ Ctrl-g ¸¦ ´Ù½Ã ÀÔ·ÂÇϽʽÿÀ. ÀÌ ÁÙÀÇ
+ ÁÙ¹øÈ£ ¶ÇÇÑ ±â¾ïÇϽʽÿÀ!
+
+ 4. ¾î¶² ¼½¼Ç¸¸ ÆÄÀÏ·Î ÀúÀåÇÏ·Á¸é, :#,# w TEST ¸¦ ÀÔ·ÂÇÏ¸é µË´Ï´Ù. ÀÌ ¶§
+ #,# ´Â ¾Æ±î ±â¾ïÇß´ø ½ÃÀÛ°ú ³¡ ÁÙ¹øÈ£ ÀÔ´Ï´Ù. TEST´Â ÆÄÀÏ À̸§ÀÔ´Ï´Ù.
+
+ 5. :!dir À» ÀÌ¿ëÇÏ¿© ÆÄÀÏÀÌ ¸¸µé¾îÁ³´ÂÁö È®ÀÎÇϽʽÿÀ. Áö¿ìÁö´Â ¸¶½Ê½Ã¿À.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.4: ÆÄÀÏ ÀоîµéÀ̱â, ÇÕÄ¡±â
+
+
+ ** ¾î¶² ÆÄÀÏÀÇ ³»¿ëÀ» »ðÀÔÇÏ·Á¸é, :r FILENAME ÇϽʽÿÀ **
+
+ 1. :!dir À» ÀÔ·ÂÇÏ¿© ¾Æ±î ¸¸µç TEST ÆÄÀÏÀÌ ±×´ë·Î ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.
+
+ 2. Ä¿¼­¸¦ ÀÌ ÆäÀÌÁöÀÇ Ã³À½À¸·Î ¿òÁ÷À̽ʽÿÀ.
+
+ÁÖÀÇ: 3¹ø° ´Ü°è¸¦ ½ÇÇàÇϸé, Lesson 5.3 À» º¸°Ô µÉ °ÍÀÔ´Ï´Ù. ±×·¸°Ô µÇ¸é
+ ÀÌ lessonÀ¸·Î ´Ù½Ã ³»·Á¿À½Ê½Ã¿À.
+
+ 3. ÀÌÁ¦ TEST ÆÄÀÏÀ» ÀоîµéÀԽôÙ. :r TEST ¸í·ÉÀ» »ç¿ëÇϽʽÿÀ. TEST ´Â
+ ÆÄÀÏÀÇ À̸§ÀÔ´Ï´Ù.
+
+Âü°í: ÀоîµéÀÎ ÆÄÀÏÀº Ä¿¼­°¡ À§Ä¡ÇÑ ÁöÁ¡¿¡¼­ºÎÅÍ ³õÀÌ°Ô µË´Ï´Ù.
+
+ 4. ÆÄÀÏÀÌ Àоîµé¿©Áø °ÍÀ» È®ÀÎÇϱâ À§ÇØ, µÚ·Î À̵¿Çؼ­ ±âÁ¸ ¹öÀü°ú ÆÄÀÏ¿¡¼­
+ ÀоîµéÀÎ ¹öÀü, ÀÌ·¸°Ô Lesson 5.3 ÀÌ µÎ¹ø ¹Ýº¹µÇ¾úÀ½À» È®ÀÎÇϽʽÿÀ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 5 ¿ä¾à
+
+
+ 1. :!command ¸¦ ÀÌ¿ëÇÏ¿© ¿ÜºÎ ¸í·ÉÀ» ½ÇÇàÇÕ´Ï´Ù.
+
+ À¯¿ëÇÑ ¿¹:
+ (MS-DOS) (Unix)
+ :!dir :!ls - µð·ºÅ丮ÀÇ ¸ñ·ÏÀ» º¸¿©ÁØ´Ù.
+ :!del FILENAME :!rm FILENAME - FILENAMEÀ̶ó´Â ÆÄÀÏÀ» Áö¿î´Ù.
+
+ 2. :w FILENAME Çϸé ÇöÀç ºö¿¡¼­ »ç¿ëÇÏ´Â ÆÄÀÏÀ» FILENAMEÀ̶ó´Â À̸§À¸·Î
+ µð½ºÅ©¿¡ ÀúÀåÇÕ´Ï´Ù.
+
+ 3. :#,#w FILENAME Çϸé #ºÎÅÍ #±îÁöÀÇ ÁÙÀ» FILENAMEÀ̶ó´Â ÆÄÀÏ·Î ÀúÀåÇÕ´Ï´Ù.
+
+ 4. :r FILENAME Àº µð½ºÅ©¿¡¼­ FILENAMEÀ̶ó´Â ÆÄÀÏÀ» ºÒ·¯µé¿©¼­ Ä¿¼­ À§Ä¡
+ µÚ¿¡ ÇöÀç ÆÄÀÏÀ» Áý¾î³Ö½À´Ï´Ù.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.1: »õ ÁÙ ¿­±â(OPEN) ¸í·É
+
+
+ ** o ¸¦ ´©¸£¸é Ä¿¼­ ¾Æ·¡¿¡ ÁÙÀ» ¸¸µé°í ÆíÁý ¸ðµå°¡ µË´Ï´Ù. **
+
+ 1. ¾Æ·¡¿¡ ---> ·Î Ç¥½ÃµÈ ÁÙ·Î Ä¿¼­¸¦ ¿Å±â½Ê½Ã¿À.
+
+ 2. o (¼Ò¹®ÀÚ)¸¦ Ãļ­ Ä¿¼­ *¾Æ·¡¿¡* ÁÙÀ» Çϳª ¿©½Ê½Ã¿À. ÆíÁý ¸ðµå°¡ µË´Ï´Ù.
+ Insert mode.
+
+ 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 Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.2: Ãß°¡(APPEND) ¸í·É
+
+
+ ** a ¸¦ ´©¸£¸é Ä¿¼­ *´ÙÀ½¿¡* ±ÛÀ» ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù. **
+
+ 1. Ä¿¼­¸¦ ---> ·Î Ç¥½ÃµÈ ù¹ø° ÁÙÀÇ ³¡À¸·Î ¿Å±é´Ï´Ù. ¸í·É ¸ðµå¿¡¼­
+ $ ¸¦ ÀÌ¿ëÇϽʽÿÀ.
+
+ 2. ¼Ò¹®ÀÚ 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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.3: ġȯ(REPLACE) ÀÇ ´Ù¸¥ ¹öÀü
+
+
+ ** ´ë¹®ÀÚ 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> ¸¦ ´­·¯¼­ ³ª°¡¸é, ¹Ù²îÁö ¾ÊÀº ÅؽºÆ®´Â ±×´ë·Î ³²°Ô µË´Ï´Ù.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.4: ¿É¼Ç ¼³Á¤(SET)
+
+ ** ã±â³ª ¹Ù²Ù±â¿¡¼­ ´ë¼Ò¹®ÀÚ ±¸ºÐÀ» ¾ø¾Ö±â À§ÇØ ¿É¼ÇÀ» ¼³Á¤ÇÕ´Ï´Ù **
+
+ 1. ´ÙÀ½À» ÀÔ·ÂÇÏ¿© 'ignore' ¸¦ ãÀ¸½Ê½Ã¿À:
+ /ignore
+ n Å°¸¦ ÀÌ¿ëÇÏ¿© ¿©·¯¹ø ¹Ýº¹ÇϽʽÿÀ.
+
+ 2. 'ic' (´ë¼Ò¹®ÀÚ ±¸º° ¾ÈÇÔ, Ignore case) ¿É¼ÇÀ» ¼³Á¤ÇϽʽÿÀ:
+ :set ic
+
+ 3. n Å°¸¦ ´­·¯¼­ 'ignore' ¸¦ ´Ù½Ã ã¾Æº¸½Ê½Ã¿À.
+ n Å°¸¦ °è¼Ó ´­·¯¼­ ¿©·¯¹ø ãÀ¸½Ê½Ã¿À.
+
+ 4. 'hlsearch' ¿Í 'incsearch' ¿É¼ÇÀ» ¼³Á¤ÇսôÙ.
+ :set hls is
+
+ 5. ã±â ¸í·ÉÀ» ´Ù½Ã ÀÔ·ÂÇÏ¿©, ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö È®ÀÎÇØ º¸½Ê½Ã¿À:
+ /ignore
+
+ 6. ãÀº ³»¿ëÀÌ °­Á¶(HIGHLIGHT)µÈ °ÍÀ» ¾ø¾Ö·Á¸é, ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÕ´Ï´Ù:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 6 ¿ä¾à
+
+
+ 1. o ¸¦ ÀÔ·ÂÇϸé Ä¿¼­ *¾Æ·¡¿¡* ÇÑ ÁÙÀÌ ¿­¸®¸ç, Ä¿¼­´Â ÆíÁý ¸ðµå·Î
+ ¿­¸° ÁÙ À§¿¡ À§Ä¡ÇÏ°Ô µË´Ï´Ù.
+ ´ë¹®ÀÚ O ¸¦ ÀÔ·ÂÇϸé Ä¿¼­°¡ ÀÖ´Â ÁÙÀÇ *À§·Î* »õ ÁÙÀ» ¿­°Ô µË´Ï´Ù.
+
+ 2. a ¸¦ ÀÔ·ÂÇϸé Ä¿¼­ *´ÙÀ½¿¡* ±ÛÀ» ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.
+ ´ë¹®ÀÚ A ¸¦ ÀÔ·ÂÇϸé ÀÚµ¿À¸·Î ±× ÁÙÀÇ ³¡¿¡ ±ÛÀÚ¸¦ Ãß°¡ÇÏ°Ô µË´Ï´Ù.
+
+ 3. ´ë¹®ÀÚ R À» ÀÔ·ÂÇϸé <ESC> ¸¦ ´­·¯¼­ ³ª°¡±â Àü±îÁö ¹Ù²Ù±â ¸ðµå°¡ µË´Ï´Ù.
+
+ 4. ":set xxx" ¸¦ Çϸé "xxx" ¿É¼ÇÀÌ ¼³Á¤µË´Ï´Ù.
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 7: ¿Â¶óÀÎ µµ¿ò¸» ¸í·É
+
+
+ ** ¿Â¶óÀÎ µµ¿ò¸» ½Ã½ºÅÛ »ç¿ëÇϱâ **
+
+ ºöÀº Æø ³ÐÀº ¿Â¶óÀÎ µµ¿ò¸» ½Ã½ºÅÛÀ» Á¦°øÇÕ´Ï´Ù. µµ¿ò¸»À» º¸·Á¸é,
+ ´ÙÀ½ ¼¼°¡Áö Áß Çϳª¸¦ ½ÃµµÇغ¸½Ê½Ã¿À:
+ - <HELP> Å°¸¦ ´©¸¥´Ù. (Å°°¡ ÀÖ´Â °æ¿ì)
+ - <F1> Å°¸¦ ´©¸¥´Ù. (Å°°¡ ÀÖ´Â °æ¿ì)
+ - :help <ENTER> ¶ó°í ÀÔ·ÂÇÑ´Ù.
+
+ µµ¿ò¸» âÀ» ´ÝÀ¸·Á¸é :q <ENTER> ¶ó°í ÀÔ·ÂÇϽʽÿÀ.
+
+ ":help" ¶ó´Â ¸í·É¿¡ ÀÎÀÚ¸¦ ÁÖ¸é ¾î¶² ÁÖÁ¦¿¡ °üÇÑ µµ¿ò¸»À» ãÀ» ¼ö ÀÖ½À´Ï´Ù.
+ ´ÙÀ½ ¸í·ÉÀ» ³»·Á º¸½Ê½Ã¿À. ( <ENTER> Å°¸¦ ´©¸£´Â °ÍÀ» ÀØÁö ¸¶½Ê½Ã¿À.)
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 8: ½ÃÀÛ ½ºÅ©¸³Æ® ¸¸µé±â
+
+ ** ºöÀÇ ±â´É Äѱâ **
+
+ ºöÀº Vi º¸´Ù ÈξÀ ¸¹Àº ±â´ÉÀ» °¡Áö°í ÀÖÁö¸¸, ´ëºÎºÐÀº ±âº»ÀûÀ¸·Î ÀÛµ¿ÇÏÁö
+ ¾Ê½À´Ï´Ù. ´õ ¸¹Àº ±â´ÉÀ» ½áº¸·Á¸é, "vimrc" ¶ó´Â ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù.
+
+ 1. "vimrc" ÆÄÀÏÀ» ¼öÁ¤ÇսôÙ. ÀÌ ÆÄÀÏÀº »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡ µû¶ó ´Ù¸¨´Ï´Ù:
+ 1. Start editing the "vimrc" file, this depends on your system:
+ :edit ~/.vimrc UnixÀÇ °æ¿ì
+ :edit $VIM/_vimrc MS-WindowsÀÇ °æ¿ì
+
+ 2. ÀÌÁ¦ "vimrc"ÀÇ ¿¹Á¦¸¦ ÀоîµéÀÔ´Ï´Ù:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. ´ÙÀ½°ú °°ÀÌ ÇÏ¿© ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù:
+
+ :write
+
+ ´ÙÀ½ ¹ø¿¡ ºöÀ» ½ÃÀÛÇϸé, ±¸¹® °­Á¶(syntax highlighting)ÀÌ »ç¿ëµÉ °ÍÀÔ´Ï´Ù.
+ ¸ðµç ¿øÇÏ´Â ¼³Á¤À» ÀÌ "vimrc" ÆÄÀÏ¿¡ ³Ö¾îµÑ ¼ö ÀÖ½À´Ï´Ù.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ ÀÌ°ÍÀ¸·Î ºö ±æÀâÀ̸¦ ¸¶Ä¨´Ï´Ù. ÀÌ ±æÀâÀÌ´Â ºö ÆíÁý±â¿¡ ´ëÇÑ °£·«ÇÑ °³¿ä¸¦
+ º¸¿©ÁÖ±â À§ÇÑ Àǵµ·Î Á¦À۵ǾúÀ¸¸ç, ÀÌ ÆíÁý±â¸¦ Á¤¸» °£´ÜÈ÷ »ç¿ëÇϱ⿡
+ ÃæºÐÇÒ »ÓÀÔ´Ï´Ù. ºö¿¡´Â ÀÌ ±æÀâÀÌ¿Í´Â ºñ±³ÇÒ ¼ö ¾øÀ» ¸¸Å­ ÈξÀ ¸¹Àº ¸í·ÉÀÌ
+ ÀÖ½À´Ï´Ù. ´ÙÀ½ »ç¿ëÀÚ ¸Å´º¾óÀ» ÀÐÀ¸½Ê½Ã¿À: ":help user-manual"
+
+ º¸´Ù ÀÚ¼¼È÷ ÀÐ°í °øºÎÇÏ·Á¸é, ´ÙÀ½ Ã¥À» ÃßõÇØ µå¸³´Ï´Ù:
+ Vim - Vi Improved - by Steve Oualline
+ ÃâÆÇ»ç: New Riders
+ ÀÌ Ã¥Àº ¿ÏÀüÈ÷ ºö¿¡ ´ëÇؼ­¸¸ ´Ù·ç°í ÀÖ½À´Ï´Ù. ƯÈ÷ Ãʺ¸Àڵ鿡°Ô À¯¿ëÇÕ´Ï´Ù.
+ ¸¹Àº ¿¹Á¦¿Í ±×¸²ÀÌ ÀÖ½À´Ï´Ù.
+ ´ÙÀ½À» Âü°íÇϽʽÿÀ: http://iccf-holland.org/click5.html
+
+ ´ÙÀ½ Ã¥Àº Á» ¿À·¡µÈ Ã¥À¸·Î ºöº¸´Ù´Â Vi¿¡ ´ëÇØ ´Ù·ç°í ÀÖÁö¸¸, ¿ª½Ã ÃßõÇÒ ¸¸
+ ÇÕ´Ï´Ù:
+ Learning the Vi Editor - by Linda Lamb
+ ÃâÆÇ»ç: O'Reilly & Associates Inc.
+ Vi·Î ÇÏ°í ½ÍÀº °ÅÀÇ ¸ðµç °Í¿¡ ´ëÇØ ¾Ë ¼ö ÀÖ´Â ÁÁÀº Ã¥ÀÔ´Ï´Ù.
+ ¿©¼¸¹ø° °³Á¤ÆÇÀº ºö¿¡ °üÇÑ ³»¿ëÀ» Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù.
+
+ ÀÌ ±æÀâÀÌ´Â Colorado School of MinesÀÇ Michael C. Pierce ¿Í
+ Robert K. Ware °¡ Colorado State UniversityÀÇ Charles Smith ÀÇ ¾ÆÀ̵ð¾î¿¡
+ Âø¾ÈÇÏ¿© ½è½À´Ï´Ù.
+ . E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+ ÀÌ ¹®¼­ÀÇ Çѱ¹¾î ¹öÀü¿¡ °üÇÑ ¹®ÀÇ´Â ´ÙÀ½ »çÀÌÆ®·Î ÇØÁֽʽÿÀ.
+ http://wiki.kldp.org/wiki.php/VimTutorKo
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.ko.utf-8 b/runtime/tutor/tutor.ko.utf-8
new file mode 100644
index 000000000..4498c9f6d
--- /dev/null
+++ b/runtime/tutor/tutor.ko.utf-8
@@ -0,0 +1,812 @@
+===============================================================================
+= ë¹” ê¸¸ìž¡ì´ (VIM Tutor) ì— ì˜¤ì‹  ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤ - Version 1.5 =
+===============================================================================
+
+ ë¹”(Vim)ì€ ì´ ê¸¸ìž¡ì´ì—ì„œ 다 설명할 수 ì—†ì„ ë§Œí¼ ë§Žì€ ëª…ë ¹ì„ ê°€ì§„
+ 매우 강력한 편집기입니다. ì´ ê¸¸ìž¡ì´ëŠ” ë¹”ì„ ì‰½ê²Œ 전천후 편집기로 사용할
+ 수 있ë„ë¡ ì¶©ë¶„í•œ ëª…ë ¹ì— ëŒ€í•´ 설명하고 있습니다.
+
+ ì´ ê¸¸ìž¡ì´ë¥¼ 떼는 ë°ì—는 실습하는 ë°ì— 얼마나 ì‹œê°„ì„ ì“°ëŠ” ê°€ì— ë”°ë¼ì„œ
+ 25-30 분 ì •ë„ê°€ 걸립니다.
+
+ ì´ ì—°ìŠµì— í¬í•¨ëœ ëª…ë ¹ì€ ë‚´ìš©ì„ ê³ ì¹©ë‹ˆë‹¤. ì´ íŒŒì¼ì˜ ë³µì‚¬ë³¸ì„ ë§Œë“¤ì–´ì„œ
+ 연습하세요. (vimtutor 를 통해 시작했다면, ì´ë¯¸ ë³µì‚¬ë³¸ì„ ì‚¬ìš©í•˜ëŠ”
+ 중입니다.)
+
+ 중요한 것ì€, ì´ ê¸¸ìž¡ì´ê°€ ì§ì ‘ ì¨ë³´ë©´ì„œ ë°°ìš°ë„ë¡ ê³ ë ¤ë˜ì–´ 있다는 것입니다.
+ ëª…ë ¹ì„ ì œëŒ€ë¡œ ìµížˆë ¤ë©´, ì§ì ‘ 실행해보는 ê²ƒì´ í•„ìš”í•©ë‹ˆë‹¤. ë‚´ìš©ì„ ì½ëŠ”
+ 것만으로는, ëª…ë ¹ì„ ìžŠì–´ë²„ë¦¬ê²Œ ë  ê²ƒìž…ë‹ˆë‹¤.
+
+ ìž ì´ì œ, Caps Lock(Shift-Lock) 키가 눌려있지 ì•Šì€ì§€ 확ì¸í•´ë³´ì‹œê³ , j 키를
+ 충분히 눌러서 Lesson 1.1ì´ í™”ë©´ì— ê°€ë“ ì°¨ë„ë¡ ì›€ì§ì—¬ë´…시다.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.1: 커서 움ì§ì´ê¸°
+
+ ** 커서를 움ì§ì´ë ¤ë©´, í‘œì‹œëœ ëŒ€ë¡œ h,j,k,l 키를 누르십시오. **
+ ^
+ k 힌트: h 키는 ì™¼ìª½ì— ìžˆìœ¼ë©°, 왼쪽으로 움ì§ìž…니다.
+ < h l > l 키는 ì˜¤ë¥¸ìª½ì— ìžˆìœ¼ë©°, 오른쪽으로
+ j 움ì§ìž…니다.
+ v j 키는 아래방향 화살표처럼 ìƒê²¼ìŠµë‹ˆë‹¤.
+
+ 1. ìµìˆ™í•´ì§ˆ 때까지 커서를 스í¬ë¦° ìƒì—ì„œ 움ì§ì—¬ 보십시오.
+
+ 2. 아래 방향키 (j)를 ë°˜ë³µìž…ë ¥ì´ ë  ë•Œê¹Œì§€ 누르고 계십시오.
+---> ì´ì œ ë‹¤ìŒ lesson으로 가는 ë°©ë²•ì„ ì•Œê²Œ ë˜ì—ˆìŠµë‹ˆë‹¤.
+
+ 3. 아래 방향키를 ì´ìš©í•˜ì—¬, Lesson 1.2 ë¡œ 가십시오.
+
+참고: ì›í•˜ì§€ 않는 무언가가 ìž…ë ¥ì´ ë˜ì—ˆë‹¤ë©´, <ESC>를 눌러서, 명령 모드로
+ ëŒì•„가십시오. ê·¸ í›„ì— ì›í•˜ëŠ” ëª…ë ¹ì„ ë‹¤ì‹œ 입력하십시오.
+
+참고: 커서키 ë˜í•œ ìž‘ë™í•  것입니다. 하지만 hjklì— ìµìˆ™í•´ì§€ë©´, 커서키보다
+ 훨씬 빠르게 ì´ë™í•  수 ìžˆì„ ê²ƒìž…ë‹ˆë‹¤.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.2: ë¹”ì„ ì‹œìž‘í•˜ê³  ë내기
+
+
+ !! 주ì˜: 아래 있는 단계를 실행하기 ì „ì—, ì´ lesson 전체를 ì½ìœ¼ì‹­ì‹œì˜¤!!
+
+ 1. <ESC> 키를 눌러서 확실하게 명령 모드로 빠져 나옵니다.
+
+ 2. 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•©ë‹ˆë‹¤: :q! <ENTER>
+
+---> ì´ë ‡ê²Œ 하면, ë°”ë€ ë‚´ìš©ì„ *저장하지 ì•Šê³ * 편집기를 빠져나갑니다.
+ 저장한 후 빠져나가려면 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•©ë‹ˆë‹¤:
+ :wq <ENTER>
+
+ 3. 쉘 프롬프트가 ë³´ì¸ë‹¤ë©´, 다시 길잡ì´ë¡œ ëŒì•„오기 위해 다ìŒê³¼ ê°™ì´
+ 입력합니다.
+ vimtutor <ENTER>
+ ë˜ëŠ” 다ìŒê³¼ ê°™ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+ vim tutor.ko <ENTER>
+
+---> 'vim' ì€ ë¹” 편집기로 들어가는 ê²ƒì„ ëœ»í•˜ë©°, 'tutor.ko'는 편집하려는
+ 파ì¼ì„ 뜻합니다.
+
+ 4. 위ì—ì„œ ì´ì•¼ê¸°í•œ 단계를 기억하였으며, í™•ì‹ ì´ ì„œë©´, 1ì—ì„œ 3까지를
+ 수행하여 편집기를 나갔다가 다시 들어와보십시오. 그 후 커서를 아래로
+ 움ì§ì—¬ Lesson 1.3 으로 가십시오.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.3: í…스트 편집 - 지우기
+
+
+** 명령 모드ì—ì„œ x 를 누르면 커서가 위치한 ê³³ì˜ ê¸€ìžë¥¼ 지울 수 있습니다. **
+
+ 1. ----> ë¡œ í‘œì‹œëœ ê³³ìœ¼ë¡œ 커서를 옮겨보십시오.
+
+ 2. 오타를 수정하기 위해, 커서를 지울 ê¸€ìž ìœ„ë¡œ 움ì§ì—¬ 보십시오.
+
+ 3. x 키를 눌러서 지워야할 글ìžë¥¼ 지우십시오.
+
+ 4. 2ì—ì„œ 4까지를 반복하여 ë¬¸ìž¥ì´ ì˜¬ë°”ë¥´ê²Œ ë˜ë„ë¡ í•˜ì—¬ 보십시오.
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. ë¬¸ìž¥ì´ ì •í™•í•´ì¡Œë‹¤ë©´, Lesson 1.4ë¡œ 가십시오.
+
+주ì˜: ì´ ê¸¸ìž¡ì´ë¥¼ ë³´ë©´ì„œ 외우려고 하지ë§ê³ , ì§ì ‘ 사용해보면서 ìµížˆê¸¸
+ ë°”ëžë‹ˆë‹¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 1.4: í…스트 편집 - 삽입 (INSERTION)
+
+
+ ** 명령 모드ì—ì„œ i 를 누르면 í…스트를 입력할 수 있습니다. **
+
+ 1. 커서를 첫번째 ---> ë¡œ í‘œì‹œëœ ì¤„ë¡œ 움ì§ìž…니다.
+
+ 2. 첫번째 ì¤„ì„ ë‘번째 줄과 ë˜‘ê°™ì´ ë§Œë“¤ê²ƒìž…ë‹ˆë‹¤. í…스트가 들어가야할
+ ê³³ 다ìŒë¶€í„° 첫번째 ê¸€ìž ìœ„ì— ì»¤ì„œë¥¼ 옮겨 놓습니다.
+
+ 3. i 키를 누른 후, 필요한 ë‚´ìš©ì„ ìž…ë ¥í•©ë‹ˆë‹¤.
+
+ 4. 수정한 후ì—는 <ESC> 를 눌러서 명령 모드로 ëŒì•„갑니다.
+ ë¬¸ìž¥ì„ ì˜¬ë°”ë¥´ê²Œ 만들기 위해 2ì—ì„œ 4ì˜ ê³¼ì •ì„ ë°˜ë³µí•©ë‹ˆë‹¤.
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. í…스트를 삽입하는 ë°ì— ìµìˆ™í•´ì¡Œë‹¤ë©´, ìš”ì•½ì„ ë´ì£¼ì‹­ì‹œì˜¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 1 요약
+
+
+ 1. 커서를 움ì§ì¼ ë•Œì—는 화살표 키나 hjkl 키를 ì´ìš©í•©ë‹ˆë‹¤.
+ h (왼쪽) j (아래) k (위) l (오른쪽)
+
+ 2. 쉘 프롬프트ì—ì„œ ë¹”ì„ ì‹œìž‘í•˜ë ¤ë©´ vim FILENAME <ENTER>
+
+ 3. 수정한 ë‚´ìš©ì„ ë¬´ì‹œí•œ 채로 ë¹”ì—ì„œ 빠져나가려면 <ESC> :q! <ENTER>
+ 저장한 후 ë¹”ì—ì„œ 빠져나가려면 <ESC> :wq <ENTER>
+
+ 4. 명령 모드ì—ì„œ 커서가 위치한 ê³³ì˜ ê¸€ìžë¥¼ 지우려면 x 를 입력합니다.
+
+ 5. 명령 모드ì—ì„œ 커서가 위치한 ê³³ì— í…스트를 삽입하려면
+ i 를 누른 후 í…스트를 입력하고 <ESC> 를 누릅니다.
+
+참고: <ESC>는 명령 모드로 ëŒì•„가는 ë° ì“°ë©°, ì›ì¹˜ 않는 명령ì´ë‚˜ 완전히 ìž…ë ¥ë˜ì§€
+ ì•Šì€ ëª…ë ¹ì„ ì·¨ì†Œí•˜ëŠ” ë°ì—ë„ ì”니다.
+
+그럼 Lesson 2를 시작합시다.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.1: 삭제(DELETION) 명령
+
+
+ ** í•œ 단어를 ë까지 지우려면 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번 ê³¼ì •ì„ ë‹¤ì‹œ 하여 ë¬¸ìž¥ì„ ì •í™•í•˜ê²Œ 만든 ë’¤ Lesson 2.2ë¡œ 가십시오.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.2: 다른 삭제 명령
+
+ ** d$ ë¼ê³  치면 ê·¸ 줄 ë까지 지워집니다. **
+
+ 1. <ESC> 키를 눌러서 확실하게 명령 모드로 빠져 나옵니다.
+
+ 2. ì•„ëž˜ì— ---> ë¡œ í‘œì‹œëœ ì¤„ 까지 커서를 옮ê¹ë‹ˆë‹¤.
+
+ 3. 올바른 ì¤„ì˜ ë으로 커서를 옮ê¹ë‹ˆë‹¤. (첫번째로 나오는 . 다ìŒìž…니다.)
+
+ 4. d$ ë¼ê³  ì³ì„œ 줄 ë까지 지ì›ë‹ˆë‹¤.
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+ 5. ì–´ë–¤ ì¼ì´ ì¼ì–´ë‚¬ëŠ”지 ì´í•´í•˜ê¸° 위해 Lesson 2.3 으로 가십시오.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: 명령과 ì ìš© 대ìƒì— 대해
+
+
+ ì‚­ì œ 명령 dì˜ í˜•ì‹ì€ 다ìŒê³¼ 같습니다.
+
+ [횟수] d ëŒ€ìƒ ë˜ëŠ” d [횟수] 대ìƒ
+ 여기서
+ 횟수 - ëª…ë ¹ì„ ëª‡ 번 수행할 지 (옵션, 기본값=1).
+ d - 지우는 명령
+ ëŒ€ìƒ - ì•„ëž˜ì— ì œì‹œëœ ëŒ€ìƒì— 대해 ëª…ë ¹ì„ ìˆ˜í–‰
+
+ ì ìš© 가능한 대ìƒì˜ 종류:
+ w - 커서ì—ì„œ ê·¸ ë‹¨ì–´ì˜ ë까지 (공백 í¬í•¨.)
+ e - 커서ì—ì„œ ê·¸ ë‹¨ì–´ì˜ ë까지 (ê³µë°±ì„ í¬í•¨í•˜ì§€ ì•ŠìŒ.)
+ $ - 커서ì—ì„œ ê·¸ ì¤„ì˜ ë까지
+
+참고: í˜¸ê¸°ì‹¬ì´ ìžˆë‹¤ë©´, 명령 모드ì—ì„œ 명령 ì—†ì´ ëŒ€ìƒì„ 입력해보십시오.
+ 위ì—ì„œ ì´ì•¼ê¸°í•œ 대ìƒì˜ 목ë¡ì— ë”°ë¼ ì»¤ì„œê°€ 움ì§ì´ê²Œ ë©ë‹ˆë‹¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.4: '명령-대ìƒ' ì— ëŒ€í•œ 예외
+
+
+ ** 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.5: 취소(UNDO) 명령
+
+
+ ** 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. ì´ ëª…ë ¹ì€ ë§¤ìš° 유용합니다. 그럼 Lesson 2 요약으로 넘어가ë„ë¡ í•©ì‹œë‹¤.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 2 요약
+
+
+ 1. 커서가 위치한 곳부터 ë‹¨ì–´ì˜ ë까지 지우려면: dw
+
+ 2. 커서가 위치한 곳부터 줄 ë까지 지우려면: d$
+
+ 3. 줄 전체를 지우려면: dd
+
+ 4. 명령 모드ì—ì„œ 내리는 ëª…ë ¹ì˜ í˜•ì‹ì€ 다ìŒê³¼ 같습니다:
+
+ [횟수] 명령 ëŒ€ìƒ ë˜ëŠ” 명령 [횟수] 대ìƒ
+ 여기서:
+ 횟수 - ê·¸ ëª…ë ¹ì„ ëª‡ 번 반복할 것ì¸ê°€
+ 명령 - ì–´ë–¤ ëª…ë ¹ì„ ë‚´ë¦´ 것ì¸ê°€ ( 예를 들어, ì‚­ì œì¸ ê²½ìš°ëŠ” d )
+ ëŒ€ìƒ - ëª…ë ¹ì´ ë™ìž‘í•  대ìƒ, 예를 들어 w (단어), $ (ì¤„ì˜ ë) 등.
+
+ 5. ì´ì „ í–‰ë™ì„ 취소하려면: u (ì†Œë¬¸ìž u)
+ í•œ 줄ì—ì„œ 수정한 ê²ƒì„ ëª¨ë‘ ì·¨ì†Œí•˜ë ¤ë©´: U (ëŒ€ë¬¸ìž U)
+ 취소한 ê²ƒì„ ë‹¤ì‹œ 실행하려면: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.1: 붙ì´ê¸°(PUT) 명령
+
+
+ ** p 를 입력하여 마지막으로 지운 ë‚´ìš©ì„ ì»¤ì„œ ë’¤ì— ë¶™ìž…ë‹ˆë‹¤. **
+
+ 1. ì•„ëž˜ì— ìžˆëŠ” ë¬¸ë‹¨ì˜ ì²« 줄로 커서를 움ì§ì´ì‹­ì‹œì˜¤.
+
+ 2. dd 를 입력하여 ê·¸ ì¤„ì„ ì§€ì›Œì„œ ë¹”ì˜ ë²„í¼ì— 저장합니다.
+
+ 3. 아까 지운 ì¤„ì´ ê°€ì•¼í•  ìœ„ì¹˜ì˜ *윗줄로* 커서를 옮ê¹ë‹ˆë‹¤.
+
+ 4. 명령 모드ì—ì„œ, p 를 입력하여 ê·¸ ì¤„ì„ ì œëŒ€ë¡œ ëœ ìžë¦¬ë¡œ 옮ê¹ë‹ˆë‹¤.
+
+ 5. 2ì—ì„œ 4를 반복하여 모든 ì¤„ì˜ ìˆœì„œë¥¼ 바로 잡으십시오.
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: 치환(REPLACE) 명령
+
+
+ ** 커서 ì•„ëž˜ì˜ ê¸€ìž í•˜ë‚˜ë¥¼ 바꾸려면, 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. Lesson 3.2 ë¡œ ì´ë™í•©ì‹œë‹¤.
+
+주ì˜: 외우지 ë§ê³ , ì§ì ‘ í•´ë³´ë©´ì„œ ìµí˜€ì•¼ 한다는 ê²ƒì„ ìžŠì§€ 마십시오.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.3: 변환(CHANGE) 명령
+
+
+ ** í•œ ë‹¨ì–´ì˜ ì¼ë¶€ë‚˜ 전체를 바꾸려면, 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 는 단어를 치환하는 것 ë¿ë§Œ 아니ë¼, ë‚´ìš©ì„ ì‚½ìž…í•  수 있ë„ë¡ í•œë‹¤ëŠ” 것ì—
+주ì˜í•©ì‹œë‹¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.4: c 를 ì´ìš©í•œ 다른 변환 명령
+
+
+ ** 변환 ëª…ë ¹ì€ ì‚­ì œí•  ë•Œ ì´ìš©í•œ 대ìƒì— 대해 ì ìš©í•  수 있습니다. **
+
+ 1. 변환 ëª…ë ¹ì€ ì‚­ì œì™€ ë™ì¼í•œ ë°©ì‹ìœ¼ë¡œ ë™ìž‘합니다. 형ì‹ì€ 다ìŒê³¼ 같습니다:
+
+ [횟수] c ëŒ€ìƒ ë˜ëŠ” c [횟수] 대ìƒ
+
+ 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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 3 요약
+
+
+ 1. ì´ë¯¸ 지운 ë‚´ìš©ì„ ë˜ëŒë¦¬ë ¤ë©´, p 를 누르십시오. ì´ ëª…ë ¹ì€ ì»¤ì„œ *다ìŒì—*
+ 지워진 ë‚´ìš©ì„ ë¶™ìž…ë‹ˆë‹¤(PUT). (í•œ ì¤„ì„ ì§€ìš´ 경우ì—는 커서 ë‹¤ìŒ ì¤„ì—
+ 지워진 ë‚´ìš©ì´ ë¶™ìŠµë‹ˆë‹¤.)
+
+ 2. 커서 ì•„ëž˜ì˜ ê¸€ìžë¥¼ 치환하려면(REPLACE), r ì„ ëˆ„ë¥¸ 후 ì›ëž˜ ê¸€ìž ëŒ€ì‹ 
+ 바꾸어 ë„£ì„ ê¸€ìžë¥¼ 입력합니다.
+
+ 3. 변환 명령(CHANGE)ì€ ì»¤ì„œì—ì„œ 부터 지정한 대ìƒì˜ ë까지 바꿀 수 있는
+ 명령입니다. 예를 들어, 커서 위치ì—ì„œ ë‹¨ì–´ì˜ ë까지 바꾸려면, cw 를
+ 입력하면 ë˜ë©°, c$ 는 줄 ë까지 바꾸는 ë° ì“°ìž…ë‹ˆë‹¤.
+
+ 4. 변환 ëª…ë ¹ì˜ í˜•ì‹ì€ 다ìŒê³¼ 같습니다:
+
+ [횟수] c ëŒ€ìƒ ë˜ëŠ” c [횟수] 대ìƒ
+
+계ì†í•´ì„œ ë‹¤ìŒ Lesson ì„ ì§„í–‰í•©ì‹œë‹¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.1: 위치와 파ì¼ì˜ ìƒíƒœ
+
+
+ ** CTRL-g 를 누르면 íŒŒì¼ ë‚´ì—ì„œì˜ í˜„ìž¬ 위치와 파ì¼ì˜ ìƒíƒœë¥¼ ë³¼ 수 있습니다.
+ SHIFT-G 를 누르면 íŒŒì¼ ë‚´ì˜ ì¤„ë¡œ ì´ë™í•©ë‹ˆë‹¤. **
+
+ 주ì˜: ì•„ëž˜ì˜ ë‹¨ê³„ë¥¼ ë”°ë¼í•˜ê¸° ì „ì—, ì´ Lesson 전체를 먼저 ì½ìœ¼ì‹­ì‹œì˜¤.
+
+ 1. CTRL 키를 누른 ìƒíƒœì—ì„œ g 를 누릅니다. íŒŒì¼ ì´ë¦„ê³¼ 현재 위치한 줄ì´
+ í‘œì‹œëœ ìƒíƒœì¤„ì´ í™”ë©´ ì•„ëž˜ì— í‘œì‹œë  ê²ƒìž…ë‹ˆë‹¤. 3번째 단계를 위해 ê·¸
+ 줄 번호를 기억하고 계십시오.
+
+ 2. SHIFT-G 를 누르면 파ì¼ì˜ 마지막으로 ì´ë™í•©ë‹ˆë‹¤.
+
+ 3. 아까 ê¸°ì–µí–ˆë˜ ì¤„ 번호를 입력한 후 SHIFT-G 를 누르십시오. ì´ë ‡ê²Œ 하면
+ 처ìŒì— CTRL-g 를 ëˆŒë €ë˜ ìž¥ì†Œë¡œ ë˜ëŒì•„가게 ë  ê²ƒìž…ë‹ˆë‹¤.
+ (번호를 입력할 ë•Œ, ì´ê²ƒì€ í™”ë©´ì— í‘œì‹œë˜ì§€ 않습니다.)
+
+ 4. ìžì‹ ì´ ìƒê²¼ë‹¤ë©´, 1ì—ì„œ 3까지를 실행해보십시오.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.2: 찾기 명령
+
+
+ ** / 를 누른 후 검색할 문구를 입력하십시오. **
+
+ 1. 명령 모드ì—ì„œ / 를 입력하십시오. : 명령ì—서와 마찬가지로, 화면 아래ì—
+ / 와 커서가 í‘œì‹œë  ê²ƒìž…ë‹ˆë‹¤.
+
+ 2. 'errroor' ë¼ê³  친 후 <ENTER> 를 치십시오. ì´ ë‹¨ì–´ë¥¼ 찾으려고 합니다.
+
+ 3. ê°™ì€ ë¬¸êµ¬ë¥¼ 다시 찾으려면, 간단히 n ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤.
+ ê°™ì€ ë¬¸êµ¬ë¥¼ 반대 방향으로 찾으려면, Shift-N ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤.
+
+ 4. 문구를 역방향으로 찾으려면, / 대신 ? 를 ì´ìš©í•˜ë©´ ë©ë‹ˆë‹¤.
+
+---> "errroor" is not the way to spell error; errroor is an error.
+
+참고: 찾는 ì¤‘ì— íŒŒì¼ì˜ ëì— ë‹¤ë‹¤ë¥´ê²Œ ë˜ë©´, 파ì¼ì˜ 처ìŒë¶€í„° 다시 찾게 ë©ë‹ˆë‹¤.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.3: ê´„í˜¸ì˜ ì§ ì°¾ê¸°
+
+
+ ** % 를 눌러서 ), ], } ì˜ ì§ì„ 찾습니다. **
+
+ 1. 커서를 ---> ë¡œ í‘œì‹œëœ ì¤„ì˜ (, [, { 중 í•˜ë‚˜ì— ê°€ì ¸ë‹¤ 놓습니다.
+
+ 2. % 를 입력해 봅시다.
+
+ 3. 커서가 ì§ì´ 맞는 괄호로 ì´ë™í•  것입니다.
+
+ 4. % 를 입력하여, ì´ì „ 괄호로 ë˜ëŒì•„ 옵시다.
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+참고: ì§ì´ 맞지 않는 괄호가 있는 í”„ë¡œê·¸ëž¨ì„ ë””ë²„ê¹…í•  ë•Œì— ë§¤ìš° 유용합니다!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 4.4: ì—러를 수정하는 방법
+
+
+ ** :s/old/new/g 하면 'old' 를 'new' 로 치환(SUBTITUTE)합니다. **
+
+ 1. 커서를 ---> ë¡œ í‘œì‹œëœ ì¤„ì— ê°€ì ¸ë‹¤ 놓습니다.
+
+ 2. :s/thee/the 를 입력한 후 <ENTER> 를 칩니다. ì´ ëª…ë ¹ì€ ê·¸ 줄ì—ì„œ
+ 처ìŒìœ¼ë¡œ ë°œê²¬ëœ ê²ƒë§Œ 바꾼다는 ê²ƒì— ì£¼ì˜í•˜ì‹­ì‹œì˜¤.
+
+ 3. ì´ë²ˆì—는 :s/thee/the/g 를 입력합니다. ì´ëŠ” ê·¸ 줄 ì „ì²´(globally)를
+ 치환한다는 ê²ƒì„ ì˜ë¯¸í•©ë‹ˆë‹¤.
+
+---> thee best time to see thee flowers is in thee spring.
+
+ 4. ë‘ ì¤„ 사ì´ì˜ 모든 문ìžì—´ì— 대해 치환하려면 다ìŒê³¼ ê°™ì´ í•©ë‹ˆë‹¤,
+ :#,#s/old/new/g #,# 는 ë‘ ì¤„ì˜ ì¤„ë²ˆí˜¸ë¥¼ 뜻합니다.
+ :%s/old/new/g íŒŒì¼ ì „ì²´ì—ì„œ ë°œê²¬ëœ ëª¨ë“  ê²ƒì„ ì¹˜í™˜í•˜ëŠ” 경우입니다.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 4 요약
+
+
+ 1. CTRL-g 는 파ì¼ì˜ ìƒíƒœì™€ íŒŒì¼ ë‚´ì—ì„œì˜ í˜„ìž¬ 위치를 표시합니다.
+ SHIFT-G 는 파ì¼ì˜ ë으로 ì´ë™í•©ë‹ˆë‹¤. 줄번호를 입력한 후 SHIFT-G를
+ 입력하면, ê·¸ 줄로 ì´ë™í•©ë‹ˆë‹¤.
+
+ 2. / 를 입력한 후 문구를 입력하면 그 문구를 아랫방향으로 찾습니다.
+ ? 를 입력한 후 문구를 입력하면 윗방향으로 찾습니다.
+ 검색 후, n ì„ ìž…ë ¥í•˜ë©´ ê°™ì€ ë°©í–¥ìœ¼ë¡œ ë‹¤ìŒ ë¬¸êµ¬ë¥¼ 찾으며,
+ Shift-N ì„ ìž…ë ¥í•˜ë©´ 반대 방향으로 찾습니다.
+
+ 3. 커서가 (,),[,],{,} ìœ„ì— ìžˆì„ ë•Œì— % 를 입력하면 ìƒì‘하는 ì§ì„
+ 찾아갑니다.
+
+ 4. ì–´ë–¤ ì¤„ì— ì²˜ìŒ ë“±ìž¥í•˜ëŠ” old를 newë¡œ 바꾸려면 :s/old/new
+ í•œ ì¤„ì— ë“±ìž¥í•˜ëŠ” 모든 old를 newë¡œ 바꾸려면 :s/old/new/g
+ ë‘ ì¤„ #,# 사ì´ì—ì„œ ì¹˜í™˜ì„ í•˜ë ¤ë©´ :#,#s/old/new/g
+ íŒŒì¼ ë‚´ì˜ ëª¨ë“  문구를 치환하려면 :%s/old/new/g
+ 바꿀 때마다 확ì¸ì„ 거치려면 'c'를 붙여서 :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.1: 외부 명령 실행하는 방법
+
+
+ ** :! ì„ ìž…ë ¥í•œ 후 실행하려는 ëª…ë ¹ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤. **
+
+ 1. 친숙한 ëª…ë ¹ì¸ : 를 입력하면 커서가 화면 아래로 ì´ë™í•©ë‹ˆë‹¤. 명령ì„
+ 입력할 수 있게 ë©ë‹ˆë‹¤.
+
+ 2. ì´ì œ ! (ëŠë‚Œí‘œ) 를 입력하십시오. ì´ë ‡ê²Œ 하면 외부 쉘 ëª…ë ¹ì„ ì‹¤í–‰í• 
+ 수 있습니다.
+
+ 3. 시험삼아 ! 다ìŒì— ls 를 입력한 후 <ENTER> 를 ì³ë³´ì‹­ì‹œì˜¤. 쉘 프롬프트
+ ì—서처럼 ë””ë ‰í† ë¦¬ì˜ ëª©ë¡ì´ ì¶œë ¥ë  ê²ƒìž…ë‹ˆë‹¤. ls ê°€ ë™ìž‘하지 않는다면
+ :!dir ì„ ì‹œë„í•´ 보십시오.
+
+참고: ì–´ë–¤ 외부 ëª…ë ¹ë„ ì´ ë°©ë²•ìœ¼ë¡œ 실행할 수 있습니다.
+
+참고: 모든 : ëª…ë ¹ì€ <ENTER> 를 ì³ì•¼ 마무리 ë©ë‹ˆë‹¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.2: 보다 ìžì„¸í•œ íŒŒì¼ ì €ìž¥
+
+
+ ** ìˆ˜ì •ëœ ë‚´ìš©ì„ íŒŒì¼ë¡œ 저장하려면, :w FILENAME 하십시오. **
+
+ 1. :!dir ë˜ëŠ” :!ls 를 입력하여 ë””ë ‰í† ë¦¬ì˜ ë¦¬ìŠ¤íŠ¸ë¥¼ 얻어옵니다.
+ ìœ„ì˜ ëª…ë ¹ 후 <ENTER>를 ì³ì•¼í•œë‹¤ëŠ” ê²ƒì€ ì´ë¯¸ 알고 ìžˆì„ ê²ƒìž…ë‹ˆë‹¤.
+
+ 2. TEST 처럼 존재하지 않는 íŒŒì¼ ì´ë¦„ì„ í•˜ë‚˜ 고르십시오.
+
+ 3. ì´ì œ :w TEST ë¼ê³  입력하십시오. (TEST는 ë‹¹ì‹ ì´ ì„ íƒí•œ íŒŒì¼ ì´ë¦„입니다.)
+
+ 4. ì´ë ‡ê²Œ 하면 ë¹” ê¸¸ìž¡ì´ íŒŒì¼ ì „ì²´ë¥¼ TESTë¼ëŠ” ì´ë¦„으로 저장합니다.
+ 확ì¸í•˜ë ¤ë©´, :!dir ì„ ë‹¤ì‹œ 입력하여, 디렉토리를 살펴보십시오.
+
+참고: ë¹”ì„ ì¢…ë£Œí•œ 후, ë¹”ì„ ë‹¤ì‹œ 실행하여 TESTë¼ëŠ” 파ì¼ì„ ì—´ë©´, ê·¸ 파ì¼ì€
+ ì €ìž¥í–ˆì„ ë•Œì™€ 완벽히 ê°™ì€ ë³µì‚¬ë³¸ì¼ ê²ƒìž…ë‹ˆë‹¤.
+
+ 5. ì´ì œ ê·¸ 파ì¼ì„ 지ì›ì‹œë‹¤.
+ (MS-DOSì—ì„œ): !del TEST
+ (Unixì—ì„œ): !rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.3: ì„ íƒì ìœ¼ë¡œ 저장하는 명령
+
+
+ ** 파ì¼ì˜ ì¼ë¶€ë¥¼ 저장하려면, :#,# w FILENAME 하십시오. **
+
+ 1. 다시 한번, :!dir ì´ë‚˜ !ls 를 입력하여 ë””ë ‰í† ë¦¬ì˜ ëª©ë¡ì„ 받아온 후
+ TEST ê°™ì€ ì í•©í•œ ì´ë¦„ì„ ì„ íƒí•©ë‹ˆë‹¤.
+
+ 2. 커서를 ì´ íŽ˜ì´ì§€ì˜ 처ìŒìœ¼ë¡œ 옮긴 후, Ctrl-g 를 입력하여 ê·¸ ì¤„ì˜ ì¤„ë²ˆí˜¸ë¥¼
+ 알아냅니다. ì´ ë²ˆí˜¸ë¥¼ 기억하십시오!
+
+ 3. ì´ì œ ì´ íŽ˜ì´ì§€ì˜ 마지막으로 가서 Ctrl-g 를 다시 입력하십시오. ì´ ì¤„ì˜
+ 줄번호 ë˜í•œ 기억하십시오!
+
+ 4. ì–´ë–¤ 섹션만 파ì¼ë¡œ 저장하려면, :#,# w TEST 를 입력하면 ë©ë‹ˆë‹¤. ì´ ë•Œ
+ #,# 는 아까 ê¸°ì–µí–ˆë˜ ì‹œìž‘ê³¼ ë 줄번호 입니다. TEST는 íŒŒì¼ ì´ë¦„입니다.
+
+ 5. :!dir ì„ ì´ìš©í•˜ì—¬ 파ì¼ì´ 만들어졌는지 확ì¸í•˜ì‹­ì‹œì˜¤. 지우지는 마십시오.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.4: íŒŒì¼ ì½ì–´ë“¤ì´ê¸°, 합치기
+
+
+ ** ì–´ë–¤ 파ì¼ì˜ ë‚´ìš©ì„ ì‚½ìž…í•˜ë ¤ë©´, :r FILENAME 하십시오 **
+
+ 1. :!dir ì„ ìž…ë ¥í•˜ì—¬ 아까 만든 TEST 파ì¼ì´ 그대로 있는지 확ì¸í•˜ì‹­ì‹œì˜¤.
+
+ 2. 커서를 ì´ íŽ˜ì´ì§€ì˜ 처ìŒìœ¼ë¡œ 움ì§ì´ì‹­ì‹œì˜¤.
+
+주ì˜: 3번째 단계를 실행하면, Lesson 5.3 ì„ ë³´ê²Œ ë  ê²ƒìž…ë‹ˆë‹¤. 그렇게 ë˜ë©´
+ ì´ lesson으로 다시 내려오십시오.
+
+ 3. ì´ì œ TEST 파ì¼ì„ ì½ì–´ë“¤ìž…시다. :r TEST ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤. TEST 는
+ 파ì¼ì˜ ì´ë¦„입니다.
+
+참고: ì½ì–´ë“¤ì¸ 파ì¼ì€ 커서가 위치한 지ì ì—서부터 놓ì´ê²Œ ë©ë‹ˆë‹¤.
+
+ 4. 파ì¼ì´ ì½ì–´ë“¤ì—¬ì§„ ê²ƒì„ í™•ì¸í•˜ê¸° 위해, 뒤로 ì´ë™í•´ì„œ 기존 버전과 파ì¼ì—ì„œ
+ ì½ì–´ë“¤ì¸ 버전, ì´ë ‡ê²Œ Lesson 5.3 ì´ ë‘번 반복ë˜ì—ˆìŒì„ 확ì¸í•˜ì‹­ì‹œì˜¤.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 5 요약
+
+
+ 1. :!command 를 ì´ìš©í•˜ì—¬ 외부 ëª…ë ¹ì„ ì‹¤í–‰í•©ë‹ˆë‹¤.
+
+ 유용한 예:
+ (MS-DOS) (Unix)
+ :!dir :!ls - ë””ë ‰í† ë¦¬ì˜ ëª©ë¡ì„ 보여준다.
+ :!del FILENAME :!rm FILENAME - FILENAMEì´ë¼ëŠ” 파ì¼ì„ 지운다.
+
+ 2. :w FILENAME 하면 현재 ë¹”ì—ì„œ 사용하는 파ì¼ì„ FILENAMEì´ë¼ëŠ” ì´ë¦„으로
+ 디스í¬ì— 저장합니다.
+
+ 3. :#,#w FILENAME 하면 #부터 #ê¹Œì§€ì˜ ì¤„ì„ FILENAMEì´ë¼ëŠ” 파ì¼ë¡œ 저장합니다.
+
+ 4. :r FILENAME ì€ ë””ìŠ¤í¬ì—ì„œ FILENAMEì´ë¼ëŠ” 파ì¼ì„ 불러들여서 커서 위치
+ ë’¤ì— í˜„ìž¬ 파ì¼ì„ 집어넣습니다.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.1: 새 줄 열기(OPEN) 명령
+
+
+ ** o 를 누르면 커서 ì•„ëž˜ì— ì¤„ì„ ë§Œë“¤ê³  편집 모드가 ë©ë‹ˆë‹¤. **
+
+ 1. ì•„ëž˜ì— ---> ë¡œ í‘œì‹œëœ ì¤„ë¡œ 커서를 옮기십시오.
+
+ 2. o (소문ìž)를 ì³ì„œ 커서 *아래ì—* ì¤„ì„ í•˜ë‚˜ 여십시오. 편집 모드가 ë©ë‹ˆë‹¤.
+ Insert mode.
+
+ 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 Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.2: 추가(APPEND) 명령
+
+
+ ** a 를 누르면 커서 *다ìŒì—* ê¸€ì„ ìž…ë ¥í•  수 있습니다. **
+
+ 1. 커서를 ---> ë¡œ í‘œì‹œëœ ì²«ë²ˆì§¸ ì¤„ì˜ ë으로 옮ê¹ë‹ˆë‹¤. 명령 모드ì—ì„œ
+ $ 를 ì´ìš©í•˜ì‹­ì‹œì˜¤.
+
+ 2. ì†Œë¬¸ìž 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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.3: 치환(REPLACE) ì˜ ë‹¤ë¥¸ 버전
+
+
+ ** ëŒ€ë¬¸ìž 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> 를 눌러서 나가면, 바뀌지 ì•Šì€ í…스트는 그대로 남게 ë©ë‹ˆë‹¤.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 6.4: 옵션 설정(SET)
+
+ ** 찾기나 바꾸기ì—ì„œ ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì„ ì—†ì• ê¸° 위해 ì˜µì…˜ì„ ì„¤ì •í•©ë‹ˆë‹¤ **
+
+ 1. 다ìŒì„ 입력하여 'ignore' 를 찾으십시오:
+ /ignore
+ n 키를 ì´ìš©í•˜ì—¬ 여러번 반복하십시오.
+
+ 2. 'ic' (ëŒ€ì†Œë¬¸ìž êµ¬ë³„ 안함, Ignore case) ì˜µì…˜ì„ ì„¤ì •í•˜ì‹­ì‹œì˜¤:
+ :set ic
+
+ 3. n 키를 눌러서 'ignore' 를 다시 찾아보십시오.
+ n 키를 ê³„ì† ëˆŒëŸ¬ì„œ 여러번 찾으십시오.
+
+ 4. 'hlsearch' 와 'incsearch' ì˜µì…˜ì„ ì„¤ì •í•©ì‹œë‹¤.
+ :set hls is
+
+ 5. 찾기 ëª…ë ¹ì„ ë‹¤ì‹œ 입력하여, ì–´ë–¤ ì¼ì´ ì¼ì–´ë‚˜ëŠ”지 확ì¸í•´ 보십시오:
+ /ignore
+
+ 6. ì°¾ì€ ë‚´ìš©ì´ ê°•ì¡°(HIGHLIGHT)ëœ ê²ƒì„ ì—†ì• ë ¤ë©´, 다ìŒê³¼ ê°™ì´ ìž…ë ¥í•©ë‹ˆë‹¤:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 6 요약
+
+
+ 1. o 를 입력하면 커서 *아래ì—* í•œ ì¤„ì´ ì—´ë¦¬ë©°, 커서는 편집 모드로
+ 열린 줄 ìœ„ì— ìœ„ì¹˜í•˜ê²Œ ë©ë‹ˆë‹¤.
+ ëŒ€ë¬¸ìž O 를 입력하면 커서가 있는 ì¤„ì˜ *위로* 새 ì¤„ì„ ì—´ê²Œ ë©ë‹ˆë‹¤.
+
+ 2. a 를 입력하면 커서 *다ìŒì—* ê¸€ì„ ìž…ë ¥í•  수 있습니다.
+ ëŒ€ë¬¸ìž A 를 입력하면 ìžë™ìœ¼ë¡œ ê·¸ ì¤„ì˜ ëì— ê¸€ìžë¥¼ 추가하게 ë©ë‹ˆë‹¤.
+
+ 3. ëŒ€ë¬¸ìž R ì„ ìž…ë ¥í•˜ë©´ <ESC> 를 눌러서 나가기 전까지 바꾸기 모드가 ë©ë‹ˆë‹¤.
+
+ 4. ":set xxx" 를 하면 "xxx" ì˜µì…˜ì´ ì„¤ì •ë©ë‹ˆë‹¤.
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 7: 온ë¼ì¸ ë„ì›€ë§ ëª…ë ¹
+
+
+ ** 온ë¼ì¸ ë„ì›€ë§ ì‹œìŠ¤í…œ 사용하기 **
+
+ ë¹”ì€ í­ ë„“ì€ ì˜¨ë¼ì¸ ë„ì›€ë§ ì‹œìŠ¤í…œì„ ì œê³µí•©ë‹ˆë‹¤. ë„움ë§ì„ 보려면,
+ ë‹¤ìŒ ì„¸ê°€ì§€ 중 하나를 ì‹œë„해보십시오:
+ - <HELP> 키를 누른다. (키가 있는 경우)
+ - <F1> 키를 누른다. (키가 있는 경우)
+ - :help <ENTER> ë¼ê³  입력한다.
+
+ ë„ì›€ë§ ì°½ì„ ë‹«ìœ¼ë ¤ë©´ :q <ENTER> ë¼ê³  입력하십시오.
+
+ ":help" ë¼ëŠ” ëª…ë ¹ì— ì¸ìžë¥¼ 주면 ì–´ë–¤ ì£¼ì œì— ê´€í•œ ë„움ë§ì„ ì°¾ì„ ìˆ˜ 있습니다.
+ ë‹¤ìŒ ëª…ë ¹ì„ ë‚´ë ¤ 보십시오. ( <ENTER> 키를 누르는 ê²ƒì„ ìžŠì§€ 마십시오.)
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LESSON 8: 시작 스í¬ë¦½íŠ¸ 만들기
+
+ ** ë¹”ì˜ ê¸°ëŠ¥ 켜기 **
+
+ ë¹”ì€ Vi 보다 훨씬 ë§Žì€ ê¸°ëŠ¥ì„ ê°€ì§€ê³  있지만, ëŒ€ë¶€ë¶„ì€ ê¸°ë³¸ì ìœ¼ë¡œ ìž‘ë™í•˜ì§€
+ 않습니다. ë” ë§Žì€ ê¸°ëŠ¥ì„ ì¨ë³´ë ¤ë©´, "vimrc" ë¼ëŠ” 파ì¼ì„ 만들어야 합니다.
+
+ 1. "vimrc" 파ì¼ì„ 수정합시다. ì´ íŒŒì¼ì€ 사용하는 ì‹œìŠ¤í…œì— ë”°ë¼ ë‹¤ë¦…ë‹ˆë‹¤:
+ 1. Start editing the "vimrc" file, this depends on your system:
+ :edit ~/.vimrc Unixì˜ ê²½ìš°
+ :edit $VIM/_vimrc MS-Windowsì˜ ê²½ìš°
+
+ 2. ì´ì œ "vimrc"ì˜ ì˜ˆì œë¥¼ ì½ì–´ë“¤ìž…니다:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. 다ìŒê³¼ ê°™ì´ í•˜ì—¬ 파ì¼ì„ 저장합니다:
+
+ :write
+
+ ë‹¤ìŒ ë²ˆì— ë¹”ì„ ì‹œìž‘í•˜ë©´, 구문 ê°•ì¡°(syntax highlighting)ì´ ì‚¬ìš©ë  ê²ƒìž…ë‹ˆë‹¤.
+ 모든 ì›í•˜ëŠ” ì„¤ì •ì„ ì´ "vimrc" 파ì¼ì— 넣어둘 수 있습니다.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ ì´ê²ƒìœ¼ë¡œ ë¹” 길잡ì´ë¥¼ 마칩니다. ì´ ê¸¸ìž¡ì´ëŠ” ë¹” íŽ¸ì§‘ê¸°ì— ëŒ€í•œ 간략한 개요를
+ 보여주기 위한 ì˜ë„ë¡œ 제작ë˜ì—ˆìœ¼ë©°, ì´ íŽ¸ì§‘ê¸°ë¥¼ ì •ë§ ê°„ë‹¨ížˆ 사용하기ì—
+ 충분할 ë¿ìž…니다. ë¹”ì—는 ì´ ê¸¸ìž¡ì´ì™€ëŠ” 비êµí•  수 ì—†ì„ ë§Œí¼ í›¨ì”¬ ë§Žì€ ëª…ë ¹ì´
+ 있습니다. ë‹¤ìŒ ì‚¬ìš©ìž ë§¤ë‰´ì–¼ì„ ì½ìœ¼ì‹­ì‹œì˜¤: ":help user-manual"
+
+ 보다 ìžì„¸ížˆ ì½ê³  공부하려면, ë‹¤ìŒ ì±…ì„ ì¶”ì²œí•´ 드립니다:
+ Vim - Vi Improved - by Steve Oualline
+ 출íŒì‚¬: New Riders
+ ì´ ì±…ì€ ì™„ì „ížˆ ë¹”ì— ëŒ€í•´ì„œë§Œ 다루고 있습니다. 특히 초보ìžë“¤ì—게 유용합니다.
+ ë§Žì€ ì˜ˆì œì™€ ê·¸ë¦¼ì´ ìžˆìŠµë‹ˆë‹¤.
+ 다ìŒì„ 참고하십시오: http://iccf-holland.org/click5.html
+
+ ë‹¤ìŒ ì±…ì€ ì¢€ ì˜¤ëž˜ëœ ì±…ìœ¼ë¡œ 빔보다는 Viì— ëŒ€í•´ 다루고 있지만, ì—­ì‹œ 추천할 만
+ 합니다:
+ Learning the Vi Editor - by Linda Lamb
+ 출íŒì‚¬: O'Reilly & Associates Inc.
+ Vië¡œ 하고 ì‹¶ì€ ê±°ì˜ ëª¨ë“  ê²ƒì— ëŒ€í•´ ì•Œ 수 있는 ì¢‹ì€ ì±…ìž…ë‹ˆë‹¤.
+ 여섯번째 개정íŒì€ ë¹”ì— ê´€í•œ ë‚´ìš©ì„ í¬í•¨í•˜ê³  있습니다.
+
+ ì´ ê¸¸ìž¡ì´ëŠ” Colorado School of Minesì˜ Michael C. Pierce 와
+ Robert K. Ware ê°€ Colorado State Universityì˜ Charles Smith ì˜ ì•„ì´ë””ì–´ì—
+ 착안하여 ì¼ìŠµë‹ˆë‹¤.
+ . E-mail: bware@mines.colorado.edu.
+
+ Modified for Vim by Bram Moolenaar.
+
+ ì´ ë¬¸ì„œì˜ í•œêµ­ì–´ ë²„ì „ì— ê´€í•œ 문ì˜ëŠ” ë‹¤ìŒ ì‚¬ì´íŠ¸ë¡œ 해주십시오.
+ http://wiki.kldp.org/wiki.php/VimTutorKo
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.no b/runtime/tutor/tutor.no
new file mode 100644
index 000000000..2e036042e
--- /dev/null
+++ b/runtime/tutor/tutor.no
@@ -0,0 +1,810 @@
+===============================================================================
+= V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.5 =
+===============================================================================
+
+ Vim er en meget kraftig editor med mange kommandoer, alt for mange
+ til å kunne gå gjennom alle i en innføring som denne. Den er beregnet
+ på å sette deg inn i bruken av nok kommandoer så du vil være i stand
+ til lett å kunne bruke Vim som en editor til alle formål.
+
+ Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30
+ minutter, avhengig av hvor mye tid du bruker til eksperimentering.
+
+ Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne
+ filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er
+ dette allerede en kopi).
+
+ Det er viktig å huske at denne innføringen er beregnet på læring
+ gjennom bruk. Det betyr at du må utføre kommandoene for å lære dem
+ skikkelig. Hvis du bare leser teksten, vil du glemme kommandoene!
+
+ Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten
+ helt til leksjon 1.1 fyller skjermen.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 1.1: FLYTTING AV MARKØREN
+
+
+ ** For å flytte markøren, trykk tastene h, j, k, l som vist. **
+ ^
+ k Tips: h-tasten er til venstre og flytter til venstre.
+ < h l > l-tasten er til høyre og flytter til høyre.
+ j j-tasten ser ut som en pil som peker nedover.
+ v
+ 1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene.
+
+ 2. Hold inne nedovertasten (j) til den repeterer.
+---> Nå vet du hvordan du beveger deg til neste leksjon.
+
+ 3. Gå til leksjon 1.2 ved hjelp av nedovertasten.
+
+MERK: Hvis du blir usikker på noe du har skrevet, trykk <ESC> for å gå til
+ normalmodus. Skriv deretter kommandoen du ønsket.
+
+MERK: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til
+ å bevege markøren mye raskere når du er blitt vant til det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 1.2: OPPSTART OG AVSLUTNING AV VIM
+
+
+ !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!
+
+ 1. Trykk <ESC>-tasten (for å forsikre deg om at du er i normalmodus).
+
+ 2. Skriv: :q! <ENTER>
+
+---> Dette avslutter editoren UTEN at endringer blir lagret.
+ Hvis du vil lagre endringene og avslutte, skriver du:
+ :wq <ENTER>
+
+ 3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne
+ innføringen. Det kan være: vimtutor <ENTER>
+ Normalt vil du bruke: vim tutor <ENTER>
+
+---> Med «vim» menes Vim-editoren, «tutor» er filen som du vil redigere.
+
+ 4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å
+ avslutte og starte editoren på nytt. Deretter flytter du markøren ned til
+ leksjon 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 1.3: REDIGERING AV TEKST -- SLETTING
+
+
+ ** Trykk tasten x for å slette tegnet under markøren. **
+
+ 1. Flytt markøren til den første linjen merket med ---> .
+
+ 2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som
+ skal slettes.
+
+ 3. Trykk tasten x for å slette det uønskede tegnet.
+
+ 4. Repeter punkt 2 til 4 til setningen er lik den som er under.
+
+---> Kkua hoppett ovverr måååånenn.
+---> Kua hoppet over månen.
+
+ 5. Nå som linjen er korrekt, gå til leksjon 1.4.
+
+HUSK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men
+ bruk dem helt til de sitter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING
+
+
+ ** Når du er i normalmodus, trykk i for å sette inn tekst. **
+
+ 1. Flytt markøren til den første linjen som er merket med ---> .
+
+ 2. For å gjøre den første linjen lik den andre, flytt markøren til den står
+ på tegnet ETTER posisjonen der teksten skal settes inn.
+
+ 3. Trykk i og skriv inn teksten som mangler.
+
+ 4. Etterhvert som hver feil er fikset, trykk <ESC> for å returnere til
+ normalmodus. Repeter punkt 2 til 4 til setningen er korrekt.
+
+---> Det er tkst som mnglr .
+---> Det er ganske mye tekst som mangler her.
+
+ 5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen
+ nedenfor.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 1
+
+
+ 1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene.
+ h (venstre) j (ned) k (opp) l (høyre)
+
+ 2. For å starte Vim (fra skall-kommandolinjen), skriv: vim FILNAVN <ENTER>
+
+ 3. For å avslutte Vim, skriv: <ESC> :q! <ENTER> for å forkaste forandringer.
+ ELLER skriv: <ESC> :wq <ENTER> for å lagre forandringene.
+
+ 4. For å slette et tegn under markøren når du er i normalmodus, trykk x
+
+ 5. For å sette inn tekst ved markøren når du er i normalmodus, trykk:
+ i [skriv inn teksten] <ESC>
+
+MERK: Når du trykker <ESC> går du til normalmodus eller du avbryter en uønsket
+ og delvis fullført kommando.
+
+ Nå kan du gå videre til leksjon 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 2.1: SLETTEKOMMANDOER
+
+
+ ** Trykk dw for å slette til slutten av et ord. **
+
+ 1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+ 2. Flytt markøren til den første linjen nedenfor merket ---> .
+
+ 3. Flytt markøren til begynnelsen av ordet som skal slettes.
+
+ 4. Trykk dw og ordet vil forsvinne.
+
+MERK: Bokstavene vil komme til syne på den nederste linjen på skjermen
+ etterhvert som du skriver dem. Hvis du skriver feil, trykk <ESC> og
+ start på nytt.
+
+---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen.
+---> Det er tre ord som ikke hører hjemme i denne setningen.
+
+ 5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå
+ deretter til leksjon 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 2.2: FLERE SLETTEKOMMANDOER
+
+
+ ** Trykk d$ for å slette til slutten av linjen. **
+
+ 1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+ 2. Flytt markøren til linjen nedenfor merket ---> .
+
+ 3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum).
+
+ 4. Trykk d$ for å slette alt til slutten av linjen.
+
+---> Noen skrev slutten på linjen en gang for mye. på linjen en gang for mye.
+
+ 5. Gå til leksjon 2.3 for å forstå hva som skjer.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 2.3: OM KOMMANDOER OG OBJEKTER
+
+
+ Formatet for slettekommandoen d er som følger:
+
+ [nummer] d objekt ELLER d [nummer] objekt
+
+ Der:
+ nummer -- hvor mange ganger kommandoen utføres (valgfri, standard=1).
+ d -- selve slettekommandoen.
+ objekt -- hva kommandoen vil operere på (listet ut nedenfor).
+
+ En kort liste med objekter:
+ w -- fra markøren til slutten av ordet, inkludert mellomrom.
+ e -- fra markøren til slutten av ordet, IKKE inkludert mellomrom.
+ $ -- fra markøren til slutten av linjen.
+
+MERK: For den eventyrlystne: Skriving av kun objektet i normalmodus uten en
+ kommando vil flytte markøren til objektet i listen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 2.4: ET UNNTAK FRA «KOMMANDO-OBJEKT»-REGELEN
+
+
+ ** Trykk dd for å slette en hel linje. **
+
+ På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at
+ det vil være lettere å rett og slett trykke to «d»-er etter hverandre for å
+ slette en linje.
+
+ 1. Flytt markøren til den andre linjen i verset nedenfor.
+ 2. Trykk dd for å slette linjen.
+ 3. Flytt deretter til den fjerde linjen.
+ 4. Trykk 2dd (husk «nummer-kommando-objekt») for å slette disse to
+ linjene.
+
+ 1) Roser er røde
+ 2) Gjørme er gøy,
+ 3) Fioler er blå,
+ 4) Jeg har en bil,
+ 5) Klokker viser tiden,
+ 6) Druer er søte
+ 7) Og du er likeså.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 2.5: ANGRE-KOMMANDOEN
+
+
+ ** Trykk u for å angre siste kommando, U for å fikse en hel linje. **
+
+ 1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den
+ første feilen.
+ 2. Trykk x for å slette det første uønskede tegnet.
+ 3. Trykk så u for å angre den siste utførte kommandoen.
+ 4. Deretter ordner du alle feilene på linjene ved å bruke x kommandoen.
+ 5. Trykk nå en stor U for å sette linjen tilbake til det den var.
+ 6. Trykk u noen ganger for å angre U og foregående kommandoer.
+ 7. Deretter trykker du Ctrl-r (hold Ctrl nede mens du trykker «r») noen
+ ganger for å gjenopprette kommandoene (omgjøre angrekommandoene).
+
+---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre.
+
+ 8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av
+ leksjon 2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 2
+
+
+ 1. For å slette fra markøren til slutten av et ord, trykk: dw
+
+ 2. For å slette fra markøren til slutten av en linje, trykk: d$
+
+ 3. For å slette en hel linje, trykk: dd
+
+ 4. Formatet for en kommando i normalmodus er:
+
+ [nummer] kommando objekt ELLER kommando [nummer] objekt
+ der:
+ nummer -- hvor mange ganger kommandoen skal repeteres
+ kommando -- hva som skal gjøres, f.eks. d for å slette
+ objekt -- hva kommandoen skal operere på, eksempelvis w (ord),
+ $ (til slutten av linjen) og så videre.
+
+ 5. For å angre tidligere kommandoer, skriv u (liten u)
+ For å angre alle forandringer på en linje, skriv U (stor U)
+ For å omgjøre angringen, trykk Ctrl-r
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 3.1: «LIM INN»-KOMMANDOEN
+
+
+ ** Trykk p for å lime inn den siste slettede teksten etter markøren **
+
+ 1. Flytt markøren til den første linjen i listen nedenfor.
+
+ 2. Trykk dd for å slette linjen og lagre den i utklippstavlen til Vim.
+
+ 3. Flytt markøren til linjen OVER posisjonen linjen skal settes inn.
+
+ 4. Mens du er i normalmodus, trykk p for å erstatte linjen.
+
+ 5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge.
+
+ d) Kan du også lære?
+ b) Fioler er blå,
+ c) Intelligens må læres,
+ a) Roser er røde,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 3.2: «ERSTATT»-KOMMANDOEN
+
+
+ ** Trykk r og et tegn for å erstatte tegnet under markøren. **
+
+ 1. Flytt markøren til den første linjen nedenfor merket ---> .
+
+ 2. Flytt markøren så den står oppå den første feilen.
+
+ 3. Trykk r og deretter tegnet som skal erstatte det som er feil.
+
+ 4. Repeter punkt 2 og 3 til den første linjen er korrekt.
+
+---> Da dfnne lynjxn ble zkrevet, var det nøen som trykket feite taster!
+---> Da denne linjen ble skrevet, var det noen som trykket feile taster!
+
+ 5. Gå videre til leksjon 3.2.
+
+MERK: Husk at du bør lære ved å BRUKE, ikke pugge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 3.3: «FORANDRE»-KOMMANDOEN
+
+
+ ** For å forandre en del av eller et helt ord, trykk cw . **
+
+ 1. Flytt markøren til den første linjen nedenfor som er merket ---> .
+
+ 2. Plasser markøren på «u»-en i «lubjwr».
+
+ 3. Trykk cw og det korrekte ordet (i dette tilfellet, skriv «injen».)
+
+ 4. Trykk <ESC> og gå til den neste feilen (det første tegnet som skal
+ forandres).
+
+ 5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre.
+
+---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen.
+---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen.
+
+ Vær oppmerksom på at cw ikke bare forandrer ordet, men også går inn i
+ innsettingsmodus.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c
+
+
+ ** «Forandre»-kommandoen blir brukt med de samme objektene som «slett». **
+
+ 1. «Forandre»-kommandoen fungerer på samme måte som «slett». Formatet er:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+ 2. Objektene er også de samme, som for eksempel w (ord), $ (slutten av
+ en linje) og så videre.
+
+ 3. Gå til den første linjen nedenfor som er merket ---> .
+
+ 4. Flytt markøren til den første feilen.
+
+ 5. Skriv c$ for å forandre resten av linjen lik den andre og trykk <ESC>.
+
+---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste.
+---> Slutten på denne linjen trenger å bli rettet ved bruk av «c$»-kommandoen.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 3
+
+
+ 1. For å erstatte tekst som allerede er blitt slettet, trykk p . Dette
+ limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet
+ vil den bli limt inn på linjen under markøren).
+
+ 2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som
+ skal erstatte det originale tegnet.
+
+ 3. «Forandre»-kommandoen lar deg forandre det spesifiserte objektet fra
+ markøren til slutten av objektet, f.eks.: Trykk cw for å forandre fra
+ markøren til slutten av ordet, c$ for å forandre til slutten av linjen.
+
+ 4. Formatet for «forandre» er:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+ Nå kan du gå til neste leksjon.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 4.1: POSISJON OG FILSTATUS
+
+
+ ** Trykk Ctrl-g for å vise posisjonen i filen og filstatusen.
+ Trykk Shift-G for å gå til en spesifikk linje i filen. **
+
+MERK: Les hele leksjonen før du utfører noen av punktene!
+
+ 1. Hold nede Ctrl-tasten og trykk g . En statuslinje vil komme til syne på
+ bunnen av skjermen med filnavnet og hvilken linje markøren er på. Husk
+ linjenummeret for bruk i steg 3.
+
+ 2. Trykk Shift-G for å gå til bunnen av filen.
+
+ 3. Skriv inn linjenummeret du var på og deretter Shift-G. Dette vil føre deg
+ tilbake til linjen du var på da du trykket Ctrl-g. (Når du skriver inn
+ nummeret, vil det IKKE bli vist på skjermen.)
+
+ 4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 4.2: SØKEKOMMANDOEN
+
+
+ ** Skriv / etterfulgt av en søkestreng som du vil lete etter. **
+
+ 1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og
+ markøren kommer til syne på bunnen av skjermen i likhet med
+ «:»-kommandoene.
+
+ 2. Skriv feeeiil og trykk ENTER. Dette er teksten du vil lete etter.
+
+ 3. For å finne neste forekomst av søkestrengen, trykk n . For å lete etter
+ samme søketeksten i motsatt retning, trykk Shift-N .
+
+ 4. Hvis du vil lete etter en tekst bakover i filen, bruk kommandoen ?
+ istedenfor / .
+
+MERK: Når søket treffer slutten av filen vil det fortsette fra den andre enden
+ av filen.
+
+---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 4.3: FINN SAMSVARENDE PARENTESER
+
+
+ ** Trykk % for å finne en samsvarende ), ] eller } . **
+
+ 1. Plasser markøren på en (, [ eller { på linjen nedenfor merket ---> .
+
+ 2. Trykk % .
+
+ 3. Markøren flytter seg nå til parentesen som samsvarer med den du stod på.
+
+ 4. Trykk % for å flytte markøren tilbake til den første parentesen.
+
+---> Dette ( er en testlinje med (, [ ] og { } i den ))
+
+MERK: Dette er meget god hjelp til feilsøking i programmer som har ubalansert
+ antall parenteser!
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 4.4: EN MÅTE Å RETTE SKRIVEFEIL PÅ
+
+
+ ** Skriv :s/gammel/ny/g for å erstatte «gammel» med «ny». **
+
+ 1. Flytt markøren til linjen nedenfor som begynner med ---> .
+
+ 2. Skriv :s/deen/den/ <ENTER> . Legg merke til at denne kommandoen bare
+ forandrer den første forekomsten av ordet på linjen.
+
+ 3. Skriv :s/deen/den/g som betyr global erstatning på linjen. Dette vil
+ erstatte alle forekomster av søketeksten på linjen du står på.
+
+---> deen beste er deen som kan kaste deen tyngste steinen lengst
+
+ 4. Skriv :#,#s/gammel/ny/g for å erstatte tekst mellom to linjer, der #,#
+ er linjenumrene på de to linjene.
+ Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 4
+
+
+ 1. Ctrl-g viser nåværende posisjon i filen og filstatusen. Shift-G går til
+ slutten av filen. Et linjenummer etterfulgt av Shift-G går til denne
+ linjen.
+
+ 2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten.
+ Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten.
+ Etter et søk kan du trykke n for å finne neste forekomst i den samme
+ retningen eller Shift-N for å lete i motsatt retning.
+
+ 3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne
+ parentesten som samsvarer med den markøren står på.
+
+ 4. Erstatte «gammel» med første «ny» på en linje: :s/gammel/ny
+ Erstatte alle «gammel» med «ny» på en linje: :s/gammel/ny/g
+ Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g
+ Erstatte alle forekomster i en fil: :%s/gammel/ny/g
+ For å godkjenne hver erstatning, legg til «c»: :%s/gammel/ny/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO
+
+
+ ** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. **
+
+ 1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av
+ skjermen. Dette lar deg skrive en kommando.
+
+ 2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst
+ ekstern kommando.
+
+ 3. Som et eksempel, skriv ls etter utropstegnet og trykk <ENTER>. Du vil
+ nå få en liste over filene i katalogen, akkurat som om du hadde kjørt
+ kommandoen direkte fra skallet. Eller bruk :!dir hvis «ls» ikke virker.
+
+---> MERK: Det er mulig å kjøre alle mulige eksterne kommandoer på denne
+ måten.
+
+---> MERK: Alle «:»-kommandoer må avsluttes med <ENTER>.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 5.2: MER OM LAGRING AV FILER
+
+
+ ** For å lagre endringene gjort i en fil, skriv :w FILNAVN . **
+
+ 1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du
+ vet allerede at du må trykke <ENTER> etter dette.
+
+ 2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST .
+
+ 3. Skriv :w TEST (der TEST er filnavnet du velger).
+
+ 4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å
+ sjekke dette, skriv :!dir igjen for å se innholdet av katalogen.
+
+---> Hvis du nå hadde avsluttet Vim og startet på nytt igjen med filnavnet
+ TEST, ville filen vært en eksakt kopi av innføringen da du lagret den.
+
+ 5. Fjern filen ved å skrive :!rm TEST hvis du er på et UNIX-lignende
+ operativsystem, eller :!del TEST hvis du bruker MS-DOS.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 5.3: DELVIS LAGRING AV EN FIL
+
+
+ ** For å lagre en del av en fil, skriv :#,# w FILNAVN **
+
+ 1. En gang til: Skriv :!dir eller :!ls for å få en liste over filene i
+ katalogen. Velg et passende filnavn, som TEST .
+
+ 2. Flytt markøren til toppen av denne siden og trykk Ctrl-g for å finne
+ nummeret på denne linjen. HUSK DETTE NUMMERET!
+
+ 3. Gå til nederste linje på skjermen og trykk Ctrl-g igjen. HUSK DETTE
+ LINJENUMMERET OGSÅ!
+
+ 4. For å lagre BARE en del av filen, skriv :#,# w TEST hvor #,# er de to
+ numrene du skulle huske (topp og bunn) og TEST er filnavnet.
+
+ 5. Sjekk med :!dir om filen er der, men IKKE slett den.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER
+
+
+** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN . **
+
+ 1. Skriv :!dir for å forsikre deg om at filen TEST finnes.
+
+ 2. Plasser markøren på toppen av denne siden.
+
+MERK: Etter at du har utført steg 3 vil du se leksjon 5.3. Gå nedover forbi
+ den og til denne posisjonen igjen.
+
+ 3. Hent «TEST»-filen din med kommandoen :r TEST der TEST er navnet på
+ filen.
+
+MERK: Filen du henter vil bli plassert der markøren står.
+
+ 4. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av
+ leksjon 5.3, originalen og denne versjonen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 5
+
+
+ 1. :!KOMMANDO utfører en ekstern kommandio.
+
+ Noen nyttige eksempler er:
+ (MS-DOS) (Unix)
+ :!dir :!ls -- List filene i katalogen
+ :!del FIL :!rm FIL -- Slett filen FIL
+
+ 2. :w FILNAVN skriver den filen du står i til disken med navnet FILNAVN .
+
+ 3. :#,#w FILNAVN lagrer linjene # til # til filen FILNAVN .
+
+ 4. :r FILNAVN henter inn en annen fil og legger den inn like etter
+ markøren.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN
+
+
+ ** Skriv o for å «åpne opp» for en ny linje etter markøren og gå i
+ innsettingsmodus **
+
+ 1. Flytt markøren til linjen nedenfor merket ---> .
+
+ 2. Skriv o (liten o) for å starte på en ny linje nedenfor markøren og gå
+ over til innsettingsmodus.
+
+ 3. Kopier linjen som er merket ---> og trykk <ESC> for å avslutte
+ innsettingsmodusen.
+
+---> Etter at o er skrevet blir markøren plassert på den tomme linjen.
+
+ 4. For å lage en ny linje OVER markøren, trykk rett og slett en stor O
+ istedenfor en liten o . Prøv dette på linjen nedenfor.
+---> Lag en ny, tom linje over denne med Shift-O mens markøren står på den.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 6.2: «LEGG TIL»-KOMMANDOEN
+
+
+ ** Skriv a for å legge til tekst ETTER markøren. **
+
+ 1. Flytt markøren til slutten av den første linjen merket ---> ved å
+ trykke $ i normalmodusen.
+
+ 2. Trykk a (liten a) for å legge til tekst ETTER tegnet under markøren.
+ (Stor A legger til på slutten av linjen.)
+
+MERK: Dette gjør at du slipper å trykke i , det siste tegnet, teksten som
+ skal settes inn, <ESC>, høyrepil og til sist, x bare for å legge til
+ på slutten av en linje!
+
+ 3. Gjør ferdig den øverste linjen. Legg merke til at «legg til» er det samme
+ som innsettingsmodusen, med den forskjellen hvor teksten settes inn.
+
+---> På denne linjen må det legges
+---> På denne linjen må det legges til tekst på slutten.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 6.3: EN ANNEN VERSJON AV «ERSTATT»
+
+
+ ** Skriv R for å erstatte mer enn ett tegn. **
+
+ 1. Flytt markøren til den første linjen nedenfor merket ---> .
+
+ 2. Plasser markøren på begynnelsen av det første ordet som er forskjellig
+ fra den andre linjen merket ---> (ordet «siste»).
+
+ 3. Trykk R og erstatt resten av linjen med den samme teksten som står på
+ den andre linjen.
+
+---> For å gjøre den første linjen lik den andre, må bokstaven stor R brukes.
+---> For å gjøre den første linjen lik den andre, trykk R og den nye teksten.
+
+ 4. Legg merke til at når du trykker <ESC> for å avslutte, bevares teksten
+ som ikke er redigert.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Leksjon 6.4: SETT VALG
+
+
+ ** Sett et valg så et søk eller erstatning ignorerer store/små bokstaver. **
+
+ 1. Let etter «ignore» ved å skrive:
+ /ignore <ENTER>
+ Repeter flere ganger ved å trykke n .
+
+ 2. Sett «ic»-valget (Ignore Case) ved å skrive:
+ :set ic
+
+ 3. Let etter «ignore» igjen ved å skrive: n
+ Repeter søket flere ganger ved å trykke n .
+
+ 4. Sett «hlsearch»- og «incsearch»-valgene:
+ :set hls is
+
+ 5. Skriv søkekommandoen igjen, og se hva som skjer:
+ /ignore <ENTER>
+
+ 6. Hvis du vil slå av uthevingen på søketeksten, skriv :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ OPPSUMMERING AV LEKSJON 6
+
+
+ 1. Trykk o for å legge til en linje NEDENFOR markøren og plassere markøren
+ på den nye linjen i innsettingsmodus.
+ Hvis du trykker en stor O åpnes linjen OVER linjen markøren står på.
+
+ 2. Skriv en a for å sette inn tekst ETTER tegnet markøren er på.
+ En stor A vil legge til tekst på slutten av linjen.
+
+ 3. Ved å trykke R for går inn i erstatningsmodus helt til <ESC> trykkes
+ for å avslutte modusen.
+
+ 4. Skriv :set xxx for å sette valget «xxx».
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKSJON 7: TILGJENGELIGE HJELPEKOMMANDOER
+
+
+ ** Bruk det innebyggede hjelpesystemet. **
+
+ Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av
+ disse måtene:
+ - Trykk Hjelp-tasten (hvis du har noen)
+ - Trykk F1-tasten (hvis du har noen)
+ - Skriv :help <ENTER>
+
+ Skriv :q <ENTER> for å lukke hjelpevinduet.
+
+ Du kan få hjelp på omtrent alle temaer om Vim ved å skrive et parameter til
+ «:help»-kommandoen. Prøv disse (ikke glem Enter etter hver):
+
+ :help w
+ :help c<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKSJON 8: LAG ET OPPSTARTSSKRIPT
+
+
+ ** Slå på funksjoner i Vim. **
+
+ Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av
+ som standard. For å begynne å bruke dem kan du lage en «vimrc»-fil.
+
+ 1. Start redigeringen av «vimrc»-filen, dette avhenger av systemet ditt:
+ :edit ~/.vimrc for UNIX
+ :edit $VIM/_vimrc for MS Windows
+
+ 2. Les inn eksempelfilen for «vimrc»:
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Lagre filen med:
+ :write
+
+ Neste gang du starter Vim vil den bruke farger og utheving i henhold til
+ syntaksen i filen. Ved å legge inn forskjellige valg i «vimrc»-filen, kan du
+ forandre oppsettet i Vim til det du foretrekker.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Her slutter innføringen i Vim. Den var ment som en rask oversikt over
+ editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på
+ langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen
+ ved å skrive :help user-manual .
+
+ For videre lesing og studier, kan denne boken anbefales:
+ «Vim - Vi Improved» av Steve Oualline
+ Utgiver: New Riders
+ Den førstnevnte boken er fullt og helt dedikert til Vim. Spesielt nyttig
+ for nybegynnere. Inneholder mange eksempler og illustrasjoner.
+ Se http://iccf-holland.org/click5.html
+
+ Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
+ «Learning the Vi Editor» av Linda Lamb
+ Utgiver: O'Reilly & Associates Inc.
+ Det er en god bok for å få vite omtrent hva som helst om Vi.
+ Den sjette utgaven inneholder også informasjon om Vim.
+
+ Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware,
+ Colorado School of Mines med idéer av Charles Smith, Colorado State
+ University. Email: bware@mines.colorado.edu .
+
+ Modifisert for Vim av Bram Moolenaar.
+ Oversatt av Øyvind A. Holm -- sunny _AT_ sunbase.org
+ tutor.no 279 2004-05-12 09:21:53Z sunny
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+vim: set ts=8 :
diff --git a/runtime/tutor/tutor.pl b/runtime/tutor/tutor.pl
new file mode 100644
index 000000000..eccb81b9c
--- /dev/null
+++ b/runtime/tutor/tutor.pl
@@ -0,0 +1,830 @@
+===============================================================================
+= W i t a j w t u t o r i a l u V I M - a - Wersja 1.5. =
+===============================================================================
+
+ Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o by
+ wyja¶niæ je wszystkie w tym tutorialu. Ten przewodnik ma nauczyæ
+ Ciê pos³ugiwaæ siê wystarczaj±co wieloma komendami by¶ móg³ ³atwo
+ u¿ywaæ Vim-a jako edytora ogólnego przeznaczenia.
+
+ Czas potrzebny na ukoñczenie tutoriala to 25 do 30 minut i zale¿y
+ od tego jak wiele czasu spêdzisz na eksperymentowaniu. Polecenia
+ wykonywane w czasie lekcji zmodyfikuj± tekst. Zrób wcze¶niej kopiê
+ tego pliku do æwiczeñ (je¶li zacz±³e¶ komend± "vimtutor" to ju¿
+ pracujesz na kopii).
+
+ Wa¿ne jest, by¶ pamiêta³, ¿e przewodnik ten zosta³ zaprojektowany do
+ nauki poprzez æwiczenia. To oznacza, ¿e musisz wykonywaæ polecenia
+ by nauczyæ siê ich prawid³owo. Je¶li bêdziesz jedynie czyta³ tekst
+ szybko zapomnisz wiele poleceñ!
+
+ Teraz upewnij siê, ¿e nie masz wci¶niêtego CapsLocka i wciskaj j
+ tak d³ugo dopóki Lekcja 1.1. nie wype³ni ca³kowicie ekranu.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.1.: PORUSZANIE SIÊ KURSOREM
+
+ ** By wykonaæ ruch kursorem, wci¶nij h, j, k, l jak pokazano. **
+
+ ^
+ k Wskazówka: h jest po lewej
+ < h l > l jest po prawej
+ j j wygl±da jak strza³ka w dó³
+ v
+ 1. Poruszaj kursorem dopóki nie bêdziesz pewien, ¿e pamiêtasz polecenia.
+
+ 2. Trzymaj j tak d³ugo a¿ bêdzie siê powtarza³.
+---> Teraz wiesz jak doj¶æ do nastêpnej lekcji.
+
+ 3. U¿ywaj±c strza³ki w dó³ przejd¼ do nastêpnej lekcji.
+
+Uwaga: Je¶li nie jeste¶ pewien czego¶ co wpisa³e¶, wci¶nij <ESC> by wróciæ do
+ trybu Normal. Wtedy powtórz polecenie.
+
+Uwaga: Klawisze kursora tak¿e powinny dzia³aæ, ale u¿ywaj±c hjkl bêdziesz
+ w stanie poruszaæ siê o wiele szybciej jak siê tylko przyzwyczaisz.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.2.: WCHODZENIE I WYCHODZENIE Z VIM-a
+
+ !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³± lekcjê.!!
+
+ 1. Wci¶nij <ESC> (aby upewniæ siê, ¿e jeste¶ w trybie Normal).
+ 2. Wpisz: :q!<ENTER>.
+
+---> To spowoduje wyj¶cie z edytora BEZ zapamiêtywania zmian jakie
+ zd±¿y³e¶ zrobiæ. Je¶li chcesz zapamiêtaæ zmiany i wyj¶æ
+ wpisz: :wq<ENTER>
+
+ 3. Kiedy widzisz znak zachêty pow³oki wpisz komendê, ¿eby wróciæ
+ do tutoriala.
+ Powinienie¶ wpisaæ: vimtutor<ENTER>
+ Normalnie u¿y³by¶: vim tutor<ENTER>
+
+---> 'vim' oznacza edytor vim, 'tutor' jest plikem, który chcia³by¶
+ edytowaæ.
+
+ 4. Je¶li chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3. aby
+ wyj¶æ i wróciæ do edytora. Potem przenie¶ siê do Lekcji 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE
+
+
+ ** W trybie Normal wci¶nij x aby usun±æ znak pod kursorem. **
+
+ 1. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. By poprawiæ b³êdy, naprowad¼ kursor na znak do usuniêcia.
+
+ 3. Wci¶nij x aby usun±æ niechciany znak.
+
+ 4. Powtarzaj kroki 2. do 4. dopóki zdanie nie jest poprawne.
+
+---> Kkrowa prrzeskoczy³a prrzez ksiiê¿ycc.
+
+ 5. Teraz kiedy zdanie jest poprawione przejd¼ do Lekcji 1.4.
+
+UWAGA: Ucz siê przez æwiczenie, nie wkuwanie.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie)
+
+
+ ** W trybie Normal wci¶nij i aby wstawiæ tekst. **
+
+ 1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym
+ gdzie tekst ma byæ wstawiony.
+
+ 3. Wci¶nij i a nastêpnie wpisz konieczne poprawki.
+
+ 4. Po poprawieniu b³êdu wci¶nij <ESC> by wróciæ do trybu Normal.
+ Powtarzaj kroki 2. do 4. aby poprawiæ ca³e zdanie.
+
+---> W tej brkje trochê .
+---> W tej linii brakuje trochê tekstu.
+
+ 5. Kiedy czujesz siê swobodnie wstawiaj±c tekst przejd¼ do
+ podsumowania poni¿ej.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 1. PODSUMOWANIE
+
+ 1. Poruszasz kursorem u¿ywaj±c "strza³ek" i klawiszy hjkl .
+ h (w lewo) j (w dó³) k (do góry) l (w prawo)
+
+ 2. By wej¶æ do Vim-a (od znaku zachêty) wpisz:
+ vim NAZWA_PLIKU<ENTER>
+
+ 3. By wyj¶æ z Vim-a wpisz:
+ <ESC> :q!<ENTER> by usun±c wszystkie zmiany.
+ LUB: <ESC> :wq<ENTER> by zmiany zachowaæ.
+
+ 4. By usun±æ znak pod kursorem w trybie Normal: x
+
+ 5. By wstawiæ tekst przed kursorem w trybie Normal:
+ i type in text <ESC>
+
+UWAGA: Wci¶niêcie <ESC> przeniesie Ciê z powrotem do trybu Normal
+lub odwo³a niechciane lub czê¶ciowo wprowadzone polecenia.
+
+Teraz mo¿emy kontynuowaæ i przej¶æ do Lekcji 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.1.: POLECENIE DELETE (usuwanie)
+
+
+ ** Wpisz dw by usun±c tekst do koñca wyrazu. **
+
+ 1. Wci¶nij <ESC> by upewniæ siê, ¿e jeste¶ w trybie Normal.
+
+ 2. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
+
+ 3. Przesuñ kursor na pocz±tek wyrazu, które chcesz usun±æ.
+
+ 4. Wpisz dw by usun±c wyraz.
+
+ UWAGA: Litery dw bêd± siê pojawiaæ na dole ekranu w miarê
+ wpisywania. Je¶li wpisa³e¶ co¶ ¼le wci¶nij <ESC> i zacznij od
+ pocz±tku.
+
+---> Jest tu parê papier wyrazów, które kamieñ nie nale¿± do no¿yce tego zdania.
+
+ 5. Powtarzaj kroki 3. i 4. dopóki zdanie nie bêdzie poprawne, potem
+ przejd¼ do Lekcji 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.2.: WIÊCEJ POLECEÑ USUWAJ¡CYCH
+
+
+ ** Wpisz d$ aby usun±æ tekst do koñca linii. **
+
+ 1. Wci¶nij <ESC> aby siê upewniæ, ¿e jeste¶ w trybie Normal.
+
+ 2. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
+
+ 3. Przenie¶ kursor do koñca poprawnego zdania (PO pierwszej . ).
+
+ 4. Wpisz d$ aby usun±æ resztê linii.
+
+---> Kto¶ wpisa³ koniec tego zdania dwukrotnie. zdania dwukrotnie.
+
+
+ 5. Przejd¼ do Lekcji 2.3. by zrozumieæ co siê sta³o.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.3.: O POLECENIACH I OBIEKTACH
+
+
+ Format dla polecenia usuwaj±cego d jest taki:
+
+ [liczba] d obiekt LUB d [liczba] obiekt
+
+ Gdzie:
+ liczba - ile razy polecenie ma byæ wykonane (opcjonalne, domy¶lna=1).
+ d - polecenie usuwaj±ce.
+ obiekt - na czym polecenie bêdzie wykonywane (lista poni¿ej).
+
+ Krótka lista obiektów:
+ w - od kursora do koñca wyrazu w³±czaj±c spacjê.
+ e - od kursora do koñca wyrazu NIE w³±czaj±c spacji.
+ $ - od kursora do koñca linii.
+
+UWAGA: Dla ciekawskich, wybieranie obiektu w trybie Normal bez polecania
+ polecenia przeniesie kursor tak jak opisano w li¶cie obiektów.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.4.: WYJ¡TEK DO 'POLECENIE-OBIEKT'
+
+
+ ** Wpisz dd by usun±c ca³± liniê. **
+
+ Z powodu czêsto¶ci usuwania ca³ych linii, projektanci Vim-a zdecydowali, ¿e
+ bêdzie ³atwiej wpisaæ dwa razy pod rz±d d aby usun±æ liniê.
+
+ 1. Przenie¶ kursor do zdania poni¿ej.
+ 2. Wpisz dd aby usun±c wiersz.
+ 3. Teraz przenie¶ siê do czwartego wiersza.
+ 4. Wpisz 2dd (pamiêtaj liczba-polecenie-obiekt) aby usun±c dwia wiersze.
+
+ 1) Ró¿e s± czerwone,
+ 2) B³oto jest fajne,
+ 3) Fio³ki s± niebieskie,
+ 4) Mam samochód,
+ 5) Zegar podaje czas,
+ 6) Cukier jest s³odki,
+ 7) I ty te¿.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.5.: POLECENIE UNDO (cofnij)
+
+
+ ** Wci¶nij u aby cofn±æ skutki ostatniego polecenia.
+ U za¶, by cofn±æ skutki dla ca³ej linii. **
+
+ 1. Przenie¶ kursor do zdania poni¿ej oznaczonego ---> i umie¶æ go na
+ pierwszym b³êdzie.
+ 2. Wpisz x aby usun±æ pierwszy niechciany znak.
+ 3. Teraz wci¶nij u aby cofn±æ skutki ostatniego polecenia.
+ 4. Tym razem popraw wszystkie b³êdy w linii u¿ywaj±c polecenia x .
+ 5. Teraz wci¶nij wielkie U aby przywróciæ liniê do oryginalnego stanu.
+ 6. Teraz wci¶nij u kilka razy by cofn±æ U i poprzednie polecenia.
+ 7. Teraz wpsz CTRL-R (trzymaj równocze¶nie wci¶niête klawisze CTRL i R)
+ kilka razy, by cofn±æ cofniêcia.
+
+---> Poopraw blêdyyy w teej liniii i zaamiieñ je prrzez coofnij.
+
+ 8. To s± bardzo po¿yteczne polecenia.
+
+ Przejd¼ teraz do podsumowania Lekcji 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 2. PODSUMOWANIE
+
+ 1. By usun±æ znaki od kursora do koñca wyrazu wpisz: dw
+
+ 2. By usun±æ znaki od kursora do koñca linii wpisz: d$
+
+ 3. By usun±æ ca³± liniê: dd
+
+ 4. Format polecenia w trybie Normal:
+
+ [liczba] polecenie obiekt LUB polecenie [liczba] obiekt
+
+ Gdzie:
+ liczba - ile razy polecenie ma byæ wykonane
+ polecenie - to co trzeba zrobiæ (np. d dla usuwania)
+ obiekt - na czym polecenie bêdzie wykonywane, takie jak w (wyraz),
+ $ (do koñca linii), etc.
+
+ 5. By cofn±æ poprzednie polecenie, wpisz: u (ma³e u)
+ By cofn±æ wszystkie zmiany w linii wpisz: U (wielkie U)
+ By cofn±æ cofniêcia wpisz: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.1.: POLECENIE PUT (wstaw)
+
+
+ ** Wpisz p by wstawiæ ostatnie usuniêcia po kursorze. **
+
+ 1. Przenie¶ kursor do pierwszej linii w zestawie poni¿ej.
+
+ 2. Wpisz dd aby usun±æ liniê i przechowaæ j± w buforze Vim-a.
+
+ 3. Przenie¶ kursor do linii POWY¯EJ tej gdzie usuniêta linia powinna
+ siê znajdowaæ.
+
+ 4. W trybie Normal, wci¶nij p by wstawiæ liniê.
+
+ 5. Powtaj kroki 2. do 4. a¿ znajd± siê w odpowiednim porz±dku.
+
+ d) Jak dwa anio³ki.
+ b) Na dole fio³ki,
+ c) A my siê kochamy,
+ a) Na górze ró¿e,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.2.: POLECENIE REPLACE (zast±p)
+
+
+ ** Wpisz r a nastêpnie znak by zast±piæ znak pod kursorem. **
+
+ 1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->
+
+ 2. Ustaw kursor na pierwszym b³êdzie.
+
+ 3. Wpisz r a potem znak jaki powinien zast±piæ b³êdny.
+
+ 4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie poprawna.
+
+---> Kjedy ten wiersz bi³ wstókiwany kto¶ wcizn±³ perê z³ych klawirzy!
+---> Kiedy ten wiersz by³ wstukiwany kto¶ wcisn±³ parê z³ych klawiszy!
+
+ 5. Teraz czas na Lekcjê 3.3.
+
+
+UWAGA: Pamiêtaj by uczyæ siê æwicz±c, a nie pamiêciowo.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.3.: POLECENIE CHANGE (zmieñ)
+
+ ** By zmieniæ ca³e s³owo lub jego czê¶æ wpisz cw (change word). **
+
+ 1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. Umie¶æ kursor na u w lunos.
+
+ 3. Wpisz cw i popraw wyraz (w tym wypadku wstaw 'inia').
+
+ 4. Wci¶nij <ESC> i przejd¼ do nastêpnego b³êdu (pierwszy znak, który ma
+ ulec zmianie).
+
+ 5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same
+ jak drugie.
+
+---> Ta lunos ma pire s³ów, które t¿ina zbnic u¿ifajonc pcmazu zmieñ.
+---> Ta linia ma parê s³ów, które trzeba zmieniæ u¿ywaj±c polecenia zmieñ.
+
+ Zauwa¿, ¿e cw nie tylko zamienia wyraz, ale tak¿e zmienia tryb na
+ Insert (wprowadzanie).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.4.: WIÊCEJ ZMIAN U¯YWAJ¡C c
+
+
+ ** Polecenie change u¿ywa takich samych obiektów jak delete. **
+
+ 1. Polecenie change dzia³a tak samo jak delete. Format wygl±da tak:
+
+ [liczba] c obiekt LUB c [liczba] obiekt
+
+ 2. Obiekty s± tak¿e takie same, np.: w (wyraz), $ (koniec linii), etc.
+
+ 3. Przenie¶ siê do pierwszej linii poni¿ej oznaczonej --->
+
+ 4. Ustaw kursor na pierwszym b³êdzie.
+
+ 5. Wpisz c$ , popraw koniec wiersza i wci¶nij <ESC>.
+
+---> Koniec tego wiersza musi byæ poprawiony aby wygl±dal tak jak drugi.
+---> Koniec tego wiersza musi byæ poprawiony u¿ywaj±c polecenia c$ .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 3. PODSUMOWANIE
+
+
+ 1. Aby wstawiæ tekst, który zosta³ wcze¶niej usuniêty wci¶nij p . To
+ polecenie wstawia skasowany tekst PO kursorze (je¶li ca³a linia
+ zosta³a usuniêta, zostanie ona umieszczona w linii poni¿ej kursora).
+
+ 2. By zamieniæ znak pod kursorem wci¶nij r a potem znak, który ma zast±piæ
+ oryginalny.
+
+ 3. Polecenie change pozwala Ci na zast±pienie wyszczególnionego obiektu
+ od kursora do koñca obiektu. Np. wpisz cw aby zamieniæ tekst od
+ kursora do koñca wyrazu, c$ aby zmieniæ tekst do koñca linii.
+
+ 4. Format do polecenia change (zmieñ):
+
+ [liczba] c obiekt LUB c [liczba] obiekt
+
+ Teraz przejd¼ do nastêpnej lekcji.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.1.: LOKALIZACJA ORAZ STATUS PLIKU
+
+ ** Naci¶nij CTRL-G aby zobaczyæ swoje po³o¿enie w pliku i status
+ pliku. Naci¶nij SHIFT-G aby przej¶æ do linii w pliku. **
+
+ UWAGA: Przeczytaj ca³± lekcjê zanim wykonasz jakie¶ polecenia!!!
+
+ 1. Przytrzymaj klawisz CTRL i wci¶nij g . Na dole strony pojawi siê pasek
+ statusu z nazw± pliku i numerem linii, w której jeste¶. Zapamiêtaj numer
+ linii dla potrzeb kroku 3.
+
+ 2. Wci¶nij SHIFT-G aby przej¶æ na koniec pliku.
+
+ 3. Wpisz numer linii, w której by³e¶ a potem SHIFT-G. To przeniesie Ciê
+ z powrotem do linii, w której by³e¶ kiedy wcisn±³e¶ CTRL-G (kiedy
+ wpisujesz numery NIE pojawiaj± siê one na ekranie).
+
+ 4. Je¶li czujesz siê wystarczaj±co pewnie, wykonaj kroki 1-3.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.2.: POLECENIE SZUKAJ
+
+
+ ** Wpisz / a nastêpnie wyra¿enie aby je znale¼æ. **
+
+ 1. W trybie Normal wpisz / . Zauwa¿, ¿e znak ten, oraz kursor pojawi±
+ siê na dole ekranu tak samo jak polecenie : .
+
+ 2. Teraz wpisz b³ond<ENTER> . To jest s³owo, którego chcesz szukaæ.
+
+ 3. By szukaæ tej samej frazy ponownie, po prostu wci¶nij n .
+ Aby szukaæ tej frazy w przeciwnym, kierunku wci¶nij SHIFT-N.
+
+ 4. Je¶li chcesz szukaæ frazy do ty³u, u¿yj polecenia ? zamiast / .
+
+---> Kiedy polecenie 'szukaj' osi±gnie koniec pliku, przeszukiwanie
+ zacznie siê od pocz±tku pliku.
+
+ 'b³ond' to nie jest metoda by przeliterowaæ b³±d; 'b³ond' to b³±d.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.3.: W POSZUKIWANIU PARUJ¡CYCH NAWIASÓW
+
+
+ ** Wpisz % by znale¼æ pasuj±cy ),], lub } . **
+
+ 1. Umie¶æ kursor na którym¶ z (, [, lub { w linii poni¿ej oznaczonej --->.
+
+ 2. Teraz wpisz znak % .
+
+ 3. Kursor powinien siê znale¼æ na paruj±cym nawiasie.
+
+ 4. Wci¶nij % aby przenie¶æ kursor z powrotem do paruj±cego nawiasu.
+
+---> To ( jest linia testowa z (, [, ] i {, } . ))
+
+UWAGA: Ta funkcja jest bardzo u¿yteczna w debuggowaniu programu
+ z niesparowanymi nawiasami!
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.4.: INNA METODA POPRAWIANIA B£ÊDÓW
+
+
+ ** Wpisz :s/stary/nowy/g aby zamieniæ 'stary' na 'nowy'. **
+
+ 1. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. Wpisz :s/czaas/czas<ENTER> . Zauwa¿, ¿e to polecenie zmienia
+ tylko pierwsze wyst±pienie 'czaas' w linii.
+
+ 3. Teraz wpisz :s/czaas/czas/g oznacza zamianê (substytucjê)
+ globalnie w ca³ej linii. Zmienia wszystkie wyst±pienia w linii.
+
+---> Najlepszy czaas na zobaczenie naj³adniejszych kwiatów to czaas wiosny.
+
+ 4. Aby zmieniæ wszystkie wyst±pienia ³añcucha znaków pomiêdzy dwoma liniami,
+ wpisz: :#,#s/stare/nowe/g gdzie #,# s± numerami dwóch linii.
+ Wpisz :%s/stare/nowe/g by zmieniæ wszystkie wyst±pienia w ca³ym pliku.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 4. PODSUMOWANIE
+
+
+ 1. CTRL-G poka¿e Twoj± pozycjê w pliku i status pliku. SHIFT-G przenosi
+ Ciê do koñca pliku. SHIFT-G poprzedzony liczb± przenosi Ciê do linii
+ o tym numerze.
+
+ 2. Wpisanie / a nastêpnie ³añcucha znaków szuka ³añcucha DO PRZODU.
+ Wpisanie ? a nastêpnie ³añcucha znaków szuka ³añcucha DO TY£U.
+ Po wyszukiwaniu wci¶nij n by znale¼æ nastêpne wyst±pienie szukanej
+ frazy tym samym kierunku lub Shift-N by szukaæ w kierunku przeciwnym.
+
+ 3. Wpisanie % gdy kursor znajduje siê na (,),[,],{, lub } lokalizuje
+ paruj±cy znak.
+
+ 4. By zamieniæ pierwszy stary na nowy w linii wpisz :s/stary/nowy
+ By zamieniæ wszystkie stary na nowy w linii wpisz :s/stary/nowy/g
+ By zamieniæ frazy pomiêdzy dwoma liniami # wpisz :#,#s/stary/nowy/g
+ By zamieniæ wszystkie wyst±pienia w pliku wpisz :%s/stary/nowy/g
+ By Vim prosi³ Ciê o potwierdzienie dodaj 'c' :%s/stary/nowy/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE
+
+
+ ** Wpisz :! a nastêpnie zewnêtrzne polecenie by je wykonaæ. **
+
+ 1. Wpisz znajome polecenie : by ustawiæ kursor na dole ekranu. To pozwala
+ na wprowadzenie polecenia.
+
+ 2. Teraz wstaw ! (wykrzyknik). To umo¿liwi Ci wykonanie dowolnego
+ zewnêtrznego polecenia pow³oki.
+
+ 3. Jako przyk³ad wpisz ls za ! a nastêpnie wci¶nij <ENTER>. To polecenie
+ poka¿e spis plików w Twoim katalogu, tak jakby¶ by³ przy znaku zachêty
+ pow³oki. Mo¿esz te¿ u¿yæ :!dir je¶li ls nie dzia³a.
+
+---> Uwaga: W ten sposób mo¿na wykonaæ wszystkie polecenia pow³oki.
+---> Uwaga: Wszystkie polecenia : musz± byæ zakoñczone <ENTER>.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.2.: WIÊCEJ O ZAPISYWANIU PLIKÓW
+
+
+ ** By zachowaæ zmiany w pliku wpisz :w NAZWA_PLIKU . **
+
+ 1. Wpisz :!dir lub :!ls by zobaczyæ spis plików w katalogu.
+ Ju¿ wiesz, ¿e musisz wcisn±æ <ENTER> po tym.
+
+ 2. Wybierz nazwê pliku jaka jeszcze nie istnieje, np. TEST.
+
+ 3. Teraz wpisz: :w TEST (gdzie TEST jest nazw± pliku jak± wybra³e¶.)
+
+ 4. To polecenie zapamiêta ca³y plik (Vim Tutor) pod nazw± TEST.
+ By to sprawdziæ wpisz :!dir , ¿eby znowu zobaczyæ listê plików.
+
+---> Zauwa¿, ¿e gdyby¶ teraz wyszed³ z Vim-a, a nastêpnie wszed³ ponownie
+ komend± vim TEST , plik by³by dok³adn± kopi± tutoriala kiedy go
+ zapisywa³e¶.
+
+ 5. Teraz usuñ plik wpisuj±c: :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.3.: SELEKTYWNE POLECENIE WRITE (zapisz)
+
+
+ ** By zachowaæ czê¶æ pliku wpisz :#,# w NAZWA_PLIKU **
+
+ 1. Jeszcze raz wpisz :!dir lub :!ls by uzyskaæ listê plików
+ w katalogu i wybierz odpowiedni± nazwê tak± jak TEST.
+
+ 2. Przenie¶ kursor na góre tej strony i wci¶nij CTRL-G by uzyskaæ
+ numer linii. ZAPAMIÊTAJ TÊ LICZBÊ!
+
+ 3. Teraz przenie¶ siê na dó³ strony i wpisz CTRL-G znowu. ZAPAMIÊTAJ
+ NUMER TAK¯E TEJ LINII!
+
+ 4. By zachowaæ JEDYNIE czê¶æ pliku wpisz :#,# w TEST gdzie #,# to
+ dwie liczby jakie zapamiêta³e¶ (góra, dó³ ekranu), a TEST to nazwa
+ Twojego pliku.
+
+ 5. Ponownie sprawd¼ czy ten plik tam jest ( :!dir ), ale NIE usuwaj go.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.4.: WSTAWIANIE I £¡CZENIE PLIKÓW
+
+
+ ** By wstawiæ zawarto¶æ pliku wpisz :r NAZWA_PLIKU **
+
+ 1. Wpisz :!dir by siê upewniæ, ze Twój plik TEST zosta³ poprawnie
+ zapamiêtany.
+
+ 2. Umie¶æ kursor na górze strony.
+
+UWAGA: Po wykonaniu kroku 3. ponownie zobaczysz Lekcjê 5.3. Potem przejd¼
+ do DO£U by zobaczyæ ponownie tê lekcjê.
+
+ 3. Teraz wczytaj plik TEST u¿ywaj±c polecenia :r TEST , gdzie TEST
+ jest nazw± pliku.
+
+UWAGA: Plik, który wczytujesz jest wstawiany tam gdzie by³ kursor.
+
+ 4. By sprawdziæ czy plik zosta³ wczytany cofnij kursor i zobacz, ¿e
+ teraz s± dwie kopie Lekcji 5.3., orygina³ i kopia z pliku.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 5. PODSUMOWANIE
+
+
+ 1. :!polecenie wykonuje polecenie zewnêtrzne.
+
+ U¿ytecznymi przyk³adami s±:
+
+ :!dir - pokazuje spis plików w katalogu.
+
+ :!rm NAZWA_PLIKU - usuwa plik NAZWA_PLIKU.
+
+ 2. :w NAZWA_PLIKU zapisuje obecny plik Vim-a na dysk z nazw± NAZWA_PLIKU.
+
+ 3. :#,#w NAZWA_PLIKU zapisuje linie od # do # w pliku NAZWA_PLIKU.
+
+ 4. :r NAZWA_PLIKU wczytuje z dysku plik NAZWA_PLIKU i wstawia go do
+ bie¿±cego pliku po kursorze.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.1.: POLECENIE OPEN (otwórz)
+
+
+ ** Wpisz o by otworzyæ liniê poni¿ej kursora i przenie¶æ siê do
+ trybu Insert (wprowadzanie). **
+
+ 1. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. Wpisz o (ma³e) by otworzyæ liniê PONI¯EJ kursora i przenie¶æ siê
+ do trybu Insert (wprowadzanie).
+
+ 3. Teraz przepisz liniê oznaczon± ---> i wci¶nij <ESC> by wyj¶æ
+ z trybu Insert (wprowadzanie).
+
+---> Po wci¶niêciu o kursor znajdzie siê w otwartej linii w trybie
+ Insert (wprowadzanie).
+
+ 4. By otworzyæ liniê POWY¯EJ kursora wci¶nij wielkie O zamiast ma³ego
+ o . Wypróbuj to na linii poni¿ej.
+
+ Otwórz liniê powy¿ej wciskaj±c SHIFT-O gdy kursor bêdzie na tej linii.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.2.: POLECENIE APPEND (dodaj)
+
+
+ ** Wpisz a by dodaæ tekst ZA kursorem. **
+
+ 1. Przenie¶ kursor do koñca pierwszej linii poni¿ej oznaczonej --->
+ Zrób to wciskaj±c $ w trybie Normal.
+
+ 2. Wpisz a (ma³e) aby dodaæ tekst ZA znakiem pod kursorem.
+ Wielkie A dodaje tekst na koñcu linii.
+
+Uwaga: To oszczêdza wpisania: ostatni znak ( $ ), i , tekst do dodania,
+ <ESC>, strza³ka w prawo i ostatecznie x , tylko po to by dodaæ
+ tekst na koñcu linii.
+
+ 3. Teraz dokoñcz pierwsz± liniê. Zauwa¿ tak¿e, ¿e append (dodaj)
+ dzia³a tak samo jak tryb Insert (wprowadzanie) z wyj±tkiem tego gdzie
+ tekst jest wstawiany.
+
+---> Ta linia pozwoli Ci æwiczyæ
+---> Ta linia pozwoli Ci æwiczyæ dodawanie tekstu do koñca linii.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.3.: INNA WERSJA REPLACE (zamiana)
+
+
+ ** Wpisz wielkie R by zamieniæ wiêcej ni¿ jeden znak. **
+
+ 1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. Umie¶æ kursor na pocz±tku pierwszego wyrazu, który rózni siê od
+ drugiej linii oznaczonej ---> (wyraz 'ostatni').
+
+ 3. Teraz wpisz R i zamieñ resztê tekstu w pierwszej linii przez
+ nadpisanie nad starym tekstem tak aby pierwsza linia brzmia³a tak samo
+ jak druga.
+
+---> 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. Zauwa¿, ¿e kiedy wci¶niesz <ESC> aby wyj¶æ niezmieniony tekst
+ pozostaje.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.4.: USTAWIANIE OPCJI
+
+
+** Ustawianie opcji tak by szukaj lub substytucja ignorowa³y wielko¶æ liter **
+
+ 1. Szukaj 'ignore' wpisuj±c (w trybie Normal):
+ /ignore
+ Powtórz szukanie kilka razy naciskaj±c klawisz n .
+
+ 2. Ustaw opcjê 'ic' (Ignore case -- ignoruj wielko¶æ liter) poprzez
+ wpisanie: :set ic
+
+ 3. Teraz szukaj 'ignore' ponownie wciskuj±c: n
+ Powtórz szukanie kilka razy naciskaj±c klawisz n .
+
+ 4. Ustaw opcje 'hlsearch' i 'incsearch':
+ :set hls is
+
+ 5. Teraz wprowad¼ polecenie szukaj ponownie i zobacz co siê zdarzy:
+ /ignore
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 6. PODSUMOWANIE
+
+
+ 1. Wpisanie o otwiera liniê PONI¯EJ kursora i umieszcza kursor
+ w otwartej linii w trybie Insert (wprowadzanie).
+ Wpisanie wielkiego O otwiera liniê POWY¯EJ linii, w której
+ znajduje siê kursor.
+
+ 2. Wpisz a by wstawiæ tekst ZA znakiem na, którym jest kursor.
+ Wpisanie wielkiego A automatycznie dodaje tekst na koñcu linii.
+
+ 3. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopóki
+ nie zostanie wci¶niêty <ESC>.
+
+ 4. Wpisanie ":set xxx" ustawia opcjê "xxx".
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 7. POLECENIA POMOCY ON-LINE
+
+
+ ** U¿ycie systemu pomocy on-line **
+
+ Vim posiada bardzo dobry system pomocy on-line. By zacz±æ spróbuj jednej
+ z trzech mo¿liwo¶ci:
+
+ - wci¶nij klawisz <HELP> (je¶li takowy posiadasz)
+ - wci¶nij klawisz <F1> (je¶li takowy posiadasz)
+ - wpisz :help<ENTER>
+
+ Wpisz :q<ENTER> by zamkn±c okno pomocy.
+
+ Mo¿esz te¿ znale¼æ pomoc na ka¿dy temat podaj±c argument polecenia ":help".
+ Spróbuj tych (nie zapomnij wcisn±æ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 8. TWORZENIE SKRYPTU STARTOWEGO
+
+ ** W³±czanie mo¿liwo¶ci Vim-a **
+
+ Vim ma o wiele wiêcej mo¿liwo¶ci ni¿ Vi, ale wiêkszo¶æ z nich jest domy¶lnie
+ wy³±czona. Je¶li chcesz w³±czyæ te mo¿liwo¶ci na starcie musisz utworzyæ
+ plik "vimrc".
+
+ 1. Pocz±tek edycji pliku "vimrc" zale¿y od Twojego systemu:
+ :edit ~/.vimrc dla Unixa
+ :edit $VIM/_vimrc dla MS-Windows
+
+ 2. Teraz wczytaj przyk³adowy plik "vimrc":
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Zapisz plik:
+ :write
+
+ Nastêpnym razem gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ pod¶wietlania
+ sk³adni. Mo¿esz dodaæ wszystkie swoje ulubione ustawienia do tego pliku
+ "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Tutaj siê koñczy tutorial Vim-a. Zosta³ on pomy¶lany tak aby daæ krótki
+ przegl±d jego mo¿liwo¶ci, wystarczaj±cy by¶ móg³ go u¿ywaæ. Jest on
+ daleki od kompletno¶ci poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
+
+ Dla dalszej nauki rekomendujemy ksi±¿kê:
+ Vim - Vi Improved - autor Steve Oualline
+ Wydawca: New Riders
+ Pierwsza ksi±zka ca³kowicie po¶wiêcona Vim-owi. U¿yteczna zw³aszcza dla
+ pocz±tkuj±cych. Zawiera wiele przyk³adów i ilustracji.
+ Zobacz http://iccf-holland.org./click5.html
+
+ Ta ksi±¿ka jest starsza i bardziej o Vi ni¿ o Vim-ie, ale tak¿e warta
+ polecenia:
+ Learning the Vi Editor - autor Linda Lamb
+ Wydawca: O'Reilly & Associates Inc.
+ To dobra ksi±¿ka by dowiedzieæ siê niemal wszystkiego co chcia³by¶ zrobiæ
+ z Vi. Szósta edycja zawiera te¿ informacje o Vim-ie.
+
+ Po polsku wydano:
+ Edytor vi. Leksykon kieszonkowy - autor Arnold Robbins
+ Wydawca: Helion 2001 (O'Reilly).
+ ISBN: 83-7197-472-8
+ http://helion.pl/ksiazki/vilek.htm
+ Jest to ksi±¿eczka zawieraj±ca spis poleceñ vi i jego najwa¿niejszych
+ klonów (miêdzy innymi Vim-a).
+
+ Edytor vi - autorzy Linda Lamb i Arnold Robbins
+ Wydawca: Helion 2001 (O'Reilly) - wg 6 ang. wydania
+ ISBN: 83-7197-539-2
+ http://helion.pl/ksiazki/viedyt.htm
+ Rozszerzona wersja Learning the Vi Editor w polskim t³umaczeniu.
+
+ Ten tutorial zosta³ napisany przez Michaela C. Pierce'a i Roberta K. Ware'a,
+ Colorado School of Mines korzystaj±c z pomocy Charlesa Smitha,
+ Colorado State University.
+ E-mail: bware@mines.colorado.edu.
+
+ Zmodyfikowane dla Vim-a przez Brama Moolenaara.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Przet³umaczone przez Miko³aja Machowskiego,
+ Sierpieñ 2001,
+ rev. Marzec 2002
+ Wszelkie uwagi proszê kierowaæ na: mikmach@wp.pl
+
diff --git a/runtime/tutor/tutor.pl.cp1250 b/runtime/tutor/tutor.pl.cp1250
new file mode 100644
index 000000000..dc42c9cfd
--- /dev/null
+++ b/runtime/tutor/tutor.pl.cp1250
@@ -0,0 +1,830 @@
+===============================================================================
+= W i t a j w t u t o r i a l u V I M - a - Wersja 1.5. =
+===============================================================================
+
+ Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o by
+ wyjaœniæ je wszystkie w tym tutorialu. Ten przewodnik ma nauczyæ
+ Ciê pos³ugiwaæ siê wystarczaj¹co wieloma komendami byœ móg³ ³atwo
+ u¿ywaæ Vim-a jako edytora ogólnego przeznaczenia.
+
+ Czas potrzebny na ukoñczenie tutoriala to 25 do 30 minut i zale¿y
+ od tego jak wiele czasu spêdzisz na eksperymentowaniu. Polecenia
+ wykonywane w czasie lekcji zmodyfikuj¹ tekst. Zrób wczeœniej kopiê
+ tego pliku do æwiczeñ (jeœli zacz¹³eœ komend¹ "vimtutor" to ju¿
+ pracujesz na kopii).
+
+ Wa¿ne jest, byœ pamiêta³, ¿e przewodnik ten zosta³ zaprojektowany do
+ nauki poprzez æwiczenia. To oznacza, ¿e musisz wykonywaæ polecenia
+ by nauczyæ siê ich prawid³owo. Jeœli bêdziesz jedynie czyta³ tekst
+ szybko zapomnisz wiele poleceñ!
+
+ Teraz upewnij siê, ¿e nie masz wciœniêtego CapsLocka i wciskaj j
+ tak d³ugo dopóki Lekcja 1.1. nie wype³ni ca³kowicie ekranu.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.1.: PORUSZANIE SIÊ KURSOREM
+
+ ** By wykonaæ ruch kursorem, wciœnij h, j, k, l jak pokazano. **
+
+ ^
+ k Wskazówka: h jest po lewej
+ < h l > l jest po prawej
+ j j wygl¹da jak strza³ka w dó³
+ v
+ 1. Poruszaj kursorem dopóki nie bêdziesz pewien, ¿e pamiêtasz polecenia.
+
+ 2. Trzymaj j tak d³ugo a¿ bêdzie siê powtarza³.
+---> Teraz wiesz jak dojœæ do nastêpnej lekcji.
+
+ 3. U¿ywaj¹c strza³ki w dó³ przejdŸ do nastêpnej lekcji.
+
+Uwaga: Jeœli nie jesteœ pewien czegoœ co wpisa³eœ, wciœnij <ESC> by wróciæ do
+ trybu Normal. Wtedy powtórz polecenie.
+
+Uwaga: Klawisze kursora tak¿e powinny dzia³aæ, ale u¿ywaj¹c hjkl bêdziesz
+ w stanie poruszaæ siê o wiele szybciej jak siê tylko przyzwyczaisz.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.2.: WCHODZENIE I WYCHODZENIE Z VIM-a
+
+ !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³¹ lekcjê.!!
+
+ 1. Wciœnij <ESC> (aby upewniæ siê, ¿e jesteœ w trybie Normal).
+ 2. Wpisz: :q!<ENTER>.
+
+---> To spowoduje wyjœcie z edytora BEZ zapamiêtywania zmian jakie
+ zd¹¿y³eœ zrobiæ. Jeœli chcesz zapamiêtaæ zmiany i wyjœæ
+ wpisz: :wq<ENTER>
+
+ 3. Kiedy widzisz znak zachêty pow³oki wpisz komendê, ¿eby wróciæ
+ do tutoriala.
+ Powinienieœ wpisaæ: vimtutor<ENTER>
+ Normalnie u¿y³byœ: vim tutor<ENTER>
+
+---> 'vim' oznacza edytor vim, 'tutor' jest plikem, który chcia³byœ
+ edytowaæ.
+
+ 4. Jeœli chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3. aby
+ wyjœæ i wróciæ do edytora. Potem przenieœ siê do Lekcji 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.3.: EDYCJA TEKSTU - KASOWANIE
+
+
+ ** W trybie Normal wciœnij x aby usun¹æ znak pod kursorem. **
+
+ 1. Przenieœ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. By poprawiæ b³êdy, naprowadŸ kursor na znak do usuniêcia.
+
+ 3. Wciœnij x aby usun¹æ niechciany znak.
+
+ 4. Powtarzaj kroki 2. do 4. dopóki zdanie nie jest poprawne.
+
+---> Kkrowa prrzeskoczy³a prrzez ksiiê¿ycc.
+
+ 5. Teraz kiedy zdanie jest poprawione przejdŸ do Lekcji 1.4.
+
+UWAGA: Ucz siê przez æwiczenie, nie wkuwanie.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 1.4.: EDYCJA TEKSTU - INSERT (wprowadzanie)
+
+
+ ** W trybie Normal wciœnij i aby wstawiæ tekst. **
+
+ 1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym
+ gdzie tekst ma byæ wstawiony.
+
+ 3. Wciœnij i a nastêpnie wpisz konieczne poprawki.
+
+ 4. Po poprawieniu b³êdu wciœnij <ESC> by wróciæ do trybu Normal.
+ Powtarzaj kroki 2. do 4. aby poprawiæ ca³e zdanie.
+
+---> W tej brkje trochê .
+---> W tej linii brakuje trochê tekstu.
+
+ 5. Kiedy czujesz siê swobodnie wstawiaj¹c tekst przejdŸ do
+ podsumowania poni¿ej.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 1. PODSUMOWANIE
+
+ 1. Poruszasz kursorem u¿ywaj¹c "strza³ek" i klawiszy hjkl .
+ h (w lewo) j (w dó³) k (do góry) l (w prawo)
+
+ 2. By wejœæ do Vim-a (od znaku zachêty) wpisz:
+ vim NAZWA_PLIKU<ENTER>
+
+ 3. By wyjϾ z Vim-a wpisz:
+ <ESC> :q!<ENTER> by usun¹c wszystkie zmiany.
+ LUB: <ESC> :wq<ENTER> by zmiany zachowaæ.
+
+ 4. By usun¹æ znak pod kursorem w trybie Normal: x
+
+ 5. By wstawiæ tekst przed kursorem w trybie Normal:
+ i type in text <ESC>
+
+UWAGA: Wciœniêcie <ESC> przeniesie Ciê z powrotem do trybu Normal
+lub odwo³a niechciane lub czêœciowo wprowadzone polecenia.
+
+Teraz mo¿emy kontynuowaæ i przejœæ do Lekcji 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.1.: POLECENIE DELETE (usuwanie)
+
+
+ ** Wpisz dw by usun¹c tekst do koñca wyrazu. **
+
+ 1. Wciœnij <ESC> by upewniæ siê, ¿e jesteœ w trybie Normal.
+
+ 2. Przenieœ kursor do linii poni¿ej oznaczonej --->.
+
+ 3. Przesuñ kursor na pocz¹tek wyrazu, które chcesz usun¹æ.
+
+ 4. Wpisz dw by usun¹c wyraz.
+
+ UWAGA: Litery dw bêd¹ siê pojawiaæ na dole ekranu w miarê
+ wpisywania. Jeœli wpisa³eœ coœ Ÿle wciœnij <ESC> i zacznij od
+ pocz¹tku.
+
+---> Jest tu parê papier wyrazów, które kamieñ nie nale¿¹ do no¿yce tego zdania.
+
+ 5. Powtarzaj kroki 3. i 4. dopóki zdanie nie bêdzie poprawne, potem
+ przejdŸ do Lekcji 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.2.: WIÊCEJ POLECEÑ USUWAJ¥CYCH
+
+
+ ** Wpisz d$ aby usun¹æ tekst do koñca linii. **
+
+ 1. Wciœnij <ESC> aby siê upewniæ, ¿e jesteœ w trybie Normal.
+
+ 2. Przenieœ kursor do linii poni¿ej oznaczonej --->.
+
+ 3. Przenieœ kursor do koñca poprawnego zdania (PO pierwszej . ).
+
+ 4. Wpisz d$ aby usun¹æ resztê linii.
+
+---> Ktoœ wpisa³ koniec tego zdania dwukrotnie. zdania dwukrotnie.
+
+
+ 5. PrzejdŸ do Lekcji 2.3. by zrozumieæ co siê sta³o.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.3.: O POLECENIACH I OBIEKTACH
+
+
+ Format dla polecenia usuwaj¹cego d jest taki:
+
+ [liczba] d obiekt LUB d [liczba] obiekt
+
+ Gdzie:
+ liczba - ile razy polecenie ma byæ wykonane (opcjonalne, domyœlna=1).
+ d - polecenie usuwaj¹ce.
+ obiekt - na czym polecenie bêdzie wykonywane (lista poni¿ej).
+
+ Krótka lista obiektów:
+ w - od kursora do koñca wyrazu w³¹czaj¹c spacjê.
+ e - od kursora do koñca wyrazu NIE w³¹czaj¹c spacji.
+ $ - od kursora do koñca linii.
+
+UWAGA: Dla ciekawskich, wybieranie obiektu w trybie Normal bez polecania
+ polecenia przeniesie kursor tak jak opisano w liœcie obiektów.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.4.: WYJ¥TEK DO 'POLECENIE-OBIEKT'
+
+
+ ** Wpisz dd by usun¹c ca³¹ liniê. **
+
+ Z powodu czêstoœci usuwania ca³ych linii, projektanci Vim-a zdecydowali, ¿e
+ bêdzie ³atwiej wpisaæ dwa razy pod rz¹d d aby usun¹æ liniê.
+
+ 1. Przenieœ kursor do zdania poni¿ej.
+ 2. Wpisz dd aby usun¹c wiersz.
+ 3. Teraz przenieœ siê do czwartego wiersza.
+ 4. Wpisz 2dd (pamiêtaj liczba-polecenie-obiekt) aby usun¹c dwia wiersze.
+
+ 1) Ró¿e s¹ czerwone,
+ 2) B³oto jest fajne,
+ 3) Fio³ki s¹ niebieskie,
+ 4) Mam samochód,
+ 5) Zegar podaje czas,
+ 6) Cukier jest s³odki,
+ 7) I ty te¿.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 2.5.: POLECENIE UNDO (cofnij)
+
+
+ ** Wciœnij u aby cofn¹æ skutki ostatniego polecenia.
+ U zaœ, by cofn¹æ skutki dla ca³ej linii. **
+
+ 1. Przenieœ kursor do zdania poni¿ej oznaczonego ---> i umieœæ go na
+ pierwszym b³êdzie.
+ 2. Wpisz x aby usun¹æ pierwszy niechciany znak.
+ 3. Teraz wciœnij u aby cofn¹æ skutki ostatniego polecenia.
+ 4. Tym razem popraw wszystkie b³êdy w linii u¿ywaj¹c polecenia x .
+ 5. Teraz wciœnij wielkie U aby przywróciæ liniê do oryginalnego stanu.
+ 6. Teraz wciœnij u kilka razy by cofn¹æ U i poprzednie polecenia.
+ 7. Teraz wpsz CTRL-R (trzymaj równoczeœnie wciœniête klawisze CTRL i R)
+ kilka razy, by cofn¹æ cofniêcia.
+
+---> Poopraw blêdyyy w teej liniii i zaamiieñ je prrzez coofnij.
+
+ 8. To s¹ bardzo po¿yteczne polecenia.
+
+ PrzejdŸ teraz do podsumowania Lekcji 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 2. PODSUMOWANIE
+
+ 1. By usun¹æ znaki od kursora do koñca wyrazu wpisz: dw
+
+ 2. By usun¹æ znaki od kursora do koñca linii wpisz: d$
+
+ 3. By usun¹æ ca³¹ liniê: dd
+
+ 4. Format polecenia w trybie Normal:
+
+ [liczba] polecenie obiekt LUB polecenie [liczba] obiekt
+
+ Gdzie:
+ liczba - ile razy polecenie ma byæ wykonane
+ polecenie - to co trzeba zrobiæ (np. d dla usuwania)
+ obiekt - na czym polecenie bêdzie wykonywane, takie jak w (wyraz),
+ $ (do koñca linii), etc.
+
+ 5. By cofn¹æ poprzednie polecenie, wpisz: u (ma³e u)
+ By cofn¹æ wszystkie zmiany w linii wpisz: U (wielkie U)
+ By cofn¹æ cofniêcia wpisz: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.1.: POLECENIE PUT (wstaw)
+
+
+ ** Wpisz p by wstawiæ ostatnie usuniêcia po kursorze. **
+
+ 1. Przenieœ kursor do pierwszej linii w zestawie poni¿ej.
+
+ 2. Wpisz dd aby usun¹æ liniê i przechowaæ j¹ w buforze Vim-a.
+
+ 3. Przenieœ kursor do linii POWY¯EJ tej gdzie usuniêta linia powinna
+ siê znajdowaæ.
+
+ 4. W trybie Normal, wciœnij p by wstawiæ liniê.
+
+ 5. Powtaj kroki 2. do 4. a¿ znajd¹ siê w odpowiednim porz¹dku.
+
+ d) Jak dwa anio³ki.
+ b) Na dole fio³ki,
+ c) A my siê kochamy,
+ a) Na górze ró¿e,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.2.: POLECENIE REPLACE (zast¹p)
+
+
+ ** Wpisz r a nastêpnie znak by zast¹piæ znak pod kursorem. **
+
+ 1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->
+
+ 2. Ustaw kursor na pierwszym b³êdzie.
+
+ 3. Wpisz r a potem znak jaki powinien zast¹piæ b³êdny.
+
+ 4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie poprawna.
+
+---> Kjedy ten wiersz bi³ wstókiwany ktoœ wcizn¹³ perê z³ych klawirzy!
+---> Kiedy ten wiersz by³ wstukiwany ktoœ wcisn¹³ parê z³ych klawiszy!
+
+ 5. Teraz czas na Lekcjê 3.3.
+
+
+UWAGA: Pamiêtaj by uczyæ siê æwicz¹c, a nie pamiêciowo.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.3.: POLECENIE CHANGE (zmieñ)
+
+ ** By zmieniæ ca³e s³owo lub jego czêœæ wpisz cw (change word). **
+
+ 1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. UmieϾ kursor na u w lunos.
+
+ 3. Wpisz cw i popraw wyraz (w tym wypadku wstaw 'inia').
+
+ 4. Wciœnij <ESC> i przejdŸ do nastêpnego b³êdu (pierwszy znak, który ma
+ ulec zmianie).
+
+ 5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same
+ jak drugie.
+
+---> Ta lunos ma pire s³ów, które t¿ina zbnic u¿ifajonc pcmazu zmieñ.
+---> Ta linia ma parê s³ów, które trzeba zmieniæ u¿ywaj¹c polecenia zmieñ.
+
+ Zauwa¿, ¿e cw nie tylko zamienia wyraz, ale tak¿e zmienia tryb na
+ Insert (wprowadzanie).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 3.4.: WIÊCEJ ZMIAN U¯YWAJ¥C c
+
+
+ ** Polecenie change u¿ywa takich samych obiektów jak delete. **
+
+ 1. Polecenie change dzia³a tak samo jak delete. Format wygl¹da tak:
+
+ [liczba] c obiekt LUB c [liczba] obiekt
+
+ 2. Obiekty s¹ tak¿e takie same, np.: w (wyraz), $ (koniec linii), etc.
+
+ 3. Przenieœ siê do pierwszej linii poni¿ej oznaczonej --->
+
+ 4. Ustaw kursor na pierwszym b³êdzie.
+
+ 5. Wpisz c$ , popraw koniec wiersza i wciœnij <ESC>.
+
+---> Koniec tego wiersza musi byæ poprawiony aby wygl¹dal tak jak drugi.
+---> Koniec tego wiersza musi byæ poprawiony u¿ywaj¹c polecenia c$ .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 3. PODSUMOWANIE
+
+
+ 1. Aby wstawiæ tekst, który zosta³ wczeœniej usuniêty wciœnij p . To
+ polecenie wstawia skasowany tekst PO kursorze (jeœli ca³a linia
+ zosta³a usuniêta, zostanie ona umieszczona w linii poni¿ej kursora).
+
+ 2. By zamieniæ znak pod kursorem wciœnij r a potem znak, który ma zast¹piæ
+ oryginalny.
+
+ 3. Polecenie change pozwala Ci na zast¹pienie wyszczególnionego obiektu
+ od kursora do koñca obiektu. Np. wpisz cw aby zamieniæ tekst od
+ kursora do koñca wyrazu, c$ aby zmieniæ tekst do koñca linii.
+
+ 4. Format do polecenia change (zmieñ):
+
+ [liczba] c obiekt LUB c [liczba] obiekt
+
+ Teraz przejdŸ do nastêpnej lekcji.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.1.: LOKALIZACJA ORAZ STATUS PLIKU
+
+ ** Naciœnij CTRL-G aby zobaczyæ swoje po³o¿enie w pliku i status
+ pliku. Naciœnij SHIFT-G aby przejœæ do linii w pliku. **
+
+ UWAGA: Przeczytaj ca³¹ lekcjê zanim wykonasz jakieœ polecenia!!!
+
+ 1. Przytrzymaj klawisz CTRL i wciœnij g . Na dole strony pojawi siê pasek
+ statusu z nazw¹ pliku i numerem linii, w której jesteœ. Zapamiêtaj numer
+ linii dla potrzeb kroku 3.
+
+ 2. Wciœnij SHIFT-G aby przejœæ na koniec pliku.
+
+ 3. Wpisz numer linii, w której by³eœ a potem SHIFT-G. To przeniesie Ciê
+ z powrotem do linii, w której by³eœ kiedy wcisn¹³eœ CTRL-G (kiedy
+ wpisujesz numery NIE pojawiaj¹ siê one na ekranie).
+
+ 4. Jeœli czujesz siê wystarczaj¹co pewnie, wykonaj kroki 1-3.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.2.: POLECENIE SZUKAJ
+
+
+ ** Wpisz / a nastêpnie wyra¿enie aby je znaleŸæ. **
+
+ 1. W trybie Normal wpisz / . Zauwa¿, ¿e znak ten, oraz kursor pojawi¹
+ siê na dole ekranu tak samo jak polecenie : .
+
+ 2. Teraz wpisz b³ond<ENTER> . To jest s³owo, którego chcesz szukaæ.
+
+ 3. By szukaæ tej samej frazy ponownie, po prostu wciœnij n .
+ Aby szukaæ tej frazy w przeciwnym, kierunku wciœnij SHIFT-N.
+
+ 4. Jeœli chcesz szukaæ frazy do ty³u, u¿yj polecenia ? zamiast / .
+
+---> Kiedy polecenie 'szukaj' osi¹gnie koniec pliku, przeszukiwanie
+ zacznie siê od pocz¹tku pliku.
+
+ 'b³ond' to nie jest metoda by przeliterowaæ b³¹d; 'b³ond' to b³¹d.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.3.: W POSZUKIWANIU PARUJ¥CYCH NAWIASÓW
+
+
+ ** Wpisz % by znaleŸæ pasuj¹cy ),], lub } . **
+
+ 1. Umieœæ kursor na którymœ z (, [, lub { w linii poni¿ej oznaczonej --->.
+
+ 2. Teraz wpisz znak % .
+
+ 3. Kursor powinien siê znaleŸæ na paruj¹cym nawiasie.
+
+ 4. Wciœnij % aby przenieœæ kursor z powrotem do paruj¹cego nawiasu.
+
+---> To ( jest linia testowa z (, [, ] i {, } . ))
+
+UWAGA: Ta funkcja jest bardzo u¿yteczna w debuggowaniu programu
+ z niesparowanymi nawiasami!
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 4.4.: INNA METODA POPRAWIANIA B£ÊDÓW
+
+
+ ** Wpisz :s/stary/nowy/g aby zamieniæ 'stary' na 'nowy'. **
+
+ 1. Przenieœ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. Wpisz :s/czaas/czas<ENTER> . Zauwa¿, ¿e to polecenie zmienia
+ tylko pierwsze wyst¹pienie 'czaas' w linii.
+
+ 3. Teraz wpisz :s/czaas/czas/g oznacza zamianê (substytucjê)
+ globalnie w ca³ej linii. Zmienia wszystkie wyst¹pienia w linii.
+
+---> Najlepszy czaas na zobaczenie naj³adniejszych kwiatów to czaas wiosny.
+
+ 4. Aby zmieniæ wszystkie wyst¹pienia ³añcucha znaków pomiêdzy dwoma liniami,
+ wpisz: :#,#s/stare/nowe/g gdzie #,# s¹ numerami dwóch linii.
+ Wpisz :%s/stare/nowe/g by zmieniæ wszystkie wyst¹pienia w ca³ym pliku.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 4. PODSUMOWANIE
+
+
+ 1. CTRL-G poka¿e Twoj¹ pozycjê w pliku i status pliku. SHIFT-G przenosi
+ Ciê do koñca pliku. SHIFT-G poprzedzony liczb¹ przenosi Ciê do linii
+ o tym numerze.
+
+ 2. Wpisanie / a nastêpnie ³añcucha znaków szuka ³añcucha DO PRZODU.
+ Wpisanie ? a nastêpnie ³añcucha znaków szuka ³añcucha DO TY£U.
+ Po wyszukiwaniu wciœnij n by znaleŸæ nastêpne wyst¹pienie szukanej
+ frazy tym samym kierunku lub Shift-N by szukaæ w kierunku przeciwnym.
+
+ 3. Wpisanie % gdy kursor znajduje siê na (,),[,],{, lub } lokalizuje
+ paruj¹cy znak.
+
+ 4. By zamieniæ pierwszy stary na nowy w linii wpisz :s/stary/nowy
+ By zamieniæ wszystkie stary na nowy w linii wpisz :s/stary/nowy/g
+ By zamieniæ frazy pomiêdzy dwoma liniami # wpisz :#,#s/stary/nowy/g
+ By zamieniæ wszystkie wyst¹pienia w pliku wpisz :%s/stary/nowy/g
+ By Vim prosi³ Ciê o potwierdzienie dodaj 'c' :%s/stary/nowy/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE
+
+
+ ** Wpisz :! a nastêpnie zewnêtrzne polecenie by je wykonaæ. **
+
+ 1. Wpisz znajome polecenie : by ustawiæ kursor na dole ekranu. To pozwala
+ na wprowadzenie polecenia.
+
+ 2. Teraz wstaw ! (wykrzyknik). To umo¿liwi Ci wykonanie dowolnego
+ zewnêtrznego polecenia pow³oki.
+
+ 3. Jako przyk³ad wpisz ls za ! a nastêpnie wciœnij <ENTER>. To polecenie
+ poka¿e spis plików w Twoim katalogu, tak jakbyœ by³ przy znaku zachêty
+ pow³oki. Mo¿esz te¿ u¿yæ :!dir jeœli ls nie dzia³a.
+
+---> Uwaga: W ten sposób mo¿na wykonaæ wszystkie polecenia pow³oki.
+---> Uwaga: Wszystkie polecenia : musz¹ byæ zakoñczone <ENTER>.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.2.: WIÊCEJ O ZAPISYWANIU PLIKÓW
+
+
+ ** By zachowaæ zmiany w pliku wpisz :w NAZWA_PLIKU . **
+
+ 1. Wpisz :!dir lub :!ls by zobaczyæ spis plików w katalogu.
+ Ju¿ wiesz, ¿e musisz wcisn¹æ <ENTER> po tym.
+
+ 2. Wybierz nazwê pliku jaka jeszcze nie istnieje, np. TEST.
+
+ 3. Teraz wpisz: :w TEST (gdzie TEST jest nazw¹ pliku jak¹ wybra³eœ.)
+
+ 4. To polecenie zapamiêta ca³y plik (Vim Tutor) pod nazw¹ TEST.
+ By to sprawdziæ wpisz :!dir , ¿eby znowu zobaczyæ listê plików.
+
+---> Zauwa¿, ¿e gdybyœ teraz wyszed³ z Vim-a, a nastêpnie wszed³ ponownie
+ komend¹ vim TEST , plik by³by dok³adn¹ kopi¹ tutoriala kiedy go
+ zapisywa³eœ.
+
+ 5. Teraz usuñ plik wpisuj¹c: :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.3.: SELEKTYWNE POLECENIE WRITE (zapisz)
+
+
+ ** By zachowaæ czêœæ pliku wpisz :#,# w NAZWA_PLIKU **
+
+ 1. Jeszcze raz wpisz :!dir lub :!ls by uzyskaæ listê plików
+ w katalogu i wybierz odpowiedni¹ nazwê tak¹ jak TEST.
+
+ 2. Przenieœ kursor na góre tej strony i wciœnij CTRL-G by uzyskaæ
+ numer linii. ZAPAMIÊTAJ TÊ LICZBÊ!
+
+ 3. Teraz przenieœ siê na dó³ strony i wpisz CTRL-G znowu. ZAPAMIÊTAJ
+ NUMER TAK¯E TEJ LINII!
+
+ 4. By zachowaæ JEDYNIE czêœæ pliku wpisz :#,# w TEST gdzie #,# to
+ dwie liczby jakie zapamiêta³eœ (góra, dó³ ekranu), a TEST to nazwa
+ Twojego pliku.
+
+ 5. Ponownie sprawdŸ czy ten plik tam jest ( :!dir ), ale NIE usuwaj go.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 5.4.: WSTAWIANIE I £¥CZENIE PLIKÓW
+
+
+ ** By wstawiæ zawartoœæ pliku wpisz :r NAZWA_PLIKU **
+
+ 1. Wpisz :!dir by siê upewniæ, ze Twój plik TEST zosta³ poprawnie
+ zapamiêtany.
+
+ 2. Umieœæ kursor na górze strony.
+
+UWAGA: Po wykonaniu kroku 3. ponownie zobaczysz Lekcjê 5.3. Potem przejdŸ
+ do DO£U by zobaczyæ ponownie tê lekcjê.
+
+ 3. Teraz wczytaj plik TEST u¿ywaj¹c polecenia :r TEST , gdzie TEST
+ jest nazw¹ pliku.
+
+UWAGA: Plik, który wczytujesz jest wstawiany tam gdzie by³ kursor.
+
+ 4. By sprawdziæ czy plik zosta³ wczytany cofnij kursor i zobacz, ¿e
+ teraz s¹ dwie kopie Lekcji 5.3., orygina³ i kopia z pliku.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 5. PODSUMOWANIE
+
+
+ 1. :!polecenie wykonuje polecenie zewnêtrzne.
+
+ U¿ytecznymi przyk³adami s¹:
+
+ :!dir - pokazuje spis plików w katalogu.
+
+ :!rm NAZWA_PLIKU - usuwa plik NAZWA_PLIKU.
+
+ 2. :w NAZWA_PLIKU zapisuje obecny plik Vim-a na dysk z nazw¹ NAZWA_PLIKU.
+
+ 3. :#,#w NAZWA_PLIKU zapisuje linie od # do # w pliku NAZWA_PLIKU.
+
+ 4. :r NAZWA_PLIKU wczytuje z dysku plik NAZWA_PLIKU i wstawia go do
+ bie¿¹cego pliku po kursorze.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.1.: POLECENIE OPEN (otwórz)
+
+
+ ** Wpisz o by otworzyæ liniê poni¿ej kursora i przenieœæ siê do
+ trybu Insert (wprowadzanie). **
+
+ 1. Przenieœ kursor do linii poni¿ej oznaczonej --->.
+
+ 2. Wpisz o (ma³e) by otworzyæ liniê PONI¯EJ kursora i przenieœæ siê
+ do trybu Insert (wprowadzanie).
+
+ 3. Teraz przepisz liniê oznaczon¹ ---> i wciœnij <ESC> by wyjœæ
+ z trybu Insert (wprowadzanie).
+
+---> Po wciœniêciu o kursor znajdzie siê w otwartej linii w trybie
+ Insert (wprowadzanie).
+
+ 4. By otworzyæ liniê POWY¯EJ kursora wciœnij wielkie O zamiast ma³ego
+ o . Wypróbuj to na linii poni¿ej.
+
+ Otwórz liniê powy¿ej wciskaj¹c SHIFT-O gdy kursor bêdzie na tej linii.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.2.: POLECENIE APPEND (dodaj)
+
+
+ ** Wpisz a by dodaæ tekst ZA kursorem. **
+
+ 1. Przenieœ kursor do koñca pierwszej linii poni¿ej oznaczonej --->
+ Zrób to wciskaj¹c $ w trybie Normal.
+
+ 2. Wpisz a (ma³e) aby dodaæ tekst ZA znakiem pod kursorem.
+ Wielkie A dodaje tekst na koñcu linii.
+
+Uwaga: To oszczêdza wpisania: ostatni znak ( $ ), i , tekst do dodania,
+ <ESC>, strza³ka w prawo i ostatecznie x , tylko po to by dodaæ
+ tekst na koñcu linii.
+
+ 3. Teraz dokoñcz pierwsz¹ liniê. Zauwa¿ tak¿e, ¿e append (dodaj)
+ dzia³a tak samo jak tryb Insert (wprowadzanie) z wyj¹tkiem tego gdzie
+ tekst jest wstawiany.
+
+---> Ta linia pozwoli Ci æwiczyæ
+---> Ta linia pozwoli Ci æwiczyæ dodawanie tekstu do koñca linii.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.3.: INNA WERSJA REPLACE (zamiana)
+
+
+ ** Wpisz wielkie R by zamieniæ wiêcej ni¿ jeden znak. **
+
+ 1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->.
+
+ 2. Umieœæ kursor na pocz¹tku pierwszego wyrazu, który rózni siê od
+ drugiej linii oznaczonej ---> (wyraz 'ostatni').
+
+ 3. Teraz wpisz R i zamieñ resztê tekstu w pierwszej linii przez
+ nadpisanie nad starym tekstem tak aby pierwsza linia brzmia³a tak samo
+ jak druga.
+
+---> 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. Zauwa¿, ¿e kiedy wciœniesz <ESC> aby wyjœæ niezmieniony tekst
+ pozostaje.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcja 6.4.: USTAWIANIE OPCJI
+
+
+** Ustawianie opcji tak by szukaj lub substytucja ignorowa³y wielkoœæ liter **
+
+ 1. Szukaj 'ignore' wpisuj¹c (w trybie Normal):
+ /ignore
+ Powtórz szukanie kilka razy naciskaj¹c klawisz n .
+
+ 2. Ustaw opcjê 'ic' (Ignore case -- ignoruj wielkoœæ liter) poprzez
+ wpisanie: :set ic
+
+ 3. Teraz szukaj 'ignore' ponownie wciskuj¹c: n
+ Powtórz szukanie kilka razy naciskaj¹c klawisz n .
+
+ 4. Ustaw opcje 'hlsearch' i 'incsearch':
+ :set hls is
+
+ 5. Teraz wprowadŸ polecenie szukaj ponownie i zobacz co siê zdarzy:
+ /ignore
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 6. PODSUMOWANIE
+
+
+ 1. Wpisanie o otwiera liniê PONI¯EJ kursora i umieszcza kursor
+ w otwartej linii w trybie Insert (wprowadzanie).
+ Wpisanie wielkiego O otwiera liniê POWY¯EJ linii, w której
+ znajduje siê kursor.
+
+ 2. Wpisz a by wstawiæ tekst ZA znakiem na, którym jest kursor.
+ Wpisanie wielkiego A automatycznie dodaje tekst na koñcu linii.
+
+ 3. Wpisanie wielkiego R wprowadza w tryb Replace (zamiana) dopóki
+ nie zostanie wciœniêty <ESC>.
+
+ 4. Wpisanie ":set xxx" ustawia opcjê "xxx".
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 7. POLECENIA POMOCY ON-LINE
+
+
+ ** U¿ycie systemu pomocy on-line **
+
+ Vim posiada bardzo dobry system pomocy on-line. By zacz¹æ spróbuj jednej
+ z trzech mo¿liwoœci:
+
+ - wciœnij klawisz <HELP> (jeœli takowy posiadasz)
+ - wciœnij klawisz <F1> (jeœli takowy posiadasz)
+ - wpisz :help<ENTER>
+
+ Wpisz :q<ENTER> by zamkn¹c okno pomocy.
+
+ Mo¿esz te¿ znaleŸæ pomoc na ka¿dy temat podaj¹c argument polecenia ":help".
+ Spróbuj tych (nie zapomnij wcisn¹æ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCJA 8. TWORZENIE SKRYPTU STARTOWEGO
+
+ ** W³¹czanie mo¿liwoœci Vim-a **
+
+ Vim ma o wiele wiêcej mo¿liwoœci ni¿ Vi, ale wiêkszoœæ z nich jest domyœlnie
+ wy³¹czona. Jeœli chcesz w³¹czyæ te mo¿liwoœci na starcie musisz utworzyæ
+ plik "vimrc".
+
+ 1. Pocz¹tek edycji pliku "vimrc" zale¿y od Twojego systemu:
+ :edit ~/.vimrc dla Unixa
+ :edit $VIM/_vimrc dla MS-Windows
+
+ 2. Teraz wczytaj przyk³adowy plik "vimrc":
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Zapisz plik:
+ :write
+
+ Nastêpnym razem gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ podœwietlania
+ sk³adni. Mo¿esz dodaæ wszystkie swoje ulubione ustawienia do tego pliku
+ "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Tutaj siê koñczy tutorial Vim-a. Zosta³ on pomyœlany tak aby daæ krótki
+ przegl¹d jego mo¿liwoœci, wystarczaj¹cy byœ móg³ go u¿ywaæ. Jest on
+ daleki od kompletnoœci poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
+
+ Dla dalszej nauki rekomendujemy ksi¹¿kê:
+ Vim - Vi Improved - autor Steve Oualline
+ Wydawca: New Riders
+ Pierwsza ksi¹zka ca³kowicie poœwiêcona Vim-owi. U¿yteczna zw³aszcza dla
+ pocz¹tkuj¹cych. Zawiera wiele przyk³adów i ilustracji.
+ Zobacz http://iccf-holland.org./click5.html
+
+ Ta ksi¹¿ka jest starsza i bardziej o Vi ni¿ o Vim-ie, ale tak¿e warta
+ polecenia:
+ Learning the Vi Editor - autor Linda Lamb
+ Wydawca: O'Reilly & Associates Inc.
+ To dobra ksi¹¿ka by dowiedzieæ siê niemal wszystkiego co chcia³byœ zrobiæ
+ z Vi. Szósta edycja zawiera te¿ informacje o Vim-ie.
+
+ Po polsku wydano:
+ Edytor vi. Leksykon kieszonkowy - autor Arnold Robbins
+ Wydawca: Helion 2001 (O'Reilly).
+ ISBN: 83-7197-472-8
+ http://helion.pl/ksiazki/vilek.htm
+ Jest to ksi¹¿eczka zawieraj¹ca spis poleceñ vi i jego najwa¿niejszych
+ klonów (miêdzy innymi Vim-a).
+
+ Edytor vi - autorzy Linda Lamb i Arnold Robbins
+ Wydawca: Helion 2001 (O'Reilly) - wg 6 ang. wydania
+ ISBN: 83-7197-539-2
+ http://helion.pl/ksiazki/viedyt.htm
+ Rozszerzona wersja Learning the Vi Editor w polskim t³umaczeniu.
+
+ Ten tutorial zosta³ napisany przez Michaela C. Pierce'a i Roberta K. Ware'a,
+ Colorado School of Mines korzystaj¹c z pomocy Charlesa Smitha,
+ Colorado State University.
+ E-mail: bware@mines.colorado.edu.
+
+ Zmodyfikowane dla Vim-a przez Brama Moolenaara.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Przet³umaczone przez Miko³aja Machowskiego,
+ Sierpieñ 2001,
+ rev. Marzec 2002
+ Wszelkie uwagi proszê kierowaæ na: mikmach@wp.pl
+
diff --git a/runtime/tutor/tutor.ru b/runtime/tutor/tutor.ru
new file mode 100644
index 000000000..6fd74cf08
--- /dev/null
+++ b/runtime/tutor/tutor.ru
@@ -0,0 +1,834 @@
+===============================================================================
+= ä Ï Â Ò Ï Ð Ï Ö Á Ì Ï × Á Ô Ø × Õ Þ Å Â Î É Ë VIM - ÷ÅÒÓÉÑ 1.5 =
+===============================================================================
+ Vim --- ÜÔÏ ÏÞÅÎØ ÍÏÝÎÙÊ ÒÅÄÁËÔÏÒ, ÉÍÅÀÝÉÊ ÍÎÏÖÅÓÔ×Ï ËÏÍÁÎÄ, ÓÌÉÛËÏÍ
+ ÍÎÏÇÏ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÉÈ ×ÓÅ ÍÏÖÎÏ ÂÙÌÏ ÏÐÉÓÁÔØ × ÔÁËÏÍ ÕÞÅÂÎÉËÅ, ËÁË
+ ÜÔÏÔ. üÔÏÔ ÕÞÅÂÎÉË ÐÒÉÚ×ÁÎ ÏÂßÑÓÎÉÔØ ÄÏÓÔÁÔÏÞÎÏÅ ÞÉÓÌÏ ËÏÍÁÎÄ ÄÌÑ ÔÏÇÏ,
+ ÞÔÏÂÙ ÷Ù ÍÏÇÌÉ Ó ÌÅÇËÏÓÔØÀ ÉÓÐÏÌØÚÏ×ÁÔØ Vim × ËÁÞÅÓÔ×Å ÒÅÄÁËÔÏÒÁ ÏÂÝÅÇÏ
+ ÎÁÚÎÁÞÅÎÉÑ.
+
+ ÷ÁÍ ÐÏÔÒÅÂÕÅÔÓÑ ÐÒÉÂÌÉÚÉÔÅÌØÎÏ 25-30 ÍÉÎÕÔ ÎÁ ÏÓ×ÏÅÎÉÅ ÄÁÎÎÏÇÏ ÕÞÅÂÎÉËÁ ×
+ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÔÏÇÏ, ÓËÏÌØËÏ ×ÒÅÍÅÎÉ ÷Ù ÐÏÔÒÁÔÉÔÅ ÎÁ ÜËÓÐÅÒÉÍÅÎÔÙ.
+
+ ëÏÍÁÎÄÙ × ÕÒÏËÁÈ ÂÕÄÕÔ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ ÔÅËÓÔ. óÏÚÄÁÊÔÅ ËÏÐÉÀ ÜÔÏÇÏ ÆÁÊÌÁ,
+ ÞÔÏÂÙ ÐÏÐÒÁËÔÉËÏ×ÁÔØÓÑ ÎÁ ÎÅÊ (ÅÓÌÉ ÷Ù ÚÁÐÕÓÔÉÌÉ "vimtutor", ÔÏ ÜÔÏ ÕÖÅ
+ ËÏÐÉÑ).
+
+ ÷ÁÖÎÏ ÐÏÍÎÉÔØ, ÞÔÏ ÜÔÏÔ ÕÞÅÂÎÉË ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÏÂÕÞÅÎÉÑ × ÐÒÏÃÅÓÓÅ
+ ÉÓÐÏÌØÚÏ×ÁÎÉÑ. üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÷Ù ÄÏÌÖÎÙ ÚÁÐÕÓËÁÔØ ËÏÍÁÎÄÙ ÄÌÑ ÔÏÇÏ,
+ ÞÔÏÂÙ ËÁË ÓÌÅÄÕÅÔ ÉÈ ÉÚÕÞÉÔØ. åÓÌÉ ÷Ù ÐÒÏÓÔÏ ÐÒÏÞÉÔÁÅÔÅ ÔÅËÓÔ, ÔÏ
+ ÚÁÂÕÄÅÔÅ ËÏÍÁÎÄÙ!
+
+ ôÅÐÅÒØ ÕÂÅÄÉÔÅÓØ × ÔÏÍ, ÞÔÏ ËÌÁ×ÉÛÁ CapsLock ÎÅ ×ËÌÀÞÅÎÁ É ÎÁÖÍÉÔÅ
+ ËÌÁ×ÉÛÕ j ÎÅÓËÏÌØËÏ ÒÁÚ, ÔÁË, ÞÔÏÂÙ õÒÏË 1.1 ÐÏÌÎÏÓÔØÀ ÐÏÍÅÓÔÉÌÓÑ ÎÁ
+ ÜËÒÁÎÅ.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 1.1: ðåòåíåýåîéå ëõòóïòá
+
+** äÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÉ h,j,k,l ÔÁË, ËÁË ÐÏËÁÚÁÎÏ ÎÉÖÅ. **
+ ^
+ k óÏ×ÅÔÙ: ëÌÁ×ÉÛÁ h ÎÁÈÏÄÉÔÓÑ ÓÌÅ×Á É ÐÅÒÅÍÅÝÁÅÔ ×ÌÅ×Ï.
+ < h l > ëÌÁ×ÉÛÁ l ÎÁÈÏÄÉÔÓÑ ÓÐÒÁ×Á É ÐÅÒÅÍÅÝÁÅÔ ×ÐÒÁ×Ï.
+ j ëÌÁ×ÉÛÁ j ÐÏÈÏÖÁ ÎÁ ÓÔÒÅÌËÕ `×ÎÉÚ'.
+ v
+ 1. ðÏÄ×ÉÇÁÊÔÅ ËÕÒÓÏÒ ÐÏ ÜËÒÁÎÕ, ÐÏËÁ ÎÅ ÐÏÞÕ×ÓÔ×ÕÅÔÅ ÓÅÂÑ Õ×ÅÒÅÎÎÏ.
+
+ 2. îÁÄÁ×ÉÔÅ ËÌÁ×ÉÛÕ `×ÎÉÚ' (j) ÐÏËÁ ÏÎÁ ÎÅ ÎÁÞÎÅÔ ÐÏ×ÔÏÒÑÔØÓÑ.
+---> ôÅÐÅÒØ ÷Ù ÚÎÁÅÔÅ, ËÁË ÐÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ÕÒÏËÕ.
+
+ 3. éÓÐÏÌØÚÕÑ ËÌÁ×ÉÛÕ `×ÎÉÚ' ÐÅÒÅÊÄÉÔÅ Ë õÒÏËÕ 1.2.
+
+úÁÍÅÞÁÎÉÅ: åÓÌÉ ×Ù ÐÏËÁ ÎÅ Õ×ÅÒÅÎÙ × ÔÏÍ, ÞÔÏ ÎÁÂÉÒÁÅÔÅ, ÎÁÖÍÉÔÅ <ESC> ÄÌÑ
+ ÐÅÒÅÈÏÄÁ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ (Normal mode). ðÏÓÌÅ ÜÔÏÇÏ ÐÅÒÅÎÁÂÅÒÉÔÅ
+ ÔÒÅÂÕÅÍÕÀ ËÏÍÁÎÄÕ.
+
+úÁÍÅÞÁÎÉÅ: ïÂÙÞÎÙÅ ËÌÁ×ÉÛÉ ÕÐÒÁ×ÌÅÎÉÑ ËÕÒÓÏÒÏÍ (ÓÔÒÅÌËÉ) ÔÁËÖÅ ÄÏÌÖÎÙ
+ ÒÁÂÏÔÁÔØ. ïÄÎÁËÏ, ËÌÁ×ÉÛÉ hjkl ÐÏÚ×ÏÌÑÔ ÷ÁÍ ÐÅÒÅÍÅÝÁÔØÓÑ
+ ÚÎÁÞÉÔÅÌØÎÏ ÂÙÓÔÒÅÅ, ËÁË ÔÏÌØËÏ ÷Ù ÎÁÕÞÉÔÅÓØ ÉÍÉ ÐÏÌØÚÏ×ÁÔØÓÑ.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 1.2: úáðõóë é úá÷åòûåîéå òáâïôù ó VIM
+
+!! ÷îéíáîéå! ðÒÅÖÄÅ, ÞÅÍ ×ÙÐÏÌÎÑÔØ ÌÀÂÏÊ ÉÚ ÏÐÉÓÁÎÎÙÈ ÎÉÖÅ ÛÁÇÏ×, ÐÒÏÞÔÉÔÅ
+ ÕÒÏË ÃÅÌÉËÏÍ !!
+
+ 1. îÁÖÍÉÔÅ ËÌÁ×ÉÛÕ <ESC> (ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÕÄÏÓÔÏ×ÅÒÉÔØÓÑ, ÞÔÏ ÷Ù × ÏÂÙÞÎÏÍ
+ ÒÅÖÉÍÅ (Normal mode)).
+
+ 2. îÁÂÅÒÉÔÅ: :q! <ENTER>.
+
+---> üÔÏ ÐÏÚ×ÏÌÉÔ ÷ÁÍ ×ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ âåú óïèòáîåîéñ ÌÀÂÙÈ ÓÄÅÌÁÎÎÙÈ
+ ÉÚÍÅÎÅÎÉÊ. åÓÌÉ ÷Ù ÈÏÔÉÔÅ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ É ×ÙÊÔÉ:
+ :wq <ENTER>
+
+ 3. ëÏÇÄÁ ÷Ù Õ×ÉÄÉÔÅ ÐÒÉÇÌÁÛÅÎÉÅ ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÉ, ÎÁÂÅÒÉÔÅ ËÏÍÁÎÄÕ,
+ ËÏÔÏÒÁÑ ÐÒÉ×ÅÌÁ ÷ÁÓ × ÜÔÏÔ ÕÞÅÂÎÉË. üÔÏ ÍÏÖÅÔ ÂÙÔØ
+ vimtutor ru <ENTER>
+ ïÂÙÞÎÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ: vim tutor.ru <ENTER>
+
+---> 'vim' ÐÏÚ×ÏÌÑÅÔ ÚÁÐÕÓÔÉÔØ ÒÅÄÁËÔÏÒ vim, 'tutor.ru' --- ÜÔÏ ÆÁÊÌ, ËÏÔÏÒÙÊ
+ ÷Ù ÂÕÄÅÔÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ.
+
+ 4. åÓÌÉ ÷Ù Õ×ÅÒÅÎÙ × ÔÏÍ, ÞÔÏ ÚÁÐÏÍÎÉÌÉ ÜÔÉ ÛÁÇÉ, ×ÙÐÏÌÎÉÔÅ ÛÁÇÉ ÏÔ 1 ÄÏ 3
+ ÞÔÏÂÙ ×ÙÊÔÉ ÓÎÏ×Á ÚÁÐÕÓÔÉÔØ ÒÅÄÁËÔÏÒ. úÁÔÅÍ ÐÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ Ë
+ õÒÏËÕ 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 1.3: òåäáëôéòï÷áîéå ôåëóôá - õäáìåîéå
+
+
+** îÁÈÏÄÑÓØ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ ÎÁÖÍÉÔÅ x, ÞÔÏÂÙ ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÓÔÒÏËÅ ×ÎÉÚÕ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. äÌÑ ÉÓÐÒÁ×ÌÅÎÉÑ ÏÛÉÂÏË, ÐÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ, ÐÏËÁ ÏÎ ÎÅ ÏËÁÖÅÔÓÑ ÎÁÄ
+ ÕÄÁÌÑÅÍÙÍ ÓÉÍ×ÏÌÏÍ.
+
+ 3. îÁÖÍÉÔÅ ËÌÁ×ÉÛÕ x ÄÌÑ ÕÄÁÌÅÎÉÑ ÔÒÅÂÕÅÍÏÇÏ ÓÉÍ×ÏÌÁ.
+
+ 4. ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 2--4 ÐÏËÁ ÓÔÒÏËÁ ÎÅ ÂÕÄÅÔ ÉÓÐÒÁ×ÌÅÎÁ.
+
+---> ïÔ ÔÔÔÏÐÏÔÁ ËÏÐÙÔÔ ÐÐÐÙÌØ ÐÐÏ ÐÐÐÏÌÀ ÌÅÔÔÉÔÔ.
+
+ 5. ôÅÐÅÒØ, ËÏÇÄÁ ÓÔÒÏËÁ ÏÔËÏÒÒÅËÔÉÒÏ×ÁÎÁ, ÐÅÒÅÈÏÄÉÔÅ Ë ÕÒÏËÕ 1.4.
+
+úáíåþáîéå: ÷ ÈÏÄÅ ÏÓ×ÏÅÎÉÑ ÜÔÏÇÏ ÕÞÅÂÎÉËÁ ÎÅ ÐÙÔÁÊÔÅÓØ ÚÁÐÏÍÉÎÁÔØ, ÕÞÉÔÅ
+ × ÐÒÏÃÅÓÓÅ ÉÓÐÏÌØÚÏ×ÁÎÉÑ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 1.4: òåäáëôéòï÷áîéå ôåëóôá - ÷óôá÷ëá
+
+
+ ** îÁÈÏÄÑÓØ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ (Normal mode), ÎÁÖÍÉÔÅ i ÄÌÑ ×ÓÔÁ×ËÉ ÔÅËÓÔÁ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÐÅÒ×ÏÊ ÓÔÒÏËÅ ×ÎÉÚÕ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÓÄÅÌÁÔØ ÐÅÒ×ÕÀ ÓÔÒÏËÕ ÉÄÅÎÔÉÞÎÏÊ ×ÔÏÒÏÊ, ÐÏÍÅÓÔÉÔÅ
+ ËÕÒÓÏÒ ÎÁ ÓÉÍ×ÏÌ ðåòåä ËÏÔÏÒÙÍ ÓÌÅÄÕÅÔ ×ÓÔÁ×ÉÔØ ÔÅËÓÔ.
+
+ 3. îÁÖÍÉÔÅ i É ÎÁÂÅÒÉÔÅ ÔÒÅÂÕÅÍÙÅ ÄÏÂÁ×ÌÅÎÉÑ.
+
+ 4. ðÏÓÌÅ ÉÓÐÒÁ×ÌÅÎÉÑ ×ÓÅÈ ÏÛÉÂÏË ÎÁÖÍÉÔÅ <ESC> ÄÌÑ ×ÏÚ×ÒÁÔÁ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ.
+ ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 2--4, ÐÏËÁ ÆÒÁÚÁ ÎÅ ÂÕÄÅÔ ÉÓÐÒÁ×ÌÅÎÁ ÐÏÌÎÏÓÔØÀ.
+
+---> þÁÓÔØ ÔÅËÓÔÁ × ÓÔÒÏËÅ ÂÅÓÌÅÄÎÏ .
+---> þÁÓÔØ ÔÅËÓÔÁ × ÜÔÏÊ ÓÔÒÏËÅ ÂÅÓÓÌÅÄÎÏ ÐÒÏÐÁÌÁ.
+
+ 5. ëÏÇÄÁ ÏÓ×ÏÉÔÅ ×ÓÔÁ×ËÕ ÔÅËÓÔÁ, ÐÅÒÅÈÏÄÉÔÅ ÄÁÌØÛÅ Ë òÅÚÀÍÅ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 1
+
+ 1. ëÕÒÓÏÒ ÐÅÒÅÍÅÝÁÅÔÓÑ ÌÉÂÏ ËÌÁ×ÉÛÁÍÉ ÓÏ ÓÔÒÅÌËÁÍÉ, ÌÉÂÏ ËÌÁ×ÉÛÁÍÉ hjkl.
+ h (×ÌÅ×Ï) j (×ÎÉÚ) k (××ÅÒÈ) l (×ÐÒÁ×Ï)
+
+ 2. äÌÑ ÚÁÐÕÓËÁ Vim (ÉÚ ÐÒÉÇÌÁÛÅÎÉÑ % ËÏÍÁÎÄÎÏÊ ÏÂÏÌÏÞËÉ) ÎÁÂÅÒÉÔÅ:
+ vim éíñ_æáêìá <ENTER>
+
+ 3. äÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ Ó Vim ÎÁÂÅÒÉÔÅ:
+ <ESC> :q! <ENTER> ÞÔÏÂÙ ÏÔËÁÚÁÔØÓÑ ÏÔ ÓÏÈÒÁÎÅÎÉÑ ÉÚÍÅÎÅÎÉÊ.
+ éÌÉ ÎÁÂÅÒÉÔÅ:
+ <ESC> :wq <ENTER> ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ.
+
+ 4. äÌÑ ÕÄÁÌÅÎÉÑ ÓÉÍ×ÏÌÁ ÐÏÄ ËÕÒÓÏÒÏÍ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ, ÎÁÂÅÒÉÔÅ: x
+
+ 5. þÔÏÂÙ ×ÓÔÁ×ÉÔØ ÔÅËÓÔ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ, ÎÁÂÅÒÉÔÅ:
+ i ××ÏÄÉÔÅ ÔÅËÓÔ <ESC>
+
+úáíåþáîéå: îÁÖÁÔÉÅ <ESC> ÐÅÒÅÍÅÓÔÉÔ ÷ÁÓ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ (Normal mode) ÌÉÂÏ
+ ÐÒÅÒ×ÅÔ ÎÅÖÅÌÁÔÅÌØÎÕÀ É ÞÁÓÔÉÞÎÏ ÚÁ×ÅÒÛÅÎÎÕÀ ËÏÍÁÎÄÕ.
+
+ôÅÐÅÒØ ÐÅÒÅÈÏÄÉÍ Ë õÒÏËÕ 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 2.1: ëïíáîäù õäáìåîéñ
+
+
+ ** îÁÂÅÒÉÔÅ dw ÄÌÑ ÕÄÁÌÅÎÉÑ ÕÞÁÓÔËÁ ÔÅËÓÔÁ ÄÏ ËÏÎÃÁ ÓÌÏ×Á. **
+
+ 1. îÁÖÍÉÔÅ <ESC>, ÞÔÏÂÙ ÐÅÒÅÊÔÉ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ.
+
+ 2. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 3. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÓÌÏ×Á, ËÏÔÏÒÏÅ ÓÌÅÄÕÅÔ ÕÄÁÌÉÔØ.
+
+ 4. îÁÂÅÒÉÔÅ dw , ÞÔÏÂÙ ÕÄÁÌÉÔØ ÜÔÏ ÓÌÏ×Ï.
+
+úáíåþáîéå: ÷Ï ×ÒÅÍÑ ÎÁÂÏÒÁ ÂÕË×Ù dw ÐÏÑ×ÑÔÓÑ × ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ. åÓÌÉ
+ ÷Ù ÞÔÏ-ÔÏ ÎÁÂÅÒÅÔÅ ÎÅÐÒÁ×ÉÌØÎÏ, ÎÁÖÍÉÔÅ <ESC> É ÎÁÞÎÉÔÅ ÓÎÁÞÁÌÁ.
+
+---> îÅÓËÏÌØËÏ ÓÌÏ× ÒÁÆÉÎÁÄ × ÜÔÏÍ ÐÒÅÄÌÏÖÅÎÉÉ Á×ÔÏËÒÁÎ ÉÚÌÉÛÎÉ.
+
+ 5. ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 3 É 4, ÐÏËÁ ÎÅ ÉÓÐÒÁ×ÉÔÅ ×ÓÅ ÏÛÉÂËÉ É ÐÅÒÅÈÏÄÉÔÅ Ë
+ õÒÏËÕ 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 2.2: äïðïìîéôåìøîùå ëïíáîäù õäáìåîéñ
+
+
+ ** îÁÂÅÒÉÔÅ d$ ÄÌÑ ÕÄÁÌÅÎÉÑ ÔÅËÓÔÁ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ. **
+
+ 1. îÁÖÍÉÔÅ <ESC>, ÞÔÏÂÙ ÐÅÒÅÊÔÉ × ÏÂÙÞÎÙÊ ÒÅÖÉÍ.
+
+ 2. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 3. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ËÏÎÃÕ ÐÒÁ×ÉÌØÎÏÊ ÓÔÒÏËÉ (ðïóìå ÐÅÒ×ÏÊ . ).
+
+ 4. þÔÏÂÙ ÕÄÁÌÉÔØ ÏÓÔÁÔÏË ÓÔÒÏËÉ, ÎÁÂÅÒÉÔÅ d$ .
+
+---> ëÔÏ-ÔÏ ÎÁÂÒÁÌ ÏËÏÎÞÁÎÉÅ ÜÔÏÊ ÓÔÒÏËÉ Ä×ÁÖÄÙ. ÏËÏÎÞÁÎÉÅ ÜÔÏÊ ÓÔÒÏËÉ Ä×ÁÖÄÙ.
+
+
+ 5.þÔÏÂÙ ÌÕÞÛÅ ÒÁÚÏÂÒÁÔØÓÑ × ÜÔÏÍ, ÐÅÒÅÈÏÄÉÔÅ Ë õÒÏËÕ 2.3.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 2.3: ëïíáîäù é ïâÿåëôù
+
+
+ æÏÒÍÁÔ ËÏÍÁÎÄÙ `ÕÄÁÌÅÎÉÅ' d ÔÁËÏ×:
+
+ [ÞÉÓÌÏ] d ÏÂßÅËÔ éìé d [ÞÉÓÌÏ] ÏÂßÅËÔ
+ úÄÅÓØ:
+ ÞÉÓÌÏ - ÓËÏÌØËÏ ÒÁÚ ÉÓÐÏÌÎÉÔØ ËÏÍÁÎÄÕ (ÎÅÏÂÑÚÁÔÅÌØÎÏ, ÐÏ ÕÍÏÌÞÁÎÉÀ=1).
+ d - ËÏÍÁÎÄÁ ÕÄÁÌÅÎÉÑ.
+ ÏÂßÅËÔ - Ó ÞÅÍ ËÏÍÁÎÄÁ ÄÏÌÖÎÁ ÂÙÔØ ×ÙÐÏÌÎÅÎÁ (ÐÅÒÅÞÉÓÌÅÎÏ ÎÉÖÅ).
+
+ ëÒÁÔËÉÊ ÓÐÉÓÏË ÏÂßÅËÔÏ×:
+ w - ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÌÏ×Á, ×ËÌÀÞÁÑ ÚÁ×ÅÒÛÁÀÝÉÊ ÐÒÏÂÅÌ.
+ e - ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÌÏ×Á, îå ×ËÌÀÞÁÑ ÚÁ×ÅÒÛÁÀÝÉÊ ÐÒÏÂÅÌ.
+ $ - ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ.
+ ^ - ÏÔ ËÕÒÓÏÒÁ ÄÏ ÎÁÞÁÌÁ ÓÔÒÏËÉ.
+
+úáíåþáîéå: ðÒÏÓÔÏÅ ÎÁÖÁÔÉÅ ÎÁ ÓÉÍ×ÏÌ ÏÂßÅËÔÁ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ (Normal mode)
+ ÂÅÚ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ËÏÍÁÎÄ ÐÅÒÅÄ×ÉÎÅÔ ËÕÒÓÏÒ ÔÁË, ËÁË ÕËÁÚÁÎÏ ×
+ ÓÐÉÓËÅ ÏÂßÅËÔÏ×.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 2.4: éóëìàþåîéå éú ðòá÷éìá `ëïíáîäá-ïâÿåëô'
+
+
+ ** îÁÂÅÒÉÔÅ dd ÄÌÑ ÕÄÁÌÅÎÉÑ ×ÓÅÊ ÓÔÒÏËÉ. **
+
+ ÷ÓÌÅÄÓÔ×ÉÅ ÞÁÓÔÏÇÏ ÐÒÉÍÅÎÅÎÉÑ ÏÐÅÒÁÃÉÉ ÕÄÁÌÅÎÉÑ ×ÓÅÊ ÓÔÒÏËÉ, ÒÁÚÒÁÂÏÔÞÉËÉ
+ Vim ÒÅÛÉÌÉ, ÞÔÏ ÄÌÑ ÜÔÏÇÏ ÐÒÏÝÅ ×ÓÅÇÏ ÐÒÏÓÔÏ ÎÁÂÒÁÔØ d Ä×ÁÖÄÙ.
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, ËÏ ×ÔÏÒÏÊ ÓÔÒÏËÅ ÆÒÁÚÙ.
+ 2. îÁÂÅÒÉÔÅ dd ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÔÒÏËÉ.
+ 3. ôÅÐÅÒØ ÐÅÒÅÍÅÓÔÉÔÅÓØ Ë ÞÅÔ×ÅÒÔÏÊ ÓÔÒÏËÅ.
+ 4. îÁÂÅÒÉÔÅ 2dd (×ÓÐÏÍÎÉÔÅ ÐÒÁ×ÉÌÏ `ÞÉÓÌÏ-ËÏÍÁÎÄÁ-ÏÂßÅËÔ'), ÞÔÏÂÙ ÕÄÁÌÉÔØ
+ Ä×Å ÓÔÒÏËÉ.
+
+ 1) ìÅÔÏÍ Ñ ÈÏÖÕ ÎÁ ÓÔÁÄÉÏÎ,
+ 2) ï, ËÁË ×ÎÅÚÁÐÎÏ ËÏÎÞÉÌÓÑ ÄÉ×ÁÎ!
+ 3) ñ ÂÏÌÅÀ ÚÁ ``úÅÎÉÔ'', ``úÅÎÉÔ'' --- ÞÅÍÐÉÏÎ!
+ 4) ðÅÞÁÌØÎÏ Ñ ÇÌÑÖÕ ÎÁ ÎÁÛÅ ÐÏËÏÌÅÎÉÅ!
+ 5) åÇÏ ÇÒÑÄÕÝÅÅ ÉÌØ ÐÕÓÔÏ ÉÌØ ÔÅÍÎÏ...
+ 6) ñ ÓÉÖÕ ÎÁ ÓËÁÍÅÊËÅ × ÌÏÖÅ `â'
+ 7) é ÉÇÒÁÀ ÎÁ ÂÏÌØÛÏÊ ÖÅÓÔÑÎÏÊ ÔÒÕÂÅ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 2.5: ëïíáîäá `ïôëáô'
+
+
+ ** îÁÖÍÉÔÅ u ÄÌÑ ÏÔÍÅÎÙ ÒÅÚÕÌØÔÁÔÁ ÒÁÂÏÔÙ ÐÒÅÄÙÄÕÝÅÊ ËÏÍÁÎÄÙ, U ÄÌÑ ÏÔÍÅÎÙ
+ ÉÓÐÒÁ×ÌÅÎÉÊ ×Ï ×ÓÅÊ ÓÔÒÏËÅ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ ---> É ÕÓÔÁÎÏ×ÉÔÅ ÅÇÏ ÎÁ
+ ÐÅÒ×ÕÀ ÏÛÉÂËÕ.
+ 2. îÁÖÍÉÔÅ x ÄÌÑ ÕÄÁÌÅÎÉÑ ÐÅÒ×ÏÇÏ ÎÅÐÒÁ×ÉÌØÎÏÇÏ ÓÉÍ×ÏÌÁ.
+ 3. ôÅÐÅÒØ ÎÁÖÍÉÔÅ u ÄÌÑ ÏÔÍÅÎÙ (ÏÔËÁÔÁ) ÐÏÓÌÅÄÎÅÊ ×ÙÐÏÌÎÅÎÎÏÊ ËÏÍÁÎÄÙ.
+ 4. éÓÐÒÁ×ØÔÅ ×ÓÅ ÏÛÉÂËÉ × ÓÔÒÏËÅ, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ x .
+ 5. ôÅÐÅÒØ ÎÁÖÍÉÔÅ ÚÁÇÌÁ×ÎÕÀ U ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ×ÅÒÎÕÔØ ×ÓÀ ÓÔÒÏËÕ × ÉÓÈÏÄÎÏÅ
+ ÓÏÓÔÏÑÎÉÅ.
+ 6. îÁÖÍÉÔÅ u ÎÅÓËÏÌØËÏ ÒÁÚ ÄÌÑ ÏÔÍÅÎÙ ËÏÍÁÎÄÙ U É ÐÒÅÄÙÄÕÝÉÈ ËÏÍÁÎÄ.
+ 7. îÁÖÍÉÔÅ ÔÅÐÅÒØ CTRL-R (ÕÄÅÒÖÉ×ÁÊÔÅ ËÌÁ×ÉÛÕ CTRL ÎÁÖÁÔÏÊ × ÍÏÍÅÎÔ ÎÁÖÁÔÉÑ
+ R) ÎÅÓËÏÌØËÏ ÒÁÚ ÄÌÑ ×ÏÚ×ÒÁÔÁ ËÏÍÁÎÄ (ÏÔËÁÔ ÏÔËÁÔÁ).
+
+---> éÓÐÒÒÁ×ØÔÅ ÏÏÛÉÂËÉ × ÜÔÏÊÊ ÓÔÒÏËÅ É ×ÅÒÎÉÔÔÅ ÉÈ ÓÓ ÐÏÍÏÝØØÀ `ÏÔËÁÔÁ'.
+
+ 8. üÔÏ ÂÙÌÉ ÏÞÅÎØ ÐÏÌÅÚÎÙÅ ËÏÍÁÎÄÙ. äÁÌÅÅ ÐÅÒÅÈÏÄÉÔÅ Ë òÅÚÀÍÅ õÒÏËÁ 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 2
+
+
+ 1. äÌÑ ÕÄÁÌÅÎÉÑ ÔÅËÓÔÁ ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÌÏ×Á ÎÁÂÅÒÉÔÅ: dw
+
+ 2. äÌÑ ÕÄÁÌÅÎÉÑ ÔÅËÓÔÁ ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ ÎÁÂÅÒÉÔÅ: d$
+
+ 3. äÌÑ ÕÄÁÌÅÎÉÑ ×ÓÅÊ ÓÔÒÏËÉ ÎÁÂÅÒÉÔÅ: dd
+
+ 4. æÏÒÍÁÔ ËÏÍÁÎÄÙ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ ÉÍÅÅÔ ×ÉÄ:
+
+ [ÞÉÓÌÏ] ËÏÍÁÎÄÁ ÏÂßÅËÔ éìé ËÏÍÁÎÄÁ [ÞÉÓÌÏ] ÏÂßÅËÔ
+ ÇÄÅ:
+ ÞÉÓÌÏ - ÓËÏÌØËÏ ÒÁÚ ÐÏ×ÔÏÒÉÔØ ×ÙÐÏÌÎÅÎÉÅ ËÏÍÁÎÄÙ
+ ËÏÍÁÎÄÁ - ÞÔÏ ×ÙÐÏÌÎÉÔØ, ÎÁÐÒÉÍÅÒ d ÄÌÑ ÕÄÁÌÅÎÉÑ
+ ÏÂßÅËÔ - ÎÁ ÞÔÏ ÄÏÌÖÎÁ ×ÏÚÄÅÊÓÔ×Ï×ÁÔØ ËÏÍÁÎÄÁ, ÎÁÐÒÉÍÅÒ w (ÓÌÏ×Ï),
+ $ (ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ), É Ô.Ä.
+
+ 5. äÌÑ ÏÔÍÅÎÙ (ÏÔËÁÔÁ) ÐÒÅÄÛÅÓÔ×ÕÀÝÉÈ ÄÅÊÓÔ×ÉÊ ÎÁÂÅÒÉÔÅ: u (ÓÔÒÏÞÎÁÑ u)
+ äÌÑ ÏÔÍÅÎÙ (ÏÔËÁÔÁ) ×ÓÅÈ ÉÚÍÅÎÅÎÉÊ × ÓÔÒÏËÅ ÎÁÂÅÒÉÔÅ: U (ÐÒÏÐÉÓÎÁÑ U)
+ äÌÑ ÏÔÍÅÎÙ ÏÔËÁÔÁ ÎÁÂÅÒÉÔÅ: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 3.1: ëïíáîäá ÷óôá÷ëé
+
+
+ ** îÁÂÅÒÉÔÅ p ÄÌÑ ×ÓÔÁ×ËÉ ÐÏÓÌÅÄÎÅÇÏ ÕÄÁÌÅÎÎÏÇÏ ÔÅËÓÔÁ ÐÏÓÌÅ ËÕÒÓÏÒÁ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ Ë ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÅ ÉÚ ÎÁÂÏÒÁ.
+
+ 2. îÁÂÅÒÉÔÅ dd ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÔÒÏËÉ É ÅÅ ÓÏÈÒÁÎÅÎÉÑ × ÂÕÆÅÒÅ Vim'Á.
+
+ 3. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÓÔÒÏËÅ îáä ÔÅÍ ÍÅÓÔÏÍ, ËÕÄÁ ÓÌÅÄÕÅÔ ×ÓÔÁ×ÉÔØ
+ ÕÄÁÌÅÎÎÕÀ ÓÔÒÏËÕ.
+
+ 4. îÁÈÏÄÑÓØ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ ÎÁÂÅÒÉÔÅ p ÄÌÑ ÚÁÍÅÎÙ ÓÔÒÏËÉ.
+
+ 5. ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 2--4, ÐÏËÁ ÎÅ ÒÁÓÓÔÁ×ÉÔÅ ×ÓÅ ÓÔÒÏËÉ × ÎÕÖÎÏÍ ÐÏÒÑÄËÅ.
+
+ Ç) é ÌÕÞÛÅ ×ÙÄÕÍÁÔØ ÎÅ ÍÏÇ.
+ Â) ëÏÇÄÁ ÎÅ × ÛÕÔËÕ ÚÁÎÅÍÏÇ,
+ ×) ïÎ Õ×ÁÖÁÔØ ÓÅÂÑ ÚÁÓÔÁ×ÉÌ
+ Á) íÏÊ ÄÑÄÑ ÓÁÍÙÈ ÞÅÓÔÎÙÈ ÐÒÁ×ÉÌ
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 3.2: ëïíáîäá úáíåîù
+
+
+ ** îÁÂÅÒÉÔÅ r É ÓÉÍ×ÏÌ, ÚÁÍÅÎÑÀÝÉÊ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. õÓÔÁÎÏ×ÉÔÅ ËÕÒÓÏÒ ÔÁË, ÞÔÏÂÙ ÏÎ ÎÁÈÏÄÉÌÓÑ ÎÁÄ ÐÅÒ×ÏÊ ÏÛÉÂËÏÊ.
+
+ 3. îÁÂÅÒÉÔÅ r É ÚÁÔÅÍ ÓÉÍ×ÏÌ, ÉÓÐÒÁ×ÌÑÀÝÉÊ ÏÛÉÂËÕ.
+
+ 4. ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 2 É 3, ÐÏËÁ ÐÅÒ×ÁÑ ÓÔÒÏËÁ ÎÅ ÂÕÄÅÔ ÉÓÐÒÁ×ÌÅÎÁ.
+
+---> ÷ ÍÏÍÅÇÔ ÎÁÂÔÒÁ ÜÔÏÊ ÞÔÒÏËÉ ËÏÅ0ËÔÏ Ó ÔÒÕÄÏÍ ÐÏÐ×ÄÁÌ ÐÏ ËÌ×ÁÉÛÁÍ!
+---> ÷ ÍÏÍÅÎÔ ÎÁÂÏÒÁ ÜÔÏÊ ÓÔÒÏËÉ ËÏÅ-ËÔÏ Ó ÔÒÕÄÏÍ ÐÏÐÁÄÁÌ ÐÏ ËÌÁ×ÉÛÁÍ!
+
+ 5. ôÅÐÅÒØ ÐÅÒÅÈÏÄÉÔÅ Ë õÒÏËÕ 3.2.
+
+úáíåþáîéå: ðÏÍÎÉÔÅ, ÞÔÏ ×Ù ÄÏÌÖÎÙ ÕÞÉÔØÓÑ × ÐÒÏÃÅÓÓÅ ÒÁÂÏÔÙ, Á ÎÅ ÐÒÏÓÔÏ
+ ÚÁÐÏÍÉÎÁÑ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 3.3: ëïíáîäá éúíåîåîéñ
+
+
+ ** äÌÑ ÉÚÍÅÎÅÎÉÑ ÞÁÓÔÉ ÓÌÏ×Á ÎÁÂÅÒÉÔÅ cw . **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. òÁÓÐÏÌÏÖÉÔÅ ËÕÒÓÏÒ ÎÁÄ ÂÕË×ÏÊ `o' × ÓÌÏ×Å `ÓÏÌÁ'.
+
+ 3. îÁÂÅÒÉÔÅ cw É ÉÓÐÒÁ×ØÔÅ ÓÌÏ×Ï (× ÄÁÎÎÏÍ ÓÌÕÞÁÅ, ÎÁÂÅÒÉÔÅ `ÌÏ×'.)
+
+ 4. îÁÖÍÉÔÅ <ESC> É ÐÅÒÅÈÏÄÉÔÅ Ë ÓÌÅÄÕÀÝÅÊ ÏÛÉÂËÅ (Ë ÐÅÒ×ÏÍÕ ÓÉÍ×ÏÌÕ, ËÏÔÏÒÙÊ
+ ÎÁÄÏ ÉÚÍÅÎÉÔØ.)
+
+ 5. ðÏ×ÔÏÒÉÔÅ ÛÁÇÉ 3--4 ÐÏËÁ ÐÅÒ×ÏÅ ÐÒÅÄÌÏÖÅÎÉÅ ÎÅ ÓÔÁÎÅÔ ÉÄÅÎÔÉÞÎÙÍ ×ÔÏÒÏÍÕ.
+
+---> îÅÓËÏÌØËÏ ÓÏÌÁ × ÜØÇà ÓÔÒÏËÅ ÔÐÇÛÃÂØ ÒÅÄÁÌÚËÕÀÉÅÓ×È.
+---> îÅÓËÏÌØËÏ ÓÌÏ× × ÜÔÏÊ ÓÔÒÏËÅ ÔÒÅÂÕÀÔ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ.
+
+ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ cw ÎÅ ÔÏÌØËÏ ÚÁÍÅÎÑÅÔ ÓÌÏ×Ï, ÎÏ É ÐÅÒÅ×ÏÄÉÔ ×ÁÓ × ÒÅÖÉÍ
+×ÓÔÁ×ËÉ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 3.4: ðòïäïìöáåí éúíåîñôø ó ëïíáîäïê c
+
+
+** ëÏÍÁÎÄÁ ÚÁÍÅÎÙ ÉÓÐÏÌØÚÕÅÔÓÑ Ó ÔÅÍÉ ÖÅ ÏÂßÅËÔÁÍÉ, ÞÔÏ É ËÏÍÁÎÄÁ ÕÄÁÌÅÎÉÑ. **
+
+ 1. ëÏÍÁÎÄÁ ÉÚÍÅÎÅÎÉÑ ÐÒÉÍÅÎÑÅÔÓÑ ÔÁËÉÍ ÖÅ ÏÂÒÁÚÏÍ, ËÁË É ËÏÍÁÎÄÁ ÕÄÁÌÅÎÉÑ.
+ åÅ ÆÏÒÍÁÔ ÔÁËÏ×:
+
+ [ÞÉÓÌÏ] c ÏÂßÅËÔ éìé c [ÞÉÓÌÏ] ÏÂßÅËÔ
+
+ 2. ïÂßÅËÔÙ ÔÁËÖÅ ÓÏ×ÐÁÄÁÀÔ: w (ÓÌÏ×Ï), $ (ËÏÎÅà ÓÔÒÏËÉ) É Ô.Ð.
+
+ 3. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 4. ðÅÒÅÊÄÉÔÅ Ë ÐÅÒ×ÏÊ ÏÛÉÂËÅ.
+
+ 5. îÁÂÅÒÉÔÅ c$ É ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ÐÅÒ×ÕÀ ÓÔÒÏËÕ ÔÁË, ÞÔÏÂÙ ÏÎÁ ÓÏ×ÐÁÄÁÌÁ ÓÏ
+ ×ÔÏÒÏÊ, ÐÏÓÌÅ ÞÅÇÏ ÎÁÖÍÉÔÅ <ESC>.
+
+---> ëÏÎÅà ÜÔÏÊ ÓÔÒÏËÉ ÎÕÖÄÁÅÔÓÑ × ÐÏÍÏÝÉ, ÞÔÏÂÙ ÓÔÁÔØ ÐÏÈÏÖÉÍ ÎÁ ×ÔÏÒÏÊ.
+---> ëÏÎÅà ÜÔÏÊ ÓÔÒÏËÉ ÎÕÖÄÁÅÔÓÑ × ÐÏÍÏÝÉ ËÏÍÁÎÄÙ c$ .
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 3
+
+
+ 1. äÌÑ ×ÓÔÁ×ËÉ ÔÅËÓÔÁ, ËÏÔÏÒÙÊ ÔÏÌØËÏ ÞÔÏ ÂÙÌ ÕÄÁÌÅÎ, ÎÁÂÅÒÉÔÅ p . üÔÁ
+ ËÏÍÁÎÄÁ ×ÓÔÁ×ÉÔ ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ ðïóìå ËÕÒÓÏÒÁ (ÅÓÌÉ ÂÙÌÁ ÕÄÁÌÅÎÁ ÓÔÒÏËÁ,
+ ÔÏ ÏÎÁ ÂÕÄÅÔ ÐÏÍÅÝÅÎÁ × ÓÔÒÏËÅ ÐÏÄ ËÕÒÓÏÒÏÍ).
+
+ 2. äÌÑ ÚÁÍÅÎÙ ÓÉÍ×ÏÌÁ ÐÏÄ ËÕÒÓÏÒÏÍ ÎÁÂÅÒÉÔÅ r É ÚÁÔÅÍ ÚÁÍÅÎÑÀÝÉÊ ÓÉÍ×ÏÌ.
+
+ 3. ëÏÍÁÎÄÁ ÉÚÍÅÎÅÎÉÑ ÐÏÚ×ÏÌÑÅÔ ÷ÁÍ ÉÚÍÅÎÉÔØ ÕËÁÚÁÎÎÙÊ ÏÂßÅËÔ ÏÔ ËÕÒÓÏÒÁ ÄÏ
+ ËÏÎÃÁ ÜÔÏÇÏ ÏÂßÅËÔÁ. îÁÐÒÉÍÅÒ, ÎÁÂÅÒÉÔÅ cw ÄÌÑ ÚÁÍÅÎÙ ÏÔ ËÕÒÓÏÒÁ ÄÏ
+ ËÏÎÃÁ ÓÌÏ×Á, c$ ÄÌÑ ÉÚÍÅÎÅÎÉÑ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ.
+
+ 4. æÏÒÍÁÔ ËÏÍÁÎÄÙ ÉÚÍÅÎÅÎÉÑ ÔÁËÏ×:
+
+ [ÞÉÓÌÏ] c ÏÂßÅËÔ éìé c [ÞÉÓÌÏ] ÏÂßÅËÔ
+
+ôÅÐÅÒØ ÏÔÐÒÁ×ÌÑÊÔÅÓØ Ë ÓÌÅÄÕÀÝÅÍÕ ÕÒÏËÕ.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 4.1: éîæïòíáãéñ ï æáêìå é òáóðïìïöåîéå ÷ îåí
+
+
+ ** îÁÂÅÒÉÔÅ CTRL-g ÞÔÏÂÙ Õ×ÉÄÅÔØ ÷ÁÛÅ ÍÅÓÔÏÒÁÓÐÏÌÏÖÅÎÉÅ × ÆÁÊÌÅ É ÉÎÆÏÒÍÁÃÉÀ
+ Ï ÎÅÍ.
+ îÁÂÅÒÉÔÅ SHIFT-G ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ Ë ÚÁÄÁÎÎÏÊ ÓÔÒÏËÅ × ÆÁÊÌÅ. **
+
+ úÁÍÅÞÁÎÉÅ: ðÒÏÞÉÔÁÊÔÅ ×ÅÓØ ÕÒÏË ÐÒÅÖÄÅ ÞÅÍ ×ÙÐÏÌÎÑÔØ ÌÀÂÙÅ ËÏÍÁÎÄÙ!!
+
+ 1. õÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ Ctrl ÎÁÖÍÉÔÅ g . ÷ÎÉÚÕ ÜËÒÁÎÁ ÐÏÑ×ÉÔÓÑ ÓÔÒÏËÁ ÓÔÁÔÕÓÁ Ó
+ ÉÍÅÎÅÍ ÆÁÊÌÁ É ÎÏÍÅÒÏÍ ÓÔÒÏËÉ, × ËÏÔÏÒÏÊ ÷Ù ÎÁÈÏÄÉÔÅÓØ. úÁÐÏÍÎÉÔÅ ÎÏÍÅÒ
+ ÓÔÒÏËÉ, ÏÎ ÐÏÔÒÅÂÕÅÔÓÑ ÎÁ ûÁÇÅ 3.
+
+ 2. îÁÖÍÉÔÅ shift-G ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ Ë ËÏÎÃÕ ÆÁÊÌÁ.
+
+ 3. îÁÂÅÒÉÔÅ ÎÏÍÅÒ ÓÔÒÏËÉ, × ËÏÔÏÒÏÊ ×Ù ÎÁÈÏÄÉÌÉÓØ É ÚÁÔÅÍ shift-G. üÔÏ
+ ×ÅÒÎÅÔ ÷ÁÓ Ë ÓÔÒÏËÅ, × ËÏÔÏÒÏÊ ÷Ù ÂÙÌÉ, ËÏÇÄÁ × ÐÅÒ×ÙÊ ÒÁÚ ÎÁÖÁÌÉ Ctrl-g.
+ (ëÏÇÄÁ ÷Ù ÂÕÄÅÔÅ ÎÁÂÉÒÁÔØ ÃÉÆÒÙ, ÏÎÉ îå ÏÔÏÂÒÁÚÑÔÓÑ ÎÁ ÜËÒÁÎÅ.)
+
+ 4. åÓÌÉ ÷Ù ÚÁÐÏÍÎÉÌÉ ×ÓÅ ×ÙÛÅÓËÁÚÁÎÎÏÅ, ×ÙÐÏÌÎÉÔÅ ÛÁÇÉ 1--3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 4.2: ëïíáîäá ðïéóëá
+
+ ** îÁÂÅÒÉÔÅ / É ÚÁÔÅÍ ××ÅÄÉÔÅ ÉÓËÏÍÕÀ ÆÒÁÚÕ. **
+
+ 1. ÷ ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ (Normal mode) ÎÁÂÅÒÉÔÅ ÓÉÍ×ÏÌ / . ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ,
+ ÞÔÏ ÏÎ ×ÍÅÓÔÅ Ó ËÕÒÓÏÒÏÍ ÐÏÑ×ÉÔÓÑ ×ÎÉÚÕ ÜËÒÁÎÁ, ËÁË ÜÔÏ ÐÒÏÉÓÈÏÄÉÔ Ó
+ ËÏÍÁÎÄÏÊ : .
+
+ 2. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ 'ÏÛÛÛÉÂËÁ' <ENTER>. üÔÏ ÔÏ ÓÌÏ×Ï, ËÏÔÏÒÏÅ ÷Ù ÂÕÄÅÔÅ
+ ÉÓËÁÔØ.
+
+ 3. äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÐÏ×ÔÏÒÉÔØ ÐÏÉÓË, ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ n .
+ äÌÑ ÐÏÉÓËÁ ÜÔÏÊ ÆÒÁÚÙ × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ, ÎÁÖÍÉÔÅ Shift-N .
+
+ 4. åÓÌÉ ÷Ù ÖÅÌÁÅÔÅ ÓÒÁÚÕ ÉÓËÁÔØ × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ, ÉÓÐÏÌØÚÕÊÔÅ
+ ËÏÍÁÎÄÕ ? ×ÍÅÓÔÏ / .
+
+---> ëÏÇÄÁ ÷Ù ÐÒÉ ÐÏÉÓËÅ ÄÏÓÔÉÇÎÅÔÅ ËÏÎÃÁ ÆÁÊÌÁ, ÐÏÉÓË ÂÕÄÅÔ ÐÒÏÄÏÌÖÅÎ Ó
+ ÎÁÞÁÌÁ.
+
+ "ÏÛÛÛÉÂËÁ" ÜÔÏ ÎÅ ÓÐÏÓÏ ÐÒÏÉÚÎÅÓÅÎÉÑ ÓÌÏ×Á `ÏÛÉÂËÁ'; ÏÛÛÛÉÂËÁ ÜÔÏ ÏÛÉÂËÁ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 4.3: ðïéóë ðáòîùè óëïâïë
+
+
+ ** îÁÂÅÒÉÔÅ % ÄÌÑ ÐÏÉÓËÁ ÐÁÒÎÙÈ ),] ÉÌÉ } . **
+
+ 1. ðÏÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁÄ ÌÀÂÏÊ ÉÚ (, [ ÉÌÉ { × ÓÔÒÏËÅ ×ÎÉÚÕ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ ÓÉÍ×ÏÌ % .
+
+ 3. ëÕÒÓÏÒ ÄÏÌÖÅÎ ÐÅÒÅÓËÏÞÉÔØ ÎÁ ÐÁÒÎÕÀ ÓËÏÂËÕ.
+
+ 4. îÁÂÅÒÉÔÅ % ÄÌÑ ×ÏÚ×ÒÁÔÁ ËÕÒÓÏÒÁ ÎÁÚÁÄ Ë ÐÅÒ×ÏÊ ÓËÏÂËÅ.
+
+---> üÔÏ ( ÓÔÒÏËÁ, ÓÏÄÅÒÖÁÝÁÑ ÔÁËÉÅ (, ÔÁËÉÅ [ ] É ÔÁËÉÅ { } ÓËÏÂËÉ. ))
+
+úÁÍÅÞÁÎÉÅ: üÔÏ ÏÞÅÎØ ÕÄÏÂÎÏ ÐÒÉ ÏÔÌÁÄËÅ ÐÒÏÇÒÁÍÍ Ó ÐÒÏÐÕÝÅÎÎÙÍÉ ÓËÏÂËÁÍÉ!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 4.4: óðïóïâ éóðòá÷ìåîéñ ïûéâïë
+
+
+ ** îÁÂÅÒÉÔÅ :s/ÂÙÌÏ/ÓÔÁÌÏ/g ÄÌÑ ÚÁÍÅÎÙ 'ÂÙÌÏ' ÎÁ 'ÓÔÁÌÏ'. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. îÁÂÅÒÉÔÅ :s/Õ×ÏÄÀ/Õ×ÏÖÕ <ENTER> . ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ ÎÁ ÔÏ, ÞÔÏ ÜÔÁ ËÏÍÁÎÄÁ
+ ÚÁÍÅÎÉÔ ÔÏÌØËÏ ÐÅÒ×ÏÅ ÎÁÊÄÅÎÎÏÅ ×ÈÏÖÄÅÎÉÅ × ÓÔÒÏËÅ.
+
+ 3. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ :s/Õ×ÏÄÀ/Õ×ÏÖÕ/g , ÏÚÎÁÞÁÀÝÅÅ ÐÏÄÓÔÁÎÏ×ËÕ ÇÌÏÂÁÌØÎÏ ×Ï
+ ×ÓÅÊ ÓÔÒÏËÅ. üÔÏ ÚÁÍÅÎÉÔ ×ÓÅ ÎÁÊÄÅÎÎÙÅ × ÓÔÒÏËÅ ×ÈÏÖÄÅÎÉÑ.
+
+---> ñ Õ×ÏÄÀ Ë ÏÔ×ÅÒÖÅÎÎÙÍ ÓÅÌÅÎØÑÍ, Ñ Õ×ÏÄÀ ÓË×ÏÚØ ×ÅËÏ×ÅÞÎÙÊ ÓÔÏÎ, Ñ Õ×ÏÄÀ Ë
+ ÚÁÂÙÔÙÍ ÐÏËÏÌÅÎØÑÍ.
+
+ 4. äÌÑ ÚÁÍÅÎÙ ×ÓÅÈ ×ÈÏÖÄÅÎÉÊ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÓÉÍ×ÏÌÏ× ÍÅÖÄÕ Ä×ÕÍÑ
+ ÓÔÒÏËÁÍÉ,
+ ÎÁÂÅÒÉÔÅ :#,#s/ÂÙÌÏ/ÓÔÁÌÏ/g ÇÄÅ #,# --- ÎÏÍÅÒÁ ÜÔÉÈ ÓÔÒÏË.
+ îÁÂÅÒÉÔÅ :%s/ÂÙÌÏ/ÓÔÁÌÏ/g ÄÌÑ ÚÁÍÅÎÙ ×ÓÅÈ ×ÈÏÖÄÅÎÉÊ ×Ï ×ÓÅÍ ÆÁÊÌÅ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 4
+ 1. Ctrl-g ÐÏËÁÚÙ×ÁÅÔ ×ÁÛÅ ÐÏÌÏÖÅÎÉÅ × ÆÁÊÌÅ É ÉÎÆÏÒÍÁÃÉÀ Ï ÎÅÍ.
+ Shift-G ÐÅÒÅÍÅÝÁÅÔ ÷ÁÓ × ËÏÎÅà ÆÁÊÌÁ. îÏÍÅÒ, ÚÁ ËÏÔÏÒÙÍ ÓÌÅÄÕÅÔ Shift-G
+ ÐÏÚ×ÏÌÑÅÔ ÐÅÒÅÊÔÉ Ë ÓÔÒÏËÅ Ó ÜÔÉÍ ÎÏÍÅÒÏÍ.
+
+ 2. îÁÖÁÔÉÅ / É ÚÁÔÅÍ ××ÏÄ ÓÔÒÏËÉ ÐÏÚ×ÏÌÑÅÔ ÐÒÏÉÚ×ÅÓÔÉ ÐÏÉÓË ÜÔÏÊ ÓÔÒÏËÉ
+ ÷ðåòåä ÐÏ ÔÅËÓÔÕ.
+ îÁÖÁÔÉÅ ? É ÚÁÔÅÍ ××ÏÄ ÓÔÒÏËÉ ÐÏÚ×ÏÌÑÅÔ ÐÒÏÉÚ×ÅÓÔÉ ÐÏÉÓË ÜÔÏÊ ÓÔÒÏËÉ
+ îáúáä ÐÏ ÔÅËÓÔÕ.
+ ðÏÓÌÅ ÐÏÉÓËÁ ÎÁÂÅÒÉÔÅ n ÄÌÑ ÐÅÒÅÈÏÄÁ Ë ÓÌÅÄÕÀÝÅÍÕ ×ÈÏÖÄÅÎÉÀ ÉÓËÏÍÏÊ
+ ÓÔÒÏËÉ × ÔÏÍ ÖÅ ÎÁÐÒÁ×ÌÅÎÉÉ ÉÌÉ Shift-N ÄÌÑ ÐÅÒÅÈÏÄÁ × ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÍ
+ ÎÁÐÒÁ×ÌÅÎÉÉ.
+
+ 3. îÁÖÁÔÉÅ % , ËÏÇÄÁ ËÕÒÓÏÒ ÎÁÈÏÄÉÔÓÑ ÎÁ (,),[,],{, ÉÌÉ } ÐÏÚ×ÏÌÑÅÔ ÎÁÊÔÉ
+ ÐÁÒÎÕÀ ÓËÏÂËÕ.
+
+ 4. äÌÑ ÐÏÄÓÔÁÎÏ×ËÉ `ÓÔÁÌÏ' ×ÍÅÓÔÏ ÐÅÒ×ÏÇÏ `ÂÙÌÏ' × ÓÔÒÏËÅ, ÎÁÂÅÒÉÔÅ
+ :s/old/new
+ äÌÑ ÐÏÄÓÔÁÎÏ×ËÉ `ÓÔÁÌÏ' ×ÍÅÓÔÏ ×ÓÅÈ `ÂÙÌÏ' × ÓÔÒÏËÅ, ÎÁÂÅÒÉÔÅ
+ :s/old/new/g
+ äÌÑ ÚÁÍÅÎÙ × ÉÎÔÅÒ×ÁÌÅ ÍÅÖÄÕ Ä×ÕÍÑ ÓÔÒÏËÁÍÉ, ÎÁÂÅÒÉÔÅ
+ :#,#s/old/new/g
+ äÌÑ ÚÁÍÅÎÙ ×ÓÅÈ ×ÈÏÖÄÅÎÉÊ `ÂÙÌÏ' ÎÁ `ÓÔÁÌÏ' × ÆÁÊÌÅ, ÎÁÂÅÒÉÔÅ
+ :%s/old/new/g
+ þÔÏÂÙ ÒÅÄÁËÔÏÒ ËÁÖÄÙÊ ÒÁÚ ÚÁÐÒÁÛÉ×ÁÌ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ, ÄÏÂÁ×ØÔÅ 'c'
+ :%s/old/new/gc
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 5.1: ëáë ÷ùðïìîéôø ÷îåûîàà ëïíáîäõ
+
+
+ ** îÁÂÅÒÉÔÅ :! É ÚÁÔÅÍ ×ÎÅÛÎÀÀ ËÏÍÁÎÄÕ, ËÏÔÏÒÕÀ ÓÌÅÄÕÅÔ ×ÙÐÏÌÎÉÔØ. **
+
+ 1. îÁÂÅÒÉÔÅ ÕÖÅ ÚÎÁËÏÍÕÀ ÷ÁÍ ËÏÍÁÎÄÕ : ÄÌÑ ÕÓÔÁÎÏ×ËÉ ËÕÒÓÏÒÁ × ËÏÍÁÎÄÎÕÀ
+ ÓÔÒÏËÕ ÒÅÄÁËÔÏÒÁ. üÔÏ ÐÏÚ×ÏÌÉÔ ÷ÁÍ ××ÅÓÔÉ ËÏÍÁÎÄÕ.
+
+ 2. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ ÓÉÍ×ÏÌ ! (×ÏÓËÌÉÃÁÔÅÌØÎÙÊ ÚÎÁË). ôÅÐÅÒØ ÍÏÖÎÏ ÉÓÐÏÌÎÉÔØ
+ ×ÎÅÛÎÀÀ ËÏÍÁÎÄÕ, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÎÕÀ ÏÂÏÌÏÞËÕ.
+
+ 3. äÌÑ ÐÒÉÍÅÒÁ ÎÁÂÅÒÉÔÅ ls ÐÏÓÌÅ ! É ÎÁÖÍÉÔÅ <ENTER>. üÔÁ ËÏÍÁÎÄÁ ×Ù×ÅÄÅÔ
+ ÓÐÉÓÏË ÆÁÊÌÏ× × ÔÅËÕÝÅÍ ËÁÔÁÌÏÇÅ, ÔÏÞÎÏ ÔÁËÖÅ, ËÁË ÅÓÌÉ ÂÙ ÷Ù ××ÅÌÉ ÜÔÕ
+ ËÏÍÁÎÄÕ × ÐÒÉÇÌÁÛÅÎÉÉ ÏÂÏÌÏÞËÉ. éÌÉ ÐÏÐÒÏÂÕÊÔÅ :!dir , ÅÓÌÉ ÐÒÅÄÙÄÕÝÁÑ
+ ËÏÍÁÎÄÁ ÎÅ ÓÒÁÂÏÔÁÌÁ.
+
+---> úÁÍÅÞÁÎÉÅ: ôÁËÉÍ ÓÐÏÓÏÂÏÍ ÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÌÀÂÕÀ ×ÎÅÛÎÀÀ ËÏÍÁÎÄÕ.
+
+---> úÁÍÅÞÁÎÉÅ: ÷ÓÅ ËÏÍÁÎÄÙ, ÎÁÞÉÎÁÀÝÉÅÓÑ Ó : , ÄÏÌÖÎÙ ÚÁ×ÅÒÛÁÔØÓÑ ÎÁÖÁÔÉÅÍ
+ <ENTER>.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 5.2: ëáë úáðéóáôø æáêì
+
+
+** äÌÑ ÓÏÈÒÁÎÅÎÉÑ ÉÚÍÅÎÅÎÉÊ, ÐÒÏÉÚ×ÅÄÅÎÎÙÈ × ÆÁÊÌÅ, ÎÁÂÅÒÉÔÅ :w éíñ_æáêìá. **
+
+ 1. îÁÂÅÒÉÔÅ :!dir ÉÌÉ :!ls ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÐÉÓËÁ ÆÁÊÌÏ× × ÔÅËÕÝÅÍ ËÁÔÁÌÏÇÅ.
+ ëÁË ÷ÁÍ ÕÖÅ ÉÚ×ÅÓÔÎÏ, ÷Ù ÄÏÌÖÎÙ ÎÁÖÁÔØ <ENTER> ÐÏÓÌÅ ××ÏÄÁ ÜÔÉÈ ËÏÍÁÎÄ.
+
+ 2. ðÒÉÄÕÍÁÊÔÅ ÎÁÚ×ÁÎÉÅ ÄÌÑ ÆÁÊÌÁ, ËÏÔÏÒÏÅ ÅÝÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ, ÎÁÐÒÉÍÅÒ TEST.
+
+ 3. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ :w TEST (ÇÄÅ TEST --- ÜÔÏ ÉÍÑ ÆÁÊÌÁ, ÐÒÉÄÕÍÁÎÎÏÅ ÷ÁÍÉ.)
+
+ 4. üÔÁ ËÏÍÁÎÄÁ ÓÏÈÒÁÎÉÔ ×ÅÓØ ÆÁÊÌ (õÞÅÂÎÉË ÐÏ Vim) ÐÏÄ ÉÍÅÎÅÍ TEST. þÔÏÂÙ
+ ÕÄÏÓÔÏ×ÅÒÉÔØÓÑ × ÜÔÏÍ, ÓÎÏ×Á ÎÁÂÅÒÉÔÅ :!dir É ÐÒÏÓÍÏÔÒÉÔÅ ËÁÔÁÌÏÇ.
+
+---> úÁÍÅÔØÔÅ, ÞÔÏ ÅÓÌÉ ÷Ù ×ÙÊÄÅÔÅ ÉÚ Vim É ÚÁÔÅÍ ÚÁÐÕÓÔÉÔÅ ÅÇÏ ÓÎÏ×Á Ó
+ ÆÁÊÌÏÍ TEST, ÜÔÏÔ ÆÁÊÌ ÂÕÄÅÔ ÔÏÞÎÏÊ ËÏÐÉÅÊ ÕÞÅÂÎÉËÁ × ÔÏÔ ÍÏÍÅÎÔ, ËÏÇÄÁ
+ ÷Ù ÅÇÏ ÓÏÈÒÁÎÉÌÉ.
+
+ 5. ôÅÐÅÒØ ÕÄÁÌÉÔÅ ÜÔÏÔ ÆÁÊÌ, ÎÁÂÒÁ× :!del TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 5.3: ÷ùâïòïþîïå óïèòáîåîéå
+
+
+ ** äÌÑ ÓÏÈÒÁÎÅÎÉÑ ÞÁÓÔÉ ÆÁÊÌÁ, ÎÁÂÅÒÉÔÅ :#,# w éíñ_æáêìá **
+
+ 1. åÝÅ ÒÁÚ ÎÁÂÅÒÉÔÅ :!dir ÉÌÉ :!ls ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÐÉÓËÁ ÆÁÊÌÏ× × ÔÅËÕÝÅÍ
+ ËÁÔÁÌÏÇÅ É ×ÙÂÅÒÉÔÅ ÐÏÄÈÏÄÑÝÅÅ ÉÍÑ, ÎÁÐÒÉÍÅÒ TEST.
+
+ 2. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ Ë ÎÁÞÁÌÕ ÜÔÏÊ ÓÔÒÁÎÉÃÙ É ÎÁÖÍÉÔÅ Ctrl-g ÄÌÑ ÎÁÈÏÖÄÅÎÉÑ
+ ÎÏÍÅÒÁ ÓÔÒÏËÉto. úáðïíîéôå üôïô îïíåò!
+
+ 3. ôÅÐÅÒØ ÐÅÒÅÍÅÓÔÉÔÅÓØ × ËÏÎÅà ÓÔÒÁÎÉÃÙ É ×ÎÏ×Ø ÎÁÂÅÒÉÔÅ Ctrl-g. úáðïíîéôå
+ é üôïô îïíåò ôïöå!
+
+ 4. äÌÑ ÓÏÈÒÁÎÅÎÉÑ ôïìøëï þáóôé ÆÁÊÌÁ ÎÁÂÅÒÉÔÅ :#,# w TEST , ÇÄÅ #,# --- ÜÔÏ
+ ÎÏÍÅÒÁ, ËÏÔÏÒÙÅ ÷Ù ÚÁÐÏÍÎÉÌÉ (ÎÁÞÁÌÏ, ËÏÎÅÃ), Á TEST --- ÉÍÑ ×ÁÛÅÇÏ ÆÁÊÌÁ.
+
+ 5. ëÁË É ÐÒÅÖÄÅ, ÕÂÅÄÉÔÅÓØ × ÎÁÌÉÞÉÉ ÜÔÏÇÏ ÆÁÊÌÁ ËÏÍÁÎÄÏÊ :!dir , ÎÏ îå
+ õäáìñêôå ÅÇÏ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 5.4: þôåîéå é ïâÿåäéîåîéå æáêìï÷
+
+ ** äÌÑ ×ÓÔÁ×ËÉ ÓÏÄÅÒÖÉÍÏÇÏ ÆÁÊÌÁ, ÎÁÂÅÒÉÔÅ :r FILENAME **
+
+ 1. îÁÂÅÒÉÔÅ :!dir ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÕÂÅÄÉÔØÓÑ × ÔÏÍ, ÞÔÏ ÆÁÊÌ TEST ×ÓÅ ÅÝÅ
+ ÓÕÝÅÓÔ×ÕÅÔ.
+
+ 2. õÓÔÁÎÏ×ÉÔÅ ËÕÒÓÏÒ × ×ÅÒÈÎÅÊ ÞÁÓÔÉ ÜÔÏÊ ÓÔÒÁÎÉÃÙ.
+
+úÁÍÅÞÁÎÉÅ: ðÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ ÛÁÇÁ 3 ÷Ù Õ×ÉÄÉÔÅ õÒÏË 5.3. ðÏÓÌÅ ÜÔÏÇÏ
+ ÐÅÒÅÍÅÝÁÊÔÅÓØ ÷îéú, ÓÎÏ×Á Ë ÜÔÏÍÕ ÕÒÏËÕ.
+
+ 3. ôÅÐÅÒØ ÐÒÏÞÉÔÁÊÔÅ ÷ÁÛ ÆÁÊÌ TEST, ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ :r TEST , ÇÄÅ
+ TEST --- ÜÔÏ ÉÍÑ ÆÁÊÌÁ.
+
+úÁÍÅÞÁÎÉÅ: ðÒÏÞÉÔÁÎÎÙÊ ÷ÁÍÉ ÆÁÊÌ ÂÕÄÅÔ ×ÓÔÁ×ÌÅÎ × ÔÏÍ ÍÅÓÔÅ, ÇÄÅ ÎÁÈÏÄÉÔÓÑ
+ ËÕÒÓÏÒ.
+
+ 4. þÔÏÂÙ ÕÂÅÄÉÔØÓÑ × ÔÏÍ, ÞÔÏ ÆÁÊÌ ÐÒÏÞÉÔÁÎ, ÐÅÒÅÍÅÓÔÉÔÅÓØ ÎÅÍÎÏÇÏ ÎÁÚÁÄ ÐÏ
+ ÔÅËÓÔÕ É ÚÁÍÅÔØÔÅ, ÞÔÏ ÔÅÐÅÒØ ÓÕÝÅÓÔ×ÕÀÔ Ä×Å ËÏÐÉÉ õÒÏËÁ 5.3, ÉÓÈÏÄÎÁÑ
+ É ÐÏÌÕÞÅÎÎÁÑ ÉÚ ÆÁÊÌÁ.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 5
+
+
+ 1. :!ËÏÍÁÎÄÁ ÉÓÐÏÌÎÑÅÔ ×ÎÅÛÎÀÀ ËÏÍÁÎÄÕ.
+
+ îÅËÏÔÏÒÙÅ ÐÏÌÅÚÎÙÅ ÐÒÉÍÅÒÙ:
+ :!dir --- ×Ù×ÏÄÉÔ ÓÐÉÓÏË ÆÁÊÌÏ× × ËÁÔÁÌÏÇÅ.
+ :!del FILENAME --- ÕÄÁÌÑÅÔ ÆÁÊÌ FILENAME.
+
+ 2. :w FILENAME ÚÁÐÉÓÙ×ÁÅÔ ÔÅËÕÝÉÊ ÒÅÄÁËÔÉÒÕÅÍÙÊ ÆÁÊÌ ÎÁ ÄÉÓË
+ ÐÏÄ ÉÍÅÎÅÍ FILENAME.
+
+ 3. :#,#w FILENAME ÓÏÈÒÁÎÑÅÔ ÓÔÒÏËÉ ÏÔ # ÄÏ # × ÆÁÊÌ FILENAME.
+
+ 4. :r FILENAME ÓÞÉÔÙ×ÁÅÔ Ó ÄÉÓËÁ ÆÁÊÌ FILENAME É ÐÏÍÅÝÁÅÔ ÅÇÏ × ÔÅËÕÝÉÊ
+ ÆÁÊÌ ÓÌÅÄÏÍ ÚÁ ÐÏÚÉÃÉÅÊ ËÕÒÓÏÒÁ.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 6.1: ëïíáîäá óïúäáîéñ
+
+
+ ** îÁÂÅÒÉÔÅ o ÞÔÏÂÙ ÓÏÚÄÁÔØ ÐÕÓÔÕÀ ÓÔÒÏËÕ ÐÏÄ ËÕÒÓÏÒÏÍ É ÐÅÒÅÊÔÉ × ÒÅÖÉÍ
+ ×ÓÔÁ×ËÉ (Insert mode) **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. îÁÂÅÒÉÔÅ o (× ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ) ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÓÏÚÄÁÔØ ÐÕÓÔÕÀ ÓÔÒÏËÕ
+ îéöå ËÕÒÓÏÒÁ É ÐÅÒÅÊÔÉ × ÒÅÖÉÍ ×ÓÔÁ×ËÉ (Insert mode).
+
+ 3. ôÅÐÅÒØ ÓËÏÐÉÒÕÊÔÅ ÐÏÍÅÞÅÎÎÕÀ ---> ÓÔÒÏËÕ É ÎÁÖÍÉÔÅ <ESC> ÄÌÑ ×ÙÈÏÄÁ ÉÚ
+ ÒÅÖÉÍÁ ×ÓÔÁ×ËÉ.
+
+---> ðÏÓÌÅ ÎÁÖÁÔÉÑ o ËÕÒÓÏÒ ÐÅÒÅÊÄÅÔ ÎÁ ÎÏ×ÕÀ ÐÕÓÔÕÀ ÓÔÒÏËÕ × ÒÅÖÉÍÅ ×ÓÔÁ×ËÉ.
+
+ 4. äÌÑ ÓÏÚÄÁÎÉÑ ÓÔÒÏËÉ ÷ùûå ËÕÒÓÏÒÁ, ÐÒÏÓÔÏ ÎÁÂÅÒÉÔÅ ÚÁÇÌÁ×ÎÕÀ O, ×ÍÅÓÔÏ
+ ÓÔÒÏÞÎÏÊ o. ðÏÐÒÏÂÕÊÔÅ ÐÒÏÄÅÌÁÔØ ÜÔÏ Ó ÎÉÖÅÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÏÊ.
+óÏÚÄÁÊÔÅ ÎÏ×ÕÀ ÓÔÒÏËÕ ÎÁÄ ÜÔÏÊ, ÎÁÖÁ× Shift-O, ÐÏÍÅÓÔÉ× ËÕÒÓÏÒ ÎÁ ÜÔÕ ÓÔÒÏËÕ.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 6.2: ëïíáîäá äïâá÷ìåîéñ
+
+ ** îÁÂÅÒÉÔÅ a , ÞÔÏÂÙ ×ÓÔÁ×ÉÔØ ÔÅËÓÔ ðïóìå ËÕÒÓÏÒÁ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, × ËÏÎÅà ÐÅÒ×ÏÊ ÓÔÒÏËÉ, ÐÏÍÅÞÅÎÎÏÊ ---> ,
+ ÎÁÂÒÁ× $ × ÏÂÙÞÎÏÍ ÒÅÖÉÍÅ (Normal mode).
+
+ 2. îÁÂÅÒÉÔÅ a (× ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ) ÄÌÑ ÄÏÂÁ×ÌÅÎÉÑ ÔÅËÓÔÁ ðïóìå ÓÉÍ×ÏÌÁ,
+ ÎÁÈÏÄÑÝÅÇÏÓÑ ÐÏÄ ËÕÒÓÏÒÏÍ. (úÁÇÌÁ×ÎÁÑ A ÐÏÚ×ÏÌÑÅÔ ÄÏÂÁ×ÉÔØ × ËÏÎÅÃ
+ ÓÔÒÏËÉ.)
+
+úÁÍÅÞÁÎÉÅ: üÔÏ ÐÏÚ×ÏÌÑÅÔ ÉÚÂÅÖÁÔØ ÎÁÖÁÔÉÑ i , ÐÏÓÌÅÄÎÅÇÏ ÓÉÍ×ÏÌÁ, ÔÅËÓÔÁ ÄÌÑ
+ ×ÓÔÁ×ËÉ, <ESC>, ËÕÒÓÏÒ-×ÐÒÁ×Ï, É, ÎÁËÏÎÅÃ, x , ÐÒÏÓÔÏ ÄÌÑ ÔÏÇÏ,
+ ÞÔÏÂÙ ÄÏÂÁ×ÉÔØ ÔÅÓÔ × ËÏÎÅà ÓÔÒÏËÉ!
+
+ 3. ôÅÐÅÒØ ÚÁ×ÅÒÛÉÔÅ ÐÅÒ×ÕÀ ÓÔÒÏËÕ. úÁÍÅÔØÔÅ ÔÁËÖÅ, ÞÔÏ ÄÏÂÁ×ÌÅÎÉÅ ÜÔÏ ×
+ ÔÏÞÎÏÓÔÉ ÔÏ ÖÅ ÓÁÍÏÅ, ÞÔÏ É ÒÅÖÉÍ ×ÓÔÁ×ËÉ, ÚÁ ÉÓËÌÀÞÅÎÉÅÍ ÐÏÚÉÃÉÉ, ×
+ ËÏÔÏÒÕÀ ÂÕÄÅÔ ×ÓÔÁ×ÌÅÎ ÔÅËÓÔ.
+
+---> üÔÁ ÓÔÒÏÞËÁ ÐÏÚ×ÏÌÉÔ ÷ÁÍ ÐÏÐÒÁËÔÉËÏ×ÁÔØÓÑ
+---> üÔÁ ÓÔÒÏÞËÁ ÐÏÚ×ÏÌÉÔ ÷ÁÍ ÐÏÐÒÁËÔÉËÏ×ÁÔØÓÑ × ÄÏÂÁ×ÌÅÎÉÉ ÔÅËÓÔÁ × ËÏÎÅÃ
+ ÓÔÒÏËÉ.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 6.3: åýå ïäéî óðïóïâ úáíåîù
+
+
+ ** îÁÂÅÒÉÔÅ ÚÁÇÌÁ×ÎÕÀ R ÄÌÑ ÚÁÍÅÎÙ ÂÏÌÅÅ, ÞÅÍ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ. **
+
+ 1. ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ×ÎÉÚ, Ë ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ --->.
+
+ 2. òÁÓÐÏÌÏÖÉÔÅ ËÕÒÓÏÒ × ÎÁÞÁÌÅ ÐÅÒ×ÏÇÏ ÓÌÏ×Á, ÏÔÌÉÞÁÀÝÅÇÏÓÑ ÏÔ
+ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ × ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÅ, ÐÏÍÅÞÅÎÎÏÊ ---> (ÓÌÏ×Ï 'ÐÏÓÌÅÄÎÅÊ').
+
+ 3. ôÅÐÅÒØ ÎÁÂÅÒÉÔÅ R É ÚÁÍÅÎÉÔÅ ÏÓÔÁÔÏË ÔÅËÓÔÁ × ÐÅÒ×ÏÊ ÓÔÒÏËÅ, ÎÁÂÒÁ×
+ ÐÏ×ÅÒÈ ÓÔÁÒÏÇÏ ÔÅËÓÔÁ ÔÁË, ÞÔÏÂÙ ÏÂÅ ÓÔÒÏËÉ ÓÔÁÌÉ ÏÄÉÎÁËÏ×ÙÍÉ.
+
+---> ðÅÒ×ÕÀ ÓÔÒÏËÕ ÍÏÖÎÏ ÓÒÁ×ÎÑÔØ Ó ÐÏÓÌÅÄÎÅÊ, ÉÓÐÏÌØÚÕÑ ËÌÁ×ÉÛÉ.
+---> ðÅÒ×ÕÀ ÓÔÒÏËÕ ÍÏÖÎÏ ÓÒÁ×ÎÑÔØ Ó ×ÔÏÒÏÊ, ÉÓÐÏÌØÚÕÑ R É ÎÁÂÒÁ× ÎÏ×ÙÊ ÔÅËÓÔ.
+
+ 4. ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÐÒÉ ÎÁÖÁÔÉÉ <ESC> ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ, ÌÀÂÏÊ
+ ÎÅ ÉÚÍÅÎÅÎÎÙÊ ÔÅËÓÔ ÓÏÈÒÁÎÉÔÓÑ.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 6.4: õóôáîï÷ëá ðáòáíåôòï÷
+
+
+** õÓÔÁÎÏ×ÉÍ ÐÁÒÁÍÅÔÒÙ ÔÁË, ÞÔÏÂÙ ÉÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ ÐÒÉ ÐÏÉÓËÅ ÉÌÉ ÚÁÍÅÎÅ **
+
+
+ 1. ðÏÉÝÉÔÅ ÓÌÏ×Ï 'ÉÇÎÏÒÉÒÏ×ÁÔØ', ÎÁÂÒÁ×:
+ /ÉÇÎÏÒÉÒÏ×ÁÔØ
+ ðÏ×ÔÏÒÉÔÅ ÐÏÉÓË ÎÅÓËÏÌØËÏ ÒÁÚ, ÎÁÖÉÍÁÑ ËÌÁ×ÉÛÕ n
+
+ 2. ÷ËÌÀÞÉÔÅ ÐÁÒÁÍÅÔÒ 'ic' (éÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ), ÎÁÂÒÁ×:
+ :set ic
+
+ 3. ôÅÐÅÒØ ÓÎÏ×Á ÓÄÅÌÁÊÔÅ ÐÏÉÓË ÓÌÏ×Á 'ÉÇÎÏÒÉÒÏ×ÁÔØ', ÎÁÖÁ×: n
+ ðÏ×ÔÏÒÉÔÅ ÐÏÉÓË ÎÅÓËÏÌØËÏ ÒÁÚ, ÎÁÖÉÍÁÑ ËÌÁ×ÉÛÕ n
+
+ 4. ÷ËÌÀÞÉÔÅ ÐÁÒÁÍÅÔÒÙ 'hlsearch' É 'incsearch':
+ :set hls is
+
+ 5. ôÅÐÅÒØ ÏÐÑÔØ ××ÅÄÉÔÅ ËÏÍÁÎÄÕ ÐÏÉÓËÁ É ÐÏÓÍÏÔÒÉÔÅ, ÞÔÏ ÐÏÌÕÞÉÔÓÑ:
+ /ÉÇÎÏÒÉÒÏ×ÁÔØ
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ òåúàíå õòïëá 6
+
+
+ 1. îÁÖÁÔÉÅ o ÓÏÚÄÁÅÔ ÓÔÒÏËÕ îéöå ËÕÒÓÏÒÁ É ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÅÅ × ÒÅÖÉÍÅ
+ ×ÓÔÁ×ËÉ.
+ îÁÖÁÔÉÅ ÚÁÇÌÁ×ÎÏÊ O ÓÏÚÄÁÅÔ ÓÔÒÏËÕ ÷ùûå ÓÔÒÏËÉ, × ËÏÔÏÒÏÊ ÎÁÈÏÄÉÔÓÑ
+ ËÕÒÓÏÒ.
+
+ 2. îÁÂÅÒÉÔÅ a ÄÌÑ ×ÓÔÁ×ËÉ ÔÅËÓÔÁ ðïóìå ÓÉÍ×ÏÌÁ, ÎÁ ËÏÔÏÒÏÍ ÎÁÈÏÄÉÔÓÑ ËÕÒÓÏÒ.
+ îÁÖÁÔÉÅ ÚÁÇÌÁ×ÎÏÊ A Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÅÒÅÍÅÝÁÅÔ ÷ÁÓ ÄÌÑ ÄÏÂÁ×ÌÅÎÉÑ ÔÅËÓÔÁ
+ × ËÏÎÅÃ ÓÔÒÏËÉ.
+
+ 3. îÁÖÁÔÉÅ ÚÁÇÌÁ×ÎÏÊ R ÐÅÒÅ×ÏÄÉÔ ÷ÁÓ × ÒÅÖÉÍ ÚÁÍÅÎÙ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÎÅ
+ ÂÕÄÅÔ ÎÁÖÁÔÁ ËÌÁ×ÉÛÁ <ESC> ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ.
+
+ 4. îÁÂÒÁ× ":set xxx" ×Ù ÓÍÏÖÅÔÅ ×ËÌÀÞÉÔØ ÐÁÒÁÍÅÔÒ "xxx"
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 7: ëïíáîäù ðïìõþåîéñ ÷óôòïåîîïê óðòá÷ëé
+
+ ** éÓÐÏÌØÚÕÊÔÅ ×ÓÔÒÏÅÎÎÕÀ ÓÐÒÁ×ÏÞÎÕÀ ÓÉÓÔÅÍÕ **
+
+ Vim ÏÂÌÁÄÁÅÔ ÍÏÝÎÏÊ ×ÓÔÒÏÅÎÎÏÊ ÓÐÒÁ×ÏÞÎÏÊ ÓÉÓÔÅÍÏÊ. äÌÑ ÎÁÞÁÌÁ ÐÏÐÒÏÂÕÊÔÅ
+ ÏÄÉÎ ÉÚ ÔÒÅÈ ×ÁÒÉÁÎÔÏ×:
+ - ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ <HELP> (ÅÓÌÉ ÔÁËÏ×ÁÑ ÉÍÅÅÔÓÑ ÎÁ ËÌÁ×ÉÁÔÕÒÅ)
+ - ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ <F1> (ÅÓÌÉ ÔÁËÏ×ÁÑ ÉÍÅÅÔÓÑ ÎÁ ËÌÁ×ÉÁÔÕÒÅ)
+ - ÎÁÂÅÒÉÔÅ :help <ENTER>
+
+ îÁÂÅÒÉÔÅ :q <ENTER> ÞÔÏÂÙ ÚÁËÒÙÔØ ÏËÎÏ ÓÐÒÁ×ËÉ.
+
+ ÷Ù ÍÏÖÅÔÅ ÎÁÊÔÉ ÓÐÒÁ×ËÕ ÄÌÑ ÌÀÂÏÇÏ ÐÏÎÑÔÉÑ ÉÌÉ ËÏÍÁÎÄÙ, ÐÒÏÓÔÏ ÚÁÄÁ×
+ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÁÒÇÕÍÅÎÔ ËÏÍÁÎÄÅ ":help". ðÏÐÒÏÂÕÊÔÅ ÓÌÅÄÕÀÝÅÅ (ÎÅ ÚÁÂÕÄØÔÅ
+ ÎÁÖÁÔØ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ õÒÏË 8: óïúäáîéå óôáòôï÷ïçï óëòéðôá
+
+ ** ÷ËÌÀÞÉÍ ×ÏÚÍÏÖÎÏÓÔÉ Vim **
+
+ Vim ÉÍÅÅÔ ÎÁÍÎÏÇÏ ÂÏÌØÛÅ ×ÏÚÍÏÖÎÏÓÔÅÊ, ÞÅÍ Vi, ÏÄÎÁËÏ ÂÏÌØÛÉÎÓÔ×ÁÏ ÉÚ ÎÉÈ
+ ×ÙËÌÀÞÅÎÙ ÐÏ ÕÍÏÌÞÁÎÉÀ. äÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÎÁÞÁÔØ ÉÓÐÏÌØÚÏ×ÁÔØ ÎÏ×ÙÅ
+ ×ÏÚÍÏÖÎÏÓÔÉ ÷ÁÍ ÓÌÅÄÕÅÔ ÓÏÚÄÁÔØ ÆÁÊÌ "vimrc".
+
+ 1. ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÆÁÊÌ "vimrc", ÅÇÏ ÒÁÓÐÏÌÏÖÅÎÉÅ ÚÁ×ÉÓÉÔ ÏÔ ÉÓÐÏÌØÚÕÅÍÏÊ
+ ÓÉÓÔÅÍÙ:
+
+ :edit ~/.vimrc ÄÌÑ Unix
+ :edit $VIM/_vimrc ÄÌÑ MS-Windows
+
+ 2. ôÅÐÅÒØ ÐÒÏÞÉÔÁÊÔÅ ÐÒÉÍÅÒ ÆÁÊÌÁ "vimrc":
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. úÁÐÉÛÉÔÅ ÆÁÊÌ:
+
+ :write
+
+ ôÅÐÅÒØ ÐÒÉ ÓÌÅÄÕÀÝÅÍ ÚÁÐÕÓËÅ Vim ÂÕÄÅÔ ×ËÌÀÞÅÎÁ ÐÏÄÓ×ÅÔËÁ ÓÉÎÔÁËÓÉÓÁ. ÷ÓÅ
+ ÎÁÓÔÒÏÊËÉ, ÐÒÅÄÐÏÞÉÔÁÅÍÙÅ ÷ÁÍÉ, ÍÏÇÕÔ ÂÙÔØ ÄÏÂÁ×ÌÅÎÙ × ÆÁÊÌ "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ îÁ ÜÔÏÍ ÚÁ×ÅÒÛÁÅÔÓÑ õÞÅÂÎÉË Vim. ïÎ ÂÙÌ ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÄÁÔØ
+ ÏÂÝÅÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ Ï ÒÅÄÁËÔÏÒÅ Vim, ÄÏÓÔÁÔÏÞÎÏÅ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ Ó ÌÅÇËÏÓÔØÀ
+ ÉÓÐÏÌØÚÏ×ÁÔØ ÅÇÏ. õÞÅÂÎÉË ÄÁÌÅË ÏÔ ÐÏÌÎÏÔÙ, ÐÏÓËÏÌØËÕ Vim ÉÍÅÅÔ ÏÞÅÎØ ÍÎÏÇÏ
+ ËÏÍÁÎÄ. ðÒÏÞÉÔÁÊÔÅ ÔÅÐÅÒØ ÒÕËÏ×ÏÄÓÔ×Ï ÐÏÌØÚÏ×ÁÔÅÌÑ: ":help user-manual".
+
+ äÌÑ ÄÁÌØÎÅÊÛÅÇÏ ÞÔÅÎÉÑ ÒÅËÏÍÅÎÄÕÅÔÓÑ ËÎÉÇÁ:
+ Vim - Vi Improved - á×ÔÏÒ: Steve Oualline
+ éÚÄÁÔÅÌØ: New Riders
+ üÔÁ ËÎÉÇÁ ÐÏÌÎÏÓÔØÀ ÐÏÓ×ÑÝÅÎÁ Vim. ïÓÏÂÅÎÎÏ ÐÏÌÅÚÎÁ ÎÏ×ÉÞËÁÍ. óÏÄÅÒÖÉÔ
+ ÍÎÏÖÅÓÔ×Ï ÐÒÉÍÅÒÏ× É ÉÌÌÀÓÔÒÁÃÉÊ.
+ ÷ÚÇÌÑÎÉÔÅ ÎÁ See http://iccf-holland.org/click5.html
+
+ óÌÅÄÕÀÝÁÑ ËÎÉÇÁ ÂÏÌÅÅ ÐÏÞÔÅÎÎÏÇÏ ×ÏÚÒÁÓÔÁ É ÐÏÓ×ÑÝÅÎÁ ÂÏÌØÛÅ Vi, ÞÅÍ Vim,
+ ÏÄÎÁËÏ ÔÁËÖÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ:
+ Learning the Vi Editor - á×ÔÏÒ: Linda Lamb
+ éÚÄÁÔÅÌØ: O'Reilly & Associates Inc.
+ üÔÏ ÈÏÒÏÛÁÑ ËÎÉÇÁ ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÕÚÎÁÔØ ×ÓÅ, ÞÔÏ ÔÏÌØËÏ ÍÏÖÎÏ ÐÒÏÄÅÌÙ×ÁÔØ Ó
+ Vi. ûÅÓÔÏÅ ÉÚÄÁÎÉÅ ÔÁËÖÅ ×ËÌÀÞÁÅÔ ÉÎÆÏÒÍÁÃÉÀ Ï Vim.
+
+ üÔÏÔ ÕÞÅÂÎÉË ÂÙÌ ÎÁÐÉÓÁÎ Michael C. Pierce É Robert K. Ware, Colorado School
+ of Mines Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÉÄÅÊ, ÐÒÅÄÌÏÖÅÎÎÙÈ Charles Smith, Colorado State
+ University. E-mail: bware@mines.colorado.edu.
+
+ äÏÒÁÂÏÔÁÎÏ ÄÌÑ Vim Bram Moolenaar.
+
+ ðÅÒÅ×ÏÄ: áÎÄÒÅÊ ëÉÓÅÌÅ× <a_kissel@eudoramail.com>, 2002.
+ Translator: Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.ru.cp1251 b/runtime/tutor/tutor.ru.cp1251
new file mode 100644
index 000000000..024ca526b
--- /dev/null
+++ b/runtime/tutor/tutor.ru.cp1251
@@ -0,0 +1,834 @@
+===============================================================================
+= Ä î á ð î ï î æ à ë î â à ò ü â ó ÷ å á í è ê VIM - Âåðñèÿ 1.5 =
+===============================================================================
+ Vim --- ýòî î÷åíü ìîùíûé ðåäàêòîð, èìåþùèé ìíîæåñòâî êîìàíä, ñëèøêîì
+ ìíîãî äëÿ òîãî, ÷òîáû èõ âñå ìîæíî áûëî îïèñàòü â òàêîì ó÷åáíèêå, êàê
+ ýòîò. Ýòîò ó÷åáíèê ïðèçâàí îáúÿñíèòü äîñòàòî÷íîå ÷èñëî êîìàíä äëÿ òîãî,
+ ÷òîáû Âû ìîãëè ñ ëåãêîñòüþ èñïîëüçîâàòü Vim â êà÷åñòâå ðåäàêòîðà îáùåãî
+ íàçíà÷åíèÿ.
+
+ Âàì ïîòðåáóåòñÿ ïðèáëèçèòåëüíî 25-30 ìèíóò íà îñâîåíèå äàííîãî ó÷åáíèêà â
+ çàâèñèìîñòè îò òîãî, ñêîëüêî âðåìåíè Âû ïîòðàòèòå íà ýêñïåðèìåíòû.
+
+ Êîìàíäû â óðîêàõ áóäóò ìîäèôèöèðîâàòü òåêñò. Ñîçäàéòå êîïèþ ýòîãî ôàéëà,
+ ÷òîáû ïîïðàêòèêîâàòüñÿ íà íåé (åñëè Âû çàïóñòèëè "vimtutor", òî ýòî óæå
+ êîïèÿ).
+
+ Âàæíî ïîìíèòü, ÷òî ýòîò ó÷åáíèê ïðåäíàçíà÷åí äëÿ îáó÷åíèÿ â ïðîöåññå
+ èñïîëüçîâàíèÿ. Ýòî îçíà÷àåò, ÷òî Âû äîëæíû çàïóñêàòü êîìàíäû äëÿ òîãî,
+ ÷òîáû êàê ñëåäóåò èõ èçó÷èòü. Åñëè Âû ïðîñòî ïðî÷èòàåòå òåêñò, òî
+ çàáóäåòå êîìàíäû!
+
+ Òåïåðü óáåäèòåñü â òîì, ÷òî êëàâèøà CapsLock íå âêëþ÷åíà è íàæìèòå
+ êëàâèøó j íåñêîëüêî ðàç, òàê, ÷òîáû Óðîê 1.1 ïîëíîñòüþ ïîìåñòèëñÿ íà
+ ýêðàíå.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 1.1: ÏÅÐÅÌÅÙÅÍÈÅ ÊÓÐÑÎÐÀ
+
+** Äëÿ ïåðåìåùåíèÿ êóðñîðà íàæìèòå êëàâèøè h,j,k,l òàê, êàê ïîêàçàíî íèæå. **
+ ^
+ k Ñîâåòû: Êëàâèøà h íàõîäèòñÿ ñëåâà è ïåðåìåùàåò âëåâî.
+ < h l > Êëàâèøà l íàõîäèòñÿ ñïðàâà è ïåðåìåùàåò âïðàâî.
+ j Êëàâèøà j ïîõîæà íà ñòðåëêó `âíèç'.
+ v
+ 1. Ïîäâèãàéòå êóðñîð ïî ýêðàíó, ïîêà íå ïî÷óâñòâóåòå ñåáÿ óâåðåííî.
+
+ 2. Íàäàâèòå êëàâèøó `âíèç' (j) ïîêà îíà íå íà÷íåò ïîâòîðÿòüñÿ.
+---> Òåïåðü Âû çíàåòå, êàê ïåðåéòè ê ñëåäóþùåìó óðîêó.
+
+ 3. Èñïîëüçóÿ êëàâèøó `âíèç' ïåðåéäèòå ê Óðîêó 1.2.
+
+Çàìå÷àíèå: Åñëè âû ïîêà íå óâåðåíû â òîì, ÷òî íàáèðàåòå, íàæìèòå <ESC> äëÿ
+ ïåðåõîäà â îáû÷íûé ðåæèì (Normal mode). Ïîñëå ýòîãî ïåðåíàáåðèòå
+ òðåáóåìóþ êîìàíäó.
+
+Çàìå÷àíèå: Îáû÷íûå êëàâèøè óïðàâëåíèÿ êóðñîðîì (ñòðåëêè) òàêæå äîëæíû
+ ðàáîòàòü. Îäíàêî, êëàâèøè hjkl ïîçâîëÿò Âàì ïåðåìåùàòüñÿ
+ çíà÷èòåëüíî áûñòðåå, êàê òîëüêî Âû íàó÷èòåñü èìè ïîëüçîâàòüñÿ.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 1.2: ÇÀÏÓÑÊ È ÇÀÂÅÐØÅÍÈÅ ÐÀÁÎÒÛ Ñ VIM
+
+!! ÂÍÈÌÀÍÈÅ! Ïðåæäå, ÷åì âûïîëíÿòü ëþáîé èç îïèñàííûõ íèæå øàãîâ, ïðî÷òèòå
+ óðîê öåëèêîì !!
+
+ 1. Íàæìèòå êëàâèøó <ESC> (äëÿ òîãî, ÷òîáû óäîñòîâåðèòüñÿ, ÷òî Âû â îáû÷íîì
+ ðåæèìå (Normal mode)).
+
+ 2. Íàáåðèòå: :q! <ENTER>.
+
+---> Ýòî ïîçâîëèò Âàì âûéòè èç ðåäàêòîðà ÁÅÇ ÑÎÕÐÀÍÅÍÈß ëþáûõ ñäåëàííûõ
+ èçìåíåíèé. Åñëè Âû õîòèòå ñîõðàíèòü èçìåíåíèÿ è âûéòè:
+ :wq <ENTER>
+
+ 3. Êîãäà Âû óâèäèòå ïðèãëàøåíèå êîìàíäíîé îáîëî÷êè, íàáåðèòå êîìàíäó,
+ êîòîðàÿ ïðèâåëà Âàñ â ýòîò ó÷åáíèê. Ýòî ìîæåò áûòü
+ vimtutor ru <ENTER>
+ Îáû÷íî ìîæíî èñïîëüçîâàòü: vim tutor.ru <ENTER>
+
+---> 'vim' ïîçâîëÿåò çàïóñòèòü ðåäàêòîð vim, 'tutor.ru' --- ýòî ôàéë, êîòîðûé
+ Âû áóäåòå ðåäàêòèðîâàòü.
+
+ 4. Åñëè Âû óâåðåíû â òîì, ÷òî çàïîìíèëè ýòè øàãè, âûïîëíèòå øàãè îò 1 äî 3
+ ÷òîáû âûéòè ñíîâà çàïóñòèòü ðåäàêòîð. Çàòåì ïåðåìåñòèòå êóðñîð âíèç ê
+ Óðîêó 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 1.3: ÐÅÄÀÊÒÈÐÎÂÀÍÈÅ ÒÅÊÑÒÀ - ÓÄÀËÅÍÈÅ
+
+
+** Íàõîäÿñü â îáû÷íîì ðåæèìå íàæìèòå x, ÷òîáû óäàëèòü ñèìâîë ïîä êóðñîðîì. **
+
+ 1. Ïåðåìåñòèòå êóðñîð ê ñòðîêå âíèçó, ïîìå÷åííîé --->.
+
+ 2. Äëÿ èñïðàâëåíèÿ îøèáîê, ïåðåìåñòèòå êóðñîð, ïîêà îí íå îêàæåòñÿ íàä
+ óäàëÿåìûì ñèìâîëîì.
+
+ 3. Íàæìèòå êëàâèøó x äëÿ óäàëåíèÿ òðåáóåìîãî ñèìâîëà.
+
+ 4. Ïîâòîðèòå øàãè 2--4 ïîêà ñòðîêà íå áóäåò èñïðàâëåíà.
+
+---> Îò òòòîïîòà êîïûòò ïïïûëü ïïî ïïïîëþ ëåòòèòò.
+
+ 5. Òåïåðü, êîãäà ñòðîêà îòêîððåêòèðîâàíà, ïåðåõîäèòå ê óðîêó 1.4.
+
+ÇÀÌÅ×ÀÍÈÅ:  õîäå îñâîåíèÿ ýòîãî ó÷åáíèêà íå ïûòàéòåñü çàïîìèíàòü, ó÷èòå
+ â ïðîöåññå èñïîëüçîâàíèÿ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 1.4: ÐÅÄÀÊÒÈÐÎÂÀÍÈÅ ÒÅÊÑÒÀ - ÂÑÒÀÂÊÀ
+
+
+ ** Íàõîäÿñü â îáû÷íîì ðåæèìå (Normal mode), íàæìèòå i äëÿ âñòàâêè òåêñòà. **
+
+ 1. Ïåðåìåñòèòå êóðñîð ê ïåðâîé ñòðîêå âíèçó, ïîìå÷åííîé --->.
+
+ 2. Äëÿ òîãî, ÷òîáû ñäåëàòü ïåðâóþ ñòðîêó èäåíòè÷íîé âòîðîé, ïîìåñòèòå
+ êóðñîð íà ñèìâîë ÏÅÐÅÄ êîòîðûì ñëåäóåò âñòàâèòü òåêñò.
+
+ 3. Íàæìèòå i è íàáåðèòå òðåáóåìûå äîáàâëåíèÿ.
+
+ 4. Ïîñëå èñïðàâëåíèÿ âñåõ îøèáîê íàæìèòå <ESC> äëÿ âîçâðàòà â îáû÷íûé ðåæèì.
+ Ïîâòîðèòå øàãè 2--4, ïîêà ôðàçà íå áóäåò èñïðàâëåíà ïîëíîñòüþ.
+
+---> ×àñòü òåêñòà â ñòðîêå áåñëåäíî .
+---> ×àñòü òåêñòà â ýòîé ñòðîêå áåññëåäíî ïðîïàëà.
+
+ 5. Êîãäà îñâîèòå âñòàâêó òåêñòà, ïåðåõîäèòå äàëüøå ê Ðåçþìå.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 1
+
+ 1. Êóðñîð ïåðåìåùàåòñÿ ëèáî êëàâèøàìè ñî ñòðåëêàìè, ëèáî êëàâèøàìè hjkl.
+ h (âëåâî) j (âíèç) k (ââåðõ) l (âïðàâî)
+
+ 2. Äëÿ çàïóñêà Vim (èç ïðèãëàøåíèÿ % êîìàíäíîé îáîëî÷êè) íàáåðèòå:
+ vim ÈÌß_ÔÀÉËÀ <ENTER>
+
+ 3. Äëÿ çàâåðøåíèÿ ðàáîòû ñ Vim íàáåðèòå:
+ <ESC> :q! <ENTER> ÷òîáû îòêàçàòüñÿ îò ñîõðàíåíèÿ èçìåíåíèé.
+ Èëè íàáåðèòå:
+ <ESC> :wq <ENTER> ÷òîáû ñîõðàíèòü èçìåíåíèÿ.
+
+ 4. Äëÿ óäàëåíèÿ ñèìâîëà ïîä êóðñîðîì â îáû÷íîì ðåæèìå, íàáåðèòå: x
+
+ 5. ×òîáû âñòàâèòü òåêñò ïåðåä êóðñîðîì â îáû÷íîì ðåæèìå, íàáåðèòå:
+ i ââîäèòå òåêñò <ESC>
+
+ÇÀÌÅ×ÀÍÈÅ: Íàæàòèå <ESC> ïåðåìåñòèò Âàñ â îáû÷íûé ðåæèì (Normal mode) ëèáî
+ ïðåðâåò íåæåëàòåëüíóþ è ÷àñòè÷íî çàâåðøåííóþ êîìàíäó.
+
+Òåïåðü ïåðåõîäèì ê Óðîêó 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 2.1: ÊÎÌÀÍÄÛ ÓÄÀËÅÍÈß
+
+
+ ** Íàáåðèòå dw äëÿ óäàëåíèÿ ó÷àñòêà òåêñòà äî êîíöà ñëîâà. **
+
+ 1. Íàæìèòå <ESC>, ÷òîáû ïåðåéòè â îáû÷íûé ðåæèì.
+
+ 2. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 3. Ïåðåìåñòèòå êóðñîð â íà÷àëî ñëîâà, êîòîðîå ñëåäóåò óäàëèòü.
+
+ 4. Íàáåðèòå dw , ÷òîáû óäàëèòü ýòî ñëîâî.
+
+ÇÀÌÅ×ÀÍÈÅ: Âî âðåìÿ íàáîðà áóêâû dw ïîÿâÿòñÿ â ïîñëåäíåé ñòðîêå ýêðàíà. Åñëè
+ Âû ÷òî-òî íàáåðåòå íåïðàâèëüíî, íàæìèòå <ESC> è íà÷íèòå ñíà÷àëà.
+
+---> Íåñêîëüêî ñëîâ ðàôèíàä â ýòîì ïðåäëîæåíèè àâòîêðàí èçëèøíè.
+
+ 5. Ïîâòîðèòå øàãè 3 è 4, ïîêà íå èñïðàâèòå âñå îøèáêè è ïåðåõîäèòå ê
+ Óðîêó 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 2.2: ÄÎÏÎËÍÈÒÅËÜÍÛÅ ÊÎÌÀÍÄÛ ÓÄÀËÅÍÈß
+
+
+ ** Íàáåðèòå d$ äëÿ óäàëåíèÿ òåêñòà äî êîíöà ñòðîêè. **
+
+ 1. Íàæìèòå <ESC>, ÷òîáû ïåðåéòè â îáû÷íûé ðåæèì.
+
+ 2. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 3. Ïåðåìåñòèòå êóðñîð ê êîíöó ïðàâèëüíîé ñòðîêè (ÏÎÑËÅ ïåðâîé . ).
+
+ 4. ×òîáû óäàëèòü îñòàòîê ñòðîêè, íàáåðèòå d$ .
+
+---> Êòî-òî íàáðàë îêîí÷àíèå ýòîé ñòðîêè äâàæäû. îêîí÷àíèå ýòîé ñòðîêè äâàæäû.
+
+
+ 5.×òîáû ëó÷øå ðàçîáðàòüñÿ â ýòîì, ïåðåõîäèòå ê Óðîêó 2.3.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 2.3: ÊÎÌÀÍÄÛ È ÎÁÚÅÊÒÛ
+
+
+ Ôîðìàò êîìàíäû `óäàëåíèå' d òàêîâ:
+
+ [÷èñëî] d îáúåêò ÈËÈ d [÷èñëî] îáúåêò
+ Çäåñü:
+ ÷èñëî - ñêîëüêî ðàç èñïîëíèòü êîìàíäó (íåîáÿçàòåëüíî, ïî óìîë÷àíèþ=1).
+ d - êîìàíäà óäàëåíèÿ.
+ îáúåêò - ñ ÷åì êîìàíäà äîëæíà áûòü âûïîëíåíà (ïåðå÷èñëåíî íèæå).
+
+ Êðàòêèé ñïèñîê îáúåêòîâ:
+ w - îò êóðñîðà äî êîíöà ñëîâà, âêëþ÷àÿ çàâåðøàþùèé ïðîáåë.
+ e - îò êóðñîðà äî êîíöà ñëîâà, ÍÅ âêëþ÷àÿ çàâåðøàþùèé ïðîáåë.
+ $ - îò êóðñîðà äî êîíöà ñòðîêè.
+ ^ - îò êóðñîðà äî íà÷àëà ñòðîêè.
+
+ÇÀÌÅ×ÀÍÈÅ: Ïðîñòîå íàæàòèå íà ñèìâîë îáúåêòà â îáû÷íîì ðåæèìå (Normal mode)
+ áåç äîïîëíèòåëüíûõ êîìàíä ïåðåäâèíåò êóðñîð òàê, êàê óêàçàíî â
+ ñïèñêå îáúåêòîâ.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 2.4: ÈÑÊËÞ×ÅÍÈÅ ÈÇ ÏÐÀÂÈËÀ `ÊÎÌÀÍÄÀ-ÎÁÚÅÊÒ'
+
+
+ ** Íàáåðèòå dd äëÿ óäàëåíèÿ âñåé ñòðîêè. **
+
+ Âñëåäñòâèå ÷àñòîãî ïðèìåíåíèÿ îïåðàöèè óäàëåíèÿ âñåé ñòðîêè, ðàçðàáîò÷èêè
+ Vim ðåøèëè, ÷òî äëÿ ýòîãî ïðîùå âñåãî ïðîñòî íàáðàòü d äâàæäû.
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, êî âòîðîé ñòðîêå ôðàçû.
+ 2. Íàáåðèòå dd äëÿ óäàëåíèÿ ñòðîêè.
+ 3. Òåïåðü ïåðåìåñòèòåñü ê ÷åòâåðòîé ñòðîêå.
+ 4. Íàáåðèòå 2dd (âñïîìíèòå ïðàâèëî `÷èñëî-êîìàíäà-îáúåêò'), ÷òîáû óäàëèòü
+ äâå ñòðîêè.
+
+ 1) Ëåòîì ÿ õîæó íà ñòàäèîí,
+ 2) Î, êàê âíåçàïíî êîí÷èëñÿ äèâàí!
+ 3) ß áîëåþ çà ``Çåíèò'', ``Çåíèò'' --- ÷åìïèîí!
+ 4) Ïå÷àëüíî ÿ ãëÿæó íà íàøå ïîêîëåíèå!
+ 5) Åãî ãðÿäóùåå èëü ïóñòî èëü òåìíî...
+ 6) ß ñèæó íà ñêàìåéêå â ëîæå `Á'
+ 7) È èãðàþ íà áîëüøîé æåñòÿíîé òðóáå.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 2.5: ÊÎÌÀÍÄÀ `ÎÒÊÀÒ'
+
+
+ ** Íàæìèòå u äëÿ îòìåíû ðåçóëüòàòà ðàáîòû ïðåäûäóùåé êîìàíäû, U äëÿ îòìåíû
+ èñïðàâëåíèé âî âñåé ñòðîêå. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé ---> è óñòàíîâèòå åãî íà
+ ïåðâóþ îøèáêó.
+ 2. Íàæìèòå x äëÿ óäàëåíèÿ ïåðâîãî íåïðàâèëüíîãî ñèìâîëà.
+ 3. Òåïåðü íàæìèòå u äëÿ îòìåíû (îòêàòà) ïîñëåäíåé âûïîëíåííîé êîìàíäû.
+ 4. Èñïðàâüòå âñå îøèáêè â ñòðîêå, èñïîëüçóÿ êîìàíäó x .
+ 5. Òåïåðü íàæìèòå çàãëàâíóþ U äëÿ òîãî, ÷òîáû âåðíóòü âñþ ñòðîêó â èñõîäíîå
+ ñîñòîÿíèå.
+ 6. Íàæìèòå u íåñêîëüêî ðàç äëÿ îòìåíû êîìàíäû U è ïðåäûäóùèõ êîìàíä.
+ 7. Íàæìèòå òåïåðü CTRL-R (óäåðæèâàéòå êëàâèøó CTRL íàæàòîé â ìîìåíò íàæàòèÿ
+ R) íåñêîëüêî ðàç äëÿ âîçâðàòà êîìàíä (îòêàò îòêàòà).
+
+---> Èñïððàâüòå îîøèáêè â ýòîéé ñòðîêå è âåðíèòòå èõ ññ ïîìîùüüþ `îòêàòà'.
+
+ 8. Ýòî áûëè î÷åíü ïîëåçíûå êîìàíäû. Äàëåå ïåðåõîäèòå ê Ðåçþìå Óðîêà 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 2
+
+
+ 1. Äëÿ óäàëåíèÿ òåêñòà îò êóðñîðà äî êîíöà ñëîâà íàáåðèòå: dw
+
+ 2. Äëÿ óäàëåíèÿ òåêñòà îò êóðñîðà äî êîíöà ñòðîêè íàáåðèòå: d$
+
+ 3. Äëÿ óäàëåíèÿ âñåé ñòðîêè íàáåðèòå: dd
+
+ 4. Ôîðìàò êîìàíäû â îáû÷íîì ðåæèìå èìååò âèä:
+
+ [÷èñëî] êîìàíäà îáúåêò ÈËÈ êîìàíäà [÷èñëî] îáúåêò
+ ãäå:
+ ÷èñëî - ñêîëüêî ðàç ïîâòîðèòü âûïîëíåíèå êîìàíäû
+ êîìàíäà - ÷òî âûïîëíèòü, íàïðèìåð d äëÿ óäàëåíèÿ
+ îáúåêò - íà ÷òî äîëæíà âîçäåéñòâîâàòü êîìàíäà, íàïðèìåð w (ñëîâî),
+ $ (äî êîíöà ñòðîêè), è ò.ä.
+
+ 5. Äëÿ îòìåíû (îòêàòà) ïðåäøåñòâóþùèõ äåéñòâèé íàáåðèòå: u (ñòðî÷íàÿ u)
+ Äëÿ îòìåíû (îòêàòà) âñåõ èçìåíåíèé â ñòðîêå íàáåðèòå: U (ïðîïèñíàÿ U)
+ Äëÿ îòìåíû îòêàòà íàáåðèòå: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 3.1: ÊÎÌÀÍÄÀ ÂÑÒÀÂÊÈ
+
+
+ ** Íàáåðèòå p äëÿ âñòàâêè ïîñëåäíåãî óäàëåííîãî òåêñòà ïîñëå êóðñîðà. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç ê ïîñëåäíåé ñòðîêå èç íàáîðà.
+
+ 2. Íàáåðèòå dd äëÿ óäàëåíèÿ ñòðîêè è åå ñîõðàíåíèÿ â áóôåðå Vim'à.
+
+ 3. Ïåðåìåñòèòå êóðñîð ê ñòðîêå ÍÀÄ òåì ìåñòîì, êóäà ñëåäóåò âñòàâèòü
+ óäàëåííóþ ñòðîêó.
+
+ 4. Íàõîäÿñü â îáû÷íîì ðåæèìå íàáåðèòå p äëÿ çàìåíû ñòðîêè.
+
+ 5. Ïîâòîðèòå øàãè 2--4, ïîêà íå ðàññòàâèòå âñå ñòðîêè â íóæíîì ïîðÿäêå.
+
+ ã) È ëó÷øå âûäóìàòü íå ìîã.
+ á) Êîãäà íå â øóòêó çàíåìîã,
+ â) Îí óâàæàòü ñåáÿ çàñòàâèë
+ à) Ìîé äÿäÿ ñàìûõ ÷åñòíûõ ïðàâèë
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 3.2: ÊÎÌÀÍÄÀ ÇÀÌÅÍÛ
+
+
+ ** Íàáåðèòå r è ñèìâîë, çàìåíÿþùèé ñèìâîë ïîä êóðñîðîì. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 2. Óñòàíîâèòå êóðñîð òàê, ÷òîáû îí íàõîäèëñÿ íàä ïåðâîé îøèáêîé.
+
+ 3. Íàáåðèòå r è çàòåì ñèìâîë, èñïðàâëÿþùèé îøèáêó.
+
+ 4. Ïîâòîðèòå øàãè 2 è 3, ïîêà ïåðâàÿ ñòðîêà íå áóäåò èñïðàâëåíà.
+
+---> Â ìîìåãò íàáòðà ýòîé ÷òðîêè êîå0êòî ñ òðóäîì ïîïâäàë ïî êëâàèøàì!
+---> Â ìîìåíò íàáîðà ýòîé ñòðîêè êîå-êòî ñ òðóäîì ïîïàäàë ïî êëàâèøàì!
+
+ 5. Òåïåðü ïåðåõîäèòå ê Óðîêó 3.2.
+
+ÇÀÌÅ×ÀÍÈÅ: Ïîìíèòå, ÷òî âû äîëæíû ó÷èòüñÿ â ïðîöåññå ðàáîòû, à íå ïðîñòî
+ çàïîìèíàÿ.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 3.3: ÊÎÌÀÍÄÀ ÈÇÌÅÍÅÍÈß
+
+
+ ** Äëÿ èçìåíåíèÿ ÷àñòè ñëîâà íàáåðèòå cw . **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 2. Ðàñïîëîæèòå êóðñîð íàä áóêâîé `o' â ñëîâå `ñîëà'.
+
+ 3. Íàáåðèòå cw è èñïðàâüòå ñëîâî (â äàííîì ñëó÷àå, íàáåðèòå `ëîâ'.)
+
+ 4. Íàæìèòå <ESC> è ïåðåõîäèòå ê ñëåäóþùåé îøèáêå (ê ïåðâîìó ñèìâîëó, êîòîðûé
+ íàäî èçìåíèòü.)
+
+ 5. Ïîâòîðèòå øàãè 3--4 ïîêà ïåðâîå ïðåäëîæåíèå íå ñòàíåò èäåíòè÷íûì âòîðîìó.
+
+---> Íåñêîëüêî ñîëà â ýüãö ñòðîêå òïãøöáü ðåäàëçêóþèåñâõ.
+---> Íåñêîëüêî ñëîâ â ýòîé ñòðîêå òðåáóþò ðåäàêòèðîâàíèÿ.
+
+Îáðàòèòå âíèìàíèå, ÷òî cw íå òîëüêî çàìåíÿåò ñëîâî, íî è ïåðåâîäèò âàñ â ðåæèì
+âñòàâêè.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 3.4: ÏÐÎÄÎËÆÀÅÌ ÈÇÌÅÍßÒÜ Ñ ÊÎÌÀÍÄÎÉ c
+
+
+** Êîìàíäà çàìåíû èñïîëüçóåòñÿ ñ òåìè æå îáúåêòàìè, ÷òî è êîìàíäà óäàëåíèÿ. **
+
+ 1. Êîìàíäà èçìåíåíèÿ ïðèìåíÿåòñÿ òàêèì æå îáðàçîì, êàê è êîìàíäà óäàëåíèÿ.
+ Åå ôîðìàò òàêîâ:
+
+ [÷èñëî] c îáúåêò ÈËÈ c [÷èñëî] îáúåêò
+
+ 2. Îáúåêòû òàêæå ñîâïàäàþò: w (ñëîâî), $ (êîíåö ñòðîêè) è ò.ï.
+
+ 3. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 4. Ïåðåéäèòå ê ïåðâîé îøèáêå.
+
+ 5. Íàáåðèòå c$ è îòðåäàêòèðóéòå ïåðâóþ ñòðîêó òàê, ÷òîáû îíà ñîâïàäàëà ñî
+ âòîðîé, ïîñëå ÷åãî íàæìèòå <ESC>.
+
+---> Êîíåö ýòîé ñòðîêè íóæäàåòñÿ â ïîìîùè, ÷òîáû ñòàòü ïîõîæèì íà âòîðîé.
+---> Êîíåö ýòîé ñòðîêè íóæäàåòñÿ â ïîìîùè êîìàíäû c$ .
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 3
+
+
+ 1. Äëÿ âñòàâêè òåêñòà, êîòîðûé òîëüêî ÷òî áûë óäàëåí, íàáåðèòå p . Ýòà
+ êîìàíäà âñòàâèò óäàëåííûé òåêñò ÏÎÑËÅ êóðñîðà (åñëè áûëà óäàëåíà ñòðîêà,
+ òî îíà áóäåò ïîìåùåíà â ñòðîêå ïîä êóðñîðîì).
+
+ 2. Äëÿ çàìåíû ñèìâîëà ïîä êóðñîðîì íàáåðèòå r è çàòåì çàìåíÿþùèé ñèìâîë.
+
+ 3. Êîìàíäà èçìåíåíèÿ ïîçâîëÿåò Âàì èçìåíèòü óêàçàííûé îáúåêò îò êóðñîðà äî
+ êîíöà ýòîãî îáúåêòà. Íàïðèìåð, íàáåðèòå cw äëÿ çàìåíû îò êóðñîðà äî
+ êîíöà ñëîâà, c$ äëÿ èçìåíåíèÿ äî êîíöà ñòðîêè.
+
+ 4. Ôîðìàò êîìàíäû èçìåíåíèÿ òàêîâ:
+
+ [÷èñëî] c îáúåêò ÈËÈ c [÷èñëî] îáúåêò
+
+Òåïåðü îòïðàâëÿéòåñü ê ñëåäóþùåìó óðîêó.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 4.1: ÈÍÔÎÐÌÀÖÈß Î ÔÀÉËÅ È ÐÀÑÏÎËÎÆÅÍÈÅ Â ÍÅÌ
+
+
+ ** Íàáåðèòå CTRL-g ÷òîáû óâèäåòü Âàøå ìåñòîðàñïîëîæåíèå â ôàéëå è èíôîðìàöèþ
+ î íåì.
+ Íàáåðèòå SHIFT-G äëÿ ïåðåìåùåíèÿ ê çàäàííîé ñòðîêå â ôàéëå. **
+
+ Çàìå÷àíèå: Ïðî÷èòàéòå âåñü óðîê ïðåæäå ÷åì âûïîëíÿòü ëþáûå êîìàíäû!!
+
+ 1. Óäåðæèâàÿ êëàâèøó Ctrl íàæìèòå g . Âíèçó ýêðàíà ïîÿâèòñÿ ñòðîêà ñòàòóñà ñ
+ èìåíåì ôàéëà è íîìåðîì ñòðîêè, â êîòîðîé Âû íàõîäèòåñü. Çàïîìíèòå íîìåð
+ ñòðîêè, îí ïîòðåáóåòñÿ íà Øàãå 3.
+
+ 2. Íàæìèòå shift-G äëÿ ïåðåìåùåíèÿ ê êîíöó ôàéëà.
+
+ 3. Íàáåðèòå íîìåð ñòðîêè, â êîòîðîé âû íàõîäèëèñü è çàòåì shift-G. Ýòî
+ âåðíåò Âàñ ê ñòðîêå, â êîòîðîé Âû áûëè, êîãäà â ïåðâûé ðàç íàæàëè Ctrl-g.
+ (Êîãäà Âû áóäåòå íàáèðàòü öèôðû, îíè ÍÅ îòîáðàçÿòñÿ íà ýêðàíå.)
+
+ 4. Åñëè Âû çàïîìíèëè âñå âûøåñêàçàííîå, âûïîëíèòå øàãè 1--3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 4.2: ÊÎÌÀÍÄÀ ÏÎÈÑÊÀ
+
+ ** Íàáåðèòå / è çàòåì ââåäèòå èñêîìóþ ôðàçó. **
+
+ 1.  îáû÷íîì ðåæèìå (Normal mode) íàáåðèòå ñèìâîë / . Îáðàòèòå âíèìàíèå,
+ ÷òî îí âìåñòå ñ êóðñîðîì ïîÿâèòñÿ âíèçó ýêðàíà, êàê ýòî ïðîèñõîäèò ñ
+ êîìàíäîé : .
+
+ 2. Òåïåðü íàáåðèòå 'îøøøèáêà' <ENTER>. Ýòî òî ñëîâî, êîòîðîå Âû áóäåòå
+ èñêàòü.
+
+ 3. Äëÿ òîãî, ÷òîáû ïîâòîðèòü ïîèñê, ïðîñòî íàæìèòå n .
+ Äëÿ ïîèñêà ýòîé ôðàçû â îáðàòíîì íàïðàâëåíèè, íàæìèòå Shift-N .
+
+ 4. Åñëè Âû æåëàåòå ñðàçó èñêàòü â îáðàòíîì íàïðàâëåíèè, èñïîëüçóéòå
+ êîìàíäó ? âìåñòî / .
+
+---> Êîãäà Âû ïðè ïîèñêå äîñòèãíåòå êîíöà ôàéëà, ïîèñê áóäåò ïðîäîëæåí ñ
+ íà÷àëà.
+
+ "îøøøèáêà" ýòî íå ñïîñîá ïðîèçíåñåíèÿ ñëîâà `îøèáêà'; îøøøèáêà ýòî îøèáêà.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 4.3: ÏÎÈÑÊ ÏÀÐÍÛÕ ÑÊÎÁÎÊ
+
+
+ ** Íàáåðèòå % äëÿ ïîèñêà ïàðíûõ ),] èëè } . **
+
+ 1. Ïîìåñòèòå êóðñîð íàä ëþáîé èç (, [ èëè { â ñòðîêå âíèçó, ïîìå÷åííîé --->.
+
+ 2. Òåïåðü íàáåðèòå ñèìâîë % .
+
+ 3. Êóðñîð äîëæåí ïåðåñêî÷èòü íà ïàðíóþ ñêîáêó.
+
+ 4. Íàáåðèòå % äëÿ âîçâðàòà êóðñîðà íàçàä ê ïåðâîé ñêîáêå.
+
+---> Ýòî ( ñòðîêà, ñîäåðæàùàÿ òàêèå (, òàêèå [ ] è òàêèå { } ñêîáêè. ))
+
+Çàìå÷àíèå: Ýòî î÷åíü óäîáíî ïðè îòëàäêå ïðîãðàìì ñ ïðîïóùåííûìè ñêîáêàìè!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 4.4: ÑÏÎÑÎÁ ÈÑÏÐÀÂËÅÍÈß ÎØÈÁÎÊ
+
+
+ ** Íàáåðèòå :s/áûëî/ñòàëî/g äëÿ çàìåíû 'áûëî' íà 'ñòàëî'. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 2. Íàáåðèòå :s/óâîäþ/óâîæó <ENTER> . Îáðàòèòå âíèìàíèå íà òî, ÷òî ýòà êîìàíäà
+ çàìåíèò òîëüêî ïåðâîå íàéäåííîå âõîæäåíèå â ñòðîêå.
+
+ 3. Òåïåðü íàáåðèòå :s/óâîäþ/óâîæó/g , îçíà÷àþùåå ïîäñòàíîâêó ãëîáàëüíî âî
+ âñåé ñòðîêå. Ýòî çàìåíèò âñå íàéäåííûå â ñòðîêå âõîæäåíèÿ.
+
+---> ß óâîäþ ê îòâåðæåííûì ñåëåíüÿì, ÿ óâîäþ ñêâîçü âåêîâå÷íûé ñòîí, ÿ óâîäþ ê
+ çàáûòûì ïîêîëåíüÿì.
+
+ 4. Äëÿ çàìåíû âñåõ âõîæäåíèé ïîñëåäîâàòåëüíîñòè ñèìâîëîâ ìåæäó äâóìÿ
+ ñòðîêàìè,
+ íàáåðèòå :#,#s/áûëî/ñòàëî/g ãäå #,# --- íîìåðà ýòèõ ñòðîê.
+ Íàáåðèòå :%s/áûëî/ñòàëî/g äëÿ çàìåíû âñåõ âõîæäåíèé âî âñåì ôàéëå.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 4
+ 1. Ctrl-g ïîêàçûâàåò âàøå ïîëîæåíèå â ôàéëå è èíôîðìàöèþ î íåì.
+ Shift-G ïåðåìåùàåò Âàñ â êîíåö ôàéëà. Íîìåð, çà êîòîðûì ñëåäóåò Shift-G
+ ïîçâîëÿåò ïåðåéòè ê ñòðîêå ñ ýòèì íîìåðîì.
+
+ 2. Íàæàòèå / è çàòåì ââîä ñòðîêè ïîçâîëÿåò ïðîèçâåñòè ïîèñê ýòîé ñòðîêè
+ ÂÏÅÐÅÄ ïî òåêñòó.
+ Íàæàòèå ? è çàòåì ââîä ñòðîêè ïîçâîëÿåò ïðîèçâåñòè ïîèñê ýòîé ñòðîêè
+ ÍÀÇÀÄ ïî òåêñòó.
+ Ïîñëå ïîèñêà íàáåðèòå n äëÿ ïåðåõîäà ê ñëåäóþùåìó âõîæäåíèþ èñêîìîé
+ ñòðîêè â òîì æå íàïðàâëåíèè èëè Shift-N äëÿ ïåðåõîäà â ïðîòèâîïîëîæíîì
+ íàïðàâëåíèè.
+
+ 3. Íàæàòèå % , êîãäà êóðñîð íàõîäèòñÿ íà (,),[,],{, èëè } ïîçâîëÿåò íàéòè
+ ïàðíóþ ñêîáêó.
+
+ 4. Äëÿ ïîäñòàíîâêè `ñòàëî' âìåñòî ïåðâîãî `áûëî' â ñòðîêå, íàáåðèòå
+ :s/old/new
+ Äëÿ ïîäñòàíîâêè `ñòàëî' âìåñòî âñåõ `áûëî' â ñòðîêå, íàáåðèòå
+ :s/old/new/g
+ Äëÿ çàìåíû â èíòåðâàëå ìåæäó äâóìÿ ñòðîêàìè, íàáåðèòå
+ :#,#s/old/new/g
+ Äëÿ çàìåíû âñåõ âõîæäåíèé `áûëî' íà `ñòàëî' â ôàéëå, íàáåðèòå
+ :%s/old/new/g
+ ×òîáû ðåäàêòîð êàæäûé ðàç çàïðàøèâàë ïîäòâåðæäåíèå, äîáàâüòå 'c'
+ :%s/old/new/gc
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 5.1: ÊÀÊ ÂÛÏÎËÍÈÒÜ ÂÍÅØÍÞÞ ÊÎÌÀÍÄÓ
+
+
+ ** Íàáåðèòå :! è çàòåì âíåøíþþ êîìàíäó, êîòîðóþ ñëåäóåò âûïîëíèòü. **
+
+ 1. Íàáåðèòå óæå çíàêîìóþ Âàì êîìàíäó : äëÿ óñòàíîâêè êóðñîðà â êîìàíäíóþ
+ ñòðîêó ðåäàêòîðà. Ýòî ïîçâîëèò Âàì ââåñòè êîìàíäó.
+
+ 2. Òåïåðü íàáåðèòå ñèìâîë ! (âîñêëèöàòåëüíûé çíàê). Òåïåðü ìîæíî èñïîëíèòü
+ âíåøíþþ êîìàíäó, èñïîëüçóÿ êîìàíäíóþ îáîëî÷êó.
+
+ 3. Äëÿ ïðèìåðà íàáåðèòå ls ïîñëå ! è íàæìèòå <ENTER>. Ýòà êîìàíäà âûâåäåò
+ ñïèñîê ôàéëîâ â òåêóùåì êàòàëîãå, òî÷íî òàêæå, êàê åñëè áû Âû ââåëè ýòó
+ êîìàíäó â ïðèãëàøåíèè îáîëî÷êè. Èëè ïîïðîáóéòå :!dir , åñëè ïðåäûäóùàÿ
+ êîìàíäà íå ñðàáîòàëà.
+
+---> Çàìå÷àíèå: Òàêèì ñïîñîáîì ìîæíî âûïîëíèòü ëþáóþ âíåøíþþ êîìàíäó.
+
+---> Çàìå÷àíèå: Âñå êîìàíäû, íà÷èíàþùèåñÿ ñ : , äîëæíû çàâåðøàòüñÿ íàæàòèåì
+ <ENTER>.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 5.2: ÊÀÊ ÇÀÏÈÑÀÒÜ ÔÀÉË
+
+
+** Äëÿ ñîõðàíåíèÿ èçìåíåíèé, ïðîèçâåäåííûõ â ôàéëå, íàáåðèòå :w ÈÌß_ÔÀÉËÀ. **
+
+ 1. Íàáåðèòå :!dir èëè :!ls äëÿ ïîëó÷åíèÿ ñïèñêà ôàéëîâ â òåêóùåì êàòàëîãå.
+ Êàê Âàì óæå èçâåñòíî, Âû äîëæíû íàæàòü <ENTER> ïîñëå ââîäà ýòèõ êîìàíä.
+
+ 2. Ïðèäóìàéòå íàçâàíèå äëÿ ôàéëà, êîòîðîå åùå íå ñóùåñòâóåò, íàïðèìåð TEST.
+
+ 3. Òåïåðü íàáåðèòå :w TEST (ãäå TEST --- ýòî èìÿ ôàéëà, ïðèäóìàííîå Âàìè.)
+
+ 4. Ýòà êîìàíäà ñîõðàíèò âåñü ôàéë (Ó÷åáíèê ïî Vim) ïîä èìåíåì TEST. ×òîáû
+ óäîñòîâåðèòüñÿ â ýòîì, ñíîâà íàáåðèòå :!dir è ïðîñìîòðèòå êàòàëîã.
+
+---> Çàìåòüòå, ÷òî åñëè Âû âûéäåòå èç Vim è çàòåì çàïóñòèòå åãî ñíîâà ñ
+ ôàéëîì TEST, ýòîò ôàéë áóäåò òî÷íîé êîïèåé ó÷åáíèêà â òîò ìîìåíò, êîãäà
+ Âû åãî ñîõðàíèëè.
+
+ 5. Òåïåðü óäàëèòå ýòîò ôàéë, íàáðàâ :!del TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 5.3: ÂÛÁÎÐÎ×ÍÎÅ ÑÎÕÐÀÍÅÍÈÅ
+
+
+ ** Äëÿ ñîõðàíåíèÿ ÷àñòè ôàéëà, íàáåðèòå :#,# w ÈÌß_ÔÀÉËÀ **
+
+ 1. Åùå ðàç íàáåðèòå :!dir èëè :!ls äëÿ ïîëó÷åíèÿ ñïèñêà ôàéëîâ â òåêóùåì
+ êàòàëîãå è âûáåðèòå ïîäõîäÿùåå èìÿ, íàïðèìåð TEST.
+
+ 2. Ïåðåìåñòèòå êóðñîð ê íà÷àëó ýòîé ñòðàíèöû è íàæìèòå Ctrl-g äëÿ íàõîæäåíèÿ
+ íîìåðà ñòðîêèto. ÇÀÏÎÌÍÈÒÅ ÝÒÎÒ ÍÎÌÅÐ!
+
+ 3. Òåïåðü ïåðåìåñòèòåñü â êîíåö ñòðàíèöû è âíîâü íàáåðèòå Ctrl-g. ÇÀÏÎÌÍÈÒÅ
+ È ÝÒÎÒ ÍÎÌÅÐ ÒÎÆÅ!
+
+ 4. Äëÿ ñîõðàíåíèÿ ÒÎËÜÊÎ ×ÀÑÒÈ ôàéëà íàáåðèòå :#,# w TEST , ãäå #,# --- ýòî
+ íîìåðà, êîòîðûå Âû çàïîìíèëè (íà÷àëî, êîíåö), à TEST --- èìÿ âàøåãî ôàéëà.
+
+ 5. Êàê è ïðåæäå, óáåäèòåñü â íàëè÷èè ýòîãî ôàéëà êîìàíäîé :!dir , íî ÍÅ
+ ÓÄÀËßÉÒÅ åãî.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 5.4: ×ÒÅÍÈÅ È ÎÁÚÅÄÈÍÅÍÈÅ ÔÀÉËÎÂ
+
+ ** Äëÿ âñòàâêè ñîäåðæèìîãî ôàéëà, íàáåðèòå :r FILENAME **
+
+ 1. Íàáåðèòå :!dir äëÿ òîãî, ÷òîáû óáåäèòüñÿ â òîì, ÷òî ôàéë TEST âñå åùå
+ ñóùåñòâóåò.
+
+ 2. Óñòàíîâèòå êóðñîð â âåðõíåé ÷àñòè ýòîé ñòðàíèöû.
+
+Çàìå÷àíèå: Ïîñëå âûïîëíåíèÿ øàãà 3 Âû óâèäèòå Óðîê 5.3. Ïîñëå ýòîãî
+ ïåðåìåùàéòåñü ÂÍÈÇ, ñíîâà ê ýòîìó óðîêó.
+
+ 3. Òåïåðü ïðî÷èòàéòå Âàø ôàéë TEST, èñïîëüçóÿ êîìàíäó :r TEST , ãäå
+ TEST --- ýòî èìÿ ôàéëà.
+
+Çàìå÷àíèå: Ïðî÷èòàííûé Âàìè ôàéë áóäåò âñòàâëåí â òîì ìåñòå, ãäå íàõîäèòñÿ
+ êóðñîð.
+
+ 4. ×òîáû óáåäèòüñÿ â òîì, ÷òî ôàéë ïðî÷èòàí, ïåðåìåñòèòåñü íåìíîãî íàçàä ïî
+ òåêñòó è çàìåòüòå, ÷òî òåïåðü ñóùåñòâóþò äâå êîïèè Óðîêà 5.3, èñõîäíàÿ
+ è ïîëó÷åííàÿ èç ôàéëà.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 5
+
+
+ 1. :!êîìàíäà èñïîëíÿåò âíåøíþþ êîìàíäó.
+
+ Íåêîòîðûå ïîëåçíûå ïðèìåðû:
+ :!dir --- âûâîäèò ñïèñîê ôàéëîâ â êàòàëîãå.
+ :!del FILENAME --- óäàëÿåò ôàéë FILENAME.
+
+ 2. :w FILENAME çàïèñûâàåò òåêóùèé ðåäàêòèðóåìûé ôàéë íà äèñê
+ ïîä èìåíåì FILENAME.
+
+ 3. :#,#w FILENAME ñîõðàíÿåò ñòðîêè îò # äî # â ôàéë FILENAME.
+
+ 4. :r FILENAME ñ÷èòûâàåò ñ äèñêà ôàéë FILENAME è ïîìåùàåò åãî â òåêóùèé
+ ôàéë ñëåäîì çà ïîçèöèåé êóðñîðà.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 6.1: ÊÎÌÀÍÄÀ ÑÎÇÄÀÍÈß
+
+
+ ** Íàáåðèòå o ÷òîáû ñîçäàòü ïóñòóþ ñòðîêó ïîä êóðñîðîì è ïåðåéòè â ðåæèì
+ âñòàâêè (Insert mode) **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 2. Íàáåðèòå o (â íèæíåì ðåãèñòðå) äëÿ òîãî, ÷òîáû ñîçäàòü ïóñòóþ ñòðîêó
+ ÍÈÆÅ êóðñîðà è ïåðåéòè â ðåæèì âñòàâêè (Insert mode).
+
+ 3. Òåïåðü ñêîïèðóéòå ïîìå÷åííóþ ---> ñòðîêó è íàæìèòå <ESC> äëÿ âûõîäà èç
+ ðåæèìà âñòàâêè.
+
+---> Ïîñëå íàæàòèÿ o êóðñîð ïåðåéäåò íà íîâóþ ïóñòóþ ñòðîêó â ðåæèìå âñòàâêè.
+
+ 4. Äëÿ ñîçäàíèÿ ñòðîêè ÂÛØÅ êóðñîðà, ïðîñòî íàáåðèòå çàãëàâíóþ O, âìåñòî
+ ñòðî÷íîé o. Ïîïðîáóéòå ïðîäåëàòü ýòî ñ íèæåñëåäóþùåé ñòðîêîé.
+Ñîçäàéòå íîâóþ ñòðîêó íàä ýòîé, íàæàâ Shift-O, ïîìåñòèâ êóðñîð íà ýòó ñòðîêó.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 6.2: ÊÎÌÀÍÄÀ ÄÎÁÀÂËÅÍÈß
+
+ ** Íàáåðèòå a , ÷òîáû âñòàâèòü òåêñò ÏÎÑËÅ êóðñîðà. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, â êîíåö ïåðâîé ñòðîêè, ïîìå÷åííîé ---> ,
+ íàáðàâ $ â îáû÷íîì ðåæèìå (Normal mode).
+
+ 2. Íàáåðèòå a (â íèæíåì ðåãèñòðå) äëÿ äîáàâëåíèÿ òåêñòà ÏÎÑËÅ ñèìâîëà,
+ íàõîäÿùåãîñÿ ïîä êóðñîðîì. (Çàãëàâíàÿ A ïîçâîëÿåò äîáàâèòü â êîíåö
+ ñòðîêè.)
+
+Çàìå÷àíèå: Ýòî ïîçâîëÿåò èçáåæàòü íàæàòèÿ i , ïîñëåäíåãî ñèìâîëà, òåêñòà äëÿ
+ âñòàâêè, <ESC>, êóðñîð-âïðàâî, è, íàêîíåö, x , ïðîñòî äëÿ òîãî,
+ ÷òîáû äîáàâèòü òåñò â êîíåö ñòðîêè!
+
+ 3. Òåïåðü çàâåðøèòå ïåðâóþ ñòðîêó. Çàìåòüòå òàêæå, ÷òî äîáàâëåíèå ýòî â
+ òî÷íîñòè òî æå ñàìîå, ÷òî è ðåæèì âñòàâêè, çà èñêëþ÷åíèåì ïîçèöèè, â
+ êîòîðóþ áóäåò âñòàâëåí òåêñò.
+
+---> Ýòà ñòðî÷êà ïîçâîëèò Âàì ïîïðàêòèêîâàòüñÿ
+---> Ýòà ñòðî÷êà ïîçâîëèò Âàì ïîïðàêòèêîâàòüñÿ â äîáàâëåíèè òåêñòà â êîíåö
+ ñòðîêè.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 6.3: ÅÙÅ ÎÄÈÍ ÑÏÎÑÎÁ ÇÀÌÅÍÛ
+
+
+ ** Íàáåðèòå çàãëàâíóþ R äëÿ çàìåíû áîëåå, ÷åì îäíîãî ñèìâîëà. **
+
+ 1. Ïåðåìåñòèòå êóðñîð âíèç, ê ñòðîêå, ïîìå÷åííîé --->.
+
+ 2. Ðàñïîëîæèòå êóðñîð â íà÷àëå ïåðâîãî ñëîâà, îòëè÷àþùåãîñÿ îò
+ ñîîòâåòñòâóþùåãî â ñëåäóþùåé ñòðîêå, ïîìå÷åííîé ---> (ñëîâî 'ïîñëåäíåé').
+
+ 3. Òåïåðü íàáåðèòå R è çàìåíèòå îñòàòîê òåêñòà â ïåðâîé ñòðîêå, íàáðàâ
+ ïîâåðõ ñòàðîãî òåêñòà òàê, ÷òîáû îáå ñòðîêè ñòàëè îäèíàêîâûìè.
+
+---> Ïåðâóþ ñòðîêó ìîæíî ñðàâíÿòü ñ ïîñëåäíåé, èñïîëüçóÿ êëàâèøè.
+---> Ïåðâóþ ñòðîêó ìîæíî ñðàâíÿòü ñ âòîðîé, èñïîëüçóÿ R è íàáðàâ íîâûé òåêñò.
+
+ 4. Îáðàòèòå âíèìàíèå, ÷òî ïðè íàæàòèè <ESC> äëÿ çàâåðøåíèÿ, ëþáîé
+ íå èçìåíåííûé òåêñò ñîõðàíèòñÿ.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 6.4: ÓÑÒÀÍÎÂÊÀ ÏÀÐÀÌÅÒÐÎÂ
+
+
+** Óñòàíîâèì ïàðàìåòðû òàê, ÷òîáû èãíîðèðîâàòü ðåãèñòð ïðè ïîèñêå èëè çàìåíå **
+
+
+ 1. Ïîèùèòå ñëîâî 'èãíîðèðîâàòü', íàáðàâ:
+ /èãíîðèðîâàòü
+ Ïîâòîðèòå ïîèñê íåñêîëüêî ðàç, íàæèìàÿ êëàâèøó n
+
+ 2. Âêëþ÷èòå ïàðàìåòð 'ic' (Èãíîðèðîâàòü ðåãèñòð), íàáðàâ:
+ :set ic
+
+ 3. Òåïåðü ñíîâà ñäåëàéòå ïîèñê ñëîâà 'èãíîðèðîâàòü', íàæàâ: n
+ Ïîâòîðèòå ïîèñê íåñêîëüêî ðàç, íàæèìàÿ êëàâèøó n
+
+ 4. Âêëþ÷èòå ïàðàìåòðû 'hlsearch' è 'incsearch':
+ :set hls is
+
+ 5. Òåïåðü îïÿòü ââåäèòå êîìàíäó ïîèñêà è ïîñìîòðèòå, ÷òî ïîëó÷èòñÿ:
+ /èãíîðèðîâàòü
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ÐÅÇÞÌÅ ÓÐÎÊÀ 6
+
+
+ 1. Íàæàòèå o ñîçäàåò ñòðîêó ÍÈÆÅ êóðñîðà è ïåðåìåùàåò êóðñîð â íåå â ðåæèìå
+ âñòàâêè.
+ Íàæàòèå çàãëàâíîé O ñîçäàåò ñòðîêó ÂÛØÅ ñòðîêè, â êîòîðîé íàõîäèòñÿ
+ êóðñîð.
+
+ 2. Íàáåðèòå a äëÿ âñòàâêè òåêñòà ÏÎÑËÅ ñèìâîëà, íà êîòîðîì íàõîäèòñÿ êóðñîð.
+ Íàæàòèå çàãëàâíîé A àâòîìàòè÷åñêè ïåðåìåùàåò Âàñ äëÿ äîáàâëåíèÿ òåêñòà
+ â êîíåö ñòðîêè.
+
+ 3. Íàæàòèå çàãëàâíîé R ïåðåâîäèò Âàñ â ðåæèì çàìåíû äî òåõ ïîð, ïîêà íå
+ áóäåò íàæàòà êëàâèøà <ESC> äëÿ çàâåðøåíèÿ.
+
+ 4. Íàáðàâ ":set xxx" âû ñìîæåòå âêëþ÷èòü ïàðàìåòð "xxx"
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 7: ÊÎÌÀÍÄÛ ÏÎËÓ×ÅÍÈß ÂÑÒÐÎÅÍÍÎÉ ÑÏÐÀÂÊÈ
+
+ ** Èñïîëüçóéòå âñòðîåííóþ ñïðàâî÷íóþ ñèñòåìó **
+
+ Vim îáëàäàåò ìîùíîé âñòðîåííîé ñïðàâî÷íîé ñèñòåìîé. Äëÿ íà÷àëà ïîïðîáóéòå
+ îäèí èç òðåõ âàðèàíòîâ:
+ - íàæìèòå êëàâèøó <HELP> (åñëè òàêîâàÿ èìååòñÿ íà êëàâèàòóðå)
+ - íàæìèòå êëàâèøó <F1> (åñëè òàêîâàÿ èìååòñÿ íà êëàâèàòóðå)
+ - íàáåðèòå :help <ENTER>
+
+ Íàáåðèòå :q <ENTER> ÷òîáû çàêðûòü îêíî ñïðàâêè.
+
+ Âû ìîæåòå íàéòè ñïðàâêó äëÿ ëþáîãî ïîíÿòèÿ èëè êîìàíäû, ïðîñòî çàäàâ
+ ñîîòâåòñòâóþùèé àðãóìåíò êîìàíäå ":help". Ïîïðîáóéòå ñëåäóþùåå (íå çàáóäüòå
+ íàæàòü <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Óðîê 8: ÑÎÇÄÀÍÈÅ ÑÒÀÐÒÎÂÎÃÎ ÑÊÐÈÏÒÀ
+
+ ** Âêëþ÷èì âîçìîæíîñòè Vim **
+
+ Vim èìååò íàìíîãî áîëüøå âîçìîæíîñòåé, ÷åì Vi, îäíàêî áîëüøèíñòâàî èç íèõ
+ âûêëþ÷åíû ïî óìîë÷àíèþ. Äëÿ òîãî, ÷òîáû íà÷àòü èñïîëüçîâàòü íîâûå
+ âîçìîæíîñòè Âàì ñëåäóåò ñîçäàòü ôàéë "vimrc".
+
+ 1. Îòðåäàêòèðóéòå ôàéë "vimrc", åãî ðàñïîëîæåíèå çàâèñèò îò èñïîëüçóåìîé
+ ñèñòåìû:
+
+ :edit ~/.vimrc äëÿ Unix
+ :edit $VIM/_vimrc äëÿ MS-Windows
+
+ 2. Òåïåðü ïðî÷èòàéòå ïðèìåð ôàéëà "vimrc":
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Çàïèøèòå ôàéë:
+
+ :write
+
+ Òåïåðü ïðè ñëåäóþùåì çàïóñêå Vim áóäåò âêëþ÷åíà ïîäñâåòêà ñèíòàêñèñà. Âñå
+ íàñòðîéêè, ïðåäïî÷èòàåìûå Âàìè, ìîãóò áûòü äîáàâëåíû â ôàéë "vimrc".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Íà ýòîì çàâåðøàåòñÿ Ó÷åáíèê Vim. Îí áûë ïðåäíàçíà÷åí äëÿ òîãî, ÷òîáû äàòü
+ îáùåå ïðåäñòàâëåíèå î ðåäàêòîðå Vim, äîñòàòî÷íîå äëÿ òîãî, ÷òîáû ñ ëåãêîñòüþ
+ èñïîëüçîâàòü åãî. Ó÷åáíèê äàëåê îò ïîëíîòû, ïîñêîëüêó Vim èìååò î÷åíü ìíîãî
+ êîìàíä. Ïðî÷èòàéòå òåïåðü ðóêîâîäñòâî ïîëüçîâàòåëÿ: ":help user-manual".
+
+ Äëÿ äàëüíåéøåãî ÷òåíèÿ ðåêîìåíäóåòñÿ êíèãà:
+ Vim - Vi Improved - Àâòîð: Steve Oualline
+ Èçäàòåëü: New Riders
+ Ýòà êíèãà ïîëíîñòüþ ïîñâÿùåíà Vim. Îñîáåííî ïîëåçíà íîâè÷êàì. Ñîäåðæèò
+ ìíîæåñòâî ïðèìåðîâ è èëëþñòðàöèé.
+ Âçãëÿíèòå íà See http://iccf-holland.org/click5.html
+
+ Ñëåäóþùàÿ êíèãà áîëåå ïî÷òåííîãî âîçðàñòà è ïîñâÿùåíà áîëüøå Vi, ÷åì Vim,
+ îäíàêî òàêæå ðåêîìåíäóåòñÿ:
+ Learning the Vi Editor - Àâòîð: Linda Lamb
+ Èçäàòåëü: O'Reilly & Associates Inc.
+ Ýòî õîðîøàÿ êíèãà äëÿ òîãî, ÷òîáû óçíàòü âñå, ÷òî òîëüêî ìîæíî ïðîäåëûâàòü ñ
+ Vi. Øåñòîå èçäàíèå òàêæå âêëþ÷àåò èíôîðìàöèþ î Vim.
+
+ Ýòîò ó÷åáíèê áûë íàïèñàí Michael C. Pierce è Robert K. Ware, Colorado School
+ of Mines ñ èñïîëüçîâàíèåì èäåé, ïðåäëîæåííûõ Charles Smith, Colorado State
+ University. E-mail: bware@mines.colorado.edu.
+
+ Äîðàáîòàíî äëÿ Vim Bram Moolenaar.
+
+ Ïåðåâîä: Àíäðåé Êèñåëåâ <a_kissel@eudoramail.com>, 2002.
+ Translator: Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.sk b/runtime/tutor/tutor.sk
new file mode 100644
index 000000000..243493bd1
--- /dev/null
+++ b/runtime/tutor/tutor.sk
@@ -0,0 +1,821 @@
+===============================================================================
+= V i t a j t e v o V I M T u t o r i a l i - Verzia 1.5 =
+===============================================================================
+
+ Vim je veµmi výkonný editor, ktorý má príli¾ veµa príkazov na to aby
+ mohli byt v¹etky popísané vo výuke akou je táto. Táto výuka
+ popisuje dostatoèné mno¾stvo príkazov nato aby bolo mo¾né pou¾íva»
+ Vim ako viacúèelový editor.
+
+ Pribli¾ný èas potrebný na prebratie tejto výuky je 25-30 minút,
+ závisí na tom, koµko je stráveného èasu s preskú¹avaním.
+
+ Príkazy v lekciách modifikujú text. Vytvor kópiu tohto súboru aby
+ sa mohlo precvièova» na òom (pri ¹tarte "vimtutor" je toto kópia).
+
+ Je dôle¾ité zapamäta» si, ¾e táto výuka je vytvorená pre výuku
+ pou¾ívaním. To znamená, ¾e je potrebné si príkazy vyskú¹a», aby bolo
+ uèenie správne. Ak len èitas text, príkazy zabudne¹!
+
+ Presvedè sa, ¾e Shift-Lock NIEJE stlaèený a stlaèt klávesu
+ j niekoµko krát, aby sa kurzor posunul natoµko, ¾e lekcia 1.1
+ celkom zaplní obrazovku.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 1.1: POHYB KURZOROM
+
+
+ ** Pre pohyb kurzorum stlaè klávesy h,j,k,l ako je znázornené. **
+ ^
+ k Funkcia: Klávesa h je naµavo a vykoná pohyb doµava.
+ < h l > Klávesa l je napravo a vykoná pohyb doprava.
+ j Klávesa j vyzerá ako ¹ípka dole
+ v
+ 1. Pohybuj kurzorom po obrazovke, kým si na to nezvykne¹.
+
+ 2. Dr¾ stlaèenú klávesu pre pohyb dole (j), kým sa jej funkcia nezopakuje.
+---> Teraz sa u¾ vie¹ pohybova» na nasledujúcu lekciu.
+
+ 3. Pou¾itím klávesy pre pohyb dole prejdi na Lekciu 1.2.
+
+Poznámka: Ak si niesi istý tým èo si napísal, stlaè <ESC>
+ na prechod do normálneho módu.
+
+Poznámka: Kurzorové klávesy sú tie¾ funkèné. Ale pou¾ívaním hjkl sa bude¹
+ schopný pohybova» rýchlej¹ie, keï si zvykne¹ ich pou¾íva».
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 1.2: SPÚ©«ANIE A ZATVÁRANIE VIMU
+
+ !! POZNÁMKA: Pred vykonaním týchto krokov si preèítaj celú túto lekciu !!
+
+ 1. Stlaè klávesu <ESC> (aby si sa uèite nachádzal v normálnom móde)
+
+ 2. Napí¹: :q! <ENTER>.
+
+---> Tým ukonèí¹ prácu s editorom BEZ ulo¾enia zmien, ktoré si vykonal.
+ Ak chce¹ ulo¾i» vykonané zmeny a ukonèi» prácu s editorom napí¹:
+ :wq <ENTER>
+
+ 3. Keï sa dostane¹ na príkazový riadok, napí¹ príkaz, ktorým sa dostane¹
+ spe» do tejto výuky. To mô¾e by»: vimtutor <ENTER>
+ Zvyèajne sa pou¾íva: vim tutor <ENTER>
+
+---> 'vim' znamená spustenie editora vim, 'tutor' je názov súboru, ktorý
+ chce¹ editova».
+
+ 4. Ak si si tieto kroky spoµahlivo zapamätal, vykonaj kroky 1 a¾ 3, pre
+ ukonèenie a znovu spustenie editora. Potom presuò kurzor dole na
+ lekciu 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 1.3: EDITÁCIA TEXTU - MAZANIE
+
+
+** Stlaèenie klávesy x v normálnom móde zma¾e znak na mieste kurzora. **
+
+ 1. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou --->.
+
+ 2. Aby si mohol odstráni» chyby, pohybuj kurzorom kým neprejde na znak,
+ ktorý chce¹ zmaza».
+
+ 3. Stlaè klávesu x aby sa zmazal nechcený znak.
+
+ 4. Zopakuj kroky 2 a¾ 4 a¾ kým veta nieje správna.
+
+---> Kraava skooèilla ccezz mesiiac.
+
+ 5. Ak je veta správna, prejdi na lekciu 1.4.
+
+POZNÁMKA: Neskú¹aj si zapametä» obsah tejto výuky, ale sa uè pou¾ívaním.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 1.4: EDITÁCIA TEXTU - VKLADANIE
+
+
+ ** Stlaèenie klávesy i v normálnom móde umo¾òuje vkladanie textu. **
+
+ 1. Presuò kurzor ni¾¹ie na prvý riadok za znaèku --->.
+
+ 2. Pre upravenie prvého riadku do rovnakého tvaru ako je druhý riadok,
+ presuò kurzor na prvý znak za misto, kde má by» text vlo¾ený.
+
+ 3. Stlaè klávesu i a napí¹ potrebný text.
+
+ 4. Po opravení ka¾dej chyby, stlaè <ESC> pre návrat do normálneho módu.
+ Zopakuj kroky 2 a¾ 4 kým nieje veta správna.
+
+---> Tu je text chýbajúci tejto.
+---> Tu je nejaký text chýbajúci od tejto èiary.
+
+ 5. Keï sa dostatoène nauèí¹ vklada» text, prejdi na nasledujúce zhrnutie.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ZHRNUTIE LEKCIE 1
+
+
+ 1. Kurzor sa pohybuje pou¾itím kláves so ¹ípkami alebo klávesmi hjkl.
+ h (do lava) j (dole) k (hore) l (doprava)
+
+ 2. Pre spustenie Vimu (z príkazového riadku) napí¹: vim FILENAME <ENTER>
+
+ 3. Na ukonèenie Vimu napí¹: <ESC> :q! <ENTER> pre zru¹enie v¹etkých zmien
+ alebo napí¹: <ESC> :wq <ENTER> pre ulo¾enie zmien.
+
+ 4. Na zmazanie znaku na mieste kurzora napí¹ v normálnom móde: x
+
+ 5. Pre vlo¾enie textu na mieste kurzora v normálnom móde napí¹:
+ i vkladaný text <ESC>
+
+POZNÁMKA: Stlaèenie <ESC> »a premiestní do normálneho módu alebo zru¹í
+ nejaký nechcený a èiastoène dokonèený príkaz.
+
+Teraz pokraèuj lekciou 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 2.1: Mazacie príkazy
+
+
+ ** Napísanie príkazu dw zma¾e znaky do konca slova. **
+
+1. Stlaè <ESC> aby si bol bezpeène v normálnom móde.
+
+2. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou --->.
+
+3. Presuò kurzor na zaèiatok slova, ktoré je potrebné zmaza».
+
+4. Napí¹ dw aby slovo zmizlo.
+
+POZNÁMKA: Písmená dw sa zobrazia na poslednom riadku obrazovky tak ako ich
+ pí¹e¹. Ak pí¹e¹ nieèo zle, stlaè <ESC> a zaèni znova.
+
+---> Tu je niekoµko slov zábava, ktoré nie patria list do tejto vety.
+
+5. Zopakuj kroky 3 a¾ 4 kým veta nieje správna a prejdi na lekciu 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 2.2: VIAC MAZACÍCH PRÍKAZOV
+
+
+ ** Napísanie príkazu d$ zma¾e znaky do konca riadku **
+
+1. Stlaè <ESC> aby si bol bezpeène v normálnom móde.
+
+2. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou --->.
+
+3. Presuò kurzor na koniec správnej vety (ZA prvú bodku).
+
+4. Napí¹ d$ aby sa zmazali znaky do konca riadku.
+
+---> Niekto napísal koniec tohto riadku dvakrát. koniec tohot riadku dvakrát.
+
+
+5. Prejdi na lekciu 2.3 pre pochopenie toho èo sa stalo.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 2.3: ROZ©IROVACIE PRÍKAZY A OBJEKTY
+
+
+ Formát mazacieho príkazu d je nasledovný:
+
+ [èíslo] d objekt ALEBO d [èíslo] objekt
+ Kde:
+ èíslo - udáva koµko krát sa príkaz vykoná (voliteµné, implicitne=1)
+ d - je príkaz pre mazanie
+ objekt - udáva na èom sa príkaz vykonáva (vypísané ni¾¹ie)
+
+ Krátky výpis objektov:
+ w - od kurzora do konca slova, vrátanie medzier
+ e - od kurzora do konca slova, BEZ medzier
+ $ - od kurzora do konca riadku.
+
+POZNÁMKA: Ak stlaèí¹ klávesu objektu v normálnom móde bez príkazu, kurzor
+ sa presunie na miesto ¹pecifikované vo výpise objektov.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 2.4: VÝNIMKA V 'PRÍKAZOVOM OBJEKTE'
+
+
+ ** Napísanie príkazu dd zma¾e celý riadok. **
+
+Vzhµadom na frekvenciu mazania celého riadku, sa autori Vimu rozhodli,
+¾e bude jednoduch¹ie maza» celý riadok napísaním dvoch písmen d.
+
+1. Presuò kurzor na druhý riadok v texte na spodu.
+2. Napí¹ dd aby si zmazal riadok.
+3. Prejdi na ¹tvrtý riadok.
+4. Napí¹ 2dd (pametaj si èíslo-príkaz-objekt) aby si zmazal dva riadky.
+
+ 1) Ru¾e sú èervené,
+ 2) Blato je zábavné,
+ 3) Fialky sú modré,
+ 4) Mám auto,
+ 5) Hodinky ukazujú èas,
+ 6) Cukor je sladký,
+ 7) A to si ty.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 2.5: PRÍKAZ UNDO
+
+
+** Stlaè u pre vrátenie posledného príkazu, U pre úpravu celého riadku. **
+
+1. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou ---> a premiestni ho na
+ prvú chybu.
+2. Napí¹ x pre zmazanie prvého nechceného riadku.
+3. Teraz napí¹ u èím vrátí¹ spä» posledne vykonaný príkaz.
+4. Teraz oprav v¹etky chyby na riadku pou¾itím príkazu x .
+5. Teraz napí¹ veµké U èím vrátí¹ riadok do pôvodného stavu.
+6. Teraz napí¹ u niekoµko krát, èím vrátí¹ spä» príkaz U.
+7. Teraz napí¹ CTRL-R (dr¾ klávesu CTRL stlaèenú kým stláèa¹ R) niekoµko
+ krát, èím vrátí¹ spä» predtým vrátené príkazy (redo).
+
+---> Opprav chybby nna toomto riadku a zmeeò ich pommocou undo.
+
+ 8. Tieto príkazy sú èasto pou¾ívané. Teraz prejdi na zhrnutie lekcie 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 2 ZHRNUTIE
+
+
+ 1. Pre zmazanie znakov od kurzora do konca slova napí¹: dw
+
+ 2. Pre zmazanie znakov od kurzora do konca riadku napí¹: d$
+
+ 3. Pre zmazanie celého riadku napí¹: dd
+
+ 4. Formát pre píkaz v norálnom móde je:
+
+ [èíslo] príkaz objekt ALEBO príkaz [èíslo] objekt
+ kde:
+ èíslo - udáva koµko krát sa príkaz zopakuje
+ príkaz - udáva vykonávaný príkaz, ako napríklad d pre mazanie
+ objekt - udáva rozsah príkazu, ako napríklad w(slovo),
+ $ (do konca riadku), atï.
+
+ 5. Pre vrátenie spä» predo¹lej operácie napí¹: u (malé u)
+ Pre vrátenie v¹etkých úprav na riadku napí¹: U (veµké U)
+ Pre vrátenie vrátených úprav napí¹: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 3.1: PRÍKAZ VLO®I«
+
+
+ ** Napísanie príkazu p vlo¾í psledný výmaz za kurzor. **
+
+ 1. Presuò kurzor ni¾¹ie na prvý riadok textu.
+
+ 2. Napí¹ dd èím zma¾e¹ riadok a ulo¾í¹ ho do buffera editora Vim.
+
+ 3. Presuò kurzor vy¹¹ie tam, kam zmazaný riadok patrí.
+
+ 4. Ak napí¹e¹ v normálnom móde p zmazaný riadk sa vlo¾í.
+
+ 5. Zopakuj kroky 2 a¾ 4, kým riadky niesú v správnom poradí.
+
+ d) Tie¾ sa doká¾e¹ vzdeláva»?
+ b) Fialky sú modré,
+ c) Inteligencia sa vzdeláva,
+ a) Ru¾e sú èervené,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 3.2: PRÍKAZ NAHRADENIA
+
+
+ ** Napísaním r a znaku sa nahradí znak na mieste kurzora. **
+
+ 1. Presuò kurzor ni¾¹ie na prví riadok textu oznaèeného znaèkou --->.
+
+ 2. Presuò kurzor na zaèiatok prvej chyby.
+
+ 3. napí¹ r a potom znak, ktorý nahradí chybu.
+
+ 4. Zopakuj kroky 2 a 3, kým prvý riadok nieje správny.
+
+---> Kaï bol tento riasok píaaný, niekro stla¹il nesprábne klávesy!
+---> Keï bol tento riadok písaný, niekto stlaèil nesprávne klávesy!
+
+ 5. Teraz prejdi na lekciu 3.2.
+
+POZNÁMKA: Pamätaj si, ¾e nauèi» sa mô¾e¹ len pou¾ívanim, nie pamätaním.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 3.3. PRÍKAZ ÚPRAVY
+
+
+ ** Ak chce¹ zmeni» èas» slova alebo celé slovo, napí¹ cw . **
+
+ 1. Presuò kurzor ni¾¹ie na prvý riadok oznaèený znaèkou --->.
+
+ 2. Umiestni kurzor na písmeno o v slove rosfpl.
+
+ 3. Napí¹ cw a oprav slovo (v tomto prípade napí¹ 'iadok'.)
+
+ 4. Stlaè <ESC> a prejdi na ïal¹iu chybu (prvý znak, ktorý treba zmeni».)
+
+ 5. Zopakuj kroky 3 a 4, kým prvá veta nieje rovnaká ako druhá.
+
+---> Tento rosfpl má niekoµko skic, ktoré je pirewvbí zmeni» piy»uèán príkazu.
+---> Tento riadok má niekoµko slov, ktoré je potrebné zmeni» pou¾itím príkazu.
+
+Poznámka, ¾e cw nielen nahrádza slovo, ale »a aj premiestní do vkladania.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 3.4: VIAC ZMIEN POU®ITÍM c
+
+
+ ** Príkaz pre úpravy sa pou¾íva s rovnakými objektami ako pre mazanie **
+
+ 1. Príkaz pre úpravy pracuje rovnako ako pre mazanie. Formát je:
+
+ [èíslo] c objekt ALEBO c [èíslo] objekt
+
+ 2. Objekty sú rovnaké, ako napríklad w (slovo), $ (koniec riadku), atï.
+
+ 3. Presuò kurzor ni¾¹ie na prvý riadok oznaèený znaèkou --->.
+
+ 4. Presuò kurzor na prvú chybu.
+
+ 5. napí¹ c$ aby si mohol upravi» zvy¹ok riadku podµa druhého
+ a stlaè <ESC>.
+
+---> Koniec tohto riadku potrebuje pomoc, aby bol ako druhy.
+---> Koniec tohto riadku potrebuje opravi» pou¾itím príkazu c$ .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 3 ZHRNUTIE
+
+
+ 1. Na vlo¾enie textu, ktorý u¾ bol zmazaný, napí¹ p . To vlo¾í zmazaný
+ text ZA kurzor (ak bol riadok zmazaný prejde na riadok pod kurzorom).
+
+ 2. Pre naradenie znaku na mieste kurzora, napí¹ r a potom znak, ktorý
+ nahradí pôvodný znak.
+
+ 3. Príkaz na upravenie umo¾òuje zmeni» ¹pecifikovaný objekt od kurzora
+ a¾ po koniec objektu. napr. Napí¹ cw èím zmní¹ text od pozície
+ kurzora do konca slova, c$ zmení text do konca riadku.
+
+ 4. Format pre nahradenie je:
+
+ [èíslo] c objekt ALEBO c [èíslo] objekt
+
+
+Teraz prejdi na nalsedujúcu lekciu.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 4.1: POZÍCIA A STATUS SÚBORU
+
+
+ ** Stlaè CTRL-g pre zobrazenie svojej pozície v súbore a statusu súboru.
+ Stlaè SHIFT-G pre prechod na riadok v súbore. **
+
+ Poznámka: Preèítaj si celú túto lekciu skôr ako zaène¹ vykonáva» kroky!!
+
+ 1. Dr¾ stlaèenú klávesu Ctrl a stlaè g . Na spodu obrazovky sa zobrazí
+ stavový riadok s názvom súboru a riadkom na ktorom práve si. Zapamätaj
+ si si èíslo riadku pre krok 3.
+
+ 2. Stlaè Shift-G èím sa dostane¹ na spodok súboru.
+
+ 3. Napí¹ èíslo riadku na ktorom si sa nachádzal a stlaè Shift-G. To »a
+ vráti na riadok, na ktorom si prvý krát stlaèil Ctrl-g.
+ (Keï pí¹e¹ èísla, tieto sa nezobrazujú na obrazovke.)
+
+ 4. Ak sa cítí¹ schopný vykona» teto kroky, vykonaj kroky 1 a¾ 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 4.2: PRÍKAZ VYH¥ADÁVANIA
+
+
+ ** Napí¹ / nasledované re»azcom pre vyhµadanie príslu¹ného re»azca. **
+
+ 1. Napí¹ znak / v normálnom móde. Poznámka, ¾e tento znak sa spolu
+ s kurzorom zobrazí v dolnej èasti obrazovky ako s : príkazom.
+
+ 2. Teraz napí¹ 'errroor' <ENTER>. To je slovo, ktoré chce¹ vyhµada».
+
+ 3. Pre vyhµadanie ïal¹ieho výskytu rovnakého re»azca, stlaè jednoducho n.
+ Pre vyhµadanie ïal¹ieho výskytu rovnakého re»azca opaèným smerom,
+ napí¹ Shift-N.
+
+ 4. Ak chce¹ vyhµada» re»azec v spätnom smere, pou¾í príkaz ? miesto
+ príkazu /.
+
+ ---> Keï vyhµadávanie dosiahne koniec tohto súboru, bude pokraèova» na
+ zaèiatku.
+
+ "errroor" nie je spôsob ako nahradi» error; errroor je error.
+
+POZNÁMKA: Keï vyhµadávanie dosiahne koniec súboru, bude pokraèova» na jeho
+ zaèiatku.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 4.3: VYH¥ADÁVANIE ZODPOVEDAJÚCICH ZÁTAVORIEK
+
+
+ ** Napí¹ % pre vyhµadanie príslu¹ného znaku ),], alebo } . **
+
+ 1. Premiestni kurzor na hocaký zo znakov (, [, alebo { v riadku ni¾¹ie
+ oznaèeného znaèkou --->.
+
+ 2. Teraz napí¹ znak % .
+
+ 3. Kurzor sa premiestni na zodpovedajúcu zátvorku.
+
+ 4. Napí¹ % pre presun kurzoru spä» na otvárajúcu zátvorku.
+
+---> Toto ( je testovací riadok s ('s, ['s ] a {'s } v riadku. ))
+
+Poznámka: Toto je veµmi výhodné pou¾í» pri ladení programu s chýbajúcimi
+ uzatvárajúcimi zátvorkami.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 4.4: SPOSOB AKO ZMENI« CHYBY
+
+
+ ** Napí¹ :s/starý/nový/g pre nahradenie slova 'starý' za slovo 'nový'. **
+
+ 1. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou --->.
+
+ 2. Napí¹ :s/thee/the <ENTER> . Poznamka, ¾e tento príkaz zmení len prvý
+ výskyt v riadku.
+
+ 3. Teraz napí¹ :s/thee/the/g èo znamená celkové nahradenie v riadku.
+ Toto nahradí v¹etky výskyty v riadku.
+
+---> Thee best time to see thee flowers in thee spring.
+
+ 4. Pre zmenu v¹etkých výskytov daného re»azca medzi dvomi ridakami,
+ napí¹ :#,#s/starý/nový/g kde #,# sú èísla dvoch riadkov.
+ napí¹ :%s/starý/nový/g pre zmenu v¹etkých výskytov v celom riadku
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 4 ZHRNUTIE
+
+
+ 1. Ctrl-g vypí¹e tvoju pozíciu v súbore a status súboru.
+ Shift-g »a premiestni na koniec riadku. Èíslo riadku nasledované
+ Shift-g »a presunie na dané èíslo riadku.
+
+ 2. Napísanie / nasledované re»azcom vyhµadá re»azec smerom DOPREDU.
+ Napísanie ? nasledované re»azcom vyhµada re»azec smerom DOZADU.
+ Napísanie n po vyhµadávaní, vyhµadá nasledujúci výskyt re»azca
+ v rovnakom smere, prièom Shift-N vyhµadá v opaènom smere.
+
+ 3. Napísanie % keï kurzor je na (,),[,],{, alebo } nájde zodpovdajúcu
+ párú zátvorku.
+
+ 4. Pre nahradenie nového za prvý starý v riadku napí¹ :s/nový/starý
+ Pre nahradenie nového za v¹etky staré v riadku napí¹ :s/nový/starý/g
+ Pre nahradenie re»azcov medzi dvoma riadkami 3 napí¹ :#,#/nový/starý/g
+ Pre nahradenie v¹etkých výskytov v súbore napí¹ :%s/starý/nový/g
+ Pre potvrdenie ka¾dého nahradenia pridaj 'c' :%s/nový/starý/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 5.1 AKO SPUSTI« VONKAJ©Í PRÍKAZ
+
+
+ ** Napí¹ príkaz :! nasledovaný vonkaj¹ím príkazom pre spustenie príkazu **
+
+ 1. Napí¹ obvyklý píkaz : ktorý nastaví kurzor na spodok obrazovky.
+ To umo¾ní napísa» príkaz.
+
+ 2. Teraz napí¹ ! (výkrièník). To umo¾ní spusti» hociaký vonkaj¹í príkaz
+ z príkazového riadku.
+
+ 3. Ako príklad napí¹ ls za ! a stlaè <ENTER>. Tento príkaz
+ zobrazí obsah tvojho adresára rovnako ako na príkazovom riadku.
+ Alebo pou¾i :!dir ak ls nefunguje.
+
+Poznámka: Takto je mo¾né spusti» hociaký vonkaj¹í príkaz.
+Poznámka: V¹etky príkazy : musia by» dokonèené stlaèením <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 5.2: VIAC O UKLADANÍ SÚBOROV
+
+
+ ** Pre ulo¾enie zmien v súbore, napí¹ :w FILENAME. **
+
+ 1. Napí¹ :!dir alebo :!ls pre výpis aktuálneho adresára.
+ U¾ vie¹, ¾e musí¹ za týmto stlaèi» <ENTER> .
+
+ 2. Vyber názov súboru, ktorý E©TE neexistuje.
+
+ 3. Teraz napí¹: :w TEST (kde TEST je názov vybratého súboru.)
+
+ 4. To ulo¾í celý súbor (Vim Tutor) pod názovm TEST.
+ Pre overenie napí¹ :!dir , èím zobrazí¹ obsah adresára.
+
+Poznámka: ¾e ak ukonèí¹ prácu s editorom Vim a znovu ho spustí¹ s názvom
+ súboru TEST, súbor bude kópia výuky, keï si ho ulo¾il.
+
+ 5. Teraz odstráò súbor napísaním (MS-DOS): :!del TEST
+ alebo (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 5.3 VÝBEROVÝ PRÍKAZ PRE ULO®ENIE
+
+
+ ** Pre ulo¾enie èasti súboru, napí¹ :#,# w FILENAME **
+
+ 1. Znovu napí¹ :!dir alebo :!ls pre zobrazenie obsahu aktuálneho
+ adresára a vyber vhodný súbor ako TEST.
+
+ 2. Presuò kurzor na vrch tejto strany a napí¹ Ctrl-g pre vyhµadanie èísla
+ tohto riadku. PAMETAJ SI TOTO ÈÍSLO!
+
+ 3. Teraz prejdi na spodok strany a napí¹ Ctrl-g znovu. ZAPAMETAJ SI ÈÍSLO
+ AJ TOHTO RIADKU!
+
+ 4. Pre ulo¾enie LEN èasti súboru, napí¹ :#,# w TEST kde #,# sú dve èísla
+ zapamätaných riadkov (vrch, spodok) a TEST je názov súboru.
+
+ 5. Znova sa pozri, èi tam ten súbor je pomocou príkazu :!dir ale
+ NEODSTRAÒUJ ho.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 5.4: VÝBER A ZLUÈOVANIE SÚBOROV
+
+
+ ** Pre vlo¾enie obsahu súboru, napí¹ :r FILENAME **
+
+ 1. Napí¹ :!dir aby si sa presvedèil, ¾e súbor TEST stále existuje.
+
+ 2. Presuò kurzor na vrch tejto strany.
+
+POZNÁMKA: Po vykonaní kroku 3 uvidí¹ Lekciu 5.3. Potom sa presuò dole
+ na túto lekciu.
+
+ 3. Teraz vlo¾ súbor TEST pou¾itím príkazu :r TEST kde TEST je názov
+ súboru.
+
+POZNÁMKA: Súbor, ktorý si vlo¾il sa vlo¾í od miesta, kde sa nachádza kurzor.
+
+ 4. Pre kontrolu vlo¾enia súboru, presuò kurzor spä» a v¹imni si, ¾e teraz
+ má¹ dve kópie lekcie 5.3, originál a súborovú verziu.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 5 ZHRNUTIE
+
+
+ 1. :!príkaz spustí vonkaj¹í príkaz.
+
+ Niektoré vyu¾iteµné príklady sú:
+ (MS_DOS) (UNIX)
+ :!dir :!ls - zobrazí obsah adresára
+ :!del FILENAME :!rm FILENAME - odstráni súbor FILENAME
+
+ 2. :w FILENAME ulo¾í aktuálny súbor na disk pod menom FILENAME.
+
+ 3. :#,#w FILENAME ulo¾í riadky od # do # do súboru FILENAME.
+
+ 4. :r FILENAME vyberie z disku súbor FILENAME a vlo¾í ho do aktuálneho
+ súboru za pozíciou kurzora.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 6.1: PRÍKAZ OTVORI«
+
+
+** Napí¹ o pre vlo¾enie riadku pod kurzor a prepnutie do vkladacieho módu **
+
+ 1. Presuò kurzor ni¾¹ie na riadok oznaèený znaèkou --->.
+
+ 2. Napí¹ o (malé písmeno) pre vlo¾enie èistého riadku pod kurzorm
+ a prepnutie do vkladacieho módu.
+
+ 3. Teraz skopíruj riadok oznaèený ---> a stlaè <ESC> pre ukonèenie
+ vkladacieho módu.
+
+---> Po napísaní o sa kurzor premiestní na vlo¾ený riadok do vkladacieho
+ módu.
+
+ 4. Pre otvorenie riadku nad kurzorom, jednotucho napí¹ veµké O , namiesto
+ malého o. Vyskú¹aj si to na nasledujúcom riadku.
+Vlo¾ riadok nad týmto napísaním Shift-O, keï kurzor je na tomto riadku.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 6.2: PRÍKAZ PRIDA«
+
+
+ ** Napí¹ a pre vlo¾enie textu ZA kurzor. **
+
+ 1. Presuò kurzor ni¾¹ie na koniec prvého riadku oznaèeného znaèkou --->
+ napísaním $ v normálnom móde.
+
+ 2. Napí¹ a (malé písmeno) pre pridanie textu ZA znakom na mieste
+ kurzora. (Veµké A pridá na koniec riadku.)
+
+Poznámka: Toto obchádza písanie i , posledný znak, text na vlo¾enie, <ESC>,
+ kurzor doprava, a nakoniec, x , na pridávanie na koniec riadku!
+
+ 3. Teraz dokonèi prvý riadok. Poznámka, ¾e pridávanie je vlastne rovnaké
+ ako vkladací mód, okrem miesta, kde sa text vkladá.
+
+---> Tento riadok ti dovoµuje nácvik
+---> Tento riadok ti dovoµuje nácvik pridávania textu na koniec riadku.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 6.3: INÝ SPOSOB NAHRADZOVANIA
+
+
+ ** Napí¹ veµké R pre nahradenie viac ako jedného znaku. **
+
+ 1. Presuò kurzor ni¾¹ie na prvý riadok oznaèený znaèkou --->.
+
+ 2. Premiestni kurzor na zaèiatok prvého slova, ktoré je odli¹né od druhého
+ riadku oznaèeného ---> (slovo 'posledná').
+
+ 3. Teraz napí¹ R a nahraï zvy¹ok textu na prvom riadku písaním cez starý
+ text tak, aby prvý riadok bol rovnaký ako druhý.
+
+---> Na úpravu prvého riadku do tvaru ako je posledný na strane pou¾i klávesy.
+---> Na úpravu prvého riadku do tavru ako je druhý, napí¹ R a nový text.
+
+ 4. Poznámka, ¾e ak stlaèí¹ <ESC> pre ukonèenie, v¹etok nezmenený text
+ zostane.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lekcia 6.4: NASTAVENIE MO®NOSTÍ
+
+
+** Nastav mo¾nosti, tak¾e vyhµadávanie alebo nahradzovanie ignoruje
+ rozli¹ovanie **
+
+
+ 1. Vyhµadaj re»azec 'ignore' napísaním:
+ /ignore
+ Zopakuj vyhµadávanie niekoµko krát stlaèením klávesy n
+
+ 2. Nastav mo¾nos» 'ic' (Ignore case) napísaním príkazu:
+ :set ic
+
+ 3. Teraz vyhµadaj re»azec 'ingore' znova stlaèením klávesy: n
+ Zopakuj vyhµadávanie niekoµko krát stlaèením klávesy n
+
+ 4. Nastav mo¾nos»i 'hlsearch' a 'incsearch':
+ :set hls is
+
+ 5. Teraz spusti vyhµadávací príkaz znovu, a pozri èo sa stalo:
+ /ignore
+
+ 6. Na odstránenie zvýraznenia výrazov napí¹:
+ :nohlsearch
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 6 ZHRNUTIE
+
+
+ 1. Napísaním o sa otvorí nový riadok pod kurzorom a premiestni sa kurzor
+ na vlo¾ený riadok do vkladacieho módu.
+ napísaním veµkého O sa otvorí riadok nad aktuálnym riadkom s kurzorom.
+
+ 2. Napí¹ a pre vkladanie textu ZA znak na pozícii kurzoru.
+ Napísaním veµkého A sa text automatický pridáva na koniec riadku.
+
+ 3. Napísanie veµkého R prepne do nahradzovacieho módu, kým nieje
+ stlaèené <ESC> pre ukonèenie nahradzovacieho módu.
+
+ 4. Napísanie ":set xxx" nastaví mo¾nos» "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 7: PRÍKAZY ON-LINE NÁPOVEDY
+
+
+ ** Pou¾ívaj on-line systém nápovedy **
+
+ Vim má obsiahly on-line systém nápovedy. Pre od¹tartovanie, vyskú¹aj jeden
+ z týchto troch:
+ - stlaè klávesu <HELP> (ak nejakú má¹)
+ - stlaè klávesu <F1> (ak nejakú má¹)
+ - napí¹ :help <ENTER>
+
+ Napí¹ :q <ENTER> èím zatvorí¹ okno nápovedy.
+
+ Mô¾e¹ nájs» help ku hociakej téme pridaním argumentu ku príkazu ":help".
+ Vyskú¹aj tieto (nezabudni stlaèi» <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKCIA 8: VYTVORENIE ©TARTOVACIEHO SKRIPTU
+
+ ** Zapni funkcie editora Vim **
+
+ Vim má omnoho viac funkcii ne¾ Vi, ale veè¹ina z nich je implicitne
+ vypnutá. Pre pou¾ívanie viac Vim funkcii vytvor "vimrc" súbor.
+
+ 1. Zaèni editova» "vimrc" súbor, to závisí na pou¾itom systéme:
+ :edit ~/.vimrc pre Unix
+ :edit $VIM/_vimrc pre MS-Windows
+
+ 2. Teraz si preèítaj text príkladu "vimrc" súboru:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Ulo¾ súbor:
+
+ :write
+
+ Pri nasledujúcom ¹tarte editora Vim sa pou¾ije zvýrazòovanie syntaxe.
+ Do "vimrc" súboru mô¾e¹ prida» v¹etky svoje uprednostòované nastavenia.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Toto vymedzuje výuku Vimu. Toto je urèené pre strucný prehµad o editore
+ Vim, úplne postaèujúce pre µahké a obstojné pou¾ívanie tohto editora.
+ Táto výuka je ïaleko od kompletnosti, preto¾e Vim má omnoho viacej príkazov.
+ Ako ïal¹ie si preèítaj u¾ívatµský manuál: ":help user-manual".
+
+ Pre ïal¹ie èítanie a ¹túdium je odporúèaná kniha:
+ Vim - Vi Improved - od Steve Oualline
+ Vydavateµ: New Riders
+ Prvá kniha urèená pre Vim. ©peciálne vhodná pre zaèiatoèníkov.
+ Obsahuje mno¾stvo príkladov a obrázkov.
+ Pozri na http://iccf-holland.org/click5.html
+
+ Táto kniha je star¹ia a je viac o Vi ako o Vim, ale je tie¾ odporúèaná:
+ Learning the Vi Editor - od Linda Lamb
+ Vydavateµ: O'Reilly & Associates Inc.
+ Je to dobrá kniha pre získanie vedomostí o práci s editorom Vi.
+ ©ieste vydanie obsahuje tie¾ informácie o editore Vim.
+
+ Táto výuka bola napísaná autormi Michael C. Pierce a Robert K. Ware,
+ Colorado School of Mines s pou¾itím my¹lienok dodanými od Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ Modifikované pre Vim od Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Preklad do Slovenèiny: ¥ubo¹ Èelko
+ e-mail: celbos@inmail.sk
+ Last Change: 2004 Apr 29
+ Encoding: iso8859-2
diff --git a/runtime/tutor/tutor.sv b/runtime/tutor/tutor.sv
new file mode 100644
index 000000000..2ff3eb8b3
--- /dev/null
+++ b/runtime/tutor/tutor.sv
@@ -0,0 +1,830 @@
+===============================================================================
+= V ä l k o m m e n t i l l h a n d l e d n i n g e n i V i m - Ver. 1.5 =
+===============================================================================
+
+ Vim är en väldigt kraftfull redigerare som har många kommandon, alltför
+ många att förklara i en handledning som denna. Den här handledningen är
+ gjord för att förklara tillräckligt många kommandon så att du enkelt ska
+ kunna använda Vim som en redigerare för alla ändamål.
+
+ Den beräknade tiden för att slutföra denna handledning är 25-30 minuter,
+ beroende på hur mycket tid som läggs ned på experimentering.
+
+ Kommandona i lektionerna kommer att modifiera texten. Gör en kopia av den
+ här filen att öva på (om du startade "vimtutor är det här redan en kopia).
+
+ Det är viktigt att komma ihåg att den här handledningen är konstruerad
+ att lära vid användning. Det betyder att du måste köra kommandona för att
+ lära dig dem ordentligt. Om du bara läser texten så kommer du att glömma
+ kommandona!
+
+ Försäkra dig nu om att din Caps-Lock tangent INTE är aktiv och tryck på
+ j-tangenten tillräckligt många gången för att förflytta markören så att
+ Lektion 1.1 fyller skärmen skärmen helt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.1: FLYTTA MARKÖREN
+
+
+ ** För att flytta markören, tryck på tangenterna h,j,k,l som indikerat. **
+ ^
+ k Tips:
+ < h l > h-tangenten är till vänster och flyttar till vänster.
+ j l-tangenten är till höger och flyttar till höger.
+ v j-tangenten ser ut som en pil ned.
+ 1. Flytta runt markören på skärmen tills du känner dig bekväm.
+
+ 2. Håll ned tangenten pil ned (j) tills att den repeterar.
+---> Nu vet du hur du tar dig till nästa lektion.
+
+ 3. Flytta till Lektion 1.2, med hjälp av ned tangenten.
+
+Notera: Om du är osäker på någonting du skrev, tryck <ESC> för att placera dig
+ dig i Normal-läge. Skriv sedan om kommandot.
+
+Notera: Piltangenterna borde också fungera. Men om du använder hjkl så kommer
+ du att kunna flytta omkring mycket snabbare, när du väl vant dig vid
+ det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.2: STARTA OCH AVSLUTA VIM
+
+
+ !! NOTERA: Innan du utför någon av punkterna nedan, läs hela lektionen!!
+
+ 1. Tryck <ESC>-tangenten (för att se till att du är i Normal-läge).
+
+ 2. Skriv: :q! <ENTER>.
+
+---> Detta avslutar redigeraren UTAN att spara några ändringar du gjort.
+ Om du vill spara ändringarna och avsluta skriv:
+ :wq <ENTER>
+
+ 3. När du ser skal-prompten, skriv kommandot som tog dig in i den här
+ handledningen. Det kan vara: vimtutor <ENTER>
+ Normalt vill du använda: vim tutor <ENTER>
+
+---> 'vim' betyder öppna redigeraren vim, 'tutor' är filen du vill redigera.
+
+ 4. Om du har memorerat dessa steg och känner dig självsäker, kör då stegen
+ 1 till 3 för att avsluta och starta om redigeraren. Flytta sedan ned
+ markören till Lektion 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.3: TEXT REDIGERING - BORTTAGNING
+
+
+** När du är i Normal-läge tryck x för att ta bort tecknet under markören. **
+
+ 1. Flytta markören till raden nedan med markeringen --->.
+
+ 2. För att rätta felen, flytta markören tills den står på tecknet som ska
+ tas bort. fix the errors, move the cursor until it is on top of the
+
+ 3. Tryck på x-tangenten för att ta bort det felaktiga tecknet.
+
+ 4. Upprepa steg 2 till 4 tills meningen är korrekt.
+
+---> Kkon hoppadee övverr måånen.
+
+ 5. Nu när raden är korrekt, gå till Lektion 1.4.
+
+NOTERA: När du går igenom den här handledningen, försök inte att memorera, lär
+ genom användning.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.4: TEXT REDIGERING - INFOGNING
+
+
+ ** När du är i Normal-läge tryck i för att infoga text. **
+
+ 1. Flytta markören till den första raden nedan med markeringen --->.
+
+ 2. För att göra den första raden likadan som den andra, flytta markören till
+ det första tecknet EFTER där text ska infogas.
+
+ 3. Tryck i och skriv in det som saknas.
+
+ 4. När du rättat ett fel tryck <ESC> för att återgå till Normal-läge.
+ Upprepa steg 2 till 4 för att rätta meningen.
+
+---> Det sakns här .
+---> Det saknas lite text från den här raden.
+
+ 5. När du känner dig bekväm med att infoga text, gå till sammanfattningen
+ nedan.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 1 SAMMANFATTNING
+
+
+ 1. Markören flyttas genom att använda piltangenterna eller hjkl-tangenterna.
+ h (vänster) j (ned) k (upp) l (höger)
+
+ 2. För att starta Vim (från %-prompten) skriv: vim FILNAMN <ENTER>
+
+ 3. För att avsluta Vim skriv: <ESC> :q! <ENTER> för att kasta ändringar.
+ ELLER skriv: <ESC> :wq <ENTER> för att spara ändringar.
+
+ 4. För att ta bort tecknet under markören i Normal-läge skriv: x
+
+ 5. För att infoga text vid markören i Normal-läge skriv:
+ i skriv in text <ESC>
+
+NOTERA: Genom att trycka <ESC> kommer du att placeras i Normal-läge eller
+ avbryta ett delvis färdigskrivet kommando.
+
+Fortsätt nu med Lektion 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.1: BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv dw för att radera till slutet av ett ord. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till början av ett ord som måste raderas.
+
+ 4. Skriv dw för att radera ordet.
+
+ NOTERA: Bokstäverna dw kommer att synas på den sista raden på skärmen när
+ du skriver dem. Om du skrev något fel, tryck <ESC> och börja om.
+
+---> Det är ett några ord roliga att som inte hör hemma i den här meningen.
+
+ 5. Upprepa stegen 3 och 4 tills meningen är korrekt och gå till Lektion 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.2: FLER BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv d$ för att radera till slutet på raden. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till slutet på den rätta raden (EFTER den första . ).
+
+ 4. Skriv d$ för att radera till slutet på raden.
+
+---> Någon skrev slutet på den här raden två gånger. den här raden två gånger.
+
+
+ 5. Gå vidare till Lektion 2.3 för att förstå vad det är som händer.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: KOMMANDON OCH OBJEKT
+
+
+ Syntaxen för d raderingskommandot är följande:
+
+ [nummer] d objekt ELLER d [nummer] objekt
+ Var:
+ nummer - är antalet upprepningar av kommandot (valfritt, standard=1).
+ d - är kommandot för att radera.
+ objekt - är vad kommandot kommer att operera på (listade nedan).
+
+ En kort lista över objekt:
+ w - från markören till slutet av ordet, inklusive blanksteget.
+ e - från markören till slutet av ordet, EJ inklusive blanksteget.
+ $ - från markören till slutet på raden.
+
+NOTERA: För den äventyrslystne, genom att bara trycka på objektet i
+ Normal-läge (utan kommando) så kommer markören att flyttas som
+ angivet i objektlistan.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.4: ETT UNDANTAG TILL 'KOMMANDO-OBJEKT'
+
+
+ ** Skriv dd för att radera hela raden. **
+
+ På grund av hur vanligt det är att ta bort hela rader, valde upphovsmannen
+ till Vi att det skulle vara enklare att bara trycka d två gånger i rad för
+ att ta bort en rad.
+
+ 1. Flytta markören till den andra raden i frasen nedan.
+ 2. Skriv dd för att radera raden.
+ 3. Flytta nu till den fjärde raden.
+ 4. Skriv 2dd (kom ihåg: nummer-kommando-objekt) för att radera de två
+ raderna.
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.5: ÅNGRA-KOMMANDOT
+
+
+** Skriv u för att ångra det senaste kommandona, U för att fixa en hel rad. **
+
+ 1. Flytta markören till slutet av raden nedan markerad ---> och placera den
+ på det första felet.
+ 2. Skriv x för att radera den första felaktiga tecknet.
+ 3. Skriv nu u för att ångra det senaste körda kommandot.
+ 4. Rätta den här gången alla felen på raden med x-kommandot.
+ 5. Skriv nu U för att återställa raden till dess ursprungliga utseende.
+ 6. Skriv nu u några gånger för att ångra U och tidigare kommandon.
+ 7. Tryck nu CTRL-R (håll inne CTRL samtidigt som du trycker R) några gånger
+ för att upprepa kommandona (ångra ångringarna).
+
+---> Fiixa felen ppå deen häär meningen och återskapa dem med ångra.
+
+ 8. Det här är väldigt användbara kommandon. Gå nu vidare till
+ Lektion 2 Sammanfattning.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 2 SAMMANFATTNING
+
+
+ 1. För att radera från markören till slutet av ett ord skriv: dw
+
+ 2. För att radera från markören till slutet av en rad skriv: d$
+
+ 3. För att radera en hel rad skriv: dd
+
+ 4. Syntaxen för ett kommando i Normal-läge är:
+
+ [nummer] kommando objekt ELLER kommando [nummer] objekt
+ där:
+ nummer - är hur många gånger kommandot kommandot ska repeteras
+ kommando - är vad som ska göras, t.ex. d för att radera
+ objekt - är vad kommandot ska operera på, som t.ex. w (ord),
+ $ (till slutet av raden), etc.
+
+ 5. För att ångra tidigare kommandon, skriv: u (litet u)
+ För att ångra alla tidigare ändringar på en rad skriv: U (stort U)
+ För att ångra ångringar tryck: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.1: KLISTRA IN-KOMMANDOT
+
+
+ ** Skriv p för att klistra in den senaste raderingen efter markören. **
+
+ 1. Flytta markören till den första raden i listan nedan.
+
+ 2. Skriv dd för att radera raden och lagra den i Vims buffert.
+
+ 3. Flytta markören till raden OVANFÖR där den raderade raden borde vara.
+
+ 4. När du är i Normal-läge, skriv p för att byta ut raden.
+
+ 5. Repetera stegen 2 till 4 för att klistra in alla rader i rätt ordning.
+
+ d) Kan du lära dig också?
+ b) Violetter är blå,
+ c) Intelligens fås genom lärdom,
+ a) Rosor är röda,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: ERSÄTT-KOMMANDOT
+
+
+ ** Skriv r och ett tecken för att ersätta tecknet under markören. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Flytta markören så att den står på det första felet.
+
+ 3. Skriv r och sedan det tecken som borde ersätta felet.
+
+ 4. Repetera steg 2 och 3 tills den första raden är korrekt.
+
+---> När drn här ruden skrevs, trickte någon på fil knappar!
+---> När den här raden skrevs, tryckte någon på fel knappar!
+
+ 5. Gå nu vidare till Lektion 3.2.
+
+NOTERA: Kom ihåg att du skall lära dig genom användning, inte genom memorering.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.3: ÄNDRA-KOMMANDOT
+
+
+ ** För att ändra en del eller ett helt ord, skriv cw . **
+
+ 1. Flytta markören till den första redan nedan markerad --->.
+
+ 2. Placera markören på d i rdrtn.
+
+ 3. Skriv cw och det rätta ordet (i det här fallet, skriv "aden".)
+
+ 4. Tryck <ESC> och flytta markören till nästa fel (det första tecknet som
+ ska ändras.)
+
+ 5. Repetera steg 3 och 4 tills den första raden är likadan som den andra.
+
+---> Den här rdrtn har några otf som brhotrt ändras mrf ändra-komjendit.
+---> Den här raden har några ord som behöver ändras med ändra-kommandot.
+
+Notera att cw inte bara ändrar ordet, utan även placerar dig i infogningsläge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.4: FLER ÄNDRINGAR MED c
+
+
+ ** Ändra-kommandot används på samma objekt som radera. **
+
+ 1. Ändra-kommandot fungerar på samma sätt som radera. Syntaxen är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+ 2. Objekten är också de samma, som t.ex. w (ord), $ (slutet av raden), etc.
+
+ 3. Flytta till den första raden nedan markerad -->.
+
+ 4. Flytta markören till det första felet.
+
+ 5. Skriv c$ för att göra resten av raden likadan som den andra och tryck
+ <ESC>.
+
+---> Slutet på den här raden behöver hjälp med att få den att likna den andra.
+---> Slutet på den här raden behöver rättas till med c$-kommandot.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 3 SAMMANFATTNING
+
+
+ 1. För att ersätta text som redan har blivit raderad, skriv p .
+ Detta klistrar in den raderade texten EFTER markören (om en rad raderades
+ kommer den att hamna på raden under markören.
+
+ 2. För att ersätta tecknet under markören, skriv r och sedan tecknet som
+ kommer att ersätta orginalet.
+
+ 3. Ändra-kommandot låter dig ändra det angivna objektet från markören till
+ slutet på objektet. eg. Skriv cw för att ändra från markören till slutet
+ på ordet, c$ för att ändra till slutet på en rad.
+
+ 4. Syntaxen för ändra-kommandot är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+Gå nu till nästa lektion.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.1: POSITION OCH FILSTATUS
+
+
+ ** Tryck CTRL-g för att visa din position i filen och filstatusen.
+ Tryck SHIFT-G för att flytta till en rad i filen. **
+
+ Notera: Läsa hela den lektion innan du utför något av stegen!!
+
+ 1. Håll ned Ctrl-tangenten och tryck g . En statusrad med filnamn och raden
+ du befinner dig på kommer att synas. Kom ihåg radnummret till Steg 3.
+
+ 2. Tryck shift-G för att flytta markören till slutet på filen.
+
+ 3. Skriv in nummret på raden du var på och tryck sedan shift-G. Detta kommer
+ att ta dig tillbaka till raden du var på när du först tryckte Ctrl-g.
+ (När du skriver in nummren, kommer de INTE att visas på skärmen.)
+
+ 4. Om du känner dig säker på det här, utför steg 1 till 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.2: SÖK-KOMMANDOT
+
+
+ ** Skriv / följt av en fras för att söka efter frasen. **
+
+ 1. I Normal-läge skriv /-tecknet. Notera att det och markören blir synlig
+ längst ned på skärmen precis som med :-kommandot.
+
+ 2. Skriv nu "feeel" <ENTER>. Det här är ordet du vill söka efter.
+
+ 3. För att söka efter samma fras igen, tryck helt enkelt n .
+ För att söka efter samma fras igen i motsatt riktning, tryck Shift-N .
+
+ 4. Om du vill söka efter en fras bakåt i filen, använd kommandot ? istället
+ för /.
+
+---> "feeel" är inte rätt sätt att stava fel: feeel är ett fel.
+
+Notera: När sökningen når slutet på filen kommer den att fortsätta vid början.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.3: SÖKNING EFTER MATCHANDE PARENTESER
+
+
+ ** Skriv % för att hitta en matchande ),], or } . **
+
+ 1. Placera markören på någon av (, [, or { på raden nedan markerad --->.
+
+ 2. Skriv nu %-tecknet.
+
+ 3. Markören borde vara på den matchande parentesen eller hakparentesen.
+
+ 4. Skriv % för att flytta markören tillbaka till den första hakparentesen
+ (med matchning).
+
+---> Det ( här är en testrad med (, [ ] och { } i den. ))
+
+Notera: Det här är väldigt användbart vid avlusning av ett program med icke
+ matchande parenteser!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.4: ETT SÄTT ATT ÄNDRA FEL
+
+
+ ** Skriv :s/gammalt/nytt/g för att ersätta "gammalt" med "nytt". **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv :s/denn/den <ENTER> . Notera att det här kommandot bara ändrar den
+ första förekomsten på raden.
+
+ 3. Skriv nu :s/denn/den/g vilket betyder ersätt globalt på raden.
+ Det ändrar alla förekomster på raden.
+
+---> denn bästa tiden att se blommor blomma är denn på våren.
+
+ 4. För att ändra alla förekomster av en teckensträng mellan två rader,
+ skriv :#,#s/gammalt/nytt/g där #,# är de två radernas radnummer.
+ Skriv :%s/gammtl/nytt/g för att ändra varje förekomst i hela filen.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 4 SAMMANFATTNING
+
+
+ 1. Ctrl-g visar din position i filen och filstatusen.
+ Shift-G flyttar till slutet av filen. Ett radnummer följt Shift-G
+ flyttar till det radnummret.
+
+ 2. Skriver man / följt av en fras söks det FRAMMÅT efter frasen.
+ Skriver man ? följt av en fras söks det BAKÅT efter frasen.
+ Efter en sökning skriv n för att hitta nästa förekomst i samma riktning
+ eller Shift-N för att söka i den motsatta riktningen.
+
+ 3. Skriver man % när markören är på ett (,),[,],{, eller } hittas dess
+ matchande par.
+
+ 4. För att ersätta den första gammalt med nytt på en rad skriv :s/gammlt/nytt
+ För att ersätta alla gammlt med nytt på en rad skriv :s/gammlt/nytt/g
+ För att ersätta fraser mellan rad # och rad # skriv :#,#s/gammlt/nytt/g
+ För att ersätta alla förekomster i filen skriv :%s/gammlt/nytt/g
+ För att bekräfta varje gång lägg till "c" :%s/gammlt/nytt/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.1: HUR MAN KÖR ETT EXTERNT KOMMANDO
+
+
+ ** Skriv :! följt av ett externt kommando för att köra det kommandot. **
+
+ 1. Skriv det välbekanta kommandot : för att placera markören längst ned
+ på skärmen på skärmen. Detta låter dig skriva in ett kommando.
+
+ 2. Skriv nu ! (utropstecken). Detta låter dig köra ett godtyckligt externt
+ skalkommando.
+
+ 3. Som ett exempel skriv ls efter ! och tryck sedan <ENTER>. Detta kommer
+ att visa dig en listning av din katalog, precis som om du kört det vid
+ skalprompten. Använd :!dir om ls inte fungerar.
+
+Notera: Det är möjligt att köra vilket externt kommando som helst på det här
+ sättet.
+
+Notera: Alla :-kommandon måste avslutas med att trycka på <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.2: MER OM ATT SPARA FILER
+
+
+ ** För att spara ändringar gjorda i en fil, skriv :w FILNAMN. **
+
+ 1. Skriv :!dir eller :!ls för att få en listning av din katalog.
+ Du vet redan att du måste trycka <ENTER> efter det här.
+
+ 2. Välj ett filnamn som inte redan existerar, som t.ex. TEST.
+
+ 3. Skriv nu: :w TEST (där TEST är filnamnet du valt.)
+
+ 4. Det här sparar hela filen (Vim handledningen) under namnet TEST.
+ För att verifiera detta, skriv :!dir igen för att se din katalog
+
+Notera: Om du skulle avsluta Vim och sedan öppna igen med filnamnet TEST så
+ skulle filen vara en exakt kopia av handledningen när du sparade den.
+
+ 5. Ta nu bort filen genom att skriva (MS-DOS): :!del TEST
+ eller (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.3: ETT SELEKTIVT SPARA-KOMMANDO
+
+
+ ** För att spara en del av en fil, skriv :#,# w FILNAMN **
+
+ 1. Ännu en gång, skriv :!dir eller :!ls för att få en listning av din
+ katalog och välj ett passande filnamn som t.ex. TEST.
+
+ 2. Flytta markören högst upp på den här sidan och tryck Ctrl-g för att få
+ reda på radnumret på den raden. KOM IHÅG DET NUMMRET!
+
+ 3. Flytta nu längst ned på sidan och skriv Ctrl-g igen.
+ KOM IHÅG DET RADNUMMRET OCKSÅ!
+
+ 4. För att BARA spara en sektion till en fil, skriv :#,# w TEST
+ där #,# är de två nummren du kom ihåg (toppen, botten) och TEST är
+ ditt filnamn.
+
+ 5. Ännu en gång, kolla så att filen är där med :!dir men radera den INTE.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.4: TA EMOT OCH FÖRENA FILER
+
+
+ ** För att infoga innehållet av en fil, skriv :r FILNAMN **
+
+ 1. Skriv :!dir för att försäkra dig om att TEST-filen från tidigare
+ fortfarande är kvar.
+
+ 2. Placera markören högst upp på den här sidan.
+
+NOTERA: Efter att du kört Steg 3 kommer du att se Lektion 5.3.
+ Flytta då NED till den här lektionen igen.
+
+ 3. Ta nu emot din TEST-fil med kommandot :r TEST där TEST är namnet på
+ filen.
+
+NOTERA: Filen du tar emot placeras där markören är placerad.
+
+ 4. För att verifiera att filen togs emot, gå tillbaka och notera att det nu
+ finns två kopior av Lektion 5.3, orginalet och filversionen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 5 SAMMANFATTNING
+
+
+ 1. :!kommando kör ett externt kommando.
+
+ Några användbara exempel är:
+ (MS-DOS) (Unix)
+ :!dir :!ls - visar en kataloglistning.
+ :!del FILNAMN :!rm FILNAMN - tar bort filen FILNAMN.
+
+ 2. :w FILNAMN sparar den aktuella Vim-filen med namnet FILNAMN.
+
+ 3. :#,#w FILNAMN sparar raderna # till # i filen FILNAMN.
+
+ 4. :r FILNAMN tar emot filen FILNAMN och infogar den i den aktuella filen
+ efter markören.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.1: ÖPPNA-KOMMANDOT
+
+
+ ** Skriv o för att öppna en rad under markören och placera dig i
+ Infoga-läge. **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv o (litet o) för att öppna upp en rad NEDANFÖR markören och placera
+ dig i Infoga-mode.
+
+ 3. Kopiera nu raden markerad ---> och tryck <ESC> för att avsluta
+ Infoga-läget.
+
+---> Efter du skrivit o placerad markören på en öppen rad i Infoga-läge.
+
+ 4. För att öppna upp en rad OVANFÖR markören, skriv ett stort O , istället
+ för ett litet o. Pröva detta på raden nedan.
+Öppna upp en rad ovanför denna genom att trycka Shift-O när markören står här.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.2: LÄGG TILL-KOMMANDOT
+
+
+ ** Skriv a för att infoga text EFTER markören. **
+
+ 1. Flytta markören till slutet av den första raden nedan markerad ---> genom
+ att skriv $ i Normal-läge.
+
+ 2. Skriv ett a (litet a) för att lägga till text EFTER tecknet under
+ markören. (Stort A lägger till i slutet av raden.)
+
+Notera: Detta undviker att behöva skriva i , det sista tecknet, texten att
+ infoga, <ESC>, högerpil, och slutligen, x, bara för att lägga till i
+ slutet på en rad!
+
+ 3. Gör nu färdigt den första raden. Notera också att lägga till är likadant
+ som Infoga-läge, enda skillnaden är positionen där texten blir infogad.
+
+---> Här kan du träna
+---> Här kan du träna på att lägga till text i slutet på en rad.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.3: EN ANNAN VERSION AV ERSÄTT
+
+
+ ** Skriv ett stort R för att ersätta fler än ett tecken. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Placera markören vid början av det första ordet som är annorlunda jämfört
+ med den andra raden markerad ---> (ordet "sista").
+
+ 3. Skriv nu R och ersätt resten av texten på den första raden genom att
+ skriva över den gamla texten så att den första raden blir likadan som
+ den andra.
+
+---> För att få den första raden lika som den sista, använd tangenterna.
+---> För att få den första raden lika som den andra, skriv R och den nya texten.
+
+ 4. Notera att när du trycker <ESC> för att avsluta, så blir eventuell
+ oförändrad text kvar.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.4: SÄTT FLAGGOR
+
+ ** Sätt en flagga så att en sökning eller ersättning ignorerar storlek **
+
+ 1. Sök efter "ignore" genom att skriva:
+ /ignore
+ Repetera flera gånger genom att trycka på n-tangenten
+
+ 2. Sätt 'ic' (Ignore Case) flaggan genom att skriva:
+ :set ic
+
+ 3. Sök nu efter "ignore" igen genom att trycka: n
+ Repeat search several more times by hitting the n key
+
+ 4. Sätt 'hlsearch' and 'incsearch' flaggorna:
+ :set hls is
+
+ 5. Skriv nu in sök-kommandot igen, och se vad som händer:
+ /ignore
+
+ 6. För att ta bort framhävningen av träffar, skriv
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 6 SAMMANFATTNING
+
+
+ 1. Genom att skriva o öpnnas en rad NEDANFÖR markören och markören placeras
+ på den öppna raden i Infoga-läge.
+ Genom att skriva ett stort O öppnas raden OVANFÖR raden som markören är
+ på.
+
+ 2. Skriv ett a för att infoga text EFTER tecknet som markören står på.
+ Genom att skriva ett stort A läggs text automatiskt till i slutet på
+ raden.
+
+ 3. Genom att skriva ett stort R hamnar du i Ersätt-läge till <ESC> trycks
+ för att avsluta.
+
+ 4. Genom att skriva ":set xxx" sätts flaggan "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 7: ON-LINE HJÄLP-KOMMANDON
+
+
+ ** Använd on-line hjälpsystemet **
+
+ Vim har ett omfattande on-line hjälpsystem. För att komma igång pröva ett av
+ dessa tre:
+ - tryck <HELP> tangenten (om du har någon)
+ - tryck <F1> tangenten (om du har någon)
+ - skriv :help <ENTER>
+
+ Skriv :q <ENTER> för att stränga hjälpfönstret.
+
+ Du kan hitta hjälp om nästan allting, genom att ge ett argument till
+ ":help" kommandot. Pröva dessa (glöm inte att trycka <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 8: SKAPA ETT UPPSTARTSSKRIPT
+
+ ** Aktivera Vim- funktioner **
+
+ Vim har många fler funktioner än Vi, men de flesta av dem är inaktiverade som
+ standard. För att börja använda fler funktioner måste du skapa en "vimrc"-fil.
+
+ 1. Börja redigera "vimrc"-filen, detta beror på ditt system:
+ :edit ~/.vimrc för Unix
+ :edit $VIM/_vimrc för MS-Windows
+
+ 2. Läs nu texten i exempel "vimrc"-filen:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Spara filen med:
+
+ :write
+
+ Nästa gång du startar Vim kommer den att använda syntaxframhävning.
+ Du kan lägga till alla inställningar du föredrar till den här "vimrc"-filen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Detta avslutar handledningen i Vim. Den var avsedd att ge en kort översikt av
+ redigeraren Vim, bara tillräckligt för att du ska kunna använda redigeraren
+ relativt enkelt. Den är långt ifrån komplett eftersom Vim har många många fler
+ kommandon. Läs användarmanualen härnäst: ":help user-manual".
+
+ För vidare läsning rekommenderas den här boken:
+ Vim - Vi Improved - av Steve Oualline
+ Förlag: New Riders
+ Den första boken som är endast behandlar Vim. Speciellt användbar för
+ nybörjare. Det finns många exempel och bilder.
+ Se http://iccf-holland.org/click5.html
+
+ Den här boken är äldre och behandlar mer Vi än Vim, men rekommenderas också:
+ Learning the Vi Editor - av Linda Lamb
+ Förlag: O'Reilly & Associates Inc.
+ Det är en bra bok för att lära sig nästan allt som du vill kunna göra med Vi.
+ Den sjätte upplagan inkluderar också information om Vim.
+
+ Den här handledningen är skriven av Michael C. Pierce och Robert K. Ware,
+ Colorado School of Mines med idéer från Charles Smith,
+ Colorado State University. E-post: bware@mines.colorado.edu.
+
+ Modifierad för Vim av Bram Moolenaar.
+ Översatt av Johan Svedberg <johan@svedberg.pp.se>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.vim b/runtime/tutor/tutor.vim
new file mode 100644
index 000000000..0edbf61b8
--- /dev/null
+++ b/runtime/tutor/tutor.vim
@@ -0,0 +1,119 @@
+" Vim tutor support file
+" Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+" Last Change: 2004 Jun 03
+
+" This small source file is used for detecting if a translation of the
+" tutor file exist, i.e., a tutor.xx file, where xx is the language.
+" If the translation does not exist, or no extension is given,
+" it defaults to the english version.
+
+" It is invoked by the vimtutor shell script.
+
+" 1. Build the extension of the file, if any:
+let s:ext = ""
+if strlen($xx) > 1
+ let s:ext = "." . $xx
+else
+ let s:lang = ""
+ if exists("v:lang") && v:lang != "C"
+ let s:lang = v:lang
+ elseif strlen($LANG) > 0 && $LANG != "C"
+ let s:lang = $LANG
+ endif
+ if s:lang != ""
+ " Remove "@euro" (ignoring case), it may be at the end
+ let s:lang = substitute(s:lang, '\c@euro', '', '')
+ " On MS-Windows it may be German_Germany.1252 or Polish_Poland.1250. How
+ " about other languages?
+ if s:lang =~ "German"
+ let s:ext = ".de"
+ elseif s:lang =~ "Polish"
+ let s:ext = ".pl"
+ elseif s:lang =~ "Slovak"
+ let s:ext = ".sk"
+ else
+ let s:ext = "." . strpart(s:lang, 0, 2)
+ endif
+ endif
+endif
+
+" The japanese tutor is available in two encodings, guess which one to use
+" The "sjis" one is actually "cp932", it doesn't matter for this text.
+if s:ext =~? '\.ja'
+ if &enc =~ "euc"
+ let s:ext = ".ja.euc"
+ elseif &enc =~ "utf-8$"
+ let s:ext = ".ja.utf-8"
+ else
+ let s:ext = ".ja.sjis"
+ endif
+endif
+
+" The korean tutor is available in two encodings, guess which one to use
+if s:ext =~? '\.ko'
+ if &enc =~ "utf-8$"
+ let s:ext = ".ko.utf-8"
+ else
+ let s:ext = ".ko.euc"
+ endif
+endif
+
+" The Chinese tutor is available in two 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
+if s:ext =~? '\.zh'
+ if &enc =~ 'big5\|cp950'
+ let s:ext = ".zh.big5"
+ else
+ let s:ext = ".zh.euc"
+ endif
+endif
+
+" The Polish tutor is available in two encodings, guess which one to use.
+if s:ext =~? '\.pl' && &enc =~ 1250
+ let s:ext = ".pl.cp1250"
+endif
+
+" The Greek tutor is available in two encodings, guess which one to use
+if s:ext =~? '\.gr' && &enc =~ 737
+ let s:ext = ".gr.cp737"
+endif
+
+" The Slovak tutor is available in two encodings, guess which one to use
+if s:ext =~? '\.sk' && &enc =~ 1250
+ let s:ext = ".sk.cp1250"
+endif
+
+" The Russian tutor is available in two encodings, guess which one to use.
+" This segment is from the above lines and modified by
+" Alexey I. Froloff <raorn@altlinux.org> for Russian vim tutorial
+if s:ext =~? '\.ru' && &enc =~ 1251
+ let s:ext = ".ru.cp1251"
+endif
+
+" Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch).
+if s:ext =~? '\.ge'
+ let s:ext = ".de"
+endif
+
+if s:ext =~? '\.en'
+ let s:ext = ""
+endif
+
+" 2. Build the name of the file:
+let s:tutorfile = "/tutor/tutor"
+let s:tutorxx = $VIMRUNTIME . s:tutorfile . s:ext
+
+" 3. Finding the file:
+if filereadable(s:tutorxx)
+ let $TUTOR = s:tutorxx
+else
+ let $TUTOR = $VIMRUNTIME . s:tutorfile
+ echo "The file " . s:tutorxx . " does not exist.\n"
+ echo "Copying English version: " . $TUTOR
+ 4sleep
+endif
+
+" 4. Making the copy and exiting Vim:
+e $TUTOR
+wq! $TUTORCOPY
diff --git a/runtime/tutor/tutor.zh.big5 b/runtime/tutor/tutor.zh.big5
new file mode 100644
index 000000000..4daad6470
--- /dev/null
+++ b/runtime/tutor/tutor.zh.big5
@@ -0,0 +1,852 @@
+===============================================================================
+= Åw ªï ¾\ Ū ¡m V I M ±Ð µ{ ¡n ¢w¢w ª©¥» 1.5 =
+===============================================================================
+ vim ¬O¤@­Ó¨ã¦³«Ü¦h©R¥Oªº¥\¯à«D±`±j¤jªº½s¿è¾¹¡C­­¤_½g´T¡A¦b¥»±Ðµ{·í¤¤
+ ¤£´N¸Ô²Ó¤¶²Ð¤F¡C¥»±Ðµ{ªº³]­p¥Ø¼Ð¬OÁ¿­z¤@¨Ç¥²­nªº°ò¥»©R¥O¡A¦Ó´x´¤¦n³o
+ ¨Ç©R¥O¡A±z´N¯à°÷«Ü®e©ö±Nvim·í§@¤@­Ó³q¥Îªº¸U¯à½s¿è¾¹¨Ó¨Ï¥Î¤F¡C
+
+ §¹¦¨¥»±Ðµ{ªº¤º®e¤j¬ù»Ý­n25-30¤ÀÄÁ¡A¨ú¨M¤_±z°V½mªº®É¶¡¡C
+
+ ¨C¤@¸`ªº©R¥O¾Þ§@±N·|§ó§ï¥»¤å¡C±ÀÂ˱z´_¨î¥»¤åªº¤@­Ó°Æ¥»¡AµM«á¦b°Æ¥»¤W
+ ¶i¦æ°V½m(¦pªG±z¬O³q¹L"vimtutor"¨Ó±Ò°Ê±Ðµ{ªº¡A¨º»ò¥»¤å´N¤w¸g¬O°Æ¥»¤F)¡C
+
+ ¤Á°O¤@ÂI¡J¥»±Ðµ{ªº³]­p«ä¸ô¬O¦b¨Ï¥Î¤¤¶i¦æ¾Ç²ßªº¡C¤]´N¬O»¡¡A±z»Ý­n³q¹L
+ °õ¦æ©R¥O¨Ó¾Ç²ß¥¦­Ì¥»¨­ªº¥¿½T¥Îªk¡C¦pªG±z¥u¬O¾\Ū¦Ó¤£¾Þ§@¡A¨º»ò±z¥i¯à
+ ·|«Ü§Ö¿ò§Ñ³o¨Ç©R¥Oªº¡I
+
+ ¦n¤F¡A²{¦b½Ð½T©w±zªºShift-Lock(¤j¤p¼gÂê©wÁä)ÁÙ¨S¦³«ö¤U¡AµM«á«öÁä½L¤W
+ ªº¦r¥ÀÁä j ¨¬°÷¦hªº¦¸¼Æ¨Ó²¾°Ê¥ú¼Ð¡Aª½¨ì²Ä¤@¸`ªº¤º®e¯à°÷§¹¥þ¥Rº¡«Ì¹õ¡C
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤@Á¿²Ä¤@¸`¡J²¾°Ê¥ú¼Ð
+
+
+ ¡°¡° ­n²¾°Ê¥ú¼Ð¡A½Ð¨Ì·Ó»¡©ú¤À§O«ö¤U h¡Bj¡Bk¡Bl Áä¡C ¡°¡°
+
+ ^
+ k ´£¥Ü¡J h ªºÁä¦ì¤_¥ªÃä¡A¨C¦¸«ö¤U´N·|¦V¥ª²¾°Ê¡C
+ < h l > l ªºÁä¦ì¤_¥kÃä¡A¨C¦¸«ö¤U´N·|¦V¥k²¾°Ê¡C
+ j j Áä¬Ý°_¨Ó«Ü¶H¤@¤ä¦yºÝ¤è¦V´Â¤Uªº½bÀY¡C
+ v
+
+ 1. ½ÐÀH·N¦b«Ì¹õ¤º²¾°Ê¥ú¼Ð¡Aª½¦Ü±zı±oµÎªA¬°¤î¡C
+
+ 2. «ö¤U¤U¦æÁä(j)¡Aª½¨ì¥X²{¥ú¼Ð­«´_¤U¦æ¡C
+
+---> ²{¦b±zÀ³¸Ó¤w¸g¾Ç·|¦p¦ó²¾°Ê¨ì¤U¤@Á¿§a¡C
+
+ 3. ²{¦b½Ð¨Ï¥Î¤U¦æÁä¡A±N¥ú¼Ð²¾°Ê¨ì²Ä¤GÁ¿¡C
+
+´£¥Ü¡J¦pªG±z¤£´±½T©w±z©Ò«ö¤Uªº¦r¥À¡A½Ð«ö¤U<ESC>Áä¦^¨ì¥¿±`(Normal)¼Ò¦¡¡C
+ µM«á¦A¦¸±qÁä½L¿é¤J±z·Q­nªº©R¥O¡C
+
+´£¥Ü¡J¥ú¼ÐÁäÀ³·í¤]¯à¥¿±`¤u§@ªº¡C¦ý¬O¨Ï¥ÎhjklÁä¡A¦b²ßºD¤§«á±z´N¯à°÷§Ö³t
+ ¦a¦b«Ì¹õ¤º¥|³B²¾°Ê¥ú¼Ð¤F¡C
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤@Á¿²Ä¤G¸`¡JVIMªº¶i¤J©M°h¥X
+
+
+ !! ¯S§O´£¥Ü¡J·q½Ð¾\Ū§¹¾ã¥»¤@¸`ªº¤º®e¡AµM«á¤~¯à°õ¦æ¥H¤U©ÒÁ¿¸Ñªº©R¥O¡C
+
+ 1. ½Ð«ö<ESC>Áä(³o¬O¬°¤F½T«O±z³B¦b¥¿±`¼Ò¦¡)¡C
+
+ 2. µM«á¿é¤J¡J :q! <¦^¨®>
+
+---> ³oºØ¤è¦¡ªº°h¥X½s¿è¾¹µ´¤£·|«O¦s±z¶i¤J½s¿è¾¹¥H¨Ó©Ò°µªº§ï°Ê¡C
+ ¦pªG±z·Q«O¦s§ó§ï¦A°h¥X¡A½Ð¿é¤J¡J
+ :wq <¦^¨®>
+
+ 3. ¦pªG±z¬Ý¨ì¤F©R¥O¦æ´£¥Ü²Å¡A½Ð¿é¤J¯à°÷±a±z¦^¨ì¥»±Ðµ{ªº©R¥O¡A¨º´N¬O¡J
+
+ vimtutor <¦^¨®>
+
+ ³q±`±¡ªp¤U±z¤]¥i¥H¥Î³oºØ¤è¦¡¡J
+
+ vim tutor <¦^¨®>
+
+---> ³o¸Ìªº 'vim' ªí¥Ü¶i¤Jvim½s¿è¾¹¡A¦Ó 'tutor'«h¬O±z·Ç³Æ­n½s¿èªº¤å¥ó¡C
+
+ 4. ¦pªG±z¦Û«H¤w¸g¨c¨c°O¦í¤F³o¨Ç¨BÆJªº¸Ü¡A½Ð±q¨BÆJ1°õ¦æ¨ì¨BÆJ3°h¥X¡AµM
+ «á¦A¦¸¶i¤J½s¿è¾¹¡C±µµÛ±N¥ú¼Ð²¾°Ê¨ì²Ä¤@Á¿²Ä¤T¸`¨ÓÄ~Äò§Ú­Ìªº±Ðµ{Á¿¸Ñ¡C
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤@Á¿²Ä¤T¸`¡J¤å¥»½s¿è¤§§R°£
+
+
+ ** ¦b¥¿±`(Normal)¼Ò¦¡¤U¡A¥i¥H«ö¤U x Áä¨Ó§R°£¥ú¼Ð©Ò¦b¦ì¸mªº¦r²Å¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡C
+
+ 2. ¬°¤F­×¥¿¿é¤J¿ù»~¡A½Ð±N¥ú¼Ð²¾¦Ü·Ç³Æ§R°£ªº¦r²Åªº¦ì¸m³B¡C
+
+ 3. µM«á«ö¤U x Áä±N¿ù»~¦r²Å§R°£±¼¡C
+
+ 4. ­«´_¨BÆJ2¨ì¨BÆJ4¡Aª½¨ì¥y¤l­×¥¿¬°¤î¡C
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+ 5. ¦n¤F¡A¸Ó¦æ¤w¸g­×¥¿¤F¡A¤U¤@¸`¤º®e¬O²Ä¤@Á¿²Ä¥|¸`¡C
+
+¯S§O´£¥Ü¡J¦b±zÂsÄý¥»±Ðµ{®É¡A¤£­n±j¦æ°O¾Ð¡C°O¦í¤@ÂI¡J¦b¨Ï¥Î¤¤¾Ç²ß¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤@Á¿²Ä¥|¸`¡J¤å¥»½s¿è¤§´¡¤J
+
+
+ ** ¦b¥¿±`¼Ò¦¡¤U¡A¥i¥H«ö¤U i Áä¨Ó´¡¤J¤å¥»¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ¡C
+
+ 2. ¬°¤F¨Ï±o²Ä¤@¦æ¤º®e¹p¦P¤_²Ä¤G¦æ¡A½Ð±N¥ú¼Ð²¾¦Ü¤å¥»²Ä¤@­Ó¦r²Å·Ç³Æ´¡¤J
+ ªº¦ì¸m¡C
+
+ 3. µM«á«ö¤U i Áä¡A±µµÛ¿é¤J¥²­nªº¤å¥»¦r²Å¡C
+
+ 4. ©Ò¦³¤å¥»³£­×¥¿§¹²¦¡A½Ð«ö¤U <ESC> Áäªð¦^¥¿±`¼Ò¦¡¡C
+ ­«´_¨BÆJ2¦Ü¨BÆJ4¥H«K­×¥¿¥y¤l¡C
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+ 5. ¦pªG±z¹ï¤å¥»´¡¤J¾Þ§@¤w¸g«Üº¡·N¡A½Ð±µµÛ¾\Ū¤U­±ªº¤pµ²¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤@Á¿¤pµ²
+
+
+ 1. ¥ú¼Ð¦b«Ì¹õ¤å¥»¤¤ªº²¾°Ê¬J¥i¥H¥Î½bÀYÁä¡A¤]¥i¥H¨Ï¥Î hjkl ¦r¥ÀÁä¡C
+ h (¥ª²¾) j (¤U¦æ) k (¤W¦æ) l (¥k²¾)
+
+ 2. ±ý¶i¤Jvim½s¿è¾¹(±q©R¥O¦æ´£¥Ü²Å)¡A½Ð¿é¤J¡Jvim ¤å¥ó¦W <¦^¨®>
+
+ 3. ±ý°h¥Xvim½s¿è¾¹¡A½Ð¿é¤J¥H¤U©R¥O©ñ±ó©Ò¦³­×§ï¡J
+
+ <ESC> :q! <¦^¨®>
+
+ ©ÎªÌ¿é¤J¥H¤U©R¥O«O¦s©Ò¦³­×§ï¡J
+
+ <ESC> :wq <¦^¨®>
+
+ 4. ¦b¥¿±`¼Ò¦¡¤U§R°£¥ú¼Ð©Ò¦b¦ì¸mªº¦r²Å¡A½Ð«ö¡J x
+
+ 5. ¦b¥¿±`¼Ò¦¡¤U­n¦b¥ú¼Ð©Ò¦b¦ì¸m¶}©l´¡¤J¤å¥»¡A½Ð«ö¡J
+
+ i ¿é¤J¥²­n¤å¥» <ESC>
+
+¯S§O´£¥Ü¡J«ö¤U <ESC> Áä·|±a±z¦^¨ì¥¿±`¼Ò¦¡©ÎªÌ¨ú®ø¤@­Ó¤£´Á±æ©ÎªÌ³¡¤À§¹¦¨
+ªº©R¥O¡C
+
+¦n¤F¡A²Ä¤@Á¿¨ì¦¹µ²§ô¡C¤U­±±µ¤U¨ÓÄ~Äò²Ä¤GÁ¿ªº¤º®e¡C
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿²Ä¤@¸`¡J§R°£Ãþ©R¥O
+
+
+ ** ¿é¤J dw ¥i¥H±q¥ú¼Ð³B§R°£¦Ü¤@­Ó³æ¦r/³æµüªº¥½§À¡C**
+
+ 1. ½Ð«ö¤U <ESC> Áä½T«O±z³B¤_¥¿±`¼Ò¦¡¡C
+
+ 2. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡C
+
+ 3. ½Ð±N¥ú¼Ð²¾¦Ü·Ç³Æ­n§R°£ªº³æµüªº¶}©l¡C
+
+ 4. ±µµÛ¿é¤J dw §R°£±¼¸Ó³æµü¡C
+
+ ¯S§O´£¥Ü¡J±z©Ò¿é¤Jªº dw ·|¦b±z¿é¤Jªº¦P®É¥X²{¦b«Ì¹õªº³Ì«á¤@¦æ¡C¦pªG±z¿é
+ ¤J¦³»~¡A½Ð«ö¤U <ESC> Áä¨ú®ø¡AµM«á­«·s¦A¨Ó¡C
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+ 5. ­«´_¨BÆJ3¦Ü¨BÆJ4¡Aª½¦Ü¥y¤l­×¥¿§¹²¦¡C±µµÛÄ~Äò²Ä¤GÁ¿²Ä¤G¸`¤º®e¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿²Ä¤G¸`¡J¨ä¥L§R°£Ãþ©R¥O
+
+
+ ** ¿é¤J d$ ±q·í«e¥ú¼Ð§R°£¨ì¦æ¥½¡C**
+
+ 1. ½Ð«ö¤U <ESC> Áä½T«O±z³B¤_¥¿±`¼Ò¦¡¡C
+
+ 2. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡C
+
+ 3. ½Ð±N¥ú¼Ð²¾°Ê¨ì¸Ó¦æªº§À³¡(¤]´N¬O¦b²Ä¤@­ÓÂI¸¹¡¥.¡¦«á­±)¡C
+
+ 4. µM«á¿é¤J d$ ±q¥ú¼Ð³B§R¦Ü·í«e¦æ§À³¡¡C
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+ 5. ½ÐÄ~Äò¾Ç²ß²Ä¤GÁ¿²Ä¤T¸`´Nª¾¹D¬O«ç»ò¦^¨Æ¤F¡C
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿²Ä¤T¸`¡JÃö¤_©R¥O©M¹ï¶H
+
+
+ §R°£©R¥O d ªº®æ¦¡¦p¤U¡J
+
+ [number] d object ©ÎªÌ d [number] object
+
+ ¨ä·N¦p¤U¡J
+ number - ¥Nªí°õ¦æ©R¥Oªº¦¸¼Æ(¥i¿ï¶µ¡A¯Ê¬Ù³]¸m¬° 1 )¡C
+ d - ¥Nªí§R°£¡C
+ object - ¥Nªí©R¥O©Ò­n¾Þ§@ªº¹ï¶H(¤U­±¦³¬ÛÃö¤¶²Ð)¡C
+
+ ¤@­Ó²µuªº¹ï¶H¦Cªí¡J
+ w - ±q·í«e¥ú¼Ð·í«e¦ì¸mª½¨ì³æ¦r/³æµü¥½§À¡A¥]¬AªÅ®æ¡C
+ e - ±q·í«e¥ú¼Ð·í«e¦ì¸mª½¨ì³æ¦r/³æµü¥½§À¡A¦ý¬O *¤£* ¥]¬AªÅ®æ¡C
+ $ - ±q·í«e¥ú¼Ð·í«e¦ì¸mª½¨ì·í«e¦æ¥½¡C
+
+¯S§O´£¥Ü¡J
+ ¹ï¤_«i¤_±´¯ÁªÌ¡A½Ð¦b¥¿±`¼Ò¦¡¤U­±¶È«ö¥Nªí¬ÛÀ³¹ï¶HªºÁä¦Ó¤£¨Ï¥Î©R¥O¡A«h
+ ±N¬Ý¨ì¥ú¼Ðªº²¾°Ê¥¿¦p¤W­±ªº¹ï¶H¦Cªí©Ò¥Nªíªº¤@¼Ë¡C
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿²Ä¥|¸`¡J¹ï¶H©R¥Oªº¯S®í±¡ªp
+
+
+ ** ¿é¤J dd ¥i¥H§R°£¾ã¤@­Ó·í«e¦æ¡C **
+
+ ų¤_¾ã¦æ§R°£ªº°ªÀW«×¡AVIM ªº³]­pªÌ¨M©w­n²¤Æ¾ã¦æ§R°£¡A¶È»Ý­n¦b¦P¤@¦æ¤W
+ À»¥´¨â¦¸ d ´N¥i¥H§R°£±¼¥ú¼Ð©Ò¦bªº¾ã¦æ¤F¡C
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±ªºµu¥y¬q¸¨¤¤ªº²Ä¤G¦æ¡C
+ 2. ¿é¤J dd §R°£¸Ó¦æ¡C
+ 3. µM«á²¾°Ê¨ì²Ä¥|¦æ¡C
+ 4. ±µµÛ¿é¤J 2dd (ÁÙ°O±o«e­±Á¿¹Lªº number-command-object ¶Ü¡H) §R°£¨â¦æ¡C
+
+ 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.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿²Ä¤­¸`¡JºM®øÃþ©R¥O
+
+
+ ** ¿é¤J u ¨ÓºM®ø³Ì«á°õ¦æªº©R¥O¡A¿é¤J U ¨Ó­×¥¿¾ã¦æ¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡A¨Ã±N¨ä¸m¤_²Ä¤@­Ó¿ù»~
+ ³B¡C
+ 2. ¿é¤J x §R°£²Ä¤@­Ó¤£·Q«O¯dªº¦r¥À¡C
+ 3. µM«á¿é¤J u ºM®ø³Ì«á°õ¦æªº(¤@¦¸)©R¥O¡C
+ 4. ³o¦¸­n¨Ï¥Î x ­×¥¿¥»¦æªº©Ò¦³¿ù»~¡C
+ 5. ²{¦b¿é¤J¤@­Ó¤j¼gªº U ¡A«ì´_¨ì¸Ó¦æªº­ì©lª¬ºA¡C
+ 6. ±µµÛ¦h¦¸¿é¤J u ¥HºM®ø U ¥H¤Î§ó«eªº©R¥O¡C
+ 7. µM«á¦h¦¸¿é¤J CTRL-R (¥ý«ö¤U CTRL Á䤣©ñ¶}¡A±µµÛ¿é¤J R Áä) ¡A³o¼Ë´N
+ ¥i¥H°õ¦æ«ì´_©R¥O¡A¤]´N¬OºM®ø±¼ºM®ø©R¥O¡C
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+ 8. ³o¨Ç³£¬O«D±`¦³¥Îªº©R¥O¡C¤U­±¬O²Ä¤GÁ¿ªº¤pµ²¤F¡C
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤GÁ¿¤pµ²
+
+
+ 1. ±ý±q·í«e¥ú¼Ð§R°£¦Ü³æ¦r/³æµü¥½§À¡A½Ð¿é¤J¡Jdw
+
+ 2. ±ý±q·í«e¥ú¼Ð§R°£¦Ü·í«e¦æ¥½§À¡A½Ð¿é¤J¡Jd$
+
+ 3. ±ý§R°£¾ã¦æ¡A½Ð¿é¤J¡Jdd
+
+ 4. ¦b¥¿±`¼Ò¦¡¤U¤@­Ó©R¥Oªº®æ¦¡¬O¡J
+
+ [number] command object ©ÎªÌ command [number] object
+ ¨ä·N¬O¡J
+ number - ¥Nªíªº¬O©R¥O°õ¦æªº¦¸¼Æ
+ command - ¥Nªí­n°µªº¨Æ±¡¡A¤ñ¦p d ¥Nªí§R°£
+ object - ¥Nªí­n¾Þ§@ªº¹ï¶H¡A¤ñ¦p w ¥Nªí³æ¦r/³æµü¡A$ ¥Nªí¨ì¦æ¥½µ¥µ¥¡C
+ $ (to the end of line), etc.
+
+ 5. ±ýºM®ø¥H«eªº¾Þ§@¡A½Ð¿é¤J¡Ju (¤p¼gªºu)
+ ±ýºM®ø¦b¤@¦æ¤¤©Ò°µªº§ï°Ê¡A½Ð¿é¤J¡JU (¤j¼gªºU)
+ ±ýºM®ø¥H«eªººM®ø©R¥O¡A«ì´_¥H«eªº¾Þ§@µ²ªG¡A½Ð¿é¤J¡JCTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤TÁ¿²Ä¤@¸`¡J¸m¤JÃþ©R¥O
+
+
+ ** ¿é¤J p ±N³Ì«á¤@¦¸§R°£ªº¤º®e¸m¤J¥ú¼Ð¤§«á **
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¥Ü­S¬q¸¨ªº­º¦æ¡C
+
+ 2. ¿é¤J dd ±N¸Ó¦æ§R°£¡A³o¼Ë·|±N¸Ó¦æ«O¦s¨ìvimªº½w¨R°Ï¤¤¡C
+
+ 3. ±µµÛ±N¥ú¼Ð²¾°Ê¨ì·Ç³Æ¸m¤Jªº¦ì¸mªº¤W¤è¡C°O¦í¡J¬O¤W¤è®@¡C
+
+ 4. µM«á¦b¥¿±`¼Ò¦¡¤U(<ESC>Áä¶i¤J)¡A¿é¤J p ±N¸Ó¦æÖ߶K¸m¤J¡C
+
+ 5. ­«´_¨BÆJ2¦Ü¨BÆJ4¡A±N©Ò¦³ªº¦æ¨Ì§Ç©ñ¸m¨ì¥¿½Tªº¦ì¸m¤W¡C
+
+ d) Can you learn too?
+ b) Violets are blue,
+ c) Intelligence is learned,
+ a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤TÁ¿²Ä¤G¸`¡J´À´«Ãþ©R¥O
+
+
+ ** ¿é¤J r ©M¤@­Ó¦r²Å´À´«¥ú¼Ð©Ò¦b¦ì¸mªº¦r²Å¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ¡C
+
+ 2. ½Ð²¾°Ê¥ú¼Ð¨ì²Ä¤@­Ó¿ù»~ªº¾A·í¦ì¸m¡C
+
+ 3. ±µµÛ¿é¤J r ¡A³o¼Ë´N¯à±N¿ù»~´À´«±¼¤F¡C
+
+ 4. ­«´_¨BÆJ2©M¨BÆJ3¡Aª½¨ì²Ä¤@¦æ¤w¸g­×§ï§¹²¦¡C
+
+---> Whan this lime was tuoed in, someone presswd some wrojg keys!
+---> When this line was typed in, someone pressed some wrong keys!
+
+ 5. µM«á§Ú­ÌÄ~Äò¾Ç®Õ²Ä¤TÁ¿²Ä¤T¸`¡C
+
+¯S§O´£¥Ü¡J¤Á°O±z­n¦b¨Ï¥Î¤¤¾Ç²ß¡A¦Ó¤£¬O¦b°O¾Ð¤¤¾Ç²ß¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤TÁ¿²Ä¤T¸`¡J§ó§ïÃþ©R¥O
+
+
+ ** ­n§ïÅܤ@­Ó³æ¦r/³æµüªº³¡¤À©ÎªÌ¥þ³¡¡A½Ð¿é¤J cw **
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ¡C
+
+ 2. ±µµÛ§â¥ú¼Ð©ñ¦b³æµü lubw ªº¦r¥À u ªº¦ì¸m¨º¸Ì¡C
+
+ 3. µM«á¿é¤J cw ´N¥i¥H­×¥¿¸Ó³æµü¤F(¦b¥»¨Ò³o¸Ì¬O¿é¤J ine ¡C)
+
+ 4. ³Ì«á«ö <ESC> Áä¡AµM«á¥ú¼Ð©w¦ì¨ì¤U¤@­Ó¿ù»~²Ä¤@­Ó·Ç³Æ§ó§ïªº¦r¥À³B¡C
+
+ 5. ­«´_¨BÆJ3©M¨BÆJ4¡Aª½¨ì²Ä¤@­Ó¥y¤l§¹¥þ¹p¦P²Ä¤G­Ó¥y¤l¡C
+
+---> 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.
+
+´£¥Ü¡J½Ðª`·N cw ©R¥O¤£¶È¶È¬O´À´«¤F¤@­Ó³æµü¡A¤]Åý±z¶i¤J¤å¥»´¡¤Jª¬ºA¤F¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤TÁ¿²Ä¥|¸`¡J¨Ï¥Îc«ü¥Oªº¨ä¥L§ó§ïÃþ©R¥O
+
+
+ ** §ó§ïÃþ«ü¥O¥i¥H¨Ï¥Î¦P§R°£Ãþ©R¥O©Ò¨Ï¥Îªº¹ï¶H°Ñ¼Æ¡C**
+
+ 1. §ó§ïÃþ«ü¥Oªº¤u§@¤è¦¡¸ò§R°£Ãþ©R¥O¬O¤@­Pªº¡C¾Þ§@®æ¦¡¬O¡J
+
+ [number] c object ©ÎªÌ c [number] object
+
+ 2. ¹ï¶H°Ñ¼Æ¤]¬O¤@¼Ëªº¡A¤ñ¦p w ¥Nªí³æ¦r/³æµü¡A$¥Nªí¦æ¥½µ¥µ¥¡C
+
+ 3. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ¡C
+
+ 4. ±µµÛ±N¥ú¼Ð²¾°Ê¨ì²Ä¤@­Ó¿ù»~³B¡C
+
+ 5. µM«á¿é¤J c$ ¨Ï±o¸Ó¦æ³Ñ¤Uªº³¡¤À§ó¥¿±o¦P²Ä¤G¦æ¤@¼Ë¡C³Ì«á«ö <ESC> Áä¡C
+
+---> 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.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤TÁ¿¤pµ²
+
+
+ 1. ­n­«·s¸m¤J¤w¸g§R°£ªº¤å¥»¤º®e¡A½Ð¿é¤J¤p¼g¦r¥À p¡C¸Ó¾Þ§@¥i¥H±N¤w§R°£
+ ªº¤å¥»¤º®e¸m¤_¥ú¼Ð¤§«á¡C¦pªG³Ì«á¤@¦¸§R°£ªº¬O¤@­Ó¾ã¦æ¡A¨º»ò¸Ó¦æ±N¸m
+ ¤_·í«e¥ú¼Ð©Ò¦b¦æªº¤U¤@¦æ¡C
+
+ 2. ­n´À´«¥ú¼Ð©Ò¦b¦ì¸mªº¦r²Å¡A½Ð¿é¤J¤p¼gªº r ©M­n´À´«±¼­ì¦ì¸m¦r²Åªº·s¦r
+ ²Å§Y¥i¡C
+
+ 3. §ó§ïÃþ©R¥O¤¹³\±z§ïÅÜ«ü©wªº¹ï¶H¡A±q·í«e¥ú¼Ð©Ò¦b¦ì¸mª½¨ì¹ï¶Hªº¥½§À¡C
+ ¤ñ¦p¿é¤J cw ¥i¥H´À´«·í«e¥ú¼Ð¨ì³æµüªº¥½§Àªº¤º®e¡F¿é¤J c$ ¥i¥H´À´«·í
+ «e¥ú¼Ð¨ì¦æ¥½ªº¤º®e¡C
+
+ 4. §ó§ïÃþ©R¥Oªº®æ¦¡¬O¡J
+
+ [number] c object ©ÎªÌ c [number] object
+
+¤U­±§Ú­ÌÄ~Äò¾Ç²ß¤U¤@Á¿¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¥|Á¿²Ä¤@¸`¡J©w¦ì¤Î¤å¥óª¬ºA
+
+
+ ** ¿é¤J CTRL-g Åã¥Ü·í«e½s¿è¤å¥ó¤¤·í«e¥ú¼Ð©Ò¦b¦æ¦ì¸m¥H¤Î¤å¥óª¬ºA«H®§¡C
+ ¿é¤J SHIFT-G «hª½±µ¸õÂà¨ì¤å¥ó¤¤ªº¬Y¤@«ü©w¦æ¡C**
+
+ ´£¥Ü¡J¤Á°O­n¥ý³qŪ¥»¸`¤º®e¡A¤§«á¤~¥i¥H°õ¦æ¥H¤U¨BÆJ!!!
+
+ 1. «ö¤U CTRL Á䤣©ñ¶}µM«á«ö g Áä¡CµM«á´N·|¬Ý¨ì­¶­±³Ì©³³¡¥X²{¤@­Óª¬ºA«H
+ ®§¦æ¡AÅã¥Üªº¤º®e¬O·í«e½s¿èªº¤å¥ó¦W©M¤å¥óªºÁ`¦æ¼Æ¡C½Ð°O¦í¨BÆJ3ªº¦æ¸¹¡C
+
+ 2. «ö¤U SHIFT-G Áä¥i¥H¨Ï±o·í«e¥ú¼Ðª½±µ¸õÂà¨ì¤å¥ó³Ì«á¤@¦æ¡C
+
+ 3. ¿é¤J±z´¿°±¯dªº¦æ¸¹¡AµM«á«ö¤U SHIFT-G¡C³o¼Ë´N¥i¥Hªð¦^¨ì±z²Ä¤@¦¸«ö¤U
+ CTRL-g ®É©Ò¦bªº¦æ¦n¤F¡Cª`·N¡J¿é¤J¦æ¸¹®É¡A¦æ¸¹¬O¤£·|¦b«Ì¹õ¤WÅã¥Ü¥X¨Ó
+ ªº¡C
+
+ 4. ¦pªGÄ@·N¡A±z¥i¥HÄ~Äò°õ¦æ¨BÆJ1¦Ü¨BÆJ¤T¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¥|Á¿²Ä¤G¸`¡J·j¯ÁÃþ©R¥O
+
+
+ ** ¿é¤J / ¥H¤Î§ÀÀHªº¦r²Å¦ê¥i¥H¥Î¥H¦b·í«e¤å¥ó¤¤¬d§ä¸Ó¦r²Å¦ê¡C**
+
+ 1. ¦b¥¿±`¼Ò¦¡¤U¿é¤J / ¦r²Å¡C±z¦¹®É·|ª`·N¨ì¸Ó¦r²Å©M¥ú¼Ð³£·|¥X²{¦b«Ì¹õ©³
+ ³¡¡A³o¸ò : ©R¥O¬O¤@¼Ëªº¡C
+
+ 2. ±µµÛ¿é¤J errroor <¦^¨®>¡C¨º­Óerrroor´N¬O±z­n¬d§äªº¦r²Å¦ê¡C
+
+ 3. ­n¬d§ä¦P¤W¤@¦¸ªº¦r²Å¦ê¡A¥u»Ý­n«ö n Áä¡C­n¦V¬Û¤Ï¤è¦V¬d§ä¦P¤W¤@¦¸ªº¦r
+ ²Å¦ê¡A½Ð¿é¤J Shift-N §Y¥i¡C
+
+ 4. ¦pªG±z·Q°f¦V¬d§ä¦r²Å¦ê¡A½Ð¨Ï¥Î ? ¥N´À / ¶i¦æ¡C
+
+---> 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.
+
+ ´£¥Ü¡J¦pªG¬d§ä¤w¸g¨ì¹F¤å¥ó¥½§À¡A¬d§ä·|¦Û°Ê±q¤å¥óÀY³¡Ä~Äò¬d§ä¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¥|Á¿²Ä¤T¸`¡J°t¹ï¬A¸¹ªº¬d§ä
+
+
+ ** «ö % ¥i¥H¬d§ä°t¹ïªº¬A¸¹ )¡B]¡B}¡C**
+
+ 1. §â¥ú¼Ð©ñ¦b¥»¸`¤U­±¼Ð°O¦³ --> ¨º¤@¦æ¤¤ªº¥ô¦ó¤@­Ó (¡B[ ©Î { ³B¡C
+
+ 2. ±µµÛ«ö % ¦r²Å¡C
+
+ 3. ¦¹®É¥ú¼Ðªº¦ì¸mÀ³·í¬O¦b°t¹ïªº¬A¸¹³B¡C
+
+ 4. ¦A¦¸«ö % ´N¥i¥H¸õ¦^°t¹ïªº²Ä¤@­Ó¬A¸¹³B¡C
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+´£¥Ü¡J¦bµ{§Ç½Õ¸Õ®É¡A³o­Ó¥\¯à¥Î¨Ó¬d§ä¤£°t¹ïªº¬A¸¹¬O«Ü¦³¥Îªº¡C
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¥|Á¿²Ä¥|¸`¡J­×¥¿¿ù»~ªº¤èªk¤§¤@
+
+
+ ** ¿é¤J :s/old/new/g ¥i¥H´À´« old ¬° new¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡C
+
+ 2. ¿é¤J :s/thee/the <¦^¨®> ¡C½Ðª`·N¸Ó©R¥O¥u§ïÅÜ¥ú¼Ð©Ò¦b¦æªº²Ä¤@­Ó¤Ç°t
+ ¦ê¡C
+
+ 3. ¿é¤J :s/thee/the/g «h¬O´À´«¥þ¦æªº¤Ç°t¦ê¡C
+
+---> the best time to see thee flowers is in thee spring.
+
+ 4. ­n´À´«¨â¦æ¤§¶¡¥X²{ªº¨C­Ó¤Ç°t¦ê¡A½Ð¿é¤J :#,#s/old/new/g (#,#¥Nªíªº¬O
+ ¨â¦æªº¦æ¸¹)¡C¿é¤J :%s/old/new/g «h¬O´À´«¾ã­Ó¤å¥ó¤¤ªº¨C­Ó¤Ç°t¦ê¡C
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¥|Á¿¤pµ²
+
+
+ 1. Ctrl-g ¥Î¤_Åã¥Ü·í«e¥ú¼Ð©Ò¦b¦ì¸m©M¤å¥óª¬ºA«H®§¡CShift-G ¥Î¤_±N¥ú¼Ð¸õ
+ Âà¦Ü¤å¥ó³Ì«á¤@¦æ¡C¥ýºV¤J¤@­Ó¦æ¸¹µM«á«ö Shift-G «h¬O±N¥ú¼Ð²¾°Ê¦Ü¸Ó¦æ
+ ¸¹¥Nªíªº¦æ¡C
+
+ 2. ¿é¤J / µM«áºòÀH¤@­Ó¦r²Å¦ê¬O«h¬O¦b·í«e©Ò½s¿èªº¤åÀɤ¤¦V«á¬d§ä¸Ó¦r²Å¦ê¡C
+ ¿é¤J°Ý¸¹ ? µM«áºòÀH¤@­Ó¦r²Å¦ê¬O«h¬O¦b·í«e©Ò½s¿èªº¤åÀɤ¤¦V«e¬d§ä¸Ó¦r
+ ²Å¦ê¡C§¹¦¨¤@¦¸¬d§ä¤§«á«ö n Áä«h¬O­«´_¤W¤@¦¸ªº©R¥O¡A¥i¦b¦P¤@¤è¦V¤W¬d
+ §ä¤U¤@­Ó¦r²Å¦ê©Ò¦b¡F©ÎªÌ«ö Shift-N ¦V¬Û¤Ï¤è¦V¬d§ä¤U¸Ó¦r²Å¦ê©Ò¦b¡C
+
+ 3. ¦pªG¥ú¼Ð·í«e¦ì¸m¬O¬A¸¹(¡B)¡B[¡B]¡B{¡B}¡A«ö % ¥i¥H±N¥ú¼Ð²¾°Ê¨ì°t¹ïªº
+ ¬A¸¹¤W¡C
+
+ 4. ¦b¤@¦æ¤º´À´«ÀY¤@­Ó¦r²Å¦ê old ¬°·sªº¦r²Å¦ê new¡A½Ð¿é¤J :s/old/new
+ ¦b¤@¦æ¤º´À´«©Ò¦³ªº¦r²Å¦ê old ¬°·sªº¦r²Å¦ê new¡A½Ð¿é¤J :s/old/new/g
+ ¦b¨â¦æ¤º´À´«©Ò¦³ªº¦r²Å¦ê old ¬°·sªº¦r²Å¦ê new¡A½Ð¿é¤J :#,#s/old/new/g
+ ¦b¤å¥ó¤º´À´«©Ò¦³ªº¦r²Å¦ê old ¬°·sªº¦r²Å¦ê new¡A½Ð¿é¤J :%s/old/new/g
+ ¶i¦æ¥þ¤å´À´«®É¸ß°Ý¥Î¤á½T»{¨C­Ó´À´«»Ý²K¥[ c ¿ï¶µ¡A½Ð¿é¤J :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤­Á¿²Ä¤@¸`¡J¦b VIM ¤º°õ¦æ¥~³¡©R¥Oªº¤èªk
+
+
+ ** ¿é¤J :! µM«áºòÀHµÛ¿é¤J¤@­Ó¥~³¡©R¥O¥i¥H°õ¦æ¸Ó¥~³¡©R¥O¡C**
+
+ 1. «ö¤U§Ú­Ì©Ò¼ô±xªº : ©R¥O³]¸m¥ú¼Ð¨ì«Ì¹õ©³³¡¡C³o¼Ë´N¥i¥HÅý±z¿é¤J©R¥O¤F¡C
+
+ 2. ±µµÛ¿é¤J·P¹Ä¸¹ ! ³o­Ó¦r²Å¡A³o¼Ë´N¤¹³\±z°õ¦æ¥~³¡ªº shell ©R¥O¤F¡C
+
+ 3. §Ú­Ì¥H ls ©R¥O¬°¨Ò¡C¿é¤J !ls <¦^¨®> ¡C¸Ó©R¥O´N·|¦CÁ|¥X±z·í«e¥Ø¿ýªº
+ ¤º®e¡A´N¦p¦P±z¦b©R¥O¦æ´£¥Ü²Å¤U¿é¤J ls ©R¥Oªºµ²ªG¤@¼Ë¡C¦pªG !ls ¨S°_
+ §@¥Î¡A±z¥i¥H¸Õ¸Õ :!dir ¬Ý¬Ý¡C
+
+---> ´£¥Ü¡J ©Ò¦³ªº¥~³¡©R¥O³£¥i¥H¥H³oºØ¤è¦¡°õ¦æ¡C
+
+---> ´£¥Ü¡J ©Ò¦³ªº : ©R¥O³£¥²¶·¥H <¦^¨®> §i²×¡C
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤­Á¿²Ä¤G¸`¡JÃö¤_«O¦s¤å¥óªº§ó¦h«H®§
+
+
+ ** ­n±N¹ï¤å¥óªº§ï°Ê«O¦s¨ì¤å¥ó¤¤¡A½Ð¿é¤J :w FILENAME **
+
+ 1. ¿é¤J :!dir ©ÎªÌ :!ls Àòª¾·í«e¥Ø¿ýªº¤º®e¡C±zÀ³·í¤wª¾¹D³Ì«áÁÙ±oºV
+ <¦^¨®> §a¡C
+
+ 2. ¿ï¾Ü¤@­Ó©|¥¼¦s¦b¤å¥ó¦W¡A¤ñ¦p TEST ¡C
+
+ 3. ±µµÛ¿é¤J :w TEST (¦¹³B TEST ¬O±z©Ò¿ï¾Üªº¤å¥ó¦W¡C)
+
+ 4. ¸Ó©R¥O·|¥H TEST ¬°¤å¥ó¦W«O¦s¾ã­Ó¤å¥ó (VIM ±Ðµ{)¡C¬°¤F½T«O¥¿½T«O¦s¡A
+ ½Ð¦A¦¸¿é¤J :!dir ¬d¬Ý±zªº¥Ø¿ý¦Cªí¤º®e¡C
+
+---> ½Ðª`·N¡J¦pªG±z°h¥X VIM µM«á¦b¥H¤å¥ó¦W TEST ¬°°Ñ¼Æ¶i¤J¡A¨º»ò¸Ó¤å¥ó¤º
+ ®eÀ³¸Ó¦P±z«O¦s®Éªº¤å¥ó¤º®e¬O§¹¥þ¤@¼Ëªº¡C
+
+ 5. ²{¦b±z¥i¥H³q¹L¿é¤J :!rm TEST ¨Ó§R°£ TEST ¤å¥ó¤F¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤­Á¿²Ä¤T¸`¡J¤@­Ó¨ã¦³¿ï¾Ü©Êªº«O¦s©R¥O
+
+
+ ** ­n«O¦s¤å¥óªº³¡¤À¤º®e¡A½Ð¿é¤J :#,# w FILENAME **
+
+ 1. ¦A¨Ó°õ¦æ¤@¦¸ :!dir ©ÎªÌ :!ls Àòª¾·í«e¥Ø¿ýªº¤º®e¡AµM«á¿ï¾Ü¤@­Ó¦X¾Aªº
+ ¤£­«¦Wªº¤å¥ó¦W¡A¤ñ¦p TEST ¡C
+
+ 2. ±µµÛ±N¥ú¼Ð²¾°Ê¦Ü¥»­¶ªº³Ì³»ºÝ¡AµM«á«ö CTRL-g §ä¨ì¸Ó¦æªº¦æ¸¹¡C§O§Ñ¤F
+ ¦æ¸¹®@¡C
+
+ 3. ±µµÛ§â¥ú¼Ð²¾°Ê¦Ü¥»­¶ªº³Ì©³ºÝ¡A¦A«ö¤@¦¸ CTRL-g ¡C¤]§O§Ñ¤F³o­Ó¦æ¦n®@¡C
+
+ 4. ¬°¤F¥u«O¦s¤å³¹ªº¬Y­Ó³¡¤À¡A½Ð¿é¤J :#,# w TEST ¡C³o¸Ìªº #,# ´N¬O¤W­±
+ ­n¨D±z°O¦íªº¦æ¸¹(³»ºÝ¦æ¸¹,©³ºÝ¦æ¸¹)¡A¦Ó TEST ´N¬O¿ï©wªº¤å¥ó¦W¡C
+
+ 5. ³Ì«á¡A¥Î :!dir ½T»{¤å¥ó¬O§_¥¿½T«O¦s¡C¦ý¬O³o¦¸¥ý§O§R°£±¼¡C
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤­Á¿²Ä¥|¸`¡J´£¨ú©M¦X¨Ã¤å¥ó
+
+
+ ** ­n¦V·í«e¤å¥ó¤¤´¡¤J¥t¥~ªº¤å¥óªº¤º®e¡A½Ð¿é¤J :r FILENAME **
+
+ 1. ½ÐÁä¤J :!dir ½T»{±z«e­±³Ð«Øªº TEST ¤å¥óÁÙ¦b¡C
+
+ 2. µM«á±N¥ú¼Ð²¾°Ê¦Ü·í«e­¶­±ªº³»ºÝ¡C
+
+¯S§O´£¥Ü¡J °õ¦æ¨BÆJ3¤§«á±z±N¬Ý¨ì²Ä¤­Á¿²Ä¤T¸`¡A½Ð©¡®É¦A©¹¤U²¾°Ê¦^¨ì³o¸Ì¨Ó¡C
+
+ 3. ±µµÛ³q¹L :r TEST ±N«e­±³Ð«Øªº¦W¬° TEST ªº¤å¥ó´£¨ú¶i¨Ó¡C
+
+¯S§O´£¥Ü¡J±z©Ò´£¨ú¶i¨Óªº¤å¥ó±N±q¥ú¼Ð©Ò¦b¦ì¸m³B¶}©l¸m¤J¡C
+
+ 4. ¬°¤F½T»{¤å¥ó¤w¸g´£¨ú¦¨¥\¡A²¾°Ê¥ú¼Ð¦^¨ì­ì¨Óªº¦ì¸m´N¥i¥Hª`·N¦³¨â¥÷²Ä
+ ¤­Á¿²Ä¤T¸`¡A¤@¥÷¬O­ì¥»¡A¥t¥~¤@¥÷¬O¨Ó¦Û¤å¥óªº°Æ¥»¡C
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤­Á¿¤pµ²
+
+
+ 1. :!command ¥Î¤_°õ¦æ¤@­Ó¥~³¡©R¥O command¡C
+
+ ½Ð¬Ý¤@¨Ç¹ê»Ú¨Ò¤l¡J
+ :!dir - ¥Î¤_Åã¥Ü·í«e¥Ø¿ýªº¤º®e¡C
+ :!rm FILENAME - ¥Î¤_§R°£¦W¬° FILENAME ªº¤å¥ó¡C
+
+ 2. :w FILENAME ¥i±N·í«e VIM ¤¤¥¿¦b½s¿èªº¤å¥ó«O¦s¨ì¦W¬° FILENAME
+ ªº¤å¥ó¤¤¡C
+
+ 3. :#,#w FILENAME ¥i±N·í«e½s¿è¤å¥ó²Ä # ¦æ¦Ü²Ä # ¦æªº¤º®e«O¦s¨ì¤å¥ó
+ FILENAME ¤¤¡C
+
+ 4. :r FILENAME ¥i´£¨úºÏ½L¤å¥ó FILENAME ¨Ã±N¨ä´¡¤J¨ì·í«e¤å¥óªº¥ú¼Ð¦ì¸m
+ «á­±¡C
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤»Á¿²Ä¤@¸`¡J¥´¶}Ãþ©R¥O
+
+
+ ** ¿é¤J o ±N¦b¥ú¼Ðªº¤U¤è¥´¶}·sªº¤@¦æ¨Ã¶i¤J´¡¤J¼Ò¦¡¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº¨º¤@¦æ¡C
+
+ 2. ±µµÛ¿é¤J¤p¼gªº o ¦b¥ú¼Ð *¤U¤è* ¥´¶}·sªº¤@¦æ¨Ã¶i¤J´¡¤J¼Ò¦¡¡C
+
+ 3. µM«á´_¨î¼Ð°O¦³ ---> ªº¦æ¨Ã«ö <ESC> Áä°h¥X´¡¤J¼Ò¦¡¦Ó¶i¤J¥¿±`¼Ò¦¡¡C
+
+---> After typing o the cursor is placed on the open line in Insert mode.
+
+ 4. ¬°¤F¦b¥ú¼Ð *¤W¤è* ¥´¶}·sªº¤@¦æ¡A¥u»Ý­n¿é¤J¤j¼gªº O ¦Ó¤£¬O¤p¼gªº o
+ ´N¥i¥H¤F¡C½Ð¦b¤U¦æ´ú¸Õ¤@¤U§a¡C·í¥ú¼Ð³B¦b¦b¸Ó¦æ¤W®É¡A«ö Shift-O¥i¥H
+ ¦b¸Ó¦æ¤W¤è·s¶}¤@¦æ¡C
+
+Open up a line above this by typing Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤»Á¿²Ä¤G¸`¡J¥ú¼Ð«á´¡¤JÃþ©R¥O
+
+
+ ** ¿é¤J a ±N¥i¦b¥ú¼Ð¤§«á´¡¤J¤å¥»¡C **
+
+ 1. ½Ð¦b¥¿±`¼Ò¦¡¤U³q¹L¿é¤J $ ±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ
+ ªº¥½§À¡C
+
+ 2. ±µµÛ¿é¤J¤p¼gªº a «h¥i¦b¥ú¼Ð¤§«á´¡¤J¤å¥»¤F¡C¤j¼gªº A «h¥i¥Hª½±µ¦b¦æ
+ ¥½´¡¤J¤å¥»¡C
+
+´£¥Ü¡J¿é¤J¤j¼g A ªº¾Þ§@¤èªk¥i¥H¦b¦æ¥½´¡¤J¤å¥»¡AÁקK¤F¿é¤J i¡A¥ú¼Ð©w¦ì¨ì
+ ³Ì«á¤@­Ó¦r²Å¡A¿é¤Jªº¤å¥»¡A<ESC> ¦^´_¥¿±`¼Ò¦¡¡A½bÀY¥kÁä²¾°Ê¥ú¼Ð¥H¤Î
+ x §R°£·í«e¥ú¼Ð©Ò¦b¦ì¸m¦r²Åµ¥µ¥½Ñ¦hÁcÂøªº¾Þ§@¡C
+
+ 3. ¾Þ§@¤§«á²Ä¤@¦æ´N¥i¥H¸É¥R§¹¾ã¤F¡C½Ðª`·N¥ú¼Ð«á´¡¤J¤å¥»»P´¡¤J¼Ò¦¡¬O°ò
+ ¥»§¹¥þ¤@­Pªº¡A¥u¬O¤å¥»´¡¤Jªº¦ì¸m©w¦ìµy¦³¤£¦P½}¤F¡C
+
+---> This line will allow you to practice
+---> This line will allow you to practice appending text to the end of a line.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤»Á¿²Ä¤T¸`¡J¥t¥~¤@­Ó¸m´«Ãþ©R¥Oªºª©¥»
+
+
+ ** ¿é¤J¤j¼gªº R ¥i³sÄò´À´«¦h­Ó¦r²Å¡C**
+
+ 1. ½Ð±N¥ú¼Ð²¾°Ê¨ì¥»¸`¤¤¤U­±¼Ð°O¦³ ---> ªº²Ä¤@¦æ¡C
+
+ 2. ²¾°Ê¥ú¼Ð¨ì²Ä¤@¦æ¤¤¤£¦P¤_¼Ð¦³ ---> ªº²Ä¤G¦æªº²Ä¤@­Ó³æµüªº¶}©l¡A§Y³æ
+ µü last ³B¡C
+
+ 3. µM«á¿é¤J¤j¼gªº R ¶}©l§â²Ä¤@¦æ¤¤ªº¤£¦P¤_²Ä¤G¦æªº³Ñ§E¦r²Å³v¤@¿é¤J¡A´N
+ ¥i¥H¥þ³¡´À´«±¼­ì¦³ªº¦r²Å¦Ó¨Ï±o²Ä¤@¦æ§¹¥þ¹p¦P²Ä¤G¦æ¤F¡C
+
+---> 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. ½Ðª`·N¡J¦pªG±z«ö <ESC> °h¥X¸m´«¼Ò¦¡¦^´_¥¿±`¼Ò¦¡¡A©|¥¼´À´«ªº¤å¥»±N¤´
+ µM«O«ù­ìª¬¡C
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤»Á¿²Ä¥|¸`¡J³]¸mÃþ©R¥Oªº¿ï¶µ
+
+
+ ** ³]¸m¥i¨Ï¬d§ä©ÎªÌ´À´«¥i©¿²¤¤j¤p¼gªº¿ï¶µ **
+
+
+ 1. ­n¬d§ä³æµü ignore ¥i¦b¥¿±`¼Ò¦¡¤U¿é¤J /ignore ¡C­n­«´_¬d§ä¸Óµü¡A¥i¥H
+ ­«´_«ö n Áä¡C
+
+ 2. µM«á³]¸m ic ¿ï¶µ(ic´N¬O­^¤å©¿²¤¤j¤p¼gIgnore Caseªº­º¦r¥ÀÁY¼gµü)¡A§Y
+ ¿é¤J¡J
+ :set ic
+
+ 3. ²{¦b¥i¥H³q¹LÁä¤J n Áä¦A¦¸¬d§ä³æµü ignore¡C­«´_¬d§ä¥i¥H­«´_Áä¤J n Áä¡C
+
+ 4. µM«á³]¸m hlsearch ©M incsearch ³o¨â­Ó¿ï¶µ¡A¿é¤J¥H¤U¤º®e¡J
+ :set hls is
+
+ 5. ²{¦b¥i¥H¦A¦¸¿é¤J¬d§ä©R¥O¡A¬Ý¬Ý·|¦³¤°»ò®ÄªG¡J
+ /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤»Á¿¤pµ²
+
+
+ 1. ¿é¤J¤p¼gªº o ¥i¥H¦b¥ú¼Ð¤U¤è¥´¶}·sªº¤@¦æ¨Ã±N¥ú¼Ð¸m¤_·s¶}ªº¦æ­º¡A¶i¤J
+ ´¡¤J¼Ò¦¡¡C
+ ¿é¤J¤j¼gªº O ¥i¥H¦b¥ú¼Ð¤W¤è¥´¶}·sªº¤@¦æ¨Ã±N¥ú¼Ð¸m¤_·s¶}ªº¦æ­º¡A¶i¤J
+ ´¡¤J¼Ò¦¡¡C
+
+ 2. ¿é¤J¤p¼gªº a ¥i¥H¦b¥ú¼Ð©Ò¦b¦ì¸m¤§«á´¡¤J¤å¥»¡C
+ ¿é¤J¤j¼gªº A ¥i¥H¦b¥ú¼Ð©Ò¦b¦æªº¦æ¥½¤§«á´¡¤J¤å¥»¡C
+
+ 3. ¿é¤J¤j¼gªº R ±N¶i¤J´À´«¼Ò¦¡¡Aª½¦Ü«ö <ESC> Áä°h¥X´À´«¼Ò¦¡¦Ó¶i¤J¥¿±`
+ ¼Ò¦¡¡C
+
+ 4. ¿é¤J :set xxx ¥i¥H³]¸m xxx ¿ï¶µ¡C
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤CÁ¿¡J¦b½uÀ°§U©R¥O
+
+ ** ¨Ï¥Î¦b½uÀ°§U¨t²Î **
+
+ Vim ¾Ö¦³¤@­Ó²Ó­P¥þ­±ªº¦b½uÀ°§U¨t²Î¡C­n±Ò°Ê¸ÓÀ°§U¨t²Î¡A½Ð¿ï¾Ü¦p¤U¤TºØ¤è
+ ªk¤§¤@¡J
+ - «ö¤U <HELP> Áä (¦pªGÁä½L¤W¦³ªº¸Ü)
+ - «ö¤U <F1> Áä (¦pªGÁä½L¤W¦³ªº¸Ü)
+ - ¿é¤J :help <¦^¨®>
+
+ ¿é¤J :q <¦^¨®> ¥i¥HÃö³¬À°§Uµ¡¤f¡C
+
+ ´£¨Ñ¤@­Ó¥¿½Tªº°Ñ¼Æµ¹":help"©R¥O¡A±z¥i¥H§ä¨ìÃö¤_¸Ó¥DÃDªºÀ°§U¡C½Ð¸ÕÅç¥H
+ ¤U°Ñ¼Æ(¥i§O§Ñ¤F«ö¦^¨®Áä®@¡C:)¡J
+
+ :help w <¦^¨®>
+ :help c_<T <¦^¨®>
+ :help insert-index <¦^¨®>
+ :help user-manual <¦^¨®>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ²Ä¤KÁ¿¡J³Ð«Ø¤@­Ó±Ò°Ê¸}¥»
+
+ ** ±Ò¥Îvimªº¥\¯à **
+
+ Vimªº¥\¯à¯S©Ê­n¤ñvi¦h±o¦h¡A¦ý¤j³¡¤À¥\¯à³£¨S¦³¯Ê¬Ù¿E¬¡¡C¬°¤F±Ò°Ê§ó¦hªº
+ ¥\¯à¡A±z±o³Ð«Ø¤@­Óvimrc¤å¥ó¡C
+
+ 1. ¶}©l½s¿èvimrc¤å¥ó¡A³o¨ú¨M¤_±z©Ò¨Ï¥Îªº¾Þ§@¨t²Î¡J
+
+ :edit ~/.vimrc ³o¬OUnix¨t²Î©Ò¨Ï¥Îªº©R¥O
+ :edit $VIM/_vimrc ³o¬OWindows¨t²Î©Ò¨Ï¥Îªº©R¥O
+
+ 2. ±µµÛ¾É¤Jvimrc­S¨Ò¤å¥ó¡J
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. «O¦s¤å¥ó¡A©R¥O¬°¡J
+
+ :write
+
+ ¦b¤U¦¸±z±Ò°Êvimªº®É­Ô¡A½s¿è¾¹´N·|¦³¤F»yªk°ª«Gªº¥\¯à¡C±z¥i¥HÄ~Äò§â±z³ß
+ Åwªº¨ä¥¦¥\¯à³]¸m²K¥[¨ì³o­Óvimrc¤å¥ó¤¤¡C
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ vim ±Ðµ{¨ì¦¹µ²§ô¡C¥»±Ðµ{¥u¬O¬°¤F²©ú¦a¤¶²Ð¤@¤Uvim½s¿è¾¹¡A¦ý¤w¨¬¥HÅý±z
+ «Ü®e©ö¾Ç·|¨Ï¥Î¥»½s¿è¾¹¤F¡C¤ð±e½èºÃ¡AvimÁÙ¦³«Ü¦h«Ü¦hªº©R¥O¡A¥»±Ðµ{©Ò¤¶
+ ²ÐªºÁÙ®t±o»·µÛ©O¡C©Ò¥H±z­nºë³qªº¸Ü¡AÁÙ±æÄ~Äò§V¤O®@¡C¤U¤@¨B±z¥i¥H¾\Ū
+ vim¤â¥U¡A¨Ï¥Îªº©R¥O¬O¡J
+ :help user-manual
+
+ ¬°¤F§ó¶i¤@¨Bªº°Ñ¦Ò©M¾Ç²ß¡A¥H¤U³o¥»®Ñ­È±o±ÀÂË¡J
+
+ Vim - Vi Improved - §@ªÌ¡JSteve Oualline
+ ¥Xª©ªÀ¡JNew Riders
+
+ ³o¬O²Ä¤@¥»§¹¥þÁ¿¸Ñvimªº®ÑÄy¡C¹ï¤_ªì¾ÇªÌ¯S§O¦³¥Î¡C¨ä¤¤ÁÙ¥]§t¦³¤j¶q¹ê¨Ò
+ ©M¹Ï¥Ü¡C±ýª¾¸Ô±¡¡A½Ð³X°Ý http://iccf-holland.org/click5.html
+
+ ¥H¤U³o¥»®Ñ¤ñ¸û¦Ñ¤F¦Ó¥B¤º®e¥D­n¬Ovi¦Ó¤£¬Ovim¡A¦ý¬O¤]­È±o±ÀÂË¡J
+
+ Learning the Vi Editor - §@ªÌ¡JLinda Lamb
+ ¥Xª©ªÀ¡JO'Reilly & Associates Inc.
+
+ ³o¬O¤@¥»¤£¿ùªº®Ñ¡A³q¹L¥¦±z´X¥G¯à°÷¤F¸Ñ¨ì¥þ³¡vi¯à°÷°µ¨ìªº¨Æ±¡¡C¦¹®Ñªº²Ä
+ ¤»­Óª©¥»¤]¥]§t¤F¤@¨ÇÃö¤_vimªº«H®§¡C
+
+ ¥»±Ðµ{¬O¥Ñ¨Ó¦ÛCalorado School of MineseªºMichael C. Pierce¡BRobert K.
+ Ware ©Ò½s¼gªº¡A¨ä¤¤¨Ó¦ÛColorado State UniversityªºCharles Smith´£¨Ñ¤F
+ «Ü¦h³Ð·N¡C½sªÌ³q«H¦a§}¬O¡J
+
+ bware@mines.colorado.edu
+
+ ¥»±Ðµ{¤w¥ÑBram Moolenaar±M¬°vim¶i¦æ­×­q¡C
+
+
+
+ Ķ¨îªÌªþ¨¥¡J
+ ===========
+ ²Å餤¤å±Ðµ{½Ķª©¤§Ä¶¨îªÌ¬°±ç©÷®õ <beos@turbolinux.com.cn>¡AÁÙ¦³
+ ¥t¥~¤@­ÓÁp¨t¦a§}¡Jlinuxrat@gnuchina.org¡C
+
+ ÁcÅ餤¤å±Ðµ{¬O±q²Å餤¤å±Ðµ{½Ķª©¨Ï¥Î Debian GNU/Linux ¤¤¤å¶µ¥Ø¤p
+ ²Õªº¤_¼s½÷¥ý¥Í½s¼gªº¤¤¤åº~¦rÂà½X¾¹ autoconvert Âà´«¦Ó¦¨ªº¡A¨Ã¹ïÂà
+ ´«ªºµ²ªG°µ¤F¤@¨Ç²Ó¸`ªº§ï°Ê¡C
+
+ Åܧó°O¿ý¡J
+ =========
+ 2002¦~08¤ë30¤é ±ç©÷®õ <beos@turbolinux.com.cn>
+ ·PÁ RMS@SMTH ªº«ü¥¿¡A±N¦h³B¿ù»~­×¥¿¡C
+
+ 2002¦~04¤ë22¤é ±ç©÷®õ <linuxrat@gnuchina.org>
+ ·PÁ xuandong@sh163.net ªº«ü¥¿¡A±N¨â³B¿ù§O¦r­×¥¿¡C
+
+ 2002¦~03¤ë18¤é ±ç©÷®õ <linuxrat@gnuchina.org>
+ ®Ú¾ÚBram Molenaar¥ý¥Í¦b2002¦~03¤ë16¤éªº¨Ó«H­n¨D¡A±Nvimtutor1.4¤¤Ä¶
+ ª©¤É¯Å¨ìvimtutor1.5¡C
+
+ 2001¦~11¤ë15¤é ±ç©÷®õ <linuxrat@gnuchina.org>
+ ±Nvimtutor1.4¤¤Ä¶ª©´£¥æµ¹Bram Molenaar©MSven Guckes¡C
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.zh.euc b/runtime/tutor/tutor.zh.euc
new file mode 100644
index 000000000..7f80f690b
--- /dev/null
+++ b/runtime/tutor/tutor.zh.euc
@@ -0,0 +1,851 @@
+===============================================================================
+= »¶ Ó­ ÔÄ ¶Á ¡¶ V I M ½Ì ³Ì ¡· ¡ª¡ª °æ±¾ 1.5 =
+===============================================================================
+ vim ÊÇÒ»¸ö¾ßÓкܶàÃüÁîµÄ¹¦Äܷdz£Ç¿´óµÄ±à¼­Æ÷¡£ÏÞÓÚƪ·ù£¬ÔÚ±¾½Ì³Ìµ±ÖÐ
+ ¾Í²»Ïêϸ½éÉÜÁË¡£±¾½Ì³ÌµÄÉè¼ÆÄ¿±êÊǽ²ÊöһЩ±ØÒªµÄ»ù±¾ÃüÁ¶øÕÆÎÕºÃÕâ
+ ЩÃüÁÄú¾ÍÄܹ»ºÜÈÝÒ×½«vimµ±×÷Ò»¸öͨÓõÄÍòÄܱ༭Æ÷À´Ê¹ÓÃÁË¡£
+
+ Íê³É±¾½Ì³ÌµÄÄÚÈÝ´óÔ¼ÐèÒª25-30·ÖÖÓ£¬È¡¾öÓÚÄúѵÁ·µÄʱ¼ä¡£
+
+ ÿһ½ÚµÄÃüÁî²Ù×÷½«»á¸ü¸Ä±¾ÎÄ¡£ÍƼöÄú¸´ÖƱ¾ÎĵÄÒ»¸ö¸±±¾£¬È»ºóÔÚ¸±±¾ÉÏ
+ ½øÐÐѵÁ·(Èç¹ûÄúÊÇͨ¹ý"vimtutor"À´Æô¶¯½Ì³ÌµÄ£¬ÄÇô±¾ÎľÍÒѾ­ÊǸ±±¾ÁË)¡£
+
+ ÇмÇÒ»µã¡Ã±¾½Ì³ÌµÄÉè¼Æ˼·ÊÇÔÚʹÓÃÖнøÐÐѧϰµÄ¡£Ò²¾ÍÊÇ˵£¬ÄúÐèҪͨ¹ý
+ Ö´ÐÐÃüÁîÀ´Ñ§Ï°ËüÃDZ¾ÉíµÄÕýÈ·Ó÷¨¡£Èç¹ûÄúÖ»ÊÇÔĶÁ¶ø²»²Ù×÷£¬ÄÇôÄú¿ÉÄÜ
+ »áºÜ¿ìÒÅÍüÕâЩÃüÁîµÄ£¡
+
+ ºÃÁË£¬ÏÖÔÚÇëÈ·¶¨ÄúµÄ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 ¼ü) £¬ÕâÑù¾Í
+ ¿ÉÒÔÖ´Ðлָ´ÃüÁҲ¾ÍÊdz·Ïûµô³·ÏûÃüÁî¡£
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+ 8. ÕâЩ¶¼ÊǷdz£ÓÐÓõÄÃüÁî¡£ÏÂÃæÊǵڶþ½²µÄС½áÁË¡£
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ µÚ¶þ½²Ð¡½á
+
+
+ 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$ ʹµÃ¸ÃÐÐʣϵIJ¿·Ö¸üÕýµÃͬµÚ¶þÐÐÒ»Ñù¡£×îºó°´ <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 ÔòÖ±½ÓÌøתµ½ÎļþÖеÄijһָ¶¨ÐС£**
+
+ Ìáʾ¡ÃÇмÇÒªÏÈͨ¶Á±¾½ÚÄÚÈÝ£¬Ö®ºó²Å¿ÉÒÔÖ´ÐÐÒÔϲ½Öè!!!
+
+ 1. °´Ï CTRL ¼ü²»·Å¿ªÈ»ºó°´ g ¼ü¡£È»ºó¾Í»á¿´µ½Ò³Ãæ×îµ×²¿³öÏÖÒ»¸ö״̬ÐÅ
+ Ï¢ÐУ¬ÏÔʾµÄÄÚÈÝÊǵ±Ç°±à¼­µÄÎļþÃûºÍÎļþµÄ×ÜÐÐÊý¡£Çë¼Çס²½Öè3µÄÐкš£
+
+ 2. °´Ï SHIFT-G ¼ü¿ÉÒÔʹµÃµ±Ç°¹â±êÖ±½ÓÌøתµ½Îļþ×îºóÒ»ÐС£
+
+ 3. ÊäÈëÄúÔøÍ£ÁôµÄÐкţ¬È»ºó°´Ï SHIFT-G¡£ÕâÑù¾Í¿ÉÒÔ·µ»Øµ½ÄúµÚÒ»´Î°´ÏÂ
+ CTRL-g ʱËùÔÚµÄÐкÃÁË¡£×¢Òâ¡ÃÊäÈëÐкÅʱ£¬ÐкÅÊDz»»áÔÚÆÁÄ»ÉÏÏÔʾ³öÀ´
+ µÄ¡£
+
+ 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. ΪÁËÖ»±£´æÎÄÕµÄij¸ö²¿·Ö£¬ÇëÊäÈë :#,# 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 ɾ³ýµ±Ç°¹â±êËùÔÚλÖÃ×Ö·ûµÈµÈÖî¶à·±ÔӵIJÙ×÷¡£
+
+ 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 ¿ªÊ¼°ÑµÚÒ»ÐÐÖеIJ»Í¬ÓÚµÚ¶þÐеÄÊ£Óà×Ö·ûÖðÒ»ÊäÈ룬¾Í
+ ¿ÉÒÔÈ«²¿Ìæ»»µôÔ­ÓеÄ×Ö·û¶øʹµÃµÚÒ»ÐÐÍêÈ«À×ͬµÚ¶þÐÐÁË¡£
+
+---> 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Îļþ£¬ÕâÈ¡¾öÓÚÄúËùʹÓõIJÙ×÷ϵͳ¡Ã
+
+ :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 --git a/runtime/vim16x16.gif b/runtime/vim16x16.gif
new file mode 100644
index 000000000..505a855a6
--- /dev/null
+++ b/runtime/vim16x16.gif
Binary files differ
diff --git a/runtime/vim16x16.png b/runtime/vim16x16.png
new file mode 100644
index 000000000..fb45d22a0
--- /dev/null
+++ b/runtime/vim16x16.png
Binary files differ
diff --git a/runtime/vim16x16.xpm b/runtime/vim16x16.xpm
new file mode 100644
index 000000000..cb75b7178
--- /dev/null
+++ b/runtime/vim16x16.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * vim16x16[] = {
+"16 16 8 1",
+" c None",
+". c #000000",
+"+ c #000080",
+"@ c #008000",
+"# c #00FF00",
+"$ c #808080",
+"% c #C0C0C0",
+"& c #FFFFFF",
+" .....#. .... ",
+" .&&&&&.@.&&&&. ",
+" .%%%%%$..%%%%$.",
+" .%%%$.@.&%%$. ",
+" .%%%$..&%%$. ",
+" .%%%$.&%%$.. ",
+" #.%%%$&%%$.@@. ",
+"#@.%%%&%%$.@@@@.",
+".@.%%%%%..@@@@+ ",
+" ..%%%%.%...@. ",
+" .%%%%...%%.%. ",
+" .%%%.%%.%%%%%.",
+" .%%$..%.%.%.%.",
+" .%$.@.%.%.%.%.",
+" .. .%%.%.%.%.",
+" .. . . . "};
diff --git a/runtime/vim32x32.gif b/runtime/vim32x32.gif
new file mode 100644
index 000000000..523821b44
--- /dev/null
+++ b/runtime/vim32x32.gif
Binary files differ
diff --git a/runtime/vim32x32.png b/runtime/vim32x32.png
new file mode 100644
index 000000000..c6e04fab2
--- /dev/null
+++ b/runtime/vim32x32.png
Binary files differ
diff --git a/runtime/vim32x32.xpm b/runtime/vim32x32.xpm
new file mode 100644
index 000000000..43a3a40c0
--- /dev/null
+++ b/runtime/vim32x32.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * vim32x32[] = {
+"32 32 8 1",
+" c None",
+". c #000000",
+"+ c #000080",
+"@ c #008000",
+"# c #00FF00",
+"$ c #808080",
+"% c #C0C0C0",
+"& c #FFFFFF",
+" .. ",
+" .##. ",
+" ...........#@@#. ......... ",
+" .&&&&&&&&&&&.@@@#.&&&&&&&&&. ",
+" .&%%%%%%%%%%%.@@@.&%%%%%%%%%. ",
+" .%%%%%%%%%%$.@@@@.%%%%%%%%$. ",
+" .$%%%%%%$$.@@@@@@.$%%%%%$$. ",
+" .&%%%%%%$.@@@@@@.&%%%%%$$. ",
+" .&%%%%%%$.@@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@.&&%%%%$$.#. ",
+" ..&%%%%%%$.@.&&%%%%$$.@@#. ",
+" .#.&%%%%%%$..&&%%%%$$.@@@@#. ",
+" .#@.&%%%%%%$.&&%%%%$$.@@@@@@#. ",
+".#@@.&%%%%%%$&&%%%%$$.@@@@@@@@#.",
+".+@@.&%%%%%%$&%%%%$$.@@@@@@@@@+.",
+" .+@.&%%%%%%$%%%%$$.@@@@@@@@@+. ",
+" .+.&%%%%%%%%%%...@@@@@@@@@+. ",
+" ..&%%%%%%%%%.%%.@@@@@@@@+. ",
+" .&%%%%%%%%%.%%.@@@@@@@+. ",
+" .&%%%%%%%%$...@...@...... ",
+" .&%%%%%%%$.%%%.%%%.%%%.%%. ",
+" .&%%%%%%$$..%%..%%%%%%%%%%. ",
+" .&%%%%%$$..%%...%%++%%..%. ",
+" .&%%%%$$.@.%%..%%+.%%..%%. ",
+" .&%%%$$.@@.%%..%%..%%..%%. ",
+" .&%%$$..+.%%..%%..%%..%%. ",
+" .%$$. ..%%%.%%..%%..%%%. ",
+" ... ....+.. .. ... ",
+" .++. ",
+" .. "};
diff --git a/runtime/vim48x48.gif b/runtime/vim48x48.gif
new file mode 100644
index 000000000..6be182ec9
--- /dev/null
+++ b/runtime/vim48x48.gif
Binary files differ
diff --git a/runtime/vim48x48.png b/runtime/vim48x48.png
new file mode 100644
index 000000000..4bac67e62
--- /dev/null
+++ b/runtime/vim48x48.png
Binary files differ
diff --git a/runtime/vim48x48.xpm b/runtime/vim48x48.xpm
new file mode 100644
index 000000000..b2fdd9592
--- /dev/null
+++ b/runtime/vim48x48.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char * vim48x48[] = {
+"48 48 8 1",
+" c None",
+". c #000000",
+"+ c #000084",
+"@ c #008200",
+"# c #00FF00",
+"$ c #848284",
+"& c #C6C3C6",
+"* c #FFFFFF",
+" .. ",
+" .##. ",
+" .#@@#. ",
+" ...............#@@@@#. ............... ",
+" .***************.@@@@@#. .***************. ",
+" .**&&&&&&&&&&&&&&$.@@@@@#.**&&&&&&&&&&&&&&$.",
+" .*&&&&&&&&&&&&&&&$.@@@@@@.*&&&&&&&&&&&&&&&$.",
+" .*$&&&&&&&&&&&&&&$.@@@@@@.*$&&&&&&&&&&&&&&$.",
+" .$$$&&&&&&&&&$$$.@@@@@@@@.$$$&&&&&&&&&&&$$.",
+" ..*&&&&&&&&&$$.@@@@@@@@@@..*&&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@.**&&&&&&&&&$$.. ",
+" ..*&&&&&&&&&$$.@@@.**&&&&&&&&&$$.@#. ",
+" .#.*&&&&&&&&&$$.@@.**&&&&&&&&&$$.@@@#. ",
+" .#@.*&&&&&&&&&$$.@.**&&&&&&&&&$$.@@@@@#. ",
+" .#@@.*&&&&&&&&&$$..**&&&&&&&&&$$.@@@@@@@#. ",
+" .#@@@.*&&&&&&&&&$$.**&&&&&&&&&$$.@@@@@@@@@#. ",
+" .#@@@@.*&&&&&&&&&$$**&&&&&&&&&$$.@@@@@@@@@@@#. ",
+".#+@@@@.*&&&&&&&&&$$*&&&&&&&&&$$.@@@@@@@@@@@@@#.",
+" .++@@@.*&&&&&&&&&$*&&&&&&&&&$$.@@@@@@@@@@@@@++.",
+" .++@@.*&&&&&&&&&$&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++@.*&&&&&&&&&&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++.*&&&&&&&&&&&&&&&&....@@@@@@@@@@@@@++. ",
+" .+.*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@@+++ ",
+" ..*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&$$...@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&$$...@@....@@....+.... ",
+" .*&&&&&&&&&&&&$$..&&..&&&&..&&&&..&&&. ",
+" .*&&&&&&&&&&&$$..&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&&$$.@.&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&$$.@@.&&.@@.&&....&&....&&. ",
+" .*&&&&&&&&$$.@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&&&$$.@@@.&&.@@.&&.++.&&. .&&. ",
+" .*&&&&&&$$.@@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&$$.++@@.&&.@@.&&.. .&&. .&&. ",
+" .*&&&&$$. .++.&&&.@.&&&. .&&&. .&&&. ",
+" .$$$$$. .+.&&&&..&&&&..&&&&..&&&&. ",
+" ..... .+....@+.... .... .... ",
+" .++@@++. ",
+" .++++. ",
+" .++. ",
+" .. "};
diff --git a/runtime/vimlogo.eps b/runtime/vimlogo.eps
new file mode 100644
index 000000000..5bf45ff4f
--- /dev/null
+++ b/runtime/vimlogo.eps
@@ -0,0 +1,791 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 147 74 429 356
+%%LanguageLevel: 1
+%%Creator: CorelDRAW 11
+%%Title: vimlogo.eps
+%%CreationDate: Mon Feb 02 14:35:16 2004
+%%DocumentProcessColors: Cyan Yellow Black
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+/AutoSteps 0 def
+/CMYKMarks true def
+/UseLevel 1 def
+%Build: CorelDRAW 11 Version 11.633
+%Color profile: Generic offset separations profile
+/CorelIsEPS true def
+%%BeginResource: procset wCorel11Dict 11.0 0
+/wCorel11Dict 300 dict def wCorel11Dict begin
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/@ss{2 index 0 eq{$dsf 3 1 roll 4 -1
+roll pop}if exch $Scra add exch load SetScr}bd/SepMode_5 where{pop}{/SepMode_5
+0 def}ifelse/CorelIsSeps where{pop}{/CorelIsSeps false def}ifelse
+/CorelIsInRIPSeps where{pop}{/CorelIsInRIPSeps false def}ifelse/CorelIsEPS
+where{pop}{/CorelIsEPS false def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/Comp?{
+/LumSepsDict where{pop false}{/AldusSepsDict where{pop false}{1 0 0 0 @gs
+setcmykcolor currentcmykcolor @gr add add add 0 ne 0 1 0 0 @gs setcmykcolor
+currentcmykcolor @gr add add add 0 ne 0 0 1 0 @gs setcmykcolor currentcmykcolor
+@gr add add add 0 ne 0 0 0 1 @gs setcmykcolor currentcmykcolor @gr add add add
+0 ne and and and}ifelse}ifelse}bd/@PL{/LV where{pop LV 2 ge L2? not and{@np
+/Courier findfont 12 scalefont setfont 72 144 m
+(The PostScript level set in the Corel application is higher than)show 72 132 m
+(the PostScript level of this device. Change the PS Level in the Corel)show 72
+120 m(application to Level 1 by selecting the PostScript tab in the print)show
+72 108 m(dialog, and selecting Level 1 from the Compatibility drop down list.)
+show flush spg quit}if}if}bd/@BeginSysCorelDict{systemdict/Corel30Dict known
+{systemdict/Corel30Dict get exec}if systemdict/CorelLexDict known{1 systemdict
+/CorelLexDict get exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known
+{end}if/EndCorelLexDict where{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup
+currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge
+{pop}{exch pop}ifelse}bd/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch
+rl neg 0 rl @cp}bd/currentscale{1 0 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1
+exch sub}bd/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}
+repeat pop}bd/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1
+roll sub neg exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index
+.114 mul add 4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb
+/setrgbcolor ld/GetRgb/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray
+ld/SetRgb2 systemdict/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor
+get def/SetHsb systemdict/sethsbcolor get def/GetHsb systemdict
+/currenthsbcolor get def/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor
+sub 3 1 roll SetHsb GetRgb2}bd/setcmykcolor where{pop/LumSepsDict where{pop
+/SetCmyk_5{LumSepsDict/setcmykcolor get exec}def}{/AldusSepsDict where{pop
+/SetCmyk_5{AldusSepsDict/setcmykcolor get exec}def}{/SetCmyk_5/setcmykcolor ld
+}ifelse}ifelse}{/SetCmyk_5{cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{
+pop/GetCmyk/currentcmykcolor ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse
+/setoverprint where{pop}{/setoverprint{/$op xd}bd}ifelse/currentoverprint where
+{pop}{/currentoverprint{$op}bd}ifelse/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1
+roll mul exch}repeat pop}ifelse}bd/@trp{exch pop 5 1 roll @tc_5}bd
+/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 4 $ink_5 sub index exch pop 5 1
+roll pop pop pop pop SepsColor true eq{$ink_5 3 gt{1 sub neg SetGry}{0 0 0 4
+$ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}ifelse}ifelse}bd
+/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array astore}bd}ifelse
+/Corelsetcustomcolor_exists false def/setcustomcolor where{pop
+/Corelsetcustomcolor_exists true def}if CorelIsSeps true eq CorelIsInRIPSeps
+false eq and{/Corelsetcustomcolor_exists false def}if
+Corelsetcustomcolor_exists false eq{/setcustomcolor{exch aload pop SepMode_5 0
+eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}ifelse 6 1 roll
+5 rp 1 sub neg SetGry}ifelse}bd}if/@scc_5{dup type/booleantype eq{dup
+currentoverprint ne{setoverprint}{pop}ifelse}{1 eq setoverprint}ifelse dup _ eq
+{pop setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse
+SepMode_5 0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage
+where{pop/ColorImage{colorimage}def}{/ColorImage{/ncolors xd/$multi xd $multi
+true eq{ncolors 3 eq{/daqB xd/daqG xd/daqR xd pop pop exch pop abs{daqR pop
+daqG pop daqB pop}repeat}{/daqK xd/daqY xd/daqM xd/daqC xd pop pop exch pop abs
+{daqC pop daqM pop daqY pop daqK pop}repeat}ifelse}{/dataaq xd{dataaq ncolors
+dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index get 255
+div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g 255 mul
+cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv getinterval pop}{
+4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 index get 255 div
+$dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div $dat 4 index 3
+add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 roll put}for $dat
+0 $dat length ncolors idiv getinterval}if}ifelse}image}ifelse}bd}ifelse
+/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{GetCmyk}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE/image ld/image
+{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE}{dup type/dicttype eq
+{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent get 8 eq exch
+/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray eq and{
+CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get abs{TCC
+pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5(Black)eq
+{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}
+ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/$fm 0 def
+/wfill{1 $fm eq{fill}{eofill}ifelse}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 ne or
+$ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm setmatrix 72
+1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 SetGry
+wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil
+1 eq{CorelPtrnDoFill}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$fil 4 eq
+{CorelShfillDoFill}{$t $c $m $y $k $n $o @scc_5{wfill}{@np}ifelse}ifelse}
+ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{
+matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K
+$N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF
+{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/_E{
+5 array astore exch cvlit xd}bd/@cc{currentfile $dat readhexstring pop}bd/@sm{
+/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd/Bblly xd/Bbllx xd}bd/@c{
+@cp}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd}bd/tcc{@cc}def/@B{
+@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}
+{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1
+def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq
+{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs
+-72000 dup m -72000 72000 l 72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}
+bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec cvx]cvx settransfer @whi}
+bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def}bd/@eax{/deflevel deflevel
+dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}
+bd/@rax{deflevel 0 eq{@rs @sv}if}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if/wclip{1 $fm eq{clip}{eoclip}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true
+def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg false def}
+ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string
+def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts 1 eq
+{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load $bts
+1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd $ngx $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $wid $hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse
+]$msimage false eq $ncl 1 eq or{/$dat $wid $bts mul $ncl mul 8 div ceiling cvi
+string def/@cc load false $ncl ColorImage}{$wid $bts mul 8 div ceiling cvi $ncl
+3 eq{dup dup/$dat1 exch string def/$dat2 exch string def/$dat3 exch string def
+/@cc1 load/@cc2 load/@cc3 load}{dup dup dup/$dat1 exch string def/$dat2 exch
+string def/$dat3 exch string def/$dat4 exch string def/@cc1 load/@cc2 load
+/@cc3 load/@cc4 load}ifelse true $ncl ColorImage}ifelse $SDF{$dsf $dsa $dsp
+@ss}if @gr $ctm setmatrix}bd/@cc1{currentfile $dat1 readhexstring pop}bd/@cc2{
+currentfile $dat2 readhexstring pop}bd/@cc3{currentfile $dat3 readhexstring pop
+}bd/@cc4{currentfile $dat4 readhexstring pop}bd/$msimage false def/COMP 0 def
+/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx
+xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling
+cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}
+ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8
+dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent
+$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}
+ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def
+/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP
+2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury
+xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul
+$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq
+{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub
+$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1
+def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1
+eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{
+/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def
+MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict
+ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF
+{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid
+xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def
+/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def
+/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0]
+def end}bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq
+MaskedImage true eq and{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq
+UseLevel 3 eq or and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{
+7 -2 roll pop pop @I}ifelse}ifelse}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true def}{@gs $t $c $m $y $k $n $o
+@scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd/$pn xd}bd
+/CorelPtrnDoFill{@gs $ctm setmatrix $pm concat CorelPtrnSetBBox wclip @sv Bburx
+Bbury $pm itransform/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd
+/$tllx xd newpath $tllx $tlly m $tllx $tury l $turx $tury l $turx $tlly l $tllx
+$tlly m @cp pathbbox @rs/$tury xd/$turx xd/$tlly xd/$tllx xd/$wid $turx $tllx
+sub def/$hei $tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{
+$t $c $m $y $k $n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei
+scale <00> 8 1 false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse
+@gr $wid 0 gt $hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub
+/$phei xd exch sub/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div
+ceiling 1 add/$tly xd currentdict/CorelPtrnL2Pattern known $psy 0 eq and $psx 0
+eq and{CorelPtrnL2Pattern}{$psx 0 eq{CorelPtrnTileVeritcal}{CorelPtrnTileHoriz
+}ifelse}ifelse}if @gr @np/$bkg false def}bd/CorelPtrnSetBBox{pathbbox/$ury xd
+/$urx xd/$lly xd/$llx xd}bd/CorelPtrnSetFirstTile{$tllx $pxf add dup $tllx gt
+{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei add}if/$ty xd}bd/p{/$pm
+xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}bd/CorelPtrnDraw{@ep}bd
+/CorelPtrnPutTile{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei
+sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{
+/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0
+$phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3
+index sub Tl matrix currentmatrix/$ctm xd CorelPtrnDraw pop pop pop pop}{pop
+pop}ifelse @rs}bd/CorelPtrnTileHoriz{CorelPtrnSetFirstTile 0 1 $tly 1 sub{dup
+$psx mul $tx add{dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty
+exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch CorelPtrnPutTile
+pop}for pop pop}for}bd/CorelPtrnTileVeritcal{CorelPtrnSetFirstTile 0 1 $tlx 1
+sub{dup $pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}
+{exit}ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub CorelPtrnPutTile pop}for
+pop pop}for}bd L2? UseLevel 2 ge and{/CorelPtrnL2Pattern{@sv[$pn cvlit load
+aload pop pop]$pwid $phei $pn cvlit load aload pop pop pop pop pathbbox pop pop
+2 index sub exch 3 index sub 4 -2 roll pop pop exch matrix identmatrix
+translate/PatternMatrix xd/PatternYStep xd/PatternXStep xd/PatternBBox xd
+currentdict/PatternMainDict xd <</PaintType 1/PatternType 1/TilingType 1/BBox
+PatternBBox/XStep PatternXStep/YStep PatternYStep/PaintProc{begin
+PatternMainDict begin $ctm currentmatrix pop 0 CorelPtrnDraw end end}bind >>
+PatternMatrix makepattern setpattern fill @rs}def}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel11Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+147.81600 74.66400 428.47200 355.32000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+428.47200 216.43200 m
+286.70400 355.32000 L
+147.81600 213.62400 L
+286.70400 74.66400 L
+428.47200 216.43200 L
+@c
+B
+
+@rax %Note: Object
+286.70400 80.35200 422.78400 216.43200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.58 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.28800 216.43200 m
+422.78400 216.43200 L
+286.70400 80.35200 L
+286.70400 88.84800 L
+414.28800 216.43200 L
+@c
+B
+
+@rax %Note: Object
+153.50400 80.35200 286.70400 213.62400 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.51 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+153.50400 213.62400 m
+162.00000 213.62400 L
+286.70400 88.84800 L
+286.70400 80.35200 L
+153.50400 213.62400 L
+@c
+B
+
+@rax %Note: Object
+153.50400 213.62400 286.70400 349.63200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 341.20800 m
+286.70400 349.63200 L
+153.50400 213.62400 L
+162.00000 213.62400 L
+286.70400 341.20800 L
+@c
+B
+
+@rax %Note: Object
+286.70400 216.43200 422.78400 349.63200 @E
+ 0 O 0 @g
+0.73 0.00 0.99 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 349.63200 m
+286.70400 341.20800 L
+414.28800 216.43200 L
+422.78400 216.43200 L
+286.70400 349.63200 L
+@c
+B
+
+@rax %Note: Object
+162.00000 88.84800 414.28800 341.20800 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.40 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 88.84800 m
+414.28800 216.43200 L
+286.70400 341.20800 L
+162.00000 213.62400 L
+286.70400 88.84800 L
+@c
+B
+
+@rax %Note: Object
+165.81600 103.03200 423.72000 344.01600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+313.20000 312.84000 m
+321.69600 304.27200 L
+321.69600 304.27200 L
+263.08800 244.80000 L
+263.08800 304.27200 L
+268.77600 304.27200 L
+277.27200 312.84000 L
+277.27200 335.44800 L
+268.77600 344.01600 L
+174.31200 344.01600 L
+165.81600 335.44800 L
+165.81600 312.84000 L
+174.31200 304.27200 L
+180.93600 304.27200 L
+180.93600 111.52800 L
+191.30400 103.03200 L
+220.60800 103.03200 L
+423.72000 312.84000 L
+423.72000 335.44800 L
+415.22400 344.01600 L
+322.63200 344.01600 L
+313.20000 335.44800 L
+313.20000 312.84000 L
+@c
+B
+
+@rax %Note: Object
+171.43200 309.96000 271.58400 338.40000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+177.12000 309.96000 m
+171.43200 315.64800 L
+171.43200 332.64000 L
+177.12000 338.32800 L
+265.96800 338.40000 L
+271.58400 332.64000 L
+265.96800 329.90400 L
+263.08800 332.64000 L
+177.12000 318.52800 L
+177.12000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+187.48800 108.72000 194.11200 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+194.11200 108.72000 m
+187.48800 114.40800 L
+187.48800 310.03200 L
+194.11200 315.64800 L
+194.11200 108.72000 L
+@c
+B
+
+@rax %Note: Object
+247.03200 207.93600 341.56800 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+335.88000 309.96000 m
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 207.93600 L
+257.47200 230.61600 L
+335.88000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+177.12000 309.96000 196.05600 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+196.05600 318.45600 m
+194.11200 315.64800 L
+187.48800 309.96000 L
+177.12000 309.96000 L
+177.12000 321.33600 L
+196.05600 318.45600 L
+@c
+B
+
+@rax %Note: Object
+247.03200 208.00800 271.58400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+257.47200 309.96000 m
+257.47200 230.61600 L
+247.03200 208.00800 L
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+263.08800 332.64000 L
+271.58400 332.64000 L
+271.58400 315.64800 L
+265.96800 309.96000 L
+257.47200 309.96000 L
+@c
+B
+
+@rax %Note: Object
+318.88800 309.96000 418.10400 338.32800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+324.50400 309.96000 m
+318.88800 315.64800 L
+318.88800 332.64000 L
+325.44000 338.32800 L
+411.48000 338.32800 L
+418.10400 332.64000 L
+408.60000 324.14400 L
+324.50400 318.52800 L
+324.50400 309.96000 L
+@c
+B
+
+@rax %Note: Object
+194.11200 108.72000 418.10400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+418.10400 315.64800 m
+218.66400 108.72000 L
+194.11200 108.72000 L
+194.11200 117.21600 L
+212.11200 117.21600 L
+411.48000 321.33600 L
+408.60000 332.64000 L
+418.10400 332.64000 L
+418.10400 315.64800 L
+@c
+B
+
+@rax %Note: Object
+324.50400 309.96000 343.44000 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+343.44000 318.45600 m
+341.49600 315.64800 L
+335.88000 309.96000 L
+324.50400 309.96000 L
+324.50400 321.33600 L
+343.44000 318.45600 L
+@c
+B
+
+@rax %Note: Object
+177.12000 114.40800 412.41600 332.71200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+247.03200 208.00800 m
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+265.96800 329.90400 L
+263.08800 332.71200 L
+179.92800 332.71200 L
+177.12000 329.90400 L
+177.12000 318.52800 L
+179.92800 315.72000 L
+194.11200 315.72000 L
+194.11200 117.21600 L
+197.78400 114.40800 L
+213.98400 114.40800 L
+412.41600 321.33600 L
+412.41600 329.47200 L
+409.53600 332.71200 L
+327.38400 332.71200 L
+324.50400 329.90400 L
+324.50400 318.45600 L
+327.38400 315.64800 L
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 208.00800 L
+@c
+B
+
+@rax %Note: Object
+292.89600 185.18400 326.95200 213.55200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+298.58400 207.86400 m
+305.20800 213.55200 L
+322.20000 213.55200 L
+326.95200 207.86400 L
+321.26400 190.87200 L
+314.71200 185.18400 L
+297.72000 185.18400 L
+292.89600 190.87200 L
+298.58400 207.86400 L
+@c
+B
+
+@rax %Note: Object
+304.27200 114.33600 424.22400 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+304.27200 114.33600 m
+321.33600 165.31200 L
+315.64800 165.31200 L
+321.33600 182.37600 L
+346.75200 182.37600 L
+352.44000 176.68800 L
+356.25600 176.68800 L
+361.87200 182.37600 L
+380.80800 182.37600 L
+386.49600 176.68800 L
+390.24000 176.68800 L
+395.92800 182.37600 L
+416.66400 182.37600 L
+424.22400 171.00000 L
+411.84000 130.68000 L
+417.45600 130.68000 L
+411.98400 114.33600 L
+377.92800 114.33600 L
+391.24800 154.00800 L
+382.75200 154.00800 L
+374.90400 130.82400 L
+380.52000 130.82400 L
+375.19200 114.33600 L
+341.13600 114.33600 L
+354.38400 154.00800 L
+345.88800 154.00800 L
+337.96800 130.68000 L
+343.65600 130.68000 L
+338.32800 114.33600 L
+304.27200 114.33600 L
+@c
+B
+
+@rax %Note: Object
+311.83200 120.02400 418.46400 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.07200 176.68800 m
+418.46400 170.42400 L
+404.49600 125.64000 L
+410.11200 125.64000 L
+408.24000 120.02400 L
+385.56000 120.02400 L
+398.80800 159.69600 L
+378.93600 159.69600 L
+367.63200 125.64000 L
+373.24800 125.64000 L
+371.37600 120.02400 L
+348.69600 120.02400 L
+361.94400 159.69600 L
+342.07200 159.69600 L
+330.76800 125.64000 L
+336.45600 125.64000 L
+334.51200 120.02400 L
+311.83200 120.02400 L
+328.89600 171.00000 L
+323.20800 171.00000 L
+325.08000 176.68800 L
+345.88800 176.68800 L
+351.57600 171.00000 L
+357.19200 171.00000 L
+362.88000 176.68800 L
+379.87200 176.68800 L
+385.56000 171.00000 L
+391.24800 171.00000 L
+396.93600 176.68800 L
+414.07200 176.68800 L
+@c
+B
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+318.45600 182.37600 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+F
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+S
+
+@rax %Note: Object
+274.96800 120.02400 310.89600 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+297.64800 120.02400 m
+299.52000 125.64000 L
+293.83200 125.64000 L
+310.89600 176.68800 L
+287.28000 176.68800 L
+285.33600 171.00000 L
+291.96000 171.00000 L
+274.96800 120.02400 L
+297.64800 120.02400 L
+@c
+B
+
+@rax %Note: Object
+299.52000 190.87200 320.32800 207.86400 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+316.51200 193.68000 m
+320.32800 205.05600 L
+318.45600 207.86400 L
+307.08000 207.86400 L
+303.33600 205.05600 L
+299.52000 193.68000 L
+301.46400 190.87200 L
+312.84000 190.87200 L
+316.51200 193.68000 L
+@c
+B
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel11Dict 11.0 0
+%%EOF
diff --git a/runtime/vimlogo.gif b/runtime/vimlogo.gif
new file mode 100644
index 000000000..89c4c135a
--- /dev/null
+++ b/runtime/vimlogo.gif
Binary files differ
diff --git a/runtime/vimlogo.pdf b/runtime/vimlogo.pdf
new file mode 100644
index 000000000..a9ad60ff4
--- /dev/null
+++ b/runtime/vimlogo.pdf
Binary files differ
diff --git a/runtime/vimlogo.xpm b/runtime/vimlogo.xpm
new file mode 100644
index 000000000..63e0d54b5
--- /dev/null
+++ b/runtime/vimlogo.xpm
@@ -0,0 +1,75 @@
+/* XPM */
+static char *vimlogo[] = {
+/* width height num_colors chars_per_pixel */
+" 125 60 8 1",
+/* colors */
+". c #000000",
+"# c #00007f",
+"a c #007f00",
+"b c #7f7f7f",
+"c c #00ff00",
+"d c #bfbfbf",
+"e c #ffffff",
+"f c None",
+/* pixels */
+"fffffffffffffffffffffffffffee..eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffffee.cc.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fffffffffffffffffffffffffee.cccc.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffeeeeeeeeeeeeeeeeeeee.ccaacc.eeffeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fffffee....................caaaacc.eeee...................eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffee.deeeeeeeeeeeeeeeeeeb.aaaaacc.ee.deeeeeeeeeeeeeeeeeb.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffe.dedddddddddddddddddddb.aaaaacc..dedddddddddddddddddd.beffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffe.eddddddddddddddddddddb.aaaaaacc.edddddddddddddddddddb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffe.eddddddddddddddddddddb.aaaaaaac.edddddddddddddddddddb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffe.edddddddddddddddddddbb.aaaaaaaa.eddddddddddddddddddbb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffe.bbdddddddddddddddddbbb.aaaaaaaa.bbddddddddddddddddbb.befffffffffffffffffffffffffffeeeeeffffffffffffffffffffffffffffffff",
+"ffffee.bbbbddddddddddddbbbb.aaaaaaaaaa.bbbbddddddddddddbbb.eefffffffffffffffeeeeeeeeeeeee...effffffffffffffffffffffffffffffff",
+"fffffee..beddddddddddddbbb.aaaaaaaaaaaa..dedddddddddddbbb.eeffffffffffffffffe..........ee...effffffffffffffffffffffffffffffff",
+"ffffffeee.eddddddddddddbb.aaaaaaaaaaaaa.eedddddddddddbbb.eefffffffffffffffffe..........eee..eeeeeefffeeeeeeefffffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaaaaaaa.eedddddddddddbbb.eeffffffffffffffffffe..ee..ee..efe..e....eefee.....eeffffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaaaaaa.eedddddddddddbbb.eefffffffffffffffffffe..ee..ee..efe........eee.......eefffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaaaaa.eedddddddddddbbb.eeffffffffffffffffffffe..ee..ee..efe...eee..ee..eeeee..efffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaaaa.eedddddddddddbbb.eefffffffffffffffffffffeeeee..eeeeefe..eefe..ee.........efffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaaa.eedddddddddddbbb.eeffffffffffffffffffffffffffe..efffffe..effe..ee.........efffffffffffffff",
+"ffffffffe.eddddddddddddbb.aaaaaaa.eedddddddddddbbb.eefffffffffffffffffffffffffffe..efffffe..effe..ee..eeeeeeeefffffffffffffff",
+"fffffffee.eddddddddddddbb.aaaaaa.eedddddddddddbbb.eeffffffffffffffffffffffffffeee..eeeffee..eeee..ee...eeee..efffffffffffffff",
+"ffffffee..eddddddddddddbb.aaaaa.eedddddddddddbbb.c.eefffffffffffffffffffffffffe......effe....ee....ee........efffffffffffffff",
+"fffffee.c.eddddddddddddbb.aaaa.eedddddddddddbbb.acc.eeffffffffffffffffffffffffe......effe....ee....eee......eefffffffffffffff",
+"ffffee.cc.eddddddddddddbb.aaa.eedddddddddddbbb.aaacc.eefffffffffffffffffffffffeeeeeeeeffeeeeeeeeeeeefeeeeeeeeffffffffffffffff",
+"fffee.cca.eddddddddddddbb.aa.eedddddddddddbbb.aaaaacc.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffee.ccaa.eddddddddddddbb.a.eedddddddddddbbb.aaaaaaacc.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fee.ccaaa.eddddddddddddbb..eedddddddddddbbb.aaaaaaaaacc.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ee.ccaaaa.eddddddddddddbb.eedddddddddddbbb.aaaaaaaaaaacc.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"e.ccaaaaa.eddddddddddddbbeedddddddddddbbb.aaaaaaaaaaaaacc.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"...aaaaaa.eddddddddddddbdedddddddddddbbb.aaaaaaaaaaaaaaacc.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"e.##aaaaa.eddddddddddddbedddddddddddbbb.aaaaaaaaaaaaaaaaa...effffffffffffffffeeeeeffffeeeefffffeeeeffffffffffffffffffffffffff",
+"ee.##aaaa.eddddddddddddddddddddddddbbb.aaaaaaaaaaaaaaaaa##.eeffffffffffffffffe...effffe..efffffe..effffffffffffffffffffffffff",
+"fee.##aaa.edddddddddddddddddddddddbbb.aaaaaaaaaaaaaaaaa##.eefffffffffffffffffe...effffe..efffffe..effffffffffffffffffffffffff",
+"ffee.##aa.eddddddddddddddddddddddbbb.aaaaaaaaaaaaaaaaa##.eefffeeeeeeeffffeeeeee..efeeeeeeefffeee..eeeeefffeeeeeeeffeeeeeeeeee",
+"fffee.##a.edddddddddddddddddddddbbb.aaaaaaaaaaaaaaaaa##.eefffee.....eeffee....e..efe.....efffe........effee.....eefe....e...e",
+"ffffee.##.edddddddddddddddddddd....aaaaaaaaaaaaaaaaa##.eefffee.......eeee........efe.....efffe........efee.......eee.........",
+"fffffee.#.eddddddddddddddddddd.dbb.aaaaaaaaaaaaaaaa##.eeffffe..eeeee..ee...eee...efeeee..efffeee..eeeeefe...eee...eeee...ee..",
+"ffffffee..eddddddddddddddddddd.ddb.aaaaaaaaaaaaaaa##.eefffffe.........ee..eefee..effffe..efffffe..efffffe..eefee..effe..eeeee",
+"fffffffee.eddddddddddddddddddb.bbb.aaaaaaaaaaaaaa##.eeffffffe.........ee..efffe..effffe..efffffe..efffffe..efffe..effe..effff",
+"ffffffffe.edddddddddddddddddbbb...aaaaaaaaaaaaaa##.eeeeeeeffe..eeeeeeeee..eefee..effffe..efffffe..efeeeee..eefee..effe..effff",
+"ffffffffe.eddddddddddddddddbb......aa.....aa.....#......beefe...eeee..ee...eee...eeeeee..eeeeffe..eee..ee...eee...eeee..eeeee",
+"ffffffffe.edddddddddddddddbbb.dbbb.aa.dbbb..dbbbb..dbbbb.befee........eee.........ee........effe.......eee.......eee........e",
+"ffffffffe.eddddddddddddddbbb..bdd.aaa.bdddbbdddddbbdddddb.effee......eefee....e...ee........effee....eeefee.....eefe........e",
+"ffffffffe.edddddddddddddbbb.a.ddb.aaa.ddddddddddddddddddb.efffeeeeeeeefffeeeeeeeeeeeeeeeeeeeefffeeeeeeffffeeeeeeeffeeeeeeeeee",
+"ffffffffe.eddddddddddddbbb.a.bddb.aa.bdddbbbbddddbbbbdddb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.edddddddddddbbb.aa.bdd.aaa.bddb....bddb....bdd.beffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.eddddddddddbbb.aaa.ddb.aaa.ddb.##b.ddb.eeb.ddb.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.edddddddddbbb..aa.bddb.aa.bddb.#e.bddb.ee.bddb.efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.eddddddddbbb..aaa.bdd.aaa.bdd.#ee.bdd.bee.bdd.befffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.edddddddbbb.aaaaa.ddb.aaa.ddb.eeb.ddb.eeb.ddb.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.eddddddbbb.##aaa.bddb.aa.bddb.ee.bddb.ee.bddb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.edddddbbb.e.##aa.bdd.aaa.bdd.bee.bdd.bee.bdd.beffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffe.bddddbbb.eee.##a.ddb.aaa.ddb.eeb.ddb.eeb.ddb.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffee..bbbb..eefee.#.bbbbb.a.bbbbb.e.bbbbb.e.bbbbb.effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fffffffffeeb....beefffee........a.......e.......e.......effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffeeeeeeeefffffee.##aaaa##.eeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffee.##aa##.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fffffffffffffffffffffffffee.####.eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffffee.##.eefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+"fffffffffffffffffffffffffffee..eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+};
diff --git a/runtime/vimrc_example.vim b/runtime/vimrc_example.vim
new file mode 100644
index 000000000..f69e3d690
--- /dev/null
+++ b/runtime/vimrc_example.vim
@@ -0,0 +1,81 @@
+" An example for a vimrc file.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last change: 2002 Sep 19
+"
+" To use it, copy it to
+" for Unix and OS/2: ~/.vimrc
+" for Amiga: s:.vimrc
+" for MS-DOS and Win32: $VIM\_vimrc
+" for OpenVMS: sys$login:.vimrc
+
+" When started as "evim", evim.vim will already have done these settings.
+if v:progname =~? "evim"
+ finish
+endif
+
+" Use Vim settings, rather then Vi settings (much better!).
+" This must be first, because it changes other options as a side effect.
+set nocompatible
+
+" allow backspacing over everything in insert mode
+set backspace=indent,eol,start
+
+if has("vms")
+ set nobackup " do not keep a backup file, use versions instead
+else
+ set backup " keep a backup file
+endif
+set history=50 " keep 50 lines of command line history
+set ruler " show the cursor position all the time
+set showcmd " display incomplete commands
+set incsearch " do incremental searching
+
+" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
+" let &guioptions = substitute(&guioptions, "t", "", "g")
+
+" Don't use Ex mode, use Q for formatting
+map Q gq
+
+" This is an alternative that also works in block mode, but the deleted
+" text is lost and it only works for putting the current register.
+"vnoremap p "_dp
+
+" Switch syntax highlighting on, when the terminal has colors
+" Also switch on highlighting the last used search pattern.
+if &t_Co > 2 || has("gui_running")
+ syntax on
+ set hlsearch
+endif
+
+" Only do this part when compiled with support for autocommands.
+if has("autocmd")
+
+ " Enable file type detection.
+ " Use the default filetype settings, so that mail gets 'tw' set to 72,
+ " 'cindent' is on in C files, etc.
+ " Also load indent files, to automatically do language-dependent indenting.
+ filetype plugin indent on
+
+ " Put these in an autocmd group, so that we can delete them easily.
+ augroup vimrcEx
+ au!
+
+ " For all text files set 'textwidth' to 78 characters.
+ autocmd FileType text setlocal textwidth=78
+
+ " When editing a file, always jump to the last known cursor position.
+ " Don't do it when the position is invalid or when inside an event handler
+ " (happens when dropping a file on gvim).
+ autocmd BufReadPost *
+ \ if line("'\"") > 0 && line("'\"") <= line("$") |
+ \ exe "normal g`\"" |
+ \ endif
+
+ augroup END
+
+else
+
+ set autoindent " always set autoindenting on
+
+endif " has("autocmd")